Follow-up to the rung-1 UI ladder (#20), specifically the memory-gated
bifurcation slice (#23).
What changes upstream
EigenScript#827 — temporal assignment history is unbounded and arms on dead
code — is fixed by InauguralSystems/EigenScript#829. Two things we depend on
here go away:
- The history is now bounded by program TEXT, not by runtime. Entries a
backward query can never reach are pruned at append time, so a render loop
that reassigns the same names every frame keeps a handful of entries and
pins a handful of values instead of growing without bound. Measured
upstream: a live prev of loop at 1.6M iterations went 203,008 kB → 2,944 kB
(the no-temporal-query floor), flat in iteration count.
- Arming is per-name, not whole-program.
physics.eigs' single prev of
in the never-called frame_velocity demo no longer arms recording for the
whole program — it arms only the name that query mentions. The dead-code
repro went 53,120 kB → 2,944 kB.
Semantics are unchanged, so nothing about our temporal reads shifts.
What that breaks here
orbit.eigs:707 calls record_history of 0 for the lifetime of a lab window
session (restored at :729), with a long comment at :691 explaining why. That
workaround becomes unnecessary — but more importantly, planted fault 1 in
tests/test_bif_mem.sh:205 will stop failing:
T1=$(plant hist " local hist_was is record_history of 0" \
" local hist_was is record_history of 1")
It flips the opt-out on and requires the gate to reject the resulting build. Once
#827 is fixed, turning history back on no longer produces the 3.9 MB/frame
growth, so the fault is caught by nothing and the gate's self-test goes green for
the wrong reason — a planted fault that can no longer be planted is a gate that
has quietly stopped discriminating.
The work
- Bump the EigenScript pin to the release carrying EigenScript#829.
- Remove the
record_history of 0 / record_history of hist_was pair and the
:691 comment block from _run.
- Replace planted fault 1 with one that still bites. The gate's job is to
catch per-frame retention in the bifurcation view; it needs a fault that
actually reintroduces unbounded growth on the fixed runtime — e.g. removing
the chart's chart_trim / series cap, or the build-once sweep guard's
companion. Do not simply delete fault 1: the gate would then be validated by
one fewer fault than it was designed around.
- Verify the memory gate still passes on a clean build and still fails on
every remaining planted fault, per the gate's own self-test contract.
Blocked on EigenScript#829 landing and a release cut. Not urgent — the current
workaround is correct and costs nothing; the risk is only that the gate silently
weakens if the pin moves before this is done.
Follow-up to the rung-1 UI ladder (#20), specifically the memory-gated
bifurcation slice (#23).
What changes upstream
EigenScript#827 — temporal assignment history is unbounded and arms on dead
code — is fixed by InauguralSystems/EigenScript#829. Two things we depend on
here go away:
backward query can never reach are pruned at append time, so a render loop
that reassigns the same names every frame keeps a handful of entries and
pins a handful of values instead of growing without bound. Measured
upstream: a live
prev ofloop at 1.6M iterations went 203,008 kB → 2,944 kB(the no-temporal-query floor), flat in iteration count.
physics.eigs' singleprev ofin the never-called
frame_velocitydemo no longer arms recording for thewhole program — it arms only the name that query mentions. The dead-code
repro went 53,120 kB → 2,944 kB.
Semantics are unchanged, so nothing about our temporal reads shifts.
What that breaks here
orbit.eigs:707callsrecord_history of 0for the lifetime of a lab windowsession (restored at
:729), with a long comment at:691explaining why. Thatworkaround becomes unnecessary — but more importantly, planted fault 1 in
tests/test_bif_mem.sh:205will stop failing:It flips the opt-out on and requires the gate to reject the resulting build. Once
#827 is fixed, turning history back on no longer produces the 3.9 MB/frame
growth, so the fault is caught by nothing and the gate's self-test goes green for
the wrong reason — a planted fault that can no longer be planted is a gate that
has quietly stopped discriminating.
The work
record_history of 0/record_history of hist_waspair and the:691comment block from_run.catch per-frame retention in the bifurcation view; it needs a fault that
actually reintroduces unbounded growth on the fixed runtime — e.g. removing
the chart's
chart_trim/ series cap, or the build-once sweep guard'scompanion. Do not simply delete fault 1: the gate would then be validated by
one fewer fault than it was designed around.
every remaining planted fault, per the gate's own self-test contract.
Blocked on EigenScript#829 landing and a release cut. Not urgent — the current
workaround is correct and costs nothing; the risk is only that the gate silently
weakens if the pin moves before this is done.