Commit Graph
236 Commits
Author SHA1 Message Date
bot-hermes 4833943d6a Merge pull request 'feat: cycles API route with CRUD, membership, and transfer' (#21) from feat/pl-3-cycles into feat/plane-lift-schema 2026-09-07 17:11:34 -04:00
bot-hermes 8fb3279482 Merge remote-tracking branch 'origin/feat/plane-lift-schema' into feat/pl-3-cycles
# Conflicts:
#	apps/api/src/index.ts
#	apps/api/src/routes/cycles.ts
2026-09-07 17:11:02 -04:00
bot-hermes e97e100f88 Merge pull request 'fix(mcp): replace deprecated status param with state_group (PL-10 deploy-day)' (#24) from feat/pl-10-deploy into feat/plane-lift-schema 2026-09-07 16:57:56 -04:00
bot-hermes 814c346296 Merge pull request 'feat: PL-7/8/9 — state-driven board + module/cycle views + link panels + graph edges' (#23) from feat/pl-789-ui into feat/plane-lift-schema 2026-09-07 16:32:56 -04:00
bot-hermes 8e7a128b05 merge: resolve conflicts with feat/plane-lift-schema (add cycleRoutes to index.ts) 2026-09-07 20:32:22 +00:00
bot-hermes c6328c120a feat: implement PL-7, PL-8, PL-9 — state-driven board, module/cycle views, link panels + graph edges
PL-7 — Task Board Columns from States:
- Add State, Module, Cycle, Link TypeScript types to types/index.ts
- Add stateId, moduleId, cycleId, trackedMinutes to Task type
- Rewrite tasks.tsx: fetch states from API, render 5 state-group columns
  (backlog/unstarted/started/completed/cancelled), drag-and-drop updates
  stateId via PATCH /tasks/:id, colored state badges, state filter dropdown,
  project filter
- Fix deprecated POST /tasks/:id/status → PATCH /tasks/:id with stateId
- Update tasks/.tsx: state selector dropdown replaces hardcoded status enum,
  toggle complete uses state-based approach, dependencies replaced with
  link-based UI using /api/links

PL-8 — Module + Cycle Views:
- Create apps/api/src/routes/cycles.ts: full CRUD + task assignment/removal
- Create apps/api/src/routes/links.ts: list/create/delete links between entities
- Register cycleRoutes and linkRoutes in API index
- Add Modules tab to project detail: list modules, expand to show tasks,
  add/remove tasks from modules, create/edit/delete module dialogs
- Add Cycles tab to project detail: sprint board grid, backlog lane,
  manual task transfer between cycles and backlog, create/edit cycle dialogs
- Fix ProjectTasks toggle to use PATCH with stateId instead of deprecated endpoint

PL-9 — Link Panels + Graph:
- Update graph API to read links bidirectionally (source OR target)
- Add link type color map (LINK_TYPE_COLORS) for edge rendering
- Graph edges now colored by linkType (blocks=red, relates=gray, etc.)
- Filter panel shows link types with color indicators
- Task detail Dependencies tab now uses /api/links for add/remove links
- Added link type selector (blocks/relates/parent-child/created-from)
2026-09-07 20:24:54 +00:00
bot-hermes f12c00b670 fix(mcp): replace deprecated status param with state_group in task queries
- tasks.list: replace status filter with state_group (backlog/unstarted/started/completed/cancelled)
- tasks.create: remove obsolete status param (tasks now use state_id FK)
- tasks.update: remove obsolete status param
- Implement state_group filtering via EXISTS subquery on states table
- Update API.md example to use state_group instead of status
2026-09-07 20:19:37 +00:00
bot-hermes 352ac23717 Merge pull request 'feat: links CRUD API + MCP tools for states/modules/cycles/links (PL-4/6)' (#22) from feat/pl-456-backend into feat/plane-lift-schema 2026-09-07 16:17:18 -04:00
bot-hermes 92fabb1a15 feat: links CRUD API + MCP tools for states/modules/cycles/links (PL-4/6)
- Add links.ts: full CRUD for entity links (relates, blocks, parent-child, created-from)
- Update MCP tools: add state_id, state_group, module_id, cycle_id filters
- Remove deprecated dependency/status stubs from tasks.ts
- Mount linkRoutes at /api/links
2026-09-07 20:16:08 +00:00
bot-hermes ed11b722c2 feat: add cycles API route with CRUD, membership, and transfer 2026-09-07 19:59:59 +00:00
bot-hermes 14bb1aa1a8 Merge pull request 'fix: resolve circular type inference in _app/index.tsx route' (#20) from feat/pl-1-typecheck into feat/plane-lift-schema 2026-09-07 15:43:08 -04:00
bot-hermes 43d3daac47 fix: resolve circular type inference in _app/index.tsx route
The dashboard route imported Route from '../_app', which resolves to itself
(_app/index.tsx IS the _app route), creating a self-referencing circular
type inference (TS7022/TS7023).

Fix by importing the root route from '__root' as the parent, which is the
correct ancestor in the route tree hierarchy.
2026-09-07 19:39:44 +00:00
bot-hermes a24bd34cb3 Merge pull request 'feat: states API route with project-scoped workflow states' (#19) from feat/pl-1-states into feat/plane-lift-schema 2026-09-07 15:30:07 -04:00
bot-hermes fdc510bfbd Merge remote-tracking branch 'origin/feat/plane-lift-schema' into feat/pl-1-states
# Conflicts:
#	apps/api/src/index.ts
2026-09-07 19:29:58 +00:00
bot-hermes 1f67a21bcc Merge pull request 'feat: modules API + membership' (#18) from feat/modules-api into feat/plane-lift-schema 2026-09-07 15:24:47 -04:00
bot-hermes c5682765e8 feat: add states CRUD API route with project-scoped workflow states
- Add states.ts with GET/POST/PATCH/DELETE endpoints
- States scoped to project via projectId FK; workspace access resolved through project
- stateGroupEnum enforced (backlog|unstarted|started|completed|cancelled)
- List ordered by sortOrder, auto-increment on create
- Soft-delete via deletedAt column (added to schema)
- 3-step contract on every write: DB write, activity feed, pg_notify
- Register /api/states route in main index.ts
- Default state seeding already present in projects.ts
2026-09-07 19:24:24 +00:00
bot-hermes 75bcd14233 feat: modules API + membership 2026-09-07 18:52:45 +00:00
bot-hermes 583c476e12 Merge pull request 'feat: tasks route stateId/stateGroup rewrite' (#17) from feat/tasks-route into feat/plane-lift-schema 2026-09-07 14:51:07 -04:00
bot-hermes 60fb37c4a3 feat: tasks route stateId/stateGroup rewrite
Replace flat status enum with stateId/stateGroup references:
- Import states table; add state_group filter via EXISTS subquery
- Add module_id and cycle_id filter params to task list endpoint
- Validate stateId on create/update (404 if state not found)
- Auto-set completedAt when state group is 'completed', clear otherwise
- Zero references to old taskStatusEnum remain
2026-09-07 18:37:12 +00:00
bot-hermes 28b2cbd095 fix: restore __root.tsx route (accidentally deleted in 2175c24, breaks web build) 2026-09-07 17:35:02 +00:00
bot-hermes 639306a26f feat: plane-lift schema (states/modules/cycles/links)
Phase 1 of the Plane feature lift into Project E.

Schema changes:
- Add stateGroupEnum, moduleStatusEnum, linkTypeEnum
- Add states table (per-project workflow states with group enum)
- Add modules table (project-scoped planning buckets)
- Add cycles table (time-boxed sprints)
- Add links table (canonical cross-entity mesh)
- Drop taskStatusEnum and tasks.status column
- Add stateId, moduleId, cycleId FKs to tasks
- Drop taskDependencies, noteLinks, noteEntityLinks tables

Project creation bootstrap:
- Seed 5 default states (Backlog/Todo/In Progress/Done/Cancelled) on new project

Minimal API fixes for typecheck:
- Remove references to dropped tables/columns
- Replace status-based queries with completedAt checks
- Stub deprecated dependency/status endpoints for Phase 2

Drizzle migration: 0008_plane-lift-schema.sql (custom, big-bang)
2026-09-07 17:02:04 +00:00
bot-hermes 264f65955b docs: polish README intro for public release 2026-09-05 21:50:48 +00:00
bot-hermes 6c67b1e6ef chore: public polish — remove stray fix scripts, move internal docs, add LICENSE 2026-09-05 21:47:58 +00:00
bot-hermes 2175c246e3 chore: remove unused route files and fix script permissions 2026-08-27 16:35:05 +00:00
bot-hermes ffc50091b1 refactor: remove canvas, automations, and custom statuses; simplify notification and status model 2026-08-22 18:00:41 +00:00
bot-hermes 7b2cdc3bae fix: remove accidentally committed node_modules symlinks from git
The worktree session created node_modules symlinks that were staged with
git add -A. These broke the deploy script which uses cp -r and cannot
overwrite directories with symlinks.
2026-08-19 11:01:42 +00:00
bot-hermes b814a4788d feat: add 5 PM features — custom statuses, Gantt, quick-add, automations, notifications
- Custom workflow statuses: per-project configurable status definitions
  replacing the fixed task_status enum. Each project defines its own
  workflow with drag-to-reorder, color coding, and category mapping.
- Gantt/timeline view: full project roadmap with task bars, dependency
  arrows, milestone diamonds, zoom levels (day/week/month), and drag
  to reschedule.
- Natural-language quick-add: NLP parser extracts dates, priorities,
  projects, labels, and recurrence from free text. Floating bar with
  'n' shortcut and live parsed preview.
- Automation rules: no-code trigger-action system per project. Triggers
  on status change, task creation, due date approaching. Actions set
  status/priority, add labels, create notifications.
- Notification center: in-app bell icon with unread badge, slide-out
  panel, real-time SSE updates, mark read/all read. Replaces raw
  activity feed dropdown.

Schema: adds status_definitions, automation_rules, notifications tables.
Migrations: 0007, 0008, 0009. 41 NLP parser tests pass.
2026-08-19 10:54:29 +00:00
bot-hermes 1a620f16c1 fix(graph): track node positions in real-time via nodeCanvasObject instead of stale snapshot 2026-08-18 11:08:54 +00:00
bot-hermes a3e4d3c868 feat: add threaded comments, activity feeds, and task dependencies 2026-08-10 21:59:10 +00:00
bot-hermes 1059512888 feat: add server error logging and tighten workspace isolation 2026-08-10 12:41:46 +00:00
Hermes Coding Manager 6449f6b4cc ci: run e2e on alternate ports (3100/3101) to avoid collision with prod stack on host runner 2026-08-10 06:58:57 -04:00
Hermes Coding Manager 9e2d55d03a fix: declare drizzle-orm + postgres at root for db/client.ts (fresh CI installs) 2026-08-10 06:51:32 -04:00
Hermes Coding Manager 4cc8523845 ci: provide placeholder env vars for docker compose build in quality job 2026-08-10 06:45:06 -04:00
Hermes Coding Manager 085c8c91f7 ci: verify runner pickup after global bun symlink 2026-08-10 06:41:38 -04:00
Hermes Coding Manager cbd2ae912a ci: test runner pickup after re-registration 2026-08-10 06:21:25 -04:00
Hermes Coding Manager b62d814ece docs(deploy): update deploy host to 10.0.0.52 2026-08-10 05:52:00 -04:00
bot-hermes d441e3862d docs(deploy): add one-time Gitea Actions runner setup steps
The CI workflow (projecte-runner) was never registered on the Gitea
instance, leaving quality/e2e/deploy/smoke jobs stuck at 'Waiting to run'.
Document the act_runner install/register/start flow so the pipeline can be
unblocked from the deploy host.
2026-08-10 09:13:00 +00:00
bot-hermes a60b75f075 feat: full plan execution - CI/CD, critical fixes, UX polish, secondary/advanced features, E2E + docs
Phase 0 (CI/CD): fix root typecheck to cover api+worker+web; reconcile migration
story into idempotent db:migrate (db:sync + db:triggers); add Gitea Actions
quality/deploy/smoke workflow; rewrite README/AGENTS/DEPLOY docs; add
requireWorkspaceAccess + recordActivityForEntity conventions.

Phase 1 (critical fixes): calendar delete + drag/resize DnD; canvas card CRUD +
bulk save + debounced autosave; logout route; graph edge workspaceId derivation;
real analytics endpoints (drop Math.random); task board droppable columns +
reorder persistence; Tiptap notes editor with sanitized HTML rendering; remove
insecure passkey auth; domain/owner scoping (IDOR) on all by-ID routes + search/
export/realtime scoping; command palette routing + agent mention fetch; agent
activity SSE handler; graph fly-to with tracked positions.

Phase 2 (UX polish): login on design system; Sonner toasts app-wide; shared
Loading/Empty/Error state components; working density/sidebarPos/reduce-motion
settings; Inter typography; consolidated status-colors lib; unified detail
routes; dashboard sort/realtime/responsive fixes; mobile responsive; a11y
(radiogroups, sanitized snippets, badge labels).

Phase 3 (features): daily notes timezone fix + delete + autosave + mood/energy
create; active-domain store + topbar picker; graph domain picker + navigable
entity links; tag assign/remove UI + server-side tag filter; real CSV export +
import validation; custom fields on tasks.

Phase 4 (advanced): migrate job worker into apps/worker (webhook delivery with
HMAC, recurring spawn, ai_dispatch disabled); webhook queue helper + entity
event enqueuing + test endpoint fix; recurring scheduledJobs pipeline; agents
CRUD + permission editing + activity filters; real notifications feed; MCP
polish (validation, error codes, domain scoping, dead sql leftover).

Phase 5 (E2E + docs): rewrite Playwright suite for the Vite SPA (15 specs, new
auth helpers, chromium-only in CI); add ephemeral-Postgres e2e CI job; rewrite
docs/API.md for the real Hono API.
2026-08-10 08:53:18 +00:00
Hermes 6cb4b9f1b5 Merge fix/theme-settings-refactor: ACCENT_PALETTE source of truth + rose accent 2026-08-09 23:33:24 +00:00
Hermes 0830489a02 Merge redesign/ui-v2 into main: full v2 rewrite (Vite SPA + Hono API + Bun worker)
Resolved conflicts in web-legacy pages and report schema by taking v2 side.
v2 is the deployed, current architecture; v1 paths preserved under apps/web-legacy.
2026-08-09 23:32:14 +00:00
Hermes 58586a6ad9 feat: theme settings refactor - ACCENT_PALETTE source of truth + rose accent
- Add rose accent to ACCENT_PALETTE
- Settings AppearanceTab derives ACCENT_COLORS from ACCENT_PALETTE
- Wire accent state through useThemeStore instead of localStorage
2026-08-09 23:29:21 +00:00
bot-hermes fe4402c7b0 Merge pull request 'Bug sweep fixes: 6 logic bugs across tasks/habits, graph/reports, worker (R2 pipeline test)' (#13) from integration/sweep-fixes into main 2026-08-06 10:02:34 -04:00
bot-hermes f985eaedbf Merge remote-tracking branch 'origin/wt/sweep-C' into integration/sweep-fixes 2026-08-06 13:57:53 +00:00
bot-hermes d92311da6a Merge remote-tracking branch 'origin/wt/sweep-B' into integration/sweep-fixes 2026-08-06 13:57:53 +00:00
bot-hermes ca7a0d7ff7 fix(reports): honor passed token in report-service generate* helpers
The generateWeeklySummary/generateProjectHealth/generateHabitAnalysis/
generateTimeAudit helpers all had "const pb = token ? createAdminClient()
: createAdminClient();" — both branches return the admin client, so a
passed user token was silently discarded and every caller got admin-level
access. Use createPocketBaseClient(token) when a token is provided,
matching the sibling project-service.ts / note-service.ts pattern.
2026-08-06 13:56:29 +00:00
bot-hermes ab7735d6fc fix(graph): filter soft-deleted projects in getGraphData
projectIds query omitted isNull(projects.deletedAt), unlike the sibling
projectRows query, so sections of soft-deleted projects were loaded as
orphan nodes via inArray(sections.projectId, projectIds).
2026-08-06 13:56:22 +00:00
bot-hermes 2dec21d886 fix(tasks,habits): replace dead PocketBase stubs with Drizzle ORM + soft-delete + activity feed
GET/PATCH/DELETE for single task and habit used createPocketBaseClient(),
which is a dead stub, and DELETE did a hard delete violating the soft-delete
rule in AGENTS.md. Rewrite with Drizzle ORM: soft-delete (deleted_at),
activity feed insert via recordActivity(), Zod validation, parent-task
existence check, workspace access check, and 404 NOT_FOUND handling.
2026-08-06 13:53:33 +00:00
bot-hermes 2bb28fe65f fix(tasks): support status query param in list API and use it in today-tasks widget
The dashboard widget was filtering with a broken filter=status!=done query
param that the list API never interpreted, so completed tasks could appear.
Add a status= todo,in_progress filter to GET /api/tasks and update the widget
to use it (also fix domain badge to use domainId).
2026-08-06 13:53:29 +00:00
bot-hermes 29ff83cfd6 fix(worker): honor jobs.maxAttempts and treat NULL nextRetryAt as due 2026-08-06 13:47:19 +00:00
Hermes affdf1661d fix: map Drizzle camelCase fields to frontend snake_case fields in reports API 2026-08-02 02:26:36 +00:00