Problem. Hover translation cards (sibling issue) are great for spot-translation but disappear. A learner who wants to actually pick up Mandarin whale-species names (or English whale-species names if Mandarin is their primary) needs persistence, repetition, and drill. We have the data (every cross-language term the agent renders) and the audience (a global + Chinese user base actively switching between languages). Missing: the ingest pipeline that turns "I just saw 海氏矮海豚" into "I now know 海氏矮海豚".
Shape — Whale-school sidebar. Opt-in side panel (toggle via /whale-school on or sidebar tab):
- Today's deck. Every cross-language term encountered this session, freshest first. Tap to expand into a full translation card.
- My pinned list. Cross-session persistent list of terms the user pinned from any hover card or session deck.
- Drill mode. Show the term in one language, hide the others, let the user say/type the translation, score it. SRS-style spacing if we feel ambitious — flat repetition if we don't.
- Pronunciation drill (stretch). Record-and-score using a configured speech backend. Pure stretch — gate behind explicit config.
Persistence.
- Pinned terms stored in a new
whale_school_pinned table in crates/state/src/lib.rs, per-user, with last_reviewed and review_count columns for SRS.
- Session deck is ephemeral — recomputed from rendered identifiers each session.
Cross-client.
- Crate exposes panel data over
serve --http. Tauri desktop, future iOS, future WeChat — all read from one source.
- The TUI variant is a tab in the sidebar, sitting alongside agents/files/working-set.
Acceptance.
/whale-school on flips a sidebar tab.
- Today's deck populates as sub-agents are named or other cross-language identifiers render.
- Pinning a term and starting a new session shows it in "My pinned list".
- Drill mode supports at least
term→target and target→term modes.
- All UI strings localizable.
Notes.
- Yes, this is unusual scope for a coding agent. That's the point — codewhale ships with its own pedagogy because the user base is genuinely bilingual and the project already produces the cross-language content. Few projects sit in this position.
- Sequenced after the hover-translation card system and the model family palette.
Far-out — milestone v0.9.0 or backlog.
Slate item 18/18. Tracking doc: .private/issue-slate.md (maintainer-only).
Problem. Hover translation cards (sibling issue) are great for spot-translation but disappear. A learner who wants to actually pick up Mandarin whale-species names (or English whale-species names if Mandarin is their primary) needs persistence, repetition, and drill. We have the data (every cross-language term the agent renders) and the audience (a global + Chinese user base actively switching between languages). Missing: the ingest pipeline that turns "I just saw
海氏矮海豚" into "I now know海氏矮海豚".Shape — Whale-school sidebar. Opt-in side panel (toggle via
/whale-school onor sidebar tab):Persistence.
whale_school_pinnedtable incrates/state/src/lib.rs, per-user, withlast_reviewedandreview_countcolumns for SRS.Cross-client.
serve --http. Tauri desktop, future iOS, future WeChat — all read from one source.Acceptance.
/whale-school onflips a sidebar tab.term→targetandtarget→termmodes.Notes.
Far-out — milestone
v0.9.0or backlog.Slate item 18/18. Tracking doc:
.private/issue-slate.md(maintainer-only).