Skip to content

web: the manager's view drills in, receiving says what it did, and sign out in the person's menu - #151

Merged
futurebuildai merged 23 commits into
refactor/v1from
refactor/g1-manager-view
Oct 15, 2026
Merged

futurebuildai merged 23 commits into
refactor/v1from
refactor/g1-manager-view

Conversation

@futurebuildai

@futurebuildai futurebuildai commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

The manager's view drills in, receiving says what it did, sign out in the person's menu

The G1 walk's manager's-view and receiving notes, fixed together. Web only; no Go moved.

What changed

  • One icon per card (N18). KPICard.ts drew every KPI card's icon twice: the boxed icon and a faded, enlarged copy behind it. The faded copy is gone; the boxed icon stays.
  • Cards and rows drill in (N19). Every KPI card is now a real link to its own list at the yard the dashboard shows, and the widget rows are real links too. Each is reachable by Tab, named for a screen reader, and carries a visible focus ring and the hover state the cards already had.
  • Bins in order (P2). The receive bin picker on a purchase order listed the yard's bins in the wire's order (KEL-D first on the walk). The picker's data is now sorted by the bin's path, first bin first. The select's markup is untouched.
  • Receiving says what it did (P3). After Confirm Receipt the page carries the receipt in words, where the toast used to vanish: what came in, how much of each line, into which bin, and that the purchase order is now received. A purchase order opened already received shows the same block with each line's received count. The bins are named only for the receipt the page just confirmed: the wire does not carry a line's bin.
  • Sign out in the person's menu (N10). The desk's header had no sign out. The signed in person's name chip now opens a menu with their name and role and Sign out, which clears the shared auth custody and leaves the desk for the front door (a full navigation to /, the same way the door's tiles open the desk). A real menu: aria-haspopup="menu", aria-expanded, role="menu" and menuitem, arrows move, Escape closes and returns the focus, a click outside closes.

Where each card and row goes (N19)

Card / row Opens Note
Today's Revenue /reports/daily-till (the day's till) The card counts the day's collected payments, branch-walled; the Daily Till is the only desk page that reports the day itself and is walled the same way. No desk page lists the day's payments line by line, so this is the closest list.
Active Orders /orders?status=confirmed (the orders list on its Confirmed tab) The card counts exactly the confirmed orders (the wire contract admits no other processing state), and the list opens on the tab the address names.
Pending Dispatch /dispatch (the dispatch board) The card counts deliveries not yet dispatched; the board is that queue.
Outstanding AR /reports/ar-aging (AR Aging) The same figure the card carries.
Top Customers row /accounts/<customer id> The customer's account page.
Inventory Alerts row /inventory/<product id> The product's stock at the yard the desk shows.
Recent Activity row /orders/<order id> The feed's wire carries orders only (no invoice or payment ids), so each row opens its order.

Tests, red first

Each item's Vitest leg was committed alone and failing before its fix:

  • 75c744ae the KPI card draws its icon once (red: two icons drawn), green at 1fa9ea73
  • 13b623a5 the dashboard's cards and rows drill in (red: no links, no accessible names), green at a70ee2e5
  • 265252e9 the receive bins list in path order (red: wire order kept), green at 6d620cc5
  • 5259b975 the received purchase order says what was received (red: nothing on the page), green at fcb54bb9
  • 9f8406c2 the header's person menu holds Sign out (red: no menu at all), green at 5e6b7185

Gates

From web/: npm ci, every workspace's typecheck (clean), npx eslint . (clean), npm test (101 files, 1137 tests, all passing), npm run build last (exit 0, zero error TS lines). bash scripts/check-shape.sh OK. The pre-push block ran clean: only the configured identity, every commit signed off, no credential shapes, no private names.

PR 147 (Gable light) is not yet on refactor/v1, so no merge was needed and no bg-plate/bg-backdrop classes were used; everything here uses the existing tokens.

Written by Kimi K3 for the Gable lead.

… walk note)

The dashboard's KPI cards draw the boxed icon and a faded enlarged copy
behind it. This leg wants one icon per card and fails on today's code,
which draws two.

Signed-off-by: colton <colton@futurebuild.ai>
The faded enlarged copy behind the boxed icon is dropped, so each card
on the dashboard draws one icon.

Signed-off-by: colton <colton@futurebuild.ai>
… note)

Clicking a card does nothing today. These legs want each KPI card a
named link to its own list (today's till, the orders list, the dispatch
board, AR Aging), each Top Customers row a named link to the customer's
account, each Inventory Alerts row a named link to the product's stock,
and each Recent Activity row named for a screen reader. They fail on
today's code: the cards and the customer and alert rows have no link at
all, and the activity rows have no accessible name.

Signed-off-by: colton <colton@futurebuild.ai>
Each KPI card is a link to its own list at the yard the dashboard
shows: Today's Revenue opens the day's till, Active Orders the orders
list, Pending Dispatch the dispatch board, Outstanding AR the AR Aging
page. Each Top Customers row opens the customer's account, each
Inventory Alerts row the product's stock, each Recent Activity row its
order. Cards and rows are real links with an accessible name and a
visible focus ring, keeping the hover state the cards already had.

Signed-off-by: colton <colton@futurebuild.ai>
…r (red for the walk note)

The picker offered the bins in reverse (KEL-D first). This leg serves
the locations reversed and wants them listed by their path, first bin
first; it fails on today's code, which keeps the wire's order.

Signed-off-by: colton <colton@futurebuild.ai>
The receive form sorted nothing, so the bins came in the wire's order
(KEL-D first on the walk). The picker's data is now sorted by the
bin's path, first bin first.

Signed-off-by: colton <colton@futurebuild.ai>
…or the walk note)

After Confirm Receipt the order moves to RECEIVED but nothing on the
page says what was received. These legs want the page to say in words
what came in, how much of each line, into which bin, and that the
order is now received, and they fail on today's code.

Signed-off-by: colton <colton@futurebuild.ai>
Confirm Receipt used to move the order to RECEIVED with only a toast
that vanished. The page now carries the receipt in words: what came
in, how much of each line, into which bin, and that the purchase order
is now received. A reloaded received order lists each line's received
count; the bins are named for the receipt the page just confirmed, as
the wire does not carry a line's bin.

Signed-off-by: colton <colton@futurebuild.ai>
… note)

The desk's header has no sign out; only the portal layout has one.
These legs want the name chip to open a real menu with the person's
name and role and Sign out, signing out to clear the session custody
and leave the desk for the front door, with arrows moving, Escape
closing and returning the focus, and a click outside closing. They
fail on today's code: the header has no menu at all.

Signed-off-by: colton <colton@futurebuild.ai>
The desk's header had no sign out; only the portal layout had one. The
signed in person's name chip now opens a menu with their name and role
and Sign out, which clears the shared auth custody and leaves the desk
for the front door. The menu is a real menu: the chip carries
aria-haspopup and aria-expanded, arrows move between items, Escape
closes and returns the focus to the chip, and a click outside closes.

Signed-off-by: colton <colton@futurebuild.ai>
The chip's accessible name came from its content, so a signed in name
like a demo persona's became part of it and page queries that match a
button by a word in the person's name (the Payments tab on the account
page, under the persona Playwright Payments) hit the chip instead. The
chip now announces itself as Account menu; the person's name and role
stay visible on the chip and inside the menu.

Signed-off-by: colton <colton@futurebuild.ai>
… 151 review)

Opened by click, Enter or Space, the menu kept the focus on the chip,
so Escape did nothing and tabbing away left it open. These legs want
the focus moved into the menu on open, Escape handled on the chip as
well as the menu, the menu closed when the focus leaves it, and
ArrowUp opening on the last item. They fail on today's head. (jsdom
fires no activation behavior for a synthetic Enter or Space, so that
path is proven through the click they cause.)

Signed-off-by: colton <colton@futurebuild.ai>
Opening the menu by click, Enter or Space now moves the focus into the
menu's first item, as ArrowDown already did; ArrowUp opens on the last
item. Escape is handled on the chip as well as in the menu, closing
the menu with the focus on the chip. And the menu closes when the
focus leaves the chip and menu for good, so a Tab away never leaves it
open.

Signed-off-by: colton <colton@futurebuild.ai>
…PR 151 review)

The card counts exactly the confirmed orders (the wire contract admits
no other processing state), but it opened the list on All, so the
count and the list disagreed on arrival. These legs want the card to
link to /orders?status=confirmed and the list to read a known status
from the address on load. They fail on today's head: the card links to
/orders and the list ignores the query.

Signed-off-by: colton <colton@futurebuild.ai>
The card's count is exactly the confirmed orders (the wire contract
admits no other processing state), so the card now links to
/orders?status=confirmed and the orders list reads a known status from
the address on load, opening on that tab with the server asked for
that status. An unknown value opens All.

Signed-off-by: colton <colton@futurebuild.ai>
Nine legs fail on today's head: the KPI card and the alert rows carry
aria-labels that hide their figures from a screen reader (the action
belongs in visually hidden text with the visible content kept in the
name); two Recent Activity rows for one customer share one name; a
click on a Top Customers row's counts does nothing; and the account
menu holds a non item child (the name and role block). The bins leg
now also proves the numeric order (BIN-2 before BIN-10) and the
receipt leg pins its exact phrases; those two pass already and pin
existing behavior. The feed's fixture date becomes a neutral value.

Signed-off-by: colton <colton@futurebuild.ai>
The KPI card, the inventory alert rows and the recent activity rows
drop their aria-labels: the label replaced the visible content as the
accessible name and hid the figure or the stock level. The action now
rides along as visually hidden text, so the name keeps the content and
two orders of one customer read differently. A click anywhere on a Top
Customers row follows the row's link. The account menu's name and role
block moves out of role="menu", so the menu owns only its item.

Two red-committed assertions were corrected with the fix: the card
renders the dollar sign and the amount in separate spans, so the
figure asserts on the amount, not a joined "00.00".

Signed-off-by: colton <colton@futurebuild.ai>
Brings PR 148 (the counter's tender choice) into the branch ahead of
the round 2 fixes.

Signed-off-by: colton <colton@futurebuild.ai>
… the round 2 notes)

Choosing another tab left ?status=confirmed in the address, so a
reload reopens Confirmed. This leg chooses All and wants the query
dropped with replaceState, not a new history entry; it fails on
today's head, which never touches the address.

Signed-off-by: colton <colton@futurebuild.ai>
Choosing a tab now replaces the address with /orders?status=<tab> (or
/orders for All), so a reload or a copied link reopens what is on
screen. A replace, not a new history entry: Back still leaves the
page.

Signed-off-by: colton <colton@futurebuild.ai>
…red for the round 2 notes)

A Ctrl, Cmd or middle click on a row outside its link navigated in
place, where the link itself would open a new tab. This leg wants
window.open with the account's address and no in-place navigation; it
fails on today's head.

Signed-off-by: colton <colton@futurebuild.ai>
A Ctrl or Cmd click, or a middle click (auxclick), on a row outside
its link now opens the customer's account in a new tab, as the link
itself would; a plain click still navigates in place.

Signed-off-by: colton <colton@futurebuild.ai>
Brings Gable light (PR 147) and the dashboard's day (PR 157) into the
branch. Light turned the dashboard's and the header's colour classes
into tokens and put a mode control in the header: its control stays
where it put it, and this branch's person's menu, drill in links and
receipt block sit on top.

Signed-off-by: colton <colton@futurebuild.ai>
@futurebuildai
futurebuildai merged commit e64b267 into refactor/v1 Oct 15, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant