Skip to content

v3.8.0 — the dashboard answers, and what it reports stops lying

Choose a tag to compare

@acidkill acidkill released this 27 Aug 18:43
· 81 commits to main since this release
ae8e874

Every dashboard endpoint that recomputed a multi-second analysis on each request now serves
it from a shared cached report, and three defects that made stored state quietly disagree
with reality are fixed.

Added

smem prune-orphan-states — reports, and on --apply removes, neuron_state rows
whose neuron is gone. Orphans are not inert: the decay pass iterates every state row, so
each one is decay computed for a neuron that no longer exists.

Deliberately an explicit command rather than a consolidation stage. It deletes on the
strength of a neuron/state comparison, and the two sides spell the same neuron differently
— record ids fold - to _ while the state keeps the dashed uuid. Normalising only one
side marks every live state as an orphan and empties the table, so this runs only when a
human asks, and it defaults to reporting.

Per-pass decay telemetry ([decay_telemetry], off by default). One aggregate row per
decay pass — never a row per edge, since the pass touches every synapse and per-edge rows
are the write pattern that grew the change log without bound. Records the weight
distribution either side of the pass, why each skipped synapse was skipped, and the knobs
the pass ran with, because a distribution is uninterpretable without them. Closes #183.

smem_transplant(min_salience=…) — the engine validated and applied this threshold all
along, but no MCP caller could set it, so every transplant ran unfiltered. Closes #175.

Fixed

  • Four dashboard endpoints each recomputed the same diagnostics analysis. /health,
    /brains, /config-status and /storage/status called the engine directly, so one
    analysis ran once per endpoint per page load instead of once per brain per window.
    Sharing one cached report also removes the possibility of two endpoints disagreeing about
    the same brain.
  • The diagnostics cache had a TTL too short to amortise its own cost. A report costing
    tens of seconds cannot pay off inside a 60 s window: anyone opening the dashboard less
    often than that missed every single time.
  • /evolution recomputed per request and fetched the synapse metadata blob for a metric
    no caller reads, scanned maturations twice, and re-fetched stats its caller already had.
  • add_neuron swallowed a failed neuron_state insert and still reported success. A
    neuron without a state row looks permanently un-accessed: it never receives the activation
    boost and is a standing candidate for dead-neuron pruning, for a reason nothing logged.
    Closes #174.
  • smem_edit left metadata["_structure"] describing the previous content, which recall
    reads back — so an edited memory kept reporting fields the new text no longer had. Now
    recomputed, and removed rather than overwritten when the new content has no structure.
    Closes #176.
  • activate_from_multiple fanned out without bound, so concurrent traversals grew with
    caller input rather than with anything the system controls. Closes #181.

Upgrading

Nothing to do. The telemetry table is additive and its config section is off by default;
smem prune-orphan-states is opt-in and reports before it deletes.

Full changelog: v3.7.0...v3.8.0