Repository navigation
Open
Labels
app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)Package/app: mcpx (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workMedium: expected under 1 day of workkind/enhancementmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)source/design-architectFiled by the repo design architect jobFiled by the repo design architect jobstatus/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditiontask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted testswork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Description
Phase 3 of design #2434 (mcpx error honesty, finished). Design doc: files/designs/code-mcpx-error-honesty.md in the keep-the-four-repos-healthy goal workspace. Gated on Phase 1 (#2435) — relayed requiredCapabilities must survive the gateway intact before this phase produces more of them. The decision is recorded on #2434.
Scope
-32021 exactly when waiting is not an answer, at the ask seam (internal/mcpserver/ask.go, canAsk ~L85):
- When a question would go to the broker because the requesting peer did not declare the capability the question needs, AND the broker's routing for that question has no audience that can answer it (no default audience, no routed audience for its kind/server — cf. ask.go:~196 "the default audience can answer, so waiting is right"; this phase is exactly the case where that premise fails), the request fails instead of waiting:
- modern peer →
-32021withdata.requiredCapabilitiesnaming the missing capability, in the same shapemissingTasks(tasks.go:199) and listen.go:138 already emit; HTTP 400 via the existingmodernStatusmapping; - legacy peer → the existing broker-less failure behaviour for that surface (no new code coined for legacy; -32021 is a 2026 construction).
- modern peer →
- When any audience CAN answer, nothing changes: the broker fallback remains the deliberate alternative ERR-08 records.
- If the broker cannot today answer "does any audience exist for this question" truthfully, add that signal first — never guess it.
Truth-up (same phase)
- Retire the three gap rows in
internal/conformance/coverage_messages.go:errors-local-errors-not-mistaken-for-peer,errors-method-not-found-for-unadvertised-capability,mrtr-missing-capability-error-32021(each replaced by the passing conformance claim or narrowed to any remainder with its reason). - Update ERR-08 in
pkgs/mcpx/docs/compare/register/errors.mdand record conflict Bump build/buck/preludes/buck2-prelude from3a02ea3to3e4d218#8's disposition inpkgs/mcpx/docs/spec/revision-conflicts.mdas this design's rule (broker-if-answerable, -32021-if-required) — coordinate with mcpx: spec-revision choice, finished — every conflict gets a disposition, the predicates get callers, and the policy is demonstrated end to end #2209's classification pass if it has not landed, so the conflicts doc gets one disposition, not two. - Evidence comments on mcpx: smaller conformance gaps -- user identity, annotation trust, rate limits, cursors, URI encoding, prompt validation, restart, invalidation #1957 (its
accept-unadvertised+32021-broker-fallbackkeys are split out to design(mcpx): error honesty, finished — peer errors relayed as peer errors, unadvertised methods refused, -32021 when a capability is truly required #2434 and now landed/retired) and on the Phase 8: open design items, retention, multi-device, and views #206 origin thread.
Acceptance
- A modern peer that declared no elicitation, whose tool call needs elicitation, with no broker audience able to answer, receives -32021 with
data.requiredCapabilities(HTTP 400) instead of an indefinite broker wait — covered by a test - The same call WITH an answerable broker audience behaves exactly as today (broker question opens)
- Legacy peers see no -32021 and no behaviour change
- The three coverage gap rows are retired or explicitly narrowed; ERR-08 and conflict Bump build/buck/preludes/buck2-prelude from
3a02ea3to3e4d218#8 carry the recorded disposition - Evidence comments posted on mcpx: smaller conformance gaps -- user identity, annotation trust, rate limits, cursors, URI encoding, prompt validation, restart, invalidation #1957 and the Phase 8: open design items, retention, multi-device, and views #206 origin
- Tests run via CI per fleet policy (no builds on the sandbox)
Out of scope: Phases 1-2 mechanics, ERR-09/ERR-13 (they belong to #2209's classification), #1948's fixture-shaped items.
Acceptance criteria
- At the ask seam: when a question would go to the broker for a capability the requesting peer did not declare AND no broker audience can answer it, modern peers receive -32021 with
data.requiredCapabilitiesnaming the missing capability (HTTP 400 via the existingmodernStatusmapping); legacy peers keep the existing broker-less failure behaviour. - When an audience CAN answer, behaviour is unchanged (the request waits as today).
- The error-register truth-up named in this issue is applied, and tests cover both the no-audience failure and the audience-exists wait. (Gated on Phase 1, mcpx: Phase 1 of #2434 — structured upstream-error carriage through the gateway + local-error origin marker #2435.)
Metadata
Metadata
Assignees
Labels
app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)Package/app: mcpx (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workMedium: expected under 1 day of workkind/enhancementmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)source/design-architectFiled by the repo design architect jobFiled by the repo design architect jobstatus/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditiontask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted testswork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Activity
developing-today commentedon Oct 29, 2026
CODE-1245
dezren39 commentedon Oct 29, 2026
🤖 agent-note:v1 — design-architect pass 16 (2026-10-29). Phase 3 of design #2434, gated on Phase 1 (#2435) — labelled status/blocked accordingly. Triage packet enqueued: pilot task 3648 (queue=repo-health-code-pilot, status=queued, verified). Triage: record the gate state, confirm the broker no-audience signal exists or scope it as the phase's first step, and enqueue the implementation follow-up with the acceptance criteria intact.
dezren39 commentedon Oct 30, 2026
Intake review (fleet monitor, 2026-10-29 run):
requiredCapabilitiesmust survive the gateway before this phase produces more of them; sibling mcpx: Phase 2 of #2434 — advertised-capability gate at dispatch (-32601 for completion/complete pre-2025-03-26 and resources/subscribe when not advertised) #2436 is independent.canAskseam reusing themissingTasks/listen.go -32021 shape, with tests for both branches.404 remaining items
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: parked
task: 3979 (small_fix, repo-health-code-pilot)
lane: c29174f1-48e0-4b13-b4ff-9b73ab67e9ab
worker: repo-worker-code
at: 2026-11-04T22:16:48Z
reason: Gate issue #2435 is still OPEN and assigned to dezren39. The packet requires #2435 to land before implementation; #2438 is also Drew-assigned. Fresh checks found no PRs for either issue.
resume_after: 2026-11-04T22:46:35Z, and only after #2435 lands on main and ownership of #2438 is released/handed off.
next: revalidate both issues and all matching PR state; no code or branch changes this run.
dezren39 commentedon Nov 4, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 4, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
gh pr listsearch shows no PR in any state for issue mcpx: Phase 1 of #2434 — structured upstream-error carriage through the gateway + local-error origin marker #2435 or issue mcpx: Phase 3 of #2434 — -32021 when no broker audience can answer + error-register truth-up (ERR-08, conflict #8, three gap rows) #2438. Task 3979 parked; resume when issue mcpx: Phase 1 of #2434 — structured upstream-error carriage through the gateway + local-error origin marker #2435 lands and issue mcpx: Phase 3 of #2434 — -32021 when no broker audience can answer + error-register truth-up (ERR-08, conflict #8, three gap rows) #2438 ownership is released, then revalidate and implement.dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked