You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SynapsePersistentDeadLetters Prometheus alert — fires when synapse_dead_letter_targets stays above zero for an hour, catching a name
left blackholed and undrained where SynapseDeadLettersGrowing catches only
the passing miss. Meaningful now that the ledger ages quiet names out: a
still-counted target is a genuine persistent gap. The honest live-path answer
to "alert on dead letters" — the ledger is not journalled, so this rides the
exported gauge, not the log-derived causal-health surface.
Session telemetry can name the coordination task it advanced — orchestrate_session, BusOrchestration.run, and emit_session_metric gained an optional task_id
that rides each durable session_metric snapshot's body (the note's own
task-id slot carries the session id, so the coordination task rides the body,
omitted when empty). synapse participant costs and the report reader surface
it, so a session's turns/tokens/spend can be read against the claim or board
task it was working, not only its session. Backward compatible: empty leaves
the body and every reader unchanged.
/health-anomalies.json dashboard feed — the honest hub-side alert surface:
the orphaned, dangling, and stale coordination anomalies the causality graph
makes visible (core.causality_health.run_causal_health), in the same JSON
shape synapse causality --health emits, with an anomaly_count a cockpit
alerts badge can show. Fired alerts stay collector-side off /metrics
(Prometheus/Alertmanager); this is only what the durable log can prove —
store-derived, deterministic (ages measured against the log's own final
timestamp), available with the hub down; same --feeds-db posture as the
other store feeds.
synapse dead-letters — a terminal view of the hub's dead-letter ledger
(directed messages delivered to no live connection), worst blackhole first,
with the exact syn inbox --as NAME drain remedy the doctor's addressee
check emits. The ledger already rode in the state snapshot for the dashboard
and cockpit; this brings it to a terminal operator too. Read-only, reuses the
state request.
Dead-letter ledger age bound — DeadLetterLedger gained an optional max_age_seconds, and the hub applies a seven-day default: a target that has
gone quiet past the bound is forgotten (expired on both record and snapshot) so a stale slot no longer shows as a live blackhole. A target
that keeps drawing directed traffic refreshes and never ages out; the library
default stays unbounded so existing callers are unchanged.
/merkle-proof.json?seq=N dashboard feed — serves an RFC 6962 Merkle
inclusion proof for one event so a cockpit row's verify button can
confirm the row is committed to the attested log's tree root, in the same
JSON shape synapse debug merkle emits. Store-derived, deterministic, and
available with the hub down; a seq the committed log does not hold returns {"present": false} with a note rather than a fabricated proof; same --feeds-db posture as the other store feeds.
/state-at.json?seq=N dashboard feed — reconstructs coordination state
(claims + board) as of any event sequence by bounded replay of the
durable log (core.journal.replay(up_to_seq=)), in the live-snapshot
shape plus as_of_seq and log_end_seq. Store-derived and
deterministic (judged against the bounded event's own timestamp, never
the wall clock), so a cockpit can time-travel the whole fleet, not just
the event log. Honest scope: presence/roster is not journalled and is
omitted; seq is clamped into range; same --feeds-db posture as the
other store feeds.
The dashboard's --cockpit-dist static server now serves .webmanifest (application/manifest+json) and .webp, so the
cockpit can ship a web-app manifest and modern icons — the server-side
enabler for an installable, mobile-responsive cockpit PWA.
Changed
Commercial pricing documentation reconciled to a single value-ladder
(Community, Commercial Licence, Pro, Team, Business / Enterprise) priced in
USD; the retired pay-what-you-want tier is dropped from docs/commercial.md, COMMERCIAL-LICENSE.md, and the README.