diff --git a/docs/port/HANDOFF.md b/docs/port/HANDOFF.md index c2187342..9848e86e 100644 --- a/docs/port/HANDOFF.md +++ b/docs/port/HANDOFF.md @@ -6321,3 +6321,28 @@ right not to widen on five rows. * **`0x73002`/`0x73003` exist** — 160 elements with the same low bits and an undecoded `0x70000` above. A mask like `kind & 0xFFFE == 0x3002` matches them too. Decide about those deliberately; I have not looked at the high bits. + +## ✅ The two sweeps loop at 720:600 — run them at different rates (`e3f665d`) + +`docs/re/f6-two-leaf-periods-confirmed.md`. Prediction registered before +measuring. + +`pteff03` declares a 600-unit loop, `pteff03a` **720**. Predicted ratio 1.2000: + +| | `pteff03` | `pteff03a` | ratio | error | +|---|---|---|---|---| +| `f6b` | 600 fr (577→1177) | 718 fr (581→1299) | **1.1967** | **0.28 %** | +| `f6` | 1168 fr (746→1914) | 1383 fr (755→2138) | 1.1841 | 1.33 % | + +Ratios taken inside each capture, so no clock enters — which is why runs +differing 2× in frames agree. `f6b` also paces at one frame per leaf unit, so it +reads directly: **600 frames for 600 units, 718 for 720**. + +🔴 **If you run both leaves on one rate the strips stay locked**, and drift from +the game by ~118 units per cycle, growing. Two elements, two timelines — now +measured, not read off the leaf table. + +✅ **This also closes the sweep period** that has been open all week as "one wrap +per capture". Both leaves give a complete boundary-to-boundary cycle in **both +existing logs** — no new capture. The truncating reader saw one quad, so it could +only ever see one of the four cycles already on disk.