mirror of
https://github.com/BradGroux/veritas-kanban.git
synced 2026-08-28 02:44:59 +00:00
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:
parent
ab61456774
commit
2cfb89396d
32 changed files with 308 additions and 78 deletions
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
||||
|
|
|
|||
34
CHANGELOG.md
34
CHANGELOG.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Start with a visual Kanban board. Add CLI, MCP, OpenClaw, Squad Chat webhooks, w
|
|||
|
||||
[](https://github.com/BradGroux/veritas-kanban/actions/workflows/ci.yml)
|
||||
[](LICENSE)
|
||||
[](CHANGELOG.md)
|
||||
[](CHANGELOG.md)
|
||||
[](https://www.typescriptlang.org/)
|
||||
[](CONTRIBUTING.md)
|
||||
|
||||
|
|
|
|||
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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`)
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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. |
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
40
docs/releases/v6.1.1.md
Normal 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).
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
46
e2e/task-detail-scroll-regression.spec.ts
Normal file
46
e2e/task-detail-scroll-regression.spec.ts
Normal 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);
|
||||
}
|
||||
});
|
||||
|
|
@ -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' });
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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>",
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@veritas-kanban/server",
|
||||
"version": "6.1.0",
|
||||
"version": "6.1.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@veritas-kanban/shared",
|
||||
"version": "6.1.0",
|
||||
"version": "6.1.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@veritas-kanban/web",
|
||||
"version": "6.1.0",
|
||||
"version": "6.1.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue