99# unless status = "intentionally-skipped".
1010
1111spec_version = " 3.2.0"
12- honest_claim = " OpenAPI 3.1 partial ; 3.2 not yet ."
12+ honest_claim = " OpenAPI 3.1 mostly ; 3.2 typed and parsed; full codegen for 3.2-specific behaviors WIP ."
1313
1414[[entry ]]
15- catalog_ref = " objects.PathItem .fields.webhooks"
16- status = " unsupported "
17- reason = " webhooks parsed into extra; analysis.rs:3493 only walks spec.paths "
15+ catalog_ref = " objects.OpenAPI .fields.webhooks"
16+ status = " partial "
17+ reason = " T4: spec. webhooks parsed and walked into op extraction; types emitted but no typed Webhook dispatcher yet "
1818fixtures = [" webhooks/basic-webhook.yaml" ]
1919
2020[[entry ]]
2121catalog_ref = " objects.Path Item.additionalOperations"
22- status = " unsupported "
23- reason = " PathItem.operations() enumerates 8 hardcoded methods; 3.2 additions absent "
22+ status = " supported "
23+ reason = " D1: typed field on PathItem; codegen emits methods via reqwest::Method::from_bytes "
2424fixtures = [" pathitem/additional-operations-3.2.yaml" ]
2525
2626[[entry ]]
27- catalog_ref = " objects.Path Item.query"
28- status = " unsupported "
29- reason = " 3.2 adds the `query` HTTP method; PathItem struct has no field for it "
27+ catalog_ref = " objects.Path Item.fields. query"
28+ status = " supported "
29+ reason = " D1: typed field on PathItem; codegen emits a method using reqwest::Method::from_bytes( \" QUERY \" ) "
3030fixtures = [" pathitem/query-method-3.2.yaml" ]
3131
3232[[entry ]]
3333catalog_ref = " objects.Parameter.style.deepObject"
3434status = " partial"
35- reason = " F1 typed style/explode/allowReserved on Parameter; codegen at analysis.rs:3767 still ignores them"
35+ reason = " F1 typed style/explode/allowReserved on Parameter; codegen at analysis.rs:3767 still ignores them (T14) "
3636fixtures = [" parameter/deepobject-query.yaml" ]
3737
3838[[entry ]]
3939catalog_ref = " objects.Parameter.in.header"
40- status = " unsupported "
41- reason = " header parameters silently dropped at client_generator.rs:613-673,717-775 "
40+ status = " supported "
41+ reason = " T1: header request parameters wired through codegen; required headers reach the wire "
4242fixtures = [" parameter/header-required.yaml" ]
4343
4444[[entry ]]
@@ -49,24 +49,166 @@ fixtures = ["schema/type-string-or-null.yaml"]
4949
5050[[entry ]]
5151catalog_ref = " objects.Components.pathItems"
52- status = " unsupported "
53- reason = " no struct field on Components for pathItems "
52+ status = " partial "
53+ reason = " F1: Components.pathItems typed as BTreeMap<String, PathItem>. Path Item $ref resolution still TODO (H11) "
5454fixtures = [" components/path-items-component.yaml" ]
5555
5656[[entry ]]
5757catalog_ref = " objects.Security Scheme.type[mutualTLS]"
58- status = " unsupported "
59- reason = " no SecurityScheme struct at all; entire securitySchemes is in Components.extra "
58+ status = " partial "
59+ reason = " H2: SecurityScheme::MutualTls typed; runtime auth wiring still defers to bearer/apiKey path (T3) "
6060fixtures = [" security/mutual-tls.yaml" ]
6161
6262[[entry ]]
6363catalog_ref = " objects.Schema.$dynamicRef"
64- status = " unsupported "
65- reason = " only obsoleted $recursiveRef/$recursiveAnchor modeled (openapi.rs:43-49) "
64+ status = " partial "
65+ reason = " J1: Schema::DynamicRef variant + SchemaDetails.$dynamicAnchor typed. Full $dynamicAnchor scope resolution is TODO "
6666fixtures = [" schema/dynamic-ref-tree.yaml" ]
6767
6868[[entry ]]
6969catalog_ref = " objects.Components.mediaTypes"
70- status = " unsupported "
71- reason = " 3.2-only Components bucket; not modeled "
70+ status = " supported "
71+ reason = " F1: Components.mediaTypes is typed BTreeMap<String, MediaType> "
7272fixtures = [" components/media-types-component-3.2.yaml" ]
73+
74+ # ── 3.2 deltas additionally landed ──
75+
76+ [[entry ]]
77+ catalog_ref = " objects.Server.fields.name"
78+ status = " supported"
79+ reason = " H1+D8: Server.name typed"
80+ fixtures = []
81+
82+ [[entry ]]
83+ catalog_ref = " objects.Tag.fields.summary"
84+ status = " supported"
85+ reason = " H9+D5"
86+ fixtures = []
87+
88+ [[entry ]]
89+ catalog_ref = " objects.Tag.fields.parent"
90+ status = " supported"
91+ reason = " H9+D5"
92+ fixtures = []
93+
94+ [[entry ]]
95+ catalog_ref = " objects.Tag.fields.kind"
96+ status = " supported"
97+ reason = " H9+D5"
98+ fixtures = []
99+
100+ [[entry ]]
101+ catalog_ref = " objects.OAuth Flows.fields.deviceAuthorization"
102+ status = " supported"
103+ reason = " H2+D4"
104+ fixtures = []
105+
106+ [[entry ]]
107+ catalog_ref = " objects.Security Scheme.fields.oauth2MetadataUrl"
108+ status = " supported"
109+ reason = " H2+D4"
110+ fixtures = []
111+
112+ [[entry ]]
113+ catalog_ref = " objects.Security Scheme.fields.deprecated"
114+ status = " supported"
115+ reason = " H2+D10"
116+ fixtures = []
117+
118+ [[entry ]]
119+ catalog_ref = " objects.Discriminator.fields.defaultMapping"
120+ status = " partial"
121+ reason = " D9: typed; emission of fallback enum variant TODO"
122+ fixtures = []
123+
124+ [[entry ]]
125+ catalog_ref = " objects.Media Type.fields.itemSchema"
126+ status = " partial"
127+ reason = " D3: typed; codegen TODO"
128+ fixtures = []
129+
130+ [[entry ]]
131+ catalog_ref = " objects.OpenAPI.fields.$self"
132+ status = " partial"
133+ reason = " F1+D6: typed; full Appendix-F resolution TODO"
134+ fixtures = []
135+
136+ # ── Phase 1 silent failures ──
137+
138+ [[entry ]]
139+ catalog_ref = " objects.Operation.fields.deprecated"
140+ status = " supported"
141+ reason = " F1+T13: typed and surfaced into rustdoc"
142+ fixtures = []
143+
144+ [[entry ]]
145+ catalog_ref = " objects.Operation.fields.summary"
146+ status = " supported"
147+ reason = " T13: rustdoc on every method"
148+ fixtures = []
149+
150+ [[entry ]]
151+ catalog_ref = " objects.Path Item.method[options]"
152+ status = " supported"
153+ reason = " T2: emits a real options request via reqwest::Method::OPTIONS instead of silently downgrading to GET"
154+ fixtures = []
155+
156+ [[entry ]]
157+ catalog_ref = " objects.Path Item.method[trace]"
158+ status = " supported"
159+ reason = " T2"
160+ fixtures = []
161+
162+ [[entry ]]
163+ catalog_ref = " objects.Path Item.method[head]"
164+ status = " supported"
165+ reason = " T2"
166+ fixtures = []
167+
168+ [[entry ]]
169+ catalog_ref = " objects.Operation.operationId.uniqueness"
170+ status = " supported"
171+ reason = " T6: collision detection at analysis time"
172+ fixtures = []
173+
174+ [[entry ]]
175+ catalog_ref = " objects.Request Body.fields.required"
176+ status = " supported"
177+ reason = " T11: required:false → Option<T> generated parameter"
178+ fixtures = []
179+
180+ [[entry ]]
181+ catalog_ref = " objects.Operation.fields.tags"
182+ status = " supported"
183+ reason = " F1: typed Vec<Tag>"
184+ fixtures = []
185+
186+ [[entry ]]
187+ catalog_ref = " objects.Path.templating.percent-encoding"
188+ status = " supported"
189+ reason = " T5: __pct_encode_path_segment helper emitted into the generated client (RFC3986 §3.3)"
190+ fixtures = []
191+
192+ [[entry ]]
193+ catalog_ref = " objects.Auth.config.ApiKey"
194+ status = " supported"
195+ reason = " T3: ApiKey + Custom auth_config variants emitted by client; previously hard-coded bearer_auth"
196+ fixtures = []
197+
198+ [[entry ]]
199+ catalog_ref = " objects.Auth.config.Custom"
200+ status = " supported"
201+ reason = " T3"
202+ fixtures = []
203+
204+ [[entry ]]
205+ catalog_ref = " objects.Responses.range[2XX-5XX]"
206+ status = " supported"
207+ reason = " T8: range-keyed responses produce guarded match arms"
208+ fixtures = []
209+
210+ [[entry ]]
211+ catalog_ref = " objects.Operation.streaming.text-event-stream"
212+ status = " supported"
213+ reason = " T15: SSE auto-detection from response content-type"
214+ fixtures = []
0 commit comments