amosblomqvist
b7a19609cb
practice slice 2 — store, paths, self-contained sets
Contract amendment (planning ruling): ProblemSet gains propositions
(nodeId → {name, statement}) and chains (the frozen derivation) — sets
are documents of what WAS selected; grading/dedup/coverage never touch
the live graph. config.ts PATHS.practice → data/practice/. PracticeStore
port (createSet assigns ps_<ts36>_<rand>, getSet, listSets createdAt-desc,
saveSet replace-whole, deleteSet). src/store/practice.ts: one JSON per
set, hand-written isProblemSet read guard (types-only; corrupt/missing →
null/skipped, never thrown; saveSet refuses invalid records). Wired in
src/server/stores.ts. 10-test suite: round-trip, corrupt-tolerance,
missing-dir, validator garbage-reject + optional-tolerate + verdict
union, ps_ id shape.
2026-09-29 17:53:36 +03:00
..
2026-09-19 15:24:26 +03:00
2026-09-24 02:10:06 +03:00
2026-09-25 21:24:43 +03:00
2026-09-22 00:02:07 +03:00
2026-09-19 22:52:40 +03:00
2026-09-19 20:54:16 +03:00
2026-09-24 23:20:59 +03:00
2026-09-28 23:30:11 +03:00
2026-09-27 09:13:34 +03:00
2026-09-23 15:37:34 +03:00
2026-09-24 19:33:35 +03:00
2026-09-28 22:37:18 +03:00
2026-09-23 03:53:57 +03:00
2026-09-24 20:06:22 +03:00
2026-09-26 21:45:51 +03:00
2026-09-27 04:36:00 +03:00
2026-09-29 02:25:32 +03:00
2026-09-25 20:12:57 +03:00
2026-09-23 00:19:16 +03:00
2026-09-25 23:32:13 +03:00
2026-09-12 06:02:40 +03:00
2026-09-23 20:20:36 +03:00
2026-09-23 20:20:36 +03:00
2026-09-29 04:10:38 +03:00
2026-09-24 19:25:37 +03:00
2026-09-29 02:25:32 +03:00
2026-09-23 03:53:57 +03:00
2026-09-27 04:14:42 +03:00
2026-09-25 02:39:11 +03:00
2026-09-29 02:25:32 +03:00
2026-09-22 16:56:44 +03:00
2026-09-28 23:30:11 +03:00
2026-09-19 13:16:34 +03:00
2026-09-19 15:24:26 +03:00
2026-09-19 16:52:09 +03:00
2026-09-27 08:55:13 +03:00
2026-09-26 01:52:47 +03:00
2026-09-27 08:55:13 +03:00
2026-09-27 00:47:48 +03:00
2026-09-29 17:53:36 +03:00
2026-09-29 17:48:20 +03:00
2026-09-29 04:39:01 +03:00
2026-09-26 00:37:46 +03:00
2026-09-27 04:14:42 +03:00
2026-09-27 09:13:34 +03:00
2026-09-27 09:13:34 +03:00
2026-09-25 23:32:13 +03:00
2026-09-29 04:30:15 +03:00
2026-09-27 09:13:34 +03:00
2026-09-27 00:48:46 +03:00
2026-09-24 15:51:40 +03:00
2026-09-25 01:52:20 +03:00
2026-09-23 22:05:58 +03:00
2026-09-19 13:16:34 +03:00
2026-09-28 23:30:11 +03:00
2026-09-24 15:26:22 +03:00
2026-09-27 00:47:48 +03:00
2026-09-29 03:00:57 +03:00
2026-09-25 20:02:19 +03:00
2026-09-17 13:48:04 +03:00
2026-09-29 04:30:15 +03:00
2026-09-26 23:53:43 +03:00
2026-09-22 00:02:07 +03:00
2026-09-22 00:02:07 +03:00
2026-09-29 02:25:32 +03:00
2026-09-24 20:06:22 +03:00
2026-09-27 00:48:46 +03:00
2026-09-28 22:37:18 +03:00
2026-09-24 15:12:24 +03:00
2026-09-27 08:55:13 +03:00
2026-09-28 23:30:11 +03:00
2026-09-22 21:55:33 +03:00
2026-09-28 23:30:11 +03:00
2026-09-28 23:30:11 +03:00
2026-09-26 01:52:47 +03:00
2026-09-22 22:05:27 +03:00
2026-09-25 23:32:13 +03:00
2026-09-27 09:13:34 +03:00
2026-09-27 08:55:13 +03:00
2026-09-25 02:26:37 +03:00
2026-09-01 01:57:13 +03:00
2026-09-29 04:30:15 +03:00
2026-09-25 23:32:13 +03:00
2026-09-25 00:46:10 +03:00