Commit c7b0479
fix(specializer): harden the IR boundary against adversarial findings — TASK-41
Six agents (4 attack lenses + 2 reviews) probed the initial IR; every
confirmed finding is fixed and pinned by a regression test:
- reachability DFS made iterative: a ~8k-block legal CFG stack-overflowed
the process; 50k blocks now verify (deep_cfg_verifies_without_crashing)
- verified programs must print to parseable text: reject empty map static
signatures (grammar can't express `map() -> ()`) and non-identifier
function names
- Lit::F64 equality treats all NaNs as one class, matching the text form's
canonical `nan` token — non-canonical payloads round-trip again
- store dataflow runs over the reachable subgraph: an unreachable cyclic
island no longer starves a reachable join and masks its store errors
- docs aligned: double stores rejected on ALL paths incl. trap (deliberate),
grammar EBNF covers store/comments/lenient %names, canonical-form note
- dead Inst::uses/Term::uses deleted; 7 missing rule-coverage tests added
(entry params, duplicate cols, branch-to-entry, sload-on-map, scalar-static
.opt pairing both ways, store.opt on non-nullable)
cargo 45 passed; gate green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 8b50641 commit c7b0479
5 files changed
Lines changed: 354 additions & 76 deletions
File tree
- docs/superpowers/specs
- src/specializer/ir
Lines changed: 13 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
218 | 225 | | |
219 | 226 | | |
220 | 227 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
21 | 25 | | |
22 | 26 | | |
23 | 27 | | |
| |||
66 | 70 | | |
67 | 71 | | |
68 | 72 | | |
69 | | - | |
70 | | - | |
71 | | - | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
72 | 79 | | |
73 | 80 | | |
74 | 81 | | |
| 82 | + | |
75 | 83 | | |
76 | 84 | | |
77 | 85 | | |
| |||
81 | 89 | | |
82 | 90 | | |
83 | 91 | | |
84 | | - | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
85 | 95 | | |
86 | 96 | | |
87 | 97 | | |
88 | 98 | | |
89 | | - | |
| 99 | + | |
| 100 | + | |
90 | 101 | | |
91 | 102 | | |
92 | 103 | | |
| |||
179 | 190 | | |
180 | 191 | | |
181 | 192 | | |
182 | | - | |
183 | | - | |
184 | | - | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
185 | 198 | | |
186 | 199 | | |
187 | 200 | | |
| |||
195 | 208 | | |
196 | 209 | | |
197 | 210 | | |
198 | | - | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
199 | 214 | | |
200 | 215 | | |
201 | 216 | | |
| |||
463 | 478 | | |
464 | 479 | | |
465 | 480 | | |
466 | | - | |
467 | | - | |
468 | | - | |
469 | | - | |
470 | | - | |
471 | | - | |
472 | | - | |
473 | | - | |
474 | | - | |
475 | | - | |
476 | | - | |
477 | | - | |
478 | | - | |
479 | | - | |
480 | | - | |
481 | | - | |
482 | | - | |
483 | | - | |
484 | | - | |
485 | | - | |
486 | | - | |
487 | | - | |
488 | | - | |
489 | | - | |
490 | 481 | | |
491 | 482 | | |
492 | 483 | | |
| |||
507 | 498 | | |
508 | 499 | | |
509 | 500 | | |
510 | | - | |
511 | | - | |
512 | | - | |
513 | | - | |
514 | | - | |
515 | | - | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | | - | |
521 | 501 | | |
522 | 502 | | |
523 | 503 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
230 | | - | |
231 | | - | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
232 | 234 | | |
233 | 235 | | |
234 | 236 | | |
| |||
0 commit comments