aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHECKPOINT.md2
-rw-r--r--docs/design/021-past-c.md3
-rw-r--r--docs/research/123-past-c.md216
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-core.jsonl12
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-counts.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-load.txt12
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-after-1.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-after-2.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-after-3.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-after-4.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-after-5.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-after-6.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-before-1.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-before-2.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-before-3.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-before-4.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-before-5.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-queries-before-6.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-after-1.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-after-2.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-after-3.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-after-4.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-after-5.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-after-6.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-before-1.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-before-2.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-before-3.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-before-4.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-before-5.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-all-tpcc-before-6.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-bfs-after.jsonl16
-rw-r--r--research/experiments/038-past-c/2026-10-05-bfs-before.jsonl16
-rw-r--r--research/experiments/038-past-c/2026-10-05-bfsfloor.jsonl64
-rw-r--r--research/experiments/038-past-c/2026-10-05-core.jsonl12
-rw-r--r--research/experiments/038-past-c/2026-10-05-counts.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-load.txt12
-rw-r--r--research/experiments/038-past-c/2026-10-05-mac.jsonl46
-rw-r--r--research/experiments/038-past-c/2026-10-05-pi.jsonl46
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-after-1.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-after-2.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-after-3.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-after-4.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-after-5.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-after-6.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-before-1.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-before-2.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-before-3.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-before-4.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-before-5.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-queries-before-6.jsonl4
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-after-1.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-after-2.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-after-3.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-after-4.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-after-5.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-after-6.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-before-1.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-before-2.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-before-3.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-before-4.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-before-5.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-before-6.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit0-1.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit0-2.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit0-3.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit0-4.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit1-1.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit1-2.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit1-3.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-tpcc-jit1-4.jsonl3
-rw-r--r--research/experiments/038-past-c/2026-10-05-wsl.jsonl46
-rw-r--r--research/experiments/038-past-c/bfs-run.c88
-rw-r--r--research/experiments/038-past-c/bfsfloor.c334
-rw-r--r--research/experiments/038-past-c/pairs.py45
-rw-r--r--research/experiments/038-past-c/runs.sh75
75 files changed, 1243 insertions, 2 deletions
diff --git a/CHECKPOINT.md b/CHECKPOINT.md
index a676af1..72592ee 100644
--- a/CHECKPOINT.md
+++ b/CHECKPOINT.md
@@ -13,7 +13,7 @@
| 영역 | 확인한 것 | 근거 |
|---|---|---|
| 앱 표현 | 상태(수, `bool`, 정확한 64비트 정수 `i64`, text와 커서·마크, 레코드의 리스트와 키 있는 리스트, 인덱스), 입력(키, text, 필드 있는 메시지, 타이머), 원자적 이벤트 핸들러, 순수 보기(조건식, 표와 걸러진 표, count·sum·max·min·first), `fn`·`use` 라이브러리, text 비교, 시간(`now`, `every`, `floor`, `%`). 로드할 때 타입·스택·합류·커서와 인덱스의 소속을 모두 검증하고 이벤트의 실행량에 상한이 있다 | 008, [016](docs/design/016-bool-and-i64.md), aup `docs/design/002-dsl-direction.md`, aup `make check`(파이썬 참조 모델 대조, 진단 223건) |
-| 수명과 계산 | 값의 수명은 선언이 말한다: `state`(저장), `transient state`(앱이 도는 동안: 저장소에 쓰지 않고 다시 시작하면 초기값, SD 카드에서 쓰기 17배), `let`(이벤트 동안). 핸들러와 보기가 계산한다: 이벤트의 리스트(`let seen: list of Seen by node`), 세는 `for i in a .. b`, `break`, 8겹까지의 중첩, 그리고 `view 이름(인자) { … return … }`(스냅숏에서 돌아 소유자를 막지 않는다). 모든 반복은 시작할 때 횟수의 상한을 갖고, 모든 이벤트와 보기는 실행량 예산(정하지 않으면 2^28 명령)과 메모리 몫(2^28 바이트) 안에서 끝난다. 노드 10만·간선 100만의 BFS 한 이벤트 191 ms(처음 397; CPython 449, C 9): 이벤트의 키 있는 리스트가 키를 비트나 표로도 갖고, 키로 넣기를 한 번 내려가서 하며, 리스트의 코드는 `-O3`다. TPC-C는 그 덕에 +4.1%, 은행 질의의 명령 수는 1% 안. 같은 계산이 Pi·WSL2·M3 Mac에서 같다. 같은 탐색을 보기로 하면 쓰기는 CPU를 나누는 만큼만 줄고(이벤트로 하면 0.2%로 멈춘다), 본문이 있는 보기는 보기의 스레드(`--view-workers`)가 계산해 연결 스레드를 막지 않는다(쓰기 최대 지연이 CPU만 나눌 때의 1.0배, 연결 스레드 하나에서 묻는 연결 둘이 1.95배) | [018](docs/design/018-lifetimes-and-computation.md), [020](docs/design/020-computing-faster.md), [117](docs/research/117-transient-states.md), [118](docs/research/118-computing-in-one-event.md), [119](docs/research/119-views-that-compute.md), [121](docs/research/121-computing-faster.md), [122](docs/research/122-views-off-the-connection-threads.md) |
+| 수명과 계산 | 값의 수명은 선언이 말한다: `state`(저장), `transient state`(앱이 도는 동안: 저장소에 쓰지 않고 다시 시작하면 초기값, SD 카드에서 쓰기 17배), `let`(이벤트 동안). 핸들러와 보기가 계산한다: 이벤트의 리스트(`let seen: list of Seen by node`), 세는 `for i in a .. b`, `break`, 8겹까지의 중첩, 그리고 `view 이름(인자) { … return … }`(스냅숏에서 돌아 소유자를 막지 않는다). 모든 반복은 시작할 때 횟수의 상한을 갖고, 모든 이벤트와 보기는 실행량 예산(정하지 않으면 2^28 명령)과 메모리 몫(2^28 바이트) 안에서 끝난다. 노드 10만·간선 100만의 BFS 한 이벤트 90 ms(처음 397, 020 뒤 191; CPython 452, C 9.1): 이벤트의 리스트가 배열(차례대로, 또는 키 자리에)이고, 키로 찾아 읽기가 하나이며, 루프가 있는 블록은 기계어로 돈다(리눅스 AArch64의 JIT; 다른 곳은 실행기, 답은 같다). C는 넘지 못했다: 저장된 리스트를 B+트리로 찾는 지연과 8바이트 열이 바닥이고, 손으로 쓴 바닥으로는 배열과 좁은 열과 미리 읽기가 함께 있어야 C를 넘는다(123). TPC-C −2.8%(기준 3% 안), 은행 질의의 명령 수는 1% 안. 같은 계산이 Pi(JIT)·WSL2·M3 Mac에서 같다. 같은 탐색을 보기로 하면 쓰기는 CPU를 나누는 만큼만 줄고(이벤트로 하면 0.2%로 멈춘다), 본문이 있는 보기는 보기의 스레드(`--view-workers`)가 계산해 연결 스레드를 막지 않는다(쓰기 최대 지연이 CPU만 나눌 때의 1.0배, 연결 스레드 하나에서 묻는 연결 둘이 1.95배) | [018](docs/design/018-lifetimes-and-computation.md), [020](docs/design/020-computing-faster.md), [117](docs/research/117-transient-states.md), [118](docs/research/118-computing-in-one-event.md), [119](docs/research/119-views-that-compute.md), [121](docs/research/121-computing-faster.md), [122](docs/research/122-views-off-the-connection-threads.md), [021](docs/design/021-past-c.md), [123](docs/research/123-past-c.md) |
| 보기 밀기 | 보기의 `GET`에 `Accept: text/event-stream`이면 그 값을 민다(SSE, 브라우저의 `EventSource` 그대로). 같은 보기와 인자를 보는 구독자는 계산 한 번을 나누고, 값이 바뀔 때만, 많아야 10 ms마다 한 번 보낸다. 느린 구독자에게는 가장 새 값 하나만 기다리게 한다. 모듈이 바뀌어도 같은 이름의 보기로 이어 가고, 토큰을 빼면 끊는다. 구독자 1,000에 쓰기 초당 100번까지 신선도 p99 11 ms 이하, 초당 1번이면 100 ms 폴링의 약 10분의 1 CPU(이벤트 하나와 요청 하나의 값이 같아 메시지 수의 비다), 구독자 1만에 구독자마다 0.3–0.4 KiB, 1만에게 퍼지기까지 p99 45 ms | [019](docs/design/019-pushing-views.md), [120](docs/research/120-pushing-views.md) |
| 영속 | 선언한 상태가 곧 영속 상태다. 목록은 이미지와 로그(저장마다 바뀐 기록 한 항목, 재사용하는 할당 구간, 앞 항목의 다이제스트로 이어짐)에, 나머지는 트리 저장소에(커밋당 한 연속 구간과 동기화 한 번). 이벤트 묶음마다 저장 한 번, 이미지는 소유자 밖에서 체크포인트. `kill -9`와 커밋 각 단계의 죽음 뒤 확인 응답한 이벤트가 모두 남는다. 레코드·키가 바뀐 모듈로 바꿔도 데이터가 이름으로 옮겨진다 | [076](docs/research/076-one-sync-commit.md), [081](docs/research/081-tail-records.md), [092](docs/research/092-tpcc.md), 008 상태 영속·교체 |
| 인터페이스 | 한 명세가 TUI(셀 단위 갱신), CLI, 문장(NUI), 웹 GUI가 된다. 저장하면 실행 중인 앱이 상태를 이어 새 모듈로 바뀐다(`aup watch`, `vega … --watch`) | Vega `docs/design/001-first-component.md`, Vega `make check`(가상 터미널, 헤드리스 Chromium 포함) |
diff --git a/docs/design/021-past-c.md b/docs/design/021-past-c.md
index 5ff1c61..f6f6072 100644
--- a/docs/design/021-past-c.md
+++ b/docs/design/021-past-c.md
@@ -1,6 +1,7 @@
# 021 — C보다 빠르게
-작성일: 2026-10-05. 상태: 1–4단계를 구현해 쟀다. 아래 "바로잡음"이 처음의 산수를 고친다.
+작성일: 2026-10-05. 상태: 1–4단계를 구현해 쟀다([123](../research/123-past-c.md)). C를 넘지 못했다(HTTP로 90 ms, C 9.1 ms).
+아래 "바로잡음"이 처음의 산수를 고친다. C를 넘는 길은 123의 "다음"이다.
[020](020-computing-faster.md)이 BFS(노드 10만, 간선 100만) 한 번을 397 ms에서 187 ms로 줄였다([121](../research/121-computing-faster.md)).
같은 탐색을 C(033의 `bfs.c`: 인접을 오프셋 배열로, 깊이는 `int32_t` 배열)는 9 ms에 한다. 목표는 그 C보다 빠른 것이다. 같은
aup 코드, 같은 뜻(키 있는 리스트, 인덱스는 위치, 결정적인 결과), 같은 기계에서.
diff --git a/docs/research/123-past-c.md b/docs/research/123-past-c.md
new file mode 100644
index 0000000..4ebe94f
--- /dev/null
+++ b/docs/research/123-past-c.md
@@ -0,0 +1,216 @@
+# 123 — C보다 빠르게 (미달)
+
+2026-10-05. [021](../design/021-past-c.md)을 잰다. 기준은 구현하기 전에 적어 커밋했다(`820cca3`). 해 보고 알게 된 것으로
+021의 산수를 바로잡았다(`2c602fc`, `38e0280`, 021의 "바로잡음"). 잰 빌드는 `b1b3c7b`다.
+
+## 쉬운 말로
+
+- **C를 넘지 못했다.** BFS(노드 10만, 간선 100만) 한 번이 HTTP로 190 ms에서 90 ms가 됐다(020 전부터는 397 ms에서 4.4배). 같은
+ 실행에서 C는 9.1 ms, CPython은 452 ms다. Pure는 C의 9.9배 걸리고, CPython보다 5배 빠르다.
+- **넘지 못한 까닭을 쟀다.** 노드마다 간선 조각의 두 경계를 찾고 첫 간선을 읽는 데, 저장된 리스트(B+트리)는 373 ns, 같은 일을 C의
+ 오프셋 배열은 21 ns다. B+트리는 뿌리에서 잎까지 서로 기다리는 읽기를 넷 하고, C는 반복끼리 기다리지 않아 미스를 겹친다.
+- **C를 넘을 수 있는 길을 손으로 재 봤다.** 같은 탐색을 Pure의 표현대로 C로 손수 썼다(`bfsfloor.c`). 표현을 지금처럼 수(8바이트)로
+ 두면 가장 잘 써도 23 ms다: 노드의 표들이 L3(2 MB)에 들지 않아 DRAM 미스가 C의 6.6배다. 열을 값에 맞게 좁히면(정수는 4바이트,
+ 작은 수는 1바이트) 13 ms, 거기에 큐의 앞 노드를 미리 읽으면 **8.8 ms로 C(9.9 ms)보다 빠르다**. 이 셋(저장된 리스트를 배열과 칸의
+ 색인으로, 좁은 열, 미리 읽기)과 손으로 쓴 것에 가까운 기계어가 함께 있어야 한다. 다음 설계(022)가 이것이다.
+- **지금의 앱은 기준 안이다.** TPC-C 여섯 쌍의 중앙값 −2.8%(기준 3%), 은행 질의는 같거나 빠르고, 명령 수는 +0.8% 안(기준 1%).
+ 다만 TPC-C는 여섯 쌍 모두 느렸다(−1.8%에서 −4.6%). 그중 2.1%는 JIT이다: TPC-C의 루프(주문의 줄)는 대부분의 명령이
+ `step` 부르기라, 같은 빌드에서 JIT을 끄면 그만큼 빠르다.
+- **만든 것.** 이벤트의 리스트를 배열로(차례대로 또는 키 자리에), 키로 찾아 읽기를 하나로, 실행기를 프레임과 step으로, 그리고
+ AArch64 JIT(분기와 루프와 뜨거운 명령을 코드로, 트리의 항목은 프레임이 쥔 런에서; 루프가 있는 블록만). JIT과 실행기의 답은 모든
+ 검사에서 같고, 같은 계산 46번이 Pi(JIT)와 WSL2, Mac(실행기)에서 바이트까지 같다.
+- **틀린 것.** 처음 잰 JIT 뼈대의 "60 ms"는 표의 경계를 넘어 쓰는 버그가 결과를 망친 빌드였다(닿은 노드 92,179, 맞는 값 99,998).
+ 커밋 메시지는 푸시 전에 고쳤다. 저장된 리스트의 디렉터리를 "필수"라 했지만 재 보니 사이클이 늘어 넣지 않았다. "키 집합을 비트로
+ 두는 것이 C를 넘는 몫"이라 했지만, C의 `depth`를 비트로 바꾸면 C가 오히려 느려진다(9.9에서 12.0 ms).
+
+## 결과
+
+원시 결과와 명령은 [038-past-c](../../research/experiments/038-past-c/)에 있다(`runs.sh`, `bfs-run.c`, `seekfloor.c`,
+`indexfloor.c`, `bfsfloor.c`, `pairs.py`). 전은 `a553601`(021 직전), 후는 `b1b3c7b`다. 모든 블록을 컴파일하던 `38e0280`으로
+먼저 잰 계열은 `2026-10-05-all-*`로 남겼다(아래 "고친 것").
+
+### BFS
+
+**HTTP**(033의 `bfs.py`: `pure-serve`, 저장소는 RAM, 다섯 탐색 세 라운드, 같은 실행에서 C와 CPython). 다섯 탐색 모두 Pure의
+거리와 닿은 노드 수가 C와 같다.
+
+| 중앙값 | 전 (`a553601`) | 후 (`b1b3c7b`) |
+|---|---:|---:|
+| Pure | 190.0 ms | **90.0 ms** |
+| C (`bfs.c`) | 9.03 ms | 9.08 ms |
+| CPython | 449 ms | 452 ms |
+| Pure ÷ C | 21.0 | 9.9 |
+
+처음 잰 후의 계열은 내가 같은 때 다른 기기로 30 MB를 보내던 중이라(한 탐색 106 ms) 버리고 다시 쟀다. 버린 것은 남기지 않았다.
+
+**코어만**(`bfs-run`: 호스트 없이, 일곱 탐색의 중앙값). 전과 후를 번갈아 여섯 쌍.
+
+| | 전 | 후 |
+|---|---:|---:|
+| 여섯 쌍의 중앙값 | 189.5 ms | **89.4 ms** |
+| 범위 | 188.8–190.6 | 89.0–90.0 |
+
+### 단계마다의 BFS (코어만, `bfs-run`, 노드 10만, 간선 999,937)
+
+시간은 같은 빌드를 한 번(일곱 탐색의 중앙값), 명령과 사이클은 탐색 하나당(025의 `pcount`). 모든 줄의 답(거리, 닿은 노드 수,
+실행량)이 실행기의 것과 같다(아래의 한 줄은 빼고).
+
+| 단계 | 시간 | 명령 | 사이클 |
+|---|---:|---:|---:|
+| 전 (020 끝, `dde73e4`) | 187 ms | 867M | 448M |
+| 1. 이벤트의 리스트를 배열로, 키로 찾아 읽기를 하나로 (`7d1e9dd`) | 126 ms | 702M | 300M |
+| 3. 저장된 리스트의 디렉터리 (넣지 않음) | 130 ms | 677M | 316–320M |
+| 실행기를 프레임과 step으로 (`5b2b58a`, JIT 없이) | 121.6 ms | 655M | 294M |
+| 4. JIT 뼈대: 분기와 루프만, 나머지는 step 부르기 (`5b2b58a`) | 150 ms | 822M | 357M |
+| ~~같은 뼈대, 처음 잰 것~~ | ~~60 ms~~ | ~~308M~~ | 답이 틀렸다: 닿은 노드 92,179 |
+| JIT 2판: 뜨거운 명령을 코드로 (`0503439`) | 103 ms | 424M | 250M |
+| JIT 3판: 트리의 항목을 런에서, 손가락의 잎에서 런 (`f3e3fe6`) | 89 ms | 319M | 213–229M |
+| 끝: 루프가 있는 블록만 컴파일 (`b1b3c7b`) | 89–90 ms | 319M | 216–217M |
+
+- 1단계가 HTTP에서는 처음에 효과가 없었다(191 ms에서 188.6 ms). 저장 뒤에 스냅숏이 모든 리스트를 나누면서, 비어 있는 이벤트의
+ 리스트까지 트리로 바꿔 다음 이벤트 내내 트리로 남겼다. 빈 리스트는 그대로 나누게 고친 뒤(`b66858e`) HTTP도 125 ms가 됐다.
+- JIT 뼈대가 실행기보다 느렸던 것: 명령마다 `step` 함수를 부르는 값(레지스터 저장, 큰 switch)이 실행기 루프 안의 switch보다 크다.
+ JIT이 이득을 내는 것은 명령을 코드로 쓴 뒤다.
+- 지금 간선 하나는 기계어 명령 약 80개다: `ROW` 5, `ITEM_GET` 약 20(런 캐시의 검사), `HAS` 약 22, `NOT`과 `JZ` 8, 반복 약 25. 값이
+ 모두 메모리의 스택을 오가고, 행 번호를 수로 바꿨다가 다시 정수로 바꾼다.
+
+### 지금의 앱
+
+`runs.sh pairs 1 3`, `pairs 4 6`: TPC-C(RAM, 창고 하나, 터미널 64, 20초)와 은행 질의를 전과 후 번갈아 여섯 쌍, 부하 평균이 1.5
+아래일 때 시작.
+
+| 쌍 | 전 (초당) | 후 | 바뀜 | 거래당 CPU 전, 후 (µs) |
+|---|---:|---:|---:|---:|
+| 1 | 44,584 | 42,630 | −4.4% | 43.3, 45.3 |
+| 2 | 45,341 | 43,259 | −4.6% | 43.2, 44.6 |
+| 3 | 44,865 | 43,560 | −2.9% | 43.8, 44.5 |
+| 4 | 44,245 | 42,781 | −3.3% | 44.5, 44.8 |
+| 5 | 44,190 | 43,390 | −1.8% | 44.6, 44.7 |
+| 6 | 44,224 | 43,069 | −2.6% | 44.4, 45.5 |
+| 중앙값 | 44,415 | 43,164 | **−2.8%** | 44.1, 44.75 |
+
+소유자 코어의 몫은 모두 0.88–0.90이다. 기준(3% 안)은 지나지만 여섯 쌍이 모두 느리니 잡음이 아니다.
+
+**어디서 오나**(`runs.sh jit 1 4`): 후의 빌드 하나로 TPC-C를 JIT을 켜고(`PURE_JIT=1`) 끄고(`PURE_JIT=0`) 번갈아 네 쌍.
+
+| 쌍 | JIT (초당) | 실행기 | 바뀜 |
+|---|---:|---:|---:|
+| 1 | 42,380 | 43,586 | −2.8% |
+| 2 | 43,122 | 44,326 | −2.7% |
+| 3 | 42,838 | 43,484 | −1.5% |
+| 4 | 42,722 | 43,771 | −2.4% |
+| 중앙값 | 42,780 | 43,679 | **−2.1%** |
+
+TPC-C의 핸들러에도 루프가 있다(새 주문의 줄, 배달). 그 블록은 컴파일되지만, 안의 명령(키로 찾기, 넣기, 필드 쓰기)은 대부분 코드로
+쓰지 않아 명령마다 `step`을 부른다. 그것이 실행기의 switch보다 비싸다(JIT 뼈대가 BFS에서 실행기보다 느렸던 것과 같은 까닭). 남는
+0.7%쯤은 다른 실행에서 잰 것끼리라 나누지 않는다. 022의 JIT은 코드로 쓴 명령이 적은 블록을 컴파일하지 않거나, 그런 명령을 코드로
+써야 한다.
+
+은행 질의(여섯 번의 중앙값, ms): `per_branch` 5.25 → 5.15(−1.9%), `in_credit` 0.885 → 0.87(−1.7%), `large` 0.37 → 0.37,
+`ranks` 6.755 → 6.705(−0.7%).
+
+명령 수(`runs.sh counts`: 025의 `count.py`, 전과 후 두 번씩의 중앙값):
+
+| 질의 | 명령 | 사이클 |
+|---|---:|---:|
+| `per_branch` | +0.3% | −6.8% |
+| `in_credit` | −0.8% | −15.7% |
+| `large` | +0.2% | −4.1% |
+| `ranks` | +0.3% | −2.2% |
+| `none` | +0.5% | +1.1% |
+| `field` | +0.8% | −2.7% |
+| `found` | −0.5% | −2.0% |
+
+**고친 것.** 처음(`38e0280`)에는 루프가 없는 블록까지 모두 컴파일했다. 그때 `large`의 명령이 +15.7%, `field` +23.7%, `found`
++22.2%였다. 루프 없는 블록은 명령마다 `step`을 부르는 뼈대 그대로라 실행기보다 길었다. 루프가 있는 블록만 컴파일하고, 그런 블록이
+없는 모듈은 JIT을 두지 않고, 프레임의 필드를 하나씩 채우고, `group_of`를 인라인한 뒤(`b1b3c7b`) 위의 표가 됐다.
+
+### 기기 사이
+
+033의 `record.py`(aup의 검사 중 `transients`와 `computing`: 예제의 `pure-run` 46번)를 `git archive`로 묶은 같은 소스(`b1b3c7b`,
+aup `da7361a`)로 세 기기에서. Pi는 JIT으로, WSL2(x86-64)와 Mac(M3, macOS)은 실행기로 돈다. 029의 `compare.py`로 견주어
+Pi와 WSL2 46번 모두 같고, Pi와 Mac 46번 모두 같다(출력, 오류, 종료 코드). 기록은 `2026-10-05-pi.jsonl`, `-wsl.jsonl`,
+`-mac.jsonl`이다.
+
+### 바닥: 저장된 리스트에서 조각을 찾는 값
+
+`seekfloor.c`: 같은 분포의 간선 100만 개를 저장된 리스트(키 있는 B+트리)에 넣고, 노드 10만 개를 무작위 차례로, 노드마다 조각의 두
+경계를 찾고 첫 간선의 필드를 읽는다(`slice_of`가 하듯). 같은 차례로 C의 오프셋 배열(`start[v]`, `start[v + 1]`, `to[start[v]]`).
+
+| 노드 하나 | Pure (B+트리) | C (오프셋) |
+|---|---:|---:|
+| 다섯 라운드 | 372–388 ns | 21–29 ns |
+
+`indexfloor.c`: 022에서 생각한 색인을 리스트 밖에서. 잎을 B+트리처럼 흩어 두고(항목 32개, 열 셋, 따로 할당해 차례를 섞었다),
+키의 범위를 2의 거듭제곱 폭의 칸으로 나눠 칸마다 첫 항목의 잎과 자리, 위치를 둔다.
+
+| 노드 하나 | 색인 | C |
+|---|---:|---:|
+| 칸에 항목 여덟, 원점을 폭에 맞춤 | 124–134 ns | 17–18 ns |
+| 칸에 항목 서른둘 (폭이 노드 넷) | 376–469 ns | 17–19 ns |
+| 원점을 맞추지 않음 | 351–374 ns | 19–21 ns |
+
+C는 반복 하나가 명령 여덟 남짓이고 반복끼리 기다리지 않아, 노드마다의 DRAM 미스를 여럿 겹친다. B+트리는 뿌리에서 잎까지 서로
+기다리는 읽기가 넷이고, 색인도 칸에서 잎의 표, 잎으로 기다리는 읽기가 셋이다.
+
+### 바닥: 탐색 전체를 Pure의 표현으로
+
+`bfsfloor.c`: `bfs-run`의 그래프로 탐색 전체를 손으로 쓴 C로, 형태마다 번갈아 아홉 탐색. 모든 형태의 답(거리, 닿은 노드 수)이
+같다. 카운터는 이 스레드의 사용자 공간만(`perf_event_open`). 미리 읽기는 노드 i를 꺼낼 때 i + 16의 칸과 i + 8의 첫 간선이다.
+
+- `c`: 033의 `bfs.c` 그대로(오프셋, `to`, `depth`, 큐 모두 32비트).
+- `c_bits`: `bfs.c`에서 본 것을 비트로, `depth`는 볼 때만 쓴다(021의 "밝히는 것").
+- `packed`: Pure의 표현을 그대로, 검사도 그대로. 간선은 저장된 키 있는 리스트를 열(키, `to`: 수)로 펴고 칸의 색인(칸마다 그 시작
+ 이상인 첫 위치, 칸은 2의 거듭제곱 폭, 원점을 맞춤)을 둔다. `seen`은 조밀한 이벤트의 리스트(키의 비트, `node`와 `depth`의 열),
+ 큐는 납작한 이벤트의 리스트. 실행량도 실행기처럼 매긴다.
+- `narrow`: `packed`에서 열을 값에 맞게 좁힌다. `to`와 큐의 `node`는 u32, `seen`의 `depth`는 u8, `seen`의 `node` 열은 두지 않는다
+ (조밀한 리스트의 키 열은 키 그 자체다).
+- `ahead`, `narrow_ahead`, `c_ahead`: 각각에 미리 읽기를 더한 것.
+
+| 탐색 하나의 중앙값 | 시간 | 명령 | 사이클 | IPC | 분기 미스 | L1D 미스 | LLC 미스 |
+|---|---:|---:|---:|---:|---:|---:|---:|
+| `c` | **9.89 ms** | 9.9M | 22.5M | 0.44 | 234k | 1,188k | 199k |
+| `c_bits` | 12.01 ms | 14.9M | 28.6M | 0.52 | 204k | 496k | 215k |
+| `packed` | 22.98 ms | 29.1M | 54.4M | 0.53 | 196k | 689k | 1,326k |
+| `ahead` | 20.24 ms | 32.9M | 48.4M | 0.68 | 197k | 598k | 1,046k |
+| `narrow` | 13.18 ms | 18.5M | 31.1M | 0.60 | 201k | 451k | 212k |
+| `narrow_ahead` | **8.82 ms** | 21.7M | 20.5M | 1.06 | 201k | 261k | 169k |
+| `c_ahead` | 7.79 ms | 11.4M | 17.6M | 0.65 | 231k | 1,004k | 189k |
+
+- C의 시간은 DRAM이다(IPC 0.44). 간선의 줄을 처음 읽는 미스가 노드마다 하나둘이고, OoO가 그중 둘쯤을 겹친다.
+- `packed`가 C의 2.3배인 것은 명령이 아니라 미스다. 노드의 표들(색인 390 KB, `seen`의 열 둘 1.6 MB, 큐 800 KB)이 L3(2 MB)를
+ 넘는다. C의 표들(오프셋, `depth`, 큐 각 400 KB)은 든다.
+- 좁히면 미스가 C와 같아지고(212k), 남는 것은 명령(C의 1.9배)이다. 미리 읽으면 미스가 겹쳐 IPC가 1.06이 되고 C를 넘는다.
+ 다른 거리(i + 8에서 i + 64)로도 7.8–9.0 ms, 같은 실행의 C는 9.6–9.7 ms였다.
+- `c_bits`가 C보다 느린 것: C의 `depth[to]`는 L1을 놓쳐도 L2에서 오고 OoO가 겹친다. 비트는 L1 미스를 반으로 줄이지만 명령이
+ 간선마다 다섯쯤 늘어 그 몫이 더 크다.
+- `c_ahead`(C에 같은 미리 읽기)는 7.8 ms다. 기준은 커밋된 `bfs.c`이고, 이것은 맥락이다.
+
+## 판정
+
+미달부터.
+
+- **HTTP로 잰 BFS: 미달.** Pure 90.0 ms, C 9.08 ms(9.9배).
+- **코어만 잰 BFS: 미달.** Pure 89.4 ms. 기준은 C를 같은 프로세스에서 함께 돌리는 것이었는데, `bfs-run`은 C를 돌리지 않는다.
+ 같은 그래프의 C는 `bfsfloor`에서 9.6–9.9 ms다.
+- **TPC-C: 통과**(−2.8%, 기준 3% 안). 다만 여섯 쌍 모두 느렸고, 그중 2.1%가 JIT이다(위).
+- **은행 질의: 통과**(같거나 빠르다). **명령 수: 통과**(가장 큰 늘어남 +0.8%, 기준 1%).
+- **최소 확인: 통과.** `test-module`(세 표현과 B+트리만의 리스트를 매 걸음 견주는 것 포함)과 `make check`, aup와 Vega의 검사가
+ `PURE_JIT=1`과 `PURE_JIT=0`에서 모두 초록이다(`b1b3c7b`). 기기 사이 46번이 같다. 디렉터리는 넣지 않았으니 그 검사는 없다.
+- **밝히는 것.** 단계마다의 시간은 위의 표다. C의 `depth`를 비트로 바꾼 변형은 12.0 ms로 C보다 느리다. 첫 탐색이 디렉터리를
+ 만드는 값은 없다(디렉터리를 넣지 않았다).
+
+## 다음
+
+C를 넘으려면 `bfsfloor`의 `narrow_ahead`에 가까워야 한다. 022에서 산수와 기준을 먼저 적는다. 필요한 것은 넷이다.
+
+1. **저장된 키 있는 리스트를 배열로.** 바뀌지 않고 많이 찾는 리스트는 열의 배열과 칸의 색인으로 두고(찾기가 읽기 하나), 바뀌면
+ 트리로 돌린다. 스냅숏은 배열을 함께 쓴다.
+2. **좁은 열.** 배열의 수 열은 값이 허락하는 가장 좁은 정수(u8, u16, u32)로 두고, 맞지 않는 값이 오면 넓힌다. 조밀한 리스트의 키
+ 열은 두지 않는다. 뜻(수는 수)은 그대로다.
+3. **최적화하는 JIT.** 스택의 값을 레지스터에, 리스트의 표현과 열의 검사를 루프 머리로, 비교와 분기를 하나로, 이벤트의 리스트에
+ 넣기와 덧붙이기를 코드로. `narrow`의 명령 수(1,850만)에 가까워야 한다. 지금은 3억 1,900만이다.
+4. **미리 읽기.** 루프가 차례로 읽는 리스트의 값으로 다른 리스트를 키로 찾으면, 몇 번 뒤의 값으로 그 칸과 첫 항목을 미리 읽는다
+ (간접 접근의 소프트웨어 미리 읽기: 컴파일러의 일반적인 기법이다. BFS를 아는 코드가 아니다).
+
+`narrow_ahead`가 C를 넘는 폭은 11%뿐이다. JIT이 손으로 쓴 C만큼 짧지 않으면 넘지 못한다. 그것도 022에 적고 잰다.
diff --git a/research/experiments/038-past-c/2026-10-05-all-core.jsonl b/research/experiments/038-past-c/2026-10-05-all-core.jsonl
new file mode 100644
index 0000000..4cdedc4
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-core.jsonl
@@ -0,0 +1,12 @@
+{"version":"before","round":1,"run":{"nodes":100000,"edges":999937,"median_ms":190.19}}
+{"version":"after","round":1,"run":{"nodes":100000,"edges":999937,"median_ms":89.62}}
+{"version":"after","round":2,"run":{"nodes":100000,"edges":999937,"median_ms":93.60}}
+{"version":"before","round":2,"run":{"nodes":100000,"edges":999937,"median_ms":189.09}}
+{"version":"before","round":3,"run":{"nodes":100000,"edges":999937,"median_ms":189.01}}
+{"version":"after","round":3,"run":{"nodes":100000,"edges":999937,"median_ms":89.90}}
+{"version":"after","round":4,"run":{"nodes":100000,"edges":999937,"median_ms":89.57}}
+{"version":"before","round":4,"run":{"nodes":100000,"edges":999937,"median_ms":187.85}}
+{"version":"before","round":5,"run":{"nodes":100000,"edges":999937,"median_ms":188.83}}
+{"version":"after","round":5,"run":{"nodes":100000,"edges":999937,"median_ms":90.66}}
+{"version":"after","round":6,"run":{"nodes":100000,"edges":999937,"median_ms":89.50}}
+{"version":"before","round":6,"run":{"nodes":100000,"edges":999937,"median_ms":187.47}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-counts.jsonl b/research/experiments/038-past-c/2026-10-05-all-counts.jsonl
new file mode 100644
index 0000000..7fcc7d3
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-counts.jsonl
@@ -0,0 +1,4 @@
+{"serve": "pure-serve", "per_branch": {"instructions": 26854478, "cycles": 12059174}, "in_credit": {"instructions": 3501529, "cycles": 1832003}, "large": {"instructions": 1409751, "cycles": 787359}, "ranks": {"instructions": 24274828, "cycles": 16005362}, "none": {"instructions": 607421, "cycles": 190591}, "field": {"instructions": 8948906, "cycles": 3297479}, "found": {"instructions": 14151798, "cycles": 10664895}}
+{"serve": "pure-serve", "per_branch": {"instructions": 27754315, "cycles": 11940223}, "in_credit": {"instructions": 3477549, "cycles": 1578238}, "large": {"instructions": 1631770, "cycles": 692555}, "ranks": {"instructions": 24519401, "cycles": 15018849}, "none": {"instructions": 610579, "cycles": 187890}, "field": {"instructions": 11068871, "cycles": 4119454}, "found": {"instructions": 17299321, "cycles": 12138135}}
+{"serve": "pure-serve", "per_branch": {"instructions": 26649583, "cycles": 11858748}, "in_credit": {"instructions": 3455568, "cycles": 1721366}, "large": {"instructions": 1409743, "cycles": 604630}, "ranks": {"instructions": 24162425, "cycles": 14828585}, "none": {"instructions": 607413, "cycles": 187248}, "field": {"instructions": 8948898, "cycles": 3282575}, "found": {"instructions": 14153710, "cycles": 10515327}}
+{"serve": "pure-serve", "per_branch": {"instructions": 27706614, "cycles": 11868879}, "in_credit": {"instructions": 3466645, "cycles": 1599309}, "large": {"instructions": 1631682, "cycles": 706639}, "ranks": {"instructions": 24491994, "cycles": 15049755}, "none": {"instructions": 610579, "cycles": 189062}, "field": {"instructions": 11068871, "cycles": 4147589}, "found": {"instructions": 17296529, "cycles": 12221911}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-load.txt b/research/experiments/038-past-c/2026-10-05-all-load.txt
new file mode 100644
index 0000000..909d0d4
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-load.txt
@@ -0,0 +1,12 @@
+1 before 08:00:10 up 1 day, 4:21, 2 users, load average: 1.33, 0.96, 0.86
+1 after 08:01:47 up 1 day, 4:23, 3 users, load average: 1.35, 1.16, 0.95
+2 after 08:03:24 up 1 day, 4:24, 3 users, load average: 1.45, 1.33, 1.04
+2 before 08:04:51 up 1 day, 4:26, 3 users, load average: 1.46, 1.40, 1.09
+3 before 08:06:27 up 1 day, 4:27, 3 users, load average: 1.31, 1.43, 1.13
+3 after 08:07:55 up 1 day, 4:29, 3 users, load average: 1.43, 1.48, 1.18
+4 after 08:09:52 up 1 day, 4:31, 3 users, load average: 1.28, 1.57, 1.26
+4 before 08:11:36 up 1 day, 4:33, 3 users, load average: 1.38, 1.62, 1.31
+5 before 08:13:13 up 1 day, 4:34, 3 users, load average: 1.28, 1.59, 1.34
+5 after 08:14:50 up 1 day, 4:36, 3 users, load average: 1.30, 1.60, 1.37
+6 after 08:16:17 up 1 day, 4:37, 3 users, load average: 1.44, 1.62, 1.40
+6 before 08:18:03 up 1 day, 4:39, 3 users, load average: 1.30, 1.68, 1.46
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-after-1.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-after-1.jsonl
new file mode 100644
index 0000000..85ec3c0
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-after-1.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.2, "pure_fastest_ms": 5.09, "sqlite_median_ms": 46.28, "sqlite_fastest_ms": 46.18, "sqlite_indexed_median_ms": 14.68, "sqlite_indexed_fastest_ms": 14.65}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.79, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.89, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.39, "sqlite_median_ms": 1.5, "sqlite_fastest_ms": 1.48, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.48}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.76, "pure_fastest_ms": 6.71, "sqlite_median_ms": 2854.3, "sqlite_fastest_ms": 2848.69, "sqlite_indexed_median_ms": 7.58, "sqlite_indexed_fastest_ms": 7.55}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-after-2.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-after-2.jsonl
new file mode 100644
index 0000000..7e30265
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-after-2.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.21, "pure_fastest_ms": 5.15, "sqlite_median_ms": 45.33, "sqlite_fastest_ms": 45.17, "sqlite_indexed_median_ms": 14.05, "sqlite_indexed_fastest_ms": 14.03}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.82, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.39, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.73, "pure_fastest_ms": 6.65, "sqlite_median_ms": 2837.3, "sqlite_fastest_ms": 2832.93, "sqlite_indexed_median_ms": 7.56, "sqlite_indexed_fastest_ms": 7.49}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-after-3.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-after-3.jsonl
new file mode 100644
index 0000000..bc244e1
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-after-3.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.43, "pure_fastest_ms": 5.14, "sqlite_median_ms": 45.32, "sqlite_fastest_ms": 45.15, "sqlite_indexed_median_ms": 14.03, "sqlite_indexed_fastest_ms": 14.0}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.79, "pure_fastest_ms": 0.76, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.39, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.76, "pure_fastest_ms": 6.67, "sqlite_median_ms": 2839.13, "sqlite_fastest_ms": 2833.93, "sqlite_indexed_median_ms": 7.54, "sqlite_indexed_fastest_ms": 7.48}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-after-4.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-after-4.jsonl
new file mode 100644
index 0000000..49fa46c
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-after-4.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.19, "pure_fastest_ms": 5.11, "sqlite_median_ms": 47.71, "sqlite_fastest_ms": 47.59, "sqlite_indexed_median_ms": 14.19, "sqlite_indexed_fastest_ms": 14.17}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.82, "pure_fastest_ms": 0.78, "sqlite_median_ms": 6.75, "sqlite_fastest_ms": 6.74, "sqlite_indexed_median_ms": 0.18, "sqlite_indexed_fastest_ms": 0.18}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.42, "pure_fastest_ms": 0.4, "sqlite_median_ms": 1.75, "sqlite_fastest_ms": 1.67, "sqlite_indexed_median_ms": 1.69, "sqlite_indexed_fastest_ms": 1.67}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.82, "pure_fastest_ms": 6.72, "sqlite_median_ms": 3327.99, "sqlite_fastest_ms": 3325.18, "sqlite_indexed_median_ms": 8.61, "sqlite_indexed_fastest_ms": 8.55}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-after-5.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-after-5.jsonl
new file mode 100644
index 0000000..6a08da5
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-after-5.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.43, "pure_fastest_ms": 5.19, "sqlite_median_ms": 44.93, "sqlite_fastest_ms": 44.77, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.08}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.4, "pure_fastest_ms": 0.39, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.75, "pure_fastest_ms": 6.68, "sqlite_median_ms": 2837.17, "sqlite_fastest_ms": 2833.35, "sqlite_indexed_median_ms": 7.52, "sqlite_indexed_fastest_ms": 7.49}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-after-6.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-after-6.jsonl
new file mode 100644
index 0000000..a9db179
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-after-6.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.18, "pure_fastest_ms": 5.06, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.18, "sqlite_indexed_median_ms": 14.08, "sqlite_indexed_fastest_ms": 14.04}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.84, "pure_fastest_ms": 0.8, "sqlite_median_ms": 5.94, "sqlite_fastest_ms": 5.88, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.4, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.66, "pure_fastest_ms": 6.57, "sqlite_median_ms": 2836.79, "sqlite_fastest_ms": 2834.44, "sqlite_indexed_median_ms": 7.56, "sqlite_indexed_fastest_ms": 7.53}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-before-1.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-before-1.jsonl
new file mode 100644
index 0000000..a6b9bdb
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-before-1.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.17, "pure_fastest_ms": 5.1, "sqlite_median_ms": 46.08, "sqlite_fastest_ms": 45.19, "sqlite_indexed_median_ms": 14.06, "sqlite_indexed_fastest_ms": 14.01}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.94, "pure_fastest_ms": 0.86, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.7, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2839.92, "sqlite_fastest_ms": 2835.86, "sqlite_indexed_median_ms": 7.67, "sqlite_indexed_fastest_ms": 7.55}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-before-2.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-before-2.jsonl
new file mode 100644
index 0000000..c6ea096
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-before-2.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.27, "pure_fastest_ms": 5.21, "sqlite_median_ms": 45.27, "sqlite_fastest_ms": 45.14, "sqlite_indexed_median_ms": 14.01, "sqlite_indexed_fastest_ms": 13.99}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 1.15, "pure_fastest_ms": 0.91, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.75, "pure_fastest_ms": 6.71, "sqlite_median_ms": 2841.45, "sqlite_fastest_ms": 2835.99, "sqlite_indexed_median_ms": 7.63, "sqlite_indexed_fastest_ms": 7.52}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-before-3.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-before-3.jsonl
new file mode 100644
index 0000000..085beeb
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-before-3.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.28, "pure_fastest_ms": 5.12, "sqlite_median_ms": 45.83, "sqlite_fastest_ms": 45.45, "sqlite_indexed_median_ms": 14.12, "sqlite_indexed_fastest_ms": 14.05}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.94, "pure_fastest_ms": 0.89, "sqlite_median_ms": 5.97, "sqlite_fastest_ms": 5.9, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.49, "pure_fastest_ms": 0.39, "sqlite_median_ms": 1.5, "sqlite_fastest_ms": 1.48, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.97, "pure_fastest_ms": 6.85, "sqlite_median_ms": 2841.28, "sqlite_fastest_ms": 2830.73, "sqlite_indexed_median_ms": 7.55, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-before-4.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-before-4.jsonl
new file mode 100644
index 0000000..c672092
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-before-4.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.22, "pure_fastest_ms": 5.13, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.21, "sqlite_indexed_median_ms": 14.12, "sqlite_indexed_fastest_ms": 14.04}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.89, "pure_fastest_ms": 0.85, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.55, "sqlite_indexed_fastest_ms": 1.49}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.74, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2835.12, "sqlite_fastest_ms": 2832.84, "sqlite_indexed_median_ms": 7.65, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-before-5.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-before-5.jsonl
new file mode 100644
index 0000000..3d09a57
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-before-5.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.23, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.33, "sqlite_fastest_ms": 45.13, "sqlite_indexed_median_ms": 14.04, "sqlite_indexed_fastest_ms": 14.0}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.88, "pure_fastest_ms": 0.85, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.86, "pure_fastest_ms": 6.72, "sqlite_median_ms": 2842.3, "sqlite_fastest_ms": 2837.83, "sqlite_indexed_median_ms": 7.54, "sqlite_indexed_fastest_ms": 7.5}
diff --git a/research/experiments/038-past-c/2026-10-05-all-queries-before-6.jsonl b/research/experiments/038-past-c/2026-10-05-all-queries-before-6.jsonl
new file mode 100644
index 0000000..786288a
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-queries-before-6.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.21, "pure_fastest_ms": 5.1, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.13, "sqlite_indexed_median_ms": 14.1, "sqlite_indexed_fastest_ms": 14.05}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.89, "pure_fastest_ms": 0.86, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.76, "pure_fastest_ms": 6.7, "sqlite_median_ms": 2838.24, "sqlite_fastest_ms": 2833.02, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-after-1.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-1.jsonl
new file mode 100644
index 0000000..db36809
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-1.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.61, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43606, "new_orders_per_minute": 1166898, "undone_new_orders": 3726, "errors": 0, "new_order": {"done": 392700, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 374778, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 34969, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 34930, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "stock_level": {"done": 34758, "failed": 0, "p50_us": 288, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 44.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 457.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 457.3, "pure_state_mib": 232.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26498, "burst_events": 798767, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-after-2.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-2.jsonl
new file mode 100644
index 0000000..b10eb58
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-2.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.61, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43911, "new_orders_per_minute": 1175100, "undone_new_orders": 3765, "errors": 0, "new_order": {"done": 395465, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "payment": {"done": 377401, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35171, "failed": 0, "p50_us": 272, "p99_us": 1216}, "delivery": {"done": 35142, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "stock_level": {"done": 35036, "failed": 0, "p50_us": 304, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 44.6, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 460.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 460.1, "pure_state_mib": 233.8, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27263, "burst_events": 804329, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-after-3.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-3.jsonl
new file mode 100644
index 0000000..131120e
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-3.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43583, "new_orders_per_minute": 1166165, "undone_new_orders": 3730, "errors": 0, "new_order": {"done": 392453, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "payment": {"done": 374619, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 34942, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 34888, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "stock_level": {"done": 34751, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 44.8, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 457.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 457.3, "pure_state_mib": 232.2, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26818, "burst_events": 798315, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-after-4.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-4.jsonl
new file mode 100644
index 0000000..b083f6a
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-4.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.64, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 41759, "new_orders_per_minute": 1117498, "undone_new_orders": 3567, "errors": 0, "new_order": {"done": 376068, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "payment": {"done": 358853, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "order_status": {"done": 33549, "failed": 0, "p50_us": 272, "p99_us": 1600}, "delivery": {"done": 33440, "failed": 0, "p50_us": 1472, "p99_us": 4352}, "stock_level": {"done": 33266, "failed": 0, "p50_us": 304, "p99_us": 1728}, "server_threads": "3", "cpu_us_per_transaction": 45.5, "core_shares": {"pure-owner": 0.87, "pure-checkpoint": 0.01}, "resident_mib": 440.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 440.8, "pure_state_mib": 223.4, "pure_store_mib": 230.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 25938, "burst_events": 764874, "checkpoints": 37}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-after-5.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-5.jsonl
new file mode 100644
index 0000000..ee71290
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-5.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43900, "new_orders_per_minute": 1174562, "undone_new_orders": 3759, "errors": 0, "new_order": {"done": 395280, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 377376, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35216, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35144, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34989, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.7, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 459.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 459.7, "pure_state_mib": 233.7, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27029, "burst_events": 804123, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-after-6.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-6.jsonl
new file mode 100644
index 0000000..f90c0d0
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-after-6.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.61, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43756, "new_orders_per_minute": 1170782, "undone_new_orders": 3750, "errors": 0, "new_order": {"done": 394014, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "payment": {"done": 376146, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 35087, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35046, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "stock_level": {"done": 34842, "failed": 0, "p50_us": 304, "p99_us": 1344}, "server_threads": "3", "cpu_us_per_transaction": 44.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 458.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 458.2, "pure_state_mib": 233.0, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26788, "burst_events": 801541, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-before-1.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-1.jsonl
new file mode 100644
index 0000000..1df8df2
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-1.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.67, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.3, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44024, "new_orders_per_minute": 1178149, "undone_new_orders": 3774, "errors": 0, "new_order": {"done": 396494, "failed": 0, "p50_us": 1472, "p99_us": 3584}, "payment": {"done": 378360, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35289, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35249, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35091, "failed": 0, "p50_us": 304, "p99_us": 1344}, "server_threads": "3", "cpu_us_per_transaction": 45.0, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 460.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 460.9, "pure_state_mib": 234.4, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27159, "burst_events": 806412, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-before-2.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-2.jsonl
new file mode 100644
index 0000000..bab5a8d
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-2.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.68, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44753, "new_orders_per_minute": 1197413, "undone_new_orders": 3836, "errors": 0, "new_order": {"done": 402974, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 384660, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35891, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35820, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35706, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.5, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 467.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 467.8, "pure_state_mib": 237.8, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27857, "burst_events": 819704, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-before-3.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-3.jsonl
new file mode 100644
index 0000000..e390ff5
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-3.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.69, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44433, "new_orders_per_minute": 1188883, "undone_new_orders": 3811, "errors": 0, "new_order": {"done": 400112, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 381941, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35622, "failed": 0, "p50_us": 256, "p99_us": 1472}, "delivery": {"done": 35557, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 35438, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 44.1, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 465.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 465.2, "pure_state_mib": 236.3, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27450, "burst_events": 813884, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-before-4.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-4.jsonl
new file mode 100644
index 0000000..5c7bc53
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-4.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.7, "sqlite_load_s": 1.6, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45200, "new_orders_per_minute": 1209028, "undone_new_orders": 3884, "errors": 0, "new_order": {"done": 406894, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "payment": {"done": 388605, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "order_status": {"done": 36255, "failed": 0, "p50_us": 256, "p99_us": 1216}, "delivery": {"done": 36219, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 36037, "failed": 0, "p50_us": 288, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 43.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 472.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 472.6, "pure_state_mib": 239.9, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27498, "burst_events": 827918, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-before-5.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-5.jsonl
new file mode 100644
index 0000000..8941d6b
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-5.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.63, "pure_load_s": 0.68, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44927, "new_orders_per_minute": 1202043, "undone_new_orders": 3858, "errors": 0, "new_order": {"done": 404539, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "payment": {"done": 386118, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 36042, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35981, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35862, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.3, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 469.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 469.8, "pure_state_mib": 238.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27899, "burst_events": 822863, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-all-tpcc-before-6.jsonl b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-6.jsonl
new file mode 100644
index 0000000..8d99461
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-all-tpcc-before-6.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.67, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45102, "new_orders_per_minute": 1206256, "undone_new_orders": 3874, "errors": 0, "new_order": {"done": 405963, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 387805, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 36171, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 36139, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "stock_level": {"done": 35972, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.2, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 470.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 470.9, "pure_state_mib": 239.4, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28394, "burst_events": 826114, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-bfs-after.jsonl b/research/experiments/038-past-c/2026-10-05-bfs-after.jsonl
new file mode 100644
index 0000000..4c087e7
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-bfs-after.jsonl
@@ -0,0 +1,16 @@
+{"system": "c", "from": 42224, "to": 57393, "hops": 6, "reached": 99996, "us": 9075.3}
+{"system": "c", "from": 5153, "to": 48368, "hops": 6, "reached": 99996, "us": 8966.5}
+{"system": "c", "from": 73314, "to": 58793, "hops": 5, "reached": 99996, "us": 9099.1}
+{"system": "c", "from": 47063, "to": 90963, "hops": 5, "reached": 99996, "us": 9118.6}
+{"system": "c", "from": 67811, "to": 96464, "hops": 5, "reached": 99996, "us": 8969.1}
+{"system": "python", "from": 42224, "to": 57393, "us": 444156.6}
+{"system": "python", "from": 5153, "to": 48368, "us": 452602.5}
+{"system": "python", "from": 73314, "to": 58793, "us": 452320.5}
+{"system": "python", "from": 47063, "to": 90963, "us": 453484.8}
+{"system": "python", "from": 67811, "to": 96464, "us": 447112.7}
+{"system": "pure", "from": 42224, "to": 57393, "hops": 6, "reached": 99996, "us": 90149.1}
+{"system": "pure", "from": 5153, "to": 48368, "hops": 6, "reached": 99996, "us": 90034.1}
+{"system": "pure", "from": 73314, "to": 58793, "hops": 5, "reached": 99996, "us": 90225.1}
+{"system": "pure", "from": 47063, "to": 90963, "hops": 5, "reached": 99996, "us": 89507.8}
+{"system": "pure", "from": 67811, "to": 96464, "hops": 5, "reached": 99996, "us": 89302.6}
+{"nodes": 100000, "edges": 1000000, "median_us": {"c": 9075.3, "python": 452320.5, "pure": 90034.1}, "pure_over_c": 9.9, "pure_over_python": 0.2}
diff --git a/research/experiments/038-past-c/2026-10-05-bfs-before.jsonl b/research/experiments/038-past-c/2026-10-05-bfs-before.jsonl
new file mode 100644
index 0000000..05bae29
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-bfs-before.jsonl
@@ -0,0 +1,16 @@
+{"system": "c", "from": 42224, "to": 57393, "hops": 6, "reached": 99996, "us": 9116.6}
+{"system": "c", "from": 5153, "to": 48368, "hops": 6, "reached": 99996, "us": 9002.1}
+{"system": "c", "from": 73314, "to": 58793, "hops": 5, "reached": 99996, "us": 9034.8}
+{"system": "c", "from": 47063, "to": 90963, "hops": 5, "reached": 99996, "us": 9161.6}
+{"system": "c", "from": 67811, "to": 96464, "hops": 5, "reached": 99996, "us": 9033.9}
+{"system": "python", "from": 42224, "to": 57393, "us": 453990.2}
+{"system": "python", "from": 5153, "to": 48368, "us": 448669.7}
+{"system": "python", "from": 73314, "to": 58793, "us": 444486.0}
+{"system": "python", "from": 47063, "to": 90963, "us": 447183.9}
+{"system": "python", "from": 67811, "to": 96464, "us": 448532.1}
+{"system": "pure", "from": 42224, "to": 57393, "hops": 6, "reached": 99996, "us": 190269.9}
+{"system": "pure", "from": 5153, "to": 48368, "hops": 6, "reached": 99996, "us": 189651.7}
+{"system": "pure", "from": 73314, "to": 58793, "hops": 5, "reached": 99996, "us": 190159.8}
+{"system": "pure", "from": 47063, "to": 90963, "hops": 5, "reached": 99996, "us": 190025.3}
+{"system": "pure", "from": 67811, "to": 96464, "hops": 5, "reached": 99996, "us": 189926.2}
+{"nodes": 100000, "edges": 1000000, "median_us": {"c": 9034.8, "python": 448532.1, "pure": 190025.3}, "pure_over_c": 21.0, "pure_over_python": 0.42}
diff --git a/research/experiments/038-past-c/2026-10-05-bfsfloor.jsonl b/research/experiments/038-past-c/2026-10-05-bfsfloor.jsonl
new file mode 100644
index 0000000..a185a19
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-bfsfloor.jsonl
@@ -0,0 +1,64 @@
+{"form":"c","from":7767,"to":34553,"hops":5,"reached":99998,"ms":9.893,"instructions":9932340,"cycles":23487953,"branch_misses":233736,"l1d_misses":1187341,"llc_misses":203610,"work":0}
+{"form":"c_bits","from":7767,"to":34553,"hops":5,"reached":99998,"ms":12.008,"instructions":14900065,"cycles":28722449,"branch_misses":206692,"l1d_misses":495836,"llc_misses":214784,"work":0}
+{"form":"packed","from":7767,"to":34553,"hops":5,"reached":99998,"ms":23.025,"instructions":29099310,"cycles":54301349,"branch_misses":196295,"l1d_misses":689262,"llc_misses":1232563,"work":25997969}
+{"form":"ahead","from":7767,"to":34553,"hops":5,"reached":99998,"ms":20.020,"instructions":32898828,"cycles":47779042,"branch_misses":197651,"l1d_misses":598438,"llc_misses":987278,"work":25997969}
+{"form":"narrow","from":7767,"to":34553,"hops":5,"reached":99998,"ms":13.468,"instructions":18500090,"cycles":32078625,"branch_misses":202287,"l1d_misses":451759,"llc_misses":213172,"work":25997969}
+{"form":"narrow_ahead","from":7767,"to":34553,"hops":5,"reached":99998,"ms":8.513,"instructions":21699686,"cycles":20390305,"branch_misses":201713,"l1d_misses":260579,"llc_misses":167393,"work":25997969}
+{"form":"c_ahead","from":7767,"to":34553,"hops":5,"reached":99998,"ms":7.359,"instructions":11430814,"cycles":17606236,"branch_misses":232676,"l1d_misses":1003580,"llc_misses":179646,"work":0}
+{"form":"c_bits","from":18342,"to":39241,"hops":6,"reached":99998,"ms":12.300,"instructions":14900065,"cycles":29428156,"branch_misses":204574,"l1d_misses":495663,"llc_misses":222960,"work":0}
+{"form":"packed","from":18342,"to":39241,"hops":6,"reached":99998,"ms":22.668,"instructions":29099310,"cycles":54203054,"branch_misses":196715,"l1d_misses":688861,"llc_misses":1307486,"work":25997969}
+{"form":"ahead","from":18342,"to":39241,"hops":6,"reached":99998,"ms":20.038,"instructions":32898812,"cycles":47937674,"branch_misses":197464,"l1d_misses":598650,"llc_misses":1044824,"work":25997969}
+{"form":"narrow","from":18342,"to":39241,"hops":6,"reached":99998,"ms":12.859,"instructions":18500090,"cycles":30783796,"branch_misses":201360,"l1d_misses":451140,"llc_misses":204575,"work":25997969}
+{"form":"narrow_ahead","from":18342,"to":39241,"hops":6,"reached":99998,"ms":8.554,"instructions":21699673,"cycles":20485832,"branch_misses":201287,"l1d_misses":261872,"llc_misses":165410,"work":25997969}
+{"form":"c_ahead","from":18342,"to":39241,"hops":6,"reached":99998,"ms":7.315,"instructions":11430810,"cycles":17503220,"branch_misses":230888,"l1d_misses":1003483,"llc_misses":175369,"work":0}
+{"form":"c","from":18342,"to":39241,"hops":6,"reached":99998,"ms":9.355,"instructions":9930951,"cycles":22406369,"branch_misses":233974,"l1d_misses":1187041,"llc_misses":191730,"work":0}
+{"form":"packed","from":73728,"to":40868,"hops":6,"reached":99998,"ms":23.455,"instructions":29099310,"cycles":56106101,"branch_misses":196579,"l1d_misses":689277,"llc_misses":1342819,"work":25997969}
+{"form":"ahead","from":73728,"to":40868,"hops":6,"reached":99998,"ms":19.815,"instructions":32898826,"cycles":47410659,"branch_misses":197120,"l1d_misses":597989,"llc_misses":1017015,"work":25997969}
+{"form":"narrow","from":73728,"to":40868,"hops":6,"reached":99998,"ms":12.854,"instructions":18500090,"cycles":30774905,"branch_misses":200939,"l1d_misses":451284,"llc_misses":209514,"work":25997969}
+{"form":"narrow_ahead","from":73728,"to":40868,"hops":6,"reached":99998,"ms":8.825,"instructions":21699685,"cycles":21016757,"branch_misses":200643,"l1d_misses":262056,"llc_misses":179899,"work":25997969}
+{"form":"c_ahead","from":73728,"to":40868,"hops":6,"reached":99998,"ms":7.306,"instructions":11430813,"cycles":17502838,"branch_misses":230740,"l1d_misses":1003151,"llc_misses":179094,"work":0}
+{"form":"c","from":73728,"to":40868,"hops":6,"reached":99998,"ms":9.387,"instructions":9930951,"cycles":22455194,"branch_misses":234377,"l1d_misses":1186632,"llc_misses":192627,"work":0}
+{"form":"c_bits","from":73728,"to":40868,"hops":6,"reached":99998,"ms":11.621,"instructions":14900065,"cycles":27816896,"branch_misses":204369,"l1d_misses":495976,"llc_misses":201890,"work":0}
+{"form":"ahead","from":75932,"to":66396,"hops":6,"reached":99998,"ms":20.497,"instructions":32898828,"cycles":49004997,"branch_misses":197476,"l1d_misses":597148,"llc_misses":1077927,"work":25997969}
+{"form":"narrow","from":75932,"to":66396,"hops":6,"reached":99998,"ms":13.178,"instructions":18500090,"cycles":31539514,"branch_misses":201267,"l1d_misses":450844,"llc_misses":213376,"work":25997969}
+{"form":"narrow_ahead","from":75932,"to":66396,"hops":6,"reached":99998,"ms":8.892,"instructions":21699686,"cycles":21290048,"branch_misses":200290,"l1d_misses":261259,"llc_misses":189814,"work":25997969}
+{"form":"c_ahead","from":75932,"to":66396,"hops":6,"reached":99998,"ms":8.862,"instructions":11430814,"cycles":15903343,"branch_misses":230079,"l1d_misses":1004041,"llc_misses":188710,"work":0}
+{"form":"c","from":75932,"to":66396,"hops":6,"reached":99998,"ms":11.940,"instructions":9930951,"cycles":19047431,"branch_misses":232618,"l1d_misses":1187644,"llc_misses":193381,"work":0}
+{"form":"c_bits","from":75932,"to":66396,"hops":6,"reached":99998,"ms":15.014,"instructions":14900065,"cycles":23887899,"branch_misses":205470,"l1d_misses":496227,"llc_misses":210972,"work":0}
+{"form":"packed","from":75932,"to":66396,"hops":6,"reached":99998,"ms":28.065,"instructions":29099310,"cycles":44706603,"branch_misses":196111,"l1d_misses":689468,"llc_misses":1325763,"work":25997969}
+{"form":"narrow","from":9981,"to":23853,"hops":5,"reached":99998,"ms":16.546,"instructions":18500090,"cycles":26385819,"branch_misses":200816,"l1d_misses":450741,"llc_misses":206188,"work":25997969}
+{"form":"narrow_ahead","from":9981,"to":23853,"hops":5,"reached":99998,"ms":11.216,"instructions":21699673,"cycles":17912505,"branch_misses":199857,"l1d_misses":261199,"llc_misses":168879,"work":25997969}
+{"form":"c_ahead","from":9981,"to":23853,"hops":5,"reached":99998,"ms":9.443,"instructions":11430810,"cycles":14995169,"branch_misses":229397,"l1d_misses":1003278,"llc_misses":185435,"work":0}
+{"form":"c","from":9981,"to":23853,"hops":5,"reached":99998,"ms":10.045,"instructions":9930951,"cycles":22529054,"branch_misses":234213,"l1d_misses":1186532,"llc_misses":202356,"work":0}
+{"form":"c_bits","from":9981,"to":23853,"hops":5,"reached":99998,"ms":11.932,"instructions":14900065,"cycles":28559687,"branch_misses":204040,"l1d_misses":494528,"llc_misses":214535,"work":0}
+{"form":"packed","from":9981,"to":23853,"hops":5,"reached":99998,"ms":22.779,"instructions":29099310,"cycles":54516951,"branch_misses":196022,"l1d_misses":688534,"llc_misses":1332001,"work":25997969}
+{"form":"ahead","from":9981,"to":23853,"hops":5,"reached":99998,"ms":19.903,"instructions":32898812,"cycles":47463018,"branch_misses":197059,"l1d_misses":597987,"llc_misses":1020675,"work":25997969}
+{"form":"narrow_ahead","from":88611,"to":25600,"hops":5,"reached":99998,"ms":8.862,"instructions":21699710,"cycles":21204879,"branch_misses":201594,"l1d_misses":261874,"llc_misses":181351,"work":25997969}
+{"form":"c_ahead","from":88611,"to":25600,"hops":5,"reached":99998,"ms":7.483,"instructions":11430820,"cycles":17890265,"branch_misses":232032,"l1d_misses":1004194,"llc_misses":188616,"work":0}
+{"form":"c","from":88611,"to":25600,"hops":5,"reached":99998,"ms":9.386,"instructions":9930951,"cycles":22467787,"branch_misses":234928,"l1d_misses":1188217,"llc_misses":192856,"work":0}
+{"form":"c_bits","from":88611,"to":25600,"hops":5,"reached":99998,"ms":11.719,"instructions":14900065,"cycles":28043378,"branch_misses":203927,"l1d_misses":495484,"llc_misses":206609,"work":0}
+{"form":"packed","from":88611,"to":25600,"hops":5,"reached":99998,"ms":22.738,"instructions":29099310,"cycles":54386467,"branch_misses":196326,"l1d_misses":688793,"llc_misses":1324066,"work":25997969}
+{"form":"ahead","from":88611,"to":25600,"hops":5,"reached":99998,"ms":20.545,"instructions":32898856,"cycles":49150522,"branch_misses":197037,"l1d_misses":598891,"llc_misses":1069549,"work":25997969}
+{"form":"narrow","from":88611,"to":25600,"hops":5,"reached":99998,"ms":13.314,"instructions":18500090,"cycles":31844209,"branch_misses":201312,"l1d_misses":451140,"llc_misses":217122,"work":25997969}
+{"form":"c_ahead","from":2733,"to":47967,"hops":5,"reached":99998,"ms":7.793,"instructions":11430817,"cycles":18631072,"branch_misses":229852,"l1d_misses":1004655,"llc_misses":203546,"work":0}
+{"form":"c","from":2733,"to":47967,"hops":5,"reached":99998,"ms":9.522,"instructions":9930951,"cycles":22743304,"branch_misses":233023,"l1d_misses":1188121,"llc_misses":198782,"work":0}
+{"form":"c_bits","from":2733,"to":47967,"hops":5,"reached":99998,"ms":11.662,"instructions":14900065,"cycles":27883596,"branch_misses":204341,"l1d_misses":495791,"llc_misses":202861,"work":0}
+{"form":"packed","from":2733,"to":47967,"hops":5,"reached":99998,"ms":22.985,"instructions":29099310,"cycles":55007589,"branch_misses":196344,"l1d_misses":690977,"llc_misses":1343668,"work":25997969}
+{"form":"ahead","from":2733,"to":47967,"hops":5,"reached":99998,"ms":20.243,"instructions":32898842,"cycles":48435553,"branch_misses":196900,"l1d_misses":597917,"llc_misses":1046282,"work":25997969}
+{"form":"narrow","from":2733,"to":47967,"hops":5,"reached":99998,"ms":12.864,"instructions":18500090,"cycles":30765042,"branch_misses":200252,"l1d_misses":451422,"llc_misses":211986,"work":25997969}
+{"form":"narrow_ahead","from":2733,"to":47967,"hops":5,"reached":99998,"ms":8.518,"instructions":21699698,"cycles":20399094,"branch_misses":200184,"l1d_misses":261102,"llc_misses":165325,"work":25997969}
+{"form":"c","from":98620,"to":96461,"hops":6,"reached":99998,"ms":16.284,"instructions":9930951,"cycles":38851409,"branch_misses":234594,"l1d_misses":1188236,"llc_misses":329001,"work":0}
+{"form":"c_bits","from":98620,"to":96461,"hops":6,"reached":99998,"ms":20.373,"instructions":14900065,"cycles":48567008,"branch_misses":204327,"l1d_misses":499554,"llc_misses":356012,"work":0}
+{"form":"packed","from":98620,"to":96461,"hops":6,"reached":99998,"ms":34.495,"instructions":29099310,"cycles":82273937,"branch_misses":196834,"l1d_misses":692932,"llc_misses":1519517,"work":25997969}
+{"form":"ahead","from":98620,"to":96461,"hops":6,"reached":99998,"ms":28.981,"instructions":32898826,"cycles":69089041,"branch_misses":197307,"l1d_misses":603323,"llc_misses":1115223,"work":25997969}
+{"form":"narrow","from":98620,"to":96461,"hops":6,"reached":99998,"ms":22.534,"instructions":18500090,"cycles":53769663,"branch_misses":201621,"l1d_misses":460063,"llc_misses":337832,"work":25997969}
+{"form":"narrow_ahead","from":98620,"to":96461,"hops":6,"reached":99998,"ms":8.498,"instructions":21699685,"cycles":20343734,"branch_misses":199579,"l1d_misses":261002,"llc_misses":166157,"work":25997969}
+{"form":"c_ahead","from":98620,"to":96461,"hops":6,"reached":99998,"ms":8.831,"instructions":11430813,"cycles":21119982,"branch_misses":229712,"l1d_misses":1004261,"llc_misses":228017,"work":0}
+{"form":"c_bits","from":46549,"to":30775,"hops":5,"reached":99998,"ms":20.897,"instructions":14900065,"cycles":49901955,"branch_misses":204077,"l1d_misses":502095,"llc_misses":378592,"work":0}
+{"form":"packed","from":46549,"to":30775,"hops":5,"reached":99998,"ms":22.756,"instructions":29099310,"cycles":54423560,"branch_misses":196727,"l1d_misses":688990,"llc_misses":1284900,"work":25997969}
+{"form":"ahead","from":46549,"to":30775,"hops":5,"reached":99998,"ms":25.095,"instructions":32898826,"cycles":59843896,"branch_misses":197834,"l1d_misses":604245,"llc_misses":1054687,"work":25997969}
+{"form":"narrow","from":46549,"to":30775,"hops":5,"reached":99998,"ms":12.973,"instructions":18500090,"cycles":31063830,"branch_misses":201508,"l1d_misses":450698,"llc_misses":206936,"work":25997969}
+{"form":"narrow_ahead","from":46549,"to":30775,"hops":5,"reached":99998,"ms":10.642,"instructions":21699685,"cycles":25446318,"branch_misses":200506,"l1d_misses":264203,"llc_misses":232690,"work":25997969}
+{"form":"c_ahead","from":46549,"to":30775,"hops":5,"reached":99998,"ms":8.375,"instructions":11430813,"cycles":20022986,"branch_misses":232250,"l1d_misses":1004311,"llc_misses":205753,"work":0}
+{"form":"c","from":46549,"to":30775,"hops":5,"reached":99998,"ms":10.755,"instructions":9930951,"cycles":25537693,"branch_misses":234781,"l1d_misses":1187801,"llc_misses":222599,"work":0}
+{"nodes":100000,"edges":999937,"far":16,"near":8,"c_ms":9.893,"c_bits_ms":12.008,"packed_ms":22.985,"ahead_ms":20.243,"narrow_ms":13.178,"narrow_ahead_ms":8.825,"c_ahead_ms":7.793}
diff --git a/research/experiments/038-past-c/2026-10-05-core.jsonl b/research/experiments/038-past-c/2026-10-05-core.jsonl
new file mode 100644
index 0000000..81b63a2
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-core.jsonl
@@ -0,0 +1,12 @@
+{"version":"before","round":1,"run":{"nodes":100000,"edges":999937,"median_ms":190.61}}
+{"version":"after","round":1,"run":{"nodes":100000,"edges":999937,"median_ms":89.02}}
+{"version":"after","round":2,"run":{"nodes":100000,"edges":999937,"median_ms":89.95}}
+{"version":"before","round":2,"run":{"nodes":100000,"edges":999937,"median_ms":190.43}}
+{"version":"before","round":3,"run":{"nodes":100000,"edges":999937,"median_ms":189.56}}
+{"version":"after","round":3,"run":{"nodes":100000,"edges":999937,"median_ms":89.24}}
+{"version":"after","round":4,"run":{"nodes":100000,"edges":999937,"median_ms":89.76}}
+{"version":"before","round":4,"run":{"nodes":100000,"edges":999937,"median_ms":189.41}}
+{"version":"before","round":5,"run":{"nodes":100000,"edges":999937,"median_ms":188.96}}
+{"version":"after","round":5,"run":{"nodes":100000,"edges":999937,"median_ms":89.27}}
+{"version":"after","round":6,"run":{"nodes":100000,"edges":999937,"median_ms":89.46}}
+{"version":"before","round":6,"run":{"nodes":100000,"edges":999937,"median_ms":188.81}}
diff --git a/research/experiments/038-past-c/2026-10-05-counts.jsonl b/research/experiments/038-past-c/2026-10-05-counts.jsonl
new file mode 100644
index 0000000..ba13e58
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-counts.jsonl
@@ -0,0 +1,4 @@
+{"serve": "pure-serve", "per_branch": {"instructions": 26794984, "cycles": 11943369}, "in_credit": {"instructions": 3488207, "cycles": 1743096}, "large": {"instructions": 1409727, "cycles": 613038}, "ranks": {"instructions": 24242113, "cycles": 15123670}, "none": {"instructions": 607421, "cycles": 188599}, "field": {"instructions": 8948906, "cycles": 3291535}, "found": {"instructions": 14151661, "cycles": 10867346}}
+{"serve": "pure-serve", "per_branch": {"instructions": 26939157, "cycles": 11722003}, "in_credit": {"instructions": 3471686, "cycles": 1656089}, "large": {"instructions": 1412487, "cycles": 652969}, "ranks": {"instructions": 24334671, "cycles": 15036512}, "none": {"instructions": 610589, "cycles": 194449}, "field": {"instructions": 9021966, "cycles": 3219266}, "found": {"instructions": 14074877, "cycles": 10463967}}
+{"serve": "pure-serve", "per_branch": {"instructions": 26928496, "cycles": 13332290}, "in_credit": {"instructions": 3518262, "cycles": 2108290}, "large": {"instructions": 1409727, "cycles": 689961}, "ranks": {"instructions": 24314901, "cycles": 15475842}, "none": {"instructions": 607413, "cycles": 189929}, "field": {"instructions": 8948898, "cycles": 3324835}, "found": {"instructions": 14150501, "cycles": 10510103}}
+{"serve": "pure-serve", "per_branch": {"instructions": 26968256, "cycles": 11840922}, "in_credit": {"instructions": 3478297, "cycles": 1589455}, "large": {"instructions": 1412517, "cycles": 596259}, "ranks": {"instructions": 24351220, "cycles": 14894252}, "none": {"instructions": 610587, "cycles": 188253}, "field": {"instructions": 9021964, "cycles": 3220303}, "found": {"instructions": 14075963, "cycles": 10482017}}
diff --git a/research/experiments/038-past-c/2026-10-05-load.txt b/research/experiments/038-past-c/2026-10-05-load.txt
new file mode 100644
index 0000000..0aa9be6
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-load.txt
@@ -0,0 +1,12 @@
+1 before 08:42:43 up 1 day, 5:04, 3 users, load average: 0.97, 1.18, 1.42
+1 after 08:44:10 up 1 day, 5:05, 3 users, load average: 1.24, 1.25, 1.43
+2 after 08:45:37 up 1 day, 5:07, 3 users, load average: 1.40, 1.36, 1.45
+2 before 08:47:04 up 1 day, 5:08, 3 users, load average: 1.44, 1.43, 1.47
+3 before 08:48:41 up 1 day, 5:10, 3 users, load average: 1.38, 1.52, 1.51
+3 after 08:50:18 up 1 day, 5:11, 3 users, load average: 1.45, 1.60, 1.54
+4 after 08:53:41 up 1 day, 5:15, 3 users, load average: 0.44, 1.27, 1.44
+4 before 08:55:08 up 1 day, 5:16, 3 users, load average: 1.45, 1.42, 1.48
+5 before 08:56:45 up 1 day, 5:18, 3 users, load average: 1.28, 1.48, 1.51
+5 after 08:58:22 up 1 day, 5:19, 3 users, load average: 1.38, 1.56, 1.54
+6 after 09:00:09 up 1 day, 5:21, 3 users, load average: 1.39, 1.63, 1.57
+6 before 09:01:56 up 1 day, 5:23, 3 users, load average: 1.33, 1.64, 1.59
diff --git a/research/experiments/038-past-c/2026-10-05-mac.jsonl b/research/experiments/038-past-c/2026-10-05-mac.jsonl
new file mode 100644
index 0000000..2d46bf3
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-mac.jsonl
@@ -0,0 +1,46 @@
+{"module": "3db244824ba7031c8b15e074", "args": "de56dc3eef8a5879b1c0e11a", "input": "6f6f723b5b2b1d073eb31852", "output": "e05288002c2ec7e0a979331d", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "3db244824ba7031c8b15e074", "args": "d8828156ecd65e60e45b9a28", "input": "fbe8479cede4e0169db5bd3c", "output": "a48a5acdc64afac3703801e1", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 1}
+{"module": "3db244824ba7031c8b15e074", "args": "d8828156ecd65e60e45b9a28", "input": "014589aeac0c2073e4109988", "output": "0757b2550090a207b981ff59", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "3db244824ba7031c8b15e074", "args": "663f78393fb6b01805134031", "input": "e90023d1c1a98fe8f29c66f7", "output": "64de5f760484771e029ee2db", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "79473d03be4f37825d643bb4", "args": "663f78393fb6b01805134031", "input": "014589aeac0c2073e4109988", "output": "f0e31911d6426fdd54119699", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "c1ecc4ee7ec90bcfb37001e5", "output": "3d5445de368ca2c8bf66a7e4", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "bc80367cc7d4d60ffc4e05c4", "output": "41013ac265256089bd2db314", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "d65dcc87d1865446ad58251f", "output": "a56af04db60a9ca73070dd86", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "df61ae91b0dbbeec3ed32244", "output": "978440192b650cbc56e30c48", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "dd919ae0468a05b23e0d9a9f", "output": "03adcaaf50bfecfd1f280bc2", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "ea70cf4efe51953ab5587d5d", "output": "7ecadd6e41ef5940f0d2ec34", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "3aefbeb6b32cde88a4d13a13", "output": "d454160c620e2b4edcc80048", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "b87783732f62e8a5916f40f9", "output": "c910f6e4ed234fe3d9bc8000", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "06048f543c44e9549aed5380", "output": "04cb46b8d44cdab468d3f9f1", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "ea116d584f758ba6643016ae", "output": "b72ea0b108d5cff479fd7429", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "d54f58115e3ef8dcbe085440", "output": "f6d6b85220f5a8d31e0f9265", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "9451d0c2d1168269fcf5f6fc", "output": "9fe506baacb0fef012a9e8b7", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "b982935d7df6090f979d91ea", "output": "fed4cb9526a449119aa28532", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "61f7bf6528b1c1c4e8f113bb", "output": "6cf0ebd800a5261377d632e6", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "e4dfd4dd17162dd382a60fcb", "output": "9cde5df0327bf5d99ca384f3", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "8ede060b3e50523fddc7daf5", "output": "ec2c4ef210aa25f03bc5b622", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "481c8e83fbf3ebb98b86f070", "output": "9c8a78aaf0c0f5c527811a67", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "de6975a552e9a8cb4036adb5", "output": "63cc1d814549b919e82a5342", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "9fe8659271f0e6fa006c5235", "output": "a6d3bc8db62541b2b1dd2383", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "0a25f97536d9e82b5be07462", "output": "1589fc73897cd891e1831a3a", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4e046a7ed3cb40cc45d342eb", "output": "58a23d31f2781d2f9bb2efbe", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "dafce720362e20839691889a", "output": "ff6c52a25ce9ac14d61a8dd5", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "2c9ac77bc25fd11242f090a9", "output": "60ebabf1c5b5ba8963ba4509", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "9a02ebff2ce0b0729c073f84", "output": "6ef16fbb1a168b614898a77a", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "324e1b1ae84a7c5b7e0596ee", "output": "ad7cacb4845afa5b44060f54", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "fb3fdcb9bdeb303155f218c6", "output": "cfcb6cfa6005abf164d2b98c", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "260689f601f2ca1dbd7256d0", "output": "4245812252c260663c517479", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "f8ff5b14a7522493e3fb4e3b", "output": "20bffe8f65f93892017f36da", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "d69318266dc2c0526e05c15c", "output": "81b9ba6fbba20f22b1e8d197", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "91e5f193246627baee0a07b7", "output": "7501730ba25d2002ead09501", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "528afe05244d3f32c85ef88c", "output": "09bf07fc366c3707a9675b78", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "f51c23204014b3fa4d88668b", "output": "7a39d656b909502e91cf6a6d", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "cc0eaec10a4008f94cdc9bc3", "output": "69de8aa2e33c37027fd84085", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "b92d0ffda49d48f835a04563", "output": "6592523d8473a0d17ca77ec6", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "643a678d8d2a6fe9119d9521", "output": "0dd05cba6541524e5499df56", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "76d8851c1dab1804580417bd", "output": "d4b4ec037169e878d6e426f7", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "995364b7939d20833d5d279a", "output": "eb2ef6f2415e4d96b79623a4", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4829b1e000ae4e2d97943b29", "output": "fdf1755aa176fecd8fbe65c3", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4ef89ebfe266ab1dfb3f38b3", "output": "02f6b9e2bb1bfb6ce3ed8cdd", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "172a13c29dabde5000f2995f", "output": "26086a0ff7f1123c758d0938", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "88c83ecba368c17afcef40f7", "output": "911c65754a642979d61bb51b", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
diff --git a/research/experiments/038-past-c/2026-10-05-pi.jsonl b/research/experiments/038-past-c/2026-10-05-pi.jsonl
new file mode 100644
index 0000000..2d46bf3
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-pi.jsonl
@@ -0,0 +1,46 @@
+{"module": "3db244824ba7031c8b15e074", "args": "de56dc3eef8a5879b1c0e11a", "input": "6f6f723b5b2b1d073eb31852", "output": "e05288002c2ec7e0a979331d", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "3db244824ba7031c8b15e074", "args": "d8828156ecd65e60e45b9a28", "input": "fbe8479cede4e0169db5bd3c", "output": "a48a5acdc64afac3703801e1", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 1}
+{"module": "3db244824ba7031c8b15e074", "args": "d8828156ecd65e60e45b9a28", "input": "014589aeac0c2073e4109988", "output": "0757b2550090a207b981ff59", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "3db244824ba7031c8b15e074", "args": "663f78393fb6b01805134031", "input": "e90023d1c1a98fe8f29c66f7", "output": "64de5f760484771e029ee2db", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "79473d03be4f37825d643bb4", "args": "663f78393fb6b01805134031", "input": "014589aeac0c2073e4109988", "output": "f0e31911d6426fdd54119699", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "c1ecc4ee7ec90bcfb37001e5", "output": "3d5445de368ca2c8bf66a7e4", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "bc80367cc7d4d60ffc4e05c4", "output": "41013ac265256089bd2db314", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "d65dcc87d1865446ad58251f", "output": "a56af04db60a9ca73070dd86", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "df61ae91b0dbbeec3ed32244", "output": "978440192b650cbc56e30c48", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "dd919ae0468a05b23e0d9a9f", "output": "03adcaaf50bfecfd1f280bc2", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "ea70cf4efe51953ab5587d5d", "output": "7ecadd6e41ef5940f0d2ec34", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "3aefbeb6b32cde88a4d13a13", "output": "d454160c620e2b4edcc80048", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "b87783732f62e8a5916f40f9", "output": "c910f6e4ed234fe3d9bc8000", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "06048f543c44e9549aed5380", "output": "04cb46b8d44cdab468d3f9f1", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "ea116d584f758ba6643016ae", "output": "b72ea0b108d5cff479fd7429", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "d54f58115e3ef8dcbe085440", "output": "f6d6b85220f5a8d31e0f9265", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "9451d0c2d1168269fcf5f6fc", "output": "9fe506baacb0fef012a9e8b7", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "b982935d7df6090f979d91ea", "output": "fed4cb9526a449119aa28532", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "61f7bf6528b1c1c4e8f113bb", "output": "6cf0ebd800a5261377d632e6", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "e4dfd4dd17162dd382a60fcb", "output": "9cde5df0327bf5d99ca384f3", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "8ede060b3e50523fddc7daf5", "output": "ec2c4ef210aa25f03bc5b622", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "481c8e83fbf3ebb98b86f070", "output": "9c8a78aaf0c0f5c527811a67", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "de6975a552e9a8cb4036adb5", "output": "63cc1d814549b919e82a5342", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "9fe8659271f0e6fa006c5235", "output": "a6d3bc8db62541b2b1dd2383", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "0a25f97536d9e82b5be07462", "output": "1589fc73897cd891e1831a3a", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4e046a7ed3cb40cc45d342eb", "output": "58a23d31f2781d2f9bb2efbe", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "dafce720362e20839691889a", "output": "ff6c52a25ce9ac14d61a8dd5", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "2c9ac77bc25fd11242f090a9", "output": "60ebabf1c5b5ba8963ba4509", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "9a02ebff2ce0b0729c073f84", "output": "6ef16fbb1a168b614898a77a", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "324e1b1ae84a7c5b7e0596ee", "output": "ad7cacb4845afa5b44060f54", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "fb3fdcb9bdeb303155f218c6", "output": "cfcb6cfa6005abf164d2b98c", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "260689f601f2ca1dbd7256d0", "output": "4245812252c260663c517479", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "f8ff5b14a7522493e3fb4e3b", "output": "20bffe8f65f93892017f36da", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "d69318266dc2c0526e05c15c", "output": "81b9ba6fbba20f22b1e8d197", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "91e5f193246627baee0a07b7", "output": "7501730ba25d2002ead09501", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "528afe05244d3f32c85ef88c", "output": "09bf07fc366c3707a9675b78", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "f51c23204014b3fa4d88668b", "output": "7a39d656b909502e91cf6a6d", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "cc0eaec10a4008f94cdc9bc3", "output": "69de8aa2e33c37027fd84085", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "b92d0ffda49d48f835a04563", "output": "6592523d8473a0d17ca77ec6", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "643a678d8d2a6fe9119d9521", "output": "0dd05cba6541524e5499df56", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "76d8851c1dab1804580417bd", "output": "d4b4ec037169e878d6e426f7", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "995364b7939d20833d5d279a", "output": "eb2ef6f2415e4d96b79623a4", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4829b1e000ae4e2d97943b29", "output": "fdf1755aa176fecd8fbe65c3", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4ef89ebfe266ab1dfb3f38b3", "output": "02f6b9e2bb1bfb6ce3ed8cdd", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "172a13c29dabde5000f2995f", "output": "26086a0ff7f1123c758d0938", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "88c83ecba368c17afcef40f7", "output": "911c65754a642979d61bb51b", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-after-1.jsonl b/research/experiments/038-past-c/2026-10-05-queries-after-1.jsonl
new file mode 100644
index 0000000..40b9737
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-after-1.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.23, "pure_fastest_ms": 5.06, "sqlite_median_ms": 45.33, "sqlite_fastest_ms": 45.16, "sqlite_indexed_median_ms": 14.03, "sqlite_indexed_fastest_ms": 13.99}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.86, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.35, "pure_fastest_ms": 0.34, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.71, "pure_fastest_ms": 6.59, "sqlite_median_ms": 2839.21, "sqlite_fastest_ms": 2836.83, "sqlite_indexed_median_ms": 7.66, "sqlite_indexed_fastest_ms": 7.53}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-after-2.jsonl b/research/experiments/038-past-c/2026-10-05-queries-after-2.jsonl
new file mode 100644
index 0000000..493dd20
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-after-2.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.12, "pure_fastest_ms": 5.05, "sqlite_median_ms": 45.03, "sqlite_fastest_ms": 44.76, "sqlite_indexed_median_ms": 14.13, "sqlite_indexed_fastest_ms": 14.08}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.91, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.7, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2846.62, "sqlite_fastest_ms": 2844.33, "sqlite_indexed_median_ms": 7.61, "sqlite_indexed_fastest_ms": 7.5}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-after-3.jsonl b/research/experiments/038-past-c/2026-10-05-queries-after-3.jsonl
new file mode 100644
index 0000000..2bed071
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-after-3.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.1, "pure_fastest_ms": 5.03, "sqlite_median_ms": 46.08, "sqlite_fastest_ms": 45.35, "sqlite_indexed_median_ms": 14.09, "sqlite_indexed_fastest_ms": 13.99}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.36, "pure_fastest_ms": 0.34, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.65, "pure_fastest_ms": 6.59, "sqlite_median_ms": 2845.77, "sqlite_fastest_ms": 2841.68, "sqlite_indexed_median_ms": 7.61, "sqlite_indexed_fastest_ms": 7.49}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-after-4.jsonl b/research/experiments/038-past-c/2026-10-05-queries-after-4.jsonl
new file mode 100644
index 0000000..c7c4d6c
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-after-4.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.25, "pure_fastest_ms": 5.1, "sqlite_median_ms": 45.25, "sqlite_fastest_ms": 45.04, "sqlite_indexed_median_ms": 14.01, "sqlite_indexed_fastest_ms": 13.97}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.91, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.96, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.34, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.74, "pure_fastest_ms": 6.59, "sqlite_median_ms": 2848.42, "sqlite_fastest_ms": 2840.61, "sqlite_indexed_median_ms": 7.61, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-after-5.jsonl b/research/experiments/038-past-c/2026-10-05-queries-after-5.jsonl
new file mode 100644
index 0000000..7a8e1ec
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-after-5.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.06, "pure_fastest_ms": 5.01, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.12, "sqlite_indexed_median_ms": 14.05, "sqlite_indexed_fastest_ms": 14.02}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.78, "pure_fastest_ms": 0.74, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.51, "sqlite_indexed_fastest_ms": 1.48}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.59, "pure_fastest_ms": 6.53, "sqlite_median_ms": 2841.07, "sqlite_fastest_ms": 2837.72, "sqlite_indexed_median_ms": 7.6, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-after-6.jsonl b/research/experiments/038-past-c/2026-10-05-queries-after-6.jsonl
new file mode 100644
index 0000000..6022b93
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-after-6.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.18, "pure_fastest_ms": 5.05, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.18, "sqlite_indexed_median_ms": 14.09, "sqlite_indexed_fastest_ms": 14.04}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.88, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.96, "sqlite_fastest_ms": 5.89, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.73, "pure_fastest_ms": 6.67, "sqlite_median_ms": 2846.59, "sqlite_fastest_ms": 2842.49, "sqlite_indexed_median_ms": 7.6, "sqlite_indexed_fastest_ms": 7.53}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-before-1.jsonl b/research/experiments/038-past-c/2026-10-05-queries-before-1.jsonl
new file mode 100644
index 0000000..d2a77d9
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-before-1.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.28, "pure_fastest_ms": 5.15, "sqlite_median_ms": 45.47, "sqlite_fastest_ms": 45.26, "sqlite_indexed_median_ms": 14.09, "sqlite_indexed_fastest_ms": 14.05}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.89, "pure_fastest_ms": 0.84, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.36, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.83, "pure_fastest_ms": 6.74, "sqlite_median_ms": 2841.62, "sqlite_fastest_ms": 2835.52, "sqlite_indexed_median_ms": 7.6, "sqlite_indexed_fastest_ms": 7.53}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-before-2.jsonl b/research/experiments/038-past-c/2026-10-05-queries-before-2.jsonl
new file mode 100644
index 0000000..ec6ec98
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-before-2.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.21, "pure_fastest_ms": 5.13, "sqlite_median_ms": 46.05, "sqlite_fastest_ms": 45.91, "sqlite_indexed_median_ms": 14.48, "sqlite_indexed_fastest_ms": 14.43}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.86, "pure_fastest_ms": 0.83, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.89, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.4, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.74, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2855.5, "sqlite_fastest_ms": 2853.1, "sqlite_indexed_median_ms": 7.68, "sqlite_indexed_fastest_ms": 7.55}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-before-3.jsonl b/research/experiments/038-past-c/2026-10-05-queries-before-3.jsonl
new file mode 100644
index 0000000..8bf163e
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-before-3.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.26, "pure_fastest_ms": 5.17, "sqlite_median_ms": 45.32, "sqlite_fastest_ms": 45.15, "sqlite_indexed_median_ms": 14.15, "sqlite_indexed_fastest_ms": 14.08}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.88, "pure_fastest_ms": 0.85, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.75, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2841.48, "sqlite_fastest_ms": 2836.63, "sqlite_indexed_median_ms": 7.62, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-before-4.jsonl b/research/experiments/038-past-c/2026-10-05-queries-before-4.jsonl
new file mode 100644
index 0000000..cb5fd48
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-before-4.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.24, "pure_fastest_ms": 5.11, "sqlite_median_ms": 45.31, "sqlite_fastest_ms": 45.12, "sqlite_indexed_median_ms": 14.09, "sqlite_indexed_fastest_ms": 14.04}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.86, "pure_fastest_ms": 0.84, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.86, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.34, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.76, "pure_fastest_ms": 6.71, "sqlite_median_ms": 2841.01, "sqlite_fastest_ms": 2835.69, "sqlite_indexed_median_ms": 7.61, "sqlite_indexed_fastest_ms": 7.53}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-before-5.jsonl b/research/experiments/038-past-c/2026-10-05-queries-before-5.jsonl
new file mode 100644
index 0000000..d35be56
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-before-5.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.29, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.29, "sqlite_fastest_ms": 45.17, "sqlite_indexed_median_ms": 14.18, "sqlite_indexed_fastest_ms": 14.14}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.89, "pure_fastest_ms": 0.84, "sqlite_median_ms": 5.93, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.36, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.76, "pure_fastest_ms": 6.69, "sqlite_median_ms": 2839.18, "sqlite_fastest_ms": 2835.8, "sqlite_indexed_median_ms": 7.59, "sqlite_indexed_fastest_ms": 7.51}
diff --git a/research/experiments/038-past-c/2026-10-05-queries-before-6.jsonl b/research/experiments/038-past-c/2026-10-05-queries-before-6.jsonl
new file mode 100644
index 0000000..ee67ace
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-queries-before-6.jsonl
@@ -0,0 +1,4 @@
+{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.21, "pure_fastest_ms": 5.12, "sqlite_median_ms": 45.41, "sqlite_fastest_ms": 45.22, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.06}
+{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.96, "pure_fastest_ms": 0.86, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16}
+{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47}
+{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.73, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2843.47, "sqlite_fastest_ms": 2839.72, "sqlite_indexed_median_ms": 7.62, "sqlite_indexed_fastest_ms": 7.53}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-after-1.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-after-1.jsonl
new file mode 100644
index 0000000..dd877b3
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-after-1.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.6, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 42630, "new_orders_per_minute": 1140443, "undone_new_orders": 3635, "errors": 0, "new_order": {"done": 383783, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "payment": {"done": 366502, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "order_status": {"done": 34204, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 34148, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "stock_level": {"done": 33958, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 45.3, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 448.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 448.0, "pure_state_mib": 227.6, "pure_store_mib": 230.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26455, "burst_events": 780884, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-after-2.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-after-2.jsonl
new file mode 100644
index 0000000..37100f0
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-after-2.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43259, "new_orders_per_minute": 1157365, "undone_new_orders": 3700, "errors": 0, "new_order": {"done": 389490, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 371830, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 34712, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 34650, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "stock_level": {"done": 34494, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.6, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 453.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 453.8, "pure_state_mib": 230.6, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26641, "burst_events": 792352, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-after-3.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-after-3.jsonl
new file mode 100644
index 0000000..50f811e
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-after-3.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43560, "new_orders_per_minute": 1165696, "undone_new_orders": 3726, "errors": 0, "new_order": {"done": 392295, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 374391, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 34924, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 34900, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34698, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.5, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 457.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 457.2, "pure_state_mib": 232.1, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26935, "burst_events": 797944, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-after-4.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-after-4.jsonl
new file mode 100644
index 0000000..026d6b6
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-after-4.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.62, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 42781, "new_orders_per_minute": 1144775, "undone_new_orders": 3659, "errors": 0, "new_order": {"done": 385251, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "payment": {"done": 367667, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "order_status": {"done": 34340, "failed": 0, "p50_us": 272, "p99_us": 1600}, "delivery": {"done": 34272, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "stock_level": {"done": 34084, "failed": 0, "p50_us": 304, "p99_us": 1728}, "server_threads": "3", "cpu_us_per_transaction": 44.8, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 449.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 449.6, "pure_state_mib": 228.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26696, "burst_events": 783615, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-after-5.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-after-5.jsonl
new file mode 100644
index 0000000..0b17ed1
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-after-5.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43390, "new_orders_per_minute": 1160745, "undone_new_orders": 3718, "errors": 0, "new_order": {"done": 390633, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "payment": {"done": 373068, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 34788, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 34728, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34590, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 44.7, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 455.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 455.4, "pure_state_mib": 231.2, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26680, "burst_events": 794794, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-after-6.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-after-6.jsonl
new file mode 100644
index 0000000..e37a293
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-after-6.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43069, "new_orders_per_minute": 1152293, "undone_new_orders": 3690, "errors": 0, "new_order": {"done": 387789, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 370205, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "order_status": {"done": 34545, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 34526, "failed": 0, "p50_us": 1472, "p99_us": 3584}, "stock_level": {"done": 34308, "failed": 0, "p50_us": 304, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 45.5, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 452.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 452.3, "pure_state_mib": 229.7, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26728, "burst_events": 788914, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-before-1.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-before-1.jsonl
new file mode 100644
index 0000000..ff4fbd9
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-before-1.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.68, "sqlite_load_s": 1.63, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44584, "new_orders_per_minute": 1192648, "undone_new_orders": 3828, "errors": 0, "new_order": {"done": 401382, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 383296, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35776, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 35691, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35546, "failed": 0, "p50_us": 304, "p99_us": 1344}, "server_threads": "3", "cpu_us_per_transaction": 43.3, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 466.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 466.3, "pure_state_mib": 237.0, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27413, "burst_events": 816626, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-before-2.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-before-2.jsonl
new file mode 100644
index 0000000..3b02cff
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-before-2.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.68, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.3, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45341, "new_orders_per_minute": 1212946, "undone_new_orders": 3900, "errors": 0, "new_order": {"done": 408216, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "payment": {"done": 389836, "failed": 0, "p50_us": 1344, "p99_us": 3456}, "order_status": {"done": 36332, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 36326, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "stock_level": {"done": 36120, "failed": 0, "p50_us": 304, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 43.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 473.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 473.8, "pure_state_mib": 240.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28046, "burst_events": 830558, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-before-3.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-before-3.jsonl
new file mode 100644
index 0000000..a9c95d7
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-before-3.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.67, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44865, "new_orders_per_minute": 1200160, "undone_new_orders": 3859, "errors": 0, "new_order": {"done": 403913, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "payment": {"done": 385692, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35978, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 35935, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "stock_level": {"done": 35789, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 43.8, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 469.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 469.3, "pure_state_mib": 238.3, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28066, "burst_events": 821766, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-before-4.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-before-4.jsonl
new file mode 100644
index 0000000..07679d2
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-before-4.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.68, "sqlite_load_s": 1.62, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44245, "new_orders_per_minute": 1183695, "undone_new_orders": 3796, "errors": 0, "new_order": {"done": 398361, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "payment": {"done": 380310, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35506, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35437, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35284, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.5, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 463.3, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 463.3, "pure_state_mib": 235.4, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27323, "burst_events": 810396, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-before-5.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-before-5.jsonl
new file mode 100644
index 0000000..8fe6129
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-before-5.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.67, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44190, "new_orders_per_minute": 1182285, "undone_new_orders": 3787, "errors": 0, "new_order": {"done": 397882, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 379850, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 35429, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 35390, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 35242, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.6, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 463.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 463.7, "pure_state_mib": 235.1, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27532, "burst_events": 809415, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-before-6.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-before-6.jsonl
new file mode 100644
index 0000000..f2b24af
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-before-6.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.68, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44224, "new_orders_per_minute": 1183311, "undone_new_orders": 3795, "errors": 0, "new_order": {"done": 398240, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 380108, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35462, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 35433, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 35253, "failed": 0, "p50_us": 304, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 44.4, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 463.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 463.5, "pure_state_mib": 235.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27578, "burst_events": 810009, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit0-1.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-1.jsonl
new file mode 100644
index 0000000..3e07743
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-1.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.66, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43586, "new_orders_per_minute": 1166453, "undone_new_orders": 3727, "errors": 0, "new_order": {"done": 392559, "failed": 0, "p50_us": 1472, "p99_us": 3584}, "payment": {"done": 374609, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "order_status": {"done": 34936, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 34906, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34732, "failed": 0, "p50_us": 304, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 44.9, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 458.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 458.1, "pure_state_mib": 232.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27097, "burst_events": 798432, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit0-2.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-2.jsonl
new file mode 100644
index 0000000..7a0c140
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-2.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.66, "sqlite_load_s": 1.59, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44326, "new_orders_per_minute": 1185798, "undone_new_orders": 3812, "errors": 0, "new_order": {"done": 399078, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 381032, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35532, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 35499, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 35377, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 44.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 464.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 464.8, "pure_state_mib": 235.7, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27455, "burst_events": 811884, "checkpoints": 40}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit0-3.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-3.jsonl
new file mode 100644
index 0000000..7c89b80
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-3.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.67, "sqlite_load_s": 1.61, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43484, "new_orders_per_minute": 1163586, "undone_new_orders": 3722, "errors": 0, "new_order": {"done": 391585, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 373755, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 34870, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 34823, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 34649, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 45.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 456.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 456.8, "pure_state_mib": 231.7, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26913, "burst_events": 796526, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit0-4.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-4.jsonl
new file mode 100644
index 0000000..6e26216
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit0-4.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.69, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43771, "new_orders_per_minute": 1171008, "undone_new_orders": 3747, "errors": 0, "new_order": {"done": 394084, "failed": 0, "p50_us": 1472, "p99_us": 3456}, "payment": {"done": 376322, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "order_status": {"done": 35079, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 35049, "failed": 0, "p50_us": 1408, "p99_us": 3456}, "stock_level": {"done": 34894, "failed": 0, "p50_us": 304, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 45.3, "core_shares": {"pure-owner": 0.9, "pure-checkpoint": 0.01}, "resident_mib": 458.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 458.9, "pure_state_mib": 233.1, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27319, "burst_events": 801779, "checkpoints": 39}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit1-1.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-1.jsonl
new file mode 100644
index 0000000..21e7b2f
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-1.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.62, "sqlite_load_s": 1.6, "sqlite_page_size": 4096, "pure_resident_mib": 38.5, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 42380, "new_orders_per_minute": 1133811, "undone_new_orders": 3618, "errors": 0, "new_order": {"done": 381556, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "payment": {"done": 364279, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "order_status": {"done": 34041, "failed": 0, "p50_us": 272, "p99_us": 1600}, "delivery": {"done": 33963, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "stock_level": {"done": 33767, "failed": 0, "p50_us": 304, "p99_us": 1664}, "server_threads": "3", "cpu_us_per_transaction": 45.7, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 446.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 446.0, "pure_state_mib": 226.4, "pure_store_mib": 230.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26295, "burst_events": 776260, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit1-2.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-2.jsonl
new file mode 100644
index 0000000..58d4f45
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-2.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43122, "new_orders_per_minute": 1153645, "undone_new_orders": 3692, "errors": 0, "new_order": {"done": 388241, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "payment": {"done": 370719, "failed": 0, "p50_us": 1472, "p99_us": 3584}, "order_status": {"done": 34584, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 34519, "failed": 0, "p50_us": 1472, "p99_us": 3584}, "stock_level": {"done": 34378, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 45.4, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 452.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 452.4, "pure_state_mib": 229.9, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26502, "burst_events": 789871, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit1-3.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-3.jsonl
new file mode 100644
index 0000000..3245266
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-3.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.62, "sqlite_load_s": 1.57, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 42838, "new_orders_per_minute": 1146182, "undone_new_orders": 3660, "errors": 0, "new_order": {"done": 385722, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "payment": {"done": 368216, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "order_status": {"done": 34388, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 34314, "failed": 0, "p50_us": 1472, "p99_us": 3712}, "stock_level": {"done": 34132, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 45.4, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 450.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 450.0, "pure_state_mib": 228.6, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26506, "burst_events": 784670, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-tpcc-jit1-4.jsonl b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-4.jsonl
new file mode 100644
index 0000000..1c4a7ff
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-tpcc-jit1-4.jsonl
@@ -0,0 +1,3 @@
+{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.62, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 38.4, "sqlite_file_mib": 13.8}
+{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 42722, "new_orders_per_minute": 1143209, "undone_new_orders": 3649, "errors": 0, "new_order": {"done": 384720, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "payment": {"done": 367177, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "order_status": {"done": 34285, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 34209, "failed": 0, "p50_us": 1472, "p99_us": 4096}, "stock_level": {"done": 34043, "failed": 0, "p50_us": 304, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 45.4, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 449.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []}
+{"step": "end", "pure_resident_mib": 449.4, "pure_state_mib": 228.1, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 26838, "burst_events": 782539, "checkpoints": 38}}
diff --git a/research/experiments/038-past-c/2026-10-05-wsl.jsonl b/research/experiments/038-past-c/2026-10-05-wsl.jsonl
new file mode 100644
index 0000000..2d46bf3
--- /dev/null
+++ b/research/experiments/038-past-c/2026-10-05-wsl.jsonl
@@ -0,0 +1,46 @@
+{"module": "3db244824ba7031c8b15e074", "args": "de56dc3eef8a5879b1c0e11a", "input": "6f6f723b5b2b1d073eb31852", "output": "e05288002c2ec7e0a979331d", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "3db244824ba7031c8b15e074", "args": "d8828156ecd65e60e45b9a28", "input": "fbe8479cede4e0169db5bd3c", "output": "a48a5acdc64afac3703801e1", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 1}
+{"module": "3db244824ba7031c8b15e074", "args": "d8828156ecd65e60e45b9a28", "input": "014589aeac0c2073e4109988", "output": "0757b2550090a207b981ff59", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "3db244824ba7031c8b15e074", "args": "663f78393fb6b01805134031", "input": "e90023d1c1a98fe8f29c66f7", "output": "64de5f760484771e029ee2db", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "79473d03be4f37825d643bb4", "args": "663f78393fb6b01805134031", "input": "014589aeac0c2073e4109988", "output": "f0e31911d6426fdd54119699", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "c1ecc4ee7ec90bcfb37001e5", "output": "3d5445de368ca2c8bf66a7e4", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "bc80367cc7d4d60ffc4e05c4", "output": "41013ac265256089bd2db314", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "d65dcc87d1865446ad58251f", "output": "a56af04db60a9ca73070dd86", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "df61ae91b0dbbeec3ed32244", "output": "978440192b650cbc56e30c48", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "dd919ae0468a05b23e0d9a9f", "output": "03adcaaf50bfecfd1f280bc2", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "ea70cf4efe51953ab5587d5d", "output": "7ecadd6e41ef5940f0d2ec34", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "3aefbeb6b32cde88a4d13a13", "output": "d454160c620e2b4edcc80048", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "b87783732f62e8a5916f40f9", "output": "c910f6e4ed234fe3d9bc8000", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "06048f543c44e9549aed5380", "output": "04cb46b8d44cdab468d3f9f1", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "ea116d584f758ba6643016ae", "output": "b72ea0b108d5cff479fd7429", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "d54f58115e3ef8dcbe085440", "output": "f6d6b85220f5a8d31e0f9265", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "9451d0c2d1168269fcf5f6fc", "output": "9fe506baacb0fef012a9e8b7", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "b982935d7df6090f979d91ea", "output": "fed4cb9526a449119aa28532", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "61f7bf6528b1c1c4e8f113bb", "output": "6cf0ebd800a5261377d632e6", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "e4dfd4dd17162dd382a60fcb", "output": "9cde5df0327bf5d99ca384f3", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "8ede060b3e50523fddc7daf5", "output": "ec2c4ef210aa25f03bc5b622", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "481c8e83fbf3ebb98b86f070", "output": "9c8a78aaf0c0f5c527811a67", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "de6975a552e9a8cb4036adb5", "output": "63cc1d814549b919e82a5342", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "9fe8659271f0e6fa006c5235", "output": "a6d3bc8db62541b2b1dd2383", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "eb07ff67b6a21387ad3f57ac", "args": "7ca4a61d7a886da987496de4", "input": "0a25f97536d9e82b5be07462", "output": "1589fc73897cd891e1831a3a", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4e046a7ed3cb40cc45d342eb", "output": "58a23d31f2781d2f9bb2efbe", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "dafce720362e20839691889a", "output": "ff6c52a25ce9ac14d61a8dd5", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "2c9ac77bc25fd11242f090a9", "output": "60ebabf1c5b5ba8963ba4509", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "9a02ebff2ce0b0729c073f84", "output": "6ef16fbb1a168b614898a77a", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "324e1b1ae84a7c5b7e0596ee", "output": "ad7cacb4845afa5b44060f54", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "fb3fdcb9bdeb303155f218c6", "output": "cfcb6cfa6005abf164d2b98c", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "260689f601f2ca1dbd7256d0", "output": "4245812252c260663c517479", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "f8ff5b14a7522493e3fb4e3b", "output": "20bffe8f65f93892017f36da", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "d69318266dc2c0526e05c15c", "output": "81b9ba6fbba20f22b1e8d197", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "91e5f193246627baee0a07b7", "output": "7501730ba25d2002ead09501", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "528afe05244d3f32c85ef88c", "output": "09bf07fc366c3707a9675b78", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "f51c23204014b3fa4d88668b", "output": "7a39d656b909502e91cf6a6d", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "cc0eaec10a4008f94cdc9bc3", "output": "69de8aa2e33c37027fd84085", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "b92d0ffda49d48f835a04563", "output": "6592523d8473a0d17ca77ec6", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "643a678d8d2a6fe9119d9521", "output": "0dd05cba6541524e5499df56", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "76d8851c1dab1804580417bd", "output": "d4b4ec037169e878d6e426f7", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "995364b7939d20833d5d279a", "output": "eb2ef6f2415e4d96b79623a4", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4829b1e000ae4e2d97943b29", "output": "fdf1755aa176fecd8fbe65c3", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "4ef89ebfe266ab1dfb3f38b3", "output": "02f6b9e2bb1bfb6ce3ed8cdd", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "172a13c29dabde5000f2995f", "output": "26086a0ff7f1123c758d0938", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
+{"module": "770a9bded98908db97e56858", "args": "6949bab2263fede197bb7234", "input": "88c83ecba368c17afcef40f7", "output": "911c65754a642979d61bb51b", "errors": "e3b0c44298fc1c149afbf4c8", "exit": 0}
diff --git a/research/experiments/038-past-c/bfs-run.c b/research/experiments/038-past-c/bfs-run.c
new file mode 100644
index 0000000..4d5ca82
--- /dev/null
+++ b/research/experiments/038-past-c/bfs-run.c
@@ -0,0 +1,88 @@
+/* A breadth first search in one event, on the core alone (research 121):
+ * 033's graph.aup, a random graph of NODES nodes and EDGES edges (from and
+ * to uniform, no loops, each pair once; its own generator, seeded), loaded
+ * as rows, then ROUNDS searches from fixed starts, each timed. No host, no
+ * store: what the interpreter costs.
+ *
+ * bfs-run MODULE NODES EDGES ROUNDS a JSON line per search, then the median */
+#define _POSIX_C_SOURCE 200809L
+#include "module.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+static uint64_t state = 121;
+static uint64_t next(void) { state ^= state << 13; state ^= state >> 7; state ^= state << 17; return state; }
+
+static int compare(const void *a, const void *b) {
+ double x = *(const double *)a, y = *(const double *)b;
+ return (x > y) - (x < y);
+}
+
+static int edge_order(const void *a, const void *b) {
+ uint64_t x = *(const uint64_t *)a, y = *(const uint64_t *)b;
+ return (x > y) - (x < y);
+}
+
+int main(int argc, char **argv) {
+ if (argc != 5) { fputs("bfs-run MODULE NODES EDGES ROUNDS\n", stderr); return 2; }
+ uint32_t nodes = (uint32_t)atol(argv[2]);
+ size_t edges = (size_t)atol(argv[3]), rounds = (size_t)atol(argv[4]);
+ static PureModule module;
+ char error[160];
+ if (pure_module_read(argv[1], &module, error, sizeof(error)) != PURE_OK) { fprintf(stderr, "%s\n", error); return 1; }
+ int size = pure_module_input(&module, "size"), load = pure_module_input(&module, "load"),
+ route = pure_module_input(&module, "route"), hops = pure_module_state(&module, "hops"),
+ reached = pure_module_state(&module, "reached");
+ static PureApp app;
+ if (pure_app_start(&app, &module, (PureData){0}) != PURE_OK) return 1;
+ /* Edges as from * 2^20 + to, sorted, each once (the few drawn twice once). */
+ uint64_t *keys = malloc(edges * sizeof(*keys));
+ size_t count = 0;
+ while (count < edges) {
+ uint64_t a = next() % nodes, b = next() % nodes;
+ if (a != b) keys[count++] = a << 20 | b;
+ }
+ qsort(keys, count, sizeof(*keys), edge_order);
+ size_t unique = 0;
+ for (size_t i = 0; i < count; ++i)
+ if (!unique || keys[i] != keys[unique - 1]) keys[unique++] = keys[i];
+ unsigned char four[4] = {(unsigned char)nodes, (unsigned char)(nodes >> 8), (unsigned char)(nodes >> 16),
+ (unsigned char)(nodes >> 24)};
+ if (pure_app_message(&app, (uint32_t)size, NULL, -1, (PureSpan){four, 4}) != PURE_OK) return 1;
+ enum { CHUNK = 65536 };
+ double *rows = malloc(CHUNK * 2 * sizeof(*rows));
+ for (size_t at = 0; at < unique; at += CHUNK) {
+ size_t n = unique - at < CHUNK ? unique - at : CHUNK;
+ for (size_t k = 0; k < n; ++k) rows[2 * k] = (double)keys[at + k], rows[2 * k + 1] = (double)(keys[at + k] & 0xFFFFF);
+ if (pure_app_message(&app, (uint32_t)load, NULL, -1, (PureSpan){(unsigned char *)rows, n * 16}) != PURE_OK) {
+ fprintf(stderr, "load failed: %s\n", pure_fault_name(app.fault));
+ return 1;
+ }
+ }
+ if (getenv("BFS_WAIT")) { /* loaded: a counter attaches, then a line on stdin starts the searches */
+ fprintf(stderr, "loaded\n");
+ fflush(stderr);
+ (void)getchar();
+ }
+ double *took = malloc(rounds * sizeof(*took));
+ for (size_t r = 0; r < rounds; ++r) {
+ uint32_t from = (uint32_t)(next() % nodes), to = (uint32_t)(next() % nodes);
+ if (r) next(), next(); /* each search its own pair, whatever came before */
+ unsigned char eight[8];
+ for (int i = 0; i < 4; ++i) eight[i] = (unsigned char)(from >> (8 * i)), eight[4 + i] = (unsigned char)(to >> (8 * i));
+ struct timespec a, b;
+ clock_gettime(CLOCK_MONOTONIC, &a);
+ PureResult result = pure_app_message(&app, (uint32_t)route, NULL, -1, (PureSpan){eight, 8});
+ clock_gettime(CLOCK_MONOTONIC, &b);
+ if (result != PURE_OK) { fprintf(stderr, "route failed: %s\n", pure_fault_name(app.fault)); return 1; }
+ took[r] = (double)(b.tv_sec - a.tv_sec) * 1e3 + (double)(b.tv_nsec - a.tv_nsec) / 1e6;
+ printf("{\"from\":%u,\"to\":%u,\"hops\":%g,\"reached\":%g,\"ms\":%.2f,\"work\":%llu}\n", from, to,
+ app.values[hops].num, app.values[reached].num, took[r], (unsigned long long)app.work);
+ }
+ qsort(took, rounds, sizeof(*took), compare);
+ printf("{\"nodes\":%u,\"edges\":%zu,\"median_ms\":%.2f}\n", nodes, unique, took[rounds / 2]);
+ pure_app_stop(&app);
+ return 0;
+}
diff --git a/research/experiments/038-past-c/bfsfloor.c b/research/experiments/038-past-c/bfsfloor.c
new file mode 100644
index 0000000..a6258a8
--- /dev/null
+++ b/research/experiments/038-past-c/bfsfloor.c
@@ -0,0 +1,334 @@
+/* The floor before building more (research 123): the whole breadth first
+ * search of 033's graph.aup as Pure could run it at best, written by hand in
+ * C, against 033's bfs.c on the same graph (bfs-run's) in the same run.
+ *
+ * c bfs.c's loop: offsets (u32), to (u32), depth (int32), queue (u32)
+ * c_bits bfs.c with what it has seen as bits, depth written only when seen
+ * (021's context: where Pure's share would come from)
+ * packed Pure's representations, every check kept: edges a stored keyed
+ * list packed as columns (key, to: doubles) with a bucket index
+ * (the first position at or past each bucket's start; buckets a
+ * power of two of keys wide, starts aligned); seen a dense event
+ * list (key bits, node and depth columns by key, count); queue a
+ * flat event list (node column, count); the work charged as the
+ * executor does (EACH: the block's length times its items; LOOP:
+ * each round)
+ * ahead packed, and while taking node i, the bucket of node i + FAR and
+ * the first edge of node i + NEAR are read ahead (prefetch)
+ * narrow packed with columns as narrow as their values: to and the queue's
+ * node u32, the bucket index u32, seen's depth u8 and no node
+ * column (a dense list's key column is its keys)
+ * narrow_ahead narrow, read ahead as ahead
+ * c_ahead bfs.c read ahead as ahead (context: what C would gain)
+ *
+ * bfsfloor NODES EDGES SEARCHES [FAR NEAR]: a JSON line per search and form
+ * (the forms in turns; the answers must agree), with this thread's counters
+ * (user space), then the medians. */
+#define _GNU_SOURCE
+#include <math.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <linux/perf_event.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+/* Counters of this thread, user space only: instructions, cycles, branch misses, L1D read misses, LLC read misses. */
+enum { COUNTERS = 5 };
+static int counter[COUNTERS];
+static void counters_open(void) {
+ static const struct { uint32_t type; uint64_t config; } what[COUNTERS] = {
+ {PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS}, {PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES},
+ {PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_MISSES},
+ {PERF_TYPE_HW_CACHE, PERF_COUNT_HW_CACHE_L1D | PERF_COUNT_HW_CACHE_OP_READ << 8 | PERF_COUNT_HW_CACHE_RESULT_MISS << 16},
+ {PERF_TYPE_HW_CACHE, PERF_COUNT_HW_CACHE_LL | PERF_COUNT_HW_CACHE_OP_READ << 8 | PERF_COUNT_HW_CACHE_RESULT_MISS << 16}};
+ for (int i = 0; i < COUNTERS; ++i) {
+ struct perf_event_attr a = {.size = sizeof(a), .type = what[i].type, .config = what[i].config, .exclude_kernel = 1,
+ .exclude_hv = 1};
+ counter[i] = (int)syscall(SYS_perf_event_open, &a, 0, -1, -1, 0);
+ }
+}
+static void counters_read(uint64_t *v) {
+ for (int i = 0; i < COUNTERS; ++i) if (counter[i] < 0 || read(counter[i], &v[i], 8) != 8) v[i] = 0;
+}
+
+static uint64_t state = 121;
+static uint64_t next(void) { state ^= state << 13; state ^= state >> 7; state ^= state << 17; return state; }
+static double now(void) { struct timespec t; clock_gettime(CLOCK_MONOTONIC, &t); return t.tv_sec * 1e3 + t.tv_nsec / 1e6; }
+static int by_key(const void *a, const void *b) { uint64_t x = *(const uint64_t *)a, y = *(const uint64_t *)b; return (x > y) - (x < y); }
+static int by_num(const void *a, const void *b) { double x = *(const double *)a, y = *(const double *)b; return (x > y) - (x < y); }
+
+typedef struct { int hops; uint32_t reached; uint64_t work; } Answer;
+
+/* ---- bfs.c */
+static uint32_t n, m, *start, *to32, *queue32;
+static int32_t *depth32;
+
+static Answer search_c(uint32_t s, uint32_t t) {
+ for (uint32_t v = 0; v < n; ++v) depth32[v] = -1;
+ uint32_t head = 0, tail = 0;
+ queue32[tail++] = s;
+ depth32[s] = 0;
+ while (head < tail) {
+ uint32_t v = queue32[head++];
+ for (uint32_t k = start[v]; k < start[v + 1]; ++k)
+ if (depth32[to32[k]] < 0) { depth32[to32[k]] = depth32[v] + 1; queue32[tail++] = to32[k]; }
+ }
+ return (Answer){depth32[t], tail, 0};
+}
+
+static uint64_t *seen_bits;
+
+static Answer search_c_bits(uint32_t s, uint32_t t) {
+ memset(seen_bits, 0, (n + 63) / 64 * 8);
+ uint32_t head = 0, tail = 0;
+ queue32[tail++] = s;
+ seen_bits[s >> 6] |= 1ull << (s & 63), depth32[s] = 0;
+ while (head < tail) {
+ uint32_t v = queue32[head++];
+ int32_t d = depth32[v] + 1;
+ for (uint32_t k = start[v]; k < start[v + 1]; ++k) {
+ uint32_t w = to32[k];
+ if (!(seen_bits[w >> 6] >> (w & 63) & 1)) { seen_bits[w >> 6] |= 1ull << (w & 63), depth32[w] = d; queue32[tail++] = w; }
+ }
+ }
+ return (Answer){seen_bits[t >> 6] >> (t & 63) & 1 ? depth32[t] : -1, tail, 0};
+}
+
+/* ---- Pure's representations */
+typedef struct { size_t count; double *key, *to; double low, scale; size_t buckets; uint32_t *first; } Packed;
+typedef struct { size_t count, keys; uint64_t *bits; double *node, *depth; } Dense;
+typedef struct { size_t count, room; double *node; } Flat;
+static Packed edges;
+static Dense seen;
+static Flat queue;
+enum { EACH_LENGTH = 23, LOOP_LENGTH = 30 }; /* the blocks' lengths, as graph.aup compiles (the charge is what matters, not the value) */
+
+/* The first position whose key is not below key: the bucket's first, then on while below. */
+static inline __attribute__((always_inline)) size_t seek(const Packed *p, double key) {
+ double at = (key - p->low) * p->scale;
+ if (!(at >= 0)) at = 0;
+ if (at >= (double)p->buckets) return p->count;
+ size_t b = (size_t)at, pos = p->first[b];
+ if ((double)b == at) return pos; /* a bucket's start: its first is the answer */
+ while (pos < p->count && p->key[pos] < key) ++pos;
+ return pos;
+}
+
+static inline __attribute__((always_inline)) bool small(double key, size_t keys, size_t *k) {
+ if (!(key >= 0 && key < (double)keys)) return false;
+ *k = (size_t)key;
+ return (double)*k == key;
+}
+
+static void fault(const char *what) { fprintf(stderr, "fault: %s\n", what); exit(1); }
+
+static inline __attribute__((always_inline)) Answer search_packed(uint32_t s, uint32_t t, int far, int near) {
+ uint64_t work = 0;
+ memset(seen.bits, 0, (seen.keys + 63) / 64 * 8), seen.count = 0, queue.count = 0; /* the event's lists, cleared */
+ queue.node[queue.count++] = s;
+ seen.bits[s >> 6] |= 1ull << (s & 63), seen.node[s] = s, seen.depth[s] = 0, ++seen.count;
+ double nodes = n;
+ for (double i = 0; i < nodes; ++i) {
+ work += LOOP_LENGTH;
+ if (i >= (double)queue.count) break;
+ size_t at = (size_t)i;
+ if (far) {
+ size_t ahead = at + (size_t)far, closer = at + (size_t)near;
+ if (ahead < queue.count) {
+ double a = (queue.node[ahead] * 1048576 - edges.low) * edges.scale;
+ if (a >= 0 && a < (double)edges.buckets) __builtin_prefetch(&edges.first[(size_t)a]);
+ }
+ if (closer < queue.count) {
+ double a = (queue.node[closer] * 1048576 - edges.low) * edges.scale;
+ if (a >= 0 && a < (double)edges.buckets) __builtin_prefetch(&edges.to[edges.first[(size_t)a]]);
+ }
+ }
+ double node = queue.node[at];
+ double lo = node * 1048576, hi = node * 1048576 + 1048576;
+ size_t from = seek(&edges, lo), until = seek(&edges, hi);
+ if (until < from) until = from;
+ work += (uint64_t)EACH_LENGTH * (until - from);
+ size_t q;
+ if (!small(node, seen.keys, &q) || !(seen.bits[q >> 6] >> (q & 63) & 1)) fault("absent");
+ double d = seen.depth[q] + 1; /* hoisted: nothing in the loop changes seen[q.node] before it is read */
+ for (size_t e = from; e < until; ++e) {
+ double key = edges.to[e];
+ size_t k;
+ if (!small(key, seen.keys, &k)) fault("key"); /* the runtime: another form, not a fault */
+ if (seen.bits[k >> 6] >> (k & 63) & 1) continue;
+ seen.bits[k >> 6] |= 1ull << (k & 63), seen.node[k] = key, seen.depth[k] = d, ++seen.count;
+ if (queue.count == queue.room) fault("room");
+ queue.node[queue.count++] = key;
+ }
+ }
+ int hops = (seen.bits[t >> 6] >> (t & 63) & 1) ? (int)seen.depth[t] : -1;
+ return (Answer){hops, (uint32_t)seen.count, work};
+}
+
+/* ---- narrow columns */
+typedef struct { size_t count; double *key; uint32_t *to; double low, scale; size_t buckets; uint32_t *first; } Narrow;
+typedef struct { size_t count, keys; uint64_t *bits; uint8_t *depth; } NarrowDense;
+typedef struct { size_t count, room; uint32_t *node; } NarrowFlat;
+static Narrow nedges;
+static NarrowDense nseen;
+static NarrowFlat nqueue;
+
+static inline __attribute__((always_inline)) size_t nseek(const Narrow *p, double key) {
+ double at = (key - p->low) * p->scale;
+ if (!(at >= 0)) at = 0;
+ if (at >= (double)p->buckets) return p->count;
+ size_t b = (size_t)at, pos = p->first[b];
+ if ((double)b == at) return pos;
+ while (pos < p->count && p->key[pos] < key) ++pos;
+ return pos;
+}
+
+static inline __attribute__((always_inline)) Answer search_narrow(uint32_t s, uint32_t t, int far, int near) {
+ uint64_t work = 0;
+ memset(nseen.bits, 0, (nseen.keys + 63) / 64 * 8), nseen.count = 0, nqueue.count = 0;
+ nqueue.node[nqueue.count++] = s;
+ nseen.bits[s >> 6] |= 1ull << (s & 63), nseen.depth[s] = 0, ++nseen.count;
+ double nodes = n;
+ for (double i = 0; i < nodes; ++i) {
+ work += LOOP_LENGTH;
+ if (i >= (double)nqueue.count) break;
+ size_t at = (size_t)i;
+ if (far) {
+ size_t ahead = at + (size_t)far, closer = at + (size_t)near;
+ if (ahead < nqueue.count) {
+ double a = ((double)nqueue.node[ahead] * 1048576 - nedges.low) * nedges.scale;
+ if (a >= 0 && a < (double)nedges.buckets) __builtin_prefetch(&nedges.first[(size_t)a]);
+ }
+ if (closer < nqueue.count) {
+ double a = ((double)nqueue.node[closer] * 1048576 - nedges.low) * nedges.scale;
+ if (a >= 0 && a < (double)nedges.buckets) __builtin_prefetch(&nedges.to[nedges.first[(size_t)a]]);
+ }
+ }
+ uint32_t q = nqueue.node[at];
+ double node = q;
+ double lo = node * 1048576, hi = node * 1048576 + 1048576;
+ size_t from = nseek(&nedges, lo), until = nseek(&nedges, hi);
+ if (until < from) until = from;
+ work += (uint64_t)EACH_LENGTH * (until - from);
+ if (q >= nseen.keys || !(nseen.bits[q >> 6] >> (q & 63) & 1)) fault("absent");
+ unsigned d = nseen.depth[q] + 1u;
+ if (d > 255) fault("wider"); /* the runtime: the column made wider */
+ for (size_t e = from; e < until; ++e) {
+ uint32_t k = nedges.to[e];
+ if (k >= nseen.keys) fault("key");
+ if (nseen.bits[k >> 6] >> (k & 63) & 1) continue;
+ nseen.bits[k >> 6] |= 1ull << (k & 63), nseen.depth[k] = (uint8_t)d, ++nseen.count;
+ if (nqueue.count == nqueue.room) fault("room");
+ nqueue.node[nqueue.count++] = k;
+ }
+ }
+ int hops = (nseen.bits[t >> 6] >> (t & 63) & 1) ? (int)nseen.depth[t] : -1;
+ return (Answer){hops, (uint32_t)nseen.count, work};
+}
+static Answer narrow_plain(uint32_t s, uint32_t t) { return search_narrow(s, t, 0, 0); }
+static Answer narrow_ahead(uint32_t s, uint32_t t);
+
+static Answer search_c_ahead(uint32_t s, uint32_t t);
+
+static Answer packed_plain(uint32_t s, uint32_t t) { return search_packed(s, t, 0, 0); }
+static int far_, near_;
+static Answer packed_ahead(uint32_t s, uint32_t t) { return search_packed(s, t, far_, near_); }
+static Answer narrow_ahead(uint32_t s, uint32_t t) { return search_narrow(s, t, far_, near_); }
+
+static Answer search_c_ahead(uint32_t s, uint32_t t) {
+ for (uint32_t v = 0; v < n; ++v) depth32[v] = -1;
+ uint32_t head = 0, tail = 0;
+ queue32[tail++] = s;
+ depth32[s] = 0;
+ while (head < tail) {
+ if (head + (uint32_t)far_ < tail) __builtin_prefetch(&start[queue32[head + (uint32_t)far_]]);
+ if (head + (uint32_t)near_ < tail) __builtin_prefetch(&to32[start[queue32[head + (uint32_t)near_]]]);
+ uint32_t v = queue32[head++];
+ for (uint32_t k = start[v]; k < start[v + 1]; ++k)
+ if (depth32[to32[k]] < 0) { depth32[to32[k]] = depth32[v] + 1; queue32[tail++] = to32[k]; }
+ }
+ return (Answer){depth32[t], tail, 0};
+}
+
+int main(int argc, char **argv) {
+ if (argc < 4) { fputs("bfsfloor NODES EDGES SEARCHES [FAR NEAR]\n", stderr); return 2; }
+ n = (uint32_t)atol(argv[1]);
+ size_t want = (size_t)atol(argv[2]), searches = (size_t)atol(argv[3]);
+ far_ = argc > 4 ? atoi(argv[4]) : 16, near_ = argc > 5 ? atoi(argv[5]) : 8;
+ /* bfs-run's graph: from and to uniform, no loops, each pair once, sorted */
+ uint64_t *keys = malloc(want * sizeof(*keys));
+ size_t count = 0;
+ while (count < want) {
+ uint64_t a = next() % n, b = next() % n;
+ if (a != b) keys[count++] = a << 20 | b;
+ }
+ qsort(keys, count, sizeof(*keys), by_key);
+ m = 0;
+ for (size_t i = 0; i < count; ++i)
+ if (!m || keys[i] != keys[m - 1]) keys[m++] = keys[i];
+ seen_bits = calloc((n + 63) / 64, 8), start = calloc(n + 1, 4), to32 = malloc(4ull * m), depth32 = malloc(4ull * n), queue32 = malloc(4ull * n);
+ for (uint32_t k = 0; k < m; ++k) ++start[(keys[k] >> 20) + 1], to32[k] = (uint32_t)(keys[k] & 0xFFFFF);
+ for (uint32_t v = 0; v < n; ++v) start[v + 1] += start[v];
+ /* packed: about eight items a bucket, a power of two wide, starts at multiples of the width */
+ edges.count = m, edges.key = malloc(8ull * m), edges.to = malloc(8ull * m);
+ for (size_t k = 0; k < m; ++k) edges.key[k] = (double)keys[k], edges.to[k] = (double)(keys[k] & 0xFFFFF);
+ double span = edges.key[m - 1] - edges.key[0];
+ int exponent;
+ frexp(span / (double)(m / 8 + 1), &exponent);
+ edges.scale = ldexp(1.0, -exponent);
+ edges.low = floor(edges.key[0] * edges.scale) / edges.scale;
+ edges.buckets = (size_t)floor((edges.key[m - 1] - edges.low) * edges.scale) + 2;
+ edges.first = malloc(4 * edges.buckets);
+ size_t filled = 0;
+ for (size_t k = 0; k < m; ++k) {
+ size_t b = (size_t)floor((edges.key[k] - edges.low) * edges.scale);
+ while (filled <= b) edges.first[filled++] = (uint32_t)k;
+ }
+ while (filled < edges.buckets) edges.first[filled++] = (uint32_t)m;
+ seen.keys = n, seen.bits = calloc((n + 63) / 64, 8), seen.node = malloc(8ull * n), seen.depth = malloc(8ull * n);
+ queue.room = n, queue.node = malloc(8ull * n);
+ nedges = (Narrow){edges.count, edges.key, malloc(4ull * m), edges.low, edges.scale, edges.buckets, edges.first};
+ for (size_t k = 0; k < m; ++k) nedges.to[k] = (uint32_t)edges.to[k];
+ nseen.keys = n, nseen.bits = calloc((n + 63) / 64, 8), nseen.depth = malloc(n);
+ nqueue.room = n, nqueue.node = malloc(4ull * n);
+ fprintf(stderr, "edges %u, buckets %zu (%zu KB, %g keys wide)\n", m, edges.buckets, edges.buckets * 4 / 1024,
+ 1 / edges.scale);
+ enum { FORMS = 7 };
+ counters_open();
+ const char *names[] = {"c", "c_bits", "packed", "ahead", "narrow", "narrow_ahead", "c_ahead"};
+ Answer (*forms[])(uint32_t, uint32_t) = {search_c, search_c_bits, packed_plain, packed_ahead, narrow_plain, narrow_ahead,
+ search_c_ahead};
+ double *took[FORMS];
+ for (int f = 0; f < FORMS; ++f) took[f] = malloc(searches * sizeof(double));
+ for (size_t r = 0; r < searches; ++r) {
+ uint32_t s = (uint32_t)(next() % n), t = (uint32_t)(next() % n);
+ Answer first = {0};
+ for (int j = 0; j < FORMS; ++j) {
+ int f = (int)((j + r) % FORMS); /* each form first in turn */
+ uint64_t c0[COUNTERS], c1[COUNTERS];
+ counters_read(c0);
+ double a = now();
+ Answer got = forms[f](s, t);
+ took[f][r] = now() - a;
+ counters_read(c1);
+ if (!j) first = got;
+ else if (got.hops != first.hops || got.reached != first.reached) { fprintf(stderr, "answers differ\n"); return 1; }
+ printf("{\"form\":\"%s\",\"from\":%u,\"to\":%u,\"hops\":%d,\"reached\":%u,\"ms\":%.3f,\"instructions\":%llu,"
+ "\"cycles\":%llu,\"branch_misses\":%llu,\"l1d_misses\":%llu,\"llc_misses\":%llu,\"work\":%llu}\n", names[f], s, t,
+ got.hops, got.reached, took[f][r], (unsigned long long)(c1[0] - c0[0]), (unsigned long long)(c1[1] - c0[1]),
+ (unsigned long long)(c1[2] - c0[2]), (unsigned long long)(c1[3] - c0[3]), (unsigned long long)(c1[4] - c0[4]),
+ (unsigned long long)got.work);
+ }
+ }
+ printf("{\"nodes\":%u,\"edges\":%u,\"far\":%d,\"near\":%d", n, m, far_, near_);
+ for (int f = 0; f < FORMS; ++f) {
+ qsort(took[f], searches, sizeof(double), by_num);
+ printf(",\"%s_ms\":%.3f", names[f], took[f][searches / 2]);
+ }
+ puts("}");
+ return 0;
+}
diff --git a/research/experiments/038-past-c/pairs.py b/research/experiments/038-past-c/pairs.py
new file mode 100644
index 0000000..5da1dee
--- /dev/null
+++ b/research/experiments/038-past-c/pairs.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+"""The pairs of runs.sh pairs as a table (research 123): each round's TPC-C
+(transactions a second, CPU a transaction, the owner's core share) before
+and after, the medians and the bank queries' median times.
+
+pairs.py DATE from DATE-tpcc-*.jsonl and DATE-queries-*.jsonl beside it
+"""
+import json
+import statistics
+import sys
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+day = sys.argv[1]
+
+
+def tpcc(version, round_):
+ for line in (HERE / f'{day}-tpcc-{version}-{round_}.jsonl').read_text().splitlines():
+ r = json.loads(line)
+ if r.get('step') == 'run' and r.get('system') == 'pure':
+ owner = max((share for name, share in r['core_shares'].items() if 'owner' in name), default=None) \
+ if isinstance(r['core_shares'], dict) else None
+ return r['transactions_per_second'], r['cpu_us_per_transaction'], owner
+
+
+def queries(version, round_):
+ return {r['query']: r['pure_median_ms'] for r in map(json.loads, (HERE / f'{day}-queries-{version}-{round_}.jsonl')
+ .read_text().splitlines()) if 'query' in r}
+
+
+rounds = sorted({int(p.stem.rsplit('-', 1)[1]) for p in HERE.glob(f'{day}-tpcc-before-*.jsonl')})
+rows = {'before': [], 'after': []}
+for round_ in rounds:
+ b, a = tpcc('before', round_), tpcc('after', round_)
+ rows['before'].append(b), rows['after'].append(a)
+ print(json.dumps({'round': round_, 'tps': [b[0], a[0]], 'change': round((a[0] / b[0] - 1) * 100, 1),
+ 'cpu_us': [b[1], a[1]], 'owner_share': [b[2], a[2]]}))
+med = {v: statistics.median(t for t, _, _ in rows[v]) for v in rows}
+cpu = {v: statistics.median(c for _, c, _ in rows[v]) for v in rows}
+names = queries('before', rounds[0]).keys()
+q = {v: {n: statistics.median(queries(v, r)[n] for r in rounds) for n in names} for v in rows}
+print(json.dumps({'tps_median': [med['before'], med['after']], 'change': round((med['after'] / med['before'] - 1) * 100, 1),
+ 'cpu_us_median': [cpu['before'], cpu['after']],
+ 'queries_median_ms': {n: [q['before'][n], q['after'][n],
+ round((q['after'][n] / q['before'][n] - 1) * 100, 1)] for n in names}}))
diff --git a/research/experiments/038-past-c/runs.sh b/research/experiments/038-past-c/runs.sh
new file mode 100644
index 0000000..3da6196
--- /dev/null
+++ b/research/experiments/038-past-c/runs.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+# The runs of research 123 (docs/design/021), from the repository's
+# root, in steps, each under research/guard.py:
+# runs.sh build NAME COMMIT pure-serve of COMMIT, with its pure-crypto.so,
+# and bfs-run on its core, in ~/.cache/pure-038/NAME
+# runs.sh core FIRST LAST bfs-run (100,000 nodes, 1,000,000 edges, 7
+# searches) before (a553601, before 021)
+# and after, in turns
+# runs.sh pairs FIRST LAST as 033's: TPC-C in RAM (W=1, 64 terminals,
+# 20 s) and the bank's queries, in turns
+# runs.sh counts the bank queries' instructions (025's count.py)
+# runs.sh jit FIRST LAST TPC-C as pairs, on after with the JIT and
+# without (PURE_JIT=0), in turns
+# runs.sh bfs NAME 033's bfs.py on that build (100,000 nodes,
+# 1,000,000 edges, 5 searches, 3 rounds)
+set -e
+here=research/experiments/038-past-c
+builds=$HOME/.cache/pure-038
+day=$(date +%F)
+case "$1" in
+build)
+ rm -rf "$builds/src-$2"
+ git worktree add -f -q --detach "$builds/src-$2" "$3"
+ make -s -C "$builds/src-$2" build/pure-serve build/pure-crypto.so build/libpure.a
+ mkdir -p "$builds/$2"
+ cp "$builds/src-$2/build/pure-serve" "$builds/src-$2/build/pure-crypto.so" "$builds/$2/"
+ cc -O2 -g -std=c17 -I"$builds/src-$2/core" $here/bfs-run.c "$builds/src-$2/build/libpure.a" -lm -o "$builds/$2/bfs-run"
+ git worktree remove --force "$builds/src-$2"
+ ../aup/build/aup build research/experiments/033-computing/graph.aup -o "$builds/graph.pmod" ;;
+core)
+ for round in $(seq "$2" "$3"); do
+ first=before second=after
+ if [ $((round % 2)) = 0 ]; then first=after second=before; fi
+ for version in $first $second; do
+ until awk '{ exit !($1 < 1.5) }' /proc/loadavg; do sleep 10; done
+ printf '{"version":"%s","round":%s,"run":' $version $round >> "$here/$day-core.jsonl"
+ python3 research/guard.py --most 2048 -- "$builds/$version/bfs-run" "$builds/graph.pmod" 100000 1000000 7 \
+ | tail -1 | sed 's/$/}/' >> "$here/$day-core.jsonl"
+ done
+ done ;;
+pairs)
+ for round in $(seq "$2" "$3"); do
+ first=before second=after
+ if [ $((round % 2)) = 0 ]; then first=after second=before; fi
+ for version in $first $second; do
+ until awk '{ exit !($1 < 1.5) }' /proc/loadavg; do sleep 10; done
+ echo "$round $version $(uptime)" >> "$here/$day-load.txt"
+ python3 research/guard.py -- python3 benchmarks/tpcc/run.py --serve "$builds/$version/pure-serve" --warehouses 1 \
+ --check 0 --terminals 64 --sqlite-threads '' --sqlite-group '' --seconds 20 \
+ > "$here/$day-tpcc-$version-$round.jsonl"
+ python3 research/guard.py -- python3 benchmarks/bank/queries.py --serve "$builds/$version/pure-serve" \
+ > "$here/$day-queries-$version-$round.jsonl"
+ done
+ done ;;
+jit)
+ for round in $(seq "$2" "$3"); do
+ first=1 second=0
+ if [ $((round % 2)) = 0 ]; then first=0 second=1; fi
+ for jit in $first $second; do
+ until awk '{ exit !($1 < 1.5) }' /proc/loadavg; do sleep 10; done
+ PURE_JIT=$jit python3 research/guard.py -- python3 benchmarks/tpcc/run.py --serve "$builds/after/pure-serve" \
+ --warehouses 1 --check 0 --terminals 64 --sqlite-threads '' --sqlite-group '' --seconds 20 \
+ > "$here/$day-tpcc-jit$jit-$round.jsonl"
+ done
+ done ;;
+counts)
+ python3 research/guard.py -- python3 research/experiments/025-i64-cost/count.py "$builds/before/pure-serve" \
+ "$builds/after/pure-serve" "$builds/before/pure-serve" "$builds/after/pure-serve" > "$here/$day-counts.jsonl" ;;
+bfs)
+ until awk '{ exit !($1 < 1.5) }' /proc/loadavg; do sleep 10; done
+ python3 research/guard.py --most 2048 -- python3 research/experiments/033-computing/bfs.py "$builds/$2/pure-serve" \
+ ../aup/build/aup 100000 1000000 5 3 > "$here/$day-bfs-$2.jsonl" ;;
+*) echo "runs.sh build NAME COMMIT | core FIRST LAST | pairs FIRST LAST | jit FIRST LAST | counts | bfs NAME" >&2
+ exit 2 ;;
+esac