All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Planning milestones vs Hex releases

Published Hex releases use [0.x.y] version headings in this file. Internal repository milestone labels (such as v2.x) track delivery tranches — they are not a second install axis and do not map to Hex versions.

0.1.2 (2026-06-19)

Features

  • 13-01: add IA component primitives (eebebcb)
  • 13-02: implement grouped dashboard nav (9e0703d)
  • 13-03: add honest coming-soon route (af24726)
  • 13-04: implement Status Home attention strip (9401b65)
  • 13-05: add object-aware page headers (9229aba)
  • 13-06: add dashboard command palette (6c3772b)
  • 13-07: thread incident and review ingress links (3e66229)
  • 13-08: thread quality loop object links (d35b92b)
  • 13: add make seed/reseed + surface demo routes in dev banner (c3a21e4)
  • 14-01: add Dataset Builder route and navigation (8d84f0f)
  • 14-01: implement Dataset Builder index (eb4abfd)
  • 14-02: convert promote component to shared surfaces (68cf829)
  • 14-02: reconstruct promotion drawer from URL params (57792b0)
  • 14-03: route review promotion to dataset builder (9687adf)
  • 14-04: convert incident evidence to notebook adapter (959a3b3)
  • 14-04: convert incidents shell to shared components (acb9904)
  • 14-05: convert eval workbench edit form (6d106eb)
  • 14-05: convert eval workbench result surfaces (957c382)
  • 14-06: convert prompt registry to shared components (5cebb4b)
  • 14-06: convert release workbench to shared components (2f655d1)
  • 15-01: add shared evidence primitives (1f15b7f)
  • 15-02: convert home and runs to shared surfaces (9c09764)
  • 15-03: convert workflow trace inspector surfaces (8761e85)
  • 15-04: convert approvals and connectors shared surfaces (288960a)
  • 15-05: convert evidence adapters to shared primitives (8dc3105)
  • 16-01: mobile topbar, off-canvas nav drawer markup, and MobileNav JS hook (433bfb5)
  • 16-01: mobile-first shell CSS and drawer motion primitive (4ccb16b)
  • 16-02: table/1 overflow viewport, opt-in mobile_summary slot, and aria-sort (7b1f5f0)
  • 16-03: add named responsive grid split classes to 04-components.css (7c90246)
  • 16-03: replace all 7 unsupported responsive utility callsites (dfdf557)
  • 16-04: mobile summaries and domain empty-state copy for Connectors + Dataset Builder (5005595)
  • 16-04: mobile summaries and domain empty-state copy for Runs + Review Queue (ff3f960)
  • 16-05: focus-ring overflow-clip-margin, selected-row aria-current, and status tests (31d65be)
  • 16-06: Phase 16 Playwright parity spec for MOTION-01..04 (f032ea9)
  • 16-06: single-SSOT AA contrast floor guard (D-31) (238b210)
  • 17-02: add contact_sheet_index.md + document generator in MAINTAINERS harness section (361e0f4)
  • 17-02: add priv/dev/contact_sheet.mjs before/after contact-sheet generator (c5cc4af)
  • 18-01: brand-book pressure-test Sections 1-7 with embedded contrast table (cae5b0a)
  • 18-01: zero-dep WCAG 2.1 contrast checker for brand-book pairings (2b74473)
  • 18-02: append Decisions Locked section with propagation verdict (030673d)
  • 18-02: append Sections 8-14 to pressure-test.md (0de71a8)
  • 19-01: geometry + SVG document libraries (36b0f4c)
  • 19-01: wordmark + lockup modules + smoke test (f2cd057)
  • 19-02b: round-2 gallery with rejection diagnosis + recommendation (8a861d7)
  • 19-02b: round-2 lockup-variant toolchain on locked TV-1 mark (ca13a47)
  • 19-02b: six round-2 lockup candidates (LK-A..LK-F) (e62ac68)
  • 19-02: build standalone options-gallery.html for gate #2 (9baa89a)
  • 19-02: generate candidate SVGs into candidates/ (bc70930)
  • 19-02: hand-tuned logo presets with design-intent blocks (1dbd26c)
  • 19-03: finalize ranked recommendation block in options-gallery.html (d0b28ee)
  • 19-03: LOGO-01..07 + gallery-completeness verifier (verify-logos.mjs) (8f9f182)
  • 20-01: converge LK-B/TV-1 into 8 root variant SVGs (ad487d7)
  • 20-01: ROOT-* verifier gate + prune galleries & losing candidates (425a9e1)
  • 20-02: final-strip.mjs generates standalone final-variants.html confirm strip (3af3b79)
  • 21-01: add brandbook/README.md + tools/check-consistency.mjs (cfa998f)
  • 21-01: author brandbook/tokens.css — :root-scoped, --scoria- prefixed, two-tier (d161748)
  • 21-01: author brandbook/tokens.json — Threadline-shaped, hex-identical to tokens.css (02ecc30)
  • 21-02: author palette/typography/components/terminal example SVGs (5a9ef0d)
  • 21-02: author readme-header/landing-hero/docs-page example SVGs (7231498)
  • 21-03: build standalone dark-first brand book (index.html) (44380e6)
  • 21-03: wire brand-book.md into check-consistency (4th hex source) (55632ec)
  • 22-01: dashboard TV-1 mark + favicon wiring (compile-time inline) (26244d9)
  • 22-01: Hex.pm description + GitHub repo description verbatim brand copy (BRAND-08) (c13899b)
  • 22-01: README brand header — picture dark/light lockup, tagline, verbatim opener (79a2c36)
  • 22-02: GATE.md — dated Phase 22 final quality gate report (all 8 checks PASS) (2bdbb32)
  • 22-02: quality-gate.mjs — 8-check aggregating Phase 22 final gate (1ffe559)
  • 23-01: CACHE-01 — env-scoped cache keys + version-file sourcing (51c12fe)
  • 23-01: CACHE-02 — build-once job + artifact restore + 3 contract assertions (5f606f1)
  • 24-01: add knowledge lane contract test (D-03 coverage ratchet) (a4dd664)
  • 24-01: scope knowledge lane to --only knowledge, add accessor and after_suite guard (dcbb535)
  • 25-01: refactor ci_policy_contract_test.exs to parallel-shape + derived fan-in completeness; fold WR-03 (5cb9613)
  • 25-01: restructure ci-verify.yml into parallel sibling jobs + verify-summary fan-in (84103dc)
  • 25-01: split verification_lanes_test.exs ci lane ordering into intra-vs-cross parallel-shape asserts (f418f64)
  • 26-01: shard full ExUnit suite into 4-way GHA matrix job (SHARD-01) (2106758)
  • 27-01: add durable contract guards — ephemeral-port ban, no-TEMP-step, no-retry-on-test-workflows (4b884c8)
  • 28-01: implement Mix.Tasks.Scoria.Ci merge-gate task + ci alias (f9826b3)
  • 28-03: make ratchet warning capture compile-only + parity guard (bf15f10)
  • 29-01: thread PORT 4799 through dev harness (DXCLI-01) (b4e8b3d)
  • 30-01: add native startup URL line to Makefile dev: recipe (0f058b9)
  • 30-01: update Docker dev banner with live route list, Traefik link, native notice (050709f)
  • 31-01: add Dockerfile.dev boundary invariant comment + docs layer-invalidation table (9bb2eaa)
  • 32-01: add safe 1Password secret examples (4a3a558)
  • 34-02: extend post-publish port scanner (5ebaae2)
  • ui: dark/light/system theme picker + pre-paint FOUC fix (269d82a)
  • v2.17 brand system, dashboard IA, theme picker + dev DX (#9) (1d2c9e2)

Bug Fixes

  • 13: default dev dashboard to demo tenant + seed full IA demo data (1f05019)
  • 13: revise orientation spine plan copy (b576066)
  • 13: revise orientation spine plans based on checker feedback (51698fe)
  • 14-02: normalize promotion key links (ca48f4a)
  • 14: align support gallery smoke with status home IA (0bf47c7)
  • 14: cite missing plan decisions (2f704d4)
  • 14: review queue back-link honors scoria_base mount path (04f3ac5)
  • 14: revise plans based on checker feedback (33f82a1)
  • 15-review: gate table density controls (0fc2ff7)
  • 15-review: gate table sort controls (b23f530)
  • 16-01: modern HEEx comment syntax (<%!-- --%>) in mobile shell (f01d8b0)
  • 16: address code review — style mobile summary cards (CR-01) + dataset crash guard (WR-06) (b67087d)
  • 16: regenerate committed dashboard asset bundle from phase-16 source (0ca184c)
  • 17-02: IN-02 remove unused fileURLToPath import (ba62be1)
  • 17-02: IN-03 update stale .gitignore rationale comment (71ca01a)
  • 17-02: WR-01 HTML-escape interpolated values; IN-01 drop dead isBaseline param (e5576f2)
  • 17-02: WR-02 URL-encode img src path segments (3899a44)
  • 17-02: WR-03 use stat-based directory checks instead of existsSync (ae2dbbe)
  • 27-01: FLAKE-01+02 — fix Postgres host port to 5432 in all 5 CI blocks, delete TEMP e2e step (5277e90)
  • 27-01: harden ephemeral-port guard against quoted binds; align topology comments (fb73f8e)
  • 28-03: give scoria.install_check tests 180s timeout for CI shard load (06cdc34)
  • 28-03: ratchet lane needs Postgres; update CI policy contract (8501578)
  • 28-03: repair parallelized CI topology for its first real run (d07093b)
  • 28: revise plans based on checker feedback (a83f5be)
  • 33: mark research questions resolved (0695a29)
  • 33: revise plans based on checker feedback (d8dcc24)
  • 34-02: fix post-publish postgres port bind (8675672)
  • 34: close code review doc guard gaps (8d981f5)
  • 34: pin ci e2e flake guard coverage (91ff82d)
  • 34: revise plans based on checker feedback (fab3308)
  • 35-01: encode previous-live registry lineage (fbb5e2d)
  • 35-02: align release branch e2e gate (4099118)
  • 35-02: clear release docs warning gate (532cc4c)
  • 35-02: include Docker DX policy surfaces for release CI (1b74283)
  • brandbook: §3 logo display bugs — mono use-viewport mapping, subtitle colorway panel, mark on both grounds (0efefb5)
  • dev: use the standard DB pool in dev (off the test Sandbox) (3249c6e)
  • ui: drawer/modal scrim no longer intercepts panel clicks (b77970b)

[Unreleased]

Added

  • Self-contained, dark-first (with light theme) operator dashboard design system. The /scoria dashboard now ships its own brand-token CSS, client bundle (LiveSocket + hooks), and self-hosted fonts (IBM Plex Sans, JetBrains Mono) — it renders fully styled and interactive with no dependency on the host app's Tailwind/asset pipeline.
  • Task-oriented navigation shell: persona-grouped sidebar (Operate / Improve), breadcrumb topbar, light/dark theme toggle, and a GOV.UK-style "what do you want to do?" task band on the Live Ops landing page.
  • Runs index at /scoria/workflows; the previously-unreachable Eval Workbench is now routed at /scoria/eval_specs.
  • Routed Operate pages extracted from the Live Ops god-page, each a focused, linkable surface with its own nav item: Approvals (/scoria/approvals — inbox + decision modal), Connectors (/scoria/connectors — runtime + connector fleet posture and drawers), and Incidents (/scoria/incidents — tenant SRE triage with trace-first evidence).
  • ?tenant= view parameter on Live Ops and priv/repo/dev_seed.exs (gallery) to populate every dashboard screen with realistic data.
  • mix scoria.assets.build to (re)generate the shipped dashboard asset bundle.
  • First-run empty states on the Prompt Registry (/scoria/prompts) and Eval Workbench (/scoria/eval_specs) tables, consistent with the Runs and Incidents pages.

Changed

  • mix scoria.install no longer probes or edits the host app's Tailwind config. Because the dashboard ships self-contained assets, install is now router mount + Ecto migrations + runtime config only — there is no Tailwind install surface and no host asset work.

  • Live Ops (/scoria) slimmed to a task band + live trace stream plus a compact Approvals/Connectors/Incidents "at a glance" strip that links to the new routed pages; approvals, fleet posture, and the tenant incident rollup moved off the landing page.

  • Shared ScoriaWeb.OperatorSurface read model now backs Live Ops and the routed Operate pages, replacing the duplicated fleet/SRE projection reads.

  • Status→color styling fully consolidated into ScoriaWeb.UI (tone/1 + <.badge tone=>

    • <.flash_group>); the per-component badge_class/status_color/trace_badge_class/ flash_kind_class helpers are removed and a drift-guard test prevents their return.
  • Bump req_llm peer dependency to ~> 1.13 (locked at 1.13.0)

0.1.1 (2026-05-30)

Added

  • Shared SupportJourney handlers for overlay and gallery journey smokes
  • Support copilot gallery optional lane journeys: semantic FAQ, knowledge, connector
  • Gallery producer-path orchestrator smoke on /scoria
  • docs/MAINTAINERS.md for CI topology and release operations
  • docs/connector_adoption.md in Hex package and docs extras
  • Named remote connector adoption lane (mix test.connector) with SupportJourney billing fixture proof

Changed

  • Support copilot gallery docs: clone-repo requirement and path vs tarball consumer distinction
  • README: session keys for LiveView operator UI, deduplicated install steps, maintainer section at bottom
  • Operator verification guide trimmed for adopters; maintainer content moved to MAINTAINERS.md

0.1.0 (2026-05-28)

Features

  • 02-01: implement JSON-RPC 2.0 protocol handler (abd2dd2)
  • 02-01: implement MCP Plug Router (61a3a5f)
  • 02-02: define Scoria.MCP.Tool behaviour (ef00d95)
  • 02-02: implement Scoria.MCP.Validator (172318d)
  • 02-03: implement isolated executor with telemetry (b768cb7)
  • 02-03: wire the router pipeline with execution and validation (ea99aab)
  • 03-01: add ScoriaWeb.Router macro and dependencies (6397c56)
  • 03-02: implement CSS Grid Trace Tree component (27e3b18)
  • 03-02: wire PubSub and trace rendering in LiveView (cbfe3ef)
  • 03-03: implement Approval schema (16687c9)
  • 03-03: implement HITL Approval Modals and Ecto Coordination (7fd7e45)
  • 03-03: implement token stream coalescing (219ca51)
  • 03-liveview-operator-ux-01: implement OrchestratorLive and configure tests (0d7aae7)
  • 04-01: implement evaluation flywheel schemas and context (8143cc4)
  • 04-02: implement ExUnit Evaluation Macro (EvalCase) (5b6c1d8)
  • 04-02: implement scoria.eval mix task (fee33a3)
  • 04-03: implement dataset promotion and evalspec rubrics (c213d0e)
  • 04-03: implement Promotion Context Logic (06a6c69)
  • 07-01: add optional sre sink seams (c4b8f23)
  • 07-01: bootstrap sre public context (080647d)
  • 07-02: enforce runtime and mcp budget preflight (6ba1d5f)
  • 07-02: implement budget engine reservations (ae7fd63)
  • 07-03: add integration-scoped breaker guards (7f9447e)
  • 07-03: add sre telemetry helpers (4c22b85)
  • 07-04: implement incident dedupe and severity routing (ff6bc45)
  • 07-04: implement transactional audit outbox capture (b77bdc0)
  • 07-05: add trace-first incident evidence notebook (7f43d68)
  • 07-05: refresh trace badges from lazy SRE evidence (5918e26)
  • 07-06: add durable sre budget and breaker persistence (f82b39a)
  • 07-07: add durable incident and audit storage nouns (644e98d)
  • 07-08: add optional first-party sink adapters (6f75ffc)
  • 07-08: add supervised durable relay worker (fa3eab0)
  • 09-01: lock approval audit attribution (7583cd7)
  • 09-01: restore workflow-owned approval ui path (9d1b758)
  • 09-02: produce durable incident delivery rows (3e6ecf1)
  • 09-03: expose durable incident delivery outcomes (0a765c4)
  • 10-01: emit canonical runtime telemetry from execution seams (e82e934)
  • 10-01: expose canonical telemetry identity contract (6f2832c)
  • 10-02: align parapet telemetry translation (125f947)
  • 10-02: emit post-commit incident lifecycle telemetry (cfdba13)
  • 19-01: add durable connector job and vault posture (7cfa755)
  • 19-01: add normalized connector boundary schemas (c4d0fcd)
  • 23-01: implement tokenizer utility (269ad3b)
  • 23-02: implement prompt template schema and migration (2a1161b)
  • 23-03: implement prompt registry context API with immutable updates (35da112)
  • 23-04: add live route for prompt templates (dc62634)
  • 23-04: implement prompt template LiveView interface with token estimation (9157155)
  • 24-01: generate ai_eval_datasets migration (8d7dc7f)
  • 24-01: implement Dataset schema and validation (e8b45ac)
  • 24-01: implement DatasetItem schema (4bd6520)
  • 24-02: implement dataset CRUD and state management in Eval context (0c2f93f)
  • 24-03: implement dataset promotion component (98032d8)
  • 24-03: inject promote button into trace explorer (892ccd1)
  • 24-03: integrate promote modal in workflow show liveview (ac9cb7b)
  • 25-01: converge eval persistence onto canonical datasets (06eb037)
  • 26-01: implement release gate middleware for draft prompts (66ed7e7)
  • 26-02: implement prompt release workflow and approval handling (0e548c6)
  • 26-03: scaffold prompt release UI and fix DB testing concurrency (b6261a7)
  • 27-01: add scoria_mcp router macro for host integration (ffdea33)
  • 27-01: add session registry to application supervisor (4f8d918)
  • 27-01: implement MCP SSE controller and message ingestion (da1134a)
  • 29-01: create Scoria.Runtime.Instance schema and migration (5373da6)
  • 29-01: implement context functions for runtime registration (a0f73f6)
  • 29-02: setup Phoenix Presence for runtime observability (8c2ba9a)
  • 29-02: track MCP connections via Phoenix Presence (77780e1)
  • 29-03: implement runtime posture rail and detail drawer (a446406)
  • 29-04: add memory notebook component for compaction audit (f9b0bc1)
  • 29-04: integrate memory notebook into workflow show with reciprocal link (d28e6c4)
  • 30-01: configure baseline and dynamic oban queues (8bbcf94)
  • 30-02: implement BatchEnqueue chunking (46972cf)
  • 31-01: implement Circuit Breaker Sweep Manager (eba002b)
  • 31-01: implement ETS Circuit Breaker State API (fea7208)
  • 31-02: implement CircuitBreaker request step (ebb42bd)
  • 31-02: implement Resiliency response and error steps (e63b2f9)
  • 31-02: implement Steps wrapper for Req pipelines (33e796b)
  • 31-03: inject req_options into application workers (7131567)
  • 32-01: Add default configuration for model fallback chains (b97f7f2)
  • 32-01: Implement Scoria.Orchestrator with recursive fallback and telemetry (bf95885)
  • 32: integrate multi-model fallback orchestration and stabilize tests (384536c)
  • 33-01: add eval campaign persistence foundation (71f3e2e)
  • 33-02: implement eval campaign fan-out coordinator (a9eb4a9)
  • 33-03: execute eval campaign targets through orchestrator (9e68f36)
  • 38-01: add replay disposition resolver contract (819c0e3)
  • 38-01: add replay run intent and approval authority fields (e2e8e29)
  • 38-01: persist replay evidence on checkpoints events and audit rows (591ee5a)
  • 38-02: gate replay execution at connector and mcp seams (2f8d805)
  • 38-02: rework replay-scoped approval transitions (e242c05)
  • 38-03: expose replay-safe approval projection reads (32f12f3)
  • 38-03: project replay posture through runtime dto reads (a6e1aa4)
  • 39-01: build replay comparison runtime DTOs (406e3e5)
  • 39-02: add replay evidence notebook (92f57f3)
  • 39-02: add replay workflow page state (20b289f)
  • 39-03: freeze workflow-source dataset promotion (3d67cb3)
  • 39-03: route sealed dataset promotion through approvals (5579017)
  • 39-05: fix replay promotion runtime contract (f35884a)
  • 39-05: persist replay promotion metadata end to end (23cfc0f)
  • 40-01: add online scoring storage substrate (4be7a70)
  • 41-01: lock bounded handoff contract and lineage (62049f5)
  • 48-01: harden installer mutation reporting (a754c66)
  • 72: Hex publish enablement and shift-left release automation (197c929)
  • observability: create Ecto schemas and migrations for traces, spans, and span events (5cb78a4)
  • observability: implement async gen server buffer for spans (e703a39)
  • observability: implement telemetry handlers and adapters (58bb928)
  • observability: implement telemetry redaction engine (800c2e1)
  • v1.9: ship crucible operator loop (252bbfc)
  • v2.2: finish OSS adopter onramp (3d30442)

Bug Fixes

  • 26-03: wire real approval logic and verification to prompt release (ccb3e15)
  • 31-01: resolve compilation warnings and test suite concurrency flakiness (39f0b68)
  • 38: preserve replay-live approval provenance (245888e)
  • 39: revise plans based on checker feedback .planning/phases/39-replay-operator-ux-draft-dataset-promotion/39-03-PLAN.md .planning/phases/39-replay-operator-ux-draft-dataset-promotion/39-04-PLAN.md .planning/phases/39-replay-operator-ux-draft-dataset-promotion/39-05-PLAN.md .planning/phases/39-replay-operator-ux-draft-dataset-promotion/39-VALIDATION.md .planning/ROADMAP.md (51bdba2)
  • 41-02: harden projected context validation (1d3d4e8)
  • 45: revise plans based on checker feedback .planning/phases/45-compatibility-and-invalidation-engine/45-00-PLAN.md .planning/phases/45-compatibility-and-invalidation-engine/45-01-PLAN.md .planning/phases/45-compatibility-and-invalidation-engine/45-02-PLAN.md .planning/phases/45-compatibility-and-invalidation-engine/45-03-PLAN.md .planning/phases/45-compatibility-and-invalidation-engine/45-RESEARCH.md .planning/phases/45-compatibility-and-invalidation-engine/45-VALIDATION.md .planning/ROADMAP.md (290d9d0)
  • 50-01: lock release preview command contract (be552b0)
  • 50-01: run release preview lane in dev env (5c24c78)
  • 72: allow Release PR manifest 0.1.0 in ci policy contract (e1e697c)
  • bootstrap pgvector in knowledge lane (f94c98a)
  • eval: fix update_eval_spec merging keys (4d547eb)
  • phase-10: stabilize bootstrap verification lanes (a0a31e7)
  • phase-39: close post-review replay promotion gaps (118b9f5)
  • ui: add assign_async for trace metadata lazy loading (52f0d6f)

[Unreleased]

[0.1.0]

First public Hex packaging of Scoria's in-repo capability through the v2.6 warning-ratchet closeout. Integrators get a Phoenix-native runtime with durable runs, bounded escalation, optional semantic reuse, and executable adoption lanes — without adopting internal planning milestone names as product releases.

Added

Roadmap traceability

Planning trancheShippedReference
v2.12026-05-25.planning/MILESTONES.md#v21-tenant-scoped-semantic-fast-path
v2.32026-05-27.planning/MILESTONES.md#v23-runtime-to-handoff-adoption-example
v2.42026-05-27.planning/MILESTONES.md#v24-adoption-reliability-contract
v2.52026-05-27.planning/MILESTONES.md#v25-installer-safety--upgrade-confidence
v2.62026-05-28.planning/MILESTONES.md#v26-warning-ratchet