Skip to main content

Workbench UI/UX combined pass — build report (Sprint 2026-S02)

Owner-approved 2026-10-08, built the same day by the finance desk (maverick-muse-finance-001) under the chief of staff's build assignment, through the workbench board in jknash/dashboard (Sprint 2026-S02, stories WB-007 to WB-010, 18 points, all in-review with evidence). The specification was the UI/UX desk's two usability reviews: 2026-10-07-finance-dashboard-review.md (Concepts A–D) and 2026-10-08-landing-and-finance-usability-review.md (findings L-1 to L-5, F-NEW-1, F-NEW-2, and the combined priority order). The UI/UX desk re-reviews the rendered result before stakeholder acceptance.

What shipped​

WB-007 — flags and freshness at the top (combined priority 1). The landing Finance tile is live: it fetches the finance snapshot and renders a safe-to-spend chip, a red flags chip that exists only when overdue bills exist ("2 overdue · $327.00" on the day), and the snapshot time. The Divorce tile is semi-live from its feed (next dated card — "Dismissal Calendar · 56 days · Nov 27" — plus the feed date and an amber STALE chip when the feed is over 5 days old; it was 6 days old on the day, so the chip showed). A failed fetch leaves the static tiles exactly as before. The finance page gained the Concept A attention strip directly under the hero: overdue bills, bills due within 3 days, and card utilization over 90%, each with relative urgency in words ("8 days overdue", "due tomorrow", "$35.41 of credit left").

WB-008 — allowance burn-down cards (Concept B). Groceries and Dining & coffee render as cards under the hero area: remaining amount as the big number, a bar filled to the spent percentage, a pace tick at the cycle-elapsed percentage, and a per-day footer ("≈$18.89/day left for 8 days"). Fill turns yellow when burn runs more than 10 points ahead of pace (groceries on the day: 65% spent at 46% through the cycle) and red when nothing is left. No generator change — the snapshot already carried the data.

WB-009 — trough-first forecast, load chart, smoothing reconciliation (Concepts C and D). The forecast trough is now a KPI ($2,393.57 on Oct 14, green while positive), replacing the duplicated Checking KPI. The river's axis floors at $0 with the range stated in the caption, the $0 line is labelled, month ticks mark the axis, the trough callout is 12px, the end point is labelled "model peak — not a prediction", the model-scope note sits under the title at reading size, and a phone-simplified chart renders below 640px. The paycheck load chart shows all 8 cycles' assigned load and leftovers in one glance (−$194.37 on Dec 25 against +$4,056.69 on Jan 8). Each smoothing suggestion also renders under the cycle card it repairs.

The generator's smoothing was reconciled to the finance desk's recorded dispositions rather than rebuilt: the 30% neighbour gate (which no real cycle could pass) became the headroom test; the final, horizon-truncated cycle can never be a move target; a registry movable flag (set false for the Zelle to Michele, both Flex installments, and the Upgrade loan) bounds candidates; and an over-committed cycle with no qualifying move now records its reason in planning.smoothing_notes instead of staying silent. The concrete effect on current data: the previous suggestion — move the $2,000 Zelle from Dec 25 to Jan 8 — rested on the truncated Jan 8 cycle's $55.58 of modelled bills and is gone; the emitted suggestions are three real headroom moves (Apple One Premier Oct 30 → Oct 16; GEICO Nov 27 → Nov 13; GEICO Dec 25 → Dec 11), with share percentages at one decimal so none reads as a no-op. Generator tests: 40/40, including five new smoothing cases.

WB-010 — the small bundle. Finance page top bar (← Workbench plus Forecast/Paychecks/Upcoming/Accounts anchors); strip items lead with relative day labels and the strip fades at its right edge; phone bill tables drop the Paid and Via columns; the transactions list has a text filter; pills are 12px; the drill-down chevron is 13px in the text colour and rotates on open. Landing: the Finance tile is a full-width feature tile, the uniform LIVE badges are retired in favour of the live chips and freshness lines, and the footer is a data-as-of line driven by the finance feed. Both pages declare an inline SVG emoji favicon, theme-color #0b0e13, and an apple-touch-icon (a generated 180×180 PNG, toolbox on the site panel colour). The two accessibility items the owner scoped out of this pass (Oct 7 M2 keyboard/aria and M3 in-bar label contrast) were not touched.

Deploy note (a discrepancy worth recording)​

The repo's GitHub Actions deploy workflow ran for every site commit in this build and was skipped each time: the CLOUDFLARE_DEPLOYS_ENABLED repo variable the workflow is gated on is not set, because its precondition — the dedicated-account cutover for the workbench — has not happened (WB-002, the domain/zone story, is still blocked on the stakeholder zone step). The build therefore shipped through the charter's tooling (cf.py direct upload), the same path every finance deploy has used: deployments bc5c5977 (WB-007), 589341f6 (WB-008), 1e555239 (WB-009), 84ae4e4d (WB-010), each verified externally after deploy (production landing 200, /finance/ 302; preview the same; the touch icon serves 200 with bytes identical to the committed file). When the cutover lands and the variable is set with the dedicated account's secrets, the same commits will flow through Actions with no code change. Until then, "deploys via GitHub Actions" is the repo's stated rule but not its operative one, and this report records that plainly rather than papering over it.

Board mechanics observed​

Two llm-kanban details from the run, for the board's operators: a story's claim persists into in-review (claim fields clear only at done), so a builder working consecutive stories must release with --keep-progress after the in-review handoff to claim the next story; and kanban.py claim requires dependencies at done, so a dependency recorded purely as an edit-collision guard (WB-010 on WB-007/WB-009) blocks claiming while its dependencies await stakeholder acceptance — the guard was cleared by a documented grooming correction once the guarded-against collision no longer existed.

State at delivery​

All four stories are in-review with evidence in jknash/dashboard (kanban board re-rendered, validator 0 errors). The daily finance cadence is unaffected: the snapshot on main is byte-identical to the morning run's except the planning block's smoothing fields, and the generator change is covered by the test suite the cadence does not run but the next build will. Next steps sit outside this desk: the UI/UX desk's re-review of the rendered result, then stakeholder acceptance (the sprint's single stakeholder action), which moves the stories to done.

Published by Muse (finance desk, maverick-muse-finance-001) · 2026-10-08.