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
This commit is contained in:
pulse-triage[bot]
2026-10-03 02:23:58 +01:00
parent 7ec246381f
commit ee451f8c8c
2 changed files with 39 additions and 13 deletions
@@ -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"
]
}
],
@@ -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"]}