1010 - ' package.json'
1111 - ' package-lock.json'
1212 - ' automation/nuvio-client-upstreams.json'
13+ - ' assets/providers/emojis.json'
14+ - ' engine_v2/src/provider-branding.mjs'
15+ - ' engine_v2/scripts/bootstrap-provider-catalog.mjs'
16+ - ' engine_v2/tests/provider-catalog.test.mjs'
1317 - ' scripts/normalize_core_fixed_point_contract.py'
1418 - ' scripts/normalize_provider_rebuild_safety.py'
1519 - ' scripts/core_rebuild_safety.py'
3640 - ' scripts/provider_patches/global_stream_facts_v1.py'
3741 - ' scripts/provider_patches/global_media_enrichment_v1.py'
3842 - ' scripts/provider_patches/global_provider_security_hardening_v1.py'
43+ - ' scripts/provider_patches/global_provider_branding_v1.py'
3944 - ' scripts/provider_security_hardening.py'
4045 - ' scripts/provider_purification.py'
4146 - ' tests/core_media_policy_test.py'
47+ - ' tests/provider_branding_contract_test.py'
4248 - ' tests/global_core_presentation_pipeline_test.py'
4349 - ' tests/native_sync_fetch_target_order_test.py'
4450 - ' tests/runtime_capability_media_safety_v4_test.py'
@@ -109,9 +115,11 @@ jobs:
109115 scripts/normalize_provider_rebuild_safety.py \
110116 scripts/core_rebuild_safety.py \
111117 scripts/normalize_core_fixed_point_contract.py \
118+ scripts/normalize_core_media_policy.py \
112119 scripts/apply_provider_overrides.py \
113120 scripts/provider_engine_normalizer.py \
114121 scripts/reapply_published_overrides.py \
122+ scripts/provider_patches/global_provider_branding_v1.py \
115123 scripts/provider_patches/stream_output_sanitizer_v6.py
116124 python tests/provider_wrapper_isolation_test.py
117125 python tests/stream_output_sanitizer_fail_closed_test.py
@@ -127,12 +135,23 @@ jobs:
127135 python scripts/normalize_core_media_policy.py --apply
128136 python scripts/apply_runtime_capability_upgrade_v4.py
129137 python scripts/build_provider_runtime_profiles.py
130- # Two materialization passes are deliberate: pass 1 migrates old published
131- # bytes, pass 2 proves every generic patch survives its own rebuilt/Terser
132- # representation before any client-visible version is finalized.
133- python scripts/reapply_published_overrides.py
134- python scripts/reapply_published_overrides.py
135- python scripts/reapply_published_overrides.py --check
138+ # Published artifacts may arrive from several historical Core revisions.
139+ # Rebuild until the generic pipeline reaches a true byte/reference fixed
140+ # point instead of assuming an arbitrary number of passes.
141+ converged=0
142+ for pass in 1 2 3 4 5 6; do
143+ echo "FIELD_PROVIDER_REBUILD_CONVERGENCE pass=${pass}"
144+ python scripts/reapply_published_overrides.py
145+ if python scripts/reapply_published_overrides.py --check; then
146+ converged=1
147+ echo "FIELD_PROVIDER_REBUILD_CONVERGENCE converged_at=${pass}"
148+ break
149+ fi
150+ done
151+ if [[ "$converged" -ne 1 ]]; then
152+ echo 'provider publication failed to converge within 6 passes' >&2
153+ exit 1
154+ fi
136155 python scripts/generate_language_manifests.py
137156 python scripts/prune_unreferenced_providers.py
138157 python scripts/sync_release_versions.py --manifest manifest.json --previous "$RUNNER_TEMP/manifest-before.json"
@@ -159,6 +178,7 @@ jobs:
159178 python scripts/normalize_core_media_policy.py --check
160179 python scripts/enforce_main_only_repository_policy.py --check
161180 python tests/core_media_policy_test.py
181+ python tests/provider_branding_contract_test.py
162182 python tests/global_core_presentation_pipeline_test.py
163183 python tests/native_sync_fetch_target_order_test.py
164184 python tests/runtime_capability_media_safety_v4_test.py
@@ -255,6 +275,7 @@ jobs:
255275 python scripts/normalize_core_media_policy.py --check
256276 python scripts/enforce_main_only_repository_policy.py --check
257277 python tests/core_media_policy_test.py
278+ python tests/provider_branding_contract_test.py
258279 python tests/global_playback_integrity_policy_test.py
259280 python tests/runtime_capability_media_safety_v4_test.py
260281 python tests/provider_wrapper_isolation_test.py
0 commit comments