Field notes / Experiment guide
How do ants draw diagonal crystal lattices?
Some rules leave remarkably long diagonal rays. Are these self-sustaining travelling paths, repeated reversals or structures launched by a local spinner?
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.
A closer look

The idea under test
Ray segmentation, local-patch tests and planned transplants can discriminate those candidate causes rather than identifying a mechanism from appearance alone.
What we learned
Calibration and several anatomy stages are complete, including local-patch and ray-structure tests. The programme remains partial; key ray-end and transplant interventions have not all run.
What this leaves open
The striking pictures are selected deterministic trajectories. A visible periodic motif is not enough to establish a self-sustaining highway.
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
crystal-rules: why do some rules draw diagonal "crystal" lattices?
Written 2026-10-14 19:03 (+13:00), commit 6ce3793. Status (corrected 2026-10-15): S0, S3, S4 done; S1 ray anatomy done 2026-10-15 (P2 falsified, P4 held for 2 of 3, see "S1 ray anatomy: results"); S2 partly done (local patch, ground highway); transplant, ray-end knockouts, spinner isolation and exact periodicity deferred by scope, not run. Originally: "designed, nothing run yet" (registration text below is unedited). Every hypothesis and prediction below is registered before any measurement; append results under "Results", do not edit this section.
Observation that prompts it
Two 30M-step renders (user screenshots, Downloads/RLLLLRRL_30M.png,
Downloads/LRRRRRLLR_30M.png; a third rule, RLLLLLLLRRLRR, was named but not shown):
RLLLLRRL (2624x2630) and LRRRRRLLR (2824x2824). Both show
- thin straight rays at 45 degrees to the image axes, hundreds to ~1500 cells long, which close into nested rotated rectangles/diamonds;
- dense blobs at some corners/crossings, sparse elsewhere;
- almost no re-use (busiest cell 164 / 139 visits in 30M steps) and a bounding box that is entirely "visited" because the rays sweep it.
This is not the t^(1/3) blob class. RLLLLRRL is already on record as a late grid
escape with no recognised highway (B5, notes/frontier-2026-10-13-results.md), and the
G1 breakout analysis found a phase switch to ~4 steps/cell
(notes/research-frontier-2026-10-13-pm.md, G1/K3). So the question may be the same
one as K3 / Q15 (frame builders): "crystal" may just be the frame-builder mode seen
at larger scale. Part of this experiment is to find out whether it is.
Assumptions (untested): (a) the renders are not rotated, so "45 degrees" is a diagonal
of the lattice, i.e. a staircase path (check in experiments/2026-10-13-occupancy-pages/scripts/render.py before S1);
(b) all three rules show the same phenomenon (S0 tests it).
Hypotheses (mechanisms that make different predictions)
- H-ray (glider in a medium). A ray is a periodic translating pattern: the ant moves through background laid down by earlier passes, repeating a short motif of period p (a diagonal "highway" whose background happens to be compatible). Rays end when the ant meets a cell whose colour breaks the motif. Predicts: the ray's colour motif is the same in every ray (up to the 4 rotations), p is small, only a subset of the rule's colours appears in rays, and a ray replayed alone on a blank board does NOT propagate (it needs its background).
- H-spin (spinner + launcher). The long same-turn run (L^4 in RLLLLRRL, R^5 in LRRRRRLLR, L^7 in RLLLLLLLRRLRR) makes the ant circle a 2x2 loop while cells walk through the run's colours; it leaves the loop when the cells reach the end of the run. Blobs are the spin sites, rays what the ant does between them. Predicts: node size grows with run length k; crystal-ness depends on the run, not on the tail letters; Hamming-1 mutations inside the run destroy it, mutations in the tail mostly don't.
- H-reverse (reversibility). The dynamics are time-reversible, so a ray and the ant's later return along it are the same path in opposite directions; rectangles are the ant retracing earlier structure. Predicts: a large fraction of ray length is later traversed in reverse, and the 164-visit maximum is retracing.
- H-frame (K3). Crystals are frame builders in the K3 sense: perimeter patrols, width ~ t^(1/2), 1D skeleton. Predicts alpha_w = 0.50 +- 0.03 and 2-6 steps per new cell in ray mode. Distinguishable from the others by the exponent and by whether rays are self-similar across scales.
These are not exclusive (H-spin could produce rays whose substance is H-ray); the stages are designed so each result moves belief between them.
Instruments (to build, with oracle tests per AGENTS.md)
- Ray segmentation,
examples/crystal_rays.rs: run a rule on a blank 8192^2 board with thefastloop and record positions. Split the trajectory into maximal windows that are a straight diagonal (|dx| = |dy| within 1 cell over >= 128 steps, steps per cell <= 8). Output per ray: start t, length, heading (4 diagonals), duration, colour sequence over 2 periods, terminating cell colour, and whether it overlaps an earlier ray's cells (and in which direction). Property test: the segmentation ofreferenceandfasttrajectories agrees step for step; a synthetic piecewise-diagonal path recovers its planted rays. - Crystal score (census, cheap, grid-only): fraction of visited cells lying on a 45-degree run of visited cells of length >= 30, minus the same for axial runs. Speed-agnostic (classic ant highways move 2 cells per 104 steps, so trajectory straightness would be wrong here).
- Calibration (AGENTS.md rule 5) before use: positive control RL (one diagonal
highway), RLRRRL (frame builder, axial lines not diagonal), a seeded random walk and
the rotor walker (
src/walkers.rs) as negative controls. Report the false-positive rate of the crystal score on the 3,512 census rules (experiments/2026-10-13-census-sweeps/results/non_highway.txt) at the chosen threshold, and re-do the calibration if the threshold changes.
Stages (each informs a decision)
S0. Reproduce. Regenerate RLLLLRRL, LRRRRRLLR, RLLLLLLLRRLRR on a blank board to 2^25 (deterministic, no seed). Confirm the renders match the screenshots and compute the crystal score. Decision: are these three one phenomenon?
S1. Anatomy of rays (H-ray vs H-spin vs H-reverse vs H-frame). The three rules to
2^28: ray length distribution (log bins, tail exponent), heading set, colour motif and
period, steps per new cell in rays vs overall, fraction of ray length re-traversed in
reverse, what ends a ray (terminating colour, distance to the nearest earlier ray
along the heading), and the bounding-box width exponent 2^16..2^28 (src/bin/probe.rs).
S2. Cause by intervention (the discriminating step).
- Ray transplant: lift a mid-ray state (ant + strip of width 2p+4 around the ray
axis) from the S1 run onto a board with (i) the original background, (ii) background
reset to 0, (iii) background colours shuffled (seed 20261014). Metric: propagation
length in units of the strip length. Machinery:
examples/transplant.rs. Separates a self-sustaining highway from a medium-dependent ray. - Ray-end knockout: at a terminating cell flip single cells in a 5x5 window and
rerun; does the ray continue? Machinery:
examples/knock.rs. - Spinner isolation: blank board with the first k colours preset so that the ant spins; exit time and heading as function of k and the tail.
S3. Mutation map (H-spin). For each of the three rules, all Hamming-1 and Hamming-2 neighbours plus single-letter insertions/deletions in the long run (a few hundred rules each); crystal score at 2^24; heat map of which positions matter. Control: the same scan for 3 blob-class rules of similar length (RRRRRLLLLLL, RLLLLRRRRLR, RLRLLL), giving the background rate at which a mutation changes the class.
S4. Census (generalisation). Crystal score for the 3,512 census rules at 2^24 and for the unclassified rules of length <= 11. Features: max same-turn run k, net turn per colour cycle (sum of turns mod 4), n, word symmetry (palindrome, reverse-complement). Decision tree / logistic with leave-prefix-family-out cross-validation (rules sharing a prefix have identical early trajectories, see the B5 note, so a random split overstates independence). Decision: is "crystal" a clean class, and what predicts it?
Predictions (fixed now)
- S0: all three rules have >= 90% of visited cells on 45-degree runs by the crystal score and no recognised highway at 2^28. If one is axial or blob-like, the grouping is wrong and S1-S4 split into classes.
- S1, H-ray: >= 80% of ray length (cells) shares one motif up to the 4 rotations, period p in [4, 40]. More than 5 motifs, or p > 100, falsifies H-ray.
- S1, H-frame: bounding-box exponent 0.50 +- 0.05 over 2^20..2^28 for all three; if it is 0.33 +- 0.05, they are slow-filling blobs and the crystal picture is a finite-time crossover. My prior: 40% for 0.50, 40% in between (0.40-0.47), 20% for 0.33.
- S1, H-reverse: <= 20% of ray length re-traversed in reverse (my belief: the 164 max-visits are node blobs). > 50% supports H-reverse.
- S2: transplanted ray with original background propagates >= 10x the strip length in
= 80% of trials; with background 0 it propagates < 1x in >= 80% of trials (medium-dependent). If the blank-background ray also propagates, it is a genuine highway and B5's "no recognised highway" is a detector failure (period > window).
- S3: Hamming-1 mutations at positions inside the long run drop the crystal score below the 5th percentile of the control-scan scores in >= 60% of cases; mutations in the tail in <= 30%. Equal sensitivity falsifies H-spin.
- S4: max same-turn run >= 4 in >= 80% of crystal-class rules, but < 50% of rules with run >= 4 are crystal (necessary, not sufficient). More than 20% of crystal rules with max run <= 3 falsifies H-spin as stated.
What would show the framing is wrong
- No short motif (large motif count): "crystal" is the visual effect of long ballistic transits at scale, and the experiment becomes one about transit statistics.
- Ray length is fixed by the rule, not the geometry: correlation of ray length with the distance to the nearest earlier ray along its heading < 0.2 (> 0.5 means geometry sets it).
Reproduce (planned; nothing run yet)
All via WSL from /mnt/f/Code/turmite:
cargo test --release --test crystal # oracle test for the instrument
cargo run --release --example crystal_rays -- RLLLLRRL 28 experiments/2026-10-crystal-rules/dumps
uv run experiments/2026-10-crystal-rules/scripts/ray_stats.py
Budget: S0-S2 minutes; S3 ~1,000 rules x 2^24, minutes; S4 3,512 x 2^24, about an hour
on 6 cores with rayon. Deterministic; results keyed by rule; the only RNG is the
shuffled-background control (seed 20261014).
Results
(none yet)
Results so far (2026-10-14 19:38 (+1300), commit 6ce3793, uncommitted work)
Predictions above are unedited; verdicts here. Deviations (the crystal-score definition, the census path) are in NOTEBOOK.md.
- S0 (done). The renders are reproduced (max visits 164, 139). They are visit-count heat maps of a box that is ~100% visited: the "red" is a uniform ground state (visited 2x, colour 2: 80-83% of visited cells in all three rules). Prediction 1 as written was mis-specified (">= 90% of visited cells on 45-degree runs") and is not meaningful; the replacement (diag-run cover of non-ground cells, 0.96-0.98 vs 0.45 for the control RLRRRL) holds, but its "score > 3" threshold failed (1.95-2.32). The "no recognised highway at 2^28" part was not tested.
- S1 (partly done). Width exponent 0.495 / 0.503 / 0.502 over 2^20..2^28 (prediction 3: 0.50 +- 0.05, held, H-frame supported; also true for the control RLRRRL 0.499, so the exponent does not separate crystals from flat frame builders). Not done: ray length distribution, motif period, re-traversal fraction (prediction 2 and 4 untested), what ends a ray.
- S2 (partly done). A lone ant on a uniform ground of colour 2 is a true highway in all three rules (50 / 58 / 86 steps per diagonal cell), not on a blank board, and not for the control. This supports H-ray with the ground as the medium (prediction 5's logic, tested on a uniform board instead of a transplanted strip: blank-background propagation < 1x held; ray with original background not tested). A ground square of side 600-1200 reflects the ant: it stays inside while the box grows to 2-3.5x its side. Not done: transplant of an actual ray, ray-end knockouts, spinner isolation.
- S3 (done). Prediction 6 (run positions sensitive, tail not) falsified: all positions are sensitive; crystals are isolated under point mutation (0/142 Hamming-2). A different structure appeared: the family R L^k R R L is crystal-like (by the ground-fraction proxy, not the grid score) for k = 4..15; R L^k RRLRR for k >= 6; R L^k RRR LLL only for k=4. See the NOTEBOOK correction.
- S4 (done, census length <= 12). Prediction 7: all 8 crystal rules have max same-turn run >= 3 and 7 of 8 have a run >= 4 (the 8th, RLLLRRRLRLRR, has 3): held at 87.5% (n = 8; threshold >= 80%). Every crystal has ground (2x, colour 2); no ground-4x/6x rule is crystal. Necessary-not-sufficient part not computed.
- Open: why exactly ground 2 and a lone-ant highway on it are produced by the sweep (the 4-5 steps/cell fill is the same frame-builder mechanism as K3), what the ray end looks like, and whether k >= 4 is a threshold in the colours that turn L after the ground colour.
Paired local-patch experiment registered 2026-10-14 22:15 (+1300), 7eff085
Select the first 12 nonoverlapping 4096-step windows within 2^25 with absolute dx >=64 and abs(abs(dx)-abs(dy)) <=4. Preserve the starting ant and 33x33 patch; set the exterior uniformly to colour 0 or 2. Replay 4096 steps, reporting displacement and the exact trajectory-prefix length against the intact baseline. Prediction: colour-2 exterior produces greater diagonal displacement than colour-0 in at least 9 of 12 paired samples per rule. This tests local-state propagation, not the originally proposed long-strip transplant or ray termination. Selection depends only on baseline displacement.
Local-patch outcome (2026-10-14 22:16 +1300)
Prediction passed: 12/12 paired windows for each of the three rules travelled farther diagonally with colour-2 exterior than blank exterior. Inputs and SHA256: results/local_patch_summary.json; producer scripts/local_patch_summary.py under uv. The new trajectory loop passed its reference-oracle property test in release mode (results/trace_oracle_v2.log). This does not validate the old loops retroactively. Exact highway periods and boundary reflection remain unproven.
S1 ray anatomy: operationalisation of predictions 2 and 4 (registered 2026-10-15 21:02 +13:00, base da88e61, before any crystal-rule ray CSV was produced)
Predictions 2-4 above stand unedited. The README did not fix what a "motif" or "re-traversed in reverse" means, so this fixes it now. Instrument: examples/crystal_rules_rays.rs
(tests: cargo test --release --example crystal_rules_rays, planted-ray recovery, board loop == reference ant, axial line not a ray, motif rotation invariance); calibration in results/rays_calibration.txt
(false rays in random walk / rotor / RLRRRL controls are at most 29 cells, so only rays with length >= 64 cells are analysed; this cutoff was chosen from the controls, before crystal-rule rays were seen).
Run: crystal_rules_rays ant RULE 268435456 16384 for RLLLLRRL, LRRRRRLLR, RLLLLLLLRRLRR, and the control RLRRRL (blank board, no seed); raw CSV in the gitignored dumps/.
- Motif of a ray = least cyclic rotation of the smallest period p in 2..256 for which the colours read agree with themselves at lag p on >= 98% of the central half of the ray. A ray with no such p is "aperiodic". "Up to 4 rotations" in prediction 2 is read as cyclic phase (rotating the heading does not change the colour sequence); it is not a spatial rotation.
- P2 (H-ray). Over rays >= 64 cells, the single most common motif accounts for >= 80% of total ray length (cells) and its p is in [4, 40]; falsified if more than 5 distinct motifs each carry >= 1% of ray length, or if that dominant p > 100. Per rule; also report the share of aperiodic ray length.
- P4 (H-reverse). Length-weighted mean of rev_frac (share of a ray's cells already crossed by an earlier ray of the opposite heading) <= 0.20; > 0.50 supports H-reverse. Also reported: same-heading overlap, steps per cell, length distribution (log2 bins), terminating colour counts.
- Ray endpoints are accurate to about L = 128 steps by construction; lengths below ~5 x 128 / (steps per cell) cells carry that fractional error.
- Not done here: distance to the nearest earlier ray along the heading, ray-end knockouts (S2), exact periodicity proof.
S1 ray anatomy: results (2026-10-15 21:06 +13:00, commit da88e61; predictions and the operationalisation above unchanged)
Commands: cargo test --release --example crystal_rules_rays (4 tests pass); calibration results/rays_calibration.txt; crystal_rules_rays ant RULE 268435456 16384 (36-87 s per rule; raw CSV in gitignored dumps/rays_*.csv);
uv run experiments/2026-10-crystal-rules/scripts/s1_rays.py -> results/s1_rays.txt. Rays >= 64 cells, blank board, 2^28 steps. The control RLRRRL produced 0 rays >= 64 cells.
| RLLLLRRL | LRRRRRLLR | RLLLLLLLRRLRR | |
|---|---|---|---|
| rays >= 64 cells / total length (cells) | 2960 / 741103 | 254 / 43460 | 5991 / 1383736 |
| median / max length | 179 / 1487 | 127 / 603 | 157 / 1078 |
| steps per cell, median | 2.09 | 2.20 | 2.32 |
| aperiodic share of length | 0.010 | 0.006 | 0.007 |
| colour motifs with >= 1% of length / dominant share, p | 8 / 0.335, p=2 | 20 / 0.157, p=2 | 23 / 0.126, p=4 |
| P2 (H-ray) | FALSIFIED (> 5 motifs, dominant share < 0.8) | FALSIFIED | FALSIFIED |
| reverse overlap (length-weighted), P4 | 0.091 HELD | 0.199 HELD (barely, <= 0.20) | 0.375 in between (not held, not H-reverse) |
| same-heading overlap | 0.352 | 0.380 | 0.450 |
Headings are balanced over the four diagonals (shares 0.17-0.34). Ray lengths span 2^6..2^10 cells with a thin upper tail (no ray above 1487 cells; the 1500-cell rays of the screenshots are the maximum, not typical).
What the registered test says. P2 fails for all three rules as defined: the colours read along rays are not one motif. P4 holds for two rules and is inconclusive for RLLLLLLLRRLRR; no rule supports H-reverse (> 0.5).
Exploratory (post hoc, added after seeing the colour motifs; not a test). Nearly all motifs have period 2-6 and 2 steps per cell, and their colours are shifted copies (e.g. RLLLLRRL: 04, 15, 26, 07), which suggests they are one
dynamical object read at different background phases. Mapping each colour to its turn letter and re-canonicalising: the alternating-turn staircase LR/LRLR carries 0.81+0.07 (RLLLLRRL), 0.55+0.10 (LRRRRRLLR) and 0.67 (RLLLLLLLRRLRR, LRLR) of ray length;
65, 20 and 75 distinct turn-letter motifs remain, so the long tail of other motifs is real but small. Reading: most of the "ray" length is the ant alternately turning left and right, which is a staircase and therefore diagonal for any
rule, in a background (the colour-2 ground found in S2) that supplies the alternating colours. That fits H-ray with the ground as the medium and says the diagonal is cheap geometry rather than a deep motif; it does not by itself
explain why ground 2 forms or when rays end. Caveats: 98% self-agreement at lag p is a loose periodicity test; ray endpoints are good only to about 128 steps; the 64-cell cutoff came from controls but the
turn-letter collapse did not; one run per rule (deterministic, no seed); reverse overlap needs an earlier opposite ray, so it is low early in the run by construction; ground phase (colour shift) and colour-to-letter mapping are my reading, untested by intervention.
Still not done (S2): transplant to a reset background, ray-end knockouts, spinner isolation; exact periodicity; distance to the nearest earlier ray.
S2 ground-phase reset registration — 2026-10-15 21:18 +13:00
Base commit da88e61; working tree includes the uncommitted S1 instrument. No phase-reset measurements have run. Mechanism: colour-2 ground supplies alternating turns; changing its phase should disrupt staircase transit and end rays sooner.
Design fixed before measurement: blank starts, three rules RLLLLRRL, LRRRRRLLR, RLLLLLLLRRLRR, no randomness (seed not applicable). Scan at most 2^25 steps on an 8192-square board. Starting after 2^18, select the first 16 online detections separated by at least 8192 steps: the previous 256 consecutive rolling 128-step windows must each have diagonal displacement abs(dx)>=16, abs(abs(dx)-abs(dy))<=2 and the same heading. Selection uses no future outcomes. Replay each selected state for 2048 steps in three arms: sham 2->2, reset 2->0, advance 2->3. Only cells exactly colour 2 in the inclusive radius-128 square centred on the ant are changed; ant position, heading and all other cells are preserved. Trials share a baseline trajectory and are not independent seeds.
Metrics: alternating-turn fraction among the 2047 adjacent turn pairs; first post-intervention rolling-window heading failure at step >=128 (2048 if none, right censored); number of edited cells; exact trajectory prefix versus sham; count of future steps outside the reset square. Termination is loss of the S1 geometric criterion in the original heading, not proof of a permanent ray end. Full 2048-step alternating fraction is primary; also report first-128-step fraction to expose later recovery. Locality and detector latency may dilute effects.
Registered predictions, per rule, paired against sham: (A) reset 2->0 lowers full-window alternating fraction by >=0.10 in at least 12/16 trials; (B) reset 2->0 produces strictly earlier geometric termination in at least 12/16; (C) advance 2->3 meets the same two thresholds, testing phase specificity beyond blanking. Fewer than 16 detections means that rule is not evaluable under these thresholds; report all detected trials, no replacement based on outcomes. Exact sham replay and zero-cell edits are controls. Report paired means and between-trial SD descriptively, censor counts and ties; no between-seed uncertainty is available.
Calibration before interpreting ant measurements: synthetic perfect alternating staircase has fraction 1 and censored termination; an axial path has fraction 0 and failure at 128. Oracle test: dense loop with identical phase edit agrees step-for-step and cell-for-cell with reference::Ant. Existing S1 detector calibration remains relevant because its window criterion is unchanged. No fit or exponent estimator is introduced.
S2 phase-reset results — 2026-10-15 21:23 +13:00
Completed all 16 selected states per rule (48 paired states, 144 replays); base da88e61 with uncommitted source hashes recorded in each results/phase_RULE.json. No random initialisation or seed. Small trial CSVs, hash-checked .done checkpoints and provenance are in results/phase_*; generated data were not hand-edited. Summary: phase_summary.txt. Colleague write-up, executed from a clean kernel: 02-phase-reset.ipynb.
| Rule | 2->0 alternating drop >=0.10 | 2->0 earlier termination | Mean alternating delta (between-trial SD) | Mean termination delta, steps (SD) |
|---|---|---|---|---|
| RLLLLRRL | 0/16 | 3/16 | +0.050501 (0.059795) | -1.375 (4.603) |
| LRRRRRLLR | 0/16 | 6/16 | +0.073156 (0.092682) | -137.813 (268.734) |
| RLLLLLLLRRLRR | 2/16 | 8/16 | +0.041891 (0.112932) | -66.375 (111.481) |
A and B failed for every rule. C also failed: 2->3 alternating drops occurred in 1/16, 0/16, 0/16, with earlier termination in 0/16 for all three. All arms terminated by the geometric criterion within 2048 (zero censored); sham edited zero cells and matched the original replay for all 2048 steps. First-128-step deltas, ties, outside-square counts and edit counts are in the summary and CSVs. SD describes selected states on one trajectory, not between-seed uncertainty. The full-window alternating fraction includes the post-ray motion and can increase even when the original ray ends earlier.
Interpretation: the strong prediction that local ground erasure suppresses staircase motifs and usually ends rays sooner did not hold. Some resets advance termination, especially in the second/third rule, but the selected sample does not establish a general termination mechanism. Post hoc limitation: colours 2 and 3 give identical turns in all three rules; advance-to-3 tests revisit-sensitive phase effects, with no immediate turn change. The detector's 128-step latency, finite square and shared baseline also limit inference. An endpoint defect intervention and explicit counts of visits to edited cells remain open; neither was run here. Existing S2 transplant/spinner questions remain unresolved.
Reproduce from WSL (or prefix with wsl -e bash -lc on Windows), repository /mnt/f/Code/turmite:
export UV_PROJECT_ENVIRONMENT=$HOME/.venvs/turmite UV_LINK_MODE=copy
cd /mnt/f/Code/turmite
cargo test --release --example crystal_rules_phase > experiments/2026-10-crystal-rules/results/phase_tests.log 2>&1
cargo test --release > experiments/2026-10-crystal-rules/results/phase_release_suite.log 2>&1
uv run experiments/2026-10-crystal-rules/scripts/phase_reset.py > experiments/2026-10-crystal-rules/results/phase_run.log 2>&1 &
wait
uv run --with nbconvert --with ipykernel --with nbformat jupyter nbconvert --to notebook --execute --inplace experiments/2026-10-crystal-rules/notebooks/02-phase-reset.ipynb
The driver builds release mode, writes each completed rule atomically and validates existing checkpoints before skipping. It refuses to replace existing data with a changed recipe; explicitly archive old outputs before changing the protocol. Resume verified via the same uv command redirected to results/phase_resume.log: source/recipe/data hashes match and the regenerated summary agrees. Calibration plus 32-case oracle property test passed (2 tests); full release suite passed. No dependencies changed, no commit made. The current trial outputs are reproducible uncommitted files intended for version control.
S1 ray anatomy: correction after review (21:24 +13:00, commit da88e61)
My exploratory reading above ("staircase transit in the colour-2 ground ... fits H-ray with the ground as the medium") is not supported by the numbers and is withdrawn.
- The S2 ground highway runs at 50 / 58 / 86 steps per diagonal cell; the segmenter accepts at most 8 steps per cell, so it cannot see that object. The rays found here run at about 2 steps per cell and are a different phenomenon.
- The dominant colour pairs are not colour 2: RLLLLRRL
04,15,26,07; LRRRRRLLR16,68,47. In each pair the rule turns the two colours in opposite directions (turn letters R/L), which is why they collapse to the alternating staircase LR / LRLR. - What the data actually show: a staircase moving over a background in which alternate cells carry opposite-turn colours. That two-sublattice background may itself be the "crystal", and the open question is why such a background forms, not why the colour-2 ground forms.
Untested: I did not print the colours around a long ray to confirm the sublattice picture.
P2 (falsified) and P4 verdicts, and all numbers in the results table, are unchanged.
Reproduce note. The "Reproduce (planned)" block above names
crystal_raysandray_stats.py, which do not exist. The actual commands are inresults/trajectory_recipe.txt(trace) and, for rays:cargo test --release --example crystal_rules_rays;crystal_rules_rays ant RULE 268435456 16384 > experiments/2026-10-crystal-rules/dumps/rays_RULE.csv;uv run experiments/2026-10-crystal-rules/scripts/s1_rays.py.
Analysis notebook: notebook.ipynb
4 saved outputs · 4 code cells. Cells are not executed during publication. Download notebook
Why do some rules draw diagonal "crystal" lattices?
Experiment 2026-10-crystal-rules. Written for a reader who has not seen the work. Partial-programme status notebook: S0, S3, S4, the local-patch test and the S1 ray anatomy are done; S1 (tail, ray ends) and S2 (transplant, ray-end knockouts, spinner isolation) are only partly done or not done (see README).
Observation. 30M-step renders of RLLLLRRL, LRRRRRLLR (and RLLLLLLLRRLRR) show thin straight 45-degree rays hundreds to ~1500 cells long. Candidate causes: a self-sustaining ray/highway on a ground (H-ray), a spinner launching the ant (H-spin), reversal/re-traversal (H-reverse), or ordinary frame-building (H-frame; README).
Assumptions. Blank board; deterministic rules, so no seed; a ray is a straight diagonal run (L = 128 steps, <= 8 steps/cell); only rays >= 64 cells counted (cutoff from controls); "motif" = smallest period at 98% self-agreement. Every prediction was registered in the README before its measurement; where I added an operationalisation or an exploratory step it is labelled.
Code
import hashlib, pathlib, subprocess
res = pathlib.Path('results')
if not res.exists(): res = pathlib.Path('experiments/2026-10-crystal-rules/results')
print('git HEAD (notebook run):', subprocess.run(['git','rev-parse','--short','HEAD'],capture_output=True,text=True).stdout.strip())
for f in ['s1_rays.txt','rays_calibration.txt','local_patch_summary.json','s1_bbox_octaves.csv','s4_crystal_scores.txt']:
print(f'{f:28s}', hashlib.sha256((res/f).read_bytes()).hexdigest()[:16])
print('(raw ray CSVs are in gitignored dumps/; regenerate with examples/crystal_rules_rays.rs, command in README)')
Instrument calibration for the ray segmenter (rays_calibration.txt)
Code
print((res/'rays_calibration.txt').read_text())
Shows. False rays in a random walk, the rotor and the RLRRRL frame builder reach at most 29 cells, none reach 32; hence the 64-cell cutoff. Tests (cargo test --release --example crystal_rules_rays): planted-ray recovery, board loop equals reference ant, axial line is not a ray, motif rotation invariance; a deliberate threshold mutation made the planted test fail.
Does not show. That the segmenter finds every kind of crystal ray; the positive control is planted paths, not a known real crystal.
S1: ray anatomy at 2^28 steps (s1_rays.txt)
Code
print((res/'s1_rays.txt').read_text())
Shows (registered). P2 (H-ray: one dominant motif, share >= 0.8, p in [4, 40]) is falsified for all three rules: 8, 20 and 23 colour motifs each carry >= 1% of ray length. P4 (H-reverse: reverse overlap <= 0.20) holds for RLLLLRRL (0.091) and barely for LRRRRRLLR (0.199); RLLLLLLLRRLRR is in between (0.375). No rule has > 0.5. Shows (exploratory, post hoc). The colour motifs are mostly period-2 shifted copies; after mapping colours to turn letters the alternating staircase LR/LRLR carries 0.55-0.88 of ray length. So the registered motif definition (colour-level) splits one staircase object. The paired colours are opposite-turn colours (e.g. 04, 15, 26; 16, 68, 47), not colour 2; the S2 ground highway (50-86 steps/cell) is invisible to this segmenter (cap 8 steps/cell) and is a different object. The data suggest a staircase over a two-sublattice background of opposite-turn colours (not verified by printing colours around a ray); why it forms is open. Does not show. What ends a ray, why the ground forms, or that rays are self-sustaining (that needs transplant/knockout interventions, S2).
Earlier stages, from the README (numbers in results/)
Code
print((res/'local_patch_summary.json').read_text()[:1500]); print(); print(*(res/'s1_bbox_octaves.csv').read_text().splitlines()[:12], sep=chr(10))
- S0. Renders reproduced; they are visit-count maps of a ~100% visited box with a uniform colour-2 ground (80-83% of visited cells). Prediction 1 as written was mis-specified; the replacement (diagonal-run cover of non-ground cells 0.96-0.98 vs 0.45 for RLRRRL) holds but its "score > 3" threshold failed (1.95-2.32).
- S1 width. Box width exponent 0.495 / 0.503 / 0.502 (2^20..2^28), prediction 3 held (H-frame); the control RLRRRL gives 0.499, so the exponent does not separate crystals from flat frame builders.
- S2 (partial). A lone ant on a uniform colour-2 ground is a true highway in all three rules (50 / 58 / 86 steps per diagonal cell), not on a blank board; local-patch test: with colour-2 exterior the ant travelled farther diagonally than with colour-0 in 12/12 paired windows per rule (prediction >= 9/12). Supports the ground as the medium; does not prove periodicity or reflection.
- S3. Prediction 6 falsified: all positions are sensitive, crystals are isolated under point mutation (0/142 Hamming-2); a family R L^k R R L is crystal-like for k = 4..15 (ground-fraction proxy).
- S4 (census length <= 12). Prediction 7 held at 87.5% (n = 8): max same-turn run >= 4 in 7 of 8 crystal rules; every crystal has ground colour 2 (2x visits); the necessary-not-sufficient half was not computed.
Caveats
Three rules for S1 (one run each, deterministic); crystal definitions differ between stages (grid score vs ground-fraction proxy); ray endpoints good to ~128 steps; colour-to-letter collapse is my post hoc reading; S2 was run on a uniform board and a local patch, not a transplanted ray strip.
Open (not run; stated by scope)
Ray-end knockouts, transplant onto reset/shuffled background, spinner isolation, exact periodicity of the ground highway, distance to the nearest earlier ray, why the sweep produces ground 2, and why a two-sublattice opposite-turn background forms behind the 2-steps/cell rays.
Analysis notebook: notebooks/02-phase-reset.ipynb
2 saved outputs · 2 code cells. Cells are not executed during publication. Download notebook
Question and why it matters
Does changing the colour-2 medium around an online-detected ray disrupt alternating-turn staircases and cause earlier geometric termination? This is the intervention follow-up to S1 in the README; cross-cutting questions are in notes. Predictions were registered before measurement at 2026-10-15 21:18 +13:00, base da88e61.
Assumptions and definitions
Sixteen causally selected states per rule share one blank-start trajectory; seed is not applicable. A radius-128 square is assumed to contain relevant medium, but only current colour-2 cells are edited. Sham 2→2, reset 2→0 and advance 2→3 preserve the ant and all other colours. Termination is first failure after step 128 of the original-heading rolling 128-step diagonal criterion, censored at 2048. It does not mean permanent termination. Full-window alternating-turn fraction includes recovery after the original ray ends.
Code
from pathlib import Path
import csv, hashlib, json
SEED = None
ROOT = next(p for p in [Path.cwd(), *Path.cwd().parents] if (p / 'Cargo.toml').exists())
E = ROOT / 'experiments/2026-10-crystal-rules'
rules = ['RLLLLRRL', 'LRRRRRLLR', 'RLLLLLLLRRLRR']
inputs = [E / 'results/phase_summary.txt'] + [E / f'results/phase_{r}.{ext}' for r in rules for ext in ['csv', 'json', 'done']]
for p in inputs:
assert p.exists(), p
print(p.relative_to(ROOT), hashlib.sha256(p.read_bytes()).hexdigest())
recipe = json.loads((E / f'results/phase_{rules[0]}.json').read_text())
print('measurement commit:', recipe['commit'], 'measurement date: 2026-10-15; seed:', SEED)
print('source hashes:', recipe['sources'])
Data and method
Heavy computation lives in examples/crystal_rules_phase.rs; the resumable driver is scripts/phase_reset.py. Run under uv with the WSL environment from the README. Scan limit 2^25, board 8192², first eligible time 2^18, 8192-step separation, 256 consecutive qualifying windows before selection. Each arm runs 2048 steps. Checkpoints validate recipe and data hashes. This notebook reads only small results intended for version control, never dumps.
Registered A/B require ≥12/16 trials with an alternating-fraction drop ≥0.10 / strictly earlier termination for reset to 0. C requires both thresholds for reset to 3. No threshold was revised after seeing results.
Code
print((E / 'results/phase_summary.txt').read_text())
Results
A, B and C failed for every rule. Reset to 0 gave alternating-fraction drops ≥0.10 in 0/16, 0/16, 2/16 trials and earlier termination in 3/16, 6/16, 8/16. Mean full-window alternating fractions instead increased by 0.050501, 0.073156, 0.041891. Advance to 3 caused no earlier termination (0/16 each). All arms were uncensored by 2048. These results reject the registered strong disruption predictions for this local intervention. They do not exclude a medium-dependent mechanism or identify the cell that ends a ray.
Caveats and controls
Synthetic alternating staircase and axial controls passed; a 32-case property test checks the edited dense loop against reference::Ant. Sham replays matched all 2048 steps and edited zero cells; the full release suite passed. These are deterministic within-trajectory comparisons, not independent seeded replicates; reported SD is between trials. All selected states are from early eligible detections, and the 128-step latency can hide immediate disruption. Paths can leave the edited square (counts in CSV). Post-measurement interpretation: colours 2 and 3 have the same turn letter in every tested rule; 2→3 affects immediate colour phase but not the first turn. A change needs a revisit to affect motion. This limits C as a disruption control; it was not removed or redefined.
What this changes / next steps
A simple claim that erasing colour-2 medium generically suppresses staircases is unsupported. Next distinguish first-entry effects from revisit effects and record exposure to edited cells. Open: do particular ray-ending defects, rather than the abundant ground, govern termination? Register any endpoint-targeted experiment separately.
Read the dated lab log
Lab notebook: crystal-rules
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-14 19:03 (+1300) · 6ce3793 · intent
User shared two renders (RLLLLRRL, LRRRRRLLR, 30M steps) and named a third (RLLLLLLLRRLRR) as "crystal-like", and asked for an experiment design to find out why. This session designs only (README has hypotheses, stages, predictions); no simulation has been run. The design separates four mechanisms (glider in a medium, spinner + launcher, reversibility, frame-builder) and tests whether this is the K3 frame-builder class.
2026-10-14 19:03 (+1300) · 6ce3793 · assumption
Renders are unrotated, so the 45-degree rays are lattice diagonals. Check in
occ/render.py. Status: untested.
2026-10-14 19:03 (+1300) · 6ce3793 · assumption
The three rules are one phenomenon. I only saw two, as images. S0 tests this. Status: untested.
2026-10-14 19:03 (+1300) · 6ce3793 · observation
From the screenshots only (no data file): both renders have 45-degree rays, nested rotated
rectangles, dense blobs at some corners, busiest cell 164 and 139 visits in 30M steps,
bounding boxes 2624x2630 and 2824x2824. The repo notes already record RLLLLRRL as a B5 late
grid escape with no recognised highway at 1.26e10 steps
(notes/frontier-2026-10-13-results.md, B5).
2026-10-14 19:29 (+1300) · 6ce3793 · observation
S0. examples/crystal_s0.rs (WSL: crystal_s0 RULE 25 4096 experiments/2026-10-crystal-rules/dumps), blank board, 2^25 steps, deterministic.
RLLLLRRL bbox 2716x2721, visited/bbox 0.9971, steps/visited 4.55, max visits 164.
LRRRRRLLR 2956x2956, 1.0000, 3.84, max 139. RLLLLLLLRRLRR 2442x2442, 1.0000, 5.63, max 291 (cap 255 in the .visits dump).
Controls: RLRRRL 2899x2899, 0.9992, 4.00, max 30; RL leaves the 4096 board (highway). max_visits 164 and 139 equal the
user's screenshots (30M steps), so the renders are reproduced. Renders: results/*_visits.png (scripts/render_visits.py):
RLLLLLLLRRLRR shows the same rotated-rectangle lattice; RLRRRL is a flat square with only a diagonal X (no crystal).
2026-10-14 19:29 (+1300) · 6ce3793 · surprise
The screenshots are visit-count heat maps of a box that is ~100% visited. "Red" is not empty space: it is the
uniform ground state. scripts/s1_patch.py: in all three rules the ground is "visited exactly 2x, final colour 2"
and covers 80.2% / 83.3% / 81.1% of visited cells; the control RLRRRL has ground 4x / colour 4. The crystal lives in
the other ~20% of cells. This invalidates the way README prediction 1 is phrased (">= 90% of visited cells on 45-degree runs"
is not a meaningful test when the box is full); see the deviation entry.
2026-10-14 19:29 (+1300) · 6ce3793 · observation
scripts/s1_patch.py raw patches (RLLLLRRL, LRRRRRLLR): a thin ray is a one-cell-wide 8-connected diagonal line of colour 3
(= ground + 1, visited 3x) in a sea of colour-2 cells (visited 2x). Not a 2-cell staircase of defect. Ray ends in RLLLLRRL show
a short multi-colour motif (colours 4,7,6,0,4 ...) where lines meet.
2026-10-14 19:29 (+1300) · 6ce3793 · deviation
Prediction 1 (README) is mis-specified. Replacement for S1-S4, registered here BEFORE measuring it (a different statistic, not an edit of the old one): define ground state G = (modal visit count, modal colour) of visited cells; "crystal score" = fraction of non-ground visited cells that lie on a diagonal 8-connected run of non-ground cells of length >= 20, divided by the same fraction on axial 4-connected runs. Prediction: crystal rules > 3 (diagonal dominates), controls RLRRRL, random-colour fields ~ 1 or undefined. Also new prediction (from the ground-state result): all crystal rules have G = (2x, colour 2); the census (S4) will show crystal rules to be those with G visited-count 2, and RLRRRL-type frame builders (G = 4x or 6x) are not crystal. H-spin's "L^k run spins the ant" is now doubtful: ground colour 2 sits INSIDE the run (RLLLLRRL colours 1-4 are L), which would make the ant spin on ground cells, not cross them in straight lines; S2 spinner isolation is kept but reinterpreted.
2026-10-14 19:38 (+1300) · 6ce3793 · observation
Crystal score as registered (scripts/crystal_score.py, minrun 20; dumps 2^25): RLLLLRRL 1.96, LRRRRRLLR 2.32, RLLLLLLLRRLRR 1.95, control RLRRRL 1.25.
Diagonal-run cover of non-ground cells: 0.977 / 0.976 / 0.958 vs 0.454 (control). Registered prediction "score > 3": FAILED as stated (the
axial cover is inflated to 0.4-0.5 by dense blobs and parallel neighbouring rays). The diag-cover separation (0.96-0.98 vs 0.45) is clear but the
threshold is a post-hoc choice.
2026-10-14 19:38 (+1300) · 6ce3793 · observation
S2, ant alone on a uniform board of colour G (examples/crystal_s2.rs, scripts/s2_ground_sweep.sh -> results/s2_ground_sweep.csv, 4096 board, 2^22 steps, 4 headings):
RLLLLRRL escapes only from G=2 (4/4 headings, 50 steps per diagonal cell, i.e. ~ (1,1) per 50 steps); LRRRRRLLR from G=2 (58) and G=3 (62.2);
RLLLLLLLRRLRR from G=2 (86) and G=3 (203); control RLRRRL: no G escapes. G=0 (blank board) never escapes for any rule. Every other G confined
(sub-diffusive blobs).
2026-10-14 19:38 (+1300) · 6ce3793 · observation
Ground square of side L inside a blank board (crystal_s2 ... 8192 L), ant at centre, 2^26 steps, G=2: RLLLLRRL L=600 -> bbox +-1728 by 2^26, L=1200 -> +-2109; LRRRRRLLR L=600 -> +-1875, L=1200 -> +-2180. The ant does not leave (position stays inside the box); the box grows far beyond L.
2026-10-14 19:38 (+1300) · 6ce3793 · interpretation
Mechanism (confidence moderate, 4 observations agree): the ant fills the box with a 2x-visited "ground" of colour 2; on that ground a lone ant is a true highway (period 50/58/86 per diagonal cell); a ray is such a highway; at the ground boundary the ant is reflected back into the ground, which sets up the nested rectangles and makes the box grow. Alternative not excluded: the ray end is not a "reflection" but a new highway started by a blob (the ray starts/ends are not yet analysed: no trajectory-level ray statistics have been done).
2026-10-14 19:38 (+1300) · 6ce3793 · observation
S1 width exponent from bbox at 2^20..2^28 (crystal_s0 RULE 28 16384, results/s1_bbox_octaves.csv, 9 octaves, least squares): 0.495 (RLLLLRRL), 0.503 (LRRRRRLLR), 0.502 (RLLLLLLLRRLRR), 0.499 (control RLRRRL).
steps/visited at 2^28: 4.38 / 4.03 / 5.31 / 4.00. Fit uncertainty not computed (single deterministic trajectory).
2026-10-14 19:38 (+1300) · 6ce3793 · observation
S4 census (examples/crystal_s4.rs; 3,512 census rules; results/s4_census.csv, results/s4_tables.txt): 246 rules fill their bbox at < 10 steps per cell (2^22). Ground state of those: Gv=4 156 rules
(21 with a lone highway on their own ground, but ground fraction 0.99, flat), Gv=6 52, Gv=8 12, Gv=2 23. Grid-level crystal score (results/s4_crystal_scores.txt, 2^23, 50 rules) picks out 8 crystals
(non-ground fraction >= 0.13 and diag cover >= 0.95): RLLLLRRL, RLLLLLRRL (= complement of LRRRRRLLR), RLLLLLLRRL, RLLLLLLLRRL, RLLLLLLLLRRL, RLLLLRRRLLL, RLLLLLLRRLRR, RLLLRRRLRLRR. All have Gv=2 and colour 2.
No Gv=4/6 rule is crystal (non-ground fraction 0.007 = the diagonal X only).
2026-10-14 19:38 (+1300) · 6ce3793 · observation
S3 mutation map (scripts/s3_mutants.py, results/s3_*): none of the Hamming-1 mutants of RLLLLRRL, RLLLLLRRL, RLLLLLLLRRLRR is crystal (0/8, 0/9, 0/13; one filled-flat) and 0/142 Hamming-2 mutants;
controls: 1/125 crystal-proxy mutants (all at Hamming-2, RLLLLRRRRLR family). Run-length family (results/s3_family.csv): R L^k RRL is crystal for k = 4..15 (ground 0.78-0.83), partial at k=3 (26.8 steps/visited), not at k <= 2;
SEE CORRECTION ENTRY.
2026-10-14 19:38 (+1300) · 6ce3793 · deviation
README paths: the census list is at experiments/2026-10-13-census-sweeps/results/non_highway.txt (repo was reorganised; data/non_highway.txt no longer exists). The census only contains rules of length <= 12, so the 13-letter
RLLLLLLLRRLRR is outside it. The grid-level crystal class used in S3/S4 (box filled, Gv=2, ground fraction < 0.95, or diag cover >= 0.95 with non-ground >= 0.13) is a post-hoc threshold chosen after looking at S0.
2026-10-14 19:38 (+1300) · 6ce3793 · surprise
Crystals are isolated points in rule space under point mutation but come in an indel family (the L-run length k). The run does not scale the crystal; it acts as a threshold k >= 4 (ground 2 sits inside the run, so k decides whether colours 2..k+1 all turn L and hence whether the lone-ant motion on ground 2 is a highway).
2026-10-14 19:38 (+1300) · 6ce3793 · observation
corrects: the S3 family sentence in the entry above (I had misread the table; the sed placeholder "SEE CORRECTION ENTRY" refers here). From results/s3_family.csv (steps/visited, ground fraction):
R L^k RRL: crystal-like (filled, <6.5 steps/visited, ground 0.78-0.83) for k = 4..15; k=3 filled at 26.8 steps, ground 0.56 (partial); k <= 2 not filled.
R L^k RRLRR: k=4 123.6 steps (not filled fast), k=5 23.8 (ground 0.60), k >= 6 filled at 6.5-8.1 steps with ground 0.75-0.83 (crystal-like); k = 5 is borderline.
R L^k RRRLLL: k=4 is crystal (census rule RLLLLRRRLLL, 2.76 steps, ground 0.86); k=5 filled with ground 0.99 (flat, 2.07 steps); k >= 6 does not fill (steps/visited 76-3600, ground < 0.5 or no ground).
Only the grid-level crystal score was run on the census rules, not on this family (proxy: filled + Gv=2 + ground fraction < 0.95).
2026-10-14 22:13 (+1300) · 797704a · intent
Continue S1/S2 with a trajectory instrument and oracle comparison before interpreting interventions. Earlier grid escapes are finite-time escape observations, not proofs of periodic highways; the reflection claim is also provisional until trajectories at ray ends are measured. Existing results will be preserved.
2026-10-14 22:14 (+1300) · 797704a · observation
New examples/crystal_rules_trace.rs passed cargo test --release --example crystal_rules_trace (32 property cases, random rules of length 2..12, up to 1,999 steps, stepwise position/heading/read colour/updated cell against reference::Ant). Log: results/trace_oracle.log. This verifies the NEW loop only; it does not retroactively verify the earlier S0/S2/S4 loops. Windowed traces generated for RLLLLRRL, LRRRRRLLR, RLLLLLLLRRLRR and RLRRRL, blank board, 33,554,432 steps, size 8192, window 4096; results/trace_RULE.csv. The final partial window is retained. No automatic ray classification or intervention result is claimed.
2026-10-14 22:16 (+1300) · 7eff085 · observation
Paired patch experiment: all 12/12 samples per rule had greater min(abs(dx),abs(dy)) after 4096 steps on colour-2 exterior than colour-0 exterior. Command: cargo run --release --example crystal_rules_trace -- intervene RULE; output results/local_patch_RULE.csv. Summary: uv run experiments/2026-10-crystal-rules/scripts/local_patch_summary.py -> results/local_patch_summary.json (input SHA256 recorded). These are selected windows of one deterministic blank-start trajectory, not independent seeds. Original state preserved only inside radius 16 in each coordinate; this is a local-patch test, not a strip transplant.
2026-10-14 22:16 (+1300) · 7eff085 · interpretation
The local environment causally affects continued diagonal travel in these sampled states. This supports medium-dependent propagation, but proves neither exact periodicity nor reflection at ray ends. The new stepwise oracle test passed again after intervention support was added (results/trace_oracle_v2.log).
2026-10-14 22:17 (+1300) · 7eff085 · decision
Release suite completed successfully (results/release_suite.log), and the example oracle tests passed separately. Recipes and source hashes are in results/trajectory_recipe.txt. Current S1/S2 advance: verified windowed trace loop and completed paired local-patch intervention. Remaining: actual ray segmentation and calibration, exact periodicity proof/check, ray-end knockouts and spinner isolation; earlier instrument loops remain unverified. No commit made. The paired intervention supports a medium effect, not the previous stronger reflection claim.
2026-10-15 21:05 (+13:00) · da88e61 · deviation
README line 3 still read "Status: designed, nothing run yet" although S0, S3, S4 are done and S1, S2 partly. Corrected the status line only; registered hypotheses and predictions and the Results section are untouched. Remaining work (ray segmentation/calibration, exact periodicity check, ray-end knockouts, spinner isolation) is not started.
2026-10-15 20:59 (+13:00) · da88e61 · deviation
Timestamp correction: the entry above headed "2026-10-15 21:05" was written at about 20:45 by the wall clock (I guessed the time). Content unchanged.
2026-10-15 21:06 (+13:00) · da88e61 · intent
Build and run the S1 ray segmenter as planned: examples/crystal_rules_rays.rs with tests, controls, then the three rules to 2^28. Operationalisation of P2/P4 registered in README before any crystal-rule ray CSV existed.
2026-10-15 21:06 (+13:00) · da88e61 · observation
Controls (rw x3, rotor x3, RLRRRL at 2^22): false rays <= 29 cells, none >= 32; RL's highway is not counted (52 steps/cell). Test mutation check: raising the displacement threshold makes recovers_planted fail, so the test can fail. Cutoff 64 cells chosen from this. Crystal rules: 2960 / 254 / 5991 rays >= 64 cells; RLRRRL 0.
2026-10-15 21:06 (+13:00) · da88e61 · deviation
RL at 2^22 steps panicked ("left the board", highway); reran at 2^17. A stray proptest-regressions file from my deliberate mutation was deleted (not a real failing case). "Up to 4 rotations" was read as cyclic phase, stated in the README beforehand.
2026-10-15 21:06 (+13:00) · da88e61 · observation
P2 falsified for all three rules (8/20/23 colour motifs >= 1% of length, dominant 0.34/0.16/0.13). P4: reverse overlap 0.091 / 0.199 / 0.375.
2026-10-15 21:06 (+13:00) · da88e61 · surprise
Colour motifs are mostly period-2 pairs that are colour-shifted copies of each other, at ~2 steps per cell. I had registered "one motif" expecting a rigid highway-like period; the structure is a staircase through a shifting ground, not a rigid motif.
2026-10-15 21:06 (+13:00) · da88e61 · interpretation
Exploratory turn-letter collapse: alternating LR/LRLR carry 0.55-0.88 of ray length. Reading: rays are staircase transit in the colour-2 ground, so P2's failure is about my motif definition (colour-level) as much as about H-ray. Confidence moderate-low; post hoc, no intervention. Does not resolve why the ground forms or what ends rays.
2026-10-15 21:06 (+13:00) · da88e61 · decision
Do not do S2 transplants/knockouts now (out of the chosen scope). notebook.ipynb for this experiment not updated with S1 rays yet.
2026-10-15 21:07 (+13:00) · da88e61 · decision
notebook.ipynb was an unfilled template (my earlier summary implied otherwise). Written and executed (clean kernel, 4 outputs, no errors) covering calibration, S1 rays and the earlier stages as reported in the README. README status line updated. Remaining S2 items are deferred by user scope, not done.
2026-10-15 21:18 (+13:00) · da88e61 · intent
User requests a ground-phase intervention around detected rays. Registered S2 ground-phase reset design and quantitative A/B/C predictions in README before measurements. Preserve existing uncommitted work; implement a separate example and resumable driver within this experiment. Online selection avoids selecting rays by their counterfactual future lifetime.
2026-10-15 21:18 (+13:00) · da88e61 · assumption
The radius-128 square contains enough of the medium to perturb transit. This is a local perturbation, not a reconstruction of the historical ground; only current colour-2 cells are targeted. Exit counts and first-128-step staircase fractions will expose dilution. One deterministic trajectory per rule cannot supply between-seed uncertainty.
2026-10-15 21:21 (+13:00) · da88e61 · observation
Instrument calibration and the 32-case edited-board property test passed: cargo test --release --example crystal_rules_phase -> results/phase_tests.log. Synthetic staircase: alternating fraction 1, censored at 2048; axial control: fraction 0, failure at 128. The reference test covers reset phases 0, 2, 3, heterogeneous media, edited cells and subsequent positions/headings/cell updates. No crystal intervention outcomes inspected before registration.
2026-10-15 21:21 (+13:00) · da88e61 · deviation
Initial WSL invocation was denied by the sandbox; an approved WSL invocation ran the tests. First detached launch returned a PID but no log appeared; relaunched with a retained shell waiting on the background child, logging to results/phase_run.log. No generated result was replaced. Full release suite also launched, logged separately.
2026-10-15 21:23 (+13:00) · da88e61 · observation
uv run experiments/2026-10-crystal-rules/scripts/phase_reset.py completed 16 trials per rule, three arms each; results/phase_run.log, phase_RULE.csv/json/done and phase_summary.txt. Reset to 0 alternating drops >=0.10: 0/16, 0/16, 2/16; earlier termination: 3/16, 6/16, 8/16. Advance to 3: earlier termination 0/16 for each rule. A/B/C fail for all rules. All arms uncensored; sham prefix 2048 throughout. Means and between-trial SD are in README and generated summary. Full release suite passed (results/phase_release_suite.log). Resume rerun validated checkpoint hashes and reproduced the summary (results/phase_resume.log).
2026-10-15 21:23 (+13:00) · da88e61 · surprise
The reset-to-0 mean full-window alternating fraction increased rather than decreased in every rule (+0.050501, +0.073156, +0.041891; command and output above). The original ray can terminate yet subsequent motion can be more alternating. Strong disruption predictions failed; do not recast this as confirmation.
2026-10-15 21:23 (+13:00) · da88e61 · interpretation
Colour 2 and colour 3 assign the same turn in these three rules; phase advance can change trajectories only on a later visit to an edited cell. This was noticed after measurement and limits prediction C, without changing its failed verdict. Early-window and outside-square statistics expose some dilution but do not identify first exposure. Detector latency and repeated states from one trajectory limit inference. The intervention perturbs current colour-2 cells, not the entire historical ground.
2026-10-15 21:23 (+13:00) · da88e61 · decision
Completed requested local phase intervention and registered tests. New shareable notebook notebooks/02-phase-reset.ipynb reads only small results and executed cleanly under uv (results/phase_notebook.log); existing S1 notebook retained. Commands/provenance/results recorded in README. No commit made or existing generated results replaced. Next: register a cell-exposure/endpoint-targeted test to distinguish entry effects from revisit effects; long-strip transplants, exact periodicity and spinner isolation are still open.
2026-10-15 21:24 (+13:00) · da88e61 · deviation
Retracting my exploratory interpretation that the rays are staircase transit "in the colour-2 ground". The ground highway is 50-86 steps/cell and invisible to a segmenter capped at 8 steps/cell; the dominant motif colours are opposite-turn pairs (04, 15, 26 / 16, 68, 47), not colour 2. The data show a staircase over a two-sublattice background of opposite-turn colours; why that background forms is the open question. Not verified by printing colours around a ray. Registered verdicts unchanged.