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
Hermes
420ebfe24a
fix: isolate note title in memoized component, prevent search input stealing focus
2026-08-01 13:02:55 +00:00
Hermes
9b0c1fb447
fix: use onBlur for NoteEditor save instead of onInput to prevent focus stealing
2026-08-01 13:00:28 +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