Repository navigation
Description
Relocated from dezren39/darwin-nix#257 on 2026-10-28 (placement audit): mcpx's single source lives in developing-today/code (pkgs/mcpx); re-home tracked at #309. Original body below; issue references inside it are historical (dezren39/nix numbering).
From docs/spec/conformance-matrix.md gap keys: user-identity (4: elicitation/sampling must not assume user identity), annotation-trust (2: untrusted tool annotations shown as trusted), rate-limits (2), 32021-broker-fallback, accept-unadvertised, invalid-cursor (an invalid list cursor restarts at page 1 instead of -32602), resource-uri-encoding (mcpx:/// built without percent-encoding the upstream URI -- RFC 3986), prompt-validation, stdio-restart (client should restart a crashed stdio server; unverified), modern-invalidation (a notification should invalidate a fresh cache entry; unverified). Each row names its test, skipped with the gap.
Acceptance criteria
- Each named gap key (user-identity, annotation-trust, rate-limits, 32021-broker-fallback, accept-unadvertised, invalid-cursor, resource-uri-encoding, prompt-validation, stdio-restart, invalidation) is either fixed with a conformance row passing, or explicitly split into its own tracked issue — none silently dropped.
- Invalid list cursors return -32602 instead of restarting at page 1.
-
mcpx://resource URIs percent-encode the upstream URI per RFC 3986.
Activity
developing-today commentedon Oct 28, 2026
CODE-882
dezren39 commentedon Oct 28, 2026
History carried over from dezren39/darwin-nix#257 (verbatim, oldest first):
@dezren39 · 2026-10-27T15:35:27Z
Intake review
Fleet monitor intake pass, 2026-10-27 (repo-fleet-monitor).
Related: the 2026-09-30 mcpx conformance set — parent analysis #252, siblings #253, #254, #255, #256, #257, #258, #259 (filed together from
docs/spec/conformance-matrix.mdin dezren39/nix). Treat the set as one body of work; do not re-file per-gap issues.Notes: A bundle of the smaller conformance gaps (see the gap-key list in the body). Effort l as a bundle; most individual keys look s/m. Priority low: real spec deviations, no live-user breakage evidenced.
Risks: Bundle rot — closing this with only the easy keys done. The acceptance criteria force an explicit disposition per key.
Suggested approach: split per key at work time (invalid-cursor and URI-encoding first — both are small, user-visible correctness fixes), keep this issue as the set tracker.
@dezren39 · 2026-10-28T19:16:14Z
Triage verdict (task 2312): PARTIALLY RESOLVED, remainder split by cluster — confirmed gaps routed, design-blocked clusters stay tracked here.
Verified at developing-today/code main
35726e8eagainstpkgs/mcpx/docs/spec/conformance-matrix.md:Already resolved since filing (2 of the named items):
pagination-invalid-cursor-32602is marked tested in all five spec sections. Acceptance item 2 is done.Still gaps at HEAD — 29 rows, 13 keys. Routed as fix task 2639 (queue
repo-health-nix-pilot, deduperepo-health:v1:fix:dezren39/nix:issue:257), three tractable clusters:confirmDestructivegate takes an untrusted upstream annotation as its deciding input. Safety-relevant; fix first.prompts/getresults are passed on unvalidated.Staying on this issue (not silently dropped, not in the packet):
caching-notification-invalidates): both rows self-labelled unverified — verify before routing a fix.docs/spec/revision-conflicts.md).revisions.go; reversing it is a design call.dezren39 commentedon Oct 28, 2026
🤖 Agent note · picked up
44 remaining items
dezren39 commentedon Nov 3, 2026
resource-uri-encoding disposition (task 8024, repo-health-code-pilot)
Already encoded at current main — no fix needed. Verified at main
bb4624b2a(code present since the mcpx migration, #4626).Construction (
pkgs/mcpx/internal/cli/serve.go):mcpxURI(serve.go:1433-1435):"mcpx://" + ns + "/" + escapeURIPath(strings.TrimPrefix(uri, "/"))— upstream URI is never concatenated raw.escapeURIPath(serve.go:1453-1465): percent-encodes every byte RFC 3986 disallows in a path (keeps pchar +/, emits uppercase%HH, including encoding%itself so already-encoded upstreams round-trip exactly).splitMCPXURI(serve.go:1438-1449): inverts it withurl.PathUnescape.exposedTemplate(serve.go:1515-1538): same escaping on literal portions,{expressions}preserved verbatim so templates keep their variables.Test evidence:
pkgs/mcpx/internal/cli/serve_uri_test.go:12TestMCPXResourceURIs— asserts the exposed URI parses (mcpxscheme, namespace host, no query/fragment), matches an RFC 3986 path pattern, round-trips throughsplitMCPXURI, and leaves an ordinary URI unchanged, across revisions 2025-06-18 / 2025-11-25 / 2026-07-28 (spaces,#,?, unicode, malformed%, already-encoded inputs covered).Conformance registration (already present, nothing to add):
pkgs/mcpx/internal/conformance/coverage_features.go:15:resources-custom-scheme-rfc3986(PerRev over the three revisions)pkgs/mcpx/docs/spec/conformance-matrix.md:1023,1545,2262all marked tested.registerGapsentry for URI encoding; the only resource-side gap is the unrelatedresources-annotations-defs(🎨 Palette: Add ARIA labels to empty icon buttons #207).No code changed;
resources-sec-validate-uris/TestResourceSubscriptionsReachUpstreamuntouched and unaffected.dezren39 commentedon Nov 3, 2026
🤖 Agent note · done
Re-triage verdict (2026-11-03, main c3c9423) — still live; most keys landed, one unverified key routed to task 8024
Disposition of all ten gap keys against fresh main:
mrtr-missing-capability-error-32021+errors-method-not-found-for-unadvertised-capabilitystill registered inpkgs/mcpx/internal/conformance/coverage_messages.go:131-133pagination-invalid-cursor-32602is registered as covered inpkgs/mcpx/internal/conformance/coverage_utilities.goandutilities_test.go:407asserts -32602 fortools/listwith cursornot-a-cursor; no longer a registered gapcaching-notification-invalidatesmarked tested (daemon.TestListChangedInvalidatesPoolCache, matrix line 1909)coverage_clientfeatures.go:156-160(elicitation-server-state-bound-to-user,-stored-state-bound-to-user,-no-trust-client-user-id,-state-not-session-id-alone)stdio-client-restart-crashed-serverregistered incoverage_transport.go:116registerGapslist on main, but no conformance row/test for percent-encodingmcpx://upstream URIs was found either. It is an explicit acceptance bullet of this issue, so it must not silently drop: routed to follow-up queue task 8024 (small_fix, verify-then-fix, packet-1957-uri-encoding.json)Ordering/blockers: none blocking. #2438 proceeds independently; the two still-registered gaps above stay owned by this issue until split or fixed; task 8024 closes the last unverified bullet. This issue stays open as the parent for the remaining keys.
developing-today commentedon Nov 6, 2026
🤖 Agent note · escalated
developing-today commentedon Nov 6, 2026
Correction to the fleet monitor escalation note above (its label names were stripped by a shell substitution error when posting): the stale labels on this issue are
queue/claimed+work/assigned; the requeue path, if the reviewer finds the work is not done, is to swap them toqueue/queued+status/needs-triageand enqueue a fresh triage packet;user/reviewwas added by that note.developing-today commentedon Nov 7, 2026
Picked up by
repo-worker-code-g— working this now. (Fleet queue fallback mode: the queue backend is down, so this issue's comments carry the claim. The claim stays live whilerepo-worker-code-gposts progress markers; after 30 minutes of silence any other worker may pick this up.)developing-today commentedon Nov 7, 2026
Progress from
repo-worker-code-g: triage: rate-limits + uri-encoding + accept-unadvertised verified done; checking remaining keys against current maindeveloping-today commentedon Nov 7, 2026
🤖 Agent note · triaged — per-key disposition at current main
origin/mainconformance registrations (pkgs/mcpx/internal/conformance/coverage_*.go), the matrix, and the split issues' states (fresh gh reads, 2026-11-07).Done / verified closed:
annotation-trust— split issue mcpx conformance: annotation trust — untrusted upstream annotations must not decide the destructive-confirmation gate (split of #1957) #2191 CLOSED (fix landed; design Design: mcpx write policy — one gate for writes (ask/allow/deny, argument rules, unknown-outcome ledger) #2126 also CLOSED).rate-limits— DONE: PR mcpx: rate-limit upstream sampling and elicitation requests (#2192) #2706 merged; mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192 / Design: mcpx upstream question rate limits — one limiter at the client choke point, keyed by the configured server #2333 / mcpx: Phase 2 of #2333 — rate-limit register truth-up (retire both gap rows) and #1957 evidence #2334 all CLOSED; matrix rows tested (landing evidence posted here 2026-11-01).prompt-validation— split issue mcpx conformance: validate upstream prompts/get results before passing them on (split of #1957) #2193 CLOSED;prompts-validate-iois a covered requirement on main.resource-uri-encoding— verified already-correct on main 2026-11-03 (serve.goescapeURIPath, RFC 3986; acceptance criterion 3 met; matrix rows tested).invalid-cursor— COVERED for list endpoints:pagination-invalid-cursor-32602is a passing conformance test (utilities_test.go:407, expects -32602; acceptance criterion 2 met). One unregistered residual:requirements.jsonnotes tasks/list bad cursors still silently page 0 — small, named here so it is not silently dropped.modern-invalidation— COVERED:caching-notification-invalidates→daemon.TestListChangedInvalidatesPoolCache(rev 2026-07-28).accept-unadvertised— the dispatch gate landed via mcpx: Phase 2 of #2434 — advertised-capability gate at dispatch (-32601 for completion/complete pre-2025-03-26 and resources/subscribe when not advertised) #2436 (CLOSED). One residual registered gap remains (below).Still open — exactly 7 registered gaps cite this issue's origin (#257) on current main:
elicitation-server-state-bound-to-user,elicitation-server-stored-state-bound-to-user,elicitation-server-no-trust-client-user-id,elicitation-state-not-session-id-alone— all with the same root: mcpx has no authenticated user. A design stance, not a patch; stays registered until/unless mcpx grows user identity.stdio-client-restart-crashed-server(stdio-restart) — still unverified: in-flight call fails, pool respawns only on next acquire subject to cooldown (coverage_transport.go:116).mrtr-missing-capability-error-32021(32021-broker-fallback) — tracked by the open split issue mcpx: Phase 3 of #2434 — -32021 when no broker audience can answer + error-register truth-up (ERR-08, conflict #8, three gap rows) #2438 (Phase 3 of design(mcpx): error honesty, finished — peer errors relayed as peer errors, unadvertised methods refused, -32021 when a capability is truly required #2434).errors-method-not-found-for-unadvertised-capability— mcpx answers methods regardless of negotiation; spec guidance asks -32601 (coverage_messages.go:131).Routing: issue #1957 stays OPEN as the set tracker, relabelled status/triaged + queue/queued.
user/reviewdischarged by this review: no key needs a Drew decision today — the actionable remainder is already split (#2438) or registered in the conformance gap list where any future mcpx work picks it up; nothing was silently dropped. Next worker: do not re-triage the done keys above; work #2438 or split the stdio-restart verification out of this tracker.developing-today commentedon Nov 7, 2026
Released by
repo-worker-code-g(outcome: free). Triaged per-key at current main: annotation-trust, rate-limits, prompt-validation, uri-encoding, invalid-cursor, invalidation all done/covered (splits #2191/#2192/#2193 closed, PR #2706). Remainder = 7 registered #257 gaps: user-identity x4 (no-authenticated-user design stance), stdio-restart unverified, mrtr-32021 (tracked by open #2438), method-not-found residual. Tracker stays open, status/triaged + queue/queued.