Settings was one 600px column holding the account form, a theme picker,
a Nextcloud integration, a document list and an admin grid, in that
order, with no way to link to any of it. It is now a section list beside
one panel, with the section in the URL — so "change your password" is a
link and Back works. On a phone the list becomes a scrolling strip
rather than a second level of navigation.
- The exam objective moves in. It scopes the bank, the filters and now
the knowledge profile, which makes it a setting; it was only reachable
from a dropdown in the header.
- The notifications panel is gone. Its one control switched quiz
reminders, and the reminder scheduler was removed earlier today — it
was a toggle wired to nothing.
- Form fields are 16px on touch so iOS does not zoom the page in on
focus and refuse to zoom back out; nav rows are 44px targets.
Also fixed, found in an agent's report rather than by looking:
37 cross-references across 25 articles are nested and broken —
`[[363|[[245|gastroesophageal reflux]] disease]]`, which renders as
literal brackets and resolves to nothing. The first linker pass linked
the longest title, then let a shorter one cut into the result. The
current pass cannot do this (a finished marker is stashed), but the
damage was already in the database and strip_owned could not see it:
its label group stops at the first "]". link_articles now unwraps the
inner marker, keeping the outer — the longer, more specific title.
And the ArticleSplitView flake: the preview card appears on a 350ms
timer and the query allowed 2s, which the full parallel run exceeded
often enough to fail a different case each time. Tried fake timers
first; they fight waitFor. A longer allowance is the honest fix — the
test is about the split view, not about how fast the box is. Four
consecutive clean runs.
Frontend 274/274.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN