Skip to content

Commit 0e12ad7

Browse files
committed
Update WebSocket SSOT for RFC 7936, 8307, and 7692
1 parent 98a1a01 commit 0e12ad7

10 files changed

Lines changed: 101 additions & 19 deletions

.ssot/registry.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

.ssot/specs/SPEC-2005-websocket.yaml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,23 @@ body: |-
3131
- fragmented-message tracking with aggregate message-size enforcement
3232
- HTTP denial responses before upgrade acceptance
3333
- permessage-deflate negotiation and RSV1 handling on the HTTP/1.1, HTTP/2, and HTTP/3 paths
34+
- case-sensitive subprotocol token preservation and exact-match acceptance semantics
35+
- well-known WebSocket URI handling for `/.well-known/...` targets across supported carriers
3436
- RFC 8441 WebSocket bootstrap on the HTTP/2 carrier
3537
- RFC 9220 WebSocket bootstrap on the HTTP/3 carrier
3638
3739
## Evidence Tiers
3840
3941
The canonical package-wide target for WebSocket is defined in `docs/review/conformance/CERTIFICATION_BOUNDARY.md`.
4042
41-
- **local conformance** `tests/test_websocket_rfc6455.py`, `tests/test_websocket_rfc7692.py`, `tests/test_http2_websocket_rfc8441.py`, and `tests/test_http3_websocket_rfc9220.py`
42-
- **same-stack replay** `docs/review/conformance/external_matrix.same_stack_replay.json` and the canonical `0.3.9` same-stack bundle under `docs/review/conformance/releases/0.3.9/release-0.3.9/tigrcorn-same-stack-replay-matrix/`
43-
- **independent certification** the canonical independent matrix at `docs/review/conformance/external_matrix.release.json`
43+
- **local conformance** - `tests/test_websocket_rfc6455.py`, `tests/test_websocket_rfc7692.py`, `tests/test_websocket_rfc7936.py`, `tests/test_websocket_rfc8307.py`, `tests/test_http2_websocket_rfc8441.py`, and `tests/test_http3_websocket_rfc9220.py`
44+
- **same-stack replay** - `docs/review/conformance/external_matrix.same_stack_replay.json` and the canonical `0.3.9` same-stack bundle under `docs/review/conformance/releases/0.3.9/release-0.3.9/tigrcorn-same-stack-replay-matrix/`
45+
- **independent certification** - the canonical independent matrix at `docs/review/conformance/external_matrix.release.json`
4446
4547
## Current Certification Status
4648
47-
HTTP/1.1 WebSocket, RFC 8441 WebSocket-over-HTTP/2, and RFC 9220 WebSocket-over-HTTP/3 all now have preserved passing third-party artifacts in the canonical independent release bundle.
49+
HTTP/1.1 WebSocket, RFC 7692 permessage-deflate, RFC 8441 WebSocket-over-HTTP/2, and RFC 9220 WebSocket-over-HTTP/3 all now have preserved passing third-party artifacts in the canonical independent release bundle.
4850
49-
RFC 7692 across carriers is handled explicitly by the authoritative boundary rather than by narrative implication. The current release gate intentionally keeps RFC 7692 at `local_conformance`, so it is not an independent-certification blocker in the current bundle. A stricter all-surfaces-independent profile would still need additional third-party permessage-deflate artifacts. The package-owned TCP/TLS condition is satisfied separately, and the authoritative RFC 9220 requirement is now closed.
51+
RFC 7936 and RFC 8307 are governed as local-conformance WebSocket adjuncts. Their current proof surfaces are `tests/test_websocket_rfc7936.py` and `tests/test_websocket_rfc8307.py`.
5052
spec_kind: "local-policy"
5153
adr_ids: []

docs/protocols/websocket.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,21 @@ This build implements WebSocket handling across the HTTP/1.1, HTTP/2, and HTTP/3
1313
- fragmented-message tracking with aggregate message-size enforcement
1414
- HTTP denial responses before upgrade acceptance
1515
- permessage-deflate negotiation and RSV1 handling on the HTTP/1.1, HTTP/2, and HTTP/3 paths
16+
- case-sensitive subprotocol token preservation and exact-match acceptance semantics
17+
- well-known WebSocket URI handling for `/.well-known/...` targets across supported carriers
1618
- RFC 8441 WebSocket bootstrap on the HTTP/2 carrier
1719
- RFC 9220 WebSocket bootstrap on the HTTP/3 carrier
1820

1921
## Evidence tiers
2022

2123
The canonical package-wide target for WebSocket is defined in `docs/review/conformance/CERTIFICATION_BOUNDARY.md`.
2224

23-
- **local conformance** `tests/test_websocket_rfc6455.py`, `tests/test_websocket_rfc7692.py`, `tests/test_http2_websocket_rfc8441.py`, and `tests/test_http3_websocket_rfc9220.py`
24-
- **same-stack replay** `docs/review/conformance/external_matrix.same_stack_replay.json` and the canonical `0.3.9` same-stack bundle under `docs/review/conformance/releases/0.3.9/release-0.3.9/tigrcorn-same-stack-replay-matrix/`
25-
- **independent certification** the canonical independent matrix at `docs/review/conformance/external_matrix.release.json`
25+
- **local conformance** - `tests/test_websocket_rfc6455.py`, `tests/test_websocket_rfc7692.py`, `tests/test_websocket_rfc7936.py`, `tests/test_websocket_rfc8307.py`, `tests/test_http2_websocket_rfc8441.py`, and `tests/test_http3_websocket_rfc9220.py`
26+
- **same-stack replay** - `docs/review/conformance/external_matrix.same_stack_replay.json` and the canonical `0.3.9` same-stack bundle under `docs/review/conformance/releases/0.3.9/release-0.3.9/tigrcorn-same-stack-replay-matrix/`
27+
- **independent certification** - the canonical independent matrix at `docs/review/conformance/external_matrix.release.json`
2628

2729
## Current certification status
2830

29-
HTTP/1.1 WebSocket, RFC 8441 WebSocket-over-HTTP/2, and RFC 9220 WebSocket-over-HTTP/3 all now have preserved passing third-party artifacts in the canonical independent release bundle.
31+
HTTP/1.1 WebSocket, RFC 7692 permessage-deflate, RFC 8441 WebSocket-over-HTTP/2, and RFC 9220 WebSocket-over-HTTP/3 all now have preserved passing third-party artifacts in the canonical independent release bundle.
3032

31-
RFC 7692 across carriers is handled explicitly by the authoritative boundary rather than by narrative implication. The current release gate intentionally keeps RFC 7692 at `local_conformance`, so it is not an independent-certification blocker in the current bundle. A stricter all-surfaces-independent profile would still need additional third-party permessage-deflate artifacts. The package-owned TCP/TLS condition is satisfied separately, and the authoritative RFC 9220 requirement is now closed.
33+
RFC 7936 and RFC 8307 are governed as local-conformance WebSocket adjuncts. Their current proof surfaces are `tests/test_websocket_rfc7936.py` and `tests/test_websocket_rfc8307.py`.

docs/review/conformance/CERTIFICATION_BOUNDARY.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ The current required RFC surface remains:
4848
- RFC 9221
4949
- RFC 6455
5050
- RFC 7692
51+
- RFC 7936
52+
- RFC 8307
5153
- RFC 8441
5254
- RFC 9220
5355
- RFC 9297
@@ -111,7 +113,8 @@ The package-owned TCP/TLS condition is satisfied in this working tree.
111113

112114
The current machine-readable policy intentionally keeps the following RFC surfaces at `local_conformance` in the current release gate:
113115

114-
- RFC 7692
116+
- RFC 7936
117+
- RFC 8307
115118
- RFC 9221
116119
- RFC 9297
117120
- RFC 8470

docs/review/conformance/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ The canonical 0.3.9 release root is also **strict-target certifiably fully RFC c
7070

7171
The remaining broader items are explicitly outside the current authoritative blocker set:
7272

73-
- RFC 7692, RFC 9110 CONNECT / trailers / content coding, and RFC 6960 remain intentionally bounded at `local_conformance` in the current authoritative machine-readable policy
74-
- the stricter all-surfaces-independent overlay for those surfaces now also passes
73+
- RFC 7936, RFC 8307, RFC 9110 CONNECT / trailers / content coding, and RFC 6960 remain intentionally bounded at `local_conformance` in the current authoritative machine-readable policy
74+
- RFC 7692 now passes the stricter all-surfaces-independent overlay, while RFC 7936 and RFC 8307 remain governed local-conformance WebSocket adjuncts
7575
- the provisional all-surfaces and flow-control bundles remain non-certifying historical review aids
7676
- the historical intermediary / proxy seed corpus improves repository completeness and remains preserved
7777
- a minimum certified intermediary / proxy-adjacent corpus now exists under `intermediary_proxy_corpus_minimum_certified/`, but it is still intentionally narrower than a full multi-hop intermediary certification program

docs/review/conformance/certification_boundary.json

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
"RFC 9221",
3434
"RFC 6455",
3535
"RFC 7692",
36+
"RFC 7936",
37+
"RFC 8307",
3638
"RFC 8441",
3739
"RFC 9220",
3840
"RFC 9297",
@@ -215,10 +217,31 @@
215217
}
216218
},
217219
"RFC 7692": {
218-
"highest_required_evidence_tier": "local_conformance",
220+
"highest_required_evidence_tier": "independent_certification",
219221
"declared_evidence": {
220222
"local_conformance": [
221223
"websocket-permessage-deflate"
224+
],
225+
"independent_certification": [
226+
"websocket-http11-server-websockets-client-permessage-deflate",
227+
"websocket-http2-server-h2-client-permessage-deflate",
228+
"websocket-http3-server-aioquic-client-permessage-deflate"
229+
]
230+
}
231+
},
232+
"RFC 7936": {
233+
"highest_required_evidence_tier": "local_conformance",
234+
"declared_evidence": {
235+
"local_conformance": [
236+
"websocket-subprotocol-registry-semantics"
237+
]
238+
}
239+
},
240+
"RFC 8307": {
241+
"highest_required_evidence_tier": "local_conformance",
242+
"declared_evidence": {
243+
"local_conformance": [
244+
"websocket-well-known-uri"
222245
]
223246
}
224247
},

docs/review/conformance/certification_boundary.strict_target.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
"RFC 9204",
3333
"RFC 6455",
3434
"RFC 7692",
35+
"RFC 7936",
36+
"RFC 8307",
3537
"RFC 8441",
3638
"RFC 9220",
3739
"RFC 8446",
@@ -207,6 +209,22 @@
207209
},
208210
"highest_required_evidence_tier": "independent_certification"
209211
},
212+
"RFC 7936": {
213+
"highest_required_evidence_tier": "local_conformance",
214+
"declared_evidence": {
215+
"local_conformance": [
216+
"websocket-subprotocol-registry-semantics"
217+
]
218+
}
219+
},
220+
"RFC 8307": {
221+
"highest_required_evidence_tier": "local_conformance",
222+
"declared_evidence": {
223+
"local_conformance": [
224+
"websocket-well-known-uri"
225+
]
226+
}
227+
},
210228
"RFC 8441": {
211229
"highest_required_evidence_tier": "independent_certification",
212230
"declared_evidence": {

docs/review/conformance/claims_registry.json

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2255,23 +2255,29 @@
22552255
"id": "websocket_http11",
22562256
"spec_refs": [
22572257
"RFC 6455",
2258-
"RFC 7692"
2258+
"RFC 7692",
2259+
"RFC 7936",
2260+
"RFC 8307"
22592261
]
22602262
},
22612263
{
22622264
"boundary_status": "in_bounds_current_surface",
22632265
"id": "websocket_http2",
22642266
"spec_refs": [
22652267
"RFC 8441",
2266-
"RFC 7692"
2268+
"RFC 7692",
2269+
"RFC 7936",
2270+
"RFC 8307"
22672271
]
22682272
},
22692273
{
22702274
"boundary_status": "in_bounds_current_surface",
22712275
"id": "websocket_http3",
22722276
"spec_refs": [
22732277
"RFC 9220",
2274-
"RFC 7692"
2278+
"RFC 7692",
2279+
"RFC 7936",
2280+
"RFC 8307"
22752281
]
22762282
},
22772283
{
@@ -2446,10 +2452,22 @@
24462452
},
24472453
{
24482454
"family": "websocket_compression",
2449-
"highest_required_evidence_tier": "local_conformance",
2455+
"highest_required_evidence_tier": "independent_certification",
24502456
"id": "RFC-7692",
24512457
"standards_body": "IETF"
24522458
},
2459+
{
2460+
"family": "websocket_subprotocol",
2461+
"highest_required_evidence_tier": "local_conformance",
2462+
"id": "RFC-7936",
2463+
"standards_body": "IETF"
2464+
},
2465+
{
2466+
"family": "websocket_uri",
2467+
"highest_required_evidence_tier": "local_conformance",
2468+
"id": "RFC-8307",
2469+
"standards_body": "IETF"
2470+
},
24532471
{
24542472
"family": "websocket_http2",
24552473
"highest_required_evidence_tier": "independent_certification",

docs/review/conformance/corpus.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@
3535
"description": "permessage-deflate negotiation, RSV1 semantics, fragmented compression, and compressed payload handling.",
3636
"fixture": "tests/test_websocket_rfc7692.py"
3737
},
38+
{
39+
"name": "websocket-subprotocol-registry-semantics",
40+
"protocol": "websocket-subprotocol",
41+
"rfc": "7936",
42+
"description": "Case-sensitive WebSocket subprotocol token preservation and exact-match acceptance semantics.",
43+
"fixture": "tests/test_websocket_rfc7936.py"
44+
},
45+
{
46+
"name": "websocket-well-known-uri",
47+
"protocol": "websocket-uri",
48+
"rfc": "8307",
49+
"description": "Well-known WebSocket URI path preservation and carrier-parity handling for ws and wss targets.",
50+
"fixture": "tests/test_websocket_rfc8307.py"
51+
},
3852
{
3953
"name": "http2-websocket-extended-connect",
4054
"protocol": "http2-websocket",

tools/ssot_sync.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4378,6 +4378,8 @@ def ensure_category_tier_claim(
43784378
"feature_ids": [
43794379
"feat:rfc-6455",
43804380
"feat:rfc-7692",
4381+
"feat:rfc-7936",
4382+
"feat:rfc-8307",
43814383
"feat:rfc-8441",
43824384
"feat:rfc-9220",
43834385
"feat:contract-websocket-scope",

0 commit comments

Comments
 (0)