Repository navigation
StudySprint webapp v0.5.0
Pre-releaseSurface release webapp v0.5.0, cut by the release-cut workflow (issue #4455 seam 3) from tag webapp-v0.5.0. Changes: see CHANGELOG.md at this tag.
Surface parity at this cut
Foundation: v0.5.0 · this surface: v0.5.0 (tag webapp-v0.5.0)
Parity matrix of record: evidence/PARITY-MATRIX.md at tag webapp-v0.5.0.
Surface × core feature-parity matrix (iteration 1 of #4282)
Ground truth: the shipped bindings, read from the surfaces'
own builders (web/build_data.py, tui.py: build_state, the
APK bundle = the web bundle) at core v0.5.0 + surface line
0.5.0. This matrix is the catch-up program's baseline;
every iteration updates it and the per-surface parity
statements together (standing surface gates). Owner rule (2026-11-03): this table rides every release body from v1.0.0 — release-cut embeds it verbatim from the cut tag; a pre-matrix tag’s body falls back to a named versions-of-record line. Legend:
bound = the surface runs the real core path ·
partial = a named subset, with the gap stated ·
absent = not on the surface.
| Core capability (FEATURES.md) | CLI/core | webApp 0.5.0 | TUI 0.5.0 | APK 0.5.0 |
|---|---|---|---|---|
| §1/§2 Plan + trust receipt + Today (§2/§3) | bound | bound | bound | bound (build-time state, disclosed) |
| §3 Daily check-in + no-guilt shift | bound | bound (persisted; surface-level shift, core reflow not bound) | bound (persisted; real week/day identity) | as webApp |
| §3 SR review — FSRS + SM-2, receipts | bound | bound (browser engines over the core UX export) | bound (real review_card) |
as webApp |
| SR exports — Anki .apkg · Obsidian vault | bound | absent | bound (Export tab) | absent |
| §1/§3 Reader (sections + RSVP) | bound | bound (all 6 sections, 0.1.1) | bound | as webApp |
| §1 Intake — syllabus/textbook ingestion | bound | bound (in-browser grammar; photos = awaiting-core-ocr, disclosed) | bound (real ingest_any, confirm-gated) |
bound (native file chooser + camera wiring) |
| §1b Reading pipeline — finder · OCR · structure · term bank | bound | bound (ingestion grammar + the demonstration book's bundle at build time: ingest receipt counts shown (62 terms mined · 62 with definitions · 2 with index refs — Darwin, Origin of Species 6th ed., Ch. XIV + the book's own Glossary + Index); term expansion in the Reader (core-emphasized segments; tap → term_tap_payload: definition · index pages · sections); hypothes.is annotations view over the sections (W3C model; API sync needs an account token, not configured); OCR: photographs recorded as awaiting core OCR — the browser cannot run tesseract, the named platform limit; finder stays the core's separate leg) | bound (the REAL pipeline live: Book tab over the bundled demonstration book (same counts), Ingest reports the three counts for any textbook via ingest_any; OCR seam wired through the core's tesseract default, provenance stamped ocr; hypothes.is annotations pane (W3C model, as webApp)) | bound (as webApp) |
| §1c Multi-course + exam countdowns + .ics export | bound | bound (course set = both bundled samples intaken through the core's intake_courses; header switcher rebinds every view; SR + check-ins persist under per-course keys, legacy keys adopted once by the first course; countdown from the intake (port-pinned for user courses); .ics download = the core's per-course export; create-a-course from a syllabus document in Ingest) | bound (Courses tab: the real intake_courses set incl. user courses from ~/.studysprint/courses; switching rebinds all panes; check-ins persist per course in checkin-logs.json (the flat file keeps the active course's log); .ics export writes the active course's calendar file; create-a-course form persists the syllabus doc) | as webApp |
| §1c Memory methods — loci/palace · Feynman · retrievability notifications · interleaving · Leitner | bound | bound (Memory view: palace walk over iteration 1's temple route · Feynman pane · retrievability list with one-tap grades · Leitner in SR · interleaved plan — browser ports battery-pinned to the core) | bound (Memory tab runs the real core functions; Leitner via leitner_review; interleave in the Plan pane) |
as webApp |
| §1d Calendar awareness — intake · frequency ramps · shift briefings · quiet hours | bound | bound (build-time state, disclosed) | bound (Calendar pane, live-assembled) | as webApp |
| §1d Geography — locations · routes · temple routes | bound | bound (build-time state, disclosed) | bound (Routes pane, live-assembled) | as webApp |
| §1d State recall + stress hardening (OPT-IN, ceilings in FEATURES §1d) | bound | bound (Hardening view: opt-in only, per-device flag off by default; ceilings verbatim; varied-context plan + reinstatement script + SIT drill plans (seeded pressure picks, receipt-reproducible) as browser ports battery-pinned to study_hardening; results record answered + 'not yet' with the supportive close — no score/penalty fields exist) | bound (Hardening tab runs the real study_hardening: opt-in persisted, off by default, refusal receipt when off; contexts + script + drill plan/result live) | bound (as webApp) |