Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Merged |
| createdAt | Jun 2, 2026, 4:55 PM |
| updatedAt | Jun 2, 2026, 5:39 PM |
| closedAt | Jun 2, 2026, 5:39 PM |
| mergedAt | Jun 2, 2026, 5:39 PM |
| branches | dev ← claude/cloud-deploy-docs-hardening-12381 |
| url | https://github.com/neomjs/neo/pull/12386 |

PR Review Summary
Status: Approve+Follow-Up
Cycle-1 reviewers: run §9.0 Premise Pre-Flight BEFORE composing Required Actions. If any structural trigger fires (premise-invalid / upstream-not-graduated / author-bypassed / anti-pattern / strategic-misalignment / better-existing-substrate / source-ticket-stale/currency-risk), default to Drop+Supersede framing — single-item close-recommendation, NOT multi-item iteration list.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve+Follow-Up
- Rationale: Approve+Follow-Up because the PR resolves #12381 as a focused docs-hardening sub while preserving the dependency on #12385 for
ClientAuthentication.md. The missing link on this branch is intentional merge-order coupling, not an author-side change request.
Peer-Review Opening: This lands the right artifact for the first-deployment friction lane: a troubleshooting ladder that operators can scan by error signature, with Day0 kept as the happy path and only the genuine Colima gap added there.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12381
- Related Graph Nodes: #12377, #12380 / PR #12385, #12371, cloud-deployment, Day0, MCP StreamableHTTP, proxy identity, GitLab-PAT
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
Documented search: I actively looked for (1) whether #12381 was epic-labeled, (2) whether Day0 already covered the redeploy/handoff and compose/sync items the PR chose not to duplicate, and (3) whether the new troubleshooting claims map to actual config/source surfaces (NEO_PUBLIC_URL, NEO_MCP_ALLOWED_HOSTS, trustProxyIdentity, mcpHealthcheck.mjs --url, Mcp-Session-Id, and Accept: application/json, text/event-stream). I found no blocking concerns.
Rhetorical-Drift Audit (per guide §7.4):
Verify symmetry between stated framing and mechanical implementation:
- PR description: framing matches what the diff substantiates (no overshoot)
- Anchor & Echo summaries: N/A — no code/JSDoc anchor changes
-
[RETROSPECTIVE]tag: N/A — no retrospective tag in this docs PR - Linked anchors: #12371/#12383/#12385/#12380 dependency framing is consistent with the docs surface and PR body
Findings: Pass. I did not independently replay the external deployment session transcript, so I am treating the “surfaced empirically this session” provenance as author-sourced; the technical troubleshooting content itself was source-checked locally.
🧠 Graph Ingestion Notes
[KB_GAP]: Current KB retrieval is still behind the in-flight cloud-auth docs and PAT-mode work; reviewers should source-check against the PR branches and repo files until #12383/#12385/#12386 land.[TOOLING_GAP]: No docs link checker caught the intentionally missingClientAuthentication.mdlink on this branch; merge ordering must carry that guard.[RETROSPECTIVE]: A troubleshooting ladder is the correct shape for multi-layer deployment friction: each error signature names the cleared layer and the next fix instead of spreading one-off notes through Day0.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: #12381
- For each
#N: confirmed notepic-labeled
Findings: Pass — gh issue view 12381 returned labels enhancement and ai, no epic.
📑 Contract Completeness Audit
- Originating ticket (or parent epic) contains a Contract Ledger matrix
- Implemented PR diff matches the Contract Ledger exactly (no drift)
Findings: Pass. The new Troubleshooting.md covers the connect-error ladder, Caddy rebuild, network-internal ports, auth-layer distinction, test-vs-production profile, outside-handshake curl, empty-KB gap, and GET /health current absence. Day0Tutorial.md adds the Colima bind-mount gap and cross-links the troubleshooting page. Existing Day0 content already covers the compose-plugin, one-shot sync, project naming, and Milestone 7 redeploy/handoff checklist, so the PR's non-duplication choice is correct.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line (or N/A justified inline) - Achieved evidence ≥ close-target required evidence, OR residuals are explicitly listed in the PR's
## Residual / Post-Merge Validationsection - If residuals exist: close-target issue body has the residuals annotated as
[L<N>-deferred — operator handoff needed] - Two-ceiling distinction: PR body distinguishes "shipped at L
because sandbox ceiling" from "shipped at L because author didn't probe further" - Evidence-class collapse check: review language does NOT promote L1/L2 evidence to L3/L4 framing without explicit sandbox-ceiling caveat
Findings: Pass for docs scope. Static verification is enough for this PR's docs/tree diff; the remaining observable surface is portal rendering and is already listed as post-merge validation.
📡 MCP-Tool-Description Budget Audit
Findings: N/A — no ai/mcp/server/*/openapi.yaml changes.
🔗 Cross-Skill Integration Audit
- Does any existing skill document a predecessor step that should now fire this new pattern?
- Does
AGENTS_STARTUP.md§9 Workflow skills list need updating? - Does any reference file mention a predecessor pattern that should now also mention the new one?
- If a new MCP tool is added, is it documented in the relevant skill's reference payload?
- If a new convention is introduced, is the convention documented somewhere (when it applies, how it fires)?
Findings: All checks pass — this is cloud-deployment docs hardening, not a new agent workflow convention or MCP tool surface.
🧪 Test-Execution & Location Audit
- Branch checked out locally (detached review worktree at
479b1aaad73b0194a16d4619c10b8cf1d5f698a0) - Canonical Location: N/A — no test files changed
- If a test file changed: N/A
- If code changed: N/A — docs/tree-only diff
Findings: No tests needed (docs change). Verification performed: exact-head PR state/CI all green, #12381 label check, git diff --check origin/dev..HEAD, learn/tree.json JSON parse + new leaf lookup, local source/doc search for troubleshooting claims, link-target check for current-branch links, and Day0 Milestone 7 blame/search verification for already-existing redeploy/handoff content.
📋 Required Actions
No required actions — content eligible for human merge after #12385 lands so the ClientAuthentication.md cross-link resolves on dev.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 93 - Keeps happy-path Day0 and error-path troubleshooting separated while linking both under the cloud-deployment tree.[CONTENT_COMPLETENESS]: 91 - Covers #12381’s friction ledger and correctly avoids duplicating already-existing Day0 redeploy/handoff material.[EXECUTION_QUALITY]: 89 - Docs/tree diff is clean and CI-green; the only caveat is merge-order dependency on #12385 for one cross-link.[PRODUCTIVITY]: 94 - Converts a real deployment correction loop into a reusable operator runbook without fragmenting the ticket.[IMPACT]: 84 - High impact for first public cloud deployments because it maps failure signatures to fixes.[COMPLEXITY]: 40 - Low implementation complexity, moderate operational complexity because multiple transport/auth layers are being documented.[EFFORT_PROFILE]: Quick Win - Small docs/tree patch with strong onboarding and debugging payoff.
Approved with the merge-order guard above. Human merge remains human-only.
Resolves #12381
Sub of epic #12377 (Track-1 cloud-deployment docs hardening). Backports this session's first-real-deployment frictions into
learn/agentos/cloud-deployment/so a first-timer can deploy without hitting an undocumented wall.FAIR-band: under-target [2/30] — Self-Selection Rule 1 fires (under-band → bias toward author lane). Docs-hardening sub of the cloud-deployment track.
Evidence: L1 (static — every documented friction was surfaced empirically this session while debugging the first real public cloud deployment: the connect-error ladder, the Caddyfile-baked-in rebuild, network-internal ports, the two auth layers, the
initializehandshake, and the Colima bind-mount trap). Docs-only.What + Why
A first real deployment crosses several layers — the SDK's Host validation, the proxy's
Accept/ auth handling, the identity-header contract, the MCP handshake — and each fails with its own error and its own fix. The existing docs (a solid happy-path Day-0 tutorial) had no troubleshooting safety net. This adds the connect-error ladder + the deployment gotchas, and fills the genuine remaining Day0 gap.Deltas
learn/agentos/cloud-deployment/Troubleshooting.md(new) — the connect-error ladder (Invalid Host→Not Acceptable→302 sign_in→Missing proxy identity header→Server not initialized→ SSE framing), each error → which layer you cleared → the fix; plus the gotchas: Caddyfile-baked-in →--build, network-internal ports →docker compose exec, the two auth layers, the test-vs-prod profile, the verify-from-outsideinitializehandshake curl, and the empty-KBcount: 0first-ingest gap. (Ticket items 1-7.)learn/agentos/cloud-deployment/Day0Tutorial.md— added the Colima bind-mount gotcha (a deploy path outside Colima's mounts silently resolves to empty VM-local dirs;colima restartdoes not fix it) + cross-links to the new troubleshooting guide. (Item 8 — the compose-plugin fix,ai:sync-kb-once,-pnaming, and the Milestone 7 redeploy/handoff checklist were already present, so this adds only the genuine gap rather than re-stating them.)learn/tree.json— new "Connection Troubleshooting" nav leaf.Scope notes
down && up --buildhealthcheck, query-survival, KB re-sync, tenant re-push, handoff doc), so this PR cross-links them to the new troubleshooting rather than duplicating.GET /healthauth-free liveness endpoint (flagged in the ticket as a companion idea) is not in this PR — it is a server feature, not docs;Troubleshooting.mdnotes its current absence. File separately if wanted.Test Evidence
Docs-only — no tests required (pr-review §7.5).
learn/tree.jsonvalidated as parseable JSON with the new leaf present;check-whitespaceclean; no decay-prone ticket-refs in the new prose.Post-Merge Validation
Troubleshooting.md+ the new nav leaf with working cross-links.Dependencies
Troubleshooting.mdcross-linksClientAuthentication.md, which lands in #12380 (PR #12385) — merge #12385 first (or together) so that link resolves ondev.Refs #12377, #12380.
Authored by @neo-opus-ada (claude-opus-4.8-1m) · session ceeb5c34