Field notes / Experiment guide
Can rare long absences explain boundary occupation?
An ant can spend most of its time away from the edge in a small number of long interior episodes. Is that tail budget the missing explanation?
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
Separating episode rates from duration tails can test whether rare absences account for rule differences in boundary time.
What we learned
Confirmation passes its coverage gates, but the added-prediction criterion fails at the smaller area. The later occupation forecast passes its error threshold, although simple persistence predicts better.
What this leaves open
The tail decomposition is largely forced by time-budget accounting, so its large contribution is not causal evidence. The parametric tail family fails calibration and is retained only as a sensitivity.
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
Current status (2026-10-15): instrument calibration and feasibility pilot complete; scientific confirmation NOT RUN. See results report. The initial scaffold below is historical.
Kappa from excursion survival mass
Status: draft research plan; no instrument implemented or measurement run.
Created 2026-10-15 22:54 +13:00, base b3a0f762ac2230b5df92188206a4d3a1081897be
(dirty tree). Mechanism note.
Question and mechanism
Does a transferable survival law explain boundary occupation through mean interior return time? The fixed-area experiment predicts using q999; it has not shown that a tail-mass model predicts the size of the effect. Earlier tomography's top-1% contrast and early-to-late forecast failed. We will not repeat those tests under new names.
For quasi-stationary cycles, predicted kappa is
E[D] / (E[D] + E[T]) / g, where g is the stated P/A normalization.
For integer T, E[T] = sum_u Pr(T > u). Same-window reconstruction is only
an instrument check. Primary scientific target is independent-seed boundary
occupation; kappa conditional on independently measured geometry is secondary.
Draft design and predictions (freeze before ant outcomes)
- Pilot the existing 44-rule fixed-area cohort on four fresh starts per rule, solely to test output completeness and censoring; exclude pilot seeds from confirmation. Confirm with 32 fresh starts per rule, equally partitioned into predictor and outcome roles. Candidate bands start at 32768, 131072 and 524288 visited cells, width A/16; cap each run at 2^30 steps. These are proposed budgets, not a claim of feasibility. Publish nonattainment.
- Record logarithmic duration-bin counts and time sums, boundary episodes, completed interior episodes and clipped fragments. Follow an open episode beyond a band up to the run cap, attributing only its in-band time to that band's budget. Unresolved tails yield lower/upper bounds, not a completed- episode mean silently treated as unbiased. Entry-conditioned hazards can differ from time-sampled hazards; retain both labels.
- Candidate tail onset is 64 steps; 16 and 256 are labelled sensitivities. Fit a short-return mass plus a truncated survival family to predictor seeds, fixing family and loss after synthetic calibration and before ant confirmation. Compare to empirical binned survival, q999 alone, and a geometry/boundary-residence baseline. Do not tune onset on target kappa.
- Draft prediction T1: the survival model predicts outcome-seed B/S with rule-held-out R2 gain >=0.10 over geometry/residence and bootstrap lower bound >0 at both smaller bands. T2: parameters' frozen area-scaling law predicts the third band with median relative occupation error <=20%. Report q999 comparison whether better or worse. These thresholds are design choices. No success claim if censor bounds permit both verdicts.
- Decompose model-predicted differences by replacing tail probability, tail conditional mean and boundary mean one at a time, averaging replacement order. These are model counterfactuals, not causal interventions. If only boundary residence transfers, reject the tail explanation at these scales.
Controls, inference and gates
Exact path fixtures and reference-vs-fast property tests must conserve every step, including episodes clipped at both edges. Synthetic geometric and two-component renewal streams have known means; test right censoring and serially correlated cycles. Rotor is a dynamical positive control; random walk is a contrasting regime, not an assumed universal kappa constant. Use separate control seeds and report estimator bias before ant inference.
Draft reliability gate: at least 80% of rules retain 12 seeds in each role at each primary band; unresolved time <5% or bounds narrow enough to leave the verdict unchanged. Freeze rule folds before outcomes; bootstrap rules (2000 draws), retaining paired starts and windows. Report between-seed sd. Pilot determines whether budget can meet these gates, never a favorable cohort. No broad-census claim from this selected 44-rule cohort.
Implementation and next action
Read the current fixed-area README and source, including its corrections.
Determine whether small committed outputs already contain time sums; if not,
extend the sampler in a new example named kappa_tail_budget_*, property-test
it, and generate new outputs here. Do not read another experiment's dumps or
overwrite its results. Freeze the exact cohort, seeds, distribution family,
folds and config hash in a dated append-only registration before confirmation.
See PLAN.md for shared execution requirements, SCHEMA.md for outputs and HANDOFF.md for the starting checklist. Results: NOT RUN. No scientific test has passed or failed in this scaffold.
Scaffold verification — 2026-10-15 22:59 +13:00
Preflight and the planning notebook executed successfully under uv/WSL; local Markdown links resolve. The shared workspace passed cargo test --release. No new instrument or scientific prediction was tested. Commands are in HANDOFF.md; verification scope and the local test-log path are recorded in NOTEBOOK.md.
Instrument continuation — 2026-10-15 (NZDT)
The scaffold above is historical. Observation-only instrumentation and reference
checks are now implemented in src/field_age.rs, with example runners
kappa_tail_budget_sampler and kappa_field_age_sampler. The immediate scope
specified in HANDOFF is instrument calibration and a prospective feasibility
registration; scientific confirmation remains unregistered and NOT RUN.
Small four-rule profiles completed before the full pilot was registered.
results/pilot-v2.manifest.json was frozen before any three-band pilot outcome:
44 supported rules x four fresh pilot starts, bands [32768,34816),
[131072,139264), [524288,557056), cap 2^30, grid 4096, four workers. Full rules,
explicit seed lists, input/source hashes and commands are in the manifest.
This is a feasibility registration, not a scientific-confirmation registration.
The age draft's 48-rule matching gate failed before new ant simulation: only 22 stationary/drifting pairs exactly matched on length and three-letter prefix are supported by the existing rule pool. That failure is preserved; the 44 supported rules are used for instrument feasibility only. The tail cohort uses the existing 44-rule fixed-area cohort. No pilot seed is eligible for confirmation.
Calibration outputs are in results/calibration.json. The actual tail accountant is checked on geometric, mixture and serially correlated renewal streams; the age frequency estimator is checked on planted and permuted exogenous labels. Exact metadata/rim/phase tests use the independent sparse ant oracle. Rotor and random walk are dynamical bookkeeping controls. Neither a parametric survival fit nor a log-kappa/drift prediction estimator has been calibrated or fit yet.
The original PLAN's mid-trajectory checkpoint requirement is not implemented. This pilot uses source/config-hashed finished-trajectory markers; sampled one-versus-six-thread replay and finished-run resume pass (results/determinism.json). This deviation is recorded and must be resolved before confirmation readiness. The first full manifest (pilot-v1) was rejected before simulation because another chat added an unrelated module export to src/lib.rs; its rejected recipe is kept. Pilot-v2 was rebuilt and registered with refreshed current source hashes.
The compact report is generated as results/REPORT.md, with coverage, censoring, cost, feature reliability, between-seed dispersion and the limits of validation. The shareable notebook reads only the compact results. No scientific success/failure for T1/T2 or A1/A2/A3 follows from these pilots.
Completed feasibility pilot — 2026-10-15 23:24 NZDT
All 44 rules x four starts reached all three bands: 176/176 starts per band, no escapes and zero unresolved interior time. Runtime was 655.44 s with peak process RSS 530.4 MiB for four concurrent jobs (timing includes brief replay contention). The quarter-cap reserve gate FAILED: max final step 831,505,321 exceeds 2^30/4, although every start attained its targets.
P(T>=64) has descriptive seed-half Spearman 0.957/0.962/0.985 across the three bands; full entry mean has 0.656/0.635/0.847. This is feature repeatability, not an association with kappa or evidence of a tail mechanism. No T1/T2 prediction was tested. See generated report, summary, per-start features and the executed notebook. Original scientific predictions and their thresholds remain unchanged. Confirmation needs its own frozen model, fold/seed manifest and state checkpoints after the reserve gate is resolved.
Gate resolution and REGISTRATION — 2026-10-16 (NZDT), base 269288e (dirty tree)
Pre-registered criteria are in NOTEBOOK.md (entries 00:08-00:12); outcomes in entries 00:12-04:15. Summary:
| Gate | Result |
|---|---|
| G1 reserve | The pooled/per-rule parametric max-step projection was invalid and is discarded (results/reserve_projection.json). Replaced by a fresh validation: 96/96 starts (8 rules x 12 fresh seeds, cap 2^33) attained, max 796,445,346 steps. Cap 2^32 (reserve 1,073,741,824) passes, headroom 1.29x pilot max, 1.35x validation max. |
| G2 resume | Deviation: no mid-trajectory state checkpoint (private Region/Accountant/Tails state lives in src/, out of scope). Finished-trajectory resume: 1 vs 2 threads and SIGKILL-then-resume byte-identical (182 files), results/interrupt_resume.json. Slowest pilot trajectory 108 s; half-written-stem path untested. |
| G3 survival family | Truncated power-law family F: C1 pass, C2, C3, C4, C5 fail (results/fit_calibration.json). F not frozen; E[T] is the empirical binned mean, F a labelled sensitivity. Null result for the parametric family at these sample sizes. |
| G4 T1 machinery | Synthetic: 0/300 false positives, power ~100% for lam>=0.5. Weak control (saturated power, synthetic nuisances). |
Registration (frozen 2026-10-16, before any confirmation outcome; confirmation NOT launched).
Cohort: the 44 rules of the fixed-area cohort (list and sha256 in results/confirm-v1.manifest.json, sha256 of the manifest file 19a86779...). Seeds 2026101801..2026101832 (verified absent from all other manifests/notes); role by seed identity: predictor = even offsets (801,803,...), outcome = odd offsets (802,804,...), 16 each. Bands [32768,34816), [131072,139264), [524288,557056); board 4096; cap 2^32; 2 workers (est. 2.8 h from the pilot CPU total; expect >2 h); launch with scripts/run.py --name confirm-v1 only. Estimator: empirical binned E[T] from entry-conditioned log2 time sums, tail onset 64 (16/256 sensitivities), plus separate p(T>=64) and tail conditional mean; unresolved time is reported as a lower bound and >=5% unresolved fails a band. T1 (unchanged thresholds): per band 0 and 1, y = mean over outcome seeds of B/S; baseline regressors (log predictor-seed boundary mean sojourn, log P/A at band start), full adds log E[T]; statistic = leave-one-rule-out PRESS R2 gain; PASS if gain >= 0.10 and the 95% percentile rule-bootstrap lower bound (2000 draws over the LOO residual pairs, seed 2026101599) > 0 at BOTH bands. T2: per rule, extrapolate log E[T], log m_B and log P/A linearly in log area from bands 0 and 1 (predictor seeds) to band 2; PASS if median relative error of predicted outcome-seed B/S <= 20% at band 2. q999 and geometry-only comparators are reported either way. Reliability gate: >=80% of rules keep 12 seeds per role per band; no escapes. Nonattainment is published, not dropped. No claim for the broad census from this cohort. Decomposition counterfactuals (README item 5) use the empirical p, tail mean and boundary mean.
Result (2026-10-16, confirm-v1; see NOTEBOOK and results/confirm-v1.analysis.json). Gates pass (1408/1408, no escapes, max step 8.13e8 <= 2^30, 44/44 rules x 12 seeds). T1 FAILS (band 0: gain 0.35, lower bound -0.018; band 1: gain 0.51, lower 0.25). T2 passes (median rel. err 0.123 vs 0.20) but the model-free persistence comparator is better (0.072) and q999 is worse (0.504). Analysis script was written after the run with choices fixed in its header (NOTEBOOK deviation entry). Decomposition (item 5) not yet run.
Decomposition (2026-10-16, scripts/confirm_decomposition.py -> results/confirm-v1.decomposition.{json,csv}). Band 0 -> band 2, Shapley over p_tail, tail mean, short mean (fourth factor, deviation), boundary mean. Tail mean carries median share 0.92 of |phi| (44/44 rules), p_tail 0.07, boundary mean 0.003; p_tail and tail mean offset each other strongly. Onsets 16 and 256 agree. Corr(model dF, observed dy) across rules 0.66. The 'only boundary transfers' rejection rule is not triggered, but this is largely forced by the identity (E_T >> m_B) and is a model counterfactual, not causal evidence. Script written after T1/T2; rule fixed in its header.
Analysis notebook: notebook.ipynb
5 saved outputs · 5 code cells. Cells are not executed during publication. Download notebook
Tail budget: instrument feasibility
Question and why it matters
Does a transferable interior survival law explain boundary occupation?
This notebook reports instrument calibration and a prospective feasibility pilot. Scientific confirmation is not run. See README and mechanism note.
Assumptions and definitions
Discovery includes first arrival; visit count means departures, including from the initial patch. Phase is (initial colour + departures) mod rule length. Completed cycles are floor(departures/n), without inventing prehistory for initial patch colours. The visited boundary includes hole edges; rim depth 0..4 is graph distance to that boundary. Census features weight cells; hazard tables weight departures. Exact fixture/property checks support these definitions. Return-hazard estimates remain observational.
Provenance
All inputs below are small results intended for version control; this session makes no commit. The notebook never reads dumps or runs simulation. Seed identities are printed from the frozen manifest.
Code
from pathlib import Path
import hashlib, json, csv
ROOT = next(p for p in [Path.cwd(), *Path.cwd().parents] if (p / "Cargo.toml").is_file() and (p / "experiments").is_dir())
EXP = ROOT / "experiments/2026-10-15-kappa-tail-budget"
inputs = ["pilot-v2.manifest.json", "pilot_summary.json", "pilot_features.csv", "calibration.json", "determinism.json", "REPORT.md"] + (["cohort_audit.json"] if EXP.name.endswith("field-age") else [])
for name in inputs:
path = EXP / "results" / name
assert path.is_file(), path
print(name, hashlib.sha256(path.read_bytes()).hexdigest())
manifest = json.loads((EXP / "results/pilot-v2.manifest.json").read_text())
print("Simulation base commit:", manifest["git_commit"])
print("Registered UTC:", manifest["recorded_utc"])
print("Pilot seeds:", manifest["config"]["seeds"])
SEED = manifest["config"]["seeds"][0]
Data and method
The Rust observation driver preserves the original walker and feeds the tested fixed-area accountant. Interior episodes intersecting a band are followed beyond its end; full durations and in-band overlap have separate columns. An unresolved return has no assumed finite upper bound. Birth, midpoint and endpoint censuses enumerate the visited rim. Heavy computation lives in the example binary and scripts/pilot.py. Matching and all seeds were fixed before new ant outcomes.
Results
Frozen pilot: 44 rules x 4 starts, three area bands; cap 2^30, grid 4096, four workers. Base commit b3a0f762ac2230b5df92188206a4d3a1081897be; dirty source hashes and seed identities are in manifest.
| Band start | Completed / requested | Unresolved interior time | Minimum completed entry episodes |
|---|---|---|---|
| 32768 | 176 / 176 | 0 | 1018 |
| 131072 | 176 / 176 | 0 | 4085 |
| 524288 | 176 / 176 | 0 | 16362 |
No-escape gate: True. All-complete gate: True. Quarter-cap reserve gate: False (max final step 831,505,321). Ant batch wall time 655.4 s; measured whole-process peak RSS 530.4 MiB (four concurrent jobs).
Instrument validation
Four reference/property tests check discovery times, exact departure counts, nonzero patch phase offsets, visited-boundary rim census, offline fragment accounting, follow-up past band edges, right censoring, and rotor/random-walk paths. Full release tests passed; see the tail-budget results/instrument-release-tests.log.
Sampled thread replay: True, 8 specs and 48 files, one versus six workers at the two profile bands. Finished-trajectory resume preserves bytes. Full all-seed replay and mid-trajectory state checkpoints are not validated.
Known-answer renewal calibration uses 16 independent seeds per law, 20,000 cycles per seed. Mean interior durations (mean +/- between-seed sd; known mean):
- geometric: 4.011272 +/- 0.018268; known 4.000000; bias +0.011272.
- mixture: 11.448353 +/- 0.282892; known 11.500000; bias -0.051647.
- serial_mixture: 11.519500 +/- 0.447971; known 11.500000; bias +0.019500.
All three predeclared four-standard-error Monte Carlo checks pass. These calibrate the actual episode accountant, including a serially correlated mixture, not a fitted survival family.
Split-seed feature reliability (descriptive)
Spearman correlation across rules between first two and last two pilot seeds, restricted to rules with all four starts attaining the band and the feature observed. Contributing rule counts are shown in parentheses. No bootstrap inference is made; coverage denominators retain every requested start. The CSV includes every seed and between-seed dispersion is in the summary JSON.
| Feature | Area 32768 | Area 131072 | Area 524288 |
|---|---|---|---|
| entry_mean | 0.656 (44) | 0.635 (44) | 0.847 (44) |
| tail_probability_64 | 0.957 (44) | 0.962 (44) | 0.985 (44) |
| tail_mean_64 | 0.863 (42) | 0.828 (43) | 0.921 (43) |
Meaning and remaining work
These results establish observation/accounting feasibility at the measured scales and describe repeatability. They do not test T1/T2 or A1/A2/A3, compare tail or age features with kappa, establish causal mechanisms, or calibrate a survival-family fit or drift forecast.
Confirmation remains unregistered and unlaunched. Before confirmation: implement and byte-test mid-trajectory state checkpoints; calibrate/freeze the survival family and predictor loss; freeze grouped rule folds and seed roles; resolve the failed age cohort support gate explicitly; choose seed counts using pilot feature reliability. Retain the original thresholds and report deviations prospectively. No successful scientific prediction is claimed.
Reproduce
Use WSL from the repo root with export UV_PROJECT_ENVIRONMENT=$HOME/.venvs/turmite UV_LINK_MODE=copy. Source-hash guards reject changes to registered inputs; retain old manifests and use a new run label for changed sources.
cargo build --release --example kappa_tail_budget_sampler --example kappa_field_age_sampler --example kappa_tail_budget_calibrate
uv run experiments/2026-10-15-kappa-tail-budget/scripts/calibrate.py
uv run experiments/2026-10-15-kappa-tail-budget/scripts/run.py --name pilot-v2
uv run experiments/2026-10-15-kappa-tail-budget/scripts/summarize.py
uv run experiments/2026-10-15-kappa-tail-budget/scripts/verify.py
uv run experiments/2026-10-15-kappa-tail-budget/scripts/report.py
cargo test --release
The pilot itself is frozen prospectively in pilot-v2.manifest.json. Its exact preparation command is recorded there. pilot-v1 was rejected before simulation because an unrelated module export changed src/lib.rs; its manifest and failure log are retained.
Code
summary = json.loads((EXP / "results/pilot_summary.json").read_text())
print("Run gates:", json.dumps(summary["run_gates"], indent=2))
for b in summary["bands"]:
print("Area", b["lo"], "completed", b["completed"], "/", b["requested"],
"unresolved in-band I steps", b["unresolved_overlap"])
print("Scientific verdict:", summary["scientific_verdict"])
The tables show instrument coverage and repeatability at these scales. They do not show that either mechanism predicts independent-seed kappa.
Caveats and controls
Rotor and random walk are path/accounting controls at smaller areas, not a universal kappa calibration. Synthetic hazard labels are exogenous; label permutation is not a physical field intervention. Full state checkpoints and a frozen scientific estimator remain missing. The original age cohort matching gate failed.
What this changes / next steps
Observation-only pilots are now feasible with measured resource cost. Freeze the estimator and resolve the cohort and checkpoint requirements before confirmation.
Open questions
Does tail probability or conditional tail mean transfer independently? Do cell-weighted age features add predictive value beyond elapsed time, geometry, and prefix on held-out rules?
Gate resolution (2026-10-16)
The pilot left two blockers: the quarter-cap reserve gate and the missing survival-family and checkpoint calibration. Criteria were written in NOTEBOOK.md before the measurements. Nothing below uses B, I or B/S, and T1/T2 are NOT evaluated.
Code
rp = json.loads((EXP / "results/reserve_projection.json").read_text())
print("pilot max final step", rp["pilot_max_final_step"])
for k, v in rp["candidates"].items():
print(k, "reserve", int(v["reserve"]), "pilot ok:", v["pilot_ok"], "headroom over pilot max: %.2f" % v["headroom_over_pilot_max"])
print("parametric projections DISCARDED:", rp["projection_discard_reason"])
v = rp["validation"]
print("reserve-v1:", v["completed"], "/", v["requested"], "attained, escapes", v["escaped"], "max step", v["max_t"], "within cap/4 for 2^32 and 2^33:", v["all_within_quarter_cap"])
ir = json.loads((EXP / "results/interrupt_resume.json").read_text())
print("1 vs 2 threads identical:", ir["one_vs_two_threads_identical"], "| killed at", ir["done_markers_at_kill"], "markers then resumed identical:", ir["uninterrupted_vs_resumed_identical"], "| files", ir["files_compared"])
Reserve gate: cap 2^32 passes (every validation start attained; headroom 1.29x over the pilot max, 1.35x over the validation max); 2^33 is a free extra margin. The registered log-normal projection was invalid (per-rule spread in final step varies 0.006-1.6 in log sd) and is kept only as a discarded diagnostic. Resume: finished-trajectory resume is byte-identical across 1/2 threads and after a SIGKILL. No mid-trajectory state checkpoint exists (needs edits to src/); the loss per interruption is bounded by the slowest trajectory. The kill landed between trajectories, so the half-written-stem path is argued, not tested.
Code
fc = json.loads((EXP / "results/fit_calibration.json").read_text())
for k, v in fc["criteria"].items(): print(k, v)
print(json.dumps(fc["negative_controls"], indent=1))
t1 = json.loads((EXP / "results/t1_machinery.json").read_text())
print({k: t1[k] for k in t1 if k.startswith(("null", "power", "G4"))})
Survival family F (truncated power law above 64 steps) is not frozen: it is unbiased in-family (C1 passes) but loses to the plain empirical binned mean on realistic shapes (C2 fails: 44% of cells; on the real pilot shapes it is biased by 14.5% vs 0.3%), its lack-of-fit test is over-sized (13.5% at 1%), it cannot tell an exponential cut-off from a power law (C4 fails for geometric), and censoring brackets are uninformative (C5 fails). The registered fallback applies: E[T] is the empirical binned mean; F is a sensitivity. The T1 decision machinery (synthetic) has 0 false positives and saturated power, a weak control because between-rule E[T] spread is large and the nuisance regressors are synthetic assumptions.
confirm-v1 result and decomposition
T1 FAILS (band 0 lower bound -0.018), T2 passes (0.123) but persistence (0.072) is better. Decomposition below is a model counterfactual, largely forced by the identity E_T >> m_B; it does not support a causal tail mechanism.
Code
a = json.loads((EXP / "results/confirm-v1.analysis.json").read_text())
print(json.dumps({k: a[k] for k in ("T1", "T1_pass", "T2", "T2_pass")}, indent=1))
d = json.loads((EXP / "results/confirm-v1.decomposition.json").read_text())
for o, v in d.items(): print(o, v["median_share"], v["corr_model_obs_delta"], v["only_boundary_transfers"])
Caveats: analysis and decomposition scripts were written after the run (choices fixed in headers); single 44-rule cohort; no census-wide claim; short mean is a fourth factor beyond the README.
Read the dated lab log
Lab notebook
2026-10-15 22:58 +13:00 · b3a0f762ac2230b5df92188206a4d3a1081897be · intent
User requested brainstorming notes and experiment scaffolds. Prepare a prospective plan from current evidence; do not run new measurements. Existing workspace changes are preserved.
2026-10-15 22:58 +13:00 · b3a0f762ac2230b5df92188206a4d3a1081897be · assumption
The mechanism in README is untested. Candidate cohort and budgets may be infeasible; calibration, coverage and seed-history audits must resolve this before registration. Thresholds and seeds are draft choices.
2026-10-15 22:58 +13:00 · b3a0f762ac2230b5df92188206a4d3a1081897be · decision
Separate this mechanism from prior failed tests; add explicit independent-seed prediction and reliability gates. No new scientific outputs exist. See README and the linked prior investigations.
2026-10-15 22:59 +13:00 · b3a0f762ac2230b5df92188206a4d3a1081897be · observation
Scaffold preflight and clean-kernel notebook execution passed using the uv/WSL commands in HANDOFF.md. All new Markdown links resolved in a PowerShell local-path check. The shared workspace passed cargo test --release; full log is local scratch at experiments/2026-10-15-kappa-tail-budget/scratch/scaffold-release-tests.log (ignored). These checks validate scaffolding and existing code, not the proposed instrument. Initial sandbox WSL access failed with E_ACCESSDENIED; the approved elevated retry succeeded. No scientific runs were performed.
2026-10-15 22:59 +13:00 · b3a0f762ac2230b5df92188206a4d3a1081897be · decision
Planning complete; all predictions remain draft and NOT RUN. Next session should calibrate the proposed instrument, audit seed freshness, fix the cohort and budget, then append a frozen registration. No dependencies changed and no commit made.
2026-10-15 23:02 (+13:00) · b3a0f76 · intent
User authorized proceeding with tail budget and field age. Implement and reference-test observation-only instruments; calibrate synthetic streams and controls, then profile a feasibility pilot. Freeze a concrete next-stage registration from reliability/cost evidence before confirmation; preserve unrelated dirty work. No confirmation outcome has been inspected.
2026-10-15 23:11 (+13:00) · b3a0f76 · observation
Small profile completed 16/16 ant and 4/4 control starts at both smaller bands, no escapes; see results/profile-v1.audit.json and results/profile-v1.log, generated by scripts/pilot.py --run. These four-rule subsets measure completeness/cost only. Release suite and four new reference/property tests passed (tail results/instrument-release-tests.log). Synthetic calibration produced results/calibration.json; this calibrates accounting/frequency estimation, not a parametric survival fit or a kappa forecast.
2026-10-15 23:11 (+13:00) · b3a0f76 · decision, deviation
Freeze a full supported-cohort feasibility pilot at three draft area bands, cap 2^30, board 4096, four workers. The tail profile exceeded the cap/4 reserve gate at cap 2^27, so increase cap before the broader pilot. Mid-trajectory checkpoints are not implemented; this short-per-trajectory instrument pilot uses source/config-hashed finished-trajectory markers only. This deviates from PLAN section 3 and prevents claiming checkpoint readiness for confirmation. Age retains the original 48-rule matching feasibility failure and uses its 44 supported rules for instrument feasibility only. No fitted model or confirmation outcome test will be run in this pilot.
2026-10-15 23:12 (+13:00) · b3a0f76 · deviation
Full pilot-v1 launch rejected its source-hash check before simulation: src/lib.rs changed externally to export prefix_exposure during this session. Preserve the rejected manifest and log. Refresh current source hashes and rebuild before registering pilot-v2; no ant outcomes were produced by pilot-v1. Unrelated prefix work is preserved.
2026-10-15 23:16 (+13:00) · b3a0f76 · observation, deviation
Sampled one-versus-six-thread replay and finished-trajectory resume passed for eight specs at the two profile bands; scripts/verify.py -> results/determinism.json. The replay briefly overlapped the four-worker broader pilot, so pilot wall times include CPU/memory contention and are not isolated throughput measurements. Mid-trajectory checkpoints remain untested/unimplemented. This limits resource extrapolation and confirmation readiness.
2026-10-15 23:25 (+13:00) · b3a0f76 · observation
Full feasibility pilot completed 176/176 starts at all three bands, no escapes and zero unresolved interior overlap; max final step 831,505,321. Quarter-cap reserve gate FAILED despite attainment. Ant wall time 655.44 s, process peak RSS 530.4 MiB (four workers; timings include replay contention). Seed-half reliability of entry mean is 0.656/0.635/0.847 and of P(T>=64) 0.957/0.962/0.985. These are descriptive reliability estimates, not tail-vs-kappa associations. Source: scripts/summarize.py -> results/pilot_summary.json; raw recipe and seeds in results/pilot-v2.manifest.json; scripts/report.py -> results/REPORT.md. Notebook clean-kernel execution passed (results/notebook.log).
2026-10-15 23:25 (+13:00) · b3a0f76 · interpretation, decision
Tail probability is reproducible at these scales with two seeds per half; full mean return time is noticeably noisier. This motivates preserving separate amplitude and conditional-mean parameters, but does not establish predictive transfer or causality. Do not launch confirmation with the failed reserve gate and missing survival-family/checkpoint calibration. The prospective pilot stage is complete; scientific T1/T2 are NOT TESTED.
2026-10-15 23:39 (+13:00) · 3d00123 · decision
Closing status: calibrated observation/accounting instrument and registered three-band feasibility pilot are complete. Full release suite passes (results/final-release-tests.log); notebook executes; completed-pilot payload and compact audit/census bytes survive a verified rerun (scripts/check_resume.py -> results/resume_verification.json). Scientific T1/T2 remain NOT TESTED. Next work is survival-family/loss calibration and a fully frozen confirmation manifest with state checkpoints; the reserve gate must be resolved first.
Shared HEAD advanced externally to 3d00123 (unrelated W6 analysis); manifests preserve simulation base b3a0f76 and source/input hashes. No commit issued by this chat. Temporary cross-experiment shell orchestration scripts created in this session were removed after finishing; retained launchers write only to their own experiment. The low-level frozen pilot.py is unchanged. Use scripts/run.py for future completed-pilot verification so original runtime audits are retained.
2026-10-15 23:40 (+13:00) · 3d00123 · observation
Final documentation QA: both shareable notebooks contain two executed code cells and zero error outputs; local README/PLAN/SCHEMA/HANDOFF/report Markdown targets resolve. Dependency manifests/locks are unchanged. Current-status banners identify the original scaffold as historical. Release suite, reference/property checks, synthetic calibrations, sampled thread replay and full finished-pilot audit-preserving resume passed in the scopes recorded above. No scientific confirmation or commit was issued.
2026-10-16 00:08 (+13:00) · 997c9b2 · intent
New session (gate resolution). Goal: resolve the two blockers recorded at 23:25/23:39 on 2026-10-15: (1) the failed quarter-cap reserve gate and (2) the missing survival-family and mid-trajectory-checkpoint calibration. NOT in scope: T1/T2 or A1/A2/A3 on ant outcomes. Constraints: write only in this experiment folder; at most 2 threads for any run; full runs only via scripts/run.py (pilot.py stays frozen); no commit. B, I and B/S columns of pilot_features.csv are NOT touched by any analysis in this session; only the log2 tail bins (entry counts/time sums) and final step counts of the pilot are used, to set synthetic parameter ranges and cost.
2026-10-16 00:10 (+13:00) · 997c9b2 · assumption, decision (criteria registered BEFORE the measurements below)
Pre-registered pass/fail criteria for this session; nothing here is tuned after seeing results, and failures are reported as failures.
G1 reserve gate (revised, prospective). Cap affects only the stop test in drive, so every pilot trajectory would be identical under a larger cap; the gate is therefore evaluated on pilot-v2 final steps plus a fresh check. PASS requires, for a candidate cap C: (a) pilot max final step <= C/4; (b) the 99.9th percentile of the projected maximum final step over the planned 1408 confirmation starts (44 rules x 32 seeds), from a per-rule log-normal-residual predictive model (pooled empirical residuals, mu_rule uncertainty from 4 seeds propagated, 2000 draws, seed 20261016) is <= C/4; (c) a fresh reserve-validation batch (4 slowest pilot rules x 12 new seeds 2026101701..2026101712, all three bands, cap C, 2 threads, run through scripts/run.py) has every trajectory attained with zero escapes and max final step <= C/4 and <= the projection's 99.9th percentile of the corresponding per-rule max. Candidates: 2^32 and 2^33; choose the smallest passing one. Note fixed_area stores in-band complete I durations as u32; the sampler does not use that vector, and contained episodes are shorter than band span, but this is checked (max band span < 2^32).
G2 resume/determinism gate (replaces PLAN section 3 mid-trajectory state checkpoint; DEVIATION, stated up front). Real state checkpoints would require serialising private fields of Region, Accountant, and Tails in src/, outside this session's write scope, and a second implementation needing its own oracle. Instead: PASS requires that (a) the slowest pilot trajectory wall time and the projected slowest at the chosen cap are small (< 15 min) so that finished-trajectory atomic markers lose at most that much on an interruption; and (b) a cohort of 8 rules x 4 fresh seeds (2026101721..2026101724) at the two smaller bands, run via run.py as uninterrupted 1-thread, uninterrupted 2-thread, and 2-thread SIGKILLed-mid-batch-then-resumed, gives byte-identical payload files (every file except .done, whose marker embeds the thread-bearing config hash). One-vs-six-thread equality from results/determinism.json is cited, not repeated (<=2 thread limit).
G3 survival-family calibration. Family F (frozen candidate): tail onset u0=64 (bin 6, exact bin edge); short part T<64 taken exactly from bins 0-5 (counts and time sums); P(T>=64)=p estimated by count fraction; conditional on tail, Y has survival S(y)=((y/u0)^-a-(H/u0)^-a)/(1-(H/u0)^-a) on [u0,H] and T=floor(Y). Fit (a,H) by multinomial maximum likelihood on the log2-bin tail counts (H on a grid 2^(k/4)); E[T]=exact short sum + p*tail mean. Competitor: empirical binned mean (exact from time sums). Synthetic design: pilot-anchored scenarios, 132 (rule,band) cells, truth = F fitted to the pilot-pooled tail bins, N = 4x pilot entry count (16 predictor seeds pooled), R=200 replicates per cell, seed 20261016. Pre-registered criteria: C1 in-family: median |relative bias of E[T]| <= 0.05 and >=90% of cells with |bias|<=0.15, and alpha-hat median bias within +-0.10; C2 value: F beats the empirical estimator in RMSE(log E[T]) in >=70% of cells (otherwise F is not worth freezing); C3 negative control A (misspecified, realistic shape): truth = the pilot empirical bin distribution (not in F) -> the deviance lack-of-fit flag (parametric bootstrap p<0.01, B=200) must fire in >=80% of cells where the pilot tail has >=30 events, with empirical size under in-family truth <=10%; C4 negative control B: exponential (geometric) tail with mean 20 and a lognormal tail, fitted as power law -> flag fires >=80% and the bias of E[T] is reported; C5 right-censoring: with episodes open at the window end, the bracket [E_lo,E_hi] built from known lower bounds and H must contain the true mean in >=99% of replicates and its width is reported. If C1/C2 fail the parametric family is NOT frozen and the empirical binned mean becomes the registered E[T] with the family as a labelled sensitivity.
G4 downstream-test machinery (T1 statistic) control. Define T1 statistic concretely before data: per band, per rule, outcome y = mean over outcome-role seeds of B/S; baseline regressors x_b = (log boundary mean sojourn from predictor seeds, log P/A at the band start from predictor seeds); full model adds log E[T] from F. Statistic = leave-one-rule-out R2(full) - R2(baseline); rule-bootstrap (2000, paired) 95% lower bound. Synthetic positive control (y generated by the renewal identity plus seed noise from the pilot between-seed sd of tail features) must detect with power >=80%, null control (y independent of tail given baseline regressors) false-positive rate <=7.5% of the T1 decision rule (gain>=0.10 and bound>0). Thresholds 0.10/0>0 are UNCHANGED from README.
Registration is appended only if G1-G4 all pass.
2026-10-16 00:30 (+13:00) · 997c9b2 · observation, deviation (correction to the 00:10 G1(b))
G1(b) as registered (pooled-residual log-normal model) was run first and gave a projected 99.9% max over 1408 starts of 2.9e10 steps, absurdly above the pilot max (8.3e8); a per-rule inverse-chi2 variant gave 1e22. Cause: the per-rule sd of log(final step) spans 0.006 to 1.6 (one cheap rule spans 29x across four seeds; the 8 slowest rules have sd 0.01-0.12), so any model that shares or inflates spread puts cheap-rule volatility on the expensive rules. Both outputs are retained in results/reserve_projection.json as DISCARDED diagnostics (script scripts/reserve_gate.py). Gate 1(b) is therefore NOT passed and NOT evaluable with a valid parametric model; it is replaced (by this correction entry, written before the validation batch is run) by: (b') every start of a fresh validation batch must attain all three bands with final step <= C/4. The batch is the 4 slowest pilot rules plus the 4 highest-spread rules (by pilot sd of log final step) x 12 new seeds 2026101701..2026101712, cap C, 2 threads, via run.py. Evidence is direct but only 96 starts; the confirmation cohort has 1408, so the pass is a headroom statement (cap/4 is >= 2.6x the pilot max for 2^33), not a guarantee. Nonattainment in confirmation will be published as a status row regardless.
2026-10-16 00:55 (+13:00) · 997c9b2 · observation (G2)
scripts/check_interrupt.py (all via scripts/run.py; manifests resume-t1/resume-t2/resume-k2 from scripts/prepare_gates.py, 8 rules x 4 fresh seeds 2026101721..24 x 2 bands + controls): 1 thread vs 2 threads: 182 payload files + census CSVs byte-identical; 2-thread run SIGKILLed (process group of that run.py only) with 8/32 ant markers present, then resumed through run.py: byte-identical to the uninterrupted run. Result: results/interrupt_resume.json (log results/interrupt_resume.log). Limits, stated plainly: the sampler writes each file via .tmp+rename and the marker last, but the kill landed between trajectories (no half-written stem was on disk; in_flight_stems_at_kill=[]), so the half-written-stem path is argued from the code (skip only when the marker string matches, else recompute and overwrite) and NOT tested; only 1 vs 2 threads were tested here (1 vs 6 is from the earlier determinism.json); no mid-trajectory state checkpoint exists. Wall time per finished trajectory in this cohort was ~1 s (resume-t1 59.8 s for 32+controls on 1 thread).
2026-10-16 00:12 (+13:00) · 997c9b2 · correction
The headers of the two preceding entries ("00:30" G1(b) deviation, "00:55" G2 observation) carry estimated times, not clock readings: the machine clock at writing was about 00:08-00:11 and file mtimes (results/reserve_projection.json 00:07, results/interrupt_resume.json 00:10) show the true order. Content and ordering of the entries are unaffected: the G1(b) replacement was written before reserve-v1 was launched (00:11), and the G2 result before any G3 calibration was run. All later entries use date output.
2026-10-16 00:27 (+13:00) · 269288e · intent, assumption (registered BEFORE the run)
Known-answer calibration of the renewal estimator on the mean-field walker (the walker of experiments/2026-10-16-kappa-uniform-baseline: each step resample uniformly over visited cells, then step to a uniform 4-neighbour). Its instantaneous boundary occupation is exactly P/A, so the renewal estimator must return 1.
Estimator (as used on ants, from the real accountant + tail accumulator; no new estimator code): per band, E[D] = Accountant complete-contained B steps / count; E[T] = Tails entered_steps / entered_n; g = sum_pa / steps (step-weighted mean P/A over the band's departures); kappa_inst = (E[D]/(E[D]+E[T])) / g. Also kappa_direct = (b_dep/steps)/g (does not use episodes; checks the accounting separately).
Prediction. Labels z_t are independent Bernoulli(f_t) with f_t = P/A drifting slowly, so the leading bias is only the drift of f across a band of width A/16 (second order) plus selection by band edges for the contained-B estimator. Registered: over 16 seeds (2026101801..2026101816), 3 bands [1024,1088), [4096,4352), [16384,17408) (width A/16, like the pilot bands scaled down because the mean-field territory grows as t^0.68 so the ant bands are unreachable cheaply), the seed-mean kappa_inst is within 0.02 of 1 in every band, between-seed sd <= 0.02, kappa_direct within 0.01 of 1, and E[D] ~ 1/(1-f), E[T] ~ 1/f to within 3%. Failure (|kappa_inst-1| > 0.02 in any band) means the renewal estimator or its episode selection is biased by that amount and the bias is subtracted/flagged before any ant kappa is interpreted. Cap 2^27 steps, board 4096, 2 threads, a new example (examples/kappa_tail_budget_meanfield.rs) that drives the real Accountant and Tails with the mean-field walker (the Walker trait cannot teleport).
2026-10-16 00:28 (+13:00) · 269288e · deviation (before the registered run; only a 2-seed smoke run was made)
A 2-seed smoke run (seeds 2026101801-02, bands 1024/4096/16384; output in /tmp only, discarded) showed band 0 has only ~150 complete episodes per seed, so a +-0.02 criterion would be unresolvable there (per-seed sd of kappa_inst ~ 1/sqrt(n) ~ 8%). Bands are enlarged to [16384,17408), [65536,69632), [262144,278528) (width A/16 unchanged); the run is cheap (~0.15 s per 7e5 steps), cap raised to 2^29. All other registered quantities and thresholds (16 seeds 2026101801-16, |kappa_inst-1|<=0.02 per band, seed sd<=0.02, |kappa_direct-1|<=0.01, E[D],E[T] within 3% of 1/(1-f),1/f) are unchanged. Smoke rows showed E[D] ~ 1.2 and kappa-like ratios near 1 but no estimate was computed or used to choose anything.
2026-10-16 00:29 (+13:00) · 269288e · observation, interpretation (mean-field known-answer calibration; registered criteria applied unchanged)
Command: target/release/examples/kappa_tail_budget_meanfield 2026101801 16 536870912 16384-17408,65536-69632,262144-278528 results/meanfield_renewal.csv 2 (57 s, 2 threads; all 48 rows reached_hi, zero unresolved overlap); analysis scripts/meanfield_renewal.py -> results/meanfield_renewal.json, .log. 16 seeds, mean (between-seed sd):
- band 0 [16384,17408): kappa_inst 1.0043 (0.0262), kappa_direct 1.0044 (0.0261), E[D]/(1/(1-g)) -1 = -0.0003, E[T]/(1/g) -1 = -0.0042 (0.0255), ~2580 complete B episodes/seed. se(kappa_inst)=0.0066.
- band 1: 1.0012 (0.0105); band 2: 0.9996 (0.0062). E[D], E[T] within 0.1% of geometric truth (band 2). Verdict on the registered criteria: bias (|mean-1|<=0.02), kappa_direct, and E[D],E[T] within 3% PASS in all bands; the seed-sd criterion (<=0.02) FAILS at band 0 (0.026) and passes at bands 1, 2. So the registered all-pass is NOT met; the cause is sampling noise in the sparse-boundary regime (g ~ 0.04, noise ~ 1/sqrt(n_B)), not bias: the seed-mean is within 0.7 se of 1 and the noise shrinks as n_B^-1/2 across bands (0.026 -> 0.0105 -> 0.0062 for n_B x4 each, i.e. about halving). Not relabelled a pass. Consequence for the ant plan: a single-start kappa_inst has a noise floor of about 1/sqrt(n_B) ~ 2-3% even for a perfect renewal process at ~2600 episodes; the ant bands carry 1e3-1e5 episodes, and this floor is the reference for the between-seed reliability numbers already reported. kappa_inst == kappa_direct to 4 digits: the episode estimator and the departure counting agree, so the renewal identity is exact here (as it must be for iid labels) and the instrument adds no bias of its own. This calibrates the accounting only; ants are not renewal processes.
2026-10-16 00:32 (+13:00) · 269288e · assumption, decision (registered BEFORE the family-F run on mean-field bins; prompted by an external review of the entry above)
The previous entry calibrated the raw entered-mean E[T], not family F (the candidate frozen estimator, scripts/tailfit.py). kappa_inst == kappa_direct to 4 digits is close to an accounting identity for any alternating stream, so it validates edge/clipping bookkeeping, not F. The mean-field interior law is geometric with mean 1/g (about 23, 46, 91 in bands 0-2; P(T>=64) about 6%, 25%, 50%), i.e. an exponential tail, which is outside F (truncated power law): this is the C4-type negative control with a known mean on the real instrument.
Procedure: rerun the same command (seeds, bands unchanged; the main CSV must come out byte-identical) with the sampler also writing the per-bin entered counts and time sums (results/meanfield_renewal.bins.csv); pool the 16 seeds per band (the planned predictor design) and also fit single seeds; E[T]_F = exact short sum (bins 0-5) + p * F tail mean; kappa_inst_F = (E[D]/(E[D]+E[T]_F))/g with E[D] and g as before. Predictions: (i) the deviance lack-of-fit flag (parametric bootstrap, B=200, p<0.01) fires on the pooled counts in all three bands; (ii) |kappa_inst_F - 1| <= 0.05 in every band (a modest expectation; the exponential tail has only ~3 log2 bins of substance, so F can mimic it, but with an unknown cutoff-driven bias); (iii) the empirical binned mean stays exact, as before. Whatever the bias is gets reported and, if the flag does not fire while |bias|>0.05, F is declared untrustworthy as a registered estimator.
2026-10-16 00:33 (+13:00) · 269288e · observation, surprise (family F on mean-field bins; predictions i, ii above)
Rerun of the same command with the sampler also emitting bins: the main CSV is byte-identical (sha256 4512448c...c4a2 before and after); bins in results/meanfield_renewal.bins.csv (sha 0b5bc5ab...e051). Analysis scripts/meanfield_family.py -> results/meanfield_family.json/.log (pooled 16 seeds per band, bootstrap B=200, seed [20261016,31]).
- band 0 (E[T] truth 23.5, 6% tail): F fit degenerate (a=3.55, H=2^7.5: the tail lives in ~2 bins), deviance 0.004, flag does NOT fire (p=0.22); E[T]_F 23.24, kappa_inst_F 1.010. Fine here, but the flag is blind when the tail occupies <=2 informative bins (df ~ 0).
- band 1 (truth 45.7): flag fires (p=0.005 = 1/(B+1), the minimum); E[T]_F 46.20, kappa_inst_F 0.990.
- band 2 (truth 91.3): flag fires (deviance 44829); E[T]_F 99.54 (+9.0%), kappa_inst_F 0.9185 (bias -8.2%); single-seed relative E[T] bias median +8.6% (sd 2.9%). Empirical binned mean: 0.9996. Registered predictions: (i) flag fires in all three bands -> FAILED at band 0 (2 of 3). (ii) |kappa_inst_F - 1| <= 0.05 in every band -> FAILED at band 2 (0.082), passed at 0 and 1. The registered fallback ("if the flag does not fire while |bias|>0.05, F is untrustworthy") is not triggered literally (no band has both), but the substance is clear: with a pure exponential tail F biases E[T] by +9% where the flag fires, and the flag is blind where F is harmless. Interpretation: F (truncated power law) is only as good as the tail looks like one; the empirical binned mean is exact on this known-answer process because it uses exact time sums. This is one more reason G3's C2 (F beats empirical in RMSE) has to carry the choice, and the mean-field result stays in the registration as a known failure of F on an exponential tail. No ant data were touched.
2026-10-16 00:34 (+13:00) · 269288e · deviation, decision (G4 null hardened BEFORE scripts/t1_machinery.py was ever run; no G4 result exists yet)
Review finding: the G4 null drew log P/A and boundary sojourn independently of the tail, so the null baseline (exactly linear in them) could not be proxied by log E[T]-hat. On ants log E[T] and log P/A are certainly related (on the mean-field walker E[T]=1/g to 0.1%). Changes to t1_machinery.py, registered now: (1) log P/A per rule and band is the REAL pilot value: mean over the pilot starts of P/A at the mid-band census row (columns area, P of results/pilot-v2.ants.census.csv; geometry only, no B/I/B-over-S) rather than a random draw, so the (log E[T], log P/A) joint is the pilot's own. Boundary sojourn m_B stays a synthetic nuisance (independent log-normal, sd 0.3; its pilot analogue is a B-episode column and stays off limits), which is a stated limitation. (2) Second null family: baseline outcome that is NONLINEAR in the baseline regressors (curvature in log P/A plus an m_B x P/A interaction, normalised to the same variance as the linear one). The fitted baseline is still linear, so a tail feature that is a monotone function of P/A can proxy the missing curvature: this is the false-positive risk that matters. (3) Lambda grid reduced to {0, 0.5, 1} to pay for the doubled design; seed-noise sd {0.1, 0.3}, estimators {family F, empirical binned}, sims 300, bootstrap 2000, seed 20261016 unchanged. Pass rule (registered): for the estimator that gets frozen, false-positive rate of the T1 decision rule (gain >= 0.10 and bootstrap lower bound > 0 at both bands) <= 7.5% at lam=0 under BOTH baseline families and both noise levels, and power >= 80% at lam=1 under both families at sig=0.1 (sig=0.3 power is reported, not gated: it states how noisy outcomes make T1 unattainable).
2026-10-16 00:35 (+13:00) · 269288e · intent, decision (registered BEFORE the run): deterministic test of the half-written-stem resume path
The 00:55 G2 entry argued the half-written-stem path from code because the SIGKILL landed between trajectories. This test does not depend on kill timing. New script scripts/check_halfwritten.py (prepare_gates.py is NOT edited: its hash is inside the manifests' source list): copy resume-t2.manifest.json byte-for-byte to resume-c2.manifest.json (identical config, 2 threads); run via scripts/run.py; require payload bytes equal to resume-t2's already verified payload; then damage ONE finished stem (delete its .done, truncate its bins.csv to half, plant a stray hazards.csv.tmp) and plant a stray .tmp next to a DIFFERENT intact stem, delete the compact audit and census CSVs so run.py must recompute, rerun via run.py, and require every payload byte (all stems) to equal resume-t2's again. Prediction: identical; the damaged stem is recomputed (its skip test is the exact marker string), the intact stem is skipped, stray .tmp files never enter a payload. Failure (any differing byte) would invalidate the resume claim for confirmation.
2026-10-16 03:42 (+13:00) · 997c9b2 · observation (G1)
reserve-v1 (4 slowest + 4 highest-spread pilot rules x 12 fresh seeds 2026101701..12, cap 2^33, 2 threads, via run.py, wall 1552 s): 96/96 attained all three bands, 0 escapes, max final step 796,445,321+ (796445346) <= 2^32/4 = 1,073,741,824 and <= 2^31. Per-rule max / pilot per-rule max ranged 0.96-2.14 (the 2.14x rule is a cheap high-spread one, max 7.4e7). Registered criteria (a) and (b') PASS for both 2^32 and 2^33; the original (b) parametric projection was invalid (see 00:30 entry). Pre-registered choice rule "smallest passing" gives cap 2^32 (headroom 1.35x over the validation max, 1.29x over the pilot max). Results: results/reserve-v1.audit.json, results/reserve_projection.json. Caveat: 96+176 starts vs 1408 planned; passing is a headroom statement; cap 2^33 costs nothing for attained runs and is retained as a documented option, not the registered choice.
2026-10-16 03:55 (+13:00) · 269288e · observation, surprise (G3, run after the criteria above)
scripts/test_tailfit.py: all unit/property checks pass (Euler-Maclaurin mean vs brute force 3e-9, exact floor(log2), sampler vs bin probabilities, large-n recovery, deviance). scripts/calibrate_fit.py (132 pilot-anchored cells, 200 replicates each, 16 predictor seeds pooled = 4x pilot entries, GOF 60 reps x 100 bootstrap refits; 176 s single thread; results/fit_calibration*.json/csv/log): C1 PASS (median |rel bias| of E[T] 0.031, 99% of cells <=0.15, alpha-hat median bias -0.003). C2 FAIL: family F beats the empirical binned mean in RMSE(log E[T]) in only 44% of cells (needed 70%). C3 FAIL: lack-of-fit power on realistic non-family shapes is 97% (pooled, 126 cells) but size under in-family truth is 13.5% at nominal 1% (5%: 22%): the bootstrap on a discrete grid fit is anticonservative. On the real-shape misspecified truth E1 has median |bias| 0.145 vs 0.003 for the empirical mean, and loses in 88% of cells. C4 FAIL: the lognormal tail is flagged (100%, E1 biased +59%) but an exponential-tail geometric(mean 20) is flagged only 12% of the time (a truncated power law mimics an exponential cut-off) although E1 happens to be fine there (-0.2%). C5 FAIL as registered: with H known the bracket covers the population mean in 93% of cells at >=99% (min 90%): heavy-tail means are not captured by sample brackets; the naive completed-only mean is biased -54% under independent censoring; the bracket median width is 2.9 x E[T], i.e. uninformative. Pilot split-seed check (descriptive, tail data only, 263 predictions): median |log error| 0.217 empirical vs 0.279 family; family better in 37%. By the pre-registered rule the parametric family is NOT frozen. The empirical binned mean becomes the registered E[T]; F is a labelled sensitivity. This is a null result for the "truncated survival family" idea at these sample sizes, not for the mechanism. Censoring is moot in the pilot (zero unresolved interior time) but remains uncalibrated beyond the bounds above; an unresolved fraction >=5% fails the reliability gate rather than being modelled.
2026-10-16 04:05 (+13:00) · 269288e · observation (G4)
scripts/t1_machinery.py (300 sims per cell, 2000-draw rule bootstrap of the leave-one-rule-out residuals, seed 20261016; a later on-disk edit of this script added a baseline option 'linear' and 'nonlinear'; both are reported in results/t1_machinery.csv). Null (lam=0, outcome independent of tail given baseline): 0/300 T1 positives in every cell for family F and for the empirical mean; gain median -0.002..-0.013. Positive (lam=1, 0.5): T1 positives 99.7-100%. G4 passes for both estimators, but this is a weak control and must not be over-read: between-rule spread of E[T] in the pilot is huge, so power is saturated at lam>=0.5 (smaller lam and realistic noise not explored), and the null is very conservative at the gain>=0.10 threshold. The nuisance regressors (m_B, P/A) and seed noise are synthetic assumptions, not measured B/S behaviour; real power is unknown.
2026-10-16 04:15 (+13:00) · 269288e · decision
Gates: G1 PASS (cap 2^32); G2 PASS with the stated deviation (no mid-trajectory checkpoint, finished-trajectory resume tested, loss per interruption bounded by the slowest trajectory, 74.7 s under 2 threads in reserve-v1, ~12 min worst case at 2^33 steps and 1.2e7 steps/s); G3 resolves to the registered fallback (empirical E[T]; family not frozen); G4 passes for the empirical estimator (weak control). Confirmation inputs frozen in results/confirm-v1.manifest.json (sha256 19a86779...); a dated registration is appended to README. Confirmation NOT launched, T1/T2 NOT evaluated.
2026-10-16 04:25 (+13:00) · 269288e · decision
README gate-resolution table and dated registration appended; notebook.ipynb extended with the gate-resolution cells and executed from a clean kernel (no error outputs); HANDOFF updated; confirm-v1 manifest frozen, confirmation not launched. Scratch scripts in scratch/ are not part of the record. Remaining weaknesses: no mid-trajectory checkpoint; partially written stem path untested; G4 control saturated; census-wide generality not claimed. No commit made.
2026-10-16 08:50 (+13:00) · 269288e · observation, correction (this chat's closing entry; clock is real, earlier entries by other sessions are interleaved)
Half-written-stem resume path is now TESTED, correcting the 04:25 "untested" remark: scripts/check_halfwritten.py -> results/halfwritten_resume.json/.log. resume-c2 (byte copy of resume-t2 manifest) matched resume-t2 on all 180 payload files; after deleting one stem's .done, truncating its bins.csv, planting a stray .tmp, and deleting audit+census, the rerun via run.py again matched all 180 files (4.6 s: only the damaged stem recomputed). Stray .tmp of the damaged stem was overwritten; the stray .tmp beside the intact stem persists but is never part of a payload. Still no mid-trajectory checkpoint. Mean-field known-answer calibration (entries above): raw renewal estimator kappa_inst 1.004/1.001/1.000 (sd 0.026/0.011/0.006 at three bands; the sd<=0.02 criterion FAILED at band 0); family F on the same bins: flag blind at band 0, kappa_inst_F 0.9185 at band 2 (predictions i, ii FAILED). Supports the empirical-mean fallback. G3 full calibration (results/fit_calibration.json): C1 pass; C2 FAIL (F beats empirical in only 44% of cells); C3 FAIL (misspecified: |bias| F 14.5% vs empirical 0.3%; in-family size 13.5% at p<0.01); C4 FAIL (exponential tail flagged only 12%); C5 FAIL (min coverage 0.90). F not frozen; empirical mean is the estimator. G4 hardened (real P/A, nonlinear null; results/t1_machinery.json, 300 sims): false-positive 0.0 and power 1.0 in every gated cell for both estimators. Saturated: it shows the decision rule is not trigger-happy under these nulls but does not show sensitivity at realistic effect sizes (lam=0.5 also detected). Weak control, as already noted. G1: reserve-v1 96/96 starts complete, max final step 796,445,321 <= 2^30, so cap 2^32 passes (<= cap/4). Confirmation (confirm-v1) NOT launched by this chat.
2026-10-16 08:56 (+13:00) · 269288e · intent, decision (confirm-v1 launch; continuing from HANDOVER-2026-10-16.md)
Pre-launch checks: every source hash in results/confirm-v1.manifest.json matches the tree (11/11 OK, including src/lib.rs). Seeds 2026101801-32: no overlap with ant namespaces (pilot 01-04, reserve 1701-12/1721-24, profile 1501-04). 1801-16 were also used by the mean-field renewal sampler, which is a synthetic non-ant process, so no data are shared; noted, manifest NOT edited. Launched via scripts/run.py --name confirm-v1 (WSL, background, log results/confirm-v1.driver.log). Expected wall: ~1408 starts vs 96 in reserve-v1 (1552 s at 2 threads) => roughly 6 h; the manifest's "<=30 min" resource line was written for gates and is exceeded by design here. T1/T2 not evaluated; to be run exactly as registered after finish.
2026-10-16 08:58 (+13:00) · 269288e · observation, decision (separate session; independent pre-launch audit, NO launch)
Independent audit of the frozen confirm-v1 registration: manifest sha256 19a86779a96341bb...92b8c matches the README; all 11 hashed sources (including src/lib.rs 2b272145...) and the cohort input (91cde6e9...) match the tree; the sampler binary target/release/examples/kappa_tail_budget_sampler (mtime 00:08) is neither rebuilt nor hashed by pilot.py/run.py, so its provenance is that build only. Two registration inconsistencies were found. Neither changes the confirmatory logic, and the frozen files were NOT edited: (1) README/prepare_confirm.py say seeds 2026101801..32 were "verified absent" from other manifests and notes, but 1801-16 were used by the mean-field renewal calibration (results/meanfield_renewal*.csv, NOTEBOOK 00:27-00:33). That is a different walker with its own seed mixing, and no ant trajectory was run under those seeds, so no outcome information is shared; the claim is still false as written. (2) The manifest's resource_budget string ("4 workers ... <=30 minutes per experiment, check logs and stop if exceeded") is stale text copied from pilot-v2 and contradicts threads=2 and the registered ~3 h runtime. This session did NOT launch: the 08:56 session's run.py --name confirm-v1 (WSL pid 1242026, 2 threads, results/confirm-v1.driver.log) was already live at 08:57, and a second launch would race on the same dumps/confirm-v1 stems. Not done here: T1/T2 analysis, README, notebook. The analysis choices the README leaves open (raw vs logit B/S, P/A at band start vs mid-band as in G4, pooled ratio vs per-seed mean for E[T] and m_B, the T2 mapping from extrapolated parameters to B/S, the per-start "keep" definition, q999 interpolation) should be fixed and hashed in a dated entry before any confirm-v1 outcome file is read.
2026-10-16 10:34 (+13:00) · 269288e · observation (confirm-v1 finished)
scripts/run.py --name confirm-v1 exited 0 after 5661 s (2 threads). Audit: 1408/1408 ants + 4 controls complete, 0 escapes, max final step 812,691,108 <= 2^30 (1,073,741,824). Reliability gate: 44/44 rules have 12 seeds per role per band; unresolved fraction 0.0 in all bands. Accounting/gates PASS.
2026-10-16 10:34 (+13:00) · 269288e · deviation, decision (analysis script written after the run)
No T1/T2 analysis script existed. scripts/confirm_analysis.py was written after confirmation finished; only audit totals, column names and the head rows of one start's bands.csv (one B value visible) had been inspected, no outcome aggregation. Where the registration is silent I fixed the choices in the script header before running it (B/S=B/steps; m_B=b_steps/b_complete; E[T]=pooled entry-conditioned mean; q999 from bin upper edge; T2 prediction = renewal identity m_B/(m_B+E_T), no P/A rescaling; persistence comparator added). Single run, no variants tried.
2026-10-16 10:34 (+13:00) · 269288e · observation (T1/T2 result; results/confirm-v1.analysis.json, confirm-v1.t2_predictions.csv)
T1 (44 rules, LOO PRESS R2 gain of log E[T] over baseline): band 0 gain 0.352, 95% lower bound -0.018 (hi 0.777); band 1 gain 0.511, lower 0.253. Baseline R2 is ~0 or negative (-0.085, 0.051). Threshold gain>=0.10 met at both bands, but lower bound >0 fails at band 0, so T1 FAILS as registered. q999 instead of E[T]: gains 0.186 / 0.208, lower bounds -0.34 / -0.03: also fails; point estimates are smaller than E[T]'s. T2: median relative error of identity-predicted band-2 B/S = 0.123 (IQR 0.059-0.255) <= 0.20, so T2 PASSES as registered. Comparators: q999 0.504; persistence (log-linear extrapolation of the outcome seeds' own y) 0.072, i.e. better than the model.
2026-10-16 10:34 (+13:00) · 269288e · interpretation
Mixed and not a confirmation of a tail mechanism: T1 is a registered fail (band-0 interval includes 0, n=44 rules, wide bootstrap), and the T2 pass is not evidence for the tail since a model-free extrapolation does better and the identity m_B/(m_B+E_T) uses m_B (boundary sojourn) as well as E[T]. E[T] beats q999 on both tests. Baseline regressors explain almost nothing, so gain is relative to a weak baseline. The decomposition (README item 5) and A1-A3 not yet run. Single cohort; no census-wide claim.
2026-10-16 17:30 (+13:00) · e741bab · intent, deviation (item-5 decomposition; scripts/confirm_decomposition.py)
Decomposition written after T1/T2 were known. Choices and the decision rule are fixed in the script header before its single run: predictor seeds, empirical entry-conditioned bins, factors p_tail, tail mean, short mean, boundary mean (the short mean is a fourth factor beyond the README's three, needed for E_T to be exact), Shapley average over 24 orderings, contrast band 0 -> band 2 per rule, onset 64 primary with 16/256 sensitivities.
2026-10-16 17:31 (+13:00) · e741bab · observation (results/confirm-v1.decomposition.{json,csv})
Onset 64: median share of |phi| is tail mean 0.92, p_tail 0.07, boundary mean 0.003, short mean 0.0003; tail mean dominates in 44/44 rules. Pooled signed phi (over sum |model dF|): tail mean -2.06, p_tail +1.04, boundary +0.008, so p_tail and tail mean strongly offset. Median model dF = -0.0178 vs observed dy = -0.0158; across rules corr(model dF, observed dy) = 0.66. Onsets 16 and 256 give the same picture (tail share 0.996 and 0.995). Decision rule outcome: tail share > boundary share, so "only boundary transfers" is NOT triggered.
2026-10-16 17:32 (+13:00) · e741bab · interpretation
This is a near-tautology of the identity, not evidence for a tail mechanism: with E_T >> mB, f ~ mB/E_T, and E_T is carried by the tail by construction, so any change in E_T is attributed to the tail components. The large offset between p_tail and tail mean means the split between them is unstable (they are anticorrelated through the onset/area cutoff). What survives: the model's area-scaling change in B/S comes through E_T, not mB (boundary residence is nearly flat). It does not show E_T causes B/S, and T1 still fails at band 0. Model counterfactuals, not interventions. Remaining undone: commit (not made); the README claim "kappa explained by tail" stays unsupported.