Commit graph

282 commits

Author SHA1 Message Date
Brad Groux
b536e60816 docs: add TROUBLESHOOTING.md with common issues and solutions 2026-01-30 23:11:36 -06:00
Brad Groux
33a90bbc63 fix: use TaskService singleton in all routes to fix cache fragmentation
Root cause: Each route file created its own TaskService instance via
'new TaskService()', resulting in 13+ separate in-memory caches.
When task-archive.ts archived a task, it removed it from its own cache,
but tasks.ts (which serves GET /api/tasks) still had the task in its
separate cache — so archived tasks continued appearing in the list.

Fix: All route files now use getTaskService() singleton, ensuring a
single shared cache across all endpoints. Service files retain their
own instances for test isolation.

Fixes #22
2026-01-30 05:29:48 -06:00
Brad Groux
cc4d9f09dc fix: use clean numeric inputs without browser spinners (fixes #19) 2026-01-30 00:00:53 -06:00
Brad Groux
793192e6b3 docs: rename Moltbot references to OpenClaw (formerly Clawdbot/Moltbot) 2026-01-29 23:39:11 -06:00
Brad Groux
a7973e14d9 fix: resolve TypeScript build errors in test files
- Remove unused React imports in AgentStatusIndicator and WebSocketIndicator tests
- Fix Response type cast in api-helpers test (as unknown as Response)
2026-01-29 15:55:23 -06:00
Brad Groux
c250a5a60f docs: final documentation pass for public release
- CONTRIBUTING: fix Node.js prerequisite (20 → 22), fix .env path, add seed docs, expand project structure
- CHANGELOG: move 1.1.0 to Unreleased (matches package.json 1.0.0), add seed data entry, fix link refs
- README: add examples/ and gitignored annotations to architecture tree
- docs/security.md: update Clawdbot reference to Moltbot, fix release date
2026-01-29 15:51:41 -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
39213341c7 docs: regenerate GIFs from MP4 source for better quality 2026-01-29 15:34:48 -06:00
Brad Groux
316126db24 docs: add screenshots and demo GIFs to README and FEATURES 2026-01-29 15:32:29 -06:00
Brad Groux
407014532c fix: optimistic UI toggle for timer start/stop button 2026-01-29 14:51:05 -06:00
Brad Groux
dab1cad542 fix: add credentials:include to all API write calls for cookie auth 2026-01-29 14:41:10 -06:00
Brad Groux
3de4285213 fix: instant UI update on timer start/stop/add/delete via optimistic cache patch 2026-01-29 14:35:01 -06:00
Brad Groux
cce151e64b fix: add task ID to board and archive search filters 2026-01-29 14:27:26 -06:00
Brad Groux
f60b218c10 fix: add in-process FIFO queue to file-lock for deterministic ordering
File-based locking with wx flag doesn't guarantee ordering within the
same Node.js process — concurrent fs.writeFile calls race at the OS
level. Added a per-file Promise chain that serializes lock requests
in FIFO order within the same process. The file lock still provides
cross-process protection.

Fixes flaky withFileLock serialization test (was ~30% failure rate,
now 20/20 passes).
2026-01-29 07:43:54 -06:00
Brad Groux
f531fad829 chore: add .nvmrc, fix issue template link, update changelog links to BradGroux 2026-01-29 07:39:40 -06:00
Brad Groux
8c892d7c22 fix: replace console.* with structured pino logger, fix ESLint errors in k6 load tests 2026-01-29 07:35:48 -06:00
Brad Groux
76b93ebe85 docs: update documentation for agent CRUD, theme toggle, and bug fixes 2026-01-29 07:23:26 -06:00
Brad Groux
adc14a49e7 feat: agent CRUD — add, edit, remove agents from Settings UI 2026-01-29 07:19:54 -06:00
Brad Groux
0bd22dd0fc style: switch thumb white in dark mode, black in light mode 2026-01-29 07:10:55 -06:00
Brad Groux
061acea6d8 fix: move theme script inside <head> to fix HTML parse error 2026-01-29 07:09:08 -06:00
Brad Groux
57403c5c54 feat: light/dark mode toggle in Settings > General 2026-01-29 07:07:57 -06:00
Brad Groux
64910bba92 style: switch primary from violet to purple 2026-01-29 07:05:42 -06:00
Brad Groux
cf50386a0e fix: open-task fallback to API fetch for archived/deleted tasks 2026-01-29 07:02:50 -06:00
Brad Groux
5825b56456 fix: focus ring clipping in drill-downs + wire up open-task event for task navigation 2026-01-29 06:59:02 -06:00
Brad Groux
5830fd3b7e fix: dashboard overflow-hidden clipping focus rings on selects 2026-01-29 06:56:11 -06:00
Brad Groux
5f166cf0cf fix: bar chart hover cursor now subtle instead of white flash 2026-01-29 06:52:37 -06:00
Brad Groux
f7c7aed232 layout: daily activity 75% + recent status changes 25% side by side 2026-01-29 06:48:58 -06:00
Brad Groux
33c813cd22 fix: remove duplicate X close button from drill-down panels 2026-01-29 06:46:13 -06:00
Brad Groux
8c5cba0c40 fix: agent comparison using raw fetch instead of apiFetch (envelope not unwrapped) 2026-01-29 06:44:03 -06:00
Brad Groux
ead82c5cc5 style: vibrant cyan-teal rolling average line to contrast violet 2026-01-29 06:41:15 -06:00
Brad Groux
1b4146cc79 style: violet primary buttons + focus rings in dark mode 2026-01-29 06:38:21 -06:00
Brad Groux
def8d71927 fix: real-time cross-column drag with local state management 2026-01-29 06:34:04 -06:00
Brad Groux
3cbcb20ecd fix: cross-column drag-and-drop + suppress tooltip during drag 2026-01-29 06:31:07 -06:00
Brad Groux
0c0f5b344d security+quality: final codebase review fixes
Security (critical):
- Remove shell:true from preview-service spawn (command injection fix)
- Replace exec() with execFile() in github-service (no shell interpolation)
- Add SIGKILL fallback after SIGTERM timeout in worktree-service

Stability:
- Add process cleanup handlers (SIGTERM/SIGINT) for preview servers
- Add MAX_PREVIEW_SERVERS=5 limit to prevent resource exhaustion
- Memoize WebSocket context value to prevent unnecessary re-renders

Code quality:
- Remove hardcoded 'Brad' author → 'User' (3 files)
- Replace hardcoded localhost:3001 URLs with API_BASE (AttachmentsSection)
- Fix SECURITY-AUDIT.md date (2025 → 2026)
- Add license/repository/author to all 6 package.json files

Data hygiene:
- Untrack all runtime data files (.veritas-kanban/*.json, telemetry, activity)
- Simplify .gitignore: .veritas-kanban/* except .gitkeep
- Removed ~15,700 lines of runtime data from git history
2026-01-29 06:13:10 -06:00
Brad Groux
c95500507e docs: clean up docs folder, update test counts
- Removed 13 sprint files (internal dev history)
- Removed 4 dated audit files + settings-architecture.md (internal working docs)
- Kept: DEPLOYMENT.md, FEATURES.md, security.md
- Updated FEATURES.md: 61 test files, 1,143 tests (was 51 files)
- Updated CHANGELOG.md: corrected test counts for v1.0.0
2026-01-29 06:02:18 -06:00
Brad Groux
e59c5072cf fix: resolve infinite render loop in useKeyboard test + memoize context value
Two bugs fixed:
1. TestConsumer's default param (tasks=[]) created a new array ref every render,
   causing an infinite useEffect loop with setTasks. Fixed with stable EMPTY_TASKS constant.
2. KeyboardProvider's context value was a new object literal every render.
   Wrapped in useMemo to prevent unnecessary consumer re-renders.
3. Destructured useKeyboard() return in test to use stable callback refs
   instead of the whole context object as useEffect deps.

Also: added root vitest.config.ts with workspace projects for mono-repo test runs.
2026-01-29 05:54:22 -06:00
Brad Groux
7ca26016e3 fix(server): increase agent status idle timeout from 5 to 15 minutes 2026-01-29 05:15:48 -06:00
Brad Groux
9aae5bc579 fix(web): use apiFetch in all hooks to unwrap API response envelope 2026-01-29 05:14:43 -06:00
Brad Groux
aa0c79e9ea test: add k6 load testing suite with 5 scenarios 2026-01-29 05:09:14 -06:00
Brad Groux
a005020bc5 feat(web): improve frontend accessibility to WCAG 2.1 AA 2026-01-29 05:06:26 -06:00
Brad Groux
99be1f6017 feat(server): add Prometheus-compatible metrics export endpoint 2026-01-29 05:05:18 -06:00
Brad Groux
46eff13fa3 feat(server): add circuit breaker pattern for external service calls 2026-01-29 05:01:15 -06:00
Brad Groux
d36ee28a5d feat(server): abstract file storage behind repository interface 2026-01-29 05:00:30 -06:00
Brad Groux
6bdb01f2bd feat(server): standardize API response envelope and error format 2026-01-29 04:57:27 -06:00
Brad Groux
eac0546485 feat(server): add Zod schema validation to all mutating API routes 2026-01-29 04:57:02 -06:00
Brad Groux
858263875d feat(server): add immutable audit log with hash chain for sensitive operations 2026-01-29 04:49:49 -06:00
Brad Groux
61c24462e1 chore: gitignore backup directory 2026-01-29 04:49:11 -06:00
Brad Groux
1ef983bfdf feat(server): add data integrity checks and automatic backup on startup 2026-01-29 04:48:51 -06:00
Brad Groux
f3cc8610a1 feat: add WebSocket heartbeat, reconnection, and connection limits 2026-01-29 04:44:00 -06:00
Brad Groux
6640c4986d feat(server): implement per-route rate limiting with tiered thresholds 2026-01-29 04:43:47 -06:00