Changelog
Release history for Kanjido — what shipped, in plain language. Documentation, dependency bumps, build tooling, internal refactors, and style passes are filtered out; the full developer log lives in git history.
0.56.0 (2026-08-01)
Features
- db: FSRS schema — review_event, dimension-keyed kanji_progress, nullable session lesson
- db: generate SRS v2 FSRS DDL migration
- db: SRS v2 pre-launch wipe data-migration
- srs: add ts-fsrs and FSRS-6 scheduler config
- srs: Atlas tiers + Plate marginalia read FSRS status/stability
- srs: Challenge gate on average stability + review-event settling
- srs: Challenge logs FSRS events; remove mastery-ladder write path
- srs: dev-seed helpers synthesize FSRS state + review events
- srs: dimension-keyed ensureKanjiProgress, no FSRS state until first rating
- srs: global /journey/review route; lift shared review machinery per Zone C
- srs: global fragile-first review queue with unified daily cap
- srs: Ledger histogram renders stability bands
- srs: lesson completion drops Review from the required-paths set
- srs: logReviewEvents mutation — append-then-rebuild projection
- srs: mark Learn-doorway intake forecast as deferred (§5.4)
- srs: rating map and event-replay projection rebuild
- srs: re-point due/aggregate reads to due column + stability + dimension scope
- srs: Review logs FSRS events + global (null-lesson) session result
- srs: stability status bands and retrievability read
Bug Fixes
- srs: count introduced kanji as due across dashboard/doorway/recommendation surfaces
0.55.0 (2026-07-31)
Features
- db: add DB-free packet-shaping lib with rollForward slicing
- db: add lite lesson roster + pre-computed collision notes
- db: add structural work-weight estimate for unit sizing
- db: add work-budget unit split + per-unit packet assembly
- db: emit per-unit two-tier packets with Koohii/roster/budget flags
Bug Fixes
- db: raise default work-budget 4→14 + wipe stale packets per run
0.54.0 (2026-07-25)
Features
- eslint: add jsx-a11y lint (warn-first)
- eslint: add type-checked linting (warn-first) for apps/client
Bug Fixes
- client: handle promise findings + nullish/require-await; promote to error
- client: resolve the two errors only-warn was masking
0.53.0 (2026-07-25)
Features
- content: publish Chapter 7 Kanjido stories (Heart & Mind)
- content: publish Chapter 8 Kanjido stories (Words & Gates)
- story-voice: CH6 empirical patterns — clean keyword landing + named-hook lift risk
- story-voice: CH7 empirical patterns — pin the abstract keyword + synonym-run mechanism
- story-voice: CH8 empirical patterns — aside closing-mold + abstract-sibling axis + shared-primitive run role
0.52.0 (2026-07-24)
Features
- content: publish Chapter 5 Kanjido stories (Nature & Craft)
- content: publish Chapter 6 Kanjido stories (Journeys)
- story-voice: name the recoverability opener mold + concrete route menu
- story-voice: prose reads at ~B2; keyword + primitives exempt
Bug Fixes
- db: reuse-index --check validates the ledger against the committed index
0.51.0 (2026-07-24)
Features
- content: publish Chapter 4 Kanjido stories (Shelter & Growth)
Bug Fixes
- atlas: normalize primitive names so concordance matches every frame
0.50.0 (2026-07-23)
Features
- content: publish Chapter 3 Kanjido stories (Scale & Dimensions)
- skill: pre-CH4 canon refactors — cap roll-forward completeness + opener shape
0.49.0 (2026-07-23)
Features
- content: publish Chapter 1 Kanjido stories v2 (reuse-aware canon)
- content: publish Chapter 2 Kanjido stories (Creatures & Characters)
- database: authoring-prep script — per-lesson P5 drafting packets
- database: carry per-frame extraction confidence into byFrame (S2)
- database: reminder-issued-at ledger + index --check guard (S1)
- skill: canon updates from CH2 Gate-2 — keyword-landing + sense-split + harvest
- skill: CH1 Gate-2 canon refactor — reminder cap, bind-not-explain, v2 harvest
Bug Fixes
- database: derive reminder eligibility from byFrame gap, not a re-walk
- database: lastSeenGap counts the coining frame (S3)
0.48.0 (2026-07-20)
Features
- database: extraction-prep script dumping Heisig prose + controlled vocabulary
- database: reuse-index builder with CH1 validation
- database: whole-book Heisig build-from extraction (2363 frames, 4882 edges)
Bug Fixes
- database: canonicalize primitive names in reuse index (merge singular/plural + keyword aliases)
- database: drop the ten-thousand->ten alias (distinct primitives, not a spelling variant)
- landing: center Path rows so uneven copy length keeps number and title balanced
- story-voice: correct needle reuse count in the empirical counter-example (28x, not five)
0.47.0 (2026-07-16)
Features
- landing: Hero enacts production — strokes draw in, then set into type
- landing: Hero specimen enactment scaffold with static fallback
Bug Fixes
- landing: show Kanjido's own stories on Hero + Method, not Heisig's
0.46.0 (2026-07-04)
Features
- content: backfill primitives from Heisig/Kanjido story <i> tags
- content: publish Chapter 1 Kanjido stories (frames 1-54)
- content: split kanji.primitives into build-from + primitiveMeanings
Bug Fixes
- atlas: graceful empty state when a primitive has no consumers yet
- atlas: read the build-from / reuse-as split, retire ATLAS_PRIMITIVE_SYNONYMS
0.45.4 (2026-07-03)
Bug Fixes
- landing: update maker identity to @komarca / Giacomo
0.45.3 (2026-06-29)
Bug Fixes
- landing: even out Plate I composition rule weights
- landing: give the colophon footer room to breathe
- landing: quicken the Path rows' once-in-view reveal
- landing: tidy the Marginalia accordion spacing and marker
0.45.2 (2026-06-29)
Bug Fixes
- client: serve /privacy + /terms under a public (legal) shell
0.45.1 (2026-06-25)
Bug Fixes
- client: de-register auth-less scaffolding helpers as server actions
- client: require admin session inside getKanjiStoryDraft
- client: validate deleteAccount confirmation email with zod
0.45.0 (2026-06-23)
Features
- client: capture render errors via PostHog (global-error + boundaries)
- client: proxy PostHog ingestion through /ingest (CSP-safe)
- client: upload PostHog source maps in build, keep maps private
- client: wire PostHog error tracking SDK (errors-only, cookieless)
Bug Fixes
- client: correct PostHog CLI env var names (POSTHOG_CLI_API_KEY/PROJECT_ID)
- client: strip source maps on token-less builds, immediate server capture
- content: block re-publishing archived kanjido story versions
0.44.2 (2026-06-22)
Bug Fixes
- practice: drop setPointerCapture to stop iOS canvas input freeze
0.44.1 (2026-06-22)
Bug Fixes
- practice: stop iOS gesture recogniser freezing the draw canvas
0.44.0 (2026-06-22)
Features
- practice: add incremental stroke undo to the draw canvas
Bug Fixes
- practice: drop phantom touch strokes that fail a correct drawing
0.43.1 (2026-06-19)
Bug Fixes
- practice: prevent iOS page-scroll on canvas strokes + bigger canvas
- review: loading skeletons match production-draw vs light typed-recall
0.43.0 (2026-06-19)
Features
- atlas,ledger: consume introduced status across surfaces
- grader: curve-matcher target grader with placeholder threshold
- learn: focused draw beat with stroke-order reference
- learn: Surface A draw beat + introduced-stamping (v1.10)
- lesson-detail: Review doorway light-pass sub-line (v1.7)
- practice: faint practice-square guides on the empty draw canvas
- practice: shared draw-canvas primitive (lenient/grading/assessment)
- progress: add dimension/matchScore/overridden to session history
- quiz: drop MCQ → typed-recall then draw (v1.3)
- review: production draw mode + /review/light + WI-F brake (v1.2)
Bug Fixes
- practice: live draw-stroke rendering + dev-only grader telemetry
- progress: trackStudyActivity emitted empty DO UPDATE SET
0.42.0 (2026-06-11)
Features
- intros: add Ch 12 introduction
- intros: add L49 introduction
- intros: add L50 introduction
- intros: add L51 introduction
- intros: add L52 introduction
- intros: add L53 introduction
- intros: add L54 introduction
- intros: add L55 introduction
- intros: add L56 introduction
0.41.0 (2026-06-11)
Features
- intros: add Ch 11 introduction
- intros: add L39 introduction
- intros: add L40 introduction
- intros: add L41 introduction
- intros: add L42 introduction
- intros: add L43 introduction
- intros: add L44 introduction
- intros: add L45 introduction
- intros: add L46 introduction
- intros: add L47 introduction
- intros: add L48 introduction
0.40.0 (2026-06-11)
Features
- intros: add Ch 10 introduction
- intros: add L29 introduction
- intros: add L30 introduction
- intros: add L31 introduction
- intros: add L32 introduction
- intros: add L33 introduction
- intros: add L34 introduction
- intros: add L35 introduction
- intros: add L36 introduction
- intros: add L37 introduction
- intros: add L38 introduction
0.39.0 (2026-06-11)
Features
- intros: add Ch 9 introduction
- intros: add L20 introduction
- intros: add L21 introduction
- intros: add L22 introduction
- intros: add L23 introduction
- intros: add L24 introduction
- intros: add L25 introduction
- intros: add L26 introduction
- intros: add L27 introduction
- intros: add L28 introduction
0.38.0 (2026-06-11)
Features
- intros: add Ch 8 introduction
- intros: add L17 introduction
- intros: add L18 introduction
- intros: add L19 introduction
- intros: name keyword-to-kanji direction in L5 caveat
0.37.0 (2026-06-05)
Features
- intros: add Ch 6 introduction
- intros: add Ch 7 introduction
- intros: add L14 introduction
- intros: add L15 introduction
- intros: add L16 introduction
0.36.0 (2026-06-05)
Features
- intros: add Ch 5 introduction
- intros: add L11 introduction
- intros: add L12 introduction
0.35.0 (2026-06-04)
Features
- intros: add Ch 4 introduction
- intros: add L10 introduction
- intros: add L9 introduction
0.34.0 (2026-06-04)
Features
- intros: add Ch 3 introduction
- intros: add L7 introduction
- intros: add L8 introduction
0.33.0 (2026-06-03)
Features
- intros: revise Ch 1 introduction
- intros: revise Ch 2 introduction
- intros: revise L3 introduction
- intros: revise L3 introduction
- intros: revise L4 introduction
- intros: revise L5 introduction
- intros: revise L5 introduction
- intros: revise L6 introduction
- intros: revise L6 introduction
- intros: revise L6 introduction
0.32.0 (2026-06-03)
Features
- intros: author Ch 1 introduction
- intros: author Ch 2 introduction
- intros: author L3 introduction
- intros: author L4 introduction
- intros: author L5 introduction
- intros: author L6 introduction
0.31.1 (2026-06-03)
Bug Fixes
- atlas: apply stroke host-substitution to Plate stroke strip
- learn: cap stroke-strip ghost to actually-rendered strokes
0.31.0 (2026-06-02)
Features
- intros: author L13 introduction
Bug Fixes
- fonts: load italic variant of Source Serif 4
- intros: revise L1 and L2 prose after 4-lens audit
0.30.0 (2026-06-01)
Features
- progress: add kanji.testable column with NOT primitive backfill
Bug Fixes
- progress: bulk-stamp lesson primitives on Learn completion
0.29.0 (2026-06-01)
Features
- intros: author L1 introduction
- intros: author L2 introduction
0.28.2 (2026-05-28)
Bug Fixes
- learn: anchor batches and entry to lesson real-kanji index
- progress: correct enum cast in completeLessonPathTx
- progress: fall through to next eligible lesson in dashboard CTA
- progress: wire startLessonPath into all four entry loaders
0.28.1 (2026-05-27)
Bug Fixes
- learn: honor kanji.progressive_strokes on the stroke strip
0.28.0 (2026-05-26)
Features
- actions: add getLessonIntroBlocks + getChapterIntroBlocks queries
- content: add intros directory + import script + stub content
- contents: add ChapterIntroReveal client component
- contents: integrate chapter-intro Reveal into chapter-block
- db: add intro_block tables + drop dead lesson/chapter columns
- db: generate migration for intro_block tables and column drops
- intros: add 6 block-type renderer components + dispatch
- intros: add pre-Learn pre-roll route + loading skeleton
- intros: add pre-roll surface composition
- lesson-detail: route Learn doorway through pre-Learn introduction
0.27.0 (2026-05-26)
Features
- actions: add getKanjiStoryDraft for admin-toggle preview path
- actions: version-aware kanji-story mutations + admin guard
- learn: admin ?version=draft toggle for v2/v3 story preview
- lib: add isAdmin(userId) helper backed by ADMIN_USER_IDS env
- schema: add version column + partial unique index to kanji_story
Bug Fixes
- build: include @madcat/kanjivg in Vercel lambda trace
0.26.1 (2026-05-25)
Bug Fixes
- build: drop type:module from client package to fix Vercel routes
0.26.0 (2026-05-23)
Features
- lesson-detail: surface Challenge settling window in doorway
Bug Fixes
- journey: demote Challenge in next-action when gate not clear
- journey: route restoration CTA to lesson with oldest due reviews
- journey: skip Review in next-action when local due count is 0
- learn: reveal primitive aside below stroke order, not above
0.25.0 (2026-05-22)
Features
- actions: add getKanjiStories query helper
- actions: add Kanjido story publish/unpublish/edit mutations
- content: add pre-backfill *-audit script for kanji_story migration
- content: one-time backfill from kanji.description into kanji_story
- db: add kanji_story table for multi-source story refactor
Bug Fixes
- dev: re-scaffold lesson_progress after resetUserState wipes it
0.24.0 (2026-05-20)
Features
- actions: add ensureUserScaffolding eager-init helper
- auth: ensure user scaffolding on user.create via better-auth hook
- journey: completed CTAs route to lesson detail, not next path
- seo: include /privacy and /terms in sitemap (F18)
Bug Fixes
- db: backfill eager-scaffolding rows for existing users
- progress: cascade-unlock sibling paths on completion + stamp timestamps
- progress: return null when all four paths complete (F-10)
0.23.1 (2026-05-20)
Bug Fixes
- infra: pin db-backup workflow to pg_dump 17 binary
0.23.0 (2026-05-20)
Features
- infra: nightly DB backup to Cloudflare R2 via GitHub Actions
Bug Fixes
- db: preserve RLS protection across drizzle-kit pushes
- printing: anchor back-link to the landing colophon
0.22.1 (2026-05-20)
Bug Fixes
- atlas: render lens tabs immediately, suspend only the weakness strip
- journey: stop materializing kanji_progress on lesson-detail browse
- journey: warm locked-lesson FooterSignoff voice + close v1.2 watch-items
- shell: restore pull-to-refresh on mobile
- shell: server-render avatar to stop Sign-In flash on reload
Performance
- atlas: split plate caching + prev/next LIMIT 1 queries
- journey: consolidate contents-page query to single aggregate
- journey: parallelize completion mutations + wrap in useTransition
- journey: split static kanji-corpus counts from per-user mastery cache
0.22.0 (2026-05-19)
Features
- journey: mobile vertical-framed doorway pattern on lesson-detail
Bug Fixes
- journey: clip lintel watermark to prevent horizontal scroll on mobile
- landing: clip hero ghost-glyph to prevent horizontal scroll on mobile
0.21.0 (2026-05-19)
Features
- landing: add /printing placeholder route
- landing: add fetch-printing-data build script
- landing: add printing-rhythm server helper
- landing: add PrintingRhythm component
- landing: rewrite FinalCTA colophon as printing receipt
Bug Fixes
- printing: strip private-repo GitHub links from CHANGELOG render
0.20.0 (2026-05-18)
Features
- journey: dashboard colophon link to /journey/contents
- journey: dynamic header subtitle on /journey/contents
- journey: fidelity loading skeleton for /journey/contents
- journey: redirect /journey/lessons → /journey/contents
- journey: scaffold /journey/contents route + components
- journey: status-ink-weight lesson rows on /journey/contents
Bug Fixes
- journey: final-review NITs — lesson-row title transition + CLAUDE.md redirect target description
- journey: move sync format helpers out of 'use server' file
0.18.1 (2026-05-18)
Bug Fixes
- learn: match learn frame skeleton to v1.4 LOCKED composition
- practice: add fixed-bottom advance bar to answering skeletons
0.17.3 (2026-05-18)
Bug Fixes
- learn: skip Surface C on replay; route to lesson detail
0.17.0 (2026-05-16)
Features
- challenge: gate terminal writes on replay-after-pass
- practice: add PracticeModeLine primitive
- practice: add useConcurrentSessionWarning hook
- practice: render ConcurrentSessionLine on same-browser duplicate sessions
- practice: render PracticeModeLine on replay of completed paths
0.16.0 (2026-05-16)
Features
- quiz: gate completeLessonPath on replay via skipPersistence
0.15.5 (2026-05-16)
Bug Fixes
- atlas: breathe Plate story paragraph spacing
- atlas: mirror concordance spacing fix into loading skeleton
0.15.4 (2026-05-15)
Bug Fixes
- atlas: Plate primitive variant + concordance responsive tier-header spacing
- atlas: primitive concordance — render description markdown + breathe tier rows
0.15.3 (2026-05-15)
Bug Fixes
- content: redirect Koohii kanji anchors to Atlas, strip dead protocols
0.15.2 (2026-05-15)
Bug Fixes
- content: strip redundant primitive lead-ins under "On the primitive"
0.15.0 (2026-05-15)
Features
- journey: path-gating policy enforcement (lesson-detail v1.1 + challenge v1.1)
Bug Fixes
- content: restore HTML in community stories with sanitize + animate collapse
- journey: defer updateTag via after() on lesson detail render
- learn: completed-page grid order + post-Learn next-path
- progress: SRS idempotency on Learn re-entry
0.14.2 (2026-05-15)
Bug Fixes
- landing: clip horizontal overflow at landing root
0.14.1 (2026-05-15)
Bug Fixes
- styles: replace stale white/slate-900 html bg with bg-paper
0.14.0 (2026-05-15)
Features
- landing: printing in the colophon
- shell: F-9 — printing notice with folded-corner state
0.13.0 (2026-05-15)
Features
- actions: F-6 — stable error code on ActionResponse failures
Bug Fixes
- restoration: F-8 — timezone-agnostic days-away via elapsed timestamp
0.12.0 (2026-05-15)
Features
- security: per-user rate limiting via Vercel Runtime Cache
Bug Fixes
- progress: F-7 lesson-status race + F-3 third-bullet atomicity
0.11.0 (2026-05-15)
Features
- routing: notFound() in Practice Surfaces for genuine 404s
- seo: per-route metadata for chromed pages
Bug Fixes
- progress: F-3 — transactional wrapping for hot-path mutations
- progress: F-4 — ensure progress before reading on lesson-detail loader
Performance
- atlas: split per-user weakness behind its own Suspense
0.10.0 (2026-05-15)
Features
- error-handling: paper/ink error boundaries across the app
- security: add HTTP security headers via next.config.ts
Bug Fixes
- progress: convert trackStudyActivity + updateStreak to atomic upserts
- progress: scope dev-mode escapes to local dev, kill hardcoded isReplay
- security: sanitize markdown renderers that mix raw HTML
- signin: close hydration mismatch on intent-line localStorage read