Commit 6100ac0
committed
fix(gate-manifest): declare the forwarded selector rule instead of proving it
The forwarding exemption fails open in two more ways, and closing them
soundly leaves it exempting nothing.
An upstream callback was never part of the provenance chain, so
`BUILD_OWNERSHIP.filter((entry) => { entry.rule = computed; return true; })
.map(...)` was accepted: `yieldsOwnershipEntries` walked the chain by method
name only. And `onlyReadsAsProperty` counted `entry.mutate()` as a property
read, because `entry.mutate` is a member access whose object is `entry`.
Closing the second requires treating any member call on the binding as
unsafe. The live call site is
`BUILD_OWNERSHIP.filter((entry) => entry.owns(file)).map(...)`, and
`entry.owns(file)` is exactly that — a member call no reader can prove does
not mutate the entry. So the sound version of the exemption rejects the one
call it existed to admit. There is no proof left to keep, and six rounds of
narrowing it (pattern → name → lexical scope → binder kind → total read-only
proof) were rounds spent on a construct that could not reach soundness.
The reader now collects string literals and nothing else. The single forward
is declared in FORWARDED_SELECTOR_RULES, keyed on the exact source text of
the call, and policed like every other waiver: check.ts fails if it matches
no call (inert) or more than one (spread beyond what was reviewed), and the
message quotes the exact text to paste. The category universe is unchanged —
`entry.rule` can only be a `rule:` literal the table already contributes,
which is what makes the declaration true.
selector-rules.ts drops from 344 to 222 lines. The shape-by-shape tests
become one table so all seventeen negatives, including the two above, stay
as the regression record rather than as arguments to relitigate.1 parent 4e8a2ec commit 6100ac0
6 files changed
Lines changed: 404 additions & 441 deletions
File tree
- docs/agents
- scripts/gate-manifest
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
233 | 244 | | |
234 | 245 | | |
235 | 246 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| |||
70 | 71 | | |
71 | 72 | | |
72 | 73 | | |
73 | | - | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
74 | 80 | | |
75 | 81 | | |
76 | 82 | | |
| |||
210 | 216 | | |
211 | 217 | | |
212 | 218 | | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
213 | 235 | | |
214 | 236 | | |
215 | 237 | | |
| |||
414 | 436 | | |
415 | 437 | | |
416 | 438 | | |
417 | | - | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
418 | 445 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
109 | 110 | | |
110 | 111 | | |
111 | 112 | | |
112 | | - | |
| 113 | + | |
113 | 114 | | |
114 | 115 | | |
| 116 | + | |
115 | 117 | | |
116 | 118 | | |
117 | 119 | | |
| |||
0 commit comments