|
| 1 | +{ |
| 2 | + "version": 1, |
| 3 | + "self_reason": "This inventory necessarily spells the former name in regexes; the checker parses but does not scan this policy file.", |
| 4 | + "legacy_paths": [ |
| 5 | + { |
| 6 | + "path": "_docs/runbooks/sandbox-release.md", |
| 7 | + "class": "legacy_path", |
| 8 | + "reason": "Small compatibility notice preserves inbound links to the former runbook path.", |
| 9 | + "follow_up": "#94", |
| 10 | + "expected_count": 1 |
| 11 | + }, |
| 12 | + { |
| 13 | + "path": "_docs/specs/08-aws-sandbox-terraform.md", |
| 14 | + "class": "legacy_path", |
| 15 | + "reason": "Small compatibility notice preserves inbound links to the former specification path.", |
| 16 | + "follow_up": "#94", |
| 17 | + "expected_count": 1 |
| 18 | + } |
| 19 | + ], |
| 20 | + "whole_files": [ |
| 21 | + { |
| 22 | + "path": "_docs/audits/2026-08-07-oidc-denial-sentinels.md", |
| 23 | + "sha256": "8c4e9b6701d670bac87853254d66b2399e379e79b072409690c68acb3a3e9696", |
| 24 | + "class": "frozen_historical", |
| 25 | + "reason": "Timestamped OIDC denial audit retains its exact historical wording.", |
| 26 | + "follow_up": "none; immutable evidence", |
| 27 | + "expected_count": 8 |
| 28 | + }, |
| 29 | + { |
| 30 | + "path": "_docs/audits/2026-08-08-gate-b-operator-execution.md", |
| 31 | + "sha256": "1c2c231e401e630a2907fd8bbc75d06c25ec7e1059646a95bd584810244afe6f", |
| 32 | + "class": "frozen_historical", |
| 33 | + "reason": "Timestamped Gate-B execution audit retains its exact historical wording.", |
| 34 | + "follow_up": "none; immutable evidence", |
| 35 | + "expected_count": 4 |
| 36 | + }, |
| 37 | + { |
| 38 | + "path": "_docs/compatibility/faq-fragment-contracts.jsonl", |
| 39 | + "sha256": "489ca0db5fd87406d27841748a0dfb8d9ec43bfb2a029ee054335871f625e37c", |
| 40 | + "class": "captured_compatibility", |
| 41 | + "reason": "Captured FAQ compatibility data retains source bytes.", |
| 42 | + "follow_up": "none; immutable capture", |
| 43 | + "expected_count": 1 |
| 44 | + }, |
| 45 | + { |
| 46 | + "path": "_docs/compatibility/legacy-manifest.jsonl", |
| 47 | + "sha256": "94a6469530a290147e94f825eb981836e1358b9d0a72c7f50f0eda6d638e1d7f", |
| 48 | + "class": "captured_compatibility", |
| 49 | + "reason": "Captured public-route inventory retains source bytes.", |
| 50 | + "follow_up": "none; immutable capture", |
| 51 | + "expected_count": 8 |
| 52 | + }, |
| 53 | + { |
| 54 | + "path": "_docs/compatibility/public-contracts.jsonl", |
| 55 | + "sha256": "50f875806217865ef35b74f58ed885c4b5c832284391dbea7f84344d3416f66d", |
| 56 | + "class": "captured_compatibility", |
| 57 | + "reason": "Captured public-contract inventory retains source bytes.", |
| 58 | + "follow_up": "none; immutable capture", |
| 59 | + "expected_count": 2 |
| 60 | + }, |
| 61 | + { |
| 62 | + "path": "deploy/gate_b_binding_seed.json", |
| 63 | + "sha256": "6a32cfabcad8c3cf18d5de8d46b30d970f8e85dd0a65a0cac700762eb4b6f52b", |
| 64 | + "class": "frozen_historical", |
| 65 | + "reason": "Pinned Gate-B binding seed is hash-bound immutable evidence.", |
| 66 | + "follow_up": "none; immutable evidence", |
| 67 | + "expected_count": 61 |
| 68 | + }, |
| 69 | + { |
| 70 | + "path": "deploy/gate_b_execution_contract.json", |
| 71 | + "sha256": "8cf5b62e78ee617d46c1338452caf493cd60e1ffa93169c2a026feab6d300342", |
| 72 | + "class": "frozen_historical", |
| 73 | + "reason": "Pinned Gate-B execution contract is hash-bound immutable evidence.", |
| 74 | + "follow_up": "none; immutable evidence", |
| 75 | + "expected_count": 195 |
| 76 | + }, |
| 77 | + { |
| 78 | + "path": "deploy/gate_b_manifest.json", |
| 79 | + "sha256": "c96f710091adfc0e9c85ed02329238f374118766f46f630ea956794015987985", |
| 80 | + "class": "frozen_historical", |
| 81 | + "reason": "Pinned Gate-B manifest is hash-bound immutable evidence.", |
| 82 | + "follow_up": "none; immutable evidence", |
| 83 | + "expected_count": 168 |
| 84 | + }, |
| 85 | + { |
| 86 | + "path": "deploy/gate_b_evidence.py", |
| 87 | + "sha256": "52d93e9b2757c75c4ec633ac2d903fdce658b107481382025c22bf0f9d276b68", |
| 88 | + "class": "frozen_historical", |
| 89 | + "reason": "Gate-B evidence reader source is hash-bound by the frozen contract.", |
| 90 | + "follow_up": "none; immutable evidence", |
| 91 | + "expected_count": 45 |
| 92 | + }, |
| 93 | + { |
| 94 | + "path": "core/tests/test_gate_b_evidence.py", |
| 95 | + "sha256": "4dd65a576f3bd3d3bd2dff41170ee161f45ffe5362a4e4e1f8af0feabc081027", |
| 96 | + "class": "frozen_historical", |
| 97 | + "reason": "Gate-B evidence tests are hash-bound by the frozen contract.", |
| 98 | + "follow_up": "none; immutable evidence", |
| 99 | + "expected_count": 71 |
| 100 | + }, |
| 101 | + { |
| 102 | + "path": "deploy/oidc_probe.py", |
| 103 | + "sha256": "10f38b3c3df04c763f0e09ffe6128fc9d9fe174c4f3f7f161600992fcd84e2ff", |
| 104 | + "class": "legacy_schema_reader", |
| 105 | + "reason": "Hash-bound OIDC probe remains the exact legacy-identifier adapter behind a development entry point.", |
| 106 | + "follow_up": "#94", |
| 107 | + "expected_count": 21 |
| 108 | + }, |
| 109 | + { |
| 110 | + "path": "deploy/oidc_claim_probe.py", |
| 111 | + "sha256": "693b1844e5e1c40709ce368ecb6bef22814a5912ceaa635288f0d0204a75ba28", |
| 112 | + "class": "legacy_schema_reader", |
| 113 | + "reason": "Hash-bound wrong-claim probe retains exact physical role patterns.", |
| 114 | + "follow_up": "#94", |
| 115 | + "expected_count": 1 |
| 116 | + }, |
| 117 | + { |
| 118 | + "path": "core/tests/test_deployment_oidc_probe.py", |
| 119 | + "sha256": "58b447bc72ddfd11359f801087ba5a2f896f0d56bff7a832c6a2768d34f74b92", |
| 120 | + "class": "legacy_contract_test", |
| 121 | + "reason": "Hash-bound probe tests prove exact legacy evidence and physical values remain readable.", |
| 122 | + "follow_up": "#94", |
| 123 | + "expected_count": 30 |
| 124 | + }, |
| 125 | + { |
| 126 | + "path": "deploy/gate_b_assembler.py", |
| 127 | + "sha256": "f3d7a431b1cba8e9eb12e1a511f60beb5b70d0d14560d3df4f5428e42f3ad7f7", |
| 128 | + "class": "legacy_schema_reader", |
| 129 | + "reason": "Gate-B assembler reads the pinned legacy schema without rewriting it.", |
| 130 | + "follow_up": "#94", |
| 131 | + "expected_count": 18 |
| 132 | + }, |
| 133 | + { |
| 134 | + "path": "deploy/gate_b_operator.py", |
| 135 | + "sha256": "487d7266022d4c36b48d0891e8821b0c55d0b0c81062c14c54d69085eba01a33", |
| 136 | + "class": "legacy_schema_reader", |
| 137 | + "reason": "Gate-B operator reads exact historical bindings and physical identifiers.", |
| 138 | + "follow_up": "#94", |
| 139 | + "expected_count": 3 |
| 140 | + }, |
| 141 | + { |
| 142 | + "path": "core/tests/test_gate_b_operator.py", |
| 143 | + "sha256": "f4de8251fe38e0595e246fa5db6ba63914bb5a7f788c6ba0fd171587edb624a2", |
| 144 | + "class": "legacy_contract_test", |
| 145 | + "reason": "Gate-B operator tests prove exact historical bindings remain readable.", |
| 146 | + "follow_up": "#94", |
| 147 | + "expected_count": 35 |
| 148 | + }, |
| 149 | + { |
| 150 | + "path": "_docs/compatibility/development-legacy-identifiers.md", |
| 151 | + "sha256": "7b6e30853e867c925069a393cb16720c047462684422825cc039cf6a5e37c142", |
| 152 | + "class": "compatibility_note", |
| 153 | + "reason": "Evergreen note explicitly documents former terminology and every retained identifier class.", |
| 154 | + "follow_up": "#94", |
| 155 | + "expected_count": 9 |
| 156 | + }, |
| 157 | + { |
| 158 | + "path": "deploy/legacy_development_compatibility.py", |
| 159 | + "sha256": "097ebbccb9e44909cfbda6de61176b0a9f19f6df50cf8cbf5aa808895e23bd31", |
| 160 | + "class": "legacy_physical_boundary", |
| 161 | + "reason": "Single executable boundary owns exact live physical identifiers for development.", |
| 162 | + "follow_up": "#94", |
| 163 | + "expected_count": 5 |
| 164 | + }, |
| 165 | + { |
| 166 | + "path": "_docs/runbooks/sandbox-release.md", |
| 167 | + "sha256": "163beb97eb7b508ecaa456d023b1a5620c54db8504557d4d6fa473294d9d61cb", |
| 168 | + "class": "legacy_link_notice", |
| 169 | + "reason": "Small command-free notice preserves the former runbook link.", |
| 170 | + "follow_up": "#94", |
| 171 | + "expected_count": 1 |
| 172 | + }, |
| 173 | + { |
| 174 | + "path": "_docs/specs/08-aws-sandbox-terraform.md", |
| 175 | + "sha256": "c0ae69b792e73d0a7d4f14222b25bc529b1c994ddcfa7e4d60951a5fff44e38d", |
| 176 | + "class": "legacy_link_notice", |
| 177 | + "reason": "Small non-normative notice preserves the former specification link.", |
| 178 | + "follow_up": "#94", |
| 179 | + "expected_count": 1 |
| 180 | + }, |
| 181 | + { |
| 182 | + "path": "core/tests/test_deployment_release.py", |
| 183 | + "sha256": "bf7b7650e4396c821fab95753b34baff1cf81ee819a2001fa7bb5cacf45fceb4", |
| 184 | + "class": "legacy_contract_test", |
| 185 | + "reason": "Release tests exercise exact physical task, secret, repository, and tag values.", |
| 186 | + "follow_up": "#94", |
| 187 | + "expected_count": 5 |
| 188 | + }, |
| 189 | + { |
| 190 | + "path": "core/tests/test_deployment_workflow.py", |
| 191 | + "sha256": "1cbc06f7733b1b0c252b0d4e3c8289669c15616c4b2007d5a325e5e6fc17618a", |
| 192 | + "class": "legacy_contract_test", |
| 193 | + "reason": "Workflow tests exercise removed inputs, frozen Gate-B records, and exact physical values.", |
| 194 | + "follow_up": "#94", |
| 195 | + "expected_count": 27 |
| 196 | + } |
| 197 | + ], |
| 198 | + "rules": [ |
| 199 | + { |
| 200 | + "path": ".github/workflows/ci.yml", |
| 201 | + "pattern": "name:\\s+sandbox", |
| 202 | + "class": "legacy_physical_identifier", |
| 203 | + "reason": "Four jobs must retain the exact GitHub environment name and OIDC subject until trust migration.", |
| 204 | + "follow_up": "#94", |
| 205 | + "expected_count": 4 |
| 206 | + }, |
| 207 | + { |
| 208 | + "path": "_docs/runbooks/development-release.md", |
| 209 | + "pattern": "(?:sandbox/website|website-sandbox|datamailer-sandbox|phone-aws-sandbox|phone-sandbox|github-sandbox|environments/sandbox|--env sandbox|environment: sandbox|Environment=sandbox|`sandbox`)", |
| 210 | + "class": "legacy_physical_identifier", |
| 211 | + "reason": "Canonical runbook documents exact live physical identifiers and the legacy GitHub environment.", |
| 212 | + "follow_up": "#94", |
| 213 | + "expected_count": 88 |
| 214 | + }, |
| 215 | + { |
| 216 | + "path": "_docs/specs/08-aws-development-terraform.md", |
| 217 | + "pattern": "(?:sandbox/|website-sandbox)", |
| 218 | + "class": "legacy_physical_identifier", |
| 219 | + "reason": "Canonical specification names the unchanged Terraform root and AWS namespace.", |
| 220 | + "follow_up": "#94", |
| 221 | + "expected_count": 4 |
| 222 | + }, |
| 223 | + { |
| 224 | + "path": "_docs/specs/09-migration-rollout-roadmap.md", |
| 225 | + "pattern": "sandbox/website", |
| 226 | + "class": "legacy_physical_identifier", |
| 227 | + "reason": "Roadmap references the existing Terraform root without renaming state.", |
| 228 | + "follow_up": "#94", |
| 229 | + "expected_count": 1 |
| 230 | + } |
| 231 | + ] |
| 232 | +} |
0 commit comments