Hermes
7041906e7d
feat(plane-lift): API routes, UI components, migrations — Phase 2
...
New API routes:
- statuses.ts: CRUD for custom task statuses
- automations.ts: automation rules engine
- timeline.ts: entity timeline/activity view
- activity.ts: activity feed endpoint
New UI components:
- gantt/: gantt chart (6 files: chart, task-bar, milestone, timeline, deps, utils)
- automation-rule-builder.tsx: visual rule editor
- notification-center.tsx: in-app notifications
- quick-add-bar.tsx: global quick-add
- entities/: detail-page, activity, comments, inline-edit, note-editor
- tasks/: recurrence-picker
New hooks:
- use-optimistic-patch.ts: optimistic UI updates
New libs:
- nlp-parser.ts + test: natural language task parsing
- notify.ts: notification dispatch
- automation-engine.ts: rule evaluation
DB migrations:
- 0007_custom_task_statuses.sql
- 0008_automation_rules.sql
- 0009_notifications.sql
- migrate-task-statuses.ts: backfill script
Modified:
- tasks.ts: plane-lift integration (stateId/moduleId/cycleId)
- analytics.ts: updated for new schema
- canvas/$id.tsx: restored
2026-09-07 18:09:03 +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
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
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
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
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
Hermes
affdf1661d
fix: map Drizzle camelCase fields to frontend snake_case fields in reports API
2026-08-02 02:26:36 +00:00
Hermes
7297b7075e
fix: reports API - add DB table, rewrite routes with Drizzle, fix TipTap type errors
...
Added reports table to PostgreSQL and Drizzle schema. Rewrote reports API routes to use Drizzle ORM instead of PocketBase stub. Fixed shared schema to match frontend field names. Fixed TipTap v3 type errors in note-editor.tsx and report-editor.tsx (StarterKit cast+chain as any).
2026-08-02 02:22:31 +00:00
Hermes
0df6d1c1c8
feat: add Edit/Delete dropdown menus to habits, projects, and sections
...
- Habits page: Add DropdownMenu with Edit/Delete options, Edit dialog
(name/description/frequency/difficulty), Delete confirmation
- Projects page: Add DropdownMenu with Edit/Delete options, Edit dialog
(name/description/status), Delete confirmation
- Project detail page: Add DropdownMenu with Edit/Delete per section,
Edit Section dialog (name/kind/status), Delete confirmation
2026-08-02 01:25:14 +00:00
Hermes
2b4b6f4165
fix: stabilize NoteEditor/NoteEditorPane memoization with useCallback
...
Root cause: inline arrow functions for onDelete and onSave props created new references every render, breaking React.memo and causing editor re-renders that steal focus.
2026-08-01 23:02:46 +00:00
Hermes
ac92284edd
fix: remove queryClient.invalidateQueries from title save to prevent parent re-render focus stealing
2026-08-01 13:27:08 +00:00
Hermes
aa5da5d770
fix: restore selectedNoteId as state for re-render
2026-08-01 13:23:35 +00:00
Hermes
58e563f21d
fix: remove selectedNoteId state entirely to prevent parent re-render focus stealing
2026-08-01 13:22:23 +00:00
Hermes
a673d77d58
fix: prevent search input from receiving focus via onMouseDown preventDefault
2026-08-01 13:21:14 +00:00
Hermes
dfaf0ff659
fix: add onMouseDown stopPropagation to title input
2026-08-01 13:19:30 +00:00
Hermes
2cf6638d9e
fix: isolate note editor in memoized pane to prevent focus stealing on parent re-render
2026-08-01 13:18:08 +00:00
Hermes
d9000c9f76
fix: restore selectedNoteId as state for re-render, keep ref for content
2026-08-01 13:11:31 +00:00
Hermes
7776668269
fix: remove all state changes on note selection to prevent focus stealing
2026-08-01 13:09:35 +00:00
Hermes
4a83ee88ba
fix: add autoFocus to title input to reclaim focus after re-render
2026-08-01 13:09:25 +00:00
Hermes
82db10a10d
fix: add tabIndex=-1 to search input to prevent auto-focus stealing from title input
2026-08-01 13:07:45 +00:00
Hermes
d0d6002126
fix: use ref-based selectedNote to prevent re-render focus stealing
2026-08-01 13:07:20 +00:00
Hermes
eeff700875
fix: TipTap focus leak - use uncontrolled NoteTitleInput with ref to prevent focus stealing on parent re-render
2026-08-01 13:05:31 +00:00
Hermes
3f1a1982ca
fix: use uncontrolled inputs for note title and editor to prevent focus leak to search field
2026-08-01 13:04:24 +00:00
Hermes
420ebfe24a
fix: isolate note title in memoized component, prevent search input stealing focus
2026-08-01 13:02:55 +00:00
Hermes
a65b828c78
fix: isolate note title in memoized component to prevent focus leak to search field
2026-08-01 13:00:22 +00:00
Hermes
21efa311da
fix: prevent NoteEditor re-render stealing focus - use key remount, onBlur save, stable ref
2026-08-01 12:58:46 +00:00
Hermes
8917f3ad19
fix: add missing quotes around className in NoteTitleInput
2026-08-01 12:58:34 +00:00
Hermes
ec0fb10b3e
fix: add missing quotes around className in NoteTitleInput
2026-08-01 12:57:53 +00:00
Hermes
c35ea2b175
fix: isolate note title input in memoized component to prevent focus leak to search field
2026-08-01 12:57:32 +00:00
Hermes
ee57195681
fix: stabilize handleContentChange callback via ref to prevent NoteEditor re-render stealing focus
2026-08-01 12:53:19 +00:00
Hermes
445f5e1257
fix: use uncontrolled input for note title to prevent focus leak to search field
2026-08-01 12:51:50 +00:00
Hermes
ff2611ce18
fix: save note title on blur instead of every keystroke to prevent focus leak
2026-08-01 12:50:16 +00:00
Hermes
67214575fb
fix: debounce note title save to prevent focus leak to search field
2026-08-01 12:49:27 +00:00
Hermes
35d063ea82
fix: R3 bugs - TipTap focus leak to search, Quick Captured opens palette, Calendar day view switching
2026-08-01 12:46:41 +00:00
Hermes
085f552c4b
fix: calendar day view - separate Calendar instances per view to avoid react-big-calendar view switching bug
2026-08-01 12:40:23 +00:00
Hermes
6613ff058e
fix: calendar day view - wrapper div key remount for forced reinit
2026-08-01 12:38:55 +00:00
Hermes
d142db40c1
fix: calendar day view - test with regular Calendar (no DnD)
2026-08-01 12:35:01 +00:00