Repository navigation
Description
Phase 1 of design #2077 (origin umbrella #1935, register row ELI-04). 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-04's downgrade half.
Scope
pkgs/mcpx/internal/mcpserver/conn.go — Question.paramsFor (~L465-507) currently strips mode/elicitationId per era but never rewrites requestedSchema, so a 2025-11-25 upstream's rich enum shapes reach a 2025-06-18 host verbatim and a strict old host rejects the whole elicitation/create.
- In
paramsFor, for a pre-2025-11-25 peer, rewrite eachrequestedSchemaproperty: titled single-select (oneOf: [{const, title}, …]) →{type: "string", enum: [const…], enumNames: [title…]}; untitled single-select (enum) and legacy titled (enum+enumNames) pass through unchanged. - Multi-select (either flavour:
type: "array"withitems.enumoritems.anyOf) is NOT downgraded and NOT flattened (flattening changes the answer typestring[]→string; the upstream's validation would reject the elicited answer). A question whose schema carries a multi-select property is not sendable to a pre-2025-11-25 peer — theQuestion.Sendable(~L448-458) refusal pattern url mode already uses — and stays with the broker. - No answer back-mapping: a downgraded single-select's host answer is the
conststring, the value in both eras. - Triage check (recorded in the design doc): whether a downgraded property can carry a 2025-11-25
defaultthat is illegal at 2025-06-18 (defaults allowed there only on booleans — ELI-05 adjacency); if so, strip non-boolean defaults in the same rewrite and say so on this issue.
Acceptance
- Titled single-select downgrades to
enum+enumNamesfor a 2025-06-18 peer, and the host's answer validates against the upstream's original schema unchanged. - Untitled and legacy-titled properties pass byte-identical; a 2025-11-25 (or modern) peer sees every enum shape byte-identical to today.
- A question carrying a multi-select property is withheld from a 2025-06-18 peer (broker fallback) and offered unchanged to a 2025-11-25 peer.
- Tests pin behaviour per negotiated revision, per the fleet's protocol-edge rule. Neighbours to compose with, not duplicate: mcpx: design — sub-capability gating (gate on sampling.tools / sampling.context / elicitation.form, not parent presence) #1753's
CanElicitshape reading at the same seam; mcpx: Phase 3 of #1481 — validate elicitation form answers against requestedSchema in client.answer #1484 (answer validation) untouched.
🤖 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
- For a pre-2025-11-25 peer, paramsFor rewrites titled single-select oneOf schemas to {type: string, enum: [const…], enumNames: [title…]}; untitled single-select and legacy titled enum shapes pass through unchanged.
- Multi-select questions are withheld from pre-2025-11-25 hosts (not downgraded, not flattened), with the withholding visible in behaviour/tests.
- Tests cover titled single-select rewrite, pass-through shapes, and multi-select withholding.
Activity
developing-today commentedon Oct 29, 2026
CODE-994
dezren39 commentedon Oct 29, 2026
🤖
agent-note:v1— design-architect pass 11 (2026-10-28): Phase 1 of design #2077, filed as its sub-issue (verified). Triage packet enqueued: pilot task 3000 (queue=repo-health-code-pilot, status=queued, verified). Packet:hidden_files/queue-packets/packet-2078.jsonin the keep-the-four-repos-healthy goal workspace. 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 1 of design #2077 (umbrella #1935, register row ELI-04). Already labelled at filing; this pass adds the acceptance section and meta/enriched. Audit at filing: Question.paramsFor (pkgs/mcpx/internal/mcpserver/conn.go ~L465-507) strips mode/elicitationId per era but never rewrites requestedSchema. No merged PR implements it yet.
Suggested approach: Rewrite inside paramsFor per era, alongside the existing mode/elicitationId stripping.
Risks: enumNames ordering must stay aligned with enum values or old hosts will mislabel options.
Labels normalized by the monitor; acceptance criteria appended to the body (original text preserved verbatim above it).
31 remaining items
dezren39 commentedon Oct 30, 2026
🤖 Agent note · picked up
mcpx: downgrade titled single-select enums for pre-2025-11-25 hosts, …
dezren39 commentedon Oct 30, 2026
🤖 Agent note · done
dezren39 commentedon Oct 30, 2026
🤖 Agent note · done
pkgs/mcpx/internal/mcpserver/conn.go), and this issue auto-closed on merge. Lane B's done note above records the verification (laptop race/shuffle tests, Codex clean; merged under the standing directive amid the repo-wide CI runner backlog). Completing the queue task asalready_donein this pass; no GitHub work remains.