Skip to content

v2.0.5 — Operator legibility

Choose a tag to compare

@CarlDog CarlDog released this 04 Sep 06:15
· 180 commits to main since this release

Operator legibility

Three slices, one theme: a dashboard or a log that states something confidently wrong is worse than one that says nothing. Every item either removes a false claim or replaces silence with a true one.

The offside popover states wall-clock truth

It said "Parked N ticks since cli/live last started", and that number resets on every deploy. The captured evidence:

2026-09-03T23:01:23Z  BTC/USD still offside at 81190.1; parked (720 consecutive ticks)

71 minutes into that daemon. At the configured 5s tick the dashboard rendered "about 1h 0m" for a symbol parked since 19 August — roughly 380x short. The engine now records when an offside episode began and restores it across restarts.

An episode whose start nothing observed says exactly that, rather than guessing. BTC and ETH ship in that state and will read "unknown" until they re-enter their bands, which is 11-15% away. That is the honest answer by design, not a failure.

A starved symbol says what is blocking it, and stops repeating

A symbol that cannot place at its anchor re-emitted the same refusal on every retry forever — 985 lines a day, measured on the live container, not estimated. Those per-level lines now drop to debug while starved, replaced by one entry warning naming the binding cap and an hourly summary that reports what binds now.

A queued recovery counter that cannot place announces itself once, with the order and the reason. Warning on every attempt would be ~14,800 lines a day, since that path retries every tick outside the back-off.

Two latent bugs surfaced on the way: the periodic still-starved summary had been unreachable since the day it was written (it counted ticks against 240 while the retry gate counted them against 60), and resuming a paused symbol left its starved clock frozen.

An untraded symbol's card can be hidden

An eye toggle on any symbol outside live.symbols collapses its card into an "N hidden" summary with one-click reveal. Symbols the engine does trade cannot be hidden — their cards carry pause, resume and re-anchor.

A hidden symbol that still has resting orders is named and tinted rather than disappearing: hiding is limited to symbols cli/live never ticks and shutdown never cancels, so an order resting on one is capital nothing is managing.

The Discord fast path says why it declined

It logged only its hits, so an inert fast path was indistinguishable from the mis-parse it exists to prevent. It now reports a classified reason, announces at startup whether it is armed, and the embed footer credits whichever parser actually decided.

Schema

engine_state.offside_since (an ALTER) and a new hidden_symbols table, both additive.

Rollback is safe — 2.0.4 reads engine_state with an explicit column list and never touches hidden_symbols, verified against the tag's own SQL. One asymmetry, in the CHANGELOG: 2.0.4's upsert omits offside_since, so a rollback freezes it and a later roll-forward can render a stale date. Bounded to symbols that flap in and out of band; BTC and ETH carry NULL and are immune.

Process

A six-dimension adversarial review ran against the merged state, since the per-group reviews covered the groups but not their interactions or the deploy. Verdict: nothing blocks. Its corrections are in this release — including one of my own overclaims, and six comment contradictions in a release cut for legibility.

Full changelog: v2.0.4...v2.0.5