Commit graph

305 commits

Author SHA1 Message Date
Brad Groux
70c8c06e56
docs: v4.0 documentation update and cleanup (closes #229) (#230)
v4.0 docs update: CHANGELOG, README, FEATURES, API-REFERENCE, 11 new SOPs, MCP docs, version bumps to 4.0.0, docs cleanup. Closes #229.
2026-03-21 12:20:16 -05:00
Brad Groux
7868a92bea
fix: squad chat panel not scrollable (#224) (#225)
Add min-h-0 to ScrollArea in flex column layout. Without it,
flex-1 items default to min-height:auto which prevents the
container from shrinking below content size, breaking overflow
scroll.

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-21 11:23:52 -05:00
Brad Groux
415a095d31
feat: Prompt Template Registry with Version Control (#184) (#220)
* feat: prompt template registry with version control (#184)

- Add PromptTemplate, PromptVersion, PromptUsage, PromptStats types
- Implement prompt-registry service with full CRUD, versioning, and usage tracking
- Add prompt-registry REST endpoints with preview rendering and statistics
- Create React Query hooks (usePromptTemplates, usePromptStats, etc.)
- Implement multi-tab PromptRegistry component with Templates, Versions, Usage, Stats, Preview tabs
- Add INTEGRATION.md documenting manual merge points for existing files
- Supports variable interpolation {{variable_name}} and changelog tracking
- File-based storage pattern consistent with existing template system

* fix: export prompt-registry types from shared barrel

* fix: handle optional changelog in prompt version

* fix: handle optional content field in version creation

* fix: remove unused imports and variables in prompt registry

* fix: remove all unused imports in prompt registry web files

* ci: trigger checks (retry)

---------

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-21 11:16:59 -05:00
Brad Groux
65e9ca21cd
feat: Draggable & Resizable Dashboard Widget Grid (#183) (#223)
* feat: draggable & resizable dashboard widget grid (#183)

* feat: draggable & resizable dashboard widget grid (#183)

---------

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-21 11:14:37 -05:00
Brad Groux
d0a2ee4922
feat: Global System Health Status Bar (#185) (#221)
* feat: global system health status bar (#185)

* fix: export system-health types from shared barrel

---------

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-21 11:12:04 -05:00
Brad Groux
4e6d331a33
feat: User Feedback Loop with Sentiment Analytics (#182) (#222)
* feat: user feedback loop with sentiment analytics (#182)

* fix: export feedback types from shared barrel

* fix: TS errors in feedback panel and API client

* fix: tooltip formatter type compatibility

* ci: retry flaky test

---------

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-21 10:56:36 -05:00
dependabot[bot]
7e08df8cff
chore: bump vite from 7.3.1 to 8.0.0 (#204)
* chore: bump vite from 7.3.1 to 8.0.0

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.1 to 8.0.0.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.0.0/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: convert manualChunks to function for Vite 8/Rolldown

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Brad Groux <3053586+BradGroux@users.noreply.github.com>
2026-03-21 10:06:38 -05:00
Brad Groux
b297bfdd95
chore: upgrade shadcn/ui components to v4 (#219)
* chore: upgrade shadcn/ui components to v4 CLI compatibility (closes #186)

- Update 16 registry components to v4 API (function components, data-slot, radix-ui unified import)
- Migrate components.json style from new-york to radix-nova with new v4 fields (rtl, menuColor, menuAccent)
- Convert CSS variables from HSL to oklch color format with @theme inline block for Tailwind v4
- Preserve VK custom purple accent (primary/ring) in dark mode: oklch(0.389 0.15 303.5)
- Add new dependencies: radix-ui, shadcn, tw-animate-css, @fontsource-variable/geist
- Add WCAG accessibility rules, reduced-motion and focus-visible in consolidated @layer base
- Update docs/SHADCN-V4.md with v4 migration details and oklch theme reference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: revert font stack to system-ui/Roboto per review

Removes Geist Variable font and restores the original system font stack
as requested by BradGroux. Also adds missing trailing newline to globals.css.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: francois352 <francois@neurofeedback-luxembourg.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 09:58:24 -05:00
Brad Groux
45cfc822e4
feat: Behavioral Drift Detection & Alerting (#181) (#218)
* Implement drift detection and alerting

* fix: correct type predicate in drift service filter

* fix: resolve DriftMonitor formatter type and DriftAlertFilters cast

* fix: add rm export to fs-helpers for drift-service cleanup

* ci: trigger workflow

* chore: trigger ci

* fix: ViewContext union syntax error

* fix: add rm to docker-paths test node:fs/promises mock

---------

Co-authored-by: bradgroux <bradgroux@users.noreply.github.com>
2026-03-21 09:33:34 -05:00
Brad Groux
ac64785326
feat: Decision Audit Trail with Assumption Tracking (#179) (#216)
* feat: add decision audit trail with assumption tracking

* fix: mock node:fs/promises in tests for fs-helpers compat

* fix: add full fs/promises mock in docker-paths test

* fix: add mkdir to node:fs/promises mock in jwt-rotation test

* ci: trigger workflow

* chore: trigger ci

* fix: ViewContext union syntax, expand fs/promises mock

---------

Co-authored-by: bradgroux <bradgroux@users.noreply.github.com>
2026-03-21 09:28:35 -05:00
Brad Groux
50f76f811a
feat: Agent Output Evaluation & Scoring Framework (#180) (#217)
* Implement scoring evaluation framework

* fix: resolve TypeScript errors in ScoreExplorer component

---------

Co-authored-by: bradgroux <brad@digitalmeld.io>
Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-21 09:13:24 -05:00
Brad Groux
1a2476257e
feat: Agent Policy & Guard Engine (#178) (#215)
* Implement policy guard engine for agent actions

* fix: wrap policy routes with asyncHandler for type safety

* fix: prevent unhandled rejection race in security test cleanup

---------

Co-authored-by: bradgroux <bradgroux@users.noreply.github.com>
2026-03-21 09:03:01 -05:00
Brad Groux
adbcfc930b
fix: resolve TypeScript build errors (#177)
- Add RunMode type and QaGateState interface to shared task.types.ts
- Add runMode and qaGate optional fields to Task and UpdateTaskInput interfaces
- Mirror changes in shared/src/types/task.types.d.ts (used by web bundler)
- Add RunModeGateSection.tsx component (was untracked, causing web build failure)
- Add qa-gate.test.ts and dependency-cycle.test.ts (untracked test files)

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-19 22:09:46 -05:00
dependabot[bot]
afbbf6e064
chore: bump jsdom from 28.1.0 to 29.0.0 (#203)
Bumps [jsdom](https://github.com/jsdom/jsdom) from 28.1.0 to 29.0.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/v29.0.0/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/v28.1.0...v29.0.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 29.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 19:48:25 -05:00
dependabot[bot]
f533772d16
chore: bump the production-dependencies group with 10 updates (#199)
Bumps the production-dependencies group with 10 updates:

| Package | From | To |
| --- | --- | --- |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.3.3` | `25.4.0` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.56.1` | `8.57.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.56.1` | `8.57.0` |
| [lint-staged](https://github.com/lint-staged/lint-staged) | `16.3.1` | `16.3.2` |
| [file-type](https://github.com/sindresorhus/file-type) | `21.3.0` | `21.3.1` |
| [@types/multer](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/multer) | `2.0.0` | `2.1.0` |
| [@types/sanitize-html](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/sanitize-html) | `2.16.0` | `2.16.1` |
| [dompurify](https://github.com/cure53/DOMPurify) | `3.3.1` | `3.3.2` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.576.0` | `0.577.0` |
| [recharts](https://github.com/recharts/recharts) | `3.7.0` | `3.8.0` |


Updates `@types/node` from 25.3.3 to 25.4.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.56.1 to 8.57.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.56.1 to 8.57.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/parser)

Updates `lint-staged` from 16.3.1 to 16.3.2
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v16.3.1...v16.3.2)

Updates `file-type` from 21.3.0 to 21.3.1
- [Release notes](https://github.com/sindresorhus/file-type/releases)
- [Commits](https://github.com/sindresorhus/file-type/compare/v21.3.0...v21.3.1)

Updates `@types/multer` from 2.0.0 to 2.1.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/multer)

Updates `@types/sanitize-html` from 2.16.0 to 2.16.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/sanitize-html)

Updates `dompurify` from 3.3.1 to 3.3.2
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.3.1...3.3.2)

Updates `lucide-react` from 0.576.0 to 0.577.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.577.0/packages/lucide-react)

Updates `recharts` from 3.7.0 to 3.8.0
- [Release notes](https://github.com/recharts/recharts/releases)
- [Changelog](https://github.com/recharts/recharts/blob/main/CHANGELOG.md)
- [Commits](https://github.com/recharts/recharts/compare/v3.7.0...v3.8.0)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.57.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.57.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: lint-staged
  dependency-version: 16.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: file-type
  dependency-version: 21.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@types/multer"
  dependency-version: 2.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@types/sanitize-html"
  dependency-version: 2.16.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: dompurify
  dependency-version: 3.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: lucide-react
  dependency-version: 0.577.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: recharts
  dependency-version: 3.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 19:24:54 -05:00
Brad Groux
2afff60cc8 fix: resolve CI type errors in useTasks-patchCache test
- Widen assertPatchOnly hookFn parameter to accept any mutation hook return type
  instead of narrowly typing to useAddSubtask's signature
- Add explicit type annotation for 'call' parameter (TS7006)
- Update multer 2.1.0→2.1.1, express-rate-limit 8.2.1→8.2.2,
  hono 4.12.3→4.12.4+, @hono/node-server 1.19.9→1.19.10+,
  @modelcontextprotocol/sdk to resolve 4 high severity audit findings
2026-03-09 13:14:50 -05:00
Francois Altwies
678689299a
feat: add global system health status bar (#185) (#195)
Aggregate system, agent, and operations health signals into a single
status bar displayed below the header. The bar shows one of five states
(stable/reviewing/drifting/elevated/alert) with color-coded indicators
and expands on click to show per-signal details.

Backend: GET /api/v1/system/health aggregates storage/disk/memory checks,
agent registry stats, and 24h run metrics into a unified response.

Frontend: SystemHealthBar component with useSystemHealth hook polling
via @tanstack/react-query (30s connected, 60s disconnected).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 07:42:35 -05:00
Francois Altwies
9625009c39
feat(web): support sub-path deployment via VITE_BASE_PATH (#189)
* feat(web): support deployment under a sub-path (VITE_BASE_PATH)

Enable deploying Veritas Kanban behind a reverse proxy under a sub-path
(e.g., /kanban/) without code modifications.

Changes:
- Dockerfile: add VITE_BASE_PATH build arg (default: /)
- vite.config.ts: set `base` from VITE_BASE_PATH
- config.ts: derive API_BASE from Vite's BASE_URL
- helpers.ts: prefix absolute URLs in apiFetch with BASE_URL
- useWebSocket.ts: include base path in default WS URL
- SecurityTab.tsx: prefix auth reset URL with BASE_URL

Usage:
  docker build --build-arg VITE_BASE_PATH=/kanban/ -t veritas-kanban .

The reverse proxy should strip the prefix before forwarding to the
server (e.g., Traefik StripPrefix, nginx proxy_pass with trailing /).

Note: Some components use raw fetch('/api/...') instead of apiFetch().
These should be migrated incrementally — apiFetch now handles the
prefix automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web): migrate remaining raw fetch calls to use API_BASE

Replace hardcoded fetch('/api/...') with fetch(`${API_BASE}/...`)
in 9 component files that were bypassing the base path config:

- ExportDialog (telemetry export)
- DelegationTab (delegation CRUD)
- ToolPoliciesTab (policy save/delete)
- DependenciesSection (dependency management)
- WorkflowSection (workflow status)
- TaskDetailsTab (task creation)
- WorkflowRunList (run listing)
- WorkflowRunView (run details + resume)
- WorkflowsPage (workflow listing + run start)

This ensures all API calls respect VITE_BASE_PATH for sub-path
deployments (e.g., /kanban/).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 07:42:14 -05:00
BradGroux
c8ee5004cd fix(web): eliminate 11 redundant full-list refetches from detail mutations
Detail-level mutations (subtasks, comments, observations, verification
steps) previously called invalidateQueries(['tasks']) on success, which
triggered a full GET /api/tasks re-fetch — even though the mutation
response already contained the complete updated task.

Replaced with patchTaskInCaches() helper that does an in-place cache
update of both the list cache (['tasks']) and individual task cache
(['tasks', id]). The existing polling interval and WebSocket events
still handle eventual consistency for multi-client scenarios.

Affected hooks (11 total):
- useAddSubtask, useUpdateSubtask, useDeleteSubtask
- useToggleSubtaskCriteria
- useAddComment, useEditComment, useDeleteComment
- useAddObservation, useDeleteObservation
- useAddVerificationStep, useUpdateVerificationStep, useDeleteVerificationStep

Added 12 regression tests verifying each mutation patches the cache
without triggering full-list invalidation.

All 95 tests pass (83 existing + 12 new).
2026-03-05 22:50:03 -06:00
dependabot[bot]
b88eb8d46d
chore: bump the production-dependencies group with 4 updates (#172)
Bumps the production-dependencies group with 4 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [lint-staged](https://github.com/lint-staged/lint-staged), [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) and [postcss](https://github.com/postcss/postcss).


Updates `@types/node` from 25.3.2 to 25.3.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `lint-staged` from 16.3.0 to 16.3.1
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v16.3.0...v16.3.1)

Updates `lucide-react` from 0.575.0 to 0.576.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.576.0/packages/lucide-react)

Updates `postcss` from 8.5.6 to 8.5.8
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.6...8.5.8)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: lint-staged
  dependency-version: 16.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: lucide-react
  dependency-version: 0.576.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: postcss
  dependency-version: 8.5.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 00:45:58 -06:00
BradGroux
0b14f27488 chore(release): bump version to 3.3.3
Patch correction release delivering:
- fix(stability): Complete Zod 4 API migration (#162)
- fix(security): SSRF protection for webhook URLs (#165)
- perf(websocket): Batch broadcasts to prevent event loop blocking (#167)
- feat: Orchestrator Delegation Enforcement gate
- feat: Enforcement Gate Toast Notifications
- feat: Dashboard Enforcement Indicator
2026-03-01 14:00:13 -06:00
Brad Groux
112da181c8
fix(stability): Complete Zod 4 API migration (#162)
* fix(stability): complete Zod 4 API migration

BREAKING CHANGE: Migrated from Zod 3 to Zod 4 API patterns

Changes:
- Replace ZodError.errors with ZodError.issues (Zod 4 API)
- Update z.record(valueSchema) to z.record(z.string(), valueSchema)
- Fix env.ts schema defaults to use correct types (numbers/booleans)
- Replace required_error with message in Zod schemas

This resolves 50+ TypeScript compilation errors that were blocking
CI/CD and potentially causing runtime issues.

Fixes: type checking errors in server and web packages
Risk: Low - straightforward API migration with full test coverage

* fix(zod4): use string defaults for transform/pipe schemas

Zod v4 changed .default() to require the input type (string) rather
than the output type. Fixed PORT, VERITAS_AUTH_ENABLED,
VERITAS_AUTH_LOCALHOST_BYPASS, CSP_REPORT_ONLY, and RATE_LIMIT_MAX
to pass string defaults to their respective portSchema / booleanString
/ positiveIntString coercing schemas.

---------

Co-authored-by: BradGroux <super.seth.vos@gmail.com>
2026-03-01 13:52:49 -06:00
BradGroux
bd46ffb31a chore(release): v3.3.2
- Bump all package versions to 3.3.2
- Update CHANGELOG with #155 (task↔agent sync), #156 (circuit breaker tests), #159 (sync auth hardening), #161 (sprint CLI+MCP)
- Update README version badge to 3.3.2
2026-03-01 13:08:51 -06:00
supersethvos
8c4eb42d76
feat(sync): task↔agent state sync + reconciliation (#155)
* feat(sync): implement task↔agent state sync with reconciliation and flap guard

* fix(sync): add sync auth context, ref validation, and reconcile bounds

---------

Co-authored-by: SETH VOS <sethai@SETHs-Mac-mini.lan>
2026-03-01 12:05:23 -06:00
Brad Groux
0d7dfb135c chore: release v3.3.1 2026-02-28 09:57:48 -06:00
dependabot[bot]
12478768cc
chore: bump the production-dependencies group across 1 directory with 8 updates (#154)
Bumps the production-dependencies group with 8 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.3.0` | `25.3.2` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.56.0` | `8.56.1` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.56.0` | `8.56.1` |
| [lint-staged](https://github.com/lint-staged/lint-staged) | `16.2.7` | `16.3.0` |
| [multer](https://github.com/expressjs/multer) | `2.0.2` | `2.1.0` |
| [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) | `3.32.1` | `3.32.3` |
| [autoprefixer](https://github.com/postcss/autoprefixer) | `10.4.24` | `10.4.27` |
| [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) | `1.26.0` | `1.27.1` |

Updates `@types/node` from 25.3.0 to 25.3.2
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@typescript-eslint/eslint-plugin` from 8.56.0 to 8.56.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.1/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.56.0 to 8.56.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.1/packages/parser)

Updates `lint-staged` from 16.2.7 to 16.3.0
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v16.2.7...v16.3.0)

Updates `multer` from 2.0.2 to 2.1.0
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/expressjs/multer/compare/v2.0.2...v2.1.0)

Updates `simple-git` from 3.32.1 to 3.32.3
- [Release notes](https://github.com/steveukx/git-js/releases)
- [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md)
- [Commits](https://github.com/steveukx/git-js/commits/simple-git@3.32.3/simple-git)

Updates `autoprefixer` from 10.4.24 to 10.4.27
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.24...10.4.27)

Updates `@modelcontextprotocol/sdk` from 1.26.0 to 1.27.1
- [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases)
- [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.26.0...v1.27.1)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.56.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.56.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: lint-staged
  dependency-version: 16.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: multer
  dependency-version: 2.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: simple-git
  dependency-version: 3.32.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: autoprefixer
  dependency-version: 10.4.27
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@modelcontextprotocol/sdk"
  dependency-version: 1.27.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 09:50:16 -06:00
dependabot[bot]
2fb6f6c5a6
chore: bump tailwindcss from 3.4.19 to 4.2.1 (#149)
* chore: bump tailwindcss from 3.4.19 to 4.2.1

Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 3.4.19 to 4.2.1.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.2.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: migrate to Tailwind CSS v4 Vite plugin

- Replace postcss.config.js with @tailwindcss/vite plugin
- Update CSS to use @import 'tailwindcss' syntax
- Reference existing config via @config directive
- Add type assertion for Vite plugin compatibility

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Brad Groux <bradgroux@Brads-Mac-mini.local>
2026-02-28 09:20:52 -06:00
dependabot[bot]
33c3429f92
chore: bump vite from 6.4.1 to 7.3.1 (#148)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.1 to 7.3.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 09:08:25 -06:00
V.K. Watson
50dfff84ef revert: restore port 3001 across codebase, keep Express 5 path fix
Reverts port change from 1b7a9fe. OpenClaw gateway will move off 3001 instead.
2026-02-20 21:12:49 -06:00
V.K. Watson
1b7a9feb03 fix: update default API port from 3001 to 3002 across codebase
Avoids conflict with OpenClaw gateway on port 3001.
Updated: server config, docs, README, WebSocket hook.
2026-02-20 21:11:40 -06:00
dependabot[bot]
ae00ae009b
chore: bump @vitejs/plugin-react to 5.1.4 (dependabot #139)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.7.0 to 5.1.4.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.1.4/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 5.1.4
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 02:03:47 -06:00
dependabot[bot]
80b2873931
chore: bump jsdom to 28.1.0 (dependabot #137)
Bumps [jsdom](https://github.com/jsdom/jsdom) from 27.4.0 to 28.1.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/27.4.0...28.1.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 28.1.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 02:00:42 -06:00
dependabot[bot]
36217cc38e
chore: bump tailwind-merge to 3.5.0 (dependabot #135)
Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 2.6.0 to 3.5.0.
- [Release notes](https://github.com/dcastil/tailwind-merge/releases)
- [Commits](https://github.com/dcastil/tailwind-merge/compare/v2.6.0...v3.5.0)

---
updated-dependencies:
- dependency-name: tailwind-merge
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 01:57:28 -06:00
dependabot[bot]
707039a171
chore: update production deps (dependabot #134)
Bumps the production-dependencies group with 15 updates:

| Package | From | To |
| --- | --- | --- |
| [@playwright/test](https://github.com/microsoft/playwright) | `1.58.0` | `1.58.2` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.54.0` | `8.56.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.54.0` | `8.56.0` |
| [ajv](https://github.com/ajv-validator/ajv) | `8.17.1` | `8.18.0` |
| [dotenv](https://github.com/motdotla/dotenv) | `17.2.3` | `17.3.1` |
| [pino](https://github.com/pinojs/pino) | `10.3.0` | `10.3.1` |
| [sanitize-html](https://github.com/apostrophecms/apostrophe/tree/HEAD/packages/sanitize-html) | `2.17.0` | `2.17.1` |
| [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) | `3.30.0` | `3.31.1` |
| [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) | `5.90.20` | `5.90.21` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.468.0` | `0.575.0` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.2.3` | `19.2.4` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.2.9` | `19.2.14` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.2.3` | `19.2.4` |
| [autoprefixer](https://github.com/postcss/autoprefixer) | `10.4.23` | `10.4.24` |
| [hono](https://github.com/honojs/hono) | `4.11.7` | `4.12.0` |

Updates `@playwright/test` from 1.58.0 to 1.58.2
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](https://github.com/microsoft/playwright/compare/v1.58.0...v1.58.2)

Updates `@typescript-eslint/eslint-plugin` from 8.54.0 to 8.56.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.54.0 to 8.56.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.0/packages/parser)

Updates `ajv` from 8.17.1 to 8.18.0
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v8.17.1...v8.18.0)

Updates `dotenv` from 17.2.3 to 17.3.1
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v17.2.3...v17.3.1)

Updates `pino` from 10.3.0 to 10.3.1
- [Release notes](https://github.com/pinojs/pino/releases)
- [Commits](https://github.com/pinojs/pino/compare/v10.3.0...v10.3.1)

Updates `sanitize-html` from 2.17.0 to 2.17.1
- [Changelog](https://github.com/apostrophecms/apostrophe/blob/main/packages/sanitize-html/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/apostrophe/commits/2.17.1/packages/sanitize-html)

Updates `simple-git` from 3.30.0 to 3.31.1
- [Release notes](https://github.com/steveukx/git-js/releases)
- [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md)
- [Commits](https://github.com/steveukx/git-js/commits/simple-git@3.31.1/simple-git)

Updates `@tanstack/react-query` from 5.90.20 to 5.90.21
- [Release notes](https://github.com/TanStack/query/releases)
- [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md)
- [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.90.21/packages/react-query)

Updates `lucide-react` from 0.468.0 to 0.575.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.575.0/packages/lucide-react)

Updates `react` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react)

Updates `@types/react` from 19.2.9 to 19.2.14
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.4/packages/react-dom)

Updates `@types/react` from 19.2.9 to 19.2.14
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `autoprefixer` from 10.4.23 to 10.4.24
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.23...10.4.24)

Updates `hono` from 4.11.7 to 4.12.0
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.11.7...v4.12.0)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.58.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.56.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.56.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: ajv
  dependency-version: 8.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: dotenv
  dependency-version: 17.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: pino
  dependency-version: 10.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: sanitize-html
  dependency-version: 2.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: simple-git
  dependency-version: 3.31.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.90.21
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: lucide-react
  dependency-version: 0.575.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: react
  dependency-version: 19.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@types/react"
  dependency-version: 19.2.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: react-dom
  dependency-version: 19.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@types/react"
  dependency-version: 19.2.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: autoprefixer
  dependency-version: 10.4.24
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: hono
  dependency-version: 4.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 01:55:18 -06:00
V.K. Watson
9657e731b6
fix: guard updatedTask null check in task routes
also clean up observations section build warning
2026-02-20 01:51:45 -06:00
TylonHH
76ba0ef8fa
fix: improve LAN dev access for CORS and Vite hosts (#129) 2026-02-19 18:05:21 -06:00
TylonHH
08919fa242
fix(web): resolve noUnused and missing observation hook refs (#128) 2026-02-19 18:05:10 -06:00
Brad Groux
97181e678d feat: v3.3.0 — Task Dependencies, Crash Recovery, Observational Memory, Agent Filter
## New Features (4x10 cross-model verified)

### #122 — Task Dependencies Graph
- Bidirectional dependency model (depends_on/blocks)
- DFS cycle detection traversing both directions
- Recursive dependency graph API
- Batch-loaded traversal (eliminated N+1 queries)
- Zod validation on dependency routes
- Full keyboard + ARIA accessibility

### #123 — Crash-Recovery Checkpointing
- Save/resume/clear API for sub-agent state persistence
- Secret sanitization (20+ key patterns + regex value detection)
- 1MB size limit, 24h expiry, resume counter
- Array sanitization (nested objects + primitive strings)
- NaN timestamp handling
- ARIA-accessible checkpoint UI

### #124 — Observational Memory
- CRUD observations per task (decision/blocker/insight/context)
- Importance scoring (1-10) with paginated full-text search
- XSS prevention via sanitizeCommentText()
- ARIA-accessible range slider + decorative icon handling

### #125 — Agent Filter
- GET /api/tasks?agent=name query parameter
- Input sanitized (trim + 100 char cap)
- JSDoc/OpenAPI documented

All features scored 10/10 across security, reliability, performance,
and accessibility. Cross-model verified (Sonnet authored, Codex reviewed).
2026-02-14 23:48:49 -06:00
Brad Groux
c53fca9a75 chore: bump version to v3.2.1 2026-02-12 05:41:49 -06:00
Brad Groux
694969f60a fix: address 4x10 review findings — module-scope constant, variable ordering, case-insensitive types, new tests 2026-02-12 05:26:49 -06:00
Brad Groux
94f5933a5c style: squad chat system messages — consistent gray styling 2026-02-12 05:01:19 -06:00
Brad Groux
6d95533180 fix: system messages now display in squad chat 2026-02-12 04:54:59 -06:00
Brad Groux
231e78405d fix: EnforcementTab reviewGate warning text layout and styling
- Removed divide-y causing text to run together
- Changed to space-y-3 for proper vertical spacing
- Added explicit border-t on Closing Comments row
- Warning text now has proper mt-2 separation from toggle
- Changed emoji from ⚠️ to ℹ️ (informational, not warning)
- Lightened bg with bg-muted/50 for subtle appearance
- Moved ml-1 to warning div for better alignment
2026-02-12 04:46:03 -06:00
Brad Groux
0f495f2c7e fix: defensive settings access in NotificationsTab, GeneralTab, and EnforcementTab 2026-02-12 04:44:08 -06:00
Brad Groux
1ef80874d4 fix: settings update merge — spread current state before patching to prevent data loss 2026-02-12 04:43:47 -06:00
Brad Groux
38e2653d17 style: remove redundant Quality Gates header from enforcement settings 2026-02-12 04:42:42 -06:00
Brad Groux
491da9ac3f style: fix reviewGate warning spacing — contained within divide-y row 2026-02-12 04:42:09 -06:00
Brad Groux
05fe8ac7fb fix: defensive settings access in SharedResourcesTab — fallback to defaults 2026-02-12 04:41:09 -06:00
Brad Groux
d1ebe94ad8 fix: defensive settings access in TasksTab, BoardTab, DataTab, and AgentsTab to prevent crash on missing config sections 2026-02-12 04:40:18 -06:00
Brad Groux
b0d50d176c style: reviewGate warning text — proper formatting with muted bg, only shown when enabled 2026-02-12 04:38:42 -06:00