Field notes / Experiment guide
Does the lead alone carry the prefix signal?
Which part of the opening carries the prefix information: the lead, or the run structure of the first few runs?
New to these ants? Start here.
An ant moves on a grid of coloured squares. Each colour tells it to turn left (L) or right (R). It advances that square to the next colour, then steps forward. A rule such as RLR is the list of turns, starting at colour zero. On a blank grid the same rule always makes the same trajectory.
Territory means every cell visited so far. Its boundary consists of visited cells with an unvisited neighbour. A highway is a repeating pattern of motion that carries the ant away. A tether means repeated returns to a small home region.
Growing like the cube root of time means taking eight times as many steps to double a linear size. The rotor walker is a comparison model that follows and rotates arrows stored on cells. A seed makes a random starting pattern reproducible; the ant itself can still move deterministically.
We distinguish c, the chance of discovering a cell per boundary step, from kappa (κ), time at the boundary normalized by perimeter divided by area. Explaining their values is harder than using them to account for growth.
The idea under test
Registered: the lead alone reaches R^2 of at least 0.15, two runs reach 0.40, and three runs come within 0.10 of the eight-letter prefix.
What we learned
Three of four predictions failed: the lead alone scores about 0 and the first two, three and four runs reach 0.25, 0.34 and 0.48 against 0.62 for eight letters.
What this leaves open
Run keys and letter-prefix keys differ in granularity and no group-count control was run; the result is unconditional, unlike the earlier fixed-area lead association.
Read the evidence and reproduction recipe ↗
Inside the experiment
Methods, registered predictions, exact commands and saved analysis. These are the working research documents; expand them for the detail behind the introduction.
Methods and original experiment record
Which part of the prefix carries kappa? Run structure of the opening (2026-10-20)
Question
../2026-10-20-kappa-spread-features/ found the predictable part of ln kappa is in the first 8 letters (held-out R^2 0.62) and not in the
last 8 or in composition. Earlier work (../2026-10-16-kappa-leadrun-fresh/) tied ln kappa to the lead (length of the initial run of R,
slope +0.15 to +0.24 per step, with a collider caveat). How much of the prefix signal is run structure of the opening?
Design (registered before running, 2026-10-20 03:50 +13:00, git 014f2c2)
- Same train / test as the sibling experiment: 2185 stationary blob census rules (
probe_summary.csv, ln kappa), 162 fresh stationary rules (prefix_audit_predictions.csv,target, cohort stationary / loo / linear), disjoint by rule; strict held-out R^2 against the training mean. - A rule is split into maximal runs of equal letters (e.g.
RRLLLRL-> R2 L3 R1 L1). KeyRk= the lengths of the first k runs (k = 1, 2, 3, 4), soR1is the lead alone. Group-mean lookup on the key, falling back to fewer runs with >= 3 training rules, then the training mean. Reference: the 8-letter prefix lookup P8 from the sibling experiment, recomputed here. - Bootstrap over test rules, 2000 resamples, seed 20261020.
Predictions (written before the run)
- H1: the lead alone (
R1) has test R^2 >= 0.15. - H2: the first two runs (
R2) reach R^2 >= 0.40. - H3: the first three runs (
R3) come within 0.10 of P8. - H4: no run-structure key exceeds P8 by more than 0.05 (the 8-letter prefix contains them).
Failures are reported as failures. Anything chosen after seeing results is labelled post hoc.
Results (results/runs.txt; 2185 train, 162 test, 0 in both)
| key | strict held-out R^2 | 95% CI | minus P8 |
|---|---|---|---|
| P8 (first 8 letters) | +0.624 | [+0.472, +0.732] | |
| R1 (lead alone) | -0.004 | [-0.034, +0.013] | -0.628 |
| R2 (first two runs) | +0.246 | [+0.120, +0.369] | -0.378 |
| R3 (first three runs) | +0.337 | [+0.202, +0.482] | -0.288 |
| R4 (first four runs) | +0.475 | [+0.286, +0.627] | -0.149 [-0.260, -0.047] |
H1 FAILED (lead alone is at 0, not >= 0.15). H2 FAILED (0.25 < 0.40). H3 FAILED (R3 is 0.29 below P8). H4 HELD (no run key beats P8).
Reading. The lead (initial R run) carries no unconditional information about ln kappa on these fresh rules; this is consistent with the 2026-10-19 reconciliation, which found the lead-kappa association appears at fixed area and is reproduced by conditioning on the area collider, not by a direct lead effect. The predictive information in the prefix accumulates over successive runs (0.25, 0.34, 0.48 for two to four runs, against 0.62 for eight letters); at least four runs (and still not all of the eight-letter prefix) are needed to recover most of it. So the prefix signal is a distributed property of the opening, not a single early run length. Not tested: which specific runs or letter patterns dominate (a per-position or interaction analysis), letters 9 onward (suffix and composition were tested in the sibling experiment and carry nothing), and whether the key structure in R4 vs P8 differs by more than information content (R4 keys are coarser or finer than 4-letter prefixes depending on run lengths, so the R vs P comparison is not matched on number of groups; no group-count control was run).
Reproduce
uv run experiments/2026-10-20-kappa-prefix-runs/scripts/runs.py -> results/runs.txt, results/runs.json.
Analysis notebook: notebook.ipynb
1 saved outputs · 1 code cells. Cells are not executed during publication. Download notebook
How much of the prefix signal is run structure?
Registered test (H1-H4 committed before the run; see README). Train: 2185 stationary census rules; test: 162 fresh stationary rules, disjoint. Keys are the lengths of the first k runs of equal letters (R1 = lead alone), group-mean lookup with fallback to fewer runs (>= 3 training rules); reference is the 8-letter prefix lookup P8. Score: strict held-out R^2 against the training mean.
Assumption. Same stationarity filter and fresh-rule target as the W3c audit.
Code
import json
from pathlib import Path
root = next(p for p in [Path.cwd(), *Path.cwd().parents] if (p / "AGENTS.md").exists())
d = json.loads((root / "experiments/2026-10-20-kappa-prefix-runs/results/runs.json").read_text())
print("inputs:", {k: v[:12] for k, v in d["input_sha256"].items()}, "train", d["n_train"], "test", d["n_test"], "overlap", d["overlap"])
for k, v in d["r2"].items():
lo, hi = d["ci"][k]
print(f"{k:3s} R^2 {v:+.3f} 95% CI [{lo:+.3f}, {hi:+.3f}]")
print(d["verdicts"])
assert d["overlap"] == 0
v = d["verdicts"]
assert [v[k] for k in v] == [False, False, False, True] # H1-H3 failed, H4 held, as in the README
assert abs(d["r2"]["P8"] - 0.624) < 2e-3 and d["r2"]["R1"] < 0.05
What this shows and does not show
- H1-H3 failed. The lead alone has R^2 about 0; the first two runs give 0.25 and the first three 0.34, against 0.62 for the 8-letter prefix. H4 held: no run key beats P8.
- The unconditional lead is empty on these rules, consistent with the earlier finding that the lead-kappa association is at fixed area and is reproduced by conditioning on the area collider.
- The prefix signal is distributed over the opening (0.25, 0.34, 0.48 for two to four runs).
- Not shown: which letters at positions 5-8 matter; run keys and letter-prefix keys differ in group count and granularity and no matched control was run.
Next
A registered per-position ablation of the 8-letter lookup with a group-count-matched control.
Read the dated lab log
Lab notebook: kappa prefix runs
Append-only. Newest entry last. Never edit an old entry; correct it with a new one
(corrects: <timestamp>). Tags: intent, assumption, observation, interpretation,
surprise, decision, dead-end, question, deviation. See experiments/README.md.
2026-10-20 03:50 (+13:00) · 014f2c2 · intent
Find which part of the 8-letter prefix carries the information about ln kappa, using run structure of the opening (lead, first two, three, four runs). Predictions H1-H4 registered in README and committed (17ad529) before scripts/runs.py existed.
2026-10-20 04:00 (+13:00) · 17ad529 · observation
Ran runs.py (seed 20261020). Held-out R^2 on 162 fresh stationary rules (train 2185): P8 +0.624, R1 -0.004, R2 +0.246, R3 +0.337, R4 +0.475. H1, H2, H3 FAILED; H4 held.
2026-10-20 04:05 (+13:00) · 17ad529 · surprise
The lead alone has R^2 of about zero. I had registered >= 0.15 because the leadrun experiment found slope +0.15 to +0.24 per lead step. That association was at fixed area, and the c-law Stage 4 showed it reproduces under conditioning on the area collider; an unconditional lead lookup is a different quantity and here it is empty.
2026-10-20 04:10 (+13:00) · 17ad529 · interpretation
The prefix information is distributed over the opening (0.25, 0.34, 0.48 for two to four runs, 0.62 for eight letters), not in one early run length. Caveat: run keys and letter-prefix keys differ in group count and granularity, and I ran no matched group-count control, so 'R4 < P8' mixes information and key granularity. Not tested: per-position and interaction effects.
2026-10-20 04:10 (+13:00) · 17ad529 · question
Which letters of positions 5-8 add the remaining 0.15 over R4? A registered per-position ablation on the 8-letter lookup (drop letter j, compare held-out R^2) with a group-count-matched control would say whether specific positions dominate.