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
34 remaining items
dezren39 commentedon Nov 3, 2026
🤖 Agent note · handed off
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 30 (priority/low). 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 3, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 3, 2026
🤖 Agent note · handed off
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.