Skip to content

fix: screens stop repeating what they already show (Sep drop) - #616

Merged
maximsan merged 5 commits into
mainfrom
fix/sep-drop-title-and-count-rules
Sep 18, 2026
Merged

maximsan merged 5 commits into
mainfrom
fix/sep-drop-title-and-count-rules

Conversation

@maximsan

@maximsan maximsan commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Why

The 15 September prototype drop's title-block, count and container rules, ported where the app stated one of them in one place and not another. The reconciliation is recorded on #337 (the 15 Sep entry); the parity rows live on #365. Nothing to close.

Watch for

  • The shelf model gains a glyph. SavedCandidate and SavedItem carry the term's category glyph so a row can draw its mark; lessons and guides pass null and the row picks their mark by kind.
  • One recorded divergence. The design's guide row draws TuneMark, which the app has no glyph for; a guide row draws the mark the Reference shelf already gives a guide (AppIcon.module).
  • The flashcards route sits inside the terms group's list item as FLASHCARDS → on the header. It is an explicit semantics container with its own tap: without that it merged with the header and first row into one announcement. The bookmark on each row sits beside the row's tap surface for the same reason.
  • savedCountLine returns null for owners — the N items to revisit line is gone; the free line is now mono uppercase. Profile's N saved to revisit is a different surface and untouched.
  • Term of the Day is centred between the bar and the footer and scrolls only once it no longer fits; the TERM OF THE DAY kicker is gone and Back is the ghost button.
  • The bundled banks are regenerated. The prototype commit this branch carries changed the module reward copy (§7 of its notes) and the banks were never re-extracted; extract_content_test caught it on the full suite. Only modules.json changes, seven lines.
  • The dictionary's filter moved into the category and lost its counts, as the design draws it; the status marks are redrawn to the design's three glyphs; the term entry leads with the deep text, and DictionaryTermList.grouped turns the per-category headers off inside a category.
  • This branch carries 4beb98b2, the prototype sources that were sitting on local main unpushed. Merging lands them.

Not here

Checks

The pre-push hook runs only the guard tests, so the full suite was run locally (3,225 tests). It found three stale assertions — two on the removed Reference · n terms eyebrow, one on a source URL now behind the shut Sources disclosure — fixed here; CI's first run failed on exactly those three. One unrelated flake surfaced under the full run (profile_screen_test, the streak card) and passes in isolation on main and on this branch. The Saved shelf (at rest and scrolled), the dictionary home and a category, the term entry in three states and Term of the Day were driven on an iPhone 16e simulator and reviewed against the design's own screens, row by row.

The drop's title-block, count and container rules, ported where the app
stated one of them in one place and not in another.

- The dictionary's `Reference · 73 terms` eyebrow goes, and the one over a
  category with it: title first, then at most one muted support line, and
  only where that line says something the page does not already show.
- The Saved shelf's total goes for owners. `3 of 5 saved` stays — the free
  limit is stated nowhere else, and the upgrade prompt depends on it.
- Saved's group headings carry the count in the label, `DICTIONARY TERMS · 6`,
  rather than trailing a loose digit in a type style of its own.
- The flashcards route moves onto the terms group header as an accent pill at
  type weight; the heading carries the count, so it only names its
  destination.
- Term of the Day drops its category line and frames its date with the app's
  own hairline turned sideways.
- A term's sources fold into the standard disclosure, shut by default.

Deferred, and filed rather than swept in here: the same count-in-label form
on every disclosure header (practice groups, Path's modules, Reference, For
later), which the app has ported nowhere.
@maximsan
maximsan force-pushed the fix/sep-drop-title-and-count-rules branch from 8100d05 to d8c3473 Compare September 16, 2026 17:11
…entring

Reviewed against the design's own screens after the first pass, which had
ported the rules and missed the composition around them.

Saved shelf:
- A row leads with its mark — the term's category glyph, the empty bean for
  a lesson, the guide mark for a guide — at the design's `24px` column and
  `gap: 14`; the category sits in mono micro over a body-weight title; the
  bookmark is the ringed toggle, beside the tap surface rather than inside
  it; a hairline closes each row (`padding: 13px 0`).
- The title opens `108` under the bar, not a gutter lower: the list padded
  a full gutter on top of the scroll padding that already cleared the bar.
- The count line is mono at `letterSpacing: 0.08em`, uppercase by rule; the
  groups sit `22` under the title block and `26` apart; the header keeps the
  design's `12` above and below.
- The flashcards route ends in the design's `13×9` arrow, at `gap: 7`.
- The shelf carries a term's category glyph to the row (`SavedCandidate` and
  `SavedItem` gain `glyph`). Recorded divergence: the design's guide mark is
  `TuneMark`, which the app has no glyph for; a guide row draws the mark the
  Reference shelf already gives one.

Term of the Day:
- No `TERM OF THE DAY` kicker; the dateline, Roasty, word and definition are
  centred between the bar and the footer, scrolling only once they no longer
  fit. The dateline is mono at `0.1em`; the definition sits `20` under.
- Back is the ghost button — `1px var(--rule)`, ink text — `10` under the
  primary, not a bare accent link.
Title only: the page, its compact bar title, and the header button that announces it. Saving stays Save; the Profile card and the stored field stay saved — the title names the place, the verb names the act.
Reviewed against the design's own screens — the dictionary home, a category,
and the full entry in its states — which run ahead of the prototype drop.

Dictionary rows:
- The meaning wraps in full at the support rung; the name sits at body
  weight 500 with its respelling beside it; a hairline closes each row
  (`padding: 13px 0`, mark column `22`, `gap: 13`).
- A saved term carries the filled bookmark in a reserved `18px` slot, a
  control that un-saves, beside the row's tap surface rather than inside it;
  unsaved rows carry nothing. The gesture that adds a save stays #612.
- Inside a category the app-only *All categories* button is gone: the bar's
  chevron is the way back. A category shows the filter — the design's
  `DictFilter`: `1px var(--rule)` at `borderRadius: 12`, the chosen segment
  accent, labels uppercase at the label rung, no counts — and no chips and no
  repeated category header; the index keeps the chips, heads its rows
  *All categories*, and shows no filter.
- The status marks are the design's `StatusGlyph` at `20`: a `1.5px dashed`
  ring with a `4px` dot to learn, a `sage 22%` fill in a `sage 55%` ring with
  a check once learned, a hairline ring with a `7 × 1.5` dash for reference.

The bundled banks are regenerated: the 15 Sep drop's reward copy (§7) had
never been extracted, which `extract_content_test` caught on the full suite.

The full entry:
- Leads with the deep explanation; the short line stays the peek's opener
  and the free learner's entry (`leadWithShort`).
- Related terms are outlined pills; the knowledge check is the page's one
  filled card (`radius 14`, `1px var(--rule)`), its question in the display
  face, its choices radio rows ruled off from each other.
- A hairline, then *Where you'll learn it* as a row you can open: the
  module's picture at `48` / `radius 10`, the lesson's title, a chevron where
  the learner may play it and a lock where they may not. `lessonPlace` looks
  the lesson up through its module for the picture.
- Sources read `SOURCES n`, each a two-digit index and a mono name; one with
  an address opens it through the app's link opener behind an outward arrow.
  The address is no longer printed.
- The status chip under the title is gone; the path row says the status. The
  bar carries the term's name once scrolled, with no category eyebrow.
- The title opens `108` under the bar, not a gutter lower.

Not carried, because the content bank has no field for them yet: the
design's footnote marks in the deep text and the note under each source.
…example

Owner ruling, 18 September 2026: the design's entry shows no example block for a term that has one, so the block goes. The bank keeps the field; nothing renders it. The footnote marks and source notes the design also shows are content the bank cannot carry yet — #618.
@maximsan
maximsan merged commit 8d6c72d into main Sep 18, 2026
7 checks passed
@maximsan
maximsan deleted the fix/sep-drop-title-and-count-rules branch September 18, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant