Files
el/docs/v1/experiments/cycles/00-INDEX.md
T
bigmerge c6ba0677f0 log v1 experiments: nineteen cycles, organised by the method that produced them
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.
2026-08-17 10:52:17 -05:00

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