fix(mcp): clear live validation release blockers#809
Conversation
|
[PHASE: PLAN] Research and design are locked in harness run Decisions
Process
|
61de3d3 to
f2b8c08
Compare
Implementation + live-validation summaryHarness run: Delivered
Verdict evidence
The PR body contains the complete per-tool matrix and telemetry root-cause analysis. No merge was attempted. |
IMPL-EVAL — PASS (supervisor-dispatched; Claude · Fable 5 · medium,
|
|
[PHASE: IMPL] — Round-two doctor registry-layout follow-up External re-validation verified the original three #808 fixes live, then exposed a new publish blocker in Root cause: the doctor hardcoded Fix ( Focused evidence:
No self-evaluation was dispatched and no merge was performed. The new fix is implementation/test verified; a subsequent external live rerun should confirm the doctor verdict on the canonical scaffold. |
…VAL FAIL_FIX Proves: preflight-vs-publish outcomes are no longer conflated (33 published / mcp failed / cli skipped, separate from the unauthenticated 10-failed/25-skipped graph preflight); byte-identity of already-published members is now a MANDATORY precondition for any tag move, with beta.10 recast honestly as a non-byte-identical move (6 plugins changed) that JSR's skip-existing/fill-unpublished behavior papered over, not a safe precedent; first-publish live-validation wording now matches #808/#809 (in-tree maintainer CLI against a real scaffolded app) with an explicit note that #812's canary channel changes this to canary-published surface + pinned prod E2E verdict. Cures findings 1-3 of .llm/runs/beta10-cli--orchestrator/slices/819-relskill-eval/evaluate.md. Finding 4 (non-blocking, #812 merge-conflict guidance) is untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017LHrkXyMzsQwb9bqr82EFK
…, first-publish checklist (#819) * docs(release): codify same-semver republish recovery + min-dependency-age handling + first-publish checklist Owner directive after the v0.0.1-beta.10 cut (2026-07-17): two release patterns were proven live and need to be reachable before an agent defaults to an unwanted stable-channel semver bump. - Same-semver republish (partial-publish recovery): JSR version immutability binds only published members; a failed/skipped member can still publish at the same semver via fix-forward + tag fast-forward + publish.yml re-dispatch. Cites the beta.10 precedent (33/70 members published, mcp/cli recovered without a version bump — runs 29558968037 -> 29562537123). - Minimum-dependency-age at release time: Deno 2.9's ~24h default rejects same-day publishes; the harness pins --minimum-dependency-age=0 and keeps fresh-plugin resolution in one Deno process (child deno x re-exec drops the flag) — #813 + #817. User-facing 24h window tracked in #818. - First-publish checklist: manual README/tagline/license/exports/docs-site/live-validation checks until #811/#812's publish-readiness automation lands. Regenerated the .claude mirror via agentic:sync-claude; docs:links, sync-claude:check, and fmt all green on touched files. * fix(docs): correct beta.10 same-semver recovery accounting per IMPL-EVAL FAIL_FIX Proves: preflight-vs-publish outcomes are no longer conflated (33 published / mcp failed / cli skipped, separate from the unauthenticated 10-failed/25-skipped graph preflight); byte-identity of already-published members is now a MANDATORY precondition for any tag move, with beta.10 recast honestly as a non-byte-identical move (6 plugins changed) that JSR's skip-existing/fill-unpublished behavior papered over, not a safe precedent; first-publish live-validation wording now matches #808/#809 (in-tree maintainer CLI against a real scaffolded app) with an explicit note that #812's canary channel changes this to canary-published surface + pinned prod E2E verdict. Cures findings 1-3 of .llm/runs/beta10-cli--orchestrator/slices/819-relskill-eval/evaluate.md. Finding 4 (non-blocking, #812 merge-conflict guidance) is untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017LHrkXyMzsQwb9bqr82EFK --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
Clears the three
@netscript/mcpbeta.10 live-validation release blockers and preserves the paths that already passed.doctoris bounded before schema validation while retaining full family counts/severity;Closes #808
Root cause and owning-layer fixes
1. Aspire telemetry
The false-empty result had four causes, not a casing mismatch:
UnknownIssuer; the query adapter caught the request error and degraded it to empty.{data:{resourceSpans:[…]},totalCount,returnedCount}, while normalization only inspected top-leveltraces/spans/items.resourceSpans[].scopeSpans[].spans[]; resource-level service attributes were therefore lost even after flattening.SpanKindvalues were decoded one position early (1=internal … 5=consumeris the real mapping).The shared parser fix is owned by
packages/telemetryinfrastructure. MCP infrastructure only composes the Aspire edge: for loopback HTTPS it loads the generated ASP.NET development PEM into a customDeno.HttpClient; it never disables verification and never changes non-loopback HTTPS. The doctor probe reuses the same trust policy.The checked-in fixture is a real capture from 2026-07-17, Aspire Dashboard 13.4.6,
GET /api/telemetry/spansandGET /api/telemetry/resourcesafter triggering the scaffoldedhealth-checkjob. Its provenance is named in the fixture source.2. Doctor output contract
The CLI-composed doctor flattened every check into
$.checks, then validated againstmaxItems:20. The runner correctly rejected its own oversized output.The cap remains 20 deliberately. Top-level
checksnow contains one aggregate per family. Each family retains up to 19 detailed checks plus an explicit overflow summary carrying the worst omitted severity. Overall/family counts and statuses are computed over every original check, so aggregation cannot hide failures. A real CLI-composed 25-plugin-check regression runs through the advertised schema.3. Docs composition
The previous default was
<projectRoot>/docs/site, which scaffolded consumers do not contain. The package README is now imported as a published text asset and indexed under slugmcp.--docs-root/NETSCRIPT_DOCS_ROOTremain filesystem overrides.A missing or Markdown-empty explicit override returns
docs_corpus_not_found, includes the resolved path, and says to pass--docs-root <path>; it never returns silent zero counts.Live-discovered contract guard
Once telemetry made
get_runsuccess reachable, live validation exposed a closed-schema omission for its optionaltraceId,outcome, anderrorMessagefields. The schema and undefined-field construction are corrected and guarded through the captured live fixture.Commits
fb87169c— parse live Aspire telemetrye8bc7210— bound doctor output by family9b2fd26d— ship a default docs corpusb04e8f0a— validate live success contractsbd52f4b6— record live release gatesLive acceptance — local maintainer CLI over newline stdio
Fresh scaffold, foreground Aspire AppHost, fresh
health-checktrigger, exact 13-nametools/list:get_app_statuspass; 11 resources; 42 spanslist_runsget_runget_recent_errorsget_last_job_resultfound:true; completed health-check traceanalyze_service_performanceworkersanalyze_db_bottlenecksdoctorsearch_docsmcplist_docsmcpget_docmcpretrieval with bounded contentlist_commandsexecute_commandplugin listexit 0;deploydenied before spawn bydeny_deployInitialize reported
@netscript/mcp/ protocol2025-11-25;tools/listreturned the exact code-owned 13-name order.Validation
deno task quality:scan— PASS, no findings / no new suppressionsdeno task arch:check— PASSdeno doc --lint packages/mcp/cli.ts— PASS, zero diagnosticspublish:dry-run— PASS, README text asset included, no slow typesdeno task e2e:cli run scaffold.runtime --cleanup --format pretty— PASS, 60/60; Aspire stopped andaspire psemptydeno.lockchurnScoped lint-wrapper note: Deno 2.9.3 rejects the root wildcard workspace before linting. The wrapper reports this honestly as a tooling failure. The identical selected 59 MCP and 6 CLI MCP TypeScript files pass lint and formatting with explicit configs; no workspace edit or suppression was introduced.
Harness / architecture
.llm/runs/fix-808-mcp-live-defects--mcp-live/MCP-A6-V2-SHAPEis unchanged; no new architecture debt.status:impl-eval; do not merge.