@@ -19,6 +19,8 @@ def text(path: str) -> str:
1919provider_loading = text ("scripts/augment_native_provider_loading.py" )
2020repository_http = text ("scripts/instrument_native_repository_http_evidence.py" )
2121resolver = text ("scripts/resolve_native_repository.sh" )
22+ client_head_resolver = text ("scripts/resolve_nuvio_lab_heads.py" )
23+ reader_runtime_scope = text ("scripts/scope_native_reader_learning_runtime.py" )
2224android_player = text ("scripts/native_player_diagnostics_codegen.py" )
2325desktop_player = text ("scripts/augment_native_desktop_player.py" )
2426android_transport = text ("scripts/configure_native_android_lab_transport.py" )
@@ -31,6 +33,7 @@ def text(path: str) -> str:
3133coverage_gate = text ("scripts/gate_native_reader_coverage.cjs" )
3234android_workflow = text (".github/workflows/native-android-route-reader.yml" )
3335desktop_workflow = text (".github/workflows/native-desktop-reader-acceptance.yml" )
36+ learning_sync = text (".github/workflows/native-reader-learning-sync.yml" )
3437
3538# Canonical media route traversal remains explicit; capability probes are evidence,
3639# never permission for a Lab-side provider/player rewrite.
@@ -88,6 +91,38 @@ def text(path: str) -> str:
8891 assert forbidden not in desktop_suite , forbidden
8992assert "root_execution_forbidden" in desktop_suite
9093
94+ # Labs resolve the latest official client branch HEAD. Accepted/contract refs remain
95+ # audit context only; an unresolved HEAD may never silently fall back to stale code.
96+ for required in (
97+ "latest official HEAD is unresolved" ,
98+ "refusing stale fallback" ,
99+ "current_head" ,
100+ "accepted_ref" ,
101+ "contract_ref" ,
102+ "latest-official-head-for-labs" ,
103+ ):
104+ assert required in client_head_resolver , required
105+ for workflow in (android_workflow , desktop_workflow ):
106+ assert "check_nuvio_client_upstreams.py" in workflow
107+ assert "resolve_nuvio_lab_heads.py" in workflow
108+ assert "Checkout latest official" in workflow
109+ assert "get('accepted_ref') or '')" not in android_workflow
110+ assert "get('accepted_ref') or '')" not in desktop_workflow
111+
112+ # Reader repair memory is historical but only influences the exact client revision
113+ # fingerprint that produced it. Legacy/unscoped memory is never recycled after drift.
114+ for required in (
115+ "exact-runtime-fingerprint-only" ,
116+ "legacyUnscopedExcluded" ,
117+ "runtimeFingerprint" ,
118+ "entry_fingerprint(row) == fingerprint" ,
119+ ):
120+ assert required in reader_runtime_scope , required
121+ assert "scope_native_reader_learning_runtime.py filter" in android_workflow
122+ assert "sinners-cross-client-brain.json" in android_workflow
123+ assert 'needs: [resolve, tv-route-reader, mobile-route-reader]' in android_workflow
124+ assert "scope_native_reader_learning_runtime.py merge" in learning_sync
125+
91126# Android may not gain a test-only transport capability.
92127assert "validate_manifest" in android_transport
93128assert "mode=production-policy" in android_transport
@@ -155,10 +190,12 @@ def text(path: str) -> str:
155190 assert required in desktop_suite , required
156191
157192# Coverage is fail-closed and PR proof checks two returned streams; deep/manual paths
158- # remain exhaustive.
193+ # remain exhaustive. The assertion follows semantics rather than one code spelling.
159194assert "NIAKVIO_PR_STREAM_LIMIT" in coverage_gate
160- assert "DEFAULT_PR_STREAM_LIMIT" in coverage_gate
161- assert "observed !== expected" in coverage_gate
195+ assert "DEFAULT_PR_STREAM_LIMIT = 2" in coverage_gate
196+ assert "streamCoverageSatisfied" in coverage_gate
197+ assert "return observed >= expected && observed <= returned;" in coverage_gate
198+ assert "return observed === expected;" in coverage_gate
162199for workflow in (android_workflow , desktop_workflow ):
163200 assert "NIAKVIO_PRIMARY_STREAM_SCOPE: all" in workflow
164201assert "NIAKVIO_TARGET_PROVIDER: all" in android_workflow
0 commit comments