Audit leftovers: the reveal survives print, the hero docs say engine-first, a dead nav key goes, the Federprobe note is readable - #459
Conversation
There was a problem hiding this comment.
🟢 Approval recommended
The changes are small, localized, and consistent with the stated verification, with only a minor CHANGELOG ordering convention nit noted.
Pull request overview
This PR finishes remaining items from the 2026-08-29 website audit: it aligns the internal docs with the current “engine-first” landing hero behavior, removes an unused locale key, and hardens/adjusts small UI details so the landing reveal and Federprobe behave/read correctly (including print).
Changes:
- Update
frontend-stack.mdandanimation-rendering.mdto describe the landing hero as engine-first with a font-based fallback. - Make
Revealrender immediately whenIntersectionObserveris unavailable and ensure it prints fully (@media print). - Remove the unused
common.nav.tafellocale key and adjust Federprobe copy styling (plus in-code rationale for the 48-char cap).
File summaries
| File | Description |
|---|---|
| docs/reference/frontend-stack.md | Updates route/component documentation to reflect engine-first hero behavior and Reveal’s new behavior. |
| docs/reference/animation-rendering.md | Updates animation rendering doc to reflect engine-first WrittenWord use in the landing hero. |
| CHANGELOG.md | Adds Unreleased entries describing the audit leftovers and the print/IntersectionObserver Reveal fix. |
| app/src/sections/scribe/ScribeView.tsx | Improves Federprobe note legibility (body-sized note) and documents the 48-char cap rationale. |
| app/src/sections/landing/Reveal.tsx | Ensures Reveal shows content without IntersectionObserver and when printing. |
| app/src/locales/de/common.ts | Removes the unused common.nav.tafel label. |
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Reordered: |
Review on #459: the warm-instance entry and the two audit entries sat in headings above Added; every release section runs Added → Changed → Fixed, so Unreleased now does too.
There was a problem hiding this comment.
🟡 Changes recommended
docs/reference/frontend-stack.md references /write/word even though the actual API endpoint is /sources/{id}/write/word, which undermines the doc correction’s accuracy.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 1
- Review effort level: Lite
|
Kept as is: |
Review on #459: the warm-instance entry and the two audit entries sat in headings above Added; every release section runs Added → Changed → Fixed, so Unreleased now does too.
9c7b2b8 to
dd1a82b
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The CHANGELOG uses the German word “Kleinkram” in new entries and should be adjusted to keep changelog prose consistently English.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
CHANGELOG.md:327
- The changelog is intended to be English; “Kleinkram” is German and reads out of place here. Please replace it with an English phrase (e.g., “minor items”) to keep CHANGELOG.md consistent.
2026-08-29, Kleinkram (5).
- Files reviewed: 6/6 changed files
- Comments generated: 1
- Review effort level: Lite
|
Kept: „Kleinkram" is the name of the Todoist collector task this PR works off („Website: Kleinkram aus dem Audit 2026-08-29"), so the entry cites it as a proper name — the same way the other audit entries cite „item 5/8". The surrounding prose is English. |
…and-resolved rebase (#461) * The changelog merges by union, so sibling PRs no longer conflict in it Every merge of one open PR turned the others DIRTY on CHANGELOG.md (four hand-resolved rebases on 2026-08-30), and a DIRTY PR gets no CI run. .gitattributes now declares CHANGELOG.md merge=union: git keeps both sides' bullets instead of raising a conflict, so a rebase onto main goes through untouched — verified on the #458 and #459 rebases with the same attribute set locally. The rule that keeps union safe (add on top of your category, never rewrite existing lines in passing) stands in the file's header, CLAUDE.md and copilot-instructions.md. * Say what union merging promises and what it does not Review on #461: no absolute "never conflict" — a local merge or rebase resolves itself, GitHub's own mergeability check may still flag the PR until then, and a line changed on both sides appears twice; the header, the entry, CLAUDE.md and copilot-instructions.md say so in one voice.
…e hero docs say engine-first, a dead nav key goes, the Federprobe note is readable Website audit 2026-08-29, the p4 collector: Reveal shows its content at once under @media print and where IntersectionObserver is missing (a printed landing page was blank below the hero); frontend-stack.md and animation-rendering.md describe the hero as engine-first (owner decision 2026-08-27) instead of font-first; common.nav.tafel had no reader; the Federprobe's not-yet-written note is body size and its 48-character cap explains itself. tafel.pendingNote (a data state) and the mixed path shapes stay as they are, on purpose.
Review on #459: the warm-instance entry and the two audit entries sat in headings above Added; every release section runs Added → Changed → Fixed, so Unreleased now does too.
dd1a82b to
15bd4c9
Compare
Replaying the reorder commit under merge=union kept both the moved and the original blocks; the top copies go, the union entry moves into the Changed block, and Unreleased runs Added → Changed → Fixed again.
There was a problem hiding this comment.
🔵 Needs a closer look
CHANGELOG.md currently contains duplicated [Unreleased] bullets/headings that should be consolidated to avoid repeated release notes.
Review details
Suppressed comments (4)
CHANGELOG.md:32
- This "Fixed" entry duplicates the same bullet later in the same [Unreleased] section (see the "### Fixed" section around lines 396–402). Keeping both will make releases and reviews prone to double-counting; keep the bullet only once under the existing "### Fixed" heading.
This issue also appears in the following locations of the same file:
- line 50
- line 63
### Added
- **A letter of the Schreibtafel in detail (`/tafel?g=<key>`).** Tapping a
written letter on the Sütterlin sheet still re-writes it in place — and
now opens it below the sheet: the stroke order as numbered starts on the
CHANGELOG.md:54
- This "Audit leftovers" bullet is duplicated later under the existing "### Changed" section (around lines 339–350). Please keep it only once to avoid duplicate release notes.
to write it freely — vision §2's content-aware practice sheet. The composition is the Federprobe's (`GET /write/word` per line
through the shared render cache, debounced, remembered by its text); the
browser only places it (`lib/uebungstext.ts`: template units onto the row
baseline with the Mittelband as x-height; a pending line keeps its row; a
line too wide for the ruling or without a row left is named under the
CHANGELOG.md:67
- This "API keeps a warm instance" bullet is duplicated later under the existing "### Changed" section (around lines 351–367). Please remove one copy so the [Unreleased] notes don't repeat.
The Lesart page offered letter swaps („Mnhme") as readings; the owner's
verdict: a reading must be an existing word. `GET /lesarten?text=…`
answers the vocabulary words that differ from the guess by look-alike
letters alone — same length, every differing letter a documented pair
(`core/lesarten`: the look-alike table's classes make a bucket key,
CHANGELOG.md:44
- [Unreleased] ends up with two separate "### Changed" sections (one here and one later around line 337). Even after removing the duplicated bullets above, please move the remaining "The changelog merges by union" entry into the existing "### Changed" section and drop this early "### Changed" heading so the changelog stays scannable.
(normal, langsam = 3×), the documented look-alikes written beside it
(the SpecimenStrip over `lib/lesarten`'s table: n → u, e, m; ſ → f, s;
s → ſ …) and „im Wort sehen" — a jump into the Federprobe with the
shortest bank word that shows the letter as written (a non-final s for
the ſ, a final s for the round s, an initial capital). The key rides the
URL like the admin's focus, so a letter is shareable and a deep link
switches the sheet to the written view. Vision goal 3, „Buchstaben in
Aktion"; the ligatures it names (ch, ck, ſt, tz, qu) are not traced in
the public source yet and so have no detail. Website audit 2026-08-29,
- Files reviewed: 6/6 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The CHANGELOG edits move/reinsert existing bullets despite the file’s own union-merge guidance to avoid rewriting existing lines, creating unnecessary churn and higher merge-conflict/duplication risk.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 1
- Review effort level: Lite
| - **The changelog merges by union — a sibling merge no longer costs a | ||
| hand-resolved rebase.** Every merge of one open PR used to turn the | ||
| others `DIRTY` on `CHANGELOG.md` (four rebases with hand-resolved | ||
| conflicts on 2026-08-30 alone), and a DIRTY PR gets no CI run. | ||
| `.gitattributes` now declares `CHANGELOG.md merge=union`: a local merge or |
What
The p4 collector of the website audit 2026-08-29, worked through item by item:
frontend-stack.md(route table + component map) andanimation-rendering.md§1 still described the hero as font-first (GLKurrent + clip-path); since 2026-08-27 the brand word is written byWrittenWordand the wipe is only the fallback on a genuine failure. Text corrected, code untouched.common.nav.tafelhad no reader — removed.common.nav.scribestays (the prerender's tool list uses it).tafel.pendingNote— left as it is, on purpose: it is a data state (a script row without a chart source), not dead code; the day a fourth script is seeded it renders again.Revealshows its content at once whereIntersectionObserveris missing (lazy initial state, no effect) and under@media print— a printed landing page was blank below the hero./schreiben/uebungsblattbeside/tafeland/federprobe) — a decision, not a bug; untouched, yours to make.Verification
/verify-frontendon the dev server: landing page at scroll 0 → the 12 below-foldRevealwrappers areopacity 0 / translateY(22px)on screen andopacity 1 / noneunderpage.emulateMedia({ media: 'print' }); Federprobe with „Guten Morgen, Hans" → the note renders at 17 px.tsc,eslint(no new warnings),vitest(179) green; prerender unchanged.