← All experiments

Field notes / Experiment guide

What do the longest trips away from the boundary tell us?

When an ant leaves the edge, how do its longest interior excursions relate to its eventual boundary occupation?

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

A larger extreme-excursion cutoff relative to territory radius should accompany lower boundary occupation.

What we learned

The descriptive negative association persists across the tested windows, but the controls do not support treating it as calibrated mechanistic evidence.

What this leaves open

Excursion durations are not spatial chord lengths. Coarse quantile bins, unfinished excursions and selected rules limit interpretation.

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

t1-excursion-tomography

Status (added 2026-10-15): closed. T1/T1b analysis, README, cross-cutting note and executed notebook.ipynb agree (see NOTEBOOK.md, last entries). Its "next work" (matched-area comparison) was done in experiments/2026-10-14-kappa-matched-area: unresolved-to-weak, no T2 on that pair set. An intervention (T2) remains undesigned.

Migrated legacy investigation (2026-10-14). Its files used to sit in the flat data/ directory (and calib/, occ/, snaps/, dumps*, knock* where listed) with the label prefix below; experiments/_migration/map.tsv gives the exact old -> new path of every file. This stub was generated from file names and script docstrings. It is not the original write-up: the question, timestamped hypotheses, commands and results are in notes/ (mainly notes/frontier-results.md, notes/frontier-status.md, notes/research-frontier*.md; search for the label), and the producing command is usually in the script docstring or a run_*.sh here.

Old labels / prefixes: t1, t1b

Continuation registered 2026-10-14 22:00 NZDT

Base commit: 797704a2988ea8d958df39ac96e3ece27bec0980 (dirty workspace). Question: does the exploratory extreme-excursion cutoff relative to radius retain its negative association with kappa across patched seeds? Before measurement: expect Spearman correlation between rule-mean ln(L_99.9/R_eq) and rule-mean ln(kappa) to be negative at both k=22 and k=25. This is a descriptive consistency check on previously seen data, not an independent confirmation or causal test. No significance threshold. Use the existing T1b log-linear binned quantile, additionally report its containing-octave bounds, between-seed sample sd (ddof=1), and open-time shares. Keep all seeds; separately describe seeds with open share <=0.10 as a censoring sensitivity, which cannot remove censoring bias. No fit or instrument change: no new calibration is required; report existing rotor/random-walk conservation and kappa controls on these same inputs. Script: uv run experiments/2026-10-14-t1-excursion-tomography/scripts/t1b_cutoff.py. Analysis seed 20261014 (no random operations); simulation seed IDs are read from specs. Notebook reads tracked source inputs and the new generated summary once committed; no commit is made without user instruction.

Continuation results (2026-10-14)

results/t1b_cutoff.json records the command, commit, script and input hashes; t1b_cutoff_seeds.csv and t1b_cutoff_rules.csv retain quantile bounds and between-seed sample sd. At k=22 and 25, respectively, 44 rules have 6–8 and 7–8 available seed records. Ten escaped windows were excluded; some specs also lack completed-excursion bin records. Spearman correlations of rule-mean ln cutoff/radius with rule-mean ln kappa are -0.835 and -0.918. The registered descriptive direction holds. Median between-seed sd of ln cutoff/radius is 0.129 and 0.128; median geometric-mean ratios are 156.1 and 147.1 steps/cell. Keeping only seed windows with open-time share <=0.10 gives correlations -0.830 and -0.921 across all 44 rules (325 and 334 seed windows).

This remains a size-contaminated descriptive association, not a causal explanation. The binned quantile spans an octave; excursion duration divided by radius has units steps/cell and is not a chord displacement. All input conservation flags pass. Final-window rotor kappa is 1.971 +/- 0.040 sample sd (four seeds), outside the original mean tolerance 2.00 +/- 0.01; no random walk records reach k=25. Report these failed/unavailable controls rather than claiming calibration success. No estimator fit was changed.

Validation: cargo test --release passed in the current dirty workspace (results/t1b_cutoff_tests.log). The shareable notebook executed top to bottom under uv run --with nbconvert --with ipykernel --with nbformat jupyter nbconvert --to notebook --execute --inplace experiments/2026-10-14-t1-excursion-tomography/notebook.ipynb (results/t1b_cutoff_notebook.log). New outputs remain uncommitted as requested by repository policy. Next work: matched-area comparison or intervention, with exact quantiles and explicit censoring treatment.

Scripts

  • scripts/t1_audit.py: T1 audit: is D_med/R vs kappa a normalisation artefact (D in cells ~ 1)?
  • scripts/t1_depth_analysis.py
  • scripts/t1_excursions.py: Analysis of T1 excursion tomography data (experiments/2026-10-14-t1-excursion-tomography/results/t1_excursions.csv).
  • scripts/t1_pair_disp.py
  • scripts/t1_specs.py: Patched starts seeds 0..7
  • scripts/t1b_analysis.py: T1b analysis (notes/excursion-tomography-2026-10-13.md section 7).

Results

12 entries in results/ (2 are .log/.done markers); csv/json/txt outputs, *_stats.txt hold the summaries quoted in the notes.

Analysis notebook: notebook.ipynb

1 saved outputs · 1 code cells. Cells are not executed during publication. Download notebook

Question and why it matters

Continue T1b: describe the extreme completed-excursion cutoff relative to radius. See README.md and ../../notes/excursion-tomography-2026-10-13.md. This is reuse of observational data, not independent confirmation.

Assumptions and definitions

L999 uses log-linear interpolation in its containing log2 bin. Bounds span one octave. Escaped windows are excluded; unavailable bin records reduce seed counts. Open-time filtering cannot correct censoring. Patched seeds are replicates within rules.

Provenance, data and method

Run scripts/t1b_cutoff.py under uv. Heavy simulation is historical; this notebook only reads results. New outputs await user-authorized commit. Input hashes are checked below.

Code
In [1]:
from pathlib import Path
import hashlib, json, subprocess
import polars as pl
SEED = 20261014
root = next(p for p in [Path.cwd(), *Path.cwd().parents] if (p / 'Cargo.toml').exists())
exp = root / 'experiments/2026-10-14-t1-excursion-tomography'
summary = json.loads((exp / 'results/t1b_cutoff.json').read_text())
print('Analysis commit:', summary['commit'], 'seed:', SEED)
print('Reading date:', subprocess.check_output(['date', '-I'], text=True).strip())
for relative, expected in summary['inputs'].items():
    actual = hashlib.sha256((root / relative).read_bytes()).hexdigest()
    assert actual == expected
    print(relative, actual)
for name in ['t1b_cutoff.json', 't1b_cutoff_rules.csv', 't1b_cutoff_seeds.csv']:
    print(name, hashlib.sha256((exp / 'results' / name).read_bytes()).hexdigest())
print(json.dumps(summary['windows'], indent=2))
print('Controls:', summary['controls'])
rules = pl.read_csv(exp / 'results/t1b_cutoff_rules.csv')
print(rules.filter(pl.col('k') == 25).select('rule', 'n_seeds', 'ln_ratio_mean', 'ln_ratio_sd').head(8))
Analysis commit: 797704a2988ea8d958df39ac96e3ece27bec0980 seed: 20261014
Reading date: 2026-10-14
experiments/2026-10-14-t1-excursion-tomography/results/t1b_windows.csv 69bb67ba20e92379fa406a5f377ca9c3703e09e68c4b9aceedb1891b03db63d0
experiments/2026-10-14-t1-excursion-tomography/results/t1b_bins.csv ad0fcb4af9f6568572222b4d5457286a512f35e657a12dd4194fd354e6e430dd
t1b_cutoff.json 7bdbdd1adc52ecf9d3ba0d92890dc5f7cfa030f1fef089d4a58db82d6808ab6e
t1b_cutoff_rules.csv 4b62673de0bfe6e1e5b3642c54c82fb939126a8fb64f8eec5dacf17bfb16c11b
t1b_cutoff_seeds.csv e813c6f21f63421cb28e16df440f8317c0b3b715fa7718b74337edd9249e2b87
{
  "22": {
    "n_rules": 44,
    "min_seeds": 6,
    "max_seeds": 8,
    "rho": -0.8352360817477096,
    "median_between_seed_sd": 0.12909215460929588,
    "median_ratio": 156.05644966947418,
    "median_open_share": 0.005149986758188527,
    "sensitivity_n_rules": 44,
    "sensitivity_n_seeds": 325,
    "sensitivity_rho": -0.829598308668076
  },
  "25": {
    "n_rules": 44,
    "min_seeds": 7,
    "max_seeds": 8,
    "rho": -0.9182522903453135,
    "median_between_seed_sd": 0.12764111392242697,
    "median_ratio": 147.07835082763012,
    "median_open_share": 0.0018755344292810425,
    "sensitivity_n_rules": 44,
    "sensitivity_n_seeds": 334,
    "sensitivity_rho": -0.9207892882311486
  }
}
Controls: {'rotor': {'n': 4, 'kappa_mean': 1.97105, 'kappa_sd': 0.03997103117675775}, 'rw': {'n': 0, 'kappa_mean': None, 'kappa_sd': None}}
shape: (8, 4)
┌──────────────┬─────────┬───────────────┬─────────────┐
│ rule         ┆ n_seeds ┆ ln_ratio_mean ┆ ln_ratio_sd │
│ ---          ┆ ---     ┆ ---           ┆ ---         │
│ str          ┆ i64     ┆ f64           ┆ f64         │
╞══════════════╪═════════╪═══════════════╪═════════════╡
│ RLLLLLLLLRR  ┆ 8       ┆ -0.20139      ┆ 0.646078    │
│ RLLLLRLLRLL  ┆ 8       ┆ 3.401048      ┆ 2.158248    │
│ RLLLLRLRRRLL ┆ 8       ┆ 4.302214      ┆ 1.996143    │
│ RLLLLRRLRRRR ┆ 8       ┆ 7.095142      ┆ 0.142075    │
│ RLLLRLLLRLRR ┆ 8       ┆ 5.365488      ┆ 0.080471    │
│ RLLLRLLLRRRL ┆ 8       ┆ 5.468421      ┆ 0.100206    │
│ RLLLRLLRRLLR ┆ 8       ┆ 5.363464      ┆ 0.121613    │
│ RLLLRLRLLRRR ┆ 8       ┆ 5.860701      ┆ 0.089754    │
└──────────────┴─────────┴───────────────┴─────────────┘

Results

Negative association at both windows matches the descriptive prediction. This does not establish a mechanism; radius remains in the denominator.

Caveats and controls

Between-seed sample sd is reported, not fit error. The quantile has octave resolution. Rotor baseline misses the registered 2.00 +/- 0.01 band; random-walk controls are unavailable at k=25. These controls prevent treating this analysis as calibrated mechanistic evidence.

What this changes / next steps

The descriptive ratio association persists. Next: matched-area or intervention study, exact quantile resolution and censoring treatment. Do not infer that excursion duration is a spatial chord length.

Read the dated lab log

Excursion tomography lab notebook

2026-10-14 22:00 (+13:00) · 797704a · intent

User requested continuation of an experiment and explicitly reminded me to follow AGENTS.md. Continue the unresolved T1b cutoff analysis using existing committed bin/window inputs; preserve legacy files and all unrelated working changes. Register the descriptive follow-up in README before measurement. Add seed dispersion and an honest treatment of quantile resolution. No new simulation or tail fit is planned.

2026-10-14 22:00 (+13:00) · 797704a · assumption

The log-linear within-bin 99.9th percentile used by T1b is an approximation, not an observed exact quantile. Its containing octave gives rigorous bounds for the completed-excursion sample. Window-crossing excursions remain censored; open-time share diagnoses but does not correct this bias. Seed replicates are patched starts, not independent rules. Input provenance is historical commit dd0e234 plus work then uncommitted, as recorded by t1b.commit; hashes will identify current input bytes.

2026-10-14 22:07 (+13:00) · 797704a · deviation

First analysis invocation failed its no-escape input assertion. Inspection of t1b_windows.csv found escaped windows; conservation remained true. Exclude escaped windows before any summary rather than treating board-truncated runs as complete. Report available seed counts instead of assuming eight. Command: the README analysis command. Initial sandbox WSL access failed; escalated execution succeeded in reaching the script. No result files were written by the failed analysis.

2026-10-14 22:15 (+13:00) · 797704a · observation

README analysis command produced results/t1b_cutoff.json and seed/rule CSVs. Across 44 rules, correlations at k=22/25 are -0.835/-0.918; median between-seed ln-ratio sample sd is 0.129/0.128. Ten escaped windows were excluded; available bin records give 6–8/7–8 seeds per rule. Rotor final-window kappa is 1.971 +/- 0.040 (four seeds); no random-walk final-window records exist. Conservation passes. See JSON input hashes and README for sample counts and sensitivity results.

2026-10-14 22:15 (+13:00) · 797704a · interpretation

The descriptive direction holds but radius remains a confound; this is no mechanistic advance. Quantile octave bounds and missing/truncated records limit inference. Duration/radius is not a chord length. Rotor mean misses its registered tolerance and the random-walk final-window control cannot be assessed.

2026-10-14 22:16 (+13:00) · 797704a · decision

Session closes with analysis, README, cross-cutting note and executed shareable notebook agreeing. Release suite passed (results/t1b_cutoff_tests.log), clean-kernel notebook execution passed (results/t1b_cutoff_notebook.log), and rerunning the analysis reproduced all three output hashes. No commits or dependency changes. New outputs await a requested commit; notebook inputs are tracked historical results plus these new summaries. Next: matched-area/intervention design and exact quantile/censoring treatment rather than interpreting this ratio causally.

2026-10-14 22:30 (+13:00) · 797704a · decision

User requested the proposed manuscript change. Added a qualitative negative-result paragraph to the cube-root paper's kappa discussion and qualified the conclusion's claim that the hitting-problem candidate was untested. Included size, quantile, censoring and control limitations; no new headline claim or numerical result. Rebuilt main.pdf with typst compile --root . research-outputs/cube-root-growth-paper/main.typ research-outputs/cube-root-growth-paper/main.pdf. Existing figure and number assets were preserved. Text extraction confirmed the two changed passages on pages 10 and 22; rendered those pages for visual review. Poppler was unavailable, so used uv with pypdf for text and Typst for PNG rendering. No dependency-file changes or commits.

2026-10-14-t1-excursion-tomography · Source revision ba38590b33e3

Original source ↗ · Input hashes

Introductions summarize the evidence; the expandable record preserves the original predictions, methods and caveats. Figures and notebooks are published as saved. Publication runs no simulations or notebook cells.