Resolves #13960
Adds a canonical orchestrator state/log read alias for non-canonical checkouts while preserving the existing safety blocklist for daemon process-control directories. orchestrator-daemon/ and embed-daemon/ remain clone-local; bootstrapWorktree.mjs --link-data now exposes .neo-ai-data/orchestrator-daemon-canonical/ for diagnostics so agents do not inspect an empty clone-local daemon directory and infer stale/failed scheduler state.
Evidence: L2 (npm run test-unit -- test/playwright/unit/ai/scripts/migrations/bootstrapWorktree.spec.mjs, git diff --check, staged block-alignment check, and pre-commit hooks) -> L2 required (bootstrap filesystem behavior plus docs/runbook contract). Residual: none for #13960.
Deltas from ticket
Directly symlinking .neo-ai-data/orchestrator-daemon/ was rejected because that path is the daemon's live PID/state/log directory. The implementation uses a separate orchestrator-daemon-canonical/ alias so diagnostics can read the root SSOT without making secondary checkouts participate in the canonical singleton's process-control directory.
Slot Rationale
AGENTS_STARTUP.md: disposition keep. The startup bootstrap paragraph already owns bootstrapWorktree.mjs --link-data expectations; the added sentence prevents future sessions from applying the obvious-but-unsafe direct symlink fix.
learn/agentos/... runbook docs: disposition keep. These are operator incident references, not per-turn global rules; the edits correct stale commands that previously pointed at clone-local state during root-daemon forensics.
Test Evidence
npm run test-unit -- test/playwright/unit/ai/scripts/migrations/bootstrapWorktree.spec.mjs -> 50 passed.
git diff --check -> passed.
node buildScripts/util/check-block-alignment.mjs --staged -> passed.
- Commit pre-flight hooks passed: whitespace, shorthand, AiConfig test mutation, JSDoc types, ticket archaeology, block alignment.
Post-Merge Validation
Commits
cf176ee914 — fix(ai): expose canonical orchestrator state alias (#13960)
Authored by Euclid (GPT-5, Codex Desktop). Session 019ef378-527d-7393-bc74-ec3a1d3f2ddf.
Resolves #13960
Adds a canonical orchestrator state/log read alias for non-canonical checkouts while preserving the existing safety blocklist for daemon process-control directories.
orchestrator-daemon/andembed-daemon/remain clone-local;bootstrapWorktree.mjs --link-datanow exposes.neo-ai-data/orchestrator-daemon-canonical/for diagnostics so agents do not inspect an empty clone-local daemon directory and infer stale/failed scheduler state.Evidence: L2 (
npm run test-unit -- test/playwright/unit/ai/scripts/migrations/bootstrapWorktree.spec.mjs,git diff --check, staged block-alignment check, and pre-commit hooks) -> L2 required (bootstrap filesystem behavior plus docs/runbook contract). Residual: none for #13960.Deltas from ticket
Directly symlinking
.neo-ai-data/orchestrator-daemon/was rejected because that path is the daemon's live PID/state/log directory. The implementation uses a separateorchestrator-daemon-canonical/alias so diagnostics can read the root SSOT without making secondary checkouts participate in the canonical singleton's process-control directory.Slot Rationale
AGENTS_STARTUP.md: disposition keep. The startup bootstrap paragraph already ownsbootstrapWorktree.mjs --link-dataexpectations; the added sentence prevents future sessions from applying the obvious-but-unsafe direct symlink fix.learn/agentos/...runbook docs: disposition keep. These are operator incident references, not per-turn global rules; the edits correct stale commands that previously pointed at clone-local state during root-daemon forensics.Test Evidence
npm run test-unit -- test/playwright/unit/ai/scripts/migrations/bootstrapWorktree.spec.mjs-> 50 passed.git diff --check-> passed.node buildScripts/util/check-block-alignment.mjs --staged-> passed.Post-Merge Validation
node ai/scripts/migrations/bootstrapWorktree.mjs --link-data --canonical-root <canonical-checkout>and verify.neo-ai-data/orchestrator-daemon-canonical/orchestrator-state.jsonresolves to the root checkout while.neo-ai-data/orchestrator-daemon/remains a normal local directory.Commits
cf176ee914—fix(ai): expose canonical orchestrator state alias (#13960)Authored by Euclid (GPT-5, Codex Desktop). Session 019ef378-527d-7393-bc74-ec3a1d3f2ddf.