Skip to content

v0.70.0

Choose a tag to compare

@github-actions github-actions released this 29 Jun 19:17
· 1326 commits to main since this release

Added

  • Added the A2A bridge validation receipts template:
    the community A2A validation track is now a set of reproducible receipts that survive
    the bridge boundary — discovery, task lifecycle, webhook, proxy/TLS, replay, and
    threat-model — rather than a single pass/fail, separating protocol compatibility from
    operational safety. Adopted from a community contribution by Armorer Labs.
  • Added the read-only multi-hub follower (docs): the third
    CRDT slice. core/multihub_follower.py's MultiHubFollower tracks a per-peer seq
    cursor, fetches a peer's events past it through an injected transport (store_fetcher
    reads a peer EventStore over the read_since ingest seam — a network transport slots
    in the same way), folds the accumulated union, and returns the observed view. Polling is
    incremental and idempotent. Observe-only by construction: it grants no claim, and on
    losing a peer it simply stops advancing that cursor — the fail-closed posture. With the
    merge and fold slices this completes the read-side CRDT layer; the cross-host mTLS
    transport and the namespace-ownership claim protocol remain research. 100% line+branch.
  • Added the multi-hub observed-state fold (docs): the second
    CRDT slice. core/multihub_fold.py folds a merged multi-hub log into the mergeable
    view — the board (last-writer-wins per task), the grow-only progress ledger, and the
    observed claim view. The claim view is the safety-critical part: it records the
    latest claim each peer reports, tagged with the authoring hub and marked observed
    (advisory), and never grants a claim — a release clears it, and a follower routes a
    real claim request to the namespace's owning hub. Pure and deterministic; 100%
    line+branch. The network follower is the remaining slice.
  • Added the multi-hub event-log union (docs), the first
    CRDT-shaped slice of multi-hub sync: core/multihub_merge.py tags each durable
    event with its authoring hub (HubEvent), merges several hubs' logs into a grow-only
    set keyed by (hub_id, seq) — duplicates collapse, a conflicting reused id keeps the
    first — replays them in the deterministic (ts, hub_id, seq) total order, and reports
    the per-hub high-water cursor a follower resumes from. Pure and I/O-free; it folds no
    state and grants no claims (claims are mutual exclusion, never merged). 100%
    line+branch. The state fold and the network follower are the remaining slices.
  • Added the Studio design system (A0) and its reference page (docs):
    the dashboard begins growing from a read-only cockpit into an operator Studio. A new
    dependency-free dashboard_assets/studio.css carries the instrument-panel language —
    an ink-navy base, an indigo-violet brand hue, and red/amber/green reserved for
    verdicts — as CSS custom properties plus a component kit (panels, cards, status dots,
    verdict pills, mono data rows, the nav rail, an indigo focus ring; motion stilled
    under prefers-reduced-motion). It is served at /studio.css, and /studio renders
    a self-contained reference page exercising every component with no live data, so it
    works with the hub offline and is the visual reference the live command centre builds
    on. 100% covered; no new dependency.
  • Added synapse adapters list/install/uninstall (docs),
    the cross-agent adapter installer: it detects the coding tools on a machine (Claude
    Code, Codex, Cursor, Aider, Copilot, Windsurf, Gemini CLI) and writes a thin
    claim-aware adapter — "claim before edit, release on commit, reach the hub" — into
    each tool's native config. Two write shapes follow each tool's convention: a
    dedicated file Synapse owns, or a marker-wrapped block appended to a shared file;
    installs are idempotent (re-install replaces, never duplicates) and uninstall
    removes exactly what was added, leaving the tool's other config intact. Persona- and
    framework-neutral; adds no new coordination primitive — it only routes existing
    tools to the claims, releases, and presence that already exist. Pure catalogue +
    planning in adapters.py, thin I/O shell in cli_adapters.py, 100% line+branch.