Files
proof-of-work/start9/0.4
Keysat f487204b73
CI / proof-of-work (Next.js app) (push) Has been cancelled
CI / start9/0.4 (StartOS package code) (push) Has been cancelled
v1.2.0:1 — upgrade to Next.js 15 / React 19
Closes the remaining P1: move off Next 14 onto the CVE-patched Next 15
line (15.5.x), eliminating the framework's RSC DoS/source-exposure
advisories and the middleware-auth-bypass class that applied to the 14.x
auth gate. App Router on Next 15 requires React 19, so react/react-dom
move to 19.x in lockstep; lucide-react and next-themes bump to their
React-19-compatible releases.

The code surface was the Next 15 async-request-API change: params and
searchParams are now Promises. All [id] route handlers (10 files) and the
four server pages that read them now await the resolved value, using a
uniform re-derive idiom that leaves handler bodies untouched. cookies()/
headers() were already awaited, so no other request-API changes were
needed; all routes stay dynamic, so the uncached-by-default change is a
no-op. next.config.js (static CSP) and the middleware matcher are
unchanged. No schema, no API contract change, no data migration.

Verified: tsc + lint clean, 209 tests pass, next build succeeds with the
standalone bundle tracing the Prisma engine.
2026-06-13 00:29:47 -05:00
..
2026-05-09 13:40:58 -05:00

Proof of Work Logo

Proof of Work on StartOS 0.4 (migration package)

This directory packages Proof of Work (proof-of-work) for StartOS 0.4 beta. It is the cutover package that carries your 0.3.5 data across to a new x86_64 StartOS 0.4 host.

Upstream app lives at ../../proof-of-work/ in this repo. Legacy 0.3.5 package lives at ../0.3.5/ (kept intact; do not modify). Codex's WIP 0.4 scaffold lives at ../0.4/ (kept intact; superseded by this folder).

Goals

  • Keep the package id proof-of-work so StartOS recognizes it as the same service.
  • Keep the persistent data volume main mounted at /data.
  • Keep the SQLite database at /data/app.db.
  • Preserve every existing workout, set, exercise, and preference.
  • Ship x86_64 only for 0.4 beta (sideload target).

How data preservation works

  1. seed/data/app.db holds a one-time snapshot of /data from the live 0.3.5 host (currently 1 user, 348 workouts, 164 exercises, 5720 set logs).
  2. The Dockerfile bakes that snapshot into the image at /app/seed/data/.
  3. On first boot only/data/app.db missing AND /data/.seeded absent — docker_entrypoint.sh copies the seed into /data/ and writes a .seeded marker.
  4. On every subsequent boot, /data/ is the sole source of truth; the seed in the image is ignored.

See seed/README.md for the snapshot provenance and row counts.

Image runtime

Property Value
Base image node:20-alpine (multi-stage build)
App runtime Next.js standalone + Prisma + SQLite
Entrypoint /usr/local/bin/docker_entrypoint.sh (dumb-init wrapped)
Internal port 3000
Architectures x86_64 (beta)

Build and sideload

cd start9/0.4
npm ci
make clean
make x86      # outputs proof-of-work_x86_64.s9pk

Sideload via StartOS web UI or make install (requires ~/.startos/config.yaml). Step-by-step instructions are in DEPLOY_040.md.

What is unchanged from 0.3.5

  • Package id: proof-of-work
  • Volume id: main
  • Mount path: /data
  • DB path: /data/app.db
  • Health endpoint: /api/health
  • Compat ALTER TABLE block (idempotent; no-op on a current DB)

What is new in 0.4

  • TypeScript SDK manifest under startos/
  • ExVer version (0.1.0:18) replaces the 0.3.5 4-part 0.1.0.17
  • Seed-on-first-boot with a .seeded marker and stderr logging
  • alertUpdate warning users not to Uninstall to troubleshoot
  • Self-contained Dockerfile — no references to ../0.3.5/ or ../0.4/

Follow-up releases (planned, do not ship yet)

  • v0.1.0:19 — remove the COPY seed/data \u2026 line and the seed block from the entrypoint once the cutover is confirmed. Leaves seed/ on disk unreferenced.
  • v0.1.0:19 or v0.1.0:20 — add a StartOS Package Action change-admin-credentials that updates the User row in /data/app.db (bcryptjs, salt rounds 10) so you can rename/rotate the admin from the StartOS UI.