A gesture widgets should have had from the day they arrived, and a health check
that had started calling working sites dead.
The dashboard
- new — a widget folds away like the categories beside it. A widget is a summary, and a page carrying several of them has the problem a page of long categories has: the block you want is below the fold because the ones above it are open. Categories have folded since long before widgets existed, so this is the same gesture on the same header rather than a second one to learn — click it, or Enter/Space with it focused. Built out of what categories already have: the state goes into the same
collapsedCategoriesmap under the same page-scoped key (widget ids prefixedw_so they cannot collide, and the existing prune of stale keys covers them without knowing they exist), the body moved inside the same.category-bodywrapper so the collapse animation is the one already written, and Fold all picked widgets up for no new code at all because it works ondata-collapsed. One rule did not follow for free: the body reservesmin-height: 3.5remso the packed layout does not shift when its figures arrive, and it is later in the stylesheet and equally specific, so a collapsed widget stopped 56px short of closed. The reservation answers a question that does not exist while the block is folded, so it lifts atdata-collapsed="true"— measured at 0px closed against 154px open.
Status & health
- fix — a site behind a login is not a page that does not exist. Two bookmarks on a tailnet were reported down with Page says it does not exist while both sites were up. Neither said anything about being gone; it was the control-URL test in
health_soft404_control.gothat condemned them. A gated site sends every address it does not hand out to the same sign-in page, the probe's random path included, so the probe comes back 200 and the bookmark's body is that sign-in page — identical in length, well inside the fifth the comparison allows, and short enough to pass for a notice. Both signals agree and both are wrong. What separates the two cases is where the probe went: a not-found template answers on the address that was asked for, a gate redirects elsewhere.softControlVerdictnow records that landing address — without its query, since a gate puts the path it turned away into areturnUrl— and a bookmark landing on the same address ends the comparison before length is consulted. A real soft 404, answering on its own address, is untouched.
Docs
- Release notes
static/data/whats-new/v1.4.1.2.json, theindex.jsonentry carryinghideFromModal, the constants spec, this changelog,README.md,MANUAL.md, the Config → Help widget and health paragraphs and the version paragraph in all four locales, a keyboard tip inconfig-help-tips.js, and a spotlight instatic/data/overview-features.jsonwithsince: "v1.4.1.2"for Config → Overview and About → News & features. NEXTDASH_WHATS_NEW_DATA_VERSIONmoves towhats-new-v260andDASHBOARD_RELEASEdoes not. Same reasoning as v1.4.1.1, and now two hidden releases deep: this one counts toward the version number and leads Config → Overview, while the modal keeps leading with v1.4.0. Without the data token a browser holding the old index would never learn the release exists.go generate ./...for the changed CSS, JS and locales.