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.
54 lines
2.0 KiB
Markdown
54 lines
2.0 KiB
Markdown
# the emitter adjudicates
|
|
|
|
One `Ishikawa → scientific method → Six Sigma` loop. The record below is the
|
|
commit message as written at the time, before the outcome was known to anyone
|
|
reading this file.
|
|
|
|
## Record — `c741cfe`
|
|
|
|
```
|
|
EXPERIMENT: prohibition becomes a query over emitted relations
|
|
|
|
I said prohibition could not move because "a #error has no runtime". That
|
|
conflated two separable things: WHEN a violation is detected (build time --
|
|
correct, and unchanged) and WHERE the rule and the checker live (the compiler
|
|
-- assumed).
|
|
|
|
A prohibition is a containment relation over the call graph. So codegen now
|
|
records what it saw:
|
|
|
|
sneaky calls raw_sql
|
|
allowed calls raw_sql
|
|
allowed calls @repository
|
|
repository calls prohibits:raw_sql
|
|
|
|
and tools/check/prohibitions.sh decides, at build time, outside the compiler.
|
|
|
|
PREDICTIONS AND RESULTS
|
|
P1 codegen can emit the call graph it already walks TRUE
|
|
P2 the check becomes a query outside the compiler TRUE
|
|
P3 all prohibition decisions leave codegen TRUE zero #errors now
|
|
P4 violations still caught at build time TRUE exit=1
|
|
P5 codegen drops below the 4661 baseline FALSE 4962, +301
|
|
|
|
P5 is the finding. The TRAVERSAL is irreducible -- you must walk the AST to
|
|
find calls, and those ~120 lines do not move no matter who decides. What is not
|
|
irreducible is the rule (which names) or the decision (#error). Those left. I
|
|
predicted the whole 223 lines would go because I had not separated walking from
|
|
adjudicating.
|
|
|
|
Still compiled, and measured rather than assumed: the capability-tier system
|
|
(cap_check_call, is_self_formation_call, is_dharma_call, is_llm_call,
|
|
cap_record_violation, emit_cap_violations) is 76 lines of the same shape --
|
|
prohibits_WITHIN rather than prohibits_outside, so the checker needs the
|
|
opposite polarity to absorb it.
|
|
|
|
98/98 native, 4/4 prohibition_query.sh, 7/7 seam_binding.sh, fixpoint ok.
|
|
```
|
|
|
|
## Record — `60c07ad`
|
|
|
|
```
|
|
land prohibition-as-query: the emitter records, it no longer adjudicates
|
|
```
|