Found by phugoid rung 2 (2026-08-24), grading observer verdicts against the lateral-mode oracle (phugoid GAPS.md G5, tests/observer_lat_check.eigs, the O2.units.* triplet).
The value channel classifies over relative steps rel = dv/(1+|v|) (docs/PREDICATES.md). For |v| << 1 the denominator is ~1, so rel is just dv — an ABSOLUTE deadband — and the verdict depends on the unit the consumer happens to store the value in. Measured, one physical trajectory (the 747 spiral mode: bank angle 0.05 rad decaying with t-half 14.9 s, replayed at 1 Hz, probed at t = 30 s where the state is still halving every 15 s):
| binding |
verdict |
| phi in radians (0.0124, step ~5.7e-4) |
converged |
| the same phi in degrees (0.71, step ~0.033) |
moving |
| the same phi in milliradians (12.4) |
moving |
Same physics, three verdicts. The radians reading is also confidently wrong on its own terms — the aircraft is 0.7 degrees off wings-level and actively rolling — but the sharper defect is the inconsistency: no physical semantics can depend on a unit choice. The 1+|x| shape was inherited from the entropy formula's normalization (#892/#294 lineage); dynamics never hit this because its oscillators are O(1) by construction — the first consumer with sub-unit and super-unit bindings for the same physics exposes it.
Design question: should rel be dv / max(|v|_window, floor) with a per-binding characteristic scale (e.g. the window's running amplitude), making verdicts scale-free? The deadband knob (set_observer_thresholds) cannot fix this per binding — it is global and the defect is per-unit-choice.
Related: #1044 (G4, the fixed 10-SAMPLE window) — together they say verdict correctness currently depends on two things the physics doesn't: the sampling cadence and the unit. phugoid pins today's behavior as divergence-class rows (O2.units.rad/deg/mrad, O2.phi.t35) that flip loudly when this changes.
Found by phugoid rung 2 (2026-08-24), grading observer verdicts against the lateral-mode oracle (phugoid GAPS.md G5,
tests/observer_lat_check.eigs, theO2.units.*triplet).The value channel classifies over relative steps
rel = dv/(1+|v|)(docs/PREDICATES.md). For|v| << 1the denominator is ~1, sorelis justdv— an ABSOLUTE deadband — and the verdict depends on the unit the consumer happens to store the value in. Measured, one physical trajectory (the 747 spiral mode: bank angle 0.05 rad decaying with t-half 14.9 s, replayed at 1 Hz, probed at t = 30 s where the state is still halving every 15 s):convergedmovingmovingSame physics, three verdicts. The radians reading is also confidently wrong on its own terms — the aircraft is 0.7 degrees off wings-level and actively rolling — but the sharper defect is the inconsistency: no physical semantics can depend on a unit choice. The
1+|x|shape was inherited from the entropy formula's normalization (#892/#294 lineage);dynamicsnever hit this because its oscillators are O(1) by construction — the first consumer with sub-unit and super-unit bindings for the same physics exposes it.Design question: should
relbedv / max(|v|_window, floor)with a per-binding characteristic scale (e.g. the window's running amplitude), making verdicts scale-free? The deadband knob (set_observer_thresholds) cannot fix this per binding — it is global and the defect is per-unit-choice.Related: #1044 (G4, the fixed 10-SAMPLE window) — together they say verdict correctness currently depends on two things the physics doesn't: the sampling cadence and the unit. phugoid pins today's behavior as
divergence-class rows (O2.units.rad/deg/mrad,O2.phi.t35) that flip loudly when this changes.