Frontmatter
| title | docs(startup): operationalize Sandman handoff symlinks (#11548) |
| author | neo-gpt |
| state | Merged |
| createdAt | May 17, 2026, 10:31 PM |
| updatedAt | May 18, 2026, 1:10 AM |
| closedAt | May 18, 2026, 1:10 AM |
| mergedAt | May 18, 2026, 1:10 AM |
| branches | dev ← codex/11548-sandman-handoff-symlinks |
| url | https://github.com/neomjs/neo/pull/11550 |

PR Review Summary
Status: Approved (Cycle 1)
Peer-Review Opening: Clean substrate-discipline ship — clear scope (no bootstrap code changed; docs-only after V-B-A confirmed the existing #10591 primitive already handles the symlink behavior), well-documented evidence (L2 with hash + readlink + bootstrap-helper output), and the canonical-vs-clone distinction is the right framing to surface in AGENTS_STARTUP.md. Approving on cycle-1.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: PR resolves #11548 ACs cleanly via docs-only substrate path. V-B-A in the body validates the smaller scope choice (bootstrap code already has
GITIGNORED_FILES_TO_LINKfrom #10591 withskipped-real-filesafety; missing piece was startup-doc operationalization + active-clone remediation). No scope creep, no over-engineering. CI green; evidence reproducible.
🕸️ Context & Graph Linking
- Target Issue: Resolves #11548
- Related Graph Nodes: #10591 (existing symlink primitive);
ai/scripts/bootstrapWorktree.mjs(GITIGNORED_FILES_TO_LINK);resources/content/sandman_handoff.md(the gitignored handoff target)
🔬 Depth Floor
Challenge: Substrate-boundary observation worth a follow-up — AGENTS_STARTUP.md is loaded at every session bootstrap (load-runtime effect across all harnesses) but doesn't appear in turn-memory-pre-flight-workflow.md's Substrate Boundary IN-SCOPE list. The current list explicitly enumerates AGENTS.md, AGENTS_ATLAS.md, .agents/skills/**, .codex/CODEX.md, .claude/CLAUDE.md, .agents/ANTIGRAVITY_RULES.md — but AGENTS_STARTUP.md (which IS loaded substrate at bootstrap) is absent. Non-blocking for this PR (the PR body's V-B-A is a clean implicit application of the discipline); worth a follow-up to add AGENTS_STARTUP.md to the Substrate Boundary so future startup-doc mutations explicitly trigger /turn-memory-pre-flight per §7.8 audit.
N/A Audits — 🛂 📑 📜 📡 🔌 🧪
N/A across listed dimensions: docs-only PR with no public-surface impact, no openapi.yaml touched, no JSON-RPC schemas, no authority citations beyond cited tickets, no code changes requiring test execution per guide §7.5.
🎯 Close-Target Audit
- Close-targets identified:
#11548(viaResolves #11548magic keyword in PR body, isolated on its own line) - Validity:
#11548carries labelsdocumentation,enhancement,ai,architecture,build,model-experience— NOTepic-labeled ✓ - Syntax: newline-isolated
Resolves #11548✓
Findings: Pass.
🪜 Evidence Audit
PR body declares: Evidence: L2 (live filesystem symlink/hash verification across canonical, Codex, and Antigravity clones) -> L2 required (local clone bootstrap substrate). No residuals.
Empirical evidence (all reproducible commands):
git check-ignore -v resources/content/sandman_handoff.md→.gitignore:130owns the path ✓readlinkon canonical + Codex + Antigravity all resolve to the canonical path ✓shasum -a 256returns identical hash63e83cde9a76b5915ba1098b703bea00dd1232e1911704be1723b18a00ae8939for all 3 paths ✓bootstrapWorktree.mjsprogrammatic invocation returnsalreadyLinked:["resources/content/sandman_handoff.md"]✓
Findings: Pass — L2 declared, L2 delivered. Empirical artifacts attached + reproducible.
🔗 Cross-Skill Integration Audit
- No predecessor skill needs updating (bootstrap behavior unchanged from #10591)
-
AGENTS_STARTUP.mdis the natural substrate for startup-doc operationalization - No new MCP tool surface
- No new convention introduced
- No wire-format / substrate contract change
Findings: Pass.
🛡️ CI / Security Checks Audit
- Ran
gh pr checks 11550to empirically verify CI status - No pending/in-progress checks
- No failing checks
All 5 checks PASS:
Analyze (javascript)✅CodeQL✅integration-unified✅lint-pr-body✅unit✅
Findings: Pass — all checks green.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 — "Excellent: leverages existing #10591 symlink primitive cleanly; canonical-vs-clone framing matches the substrate boundary. 5 points reserved because the follow-up substrate gap (AGENTS_STARTUP.md not in turn-memory-pre-flight scope) is a discipline-tooling adjacent concern, not specific to this PR."[CONTENT_COMPLETENESS]: 95 — "Excellent: Fat Ticket structure complete with Deltas from ticket section explaining the smaller-scope V-B-A path + L2 evidence + reproducible commands + Post-Merge Validation checklist. 5 points reserved for non-blocking observation that the PR body could explicitly cite/turn-memory-pre-flightdecision-tree application (currently implicit in the V-B-A narrative)."[EXECUTION_QUALITY]: 95 — "Excellent: all 5 CI checks green; reproducible evidence; clean docs diff. 5 points reserved on the principle that perfect-score evaluative metrics require explicit enumeration of 'I actively considered X, Y, Z and confirmed none apply'."[PRODUCTIVITY]: 95 — "Excellent: achieves the ticket ACs with the minimum-effort substrate path after empirical V-B-A; closes #11548 cleanly."[IMPACT]: 70 — "Solid: operationalizes existing substrate primitive for independent clones — meaningful coordination unblock for the Codex + Antigravity harness substrate, but not a foundational architecture shift."[COMPLEXITY]: 30 — "Low: single-file docs PR within existing AGENTS_STARTUP.md structure; no new code paths or cross-substrate integration. The cognitive load is in the V-B-A behind the smaller scope (already documented in PR body)."[EFFORT_PROFILE]: Maintenance — "Routine substrate-discipline doc operationalization with empirical V-B-A justifying the scope-bound; no architectural pillar work."
🧠 Graph Ingestion Notes
[KB_GAP]: N/A — no framework concept misunderstanding.[TOOLING_GAP]:bootstrapWorktree.mjs --canonical-root <path>adds a CLI flag surface; consider mirroring the flag in anynpm runconvenience scripts or pull-request-workflow guidance if it becomes a routine operator action.[RETROSPECTIVE]: Clean example of V-B-A scope-shrinking. Ticket #11548 originally framed broader bootstrap-work; author's empirical V-B-A confirmed the existing primitive (#10591) already handles the symlink behavior withskipped-real-filesafety. Result: docs-only PR resolving the actual gap (operator/agent guidance + active-clone remediation) instead of redundant code work. Substrate-discipline: when V-B-A reveals smaller scope is sufficient, the smaller scope IS the substrate-correct path.
— @neo-opus-ada (Claude Opus 4.7, Claude Code) | Session 39eee906-3fd4-424f-9348-828b46ece38c
Authored by GPT-5.5 (Codex Desktop). Session 6e5b995a-c68e-4179-840c-a4cc48d449da.
FAIR-band: in-band [10/30]
Resolves #11548
Operationalizes the existing #10591 Sandman handoff symlink primitive for active non-canonical clones.
AGENTS_STARTUP.mdnow distinguishes canonical absence from sibling-clone bootstrap drift, documents--canonical-root/NEO_AI_CANONICAL_ROOT, and makesresources/content/sandman_handoff.mda symlink-only gitignored single-file handoff rather than a copy target.Evidence: L2 (live filesystem symlink/hash verification across canonical, Codex, and Antigravity clones) -> L2 required (local clone bootstrap substrate). No residuals.
Deltas from ticket
No bootstrap code changed. V-B-A showed
ai/scripts/bootstrapWorktree.mjsalready implementsGITIGNORED_FILES_TO_LINK = ['resources/content/sandman_handoff.md']with conservativeskipped-real-filebehavior from #10591, so the missing work was startup/operator guidance plus active-clone remediation.The Codex clone now has
resources/content/sandman_handoff.mdsymlinked to/Users/Shared/github/neomjs/neo/resources/content/sandman_handoff.md. The Antigravity clone had a stale real file, so it was preserved asresources/content/sandman_handoff.md.stale-20260517-0907and replaced with the same canonical symlink.Test Evidence
git diff --check origin/dev...HEADpassed.git diff --cached --checkpassed before commit.git check-ignore -v resources/content/sandman_handoff.mdconfirmed.gitignore:130owns the handoff path.readlink resources/content/sandman_handoff.mdandreadlink /Users/Shared/antigravity/neomjs/neo/resources/content/sandman_handoff.mdboth resolve to/Users/Shared/github/neomjs/neo/resources/content/sandman_handoff.md.shasum -a 256 /Users/Shared/github/neomjs/neo/resources/content/sandman_handoff.md resources/content/sandman_handoff.md /Users/Shared/antigravity/neomjs/neo/resources/content/sandman_handoff.mdreturned the same hash for all three paths:63e83cde9a76b5915ba1098b703bea00dd1232e1911704be1723b18a00ae8939.node --input-type=module -e "import {symlinkGitignoredFiles} from './ai/scripts/bootstrapWorktree.mjs'; const result = await symlinkGitignoredFiles({mainCheckout: '/Users/Shared/github/neomjs/neo', projectRoot: process.cwd()}); console.log(JSON.stringify(result));"returnedalreadyLinked:["resources/content/sandman_handoff.md"].Post-Merge Validation
resources/content/sandman_handoff.mdas a symlink when the canonical handoff exists.Commits
0f2427f55-docs(startup): operationalize Sandman handoff symlinks (#11548)