Uh oh!
There was an error while loading. Please reload this page.
feat(extension): type-aware pulse plot — interp=zoh|linear|cubic in AMICODE_PULSE_META - #224
Conversation
…META (#66) AMICODE_PULSE_META gains a TRAILING optional interp= field: zoh (default), linear, cubic. Trailing so the opencode fork's tail-capture mirror keeps matching; unknown values coerce to zoh so a future interp kind degrades an old client to stairs, never to NO_DATA. The plot branches per mode: stairs (zero-order hold, as before), polyline through linear-spline knots, Catmull-Rom curve through cubic knots. Path math extracted to a DOM-free pulsepath.ts (unit-tested): mode-correct crosshair mapping (interval midpoints vs knots), duration (n·dt vs (n-1)·dt), single-knot degenerate holds. Cubic is knot-faithful, not coefficient-faithful — the record carries no derivatives; flagged for a line-format extension on the delivery side. Warming hint drops its ~1–2 min promise: a cloud run warms ~6 min and then streams in ~15 s sidecar bursts, and the copy now stays true for both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Flip zoh/linear/cubic live on the same synthetic knots (12 knots makes the three modes unmistakable; 50 is fixture scale). Redraws immediately on switch while playing. Dev-only (.vscodeignore'd). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…erp= Review pass on #224 caught this: tolerating ONLY interp= recreates the strict-grammar fragility one field into the future — the planned cubic derivatives extension (or any new field) would strand THIS client on NO_DATA, the exact failure class the design notes call out. Both AMICODE_PULSE_META and AMICODE_PULSE now accept an open tail of key=value fields (unknown fields ignored; non-key=value tails still reject as corruption). Replayed all 2258 records across the full local run corpus: zero drops, legacy metas all read zoh. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kateebonner
commented
Jul 29, 2026
Thorough re-test pass:
|
jack-champagne
commented
Jul 29, 2026
Locking the pulse-derivative line format so the emit + render sides match 👇 Emitter (cloud/solve output) now emits, order-agnostic:
For faithful cubic, Your follow-up (consume side): parse I'm generating a real cubic solve sample ( One thing to sanity-check when you wire it: this assumes the cubic curve is cubic-Hermite in (value, du). If Piccolissimo's cubic basis actually leans on ddu for the segment shape, du-only Hermite won't be pixel-faithful and we'd add a |
Uh oh!
There was an error while loading. Please reload this page.
jack-champagne
commented
Jul 29, 2026
Correction on the sample I promised: bumping the integrator's Still useful: the |
jack-champagne
commented
Jul 29, 2026
Real cubic sample is up now (thanks Jack — the fix was
So you can build + validate the Hermite render against ground-truth cubic derivatives. |
What
The Run Inspector's native pulse plot (#66) was hardwired to ZOH stairs, so a linear-spline pulse drew as wrong stairs.
AMICODE_PULSE_METAnow carries an optionalinterp=zoh|linear|cubicfield and the plot branches per mode: stairs (zero-order hold), polyline through linear-spline knots, smooth curve through cubic knots.Contract decisions
interp=is a TRAILING optional field (afterbounds=). Trailing so the opencode fork's tail-capture mirror regex (problems.ts,labels=([^\n]*)$) keeps matching without a coordinated change. Emitters: append it at the end of the line.zohwithout dropping the meta. A future interp kind degrades an old client to stairs — never to NO_DATA. (Deliberate: strict-grammar fragility is what NO_DATA'd the cloud path this week.)interp=→zoh: every existing run.log renders exactly as before (verified against a real pre-change run dir).Render details
media/ui/components/pulsepath.ts, unit-tested: mode-correct crosshair mapping (interval midpoints under zoh, knots under splines), duration (n·dtvs(n−1)·dt), single-knot degenerate holds.pnpm run dev:pulseplot) for eyeballing all three modes; 12 knots makes them unmistakable.Tested
interp=linearrenders as a polyline in the inspector (F=0.99993 intact),interp=cubicas a smooth curve, and the untouched original as stairs — full state matrix incl. the no-pulse-data empty state.Out of scope
Cloud delivery of AMICODE_PULSE lines (remote_executor forwarder + runner capture) — owned separately; this PR defines the contract the relay serves. Mock-replay acceptance pending the shared playback harness.
🤖 Generated with Claude Code