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.
9.4 KiB
CLAIMS — v2 cycle 07, "the caller was already there"
Re-run 2026-08-17. Source doc: docs/v2/experiments/cycles/07-the-caller-was-already-there.md
(not modified; it is the historical record).
Pinned commits
| Role | SHA | Subject |
|---|---|---|
| Code commit (system under test) | d9d1571f2a17024323a3f7be6966bc476c2f2a78 |
a construct can see its caller, with no new emission point |
| Its parent — the BASE for timing | d403a5cf2e728ce00ecdc2d84290e471e74159bb |
v2 cycle 06: form is half bindable |
| Merge that landed it | ffab17b |
merge experiment/seam-caller |
| Cycle 07 doc commit | 47b56a3 |
v2 cycle 07: the caller was already there |
| Standing critique of this cycle | fbb3a52 |
cycle 07's central claim is backed by a grep, not a measurement |
All measurements were taken in detached worktrees at d9d1571 and d403a5c,
so each .prov carries the system under test's SHA, not the re-run host's.
d9d1571 adds 80 lines across three files and touches no compiler source —
el_runtime.c (+33), el_runtime.h (+1), seam_caller.sh (+46). The compiler
sources are byte-identical between BASE and STACK worktrees (0006,
diff -rq … IDENTICAL), so the timing below isolates the runtime change and
nothing else.
Verdicts
| # | Claim as stated in the doc | Artifact | Commit | Verdict |
|---|---|---|---|---|
| A1 | P1 — exactly three emission points per fn | 0026, 0027, 0028 |
d9d1571 |
REPRODUCED — and by a better instrument than the doc's, see below |
| A2 | P2 — no other emission point exists | 0027, 0028, 0029, 0030 |
d9d1571 |
REPRODUCED — loops, call sites and field accesses emit none |
| A3 | entry is el_seam_run(fn, 0, 0), refusable |
0026, 0028 |
d9d1571 |
REPRODUCED verbatim |
| A4 | wrap is el_seam_wrap(fn, thunk, env) |
0026, 0028 |
d9d1571 |
REPRODUCED verbatim |
| A5 | exit is el_seam_run(fn, 1, __r) |
0026, 0028 |
d9d1571 |
REPRODUCED verbatim |
| A6 | all three keyed on fn_name |
0028 |
d9d1571 |
REPRODUCED — every point carries EL_STR("<fn>") |
| A7 | P3 — a construct cannot see WHO called it (before the change) | 0032 |
d9d1571 |
REPRODUCED — unbound run reports nothing |
| A8 | P4 — the call graph is static, the gap is runtime | — | — | NOT-CAPTURED — asserted in prose, no measurement stated |
| A9 | P5 — a seam-maintained stack gives the caller with NO new emission point | 0027, 0033 |
d9d1571 |
REPRODUCED |
| A10 | the result: AUDIT save called by handle_request |
0033 |
d9d1571 |
REPRODUCED verbatim |
| A11 | and AUDIT save called by migrate |
0033 |
d9d1571 |
REPRODUCED verbatim |
| A12 | a construct bound after the build sees its caller | 0032, 0033 |
d9d1571 |
REPRODUCED — same binary, binding supplied at run time via EL_CONSTRUCTS |
| A13 | P6 — maintaining the stack costs something measurable — FALSE | 0007–0021, 0024 |
d9d1571 vs d403a5c |
REPRODUCED — 7 interleaved rounds, means identical to 0.00 ms |
| A14 | P7 — moving it behind the early-out removes the cost — FALSE, there was no cost | 0024 |
— | NOT-REPRODUCIBLE — the "before the early-out" variant was never committed |
| A15 | interleaved rounds base 0.25/0.25/0.24 s, stack 0.24/0.24/0.24 s | 0024, 0025 |
d9d1571 vs d403a5c |
DIVERGED on absolute magnitude, REPRODUCED on the conclusion — see below |
| A16 | "identical within noise. There was no regression." | 0024 |
d9d1571 vs d403a5c |
REPRODUCED, and more strongly than the doc claims |
| A17 | the baseline had drifted from 0.37 s — the machine, not the code | 0025 |
— | REPRODUCED in mechanism — cold/warm alone is 4.30× |
| A18 | seam_caller.sh — 5 assertions |
0031 |
d9d1571 |
REPRODUCED — 5 assertions, 5 passed, exit 0 |
| A19 | defect 11 — arity_query.sh asserted exactly 503 signatures |
0039 |
d9d1571^ |
REPRODUCED verbatim |
| A20 | the assertion now tests the property directly | 0040 |
47b56a3 |
REPRODUCED — now SIGN -gt 400 |
| A21 | "the gauntlet built in cycle 04 caught this" | — | — | NOT-CAPTURED — no artifact of the original failing run survives |
Counts: 17 REPRODUCED, 1 DIVERGED, 1 NOT-REPRODUCIBLE, 2 NOT-CAPTURED.
A1/A2 — measured from emitted C, because the doc's instrument does not measure the system
The cycle's headline — three emission points, all keyed on fn_name — is
asserted in seam_caller.sh by this line (0034):
chk "no fourth emission point was added" "3" \
"$(grep -c 'el_seam_run(EL_STR\|el_seam_wrap(EL_STR' el-compiler/src/codegen.el)"
That greps compiler source text, while the harness runs a prebuilt
compiler passed in as $1. The source it counts is never compiled by the
harness. Commit fbb3a52 records this as a standing defect. I confirmed it
independently, in both directions, with my own artifacts:
| grep of source | emitted-C emission points | compiler sha256 | harness | |
|---|---|---|---|---|
baseline (0035) |
3 | 9 | e99058b8… |
5/5 green |
after appending one comment line (0036, 0037) |
4 | 9 | e99058b8… unchanged |
FAILS, "expected 3 got 4" |
A comment — zero semantic change, byte-identical binary, identical emitted C — turns the cycle's central assertion red. The assertion measures a text file, not the system.
So I did not rely on it. A1–A6 above are graded against the emitted C
produced by the binary under test, which is causally downstream of the
compiler and therefore an actual measurement. Compiling a probe containing a
loop, a call site, a map field access and four functions (0030) yields
(0028):
fields -> entry wrap exit
loops -> entry wrap exit
helper -> entry wrap exit
total emission points = 9
Three functions with bodies, three points each, nine total, every one keyed on
the function name. main gets none. Loops, call sites and field accesses get
none — which is precisely the bound the cycle claims, now established by
observing the compiler's output rather than by counting strings in its source.
This is a stronger result than the document's, obtained because the document's own instrument was found untrustworthy. The conclusion the cycle drew was right; the evidence it offered for it was not.
A15 — the one divergence, reported loudly
The conclusion reproduces. The numbers do not.
doc: round 1 base 0.25 s stack 0.24 s
round 2 base 0.25 s stack 0.24 s
round 3 base 0.24 s stack 0.24 s
measured: 7 interleaved rounds, alternating, identical workload
round BASE STACK
1 51 53
2 53 52
3 52 53
4 53 53
5 52 52
6 52 52
7 53 51
BASE mean 52.29 ms min 51 max 53 spread 2 sd 0.70
STACK mean 52.29 ms min 51 max 53 spread 2 sd 0.70
STACK/BASE ratio of means = 1.0000 (+0.00%)
Today's absolute figures are ~4.8× faster than the doc's — 52 ms where the doc reports 240–250 ms. The doc's conclusion is nonetheless confirmed, and confirmed harder: where the doc showed a 1-round-in-3 wobble of 0.01 s, seven interleaved rounds give means equal to two decimal places and identical spread.
The magnitude gap is explained, and the explanation is the point of the cycle
(0025):
FIRST (cold) run, BASE = 225 ms
FIRST (cold) run, STACK = 229 ms
steady-state warm mean over 14 runs = 52.29 ms
cold/warm ratio, BASE = 4.30x
The doc's 0.24–0.25 s figures sit in the cold-cache band; its steady-state equivalent is 52 ms. Cache state alone moves this workload by 4.30×, which is larger than the 50% (0.48 → 0.72 s) "regression" that was originally reported and then retracted. That single number does more to explain the phantom regression than the retraction in the doc does: the original pair of timings was not merely noisy, it was almost certainly comparing a cold run against a warm one.
Recorded as DIVERGED because the doc presents 0.25 s and 0.24 s as measurements of this workload and they are not reproducible as such — they are reproducible only as cold-start measurements. The finding they support — no regression — is REPRODUCED (A13, A16).
A14 — why NOT-REPRODUCIBLE
P7 concerns a variant in which the depth-stack maintenance sits before the
unbound early-out. That variant was never committed; only the post-early-out
form exists in history (0003). Reconstructing it would mean writing a mutant
today and grading a historical prediction against it, which is a new experiment,
not a reproduction. The runtime comment in 0003 states the 50% figure that
motivated the move — but a comment is a claim, not a measurement, and no
artifact of it survives.
Notes on tree state
Every .prov records d9d1571f2… or d403a5cf2…. 0041 shows the worktree
ended with only untracked build scaffolding (elc-stack, g2.c, work/) and
no modified tracked file: the deliberate source mutation in 0036 was reverted
in 0038 and the revert is in the record. Both worktrees were removed after
capture.
0023 is a failed instrument run (a malformed awk, exit 2) and is retained
rather than deleted. Removing a failed attempt from an evidence record is itself
a measurement defect; 0024 is the corrected run.