Skip to main content

CHANGELOG.md

# Changelog

All notable changes to `bloccs_web` are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.0] - 2026-06-08

Now requires `bloccs ~> 0.8`, and surfaces the request/response (0.6/0.7) and DB
(0.7) features the library added.

### Added

- **Reply-node badge.** A node declared `reply = true` (a `Bloccs.call/4` ·
  `cast/4` terminal) is badged in the topology inspector — from the node view's
  new `reply` field (bloccs 0.8).
- **Per-axis effect scopes.** The inspector's Effects section now shows each
  axis's declared detail from the node view's `effect_detail` (bloccs 0.8): `db`
  → its `"table:action"` scopes (read / insert / update / delete), `http` → its
  allowed hosts + methods, `time` / `random` → their mode. Previously only the
  bare axis (`db`, `http`) was shown.
- **In-flight request/response column.** The Networks panel shows the in-flight
  request count per network (`Bloccs.Collector.stats/0`) — a snapshot of pending
  `Bloccs.call` / `cast` load.

### Changed

- Requires `bloccs ~> 0.8` (was `~> 0.5`).

## [0.2.0] - 2026-06-07

Now requires `bloccs ~> 0.5` (per-message lineage + the introspect
contract/config fields the panels render).

### Added

- **Live topology map.** The Topology panel animates packets moving along active
  edges, with a summary strip and per-node hover stats. Clicking a node opens an
  inspector showing its primitive (kind, ports with schemas, effects), live
  metrics, and the **code** that implements it — `pure_core` / `effect_shell`
  refs plus retry / idempotency / batch / join / rate / delay policy (from
  `Bloccs.Introspect` contract/config, bloccs 0.4+).
- **Message journey.** Selecting a message in the Messages panel opens a
  right-side drawer that tracks it across the network via `bloccs` 0.5 lineage:
  the full path highlighted on a mini-graph, the ordered list of hops it took
  (branching/merging through split, batch, and join), and per-hop detail +
  payload. Prev/Next (and ↑/↓) walk the message's hops; the journey is
  snapshotted at selection so it never drifts as the live feed scrolls.
- **Network overview cards** on the Networks panel — per-network sparkline,
  rate, and error count.
- **Richer Metrics panel** and a Sentry-style per-second **throughput volume
  chart** (failures stacked) on Messages, with a **pause** control to freeze the
  live feed for inspection.
- **BloccsWeb brand** — the real bloccs mark + wordmark in the nav, and a palette
  aligned to bloccs.io.

### Changed

- Requires `bloccs ~> 0.5` (was `~> 0.3`).

### Fixed

- Topology inspector no longer crashes selecting a `join`/`batch`/`rate` node
  (read `Bloccs.Manifest.*` primitive structs with `Map.get/2`, not `Access`).
- Aggregate nodes' emits (e.g. a join's output) now appear in the Messages feed,
  so a fan-in journey is complete.
- Node labels are no longer clipped in the topology / coverage graph.

## [0.1.0] - 2026-06-06

First release. A self-hosted, observe-only Phoenix LiveView dashboard for running
bloccs networks, mounted into a host app with one router macro (the oban_web
model). Requires `bloccs ~> 0.3`.

### Added

- **Message payloads in the Messages feed.** When `Bloccs.Inspect` capture is
  enabled (bloccs 0.3+), the feed shows a bounded, redacted snapshot of each
  message's payload in a new column, read from the `:payload` key on the
  `[:bloccs, :emit]` telemetry. A hint appears when capture is off.
- **Messages panel** — a live view of packages moving through a network. A
  server-rendered throughput chart over per-second buckets plus a scrolling feed
  of recent edge traversals (`from.port → to.port`), each with its outcome and
  the emitting node's latency, filterable by node and outcome. Built from the
  `[:bloccs, :emit]` + node telemetry: emits are correlated with their node's
  `:stop` in a per-process buffer in `Bloccs.Web.Telemetry.Handler`, folded by
  `Bloccs.Web.Telemetry.Flow`, and broadcast on `bloccs:flow:<net>`. Flow
  metadata only — payload contents are a future opt-in bloccs capability.
- **P2–P5 — the four live panels.** All read the v0.2.0 introspection API and the
  `[:bloccs, …]` telemetry stream; observe-only.
  - **Networks** — every running network with version, node/edge counts, and
    uptime (`Bloccs.Introspect.list_networks/0`), each row linking into topology.
  - **Topology** — the network DAG drawn in the bloccs hexagon notation, computed
    by a pure server-side layered layout (`Bloccs.Web.Topology.Layout`) and
    rendered as one SVG (`Bloccs.Web.Components.Graph`). Node state lights up live.
  - **Live metrics** — per-node throughput, p50/p95 latency, completed, and error
    rate on a 1 Hz rolling window. A telemetry handler folds the bloccs node
    events into `Bloccs.Web.Telemetry.Metrics` (pure core) in a single
    `Collector`, which broadcasts coalesced frames over PubSub; the topology
    glyphs light from the same frames.
  - **Coverage** — structural coverage (`Bloccs.Web.Coverage`) from a recorded run
    or a loaded `.bloccs-trace`: a summary bar, the reached/unreached overlay on
    the graph, and the unreached-obligation list. Trace export is gated by the
    `:trace_export` feature (the Pro seam) — available in the open build.
- **P0 — package skeleton and mount.** The dashboard mounts into a host Phoenix
  app and renders its empty shell:
  - `Bloccs.Web.Router.bloccs_dashboard/2` — the one-line router macro; a single
    `live_session` over the four panel routes (networks, topology, metrics,
    coverage), inheriting host auth from the surrounding pipeline.
  - `Bloccs.Web.Resolver` behaviour + `Bloccs.Web.Access` default resolver — the
    Pro-gating seam (`resolve_user/resolve_access/resolve_features` +
    `enabled?/2`). The free baseline enables every feature.
  - `Bloccs.Web.DashboardLive` — the single LiveView (one `live_action` per
    panel); P0 ships the chrome and empty panel bodies.
  - `Bloccs.Web.HexGlyph` — the bloccs hexagon notation as inline SVG, keyed by
    the atoms `Bloccs.Introspect.glyph/1` returns; live state is a CSS class.
  - `Bloccs.Web.Application` + `Bloccs.Web.Telemetry.Collector` — auto-starting
    OTP app with a private PubSub and the (P4) metrics collector, currently a
    no-op snapshot source.
  - Precompiled-asset packaging (the oban_web model): `assets/` is dev-only and
    excluded from the Hex package; the committed `priv/static/assets` bundles
    ship in the release.
- **Licensed under Apache License 2.0**, matching the `bloccs` library (adds an
  explicit patent grant).

[0.2.0]: https://github.com/Bloccs/bloccs_web/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/Bloccs/bloccs_web/releases/tag/v0.1.0