# The one-push design: draft experiment and its check on old starts (plan)

Written October 13, 2026, about 13:20 Halifax, before anything in it was run. Nothing here is locked and nothing in it
has been run. Part A drafts the experiment for review. Part B plans its check on old starts. Neither runs without
Colson's approval.

**Decision, October 13, 2026, about 13:35 Halifax: not run.** Colson chose not to run the check. The M4 shortfall
described below stays a pre-run estimate from numbers already on record. It is not an experimentally measured failure,
and the check has no verdict. Further experimental planning and running are paused pending his review.

## Why

After the H2 check (hold_check_results.txt: NOT FEASIBLE at ±25%), Colson asked, at about 13:00:

- "Prepare the one-push design check plan for review, but do not execute it yet."
- "Preserve H2 as NOT FEASIBLE at ±25%, including all unsuccessful interventions and the earlier pinned-hold failure."
- "The proposed one-push design is a new experimental question, not a successful implementation of the original
  sustained-hold hypothesis."
- "Please specify a comparison between a ±25% push at T−500 and a matched push at T, with appropriate sham and
  untouched controls."
- "Record the full achieved coherence trajectory, residual coherence at T, integrated history, and intervention
  effort."
- "Define the primary contrast, validity criteria, numerical checks, and PASS/FAIL/INCONCLUSIVE rules before any new
  run."
- "Do not use the already observed H2 outcomes to retune the one-push design for a favorable result."
- "Keep the locked Cause Test FAIL unchanged, preserve the A/B/C comparison as a separate future study, and do not
  incorporate any RGMC backlog concepts into the active protocol."
- "No fresh starts, no experimental lock, and no publication."

The aim is a design that can tell apart four things: when the push came, the coherence left at T, the integrated
history before T, and the effect of pushing at all.

## What stays fixed

- The cause test's decision (October 12) stays FAIL as registered. Rounds 1 and 2 stay exploratory.
- H2 stays NOT FEASIBLE at ±25%, with every candidate tried (λ = 0.05, 0.10 and 0.20) on record, and so do both pinned
  holds of the first check (NOT FEASIBLE). Nothing here rescues or stands in for the sustained-hold hypothesis. Whatever
  this design finds answers its own question.
- Nothing in it was changed in light of the H2 check. The push is the first check's ±25% pulse, unchanged, moved to
  T − 500 and kept at T as its match. M4 is the revised design's, written before H2 ran.
- The A/B/C comparison stays a separate future study, and no RGMC backlog concept is part of this protocol. (Neither
  term appears in this folder or the cause test's; this records the instruction.)
- No fresh start (61 to 102) is touched, nothing is locked and nothing is published. The check uses old starts 13 to
  18, with new moments.
- prelock_checks_plan.md and hold_check_plan.md are not edited. Nothing is written to ../cause-test-2026-10-12,
  ../cause-explore-2026-10-12, ../nudge-test-2026-10-10 or ../coherence-growth-2026-10-11. The cause test's 16 locked
  files are checked against cause_lock.json before every piece and after the check, and both folders are fingerprinted
  before and after.
- Draws: (20261013, 8, seed) for the check's moments and (20261013, 9, seed, moment, timing) for its sham signs.

## Part A. The draft experiment (for review; not run, not locked)

**Question.** Does a ±25% push at T − 500 change later perturbation growth differently from the same push at T?

**Starts and moments**, if this experiment is ever approved and locked: as drafted, starts 61 to 102 (42), with seeds
and gap directions as nudge_test.py derives them; ten moments per start, T = 2,000 + o + 350 m; the model and settings
unchanged. Nothing in this plan touches those starts.

**Arms (dense method only), per moment.**

| arm | what is done |
|---|---|
| none | the base run, untouched |
| early up / down / sham | one push at T − 500 from the untouched state, then untouched to T + 500 |
| late up / down / sham | one push at T from the untouched state, then untouched to T + 500 |

**The push** (the first check's pulse, unchanged). In each group g, every pulled oscillator j moves by
Δθ_j = a_g sin(ψ_g − θ_j), a_g being the smallest amplitude with [R_g(+a) − R_g(−a)] / 2 = 0.25 R_g at that instant
(the cause test's amplitude solve, unchanged). Up moves by +a_g and down by −a_g. The sham moves each oscillator by
±a_g sin(ψ_g − θ_j) with the cause test's paired signs, so its first-order effect on coherence cancels, and its Σ Δθ²,
Σ |Δθ| and largest move equal up's and down's exactly. Bands just after the push: up 1.225 to 1.275, down 0.725 to
0.775, sham 0.95 to 1.05 × R_g just before it. A push that cannot be solved or lands outside its band leaves that moment
not carried out; nothing is clipped or replaced. "Matched" means the same rule, method, relative size and sham at both
times. The effort in radians differs a little between the two times, since a_g depends on the state; it is reported.

**Outcomes.** E4, as chosen: E1 (the carried gap over (T + 200, T + 500]) and E2 (a fresh gap made at T + 200 and
counted over (T + 300, T + 500]), each decided on its own, the two to agree. E2 is used only if its check passes
(e2_check_plan.md). If it fails, E4 cannot run as chosen, and no outcome is put in its place automatically.

**Primary contrast: the timing difference.** For timing k (E for T − 500, L for T) and outcome G:

    d^up_k = G_up,k − G_none,   d^down_k = G_down,k − G_none      (each moment)
    D^up_k,s, D^down_k,s = their averages over start s's moments carried out
    S_k,s = (D^down_k,s − D^up_k,s) / 2
    Δ_s = S_E,s − S_L,s

Predicted direction if history drives growth: Δ > 0. The push at T − 500 slows later growth after up and speeds it
after down, more than the same push at T does. G_none cancels from S and Δ; it is needed for the sides. Error bars
from the starts: 400 redraws, seed 20261015.

**Threshold.** δ = ½ × 0.838 × κ × ΔM_E. Here 0.838 is the natural slope on the 500-unit history (the 42 cause-test
starts, ± 0.059); κ = 1 for E1, and κ_E2 from E2's check; ΔM_E is the early push's achieved (M_up − M_down) / 2, with M
the mean of c over t = T − 500, ..., T − 1, averaged over the moments carried out. A push at T leaves M unchanged, so
the history reading predicts S_L ≈ 0 and Δ ≈ S_E ≈ 2δ.

**Validity (all needed; otherwise INCONCLUSIVE).** M2 and M3 of the revised design were for a held level and do not
apply. The numbering is kept so that M4 to M6 mean what they meant there.

| | criterion |
|---|---|
| M1 carried out | every push of both timings as specified and inside its band; the sham's Σ Δθ² and Σ \|Δθ\| within a relative 10⁻⁹ of up's and down's; for the carried gap, no push changes it (relative change below 10⁻⁶); at most 21 of the 420 moments left out, with every start keeping at least 5 of its 10 (a moment counts only if both timings were carried out); nothing clipped or replaced |
| M4 large enough to read a null | ΔM_E at least one natural spread of the 500-unit mean within a start (0.0057, round 2). Unchanged. The draft's reason: "Below that, a null cannot be read as negative." |
| M5 outcome intact | every gap measured at all its put-backs; every number finite |
| M6 E2 calibrated in the experiment | with E2: its C3 and C4 computed again in the untouched arm on the experiment's own starts (item 3 of e2_check_plan.md) |

The sham's history (the mean of A_sham,E between −0.25 and +0.25) is reported and flagged, and does not block.

**Decision, for each outcome.**

    clear         Δ̄ > 3 e(Δ)
    early sides   D̄^up_E < −2 e(D^up_E)  and  D̄^down_E > 2 e(D^down_E)      (against untouched)
    excluded      Δ̄ + 2 e(Δ) < δ
    reversed      Δ̄ < −3 e(Δ)

- **INCONCLUSIVE** if M1, M4 or M5 fails, or M6 with E2.
- **PASS:** clear, early sides, Δ̄ ≥ δ and S̄_E ≥ δ. Coherence pushed up 500 units before T slowed later growth and
  coherence pushed down sped it, each against untouched, by at least half of what the natural history slope predicts,
  and by that much more than the same push at T did.
- **FAIL:** excluded or reversed. The report names the kind: none (Δ̄ within 3 e(Δ) of 0), small (clear but
  excluded) or reversed. S_E and S_L are each reported with their own sign and error bar, so that "both timings did
  the same" is told apart from "neither did anything".
- **INCONCLUSIVE** otherwise.
- With E4: PASS on both outcomes gives PASS, FAIL on both gives FAIL, and anything else is INCONCLUSIVE.
- A PASS would answer this design's question about one push's timing. It would not be a success of the sustained-hold
  hypothesis.

**What the arms can and cannot tell apart.**

- *Timing:* Δ, the same push at two times.
- *Pushing at all:* sham − none at each time (a push that leaves coherence where it was); and P_k = (D^up_k +
  D^down_k) / 2, the part up and down share, which drops out of S.
- *Coherence left at T against integrated history:* the push at T leaves the whole change at T and no history before
  it; the push at T − 500 changes the history by ΔM_E and leaves less at T. If the coherence at T drove growth, S_L
  would exceed S_E; if the history did, S_E would exceed S_L.
- *Not separated:* within the early arms, the history, the coherence left at T and the coherence after T all come from
  one push and rise and fall together from moment to moment. Their values are reported moment by moment, and any fit
  across moments is labelled exploratory. Separating them would take arms this plan does not add.

**Recorded and reported (no pass or fail).**

1. *Trajectory:* each group's coherence at every time unit from T − 500 to T + 500, every arm, with the values just
   before and just after each push. Saved in full under generated-artifacts and summarized in the results.
2. *Coherence left at T:* R_T,k = (c_up,k(T) − c_down,k(T)) / 2, and each arm minus untouched at T, also per unit of
   the planned change (for the push at T, the value just after it).
3. *Integrated history:* M by arm over (T − 500, T] and over (T − 100, T]; ΔM_E; 500 × (M_arm − M_none) for every arm,
   sham included; A_up, A_down and A_sham as fractions of the planned change 0.25 M_none; ΔM_L (zero by construction,
   as a check).
4. *Effort:* a_g by group; Σ Δθ², Σ |Δθ| and the largest |Δθ| of every push; the early-to-late ratio of Σ Δθ².
5. *Coherence left in the outcome windows:* mean c over (T, T + 200], (T + 200, T + 500] and (T + 300, T + 500], every
   arm minus untouched, per unit of the planned change.
6. *Growth:* D^up, D^down, P and sham − none at each time; early growth over (T, T + 200]; every start's values and
   signs; both outcomes, whichever decides.
7. *Per unit:* S_E per unit of ΔM_E and of R_T,E; S_L per unit of the change at T; each S per unit of Σ Δθ².

**Predicted effect sizes** (E1; for E2, multiply by κ_E2), at the history change expected below (ΔM_E ≈ 0.0034):

| reading | S_E (push at T − 500) | S_L (push at T) | Δ |
|---|---|---|---|
| history drives growth, at the natural slope | 0.838 × 0.0034 ≈ 0.0028 | about 0 | about 0.0028 |
| the instantaneous value (the reading the cause test failed) | 0.160 × R_T,E, a few 10⁻⁴ | 0.160 × 0.0064 ≈ 0.0010 | below 0 |
| a slow hidden state drives both | about 0 | about 0 | about 0 |

δ would be about 0.0014 with E1. In the cause test, a ±50% push at T moved the delayed growth by S = +0.0003.

**Uncertainty (planning figures).** Taking the revised design's e(S) ≈ 0.00023 (42 starts) for each time, with the two
times independent, e(Δ) ≈ 0.00033. The history reading would then be about 8 error bars from 0, and δ about 4. On
these figures the precision would be enough; what stops the design is the size of the history change (next section).
The decision code, written once, would work out the chance of each decision by simulation before any lock.

## The expected shortfall on M4 (worked out before this plan was written)

From numbers already on record (coherence only; no growth was used):

- In the first check, a ±25% push at T kept, per unit of the planned change, about 0.51 of the up–down difference over
  the next 200 units (up 0.534, down 0.491) and about 0.53 over the 300 after (up 0.676, down 0.390; the sham's +0.203
  is shared by up and down and drops out of their difference). Moved to T − 500, those windows become (T − 500,
  T − 300] and (T − 300, T]. So the 500-unit history would change by about 0.52 of the planned 0.0064: ΔM_E ≈ 0.0034,
  about 0.6 natural spreads.
- M4 needs 0.0057, which means keeping about 0.89 of the planned change on average over the whole 500 units. The first
  check measured 0.51 and 0.53 in its two windows. So this check would very likely end NOT FEASIBLE on P2 (below), and
  an experiment would be INCONCLUSIVE on M4.
- At ±50%, the cause test's own size, its numbers (a change at T of 0.0130; 0.515 kept over the first 200 units and
  0.318 over the next 300, dense) give ΔM_E ≈ 0.40 × 0.0130 ≈ 0.0052, about 0.9 natural spreads: still short, by less.
  It is not proposed. Colson specified ±25%; choosing a size now would be choosing after seeing these numbers; and at
  −50% the down arm starts at about the level of fully random phases (about 0.014 for 4,000 oscillators).
- M4 stays as written. It is not lowered or replaced here: doing that after this estimate would fit the standard to
  the design. If the check runs, it measures ΔM_E directly.

## Part B. The check on old starts (plan; not run)

**What it answers.** Can both pushes be carried out as specified, and does the push at T − 500 change the 500-unit
history enough for M4, with each side moving and the sham matched? No gap is carried, and no growth is measured.

**Starts, moments and base runs.** Old starts 13 to 18 (seeds 12 to 17). Ten moments per start: T = 2,000 + o + 350 m
(m = 0 to 9), o a multiple of 5 from 0 to 345 drawn once per start from (20261013, 8, seed). If o equals that start's o
in the first check or in the H2 check, the next draw from the same generator is taken. Each base run is run again (it
must reproduce its saved run exactly, as these six did in both earlier checks) and keeps the untouched state at T − 500
and at T.

**Tasks, per moment.** Early: up, down and sham side by side from the state at T − 500, one push, then 1,000 units.
Late: up, down and sham side by side from the state at T, one push, then 500 units. Sham signs from (20261013, 9, seed,
moment, timing), group A before B. For the first moment of each start, also a zero push (no move in any of the three
rows) from the state at T − 500, for 1,000 units (V3).

**Recorded.** Items 1 to 5 of part A: coherence and effort only.

**Criteria, over the 60 moments.**

| | criterion | |
|---|---|---|
| P1 carried out | every push of both timings solved and inside its band in at least 57 of the 60 moments, and every start keeps at least 5 of its 10 | blocking |
| P2 large enough to read a null (M4, unchanged) | ΔM_E, averaged over the moments carried out, at least 0.0057 | blocking |
| P3 each side moved | M_up,E − M_none and M_none − M_down,E each more than 2 error bars above 0 (error bars from the six starts, 400 redraws, seed 20261015) | blocking |
| P4 sham matched, one push each | at every push, the sham's Σ Δθ² and Σ \|Δθ\| within a relative 10⁻⁹ of up's and down's; each pushed arm moved once, and at no other time | blocking |
| P5 sham history | the mean of A_sham,E between −0.25 and +0.25 | reported; a failure is flagged |
| P6 effort at the two times | the median over moments of the early push's Σ Δθ² over the late push's, between 0.8 and 1.25 | reported; a failure is flagged |

**Numerical checks.**

- **V1.** Every base run reproduces its saved run exactly (coherence, gap and settling trace), as in the H2 check, and
  every piece runs in the same numerical environment (CPU, Python, libc, numpy and its dispatch).
- **V2.** Every recorded coherence and every push's numbers are present and finite.
- **V3.** Over the first 100 units, the zero push stays within 10⁻¹² of the untouched run's coherence in both groups,
  in all six and in the dry run. A mistake in setting up a branch would show at once; rounding alone would stay far
  below this. Whether it agrees to the last digit over all 1,000 units is reported.
- If V1, V2 or V3 fails, the check gives NO READING and is reported as it stands.

**Verdicts.**

- **FEASIBLE:** V1 to V3 hold and P1 to P4 are met. The design could then go to Colson for the remaining steps before
  any lock (the timing, the decision code with the chance of each decision, and the lock), each with his approval.
- **NOT FEASIBLE:** V1 to V3 hold and any of P1 to P4 is not met. It is reported with every diagnostic, and the design
  does not go ahead as written. No push size, timing, criterion or candidate is changed after results.
- **NO READING:** as above.
- **Expected,** from the section above: NOT FEASIBLE on P2.

**Running (only if approved).**

- A dry run on old start 1 (seed 0, 700 units, one moment at T = 600, so the early push is at t = 100, with 50 units
  after T), written to dryruns/. It checks the base run in pieces against ct.base_run and the saved run; V3; the pushes
  and the sham against a direct computation (bands, equal Σ Δθ² and Σ |Δθ|); and the recorded trajectory. Its numbers
  count toward nothing and are disclosed in the results.
- Then foreground pieces, one at a time, each under `timeout -k 10 285 python3 -B one_push_check.py run`: seven
  workers, no task begun after 120 seconds into a piece, nothing left running between pieces.
- Time, from the first check's run log: its base runs took one piece (2.6 minutes), and its 120 moment tasks took 36
  minutes in 13 pieces, running three arms for 2,100 units per moment in all. This check runs three arms for 1,500
  units per moment, plus six zero-push tasks: about 30 minutes by that scaling, so about 30 to 45 minutes in all, in
  12 to 15 pieces.
- Working files go to generated-artifacts/cause-prelock-2026-10-13/one_push_check/ (git ignores it). The plan, the run
  log, the results and the dry run stay here.
