Commit graph

34 commits

Author SHA1 Message Date
Brad Groux
e781d30842
fix: externalize Electron runtime in desktop builds (#817)
Some checks are pending
CI / Lint & Type Check (push) Waiting to run
CI / Workspace Unit Tests (push) Waiting to run
CI / Build (push) Waiting to run
CI / Security Audit (push) Waiting to run
Fixes #809
2026-07-12 16:18:42 -05:00
Brad Groux
4d7c29b73a
fix: normalize security artifact paths to lowercase before matching (#807)
Some checks are pending
CI / Lint & Type Check (push) Waiting to run
CI / Workspace Unit Tests (push) Waiting to run
CI / Build (push) Waiting to run
CI / Security Audit (push) Waiting to run
Fixes case-sensitivity regression where prohibited paths like
'.VERITAS-KANBAN/security.json' would not be caught on Linux CI,
even though they alias protected paths on case-insensitive systems.

Changes:
- Normalize candidate paths to lowercase in findSecurityArtifactViolations()
- Add comprehensive test file (security-artifacts-guard.test.ts) with:
  * Unit tests for path normalization and matching
  * Mixed-case variant detection
  * NUL-delimited Git output handling
  * Integration tests with isolated temporary Git repositories
  * Edge cases: spaces, nested paths, untracked files
  * Diagnostic message validation

Security verification:
- All security-related tests pass
- Auth middleware tests pass
- Typecheck passes
- Lint budget at 600 (limit)
- Guard invocation verified against live repository

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-10 13:01:36 -05:00
Brad Groux
013c2b5383
Fix audit follow-up gates
Fix audit follow-up gates

- remove gray-matter and use local YAML frontmatter handling
- upgrade DOMPurify and clear production advisories
- make CLI/MCP smoke skip cleanly without VK_API_KEY
- reduce initial JS below the Mantine QA budget

Closes #753
Closes #754
Closes #755
2026-06-26 14:59:20 -05:00
Brad Groux
881af11685
Fix desktop release blockmap regeneration
Some checks failed
CI / Lint & Type Check (push) Has been cancelled
CI / Workspace Unit Tests (push) Has been cancelled
CI / Build (push) Has been cancelled
CI / Security Audit (push) Has been cancelled
Resolve the Electron Builder 26 blockmap module directly for notarized DMG blockmap regeneration.
2026-06-12 03:38:05 -05:00
Brad Groux
ac0687ac72
Prepare v5.0.1 patch release
Bump Veritas Kanban to v5.0.1, update release docs, and fix the local macOS packaging smoke check.
2026-06-12 03:19:52 -05:00
dependabot[bot]
31359ebebf
build(deps): bump @eslint/js to 10.0.1
* build(deps-dev): bump @eslint/js from 9.38.0 to 10.0.1

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.38.0 to 10.0.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v10.0.1/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 10.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

* Resolve eslint js 10 lint failures

---------

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-06-09 06:16:16 -05:00
Brad Groux
8b0ec6836b
build(desktop): isolate local release staging
* build(desktop): isolate local release staging

* Require Apple Silicon for local macOS smoke

---------

Co-authored-by: bradgroux <brad@digitalmeld.io>
2026-06-09 05:47:35 -05:00
Brad Groux
ccdd55ce0b
ci(desktop): validate notarization credential modes
* ci(desktop): validate notarization credential modes

* Sanitize notarization failure output

---------

Co-authored-by: bradgroux <brad@digitalmeld.io>
2026-06-09 05:47:32 -05:00
Brad Groux
d3fed82a61
Resolve app-builder for release finalization (#687) 2026-06-06 09:58:24 -05:00
Brad Groux
cb98addc77
Notarize DMG release assets before upload (#686) 2026-06-06 09:43:17 -05:00
Brad Groux
29630c7e4b Prepare v5.0.0 release 2026-06-05 18:16:43 -05:00
Brad Groux
7005ea7bdd
Add CLI MCP compatibility smoke
Add CLI MCP compatibility smoke
2026-06-05 15:28:53 -05:00
Brad Groux
e840c43d07
Move pnpm settings to workspace config (#630) 2026-06-05 08:15:47 -05:00
Brad Groux
4d6fb59a83 Fix desktop artifact CI packaging 2026-06-04 01:52:14 -07:00
Brad Groux
a42988a3e2 Ratcheting lint warning budget 2026-06-04 00:16:42 -07:00
Brad Groux
72715f229f
Add v5 release readiness docs (#546) 2026-06-03 07:49:26 -07:00
Brad Groux
e6c15c036d Add Mantine QA release gate 2026-06-01 14:17:56 -07:00
Brad Groux
f0dceac22f
Add macOS desktop release pipeline (#473) 2026-05-31 17:48:50 -05:00
Brad Groux
522162ae89
test: add v5 permission coverage manifest gate
## Summary

- adds a v5 permission coverage manifest with classifications, required permissions, denial reasons, and review justifications across REST, WebSocket, CLI, MCP, workflow, transition hook, command palette, and background job surfaces
- adds a Node-based coverage checker that fails when tracked surfaces are missing from the manifest or when REST route prefixes drift from the shared permission map
- wires the checker into CI and documents the manifest gate in the security guide

Closes #420.

## Verification

- `node scripts/check-permission-coverage.mjs`
- `./node_modules/.bin/prettier --check package.json .github/workflows/ci.yml scripts/check-permission-coverage.mjs docs/security/permission-coverage.json docs/security.md`
- `git diff --check`
- `pnpm lint:budget`
- `pnpm build`
- `pnpm audit --prod --audit-level=high` (passes high gate; 3 existing moderate findings)
- GitHub Actions: Build, Lint & Type Check, Security Audit, Workspace Unit Tests
2026-05-31 05:02:26 -05:00
Brad Groux
d3976f1d74 chore: harden audit findings and release QA
Add release validation and scheduled QA workflows.

Harden webhook URL handling, API helper edge cases, and runtime version reporting.

Split heavy web bundles, centralize view metadata, and stabilize full-suite tests.
2026-05-16 18:59:40 -05:00
Brad Groux
ef9e88ca1d feat: add qmd index maintenance 2026-05-04 03:10:16 -05:00
Brad Groux
f0f7d7b03e feat: add qmd search foundation 2026-05-04 02:35:00 -05:00
Brad Groux
8cce9f24c4 feat: Squad chat protocol scripts, system events, model attribution
- Add squad-post.sh for regular agent messages
- Add squad-event.sh for lifecycle events (spawned/completed/failed/status)
- Add model field to squad messages (types, server, UI, scripts)
- System events render as divider lines in squad chat panel
- Model attribution displays next to agent names in UI
- Full protocol documented in SQUAD-CHAT-PROTOCOL.md
- Updated CONTRIBUTING.md, README.md, and all SOPs
- Added VK_HOST/VK_PORT env vars to .env.example

4-check cross-model review: 10/10 (Code/GPT-5.1, Func/Grok, Perf/Grok, Sec/GPT-5.1)
Agents: R2-D2 (feature), TARS/CASE/Ava/K-2SO (reviews)
2026-02-07 13:04:17 -06:00
Brad Groux
a249dee1fb Merge: Squad chat, webhooks, delegation, polling + critical security fixes
Feature branches merged:
- Agent squad chat with real-time WebSocket updates
- Broadcast notifications (priority levels, read receipts)
- Task deliverables as first-class objects
- Efficient polling endpoint with change tracking
- Approval delegation / vacation mode

Security & stability fixes:
- Fix: path traversal vulnerability in broadcast storage
- Fix: TOCTTOU race condition in broadcast.markRead()
- Fix: double cache invalidation in squad chat
- Fix: file locking consistency for concurrent writes
- Add: default agent display name handling

Improvements:
- React.memo for message bubbles (perf)
- Save-on-blur for display name input
- Auto-scroll to latest in squad chat
- OpenClaw gateway wake integration
- One-agent-per-file development rule (CONTRIBUTING.md)

All reviews passed (code, functionality, performance, security)
27 files changed, comprehensive test coverage added

v2.0.0 ready for production
2026-02-07 11:30:52 -06:00
Brad Groux
eeb11ba219 feat(US-1600): Complete SOP Sprint + fix GH-86 & GH-87
Documentation (8 new files in docs/):
- GETTING-STARTED.md: 5-min quickstart, BoardKit insights, sanity checks
- SOP-agent-task-workflow.md: Full lifecycle (claim → work → complete)
- SOP-sprint-planning.md: Epic → sprint → task hierarchy + estimation
- SOP-multi-agent-orchestration.md: PM + worker roles, handoff patterns
- SOP-cross-model-code-review.md: Claude ↔ GPT gate, checklist, RF-002 ref
- BEST-PRACTICES.md: 10 DOs + 10 DON'Ts based on real usage
- EXAMPLES-agent-workflows.md: 6 copy/pasteable recipes (feature, bug fix, docs, audit, content, research)
- TIPS-AND-TRICKS.md: CLI shortcuts, keyboard shortcuts, integrations (MCP, git worktrees, Obsidian)
- README.md: Added 'Documentation Map' linking all new docs

Bug Fixes:
- fix(GH-86): BulkActionsBar now handles archive errors gracefully
  * Per-task error tracking (replaces Promise.all)
  * Toast notifications on success/partial/failure
  * Logs individual failures to console

- fix(GH-87): Sidebar metrics now stay in sync with board state
  * Invalidate metrics cache when task status changes
  * Prevents up-to-30s lag in sidebar counts
  * Preserves timer state during mutations

Scripts:
- scripts/dev-clean.sh: Added explicit pnpm path resolution for launchd
- scripts/dev-watchdog.sh: Fixed restart storm prevention + pnpm path

BREAKING: None
TESTING:
- Manual: Bulk archive Done column tasks, verify toasts appear
- Manual: Move tasks between columns, verify sidebar counts update <2s
- Unit: Consider regression tests for metrics invalidation
2026-02-04 08:18:01 -06:00
Brad Groux
d98c8c6615 Dev reliability: add /api/health, dev:clean, and dev watchdog 2026-02-03 23:41:10 -06:00
Brad Groux
855dbfc850 Revert "Dev reliability: add /api/health, dev:clean, and dev watchdog"
This reverts commit a1c19d5772.
2026-02-03 23:40:53 -06:00
Brad Groux
a1c19d5772 Dev reliability: add /api/health, dev:clean, and dev watchdog 2026-02-03 23:37:15 -06:00
Brad Groux
a2aa5053c6 feat: add seed data and first-run auto-seeding for clean public repo
- Remove tracked personal attachment screenshots from git
- Add tasks/attachments/ and tasks/archive-attachments/ to .gitignore
- Create 4 example tasks showcasing features (auth, bug, research, automation)
- Add seedIfEmpty() to TaskService for automatic first-run seeding
- Add pnpm seed script for manual seeding
- Update README quickstart with seed docs
- Fix version badge mismatch (1.1.0 → 1.0.0)
2026-01-29 15:45:38 -06:00
Brad Groux
0c42d0b125 Populate token telemetry for all 192 closed/archived tasks
- Added run.started, run.tokens, run.completed events for every completed task
- Token estimates based on time tracked and task complexity
- Metrics tab now displays agent run data for all historical tasks
- Added create-review-tasks.sh script
- Updated activity and status history
2026-01-28 11:49:14 -06:00
Brad Groux
71200bca36 feat(US-1010): Add daily digest feature
- Add digest service for 24h activity aggregation
- Add GET /api/digest/daily endpoint (JSON and Teams format)
- Add GET /api/digest/daily/preview for testing
- Add scripts/daily-digest.sh for cron scheduling
- Skip empty digests when no activity

Content includes:
- Tasks completed/created/in-progress counts
- Agent runs with success rate by agent
- Token usage by agent
- Top accomplishments (recently done tasks)
- Failed runs and blocked items
2026-01-28 08:08:06 -06:00
Brad Groux
76bf61e428 chore: update telemetry/notification data from US-1009 testing 2026-01-28 07:57:02 -06:00
Brad Groux
22509f1808 feat(web): add Task Metrics Panel (US-1002)
- Created useTaskMetrics hook to fetch and aggregate telemetry events for a task
- Built TaskMetricsPanel component with:
  - Summary cards for total runs, success rate, duration, tokens, cost
  - Last run status display
  - Expandable per-attempt breakdown with full details
- Integrated as new 'Metrics' tab in TaskDetailPanel
- Fetches via GET /api/telemetry/events/task/:taskId endpoint
2026-01-28 07:55:48 -06:00
Brad Groux
65e0c8b278 feat(US-1303): Add real-time WebSocket agent status hook
- Create useRealtimeAgentStatus hook with WebSocket subscription
- Subscribe to agent:status events as primary transport
- Fall back to polling every 10s when WebSocket disconnects
- Auto-reconnect on WebSocket disconnect (via useWebSocket)
- Stale detection marks agent as idle after 5+ min without updates
- Memoized return value to prevent unnecessary re-renders
- Full TypeScript types for AgentStatusData, SubAgent, AgentStatusState
- Maintain backwards compatibility with useGlobalAgentStatus (polling-only)
2026-01-28 07:42:00 -06:00