Handoff: CreatorTrack + LifeOS autonomous overhaul (2026-07-03)¶
URL: https://mkdocs.justinsforge.com/memory/handoffs/creatortrack-overhaul-2026-07-03/
Ran overnight while Justin was offline. 10 workstreams built by parallel worktree agents, merged behind a tsc --noEmit gate, deployed to dev.creatortrack.ai. Plan: creatortrack-autonomous-overhaul-2026-07-03.
Status: everything merged + on dev¶
- forge-suite
mainheadfeb13c4,tsc --noEmitclean, dev serving (/login200,/api/changeslive). - Bots restarted clean (5/5 active, watchdog ok); new tool surface loaded.
- Prod is untouched (still on the pre-overhaul build), per "restart dev".
- Nothing is runtime-QA'd through the UI (agents verified compile + I smoke-tested the APIs). The UI features need your click-through on dev before prod.
What shipped (all on dev)¶
| Workstream | What | Notes |
|---|---|---|
| Bot API 1+2 | Narrow verbs widened + NEW journal/CRM/pages/projects tools + a generic creatortrack escape-hatch tool on all 3 bots |
All 7 new tools registered+handlered; generic tool + journal/crm/task-with-time/page all smoke-tested live on dev, landed in ws 67, cleaned up |
| Task times+reminders | Optional time on Due; reminder = set time OR offset (5m default / 30m / 1h / 1d / at / none); timed tasks render at their hour on the calendar | DST-correct Chicago compose; Today/Overdue counts unchanged |
| Habits UX | Multi-check auto-apply (Save button removed); Overview click-to-open page; color-offset fix | Color fix = changed Overview default from flat-green ramp to per-habit color. EYEBALL THIS in case "offset" meant something else |
| Task views filter/sort | Filter by tag/priority, sort by due-time/priority/created/title, persisted in prefs | |
| Knowledge->task popup | Convert-to-task opens a modal for due/priority/list/tags/notes | reused shared Modal |
| Fitness overview | New default Overview tab aggregating readiness/sleep/garmin/training/food/body/strength/sessions | read-only, composes existing /api/fitness/data |
| Live polling | Cheap /api/changes?workspaceId= cursor + useWorkspaceChanges hook; wired into Habits + Tasks clients |
only refetches when the cursor advances |
| Habits<->Tasks | Per-habit "push to tasks" (opt-in, defaults OFF) files a tagged task under a "Habits" list; task Done -> habit done | inert until you enable it on a habit |
| Sharing + live collab | Invite-by-email + role on the Share menu; router.refresh() on workspace-cursor change (editing-guarded) |
presence NOT built (deferred) |
Commits: bots in forge 8dc76bc (branch workspace-lifeos-spine-phase01); everything else merged into forge-suite main (branch commits: a-bots-api 7c77af1, b-task-times 7c9b0be, c-habits-ux 28b949d, d-task-views a43eb61, f-knowledge-task a9b580b, g-fitness-overview 111e554, h-live-polling f6b961d, w2-polish 6f86e89, w2-habittask ceb731b, w2-collab ad2e4dd).
IMPORTANT: bots point at DEV tonight¶
~/.forge-secrets/creatortrack-bot.env CREATORTRACK_BASE_URL=http://localhost:3060 (was :3070). Dev + prod share the SAME lifeos DB, so your captures still land in the real justin workspace (id 67) and show on prod too. Reason: the new capture verbs (journal/crm) only exist on the dev build. To promote: click through the dev UI, then deploy prod (cd ~/forge-suite && npm run build && sudo systemctl restart creatortrack-prod), flip that env back to :3070, restart bots. Rollback of any bot behavior: WORKSPACE_WRITE_TARGET=notion in the bot's drop-in.
Follow-ups / needs your eyes¶
- All UI is unverified at runtime. Drive it on dev: habits auto-apply + color, task time picker + reminder, filter/sort, knowledge->task modal, fitness Overview, share dialog, live-refresh with two tabs.
- In-app edit live-poll gap: the cursor bump was fixed for the capture path, but
lib/{habits,meals,goals,crm}.tshave their ownsetCellcopies that still don't bumpnodes.updated_at, so a MANUAL in-app re-edit of an existing cell won't live-refresh other tabs. Scoped follow-up (4 files, additive). - Habits->tasks reverse direction (task Done marks habit done when no log exists) is best-effort; confirm it doesn't surprise you.
- Collab: node-share caller gating relies on RLS (not a handler owner-check); confirm the intended "who can share" policy. Presence indicator not built.
- Color-offset fix is a judgment call (see table).
Still open from earlier tonight (unrelated to the overhaul)¶
- Hydrate 15 vs 12: the migrated Hydrate habit kept its Notion goal of 15 cups; you made a separate 12-cup goal. Reconcile if you want them to match.
- Notion decommission Phases 2-4 (notion-decommission-2026-07-02): repoint remaining read tools + pipelines/crons, delete the Notion client. Phase 1 (habit + goal defs) done.
[Claude Code]