- plan.md: overview now lists English, French & Danish; status header
tracks the remediation work; date-formatting note updated to Intl
- AGENTS.md: Build & Run section now lists lint, lint:fix, the test/
test:* scripts and the site scripts
- technical docs (EN/FR): date formatting section rewritten for the
Intl-based formatter (incl. Danish column), streak definition notes
only completed logs count
- user guide (EN/FR): delete sections mention the new usage counts in
the confirmation dialogs
- decision log entries for F1/F3/F4 landed with their fixes
- npm run format over the touched markdown/code
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
session_item.item_id is polymorphic (no FK), so deleting an exercise or
combo used in a session left orphaned rows that the INNER JOIN in
getItems silently hid. Exercise/combo deletes now also remove their
session_item rows in one transaction. Delete confirmations on the
exercise/combo/session detail views now include usage counts (sessions/
combos using an exercise, sessions using a combo, collections containing
a session) via new count helpers and deleteConfirmUsage keys (EN/FR/DA).
Confirm stays informative, not blocking, consistent with the existing
history warning.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Restoring a backup copied the backup's schema_version into the live DB.
Once SCHEMA_VERSION moves past 1, restoring an older backup (already
adapted to the current schema by the migration scripts) would leave an
old stamp, so the next launch re-runs migrations against an
already-adapted schema and blocks the app. schema_version is now
excluded from the restore copy; the live stamp is correct by
construction. Regression test tampers a backup's stamp and asserts the
live one survives.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Logs whose id already exists locally were re-inserted as-is, producing a
PRIMARY KEY violation per log that surfaced as errors in the import
report. They are now counted as skipped (execution logs are immutable
history — skip is always the right resolution). Adds the missing
regression test: re-import a full export without deleting anything.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>