Repository navigation
Description
No Drew direction decision needed — origin #1935's acceptance is explicit; the judgment calls (multi-select refused to old hosts rather than flattened; -32042 production gated on a declared, undeliverable URL question; the script hook stays a documented question) are recorded in the design doc with their reasons.
Summary
Design originated by the repo design architect (pass 11, 2026-10-28) from origin umbrella #1935 (relocated from dezren39/darwin-nix#214) and its compare-register rows ELI-04 / ELI-09 / ELI-12 / ELI-21 in pkgs/mcpx/docs/compare/register/elicitation.md, audited against current main 26221fcc. Full design doc: files/designs/code-mcpx-elicitation-era-edges.md in the keep-the-four-repos-healthy goal workspace.
Audit verdict per row:
- ELI-04 — OPEN.
Question.paramsFor(pkgs/mcpx/internal/mcpserver/conn.go~L465-507) stripsmode/elicitationIdper era but never rewritesrequestedSchema: a 2025-11-25 upstream's rich enums (titled/untitled, single/multi-select, SEP-1330) reach a 2025-06-18 host verbatim, and a strict old host rejects the wholeelicitation/create. - ELI-09 — LANDED (register is stale).
Client.capabilities(pkgs/mcpx/internal/mcpclient/modern.go~L71-84) declareselicitation.urlwhenever a server-request handler is installed, in both eras; the pool installs that handler for every upstream connection (pkgs/mcpx/internal/pool/pool.go:508);elicitModeDeclaredgates url questions on the negotiated revision. mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935's ELI-09 acceptance bullet is met — what remains is the register truth-up (Phase 3), not code. - ELI-12 — OPEN, both directions.
-32042appears nowhere ininternal/mcpclientorinternal/daemon(grep-verified): an upstream's-32042propagates as an opaquerpcErrorand the call fails — no URL flow, no retry. Server-side, conformance gapelicitation-server-must-return-32042(internal/conformance/coverage_clientfeatures.go) stands against the 2025-11-25 MUST. - ELI-21 — OPEN, deliberately NOT a phase.
docs/elicitation.md§5.2 designs anonElicitscript global and marks it "NOT BUILT" itself; mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935's acceptance offers the alternative ending "or the broker-only path is documented as the deliberate design". The unsettled core is routing precedence (brokerRoutesends credential/consent questions to a human on purpose — may a script handler answer those?) plus the call-vs-script correlationdocs/protocol.md~L379-382 names. Recorded as an open question in the design doc with the evidence assembled; no phase filed for it.
Proposal (recorded decisions)
- Phase 1 — enum downgrade at the rendering seam. In
paramsFor, for a pre-2025-11-25 peer: titled single-select (oneOf[{const,title}]) →enum+enumNames; untitled/legacy shapes pass through. Multi-select has no 2025-06-18 representation (form schemas are flat primitives — no array type), and flattening would change the answer's type (string[]→string) so the upstream's own validation rejects what mcpx elicited — so a multi-select question is not sendable to that peer (theSendablerefusal pattern url mode already uses) and stays with the era-less broker. No answer back-mapping is needed for downgraded single-selects (host answers theconst, the value in both eras). - Phase 2 — client-side
-32042: complete the circuit. On a connection negotiated at 2025-11-25, a-32042call error'sdata.elicitations(url-mode +elicitationId, per the spec MUSTs) are opened as broker URL questions through the existingelicitViaBrokerpath — full URL shown, consent, completion notification already handled (internal/daemon/hooks.go~L57-68) — and on completion the original call is retried exactly once. Decline/expiry/second-32042surface as errors; malformeddatapasses the original error through. Era-scoped to exactly the revision that defines the code (2026 reserves it; pre-2025-11-25 doesn't have it). - Phase 3 — server-side
-32042+ truth-up + mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935 closure. Produce-32042only when all hold: host negotiated 2025-11-25, host declaredelicitation.url, a URL question from that call is pending, and it cannot be delivered inline;data.elicitationslists exactly the blocking questions with ids. Never for form, never when inline delivery works, never at 2026. An unhandled upstream-32042is relayed only to url-declared hosts. Plus: register rows ELI-04/09/12 updated to as-built (ELI-09 landed, with evidence), gapelicitation-server-must-return-32042retired or recorded partial, and completion evidence on mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935 against every acceptance bullet — closing it iff all are met, ELI-21's bullet answered by the documented-question record.
Alternatives considered and risks are in the design doc (flattening multi-select — rejected, corrupts answer type; downgrading at broker intake — rejected, era translation belongs at the era boundary; generic all-era -32042 handling — rejected, era discipline; unbounded retry — rejected; filing onElicit as a phase — rejected this run, genuine open question).
Phased breakdown
- Phase 1: enum downgrade for pre-2025-11-25 hosts (
internal/mcpserver/conn.go:paramsForrewrite + multi-selectSendablerefusal). Filed as a sub-issue of this issue, triage packet enqueued. - Phase 2: client-side
-32042— broker URL questions + one retry (internal/mcpclientcall path +internal/daemon). Independent of Phase 1 in code. Filed as a sub-issue, triage packet enqueued. - Phase 3: server-side
-32042production + register truth-up + mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935 closure. Gated on Phases 1–2. Filed as a sub-issue (status/blocked), triage packet enqueued.
Open questions stay in the design doc, not as issues: ELI-21 routing precedence + script correlation; ELI-05 defaults across the same boundary (Phase 1 triage checks the downgrade interaction); mcpx-originated URL elicitation; ELI-11's unexercised completion emitter.
Distinct from neighbours: #1753 (capability gating — its CanElicit shape reading is a reused seam), #1675 (broker storage/UI hygiene), #1481/#1484 (schema validation of answers), #1834 (sampling relay).
🤖 agent-note:v1 — filed by the design-architect job (pass 11, developing-today/code) per the design doc above. Origin: #1935 (ex dezren39/darwin-nix#214). Audit basis: main 26221fcc, 2026-10-28.
Acceptance criteria
- Phases 1–3 are filed and implemented: mcpx: Phase 1 of #2077 — downgrade rich enum schemas for pre-2025-11-25 hosts (multi-select withheld, not flattened) #2078 (enum downgrade / multi-select withheld), mcpx: Phase 2 of #2077 — handle upstream -32042: open the URL elicitations at the broker and retry the call once #2079 (upstream -32042 handling + single retry), mcpx: Phase 3 of #2077 — produce -32042 where it is true, register truth-up (ELI-04/09/12), and #1935 closure #2080 (-32042 production + register truth-up).
- Register rows ELI-04, ELI-09, ELI-12, ELI-21 in pkgs/mcpx/docs/compare/register/elicitation.md match as-built state (ELI-09's staleness corrected).
- Umbrella mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935's acceptance is met and mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935 is closed via Phase 3 (mcpx: Phase 3 of #2077 — produce -32042 where it is true, register truth-up (ELI-04/09/12), and #1935 closure #2080).
Activity
developing-today commentedon Oct 29, 2026
CODE-993
dezren39 commentedon Oct 29, 2026
🤖
agent-note:v1— design-architect pass 11 (2026-10-28), filing record.files/designs/code-mcpx-elicitation-era-edges.md(keep-the-four-repos-healthy goal workspace); central register entry added (status: proposed).26221fcc: ELI-04 open, ELI-09 landed (declaration evidence in this issue's body — truth-up is Phase 3's, not new code), ELI-12 open in both directions, ELI-21 recorded as an open question in the design doc (no phase — routing-precedence question is genuinely unsettled, and mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935's acceptance permits the documented-design ending).status/blocked, triage → pilot task 3002 queued). All three enqueues used explicit--queue repo-health-code-pilotand landed directly in the pilot queue (verified per task: queue=repo-health-code-pilot, status=queued).user/review: mcpx: elicitation edges — enum downgrade for 2025-06-18, url mode upstream, -32042, and a script-side answer hook #1935's acceptance is explicit and the judgment calls are recorded in the design doc.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: Design epic, audited against main 26221fc; the design doc lives in the goal workspace (files/designs/code-mcpx-elicitation-era-edges.md). Already labelled kind/design, priority/normal, effort/l, source/design-architect at filing; phases #2078/#2079/#2080 were filed the same pass and carry their own labels. This pass adds the acceptance section and meta/enriched. No Drew decision is needed — the judgment calls are recorded in the design doc.
Suggested approach: Track the three phase issues; this epic closes when #2080's truth-up lands.
Risks: Register truth-up (ELI-09 already landed but marked open) shows the register drifts — Phase 3's truth-up is a required deliverable, not bookkeeping.
Labels normalized by the monitor; acceptance criteria appended to the body (original text preserved verbatim above it).
6 remaining items
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
dezren39 commentedon Nov 4, 2026
agent-note:v1
state: picked-up
queue: repo-health-code-pilot
task: 8733 (triage, worker repo-worker-code, lane 262eb403-3347-4a7c-ba6b-e7bc263ca853)
by: openchamber-scheduled-lane
at: 2026-11-04T04:06:23Z
Triage of issue #2077 after queue claim. Fresh GitHub state confirms the three phases (#2078/#2079/#2080) are closed and their implementation PRs are merged; #1935 is also now closed via merged PR #5054. I’m verifying the acceptance against that state and will close this tracking issue if nothing remains, without creating duplicate implementation work.
dezren39 commentedon Nov 4, 2026
agent-note:v1
state: triaged
queue: repo-health-code-pilot
task: 8733 (triage, worker repo-worker-code, lane 262eb403-3347-4a7c-ba6b-e7bc263ca853)
by: openchamber-scheduled-lane
at: 2026-11-04T04:08Z
Triage result: already resolved; no follow-up task is warranted. Fresh GitHub verification confirms all three phases named in this issue's acceptance are closed: #2078 (PR #2719 merged), #2079 (PR #2760 merged), and #2080 (PR #2886 merged). The other acceptance items are met as well: #2080 delivered the ELI-04/09/12 register truth-up, and umbrella #1935 is now closed as completed with the broker-only script elicitation decision recorded in merged PR #5054 (
pkgs/mcpx/docs/elicitation.md§5.2 and the compare register). Thus the issue's remaining tracking purpose is complete; closing #2077 with this evidence. No duplicate implementation or CI task enqueued.dezren39 commentedon Nov 4, 2026
agent-note:v1
state: done
queue: repo-health-code-pilot
task: 8733 (triage, worker repo-worker-code, lane 262eb403-3347-4a7c-ba6b-e7bc263ca853)
by: openchamber-scheduled-lane
at: 2026-11-04T04:08Z
Completed as already resolved. Closed #2077 after fresh verification: #2078/#2079/#2080 are closed with PRs #2719/#2760/#2886 merged; #1935 is closed with the broker-only ELI-21 decision merged in PR #5054. No implementation or CI follow-up is needed. Removed the queue/claimed, status/in-progress, and work/assigned labels.