c6ba0677f0
cycles/ one file per Ishikawa -> scientific method -> Six Sigma loop, named
for the DEFECT not the fix, carrying the commit record as written at
the time
findings/ what the cycles produced, cross-cut: live bugs, architecture answers,
and defects in my own measurement
The organising finding is that predictions which came back FALSE produced every
significant result. Eleven of sixty-one failed, and those eleven found: that the
arity table was not drifted but 40% incomplete; that the AST traversal is
irreducible and only rules and judgments move; that guards could refuse through
the seam after all; and that routing el_bin_lookup through the gate did NOT fix
the SIGSEGV, because the fallback strlen was the hazard -- a wrong fix I would
otherwise have shipped as verified.
One cycle was run without committing predictions first and had to be discarded
as rigged. It is kept, in full, as 18-async-half-expressible.md.
2.9 KiB
2.9 KiB
Cycles
Each is one Ishikawa → scientific method → Six Sigma loop, run in an isolated
worktree so a wrong answer cost nothing. Named for the defect, not the fix.
| # | Cycle | Root cause | Predictions | Landed |
|---|---|---|---|---|
| 01 | constructs-have-nowhere-to-be | a construct had nothing to BE, so its meaning lived in the emitter | 3/3 | yes |
| 02 | a-construct-cannot-refuse | injection discards the target's result; no form said no | 4/4 | yes |
| 03 | the-wrapper-was-conditional | exit injection needed compile-time knowledge only because the wrapper was conditional | 3/4 | yes |
| 04 | c-has-no-closure-syntax | "C has no closures" taken as a fact about what is possible | 5/7 | yes |
| 05 | the-emitter-discards-what-it-knows | codegen sees every construct relation and throws it away | 5/5 | branch |
| 06 | the-crossing-resolves-at-emission | the binary has no table to consult | 3/4 | yes |
| 07 | invocation-is-not-composable | the wrapper called the target directly | 5/5 | yes |
| 08 | the-emitter-adjudicates | a prohibition had nowhere to live but a #error |
4/5 | yes |
| 09 | policy-inside-the-compiler | a program cannot declare its own restrictions, so the tier policy was compiled in | 4/5 | yes |
| 10 | a-second-copy-of-the-header | builtin arity hand-maintained beside el_runtime.h |
4/5 | yes |
| 11 | one-type-erases-the-return | el_val_t means the header cannot say now() returns an Instant |
4/5 | yes |
| 12 | judgment-lives-with-knowledge | the emitter knows the types, so it also judged them | 5/5 | yes |
| 13 | thirty-five-return-types | is_int_call hardcoded what drives + dispatch |
6/6 | yes |
| 14 | keywords-that-reserve-nothing | 5 of 46 keywords consumed by no path | 6/6 | yes |
| 15 | no-namespacing-at-all | import is textual inlining; every name is global |
4/4 | yes |
| 16 | tokens-carry-no-position | a token was (kind, value), so no diagnostic could name a place |
6/6 | yes |
| 17 | annotations-are-never-checked | the annotation feeds dispatch and is never verified | 6/6 | branch |
| 18 | async-half-expressible | first attempt was DOGMA — no predictions, rigged test | 4/4 (2nd) | branch |
| 19 | a-convention-is-not-a-gate | looks_like_heap_obj is static, so every type re-derives it |
6/7 | yes |