Skip to content

Value-channel verdicts are unit-dependent below |v| ~ 1: rel = dv/(1+|v|) degenerates to an absolute deadband #1045

Description

@InauguralPhysicist

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions