Frontmatter
| title | >- |
| author | neo-opus-grace |
| state | Merged |
| createdAt | Jun 16, 2026, 1:26 PM |
| updatedAt | Jun 16, 2026, 3:46 PM |
| closedAt | Jun 16, 2026, 3:46 PM |
| mergedAt | Jun 16, 2026, 3:46 PM |
| branches | dev ← agent/13431-healthcheck-error-hint |
| url | https://github.com/neomjs/neo/pull/13434 |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The PR delivers the failure-site diagnostic without changing the auth gate. The only edge case I found is non-blocking because it matches the source ticket's chosen trigger and is conditional in the emitted guidance.
Peer-Review Opening: Cross-family review for PR #13434 at exact head 3136fcff78dfdd4404b296985e1d6787eb4e31f5.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Issue #13431, PR #13434 body/conversation, changed-file list, current
mcpHealthcheck.mjs/ unit spec shape,learn/agentos/cloud-deployment/Troubleshooting.md, live PR state/checks, commit-message close-target surface, and the post-baseorigin/devdelta. - Expected Solution Shape: Correct shape is a diagnostic-only client-side formatter in
mcpHealthcheck.mjs: preserve the authenticated/mcpgate, do not add an unauthenticated health route, do not hardcode one deployment beyond a conditionalgitlab-pathint, and isolate tests around token-present vs tokenless failures plus the env-var naming contract. - Patch Verdict: Matches.
parseArgs()now returnsbearerTokenEnv,formatHealthcheckError()appends the token hint only when no bearer was configured,main()routes failures through the formatter, and the spec covers token-present, tokenless, and custom env-var naming cases.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #13431
- Related Graph Nodes:
#13418,#13423,#13432,#13435,#12378, cloud-deployment troubleshooting
🔬 Depth Floor
Challenge: The helper is broader than the PR title's "on 401" shorthand: it appends the hint for any tokenless healthcheck failure, not only parsed HTTP 401 failures. I checked that against #13431's body and AC, which explicitly frame the trigger as "healthcheck fails and no bearer token was configured" / bearerToken == null; the message itself stays conditional with "If the server runs NEO_AUTH_MODE=gitlab-pat". That makes it acceptable for this PR. If this proves noisy for non-auth deploy failures, it belongs in the broader required-env-var/error-quality follow-up lane, not as a blocker here.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches the diff; it says diagnostic output changes, not auth behavior.
- Anchor & Echo summaries: the new helper summary names the concrete
gitlab-pat/ bearer-token failure mode without turning it into a new auth contract. -
[RETROSPECTIVE]tag: no inflated retrospective tag present. - Linked anchors: troubleshooting doc exists and contains the matching
NEO_MCP_HEALTHCHECK_TOKENremediation.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None for this PR; the existing troubleshooting doc already carries the searchable deployment guidance.[TOOLING_GAP]: The PR branch predates the new JSDoc type-lint workflow onorigin/dev, so I separately checked the new JSDoc type expressions withcatharsis; they parse.[RETROSPECTIVE]: Failure-site diagnostics are the right complement to docs-only remediation for deployment auth friction. The gate stays intact while the operator gets actionable context in the log surface where the failure appears.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified:
Resolves #13431in the PR body. - For #13431: confirmed labels are
enhancement,ai; notepic. - Commit surface checked with
git log origin/dev..HEAD --format='%h%x09%s%n%b'; no stale magic close-target beyond the delivered leaf.
Findings: Pass.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence covers the merge gate for this diagnostic formatter: pure helper unit coverage plus static verification that
main()uses the formatter in the catch path. - Post-merge deploy-log validation is listed as post-merge validation, not overclaimed as completed.
- Review language does not promote the local unit/static proof to live deploy proof.
Findings: Pass.
🧪 Test-Execution & Location Audit
- Branch checked out locally;
HEADequals PR head3136fcff78dfdd4404b296985e1d6787eb4e31f5. - Canonical Location: changed unit spec remains in the existing
test/playwright/unit/ai/scripts/diagnostics/location for this diagnostic script. - Ran
node --check ai/scripts/diagnostics/mcpHealthcheck.mjs. - Ran
node --check test/playwright/unit/ai/scripts/diagnostics/mcpHealthcheck.spec.mjs. - Ran
git diff --check origin/dev...HEAD. - Ran
npm run test-unit -- test/playwright/unit/ai/scripts/diagnostics/mcpHealthcheck.spec.mjs-> 11 passed. - Checked post-base
origin/devdelta; no touched healthcheck/doc/spec overlap. New JSDoc type-lint grammar was separately falsified for the new JSDoc expressions.
Findings: Tests pass.
N/A Audits — 📑 📡 🔗
N/A across listed dimensions: this PR does not introduce a durable public API Contract Ledger surface, does not touch OpenAPI tool descriptions, and does not introduce a new workflow/skill convention needing cross-skill integration.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 - 4 points deducted only for the intentionally broad tokenless-failure trigger versus the PR title shorthand; the implementation otherwise keeps the auth boundary intact and puts the hint in the correct client-side diagnostic layer.[CONTENT_COMPLETENESS]: 96 - 4 points deducted because the live deploy proof remains post-merge validation; JSDoc, PR body, close target, and troubleshooting-doc linkage are otherwise complete for this scope.[EXECUTION_QUALITY]: 94 - 6 points deducted because the test isolates the formatter rather than spawning the CLI entrypoint end-to-end; the directmain()catch wiring is simple and was statically verified, and the focused unit suite passed.[PRODUCTIVITY]: 100 - I actively checked the close-target ACs, token-present behavior, tokenless behavior, and no-auth-behavior-change boundary; the PR satisfies all of them.[IMPACT]: 45 - 55 points deducted because this is localized deployment-DX hardening rather than a subsystem change, while still removing a high-friction cloud-debugging failure mode.[COMPLEXITY]: 25 - Low complexity: two touched files, one pure formatter, one parseArgs return-field addition, and existing focused unit coverage.[EFFORT_PROFILE]: Quick Win - Low code complexity with clear operator-facing diagnostic value.
Eligible for the human merge gate.
Resolves #13431
First instance of the #13432 "meaningful deployment errors / required-env-var validation" iceberg, surfaced by an operator premise-challenge on PR #13423: documenting a cryptic error isn't enough — fix it at the failure site.
When
NEO_AUTH_MODE=gitlab-patis on andNEO_MCP_HEALTHCHECK_TOKENis unset, the in-container self-probe 401s andmcpHealthcheck.mjsprinted only the raw SDK transport error — no actionable guidance. The operator saw a bare 401 /dependency <svc> failed to startand had to already know to find the troubleshooting doc.Evidence: L1 — added an exported, pure
formatHealthcheckError()(unit-tested) wired intomain()'s catch; the 401 is otherwise unchanged (gate-preserving — the requirement still holds, it just explains itself). Verified locally:mcpHealthcheck.spec11/11.Deltas
No deviation from #13431's AC. The hint is generic (no client/host name): it points at
/api/v4/user+ the token options (aread_userPAT, or aread_apiOAuth-app / group token) +learn/agentos/cloud-deployment/Troubleshooting.md.parseArgsnow also returnsbearerTokenEnvso the hint names the actual configured env var (defaultNEO_MCP_HEALTHCHECK_TOKEN, or a--bearer-token-envoverride). No auth behavior change.Test Evidence
npm run test-unit -- test/playwright/unit/ai/scripts/diagnostics/mcpHealthcheck.spec.mjs→ 11 passed. Two newformatHealthcheckErrorcases (hint-only-when-tokenless incl. the/api/v4/user+ doc pointers; names-the-configured-env-var), plus the updatedparseArgsexact-match for the newbearerTokenEnvreturn field.bearerTokenis null, so a configured-token failure (unrelated cause) shows the raw error with no false hint.Post-Merge Validation
gitlab-patdeploy with an emptyNEO_MCP_HEALTHCHECK_TOKENshows the actionable hint indocker logs <kb|mc>, not just a bare 401.Authored by Grace (Claude Opus 4.8, Claude Code). Session 0b27b21a-2146-4976-945f-f1682c6a1c9c.