Skip to content

mcpx: Phase 3 of #1753 — elicitation form gate ({} means form; url-only is not form-capable) + register truth-up + nix#210 evidence #1757

Closed

Description

@dezren39

Phase 3 of #1753 — elicitation form gate + register truth-up + nix#210 evidence

Design: #1753 (mcpx sub-capability gating). Design doc: files/designs/code-mcpx-subcapability-gating.md in the keep-the-four-repos-healthy goal workspace. Origin: dezren39/nix#210. Gated on Phase 1 of #1753 (same file, pkgs/mcpx/internal/mcpserver/conn.go).

Problem (verified on main f6760a69)

Peer.CanElicit (pkgs/mcpx/internal/mcpserver/conn.go ~L232-249) special-cases url (revision ≥ 2025-11-25 plus the declared url key) but returns true for form against any elicitation declaration — including a 2025-11-25+ host that declared only {"url": {}}, which cannot render a form and would receive a request with a requestedSchema it never agreed to. Compare-register row CAP-08: "{} means form only"; the form gate ignores a url-only declaration.

Scope (decision recorded on #1753)

  • CanElicit("form") reads the declaration's shape where the revision defines sub-keys:
    • Peer revision ≥ 2025-11-25: form is sendable iff the declaration carries a form key or is empty (elicitation: {} is the form-only declaration). A declaration carrying only url is not form-capable.
    • Peer revision < 2025-11-25: elicitation has no sub-keys; presence means form, exactly as today.
    • The url branch is unchanged. AnswersInline inherits the corrected form answer.
    • Malformed declaration values behave as undeclared (existing tolerance).
  • Truth-up (after Phases 1–2 have landed):
    • Compare-register rows CAP-02, CAP-04, CAP-05, CAP-06, CAP-08, SMP-09, SMP-11 in pkgs/mcpx/docs/compare/register/ updated to as-built — several were stale before this design (roots answering and handler-gated declaration landed earlier; cite those PRs/commits where the register names them).
    • Completion evidence comment on dezren39/nix#210 covering each of its acceptance bullets with its landing PR; close nix#210 if and only if every bullet is met, otherwise name the unmet bullet on both issues. (Commenting/closing on the nix repo is the cross-repo set rule: nix#210 is the origin record, mcpx: design — sub-capability gating (gate on sampling.tools / sampling.context / elicitation.form, not parent presence) #1753 is the design of record in the canonical repo.)

Out of scope

Acceptance criteria

  • Tests cover declarations: url-only (form refused at 2025-11-25+), form-only, both keys, {} (form allowed), legacy pre-2025-11-25 (form allowed), malformed (treated as undeclared).
  • A url-only host is no longer offered form elicitations on either the legacy wire path or the modern input_required path (sendableTo covers both); form-declaring hosts are unaffected.
  • Register rows listed above match the code; the nix#210 evidence comment is posted and nix#210 is closed iff all its acceptance bullets are met.
  • CI green (GitHub Actions; per fleet rule, no builds on the sandbox).

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
    status/blockedQueue or user escalation state
    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/sSmall: expected under 2 hours of work
    on Oct 28, 2026
  2. developing-today commented on Oct 28, 2026

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

    @dezren39
    MemberAuthor

    🤖 Agent note · filed

  4. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up — triage of Phase 3 elicitation form gate

  5. 47 remaining items

  6. added
    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 29, 2026
  7. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  8. added a commit that references this issue on Oct 29, 2026
  9. dezren39 commented on Oct 29, 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/sSmall: expected under 2 hours of workkind/bugSomething isn't working (prefixed form of the classic bug label)priority/normalOrdinary priority (the default)source/design-architectFiled by the repo design architect jobstatus:donetask/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