bot-hermes
2a7d2812d4
feat(states): add states CRUD API routes
2026-09-07 18:22:31 +00:00
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
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
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
456d637a24
fix: isolate note editor in memoized pane to prevent focus stealing on parent re-render
2026-08-01 13:16:05 +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