2.5 KiB
2.5 KiB
ROADMAP
Longer-term backlog and deferred decisions. Near-term status lives in AGENTS.md → Current state; package-specific follow-ups live in s9pk/TODO.md.
Phase 3 — AI coach (deferred, not started)
- Integrate the DGX Spark LLM box (Qwen3.6 35B, OpenAI-compatible endpoint) as a training coach.
- Login-time training suggestions based on recent activity and goals.
- Per-category drill ideas on demand.
- Config via env-var names (endpoint URL, model); no keys in the repo.
Evaluation backlog
A full independent evaluation lives in EVALUATION.md (committed; re-runnable via /full-eval). Deferred items, by priority:
- P2 — dependency: upgrade
@fastify/static8.3.0 → ≥9.1.3 (known path-traversal advisories; no concrete exploit path here) and re-test static serving. - P2 — input validation: reject unknown metric
kind(notcount|duration|score|decimal); validate calendar-date semantics (the\d{4}-\d{2}-\d{2}regex accepts2026-13-99); return 400 instead of a rawSQLITE_CONSTRAINT_FOREIGNKEY500 on a badmetric_id. - P2 — tests: no automated suite yet; cover record-recompute direction, streak math, and migration idempotency against a temp DB.
- P3: CSRF token beyond
SameSite=Lax; cross-category metric guard on entry write; logout without a session; consistent 404s on delete; validate categorycolor.
Registry-submission blockers (private repo URLs, empty assets/, no CI) are intentionally not being worked — publishing to the community registry is not a goal.
Product backlog
- "Log another": allow multiple sessions of the same category in one day (the category pill currently edits the existing entry instead of creating a second).
- Speed units: option for
km/hin addition tomph. - Per-metric direction: expose a "higher is better / lower is better" toggle in the Settings metric editor (today it is set only via seed/migration; needed for new lower-is-better metrics like time or strokes).
Platform / packaging
- Password UX under StartOS: make the in-app Settings password change agree with the "Set Login Password" action — hide the in-app field on StartOS, or write changes through to
store.json. - Packaging hygiene: the vendored
s9pk/app/is gitignored, so the packagegitHashdoes not reflect app-source changes; revisit before publishing to a registry. - Other arches: build aarch64/riscv64 only if a target host needs them (currently x86_64-only).
Ops
originis configured on self-hosted Gitea (SSH, in.git/config); push after committing.