Archived
kill: purge old-paradigm dist/platform binaries from tree
El SDK Release / build-and-release (push) Failing after 13m0s
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:
+1
@@ -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
|
||||
+18
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash tools/evidence/verify-manifest.sh docs/v1/experiments/evidence/cycles
|
||||
+1
@@ -0,0 +1 @@
|
||||
evidence: 0 artifacts verified, 0 altered, 0 missing
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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
|
||||
+9
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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"
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
evidence: 0 artifacts verified, 0 altered, 0 missing
|
||||
exit=0 on a directory containing NO manifests at all
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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."
|
||||
+9
@@ -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.
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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
|
||||
+4
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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
|
||||
+13
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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"
|
||||
+9
@@ -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");
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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) ="
|
||||
+4
@@ -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");
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -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
|
||||
+17
@@ -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 + "^_" }
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+102
@@ -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 01–10 evidence re-run and confirmed at branch HEAD.
|
||||
|
||||
It is filed with the evidence because it invalidates a *method* that cycles 01–04 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 01–10, 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 01–10 | 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.
|
||||
+4
@@ -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.
|
+6
@@ -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)
|
||||
+7
@@ -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
|
||||
+2
@@ -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)"'
|
||||
+1
@@ -0,0 +1 @@
|
||||
Which C source each timed binary was built from, and whether it contains wrappers:
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
127
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash /tmp/wrapcheck03b.sh
|
||||
+7
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+8
@@ -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
|
||||
+16
@@ -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(-)
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash /tmp/sec6probe03a.sh
|
||||
+237
@@ -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.
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash /tmp/harnesstally03b.sh
|
||||
+25
@@ -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 ---
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash /tmp/harnesstally03b2.sh
|
||||
+7
@@ -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"
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
@@ -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 P1–P4 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 5–15% 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 5–15% 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 A–C 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.
|
||||
+21
@@ -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
|
||||
|
||||
+26
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash /private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/seam_timing_06.sh 9
|
||||
+22
@@ -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'
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
+1
@@ -0,0 +1 @@
|
||||
bash /private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/free_when_unused_06.sh 41
|
||||
+11
@@ -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
|
||||
+7
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
0
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user