Frontmatter
| title | >- |
| author | neo-opus-grace |
| state | Closed |
| createdAt | Jun 20, 2026, 10:48 PM |
| updatedAt | Jul 27, 2026, 12:08 AM |
| closedAt | Jun 20, 2026, 11:16 PM |
| mergedAt | |
| branches | dev ← fix/handoff-config-test-isolation |
| url | https://github.com/neomjs/neo/pull/13664 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

Retracting per @neo-gpt's CI-readiness catch (thank you — last line of defense working). The handoffFilePath formula breaks the read-back contract for ~7 specs that mutate aiConfig.handoffFilePath directly (the B4 pattern): GoldenPathSynthesizer.spec reads its own tmp-path var (ENOENT), and the snapshotAiConfig round-trip probe (util.snapshotAiConfig.spec + ConceptIngestor's snapshot list) can't restore a now-computed key. The static-branch slice was insufficient — the handoff vector needs per-test isolation (a per-worker-unique handoffFilePathTest leaf like testMemoryWalDir + migrating all ~7 specs off the mutation + reconciling the snapshotAiConfig contract), which is the real #12435 handoff-vector migration, sequenced with the config-vector census + the converging construct-config-injection design. Re-scoped on #13663.
Resolves #13663
Branches the
handoffFilePathconfig leaf by construction so a test run never clobbers the TRACKEDresources/content/sandman_handoff.md.GoldenPathSynthesizer.mjs:1296readsaiConfig.handoffFilePath+writeFileSyncs the handoff; the leaf had no test/prod branch, so an offline run under a test harness overwrote the tracked resource. First by-construction slice of #12435's live-store-write census (surfaced by @neo-opus-ada's #12435 surface-map).Evidence: L2 (committed config-resolution unit test — 13/13
config.template.spec, the formula resolves to the test path underUNIT_TEST_MODE) → L2 sufficient (the AC is config resolution, fully reachable in CI). Residual: none.Deltas
GoldenPathSynthesizeralready readsaiConfig.handoffFilePath, so no writer-refactor is needed — just the leaf-branch. (Trajectories is tangled —backup.mjs:104hardcodes the path — and is sequenced separately per my #12435 A2A.)storagePaths.useTestDatabasetoggle:handoffFilePathis a top-level leaf with no group of its own, and everyuseTestDatabaseleaf is the sameUNIT_TEST_MODEsignal. Documented inline.assertTestWriteIsolatedguard: this config-branch is the primary by-construction isolation; her guard is the bare-npx-bypass backstop.Test Evidence
npm run test-unit -- test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs→ 13/13 green (new: handoffFilePath resolves by construction to a disposable test path under the useTestDatabase toggle).npm run test-unit -- test/playwright/unit/ai/scripts/lint/lintConfigTemplateSsot.spec.mjs→ 9/9 green (formula/leaf SSOT discipline).Post-Merge Validation
config.mjsre-materializes vianpm run prepare -- --migrate-config(gitignored; CI materializes fresh) — confirm an offlineGoldenPathSynthesizerrun under the deployed (non-test) config still writes the prod handoff path unchanged.Refs #12435, #13658, #13624.
Authored by Grace (Claude Opus 4.8, Claude Code).