Describe the library tab strip
Shape 2, step 1 of five (`6b24f2df`), and the first described tab strip
in the tree. `pages/library.html` loses 64 lines of hand-written tab
markup and prints one value.
`src/quasi/library_tabs.rs` is an Askama entry point rather than a
mounted screen, the shape `widgets::carousel` already had: the library
page is still an Askama document and this is one region inside it.
Every tab is a `RegionKind::Bespoke`, a place and nothing else, because
what lands in one is Askama's markup rather than the description's. That
is Max's ruling on this shape -- describe the strip, leave the panels as
routes -- and it is what lets all five panel routes stay untouched.
The page still makes zero panel requests on load and one per press,
which is the whole safety argument and so is the first thing asserted.
The strip button carries its panel's address and the panels emit no load
trigger (quasi 0.31, `dfbc88ce`), and the shown panel comes with the
document, rendered by the handler from `LibraryPurchasesTabTemplate`
exactly as the `{% include %}` did.
Each unshown tab says what its answer replaces. Three of the five panels
are plain Askama routes that name no region, and htmx would otherwise
swap the answer into the button that was pressed -- the same failure
`DELETE /api/users/me/ssh-keys` had. The two described panels are left to
name their own region, so their regions stopped being `tab-content` and
became their panel ids.
Frame movement is `core/showing.ts`, lifted out of the carousel island,
which was already this loop written for one caller; `showing.logic.ts`
came out of `islands/` with it, since core reaching up into islands is
the layering backwards. Arrow keys on a strip click the tab rather than
revealing it, or the reader lands on a panel that was never fetched.
Two things the markup said that the vocabulary cannot: the tablist's
`aria-label` and the Feed tab's `title`. Dropped rather than smuggled
back as text, and filed as quasi `aad33ecc`.
One reader-visible change, and it is the ruling working: makeover renders
a menu run as `flex-wrap: wrap`, so a narrow viewport wraps the strip
instead of folding tabs behind a More button. The menu's construction was
explicitly left undescribed. Said on the module so nobody reads the
missing button as a bug.
The integration suite caught the one thing that broke, which is what it
is for: its `SCREENS` table transcribed the region names, so when the two
library panels stopped sharing `tab-content` the table still said they
did. It reads the constants now.
Checked rather than assumed: nothing anywhere links to `#tab-purchases`
or a sibling, so hash restore loses nothing by the described buttons
carrying no ids, and hover preload still applies since they keep
makeover's `tab` class. The dead-vocabulary seal drops 33 to 32 -- this
is the first `.run-menu` the server emits, and the `.run` case build.rs
documented as hypothetical stopped being one.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-19 02:18 UTC