chore(release): prepare Veritas Kanban 6.1.1

Audit and resolve the open contributor and dependency backlog, stabilize the release candidate, synchronize versioned documentation, and prepare the verified 6.1.1 release.
This commit is contained in:
Brad Groux 2026-08-22 19:55:58 -05:00 committed by GitHub
parent ab61456774
commit 2cfb89396d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
32 changed files with 308 additions and 78 deletions

View file

@ -12,6 +12,12 @@ updates:
- 'BradGroux'
labels:
- 'dependencies'
ignore:
# jsdom 30 requires Node >=22.22.2 and currently breaks the Mantine UI suite.
# Keep receiving jsdom 29 patches until the runtime floor is deliberately raised.
- dependency-name: 'jsdom'
update-types:
- 'version-update:semver-major'
groups:
# Group minor/patch updates to reduce PR noise
production-dependencies:

View file

@ -6,7 +6,7 @@
> Harness-specific supplements (for example `CLAUDE.md`) extend, never duplicate or contradict,
> these rules. See `docs/AGENTS-TEMPLATE.md` for the managed-run and external-agent protocols.
>
> **Version:** 6.1.0
> **Version:** 6.1.1
> **Freshness policy:** update within two working days of any toolchain or architecture change.
> Stale fields (package manager, Node version, provider list, test commands) are caught by
> `pnpm check:pnpm-settings` and the smoke-test CI job.
@ -37,7 +37,7 @@ veritas-kanban/
├── mcp/ MCP server
├── desktop/ Electron desktop wrapper
├── docs/ Operator and developer documentation
├── prompt-registry/ Prompt templates and cross-model review SOPs
├── prompt-registry/ Prompt templates and optional review workflows
└── .veritas-kanban/ Runtime data: agent-registry, logs, telemetry
```

View file

@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [6.1.1] - 2026-08-22
Veritas Kanban 6.1.1 restores reliable Task Detail scrolling after the Mantine
tabs migration and completes a security-audited dependency maintenance pass.
### Changed
- Clarified that independent review is owner-directed and optional rather than
a default delivery SOP or release gate (#1156).
- Updated supported runtime and development dependencies across the workspace,
including Chalk 6, and refreshed transitive security override floors so both
production and full dependency audits resolve without known vulnerabilities
(#1149, #1155).
- Deferred jsdom major updates in Dependabot while the current major requires a
higher Node.js patch floor and breaks the Mantine-backed web test environment;
jsdom 29 patch updates remain enabled (#1148).
### Fixed
- Restored the shared overlay flex-column contract so long Task Detail content
remains height-constrained and scrollable. Added a Chromium regression that
verifies layout, overflow, and real wheel scrolling through the drawer
(#1153, #1154).
- Prevented interactive controls inside task cards from activating the card,
restoring reliable touch status selection in WebKit after the Mantine 9.5
update. Status-move browser coverage now waits for the visible save contract
before closing Task Detail (#1156).
- Made file-backed workflow operations wait for their storage directory to be
ready, eliminating a startup race that could return `ENOENT` when the first
workflow request arrived immediately after service construction (#1156).
## [6.1.0] - 2026-07-26
### Added
@ -2432,7 +2463,8 @@ Veritas Kanban is an AI-native project management board built for developers and
_Built by [Digital Meld](https://digitalmeld.io) — AI-driven enterprise automation._
[unreleased]: https://github.com/BradGroux/veritas-kanban/compare/v6.1.0...HEAD
[unreleased]: https://github.com/BradGroux/veritas-kanban/compare/v6.1.1...HEAD
[6.1.1]: https://github.com/BradGroux/veritas-kanban/compare/v6.1.0...v6.1.1
[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

View file

@ -4,7 +4,7 @@
> Claude-specific lessons and common mistakes caught by previous Claude runs. Do not duplicate
> `AGENTS.md` content here.
>
> **Last updated:** 2026-07-26 (v6.1.0 release freshness)
> **Last updated:** 2026-08-22 (v6.1.1 release freshness)
> **Freshness check:** Update after mistakes; review monthly.
---

View file

@ -10,7 +10,7 @@ Start with a visual Kanban board. Add CLI, MCP, OpenClaw, Squad Chat webhooks, w
[![CI](https://github.com/BradGroux/veritas-kanban/actions/workflows/ci.yml/badge.svg)](https://github.com/BradGroux/veritas-kanban/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Version](https://img.shields.io/badge/version-6.1.0-blue.svg)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/version-6.1.1-blue.svg)](CHANGELOG.md)
[![TypeScript](https://img.shields.io/badge/TypeScript-6.0-blue.svg)](https://www.typescriptlang.org/)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)

View file

@ -1,6 +1,6 @@
{
"name": "@veritas-kanban/cli",
"version": "6.1.0",
"version": "6.1.1",
"description": "CLI for Veritas Kanban task management",
"type": "module",
"bin": {

View file

@ -1,6 +1,6 @@
{
"name": "@veritas-kanban/desktop",
"version": "6.1.0",
"version": "6.1.1",
"private": true,
"homepage": "https://github.com/BradGroux/veritas-kanban",
"description": "Veritas Kanban native desktop shell",

View file

@ -1,6 +1,6 @@
# Veritas Kanban — API Reference
**Version**: 6.1.0
**Version**: 6.1.1
**Last Updated**: 2026-07-25
**Base URL**: `http://localhost:3001/api`
**Canonical prefix**: `/api/v1` (alias: `/api`)

View file

@ -58,6 +58,7 @@ When a doc is older than the current version, it may need review.
| Date | Scope | Agent |
| ---------- | ------------------------------------------------------------------- | ------- |
| 2026-08-22 | v6.1.1 maintenance, dependency, release, upgrade, and evidence docs | Release |
| 2026-07-26 | v6.1.0 roadmap, harness, governance, knowledge, and release docs | Release |
| 2026-07-24 | v6.0.2 desktop recovery, version support, release, and evidence | Release |
| 2026-07-24 | v6.0.1 stabilization, release, upgrade, API, MCP, and evidence | Release |

View file

@ -253,7 +253,7 @@ BoardKit Orchestrator inspired us here: keep prompts, skills, and guidelines in
prompt-registry/
├── sprint-planning.md # Break epics into sprints
├── worker-handoff.md # PM → Worker assignment
├── cross-model-review.md # Claude ↔ GPT review gate
├── cross-model-review.md # Optional independent review
├── feature-development.md # E2E feature implementation
├── bug-triage.md # Investigation and fix
├── research-report.md # Deep research deliverable

View file

@ -1,8 +1,9 @@
# SOP: Cross-Model Code Review (Claude ↔ GPT)
# Optional Independent Code Review Playbook
Cross-model review is an optional independent-review workflow. Use it only
when the task, configured review gate, issue owner, or release owner explicitly
requires a different model.
This legacy-path document describes an optional independent-review workflow.
It is not part of the default delivery SOP or release gate. Use it only when
the task, configured review gate, issue owner, or release owner explicitly
requests it.
---
@ -27,7 +28,7 @@ normal human/CI review path.
- Type: `code`
- Sprint/project identical
- Description includes acceptance criteria + diff link(s)
3. **Assign to opposite model** (via OpenClaw or other orchestrator):
3. **Assign an independent reviewer** (human or configured agent):
```
Hey Codex, review PR for task_1234. Checklist below.
```
@ -47,7 +48,8 @@ normal human/CI review path.
## Verdict
Changes required.
```
7. **Audit trail**: Update commit message or PR description with `[author: claude-sonnet-4-5][reviewed-by: gpt-5.1-codex]`.
7. **Audit trail**: Record the reviewer and outcome in the task or pull request
when attribution is required by the configured policy.
---
@ -68,7 +70,7 @@ Adapt per task type.
## Prompt Template (Reviewer)
```
You are the cross-model reviewer. The code was authored by <model>. Apply the checklist:
You are the independent reviewer. Apply the checklist:
1. Pull latest branch <branch>.
2. Run tests (if any).
3. For each issue, note severity (High/Medium/Low/Nit) + file/line + fix suggestion.
@ -100,16 +102,16 @@ Store in `prompt-registry/cross-model-review.md`.
## Review Gates (Veritas Kanban Enforcement)
VK's built-in enforcement gates can make this optional workflow a structural
VK's built-in enforcement gates can make this optional playbook a structural
requirement for selected workspaces or tasks:
1. **reviewGate** — Blocks task completion unless all four reviewScores (security, reliability, performance, accessibility) are 10. This is the automated enforcement layer that ensures the cross-model review checklist has been completed rigorously.
1. **reviewGate** — Blocks task completion unless all four reviewScores (security, reliability, performance, accessibility) are 10. This is the automated enforcement layer that ensures the configured review checklist has been completed rigorously.
2. **closingComments** — Requires a substantive review comment (≥20 characters) before task completion. Ensures the reviewer leaves documented findings, not just scores.
3. **How they work together**:
- Author (Model A) completes code; task remains `in-progress`
- Reviewer (Model B) runs the cross-model review checklist
- Independent reviewer runs the configured review checklist
- Reviewer scores all 4 dimensions via the API: `PATCH /api/tasks/{id}` with `reviewScores`
- Reviewer leaves findings as comments (must be ≥20 chars if closingComments enabled)
- If reviewGate is enabled, task **cannot** move to `done` until all scores are 10

View file

@ -1,11 +1,11 @@
# Veritas Kanban v6 Compatibility And Release Policy
This policy defines supported v6.1.0 combinations, harness evidence, release
This policy defines supported v6.1.1 combinations, harness evidence, release
channels, and rollback limits. The machine-readable harness record at
`GET /api/config/harness-compatibility` is authoritative for exact capability
digests, fixture revisions, and the current host's live state.
Documentation freshness: 2026-07-26 for Veritas Kanban 6.1.0.
Documentation freshness: 2026-08-22 for Veritas Kanban 6.1.1.
## Harness Support Tiers
@ -25,7 +25,7 @@ are incompatible with v6.
| Component | Supported v6 combination | Detection/evidence | Fail-closed boundary |
| -------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Server, web, shared, CLI, MCP, desktop | All release packages are exactly 6.1.0. | Package manifests, `/api/health.version`, `vk --version`, MCP metadata, desktop bundle/update metadata. | Mixed release packages are unsupported for publication. |
| Server, web, shared, CLI, MCP, desktop | All release packages are exactly 6.1.1. | Package manifests, `/api/health.version`, `vk --version`, MCP metadata, desktop bundle/update metadata. | Mixed release packages are unsupported for publication. |
| Public API | REST API remains `v1` at `/api/v1`, with `/api` compatibility aliases where documented. | `X-API-Version`, OpenAPI/reference docs, CLI/MCP smoke. | Unknown API versions or incompatible auth fail before mutation. |
| Buzz Agent | Buzz v0.4.24 commit `710ed9fff57878a1d69f809b80a6ee0416c53fc4`; `buzz-agent 0.1.0`; ACP v1. | Exact initialize identity, capability digest, probe revision, composed Buzz fixtures. | Unknown build, `buzz-acp`, resume, HTTP/SSE MCP, or capability drift blocks. |
| Buzz relay integration | Buzz v0.4.24; NIP-11, NIP-29, NIP-42; optional NIP-43 membership. | Pinned relay compatibility evidence, signed query/event fixtures, mapping state. | Host/TLS drift, unsafe URL, bad signature, identity mismatch, replay, or disabled mapping blocks. |
@ -37,7 +37,7 @@ are incompatible with v6.
| GitHub Copilot CLI | v1.0.74 public-preview ACP; tag commit `2b809c84e87dbcc88f897cb4f3fb97c43b77af95`. | Version and ACP initialize handshake; authentication remains provider-managed. | Version drift, broad allow, remote/plugin/config injection, or unsupported controls blocks. |
| Hermes Agent | v2026.7.7.2 one-shot process adapter. | `hermes --version` and allowlisted boot authentication. | Resume/follow-up remains unsupported. |
| OpenClaw | v2026.6.11 gateway adapter. | Gateway health, runtime manifest, explicit operator tool policy. | Missing `sessions_spawn`/`sessions_send`, unknown evidence, or unsupported task controls blocks. |
| macOS desktop | macOS arm64 signed/notarized app with bundled 6.1.0 server/web. | Bundle version, signature, Gatekeeper, stapling, `/api/health.version`, update metadata. | Mixed bundle/runtime, failed readiness, signature, or metadata checks blocks stable publication. |
| macOS desktop | macOS arm64 signed/notarized app with bundled 6.1.1 server/web. | Bundle version, signature, Gatekeeper, stapling, `/api/health.version`, update metadata. | Mixed bundle/runtime, failed readiness, signature, or metadata checks blocks stable publication. |
| Linux/Windows desktop | Unsigned preview artifacts only. | Cross-platform packaging workflows. | Not a supported stable install or update channel. |
| Desktop SQLite/profile | Existing v5.2.5 workspace upgraded in place after a complete backup. | Data/profile counts, integrity check, startup normalization, board/runtime smoke. | Competing writers, unsafe filesystem, failed migration, or missing recovery evidence blocks acceptance. |

View file

@ -1,13 +1,37 @@
# Veritas Kanban v6 GA Checklist
This checklist contains the completed stable-release gate for Veritas Kanban
6.1.0 and retains the completed 6.0.2 evidence below. Command results, platform
This checklist contains the active stable-release gate for Veritas Kanban
6.1.1 and retains the completed 6.1.0 and 6.0.2 evidence below. Command results, platform
details, workflow links, limitations, and artifact hashes belong in
[v6 Release Candidate Evidence Packet](V6-RC-EVIDENCE-PACKET.md).
Documentation freshness: 2026-07-26 for Veritas Kanban 6.1.0.
Documentation freshness: 2026-08-22 for Veritas Kanban 6.1.1.
## 6.1.0 Completed Release Gate
## 6.1.1 Release Gate
- [x] Issue #1153 and pull requests #1148, #1149, #1150, #1154, and #1155
received an evidence-backed maintainer disposition.
- [x] Long Task Detail content is constrained and scrollable, with Chromium
layout, overflow, and wheel-input regression coverage (#1153, #1154).
- [x] Dependency updates were audited for runtime compatibility, peer ranges,
advisories, lockfile integrity, tests, builds, and desktop packaging;
jsdom 30 was rejected rather than weakening the Node.js floor (#1148,
#1149, #1150, #1155).
- [x] Root, shared, server, web, CLI, MCP, and desktop manifests are 6.1.1.
- [x] README, API reference, compatibility policy, upgrade guide, release
notes, canonical GitHub release body, and changelog agree on 6.1.1.
- [x] Frozen install, production and full audits, lint and warning budget,
typecheck, build, workspace tests, Playwright, Mantine QA, CLI/MCP smoke,
desktop checks, and release validators pass on the consolidated candidate.
- [x] Independent review is owner-directed and is not part of the active
6.1.1 release gate; exact local and CI evidence carries the release
decision.
- [ ] The release PR merges and the exact merge is published as annotated
`v6.1.1` with a live body matching `docs/releases/v6.1.1.md`.
- [ ] Signed/notarized macOS assets, updater metadata, independent installed-app
readiness, and the Homebrew cask are published and verified.
## Historical 6.1.0 Completed Release Gate
- [x] Roadmap issues #855, #864, #865, #866, #867, #868, #871, #872, #873,
#876, and #879 are closed through merged pull requests.
@ -31,7 +55,7 @@ Documentation freshness: 2026-07-26 for Veritas Kanban 6.1.0.
## Final Release Validation Commands
Run once from the clean 6.1.0 release candidate:
Run once from the clean 6.1.1 release candidate:
```bash
pnpm install --frozen-lockfile
@ -51,15 +75,15 @@ pnpm desktop:build
pnpm desktop:check:electron-artifacts
pnpm desktop:smoke:mac:local
pnpm desktop:package:mac:unsigned
pnpm validate:release -- --version 6.1.0
pnpm validate:release -- --version 6.1.0 --docker-build
pnpm validate:release -- --version 6.1.1
pnpm validate:release -- --version 6.1.1 --docker-build
```
## Distribution And Post-Publication
Publish only after every active 6.1.0 gate above is checked. The canonical
GitHub body is `docs/releases/v6.1.0.md`; post-publication validation must run
`pnpm validate:release -- --version 6.1.0 --github --repo BradGroux/veritas-kanban`.
Publish only after every pre-publication 6.1.1 gate above is checked. The canonical
GitHub body is `docs/releases/v6.1.1.md`; post-publication validation must run
`pnpm validate:release -- --version 6.1.1 --github --repo BradGroux/veritas-kanban`.
Update the Homebrew cask only from the independently verified published ZIP
checksum.

View file

@ -1,15 +1,36 @@
# Veritas Kanban v6 Release Candidate Evidence Packet
This packet records the completed Veritas Kanban 6.1.0 stable release and
retains historical evidence for the quarantined 6.0.0 prerelease, the 6.0.1
This packet records the Veritas Kanban 6.1.1 maintenance release candidate and
retains historical evidence for the completed 6.1.0 release, the quarantined 6.0.0 prerelease, the 6.0.1
stabilization release, and the 6.0.2 desktop recovery hotfix. It separates
merged implementation, deterministic conformance, local runtime proof, signed
publication, and Homebrew availability.
Veritas Kanban 6.1.0 is the supported stable v6 release. Do not use 6.0.0 for
installation or upgrade validation.
Veritas Kanban 6.1.0 remains the supported stable v6 release until 6.1.1
publication and artifact verification complete. Do not use 6.0.0 for installation or upgrade validation.
Documentation freshness: 2026-07-26 for Veritas Kanban 6.1.0.
Documentation freshness: 2026-08-22 for the Veritas Kanban 6.1.1 release candidate.
## 6.1.1 Maintenance Release Candidate
| Field | Value |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Release version | 6.1.1 |
| Source branch | `fix/release-6-1-1-1156` |
| Source baseline | `main` after the audited task-drawer fix, dependency rollup, and Chalk 6 disposition (#1154, #1155, #1149) |
| Included issues | [#1153](https://github.com/BradGroux/veritas-kanban/issues/1153) and release tracker [#1156](https://github.com/BradGroux/veritas-kanban/issues/1156) |
| Pull-request audit | #1154 accepted and merged with browser proof; #1155 accepted with refreshed security floors; #1149 accepted after Node.js and test review; #1150 closed as unnecessary because `pnpm/action-setup@v6` already resolves to 6.0.9; #1148 rejected because its engine floor and 65 failing tests violate the release contract |
| Publication state | Pending the consolidated release gate, release PR, annotated tag, GitHub publication, signed/notarized assets, installed-app verification, and Homebrew cask update |
### 6.1.1 verification evidence
| Gate | Candidate result |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Task Detail and mobile browser regressions | Chromium verifies the Mantine tabs root is a flex column, the overlay has real overflow, and wheel input increases the scroll position. Chromium and WebKit verify nested task-card controls do not activate the card and status movement completes through the visible save lifecycle |
| Workflow storage readiness | The release-PR workspace job exposed an `ENOENT` startup race between asynchronous workflow-directory creation and the first write. File-backed workflow operations now await the shared readiness promise; the complete optimistic-concurrency route test passes in ten consecutive isolated runs. |
| Dependency security | `pnpm audit --prod` and full `pnpm audit` report no known vulnerabilities after stale override floors were refreshed |
| Dependency PR CI | Build, lint/typecheck, security audit, affected-workspace tests, and unsigned macOS, Linux, and Windows packaging passed on #1155 |
| Consolidated candidate | Frozen install, production and full audits, package-manager policy, release formatting, lint and 592-warning budget, typecheck, build, 3,771 workspace tests, 37 Playwright cases across Chromium and WebKit, Mantine QA, CLI/MCP smoke, 50 Buzz compatibility tests, 67 desktop tests, seven readiness tests, unsigned macOS packaging, packaged-app smoke, and the 6.1.1 release validator pass. The local Docker build variant was unavailable because the Docker daemon was not running. Independent review is owner-directed and is not part of the active release SOP. |
## 6.1.0 Roadmap Release

View file

@ -1,8 +1,14 @@
# Veritas Kanban 6.1.0 Release Notes
# Veritas Kanban 6.1.1 Release Notes
Veritas Kanban 6.1.0 completes the agentic-control roadmap that followed the first stable v6 release. The release gives Buzz, Grok Build, OpenAI Codex, Claude Code, GitHub Copilot CLI, Hermes, and OpenClaw one provider-neutral control plane while retaining explicit transport and capability differences. It also adds governed knowledge collections, durable execution supervision, run-scoped network enforcement, safe workspace rewind, and resilient output handling.
Veritas Kanban 6.1.1 is a focused maintenance release for the agentic-control platform delivered in 6.1.0. It restores reliable Task Detail drawer scrolling after the Mantine tabs migration, adds browser-level regression coverage, updates the supported dependency set, and refreshes transitive security floors.
> Veritas Kanban 6.0.0 remains a quarantined prerelease. Version 6.1.0 supersedes 6.0.2 as the supported stable v6 release; signed assets and updater metadata are published.
> Veritas Kanban 6.0.0 remains a quarantined prerelease. Version 6.1.1 supersedes 6.1.0 as the supported stable v6 release after signed assets and updater metadata are published.
## 6.1.1 Maintenance Changes
Long Task Detail content is height-constrained and scrollable again. The regression gate verifies the shared overlay's flex-column layout, real overflow, and wheel-driven scroll movement in Chromium. Nested task-card controls no longer activate the card, preserving touch status selection in WebKit after the Mantine 9.5 update. File-backed workflow operations now await storage-directory readiness, preventing immediate startup requests from racing directory creation. The dependency maintenance pass updates supported minor and patch versions, adopts Chalk 6, and refreshes transitive override floors so production and full dependency audits report no known vulnerabilities.
jsdom 30 remains deferred in Dependabot because it exceeds the documented Node.js patch floor and breaks the current changed-test suite; jsdom 29 patch updates remain enabled. Version 6.1.1 does not change the storage schema, public REST API, provider contracts, configuration, or migration requirements from 6.1.0.
## Harness Support On Equal Footing
@ -51,11 +57,11 @@ For a first installation:
brew install --cask bradgroux/tap/veritas-kanban
```
Manual installation uses the signed and notarized macOS arm64 DMG or ZIP from the [v6.1.0 release](https://github.com/BradGroux/veritas-kanban/releases/tag/v6.1.0). Back up the complete stopped-writer workspace before upgrading and keep the backup until the new runtime is accepted.
Manual installation uses the signed and notarized macOS arm64 DMG or ZIP from the [v6.1.1 release](https://github.com/BradGroux/veritas-kanban/releases/tag/v6.1.1). Back up the complete stopped-writer workspace before upgrading and keep the backup until the new runtime is accepted.
## Breaking Changes And Migration Warnings
Veritas Kanban 6.1.0 advances SQLite through migrations 30 to 33 for knowledge collections and integrity operations. Rollback to an older schema requires restoring the stopped-writer pre-upgrade backup; do not open migrated data with an older binary.
Veritas Kanban 6.1.1 retains SQLite migrations 30 to 33 from 6.1.0. No new migration runs when upgrading from 6.1.0. Rollback to an older schema still requires restoring the stopped-writer pre-upgrade backup; do not open migrated data with an older binary.
The public REST API remains mounted at `v1`. Provider-less or adapter/profile-mismatched records do not fall through to OpenClaw. Unknown or changed provider builds lose certification until current probes and deterministic fixtures pass. Claude Code does not launch with `--dangerously-skip-permissions`. Credential-bound MCP servers remain available only through the mediated run-scoped bridge.
@ -67,7 +73,7 @@ Deterministic compatibility does not prove provider authentication, subscription
## Release Artifacts
The supported stable desktop release publishes signed and notarized `Veritas-Kanban-6.1.0-mac-arm64.dmg` and `Veritas-Kanban-6.1.0-mac-arm64.zip`, blockmaps, SHA-256 sidecars, and `latest-mac.yml` updater metadata from the annotated `v6.1.0` tag. Publication is complete only after GitHub assets, signature, Gatekeeper, stapling, updater, downloaded-app launch, and Homebrew installation have been verified.
The supported stable desktop release publishes signed and notarized `Veritas-Kanban-6.1.1-mac-arm64.dmg` and `Veritas-Kanban-6.1.1-mac-arm64.zip`, blockmaps, SHA-256 sidecars, and `latest-mac.yml` updater metadata from the annotated `v6.1.1` tag. Publication is complete only after GitHub assets, signature, Gatekeeper, stapling, updater, downloaded-app launch, and Homebrew installation have been verified.
## Documentation And Evidence

View file

@ -1,15 +1,15 @@
# Veritas Kanban v6 Upgrade, Install, Remote, And Admin Guide
This is the release-facing operator guide for Veritas Kanban 6.1.0. The
This is the release-facing operator guide for Veritas Kanban 6.1.1. The
detailed provider commands live in [Agent Providers](AGENT-PROVIDERS.md), the
machine-readable support contract is summarized in
[Harness Compatibility](HARNESS-COMPATIBILITY.md), and Buzz relay setup lives
in [Buzz Integration](BUZZ-INTEGRATION.md).
Documentation freshness: 2026-07-26 for Veritas Kanban 6.1.0.
Documentation freshness: 2026-08-22 for Veritas Kanban 6.1.1.
Do not install 6.0.0. It is retained as a quarantined prerelease. Version 6.1.0
is the current supported stable v6 build and supersedes 6.0.2.
Do not install 6.0.0. It is retained as a quarantined prerelease. Version 6.1.1
is the current supported stable v6 build and supersedes 6.1.0.
## Fresh Mac Desktop Install
@ -21,8 +21,8 @@ brew install --cask veritas-kanban
```
Manual installation uses
`Veritas-Kanban-6.1.0-mac-arm64.zip` from the
[v6.1.0 GitHub release](https://github.com/BradGroux/veritas-kanban/releases/tag/v6.1.0).
`Veritas-Kanban-6.1.1-mac-arm64.zip` from the
[v6.1.1 GitHub release](https://github.com/BradGroux/veritas-kanban/releases/tag/v6.1.1).
Move `Veritas Kanban.app` into `/Applications`, launch it normally, and verify
Settings -> Maintenance before enabling an agent or external integration.
@ -30,7 +30,7 @@ For a new board:
1. Choose Board Only unless agent execution is required immediately.
2. Create the local admin password and retain the recovery key securely.
3. Confirm `/api/health` reports version 6.1.0.
3. Confirm `/api/health` reports version 6.1.1.
4. Create a governed backup before adding external credentials or relay
mappings.
@ -58,14 +58,14 @@ equivalent v5.2.5 self-hosted workspace.
preferred port are stopped before copying data.
5. Preserve the complete workspace, not only the SQLite file. Keep the backup
through release acceptance.
6. Install v6.1.0 without replacing the workspace.
6. Install v6.1.1 without replacing the workspace.
7. Launch with the same profile. If setup appears for a populated database,
choose **Use Existing Data**. Do not rerun file migration or restore over the
populated database.
8. Wait for the exact-version readiness gate:
```bash
EXPECTED_VERSION=6.1.0
EXPECTED_VERSION=6.1.1
pnpm desktop:wait:ready -- --expected-version "$EXPECTED_VERSION"
```
@ -82,8 +82,8 @@ The public API remains `v1`. v6 adds provider, approval, lifecycle, tool,
credential, compatibility, Buzz, and conformance records without requiring a
new API mount.
Veritas Kanban 6.1.0 advances the SQLite workspace through migrations 30 to 33
for knowledge collections and integrity operations. Keep the stopped-writer
Veritas Kanban 6.1.1 retains the SQLite workspace migrations 30 to 33 from
6.1.0. Keep the stopped-writer
backup until collection, task, workflow, provider, and board data have been
accepted. Rollback to an older schema requires restoring that backup; do not
open migrated data with an older binary.

View file

@ -1,6 +1,6 @@
# Veritas Kanban v6 Agent Runtime Control Plane
This document defines the supported v6.1.0 architecture for executable agent
This document defines the supported v6.1.1 architecture for executable agent
harnesses and Buzz integration. It is the version-level composition of the
individual contract documents for
[ACP](ACP-PROVIDER-V1.md),
@ -9,7 +9,7 @@ individual contract documents for
[tool control](TOOL-CONTROL-PLANE-V1.md), and
[runtime hooks](RUNTIME-HOOK-V1.md).
Documentation freshness: 2026-07-26 for Veritas Kanban 6.1.0.
Documentation freshness: 2026-08-22 for Veritas Kanban 6.1.1.
## Authority Model

View file

@ -844,7 +844,7 @@ Configure telemetry retention in `server/.env`:
| Component | Version | Notes |
| ------------------ | ------------ | --------------------------- |
| MCP server package | `6.1.0` | Matches VK server version |
| MCP server package | `6.1.1` | Matches VK server version |
| MCP SDK | `1.29.0` | `@modelcontextprotocol/sdk` |
| MCP protocol | `2025-11-25` | Latest stable spec |
| Node.js | `≥ 22` | Matches the repo runtime |
@ -888,4 +888,4 @@ The `findTask` utility matches the last N characters of a task ID (minimum 6). I
---
_Last updated: 2026-07-26 · VK v6.1.0 · 42 tools / 9 categories_
_Last updated: 2026-08-22 · VK v6.1.1 · 42 tools / 9 categories_

40
docs/releases/v6.1.1.md Normal file
View file

@ -0,0 +1,40 @@
Veritas Kanban 6.1.1 restores reliable scrolling in long Task Detail drawers after the Mantine tabs migration and completes a security-audited dependency maintenance pass. It is a drop-in patch release for 6.1.0 with no schema, API, configuration, or migration changes.
## Task Detail scrolling
Long Task Detail content is constrained to the available drawer height again, and the shared overlay scroll region receives wheel input normally. A Chromium regression now verifies the Mantine tabs root layout, real content overflow, and an actual scroll-position change so this contract is covered beyond component-level rendering.
Interactive controls inside task cards no longer activate the card itself. This restores touch status selection in WebKit after the Mantine 9.5 update. Status-move browser checks now wait for the visible save contract before closing Task Detail, matching the user-facing lifecycle instead of racing the completed network response.
File-backed workflow operations now wait for their storage directory to be ready before reading or writing. This removes a startup race that could make an immediate first workflow request fail with `ENOENT`.
Thanks to Matt Ezell for reporting the regression and contributing the focused CSS correction in #1153 and #1154.
## Dependency maintenance and security
The workspace minor and patch dependency set is current as of this release, with Chalk 6 adopted separately after runtime compatibility review. Stale transitive override floors for body-parser, fast-uri, js-yaml, nanoid, tar, undici, and related packages were refreshed. Both production-only and full `pnpm audit` checks complete with no known vulnerabilities.
The jsdom 30 proposal was intentionally not included because it requires Node.js 22.22.2 while this release retains the documented Node.js 22.22.1 floor, and it caused 65 changed-test failures. Dependabot will continue offering jsdom 29 patches but defer major updates until the runtime floor and UI environment are deliberately migrated. The floating `pnpm/action-setup@v6` workflow reference already resolves to 6.0.9, so no workflow edit was necessary.
## Install or upgrade
Back up the complete stopped-writer workspace before upgrading and keep the backup until the new runtime is accepted.
```bash
brew update
brew upgrade --cask bradgroux/tap/veritas-kanban
```
For a first installation:
```bash
brew install --cask bradgroux/tap/veritas-kanban
```
The Assets section provides the signed and notarized macOS arm64 DMG and ZIP after the release workflow completes. Linux and Windows artifacts remain unsigned verification previews.
## Compatibility and documentation
Version 6.1.1 retains the 6.1.0 storage schema, public REST API `v1`, provider contracts, configuration, and supported runtime policy. No data migration is required when upgrading from 6.1.0.
See the [full release notes](https://github.com/BradGroux/veritas-kanban/blob/v6.1.1/docs/V6-RELEASE-NOTES.md), [upgrade guide](https://github.com/BradGroux/veritas-kanban/blob/v6.1.1/docs/V6-UPGRADE-INSTALL-ADMIN-GUIDE.md), [compatibility policy](https://github.com/BradGroux/veritas-kanban/blob/v6.1.1/docs/V6-COMPATIBILITY-AND-RELEASE-POLICY.md), and [changelog](https://github.com/BradGroux/veritas-kanban/blob/v6.1.1/CHANGELOG.md).

View file

@ -582,7 +582,7 @@ test.describe('v5 Mantine migration QA gate', () => {
await assertMobileTouchTargets(page);
await assertNoLegacyPrimitiveSlots(page);
await attachViewportScreenshot(page, testInfo, 'mobile-task-detail', 'dark');
await page.keyboard.press('Escape');
await page.getByRole('button', { name: 'Close task details' }).click();
await expect(page.getByRole('dialog')).not.toBeVisible({ timeout: 5_000 });
await page.getByRole('button', { name: 'Mobile settings', exact: true }).click();

View file

@ -0,0 +1,46 @@
import { test, expect } from '@playwright/test';
import { bypassAuth, cleanupRoutes, deleteTask, seedTestTask } from './helpers/auth';
test('long task detail content remains constrained and scrollable', async ({ page }) => {
await bypassAuth(page);
const task = await seedTestTask(page, {
title: 'E2E Scroll Regression Task',
description: Array.from(
{ length: 120 },
(_, index) => `Scroll regression paragraph ${index + 1}`
).join('\n\n'),
status: 'todo',
});
try {
await page.goto('/');
await page.getByText('E2E Scroll Regression Task').first().click();
const detailPanel = page.getByRole('dialog');
const tabsRoot = detailPanel.locator('.mantine-Tabs-root').first();
const scrollPanel = detailPanel.locator('.veritas-overlay-scroll').first();
await expect(tabsRoot).toHaveCSS('display', 'flex');
await expect(tabsRoot).toHaveCSS('flex-direction', 'column');
const dimensions = await scrollPanel.evaluate((element) => ({
clientHeight: element.clientHeight,
scrollHeight: element.scrollHeight,
}));
expect(dimensions.clientHeight).toBeLessThan(dimensions.scrollHeight);
const scrollBox = await scrollPanel.boundingBox();
expect(scrollBox).not.toBeNull();
await page.mouse.move(
scrollBox!.x + scrollBox!.width - 4,
scrollBox!.y + scrollBox!.height / 2
);
await page.mouse.wheel(0, 600);
await expect
.poll(() => scrollPanel.evaluate((element) => element.scrollTop))
.toBeGreaterThan(0);
} finally {
await deleteTask(page, (task as { id: string }).id).catch(() => {});
await cleanupRoutes(page);
}
});

View file

@ -58,9 +58,11 @@ test.describe('Task Status Change', () => {
// Ensure the PATCH succeeded
expect(patchResponse.status()).toBeLessThan(400);
await expect(statusTrigger).toHaveValue('In Progress');
await expect(detailPanel.getByText('Saving...')).not.toBeVisible({ timeout: 5_000 });
// Close the detail panel
await page.keyboard.press('Escape');
await detailPanel.getByRole('button', { name: 'Close task details' }).click();
await expect(detailPanel).not.toBeVisible({ timeout: 3_000 });
// Wait for the task to move to the In Progress column
@ -112,9 +114,12 @@ test.describe('Task Status Change', () => {
]);
expect(patchResponse.status()).toBeLessThan(400);
await expect(statusTrigger).toHaveValue('Done');
await expect(detailPanel.getByText('Saving...')).not.toBeVisible({ timeout: 5_000 });
// Close panel
await page.keyboard.press('Escape');
await detailPanel.getByRole('button', { name: 'Close task details' }).click();
await expect(detailPanel).not.toBeVisible({ timeout: 3_000 });
// Verify the task moved to Done
const doneCol = page.getByRole('region', { name: 'Done' });

View file

@ -1,6 +1,6 @@
{
"name": "@veritas-kanban/mcp",
"version": "6.1.0",
"version": "6.1.1",
"description": "MCP server for Veritas Kanban",
"type": "module",
"main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{
"name": "veritas-kanban",
"version": "6.1.0",
"version": "6.1.1",
"private": true,
"description": "Local-first task management and AI agent orchestration platform",
"author": "Brad Groux <brad@digitalmeld.io>",

View file

@ -14,7 +14,7 @@ Copy/paste prompt templates for AI agents working with Veritas Kanban.
| ------------------------------------------------ | --------------------------------------- |
| [sprint-planning.md](sprint-planning.md) | Break down epics into sprints and tasks |
| [worker-handoff.md](worker-handoff.md) | PM → Worker task assignment |
| [cross-model-review.md](cross-model-review.md) | Claude ↔ GPT code review |
| [cross-model-review.md](cross-model-review.md) | Optional independent code review |
| [feature-development.md](feature-development.md) | End-to-end feature implementation |
| [bug-triage.md](bug-triage.md) | Issue investigation and fix |
| [research-report.md](research-report.md) | Deep research deliverable |

View file

@ -1,10 +1,10 @@
# Cross-Model Code Review Prompt
# Optional Independent Code Review Prompt
Use this when a task or configured governance policy explicitly requires an
opposite-model review.
Use this when a task or configured governance policy explicitly requests an
independent review. The reviewer may use any suitable model or human review
path.
This prompt is optional unless the task, issue owner, release owner, or review
gate says otherwise.
This prompt is not part of the default delivery SOP or release gate.
---
@ -65,4 +65,4 @@ If no issues found, respond: "✅ Code review passed — no issues found."
## Reference
See RF-002 cross-model audit for validation of this approach (91% accuracy).
See RF-002 for historical validation of this optional review approach.

View file

@ -1,6 +1,6 @@
{
"name": "@veritas-kanban/server",
"version": "6.1.0",
"version": "6.1.1",
"private": true,
"type": "module",
"main": "./dist/index.js",

View file

@ -1,4 +1,4 @@
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import fs from 'fs/promises';
import os from 'os';
import path from 'path';
@ -72,6 +72,23 @@ describe('WorkflowService', () => {
expect((await service.loadWorkflow('demo-workflow'))?.name).toBe('Changed Name');
});
it('waits for directory creation before the first file operation', async () => {
const nestedDir = path.join(tmpDir, 'not-created-yet');
const originalMkdir = fs.mkdir.bind(fs);
const mkdirSpy = vi.spyOn(fs, 'mkdir').mockImplementationOnce(async (...args) => {
await new Promise((resolve) => setTimeout(resolve, 25));
return originalMkdir(...args);
});
try {
const freshService = new WorkflowService(nestedDir);
await expect(freshService.saveWorkflow(workflow() as any)).resolves.toBeUndefined();
await expect(fs.access(path.join(nestedDir, 'demo-workflow.yml'))).resolves.toBeUndefined();
} finally {
mkdirSpy.mockRestore();
}
});
it('lists workflow definitions and metadata from valid workflow files', async () => {
await service.saveWorkflow(workflow() as any);
await service.saveWorkflow(

View file

@ -33,6 +33,7 @@ export class WorkflowService {
private readonly repository: SqliteWorkflowDefinitionRepository | null = null;
private readonly sqliteDatabase: SqliteDatabase | null = null;
private readonly ownsSqliteDatabase: boolean = false;
private readonly directoriesReady: Promise<void>;
constructor(options: string | WorkflowServiceOptions = {}) {
const resolvedOptions = typeof options === 'string' ? { workflowsDir: options } : options;
@ -50,7 +51,9 @@ export class WorkflowService {
}
if (!this.repository) {
this.ensureDirectories();
this.directoriesReady = this.ensureDirectories();
} else {
this.directoriesReady = Promise.resolve();
}
}
@ -98,6 +101,8 @@ export class WorkflowService {
return workflow;
}
await this.directoriesReady;
const filePath = path.join(this.workflowsDir, `${normalizedId}.yml`);
try {
@ -136,6 +141,8 @@ export class WorkflowService {
return workflows;
}
await this.directoriesReady;
const files = await fs.readdir(this.workflowsDir).catch(() => []);
const workflows: WorkflowDefinition[] = [];
@ -166,6 +173,8 @@ export class WorkflowService {
return metadata;
}
await this.directoriesReady;
const files = await fs.readdir(this.workflowsDir).catch(() => []);
const metadata: Array<Pick<WorkflowDefinition, 'id' | 'name' | 'version' | 'description'>> = [];
@ -216,6 +225,8 @@ export class WorkflowService {
return;
}
await this.directoriesReady;
const filePath = path.join(this.workflowsDir, `${normalizedId}.yml`);
// Check if this is a new workflow (not an update)
@ -255,6 +266,8 @@ export class WorkflowService {
return;
}
await this.directoriesReady;
const filePath = path.join(this.workflowsDir, `${normalizedId}.yml`);
await fs.unlink(filePath);
this.cache.delete(normalizedId);
@ -398,6 +411,8 @@ export class WorkflowService {
return this.repository.getAcl(workflowId);
}
await this.directoriesReady;
const aclPath = path.join(this.workflowsDir, '.acl.json');
try {
@ -420,6 +435,8 @@ export class WorkflowService {
return;
}
await this.directoriesReady;
const aclPath = path.join(this.workflowsDir, '.acl.json');
let acls: Record<string, WorkflowACL> = {};
@ -448,6 +465,8 @@ export class WorkflowService {
return;
}
await this.directoriesReady;
const auditPath = path.join(this.workflowsDir, '.audit.jsonl');
const line = JSON.stringify(event) + '\n';
await fs.appendFile(auditPath, line, 'utf-8');

View file

@ -1,6 +1,6 @@
{
"name": "@veritas-kanban/shared",
"version": "6.1.0",
"version": "6.1.1",
"private": true,
"type": "module",
"main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{
"name": "@veritas-kanban/web",
"version": "6.1.0",
"version": "6.1.1",
"private": true,
"type": "module",
"scripts": {

View file

@ -239,7 +239,7 @@ export const TaskCard = memo(function TaskCard({
}
: undefined;
const handleClick = () => {
const activateCard = () => {
if (isCurrentlyDragging || isDragging) return;
setTooltipDismissed(true);
if (isSelecting) {
@ -249,6 +249,17 @@ export const TaskCard = memo(function TaskCard({
onClick?.();
};
const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {
const target = event.target;
if (
target instanceof Element &&
target.closest('a, button, input, select, textarea, [role="button"], [role="combobox"]')
) {
return;
}
activateCard();
};
const handleKeyDown = (e: React.KeyboardEvent) => {
if (dragEnabled && e.key === ' ') {
listeners?.onKeyDown?.(e);
@ -256,7 +267,7 @@ export const TaskCard = memo(function TaskCard({
}
if (e.key === 'Enter' || (!dragEnabled && e.key === ' ')) {
e.preventDefault();
handleClick();
activateCard();
}
};