0.3.5-alpha.7

This commit is contained in:
2026-09-22 06:36:54 +02:00
parent 0ef5e1a233
commit 1764eb9bed
20 changed files with 1021 additions and 55 deletions

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# file: scripts/audit_distribution_layout.py
# version: 18
# version: 19
"""Audit the static distribution layout expected by supported POCs."""
@@ -25,6 +25,9 @@ FORBIDDEN_PATHS = (
REQUIRED_PATHS = (
"crates/apps/game-realtime-websocket-smoke/Cargo.toml",
"crates/apps/game-realtime-webtransport-browser-smoke/Cargo.toml",
"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",
"crates/apps/game-snake-poc-desktop/Cargo.toml",
"crates/apps/game-reflex-poc-tauri/Cargo.toml",
@@ -55,6 +58,11 @@ REQUIRED_PATHS = (
"crates/apps/game-snake-poc-tauri/frontend/ts/lifecycle.ts",
"crates/apps/game-snake-poc-tauri/frontend/ts/main.ts",
"crates/apps/game-snake-poc-tauri/frontend/ts/provenance.ts",
"Web/game-realtime-webtransport-browser-smoke/package.json",
"Web/game-realtime-webtransport-browser-smoke/tsconfig.json",
"Web/game-realtime-webtransport-browser-smoke/vite.config.ts",
"Web/game-realtime-webtransport-browser-smoke/frontend/main.html",
"Web/game-realtime-webtransport-browser-smoke/frontend/ts/main.ts",
"Web/game-snake-poc/package.json",
"Web/game-snake-poc/tsconfig.json",
"Web/game-snake-poc/vite.config.ts",
@@ -312,6 +320,39 @@ def audit_snake_tauri_generated_android(root: pathlib.Path) -> list[str]:
def audit_webtransport_browser_smoke(root: pathlib.Path) -> list[str]:
"""Validate the technical real-browser WebTransport smoke boundary."""
violations: list[str] = []
package_path = root / "Web/game-realtime-webtransport-browser-smoke/package.json"
vite_path = root / "Web/game-realtime-webtransport-browser-smoke/vite.config.ts"
main_path = root / "Web/game-realtime-webtransport-browser-smoke/frontend/ts/main.ts"
rust_manifest_path = root / "crates/apps/game-realtime-webtransport-browser-smoke/Cargo.toml"
rust_main_path = root / "crates/apps/game-realtime-webtransport-browser-smoke/src/main.rs"
if not all(path.exists() for path in (package_path, vite_path, main_path, rust_manifest_path, rust_main_path)):
return violations
package = package_path.read_text(encoding="utf-8")
vite = vite_path.read_text(encoding="utf-8")
main = main_path.read_text(encoding="utf-8")
rust_manifest = rust_manifest_path.read_text(encoding="utf-8")
rust_main = rust_main_path.read_text(encoding="utf-8")
required_fragments = (
(package, 'cargo build -p game-realtime-webtransport-browser-smoke --lib --target wasm32-unknown-unknown', "DIST-LAYOUT-077: browser WebTransport smoke must build its Rust WASM adapter"),
(package, 'wasm-bindgen ../../builds/sasedev-games/', "DIST-LAYOUT-078: browser WebTransport smoke bindings must be generated outside the repository"),
(vite, 'host: "127.0.0.1"', "DIST-LAYOUT-079: browser WebTransport smoke Vite host must stay on loopback"),
(vite, 'port: 1435,', "DIST-LAYOUT-080: browser WebTransport smoke Vite port must stay deterministic"),
(main, 'window.isSecureContext', "DIST-LAYOUT-081: browser WebTransport smoke must verify secure-context availability"),
(main, '"WebTransport" in window', "DIST-LAYOUT-082: browser WebTransport smoke must verify WebTransport availability"),
(main, 'run_browser_smoke(', "DIST-LAYOUT-083: browser WebTransport smoke must execute the Rust WASM path"),
(rust_manifest, 'game-realtime-webtransport-lib = { path = "../../common/game-realtime-webtransport-lib" }', "DIST-LAYOUT-084: browser WebTransport smoke adapter must consume the shared backend"),
(rust_main, 'game-realtime-webtransport-browser-smoke: PASS', "DIST-LAYOUT-085: browser WebTransport smoke native peer must expose a deterministic PASS verdict"),
)
for content, fragment, message in required_fragments:
if fragment not in content:
violations.append(message)
return violations
def audit_android_native_gradle(root: pathlib.Path) -> list[str]:
"""Validate the minimum Gradle contract and multi-ABI native Rust consumers."""
@@ -402,6 +443,7 @@ def main() -> int:
contract_violations.extend(audit_snake_tauri_android_integration(root))
contract_violations.extend(audit_snake_tauri_generated_android(root))
contract_violations.extend(audit_android_native_gradle(root))
contract_violations.extend(audit_webtransport_browser_smoke(root))
if missing:
for relative in missing:
print(f"DIST-LAYOUT-001: missing required path: {relative}", file=sys.stderr)