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:
@@ -0,0 +1,135 @@
|
||||
# CLAIMS — cycle 18, async — half expressible, and the cycle that was dogma
|
||||
|
||||
Source doc: `docs/v1/experiments/cycles/18-async-half-expressible.md`
|
||||
|
||||
This cycle is unusual: the doc already carries a chain-of-custody note stating
|
||||
that its original artifacts were destroyed and that it was **rerun, not
|
||||
reconstructed**. The verdicts below respect that. Where the original artifact is
|
||||
gone the verdict is NOT-CAPTURED, and the replication is graded separately.
|
||||
|
||||
## Pinned commits
|
||||
|
||||
| role | sha | subject |
|
||||
|---|---|---|
|
||||
| replication landed (system under test) | `511db25230c69b9484ece39ed4131d3920b16596` | rerun cycle 18 rather than reconstruct it |
|
||||
| original measurement | — | **no commit.** The C stub lived in `/tmp` and was destroyed with the session worktrees |
|
||||
|
||||
`511db252` is the only commit that has ever contained
|
||||
`lang/tests/integration/async_future.sh` or
|
||||
`lang/tests/integration/fixtures/future.c`.
|
||||
|
||||
## Verdicts
|
||||
|
||||
| # | claim | artifact | commit | verdict |
|
||||
|---|---|---|---|---|
|
||||
| A1 | the first attempt was dogma: `pthread_join` immediately after `pthread_create`, and the test printed the word `DEFERRED` itself | — | — | **NOT-CAPTURED** (artifact destroyed; the doc says so) |
|
||||
| A2 | second run, 4/4: `[18 us] wrap RETURNS`, `[29 us] body START`, `caller continues, got 0`, `[50176 us] body END (computed 42)` | — | — | **NOT-CAPTURED** (artifact destroyed; the doc says so) |
|
||||
| A3 | the caller got **0, not 42** on the second run | — | — | **NOT-CAPTURED** |
|
||||
| A4 | the fixture now lives at `lang/tests/integration/fixtures/future.c` and the harness at `lang/tests/integration/async_future.sh` | `0002`, repo tree at `511db252` | `511db252` | REPRODUCED |
|
||||
| A5 | **6/6** on the replication harness | `0002-async-future-harness-6-assertions.out` | `511db252` | REPRODUCED (exact) |
|
||||
| A6 | follow-on P1: `el_val_t` already carries tagged heap objects — **5 magic tags exist** | `0003-P1-five-magic-tags.out` | `511db252` | REPRODUCED (exact) |
|
||||
| A7 | follow-on P2/P3: a future is one more; the caller awaits and gets **42** | `0005-P2P3-bound-run-interleaving.out` | `511db252` | REPRODUCED |
|
||||
| A8 | follow-on P4: **ZERO compiler changes** — runtime C plus one binding | `0004`, `0005` | `511db252` | REPRODUCED |
|
||||
| A9 | P1/P2 of the second run: the caller proceeds while the body runs; interleaving is observable in timestamps | `0005` | `511db252` | REPRODUCED |
|
||||
| A10 | follow-on P5: the unbound path still works — **FALSE, SIGSEGV** | — | — | **NOT-CAPTURED** (see note) |
|
||||
| A11 | the compiler builds at `511db252` | `0001-build-gen1-511db252.out` | `511db252` | REPRODUCED |
|
||||
|
||||
## A5 — the replication, 6/6
|
||||
|
||||
`0002`, harness run against the compiler built from `511db252`:
|
||||
|
||||
```
|
||||
ok unbound: no construct, synchronous, correct result
|
||||
ok unbound: el_await on a non-future passes through, no crash
|
||||
ok bound: does not crash
|
||||
ok bound: the awaited result is correct
|
||||
ok bound: the caller continues BEFORE the body finishes
|
||||
ok bound: the wrap returns in under 10ms while the body takes 50ms
|
||||
|
||||
6 assertions, 6 passed, 0 failed
|
||||
```
|
||||
|
||||
Exit 0. The harness's own header states it is a replication and not a blind
|
||||
test — the outcomes were known before it was written — and that grading is
|
||||
carried forward here unchanged.
|
||||
|
||||
## A8 / A9 — zero compiler changes, demonstrated
|
||||
|
||||
The same El source (`fixtures/probe.el`), compiled by the stock `elc`, run twice
|
||||
against the same binary.
|
||||
|
||||
Unbound — no construct file, synchronous (`0004`):
|
||||
|
||||
```
|
||||
CALLER_CONTINUED
|
||||
RESULT 42
|
||||
```
|
||||
|
||||
Bound — `EL_CONSTRUCTS=c.txt` containing `work async wrap defer` (`0005`):
|
||||
|
||||
```
|
||||
WRAP_RETURNED 12
|
||||
CALLER_CONTINUED
|
||||
BODY_START 20
|
||||
BODY_END 55034
|
||||
RESULT 42
|
||||
```
|
||||
|
||||
Same compiler, same emitted C, same binary; deferral appears only because a
|
||||
construct was bound after the build. The wrap returns at **12 µs** while the
|
||||
body finishes at **55 034 µs**, and `CALLER_CONTINUED` precedes `BODY_END` —
|
||||
the caller demonstrably proceeds while the body runs. The record's own numbers
|
||||
were 18 µs / 29 µs / 50 176 µs; the shape matches and the magnitudes are
|
||||
consistent (the body sleeps 50 ms by construction).
|
||||
|
||||
`RESULT 42` is the follow-on P3: with a future as one more tagged heap object,
|
||||
the caller awaits and gets the real value.
|
||||
|
||||
## A6 — five tags, and a future would be the sixth
|
||||
|
||||
`0003`, over `el_runtime.c` and `el_runtime.h` at `511db252`:
|
||||
|
||||
```
|
||||
#define EL_MAGIC_BIN
|
||||
#define EL_MAGIC_GEOM
|
||||
#define EL_MAGIC_LIST
|
||||
#define EL_MAGIC_MAP
|
||||
#define EL_MAGIC_MFLD
|
||||
|
||||
count: 5
|
||||
```
|
||||
|
||||
and `fixtures/future.c` adds `#define EL_MAGIC_FUT 0xE1F07000u` in the fixture,
|
||||
not in the compiler.
|
||||
|
||||
## A10 — why the SIGSEGV is NOT-CAPTURED
|
||||
|
||||
Follow-on P5 records that the first `el_await` read `->magic` off an unvalidated
|
||||
slot and segfaulted on the unbound path. That version was never committed. The
|
||||
committed `future.c` carries the repair and a comment naming the defect:
|
||||
|
||||
```c
|
||||
el_val_t el_await(el_val_t h){
|
||||
if (h < 0x10000) return h; /* small ints / low addresses */
|
||||
if (h & 0x7) return h; /* malloc returns 8-aligned */
|
||||
ElFuture* f = (ElFuture*)(intptr_t)h;
|
||||
if (f->magic != EL_MAGIC_FUT) return h; /* safe to read now */
|
||||
```
|
||||
|
||||
so the harness's second assertion ("unbound: `el_await` on a non-future passes
|
||||
through, no crash") passes today. The historical failure has no artifact and one
|
||||
was not manufactured. The *class* it belongs to is independently reproduced in
|
||||
cycle 19 (`0005-P6-sha256-hex-50000-exit-code.out`, exit 139), which is the
|
||||
cycle P5 opened.
|
||||
|
||||
## Provenance notes
|
||||
|
||||
All artifacts from `/tmp/rerun-v1b-18`, a dedicated worktree at `511db252`, with
|
||||
`capture.sh` invoked by absolute path from inside it. **No DIRTY-TREE flags in
|
||||
this cycle.**
|
||||
|
||||
Three of this cycle's claims (A1, A2, A3) rest on a file that no longer exists.
|
||||
They are recorded as NOT-CAPTURED. Producing a `/tmp` C stub today and dating it
|
||||
to 2026-08-17 would be fabrication with a fresh timestamp; the doc's own
|
||||
chain-of-custody note already says as much, and this re-run does not go behind
|
||||
it.
|
||||
Reference in New Issue
Block a user