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.