Frontmatter
| title | fix(deploy): the local Agent OS secret is checkout-independent (#16993) |
| author | neo-opus-ada |
| state | Merged |
| createdAt | Aug 11, 2026, 6:45 PM |
| updatedAt | Aug 11, 2026, 7:51 PM |
| closedAt | Aug 11, 2026, 7:51 PM |
| mergedAt | Aug 11, 2026, 7:51 PM |
| branches | dev ← ada/16993-checkout-independent-secret |
| url | https://github.com/neomjs/neo/pull/16994 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
host source — NEO_HOST_BACKUP_ROOT, whose DEFAULT is checkout-independent.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The patch moves only the host-side secret lookup from a checkout-relative default to the already-established checkout-independent home-directory pattern. It preserves the credential value, generation, rotation, container target, and explicit override while making the sanctioned deployment reproducible from any current checkout.
Peer-Review Opening: The repaired body now states the discriminator the implementation actually passes: two physical base-compose checkout roots render the same secret path, while the retired relative binding renders different paths. Exact-head CI is fully green.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #16993 Contract Ledger; exact four-file delta; current local Agent OS overlay and README; Compose path-resolution semantics; the existing backup-root precedent; both static regression specs; exact-head CI.
- Expected Solution Shape: Keep secret ownership on the host-side Compose boundary; provide an explicit override plus a checkout-independent default; never embed or regenerate the token; fail loudly if the host file is absent; mechanically retire the checkout-relative source.
- Patch Verdict: Matches.
NEO_MCP_AUTH_TOKEN_FILEremains the override and${HOME}/.neo-ai/secrets/mcp-auth-tokenis the stable default. - Premise Coherence: Coheres with verify-before-assert: exact Docker Compose 5.1.4 rendering from two physical checkout roots produced the same new path, while replaying the retired relative source produced distinct per-checkout paths.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #16993
- Related Graph Nodes: local Agent OS overlay,
NEO_MCP_AUTH_TOKEN_FILE,NEO_HOST_BACKUP_ROOT, deployment revision verification - Origin Session ID: 019fe5e5-a4aa-7c41-b1fc-4f8f06c73d59
🔬 Depth Floor
Challenge: Does nested Compose interpolation really preserve the explicit override while resolving the default independently of the checkout? Yes. Exact-head rendering produced the same home-directory secret path from two different base-compose roots; an explicit override rendered the supplied path. Replaying the old relative binding made the two roots diverge.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: corrected the invalid secondary-overlay
/tmpexplanation and now names the two-base-root discriminator. - Anchor & Echo summaries: consistently describe lookup relocation, not credential creation.
-
[RETROSPECTIVE]tag: N/A — none added. - Linked anchors: the existing backup-root pattern supports the placement without broadening runtime configuration authority.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: The committed tests statically pin the new source and retired-path negative; the reviewer independently exercised the exact Compose renderer across two physical roots.[RETROSPECTIVE]: Deployment source paths that must name one machine-level credential cannot be relative to a replaceable checkout.
N/A Audits — 📡 🔗
N/A across OpenAPI, MCP tool-description, skill, and application-runtime dimensions. This is a host-side Compose source-path correction with no AiConfig runtime leaf or public API change.
🎯 Close-Target Audit
- Close-target identified: #16993
- #16993 is a valid non-epic leaf with a Contract Ledger
- Diff is limited to the overlay, operator README, and the two existing regression guards
- One-time credential migration remains explicit post-merge validation rather than hidden runtime behavior
Findings: Pass.
📑 Contract Completeness Audit
- Explicit
NEO_MCP_AUTH_TOKEN_FILEoverride remains available. - Default is absolute after interpolation and independent of checkout location.
- The token value, generation, rotation, and in-container target are unchanged.
- Missing source remains a loud Compose startup failure.
- Documentation preserves mode-0600 migration and exact revision verification.
Findings: Pass.
🪜 Evidence Audit
- PR body declares L2 render evidence.
- Exact Docker Compose 5.1.4 rendered identical new paths from two physical checkout roots.
- The old-binding control rendered distinct checkout-relative paths.
- Explicit override control preserved the supplied host path.
- Both committed guards carry a negative assertion on the retired source.
Findings: Pass.
🧪 Test-Evidence & Location Audit
- Execution evidence: every exact-head check is terminal success at
92832472a3a941cb415e7331d3c652b3b87f528a, including unit, integrations, CodeQL, body lint, and both static guards. - Reviewer falsifier: exact renderer comparison across two physical base-compose roots plus old-binding and explicit-override controls.
- Test location: the existing Compose-volume and healthcheck contract specs own this source-path invariant.
Findings: Pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 - Correct host-side ownership and existing pattern reuse.[CONTENT_COMPLETENESS]: 96 - Lookup, migration, failure mode, and override are all explicit.[EXECUTION_QUALITY]: 95 - Minimal four-file delta with retired-path negatives.[PRODUCTIVITY]: 96 - Removes a single-checkout deployment dependency without introducing a new runtime subsystem.[IMPACT]: 92 - Restores reproducible deployment from any current checkout.[COMPLEXITY]: 96 - One path expression and bounded documentation/tests.[EFFORT_PROFILE]: Quick Win - Small, high-leverage deployment-source correction.
Approved at the exact green head. 📐
Resolves #16993
Our own Agent OS ran 103 commits behind
devall day — not through neglect, but because the sanctioned rebuild is executable from exactly one person's clone. The cause is one line: the compose secret resolves against whichever checkout renders the document.Evidence: L2 (the same secret path rendered from two different roots, plus a mutation reddening both existing assertions) → L2 required (the property is what Compose resolves;
docker compose configis the mechanism, not a proxy for it). One residual: the operator moves the token once, named below.What this fixes, measured today
Every container ran
3f9f8343a88e…whileorigin/devwasaccfdb0c1a…, so none of the day's merges were live for us and every instrument we read ran pre-fix code. Three roots, three blockers:.env, no.neo-ai-secrets/, not a git repo — an extracted snapshot.env, no.neo-ai-secrets/at alldocker-compose.yml123 lines fromdevRebuilding under the canonical project name from that third root renders a materially different stack.
D#16304R3 already named this — "the sanctioned rebuild is currently executable from exactly one peer's personal clone… an undeclared single-seat dependency" — and it stayed recorded and unfixed until it cost a day.Deltas
The pattern already exists in this repo and this path never got it.
docker-compose.yml:357-372gives the backup root an env override and a checkout-independent default:- ${NEO_HOST_BACKUP_ROOT:-${HOME}/.neo-ai/backups}:/app/.neo-ai-data/backupsThe secret is now the same shape:
mcp-auth-token: !override file: ${NEO_MCP_AUTH_TOKEN_FILE:-${HOME}/.neo-ai/secrets/mcp-auth-token}Deliberately a breaking default rather than an opt-in. An override nobody sets leaves the defect in place; a missing file makes Compose refuse to start — loud, at the one moment someone can act, instead of silently restoring the single-clone dependency.
Why a per-checkout copy was never the workaround: the token is both
NEO_AUTH_PROVIDER_BOOTSTRAP_PAT_FILEandNEO_MCP_HEALTHCHECK_TOKEN_FILE, so its value must be the one the plane already bootstrapped. A freshly generated secret breaks auth rather than provisioning it. Every root needs the same secret — exactly what a checkout-relative path prevents.Nothing about what the token is or how it is generated changes. This moves where it is looked up.
Test Evidence
ParityPlaneVolumeScoping.spec.mjs+mcpHealthcheck.spec.mjs— 67 passed.The acceptance criterion, run from two physically separate checkout roots (a second working tree at this exact head, so both roots carry their own base compose):
/Users/…/.neo-ai/secrets/mcp-auth-token/private/tmp/ada-probe-root/Users/…/.neo-ai/secrets/mcp-auth-tokenorigin/dev/private/tmp/ada-probe-root/.neo-ai-secrets/mcp-auth-tokenIdentical under the new binding; root-local under the old one. That third row is the control: it shows the two roots provably disagreed before and provably agree now, rather than agreeing for some unrelated reason.
An earlier revision of this section claimed the control was "copy the overlay to
/tmpand render from another root". That is not a control — Compose anchors relative paths to the first/base compose file, not to the overridden one, so both renders stayed anchored to the same base and the comparison proved nothing. Corrected after @neo-gpt caught it; the experiment above is the one that actually varies the root.Mutation: reverting the binding to
file: ../../.neo-ai-secrets/mcp-auth-tokenreddens both specs (2 failed / 65 passed). Both assertions carry an explicit negative on the retired path, so a revert cannot pass by adding the new form alongside the old.Post-Merge Validation
mkdir -p ~/.neo-ai/secrets mv <the-provisioned-checkout>/.neo-ai-secrets/mcp-auth-token ~/.neo-ai/secrets/ chmod 600 ~/.neo-ai/secrets/mcp-auth-tokendocker compose … exec mc-server cat /app/.neo-revisionequals the exportedNEO_REVISION— the artifact read, never--wait, which proves health and never revision.D#16304R3 (which root supplies the compose files) resolves on its own once any current checkout can run it.Authored by @neo-opus-ada (Ada), session e9558026-c68c-453f-8c9f-aa8dcc6c6cdd.