82 lines
4.7 KiB
Markdown
82 lines
4.7 KiB
Markdown
# Session: 2026-06-17 — Reverse-engineer, plan, kick off Phase 0
|
||
|
||
## Goal
|
||
Take an inherited Create/Anything export of an insole-production time tracker, understand
|
||
it, decide a direction, and start building toward a self-owned version.
|
||
|
||
## Work done
|
||
1. **Git repo created.** Initialised, baseline commit of the code "as received".
|
||
2. **Reverse-engineering.** Established it is a two-app monorepo: `apps/mobile` (Expo) +
|
||
`apps/web` (Next.js backend on Neon Postgres) + `publisher/`. Found it heavily coupled
|
||
to the Create platform; the live data/accounts are held in the platform's DB (owned by
|
||
the friend's Create account), not by us.
|
||
3. **Fixes committed.** Corrected `CLAUDE.md`; found & repaired `/api/logs` (git-ignored by
|
||
an over-broad `logs` rule **and** missing its `import sql`); added a reverse-engineered
|
||
`apps/web/db/schema.sql`; reconciled `yarn.lock` with `package.json`; installed deps.
|
||
4. **Brainstormed the target** (superpowers:brainstorming) and wrote
|
||
**`docs/roadmap.md`** — vision + 8 decisions + architecture + 6-phase roadmap.
|
||
5. **Wrote `docs/plans/phase-0-foundation.md`** (superpowers:writing-plans) — a TDD plan
|
||
for the dockerized backend.
|
||
6. **Repo hygiene:** `.gitattributes` (LF normalization); gitignored `.mcp.json` and
|
||
`CLAUDE.local.md`.
|
||
|
||
## Key decisions (full detail in docs/roadmap.md)
|
||
- Purpose: real workshop tool **and** learning vehicle.
|
||
- **Clean break** from the Create platform; **greenfield rebuild** porting the good parts.
|
||
- **Dedicated backend service** (Option A) owns auth + DB; mobile and admin are clients.
|
||
- Stack: **Hono + better-auth + Drizzle + SQLite (libsql)**, TypeScript everywhere,
|
||
**dockerized** (local now, any cloud later). Project name: **SoleLog** (`@solelog/*`).
|
||
|
||
## Current state
|
||
- Working tree clean; planning docs tracked under `docs/`.
|
||
- Phase 0 plan ready; implementation kicked off via a multi-agent **workflow**
|
||
(per-task implement + adversarial verify).
|
||
- Inherited `apps/mobile` / `apps/web` remain untouched as reference.
|
||
|
||
## Next steps
|
||
- Complete Phase 0 (tasks 1–6): dockerized backend + auth round-trip.
|
||
- Then Phase 1 (worker timing flow with server-authoritative sessions).
|
||
|
||
## Update — Plane tracking + workflow resume
|
||
|
||
- **Plane tickets created** (project SoleLog, `SL`):
|
||
- `SL-1` — Phase 0 parent (In Progress).
|
||
- `SL-2` — Task 1 (Done; commit `f83c9a6`, `@solelog/shared` + `packages/*` wiring).
|
||
- `SL-3`…`SL-7` — Tasks 2–6 (Task 2 In Progress, rest Todo).
|
||
- Note: Plane epics feature is not enabled on this instance (`resolve_work_item_type "Epic"` → 404),
|
||
so Phase 0 is a regular parent work item with child tasks instead of an Epic.
|
||
- **Workflow status:** the Phase 0 workflow (`wf_fb12871c-e87`, task `whk7sod9p`) **survived the
|
||
`/compact`** and is still running in the background — Task 1 committed, Tasks 2–6 in progress.
|
||
Resume was unnecessary (and is blocked while the run is live). Letting it run to completion.
|
||
|
||
## Phase 0 — COMPLETE ✅
|
||
|
||
The workflow finished all 6 tasks (0 fix loops). Independently re-verified: `yarn workspace
|
||
@solelog/api test` → 4 files / 5 tests pass, typecheck clean. The Task 6 verifier ran the
|
||
full **live Docker** round-trip (`docker compose up --build`): `/health` ok, sign-up → sign-in
|
||
→ bearer token → `GET /api/me` returns the user, no-token → 401, SQLite volume persisted.
|
||
|
||
**Commits:** `f83c9a6` shared · `62c8597` Hono+/health · `e8aa2c6` DB · `89f892c` better-auth
|
||
· `04cfe0f` /api/me · `bcb305b` docker.
|
||
|
||
**Two post-workflow fixes** (the only flagged issues, both verified):
|
||
- `41b65f2` — reconciled `apps/api/src/db/schema.ts` to the authoritative `better-auth@1.6.18`
|
||
CLI output (was `timestamp` → now `timestamp_ms`, nullable verification timestamps → notNull,
|
||
added `unixepoch` defaults + the `session_userId_idx` / `account_userId_idx` /
|
||
`verification_identifier_idx` indexes). Rebuilt migration 0000 from scratch (no data exists).
|
||
Converted index callbacks from the CLI's array form to the object form `drizzle-orm@0.36.4`
|
||
requires. `db:generate` now reports no pending changes.
|
||
- `efff221` — fixed `migrate.ts`'s direct-run guard (`pathToFileURL`) so `yarn db:migrate`
|
||
works on Windows for local dev, not just inside the Linux container.
|
||
|
||
**Plane:** `SL-1` (Phase 0) + `SL-2..SL-7` (Tasks 1–6) all **Done**.
|
||
|
||
**Next:** Phase 1 — worker timing (server-authoritative work-sessions, history, CSV export;
|
||
mobile app rebuilt onto the new API). Needs its own spec → plan → build cycle.
|
||
|
||
|
||
## Open items to confirm with the friend
|
||
- Whether any **live data / worker accounts** exist in his Create instance that must be
|
||
exported before going live on a fresh DB (a greenfield can't recreate it).
|
||
- Real **workbench ↔ activity** mapping (hardcoded/seeded for now).
|