Repository navigation
Description
Phase 2 of design #2077 (origin umbrella #1935, register row ELI-12, client half). Design doc: files/designs/code-mcpx-elicitation-era-edges.md in the keep-the-four-repos-healthy goal workspace. Decision is recorded on #2077 — this phase implements it as scoped; do not re-file under #1935, this is its implementation slice for ELI-12's client half.
Scope
On current main, -32042 (URLElicitationRequiredError, 2025-11-25 only) appears nowhere in pkgs/mcpx/internal/mcpclient or internal/daemon: an upstream's -32042 propagates as an opaque rpcError (code preserved, internal/mcpclient/client.go ~L1040, ~L1466-1506) and the call fails — mcpx never runs the URL flow and never retries.
- On a connection negotiated at 2025-11-25, when a call fails with
-32042: parsedata.elicitations; each entry must be url-mode with anelicitationId(the spec's MUSTs) — a malformed entry fails the call with the original error, unmodified. - Open each listed elicitation as a broker URL question via the existing
elicitViaBrokerpath (internal/daemon/hooks.go~L121-146), keyed by the upstream'selicitationId, so the human flow is the existing one (full URL shown, consent,OnElicitationCompleteat hooks.go ~L57-68 marks completion). - On completion, retry the original call exactly once. Decline, expiry, or a second
-32042surface as the call's error — no loop. - Era discipline: no
-32042handling on 2026-negotiated connections (code reserved there;input_requiredis the replacement and already works) or pre-2025-11-25 connections (code does not exist). - Triage check (recorded in the design doc): broker row keying — if broker rows are not namespaced by server, two upstreams choosing the same
elicitationIdcollide (register ELI-09 risk note); fix or record on this issue.
Independent of Phase 1 in code (different files, different seam).
Acceptance
- Upstream
-32042→ broker URL question(s) with the listed URL/id → completion → retried call succeeds, end to end in a test. - Decline or expiry → the call fails with a named error and no retry occurs; a second
-32042→ error surfaces, no further retry. - Malformed
data.elicitations→ original-32042error propagates untouched. - Behaviour at 2026 and pre-2025-11-25 revisions is unchanged from today.
🤖 agent-note:v1 — filed by the design-architect job (pass 11) as a sub-issue of design #2077. Audit basis: main 26221fcc, 2026-10-28.
Acceptance criteria
- On a 2025-11-25 connection, a call failing with -32042 has its data.elicitations parsed; each entry must be url-mode with an elicitationId, and a malformed entry fails the call with the original error unmodified.
- Each listed elicitation is opened as a broker URL question via the existing elicitViaBroker path, keyed by the upstream's elicitationId.
- After the URL flow completes, the original call is retried exactly once; a second -32042 is not retried again.
- Tests cover the happy path, the malformed-entry path, and the no-second-retry path.
Activity
developing-today commentedon Oct 29, 2026
CODE-995
dezren39 commentedon Oct 29, 2026
🤖
agent-note:v1— design-architect pass 11 (2026-10-28): Phase 2 of design #2077, filed as its sub-issue (verified). Triage packet enqueued: pilot task 3001 (queue=repo-health-code-pilot, status=queued, verified). Packet:hidden_files/queue-packets/packet-2079.jsonin the keep-the-four-repos-healthy goal workspace. Independent of Phase 1 in code. Decision recorded on #2077; design docfiles/designs/code-mcpx-elicitation-era-edges.md.dezren39 commentedon Oct 29, 2026
Intake review
Fleet monitor intake (2026-10-29) — verified still live: no merged PR or commit implements this yet; the filing audit/decision record it cites is current.
Notes: Phase 2 of design #2077 (umbrella #1935, register row ELI-12 client half). Already labelled at filing; this pass adds the acceptance section and meta/enriched. Audit at filing: -32042 appears nowhere in pkgs/mcpx/internal/mcpclient or internal/daemon — an upstream -32042 currently propagates as an opaque rpcError. Independent of Phase 1 (#2078); Phase 3 (#2080) is gated on both.
Suggested approach: Parse in internal/mcpclient where the rpcError surfaces (~L1040, ~L1466-1506), open broker questions via internal/daemon/hooks.go elicitViaBroker (~L121-146), retry once.
Risks: Retry-once semantics must not double side effects for non-idempotent calls — the spec's flow assumes the original call did not execute; verify that assumption in tests.
Labels normalized by the monitor; acceptance criteria appended to the body (original text preserved verbatim above it).
dezren39 commentedon Oct 29, 2026
🤖 Agent note · picked up
56 remaining items
dezren39 commentedon Oct 30, 2026
🤖 Agent note · picked up (resume)
awaiting_ci: PR feat(mcpx): handle upstream -32042 in CallTool — broker URL elicitations, retry once (#2079) #2760 headf3cd6919, Codex review on this head clean (no findings, none unresolved; both earlier P2s fixed in 3adca52 and replied). Latest mcpx run 41129819201 failed only in the stress job — DATA RACE inTestLegacySession404Recovery/concurrent-calls-share-one-reinitialize(a different race than the earlier Detach one). Rerun of failed jobs triggered this shift; merge + complete if it passes, else evaluate as pre-existing-failure per the standing criteria.feat(mcpx): handle upstream -32042 in CallTool — broker URL elicitati…
dezren39 commentedon Oct 30, 2026
🤖 Agent note · done
497c820f). Implements Phase 2 of Design: mcpx elicitation era edges — downgrade rich enums for old hosts, complete the -32042 circuit, close the stale url row #2077 as triaged: -32042 interception inCallToolgated onNegotiated == "2025-11-25", retry exactly once via the broker URL flow, server-qualified broker row keying.TestLegacySession404RecoverymirrorsHeaders/callReissue vs finishLegacy; rerun:TestClientHandoffCommitsOnlyWhenActivated, also seen on unrelated run 41112180105). The same change passed the full mcpx workflow on head 3adca52 (run 41121731190). Race family filed as mcpx: mcpclient stress suite hits rotating pre-existing DATA RACEs (legacy reinit + handoff tests) #2842. Merged under the standing pre-existing-failure criteria.