From ee451f8c8c23dc64319dfee281b22d8d679f4d3e Mon Sep 17 00:00:00 2001 From: "pulse-triage[bot]" <249995291+pulse-triage[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 02:23:58 +0100 Subject: [PATCH] Restore canonical ordering for demo registry entries Candidate preflight rejected three path lists that used ASCII or insertion order instead of the registry's case-insensitive order. Sort only those lists and exercise the committed registry in the audit suite so fixture-only passes cannot miss the same mistake. Contract-Neutral: Canonical registry path-list ordering and regression coverage only; ownership, verification requirements and runtime behaviour are unchanged. Change-source: pulse-maintainer --- .../v6/internal/subsystems/registry.json | 26 +++++++++---------- .../release_control/registry_audit_test.py | 26 +++++++++++++++++++ 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/docs/release-control/v6/internal/subsystems/registry.json b/docs/release-control/v6/internal/subsystems/registry.json index f3ec7681fb..b58adc709b 100644 --- a/docs/release-control/v6/internal/subsystems/registry.json +++ b/docs/release-control/v6/internal/subsystems/registry.json @@ -4548,9 +4548,6 @@ ".github/workflows/retry-release-convergence.yml", ".github/workflows/update-demo-server.yml", ".github/workflows/validate-release-assets.yml", - "Dockerfile", - "Makefile", - "VERSION", "cmd/pulse-control-plane/main.go", "cmd/pulse-control-plane/provider_msp.go", "cmd/pulse-control-plane/provider_msp_backup.go", @@ -4560,12 +4557,13 @@ "cmd/pulse-control-plane/provider_msp_recover.go", "cmd/pulse-control-plane/provider_msp_status.go", "docker-compose.yml", + "Dockerfile", "docs/MSP.md", - "docs/RELEASE_NOTES.md", - "docs/UPGRADE_v6.md", "docs/release-control/v6/internal/PRE_RELEASE_CHECKLIST.md", "docs/release-control/v6/internal/RC_TO_GA_REHEARSAL_TEMPLATE.md", "docs/release-control/v6/internal/RELEASE_PROMOTION_POLICY.md", + "docs/RELEASE_NOTES.md", + "docs/UPGRADE_v6.md", "frontend-modern/package-lock.json", "frontend-modern/package.json", "frontend-modern/public/docs/MSP.md", @@ -4585,6 +4583,7 @@ "internal/cloudcp/provider_msp_backup.go", "internal/cloudcp/provider_msp_recovery.go", "internal/cloudcp/tenant_runtime_rollout.go", + "Makefile", "package-lock.json", "package.json", "pulse-enterprise:.github/workflows/build-pro-release.yml", @@ -4659,16 +4658,17 @@ "scripts/uninstall-sensor-proxy.sh", "scripts/validate-release.sh", "scripts/verify-github-release-integrity.sh", + "tests/integration/playwright.config.ts", "tests/integration/QUICK_START.md", "tests/integration/README.md", - "tests/integration/playwright.config.ts", "tests/integration/scripts/bootstrap-hosted-mobile-onboarding.mjs", "tests/integration/scripts/hosted-mobile-token-runtime.mjs", "tests/integration/scripts/hosted-tenant-runtime.mjs", "tests/integration/scripts/managed-dev-runtime.mjs", "tests/integration/scripts/relay-mobile-token-helper.go", "tests/integration/tests/helpers.ts", - "tests/integration/tests/runtime-defaults.ts" + "tests/integration/tests/runtime-defaults.ts", + "VERSION" ], "release_cycle_artifact_globs": [ "docs/RELEASE_NOTES.md", @@ -4775,12 +4775,11 @@ ".github/workflows/retry-release-convergence.yml", ".github/workflows/update-demo-server.yml", ".github/workflows/validate-release-assets.yml", - "VERSION", - "docs/RELEASE_NOTES.md", - "docs/UPGRADE_v6.md", "docs/release-control/v6/internal/PRE_RELEASE_CHECKLIST.md", "docs/release-control/v6/internal/RC_TO_GA_REHEARSAL_TEMPLATE.md", "docs/release-control/v6/internal/RELEASE_PROMOTION_POLICY.md", + "docs/RELEASE_NOTES.md", + "docs/UPGRADE_v6.md", "frontend-modern/public/docs/UPGRADE_v6.md", "frontend-modern/src/components/UpdateBanner.tsx", "frontend-modern/src/components/WhatsNewCard.tsx", @@ -4808,7 +4807,8 @@ "scripts/trigger-release-dry-run.sh", "scripts/trigger-release.sh", "scripts/trigger-stable-patch.sh", - "scripts/verify-github-release-integrity.sh" + "scripts/verify-github-release-integrity.sh", + "VERSION" ], "allow_same_subsystem_tests": false, "test_prefixes": [], @@ -5185,8 +5185,8 @@ "allow_same_subsystem_tests": false, "test_prefixes": [], "exact_files": [ - "scripts/installtests/demo_transaction_test.go", - ".github/scripts/tests/test_demo_runtime_transaction.py" + ".github/scripts/tests/test_demo_runtime_transaction.py", + "scripts/installtests/demo_transaction_test.go" ] } ], diff --git a/scripts/release_control/registry_audit_test.py b/scripts/release_control/registry_audit_test.py index 1118e6c6fb..803a075b08 100644 --- a/scripts/release_control/registry_audit_test.py +++ b/scripts/release_control/registry_audit_test.py @@ -47,6 +47,32 @@ class RegistryAuditTest(unittest.TestCase): args = parse_args(["--check", "--repo-scope", "pulse"]) self.assertEqual(args.repo_scope, ["pulse"]) + def test_live_registry_path_lists_are_casefold_sorted(self) -> None: + # Fixture-only audit tests cannot catch ordering mistakes in the + # committed registry. Check its real path lists using the same + # case-insensitive contract as candidate preflight, not ASCII order. + registry = registry_audit.load_registry_payload() + for subsystem in registry["subsystems"]: + lists = { + field: subsystem[field] + for field in ("owned_prefixes", "owned_files") + } + verification = subsystem["verification"] + lists.update({ + f"verification.{field}": verification[field] + for field in ("test_prefixes", "exact_files") + }) + for policy in verification["path_policies"]: + lists.update({ + f"{policy['id']}.{field}": policy[field] + for field in ( + "match_prefixes", "match_files", "test_prefixes", "exact_files" + ) + }) + for field, paths in lists.items(): + with self.subTest(subsystem=subsystem["id"], field=field): + self.assertEqual(paths, sorted(paths, key=str.casefold)) + def test_trust_gate_regression_proofs_are_registered_to_exact_policies(self) -> None: registry = registry_audit.load_registry_payload() rules = {rule["id"]: rule for rule in registry["subsystems"]}