0.3.5-alpha.9

This commit is contained in:
2026-09-22 08:32:36 +02:00
parent 17d9e18dcd
commit 9f1a1c3d06
13 changed files with 638 additions and 21 deletions

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# file: scripts/audit_distribution_layout.py
# version: 22
# version: 23
"""Audit the static distribution layout expected by supported POCs."""
@@ -29,6 +29,9 @@ REQUIRED_PATHS = (
"crates/apps/game-realtime-transport-fallback-smoke/unit_tests/fallback.rs",
"crates/apps/game-realtime-websocket-smoke/Cargo.toml",
"crates/apps/game-realtime-webtransport-browser-smoke/Cargo.toml",
"crates/apps/game-realtime-webtransport-datagram-smoke/Cargo.toml",
"crates/apps/game-realtime-webtransport-datagram-smoke/src/main.rs",
"crates/common/game-realtime-webtransport-lib/tests/datagrams.rs",
"crates/apps/game-realtime-webtransport-browser-smoke/src/lib.rs",
"crates/apps/game-realtime-webtransport-browser-smoke/src/main.rs",
"crates/apps/game-reflex-poc-desktop/Cargo.toml",
@@ -392,6 +395,44 @@ def audit_realtime_fallback_smoke(root: pathlib.Path) -> list[str]:
violations.append(f"DIST-LAYOUT-092: fallback smoke must not depend on engine/gameplay package: {fragment}")
return violations
def audit_webtransport_datagram_smoke(root: pathlib.Path) -> list[str]:
"""Validate the isolated backend-specific WebTransport datagram proof."""
violations: list[str] = []
manifest_path = root / "crates/apps/game-realtime-webtransport-datagram-smoke/Cargo.toml"
main_path = root / "crates/apps/game-realtime-webtransport-datagram-smoke/src/main.rs"
native_path = root / "crates/common/game-realtime-webtransport-lib/src/webtransport.rs"
wasm_path = root / "crates/common/game-realtime-webtransport-lib/src/webtransport_wasm.rs"
common_path = root / "crates/common/game-realtime-transport-lib/src/lib.rs"
required = (manifest_path, main_path, native_path, wasm_path, common_path)
if not all(path.exists() for path in required):
return violations
manifest = manifest_path.read_text(encoding="utf-8")
main = main_path.read_text(encoding="utf-8")
native = native_path.read_text(encoding="utf-8")
wasm = wasm_path.read_text(encoding="utf-8")
common = common_path.read_text(encoding="utf-8")
required_fragments = (
(manifest, 'game-realtime-webtransport-lib = { path = "../../common/game-realtime-webtransport-lib" }', "DIST-LAYOUT-093: datagram smoke must consume the WebTransport backend directly"),
(main, 'max_datagram_size()', "DIST-LAYOUT-094: datagram smoke must inspect the negotiated backend payload bound"),
(main, 'send_datagram(', "DIST-LAYOUT-095: datagram smoke must send backend-specific datagrams"),
(main, 'receive_datagram()', "DIST-LAYOUT-096: datagram smoke must receive backend-specific datagrams"),
(main, 'game-realtime-webtransport-datagram-smoke: PASS', "DIST-LAYOUT-097: datagram smoke must expose a deterministic PASS verdict"),
(native, 'pub fn send_datagram(&self, payload: &[u8])', "DIST-LAYOUT-098: native WebTransport session must own the backend-specific datagram send capability"),
(wasm, 'pub async fn send_datagram(&self, payload: &[u8])', "DIST-LAYOUT-099: browser WebTransport session must expose the backend-specific datagram send capability"),
)
for content, fragment, message in required_fragments:
if fragment not in content:
violations.append(message)
if "datagram" in common.lower():
violations.append("DIST-LAYOUT-100: transport-neutral realtime contract must remain free of datagram semantics")
for fragment in ("engine-v1-", "game-reflex-poc", "game-snake-poc"):
if fragment in manifest:
violations.append(f"DIST-LAYOUT-101: datagram smoke must not depend on engine/gameplay package: {fragment}")
return violations
def audit_android_native_gradle(root: pathlib.Path) -> list[str]:
"""Validate the minimum Gradle contract and multi-ABI native Rust consumers."""
@@ -484,6 +525,7 @@ def main() -> int:
contract_violations.extend(audit_android_native_gradle(root))
contract_violations.extend(audit_realtime_fallback_smoke(root))
contract_violations.extend(audit_webtransport_browser_smoke(root))
contract_violations.extend(audit_webtransport_datagram_smoke(root))
if missing:
for relative in missing:
print(f"DIST-LAYOUT-001: missing required path: {relative}", file=sys.stderr)