kill: purge old-paradigm dist/platform binaries from tree
El SDK Release / build-and-release (push) Failing after 13m0s

The generated C, amalgams, vendored runtime pins, and compiled binaries
from the Claude Code era are removed from the worktree. The El sources
survive; this tree is now source-only for the first-principles rebuild.

Per Principal direction 2026-08-19.
This commit is contained in:
will
2026-08-19 19:46:15 -05:00
parent cce4fcca05
commit d3495476f4
944 changed files with 10343 additions and 21230 deletions
@@ -0,0 +1 @@
bash -c cd /Users/will/Development/neuron-technologies/foundation/el/docs/v1/experiments/evidence/cycles && for d in 0*-* 1*-*; do [ -f "$d/MANIFEST.tsv" ] || continue; rows=$(awk -F"\t" "NR>1 && NF>=9 && \$1!=\"sha256\"{c++} END{print c+0}" "$d/MANIFEST.tsv"); stray=$(awk -F"\t" "NR>1 && NF<9{c++} END{print c+0}" "$d/MANIFEST.tsv"); outs=$(ls "$d"/*.out 2>/dev/null | wc -l | tr -d " "); printf "%-46s wellformed_rows=%-4s stray_lines=%-4s out_files=%s\n" "$d" "$rows" "$stray" "$outs"; done
@@ -0,0 +1,18 @@
00-cross-cycle-codegen-linecounts wellformed_rows=9 stray_lines=9 out_files=10
01-constructs-have-nowhere-to-be wellformed_rows=20 stray_lines=6 out_files=20
02-a-construct-cannot-refuse wellformed_rows=25 stray_lines=68 out_files=25
03-the-wrapper-was-conditional wellformed_rows=39 stray_lines=183 out_files=39
04-c-has-no-closure-syntax wellformed_rows=32 stray_lines=26 out_files=32
05-the-emitter-discards-what-it-knows wellformed_rows=21 stray_lines=17 out_files=21
06-the-crossing-resolves-at-emission wellformed_rows=41 stray_lines=271 out_files=41
07-invocation-is-not-composable wellformed_rows=22 stray_lines=18 out_files=22
08-the-emitter-adjudicates wellformed_rows=22 stray_lines=88 out_files=22
09-policy-inside-the-compiler wellformed_rows=26 stray_lines=135 out_files=26
10-a-second-copy-of-the-header wellformed_rows=15 stray_lines=33 out_files=15
11-one-type-erases-the-return wellformed_rows=11 stray_lines=0 out_files=11
12-judgment-lives-with-knowledge wellformed_rows=10 stray_lines=0 out_files=10
13-thirty-five-return-types wellformed_rows=20 stray_lines=0 out_files=20
14-keywords-that-reserve-nothing wellformed_rows=15 stray_lines=0 out_files=15
15-no-namespacing-at-all wellformed_rows=17 stray_lines=0 out_files=17
16-tokens-carry-no-position wellformed_rows=13 stray_lines=0 out_files=13
17-annotations-are-never-checked wellformed_rows=1 stray_lines=0 out_files=2
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:40:38Z
exit 0
ms 145
sha256_out 8b82c6f04c641f9777dd1bd1f2ddd5dd7c61b502bb9aa33d9a013eaa25137873
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash tools/evidence/verify-manifest.sh docs/v1/experiments/evidence/cycles
@@ -0,0 +1 @@
evidence: 0 artifacts verified, 0 altered, 0 missing
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:40:38Z
exit 0
ms 9
sha256_out 965c3dc538c178d5a93adc06ac162d01ab3c5c1f21e34ec16673a5669867c4b8
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash /Users/will/Development/neuron-technologies/foundation/el/tools/evidence/verify-manifest.sh /Users/will/Development/neuron-technologies/foundation/el/docs/v1/experiments/evidence/cycles
@@ -0,0 +1,9 @@
DIRTY-TREE 11-one-type-erases-the-return/0001-codegen-lines-P3.out (commit fbb3a52220e1) — not reproducible by checkout
DIRTY-TREE 11-one-type-erases-the-return/0002-codegen-lines-newline-check.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 11-one-type-erases-the-return/0003-signatures-rel-name-count-P5.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 12-judgment-lives-with-knowledge/0001-codegen-lines-P4.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 12-judgment-lives-with-knowledge/0002-temporal-rel-rule-count-P2.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 13-thirty-five-return-types/0001-codegen-lines-P4.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 13-thirty-five-return-types/0002-is-int-call-name-count-P1.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 16-tokens-carry-no-position/0002-P1-stride-sites-touched.out (commit 99b12f85c6ba) — not reproducible by checkout
evidence: 365 artifacts verified, 0 altered, 0 missing
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:40:50Z
exit 0
ms 3949
sha256_out cd8adcbc95c1db4fa7848f51a15580de6460b5d5010ee780e4c4aa60f20d2984
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash -c D=$(mktemp -d); bash /Users/will/Development/neuron-technologies/foundation/el/tools/evidence/verify-manifest.sh "$D"; echo "exit=$? on a directory containing NO manifests at all"; rmdir "$D"
@@ -0,0 +1,2 @@
evidence: 0 artifacts verified, 0 altered, 0 missing
exit=0 on a directory containing NO manifests at all
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:41:07Z
exit 0
ms 19
sha256_out 824b7a3f9cfba4b9edb8250714efb5f671b94e15f51abe9e04e7d24e44a19fb6
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash -c printf "%-11s %-22s %-22s %s\n" CYCLE CLAIMED OBSERVED "OFFSET(parent/commit)"; printf "%-11s %-22s %-22s %s\n" "03/285166c" "5094 -> 5044 (d50)" "5095 -> 5043 (d52)" "-1 / +1"; printf "%-11s %-22s %-22s %s\n" "06/28d19da" "5157 -> 5096 (d61)" "5156 -> 5095 (d61)" "+1 / +1"; printf "%-11s %-22s %-22s %s\n" "07/bc2f26d" "5042 -> 4977 (d65)" "5043 -> 4976 (d67)" "-1 / +1"; printf "%-11s %-22s %-22s %s\n" "08/c741cfe" "4962 (+301)" "4962 (+301)" " 0 / 0"; printf "%-11s %-22s %-22s %s\n" "09/c2d9596" "4963 -> 4881 (d82)" "4962 -> 4896 (d66)" "-1 / -15"; printf "%-11s %-22s %-22s %s\n" "10/9cc6040" "4903 -> 4512 (d391)" "4896 -> 4512 (d384)" "+7 / 0"; echo; echo "Offsets are NOT in a consistent direction. A single counting convention (missing trailing newline, editor last-line number) would produce a uniform offset. It does not."
@@ -0,0 +1,9 @@
CYCLE CLAIMED OBSERVED OFFSET(parent/commit)
03/285166c 5094 -> 5044 (d50) 5095 -> 5043 (d52) -1 / +1
06/28d19da 5157 -> 5096 (d61) 5156 -> 5095 (d61) +1 / +1
07/bc2f26d 5042 -> 4977 (d65) 5043 -> 4976 (d67) -1 / +1
08/c741cfe 4962 (+301) 4962 (+301) 0 / 0
09/c2d9596 4963 -> 4881 (d82) 4962 -> 4896 (d66) -1 / -15
10/9cc6040 4903 -> 4512 (d391) 4896 -> 4512 (d384) +7 / 0
Offsets are NOT in a consistent direction. A single counting convention (missing trailing newline, editor last-line number) would produce a uniform offset. It does not.
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:46:23Z
exit 0
ms 8
sha256_out df3922caf56164ed2e7e7e69bc9d7926e7decb4366ef8ef870191e86a6098e66
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash -c for c in 45325f7 addd5120 409bf573 dcaa77d; do n=$(git show "${c}:lang/el-compiler/src/codegen.el" </dev/null 2>/dev/null | wc -l | tr -d " "); printf "%-10s codegen.el=%-6s touched_codegen=%s %s\n" "$c" "$n" "$(git show --name-only --format="" "$c" | grep -c "el-compiler/src/codegen.el")" "$(git log -1 --format="%ci %s" "$c")"; done
@@ -0,0 +1,4 @@
45325f7 codegen.el=4661 touched_codegen=1 2026-08-16 16:08:40 -0500 singleton: guard the state, not the program's name
addd5120 codegen.el=4661 touched_codegen=0 2026-08-16 19:59:43 -0500 runtime: extract engram_text.c, and repair 10 harnesses that could not link
409bf573 codegen.el=4661 touched_codegen=0 2026-08-17 04:34:32 -0500 track the architecture docs
dcaa77d codegen.el=4670 touched_codegen=1 2026-08-17 04:53:40 -0500 make boundary crossings attributable to the construct that caused them
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:50:20Z
exit 0
ms 93
sha256_out e1f3740adfea072c2830cd7381b79864640925eefb64da06229008d948500698
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash /Users/will/Development/neuron-technologies/foundation/el/tools/evidence/verify-manifest.sh /Users/will/Development/neuron-technologies/foundation/el/docs/v1/experiments/evidence/cycles
@@ -0,0 +1,13 @@
DIRTY-TREE 16-tokens-carry-no-position/0002-P1-stride-sites-touched.out (commit 99b12f85c6ba) — not reproducible by checkout
DIRTY-TREE 19-a-convention-is-not-a-gate/0016-P8-rederived-build.out (commit 9a6c161ba98a) — not reproducible by checkout
DIRTY-TREE 19-a-convention-is-not-a-gate/0017-P8-rederived-emit-c.out (commit 9a6c161ba98a) — not reproducible by checkout
DIRTY-TREE 19-a-convention-is-not-a-gate/0018-P8-rederived-cc.out (commit 9a6c161ba98a) — not reproducible by checkout
DIRTY-TREE 19-a-convention-is-not-a-gate/0019-P8-rederived-still-segfaults.out (commit 9a6c161ba98a) — not reproducible by checkout
DIRTY-TREE 11-one-type-erases-the-return/0001-codegen-lines-P3.out (commit fbb3a52220e1) — not reproducible by checkout
DIRTY-TREE 11-one-type-erases-the-return/0002-codegen-lines-newline-check.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 11-one-type-erases-the-return/0003-signatures-rel-name-count-P5.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 12-judgment-lives-with-knowledge/0001-codegen-lines-P4.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 12-judgment-lives-with-knowledge/0002-temporal-rel-rule-count-P2.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 13-thirty-five-return-types/0001-codegen-lines-P4.out (commit a116710bacba) — not reproducible by checkout
DIRTY-TREE 13-thirty-five-return-types/0002-is-int-call-name-count-P1.out (commit a116710bacba) — not reproducible by checkout
evidence: 444 artifacts verified, 0 altered, 0 missing
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:50:45Z
exit 0
ms 5030
sha256_out 85ba5373fa09dd9e7c17fae1a15c1b1b0687d38d8ef16ed26c3cbe3c4acbc604
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash -c printf "fn main() {\n let sep: String = \"\037\"\n println(el_str_concat(\"a\", el_str_concat(sep, \"b\")))\n}\n" > /tmp/ctrl.el; echo "--- source bytes (note the raw 037 = 0x1F) ---"; od -c /tmp/ctrl.el | sed -n "2,3p"; echo "--- emitted run 1 ---"; /tmp/elcxc /tmp/ctrl.el 2>/dev/null | grep -n "el_val_t sep"; echo "--- emitted run 2 ---"; /tmp/elcxc /tmp/ctrl.el 2>/dev/null | grep -n "el_val_t sep"; echo "--- emitted run 3 ---"; /tmp/elcxc /tmp/ctrl.el 2>/dev/null | grep -n "el_val_t sep"
@@ -0,0 +1,9 @@
--- source bytes (note the raw 037 = 0x1F) ---
0000020 l e t s e p : S t r i n g
0000040 = " 037 " \n p r i n t l
--- emitted run 1 ---
8: el_val_t sep = EL_STR("4344967392");
--- emitted run 2 ---
8: el_val_t sep = EL_STR("4347851136");
--- emitted run 3 ---
8: el_val_t sep = EL_STR("4384031472");
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:44:07Z
exit 0
ms 25
sha256_out 4cce61f4529b6a536afcd74e324260321d05ffd78ead881a5d98c3a59fa8c2c0
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash -c printf "fn main() {\n let a: String = \"\"\n let b: String = \"ok\"\n let c: String = \"\037\"\n let d: String = \"\011\"\n println(el_str_concat(a, el_str_concat(b, el_str_concat(c, d))))\n}\n" > /tmp/ctrl2.el; /tmp/elcxc /tmp/ctrl2.el 2>/dev/null | grep -nE "el_val_t (a|b|c|d) ="
@@ -0,0 +1,4 @@
8: el_val_t a = EL_STR("");
9: el_val_t b = EL_STR("ok");
10: el_val_t c = EL_STR("4324455808");
11: el_val_t d = EL_STR("\t");
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:44:07Z
exit 0
ms 13
sha256_out 8b2a77870c944d8a686c4dac1f63fe40a5b3b7369f362f7b893053afde93621e
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash -c cd /tmp/rerun-v1-xc && /tmp/elcxc arbor/vessels/arbor-parse/src/main.el > /tmp/A.c 2>/dev/null; /tmp/elcxc arbor/vessels/arbor-parse/src/main.el > /tmp/B.c 2>/dev/null; shasum -a 256 /tmp/A.c /tmp/B.c; echo "--- diff ---"; diff /tmp/A.c /tmp/B.c | head -14; echo "--- source of the literal at El line 259 (cat -v) ---"; sed -n "259p" arbor/vessels/arbor-parse/src/main.el | cat -v
@@ -0,0 +1,17 @@
f623cf49c5b8dac9a08bc9487d707f7c8274a5256268d6a0d2ad710338ae014a /tmp/A.c
ed89c2a0d976b1826a4ee98ad953a2ab3ea1f6cdb755df67eb95e267abc81f73 /tmp/B.c
--- diff ---
481c481
< out = el_str_concat(out, EL_STR("33404397808"));
---
> out = el_str_concat(out, EL_STR("36759834384"));
506c506
< return str_split(s, EL_STR("33404400048"));
---
> return str_split(s, EL_STR("36759837600"));
620c620
< state_set(key, el_str_concat(el_str_concat(prev, EL_STR("33404413632")), node_id));
---
> state_set(key, el_str_concat(el_str_concat(prev, EL_STR("36759857760")), node_id));
--- source of the literal at El line 259 (cat -v) ---
if i > 0 { let out = out + "^_" }
@@ -0,0 +1,7 @@
commit 9540f2399120172b92e986e081877ff058adbdd3
tree clean
captured_utc 2026-08-17T17:44:07Z
exit 0
ms 41
sha256_out efc70a381315d22d1d158cd98ee4b88cc3940a367ecb58d09ad9681b7ad9f05e
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1,102 @@
# DEFECT — string literals containing control bytes compile to a heap address
Not a cycle claim. This is a **live miscompilation in the current compiler**, found
incidentally during the cycle 0110 evidence re-run and confirmed at branch HEAD.
It is filed with the evidence because it invalidates a *method* that cycles 0104 rely
on: "the emitted C is byte-identical" is only meaningful if the emitter is
deterministic, and for affected inputs it is not.
## Provenance
Captured from a clean detached worktree at `9540f2399` (`iteration-2` HEAD), compiler
built at that commit. All artifacts `tree=clean`.
Found by the cycle 04 agent while checking prediction 5 ("existing `@manager` output
byte-identical") across the whole tree: of 378 `.el` files, 368 emitted identically
under the parent and the commit compiler, 9 failed under both, and **1 differed — and
differed from itself between two runs of the same compiler.** I reproduced it
independently at HEAD before accepting it.
## The defect
A string literal containing a raw control byte with no escape mapping is emitted as a
**decimal heap address** instead of the string.
`0002-control-char-vs-empty-and-printable.out` isolates it exactly:
```
8: el_val_t a = EL_STR("");
9: el_val_t b = EL_STR("ok");
10: el_val_t c = EL_STR("4324455808"); <-- source literal is a raw 0x1F
11: el_val_t d = EL_STR("\t");
```
- empty literal `""` — correct
- printable literal `"ok"` — correct
- **raw `0x1F` (unit separator) — emitted as `4324455808`**
- raw `0x09` (tab) — correct, `"\t"`
Tab has an escape mapping and survives. `0x1F` has none, and instead of being escaped
it falls through to a path that stringifies a pointer.
## It is nondeterministic
`0001-minimal-reproducer-control-char-literal.out`, three consecutive runs of the
**same** compiler on the **same** source:
```
--- emitted run 1 --- el_val_t sep = EL_STR("4344967392");
--- emitted run 2 --- el_val_t sep = EL_STR("4347851136");
--- emitted run 3 --- el_val_t sep = EL_STR("4384031472");
```
The value tracks the process heap base, which moves under ASLR.
## It occurs in real code in this repository
`0003-real-file-nondeterminism-arbor-parse.out`. `arbor/vessels/arbor-parse/src/main.el`
uses `0x1F` as a field separator — El source line 259, shown through `cat -v`:
```
if i > 0 { let out = out + "^_" }
```
Two runs of the same compiler over that file produce different sha256, differing in
three places, each a separator literal rendered as a different address. Within a single
run the corrupted values differ by fixed offsets (`+2240`, `+32208`), consistent with
distinct literals in one heap arena; across runs the whole block shifts.
The file applies **no decorators at all**, so this is unrelated to the construct work
in cycles 0110, and it reproduces at cycle 04's parent `4f7568b` as well as at HEAD.
It predates the cycle series.
## Why it matters
1. **Silent miscompilation.** `arbor-parse` builds and links. At runtime it joins and
splits records on a separator that is a decimal rendering of an address rather than
`0x1F` — and the encode and decode sides get *different* values whenever they are
compiled separately. No diagnostic is produced at any stage.
2. **Reproducible builds are broken** for any source containing such a literal.
3. **It weakens byte-identity as a control.** Cycles 01, 02, 03 and 04 all assert
"emitted C is byte-identical". Those assertions were checked on decorator-bearing
sources, which are unaffected — the cycle 04 agent verified all 3 `@manager`/
`@accessor` files emit identically — so no cycle verdict changes. But the control
itself is only sound on inputs that avoid this defect, and nothing in the record
says so.
## Verdicts
| Claim | Artifact | Verdict |
|---|---|---|
| Control-byte literals emit as an address, not the string | `0002` | **CONFIRMED** |
| The emitter is nondeterministic for such inputs | `0001` (3 runs) | **CONFIRMED** |
| A real file in this repo is affected | `0003` | **CONFIRMED** |
| The defect predates cycles 0110 | cycle 04's `0049`-series (parent `4f7568b` shows it too) | **CONFIRMED** |
## Not fixed here
This evidence pass does not change code. The defect is recorded, reproduced, and
minimally isolated so it can be fixed and regression-tested separately. A fix should
escape all non-printable bytes in the literal emitter and add a test asserting that
compiling the same source twice yields byte-identical output.
@@ -0,0 +1,4 @@
sha256 bytes exit ms commit tree utc artifact command
4cce61f4529b6a536afcd74e324260321d05ffd78ead881a5d98c3a59fa8c2c0 382 0 25 9540f2399120 clean 2026-08-17T17:44:07Z 0001-minimal-reproducer-control-char-literal.out bash -c printf "fn main() {\n let sep: String = \"\037\"\n println(el_str_concat(\"a\", el_str_concat(sep, \"b\")))\n}\n" > /tmp/ctrl.el; echo "--- source bytes (note the raw 037 = 0x1F) ---"; od -c /tmp/ctrl.el | sed -n "2,3p"; echo "--- emitted run 1 ---"; /tmp/elcxc /tmp/ctrl.el 2>/dev/null | grep -n "el_val_t sep"; echo "--- emitted run 2 ---"; /tmp/elcxc /tmp/ctrl.el 2>/dev/null | grep -n "el_val_t sep"; echo "--- emitted run 3 ---"; /tmp/elcxc /tmp/ctrl.el 2>/dev/null | grep -n "el_val_t sep"
8b2a77870c944d8a686c4dac1f63fe40a5b3b7369f362f7b893053afde93621e 132 0 13 9540f2399120 clean 2026-08-17T17:44:07Z 0002-control-char-vs-empty-and-printable.out bash -c printf "fn main() {\n let a: String = \"\"\n let b: String = \"ok\"\n let c: String = \"\037\"\n let d: String = \"\011\"\n println(el_str_concat(a, el_str_concat(b, el_str_concat(c, d))))\n}\n" > /tmp/ctrl2.el; /tmp/elcxc /tmp/ctrl2.el 2>/dev/null | grep -nE "el_val_t (a|b|c|d) ="
efc70a381315d22d1d158cd98ee4b88cc3940a367ecb58d09ad9681b7ad9f05e 685 0 41 9540f2399120 clean 2026-08-17T17:44:07Z 0003-real-file-nondeterminism-arbor-parse.out bash -c cd /tmp/rerun-v1-xc && /tmp/elcxc arbor/vessels/arbor-parse/src/main.el > /tmp/A.c 2>/dev/null; /tmp/elcxc arbor/vessels/arbor-parse/src/main.el > /tmp/B.c 2>/dev/null; shasum -a 256 /tmp/A.c /tmp/B.c; echo "--- diff ---"; diff /tmp/A.c /tmp/B.c | head -14; echo "--- source of the literal at El line 259 (cat -v) ---"; sed -n "259p" arbor/vessels/arbor-parse/src/main.el | cat -v
Can't render this file because it contains an unexpected character in line 2 and column 179.
@@ -0,0 +1,6 @@
captured_utc 2026-08-17T17:44:07Z
git_sha 9540f2399120172b92e986e081877ff058adbdd3
git_dirty no
host Wills-MacBook-Pro
uname Darwin Wills-MacBook-Pro 25.5.0 Darwin Kernel Version 25.5.0: Tue Jun 9 22:28:34 PDT 2026; root:xnu-12377.121.10~1/RELEASE_ARM64_T6041 arm64
cc Apple clang version 21.0.0 (clang-2100.1.1.101)
@@ -0,0 +1,7 @@
bash -c
echo "Which C source each timed binary was built from, and whether it contains wrappers:"
for pair in "/tmp/elcP_g2:/tmp/pg2_03b.c:BEFORE bootstrap-built 24f7fb5" "/tmp/elcP_g3:/tmp/pg3_03b.c:BEFORE self-hosted 24f7fb5" "/tmp/elc03b:/tmp/g03b.c:AFTER bootstrap-built 285166c" "/tmp/elc03b_g3:/tmp/g03b_b.c:AFTER self-hosted 285166c"; do
bin=${pair%%:*}; rest=${pair#*:}; src=${rest%%:*}; lbl=${rest#*:}
printf " %-34s bin=%-18s src=%-16s lines=%-6s __el_body_ defs=%s el_seam_run calls=%s\n" \
"$lbl" "$bin" "$src" "$(wc -l < $src | tr -d \" \")" "$(grep -cE \"^static el_val_t __el_body_\" $src)" "$(grep -c \"el_seam_run(\" $src)"
done
@@ -0,0 +1,2 @@
bash: -c: line 6: syntax error near unexpected token `(' while looking for matching `)'
bash: -c: line 6: ` "$lbl" "$bin" "$src" "$(wc -l < $src | tr -d \" \")" "$(grep -cE \"^static el_val_t __el_body_\" $src)" "$(grep -c \"el_seam_run(\" $src)"'
@@ -0,0 +1 @@
Which C source each timed binary was built from, and whether it contains wrappers:
@@ -0,0 +1,7 @@
commit 285166c25c218e3ea91d9ceb537fac51fdd18c80
tree clean
captured_utc 2026-08-17T17:39:59Z
exit 127
ms 8
sha256_out 735264ceb5cf2e7c87d6dfc97b4f119ce4ac55f43f0a55a7fe8660a6d19e341a
sha256_err 2d5c6c486c88c06cffc7bc1c6e3e8a2ddfb0454327219601b015e8c9d9848b27
@@ -0,0 +1,7 @@
binary <- C source it was compiled from; wrapper content of that C:
LABEL BINARY C SOURCE LINES __el_body_defs el_seam_run
BEFORE bootstrap-built 24f7fb5 /tmp/elcP_g2 /tmp/pg2_03b.c 11477 0 1
BEFORE self-hosted 24f7fb5 /tmp/elcP_g3 /tmp/pg3_03b.c 11739 0 263
AFTER bootstrap-built 285166c /tmp/elc03b /tmp/g03b.c 11409 0 2
AFTER self-hosted 285166c /tmp/elc03b_g3 /tmp/g03b_b.c 12957 258 518
4f7568b bootstrap-built /tmp/elc03a /tmp/g03a.c 11361 0 0
@@ -0,0 +1,7 @@
commit 285166c25c218e3ea91d9ceb537fac51fdd18c80
tree clean
captured_utc 2026-08-17T17:40:09Z
exit 0
ms 79
sha256_out 7bcac9b43e4a788b7baf36cee0f885a5c3280c2c22cfa04548bee9e282a269df
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1,8 @@
bash -c
echo "b40754f is a MERGE commit. Parents:"; git log -1 --format=" %H%n parents: %P" b40754f
echo; echo "b40754f parents resolved:"; for p in $(git log -1 --format=%P b40754f); do git log -1 --format=" %h %ci %s" $p; done
echo; echo "tree diff 285166c .. b40754f (empty = identical trees):"
git diff --stat 285166c b40754f || true
echo "[end diff]"
echo; echo "tree diff 24f7fb5 .. b40754f:"
git diff --stat 24f7fb5 b40754f | tail -5
@@ -0,0 +1,16 @@
b40754f is a MERGE commit. Parents:
b40754f07b5eff3700a69681397e46949a5c4f41
parents: 24f7fb51436bdc68838fd7651d7377f3fb919ee3 285166c25c218e3ea91d9ceb537fac51fdd18c80
b40754f parents resolved:
24f7fb51 2026-08-17 08:56:41 -0500 land the runtime seam: resolve the crossing at execution
285166c2 2026-08-17 09:01:55 -0500 EXPERIMENT: emit the wrapper unconditionally, so exit binds at runtime too
tree diff 285166c .. b40754f (empty = identical trees):
[end diff]
tree diff 24f7fb5 .. b40754f:
lang/el-compiler/src/codegen.el | 56 ++--------------------------------
lang/tests/integration/seam_binding.sh | 9 +++++-
lang/tests/native/test_compiler.el | 46 +++++++++++++++++-----------
3 files changed, 39 insertions(+), 72 deletions(-)
@@ -0,0 +1,7 @@
commit 285166c25c218e3ea91d9ceb537fac51fdd18c80
tree clean
captured_utc 2026-08-17T17:40:22Z
exit 0
ms 48
sha256_out d4fcdf229cbcef003001b4b85e1102124c06ad3959284b74f8e66a4cc4daea77
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1,237 @@
=== A. The source of the figures: docs/architecture/el-language-design.md §6, at 4f7568b ===
---
## 6. The residue map
What each construct must absorb, from §18.0 plus measured state:
| Residue | Count | Absorbed by |
|---|---|---|
| persist-after-mutate | 62 sites | `hold` (after-crossing) |
| auth-per-route | 10 sites | `hold` (before-crossing) |
| index-after-append | 9 of 9 failed | `hold` (after-crossing) |
| env var defaults | 20 | configuration declared once |
| process identity | 0 guards | `hold` (before-crossing) |
| `geometry_free` at every call site | every site | ownership follows from `semel` |
| five ingest functions where there is one | 5 → 1 | `protocol` / `impl` |
| `el_runtime.c` | 20,504 lines | faculty decomposition, ordered after `semel` |
---
## 7. Notes carried forward
**`el-architecture.html` §04 needs its numbers sourced or cut.** An audit found the
faculty scoreboard — `Ingest 2 min → 0 nodes`, `Recall self ranked 8th`,
`Body CC 356 / 1,626 ln`, `the verifier answers in 2.9s`, `5 of 13 native suites
failing` — has no supporting evidence in the repository, under a footer asserting
*"nothing is inferred and presented as fact."* Against a corpus whose documents
supersede their own conclusions in place, that is the one file that would not survive
scrutiny. Fix or remove.
**Source as a projection surface is claimed and unimplemented.** `el-architecture.html`
§147/§150: *"if source is a surface, then emitting a corrected file is projection."*
Greps for `surface_profile_code`, `emit_source` → zero hits.
It is not unbacked. **It was demonstrated on 2026-08-14** — three faculties (phonetic,
semantic, procedural) projected into TypeScript, a surface the system had never used,
with the network severed. Recovered at
`~/Development/neuron-technologies/andre-server-recovered/` and copied into
`evidence/03-andre-demo/`. The claim needs bringing home to El, not proving.
**`hold` is the highest-leverage construct after `semel`** — it collapses 62 + 10 + 9
sites and unblocks the runtime extraction. §19.3 names the prologue/epilogue seam as
the prerequisite and its stated blocker has expired.
---
## 8. What is not decided and must not be guessed
=== B. Upstream population statement: lang/spec/language.md §18.0 / §19.1 / §19.2, at 4f7568b ===
El's units of encapsulation are the function and the module. Neither can hold a concern like that. So each one had been expressed the only way it could be — as a **convention**: *call this at every site.* Conventions of that shape do not hold. They are not enforced by anything, they are invisible in review, and they fail silently at the one site somebody forgot.
Measured in this codebase before this section existed:
| Concern | State | What the convention was |
|---|---|---|
| process identity | **zero** guards anywhere — no pidfile, no lock, no already-running check, at any layer | "check nothing is already running first" |
| configuration | **20** distinct environment variables in one program, each with its default written inline at the read site | "remember the right default here" |
| durability | **62** `persist_*` / `engram_save` / `wal_*` / `checkpoint` call sites | "after you mutate, remember to persist" |
| request auth | **10** per-route `_auth` checks | "check the token in this handler too" |
These are not four problems. They are one absence, four times.
That the convention form fails is observed, not predicted. Process identity failed three times in a single day: twice, two engram processes ran simultaneously against the same data directory; twice, a stale binary held a port and answered probes while a fresh build was believed to be under test, because `pkill -f` had silently failed to match its argv — which nearly produced a false "the fix does not work" conclusion. Configuration failed structurally: `ENGRAM_DATA_DIR` was read at six sites, five of them dead bindings, and the sixth defaulted to `/tmp/engram` — contradicting the canonical resolver's `$HOME/.neuron/engram` and landing a pre-destructive safety backup on ephemeral storage.
The `program` block is where a concern of this shape is declared once and enforced by the compiler at the process boundary.
---- §19.1 ----
Sections 19.1 and 19.2 specify the two remaining concerns from the table in 18.0. Both are **designed and deliberately unimplemented.** The reason is stated in 19.3 and it is not difficulty.
### 19.1 Durability as an epilogue effect
**The defect.** 62 call sites carry the convention *"after you mutate, remember to persist."* This is structurally the same defect as the index bug being fixed elsewhere in this tree — *"after you append, remember to index"* — which failed at **9 of 9** sites. A convention that failed at 100% of its sites is the strongest available evidence about what this class of convention is worth.
**Why the existing seam cannot express it.** §9's injection is a prologue. Durability is inherently an *epilogue*: persist after the mutation succeeds, and not at all if it threw. The seam has no epilogue.
**Design.** Extend the decorator seam from prologue-only to prologue/epilogue, then declare durability as an effect on the mutating function:
---- §19.2 ----
**Enforcement, and this is the part that actually fixes it.** Mirroring §9's `#error` for `dharma_emit`: a function that calls a mutating primitive without carrying `@durable` is a **compile error**. Otherwise this is a 63rd thing to remember rather than a replacement for 62.
### 19.2 Request authorization as a route effect
**The defect.** 10 per-route `_auth` checks. The HTTP layer has no concept of authorization, so a new route is unauthenticated by default and silently so — the failure mode is a route that forgot, and nothing anywhere reports it.
**Design.** Authorization becomes an argument to the `@route` decorator, which already takes arguments and already builds a dispatch table:
```
=== C. Attempted re-derivation of '62 persist-after-mutate sites' ===
The stated pattern set is: persist_* / engram_save / wal_* / checkpoint call sites.
No directory, glob, language, commit or call-vs-declaration rule is stated. Trying several scopes:
scope=. all-files=302 (*.el only under it: 69)
scope=engram all-files=151 (*.el only under it: 53)
scope=engram/src all-files=52 (*.el only under it: 52)
scope=lang all-files=122 (*.el only under it: 3)
scope=ql all-files=0 (*.el only under it: 0)
scope=peripheral all-files=5 (*.el only under it: 5)
--- tree-wide, *.el only ---
69
--- tree-wide, *.el only, per-symbol breakdown ---
12 persist_canonical(
10 engram_save(
7 wal_on(
7 persist_node(
6 persist_edges_since(
6 checkpoint(
4 wal_maybe_compact(
3 persist_resume(
3 persist_bulk(
2 wal_node_put(
2 wal_edges_since(
2 persist_now(
2 persist_hebb_batch(
1 wal_hebb_batch(
1 wal_compact(
1 wal_boot(
=== D. Attempted re-derivation of '10 per-route _auth checks' ===
occurrences of _auth tree-wide at 4f7568b:
4f7568b:engram/dist/engram:3
4f7568b:engram/dist/engram.c:4
4f7568b:engram/spec/grounded-edge-propagation/awareness.beat.patch.el:2
4f7568b:engram/spec/grounded-edge-propagation/server.route.patch.el:2
4f7568b:engram/src/server.el:11
4f7568b:ide/vessels/el-ide-server/src/el-ide-server:2
4f7568b:ide/vessels/el-ide-server/src/el-ide-server-asan:2
4f7568b:ide/vessels/el-ide-server/src/el-ide-server-asan.dSYM/Contents/Resources/DWARF/el-ide-server-asan:2
4f7568b:ide/vessels/el-lsp/src/el-lsp:2
4f7568b:ide/vessels/el-plugin-host/src/el-plugin-host:2
4f7568b:ingest/src/ingest.el:2
4f7568b:lang/BOOTSTRAP.md:1
4f7568b:lang/dist/elc-bootstrap.c:1
4f7568b:lang/dist/elc-new.c:1
4f7568b:lang/dist/platform/elb:2
4f7568b:lang/dist/platform/elb-darwin-arm64:2
4f7568b:lang/dist/platform/elb-linux-amd64:1
4f7568b:lang/dist/platform/elc:3
4f7568b:lang/dist/platform/elc-asan:3
4f7568b:lang/dist/platform/elc-asan.dSYM/Contents/Resources/DWARF/elc-asan:2
4f7568b:lang/dist/platform/elc-darwin-arm64:3
4f7568b:lang/dist/platform/elc-linux-amd64:2
4f7568b:lang/dist/platform/elc.20260502-0130-self-host:3
4f7568b:lang/dist/platform/elc.20260502-1104-self-host:3
4f7568b:lang/dist/platform/elc.20260502-1231-self-host:3
4f7568b:lang/dist/platform/elc.20260502-1249-self-host:3
4f7568b:lang/dist/platform/elc.20260502-1256-self-host:3
4f7568b:lang/dist/platform/elc.20260502-1321-self-host:3
4f7568b:lang/dist/platform/elc.20260502-1916-self-host:3
4f7568b:lang/dist/platform/elc.20260503-1555-post-sprint:3
4f7568b:lang/dist/platform/elc.20260503-1603-post-lsp:3
4f7568b:lang/dist/platform/elc.c:1
4f7568b:lang/dist/platform/elc.prelaunch.bak:3
4f7568b:lang/dist/platform/elc.preselfhost:3
4f7568b:lang/dist/platform/elc.prev5:2
4f7568b:lang/dist/platform/elc.prev6:2
4f7568b:lang/dist/platform/elc.prev7:3
4f7568b:lang/dist/platform/elc.prev8:3
4f7568b:lang/dist/platform/elc.prev9:3
4f7568b:lang/el-compiler/src/codegen.el:3
4f7568b:lang/elc-combined.el:1
4f7568b:lang/elc.c:1
4f7568b:lang/examples/browser-auth.el:3
4f7568b:lang/runtime/el_capture_darwin.m:7
4f7568b:lang/runtime/el_runtime.c:4
4f7568b:lang/runtime/el_runtime.h:1
4f7568b:lang/runtime/el_runtime_win32.c:1
4f7568b:lang/runtime/http.el:3
4f7568b:lang/spec/language.md:2
4f7568b:lang/swarm/primitives.el:2
4f7568b:lang/swarm/reshape_surface.el:3
4f7568b:lang/swarm/worktrack.el:1
4f7568b:lang/tests/native/test_compiler.el:8
4f7568b:lang/tools/lsp/dist/el-lsp:2
4f7568b:peripheral/src/organ_cli.el:1
4f7568b:tools/api-reshape/agentic_loop.el:6
4f7568b:tools/api-reshape/parity.sh:3
4f7568b:tools/neuron-sandbox/nsbx:3
4f7568b:ui/examples/native-hello-android/app/src/main/jni/el_runtime.c:2
4f7568b:ui/examples/native-hello-android/app/src/main/jni/el_runtime.h:1
4f7568b:ui/examples/native-hello-ios/NativeHello/el_runtime.c:2
4f7568b:ui/examples/native-hello-ios/NativeHello/el_runtime.h:1
4f7568b:ui/examples/native-hello/build-docker/runtime/el_runtime.c:2
4f7568b:ui/examples/native-hello/build-docker/runtime/el_runtime.h:1
4f7568b:ui/examples/native-hello/build-gtk4/.rt_T.txt:1
4f7568b:ui/examples/native-hello/build-gtk4/.rt_keep.txt:1
4f7568b:ui/examples/native-hello/build-gtk4/el_runtime.o:1
4f7568b:ui/examples/native-hello/build-gtk4/native-hello-gtk4:2
4f7568b:ui/examples/native-hello/build-win32/el_runtime_win32.o:1
4f7568b:ui/examples/native-hello/build-win32/native-hello.exe:2
4f7568b:ui/examples/native-hello/build/.rt_T.txt:1
4f7568b:ui/examples/native-hello/build/.rt_keep.txt:1
4f7568b:ui/examples/native-hello/build/el_runtime.o:1
4f7568b:ui/examples/native-hello/build/native-hello:2
4f7568b:ui/examples/native-hello/build/native-hello-linux-arm64:1
4f7568b:ui/examples/native-hello/build/native-hello-linux-x86_64:1
4f7568b:ui/examples/native-hello/build/native-hello-pi-arm64:1
4f7568b:ui/examples/native-hello/build/native-hello-sdl2:2
4f7568b:ui/vessels/el-aop/src/main.el:3
4f7568b:ui/vessels/el-identity/src/main.el:4
4f7568b:ui/vessels/el-platform/src/main.el:2
4f7568b:ui/vessels/el-services/src/main.el:2
lines matching _auth in engram/src:
4f7568b:engram/src/server.el:49: // Default "" leaves auth DISABLED (check_auth_ok short-circuits to true on an
4f7568b:engram/src/server.el:809:// "preserve_edges": true, "_auth": "<key>"}
4f7568b:engram/src/server.el:899:// Auth: exempt (internal endpoint, soul daemon on same host, no _auth needed).
4f7568b:engram/src/server.el:900:// The soul's ise_post() sends {"content":"..."} without _auth; enforcing auth
4f7568b:engram/src/server.el:950:// Endpoint: POST /api/neuron/knowledge/capture (auth required: "_auth" in body)
4f7568b:engram/src/server.el:953:// "_auth": "<key>"}
4f7568b:engram/src/server.el:1958:fn check_auth_ok(method: String, body: String) -> Bool {
4f7568b:engram/src/server.el:1963: // requests must include "_auth": "<key>" in the JSON body.
4f7568b:engram/src/server.el:1965: let provided: String = json_get_string(body, "_auth")
4f7568b:engram/src/server.el:1982: // ISE posting is auth-exempt (internal soul daemon, same host, no _auth key)
4f7568b:engram/src/server.el:1988: if !check_auth_ok(method, body) {
=== E. Attempted re-derivation of 'index-after-append failed at 9 of 9' ===
--- searching for: index-after-append
4f7568b:docs/architecture/el-language-design.md:199:| index-after-append | 9 of 9 failed | `hold` (after-crossing) |
4f7568b:lang/el-compiler/src/codegen.el:4224:// persist-after-mutate sites and 9-of-9 failed index-after-append sites — every
--- searching for: 9 of 9
4f7568b:design/completing-el.html:97:<tr><td class="f">Index-after-append</td><td class="m">9 of 9 failed</td><td>"after you append, remember to index"</td></tr>
4f7568b:docs/architecture/el-architecture.html:105:<tr><td class="f">Index-after-append</td><td class="m">9 of 9 failed</td><td>"after you append, remember to index"</td></tr>
4f7568b:docs/architecture/el-language-design.md:25:| Index-after-append | 9 of 9 failed | "after you append, remember to index" |
4f7568b:docs/architecture/el-language-design.md:199:| index-after-append | 9 of 9 failed | `hold` (after-crossing) |
4f7568b:lang/spec/language.md:1237:**The defect.** 62 call sites carry the convention *"after you mutate, remember to persist."* This is structurally the same defect as the index bug being fixed elsewhere in this tree — *"after you append, remember to index"* — which failed at **9 of 9** sites. A convention that failed at 100% of its sites is the strongest available evidence about what this class of convention is worth.
--- searching for: 9-of-9
4f7568b:lang/el-compiler/src/codegen.el:4224:// persist-after-mutate sites and 9-of-9 failed index-after-append sites — every
--- searching for: remember to index
4f7568b:design/completing-el.html:97:<tr><td class="f">Index-after-append</td><td class="m">9 of 9 failed</td><td>"after you append, remember to index"</td></tr>
4f7568b:docs/architecture/el-architecture.html:105:<tr><td class="f">Index-after-append</td><td class="m">9 of 9 failed</td><td>"after you append, remember to index"</td></tr>
4f7568b:docs/architecture/el-language-design.md:25:| Index-after-append | 9 of 9 failed | "after you append, remember to index" |
4f7568b:lang/spec/language.md:1237:**The defect.** 62 call sites carry the convention *"after you mutate, remember to persist."* This is structurally the same defect as the index bug being fixed elsewhere in this tree — *"after you append, remember to index"* — which failed at **9 of 9** sites. A convention that failed at 100% of its sites is the strongest available evidence about what this class of convention is worth.
--- searching for: after you append
4f7568b:design/completing-el.html:97:<tr><td class="f">Index-after-append</td><td class="m">9 of 9 failed</td><td>"after you append, remember to index"</td></tr>
4f7568b:docs/architecture/el-architecture.html:105:<tr><td class="f">Index-after-append</td><td class="m">9 of 9 failed</td><td>"after you append, remember to index"</td></tr>
4f7568b:docs/architecture/el-language-design.md:25:| Index-after-append | 9 of 9 failed | "after you append, remember to index" |
4f7568b:lang/spec/language.md:1237:**The defect.** 62 call sites carry the convention *"after you mutate, remember to persist."* This is structurally the same defect as the index bug being fixed elsewhere in this tree — *"after you append, remember to index"* — which failed at **9 of 9** sites. A convention that failed at 100% of its sites is the strongest available evidence about what this class of convention is worth.
@@ -0,0 +1,7 @@
commit 4f7568b07f61a81fed1db5b8274813032ea3b16e
tree clean
captured_utc 2026-08-17T17:41:04Z
exit 0
ms 2833
sha256_out d4f483f19828ac61252024d907faee65f8bf7ebdf39bb674eda83986e17773de
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1,25 @@
=== A. the tally arithmetic in seam_binding.sh at 285166c ===
10:# exit 0 = all assertions held; non-zero = number of failures
15:FAILS=0
18:fail() { printf ' FAIL %s\n expected: %s\n actual: %s\n' "$1" "$2" "$3"; FAILS=$((FAILS+1)); }
91:echo " 7 assertions, $((6-FAILS)) passed, $FAILS failed"
92:exit $FAILS
=== B. same lines at the parent 24f7fb5 ===
10:# exit 0 = all assertions held; non-zero = number of failures
15:FAILS=0
18:fail() { printf ' FAIL %s\n expected: %s\n actual: %s\n' "$1" "$2" "$3"; FAILS=$((FAILS+1)); }
84:echo " 6 assertions, $((6-FAILS)) passed, $FAILS failed"
85:exit $FAILS
=== C. number of check() invocations (assertions actually run) at each commit ===
24f7fb5 check-invocations=6
285166c check-invocations=7
b40754f check-invocations=7
=== D. did a later commit fix the arithmetic? (search all commits touching the file) ===
bc2f26dd EXPERIMENT: invocation control resolves at runtime
285166c2 EXPERIMENT: emit the wrapper unconditionally, so exit binds at runtime too
8bbb750c control the claim that cannot be unit tested
--- the tally line at each commit that touched the file ---
@@ -0,0 +1,7 @@
commit 285166c25c218e3ea91d9ceb537fac51fdd18c80
tree clean
captured_utc 2026-08-17T17:44:24Z
exit 0
ms 75
sha256_out 178e75ae04a503701e26ee3b5415babe25fe1a723208500f4dbba6ec50301d3c
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash /tmp/harnesstally03b2.sh
@@ -0,0 +1,7 @@
tally line of tests/integration/seam_binding.sh at every commit that touched it:
bc2f26dd 2026-08-17 09:06:05 -0500 checks=7 tally: 96:echo " 7 assertions, $((7-FAILS)) passed, $FAILS failed"
285166c2 2026-08-17 09:01:55 -0500 checks=7 tally: 91:echo " 7 assertions, $((6-FAILS)) passed, $FAILS failed"
8bbb750c 2026-08-17 08:48:57 -0500 checks=6 tally: 84:echo " 6 assertions, $((6-FAILS)) passed, $FAILS failed"
bc2f26d full tally line:
96:echo " 7 assertions, $((7-FAILS)) passed, $FAILS failed"
@@ -0,0 +1,7 @@
commit 285166c25c218e3ea91d9ceb537fac51fdd18c80
tree clean
captured_utc 2026-08-17T17:44:36Z
exit 0
ms 110
sha256_out 03a64d59c52d7b823b1394fe7fa8f360e86df589fd5a1c8f7700c9e0946d0052
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1,394 @@
# CLAIMS — cycle 03, the wrapper was conditional
Source doc: `docs/v1/experiments/cycles/03-the-wrapper-was-conditional.md`
## Pinned commits
This cycle pins three commits. The third is a merge, and its tree is byte-identical
to the second — so every measurement at `285166c` carries unchanged to `b40754f`.
| | Record 1 | Record 2 (the EXPERIMENT) | Record 3 (the land) |
|---|---|---|---|
| SHA | `4f7568b07f61a81fed1db5b8274813032ea3b16e` | `285166c25c218e3ea91d9ceb537fac51fdd18c80` | `b40754f07b5eff3700a69681397e46949a5c4f41` |
| Committed | 2026-08-17 07:56:28 -0500 | 2026-08-17 09:01:55 -0500 | 2026-08-17 09:01:55 -0500 |
| Subject | give a construct its after-crossing face, and let constructs compose | EXPERIMENT: emit the wrapper unconditionally, so exit binds at runtime too | land unconditional wrapper: exit crossings resolve at runtime |
| Parent(s) | `60737b03` (let a construct refuse, not only observe) | `24f7fb51` (land the runtime seam: resolve the crossing at execution) | **merge**: `24f7fb51` + `285166c2` |
| Worktree | `/tmp/rerun-v1-03a`, tree clean | `/tmp/rerun-v1-03b`, tree clean | measured from `/tmp/rerun-v1-03b` |
**Topology matters and the record does not state it.** `285166c` is an experiment
*branch* off `24f7fb5`; `b40754f` is the **merge** that lands it. So the "before"
state for every P1P4 prediction is `24f7fb5`, **not** `4f7568b`. `4f7568b` sits
eight commits earlier on a different line (`0004-commit-lineage.out`,
`0215-b40754f-tree-vs-285166c.out`).
`git diff 285166c b40754f` is empty — the merge introduced nothing
(`0215-b40754f-tree-vs-285166c.out`). `b40754f` carries no numeric claim of its own;
its identity is captured in `0003-commit-identity-b40754f.out`.
Artifact provenance: every artifact pinned per-capture, tree `clean` at both worktrees
(see `MANIFEST.tsv`, `RUN.env`). Host: Wills-MacBook-Pro, Apple M4 Pro, arm64,
Apple clang 21.0.0.
## Verdicts
30 factual assertions enumerated.
**REPRODUCED 24 · DIVERGED 3 · NOT-REPRODUCIBLE 2 · NOT-CAPTURED 1**
### Record `4f7568b`
| # | Claim (verbatim from the record) | Artifact | Commit | Verdict |
|---|---|---|---|---|
| 1 | "§6 records 62 persist-after-mutate sites, 10 auth-per-route, and index-after-append that failed at 9 of 9" — *as a quotation of §6* | `0223-sec6-figures-source-and-rederivation.out` | `4f7568b` | **REPRODUCED** — §6 is `docs/architecture/el-language-design.md` "## 6. The residue map"; its table reads exactly `persist-after-mutate \| 62 sites`, `auth-per-route \| 10 sites`, `index-after-append \| 9 of 9 failed`. The record quotes §6 correctly. |
| 2 | "62 persist-after-mutate sites" — *as a measurement* | `0223` | `4f7568b` | **NOT-REPRODUCIBLE** — population undefined; no scope produces 62 (see below) |
| 3 | "10 auth-per-route" — *as a measurement* | `0223` | `4f7568b` | **NOT-REPRODUCIBLE** — there is exactly **one** auth check at this commit, not ten (see below) |
| 4 | "index-after-append that failed at 9 of 9" | `0223` | `4f7568b` | **NOT-CAPTURED** — no enumeration, file, test, or procedure exists anywhere in the tree; all five occurrences are restatements of each other |
| 5 | "98/98 native compiler tests pass" | `0007-native-compiler-tests-03a.out` | `4f7568b` | **REPRODUCED**`98 tests, 98 passed, 0 failed, 243 assertions in 4.271ms` |
| 6 | "existing output byte-identical" | `0034-REDO-parent-compiler-build-03a.out`, `0047-REDO-existing-output-byte-identical-03a.out` | `4f7568b` vs `4f7568b^` | **REPRODUCED** — the parent compiler (`60737b03`, built from `git archive`) and the `4f7568b` compiler emit **byte-identical C for the whole 11,258-line compiler source of the parent**, sha256 `8408ae3aef3048cf…` for both |
| 7 | "Fns with no exit construct emit byte-identically to before" | `0047` §A | `4f7568b` vs `4f7568b^` | **REPRODUCED** — probe of `@manager` / `@accessor` / undecorated fns: identical, sha256 `f5ae7733b4b3ee0e…`; `__el_body_` wrapper count in the output = **0** |
| 8 | "compiler self-hosts byte-identically" | `0140-selfhost-fixpoint-gen2-gen3-03a.out` | `4f7568b` | **REPRODUCED** — gen1 == gen2 == gen3, all sha256 `fcdfdf13b9fed6e9…`, 11,361 lines |
| 9 | "early returns pass through the exit" | `0065-REDO-exit-and-composition-tests-03a.out` | `4f7568b` | **REPRODUCED**`ok declared-exit-wraps-body-so-early-returns-pass-through`; also `ok declared-exit-receives-the-result` |
| 10 | "ordering holds under composition" / "Three independent constructs now compose on one fn, none known to the compiler" | `0065` | `4f7568b` | **REPRODUCED**`ok constructs-compose-guard-entry-exit` (asserts guard-index < entry-index < exit-index) |
| 11 | the emitted C shown for `mutate()` — guard, entry, body, exit ordering, all six lines | `0018-probe-mutate-emission-03a.out` | `4f7568b` | **REPRODUCED — byte-for-byte** (see below). Probe reconstructed, see "Reconstructed probes". |
| 12 | "The body moves into a static helper and the visible fn becomes a wrapper" | `0018` | `4f7568b` | **REPRODUCED**`static el_val_t __el_body_mutate(el_val_t k)` emitted, `el_val_t mutate(el_val_t k)` calls it |
### Record `285166c`
| # | Claim (verbatim from the record) | Artifact | Commit | Verdict |
|---|---|---|---|---|
| 13 | P1 "exit becomes runtime-bindable — TRUE, returns 14, bound after the build" | `0014-integration-seam_binding-03b.out`, `0017-test-diff-285166c.out` | `285166c` | **REPRODUCED** — harness assertion `an EXIT construct declared after the build replaces the result` expects `14` and passes; the binding is supplied via `EL_CONSTRUCTS=exit.txt` **after** `prog` is compiled and linked |
| 14 | P2 "codegen shrinks — TRUE, 5094 -> 5044" | `0012-codegen-linecount-285166c.out`, `0013-codegen-linecount-neighbourhood.out` | `285166c^`, `285166c` | **DIVERGED** — observed **5095 -> 5043** (see below) |
| 15 | P3 "cost 5-15% from a call frame on every fn — FALSE, 0.37s -> 0.38s, ~3%" | `0163-P3-isolated-callframe-cost-20x.out`, `0189-P3-hypothesis-which-binaries-give-0.37-to-0.38.out`, `0214-REDO-P3-control-binaries-wrapper-content.out`, `0116`, `0100` | `285166c` vs `24f7fb5` | **DIVERGED — the substantive finding of this cycle.** Isolated overhead **+12.65% to +15.98%, median +13.65%**, i.e. *inside* the 515% band the record scored FALSE (see below) |
| 16 | P4 "fixpoint holds — TRUE" | `0132-selfhost-fixpoint-gen2-gen3-03b.out` | `285166c` | **REPRODUCED** — gen2 == gen3, sha256 `6bb520f2a0ce8695…`, 12,957 lines each |
| 17 | "fixpoint gen2==gen3" | `0132` | `285166c` | **REPRODUCED** — under the correct three-generation numbering. gen1 != gen2 (expected: the committed `dist/platform/elc` dates from `45325f7`, before the wrapper); gen2 == gen3 exactly |
| 18 | "99/99 native" | `0008-native-compiler-tests-03b.out` | `285166c` | **REPRODUCED**`99 tests, 99 passed, 0 failed, 239 assertions in 5.327ms` |
| 19a | "7/7 integration" — *the underlying fact: all seven assertions hold* | `0014` | `285166c` | **REPRODUCED** — all seven assertions print `ok`, `0 failed`, harness exit `0` |
| 19b | "7/7 integration" — *as a reported harness tally* | `0014`, `0224-harness-tally-arithmetic-285166c.out`, `0225-REDO-harness-tally-history.out` | `285166c` | **DIVERGED** — a fully green run prints `7 assertions, 6 passed, 0 failed`. The harness at this commit **cannot** print 7/7 (see below) |
| 20 | "Every fn now gets a body helper and a wrapper" | `0148-every-fn-gets-wrapper-03b.out` | `285166c` | **REPRODUCED** — in the emitted C for the whole compiler: 258 forward decls, **258** `static el_val_t __el_body_*` helpers, **258** wrapper definitions. At the parent `24f7fb5`: **0** body helpers, 262 plain fn definitions. |
| 21 | "Removed with the machinery: `declare_exit`" | `0015`, `0016-removed-symbols-detail-parent.out` | `285166c^``285166c` | **REPRODUCED** — 2 occurrences at parent (`codegen.el:4315` def, `:4448` call) → **0** |
| 22 | "…`decorator_exit`" | `0015`, `0016` | `285166c^``285166c` | **REPRODUCED** — 3 occurrences at parent (`:4319` def, `:3226`, `:3321` calls) → **0** |
| 23 | "…`cg_exit_target`" | `0015`, `0016` | `285166c^``285166c` | **REPRODUCED (code)** — 3 → 1; the function (`:3217`) and its call (`:3393`) are gone. The 1 remaining is a **stale comment** at `codegen.el:3215` still naming it. |
| 24 | "…`cg_exit_construct`" | `0015`, `0016` | `285166c^``285166c` | **REPRODUCED (code)** — 3 → 1; function (`:3312`) and call (`:3394`) gone; the survivor is the same stale comment at `:3215` |
| 25 | "…and the `injects_at_exit` scanner branch" | `0015`, `0016` | `285166c^``285166c` | **REPRODUCED** — the branch `if str_eq(dkind, "injects_at_exit")` at `codegen.el:4429` is gone; the two test uses are gone; 1 doc-comment mention survives at `:4272` |
| 26 | "Two controls failed and were rewritten rather than repaired" | `0067-which-controls-failed-03b.out` | `285166c` | **REPRODUCED — exactly two** — running the parent's `test_compiler.el` against `285166c`'s compiler sources: `99 tests, 97 passed, 2 failed`. The two: `declared-exit-wraps-body-so-early-returns-pass-through`, `no-exit-construct-emits-no-wrapper`. Nuance: **three** tests were deleted; the third (`declared-exit-receives-the-result`) still **passed** and was removed as obsolete, not because it failed. |
| 27 | "`no-exit-construct-emits-no-wrapper` asserted the optimisation this removes, so it is now inverted" | `0017`, `0066-exit-and-composition-tests-03b.out`, `0067` | `285166c` | **REPRODUCED** — it fails at `285166c` (`0067`) and its logical inversion `every-fn-gets-a-body-helper-and-wrapper` replaces it and passes (`0066`) |
| 28 | "The integration harness gained a seventh assertion: an exit construct declared after the build replaces the result" | `0017`, `0014` | `285166c^``285166c` | **REPRODUCED**`seam_binding.sh` diff adds `double_result()` and the assertion expecting `14`; 6 → 7 assertions |
### Record `b40754f`
| # | Claim | Artifact | Commit | Verdict |
|---|---|---|---|---|
| 29 | "land unconditional wrapper: exit crossings resolve at runtime" (identity only — no numeric claim) | `0003-commit-identity-b40754f.out`, `0215-b40754f-tree-vs-285166c.out` | `b40754f` | **REPRODUCED** — merge of `24f7fb51` + `285166c2`; `git diff 285166c b40754f` is empty, so the landed tree is byte-identical to the experiment |
---
## Divergence detail — claim 15, P3: the ~3% is an artefact of timing the wrong binary
**This is the substantive finding for cycle 03.**
The record predicted "cost 5-15% from a call frame on every fn", measured `0.37s -> 0.38s`,
concluded `~3%`, and scored the prediction **FALSE**. Re-measured, the prediction was
**right**, and the measurement that refuted it could not have detected the cost it was
looking for.
**Why.** The compiler is bootstrapped from the committed `lang/dist/platform/elc`, a
binary built at `45325f7` — long before this change. The chain is:
```
dist/platform/elc --compiles--> gen2 C --cc--> gen2 binary --compiles--> gen3 C
(no wrappers) (no wrappers) (wrappers)
```
The `285166c` compiler built **from the bootstrap** (`gen2 binary`) contains
**zero** `__el_body_*` helpers — the stale bootstrap emitted it without wrappers.
Only the *self-hosted* binary carries a wrapper on every fn. Measured directly
(`0214-REDO-P3-control-binaries-wrapper-content.out`):
| binary | built from | `__el_body_` defs in that C | `el_seam_run` calls |
|---|---|---|---|
| BEFORE bootstrap-built `24f7fb5` | `pg2_03b.c`, 11477 ln | **0** | 1 |
| BEFORE self-hosted `24f7fb5` | `pg3_03b.c`, 11739 ln | **0** | 263 |
| AFTER bootstrap-built `285166c` | `g03b.c`, 11409 ln | **0** | 2 |
| AFTER self-hosted `285166c` | `g03b_b.c`, 12957 ln | **258** | 518 |
**The record's own numbers reproduce — on the pair of binaries that contain no wrappers.**
Ten compiles of the same input, three rounds (`0189`):
| pair | BEFORE | AFTER | delta |
|---|---|---|---|
| both **bootstrap-built** (neither has wrappers) | 0.3861 / 0.3872 / 0.3869 s | 0.3912 / 0.3907 / 0.3871 s | **+1.32% / +0.90% / +0.05%** |
| both **self-hosted** (only AFTER has wrappers) | 0.4125 / 0.4087 / 0.4108 s | 0.4398 / 0.4389 / 0.4363 s | **+6.62% / +7.39% / +6.21%** |
The record's `0.37s` is within noise of the bootstrap-built BEFORE figure (0.386s here),
and its `0.38s` of the bootstrap-built AFTER (0.391s). The `~3%` sits between the two
rows. Whatever exact binaries were used, the reported delta is the *emission* cost —
the AFTER compiler writes ~10% more C — and cannot contain the call-frame cost, because
neither timed binary had a call frame added to it.
**The controlled isolation.** The cleanest instrument for "a call frame on every fn" is
two binaries with **identical compiler semantics** and identical output, differing only
in whether the binary itself was built with wrappers: `/tmp/elc03b` (bootstrap-built
`285166c`) vs `/tmp/elc03b_g3` (self-hosted `285166c`). Both emit byte-identical C
(`g03b_b.c` == `g03b_c.c`, sha256 `6bb520f2a0ce8695…`), so all of the delta is runtime.
20 compiles per sample, 6 rounds, A/B order alternated (`0163`):
```
round 1 (A-then-B) A 0.7683s B 0.8680s +12.98%
round 2 (B-then-A) A 0.7596s B 0.8810s +15.98%
round 3 (A-then-B) A 0.7508s B 0.8564s +14.06%
round 4 (B-then-A) A 0.7523s B 0.8549s +13.64%
round 5 (A-then-B) A 0.7535s B 0.8498s +12.78%
round 6 (B-then-A) A 0.7516s B 0.8467s +12.65%
overhead on MEDIAN = +13.65% overhead on MIN = +12.77%
```
**Claimed: ~3%, prediction scored FALSE. Observed: +12.65% to +15.98%, median +13.65% —
inside the predicted 515% band, near its top.** Even the end-to-end cross-commit
comparison of self-hosted binaries (+6.2% to +7.4%) is inside the band. On this hardware
P3 should have been scored **TRUE**.
Per §8 of the re-run recipe, the *absolute* wall-clock figures (0.37s, 0.38s) remain
machine-dependent and are not themselves reproducible. It is the **ratio** the record
leans on, and the ratio is what diverges. Machine: Apple M4 Pro, arm64, macOS 25.5.0,
Apple clang 21.0.0, idle-ish interactive session; the A/B alternation and the min-based
figure control for drift, and every one of the six rounds lands inside the band.
## Divergence detail — claim 19b, "7/7 integration": the harness cannot print 7/7
A green harness whose own summary line under-reports itself.
`285166c` added the seventh assertion and bumped the **header text** of the tally line
from `6 assertions` to `7 assertions`, but left the **arithmetic** at `$((6-FAILS))`
(`0224-harness-tally-arithmetic-285166c.out`):
```
lang/tests/integration/seam_binding.sh:91
echo " 7 assertions, $((6-FAILS)) passed, $FAILS failed"
```
So with `FAILS=0` — a completely green run — the harness prints `6 passed`. Observed
verbatim at `285166c` (`0014-integration-seam_binding-03b.out`, exit 0):
```
ok unbound program is unaffected
ok a construct declared AFTER the build applies
ok a construct declared after the build can REFUSE
ok an unlinked target is skipped, not fatal
ok a binding for a different fn does not fire
ok two constructs compose on one crossing
ok an EXIT construct declared after the build replaces the result
7 assertions, 6 passed, 0 failed
```
Seven `ok` lines, zero failures, exit code 0 — so **7 of 7 really do pass** (claim 19a,
REPRODUCED). But **no tool in the tree at this commit is capable of emitting "7/7"**,
and the line a reader gets when they re-run the harness contradicts the record. The
record's figure was not read off its own instrument.
History of the tally line (`0225-REDO-harness-tally-history.out`) — the arithmetic was
wrong for four minutes and was fixed by the next experiment:
| commit | when | `check` invocations | tally line |
|---|---|---|---|
| `8bbb750c` | 08:48:57 | 6 | `6 assertions, $((6-FAILS)) passed, $FAILS failed` — correct |
| **`285166c2`** | **09:01:55** | **7** | **`7 assertions, $((6-FAILS)) passed, $FAILS failed` — header bumped, arithmetic not** |
| `bc2f26dd` | 09:06:05 | 7 | `7 assertions, $((7-FAILS)) passed, $FAILS failed` — fixed |
Independently corroborated: this defect was first flagged by the cycle 08 re-run and is
confirmed here from the artifacts above. Its practical severity is low (`exit $FAILS`
is driven by the real failure counter, so CI would still catch a regression) but it is
exactly the failure mode this evidence record exists to surface — a number in a commit
message that the tooling of that commit never produced.
## Divergence detail — claim 14, P2: 5094 -> 5044 is 5095 -> 5043
`lang/el-compiler/src/codegen.el`, `wc -l` (`0012`, `0013`):
| | claimed | observed |
|---|---|---|
| parent `285166c^` = `24f7fb5` | 5094 | **5095** |
| commit `285166c` | 5044 | **5043** |
| delta | 50 | **52** |
Both endpoints miss, **in opposite directions**, so this is not a tool or off-by-one
convention difference. Controls run:
- Every version of the file ends in `\n` (`0013` prints the last byte as `\n` for all
eleven neighbouring commits), so `wc -l` is exact and does not undercount.
- `git show --numstat` for the commit reports `2 insertions, 54 deletions` — net **52**,
independently confirming the observed delta, not the claimed one.
- **No commit anywhere in the neighbourhood has 5094 or 5044 lines of `codegen.el`.**
The full sweep (`0013`): `4f7568b` 4953 · `7d01608` 5084 · `1b324a0` 5152 ·
`82e9982` 5152 · `35b07ba` 5156 · `886626a` 5156 · `28d19da` 5095 · `8bbb750` 5095 ·
`24f7fb5` 5095 · `285166c` 5043 · `b40754f` 5043.
The qualitative half of P2 ("codegen shrinks") holds and shrinks slightly *more* than
claimed. The two figures do not, and neither can be recovered from any state of the file
in this range.
## NOT-REPRODUCIBLE / NOT-CAPTURED detail — the three §6 figures (claims 2, 3, 4)
§6 was located: `docs/architecture/el-language-design.md`, `## 6. The residue map`
(`0223`). Its header names its upstream — *"from §18.0 plus measured state"*, i.e.
`lang/spec/language.md` §18.0. The record quotes §6 faithfully (claim 1, REPRODUCED).
**None of the three figures has a defined population.**
**"62 persist-after-mutate sites" — NOT-REPRODUCIBLE.** §18.0 is the only place that
names a procedure, and it names only a pattern set — `persist_*` / `engram_save` /
`wal_*` / `checkpoint` call sites — with **no directory, glob, language, commit, or
call-vs-declaration rule**, under the tense marker *"Measured in this codebase **before
this section existed**"*, which pins it to an unnamed earlier tree state. Applying the
stated pattern set at `4f7568b` (`0223` §C):
| scope | count |
|---|---|
| tree-wide, all files | 302 |
| tree-wide, `*.el` only | **69** |
| `engram/` all files | 151 |
| `engram/**.el` | 53 |
| `engram/src` | **52** |
| `lang/` all files | 122 |
62 lies between the two most natural scopes (52 and 69) and equals neither. Per-symbol
breakdown tree-wide over `*.el` is in `0223`. Unlike cycle 01's decorator counts, there
is no scope you can guess that recovers the figure.
**"10 auth-per-route" — NOT-REPRODUCIBLE, and the mechanism it describes does not
exist at this commit.** §19.2 says *"10 per-route `_auth` checks"* and names no route,
file, or command. At `4f7568b` there is **one** auth check in the whole server:
`fn check_auth_ok(method, body)` defined at `engram/src/server.el:1958` and called from
a **single** dispatch site at `:1988` (`0223` §D). Of the 11 `_auth` occurrences in
`server.el`, 8 are comments or JSON-key documentation. The per-route form the figure
counts is not present; a reader cannot recover a list of ten sites.
**"index-after-append that failed at 9 of 9" — NOT-CAPTURED.** This is the figure the
record leans on hardest ("*the 9-of-9 figure is what that costs*") and it is the least
sourced. The population is described only as *"the index bug being fixed elsewhere in
this tree"* — no file, no function, no test, no commit, no enumeration of the nine
sites, and no statement of how "failed" was determined. Searching the whole tree at
`4f7568b` for `index-after-append`, `9 of 9`, `9-of-9`, `remember to index`, `after you
append` returns **only restatements** (`0223` §E): `el-language-design.md:25` and `:199`,
`el-architecture.html:105`, `design/completing-el.html:97`, `lang/spec/language.md:1237`,
and a comment in `codegen.el:4224` citing it. Every one cites the figure; none produces
it. There is nothing to re-run, so no artifact can be made.
The same document is self-aware about exactly this failure mode one section later:
§7 flags `el-architecture.html` §04's scoreboard as having *"no supporting evidence in
the repository, under a footer asserting 'nothing is inferred and presented as fact'"*
and says "Fix or remove." That audit was never turned on §6's own table.
## Reconstructed probes
Two artifacts are outputs of probe programs that are **not in the tree**. Per §7 of the
re-run recipe the probe is an *input*, not evidence; the artifact is the captured output
of running it at the pinned commit.
**`0018-probe-mutate-emission-03a.out`** — the record shows emitted C for a fn `mutate`
but the tree contains no such fixture. The probe was reconstructed from what the record
itself states (the `@decorator("injects_at_exit", "persist_now")` snippet it prints, the
three decorator names visible in the emitted C, and the `mutate(k)` signature and body
that the commit's own deleted test `declared-exit-wraps-body-so-early-returns-pass-through`
used):
```el
@decorator("guards_at_entry", "my_auth")
fn authenticate() {}
@decorator("injects_at_exit", "persist_now")
fn durable() {}
@authenticate
@durable
@manager
fn mutate(k: String) -> Int { if str_eq(k, "bad") { return 0 } return 1 }
```
The emission at `4f7568b` is **byte-for-byte the six lines the record prints**:
```c
el_val_t mutate(el_val_t k) {
{ el_val_t __g = my_auth(EL_STR("mutate"), EL_STR("authenticate")); if (__g) return __g; }
engram_boundary_beat(EL_STR("mutate"), EL_STR("manager"));
el_val_t __r = __el_body_mutate(k);
persist_now(EL_STR("mutate"), EL_STR("durable"), __r);
return __r;
}
```
Guard, then entry, then body, then exit — exactly as claimed. The same probe at
`285166c` (`0019-probe-mutate-emission-03b.out`) shows the compile-time injection gone
and both crossings routed through `el_seam_run`.
**`0067-which-controls-failed-03b.out`** — to determine *which* controls failed (claim 26)
the parent's `tests/native/test_compiler.el` (`24f7fb5`) was placed into a `git archive`
export of the `285166c` tree and run against `285166c`'s compiler sources. The test file
`import`s `codegen.el` from the tree, so this genuinely exercises the new codegen against
the old controls. No worktree was modified.
`0034-REDO-parent-compiler-build-03a.out` similarly builds the `4f7568b^` compiler from a
`git archive` export of `60737b03` into `/tmp/parent03a`, and `0082-build-parent-24f7fb5-fixpoint.out`
builds `24f7fb5` into `/tmp/parent03b`. These are builds of committed trees, not
reconstructions.
## Measurement defects in this re-run, recorded rather than removed
1. **`0009-selfhost-fixpoint-03a.out` and `0010-selfhost-fixpoint-03b.out` used a
superseded fixpoint command.** The original re-run recipe compared gen1 (the output
of the committed `dist/platform/elc`) to gen2. That check must fail whenever codegen's
output changes, which is exactly what this cycle does — `0010` exits 1 with
`differ: char 12850, line 264`. **This is not a broken fixpoint.** The recipe was
corrected mid-run by the parent agent; the correct check is gen2 == gen3.
Superseded by `0132-selfhost-fixpoint-gen2-gen3-03b.out` and
`0140-selfhost-fixpoint-gen2-gen3-03a.out`, which are the ones cited above.
`0011-selfhost-fixpoint-gen3-gen4-03b.out` is the same correct comparison taken before
the naming was standardised (its "gen3==gen4" are the recipe's gen2 and gen3). Retained.
**Do not cite `0009` or `0010`.**
2. **`0020-no-exit-construct-byte-identical-03a.out` used an invalid "before" compiler.**
It compared `lang/dist/platform/elc` (the committed bootstrap, built at `45325f7`)
against the `4f7568b` compiler. The bootstrap predates `4f7568b` by many commits, so
the two differences it found —
`engram_boundary_beat(EL_STR("f"))` vs `engram_boundary_beat(EL_STR("f"), EL_STR("manager"))`
belong to cycle 01, not to this one. Superseded by `0034` + `0047`, which build the
actual parent `60737b03`. Retained. **Do not cite `0020`.**
3. **`0021-parent-compiler-build-03a.out` failed (exit 1).** `git archive` was invoked
with CWD inside `lang/`, and git archives only the current prefix, so the export
contained the *contents* of `lang/` rather than `lang/` itself and the subsequent
`cd .../lang` failed. This is the same class of CWD defect the recipe warns about for
`git grep`. Corrected in `0034-REDO-parent-compiler-build-03a.out`, run from the repo
root. Retained.
4. **`0063-exit-and-composition-tests-03a.out` failed (exit 2)** — it grepped a
mis-numbered artifact filename (`0006-` instead of `0007-`) and produced nothing.
`capture.sh` numbers artifacts by counting non-empty MANIFEST lines, and multi-line
commands write multi-line MANIFEST rows, so artifact indices jump. Corrected in
`0065-REDO-exit-and-composition-tests-03a.out`. Retained.
5. **`0207-P3-control-binaries-wrapper-content.out` failed (exit 127)** — a shell quoting
error inside a nested `bash -c`. Rewritten as a script file and re-captured as
`0214-REDO-P3-control-binaries-wrapper-content.out`. Retained.
6. **Cosmetic, `0047` §B**: the line-count interpolation in the "BYTE-IDENTICAL over N
lines" message printed empty because of escaping inside the nested `bash -c`. The
`cmp` result and both sha256 values — which are what the claim rests on — are
unaffected. The figure is 11,258 lines, from `0034`.
7. **Not a defect of this re-run, but of the artefact under test**: `seam_binding.sh` at
`285166c` prints `7 assertions, $((6-FAILS)) passed` — the total was updated to 7 and
the passed-count was not. See claim 19b and its divergence section.
8. **`0224-harness-tally-arithmetic-285166c.out` section D produced no rows.** The
per-commit tally-line loop piped `git log` into `while read`, and `git show` inside
the loop consumed the loop's stdin. Re-taken as
`0225-REDO-harness-tally-history.out` with a `for` loop and `</dev/null` on every
`git show`. Sections AC of `0224` are sound and are cited above. Retained.
## Supporting figures
- Stage-2 builds succeed at both commits (`0005`, `0006`): 11,361 lines of emitted C at
`4f7568b`, 11,409 at `285166c` (bootstrap-built), 12,957 self-hosted at `285166c`.
- Test declarations in `test_compiler.el` (`0064`): `4f7568b` 98, `24f7fb5` **99**,
`285166c` **99**. The experiment removed three tests and added three; the "99/99"
headline count was already 99 at the parent and did not move.
- `codegen.el` line counts across the cycle neighbourhood are in `0013`.
@@ -0,0 +1,196 @@
# CLAIMS — cycle 04, c has no closure syntax
Source doc: `docs/v1/experiments/cycles/04-c-has-no-closure-syntax.md`
## Pinned commits
| | |
|---|---|
| Cycle commit (the EXPERIMENT) | `2bed8483f75ebc76eefac69567b01d2da70d5db9` |
| Committed | 2026-08-17 08:08:37 -0500 |
| Subject | EXPERIMENT: hand the construct the body as a real closure |
| Parent (the "before" state) | `4f7568b07f61a81fed1db5b8274813032ea3b16e` |
| Land commit | `7d01608a9dd3f7d4f6f476f567504d3ec341e7af` |
| Committed | 2026-08-17 08:12:16 -0500 |
| Subject | land wraps_body: a construct controls invocation |
| Land parents | `4f7568b` (first) + `2bed848` (second) — an ordinary merge |
| Re-run method | detached worktrees `/tmp/rerun-v1-04a` at `2bed848` and `/tmp/rerun-v1-04b` at `7d01608`, both trees clean |
| Artifact provenance | every artifact pinned to `2bed8483f75e` or `7d01608a9dd3`, tree `clean` (see `MANIFEST.tsv`) |
| Machine | Wills-MacBook-Pro, Darwin 25.5.0 arm64, Apple clang 21.0.0 (see `RUN.env`) |
`git diff 2bed848 7d01608` is **empty** (`0050`): the land commit's tree is
byte-for-byte the experiment's tree. Everything measured at `2bed848` therefore
also holds at `7d01608`; the 04b captures confirm it independently.
The only file the cycle touches is `lang/el-compiler/src/codegen.el`
(+134 / 3, net +131). Line count `4f7568b` = **4953**`2bed848` = **5084**
(`0050`), consistent with the net delta.
## Verdicts
| # | Claim (verbatim from the record) | Artifact | Commit | Verdict |
|---|---|---|---|---|
| 1 | P1 "env struct + thunk taking void* — TRUE" | `0008`, `0009` | `2bed848` | **REPRODUCED** — emitted C contains `struct __env_base { el_val_t n; };`, `static el_val_t __thunk_base(void* __v)`, and `extern el_val_t twice_and_sum(el_val_t, el_val_t, el_val_t(*)(void*), void*);` |
| 2 | P2 "fails to compile: struct redefinition — FALSE" | `0015`, `0010`, `0011` | `2bed848` | **REPRODUCED** — no redefinition failure. The env structs are file-scope and uniquely named per fn (`__env_base`, `__env_never_runs`; four distinct tags in the 4-fn probe). A 2-wrap and a 4-wrap translation unit each compile *and link* clean. |
| 3 | P2 reason: "C allows the inner declaration to shadow" | `0018`, `0015` | `2bed848` | **NOT-CAPTURED as an account of this emitter** — the C language fact is confirmed independently (`0018`: a block-scope `struct E` shadows a file-scope `struct E`, `cc -std=c11 -Wall -Wextra` exit 0, prints `outer=3 inner=7`). But the emitter at `2bed848` emits **no** inner/block-scope struct declaration at all, so nothing shadows anything. The intermediate emitter that would have produced the shadowed declaration exists in no commit and cannot be measured. |
| 4 | P2 real defect: "a wrap with no exit construct emitted `(EL_STR("f"), EL_STR(""), __r);` — a call to an empty target … Fixed." | `0016`, `0017` | `2bed848`, `4f7568b` | **REPRODUCED (defect absent, fix present)** — grep for `EL_STR("")` in the emitted C of a wrap-with-no-exit program returns exit 1 (absent). Mechanism confirmed: at the parent `4f7568b` the exit line is emitted unconditionally (codegen.el:3360); at `2bed848` it is guarded by `if !str_eq(exit_target, "")` (codegen.el:3458) and `has_exit` is widened to `!str_eq(exit_target, "") \|\| has_wrap` (3405), exactly as the record describes. |
| 5 | P3 "compiles when the target is declared in El — FALSE" | `0013`, `0014` | `2bed848` | **REPRODUCED**`elc` *accepts* the El `extern fn`, then `cc` fails with 3 errors: `conflicting types for 'twice_and_sum'`, and two `incompatible pointer to integer conversion` (passing `el_val_t (void *)` and `struct __env_base *` to parameters of type `long long`). `cc_rc=1`. |
| 6 | P3 "El has ONE type, el_val_t = int64_t" | `0006`, `0057` | `2bed848` | **REPRODUCED**`typedef int64_t el_val_t;` at `lang/runtime/el_runtime.h:50`, `el_seed.h:32`, `el_native_target.h:26`. Erasure confirmed: `fn mixed(a: Int, b: String, c: Bool) -> Int` emits `el_val_t mixed(el_val_t a, el_val_t b, el_val_t c)`. |
| 7 | P3 "codegen DEFINES the wrap calling convention, so codegen emits the extern declaration" | `0008`, `0009`, `0017` | `2bed848` | **REPRODUCED** — codegen.el:3442 emits the `extern el_val_t <target>(el_val_t, el_val_t, el_val_t(*)(void*), void*);` line; it appears in the emitted C at line 22/38. |
| 8 | P4 "target controls invocation, 0..N times — TRUE" | `0011`, `0012`, `0010` | `2bed848` | **REPRODUCED** — one El source, four wrap targets differing only in how many times they call the thunk: 0 → `999`, 1 → `5`, 2 → `10`, 3 → `15`. |
| 9 | P5 "existing @manager output byte-identical — TRUE" | `0019`, `0020`, `0028`, `0038` | `4f7568b` vs `2bed848` | **REPRODUCED** — the parent compiler was rebuilt from a `git archive 4f7568b` extraction (`0019`) and the same inputs compiled with both emitters. All 3 files in the tree that apply `@manager`/`@accessor` (`engram/src/server.el` 1 application, `tools/api-reshape/route_proof.el` 7, `tools/api-reshape/surface.el` 8) emit **byte-identical** C. Treewide: 378 `.el` files → 368 identical, 1 byte-differing, 9 failing under both emitters. The 1 differing file is explained below and is not caused by this cycle. |
| 10 | P6 "compiler fixpoint holds — TRUE" | `0051`, `0054` | `2bed848`, `7d01608` | **REPRODUCED** — gen2 == gen3 at both commits; at these commits gen1 == gen2 as well, so all three generations share sha256 `91b3de5b5c95cc659fb4d78aa821627c9a5c325c14b461852efff7db3f68a64b`. |
| 11 | P7 "emitting the convention makes it compile — TRUE" | `0010`, `0055` | `2bed848`, `7d01608` | **REPRODUCED**`COMPILE_AND_LINK_OK` at both commits, against a C translation unit supplying the two wrap targets. |
| 12 | MEASURED "base(5) wrapped by a target that invokes the body twice and sums -> 10" | `0007`, `0010`, `0055` | `2bed848`, `7d01608` | **REPRODUCED — via a RECONSTRUCTED probe** (see below) — observed `base(5) = 10` |
| 13 | MEASURED "never_runs(5) wrapped by a target that never invokes it -> 999" | `0007`, `0010`, `0055` | `2bed848`, `7d01608` | **REPRODUCED — via a RECONSTRUCTED probe** (see below) — observed `never_runs(5) = 999` |
| 14 | "This supersedes the repeats_body experiment on **experiment/repeats-body**" | `0049` | all refs | **DIVERGED** — no such ref exists. See below. |
| 15 | `7d01608`: "Proven on **experiment/wraps-body** (2bed848)" | `0049` | all refs | **DIVERGED** — no such ref exists. The *commit* `2bed848` is present and reachable; the branch name is not. |
| 16 | "Every C++ lambda, every Go closure, every Rust closure compiles to a struct of captured values plus a function pointer" | `0008`, `0009` | — | **NOT-CAPTURED** — the trailing half, "which is what is emitted here", is claim 1 and is REPRODUCED. The claim about C++/Go/Rust codegen is about three other toolchains, none of which is in this tree; it was not measured then and is out of scope for this record. |
| 17 | "It would also have crippled the JS backend, which has closures natively, for a limit that applies only to the C one" | `0058` | `2bed848` | **NOT-CAPTURED (counterfactual)** — and the premise is weaker than stated: `lang/el-compiler/src/codegen-js.el` (1381 lines) implements **no construct machinery whatsoever** at `2bed848`. It contains no reference to `wraps_body`, `injects_at_entry`, `guards_at_entry`, `injects_at_exit`, thunks or env structs; the only decorator it knows is `@async` (line 1119). There is no wrap emission in the JS backend to cripple, either way. |
**Counts: 13 REPRODUCED · 2 DIVERGED · 0 NOT-REPRODUCIBLE · 2 NOT-CAPTURED (17 assertions).**
## The MEASURED numbers were produced by a RECONSTRUCTED probe
State plainly: **no test, fixture, or harness in the tree at `2bed848` exercises
`wraps_body`.** `git grep wraps_body` outside `codegen.el` returns exit 1;
`lang/tests/integration/` does not exist at either pinned commit (`0056`); and
`2bed848` changes exactly one file, `codegen.el`, adding no test. The probe the
commit message describes was never committed.
The probe was therefore **reconstructed from what the record states**, and it is
an INPUT, not evidence. Its full text is in the record at `0007`:
- `w04.el` — two declared wrap constructs (`@decorator("wraps_body", "twice_and_sum")`
and `@decorator("wraps_body", "never_invoke")`) applied to `base(n)` and
`never_runs(n)`, both bodies `return n`, with `main` printing `base(5)` and
`never_runs(5)`.
- `targets04.c` — the two wrap targets, which cannot be written in El
(that is claim 5): `twice_and_sum` returns `body(env) + body(env)`;
`never_invoke` ignores the body and returns `999`.
The **artifact is the captured output of running it at the pinned commits**
(`0010` at `2bed848`, `0055` at `7d01608`), which reads:
```
COMPILE_AND_LINK_OK
base(5) = 10
never_runs(5) = 999
```
The emitted C is byte-identical between `2bed848` and `7d01608` (`0055`).
Reconstruction risk, stated honestly: the record fixes the inputs (`5`), the
target semantics ("invokes the body twice and sums", "never invokes it") and the
outputs (`10`, `999`), and the `999` sentinel is only reachable from the target,
so it is not a value the body could have produced. What the record does *not*
fix is the target's *names*, which are free choices here. The numbers were
observed, not asserted.
## Divergence detail — claims 14 and 15, the two branch references
Both pinned records point at branches that are not in the clone (`0049`):
- `git branch -a --list '*repeats-body*'`**no output**, exit 0
- `git branch -a --list '*wraps-body*'`**no output**, exit 0
- `git for-each-ref | grep -i body`**no matching ref of any kind**
- `git log --all --oneline --grep=repeats_body` and `--grep=repeats-body`
the *only* match is `2bed848` itself, i.e. the sentence making the claim
- 249 branches exist in the clone; none of them is either name.
Consequences, and they are not symmetrical:
- **Claim 15** (`7d01608`: "Proven on experiment/wraps-body (2bed848)") is a
cosmetic divergence. The branch is gone but the commit it names survives, is
reachable, and everything it asserts re-measures. Only the branch label is wrong.
- **Claim 14** ("This supersedes the repeats_body experiment on
experiment/repeats-body, which was built around the mistaken limit") is a
substantive one. The superseded work is **unrecoverable**: no branch, no tag,
no commit anywhere in the object graph mentions `repeats_body`. The record's
central rhetorical move — that a strictly weaker "decide whether to repeat"
design *existed*, was *built*, and was *replaced* — rests entirely on a
dangling reference. That the weaker design is weaker is separately
demonstrable (claim 8 shows 0 and 3 invocations, neither expressible as
"repeat or not"), but the *existence and content of the superseded experiment*
cannot be checked from this repository.
## Supporting finding — the one treewide byte-difference is pre-existing nondeterminism
The treewide P5 sweep (`0028`) found exactly one file whose emitted C differs
between the parent and the commit: `arbor/vessels/arbor-parse/src/main.el`.
It is **not** a regression from this cycle (`0038`):
- The file applies **zero** decorators (`grep -c '^@'` = 0), so no construct
machinery — wrap or otherwise — is reachable in it.
- Two consecutive runs of the **same** compiler at `2bed848` produce different
output.
- Two consecutive runs of the **same** compiler at the **parent** `4f7568b`
also produce different output.
The difference is always the same three lines, where a string literal is emitted
as a large decimal number that changes run to run (e.g.
`EL_STR("40345588256")` vs `EL_STR("30447047200")` at line 325, and similarly at
338 and 392) — an address, or an address-derived value, leaking into the emitted
literal. This is a real pre-existing emitter defect worth its own investigation,
but it predates cycle 04 and does not touch claim 9.
The 9 files that fail under **both** emitters (identical exit codes, `0028`) are
likewise unchanged by the cycle: `arbor-core/src/main.el`,
`arbor-render/src/main.el`, `elp/src/vocabulary-{de,fr,it,pt,ro}.el`,
`ui/examples/native-hello/src/{App,main}.el`.
## Measurements the record makes no claim about, recorded as observed
The cycle doc states no test count, no fixpoint detail and no timing. Observed:
- Native compiler tests: **98 tests, 98 passed, 0 failed, 243 assertions** at
`2bed848` (`0004`, 5.660ms) and the same 98/98/0/243 at `7d01608` (`0053`,
6.297ms). No failures at either commit.
- Stage2 build: `BUILD_OK`, generated `elc-cli.el` C = **11494 lines** at both
commits (`0003`, `0052`).
- `lang/tests/integration/` does not exist at either pinned commit (`0056`), so
no integration harness could be run. `lang/tests/` contains `bench`,
`calendar`, `html_sanitizer`, `native`, `runtime`, `suite`, `swarm`, `text`,
`time`.
- codegen.el: `4f7568b` 4953 → `2bed848` 5084 → `7d01608` 5084 (`0050`).
## Measurement defects in this re-run, recorded rather than removed
**Defect 1 — superseded fixpoint command (recipe defect, not this cycle's).**
Artifact `0005-selfhost-fixpoint-04a.out` was captured with the recipe's original
command, which compares **gen1 (the committed `dist/platform/elc`'s output)**
against **gen2**. That is the wrong check: gen1 may legitimately differ from gen2
whenever codegen's output changes, and reporting it as a break would be a
fabricated divergence. The corrected three-generation check
(`gen2 == gen3`) is `0051` at `2bed848` and `0054` at `7d01608`. `0005` is
retained, not deleted. It happens to agree — at these commits gen1 == gen2 too —
but it should not be cited as the fixpoint evidence.
**Defect 2 — multi-line commands corrupted MANIFEST.tsv line structure.**
Four captures (`0020`, `0028`, `0038`, and the shell text of `0019`) were invoked
with `bash -c` scripts containing literal newlines. `capture.sh` writes the
command verbatim as the last TSV field, so those newlines became extra physical
lines in `MANIFEST.tsv`. Two visible consequences:
- the artifact counter, which is derived from the manifest's line count, jumped
(`0020``0028``0038``0049`), so the artifact numbers in this cycle are
**not contiguous**. No artifact is missing; the gaps are counter skips.
- `MANIFEST.tsv` is no longer strictly one physical line per artifact.
`verify-manifest.sh` is unaffected — the continuation lines parse with an empty
artifact field and are skipped — and the cycle verifies **0 altered, 0 missing**
with every row `clean`. The manifest was **not** edited to tidy this up; editing
it is precisely the defect this record exists to control for. Later captures use
single-line commands.
## Reproduction
```
git worktree add /tmp/rerun-v1-04a 2bed848
git worktree add /tmp/rerun-v1-04b 7d01608
```
then the commands in `MANIFEST.tsv`, and
`bash tools/evidence/verify-manifest.sh docs/v1/experiments/evidence/cycles`.
The parent compiler used for claim 9 is built by `0019` from a
`git archive 4f7568b` extraction into `/tmp/p04parent`; no worktree at the parent
is required.
@@ -0,0 +1,21 @@
bash -c SRCS=$(../scripts/el-runtime-sources.sh runtime); CF="-std=c11 -O2 -rdynamic -I runtime"; LF=""; for d in /opt/homebrew/opt/openssl@3 /usr/local/opt/openssl@3; do [ -d "$d" ] && CF="$CF -I $d/include" && LF="-L $d/lib"; done; LF="$LF -lcurl -lssl -lcrypto -lpthread -lm";
set -e
S=/private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad
# probe compiler = the SELF-HOSTED emission (gen2, 266 seam indirections) + counting target
cc $CF -o /tmp/elc06a.hot /tmp/g06a.gen2.c $S/hotcount_targets_06.c $SRCS $LF 2>/dev/null
grep -oE "^[[:space:]]*el_seam_run\(EL_STR\(\"[^\"]*\"" /tmp/g06a.gen2.c | sed -E "s/.*EL_STR\(\"//; s/\"$//" | sort -u > /tmp/fns06.txt
echo "functions carrying a seam indirection: $(wc -l < /tmp/fns06.txt | tr -d " ")"
rm -f /tmp/hot06.all
# EL_SEAM_MAX is 256, so bind in two batches
split -l 133 /tmp/fns06.txt /tmp/fnsb06.
for b in /tmp/fnsb06.*; do
awk "{print \$1 \" probe entry count_hit\"}" "$b" > /tmp/tbl06.txt
EL_CONSTRUCTS=/tmp/tbl06.txt /tmp/elc06a.hot elc-cli.el > /dev/null 2>>/tmp/hot06.all
done
echo
echo "=== TOP 20 hottest functions of the compiler, compiling elc-cli.el ==="
grep "^HOTCOUNT" /tmp/hot06.all | sort -t" " -k2 -nr | head -20 | awk -F"\t" "{printf \" %12s %s\n\", \$2, \$3}"
echo
printf "total measured crossings: "; grep "^HOTCOUNT" /tmp/hot06.all | awk -F"\t" "{s+=\$2} END{print s}"
printf "distinct fns observed: "; grep -c "^HOTCOUNT" /tmp/hot06.all
@@ -0,0 +1,26 @@
functions carrying a seam indirection: 266
=== TOP 20 hottest functions of the compiler, compiling elc-cli.el ===
310018 tok_kind
211579 is_ws_code
208435 is_digit_code
204417 is_alpha_code
152568 is_alnum_or_underscore_code
67032 make_result
58195 tok_append
26858 vbd_expr_has_restricted_call
26633 tok_value
24971 scan_ident
24971 keyword_kind
22731 op_precedence
22731 is_binop
21375 cg_expr
19782 parse_primary
19705 parse_postfix
19705 parse_binop
17883 expect
16679 parse_expr
14480 str_has
total measured crossings: 1692602
distinct fns observed: 124
@@ -0,0 +1,7 @@
commit 35b07bade29fcd93a663a2f538b43c31f07e28cb
tree clean
captured_utc 2026-08-17T17:40:21Z
exit 0
ms 5056
sha256_out 05caa291733d60fad2e5fbaf9a330e4371990f7229f7cab0f2a0ba2b8652150a
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash /private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/seam_timing_06.sh 9
@@ -0,0 +1,22 @@
host: Wills-MacBook-Pro | arm64 | reps per variant: 9
reporting MIN of 9 runs (least noise-contaminated on a shared laptop)
A baseline, no seam (35b07ba^) min 0.055s runs(ms): 58 57 57 55 55 58 60 58 60
B seamed, 0 bindings min 0.058s runs(ms): 258 58 58 59 59 59 60 59 68
C seamed, 2 bindings, resolve-once min 0.112s runs(ms): 116 116 114 117 113 112 114 113 116
D seamed, 2 bindings, dlsym/call min 0.160s runs(ms): 364 160 165 160 163 164 164 162 162
E seamed, 2 bindings, SILENT target min 0.076s runs(ms): 79 81 80 78 78 76 78 77 78
=== observed times and derived ratios (nothing rounded toward the record) ===
A baseline, no seam 0.055s record: 0.37s
B seamed, 0 bindings 0.058s record: 0.36s
C seamed, 2 bindings, resolve-once 0.112s record: 0.69s
D seamed, 2 bindings, dlsym/call 0.160s record: 2.45s
E seamed, 2 bindings, silent target 0.076s record: (not measured)
B/A cost of 266 unused indirections 1.055x record implies 0.36/0.37 = 0.973x ('free')
D/A dlsym-per-call vs baseline 2.909x record: 6.6x
D/C recovered by resolve-once 1.429x record: 3.5x
C/A resolve-once vs baseline 2.036x record implies 0.69/0.37 = 1.865x
E/A seam dispatch alone vs baseline 1.382x (printf removed)
C/E how much of C is the printf 1.474x record: 'the residual is audit_entry's own printf'
@@ -0,0 +1,7 @@
commit 35b07bade29fcd93a663a2f538b43c31f07e28cb
tree clean
captured_utc 2026-08-17T17:42:58Z
exit 0
ms 5773
sha256_out 27063b412e1e99fd9eef0530a40410aef6c8c8be77db7f24a48c916bf1cb9f67
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
@@ -0,0 +1 @@
bash /private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/free_when_unused_06.sh 41
@@ -0,0 +1,11 @@
A_us 56110 57655 56955 55777 57786 56509 57972 59963 57549 57240 59727 59659 59068 58682 58074 58962 60230 58689 60921 59270 58268 60081 57774 60555 58010 58851 60205 58525 60644 58018 58934 58092 59505 57739 58158 57220 58294 56649 58883 59439 58295
B_us 60068 57937 59269 59650 58333 60600 64672 62749 61310 60183 60613 61126 61684 63417 60941 62487 60761 61512 60050 62102 58437 58676 60276 60985 58511 60990 61146 64052 59497 60016 59444 58497 61929 60482 62315 58339 59902 59686 67185 60040 61424
n=41 interleaved pairs, seconds
A no seam min 0.0558 median 0.0583 mean 0.0585 sd 0.0012 max 0.0609
B 266 seam sites min 0.0579 median 0.0606 mean 0.0608 sd 0.0019 max 0.0672
B/A by min = 1.0387x (record: 0.36/0.37 = 0.9730x)
B/A by med = 1.0395x (record: 0.36/0.37 = 0.9730x)
B/A by mean = 1.0385x (record: 0.36/0.37 = 0.9730x)
paired B-A: median +2.42 ms, mean +2.25 ms, sd 2.00 ms
B slower in 38/41 paired runs
@@ -0,0 +1,7 @@
commit 35b07bade29fcd93a663a2f538b43c31f07e28cb
tree clean
captured_utc 2026-08-17T17:43:50Z
exit 0
ms 6719
sha256_out 5d658c8898319f91966c2dbce73fb8a86d3f28d633fd01f96f6842a5ec473d05
sha256_err e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Some files were not shown because too many files have changed in this diff Show More