# REPORT — three dashboard layout fixes (2026-10-08) > `REPORT-dashboard-layout.md`, not `REPORT.md`: other sessions work in `felhom.eu` and `felhom-controller` today. The > controller's own `REPORT.md` and `CONTEXT.md` were left to the session that owns them; the controller `CHANGELOG.md` > carries this work. Baseline: controller `main` = `05e12921` (2026-10-08 10:25), fleet 0.303.0, scratch 9202 on 0.303.0. Read first: controller `CLAUDE.md` + `.claude/rules/`, `felhom-ui-design`, `10-localisation.md` §1 and §2.3 (the parity fixtures: a deliberate change is recorded by deleting the fixture, re-writing it with `-update-i18n-golden`, and measuring that the diff is exactly the change — `CHANGELOG.md` v0.250.0 / v0.255.0 precedent). | Part | What | State | |---|---|---| | A | Apps card header: logo + name (+ address) over a wrapping tags row; logo top-aligned; address one line, ellipsis, full in `title` | **Done on main** (`d5f2e47`, fixtures `e37e9b5`) — R-909 | | B | R-907: the Launcher header wraps on a phone | **Done on main** (`d5f2e47`) | | B+ | Found live: a banner's link ran past a phone screen and had no colour; fixed in the session (small) | **Done on main** (`423b6d3`) | | C | R-906: the overflow counted after the page filter | **Done on main** (`d5f2e47`) | | D | Red tests, fixtures, test build on 9202, before/after pictures, 9202 put back | **Done** | | E | Register, CHANGELOG, STATUS | **Done** | **Register:** before **131**, after **134**, opened **3** (R-909, R-910, R-911), closed **0**. R-906 and R-907 moved to „VERIFY — fixed on main, ships with tomorrow's controller release". ## Red tests (`documentation/audits/dashboard-layout-2026-10-08/red-proofs.txt`) Mutation for all three: `stacks.html`, `style.css` and `handlers.go` put back to `05e12921`, tests from `423b6d3`. | Test | Failure line (excerpt) | |---|---| | `TestStackCardHeaderLayout` | `hu card 0: want the title row, then a .stack-tags row (title 13, tags -1)` (16 cards, hu + en); `.stack-detail-header must stack the title row over the tags … justify-content: space-between`; `.stack-title-row must align the logo to the top of the name … align-items: center`; `style.css has no top-level ".stack-title-text" rule` | | `TestR907_PageHeaderWrapsOnAPhone` | `the phone block must let .page-header wrap`; `the share button's text must stay whole …`; `the phone block lacks \.alert-banner \{[^}]*flex-wrap: wrap` (+2); `.alert-link must take the banner's colour …` | | `TestR906_OverflowCountsOnlyThisPagesBannerAlerts` | `/launcher: an overflow line is shown, but this page shows no more than one banner alert` and `/launcher: 0 warning banners, want 1 (the hub-off warning)` — on /launcher, /stacks, /backups, /monitoring, /launcher?lang=en, /stacks?lang=en | `TestR906_CapStillCountsBannerAlerts` pins that the cap still works (six banner alerts → five + „+ 1"). ## Re-captured fixtures (`e37e9b5`, its own commit) `stacks_full`, `stacks_unhealthy_stop`, `stacks_install_interrupted` — because the Apps card's MARKUP changed (a wrapper, an address span + `title`, a tags row), not its words. Measured (`fixture-diff.txt`): each = its predecessor with exactly the template change applied, byte-for-byte, 3 of 3; visible text identical. No other fixture moved; `TestI18nParity` and `TestI18nEnglishPages` green. **Hungarian: not one string changed.** New English text: none. Note: `d5f2e47` alone fails `TestI18nParity` on those three; both commits went in one push and CI ran the tip. ## Live (9202 only; `documentation/audits/dashboard-layout-2026-10-08/README.md`) Headless Chrome inside 9202; English by `?lang=en` (the household setting never changed). Test tags `0.304.0-layout.rc1` and `.rc2` (pre-release tags, never a release, never a floor). | | before (0.303.0) | after (rc2 = `423b6d3`) | |---|---|---| | Banner | „+ 5 további figyelmeztetés" alone, every page | three real warnings, no overflow line | | Launcher, 390 px | page 425 px wide, share button right edge 424 | page 390, button 16–217, own line | | Apps, 390 px | page 519 px wide | 390 | | Apps: name under a tag | Paperless-ngx (en, 1440) | 0 of 61 cards, all four runs | | Apps: logo vs name top | three values (-5, 9, 21 px) | one value (-3) | The rc1 run found the banner overflow (B+ above): the phone pages were still 481 / 472 px wide. Fixed, rc2 built, run again. Pictures: `before/` and `after/` — Launcher, Apps (+ three cards: installed with two tags, not installed, built-in), Backups; hu and en; 1440 and 390 px. **9202 put back:** `0.303.0` restored from a copy, healthy; both test images removed; work folder and session file gone (shredded on both sides). demo-hp host: only `pct list`, `pct exec 9202`, `pct push 9202`. Not touched: 9201, demo-felhom, Tester 1, Tester 2, the hub, the website. **One side effect, said plainly:** `build.sh --push` also moves the registry's `:latest` tag to the last build (rc2). Nothing in the fleet runs `:latest` (only the legacy compose files name it); tomorrow's release build moves it again. ## Files at their pushed commits - Controller `d5f2e47`: `controller/internal/web/alerts.go`, `handlers.go`, `templates/stacks.html`, `templates/style.css`, `dashboard_layout_test.go` (new), `r906_overflow_test.go` (new), `CHANGELOG.md`, `REUSE.md`. - Controller `e37e9b5`: the three parity fixtures. - Controller `423b6d3`: `templates/style.css`, `dashboard_layout_test.go`, `CHANGELOG.md`. - felhom.eu: `OPEN-ITEMS.md`, `STATUS.md`, this report, the audit folder — the next commit. **CI by commit (controller):** run 1561 = `e37e9b50` (carries `d5f2e47`) **success**; run 1562 = `423b6d34` **success**. `unproven.py --summary`: not walked 35 of 55 — unchanged. ## Waits for tomorrow's release - Release the controller (it carries R-899 and R-304 too). Then R-906, R-907, R-909 are read back on a box and closed. - R-910: after the release reaches demo-hp, retake the website's dashboard pictures (the Apps picture shows the old card). - R-911 (new, P4): the „data storage not reachable" banner stays Hungarian on English pages. ## Decision for you None.