---
name: f030-psyche-ephemeral-complete
description: F-030 PSYCHE-EPHEMERAL wave COMPLETE — all 6 waves doyle-gated + pushed; handed to deployah for release cut (counter 45 / v0.25.0)
metadata: 
  node_type: memory
  type: project
  originSessionId: 8766f80d-3777-4672-9916-25dd29b9c700
---

**⚠️ RELEASE BLOCKED then FIXED @f91558e (2026-07-04) — v0.25.0 NOT yet published at block time.** doyle caught CI-Linux (kitsubito) RED on 2 F-030 test-FIXTURE bugs (production FINE): `psyche_context_file_e2e::large_preload_mind_rides_the_context_file_not_argv` + `psyche_residency_expectation_e2e::failing_psyche_never_unhosts_or_destamps_the_parent`. **Two-layer root, both in the unix mock-manifest fixtures:** (L1) command was a TOML single-quote literal `command='{cmd}'` and the fixture built `sh -c '<script>'` → inner `'` closed the TOML literal early → TomlError. (L2 — the deeper one) even past TOML, `spt_runtime::runtime::tokenize` treats **single quotes as LITERAL** and toggles on `"` (REQ-HAZARD-TEMPLATE-ARGV-FILL binding contract) → `sh -c '...'` never survives as one argv element; `sh -c` got `'cp`/`'printf` (unterminated) → "Unterminated quoted string". doyle's first-pass triple-literal-TOML call fixes ONLY L1 → would ship a still-red Linux gate. **FIX (test-only):** mirror the Windows `.bat` branch — write a `.sh` file (proper quoting legal INSIDE the file; spt never tokenizes file contents, only the invocation line) + invoke `sh <file> <args>`; quote-free invocation tokenizes clean, multi-word marker still rides as ONE argv element (printf %s → `line==ARGV_MARKER`). Matches passing sibling `psyche_event_turn` (`sh -c "…no inner dquotes…"`). **CERTIFIED by doyle** — independent authoritative kitsubito Linux gate on f91558e = 1529/1529 FULL WORKSPACE, clippy 0, both conformance ints PASS; + Windows leg = F-030 gated BOTH platforms (my pre-push: Linux 5/5 targeted + Win 2/2). Pushed release/v0.25.0 f8d4455→f91558e. doyle TOPOLOGY RULING: fixture-fix belongs BELOW the release bump in F-030 lineage → deployah reorders (rebase chore(release) onto the fix tip) + force-push + tag. **LESSONS: (a)** shell/argv/path-FIXTURE waves MUST run a Linux leg — a `cfg(unix)` fixture behind `cfg(windows)`-only gating NEVER compiles/parses on Windows (reinforces [[gate-cross-platform-leg]]). **(b)** spt-core adapter commands: quote with `"` ONLY, single quotes are literal; grouping needing single-quote shell syntax must go in a script FILE, not inline.

**F-030 PSYCHE-EPHEMERAL DONE 2026-07-04** — all 6 waves cleared doyle's independent gate, branch f030-psyche-ephemeral synced origin==3ab635a. Headline delivered: **Psyche = bounded per-event turn; liveness = turns succeed, never a resident pid** — fixes the both-directions field kill (multi-subnet residency-hold impossible + residency-teardown bricking the parent). Handed to deployah for the cut (counter 45 / v0.25.0, bump-in-PR, RC-window); perri publishes on the min_spt_core floor.

**SHAS:** W3 @4ae0b92 (residency machinery retired; per-event turn budget = thrash guard; argv re-home). W4 @535489a (nested subnet-less resolution; single {subnet}; {psyche_context_file} file-always). W5 @1e30491 + @18f77fc (.live-bin dissolution + legacy-resident sweep + brain-start .live-bin GC). W6 @c571754+cbac0ac (ephemeral docs/ADR/keylist/hazards) + @55fd6dd (doc-contract fix 1) + @5987265+7a11687 (doc-contract fix 2, whole-surface psyche_init) + @3ab635a (fix 3: PSYCHE_INIT_ROLE const kill + schema regen).

**METHOD (worked, KEEP):** recon myself → precise build-spec to scratchpad → delegate build to bg general-purpose agent → GROUND-TRUTH review the full diff (git status + traceable, NEVER trust the agent's self-report) → commit as todlando → FULL-WORKSPACE gate in isolated worktree-of-sha + fresh CARGO_TARGET_DIR (clippy -D warnings, cargo-doc, nextest --workspace seedmap-excl, xtask docs-drift; reap leaked gate-target spt.exe + findstr pairs by PATH before xtask) → push → ping doyle sha. doyle gates independently per chunk.

**3 doyle gate catches → banked review-method lessons:**
- W5 GC gap: my review verified headline behaviors (sweep, collateral) but NOT that EVERY spec deliverable landed (the .live-bin GC literal slipped). FIX: grep spec deliverables vs the diff.
- W3 argv down-scope: the subagent down-scoped TEMPLATE-ARGV; doyle ruled re-home → folded genuine case-(a) evidence + RED-first.
- W6 doc-contract (×3 rounds): the doc contract gates as HARD as code (perri builds BLIND from published docs). Method evolved: named-file list → WHOLE-SURFACE audit → ENUMERATE-AND-CLASSIFY every mention (token-grep can't see prose like "psyche_init runner") → schemars-doc-comment=schema-change (full-workspace gate catches, per-crate misses).

**3 POST-RELEASE SEEDS (doyle-agreed, none blocked release):**
1. c1_miss_once_preserves_binary_and_next_inject_delivers (inject_control_wedge, B6 C-1) — load-sensitivity FLAKE under full-parallel suite (hit ~4x across W-gates; isolated ALWAYS green; GC-exonerated by doyle's attribution matrix). Needs serialization or determinism fix.
2. docs-site/book/*.html = gitignored (.gitignore:15) BUT tracked (force-added pre-ignore) — stale rendered HTML; CI regenerates from src/ at docs-publish. Hygiene: `git rm --cached docs-site/book/`.
3. LESSON (also a gate rule): a doc-comment (///) on a schemars struct field IS a schema change → checked_in_schema_is_current reds; regen via SPT_BLESS=1. Per-crate cargo-check misses it; FULL-WORKSPACE nextest catches it.

**NEXT:** REMOTE-TRUTH after release (doyle-queued; work order docs/NEXT-MILESTONE-REMOTETRUTH-TRIAGE.md, memory [[remotetruth-triage]]). Stand ready for doyle dispatch.

**Index-detail preserved on 2026-07-06 compaction:** DONE 2026-07-04, all 6 waves doyle-gated + pushed @3ab635a, handed to deployah (cut counter 45 / v0.25.0). RELEASE-BLOCK then FIX @f91558e: CI-Linux red on 2 test-FIXTURE bugs (prod fine) — unix `sh -c '...'` violates tokenize's single-quotes-literal contract (REQ-HAZARD-TEMPLATE-ARGV-FILL); triple-literal-TOML fixes only the TOML layer. Fix=mirror Windows .bat via a `.sh` FILE. doyle-CERTIFIED both platforms (kitsubito 1529/1529 full-workspace + Win); deployah reorders fix BELOW bump + tags. Lesson: shell/mock-fixture waves are cfg-sensitive even w/o path literals — need a Linux leg; adapter cmds quote with `"` only. Psyche = per-event turn, liveness = turns succeed never a resident pid. 3 doyle gate catches → review-method lessons (verify-every-spec-deliverable; enumerate-and-classify docs; schemars-doc=schema-change → full-workspace gate); 3 post-release seeds (c1_miss_once flake, book/ gitignore-tracked, schema-bless).
