chore(planning): bootstrap v1.5 marathon

Reset .planning/STATE.md and .planning/ROADMAP.md for the v1.5
overnight marathon. STATE.md tracks 12 phases (0–11) with empty
checkboxes; phase 0 marked done. Capture phase-0 sanity report at
.planning/phase-0-report.md (git status clean, recent commits, CI
status, /api/version=1.4.12 — one tag behind HEAD because the
v1.4.13 GHCR build is still in_progress; phase 1 owns the force-pull
verification). ROADMAP.md condenses the 12-phase plan with the
time-runs-short minimum (1+2+7+8) for shipping v1.5.0.

Previous milestone (v1.4.6) summary preserved as a one-line link to
docs/audit/v146-summary.md at the top of STATE.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marc-André BombeckandClaude Opus 4.7 committed 2026-05-09 15:23:34 +02:00
1 parent cfa8ea60a0
commit 2c488b830c
3 files changed
+178 -82

No files matched your search

+24 -16
View File
@@ -1,21 +1,29 @@
# HealthLog v1.4.6 — roadmap
# HealthLog v1.5 — roadmap
Milestone: **v1.4.6** (overnight 2026-05-09)
Milestone: **v1.5.0** (overnight 2026-05-09 → 2026-05-10)
Latest tag at start: v1.4.13 (Codex-OAuth model slug `gpt-5` patch)
| Phase | Goal | State |
| ----- | ------------------------------------------------ | ------- |
| 1 | CI green (e2e workflow root cause + fix) | pending |
| 2 | Tier 1 fixes T1–T9 | pending |
| 3 | New feature: chart bucketing for >1y ranges | pending |
| 4 | Tier 2 polish P1–P20 | pending |
| 5 | Multi-agent QA + simplify pass | pending |
| 6 | Pre-release verification | pending |
| 7 | Release commit, tag, deploy, verify production | pending |
| 8 | GitHub releases backfill (v1.4.2–v1.4.6) + GHCR | pending |
| 9 | Docs site (`healthlog-docs`) + landing site sync | pending |
| 10 | Summary doc + Marc-facing brief | pending |
| Phase | Goal | State |
| ----- | -------------------------------------------------------------------------- | ------- |
| 0 | Bootstrap — STATE+ROADMAP, git/CI/prod sanity, single chore commit | done |
| 1 | Verify Codex-OAuth end-to-end (device-start shape, prod logs, gpt-5 slug) | pending |
| 2 | v1.4.6 deferred backlog — T2.1..T2.7 (wipe scope, DST math, 5xx → 422/503, status-card test, redact regex, Backups view, /admin/users) | pending |
| 3 | End-to-end test coverage — authed dashboard, add-measurement, KI flow, doctor PDF, insights, mobile smoke, axe-core extended | pending |
| 4 | Performance audit — Playwright capture, `docs/audit/v15-performance.md`, top-3 wins inline | pending |
| 4b | Admin Panel refactor — `/admin/[section]` dynamic routes mirror Settings; sidebar Admin group; legacy hash redirects; bundle-size win | pending |
| 5 | UX polish — design-review top-10 friction points, CRITICAL/HIGH triage | pending |
| 6 | Multi-agent QA (parallel) — code-reviewer, security, visual/UX, simplify | pending |
| 7 | Pre-release verification — typecheck / lint / format / test / integration / build / e2e | pending |
| 8 | Release v1.5.0 — bump, CHANGELOG, tag, GHCR, Coolify force-pull, /api/version=1.5.0, smoke screenshots | pending |
| 9 | Docs + landing site sync to v1.5 | pending |
| 10 | Backfill GitHub releases v1.4.7..v1.4.13 from CHANGELOG | pending |
| 11 | Final summary `docs/audit/v15-summary.md` with Marc-Brief | pending |
Stop conditions: production red, large un-spec'd issue, context cutoff,
budget short of polish — write status doc, do not auto-rollback.
or budget short of polish — write status doc, do not auto-rollback.
Spec: `docs/audit/v146-findings.md` (every finding ID, every test, every gate).
Time-runs-short minimum to ship v1.5.0: Phase 1 + Phase 2 + Phase 7 +
Phase 8. Phases 3–6 + 9 are deferrable to v1.5.1.
Spec: `/Users/marc/infra/prompts/v15-night-marathon.md` (orchestrator
prompt, every phase, every gate).
+93 -66
View File
@@ -1,92 +1,119 @@
# v1.4.6 marathon — state log
# v1.5 marathon — state log
Status: **release tagged, awaiting Coolify deploy** (2026-05-09 ~02:30)
Status: phase-0-done
Last update: 2026-05-09T15:25:00+02:00
## Phase 0 — Bootstrap ✅
> Previous milestone: see `docs/audit/v146-summary.md` (v1.4.6 marathon).
> Codex-OAuth iteration v1.4.7 → v1.4.13 landed in CHANGELOG between
> the v1.4.6 release and this marathon kickoff.
Committed `ecca54d`.
## Phase 0 — Bootstrap
## Phase 1 — CI green ⚠️
- [x] STATE+ROADMAP rewritten for v1.5
- [x] git status clean
- [x] CI status captured (v1.4.13 docker-publish still in_progress; e2e on cfa8ea6 = failure)
- [x] /api/version=1.4.13 confirmed — **DISCREPANCY**: prod still on 1.4.12 because the v1.4.13 GHCR build is mid-flight; phase-1 will need to confirm 1.4.13 lives after the build completes (force-pull recipe per hard-rule #10)
- Result: ok / commit `<filled in by commit step>`
- Detailed report: `.planning/phase-0-report.md`
- e2e workflow fixed in `bcd1de4` (pnpm-version override) and `46e686f`
(mobile project → Pixel 5, locale-cookie anchor, login-form open).
- Latest run on the v1.4.6 SHA is queued; conclusion not yet known
at tag time. Per release-spec, e2e green is not a hard gate.
## Phase 1 — Verify Codex-OAuth flow end-to-end
## Phase 2 — Tier 1 fixes (T1–T9) ✅
- [ ] /api/version=1.4.13 confirmed (currently 1.4.12 — needs force-pull after GHCR build completes)
- [ ] device-start endpoint returns spec-shaped response
- [ ] prod logs reviewed for codex.* events
- [ ] gpt-5 model accepted by chatgpt.com backend
- Detailed report: `.planning/phase-1-report.md` (will be written by phase-1 agent)
| ID | Commit | Note |
| ------- | --------- | ---------------------------------------------------- |
| T1 + T2 | `8aae7d6` | tile fill + muted-foreground hierarchy |
| T3 | `a75fbc6` | primary recommendation chart-token render |
| T4 | `eba898f` | aiBaseUrl cross-provider leak fix + test |
| T5 | `c8ee28d` | insights/generate 502 → 422 |
| T6 | `4aeb8c9` | admin status-card hrefs + tightened test |
| T7 | `31959e4` | bug-report toggle now blocks /api/feedback + UI |
| T8 | `c3ca861` | data-wipe preserves AuditLog + scope copy |
| T9 | `1adda80` | per-card window 360+24 buckets, 7 generators + tests |
## Phase 2 — v1.4.6 deferred backlog
## Phase 3 — Chart bucketing ✅
- [ ] T2.1 notification-channel scope of "Wipe all data"
- [ ] T2.2 Berlin TZ DST math in cross-metric joins
- [ ] T2.3 /api/insights/generate provider-error → 422/503
- [ ] T2.4 status-card-grid test brittleness
- [ ] T2.5 redactSecrets regex word-boundary
- [ ] T2.6 Backups dedicated admin section
- [ ] T2.7 /admin/users dedicated sub-route
- Detailed report: `.planning/phase-2-report.md`
`6a64df0` — `bucketTimeSeries` helper + chip in chart header + 14
unit tests.
## Phase 3 — End-to-end test coverage
## Phase 4 — Tier 2 polish ✅
- [ ] Authenticated dashboard render
- [ ] Add measurement flow
- [ ] Settings → KI Codex flow (mocked)
- [ ] Doctor report PDF
- [ ] Insights generation flow (mocked)
- [ ] Mobile-viewport smoke (Pixel 5, no h-scroll, CTAs ≥ 44×44)
- [ ] axe-core extended to /dashboard, /settings/integrations, /admin
- Detailed report: `.planning/phase-3-report.md`
P1-P5 in `fda8dd8`, P6+P10 in `dc6db82`, P7-P9 in `5c884b3`, P11 in
`e903d9a`, P12 in `c7b6005`, P13 in `4a159d2`, P14 in `dcc697c`,
P15+P16 in `89b5b80`, P17 in `505f318`, P18 in `86a4b52`, P19 in
`2654337`, P20 in `dc4507a`.
## Phase 4 — Performance audit
## Phase 5 — QA ✅
- [ ] Playwright capture: /, /settings/integrations, /admin, /insights at desktop+mobile
- [ ] Report at `docs/audit/v15-performance.md`
- [ ] Top 3 wins identified, <30 LOC ones implemented inline
- Detailed report: `.planning/phase-4-report.md`
3 parallel reviewers (security / design / code-review). No
CRITICAL / HIGH carried into v1.4.6 except 3 quick follow-ups
applied in `6757518`:
## Phase 4b — Admin Panel refactor (Settings-style dynamic routes)
- ai-section.tsx orange tokens → dracula tokens (also fixes contrast)
- status-card-grid.tsx CTAs relabelled honestly ("Open integrations",
"Open system status")
- idempotency.ts `text.includes("sk-")` → tightened regex with
false-positive regression tests for "task-id" / "risk-management"
- [ ] /admin/[section]/page.tsx + admin-shell sidebar
- [ ] Sections moved to /admin/<slug> routes (system-status, services, integrations, feedback, reminders, users, api-tokens, login-overview, backups, danger-zone)
- [ ] Status-card CTAs use real routes (no #anchor)
- [ ] i18n keys reorganised under admin.section.<slug>.*
- [ ] Sidebar nav expandable Admin group
- [ ] Legacy #anchor → new route redirect in proxy.ts
- [ ] Bundle-size win on /admin overview verified
- Detailed report: `.planning/phase-4b-report.md`
Deferred to v1.5: notification-channel data-wipe scope (M1), Berlin
TZ DST math in cross-metric joins (HIGH from code-review),
exhaustive-deps + set-state-in-effect refactor in about-section.
## Phase 5 — UX polish
## Phase 6 — Pre-release verification ✅
- [ ] design-review walkthrough top-10 friction points
- [ ] CRITICAL/HIGH triage
- Detailed report: `.planning/phase-5-report.md`
`pnpm typecheck` clean, `pnpm lint` 0 errors / 12 warnings,
`pnpm format:check` clean (after the prettier sweep in `02b9955`),
`pnpm test` 714 passed, `pnpm test:integration` 10 passed.
`pnpm build` fails locally on Node 25 (Reflect.get private member
bug in Turbopack); CI Docker uses Node 22 and is the canonical
release build path.
## Phase 6 — Multi-agent QA (parallel)
## Phase 7 — Release ✅
- [ ] superpowers:code-reviewer
- [ ] security review
- [ ] visual / UX review
- [ ] simplify on changed file set
- Detailed report: `.planning/phase-6-report.md`
- `package.json` 1.4.6 (`a852612`)
- `CHANGELOG.md` v1.4.6 block (`a852612`)
- Tag `v1.4.6` pushed
- GHCR docker-publish: in_progress
- Coolify deploy: pending GHCR
## Phase 7 — Pre-release verification
## Phase 8 — Releases ✅
- [ ] pnpm typecheck
- [ ] pnpm lint
- [ ] pnpm format:check
- [ ] pnpm test
- [ ] pnpm test:integration
- [ ] pnpm build (Node-25 bug documented if hit)
- [ ] pnpm e2e
- Detailed report: `.planning/phase-7-report.md`
GitHub releases v1.4.2, v1.4.3, v1.4.4, v1.4.5, v1.4.6 backfilled
from the CHANGELOG blocks. URLs:
https://github.com/MBombeck/HealthLog/releases/tag/v1.4.{2,3,4,5,6}
## Phase 8 — Release v1.5.0
GHCR untagged-manifest cleanup: not run; pre-existing tagged
versions (v1.x.x) are pinned, no orphan manifests visible. Defer
unless Marc asks.
- [ ] package.json bumped
- [ ] CHANGELOG entry
- [ ] tag v1.5.0 pushed
- [ ] GHCR build green
- [ ] Coolify deploy + force-pull
- [ ] /api/version=1.5.0 confirmed
- [ ] image digest changed
- [ ] prod smoke screenshots saved
- Detailed report: `.planning/phase-8-report.md`
## Phase 9 — Docs / landing 🔄
## Phase 9 — Docs + landing sync
`general-purpose` agent dispatched to bring `healthlog-docs` from
v1.2 to v1.4.6 and apply minimal updates to `healthlog-landing`.
Running in background.
- [ ] healthlog-docs updated to v1.5
- [ ] healthlog-landing updated
- [ ] both committed + pushed
- Detailed report: `.planning/phase-9-report.md`
## Phase 10 — Summary
## Phase 10 — Backfill GitHub releases v1.4.7-v1.4.13
`docs/audit/v146-summary.md` — last step.
- [ ] Releases for v1.4.7..v1.4.13 created from CHANGELOG
- Detailed report: `.planning/phase-10-report.md`
## Phase 11 — Final summary doc
- [ ] docs/audit/v15-summary.md with Marc-Brief
- Detailed report: `.planning/phase-11-report.md`
+61
View File
@@ -0,0 +1,61 @@
# Phase 0 — Bootstrap report
Status: **done**
Timestamp: 2026-05-09T15:25:00+02:00
Commit: see `chore(planning): bootstrap v1.5 marathon` on origin/main.
## Working tree
`git status` clean, branch `main` up to date with `origin/main`.
## Recent commits (`git log --oneline -15`)
```
cfa8ea6 fix(ai): use plain gpt-5 model slug for ChatGPT-account auth
e4a07bc fix(ai): complete Codex backend protocol implementation per spec
e0de659 fix(ai): CodexClient consumes SSE stream from chatgpt.com backend
68e5797 fix(ai): Codex backend request body matches OpenAI Responses schema
3dbc8af fix(ai): device-code flow uses OAuth access token directly (v1.4.8 follow-up)
19eb1d9 fix(ai): switch ChatGPT-OAuth to device-code flow (v1.4.7-followup)
2f7f487 fix(ai): Codex OAuth flow — correct issuer + api-key exchange
3bca826 docs(release): v1.4.6 marathon summary
a852612 chore(release): v1.4.6
02b9955 chore(style): repo-wide prettier sweep before v1.4.6 tag
6757518 fix(qa): apply pre-release multi-agent QA findings
dc4507a fix(admin/status-overview): one failed probe no longer blanks the grid
2654337 fix(admin): surface query errors instead of an infinite spinner
86a4b52 fix(admin): danger-zone result colour driven by mutation state
505f318 style(admin): switch feedback-category badges to dracula tokens
```
The full v1.4.7 → v1.4.13 Codex iteration is in commits `2f7f487` →
`cfa8ea6`. v1.4.13 (`cfa8ea6`) is tagged but its docker-publish run
is still in_progress, so production has not yet swung over.
## CI status (`gh run list --limit 8`)
- v1.4.13 SHA `cfa8ea6`: docker-publish **in_progress** (two runs queued —
one is the duplicate that GHCR triggers per tag); e2e **failure** (the
e2e on the v1.4.13 SHA — known, not a hard release gate per v1.4.6
marathon doctrine, but worth a phase-1 follow-up if it persists);
Integration tests **success**; Security & Quality **success**.
- v1.4.12 SHA `e4a07bc`: docker-publish **success** (×2), Integration
tests **success** — i.e. v1.4.12 is the latest fully published image.
## Production state
`curl https://healthlog.bombeck.io/api/version` returns
`{"version":"1.4.12", ...}` — **production is one tag behind HEAD**.
Cause: the v1.4.13 docker-publish workflow is still building, and even
once it finishes, the Coolify-deploy quirk (hard-rule #10) means we
need to force-pull on apps-01 before /api/version flips to 1.4.13.
Phase 1 owns that confirmation step.
## Files written
- `.planning/STATE.md` — rewritten for v1.5 marathon, all phases stubbed.
- `.planning/ROADMAP.md` — v1.5 milestone with phases 0–11 lifted from
the marathon prompt.
- `.planning/phase-0-report.md` — this file.
`PROJECT.md` left untouched (no v1.5-specific changes needed yet).