Skip to content

Commit 1f7dfa9

Browse files
committed
Add SEP-1330 (ElicitResult and EnumSchema redesign) requirement-traceability YAML
Backfill for the released 2025-11-25 spec version. Rows point at the check IDs already emitted by src/scenarios/server/elicitation-enums.ts, plus one untested check ID for the ElicitResult string[] content extension. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011sMCnjDGXbdhABdzP1r96K
1 parent 1ca3bc3 commit 1f7dfa9

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

src/seps/sep-1330.yaml

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# SEP-1330: ElicitResult and EnumSchema redesign (SEP issue #1330). Part of
2+
# the released 2025-11-25 spec version — the changelog entry reads: "Update
3+
# `ElicitResult` and `EnumSchema` to use a more standards-based approach and
4+
# support titled, untitled, single-select, and multi-select enums".
5+
#
6+
# Attribution: sentences were assigned to this SEP by diffing the released
7+
# elicitation page (docs/specification/2025-11-25/client/elicitation.mdx)
8+
# against the 2025-06-18 version. The page co-locates three SEPs: every RFC
9+
# 2119 keyword sentence in the diff belongs to SEP-1036 (URL mode / mode
10+
# negotiation — see sep-1036.yaml) or SEP-1034 (default values, including the
11+
# `default` members inside the enum examples and the "Clients that support
12+
# defaults SHOULD pre-populate form fields" sentence — see sep-1034.yaml).
13+
# SEP-1330's page delta is keyword-less: the Enum Schema subsection rewrite
14+
# (four variants replacing the 2025-06-18 `enum` + `enumNames` example) plus
15+
# the "(beyond enums)" carve-out. The ElicitResult half of the SEP has no
16+
# prose on the elicitation page at all — it lives in the Schema Reference
17+
# (content values gained `string[]` for multi-select submissions).
18+
#
19+
# Severity ruling (proposed — pending maintainer sign-off): treat the
20+
# keyword-less rows below as MUST-equivalent → FAILURE, because the enum
21+
# variant shapes and the ElicitResult content type are the definitional wire
22+
# contract this SEP establishes (same precedent as sep-1303's error-taxonomy
23+
# rows).
24+
#
25+
# Check IDs: rows 1–5 point at the IDs actually emitted by the existing
26+
# scenario src/scenarios/server/elicitation-enums.ts (they predate this yaml,
27+
# hence the elicitation-sep1330-* prefix rather than sep-1330-*). That
28+
# scenario also emits a failure-only gate ID, elicitation-sep1330-general,
29+
# which is deliberately not a requirement row (scenario gates stay in the
30+
# manifest's `untracked` bucket).
31+
#
32+
# In the quoted enum examples below, "…" elides the `title`, `description`,
33+
# and `default` members: title/description are unchanged decoration and the
34+
# `default` members belong to SEP-1034 (claimed there, not here).
35+
sep: 1330
36+
spec_url: https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation#requested-schema
37+
requirements:
38+
# ── Enum Schema variants (form mode `requestedSchema`) ────────────────────
39+
# The four rows below quote the Enum Schema item of "The schema is
40+
# restricted to these primitive types:" — the shapes are given as JSON
41+
# examples, flattened here per the table/example-flattening style used in
42+
# sep-1036.yaml. The corresponding Schema Reference types are
43+
# UntitledSingleSelectEnumSchema, TitledSingleSelectEnumSchema,
44+
# UntitledMultiSelectEnumSchema, and TitledMultiSelectEnumSchema.
45+
- check: elicitation-sep1330-untitled-single
46+
text: 'The schema is restricted to these primitive types: 4. Enum Schema — Single-select enum (without titles): { "type": "string", …, "enum": ["Red", "Green", "Blue"], … }'
47+
48+
- check: elicitation-sep1330-titled-single
49+
text: 'The schema is restricted to these primitive types: 4. Enum Schema — Single-select enum (with titles): { "type": "string", …, "oneOf": [ { "const": "#FF0000", "title": "Red" }, { "const": "#00FF00", "title": "Green" }, { "const": "#0000FF", "title": "Blue" } ], … }'
50+
51+
- check: elicitation-sep1330-untitled-multi
52+
text: 'The schema is restricted to these primitive types: 4. Enum Schema — Multi-select enum (without titles): { "type": "array", …, "minItems": 1, "maxItems": 2, "items": { "type": "string", "enum": ["Red", "Green", "Blue"] }, … }'
53+
54+
- check: elicitation-sep1330-titled-multi
55+
text: 'The schema is restricted to these primitive types: 4. Enum Schema — Multi-select enum (with titles): { "type": "array", …, "minItems": 1, "maxItems": 2, "items": { "anyOf": [ { "const": "#FF0000", "title": "Red" }, { "const": "#00FF00", "title": "Green" }, { "const": "#0000FF", "title": "Blue" } ] }, … }'
56+
57+
# ── Legacy titled enum (backwards compatibility) ──────────────────────────
58+
# The released elicitation page dropped 2025-06-18's `enumNames` example
59+
# entirely; the legacy shape survives only as the deprecated
60+
# LegacyTitledEnumSchema in the Schema Reference (quoted below). The check
61+
# asserts a server can still emit a well-formed legacy titled enum
62+
# (`enumNames` parallel to `enum`) during the deprecation window.
63+
- check: elicitation-sep1330-legacy-enumnames
64+
text: 'LegacyTitledEnumSchema — Use TitledSingleSelectEnumSchema instead. This interface will be removed in a future version. / enumNames?: string[] — (Legacy) Display names for enum values. Non-standard according to JSON schema 2020-12.'
65+
url: https://modelcontextprotocol.io/specification/2025-11-25/schema#legacytitledenumschema
66+
67+
# ── ElicitResult content redesign ─────────────────────────────────────────
68+
# Gap — untested: this is the ElicitResult half of the SEP. In 2025-06-18
69+
# the content values were `string | number | boolean`; 2025-11-25 adds
70+
# `string[]` so multi-select submissions can be returned. Wire-observable
71+
# on the server suite: the harness-as-client returns array-valued content
72+
# for the multi-select fields and asserts the server accepts it (the
73+
# originating tools/call completes without error). The existing
74+
# elicitation-sep1330-enums scenario already replies with array content but
75+
# emits no check for the acceptance — fold this assertion into that
76+
# scenario rather than adding a new one. The "only present when action is
77+
# accept and mode was form" conditionality in the surrounding prose is
78+
# SEP-1036's mode split, not claimed here.
79+
- check: sep-1330-elicit-result-array-content
80+
text: 'content?: { [key: string]: string | number | boolean | string[] } — The submitted form data … Contains values matching the requested schema.'
81+
url: https://modelcontextprotocol.io/specification/2025-11-25/schema#elicitresult
82+
# ── Dispositioned without rows (deliberate skips) ─────────────────────────
83+
# - "Note that complex nested structures, arrays of objects (beyond enums),
84+
# and other advanced JSON Schema features are intentionally not supported
85+
# to simplify client user experience." — the base restriction predates
86+
# this SEP (2025-06-18: "arrays of objects"); SEP-1330's delta is only
87+
# the "(beyond enums)" carve-out, whose operative content (enum option
88+
# arrays are permitted) is covered by the two multi-select check rows
89+
# above. Keyword-less and framed as design rationale, so no row.
90+
# - "To simplify client user experience, form mode elicitation schemas are
91+
# limited to flat objects with primitive properties only." — reworded
92+
# from 2025-06-18 ("To simplify implementation for clients, elicitation
93+
# schemas are limited to flat objects with primitive properties only");
94+
# no new obligation from this SEP (the "form mode" qualifier is
95+
# SEP-1036's), so no row.

0 commit comments

Comments
 (0)