# Changelog

All notable changes to Veritas Kanban are documented in this file.

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).

## [Unreleased]

## [6.1.0] - 2026-07-26

### Added

- Added complete workspace knowledge collections: immutable classified sources, cited and versioned derived pages, reviewed ingestion dry runs, atomic apply and reversal, cited keyword/QMD search, query promotion, and cited work-product export. Run launch evidence now restricts every agent read and mutation to the exact shared source and page resources in the persisted manifest, isolates QMD projections by manifest digest, and binds promoted or exported search evidence to the same run. Confidential and restricted previews withhold content and force redacted exports even when the collection otherwise allows full output. File and SQLite storage preserve the same workspace, digest, attribution, idempotency, contradiction, graph, and activity contracts (#867).
- Added launch-scoped deterministic integrity linting for knowledge collections. Stable, digest-bound findings detect structural graph errors, invalid schemas and metadata, provenance gaps, changed source hashes, invalid citation locations, configurable freshness violations, orphan pages, missing canonical terms, and unanswered research questions without retaining source text in findings (#868).
- Added explicit material-claim lifecycle controls for knowledge collections. Compare-and-set transitions are versioned, actor-attributed, evidence-linked, digest-bound, idempotent, and reversible through page history. Agents can flag claims as needs-review or disputed while only administrators can finalize supersession, retraction, or resolution, so conflicting claims remain visible instead of being silently overwritten (#868).
- Added durable knowledge-integrity operations across file and SQLite storage. Bounded cursor-resumable lint chunks persist idempotently by run identity; optional semantic candidates flag contradictions, near-duplicates, supersession, and evidence gaps with both sides' page, claim, and source identities. Findings retain owner, status, severity, acknowledgement, due date, remediation links, occurrence history, and compare-and-set transitions, while a launch-scoped health endpoint exposes last observation, overdue work, and actionable status for scheduled workflows and operators (#868).
- Added preview-first, attributable workspace checkpoint rewind for run-owned worktrees. Immutable content-addressed checkpoints capture Git, index, files, exclusions, ownership, conversation cursors, exact provider hunk ranges where explicit unified diffs exist, bounded retention, and direct comparisons; conflict-aware previews support digest-bound per-path `accept`, `reject`, and `leave-untouched` decisions, while recoverable storage transactions mutate only selected paths and preserve descendant state on failure. The production control route now quiesces an exact active Codex app-server turn and forks an earlier approved turn into a new live provider thread, while ambiguous cursors, external edits, unsupported providers, stale runtime evidence, and unresolved non-attribution conflicts fail closed (#872).
- Added durable execution-tree cancellation and a provider-neutral fan-out
  circuit breaker. Operators can cancel one queued launch or an entire root
  objective through REST, `vk admission`, and Operations; root cancellation is
  recorded before descendants drain so late resume, retry, fallback,
  workflow-step, and child-agent launches fail closed. The breaker evaluates
  durable descendant count, depth, active and queued work, capacity pressure,
  and aggregate budget pressure before every expansion, persists bounded
  evidence across restart, and requires a safe operator resume before the tree
  can grow again (#1055).
- Routed scheduled workflows, watcher continuations, conversation resume and
  follow-up, retries, fallbacks, provider handoffs, recovery, and child-agent
  starts through the same durable admission and queue contract used by direct
  tasks and workflow steps. Every source preserves its causal execution-tree
  identity, revalidates immutable launch evidence before dispatch, and rejects
  hidden adapter-owned queues or bypass launches (#1054).
- Added one bounded durable admission queue shared by direct tasks and
  workflows. Atomic dequeue claims both a queue lease and capacity; restart
  recovery expires abandoned claims without duplicate dispatch. The scheduler
  combines explicit priority, capped age promotion, workspace fairness, and
  deterministic tie-breaking while retaining redacted conditional selection
  evidence. REST, `vk admission`, and Operations expose queue health,
  readiness, limiting scopes, age, priority, and safe cancellation with file
  and SQLite parity (#1053).
- Added versioned execution-tree identities and aggregate budget reservations
  to direct attempts, conversation continuations, retries, fallbacks, provider
  handoffs, child agents, workflow roots, and workflow steps. Capacity and the
  strictest applicable workspace, agent, workflow, run, and root-objective
  budgets are now claimed atomically through the same file lock or SQLite
  transaction. Idempotent usage events convert reservations into attributable
  committed input/output/total tokens, cost, tool calls, runtime, idle time,
  retries, and fan-out without counting descendant totals again. Terminal
  release preserves committed usage and returns unused reservations. REST and
  `vk admission tree` expose bounded totals, remaining policy capacity,
  contributors, and the exact blocking policies (#1052).
- Routed workflow roots and every provider-backed workflow step through the
  durable admission controller. A root now reserves `workflow-control`
  capacity before the run becomes active, while each executable step reserves
  against its resolved provider and selected host before step-attempt
  mutation or adapter dispatch. Retry and fallback attempts use new child
  reservations only after the prior reservation releases. Terminal,
  cancellation, and restart-reconciliation paths release idempotently, and
  restart recovery reclaims only the exact persisted root binding. Workflow
  run, step, and root-reservation filters are available through REST and
  `vk admission`; file and SQLite storage preserve the same inspection
  contract (#1051).
- Added durable admission reservations for every direct agent task launch. File
  and SQLite backends atomically enforce one active run per task plus optional
  global, workspace, root-task, provider, and host ceilings for run slots,
  process slots, and operator-estimated memory. Versioned decisions distinguish
  retryable overload from terminal policy denial before attempt persistence or
  provider dispatch. Lease recovery is bound to verified live supervisors,
  terminal paths release idempotently, and file heartbeat history compacts
  atomically. Operators can inspect active and recent reservations through
  read-scoped REST and `vk admission` JSON commands (#1050).
- Added a first-class workflow definition browser with deep-linked view, edit, and duplicate routes. Definition detail now exposes agents, ordered steps, phases, inputs, acceptance criteria, gates, loops, parallel branches, outputs, and provenance before execution. Server-owned access evidence distinguishes user-owned, shared, and built-in workflows; read-only definitions explain the restriction and offer duplication when permitted. User-owned edits save through Author with version-bound conflict protection that preserves the draft on failure. Starting a run is now a separate configuration step for optional task association and JSON context (#940).
- Enforced active phase authority across run tool discovery, mediated
  invocation, approvals, completion evidence, REST, CLI, and the task run
  timeline. MCP `readOnlyHint` annotations now classify external reads while
  unannotated tools fail closed as mutations; disallowed tools and credentials
  stay out of launch catalogs, and hidden or stale calls are rejected against
  the current transition evidence before dispatch. Approval decisions cannot
  outlive or widen their bound phase, and completion records identify the
  effective phase plus every authority-expanding transition. Redacted support
  bundles include bounded phase identities, authority counts, source kinds,
  transition expansions, and completion bindings without exporting exact
  paths, credentials, or full digests. ACP stdio exposes the required
  pre-execution mediation; adapters without equivalent command and
  external-action controls return typed blockers for explicit phases. Legacy
  attempts remain readable without invented transition state (#1033).
- Propagated immutable phase authority through task previews and starts,
  workflow steps, retries and fallbacks, provider changes, conversation resume,
  follow-up and fork operations, and active-run controls. Every executable
  entry now resolves the exact parent launch or current transition evidence
  before attempt mutation, persists the compiled phase digest and source
  references, intersects descendants monotonically, and returns typed blockers
  when the selected sandbox, runtime, host, or tool policy cannot enforce a
  required phase dimension. Legacy launches remain explicit and readable
  without inventing restrictions (#1036).
- Added the append-only `phase-transition-record/v1` journal for active runs.
  Every transition is bound to the exact attempt, prior sequence, compiled
  phase evidence, and launch-manifest digest. Narrowing transitions apply
  immediately, while authority expansion uses the existing exact-action
  approval broker. Administrators can apply an auditable emergency expansion
  for at most 24 hours; expiry durably restores the prior evidence. File and
  SQLite repositories preserve restart recovery and idempotency, and new REST
  and CLI controls expose current state, history, transitions, and approval
  decisions (#1035).
- Added the provider-neutral `phase-capability-profile/v1` foundation with
  strict schemas and built-in explore, plan, implement, verify, and publish
  profiles. A pure compiler now intersects phase requests with parent, agent,
  sandbox, tool-catalog, and launch-policy authority without ever widening a
  scope. Required unsupported or unenforceable dimensions return typed
  fail-closed blockers, legacy launches are explicit, and the optional plan
  artifact is restricted to one normalized harness-owned exact path that
  cannot grant general filesystem or indirect shell-write authority (#1034).
- Added a provider-neutral workspace execution trust gate that scans the exact
  task worktree for repository-controlled agent instructions, provider
  configuration, MCP servers, hooks, language-server settings, workflows,
  extensions, skills, and agent definitions before launch. Stable identity
  combines canonical worktree, repository, Git common-directory, and
  credential-redacted remote evidence so sibling, nested, moved, and linked
  worktrees cannot borrow authorization. Append-only trusted, restricted,
  denied, revoked, and expiring decisions bind to an exact inventory digest;
  project policy can only narrow them. Executable configuration requires
  explicit authorization, while model-only instructions can run provisionally
  only under enforced read-only, no-network, credential-free restricted
  controls. The immutable launch manifest records redacted inventory and
  decision evidence, and a final pre-spawn rescan blocks any drift. Added
  administrator REST and CLI scan, decide, and revoke controls (#878).
- Added run-scoped filesystem sandbox enforcement for local ACP, Claude Code,
  Codex app-server, Codex CLI, and Hermes processes. Required presets compile
  explicit read, write, deny, dotfile, protected-metadata, temporary, and cache
  rules into a version-bound `codex sandbox` wrapper before provider creation.
  Workspace and home aliases fail closed on traversal or symlink escape, and
  nested mount boundaries and pre-existing external hard-link aliases are
  denied and rechecked before spawn. Failed or byte-changed backends block
  launch. CLI package/virtual-environment roots, linked-worktree Git metadata,
  and `.git`, `.agents`, `.codex`, and `.veritas-kanban` directly beneath
  writable roots are bound read-only, while protected paths cannot themselves
  be writable roots or symlinks. Ambient Git config is replaced with a
  run-scoped identity-only environment. Immutable manifests retain only
  canonical path hashes, the exact provider-runtime digest, backend
  executable-content and conformance evidence, and durable cleanup state.
  Local native and wrapped runs receive supervisor-owned temporary and cache
  directories, while remote native enforcement must prove every active
  filesystem and lifecycle capability. Cleanup rejects symlinked ancestors
  (#862).
- Added one durable `run-recovery/v1` state machine for production task
  attempts and workflow steps. Only classified transient transport, provider
  availability, rate-limit, timeout, and verification failures retry; policy,
  configuration, cancellation, destructive partial-side-effect, and unknown
  failures fail closed or require operator review. Recovery records preserve
  causal parents, exponential jittered backoff, selected routes, launch
  manifest digests, and cumulative budgets; compatible fallbacks are probed
  through runtime capability and sandbox gates before launch. Pending recovery
  survives restart, duplicate terminal callbacks cannot create multiple
  branches, and exact task recovery can be cancelled through REST, CLI, or MCP
  controls. Workflow recovery exposes the same exact-parent cancellation
  through REST (#861).

### Changed

- Aligned contributor verification with the sustainable delivery cadence: each change now gets one risk-proportional review, focused checks for the affected product boundary, and runtime smoke tests only when runtime behavior changes. Complete workspace build, typecheck, test, security, integration, E2E, and artifact gates remain milestone-only, while the dependency-free cadence checker now rejects the retired per-commit multi-review, per-merge broad-gate, and unconditional browser-smoke language if it returns. Cadence checker changes are verified inside the CI scope-control job and no longer trigger an unrelated workspace unit suite (#1048).
- Standardized focused Vitest verification on direct
  `pnpm --filter <package> exec vitest run <exact-test-files>` invocation. The
  dependency-free delivery cadence checker now rejects active guidance that
  presents either of the ambiguous package `test -- <test-files>` or
  `test -- --run <test-files>` wrappers as focused verification, preventing
  an intended file slice from silently expanding into an entire package suite
  (#1044, #1058).
- Reworked GitHub release notes to use natural page-width prose and concise
  lists instead of ragged hanging-indent blocks or unmarked stacks of bold-led
  paragraphs. The release-format gate now rejects long wrapping list items,
  nested headings, bold-led prose items, and consecutive sentence-sized blocks
  in v6.0.2 and later release bodies (#1025).

### Fixed

- Completed append-only admission snapshot writes before sync so a short
  `FileHandle.write()` cannot leave a truncated JSONL record that makes durable
  reservation state unreadable (#1139).
- Restored the complete `node:fs/promises` surface in filesystem test doubles
  after centralized storage added `lstat`, clearing collateral concurrent-suite
  failures without weakening production path checks (#1136).
- Mapped the exact knowledge-collection router prefix to shared work-product
  read/write permissions, restoring fail-closed client/server permission
  coverage parity (#1141).
- Updated the CLI native-fork regression coverage to validate the required
  generated idempotency key before comparing the stable request payload,
  clearing the release-branch related-test gate (#1143).
- Separated live MCP-to-HTTP task and sprint integration groups from the
  server-independent unit suite so focused CI no longer attempts localhost API
  calls without a running server (#1144).

## [6.0.2] - 2026-07-24

Veritas Kanban 6.0.2 is a desktop recovery and supportability hotfix. It keeps
Chat contained within a reversible Workbench dock, adds authoritative native
version/build information, and makes CI verification proportional to the
change while retaining full release gates.

### Changed

- Made CI test scope deterministic and path-aware. Documentation-only changes
  skip workspace suites, ordinary code changes run Vitest related coverage for
  affected packages, and CI, manifest, shared, storage, or desktop changes
  conservatively select the full gate. A successful reviewed full-suite head is
  reused after merge only when it is an ancestor of the merge commit, avoiding
  a duplicate full run while scheduled and explicit release gates remain
  authoritative. Dual-storage parity now invokes its exact Vitest file instead
  of expanding through the package test wrapper, and job summaries retain exact
  range and selection evidence (#1000).

### Fixed

- Updated QMD query scoping to pass one documented `-c` flag per collection.
  Current QMD versions silently ignore the former unknown `--collections`
  argument, which could broaden a supposedly scoped search (#867).
- Replaced the desktop-only bottom Chat surface with a bounded dock that opens on
  the right by default and can switch between Right and Bottom without remounting
  the active conversation. Both dimensions are clamped against the live viewport,
  chat scrolling cannot move the application shell, wheel input cannot resize the
  dock, and Close, Escape, Back, or Reset Layout always preserve a visible board
  and restore focus (#1004).
- Added a native **About Veritas Kanban** panel and offline **Copy Version
  Information** action using Electron's authoritative application version. The
  same record now reports the embedded release commit, stable/beta/development
  channel, OS, and architecture through About, clipboard support text, the
  desktop bridge, and updater fallback without depending on the renderer or
  network (#1005).

## [6.0.1] - 2026-07-24

Veritas Kanban 6.0.1 is the first supported stable v6 release. It supersedes
the quarantined 6.0.0 prerelease after closing the post-publication desktop and
workflow stabilization backlog tracked in #924.

### Fixed

- Kept desktop Chat in a bounded, reversible workbench panel; Escape and browser
  Back now close it, obsolete persisted panel visibility is discarded, compact
  window heights preserve the application shell, and the native Navigate menu
  can reset layout state without deleting application data (#945).
- Normalized omitted workflow and run collections in the task Workflow action,
  preventing undefined length crashes and providing a recoverable load error
  with Retry instead of replacing the task surface with an error boundary
  (#936).
- Made **New Profile** open a focused, validated scoring draft from both Profiles
  and Score Explorer, with cancel returning to the originating tab without
  creating an orphan profile (#943).
- Let Archive cards grow with expanded content, clamp collapsed text by whole
  lines with accessible full text, wrap long metadata safely, and keep Restore
  reachable beside long task content (#939).
- Established one bounded, keyboard-focusable scroll owner for task drawers and
  shared overlays, kept drawer chrome fixed, and made task description editors
  taller and vertically resizable (#935).
- Preserved in-app route origins, scroll positions, and task return paths across
  full-page navigation, added browser Back and `Cmd+[` support, and made direct
  links fall back safely to Board (#937).
- Reconciled Operations Digest totals with board inventory, exposed auditable
  inclusion and exclusion reasons plus metadata quality findings, bounded
  observed wall time to the selected window, and documented current-state
  versus windowed metrics (#944).
- Removed competing profile-editor and scorer-list scroll containers so Agent
  Output Scoring uses the application page scrollbar at compact and full
  desktop sizes (#938).
- Expanded the template editor into a responsive authoring surface with one
  bounded scroll region, fixed actions, a resizable Markdown editor, inline
  validation, and unsaved-change protection (#941).
- Made first-run setup version-neutral and sourced desktop bridge version
  reporting from Electron's packaged application metadata (#986).

## [6.0.0] - 2026-07-24

> Quarantined prerelease. Use 6.0.1 or newer. The 6.0.0 artifacts remain
> available only for investigation and historical release evidence.

Each release entry below names its tracking issue. The complete issue-to-pull
request mapping, including multi-PR fixes and release engineering, is retained
in the [v6 Release Candidate Evidence Packet](docs/V6-RC-EVIDENCE-PACKET.md#issue-and-pull-request-traceability).

### Changed

- Tiered GitHub Actions so pull requests run changed test files with
  lint/typecheck, security, and build gates, while the complete workspace suite
  runs on `main`, nightly, by manual dispatch, or with the `ci:full` label.
  Cross-platform unsigned desktop packaging now runs for desktop/package PRs,
  after relevant changes merge to `main`, or by manual dispatch (#955).

### Fixed

- Prevented the packaged desktop updater from treating an older stable release
  as downloadable. Stable, beta, and dev channel assignment now explicitly
  restores `allowDowngrade=false` after the `electron-updater` channel setter
  changes it internally (#983).
- Deferred the default run-supervisor SQLite repository lookup until the first
  supervisor operation. Packaged SQLite startup can now import and initialize
  routes before storage bootstrap without crashing (#981).
- Added bounded macOS desktop startup verification that retries through the
  LaunchServices readiness window, requires the installed app and health
  endpoint versions to agree, and reports process, port, and log diagnostics on
  a real timeout. Updated web-to-desktop migration, routine Homebrew upgrade,
  automation, troubleshooting, and release guidance to use the readiness gate
  instead of an immediate health request (#927).

### Added

- Added a composed credential-free Buzz compatibility gate and complete
  machine-readable seam evidence for the pinned Buzz `0.4.24` /
  `710ed9fff57878a1d69f809b80a6ee0416c53fc4` baseline, plus trigger setup,
  support dispositions, optional live-smoke boundaries, upgrade, and rollback
  guidance (#912).
- Added allowlisted Buzz root-message workflow triggers with bounded predicates,
  provider-neutral pre-dispatch hooks, durable causal keys, replay and echo
  suppression, restart reconciliation, API configuration, and audit history
  (#911).
- Added the provider-neutral `runtime-hook/v1` in-process hook bus with bounded
  envelopes, deterministic scope ordering, explicit blocking pre-events,
  passive post-events, timeout/reentrancy protection, side-effect-free dry-run,
  and causal run-journal evidence. External executable and HTTP handlers remain
  fail closed pending their sandbox and egress boundaries (#874).
- Added `harness-compatibility-matrix/v1` for Buzz, Grok Build, OpenAI Codex
  app-server, Claude Code, and GitHub Copilot CLI. One reviewed record now
  drives exact builds, source caveats, capability and fixture digests,
  invalidation policy, live support tiers, API, `vk doctor`, Settings, telemetry,
  and operator guidance (#918).
- Added `harness-conformance-suite/v1` and a deterministic runner for seeded,
  repeated provider/model/profile/policy/sandbox comparisons. Explicit
  assertions cover outcomes, files, tools, approvals, network, policy,
  completion, and capability evidence; normalized results aggregate pass rate,
  variance, latency, tokens, cost, retries, failure classes, immutable evidence
  references, and versioned baseline regressions. A credential-free recorded
  mock command provides the CI/local foundation while credential-gated lanes
  require explicit opt-in (#859).
- Composed the pinned `buzz-agent` ACP profile with the system-owned
  `veritas-run` bridge. Buzz sessions now receive only that bridge for selected
  run tools, so catalog allow, deny, approval, attribution, and cleanup remain
  under the provider-neutral control plane without native server credentials
  or a Buzz-specific MCP implementation. Provider capability evidence advances
  to probe revision 14 (#909).
- Added the system-owned `veritas-run` MCP bridge for credential-bound tools.
  Opaque, in-memory authority binds the exact task, attempt, catalog, launch
  manifest, and two allowed bridge methods. Codex CLI/SDK, Codex app-server,
  Claude Code, and ACP stdio inject the same narrow bridge; Hermes and OpenClaw
  fail closed before dispatch when a credential-bound catalog is selected
  (#970).
- Added exact-action credential lease consumption to mediated run-tool calls.
  The server binds each operation to the active launch manifest, catalog,
  server, tool, arguments digest, approval, and operation ID; resolves values
  only inside a one-shot downstream MCP session; rejects replay, drift,
  approval mismatch, unavailable sources, and credential-bearing results; and
  relies on the existing terminal lifecycle reconciliation to revoke leases
  (#969).
- Added value-free credential boundary evidence to `run-tool-catalog/v1`.
  Credential-bound definitions now require enabled MCP-scoped broker
  definitions, exact source targets, and immutable definition/scope digests.
  Discovery strips source environment and header values, native provider
  configuration omits credential-bound servers, covered launch references
  report a tool-control-plane boundary, and uncovered or drifted references
  remain fail closed (#968).
- Added `vk acp serve --stdio` and `vk acp status --json` to expose a
  task-bound, provider-neutral ACP v1 server view over Veritas-managed
  conversations. Fresh prompts retain the immutable task envelope, reconnect
  replays the causal run journal by cursor, permission requests use the durable
  approval broker, cancellation interrupts instead of stopping the task, and
  disconnect leaves the supervised run active. Client-owned MCP catalogs and
  mismatched worktrees fail closed (#960).
- Added a disabled-by-default Grok Build profile under the generic ACP
  provider, pinned to released `v0.2.111` build `94172f2aa4e5`. Veritas now
  compiles a dedicated no-leader stdio launch, accepts only bounded model,
  effort, deny, tool, sandbox, and feature-disable controls, classifies Grok
  boot credentials separately from task credentials, and validates the exact
  version, capability, and xAI extension handshake. Unknown builds, approval
  bypass, reauthentication, leader/plugin/endpoint injection, and source
  provenance claims fail closed. Provider probe evidence advances to revision
  13 (#920).
- Added a disabled-by-default GitHub Copilot CLI profile under the generic ACP
  provider, pinned to the `Copilot 1.0.74` public-preview handshake. Veritas
  now owns a safe stdio baseline, compiles bounded restrictive model/effort/
  tool/URL/context/credit settings into immutable launch argv, classifies
  Copilot boot credentials without probing authentication or inference, and
  reports the incomplete-source and release-tag provenance limits truthfully.
  Provider probe evidence advances to revision 12 (#917).
- Added a disabled-by-default `buzz-agent` conformance profile under the generic
  ACP provider, pinned to Buzz v0.4.24 commit
  `710ed9fff57878a1d69f809b80a6ee0416c53fc4`. The profile validates exact ACP
  identity, version, capabilities, known limitations, safe configuration and
  boot-authentication environment keys, rejects `buzz-acp` and incompatible
  capability drift,
  and advances provider probe evidence to revision 11 (#907).
- Added `run-launch-credential-plan/v1` to classify provider boot
  authentication, broker-targeted task credentials, and explicit high-risk
  environment passthrough in immutable launch evidence. Plans bind to provider
  runtime evidence, remain value-free, ignore timestamp-only probe refreshes,
  and block task credential launches until an accepted tool or egress boundary
  proves brokered delivery (#932).
- Added a generic stable ACP v1 stdio provider adapter with no-shell supervised
  launch, initialize-time identity and capability evidence, fresh/resume/fork/
  close session lifecycle, bounded bidirectional JSON-RPC, causal message,
  thought, plan, and tool events, durable permission brokering, capability
  drift rejection, explicit environment filtering, and immutable all-allow
  run-scoped MCP session configuration. Provider capability evidence advances
  to probe revision 10; the client-facing ACP server view is tracked separately
  by #960 (#870).
- Added the `tool-server-definition/v1`, `tool-server-discovery/v1`, and
  `run-tool-catalog/v1` control-plane contracts with file and SQLite
  persistence, version-bound discovery caching, required and optional server
  posture, per-run allow/deny/approval decisions, bounded supervised stdio and
  Streamable HTTP invocation, causal replay-safe events, REST/CLI/MCP operator
  surfaces, and native run-scoped MCP injection for Codex app-server and
  Claude Code. Credential-bound definitions remain fail-closed until the
  provider launch credential broker lands (#857).
- Added `conversation-lifecycle/v1` with durable provider conversation, turn,
  item, parent, and fork identities; launch-manifest and worktree compatibility
  checks; context-window posture; causal lifecycle events; attributed REST,
  CLI, MCP, and web controls; and explicit unsupported delivery results.
  Codex CLI and SDK can resume exact persisted sessions, Claude Code can resume
  or fork with system-owned native flags, and Codex app-server can resume,
  follow up, steer, fork, compact, archive, interrupt, and close through
  schema-validated JSON-RPC methods. Generic process stdin is no longer treated
  as a successful provider follow-up path, and capability evidence advances to
  probe revision 8 (#856).
- Added `run-supervisor/v1`, a durable provider-run ownership record with exact
  provider, task-envelope, launch-manifest, and worktree bindings; persisted
  process groups or remote-session handles; budget and event cursors; expiring
  single-owner leases; typed recovery actions; and idempotent terminal
  ownership. Startup now reattaches verified local provider processes, resumes
  journal reconciliation strictly after the durable cursor, restores exact
  completion results across crash races, and blocks unsafe recovery without
  signaling reused PIDs or starting duplicate work. File and SQLite
  repositories share the same compare-and-set contract, and provider capability
  evidence advances to probe revision 7 (#853).
- Added a provider-native `run-approval/v1` broker with file and SQLite
  persistence, exact action hashes, atomic compare-and-set decisions,
  auth-derived reviewer identity, critical-action authentication freshness,
  expiry/cancellation, mobile two-layer safety, causal audit correlation, REST
  and WebSocket delivery, task and shared-run review surfaces, and
  non-persisted elicitation response values. Codex app-server now pauses and resumes its exact
  command, file, permission, tool-question, legacy exec/patch, and MCP
  elicitation request through pinned v0.145.0 response schemas; stale, changed,
  duplicate, interrupted, unsupported, and failed requests deny safely (#852).
- Added a first-class Codex app-server v2 task adapter pinned to
  `codex-cli 0.145.0` and upstream commit
  `25af12f7e61572b0bc18ddb1008be543b91519b0`. Veritas now owns a strict-stdio,
  no-shell launch, validates checked-in exact-version JSON Schemas, persists
  one task-bound thread and turn, streams item/usage/completion events into the
  causal journal, supports cooperative `turn/interrupt`, and retries only
  bounded overload `-32001` responses. Inherited MCP, hooks, plugins, apps,
  browser/computer tools, elicitation, remote control, and unsandboxed
  `thread/shellCommand` remain structurally disabled; approval, lifecycle, and
  reattachment controls fail closed until their provider-neutral brokers land
  (#921).
- Added a first-class Claude Code v2.1.218 task adapter with a reproducible
  no-shell bare-mode launch, static sandbox-derived permissions, explicit
  environment authentication with provider credentials scrubbed from tool
  subprocesses, bounded health and agent-discovery diagnostics,
  immutable task/run manifests, drain-safe stream-json ingestion, causal event
  mapping for partial text, thinking, tools, hooks, subagents, usage, cost, and
  results, separate session identity persistence, artifact discovery, and
  fail-closed capability evidence for lifecycle and broker controls that have
  not landed yet. Legacy provider-less Claude records migrate only when command
  identity matches, and the old permission-bypass default is removed (#916).
- Added `run-event/v1`, a provider-neutral causal event journal for OpenClaw,
  Codex CLI, Codex SDK, Codex app-server, Claude Code, and Hermes. Provider
  mappers now durably append bounded,
  redacted, deduplicated lifecycle, message, reasoning, command, file, tool,
  approval, artifact, usage, error, and unknown events before projecting them
  into legacy logs, traces, telemetry, budgets, and live output. File and SQLite
  repositories allocate per-attempt monotonic cursors, REST and WebSocket
  clients can replay after a cursor, and reconnect subscriptions merge replay
  with concurrent live events without gaps. The published JSON Schema,
  symlink-safe file storage, SQLite migration, provider fixtures, replay,
  migration, redaction, and interleaved operator/provider tests define the v1
  compatibility boundary (#850).
- Added one-way Buzz persona/team definition import with signed bounded NIP-33
  head queries, exact v0.4.24 field policy, preview/diff/collision actions,
  same-author team resolution, disabled profile and roster materialization,
  immutable provenance, source-status reporting, optimistic JSON/SQLite
  mutations, audit history, Settings controls, and malicious-source coverage.
  Runtime/model/provider preferences remain source-only, and import never
  launches, enables, routes, fetches, installs, or writes back (#910).
- Added a reference-only Buzz communication adapter with typed configuration,
  host-preserving HTTP/WS normalization, SSRF-aware bounded relay probes,
  NIP-11 software/version/community checks, NIP-98 identity and membership/read
  diagnostics with built-in hexadecimal/`nsec` signing, stable machine-readable
  reason codes, evidence invalidation, shell-free optional command discovery,
  Settings controls, `vk doctor` reporting, and operator/API/security
  documentation. The resulting compatibility evidence is the fail-closed gate
  consumed by Buzz communication delivery (#906).
- Added a native bidirectional Buzz channel bridge for Squad Chat with signed
  Nostr root/reply events, channel mapping APIs and Settings controls, NIP-42
  WebSocket subscriptions, source author/timestamp/deep-link metadata,
  `(created_at,event_id)` cursors, overlap dedupe, out-of-order reply recovery,
  loop prevention, non-destructive edit/delete auditing, delivery-unknown
  reconciliation, runtime health facets, safe disable/rollback, fake-relay
  contract coverage, and operator/API/security documentation (#906).
- Added transactional, remote-safe worktree lifecycle management with
  versioned manifests, exact fetched base commits, reasoned offline fallback,
  task/attempt ownership leases, active-run locks, recovery states, and
  preview-first stale cleanup. Dirty, untracked, unpushed, unmerged, and
  externally held worktrees now require an admin-audited override. Attempt
  leases use exclusive claims, legacy worktrees have a validated adoption path,
  and restart recovery reconciles partial rebase, integration, push, and
  cleanup states. Integration uses a dedicated temporary worktree and
  non-force push without mutating the primary checkout. Task envelopes and run
  launch manifests bind the exact worktree allocation and base evidence (#858).
- Added the versioned credential-definition and run-bound lease core with
  metadata-only admin APIs, canonical definition/scope/action fingerprints,
  opaque hashed handles, exact launch-manifest and action binding, atomic TTL
  and use-count enforcement, operation-level replay rejection,
  refresh/revoke/expiry/reconciliation state, callback-only secret resolution,
  terminal-run invalidation with revocation retry, live-owner file locking, and
  bounded metadata audit records. Required brokered presets now reject advisory
  or externally delegated credential handling until a controlled provider
  boundary proves end-to-end support (#931).
- Added the immutable `run-launch-manifest/v1` contract, a preflight preview API
  and CLI command, per-field configuration provenance, fail-closed profile
  tool/MCP/permission/health enforcement, parent-attempt material drift,
  readiness/override evidence, governance traces, attempt/history/log
  persistence, and completion-packet links to the exact launch and provider
  capability evidence (#854).
- Added immutable provider-owned task-envelope transports for OpenClaw, Codex
  CLI, Codex SDK, Codex app-server, Claude Code, and Hermes. Each renderer
  binds the exact envelope and runtime identity, commit policy, bounded
  attributed profile/checkpoint context, workspace baseline, verification
  gates, and completion evidence to the launched request. OpenClaw alone
  receives a completion callback; process and stream providers return terminal
  output through harness-owned capture, and mismatched provider/adapter
  identities fail closed (#892).
- Added digest-bound, idempotent `completion-result/v1` persistence for process,
  stream, callback, remote-session, and operator-interruption terminal paths.
  Provider claims are bounded, redacted, and untrusted while harness evidence
  attributes post-launch files, commits, artifacts, verification, and side
  effects without crediting pre-existing off-HEAD history.
  Commit/output/evidence violations downgrade success to recoverable
  partial completion; exact duplicate callbacks survive retry or restart and
  conflicting terminal owners fail closed. Provider-owned transports cannot be
  replaced by callbacks, completion writes use compare-and-swap retries, and
  harness-owned restart reconciliation remains inside the same result contract
  while OpenClaw stays eligible for its callback (#893).

### Security

- Removed the legacy Claude Code permission-bypass default. Every executable
  provider now launches through an explicit adapter, immutable launch manifest,
  bounded environment allowlist, capability evidence, exact-action approval
  broker, and credential plan. Unsupported controls, adapter/profile drift,
  stale evidence, and unknown provider-less records fail closed (#919, #916,
  #852, #932).
- Added value-free credential definitions and one-shot run-bound leases.
  Credential values are resolved only inside the mediated downstream call and
  are excluded from provider-native configuration, manifests, logs, telemetry,
  fixtures, and API responses (#931, #968, #969, #970).
- Added bounded, redacted causal protocol storage and supervised no-shell
  process lifecycles for ACP, Codex app-server, Claude Code, and Buzz relay
  integration. The deferred fine-grained HTTP egress proxy remains tracked in
  #855; any required network rule that current runtime evidence cannot enforce
  blocks launch.

### Migration

- Existing provider configurations are normalized to
  `harness-support-profile/v1`. Only known legacy records whose command and
  built-in type both identify Codex, Hermes, or Claude are migrated to their
  matching adapter. Provider-less, ambiguous, disabled, or mismatched records
  remain disabled or fail closed; no migration starts a provider.
- The public API remains `v1`. New run, approval, lifecycle, tool, credential,
  compatibility, Buzz, and conformance contracts are additive. Existing v5
  board and desktop SQLite data remains in place; operators must back up before
  upgrade and keep the v5.2.5 backup for rollback.
- Buzz, Grok Build, GitHub Copilot CLI, Claude Code, and Codex app-server
  support is exact-version and evidence-bound. Unknown builds do not inherit
  certification. Grok Build and Copilot CLI retain source-provenance limits,
  ACP lifecycle support varies by runtime, and credential-gated live smoke
  remains separate from deterministic certification.

## [5.2.5] - 2026-07-23

### Added

- Added a complete web/source-to-Mac migration runbook with a decision path for
  already-populated desktop SQLite, coherent stopped-writer backups, isolated
  file-to-SQLite staging, governed bundle replacement, watchdog discovery,
  authenticated automation cutover, verification, rollback, and warning
  remediation (#899).
- Added the versioned `task-envelope/v1` and `completion-result/v1` contracts,
  canonical envelope digests, immutable per-attempt persistence, launch HEAD and
  dirty-file attribution with staged-blob and worktree SHA-256 fingerprints,
  bounded evidence/output/verification/side-effect schemas, and explicit
  `forbidden`, `allowed`, or `required` commit policy with run, task, and
  legacy-setting precedence. Baseline capture retries unstable repositories,
  path side effects are clamped to the effective sandbox, authoritative run
  contracts reject generic task PATCH mutation, oversized legacy workspace IDs
  normalize deterministically, and task create/update policy is available over
  REST, CLI, and MCP. Agent start and status APIs, task storage, attempt history,
  and logs now carry the exact envelope used for the run (#891).
- Added versioned, evidence-backed provider runtime manifests for Codex CLI,
  Codex SDK, Hermes, and OpenClaw with bounded identity and conformance probes,
  race-safe version-skew cache invalidation, canonical immutable run snapshots
  and digests, complete capability posture, and attempt/history/trace/log
  persistence (#885).
- Added validated runtime-manifest registration and heartbeat refresh, custom
  provider discovery, manifest-authoritative host posture, and provider-neutral
  required-capability routing with structured evidence for every attempted
  primary, fallback, or rejected candidate (#886).
- Added one provider-runtime control evaluator for launch requirements and
  status, logs, completion, stop, steer, resume, reattach, tool, MCP, structured
  output, token-usage, and artifact controls. Agent status now returns concrete
  capability-derived availability, reasons, and remediation, and REST, CLI, and
  MCP starts can declare additional required capabilities. Completion callbacks,
  token budgets, and shared co-drive controls are attempt-bound; provider-native
  approvals fail closed; OpenClaw task and workflow evidence are separated; and
  workflow requirements account for standard MCP names and metric-specific
  budgets (#887).
- Added an admin-governed SQLite journal maintenance workflow with non-mutating
  previews, restart-time exclusive conversion, verified backups, durable stage
  journals, forward-only crash recovery, integrity verification, in-place mode
  rollback while exclusive, single-host ownership locks, expiring/revocable
  overrides, CLI commands, and redacted diagnostics (#882).

### Changed

- Added Hermes to normalized provider profiles and Settings selectors, and made
  explicitly configured providers without an executable task adapter fail
  closed instead of silently dispatching through OpenClaw (#885).
- Made host provider, model, tool, and sandbox capability decisions consume
  validated manifests. Legacy free-form registration posture remains visible
  but cannot satisfy required runtime capabilities. Runtime evidence writes are
  identity-bound, reject unredacted secrets and misspelled fields, expire with
  heartbeat liveness, and invalidate when provider identity changes. Unresolved
  sandbox presets fail closed instead of borrowing aggregate host signals
  (#886).
- Made active agent and workflow controls consume the exact persisted launch
  manifest, reject invalid or mismatched snapshots, and fail closed before
  unsupported work. Sandbox dry-runs now resolve live registered manifest
  digests server-side, workflow manifests persist before provider execution,
  and task, Work view, and shared co-drive controls expose accessible disabled
  reasons when a runtime cannot stop or steer (#887).
- Classified the authoritative SQLite filesystem before database open, limited
  WAL to recognized durable local filesystems, refused known-unsafe and unknown
  storage before creating database sidecars, and exposed redacted filesystem,
  journal, and integrity posture through deep health and Maintenance diagnostics
  (#881).

### Fixed

- Raised vulnerable transitive `fast-uri` and `js-yaml` ranges to patched
  releases so the production dependency audit passes at the release gate
  (#903).
- Made startup, setup, password, recovery, and login surfaces draggable in the
  frameless desktop window, and made first-run setup detect populated desktop
  SQLite data, default to a non-destructive **Use Existing Data** path, show
  concise migrated-data counts, and reserve backup restore for recovery (#901).
- Serialized agent launch and terminalization ownership per task and attempt so
  concurrent starts, stop requests, provider exits, and callbacks cannot launch
  or finalize the same run twice (#887).
- Restored packaged desktop agent controls after password login by granting the
  verified loopback owner session the narrow `local-agent:run` capability while
  keeping production localhost bypass disabled (#887).
- Made packaged desktop port selection detect listeners on both IPv4 and IPv6
  loopback and kept dev server/web fallback ports distinct, preventing Electron
  from attaching to an unrelated local server or colliding with itself.
- Kept mobile notifications above the safe-area-aware bottom navigation so
  long-lived toasts cannot intercept touch input after Task Detail closes
  (#869).

## [5.2.4] - 2026-07-13

### Fixed

- Restored the native macOS Edit menu so Cut, Copy, Paste, Select All, and
  their standard keyboard shortcuts work in desktop text and password fields
  (#842).
- Rebuilt the password-recovery actions as one full-width vertical stack with
  consistent spacing, and added password-manager autocomplete metadata to the
  login and recovery password fields (#842).

## [5.2.3] - 2026-07-13

### Changed

- Enforced the tracked runtime security artifact guard in pre-commit and CI
  security gates, with documented rotation and private-evidence handling
  requirements (#836).

### Fixed

- Rebuilt the desktop login actions as a stable vertical Mantine stack with a
  full-width primary action, centered recovery action, consistent spacing, and
  regression coverage for the packaged layout (#839).

## [5.2.2] - 2026-07-12

### Added

- Added append-only JSONL activity storage with recovery and compatibility
  coverage for durable event history (#782, #808).

### Changed

- Added canonical repository guidance for Codex, OpenClaw, and Hermes and
  documented validated provider behavior (#803).
- Routed web API requests through the shared authenticated client and retired
  the deprecated polling hook (#802).
- Updated the Codex SDK integration to `0.144.1` and pinned patched transitive
  development-tool dependencies (#792, #795).
- Added `provider` and `command` fields to `WorkflowAgent` in
  `@veritas-kanban/shared` to align with the server-side definition and prevent
  silent contract drift (#786).
- Added `max_reroutes` to `FailurePolicy` and `retryRouteCount` to `WorkflowRun`
  in both the shared and server workflow type contracts (#780, #786).

### Fixed

- Hardened file-storage mutation ordering, rollback behavior, and integrity
  recovery across concurrent writes (#804).
- Fixed runtime lifecycle leaks, async registry persistence, attempt
  reconciliation, and cross-platform path helpers (#774, #779, #781, #783,
  #801).
- Normalized security artifact paths before matching so mixed-case paths cannot
  bypass expected classification (#807).
- Reworked Scoring Profiles into a compact list/detail flow at phone widths,
  preserved the selected profile across create and duplicate actions, and
  guarded unsaved drafts when returning to the list, changing tabs, or leaving
  the scoring surface (#813).
- Replaced broad and layout-property dashboard transitions with instant chart
  updates, explicit short hover feedback, and accessible immediate section
  expansion, including intentional reduced-motion behavior (#814).
- Made SQLite activity ordering deterministic for multiple events written in
  the same millisecond, preserving the newest-first feed contract and stable
  retention trimming (#823).
- Removed untracked asynchronous directory creation from `AttachmentService`
  construction; attachment and archive paths are now created lazily by the
  operations that need them (#825).
- Prevented compact bottom-navigation labels from overlapping, kept the mobile
  header within 320 px, and restored a fixed, safe-area-aware Board Chat entry
  point (#811).
- Kept mobile Settings navigation visible and touch-sized in the dialog content
  flow, and stacked the Product Mode summary and selector at compact widths
  (#810).
- Made dialog, sheet, alert, and Task Detail overlays honor reduced-transparency
  and increased-contrast preferences, strengthened modal focus boundaries, and
  dismissed task-card tooltips when opening Task Detail (#815).
- Restored keyboard drag-and-drop parity on the Kanban board with spatial
  cross-column movement, empty-column targeting, same-column reordering,
  accurate screen-reader announcements, mutation rollback, and post-move focus
  restoration (#812).
- Kept Electron's runtime API external in Vite 8/Rolldown desktop builds,
  preventing the npm executable-path shim from replacing `app`,
  `BrowserWindow`, `contextBridge`, and related native APIs in emitted main and
  preload artifacts; desktop builds now fail closed if the shim reappears
  (#809).
- Isolated QMD result normalization coverage from unrelated persistent search
  collections and restored test environment state only after temporary search
  roots are removed, eliminating the intermittent teardown race (#793).
- Human-gate blocking (`on_false.escalate_to: human`) now transitions the run
  to `blocked` instead of `failed` via the new `HumanGateBlockError` typed
  exception; `approveGateStep` and `rejectGateStep` service methods replace the
  unimplemented route stubs that previously discarded state (#778).
- `retry_step` cross-step rerouts are now bounded by a persisted
  `retryRouteCount` field; the default cap is 10 and is configurable via
  `on_fail.max_reroutes`; exhaustion respects `on_exhausted` policy or fails
  deterministically (#780).
- `WorkflowRunService` private `NotFoundError` and `ValidationError` classes
  replaced with the shared `AppError` hierarchy so workflow domain errors map
  to stable 404/400 HTTP responses instead of HTTP 500 (#785).
- `BlockingService` now enforces `dependencies.depends_on` (canonical
  dependency model) in addition to legacy `blockedBy`; the tasks route
  transition guard checks both fields so `depends_on` relationships block
  in-progress transitions (#787).

## [5.2.1] - 2026-06-29

### Fixed

- Blocked disabled communication adapters from ingesting inbound human replies
  into Squad Chat (#760, #764).
- Made delegated workspace intake recoverable when config persistence fails
  after target task creation (#761, #764).
- Verified queue monitor candidate selection already prioritizes runnable work
  before the bounded candidate cap (#762).

### Changed

- Refreshed the static docs homepage to remove brittle launch-era star and test
  count claims from current-release copy (#763, #764).
- Bumped the source metadata from `5.2.0` to `5.2.1` across package manifests
  and operator-facing version docs (#765).
- Stabilized workflow run metadata coverage and file-backed ChatService startup
  directory setup so release CI does not leak asynchronous test setup errors.

## [5.2.0] - 2026-06-26

### Added

- Added workspace team roster manifests and capability routing rules for
  capability-aware delegation (#734).
- Added cross-workspace capability discovery and delegated work intake (#735).
- Added policy-gated queue intake monitoring for GitHub issues and agent runs
  (#736).
- Added a unified recurring work scheduler for monitors, workflows, and digests
  (#737).
- Added Squad Chat threads, unread state, mentions, and search (#738).
- Added bidirectional human reply adapters for Squad Chat and notifications
  (#739).
- Added ceremony enforcement for design reviews and failure retrospectives
  (#740).
- Added reflection-to-memory promotion for agent corrections and lessons (#741).
- Added external tracker schema introspection for configurable work items
  (#742).

### Changed

- Bumped the release from `5.1.0` to `5.2.0` across the root, shared, server,
  web, CLI, MCP, and desktop package manifests.
- Updated the README version badge, API reference, v5 release notes, and MCP
  documentation footer for `5.2.0`.

### Fixed

- Fixed CLI/MCP compatibility smoke checks so missing `VK_API_KEY` records
  explicit skip results after local package/build validation instead of failing
  unrelated release gates (#753).
- Removed vulnerable frontmatter dependencies from the server by using the
  existing YAML parser and preserving malformed-prompt fallback behavior
  (#754).
- Upgraded DOMPurify and kept the Mantine QA gate below the initial bundle
  budget by deferring drag/drop code outside the first page load (#754, #755).

## [5.1.0] - 2026-06-18

### Added

- Added shared live run sessions with workspace-scoped view, co-drive, and fork
  permissions. Shared viewers receive live output and run events, editors send
  attributed messages and mobile-safe approval responses, and forks create
  linked tasks without mutating parent run state (#721, #731).
- Added reusable agent profile packages with YAML/JSON validation, import,
  export, metadata editing, and profile-aware agent launch posture (#720).
- Added enforceable agent run budgets for token, cost, tool-call, runtime,
  retry, and fan-out limits with auditable enforcement decisions (#722).
- Added sandbox policy presets for filesystem, network, environment, and
  credential access with dry-run validation before launch (#723).
- Added multi-participant decision review sessions with independent responses,
  critique rounds, synthesis packets, work-product attachment, and decision
  audit links (#724).

### Changed

- Bumped the release from `5.0.1` to `5.1.0` across the root, shared, server,
  web, CLI, MCP, and desktop package manifests.
- Updated the README version badge, API reference, release notes, permission
  coverage manifest, and MCP documentation footer for `5.1.0`.

### Fixed

- Fixed Docker source builds by restoring required Dockerfile inputs to the
  build context (#725).

## [5.0.1] - 2026-06-12

### Changed

- Bumped the release from `5.0.0` to `5.0.1` across the root, shared, server,
  web, CLI, MCP, and desktop package manifests.
- Updated the README version badge and MCP documentation footer for `5.0.1`.

### Fixed

- Made MCP write tools return concise confirmations instead of echoing full task
  JSON payloads with complete comment history, reducing token usage for
  agent-heavy boards (#714, #715). Thanks to @Cob-AI for the report.
- Stabilized the Mantine task detail Progress tab test under CI load.
- Fixed the local macOS desktop packaging smoke check to follow the configured
  app bundle name.

## [5.0.0] - 2026-06-05

### Added

- Added v5 release readiness docs covering upgrade/install/admin paths,
  compatibility matrix, release channels, rollback limits, release notes, and
  deferred post-GA platform backlog.

### Changed

- Bumped the release from `4.3.2` to `5.0.0` across the root, shared, server,
  web, CLI, MCP, and desktop package manifests.
- Updated the README version badge and MCP documentation footer for `5.0.0`.
- Expanded release validation to cover the desktop package version and required
  v5 release documentation.

## [4.3.2] - 2026-05-16

### Added

- Added `pnpm validate:release` to verify workspace version alignment, required release files, the README version badge, changelog headings, built artifacts, optional GitHub tag/release state, and optional production Docker image builds.
- Added `.github/workflows/scheduled-qa.yml` so Playwright and k6 smoke/load checks can run on a scheduled cadence outside the fast pull request CI path.
- Added the full codebase audit report at `docs/CODEBASE-AUDIT-2026-05-16.md`, including completed remediation notes and linked follow-up issues for the remaining larger work.
- Added dedicated URL validation regression coverage for blocked localhost, private-network, and unsafe redirect webhook targets.

### Changed

- Bumped the release from `4.3.1` to `4.3.2` across the root, shared, server, web, CLI, and MCP package manifests.
- Updated the README version badge and MCP documentation footer for `4.3.2`.
- Expanded the root build script and CI artifact checks to include the CLI and MCP packages so release validation covers every published/runtime surface.
- Split heavy web panels, chat, board, command palette, and task-detail surfaces out of the initial Vite bundle, removing oversized chunk warnings from the production build.
- Centralized web view metadata and task-detail tab metadata to reduce navigation drift, feature-gate drift, and duplicated labels.
- Added a lint warning budget gate after reducing current warning debt from 728 to 714, making future lint debt increases visible in CI.
- Stabilized full-suite test execution by tightening async Codex provider assertions, isolating Docker path filesystem mocks, and giving slower jsdom/route-integration tests realistic timeouts.

### Fixed

- Hardened outbound webhook URL handling with shared validation, DNS/IP block checks, and redirect validation before webhook delivery.
- Fixed board drag reordering persistence, dependency-blocked task transitions, checkpoint clearing semantics, CLI/MCP version reporting, API envelope handling, and setup guidance found during the audit.
- Fixed Docker workspace dependency stages to include CLI and MCP package manifests before install/build steps.
- Fixed failure-alert, hook, policy, squad webhook, and transition hook services to use the hardened URL validation path consistently.

## [4.3.1] - 2026-05-11

### Security

- Restricted policy create, update, and delete routes to admin role only (#357).
- Restricted tool policy create, update, delete, and validation routes to admin role only (#355).
- Restricted agent permission level changes, permission field updates, and approval review to admin authority (#356).
- Restricted task-to-agent routing configuration updates to admin role only (#354).

### Changed

- Updated workspace package versions, README badge, and MCP README footer from `4.3.0` to `4.3.1`.

## [4.3.0] - 2026-05-09

### Added

- Veritas Cutover operating guide covering the authority model, HermesAgent roster, mandatory QA evidence gate, product/spec task template, research/revenue intake template, and Medik8 Cyprus-only task template.
- Agent Registry references for active and on-demand Veritas Cutover HermesAgent owners.
- Agent provider adapter contract for OpenClaw, Codex CLI, and Codex SDK start/stop/status/log/completion capabilities.
- Codex event mapping into activity, trace, token telemetry, and task deliverable surfaces.
- Mocked Codex JSONL fixture coverage for success, failure, malformed output, token usage, and file-change artifacts.

### Changed

- Updated workspace package versions and README badge from `4.2.5` to `4.3.0`.
- Updated Codex roadmap docs from v4.2 tracking language to v4.3 completion language.
- Bumped `zod` from v3 to v4.4.3 across the MCP, server, and web packages, including server schema compatibility updates.
- Bumped safe chore dependencies: `@typescript-eslint/*` to `8.59.2`, `express-rate-limit` to `8.5.0`, `hono` to `4.12.18`, `postcss` to `8.5.14`, and `shadcn` to `4.7.0`.
- Added dependency audit overrides for patched `fast-uri` and `ip-address` transitive versions.
- Created the `dependencies` and `github-actions` GitHub labels expected by Dependabot.

### Acknowledgements

- Thanks to @asperty567 for the Veritas Cutover issue set and operating direction.

## [4.2.5] - 2026-05-06

### Added

- Codex Settings health endpoint at `GET /api/settings/codex/health`.
- Server-side checks for Codex CLI installation, CLI version, `codex login status`, Codex SDK import availability, and Codex CLI/SDK/Cloud agent profile readiness.
- Settings Agents tab Codex Health panel with refresh, readiness badges, version/auth details, and actionable recommendations.
- Frontend API and hook support for Codex health checks.
- Route coverage for the Codex Settings health endpoint.

### Changed

- Updated workspace package versions and README badge from `4.2.4` to `4.2.5`.
- Documented richer Codex Settings health checks as implemented, completing the requested v4.2 patch train.

## [4.2.4] - 2026-05-06

### Added

- Codex review action for task branch diffs through `POST /api/diff/:taskId/codex-review`.
- Codex SDK review runner that executes in read-only sandbox mode, asks for structured JSON findings, and maps findings to Veritas review comments.
- Review summary/task comment persistence plus review decision metadata when review saving is enabled.
- Frontend API and React Query hook support for triggering Codex reviews.
- Route coverage for Codex review validation and service invocation.

### Changed

- Updated workspace package versions and README badge from `4.2.3` to `4.2.4`.
- Documented Codex review actions as implemented while richer Settings health checks remain next in the v4.2 patch train.

## [4.2.3] - 2026-05-06

### Added

- Workflow-engine Codex agent steps for workflow agents configured with Codex provider metadata or Codex agent naming.
- Codex SDK streaming execution inside workflow step runs, including worktree-aware execution, final response capture, and persisted step output files.
- Workflow session tracking for Codex thread IDs through `run.context._sessions`, enabling reuse-mode workflows to resume the same Codex thread.
- Unit coverage for Codex-backed workflow step execution.

### Changed

- Updated workspace package versions and README badge from `4.2.2` to `4.2.3`.
- Documented Workflow Codex steps as implemented while review actions and richer Settings checks remain next in the v4.2 patch train.

## [4.2.2] - 2026-05-06

### Added

- Codex Cloud delegation through GitHub issue, issue-comment, and PR-comment workflows.
- `POST /api/github/codex/delegate` for creating scoped `@codex` GitHub delegation prompts from Veritas tasks.
- Disabled-by-default `codex-cloud` agent profile and `codex-cloud` provider metadata support.
- Cloud delegation attempt metadata with `cloudUrl` and `cloudTarget` fields.
- Task comments that link successful Codex Cloud delegations back to the GitHub artifact.
- Frontend API hook for Codex Cloud delegation.

### Changed

- Updated workspace package versions and README badge from `4.2.1` to `4.2.2`.
- Documented Codex Cloud delegation as implemented while workflow steps, review actions, and richer Settings checks remain next in the v4.2 patch train.

## [4.2.1] - 2026-05-06

### Added

- Codex SDK session provider powered by `@openai/codex-sdk`, enabling durable local Codex threads for code-task attempts.
- Disabled-by-default `codex-sdk` agent profile for teams that want SDK-backed sessions alongside the existing `codex` CLI profile.
- Codex SDK attempt logging for streamed thread, turn, item, error, and usage events.
- Codex SDK token telemetry mapping and stop support through abortable SDK turns.
- `threadId` attempt metadata so SDK session IDs are preserved on active and completed attempts for follow-up workflows.

### Changed

- Updated workspace package versions and README badge from `4.2.0` to `4.2.1`.
- Documented Codex SDK sessions as implemented while keeping Cloud delegation, workflow steps, review actions, and richer Settings checks in the v4.2 patch train.

## [4.2.0] - 2026-05-06

### Added

- OpenAI Codex integration roadmap for v4.2, covering local Codex CLI execution, Codex SDK sessions, Codex Cloud delegation, MCP setup, workflow-engine execution, telemetry, review automation, and release QA (#310)
- Codex Integration SOP with operational guidance for CLI, SDK, Cloud, MCP, telemetry mapping, reviews, workflow steps, escalation, and release validation (#310)
- Codex workflow examples for local feature work, Codex review, SDK follow-up sessions, workflow pipelines, Cloud delegation, MCP-first board maintenance, and release QA (#310)
- Codex-specific AGENTS.md guidance and MCP setup instructions for Veritas-aware Codex work (#310)
- Codex feature reference in `docs/FEATURES.md`, updated to distinguish implemented CLI support from planned SDK, Cloud, review, and workflow modes (#310)
- Built-in `codex` agent profile backed by local `codex exec --sandbox workspace-write --json`
- Local Codex CLI execution path for code-task attempts, including process launch in the task worktree, attempt logs, final summary capture, completion handling, stop support, and run/token telemetry mapping
- Config migration that appends missing built-in agents, including Codex, to existing configs without overwriting customized agents

### Changed

- Updated workspace package versions and README badge from `4.1.0` to `4.2.0` (#311)

## [4.1.0] - 2026-05-04

### Added

- QMD-backed search foundation with keyword fallback across active tasks, archived tasks, and docs (#290)
- In-app search dialog with backend and collection controls, fallback status, and task-result navigation (#291)
- Duplicate detection hints in the create-task dialog using active and archived task retrieval (#292)
- VERITAS chat context injection with compact, cited `<veritas_context>` blocks and per-message opt-out (#293)
- QMD index maintenance commands and API refresh endpoint:
  - `pnpm qmd:setup`
  - `pnpm qmd:refresh`
  - `POST /api/search/index/refresh` (#294)

### Changed

- Documented the v4.1 QMD setup, search UI, duplicate detection, VERITAS context injection, and index maintenance workflows
- Updated package versions from `4.0.1` to `4.1.0`

## [4.0.1] - 2026-05-04

### Fixed

- Restored task detail side-popout spacing after the shadcn/ui v4 sheet padding change
- Prevented task detail tabs from being squeezed in code-task popouts by allowing horizontal tab overflow
- Mass archive failure caused by missing `/api/tasks/bulk-archive-by-ids` endpoint
- MIME validation test fixtures now use valid PNG IHDR chunks (#266)
- Status history tests isolated from real state
- Build order: shared package built before server and web (#244)

### Changed

- Batch file reads use bounded concurrency for improved task loading performance (#255)
- Shared package exports governance, policy, and workflow types (#256)
- Bumped pnpm/action-setup from v4 to v5 (#260)

### Security

- Required `N8N_WEBHOOK_SECRET` for unauthenticated n8n webhook requests
- Hardened n8n webhook secret comparison, attachment type checks, filename sanitization, and path containment
- Patched high and moderate dependency advisories for `@xmldom/xmldom`, `hono`, `postcss`, and `sanitize-html`
- Hardened localhost bypass and broadcast frontmatter parsing (#242)
- Startup init failures now fatal with shutdown timeouts (#241)
- Config cache stampede prevention and corrupted activity file logging (#240)
- WebSocket event listener leak fix and message rate limiting (#239)
- Promise handling fixes preventing crashes and data loss (#238)
- Enforced HS256 algorithm in JWT verification (#237)

### Docs

- v4.0 governance security audit (#265)
- Comprehensive unit tests for v4.0 governance services (#263)
- Feedback, chat, and system-health route tests (#257)

## [4.0.0] - 2026-03-21

### ✨ Highlights

**Veritas Kanban 4.0 is the agent governance release.** This release adds a complete Agent Governance Layer — configurable policies, behavioral drift detection, decision audit trails, output evaluation, and user feedback analytics — alongside a fully customizable dashboard widget grid, a Prompt Template Registry with version control, and a real-time Global System Health Status Bar.

All shadcn/ui components have been upgraded to v4 with Tailwind v4 integration. This release also adds MCP comment CRUD tools and project management tools, wires lifecycle hooks to the notification service, and ships seven new SOP guides plus updated API documentation.

### Added

- **Agent Policy & Guard Engine (#178)** — Configurable tool/action policies with guard rules
  - Define policies with `allow`/`deny`/`require-approval` guard rules per tool and action
  - Policy evaluation engine with configurable precedence (deny-first or allow-first)
  - REST API: `GET/POST /api/policies`, `GET/PUT/DELETE /api/policies/:id`, `POST /api/policies/:id/evaluate`
  - Per-agent and per-project policy scoping
  - Built-in audit log for every policy decision

- **Decision Audit Trail with Assumption Tracking (#179)** — Log agent decisions with assumptions and outcomes
  - Structured decision records: decision text, confidence score, supporting evidence, assumptions
  - Outcome tracking: record what happened after a decision and whether assumptions held
  - Full-text search and filtering by agent, task, confidence range
  - REST API: `GET/POST /api/decisions`, `GET/PUT/DELETE /api/decisions/:id`, `POST /api/decisions/:id/outcome`

- **Agent Output Evaluation & Scoring Framework (#180)** — Quality scoring for agent outputs
  - Scoring profiles with weighted criteria: `RegexMatch`, `KeywordContains`, `NumericRange`, `CustomExpression`
  - Composite scoring methods: `weightedAvg`, `minimum`, `geometricMean`
  - Evaluation history with per-scorer breakdown and per-dimension explanations
  - REST API: `GET/POST /api/scoring/profiles`, `GET/PUT/DELETE /api/scoring/profiles/:id`, `POST /api/scoring/evaluate`, `GET /api/scoring/history`

- **Behavioral Drift Detection & Alerting (#181)** — Detect and alert on agent behavior changes
  - Metric tracking with configurable baselines and alert thresholds
  - Drift status lifecycle: `ok` → `warning` → `alert` → `resolved`
  - Automatic timestamp of detection and resolution events
  - REST API: `GET/POST /api/drift`, `GET/PUT/DELETE /api/drift/:id`, `POST /api/drift/:id/resolve`

- **User Feedback Loop with Sentiment Analytics (#182)** — Collect and analyze user feedback on agent outputs
  - Feedback collection with sentiment (`positive`/`neutral`/`negative`) and category tagging
  - Aggregate analytics: sentiment breakdowns, trends over time, category distributions
  - REST API: `GET/POST /api/feedback`, `GET/DELETE /api/feedback/:id`, `GET /api/feedback/analytics`

- **Draggable & Resizable Dashboard Widget Grid (#183)** — Customizable dashboard layouts
  - Drag-and-drop widget repositioning with smooth animations
  - Resizable widgets with snap-to-grid behavior
  - Layout persistence via `settings.json`
  - Add/remove widgets from the widget library

- **Prompt Template Registry with Version Control (#184)** — Manage and version prompt templates
  - Template CRUD with variable extraction (e.g., `{{agent_name}}`, `{{task_context}}`)
  - Full version history with changelog entries; rollback to any version
  - Usage tracking: model, tokens, rendered output (optional)
  - Preview rendering with sample variable injection
  - REST API: `GET/POST /api/prompt-registry/templates`, `GET/PUT/DELETE /api/prompt-registry/templates/:id`, `GET /api/prompt-registry/templates/:id/versions`, `POST /api/prompt-registry/templates/:id/versions`, `GET /api/prompt-registry/templates/:id/versions/:versionId`, `POST /api/prompt-registry/templates/:id/preview`, `GET /api/prompt-registry/templates/:id/stats`, `POST /api/prompt-registry/templates/:id/usage`

- **Global System Health Status Bar (#185)** — Real-time system health monitoring
  - Five health levels: `stable` → `reviewing` → `drifting` → `elevated` → `alert`
  - Three signal categories: `system` (storage/disk/memory), `agents` (online/offline counts), `operations` (success rate, recent runs)
  - Persistent header bar with expand/collapse for detail panel
  - REST API: `GET /api/v1/system/health`

- **MCP comment CRUD tools (PR #206)** — Full comment lifecycle from MCP
  - New MCP tools: `add_comment`, `list_comments`, `get_comment`, `update_comment`, `delete_comment`
  - Works with both task-level and sprint-level comments

- **MCP project management tools (PR #227)** — Full project lifecycle from MCP
  - New MCP tools: `list_projects`, `get_project`, `create_project`, `update_project`, `delete_project`, `get_project_stats`, `reorder_projects`

- **Lifecycle hooks wired to notification service (PR #201)** — Hook outcomes now trigger real-time notifications
  - Hooks with `notify: true` push events through the notification service
  - Integrates with @mention notification system for addressable hook alerts

- Comprehensive MCP server documentation at `docs/mcp/README.md` — architecture, quickstart, full tool catalog with examples, security model, troubleshooting playbook, and FAQ
- Condensed root README MCP section with link to dedicated docs

### Changed

- **Upgraded shadcn/ui components to v4 (#186, PR #219)** — All UI components updated for shadcn/ui v4 compatibility with Tailwind v4 integration; breaking prop changes resolved across the component tree

### Fixed

- **Squad chat panel scroll (PR #225, #224)** — Panel now properly scrolls to latest message; overflow clipping bug in nested flex containers resolved
- **False cycle detection in dependency API (PR #208, #188)** — DFS algorithm no longer flags valid multi-path dependencies as cycles when two nodes share a common ancestor
- **TypeScript build errors (PR #207, #177)** — Resolved type mismatches introduced by shadcn/ui v4 and Zod 4 type inference changes
- **SystemHealthBar successRate percentage display (PR #212, #211)** — `successRate` is now correctly formatted as a percentage (0–100) instead of a decimal (0–1)

## [3.3.3] - 2026-03-01

### ✨ Highlights

**Veritas Kanban 3.3.3 is a patch correction release** delivering stability, security, and performance fixes on top of 3.3.2, plus full Zod 4 API migration completing the TypeScript compilation fix.

### Fixed

- **#162 — Complete Zod 4 API migration** — Resolved 50+ TypeScript compilation errors blocking CI/CD
  - `ZodError.errors` → `ZodError.issues` across all route files and middleware
  - `z.record(valueSchema)` → `z.record(z.string(), valueSchema)` for explicit key types
  - Schema defaults corrected from string to proper numeric/boolean types (`PORT`, `VERITAS_AUTH_ENABLED`, `RATE_LIMIT_MAX`)
  - `required_error` → `message` in number schemas (`agents.ts`, `agent-schemas.ts`)
  - Affected: `validate.ts`, `agent-registry.ts`, `workflows.ts`, `lifecycle-hooks.ts`, `tasks.ts`, `reports.ts`, `env.ts`

- **#165 — SSRF protection for webhook URLs** — Added server-side request forgery safeguards for all outbound webhook destinations (replaces #163)

### Added

- **Orchestrator Delegation Enforcement** — Full enforcement gate for orchestrator delegation
  - Orchestrator agent selector in Settings → Enforcement (dropdown of enabled agents)
  - Active/Inactive status badge showing enforcement state
  - Warning banner when delegation enabled but no agent selected
  - Section auto-disables when delegation toggle is off
  - Zod-validated `orchestratorAgent` field (string, max 50 chars)
  - `POST /api/agent/delegation-violation` endpoint for violation reporting
  - Auto-posts violations to squad chat when squad chat enforcement is enabled

- **Enforcement Gate Toast Notifications** — Enhanced error feedback for all enforcement gates
  - Gate-specific titles and actionable guidance for REVIEW_GATE, CLOSING_COMMENTS_REQUIRED, DELIVERABLE_REQUIRED, ORCHESTRATOR_DELEGATION
  - 10-second toast duration for enforcement messages (up from 5s)
  - BulkActionsBar surfaces gate details on bulk move failures

- **Dashboard Enforcement Indicator** — At-a-glance enforcement status
  - Shows active/total gate count with color-coded shield icon (green/amber/gray)
  - Individual gate dots (green = active, gray = off)
  - Renders in dashboard status bar alongside refresh timestamp

### Performance

- **#167 — WebSocket broadcast batching** — Batch broadcasts to prevent event loop blocking under high-frequency update load (replaces #164/#166)

---

## [3.3.2] - 2026-03-01

### ✨ Highlights

**Veritas Kanban 3.3.2 delivers sprint management for CLI + MCP surfaces** alongside task↔agent state synchronization, security hardening of the sync auth boundary, and a circuit breaker test suite.

### Added

- **#161 — Sprint Management (CLI + MCP)** — Full sprint CRUD and task integration from the command line and MCP
  - `vk sprint list` — list sprints with `--hidden` / `--json` flags
  - `vk sprint create` — create sprints with optional description
  - `vk sprint update` — update label, description, visibility
  - `vk sprint delete` — delete sprints (with `--force` for non-empty)
  - `vk sprint close` — archive completed tasks in a sprint
  - `vk sprint suggestions` — show sprints ready to archive
  - `vk list -S <sprint>` / `vk create -S <sprint>` / `vk update -S <sprint>` — task sprint integration
  - MCP tools: `list_sprints`, `create_sprint`, `update_sprint`, `delete_sprint`, `close_sprint`, `sprint_suggestions`
  - Sprint field surfaced on `list_tasks`, `create_task`, `update_task` MCP tools

- **#155 — Task↔Agent State Sync + Reconciliation** — Bi-directional sync engine keeping task state consistent with agent execution state; reconciliation pass resolves diverged records

- **#156 — Circuit Breaker Test Suite** — 18 new unit tests covering circuit breaker open/half-open/closed transitions, timeout behaviour, and error thresholds

### Fixed

- **#159 — Harden task-agent sync auth boundary** — Tightened authentication checks on sync routes to prevent unauthorized state manipulation (#157 #158)

---

## [3.3.1] - 2026-02-28

### Fixed

- **#153 — Express 5 wildcard route compatibility** — Updated route patterns for Express 5.x compatibility
- **Security: upgrade hono to >=4.12.2** — Addressed GHSA-xh87-mx6m-69f3 vulnerability

### Changed

- **#148 — Bump vite from 6.4.1 to 7.3.1** — Major version upgrade with performance improvements
- **#149 — Bump tailwindcss from 3.4.19 to 4.2.1** — Major version upgrade with new features
- **#154 — Bump production dependencies (8 updates)** — Routine dependency maintenance

---

## [3.3.0] - 2026-02-15

### ✨ Highlights

**Veritas Kanban 3.3 delivers production-grade task intelligence** — four features that significantly improve task management capabilities, reliability, and accessibility. This release represents the culmination of rigorous cross-model development: all features authored by Sonnet, reviewed by Codex, and scored 10/10 across security, reliability, performance, and accessibility through our 4x10 review gate.

**Key improvements:**

- **Dependency graph** prevents circular dependencies through DFS cycle detection that traverses bidirectional relationships
- **Crash-recovery checkpointing** protects credentials with auto-sanitization of 20+ secret patterns plus regex value detection
- **Observational memory** preserves critical context across agent sessions with full-text search and importance scoring
- **Agent filtering** enables precise task queries by agent name with proper input sanitization

### Added

- **#122 — Task Dependencies Graph**
  - Bidirectional dependency model (depends_on / blocks) with cycle detection
  - DFS algorithm traverses both directions to prevent dependency loops
  - Dependency graph API with recursive tree traversal (`GET /api/tasks/:id/dependencies`)
  - UI: DependenciesSection component with add/remove for both directions
  - TaskCard badges showing dependency count
  - Zod validation on dependency routes
  - Batch-loaded graph traversal (eliminated N+1 queries)
  - Full keyboard + ARIA accessibility

- **#123 — Crash-Recovery Checkpointing**
  - Save/resume/clear API (`POST/GET/DELETE /api/tasks/:id/checkpoint`)
  - Auto-sanitization of secrets (20+ key patterns + regex value detection)
  - 1MB size limit on checkpoint state with 24h expiry and automatic cleanup
  - Resume counter tracks restart attempts
  - Sub-agent checkpoint context injection into prompts
  - Array sanitization (nested objects + primitive strings)
  - NaN timestamp handling
  - ARIA-accessible checkpoint UI in TaskCard + TaskDetailPanel

- **#124 — Observational Memory**
  - Add/view/delete observations per task (decision, blocker, insight, context types)
  - Importance scoring (1-10) with visual badges
  - Full-text search across all task observations (`GET /api/observations/search`)
  - Paginated search results (limit/offset, max 200)
  - Timeline view with type-colored badges
  - Activity logging for audit trail
  - XSS prevention via sanitizeCommentText()
  - ARIA-accessible range slider + decorative icon handling

- **#125 — Agent Filter**
  - `GET /api/tasks?agent=name` query parameter
  - Input sanitized (trim + 100 char cap)
  - Works with existing pagination and filters
  - JSDoc/OpenAPI documented

### Technical Notes

All features passed comprehensive security review:

- Input sanitization on all user-facing fields
- XSS prevention in observational memory comments
- Secret detection and auto-sanitization in checkpoints
- Cycle detection prevents infinite loops in dependency traversal

## [3.2.1] - 2026-02-12

### Fixed

- **reviewGate enforcement** — Now only applies to code task types (code, bug, feature, automation, system) — research, content, and custom types no longer blocked
- **Defensive settings access** — Prevents crash on missing config sections across all 8 settings tabs (General, Enforcement, Time Tracking, Agents, Projects, Sprints, Templates, Types)
- **Settings toggle persistence** — Fixed deepMergeDefaults overwriting user changes; now uses proper patch merging to preserve toggle states
- **SharedResources toggle persistence** — SharedResources and DocFreshness enabled/disabled states now correctly saved to `settings.json`
- **Squad chat visibility** — System messages now render as gray message bubbles (previously invisible dividers)
- **Time tracking telemetry** — Fixed corrupt 17K-hour entry, added 7-day (604,800,000 ms) cap on `durationMs` validation
- **Archived task reappearance** — Tasks no longer reappear on board after archival (orphaned files from title changes now cleaned up via `findTaskFile`)
- **EnforcementTab formatting** — reviewGate warning text properly formatted, "Quality Gates" duplicate header removed

### Added

- **PRD-Driven Autonomous Development guide** — Complete 961-line guide at `docs/features/prd-driven-development.md` covering setup, agent execution workflow, OAuth2 example, configuration tips, and troubleshooting
- **Time tracking bugfix post-mortem** — Documented 17K-hour telemetry bug in `docs/bugfix-time-tracking-17k-hours.md`

### Changed

- **Consistent gray styling** — Squad chat system messages now use muted theme tokens for subtle gray appearance
- **Theme token usage** — Settings UI updated to use Shadcn theme tokens instead of hardcoded Tailwind colors

## [3.2.0] - 2026-02-11

### Added

- **Markdown Editor** — Rich markdown editing for task descriptions and comments with formatting toolbar, live preview, keyboard shortcuts (Ctrl+B/I/K), syntax highlighting, and dark mode support. Configurable via Settings → Tasks.
- **Shared Resources Registry** — Define reusable resources (prompts, guidelines, skills, configs, templates) and mount them across projects. Full CRUD API with mount/unmount endpoints. Configurable via Settings → Shared Resources.
- **Documentation Freshness Tracking** — Track document staleness with freshness scores, alerts, and optional auto-review task creation. API at `/api/doc-freshness`. Configurable via Settings → Doc Freshness.

### Fixed

- Persist runtime auth/config state to the Docker volume by routing `.veritas-kanban` paths through `getRuntimeDir()` and migrating legacy files on startup (`security.json`, agent registry, lifecycle hooks, error analyses, agent permissions).
- Added Docker migration guidance for recovering auth state after rebuilding containers.
- Dark mode Lessons Learned display bug fixed (text was unreadable in dark mode)
- Plain text card previews for task descriptions (markdown rendering disabled on board cards for performance)
- JWT rotation test flakiness fixed (timing issue resolved)

## [3.1.0] - 2026-02-10

### Added

- **6 structural enforcement gates** (all disabled by default):
  - `squadChat`, `reviewGate`, `closingComments`, `autoTelemetry`, `autoTimeTracking`, `orchestratorDelegation`
- **Comprehensive enforcement documentation** with a dedicated "For AI Agents" section
- **Agent SOP enforcement awareness** updates

### Fixed

- Enforcement gate logic (correct `=== true` checks)
- TelemetryService supports backdated timestamps
- TelemetryService respects `DATA_DIR` in Docker environments
- Zod schema allows optional timestamp on telemetry events
- Template YAML serialization (recursive `cleanForYaml`)
- Case-insensitive agent color lookup in squad chat

**Issue:** #115

---

## [3.0.0] - 2026-02-09

### ✨ Highlights

**Veritas Kanban 3.0 ships the workflow engine** — a deterministic multi-step agent orchestration system that transforms VK from an ad-hoc task board into a repeatable, observable, and reliable agent execution platform. Think GitHub Actions for AI agents.

**14,079 lines of code shipped across 6 major phases:**

- Phase 1: Core workflow engine (~7,091 lines)
- Phase 2: Run state management (~1,409 lines)
- Phase 3: Frontend + real-time updates (~3,069 lines)
- Phase 4: Advanced orchestration (~2,255 lines)
- Dashboard: Monitoring & health metrics (~2,050 lines)
- Policies & Sessions: Tool policies + session isolation (~1,200 lines)

### Added

#### Core Workflow Engine (Phase 1 — #107)

- **YAML workflow definitions** — Define multi-step agent pipelines as version-controlled YAML files
- **Workflow CRUD API** — 9 REST endpoints for workflow management:
  - `GET /api/workflows` — List all workflows
  - `GET /api/workflows/:id` — Get workflow definition
  - `POST /api/workflows` — Create workflow
  - `PUT /api/workflows/:id` — Update workflow (auto-increment version)
  - `DELETE /api/workflows/:id` — Delete workflow
  - `POST /api/workflows/:id/runs` — Start a run
  - `GET /api/workflow-runs` — List runs (filterable by workflow, task, status)
  - `GET /api/workflow-runs/:id` — Get run details
  - `POST /api/workflow-runs/:id/resume` — Resume blocked run
- **Sequential step execution** — Execute workflow steps in order with retry routing
- **Step types: agent** — Agent steps spawn OpenClaw sessions with prompts (Phase 1 placeholder)
- **Template rendering** — Basic `{{variable}}` and `{{nested.path}}` substitution in step inputs
- **Acceptance criteria validation** — Simple substring matching for step completion checks
- **Retry routing** — Three strategies: retry same step, retry different step (`retry_step`), escalate to human
- **Workflow snapshot** — YAML saved in run directory for version immutability
- **RBAC** — Role-based access control with ACL files (`.acl.json`)
- **Audit logging** — All workflow changes logged to `.audit.jsonl`
- **Zod validation** — Schema validation for workflow definitions
- **Storage structure** — File-based persistence in `.veritas-kanban/workflows/` and `.veritas-kanban/workflow-runs/`

#### Run State Management (Phase 2 — #113, #110, #111, #108)

- **Persistent run state** — Run state survives server restarts via checkpoint timestamps
- **Progress file tracking** (#108) — Shared `progress.md` per run for context passing between steps
- **Step output resolution** — Template variables like `{{steps.plan.output}}` resolve from previous step outputs
- **Retry delays** — Configurable `retry_delay_ms` to prevent rapid retry loops
- **Tool policies** (#110) — Role-based tool restrictions:
  - 5 default roles: `planner`, `developer`, `reviewer`, `tester`, `deployer`
  - Each role has allowed/denied tool lists
  - Custom role CRUD via `/api/tool-policies` endpoints
  - Tool filter passed to OpenClaw sessions (ready for Phase 3 integration)
- **Fresh session per step** (#111) — Each workflow step can spawn a fresh OpenClaw session:
  - Session modes: `fresh` (new session) or `reuse` (continue existing)
  - Context injection: `minimal`, `full`, or `custom` (specify which steps to include)
  - Cleanup modes: `delete` (terminate after step) or `keep` (leave running for debugging)
  - Configurable timeout per step
- **Session tracking** — Session keys stored in `run.context._sessions` per agent
- **Backward compatible** — Legacy `fresh_session: false` maps to `session: reuse`

#### Frontend + Real-Time Updates (Phase 3 — #107 frontend)

- **WorkflowsPage** — Browse and start workflow runs:
  - Grid view of all workflows with metadata (name, version, agents, steps)
  - "Start Run" button → calls `POST /api/workflows/:id/run`
  - Active run count badges per workflow
  - Search filter
  - Lazy-loaded in App.tsx
- **WorkflowRunView** — Live step-by-step workflow run visualization:
  - Real-time step progress display
  - Each step shows status, agent, duration, retry count, output preview, errors
  - Color-coded step status (green=completed, blue=running, red=failed, yellow=skipped, gray=pending)
  - "Resume" button for blocked runs
  - Overall progress bar (step X of Y)
  - Auto-updates via WebSocket `workflow:status` events
- **WorkflowRunList** — Filter and browse runs:
  - Filter by status (all, running, completed, failed, blocked, pending)
  - Click to open WorkflowRunView
  - Progress bars, duration tracking
- **WorkflowSection** — Run workflows from TaskDetailPanel:
  - Shows available workflows
  - Displays active runs for current task
  - "Start" button with task context
  - Dialog modal
- **Navigation tab** — "Workflows" tab added to header with icon
- **WebSocket integration** — Real-time updates via `workflow:status` events
- **Polling fallback** — Aggressive polling (10-30s) when WebSocket disconnected, safety-net polling (120s) when connected
- **~75% reduction in API calls** when WebSocket connected

#### Advanced Orchestration (Phase 4 — #112, #113)

- **Loop steps** (#112) — Iterate over collections with progress tracking:
  - Configuration: `over`, `item_var`, `index_var`, `completion` policy, `fresh_session_per_iteration`
  - Completion policies: `all_done`, `any_done`, `first_success`
  - Loop state tracking: `totalIterations`, `currentIteration`, `completedIterations`, `failedIterations`
  - Output per iteration saved to `step-outputs/<step-id>-<iteration>.md`
  - Loop variables accessible in templates: `{{loop.index}}`, `{{loop.total}}`, `{{loop.completed}}`
  - Max 1000 iterations safety limit
  - `continue_on_error` flag to skip failed iterations
  - `verify_each` and `verify_step` for post-iteration validation (wired in types, executor pending)
- **Gate steps** — Conditional blocking with approval workflow:
  - Boolean expressions: `{{test.status == "passed" and verify.decision == "approved"}}`
  - Supports `==`, `and`, `or` operators with variable access
  - Blocking behavior: run status changes to `blocked` if condition fails
  - Approval API: `POST /api/workflow-runs/:runId/steps/:stepId/approve` and `/reject`
  - Escalation policies: `escalate_to: human` blocks, timeout support
- **Parallel steps** — Fan-out/fan-in execution:
  - Execute multiple sub-steps concurrently via `Promise.allSettled()`
  - Completion criteria: `all` (all must succeed), `any` (at least one), `N` (at least N sub-steps)
  - `fail_fast` flag aborts remaining sub-steps on first failure
  - Aggregated JSON output with per-sub-step status, outputs, errors
  - Max 50 concurrent sub-steps (soft limit)
- **Enhanced acceptance criteria** — Regex patterns and JSON path equality:
  - Regex: `/^STATUS:\s*done$/i`
  - JSON path: `output.decision == "approved"`
  - Backward compatible substring matching
- **Expression evaluator** — Safe variable access and boolean logic (no arbitrary code execution)

#### Workflow Dashboard (#114)

- **Summary cards** (6 metrics):
  - Total workflows defined
  - Active runs (currently executing)
  - Completed runs (period-filtered: 24h/7d/30d)
  - Failed runs (period-filtered)
  - Average run duration
  - Success rate (%)
- **Active runs table** — Live-updating list of currently executing runs:
  - Workflow ID, status badge, started time, duration, current step, progress (step X/Y)
  - Click to open WorkflowRunView
  - Real-time updates via WebSocket
  - Visual progress bars
- **Recent runs history** — Last 50 workflow runs:
  - Sortable by status (all/completed/failed/blocked/pending)
  - Run ID, status badge, start time, duration, steps completed
  - Click to open WorkflowRunView
- **Workflow health metrics** — Per-workflow stats:
  - Success rate
  - Average duration
  - Run counts (total, completed, failed)
  - Visual health indicators (green/yellow/red based on success rate)
- **Real-time updates** — WebSocket-driven with polling fallback (30s when disconnected, 120s when connected)
- **Backend endpoints**:
  - `GET /api/workflow-runs/active` — Currently running workflows
  - `GET /api/workflow-runs/stats?period=7d` — Aggregated statistics (total workflows, active, completed, failed, avg duration, success rate, per-workflow breakdown)
- **Navigation** — "Dashboard" button in WorkflowsPage header

### Changed

#### WebSocket Refactor (Phase 3)

- **All hooks now WebSocket-primary** — Polling is safety net only
- **Connected behavior** — 120s polling intervals (safety net)
- **Disconnected behavior** — Aggressive polling resumes (10-30s intervals)
- **Events** — `task:changed`, `agent:status`, `telemetry:event`, `workflow:status`
- **Broadcast service** — Centralized `broadcastWorkflowStatus()` function sends full run state (no extra HTTP fetches needed)
- **13 hooks/components refactored** — All polling intervals updated

### Security

- **ReDoS protection** — Regex patterns validated with size/complexity limits
- **Expression injection prevention** — Template evaluator only supports safe variable access and boolean operators
- **Parallel DoS limits** — Max 50 concurrent sub-steps in parallel execution
- **Gate approval validation** — Authentication and permission checks on approval endpoints
- **Path traversal protection** — `sanitizeFilename` on all file writes

### Performance

- **~75% reduction in API calls** — When WebSocket connected, polling drops to 120s safety-net intervals
- **Progress file size cap** — 10MB limit prevents unbounded growth
- **Lazy-loaded frontend** — WorkflowsPage, WorkflowDashboard only render when navigated to
- **Memoized filters** — `useMemo` for filtered workflows/runs
- **Skeleton loading states** — Shimmer placeholders during data fetch

---

## [2.1.4] - 2026-02-09

### Fixed

- **Status Counter Accuracy** (#104) — Sidebar task counts now use a dedicated `GET /api/tasks/counts` endpoint that returns total counts by status, independent of time-range filters applied to the board view
  - **New:** `server/src/routes/tasks.ts` — `/api/tasks/counts` endpoint returns `{ todo, in_progress, review, done, blocked, cancelled }`
  - **New:** `web/src/hooks/useTaskCounts.ts` — dedicated React hook for sidebar counts
  - **Updated:** `BoardSidebar.tsx` — uses `useTaskCounts()` instead of deriving from filtered task list
  - Cache invalidation wired to task mutations so counts stay in sync

- **Bulk Operation Timeouts** (#105) — Bulk archive, status update, and backlog demote operations now use single API calls instead of N individual requests
  - **New:** `POST /api/tasks/bulk-update` — update status for multiple tasks in one call
  - **New:** `POST /api/tasks/bulk-archive-by-ids` — archive multiple tasks by ID array
  - **New:** `POST /api/backlog/bulk-demote` — demote multiple tasks to backlog in one call
  - All bulk endpoints validate array size (max 100) to prevent abuse
  - Operations run in parallel via `Promise.allSettled()` (~26× faster for large batches)
  - **Updated:** `BulkActionsBar.tsx` — rewired to use bulk endpoints instead of sequential loops
  - **Updated:** `useTasks.ts`, `useBacklog.ts` — new mutation hooks for bulk operations

### Changed

- **Squad Chat Documentation** (#106) — Updated `SQUAD_CHAT_IMPLEMENTATION.md` to clarify that the `model` field is a structural JSON field in the API, not a text instruction

## [2.1.3] - 2026-02-07

### Fixed

- **Docker Path Standardization** (#102) — Comprehensive refactor: created shared `paths.ts` utility and migrated all 7 services to use it
  - **New:** `server/src/utils/paths.ts` — single source of truth for all path resolution
  - **Refactored:** task-service, activity-service, chat-service, audit-service, metrics/helpers, backlog-repository (7 files total)
  - **Resolution priority:** `DATA_DIR` / `VERITAS_DATA_DIR` env var → project root auto-discovery → fallback
  - **Safety:** Filesystem root guard prevents silent `/` resolution (the original EACCES bug)
  - **Backwards compatible:** Existing `DATA_DIR` configurations continue to work unchanged
  - **Cross-model reviewed:** 10/10/10/10 (GPT-5.1 authored, Claude Sonnet 4.5 reviewed)

## [2.1.2] - 2026-02-07

### Fixed

- **Docker Path Resolution** (#102) — Fixed WORKDIR resolution so services correctly find `.veritas-kanban` in containerized deployments
  - **Root cause:** Services use `process.cwd()/..` to locate project root; with `WORKDIR /app` this resolved to `/` (filesystem root), causing `EACCES: permission denied` on container startup
  - **Fix:** Changed production WORKDIR to `/app/server`, ensured `/app/tasks` and `/app/server` are writable
  - **Impact:** Resolves permission denied errors when starting VK in Docker containers
  - Related: Issue #102 (Docker: Standardize .veritas-kanban path resolution across services)

## [2.1.1] - 2026-02-07

### Fixed

- **Reverse Proxy Support** (#100) — Added `TRUST_PROXY` environment variable for deployments behind nginx, Caddy, Traefik, Synology DSM, and other reverse proxies. Fixes `express-rate-limit` ValidationError and WebSocket authentication loops caused by untrusted `X-Forwarded-For` headers.
  - Supports hop counts (`TRUST_PROXY=1`), named values (`loopback`, `linklocal`), and subnet strings
  - `TRUST_PROXY=true` is blocked by default (security hardening — logs warning, falls back to no trust)
  - Disabled by default — no behavior change for existing deployments
  - Documentation added for nginx, Caddy, and Docker Compose configurations

### Security

- Blocked `TRUST_PROXY=true` to prevent accidental trust-all-proxies misconfiguration on public-facing deployments

## [2.0.0] - 2026-02-06

### ✨ Highlights

**Veritas Kanban 2.0 is the multi-agent release.** 18 features shipped across agent orchestration, dashboard analytics, lifecycle automation, and developer experience. This release transforms VK from a single-agent task board into a full multi-agent orchestration platform.

### Added

#### Multi-Agent System (#28, #29, #30, #31)

- **Agent Registry** (#52) — Service discovery with heartbeat tracking, capabilities, live status, REST API for register/deregister/heartbeat/stats
- **Multi-Agent Dashboard Sidebar** (#28) — Real-time agent status cards in board sidebar, expandable details, color-coded status indicators (green=working, purple=sub-agent, gray=idle, red=error)
- **Multi-Agent Task Assignment** (#29) — Assign multiple agents to a single task, color-coded agent chips in task detail and board cards, shared helper utilities
- **@Mention Notifications** (#30) — @agent-name parsing in comments, thread subscriptions, delivery tracking, notification bell
- **Agent Permission Levels** (#31) — Intern / Specialist / Lead tiers with configurable approval workflows and autonomy boundaries

#### Dashboard Analytics (#57, #58, #59, #60, #61)

- **Where Time Went** (#57) — Time breakdown by project via telemetry data with color-coded project bars
- **Activity Clock** (#58) — 24-hour donut chart showing agent work distribution, sourced from status-history transitions
- **Hourly Activity Chart** (#59) — Bar chart with per-hour event counts, sourced from status-history
- **Wall Time Toggle** (#60) — Total Agent Time + Avg Run Duration with explanatory tooltips
- **Session Metrics** (#61) — Session count, success rate, completed/failed/abandoned tracking

#### Lifecycle & Automation

- **Task Lifecycle Hooks** (#72) — 7 built-in hooks (subtask-gate, assignee-required, blocked-reason, done-checklist, auto-archive, time-tracking, notification), 8 lifecycle events, custom hooks API
- **Documentation Freshness** (#74) — Steward workflow with freshness headers (`fresh-days`, `owner`, `last-verified`), 3-phase automation plan
- **Error Learning Workflow** (#91) — Structured failure analysis, similarity search for recurring issues, stats API. Inspired by @nateherk's Klouse dashboard concept.

#### Developer Experience

- **Markdown Rendering** (#63) — MarkdownText component for rich text in task descriptions and comments
- **Cost Prediction** (#54) — Multi-factor cost estimation model (tokens, compute, overhead) for task budgeting
- **CLI Usage Reporting** (#50) — `vk usage` command for token and cost reporting from the terminal
- **Dashboard Widget Toggles** (#92) — Show/hide individual dashboard widgets with settings gear and localStorage persistence
- **Production Binding** (#55) — `VK_HOST` and `VK_PORT` environment variables for flexible deployment
- **Custom favicon** — Purple scales-of-justice SVG icon replacing the default Vite favicon

### Changed

- **Timezone-aware metrics** — Server reports its timezone dynamically in all API response `meta`; clients can request metrics in their local timezone via `?tz=<offset>` query parameter
- **Activity data source** — Activity Clock and Hourly Activity Chart now pull from `status-history` (reliable state transitions) instead of `activity.json`
- **Cost-per-task clickability** — Enhanced hover states, border effects, and arrow indicator
- **Archive optimistic updates** — Archive mutations now remove tasks from cache immediately via `onMutate`, with rollback on error
- **Agent naming convention** — Agent names use ALL CAPS for acronyms (VERITAS, TARS, CASE, K-2SO, R2-D2, MAX)

### Fixed

- **Daily Activity 100% bug** — Utilization was calculated using UTC dates but displayed in local timezone, causing incorrect percentages
- **Feb 3 telemetry outlier** — 66-minute run normalized to 19min (p95 level)
- **Feb 2 telemetry outliers** — 3 runs (15-19min range) normalized to 10min
- **Registry stats interface mismatch** — Frontend expected `totalAgents`/`onlineAgents` but server sent `total`/`online`; interface updated to match server

### Security

- **MCP SDK vulnerability patched** — Updated `@modelcontextprotocol/sdk` from 1.25.3 to ^1.26.0 (GHSA-345p-7cg4-v4c7, cross-client data leak)
- **Rate limiting documented** — README now warns that VK does not include built-in rate limiting; reverse proxy recommended for public deployments

### Maintenance

- **21 stale feature branches cleaned** — Down to `main` only
- **README roadmap updated** — Reflects v2.0 shipped features, v1.6.0 and earlier history preserved
- **Version bumped** across all packages (root, server, web, shared, mcp)

### Credits

- [@nateherk](https://github.com/nateherk) — Error learning workflow inspired by Klouse dashboard concept
- [@mvoutov](https://github.com/mvoutov) — Documentation freshness inspired by BoardKit Orchestrator

---

## [1.6.0] - 2026-02-05

### ✨ Highlights

- **Activity Page Redesign** — Streamlined to focus on status history with full-width layout, clickable task navigation, and color-coded status badges
- **Task Templates UI (#39)** — Full management interface for creating, editing, and instantiating task templates with blueprints
- **Analytics API (#43)** — New endpoints for timeline visualization and aggregate metrics (parallelism, throughput, lead time)
- **Status Transition Hooks** — Quality gates and automated actions for task status changes
- **7 GitHub Issues Closed** — #47, #48, #49, #51, #53, #56, #82 verified complete and documented

### Added

#### Activity Page Improvements

**Full-Width Status History:**

- Removed activity feed column — status history now spans full width
- Removed redundant "Status History" header label
- Daily summary panel retained above status history
- Cleaner, more focused interface for monitoring agent activity

**Clickable Task Navigation:**

- Status history entries now clickable to open task detail panel
- Keyboard accessible (Enter/Space to activate)
- Hover state indicates interactivity

**Color-Coded Status Badges:**

- Agent status colors:
  - `working` / `thinking` — Green
  - `sub-agent` — Purple
  - `idle` — Gray
  - `error` — Red
- Task status colors (Kanban columns):
  - `todo` — Slate
  - `in-progress` — Amber
  - `blocked` — Red
  - `done` — Blue
- Task titles colored to match their new status
- Uniform badge width for visual consistency

**Task Status Changes:**

- Now shows both agent status changes AND task status changes
- Task status changes display with kanban column colors
- Unified timeline view of all activity

**Files:**

- `web/src/components/activity/ActivityFeed.tsx` — Redesigned component
- `web/src/hooks/useStatusHistory.ts` — Updated color functions

#### Task Templates UI (#39)

Full management interface for task templates:

**Templates Page (`/templates`):**

- Grid view of all templates with category grouping
- Search and filter by category
- Quick actions: Edit, Preview, Delete, Create Task
- Empty state with helpful onboarding

**Template Editor Dialog:**

- Create and edit templates
- Configure task defaults (type, priority, project, agent)
- Add subtask templates with ordering
- Blueprint support for multi-task workflows
- Validation and error handling

**Template Preview Panel:**

- Read-only preview of template configuration
- Shows all defaults and subtasks
- One-click task creation from template

**Files:**

- `web/src/components/templates/TemplatesPage.tsx`
- `web/src/components/templates/TemplateEditorDialog.tsx`
- `web/src/components/templates/TemplatePreviewPanel.tsx`
- `server/src/routes/templates.ts`
- `server/src/services/template-service.ts`

#### Analytics API (#43)

New endpoints for advanced metrics and visualization:

**Timeline Endpoint:**
`GET /api/analytics/timeline`

- Returns task execution timeline data
- Includes start/end times from time tracking
- Task assignments and status history
- Parallelism snapshots (concurrent tasks over time)
- Query params: `from`, `to`, `agent`, `project`, `sprint`

**Metrics Endpoint:**
`GET /api/analytics/metrics`

- Aggregate metrics for a time period:
  - Parallelism factor (average concurrent tasks)
  - Throughput (tasks completed per period)
  - Lead time (creation to completion)
  - Agent utilization (working time per agent)
  - Efficiency metrics (tracked vs total time)
- Query params: `sprint`, `from`, `to`, `project`

**Files:**

- `server/src/routes/analytics.ts`
- `server/src/services/analytics-service.ts`
- `server/src/schemas/analytics-schemas.ts`
- `docs/API-analytics.md` — Swagger-style documentation

#### Status Transition Hooks

Quality gates and automated actions for task status changes:

**Pre-Transition Gates:**

- Must pass before status change is allowed
- Examples: require description, require time logged, require code review

**Post-Transition Actions:**

- Fire after status change succeeds
- Examples: notify channel, update external system, trigger automation

**Configuration:**

- Stored in `.veritas-kanban/transition-hooks.json`
- Configurable per-transition (e.g., `in-progress` → `done`)
- Enable/disable globally or per-rule

**Files:**

- `server/src/services/transition-hooks-service.ts`
- `server/src/routes/transition-hooks.ts`
- `shared/src/types/transition-hooks.ts`

#### CLI Setup Wizard

Interactive onboarding for new users:

```bash
vk setup
```

- Guided configuration of API URL and auth
- Creates `.veritas-kanban/config.json`
- Tests connection and validates setup
- Shows next steps and helpful commands

**Files:**

- `cli/src/commands/setup.ts`

#### Prompt Registry

10 copy/paste prompt templates in `docs/prompt-registry/`:

1. **task-breakdown.md** — Epic → subtasks decomposition
2. **code-review.md** — Cross-model review prompt
3. **bug-fix.md** — Structured debugging approach
4. **documentation.md** — Doc writing guidelines
5. **security-audit.md** — Security review checklist
6. **research.md** — Research task structure
7. **content-creation.md** — Content production workflow
8. **sprint-planning.md** — Sprint setup prompt
9. **standup-report.md** — Daily standup generation
10. **lessons-learned.md** — Post-task reflection

### Fixed

#### Security

**SEC-001: Path Traversal Vulnerability**

- Added validation to trace and template services
- Prevents `../` path injection in file operations
- All file paths now resolved and validated against allowed directories

#### Performance

**Telemetry Streaming:**

- Large telemetry reads now streamed instead of loaded into memory
- Pagination pushed to service layer
- Optimized lookups for common queries

#### Quality

**React Strict Mode Compliance:**

- Replaced `Math.random()` with `crypto.randomUUID()` for keys
- Fixed type alignment issues
- Resolved React warning about duplicate keys

### Changed

#### Dashboard

- Sidebar task counts now show current state, not time-filtered counts
- Archive/delete/restore operations now correctly find files on disk
- Metrics cache invalidation on status changes

### Closed Issues

| Issue | Title                                         | Implementation                 |
| ----- | --------------------------------------------- | ------------------------------ |
| #82   | Dev reliability (health, dev:clean, watchdog) | Health endpoints + dev scripts |
| #56   | Dashboard filter bar with presets             | DashboardFilterBar component   |
| #53   | Per-model cost tables & calculation           | Cost tracking in telemetry     |
| #51   | Standup summary with model usage              | /api/summary/standup           |
| #49   | Dashboard Model Usage & Cost panel            | Tokens Card + Cost per Task    |
| #48   | Global usage aggregation service & API        | /api/metrics/\* endpoints      |
| #47   | Model Usage schema, types & API               | Full telemetry system          |

---

## [1.5.0] - 2026-02-04

### ✨ Highlights

- **Comprehensive SOP Documentation Suite** — 8 new guides covering agent workflows, sprint planning, multi-agent orchestration, code review, best practices, examples, and power user tips
- **Cross-Model Code Review Enforcement** — Claude ↔ GPT review gate now fully documented with RF-002 91% accuracy validation
- **Bulk Archive Error Handling** — Fixed silent failures in Done column archival with per-task error tracking and user feedback toasts
- **Sidebar Metrics Sync** — Fixed stale task counts in board sidebar by invalidating metrics cache on status changes

### Added

#### Documentation (#US-1600)

Complete SOP Sprint with 8 new markdown files in `docs/`:

- **GETTING-STARTED.md** — 5-minute quickstart from zero → agent-ready, includes:
  - Prerequisites, manual setup wizard, UI/CLI task creation
  - Agent pickup checklist with agent-requests folder flow
  - Sanity checks section (API health, UI health, agent pickup verification)
  - Prompt registry guidance (shared resources pattern from BoardKit)
  - Documentation freshness SOP (AGENTS.md, CLAUDE.md, BEST-PRACTICES.md)
  - Multi-repo/multi-agent notes with consistent naming conventions
  - OpenClaw Browser Relay integration notes for auth-required workflows
  - Credited Neal (@nealmummau) for asking the triggering question

- **SOP-agent-task-workflow.md** — Complete lifecycle (claim → work → complete):
  - Roles table (PM, Worker, Human Lead)
  - Lifecycle overview with 6 stages
  - API/CLI examples for each step (start timer, status change, completion)
  - Prompt template for consistent agent instructions
  - Lessons Learned expectations + notification patterns
  - Escalation paths for blocked tasks, tooling failures, reviewer disputes

- **SOP-sprint-planning.md** — Epic → Sprint → Task → Subtask hierarchy:
  - Hierarchy table with real examples (MessageMeld, US-1600)
  - Sprint planner agent prompt template
  - Bulk API payload for creating entire sprints at once
  - Estimation pattern (subtasks × 0.5d = effort)
  - Assignment workflow (leave unassigned for agent pickup)
  - Example sprint (US-1600 docs sprint + RF-002 bug fix sprint)
  - After-planning checklist (recap docs, GitHub milestones, standup scheduling)

- **SOP-multi-agent-orchestration.md** — PM + Worker roles:
  - PM checklist (plan, assign, track, review, report)
  - Worker handoff template with clear acceptance criteria
  - Status reporting cadence (daily updates, standup summaries)
  - Error escalation paths
  - Opus-as-PM / Codex-as-worker walkthrough example

- **SOP-cross-model-code-review.md** — Non-negotiable opposite-model gate:
  - Enforcement rule: If Claude wrote it, GPT reviews; if GPT wrote it, Claude reviews
  - When to trigger reviews (application code required, docs optional, research optional)
  - Review workflow (create task, opposite model audits, findings as subtasks, fixes tracked)
  - Reviewer checklist (Security, Reliability, Performance, Accessibility, Docs)
  - Prompt template for consistent audits
  - Escalation paths for disagreements
  - RF-002 reference (91% accuracy validates the approach)

- **BEST-PRACTICES.md** — Patterns that work + anti-patterns to avoid:
  - 10 "Do This" rules (time tracking, subtasks, acceptance criteria, atomic scope, SOP updates, etc.)
  - 10 "Don't Do This" anti-patterns (no acceptance, skipping timers, grab-bag tasks, etc.)
  - Based on real-world usage with agents

- **EXAMPLES-agent-workflows.md** — 6 copy/pasteable recipes:
  - Feature development (BrainMeld Lessons Learned)
  - Bug fix (GH-86 bulk archive)
  - Documentation update (sanity checks in Getting Started)
  - Security audit (RF-002 style)
  - Content production (podcast clip → LinkedIn post)
  - Research & report (Champions dossiers)
  - Each includes goal, task creation, prompt, workflow steps, and deliverables

- **TIPS-AND-TRICKS.md** — Power user features:
  - CLI shortcuts (vk begin/done/block/unblock/time/summary)
  - Keyboard shortcuts (Cmd+K palette, arrow nav, Esc)
  - Command palette power moves
  - WebSocket awareness and polling fallback
  - MCP server setup for Claude Desktop
  - Git worktree integration patterns
  - Obsidian/Brain mirroring with brain-write.sh
  - Dev helpers (dev:clean, dev:watchdog)

- **README.md** — Added "Documentation Map" section listing all new guides with descriptions

#### Fixes

##### GH-86: Bulk Archive Silent Failure (#86)

**Root Cause:** `BulkActionsBar.handleArchiveSelected()` used `Promise.all()` with no error handling. When any single archive failed, the entire batch would silently reject with zero user feedback.

**Fix:**

- Import `useToast` hook
- Replace `Promise.all()` with per-task error tracking loop
- Show success toast (e.g., "Archived 5 tasks")
- Show error toast on partial/full failure with counts
- Log individual failures to console for debugging
- Clear selection regardless of outcome
- **File:** `web/src/components/board/BulkActionsBar.tsx` (+38 lines)

##### GH-87: Sidebar Task Counts Out of Sync (#87)

**Root Cause:** The sidebar uses `useMetrics('24h')` which polls every 30 seconds with 10-second staleTime. Meanwhile, `useUpdateTask` mutations did NOT invalidate the metrics cache, causing up to 30 seconds of stale data after status changes.

**Fix:**

- Add metrics query invalidation to `useUpdateTask.onSuccess()`
- Only invalidate when task status changes (prevents over-invalidation)
- Preserves timer state handling (no aggressive blanket invalidation)
- **File:** `web/src/hooks/useTasks.ts` (+9 lines)

### Scripts

- **scripts/dev-clean.sh** — Added explicit `pnpm` path resolution for launchd sessions (fixes "command not found" in automated restarts)
- **scripts/dev-watchdog.sh** — Improved restart storm prevention with lock file + PID checking; fixed pnpm path resolution

### CLI

- **`vk setup`** — New guided onboarding wizard that validates environment and helps new users get started:
  - Checks Node version (requires ≥18)
  - Verifies server is running and reachable
  - Tests API authentication
  - Optionally creates a welcome task with next steps
  - Supports `--json` output for automation and `--skip-task` to skip sample task
  - Credit: BoardKit Orchestrator (Monika Voutov) for the wizard pattern inspiration

### Fixed

- **Archive/Delete/Restore** — Fixed "Archive failed" errors caused by filename mismatch when task titles changed after creation. Now uses `findTaskFile()` to locate actual file on disk by task ID prefix instead of computing filename from current title
- **Sidebar Task Counts** — Fixed metrics showing time-filtered counts (e.g., 33 todo) instead of current board state (e.g., 124 todo). `/api/metrics/all` now returns current task status counts regardless of period filter; period only applies to telemetry metrics (runs, tokens, duration)
- **Backlog Count API** — Fixed double-wrapped response (`{data: {success, data: {count}}}`) by letting `responseEnvelopeMiddleware` handle wrapping

### Security

- **SEC-001 Extended** — Added path traversal validation to `trace-service.ts` (attemptId, taskId, traceId) and `template-service.ts` (templateId) using `validatePathSegment()` + `ensureWithinBase()`

### Changed

- Version bumped from 1.4.1 → 1.5.0

---

## [1.4.1] - 2026-02-02

### Security

- **SEC-001 Path Traversal Prevention** — added strict path segment validation + base directory enforcement in server utilities; applied to file-based services that join paths from user-controlled ids
- **SEC-007 Admin Authorization** — enforced admin (or admin+agent where appropriate) on mutating settings/config/activity/status-history/notifications endpoints

### Fixed

- **Agent Status Panel** now uses real-time WebSocket updates (`useRealtimeAgentStatus`) and correctly handles `activeAgents` payloads
- Improved proxy/IP trust behavior for rate limiting (`X-Forwarded-For` only trusted when `trust proxy` is configured)

## [1.4.0] - 2026-02-01

### ✨ Highlights

- **CLI Workflow Commands** — Two-command task lifecycle (`vk begin` / `vk done`) plus time tracking, comments, agent status, and project management from the terminal
- Inspired by Boris Cherny's (Claude Code creator) "automate everything you do twice" philosophy

### Added

#### CLI Workflow Commands (#44)

- **Composite workflows** — Complete task lifecycle in single commands:
  - `vk begin <id>` — Sets in-progress + starts timer + updates agent status to working
  - `vk done <id> "summary"` — Stops timer + sets done + adds comment + sets agent idle
  - `vk block <id> "reason"` — Sets blocked + adds comment with reason
  - `vk unblock <id>` — Sets in-progress + restarts timer
- **Time tracking CLI** — Full time management from terminal:
  - `vk time start <id>` — Start time tracker
  - `vk time stop <id>` — Stop time tracker
  - `vk time entry <id> <seconds> "description"` — Add manual time entry
  - `vk time show <id>` — Display time tracking summary (total, running status, entries)
- **Comments CLI** — `vk comment <id> "text"` with optional `--author` flag
- **Agent status CLI** — Manage agent presence:
  - `vk agent status` — Show current agent status
  - `vk agent working <id>` — Set to working (auto-fetches task title)
  - `vk agent idle` — Set to idle
  - `vk agent sub-agent <count>` — Set sub-agent mode with count
- **Project management CLI** — `vk project list` and `vk project create "name"` with `--color` and `--description` flags
- All commands support `--json` for scripting and automation
- 5 new command modules, 18 subcommands, 651 lines added

---

---

## [1.3.0] - 2026-02-01

### ✨ Highlights

- **GitHub Issues Bidirectional Sync** — Import issues with the `kanban` label and push status changes back to GitHub
- **Activity Feed** — Full-page chronological activity feed with filtering, real-time updates, and compact/detailed toggle
- **Daily Standup Summary** — Generate standup reports via API or CLI with completed, in-progress, blocked, and upcoming sections

### Added

#### GitHub Issues Sync (#21)

- `GitHubSyncService` (464 lines) with polling, label-based field mapping, and circuit breaker
- Inbound: import issues with `kanban` label as tasks
- Outbound: push status changes (done → close issue, reopen on todo/in-progress/blocked) and comments
- Label mapping: `priority:high` → priority field, `type:story` → type field
- Config: `.veritas-kanban/integrations.json`, state: `.veritas-kanban/github-sync.json`
- `TaskGitHub` interface in shared types: `{issueNumber, repo, syncedAt?}`
- New API endpoints:
  - `POST /api/github/sync` — trigger manual sync
  - `GET /api/github/sync/status` — last sync info
  - `GET /api/github/sync/config` — get config
  - `PUT /api/github/sync/config` — update config
  - `GET /api/github/sync/mappings` — list issue↔task mappings
- New CLI commands: `vk github sync`, `vk github status`, `vk github config`, `vk github mappings`

#### Activity Feed (#33)

- Full-page chronological activity feed accessible from header nav (ListOrdered icon)
- `agent` field added to Activity interface
- `ActivityFilters` for combinable filtering (agent, type, taskId, since, until)
- `GET /api/activity` enhanced with query params: `?agent=X&type=Y&taskId=Z&since=ISO&until=ISO`
- `GET /api/activity/filters` — distinct agents and types for filter dropdowns
- `ActivityFeed.tsx` component with day grouping, 15 activity type icons, filter bar, compact/detailed toggle
- Infinite scroll via IntersectionObserver
- Real-time WebSocket updates
- `ViewContext` for board ↔ activity navigation

#### Daily Standup Summary (#34)

- `GET /api/summary/standup?date=YYYY-MM-DD&format=json|markdown|text`
- Sections: completed, in-progress, blocked, upcoming, stats
- `generateStandupMarkdown()` and `generateStandupText()` in SummaryService
- CLI: `vk summary standup` with `--yesterday`, `--date YYYY-MM-DD`, `--json`, `--text` flags
- 12 new tests

### Changed

- MAX_ACTIVITIES increased from 1,000 to 5,000

---

## [1.2.0] - 2026-02-01

### ✨ Highlights

- **Standardized API Response Envelope** — All endpoints return a consistent `{success, data, meta}` format with typed error classes
- **Abstract File Storage** — Repository pattern decouples services from the filesystem
- **Blocked Task Status** — Full support for blocked tasks across MCP, CLI, and board

### Added

#### Standardize API Response Envelope (#2)

- 4 new error classes: `UnauthorizedError`, `ForbiddenError`, `BadRequestError`, `InternalError` (in `middleware/error-handler.ts`)
- `sendPaginated(res, items, {page, limit, total})` helper for pagination metadata in envelope
- Response envelope format:
  - Success: `{success: true, data, meta: {timestamp, requestId}}`
  - Error: `{success: false, error: {code, message, details?}, meta}`
  - Pagination: `meta` includes `{page, limit, total, totalPages}` on paginated endpoints

#### Abstract File Storage (#6)

- 5 new repository interfaces: `ActivityRepository`, `TemplateRepository`, `StatusHistoryRepository`, `ManagedListRepository`, `TelemetryRepository`
- `StorageProvider` extended with new repositories
- `fs-helpers.ts` — centralized filesystem access (only file that imports `fs`)

#### Blocked Task Status (#32)

- MCP tools Zod/JSON schema definitions updated for blocked status
- MCP active tasks filter updated to include blocked
- CLI help text updated
- CLI status color: blocked = red

### Changed

- All 11 route files standardized — zero ad-hoc `{error: "..."}` patterns
- Auth middleware errors standardized to use typed error classes
- All 10 services migrated off direct `fs` imports to use `fs-helpers.ts`

---

## [1.1.0] - 2026-01-31

### ✨ Highlights

- **Built-in Chat Interface** — Talk to AI agents directly from the board or any task, with streaming responses and markdown rendering
- **Agent Routing Engine** — Tasks auto-route to the best available agent based on type, project, and capabilities
- **Agent Selection on Task Creation** — Choose which agent handles a task when you create it
- **Hardened Infrastructure** — Rate limiting, circuit breakers, file locking, request timeouts, data integrity checks, and more

### Added

#### Chat Interface (#18)

- Full chat panel accessible from any task or the board header
- Streaming AI responses with real-time WebSocket delivery
- Floating chat bubble with pulse indicator for new messages
- Chat sessions stored as markdown files with YAML frontmatter
- Gateway integration for AI responses via Clawdbot
- Chat export as markdown (download icon in header)
- Clear chat history with confirmation dialog
- Mode toggle: Ask (read-only queries) vs Build (changes, files, commands)
- Keyboard shortcut support
- Auto-focus input after sending messages
- Tool call display with expandable input/output sections

#### Agent Routing Engine (#16)

- Task-aware routing that matches tasks to agents by type, project, and capabilities
- Routing rules configurable per agent in Settings → Agents
- API endpoints for routing queries and rule management
- Full test coverage (17 tests)

#### Agent Selection on Task Creation (#17)

- Agent dropdown in the Create Task dialog
- Auto-routes to best agent based on task type, or allows manual override
- Agent field displayed in task metadata section

#### Agent CRUD Management

- Full Add/Edit/Remove for agents in Settings → Agents
- Add Agent form with name, type slug (auto-generated), command, and args
- Edit/Remove via inline icons (default agent protected from deletion)
- `AgentType` loosened from fixed enum to any string slug — fully custom agents

#### Board Filter: Agent

- Filter board by assigned agent in the FilterBar
- Agent indicator dots on task cards match filter state

#### Infrastructure & Security

- **Rate Limiting** — Per-route tiered thresholds (auth, API reads, writes, uploads)
- **Circuit Breaker** — Automatic failure detection for external service calls with configurable thresholds
- **File Locking** — FIFO queue prevents race conditions on concurrent file writes
- **Request Timeouts** — Middleware kills hung connections before they pile up
- **Data Integrity** — Hash-chain verification + automatic backup on startup with rotation
- **Audit Log** — Immutable hash-chain audit trail for sensitive operations
- **Health Endpoint** — Liveness, readiness, and deep checks (storage, disk, task file)
- **API Envelope** — Standardized `{ success, data, meta }` response format across all endpoints
- **Schema Validation** — Zod schemas on all mutating API routes
- **Metrics** — Prometheus-compatible `/metrics` endpoint for monitoring
- **WebSocket Heartbeat** — Connection keep-alive with automatic reconnection and connection limits
- **Error Boundaries** — React error boundaries with graceful fallback UI
- **Dependency Audit** — Automated vulnerability scanning in CI

#### Storage & Architecture

- Abstract file storage behind repository interface (prep for future database backends)
- Structured logging with pino (replaced all `console.*` calls)

#### First-Run Experience

- Example tasks auto-populate the board on first run (4 sample tasks)
- Manual seed script: `pnpm seed`
- Task data `.gitignore`d — your data stays private

#### Dark/Light Mode

- Settings → General → Appearance toggle (moon/sun icon)
- Persists to localStorage; default is dark mode
- Inline script prevents flash of wrong theme on load

#### UI Theme

- Primary color: purple (`270° 50% 40%`) with white text
- Focus rings, switches, and accents updated to match

#### Documentation

- TROUBLESHOOTING.md with common issues and solutions
- Comprehensive FEATURES.md reference
- Agentic AI Safety best practices guide
- Roadmap section linking to v1.1 milestone
- Competitive comparison table
- OpenClaw (formerly Moltbot/Clawdbot) attribution updated

#### Per-Status Selection (#24)

- Select All checkbox per column header
- Toolbar buttons for bulk operations scoped to selected status
- Column checkboxes for quick multi-select

### Fixed

- **Chat delete not clearing UI** — React Query kept stale cached data after session file was deleted; now uses `removeQueries` to nuke cache
- **Chat send broken after delete** — Server now recreates task-scoped sessions instead of throwing 404
- **Cross-column drag-and-drop** — Tasks reliably move between columns with local state management during drag
- **Dashboard agent comparison** — Fixed broken data fetch (raw `fetch` → `apiFetch` for envelope unwrapping)
- **Dashboard drill-down** — Removed duplicate X button, fixed focus ring clipping, wired up `open-task` event
- **Localhost auth rate limit** (#25) — Exempted localhost from rate limiting
- **Numeric inputs** — Clean inputs without browser spinners (#19)
- **Timer start/stop** — Optimistic UI toggle + cache patch for instant feedback
- **Task cache fragmentation** — All routes now use TaskService singleton
- **Sprint/Agent label alignment** — Fixed form layout in task detail panel
- **Sticky header** — Fixed positioning + matched indicator dot sizes
- **Keyboard test infinite loop** — Resolved render loop in `useKeyboard` + memoized context
- **Agent idle timeout** — Increased from 5 to 15 minutes to reduce false resets
- **File lock ordering** — Added in-process FIFO queue for deterministic write ordering
- **Search filters** — Added task ID to board and archive search

### Changed

- Agent status popover: moved idle description to bottom, added activity history link
- WebSocket indicator: click popover with connection status explanation
- Dashboard layout: Daily Activity (75%) + Recent Status Changes (25%) side-by-side
- Rolling average line: cyan-teal to contrast purple theme
- Bar chart hover: subtle muted fill instead of white flash
- All repo links updated to BradGroux (primary repo)
- All contact emails standardized to contact@digitalmeld.io
- Test suite: 72 files, **1,270 tests** (up from 61 files / 1,143 tests)

---

## [1.0.0] - 2026-01-29

### 🎉 Initial Public Release

Veritas Kanban is an AI-native project management board built for developers and autonomous coding agents.

### Features

#### Core Board

- Kanban board with drag-and-drop between columns (Backlog, To Do, In Progress, Review, Done)
- Task detail panel with full editing (title, description, priority, status, type, project, sprint)
- Subtasks with progress tracking on cards
- Task type system with icons and color-coded borders
- Sprint management with auto-archive
- Bulk operations and keyboard shortcuts

#### Code Workflow

- Git worktree integration for code tasks
- Diff viewer for code review
- Line-level review comments
- Approval workflow with review decisions
- Merge and close integration

#### AI Agent Integration

- Agent orchestration system for autonomous task execution
- Agent status tracking (idle, working, sub-agent mode)
- Time tracking per task with automatic and manual entries
- REST API designed for AI agent consumption
- MCP (Model Context Protocol) server for LLM tool integration
- CLI for headless task management

#### Dashboard & Analytics

- Sprint velocity tracking
- Cost budget tracking with daily digest
- Task-level metrics and telemetry
- Status history timeline

#### Security

- JWT authentication with secret rotation
- Admin key + API key authentication
- CSP headers with Helmet
- Rate limiting with express-rate-limit
- CORS origin validation
- WebSocket origin validation
- Server-side MIME type validation for uploads
- Markdown sanitization (XSS prevention)
- Timing-safe credential comparison
- Credential redaction from task data

#### Performance

- In-memory task caching with file watchers
- Config caching with write invalidation
- Gzip response compression
- Lazy-loaded dashboard with vendor chunk splitting (69% bundle reduction)
- Pagination and summary mode for large datasets
- Reduced polling when WebSocket connected
- Telemetry retention and automatic cleanup

#### Infrastructure

- Production Dockerfile with multi-stage build (runs as non-root)
- GitHub Actions CI pipeline
- Pre-commit hooks with husky + lint-staged
- Structured logging with pino
- Request ID middleware for tracing
- Graceful shutdown with service disposal
- Unhandled rejection and exception handlers

#### Documentation

- OpenAPI/Swagger API documentation
- Deployment guide (Docker, bare metal, nginx, Caddy, systemd)
- Security audit reports
- Contributing guide with conventional commits
- Code of Conduct (Contributor Covenant v2.1)

#### Testing

- 61 test files, 1,143 unit tests (server + frontend) with Vitest
- End-to-end tests with Playwright (19/19 passing)
- Gitleaks pre-commit hook for secret scanning

### Technical Details

- **Frontend:** React 19, Vite 6, TypeScript 5.7, Tailwind CSS 3.4, Shadcn UI
- **Backend:** Express 4.21, TypeScript, file-based storage
- **Testing:** Playwright 1.58, Vitest 4
- **Runtime:** Node.js ≥ 22.22.1, pnpm ≥ 11.0.0

---

_Built by [Digital Meld](https://digitalmeld.io) — AI-driven enterprise automation._

[unreleased]: https://github.com/BradGroux/veritas-kanban/compare/v6.1.0...HEAD
[6.1.0]: https://github.com/BradGroux/veritas-kanban/compare/v6.0.2...v6.1.0
[6.0.2]: https://github.com/BradGroux/veritas-kanban/compare/v6.0.1...v6.0.2
[6.0.1]: https://github.com/BradGroux/veritas-kanban/compare/v6.0.0...v6.0.1
[6.0.0]: https://github.com/BradGroux/veritas-kanban/compare/v5.2.5...v6.0.0
[5.2.5]: https://github.com/BradGroux/veritas-kanban/compare/v5.2.4...v5.2.5
[5.2.4]: https://github.com/BradGroux/veritas-kanban/compare/v5.2.3...v5.2.4
[5.2.3]: https://github.com/BradGroux/veritas-kanban/compare/v5.2.2...v5.2.3
[5.2.2]: https://github.com/BradGroux/veritas-kanban/compare/v5.2.1...v5.2.2
[5.2.1]: https://github.com/BradGroux/veritas-kanban/compare/v5.2.0...v5.2.1
[5.2.0]: https://github.com/BradGroux/veritas-kanban/compare/v5.1.0...v5.2.0
[5.1.0]: https://github.com/BradGroux/veritas-kanban/compare/v5.0.1...v5.1.0
[5.0.1]: https://github.com/BradGroux/veritas-kanban/compare/v5.0.0...v5.0.1
[5.0.0]: https://github.com/BradGroux/veritas-kanban/compare/v4.3.2...v5.0.0
[4.1.0]: https://github.com/BradGroux/veritas-kanban/compare/v4.0.1...v4.1.0
[4.0.1]: https://github.com/BradGroux/veritas-kanban/compare/v4.0.0...v4.0.1
[4.0.0]: https://github.com/BradGroux/veritas-kanban/compare/v3.3.3...v4.0.0
[3.3.3]: https://github.com/BradGroux/veritas-kanban/compare/v3.3.2...v3.3.3
[1.4.1]: https://github.com/BradGroux/veritas-kanban/compare/v1.4.0...v1.4.1
[1.4.0]: https://github.com/BradGroux/veritas-kanban/compare/v1.3.0...v1.4.0
[1.3.0]: https://github.com/BradGroux/veritas-kanban/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/BradGroux/veritas-kanban/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/BradGroux/veritas-kanban/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/BradGroux/veritas-kanban/releases/tag/v1.0.0
