Lane 2: the stops, the waits, and the four written pages (#728) #758
Loading…
Reference in a new issue
No description provided.
Delete branch "build/lane2-stops"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Lane 2 of the v4.5.0 redesign (#728), the fifth PR of its series: PUB-7, PUB-6, PUB-10 and PUB-12 — the full-page stops and the four pages that are mostly words. Frontend only, plus one catalogue row.
PUB-7 — a real 404 at last
SH-009(replaced),SH-010,SH-011,SH-012,SH-013,SH-030,IS-393.The catch-all was
<Navigate to="/dashboard">, so a mistyped address and being signed out were indistinguishable — both bounced through Home to sign-in. That is whatSH-009exists to end. An address that does not exist now says so, in the world's voice and then plainly (D65).Its way out differs by reader, deliberately: signed in you are offered Home, signed out the front door, because sending a signed-out reader to
/dashboardreproduces the exact bounce this row abolishes, one click later. The actions wait for the session probe rather than flickering.The two crash screens keep their detail behind a fold — the first line matters and the stack does not — and the waits (
SH-011,SH-030) stay plain, because D65 is about stops, not spinners.PUB-6 — Licences and notices
IS-186,IS-391,API-016,IS-388. D64 is the shape of this page and it was a reversal: it lists nothing this server has loaded, because what a table plays with could give its campaign away. Three things only — Quest Board does not package rules, groups may add properly licensed content, and a rightsholder can ask for removal — at an address that falls back to whoever runs the server when none is published.PUB-10 — Accessibility
IS-293, D4. The target, what is done, the known gaps — the board at the table, the map, long transcripts — and how to report a barrier. The gaps are the ones the prototype already knows are hard, which is the point: a statement claiming nothing is wrong is worth nothing.PUB-12 — Privacy
IS-387,IS-388. The standard text, the administrator's own words above it, and the retention lines read from the server rather than typed — the whole reason this page exists is that it cannot drift from the settings it describes.One departure, and it is about a sentence that is not true yet
The drawing says "A GM can keep less than this. Nobody can keep more." That is false today.
get_effective_terms… more preciselyget_effective_retentiontakes a campaign's override verbatim undermax(1, …), and the schema only enforcesge=1, so a GM can set a longer window than the instance default.This is already known and already decided — D24 (
CATALOGUE.md:101): instance retention becomes two numbers, a default and an absolute cap, asIS-311on ADMIN-5/ADMIN-6 (lane 9, #735) andIS-312on CAMP-13 (lane 3, #729). So the drawn sentence is not wrong, it is ahead of the build.The page therefore says what is true today, and the comment above it records D24 and says in as many words to put the drawing's sentence back when the cap lands. Printing a guarantee this server does not enforce, on the one page whose purpose is not to drift from the server, would have been the worst place in the app to do it. No clamp added here — that belongs to the lanes that own those surfaces, and a frontend enforcing a cap would be a second, invisible policy on top of the one the server applies.
The footer has its six doors now
publicLinks.jscarried three with a note saying the rest arrived with their pages. They have. The same array feedsAppFrame, so the signed-in and signed-out footers cannot drift apart.A new catalogue row:
IS-438The drawing's front door reads "Amberwake is run by Dana, for a few groups of friends", and nothing stored that clause — the build found it by hard-coding it. #752 made it a field;
IS-389names the four things About this server holds and this is a fifth, so without a row lane 9 builds that form and no real server ever gets a line on its front door.Placed on ADMIN-15 and PUB-11, catalogue rebuilt (1,707 rows), every coverage script re-run — which is how the second surface turned up.
lane1c.pycounts it drawn;lane7.pycounts it deferred, honestly, because lane 7's form has no field for it and I have not edited a drawing the owner already reviewed. That question is on #728.Two things only a render caught
list-stylefrom everyul. Privacy and Accessibility are the first pages of this frame to write a bulleted list in prose, so "What is kept" rendered as four indented, unmarked paragraphs. Fixed on the frame's own rule, not per page./public/policiesdown, the privacy page asserted a fact it did not have: "Not said yet: this server's administrator has not set a contact", two lines under a banner saying the settings would not load. "Nobody set a contact" is a fact about a person; "we could not ask" is not. The two were identical in the source and no test would have caught it.The crash screen also needed a router-free frame, which only became obvious rendering it:
main.jsx's boundary sits aboveRouterProvider, souseNavigateinside it would throw in the screen that catches throws.Checks
lint 0 errors (239 warnings, all in pages no lane has rebuilt), 1344 tests in 121 files, build clean. An axe pass over the built app at WCAG 2.2 AA: privacy 0/12, accessibility 0/13, licences 0/11, 404 0/13. All 16 coverage scripts pass.
🤖 Generated with Claude Code
The journeys' axe gate failed on /dashboard in all three phone runs, on WCAG 2.2's 2.5.8 (target size): Target has insufficient size (62.8px by 20.1px, should be at least 24px by 24px). Safe clickable space has a diameter of 23.4px instead of at least 24px. `a:nth-child(3)` is the first footer link — `Footer` renders the version, then a separator and a link per door — and it was 0.6px short. Not a pre-existing fault: with two doors the footer never wrapped, so no link had a vertical neighbour and the spacing exemption carried it. This PR takes it to six (D15, amended by D63), they wrap on a phone, and vertically adjacent links then sat 1.6px apart. So the links carry a real target size, 24px, and the row gap goes to 4px. Both, deliberately: either alone lands within a rounding error of the threshold, and a gate that passes by 0.6px is one font-size change from failing again. 24px and not `--touch`'s 44px. That rule is for controls; a footer of six 44px links is a third of a phone screen, and 2.5.8 AA asks for 24 — 44 is 2.5.5, which is AAA. The text does not move: the box grows around the same line. Docker Desktop was down on this machine after a crash, so this is checked by CI's axe gate rather than locally — which is the only thing that can really check it in any case. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>