port: branches announce themselves -- their lesson, applied where it already bit me
Their salvaged iteration produced the rule I most needed: have each branch announce itself in the log, so a run that took the wrong path says so before its numbers are read. Assertions catch the edit; log lines catch the execution. Two of my own failures were of exactly this shape. --no-hold under --time produced byte-identical renders because --time sets frozen and pose_at tests 'holding and not frozen' -- a request silently overridden reads exactly like one that worked. And I enumerated three free-running clocks, wired two, and a run pinning two of three looked identical to one pinning all three. Both now announce. --no-hold prints INERT with the reason when --time is present, and the pose line carries the effective configuration of all three clocks: 'pose = timeline [frozen, loop-phase=free, leaf=free]' against '[running, loop-phase=0.0, leaf=free]'. The second prevents precisely the failure I shipped -- pinning a subset and reading the result as pinned. Verified the harnesses are unaffected: nothing under tools/port/ parses that line. Also accepts their scope correction: a claim about code needs its ref attached, the same way a number needs what it is a number of. With main 145 behind and both of us on topic branches, 'the code contains X' is underspecified by default, which is how we were both correct about SYLPHEED_KF_TIME_SHIFT simultaneously. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -9,7 +9,7 @@ dies, which is what this file is for.
|
||||
|
||||
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
|
||||
|
||||
215 sections. Search this before re-deriving anything.
|
||||
216 sections. Search this before re-deriving anything.
|
||||
|
||||
* [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28)
|
||||
* [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28)
|
||||
@@ -226,6 +226,7 @@ dies, which is what this file is for.
|
||||
* [Ranking instructions above descriptions — swept, and the worst class is clean](#ranking-instructions-above-descriptions--swept-and-the-worst-class-is-clean)
|
||||
* [Live-but-undocumented flags — and I wrote a dead instruction while fixing dead instructions](#live-but-undocumented-flags--and-i-wrote-a-dead-instruction-while-fixing-dead-instructions)
|
||||
* [Their `XPR_*` lead traced and closed — and their class found in my own lane](#their-xpr_-lead-traced-and-closed--and-their-class-found-in-my-own-lane)
|
||||
* [Branches that announce themselves — their lesson, applied where it already bit me](#branches-that-announce-themselves--their-lesson-applied-where-it-already-bit-me)
|
||||
|
||||
<!-- /INDEX -->
|
||||
## P0 — the exporter, 2026-08-28
|
||||
@@ -11357,3 +11358,50 @@ that establishes it.
|
||||
|
||||
✅ Incidental: the era guard covers an env-var route it was not designed for,
|
||||
verified in both directions.
|
||||
|
||||
## Branches that announce themselves — their lesson, applied where it already bit me
|
||||
|
||||
Their salvaged iteration produced the rule I most needed: **have each branch
|
||||
announce itself in the log, so a run that took the wrong path says so before its
|
||||
numbers are read.** Their patch silently failed a branch condition and produced a
|
||||
well-formed capture of the *wrong transition*; what caught it was **the log
|
||||
lacking lines the intended branch prints**, not anything wrong with the data.
|
||||
|
||||
*"Assertions catch the edit; log lines catch the execution."*
|
||||
|
||||
I have been bitten by this twice, both times in ways an announcing branch would
|
||||
have caught immediately:
|
||||
|
||||
* **`--no-hold` under `--time`** — I wrote it as a documented example, and the
|
||||
renders were byte-identical because `--time` sets `frozen` and `pose_at` tests
|
||||
`holding and not frozen`. A request silently overridden reads exactly like one
|
||||
that worked.
|
||||
* **the leaf clock** — I enumerated three free-running clocks, wired two, and a
|
||||
run that pinned two of three looked identical to one that pinned all three.
|
||||
|
||||
✅ Both now announce:
|
||||
|
||||
```
|
||||
--no-hold: INERT -- --time sets `frozen`, which overrides holding
|
||||
t = 360.00 units (6.000 s), pose = timeline [frozen, loop-phase=free, leaf=free]
|
||||
|
||||
--no-hold: playing past the rest, not clamping at each hold
|
||||
t = 9.15 units (0.153 s), pose = timeline [running, loop-phase=0.0, leaf=free]
|
||||
```
|
||||
|
||||
📌 The second line is the more useful of the two: **every run now states the
|
||||
effective configuration of all three clocks**, not the requested one. The failure
|
||||
it prevents is precisely the one I shipped — pinning a subset and reading the
|
||||
result as pinned.
|
||||
|
||||
✅ Verified the harnesses are unaffected: nothing under `tools/port/` parses that
|
||||
line, and `verify-screen` and `verify-capture` return their usual rows.
|
||||
|
||||
### Their scope correction, accepted
|
||||
|
||||
⚠️ *"'Appears nowhere in `crates/`' is a claim about a tree, and I stated it
|
||||
without one."* Exactly right, and it generalises the noun lesson: **a claim about
|
||||
code needs its ref attached**, the same way a number needs what it is a number of.
|
||||
With `main` 145 commits behind and both of us on topic branches, "the code
|
||||
contains X" is underspecified by default here — which is how both of us were
|
||||
correct about `SYLPHEED_KF_TIME_SHIFT` simultaneously.
|
||||
|
||||
Reference in New Issue
Block a user