Repository navigation
conformance: sep-2640.yaml is pinned at a retired SEP revision — 7 of 30 rows test requirements that no longer exist #1335
Description
Summary
src/seps/sep-2640.yaml in the conformance fork is pinned at SEP commit 556154c (extracted 2026-06-05, with a forward reference to 2e04c48d for resources/directory/read). The file carries a deliberate in-file note to hold there "until #780 lands". The 2026-08-21 SEP rewrite makes that pin actively wrong rather than merely behind.
Counting the 30 requirement rows against the current sep/skills-extension branch text.
7 rows now assert requirements the SEP does not contain
sep-2640-server-expose-index—skill://index.jsonappears zero times in the current text.sep-2640-index-entry-type-enum— the entrytypefield is gone along with archives.sep-2640-archive-formatsep-2640-host-support-archive-formatssep-2640-archive-skillmd-at-rootsep-2640-archive-no-traversalsep-2640-host-archive-safety
Archives were removed by the core maintainers during review and now live in "Appendix: Deferred Features".
4 rows changed meaning
sep-2640-index-name-required— entries carry a verbatimfrontmatterobject, not a top-levelname.sep-2640-index-digest-required— the digest moved intoresources[].sep-2640-host-no-empty-index-assumption— now about empty or partialskills/listresults, not an absent index resource.sep-2640-host-verify-digest— strengthened. A read of a URI not listed inresources, and a read whose byte length differs from the entry'ssize, are each verification failures.
19 rows survive
The SKILL.md format and URI rows, plus all six resources/directory/read rows. Directory read survived the rewrite behind the same directoryRead capability gate, though the SEP now scopes its purpose to dynamic skills, non-skill resource trees, and refreshing a server's current view.
Roughly 23 new requirement families have zero coverage
skills/list: method, entry shape, pagination with atomic entries,ttlMsandcacheScopeon protocol 2026-07-28+, empty-or-partial listings permitted, hosts MUST NOT read a listing as proof of no skills.skills/get: method, and that it serves skills absent from the listing.- Entry schema
{frontmatter, uri, resources}, all three required. resourcescompleteness, the"dynamic"sentinel, and the invalid-entry rule (hosts MUST NOT load).resources[].sizerequired, and size mismatch as a verification failure.- Limits: 512 entries and 16 MiB per skill.
- Hosts MUST NOT prefetch, not on connection, listing, or approval.
- Host MUST compare fetched SKILL.md frontmatter field-by-field against the entry.
- Content-bound approval and its revocation when the
resourcesset changes. - The "acting on a skill" window, and unlisted-URI reads within it.
- Skill identity is
(server, uri). - Disk caches write-isolated or re-hashed on every read.
Backing scenarios
The split runs through them too. manifest.ts and directory.ts largely survive. index.ts tests the removed skill://index.json resource end to end and needs retiring or rewriting against skills/list.
Proposed work
- Delete the 7 dead rows, retire or rewrite
index.ts. - Reword the 4 changed rows.
- Add rows for the new surface, split into wire-observable (methods, pagination, entry schema,
resourcesshape,size, limits, capability declaration) and traceability-only (host caching, approval binding, context-window behavior), following the existingexcluded:convention for the host-internal ones. - Add a capability-declaration row asserting the settings object sits inline under the extension identifier per SEP-2133. The current check accepts both shapes, which is why core: extension capability declaration wraps settings in a 'config' envelope; SEP-2133 (Final) specifies them inline #1334 went unnoticed.
- Re-extract file-level provenance at the CM-stamped head and drop the "hold until ext/skills: align Indexer + IndexEntry + Catalog with the final SEP-2640 index schema (WG shape pending) #780" note.
Sequencing
Wait for the CM vote to close, expected around 2026-09-01, then re-extract in one pass rather than chasing the branch. Depends on #1333 for the server-side surface to test against.
Rebuild the ../conf-skills dist after any branch bump or the runner keeps executing the old scenarios.
Upstream PR: modelcontextprotocol/conformance 330, currently OPEN and REVIEW_REQUIRED, last updated 2026-08-04.
Activity
panyam commentedon Sep 21, 2026
Most of this landed while the issue sat. Recording it so the body stops reading as
current.
The premise here is that
sep-2640.yamlis pinned at556154cwith 7 dead archiverows. That was true on 2026-08-28. It stopped being true on 2026-09-11, when
upstream PR 330 merged carrying a re-extraction against the 2026-08-21 revision.
Against the five proposed items:
index.tsindex.tsis nowenumeration.tssep-2640-capability-declaration-inline, carrying the comment that names #1334Item 5 is conformance#511.
The SEP did not stop at Accepted: it went Final on 2026-09-11 (
8075db4a),four text commits past the extraction point, and moved off the
sep/skills-extensionbranch tomain. What that pass found:Skills specification's own backward-compatibility mechanisms. Declared as two
excluded rows, since both halves condition on a breaking revision of an external
spec that has not happened.
extensionsfield of the server's capabilities rather than loosely in theinitializeresponse, and theresources-capability requirement is now statedthere outright. Two rows restated, no check IDs moved.
pass swapped em-dashes for commas and parentheses. Nothing in CI compares a row's
text:against the spec, so this drifts silently.the above: it claimed 89 checks and 7 excluded rows against 90 and 8, and claimed
the scenarios emit 40 when they emit 42.
Suite unchanged at 45 pass / 0 fail / 0 warn / 0 skip, and confirmed to still grade
mcpkit by breaking the fixture and watching it go red.
Also stale in this issue: "Depends on #1333" (closed) and "wait for the CM vote,
expected around 2026-09-01" (closed 2026-09-03, Final 2026-09-11).
Closing once 511 merges. #1357 is unaffected and stays open.