Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@ id: "adr:1057"
number: 1057
slug: "webtransport-over-http3-draft13-carrier-compliance"
title: "WebTransport over HTTP/3 draft-13 carrier compliance"
status: "draft"
status: "superseded"
origin: "repo-local"
decision_date: null
tags: []
summary: "Tigrcorn shall certify WebTransport over HTTP/3 draft-13 as its own carrier compliance domain, separate from legacy draft02 compatibility and helper-only wire modeling."
supersedes: []
superseded_by: []
superseded_by:
- "adr:1068"
status_notes:
-
at: "2026-06-17T00:00:00Z"
note: "Created to govern draft-ietf-webtrans-http3-13 runtime compliance separately from legacy draft02 compatibility and helper-only wire modeling."
status: "draft"
-
status: "superseded"
note: "Pinned current profile replaces draft-13-default and floating active-draft decisions"
at: "2026-07-11T10:25:36Z"
references: []
body: |-
## Decision
Expand Down
13 changes: 9 additions & 4 deletions .ssot/adr/ADR-1061-webtransport-http3-draft-runtime-carrier.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@ id: "adr:1061"
number: 1061
slug: "webtransport-http3-draft-runtime-carrier"
title: "WebTransport over HTTP/3 runtime follows the active IETF draft target"
status: "accepted"
status: "superseded"
origin: "repo-local"
decision_date: null
tags: []
summary: "Decision: Tigrcorn owns WebTransport-over-HTTP/3 runtime behavior against the active IETF WebTransport HTTP/3 draft target, with draft maturity explicitly separated from RFC claims."
supersedes: []
superseded_by: []
superseded_by:
- "adr:1068"
status_notes:
-
status: "accepted"
note: "Accepted to govern the stack boundary before per-stack specs and features are added."
at: "2026-06-17T12:41:50Z"
note: "Accepted to govern the stack boundary before per-stack specs and features are added."
status: "accepted"
-
status: "superseded"
note: "Pinned current profile replaces draft-13-default and floating active-draft decisions"
at: "2026-07-11T10:25:36Z"
references: []
body: |-
Decision: Tigrcorn owns WebTransport-over-HTTP/3 runtime behavior against the active IETF WebTransport HTTP/3 draft target, with draft maturity explicitly separated from RFC claims.
Expand Down
41 changes: 41 additions & 0 deletions .ssot/adr/ADR-1068-webtransport-pinned-http3-wire-profile.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
schema_version: "0.8.0"
kind: "adr"
id: "adr:1068"
number: 1068
slug: "webtransport-pinned-http3-wire-profile"
title: "WebTransport enablement selects one pinned HTTP/3 wire profile"
status: "accepted"
origin: "repo-local"
decision_date: null
tags: []
summary: "`webtransport.enabled = true` selects one complete WebTransport-over-HTTP/3 profile pinned to draft-ietf-webtrans-http3-16. TLS ALPN remains `h3`."
supersedes:
- "adr:1057"
- "adr:1061"
superseded_by: []
status_notes:
-
at: "2026-07-11T10:25:33Z"
note: "Accepted pinned current WebTransport profile"
status: "accepted"
-
status: "accepted"
note: "Pinned current profile replaces draft-13-default and floating active-draft decisions"
at: "2026-07-11T10:25:36Z"
references: []
body: |-
## Decision

`webtransport.enabled = true` selects one complete WebTransport-over-HTTP/3 profile pinned to draft-ietf-webtrans-http3-16. TLS ALPN remains `h3`.

The current profile advertises `SETTINGS_WT_ENABLED = 1` at code point `0x2c7cf000`, `SETTINGS_ENABLE_CONNECT_PROTOCOL = 1`, and `SETTINGS_H3_DATAGRAM = 1`. It also advertises positive QUIC `max_datagram_frame_size` and the empty `reset_stream_at` transport parameter. Session establishment uses extended CONNECT with `:protocol = webtransport-h3` and `:scheme = https`.

`webtransport.max_sessions` remains local admission governance and is not encoded as draft-13 `SETTINGS_WT_MAX_SESSIONS` in the current profile. Draft-13 support is available only through explicit compatibility selection. Tigrcorn shall not combine incompatible setting identifiers, CONNECT tokens, stream formats, or reset behavior after selecting a profile.

## Consequences

- Required SETTINGS and QUIC capabilities are enabled atomically rather than through independent operator flags.
- Incomplete local or peer capability combinations fail closed before application dispatch.
- Existing `webtransport.*` application events and ASGI scope semantics remain stable.
- Wire-draft changes require a deliberate ADR/SPEC revision; "latest draft" is not a runtime policy.
- Draft-13 evidence remains historical and compatibility-scoped and does not certify the current profile.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"claim_ids":["clm:webtransport-h3-current-extended-connect.t0","clm:webtransport-h3-current-extended-connect.t1","clm:webtransport-h3-current-extended-connect.t2"],"feature_id":"feat:webtransport-h3-current-extended-connect","schema_version":"ssot.evidence.scaffold.v1","status":"planned","target_tier":"T2","test_ids":["tst:pytest.webtransport-h3-current-extended-connect.t0.proof-graph","tst:pytest.webtransport-h3-current-extended-connect.t1.proof-graph","tst:pytest.webtransport-h3-current-extended-connect.t2.proof-graph"]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"claim_ids":["clm:webtransport-h3-current-settings-negotiation.t0","clm:webtransport-h3-current-settings-negotiation.t1","clm:webtransport-h3-current-settings-negotiation.t2"],"feature_id":"feat:webtransport-h3-current-settings-negotiation","schema_version":"ssot.evidence.scaffold.v1","status":"planned","target_tier":"T2","test_ids":["tst:pytest.webtransport-h3-current-settings-negotiation.t0.proof-graph","tst:pytest.webtransport-h3-current-settings-negotiation.t1.proof-graph","tst:pytest.webtransport-h3-current-settings-negotiation.t2.proof-graph"]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"claim_ids":["clm:webtransport-h3-default-profile-enable.t0","clm:webtransport-h3-default-profile-enable.t1","clm:webtransport-h3-default-profile-enable.t2"],"feature_id":"feat:webtransport-h3-default-profile-enable","schema_version":"ssot.evidence.scaffold.v1","status":"planned","target_tier":"T2","test_ids":["tst:pytest.webtransport-h3-default-profile-enable.t0.proof-graph","tst:pytest.webtransport-h3-default-profile-enable.t1.proof-graph","tst:pytest.webtransport-h3-default-profile-enable.t2.proof-graph"]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"claim_ids":["clm:webtransport-h3-handshake-observability.t0","clm:webtransport-h3-handshake-observability.t1","clm:webtransport-h3-handshake-observability.t2"],"feature_id":"feat:webtransport-h3-handshake-observability","schema_version":"ssot.evidence.scaffold.v1","status":"planned","target_tier":"T2","test_ids":["tst:pytest.webtransport-h3-handshake-observability.t0.proof-graph","tst:pytest.webtransport-h3-handshake-observability.t1.proof-graph","tst:pytest.webtransport-h3-handshake-observability.t2.proof-graph"]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"claim_ids":["clm:webtransport-h3-profile-selection.t0","clm:webtransport-h3-profile-selection.t1","clm:webtransport-h3-profile-selection.t2"],"feature_id":"feat:webtransport-h3-profile-selection","schema_version":"ssot.evidence.scaffold.v1","status":"planned","target_tier":"T2","test_ids":["tst:pytest.webtransport-h3-profile-selection.t0.proof-graph","tst:pytest.webtransport-h3-profile-selection.t1.proof-graph","tst:pytest.webtransport-h3-profile-selection.t2.proof-graph"]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"claim_ids":["clm:webtransport-h3-required-quic-capabilities.t0","clm:webtransport-h3-required-quic-capabilities.t1","clm:webtransport-h3-required-quic-capabilities.t2"],"feature_id":"feat:webtransport-h3-required-quic-capabilities","schema_version":"ssot.evidence.scaffold.v1","status":"planned","target_tier":"T2","test_ids":["tst:pytest.webtransport-h3-required-quic-capabilities.t0.proof-graph","tst:pytest.webtransport-h3-required-quic-capabilities.t1.proof-graph","tst:pytest.webtransport-h3-required-quic-capabilities.t2.proof-graph"]}
2 changes: 1 addition & 1 deletion .ssot/registry.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .ssot/reports/profile-defaults/default.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"audit_version":1,"claim_id":"TC-AUDIT-PROFILE-EFFECTIVE-DEFAULTS","effective_defaults_flat":{"app.app_dir":null,"app.config_file":null,"app.env_file":null,"app.env_prefix":"TIGRCORN","app.factory":false,"app.interface":"auto","app.lifespan":"auto","app.profile":"default","app.reload":false,"app.reload_dirs":[],"app.reload_exclude":[],"app.reload_include":[],"app.target":null,"debug":false,"hooks.on_reload":[],"hooks.on_shutdown":[],"hooks.on_startup":[],"http.alt_svc_auto":false,"http.alt_svc_headers":[],"http.alt_svc_max_age":86400,"http.alt_svc_persist":false,"http.connect_allow":[],"http.connect_policy":"deny","http.content_coding_policy":"allowlist","http.content_codings[0]":"gzip","http.content_codings[1]":"deflate","http.content_codings[2]":"br","http.enable_h2c":false,"http.http1_buffer_size":65536,"http.http1_header_read_timeout":null,"http.http1_keep_alive":true,"http.http1_max_incomplete_event_size":65536,"http.http2_adaptive_window":false,"http.http2_initial_connection_window_size":65535,"http.http2_initial_stream_window_size":65535,"http.http2_keep_alive_interval":null,"http.http2_keep_alive_timeout":null,"http.http2_max_concurrent_streams":128,"http.http2_max_frame_size":16384,"http.http2_max_headers_size":65536,"http.http_versions[0]":"1.1","http.idle_timeout":30.0,"http.keep_alive_timeout":5.0,"http.max_body_size":16777216,"http.max_header_size":65536,"http.read_timeout":30.0,"http.shutdown_timeout":30.0,"http.trailer_policy":"pass","http.write_timeout":30.0,"listeners[0].alpn_protocols[0]":"http/1.1","listeners[0].backlog":2048,"listeners[0].bind":null,"listeners[0].crl_mode":"off","listeners[0].endpoint":null,"listeners[0].fd":null,"listeners[0].group":null,"listeners[0].host":"127.0.0.1","listeners[0].http_versions[0]":"1.1","listeners[0].insecure_bind":null,"listeners[0].kind":"tcp","listeners[0].max_datagram_size":1200,"listeners[0].nodelay":true,"listeners[0].ocsp_cache_size":128,"listeners[0].ocsp_max_age":43200.0,"listeners[0].ocsp_mode":"off","listeners[0].ocsp_soft_fail":false,"listeners[0].path":null,"listeners[0].pipe_mode":"rawframed","listeners[0].port":8000,"listeners[0].protocols[0]":"http1","listeners[0].quic_bind":null,"listeners[0].quic_require_retry":false,"listeners[0].quic_secret":null,"listeners[0].resolved_cipher_suites":[],"listeners[0].reuse_address":true,"listeners[0].reuse_port":false,"listeners[0].revocation_fetch":true,"listeners[0].scheme":"http","listeners[0].ssl_ca_certs":null,"listeners[0].ssl_certfile":null,"listeners[0].ssl_ciphers":null,"listeners[0].ssl_crl":null,"listeners[0].ssl_keyfile":null,"listeners[0].ssl_keyfile_password":null,"listeners[0].ssl_require_client_cert":false,"listeners[0].umask":null,"listeners[0].user":null,"listeners[0].websocket":false,"logging.access_log":true,"logging.access_log_file":null,"logging.access_log_format":null,"logging.error_log_file":null,"logging.explicit_fields":[],"logging.level":"info","logging.log_config":null,"logging.structured":false,"logging.use_colors":null,"metrics.bind":null,"metrics.enabled":false,"metrics.otel_endpoint":null,"metrics.statsd_host":null,"process.limit_max_requests":null,"process.max_requests_jitter":0,"process.pid_file":null,"process.runtime":"auto","process.worker_class":"local","process.worker_healthcheck_timeout":30.0,"process.workers":1,"proxy.default_headers":[],"proxy.forwarded_allow_ips":[],"proxy.include_date_header":true,"proxy.include_server_header":false,"proxy.proxy_headers":false,"proxy.root_path":"","proxy.server_header":"","proxy.server_names":[],"quic.early_data_policy":"deny","quic.idle_timeout":30.0,"quic.max_datagram_size":1200,"quic.quic_secret":null,"quic.require_retry":false,"scheduler.limit_concurrency":null,"scheduler.max_connections":null,"scheduler.max_streams":null,"scheduler.max_tasks":null,"static.dir_to_file":true,"static.expires":null,"static.index_file":"index.html","static.mount":null,"static.route":null,"tls.alpn_protocols[0]":"h2","tls.alpn_protocols[1]":"http/1.1","tls.ca_certs":null,"tls.certfile":null,"tls.ciphers":null,"tls.crl":null,"tls.crl_mode":"off","tls.keyfile":null,"tls.keyfile_password":null,"tls.ocsp_cache_size":128,"tls.ocsp_max_age":43200.0,"tls.ocsp_mode":"off","tls.ocsp_soft_fail":false,"tls.require_client_cert":false,"tls.resolved_cipher_suites":[],"tls.revocation_fetch":true,"websocket.compression":"off","websocket.enabled":false,"websocket.max_message_size":16777216,"websocket.max_queue":32,"websocket.ping_interval":null,"websocket.ping_timeout":null,"webtransport.max_datagram_size":null,"webtransport.max_sessions":null,"webtransport.max_streams":null,"webtransport.origins":[],"webtransport.path":null},"profile":"default","profile_overlays_flat":{}}
{"audit_version":1,"claim_id":"TC-AUDIT-PROFILE-EFFECTIVE-DEFAULTS","effective_defaults_flat":{"app.app_dir":null,"app.config_file":null,"app.env_file":null,"app.env_prefix":"TIGRCORN","app.factory":false,"app.interface":"auto","app.lifespan":"auto","app.profile":"default","app.reload":false,"app.reload_dirs":[],"app.reload_exclude":[],"app.reload_include":[],"app.target":null,"debug":false,"hooks.on_reload":[],"hooks.on_shutdown":[],"hooks.on_startup":[],"http.alt_svc_auto":false,"http.alt_svc_headers":[],"http.alt_svc_max_age":86400,"http.alt_svc_persist":false,"http.connect_allow":[],"http.connect_policy":"deny","http.content_coding_policy":"allowlist","http.content_codings[0]":"gzip","http.content_codings[1]":"deflate","http.content_codings[2]":"br","http.enable_h2c":false,"http.http1_buffer_size":65536,"http.http1_header_read_timeout":null,"http.http1_keep_alive":true,"http.http1_max_incomplete_event_size":65536,"http.http2_adaptive_window":false,"http.http2_initial_connection_window_size":65535,"http.http2_initial_stream_window_size":65535,"http.http2_keep_alive_interval":null,"http.http2_keep_alive_timeout":null,"http.http2_max_concurrent_streams":128,"http.http2_max_frame_size":16384,"http.http2_max_headers_size":65536,"http.http_versions[0]":"1.1","http.idle_timeout":30.0,"http.keep_alive_timeout":5.0,"http.max_body_size":16777216,"http.max_header_size":65536,"http.read_timeout":30.0,"http.shutdown_timeout":30.0,"http.trailer_policy":"pass","http.write_timeout":30.0,"listeners[0].alpn_protocols[0]":"http/1.1","listeners[0].backlog":2048,"listeners[0].bind":null,"listeners[0].crl_mode":"off","listeners[0].endpoint":null,"listeners[0].fd":null,"listeners[0].group":null,"listeners[0].host":"127.0.0.1","listeners[0].http_versions[0]":"1.1","listeners[0].insecure_bind":null,"listeners[0].kind":"tcp","listeners[0].max_datagram_size":1200,"listeners[0].nodelay":true,"listeners[0].ocsp_cache_size":128,"listeners[0].ocsp_max_age":43200.0,"listeners[0].ocsp_mode":"off","listeners[0].ocsp_soft_fail":false,"listeners[0].path":null,"listeners[0].pipe_mode":"rawframed","listeners[0].port":8000,"listeners[0].protocols[0]":"http1","listeners[0].quic_bind":null,"listeners[0].quic_require_retry":false,"listeners[0].quic_secret":null,"listeners[0].resolved_cipher_suites":[],"listeners[0].reuse_address":true,"listeners[0].reuse_port":false,"listeners[0].revocation_fetch":true,"listeners[0].scheme":"http","listeners[0].ssl_ca_certs":null,"listeners[0].ssl_certfile":null,"listeners[0].ssl_ciphers":null,"listeners[0].ssl_crl":null,"listeners[0].ssl_keyfile":null,"listeners[0].ssl_keyfile_password":null,"listeners[0].ssl_require_client_cert":false,"listeners[0].umask":null,"listeners[0].user":null,"listeners[0].websocket":false,"logging.access_log":true,"logging.access_log_file":null,"logging.access_log_format":null,"logging.error_log_file":null,"logging.explicit_fields":[],"logging.level":"info","logging.log_config":null,"logging.structured":false,"logging.use_colors":null,"metrics.bind":null,"metrics.enabled":false,"metrics.otel_endpoint":null,"metrics.statsd_host":null,"process.limit_max_requests":null,"process.max_requests_jitter":0,"process.pid_file":null,"process.runtime":"auto","process.worker_class":"local","process.worker_healthcheck_timeout":30.0,"process.workers":1,"proxy.default_headers":[],"proxy.forwarded_allow_ips":[],"proxy.include_date_header":true,"proxy.include_server_header":false,"proxy.proxy_headers":false,"proxy.root_path":"","proxy.server_header":"","proxy.server_names":[],"quic.early_data_policy":"deny","quic.idle_timeout":30.0,"quic.max_datagram_size":1200,"quic.quic_secret":null,"quic.require_retry":false,"scheduler.limit_concurrency":null,"scheduler.max_connections":null,"scheduler.max_streams":null,"scheduler.max_tasks":null,"static.dir_to_file":true,"static.expires":null,"static.index_file":"index.html","static.mount":null,"static.route":null,"tls.alpn_protocols[0]":"h2","tls.alpn_protocols[1]":"http/1.1","tls.ca_certs":null,"tls.certfile":null,"tls.ciphers":null,"tls.crl":null,"tls.crl_mode":"off","tls.keyfile":null,"tls.keyfile_password":null,"tls.ocsp_cache_size":128,"tls.ocsp_max_age":43200.0,"tls.ocsp_mode":"off","tls.ocsp_soft_fail":false,"tls.require_client_cert":false,"tls.resolved_cipher_suites":[],"tls.revocation_fetch":true,"websocket.compression":"off","websocket.enabled":false,"websocket.max_message_size":16777216,"websocket.max_queue":32,"websocket.ping_interval":null,"websocket.ping_timeout":null,"webtransport.compatibility":"current","webtransport.enabled":false,"webtransport.max_datagram_size":null,"webtransport.max_sessions":null,"webtransport.max_streams":null,"webtransport.origins":[],"webtransport.path":null},"profile":"default","profile_overlays_flat":{}}
2 changes: 1 addition & 1 deletion .ssot/reports/profile-defaults/default.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
This file is generated from code.

- Claim: `TC-AUDIT-PROFILE-EFFECTIVE-DEFAULTS`
- Effective-default key count: `157`
- Effective-default key count: `159`
- Overlay key count: `0`
Loading
Loading