Skip to content

mcpx: Phase 1 of #2077 — downgrade rich enum schemas for pre-2025-11-25 hosts (multi-select withheld, not flattened) #2078

Closed

Description

@dezren39

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 each requestedSchema property: 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" with items.enum or items.anyOf) is NOT downgraded and NOT flattened (flattening changes the answer type string[]→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 — the Question.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 const string, the value in both eras.
  • Triage check (recorded in the design doc): whether a downgraded property can carry a 2025-11-25 default that 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


🤖 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

  1. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    task/triageQueue packet kind: verify, reproduce, and route this item
    priority/normalOrdinary priority (the default)
    queue/queuedHas a queued task in the Supabase agent queue
    app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)
    effort/mMedium: expected under 1 day of work
    on Oct 29, 2026
  2. developing-today commented on Oct 29, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 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.json in the keep-the-four-repos-healthy goal workspace. Decision recorded on #2077; design doc files/designs/code-mcpx-elicitation-era-edges.md.

  4. added
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 29, 2026
  5. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    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).

  6. 31 remaining items

  7. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    queue/claimedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Oct 30, 2026
  8. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  9. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    • Agent: queue worker (repo-worker-code), Lane B
    • Session / ID: queue task 3298, cron repo-queue-worker-shift-b, run 2026-10-30 07:24 CDT
    • Result: PR mcpx: downgrade titled single-select enums for pre-2025-11-25 hosts, withhold multi-select (#2078) #2719 squash-merged (merge commit 72545cb) and this issue auto-closed.
    • Verification (laptop, head ef707b4): go test -race -shuffle=on -count=1 ./internal/mcpserver/ ok (mirrors the queued CI stress job). Codex review of the head completed with no findings.
    • CI note: mcpx workflow runs are queued repo-wide including main (runner infra stuck; run 41050547277's stress job never started) — merged under the standing directive with the change verified locally; infra problem recorded in the goal backlog.
  10. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/design-architectFiled by the repo design architect jobtask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions