Skip to content

v0.96.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 07:25
· 1094 commits to main since this release

Fixed

  • The CLI no longer aborts with UnicodeEncodeError on a non-UTF-8
    console (Windows cp1250 and friends): the entry point reconfigures
    stdout/stderr to UTF-8, so the arrows, bullets, and sparkline glyphs
    the commands print survive a legacy code page instead of crashing the
    whole command. Found on the first Windows run of synapse doctor;
    harmless where the streams are already UTF-8.

Added

  • synapse causality health --since TS — bound the scan to recent
    events on a large log, mirroring the trust graph's --since; a task
    whose entire recorded lifecycle predates the window is not assessed,
    and a window-straddling task is judged on the window's evidence only.
  • synapse benchmark --trend --export-csv FILE — the stored history as
    long-format CSV (one row per metric value, context columns on every
    row) for spreadsheets and external monitors.
  • The README now points at the cockpit build instructions and documents
    the state snapshot's dead_letters section.
  • Log-derived signals reach Prometheus through the node_exporter
    textfile collector: synapse reliability --textfile FILE and
    synapse causality health --textfile FILE write the reliability
    findings and causal-health anomalies as valid labelled exposition
    (synapse_reliability_findings{kind}, synapse_causal_health_anomalies {shape}), deterministic over a given log and parsed back by the
    Prometheus client in the suite so node_exporter never rejects one.
    Two alert rules ship with the observability bundle, and
    docs/observability.md documents the analytics plane landing beside
    the live counters — evidence gauges, not grades.
  • The WASM sandbox gained an adversarial proof battery and run
    attestation. tests/test_wasm_sandbox_escapes.py drives a hostile
    module past every limit — memory bomb, fuel bomb, wall-clock runaway,
    a reach for a host syscall, a reach for the network — and asserts each
    is contained by a mechanism (an undefined import cannot link; a grow
    past the cap is refused; the epoch timer interrupts a fuel-free loop),
    not by the tool's good behaviour. synapse sandbox run --attest DB
    appends the run receipt to a durable event store as a sandbox_run
    event, auditable through synapse event-query and replay without the
    tool's bytes ever entering the log. docs/sandbox-threat-model.md
    states what is denied by what mechanism and what is out of scope.
  • An observability provisioning bundle under
    integrations/observability/: a Prometheus scrape job, six alerting
    rules over the decision counters (hub down, dead letters growing,
    denials outpacing grants, auth failures, takeover quarantine,
    federation denials), and a committed Grafana dashboard — import,
    pick the datasource, done. A drift-guard test pins every metric name
    the bundle references to the registry, so a renamed metric fails the
    suite instead of silently emptying a panel. docs/observability.md
    walks the five-minute setup and states the plane boundary: /metrics
    is the live process deciding, the store feeds are log analytics.
  • The hub's /metrics endpoint grew from 8 to 21 metrics: decision
    counters wired at the decision sites — claims granted/denied, releases,
    directed and broadcast chat, per-message auth failures, rate-limit
    rejections, federation-gate denials, waiter takeovers and their
    quarantines — plus live gauges for connected -rx waiters and the
    dead-letter ledger (targets and letters). Each increment is one integer
    addition in the message path and a scrape stays I/O-free, so an alert
    rule can now see the hub deciding, not just existing.
  • /metrics.json dashboard feed — store-attested log metrics for the
    cockpit's metrics panel (total and per-kind event counts, plus the same
    split over trailing hour/day windows), measured against the log's own
    final timestamp so the document is deterministic and replayable; same
    --feeds-db posture as the other store feeds (available with the hub
    down, 404 unconfigured, 503 fail-visible), and the document itself
    states that the live process registry remains the hub's own /metrics
    endpoint.
  • synapse doctor --notify-cmd CMD — pipe any warn/fail findings to an
    operator sink command (one line per finding with the remedy attached,
    hub URI in SYNAPSE_DOCTOR_URI), turning diagnostics into proactive
    alerts; a healthy run sends nothing, --fix pages the post-repair
    state, --json composes (stdout stays one document), and the sink is
    best-effort under the same no-shell contract as
    cross-repo --notify-cmd.
  • synapse lock --release-timeout SECONDS — tune how long the exit is
    held for the hub's release confirmation on slower links; the wait
    stays bounded either way and the lease TTL remains the backstop.
    Distinct from --wait-timeout, which bounds acquiring the lease.