Skip to content

Specs 015 and 016: time-late repair, classical controls and a learned whole-period model (both decided by the panel) - #33

Merged
IanMayo merged 31 commits into
mainfrom
claude/keen-wozniak-77td7j
Nov 14, 2026
Merged

IanMayo merged 31 commits into
mainfrom
claude/keen-wozniak-77td7j

Conversation

@IanMayo

@IanMayo IanMayo commented Nov 13, 2026 •

Copy link
Copy Markdown
Member

Summary

Two time-late studies, each registered before its fresh seeds and decided by a five-reviewer panel. The owner merges: the PR adds a row to SRD §5 and lines to §9.

Spec 015: repair and re-registration (test seed 337)

Repairs the three faults spec 014's panel found (the evidence's duration volume, the edge rule, the drifting reference) and decides the same quantities again. Nothing trained.

  • Held-course false manoeuvres 0.53 (0.80 for spec 014's search on the same periods); headroom with a perfect evidence 1.17 [1.10, 1.25], lower limit 1.099: inconclusive, and by the registered rule no GPU budget.
  • Panel (experiments/20261113-tl3/review.md): numbers reproduce; the headroom depends most on how the reference is fitted (1.11 to 1.19); the evidence repair is not finished at the edges of the prior's support.

Spec 016, study L: classical controls and a learned model (test seed 341)

Owner's decision 2026-11-13 (option B): build the classical controls and train a learned whole-period model in parallel under a plan registered first, scored only once the controls exist.

  • Controls (nothing trained): wild-bearing editing, an effective bearing sd from the estimated error correlation, a broadened prior pooled with Annex B's, a cautious declaration rule, a hedged track (timelate/hedge.py, corr.py, run4.py, study4.py).
  • Model: a bidirectional transformer over the whole period, three seeds of 12.5 million simulated periods on a T4 each ($14; November's Modal total about $41 of the $50 budget), its reported track the arc model fitted at the manoeuvres it declares (regress/period_data.py, timelate/learned.py, tma2-tlpredict).
  • Registration experiments/20261113-tl4-decision/ (plan, mix, training plans, code and criteria bound by digest before any training run or fresh seed; two addenda). The scorer refuses a learned track without the controls' committed validation record.

Registered outcome (experiments/20261114-tl4/, 2,860 periods, scored once): learning is shown on no split and there is harm on Annex B data, so by the rule the classical controls stand and the learned track stops.

Split Declared control ÷ learned (three seeds)
Shifted prior 0.82, 0.80, 0.82
Shifted prior 2 0.87, 0.87, 0.94
Correlated errors 0.83, 0.83, 0.84
Outliers 0.78, 0.77, 0.81
Bias (absent from training) 0.98, 1.00, 0.97
Annex B 0.82, 0.81, 0.82
Held course 1.06, 1.06, 1.06

The classical control against the standing search: 1.68 with 2% outliers, 2.44 with 5%, 1.33 with correlated errors, 1.70 on quiet targets; nothing under bias or a shifted prior.

Panel (experiments/20261114-tl4/review.md, five approve with findings; all 42 ratios reproduce):

  • The 20% is a tail: the median per-period ratio is 1.00 on every split. The whole loss is where the model declares fewer manoeuvres than the control; its threshold (0.5) was never tuned while the control's settings were. The registered comparison measured the model's detector, so "this model with this read-out stops".
  • The model's own output is 0.71 of the control on clean data, and level under the shifted prior in range only.
  • The mismatch conditions lie inside the model's training ranges: it lost in-distribution.
  • The control is not free (it calls more one-manoeuvre targets quiet) and knows the simulator's error family.
  • Not delivered: a working prior-mismatch diagnostic, a Huber cost, a whitened fit, the export check on trained models, IMM/EKF tracks beside, the weights' digests in the test record, unit tests for the runner and scorer.

Also in this PR

  • GPU launcher back to module-scope functions (the loop-built form had never run and failed at container start-up); the workflow bounds its wait.
  • Time-late workflow can fetch trained checkpoints and score them beside the controls.

Follow-on (owner's choice)

Panel's recommendation: adopt the classical control as the standing time-late system and study, classically, whether the shifted-prior gap is identifiability; only if it is not, try the trained models as proposers inside the search (CPU only).

Posts

Spec 015: kickoff, write-up and slides dated 2026-11-13 (time-late-repair). Spec 016: kickoff 2026-11-13, write-up 2026-11-14-time-late-learned.md, slides 2026-11-14-time-late-learned-slides.md (with track plots).

Test plan

  • uv run ruff check ., ruff format --check ., uv run mypy
  • pytest tests/unit/test_timelate4.py tests/unit/test_period_model.py tests/unit/test_timelate3.py
  • Site builds
  • CI green on the head commit

🤖 Generated with Claude Code

https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…op limit changed before registration; study registered: plan tl-d.json, decision record with forecasts, SRD §9 line

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…47 held); test seed 337 launched

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…0.64, wrong 0.44/0.13/0.43; D3 1.06 and 1.17 [1.10, 1.25] (lower limit 1.099: inconclusive); D4 search 0.53, mixed prior 0.00; D5 by the rule: no GPU budget. To the panel

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…ections

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
@IanMayo IanMayo changed the title Spec 015: time-late, repair and re-registration (in progress) Spec 015: time-late repair and re-registration (test seed 337; panel: five approve with findings) Nov 13, 2026
…sical controls and a learned whole-period model)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…ing of priors; wild-bearing editing and an effective sd from the estimated error correlation; runner run4 and its readings; broadened prior, a second shifted split, draft plan and tuning run file

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…the plan

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
The period stream (regress/period_data.py, research R9): engagements of stream
seed 339, each drawing its family (Annex B 0.65, randomised statistics 0.20,
quiet 0.15) and its bearing-error overlay (a quarter of all: correlated,
outliers or both; never bias or the sigma factor) from its own sub-stream, cut
to a period as timelate.periods.cut does, with spec 012's frame features plus
time and period length, state targets and a manoeuvre-in-progress label.

The model (regress/model.py, R7): causal=False drops the attention mask and
masks padded tokens as keys; manoeuvre_head adds a logit per token. New
configuration fields are omitted from to_json at their defaults, so spec 012's
config digests do not move (pinned in the tests). Training (regress/train.py)
adds the logit's cross-entropy and a monitor on the same stream seed from
index 2^40.

Read-outs (timelate/learned.py, R8): the direct track at every row, spans from
the manoeuvre probability, and the arc read-out (spec 014's refit control on
the model's spans and track). tma2-tlpredict writes a shard of them; the ONNX
export agrees with the trained model on CPU (FR-015).

Plans: tlm-mix, tlm-toy, tlm-pilot (T4, at most 50 minutes) and draft
tlm-s1..s3 (total_updates a placeholder until the pilot). Nothing was run on a
GPU.

The schema's RegressorConfig does not yet carry the new fields (schema/ is
with spec 016's T005): test_config_matches_its_schema_type allows them until
it does.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…in 1, quiet probability 0.01, temperature 1); tables by script

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…ailures for 96 minutes, cancelled); ship the script in the image; bound the wait in the workflow

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…el's own track and the arc read-out with spec 015's acceptance rule)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…ule scope); the loop-built serialized functions of addendum 1 were never run and cannot be imported in the container

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…earned track needs the committed controls' validation record), learned tracks in the time-late workflow, draft of the registered plan and its run files

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…gistered, SRD study L (proposed), research as registered

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…e and criteria bound before any training run or fresh seed)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…d only the test run file: its script had failed)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…ndum 1 names the record in the test run file

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…er's dashboard); addendum 2 names them in the test run file

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…h check recorded in addendum 2

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
… the registered tables script is unchanged)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…o split, harm on Annex B data: by the rule the classical controls stand and the learned track stops. Tables by script; README intervals checked by test. To the panel

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
… corrections; addendum 2 corrected on shard size

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…m the results branch)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
…es; AGENTS.md; tasks; kickoff update

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019erPajyAwQ6mBQ2Xz4xNHs
@IanMayo IanMayo changed the title Spec 015: time-late repair and re-registration (test seed 337; panel: five approve with findings) Specs 015 and 016: time-late repair, classical controls and a learned whole-period model (both decided by the panel) Nov 14, 2026
@IanMayo
IanMayo merged commit ae5ea9d into main Nov 14, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants