Today's Study Cards screen shows every card at once and gives each one five ghost buttons — you hunt for the one action you want. This is a design proposal: replace the button pile with a progressive dropdown (archetype → card type → lifecycle) built on the FSRS engine states you find easiest to reason about, and let the available actions change with what's on screen. Nothing here is built — no code, no schema, no session loader has been touched.
What happened. The Study Cards screen today shows 3 stat-tile filters (Total / Due / Learned), 3 tabs (Cards / Coming Up / Paste), and — once you tap a card open — 5 ghost-icon buttons (Info, Star-priority, Pause, Mark-learned, Retire). You said it's "too complicated with the different buttons." Separately, you said the scheduler's own four states (new / learning / review / relearning) are "a lot easier" for you to reason about than the friendly stage names (Intro, Active, Learned…) we currently show.
What this proposes. Re-ground the screen's lifecycle vocabulary on the FSRS states, then replace the flat button/tab/tile pile with a progressive dropdown that narrows step by step — archetype, then card type, then lifecycle — and have the available actions adapt to whatever's currently on screen. It also captures two behavior changes you described: paused cards should return on their own once the due queue runs dry, and a retired word's derived forms may still deserve to stay learnable even after the word itself is retired.
What this does NOT do. Touch code, touch the database, or promise the auto-return behavior works today — section 5 flags exactly what's missing and why it can't be turned on safely yet.
Archetype (CA) — what a card teaches: Vocabulary (a word meaning), Script-alphabet (a letter), Phrase (a multi-word unit), Passage (a formatted block, proposed). This is the top dropdown level.
Card tier (CT) — where the card's row sits in a word's family tree: CT1 lemma (the headword container, hidden), CT2 sense (one meaning — the main studyable card), CT3 form (a spelling/inflection under a sense). This is the middle dropdown level.
FSRS state — the scheduler's own
state for a card: new (never studied), learning (early
repetitions), review (settled into normal spaced rotation),
relearning (slipped and being recovered). This is the base of the bottom
dropdown level.
Overlay — a manual flag layered on
top of the FSRS state: paused (learn later), retired (never
again), learned (you've mastered it), priority (show me more).
These fill out the rest of the bottom dropdown level.
ADR-083 — the new
archetype registry decision (table t080_card_archetypes) that will define,
per archetype, which card types exist and which lifecycle options apply. It's the data
source behind the top dropdown level. t310_profile_card_progress — the table
holding each learner's FSRS state + overlay per card; the source for the bottom
dropdown level.
Your call: reason about cards by their scheduler state, not the derived stage name. The stage names don't go away — they become a label on top of the FSRS state, the same way they already work today.
| FSRS state | Plain meaning | Friendly name today | Overlay that can sit on top |
|---|---|---|---|
| new | Never studied yet | Intro / Held | priority (jump the queue) |
| learning | Early repetitions, still fragile | Active | priority, paused |
| review | Settled into normal spaced rotation | Active | priority, paused, learned |
| relearning | Slipped a review, being recovered | Active | paused |
| — overlay, not an FSRS state — | Paused | learn later, comes back on its own (build item — §5) | |
| — overlay, not an FSRS state — | Retired | permanent "never show me again" | |
This is the same fact renamed, not two systems: every card the app shows already carries one FSRS state plus zero or one overlay. Today's screen names the combination (Intro, Active, Learned, Paused, Retired); this redesign just makes the FSRS state the primary sort/filter key instead of the derived name.
67c5b82d) the per-row lifecycle badge changed to show
only surprising states — Active and Held/new cards carry no badge at all; Intro,
Learned, Paused, and Retired still show one. That's "filter is context, badge is
surprise" already live at the row level. This redesign is the same principle applied to
the whole screen: once you've picked a lifecycle in the dropdown, you don't need every
card re-announcing what you already filtered for.
Three levels, each one narrowing what's visible. Mobile-first, 390px frame shown below — illustrative, not a pixel-accurate mock.
Each pick narrows the list under it — pick Vocabulary, then Sense, then Retired, and you land on exactly the retired word-meaning cards, with Un-retire as the natural primary action instead of a ghost button buried in a 5-icon row. Pick Paused instead of Retired and the primary action becomes Resume now. Leave Lifecycle on its default ("everything active") and you get today's normal management set: Info, Star, Pause, Mark learned, Retire.
| Level | Options shown | Real data source |
|---|---|---|
| 1 · Archetype | Vocabulary, Script-alphabet, Phrase, Passage | t080_card_archetypes (ADR-083 registry) — key / display_name, plus enabled flag (see decision D3) |
| 2 · Card type | Depends on archetype — Vocabulary: lemma / Sense / Form | Each archetype's tier_scheme in the registry, backed by t070_study_card_catalog.card_tier (1/2/3) — see decision D2 |
| 3 · Lifecycle | New, Learning, Review, Relearning, Paused, Retired, Learned, Priority | Not in the registry. Comes straight from the card's own row: FSRS state + user_status overlay on t310_profile_card_progress |
The registry (ADR-083) only gates what exists per archetype — e.g. Script-alphabet has no "Form" tier, so level 2 wouldn't offer it. Lifecycle is a property of each learner's progress, never the registry's business.
The decluttering you asked for: keep per-card Info always available (it's a drill-in, not a status lever), and let the remaining status actions become a smaller set that changes with whatever the dropdown is currently showing — and can act on the whole filtered set, not just one card at a time.
Info, Star-priority, Pause, Mark-learned, Retire — all 5 shown together, every time, regardless of what state the card is already in.
POST /api/review, type user-action)Info stays put per-card. The status levers collapse into a smaller set that matches the refined view — and because the dropdown already narrowed the list, the same action set can apply to everything on screen.
POST /api/review wrapper — this is a UI reshuffle, not a new APIYour ask: once the due queue is exhausted, paused cards should come back on their own — paused means "learn after other things," not rejection. Today only a manual unpause exists. This section locates the work; it doesn't do it.
Today, both Retire and Pause write
user_status='paused' (web/src/app/api/review/route.ts ~717 /
~723). The data has no way to tell "learn later" apart from "never again." Auto-return
can't be built safely on top of this — a naive version would resurface cards a learner
deliberately retired. Splitting retire and pause into distinct states is a
prerequisite, not a nice-to-have (decision D1 below).
This section stops at design — it locates the behavior in the session-loader / lifecycle layer, which is ENR territory per ADR-050. An ENR briefing follows once you've ruled on D1 and D4; the design only marks where the work lives, ENR builds it.
Your framing: retiring a sense (e.g. nasi = "rice," clearly known after two days) is a permanent "never show me again" — the outlet that keeps the app from over-showing words a learner already has locked in. But you flagged a nuance: a retired sense's derived forms may still be independently worth learning — "there are forms associated with it, so it kind of makes sense" they stay studiable.
This is genuinely open — does retiring a sense cascade-retire its forms, or leave them studiable on their own? Captured as decision D5 below, leaning toward leaving forms studiable per your comment.
Each item states what it changes first, then the options. The "recommended" tag on an option is our own domain-best judgment on the design merits — not a guess at what you'd pick.
t080_card_archetypes). Enabling Phrase or Passage there is what would flip them from greyed-out to selectable, independent of anything in this redesign.lifecycle.ts:157-159) — it was designed once and never wired to either session loader. Building it is connecting an existing seam, not inventing new lifecycle theory.