feat(aws-control): overview pane and a primitive-based visual pass - #8986
Conversation
Design Review (Fable 5) — ✅ PASSDesign-level review of Both halves of the change hold up under inspection: the Overview restates facts through shared components and shared query cache keys ( Design-Verdict: PASS Overview drift risk is designed away — every restated figure shares the owning pane's component or cache key, and each behavior change is declared with backing code. [DESIGN-REVIEWED] 18fc996 |
First Principles Review (Fable 5) — ✅ PASSPremise-level review of The review is complete. This PR is unusually well-defended: nearly every observable difference is declared in the description with a named harm, the new shared components have counted multi-site consumers, dead code ( First-Principles-Verdict: PASS A read-only Overview built entirely from facts, queries and primitives the panes already own — every item declared, every new symbol multi-consumer, every relabel argued from a nameable defect. What this change shipsIntent: give the operator one landing surface that answers "is everything fine" before they pick a pane, and unify the app's hand-rolled visuals onto existing primitives. This is an ADDITION, framed as one (
New shared symbols counted: [FIRST-PRINCIPLES-REVIEWED] 18fc996 |
GPT 5.6 Review — ✅ no blocking findingsGPT 5.6 completed its review of This comment is updated in place on each push. Review detailsNo findings. False positive or not applicable? A repository writer can comment: |
UX Review (Fable 5) — 🟡 CONCERNSUX-level review of All evidence reviewed. Reconciliation is complete: the blind reader correctly identified essentially every new control across all 24 screenshots; no primary control was misread or refused. Remaining items are concerns-level. UX-Verdict: CONCERNS Overview lands and reads well cold; the one real wrinkle is "Amazon S3 — Confirmed" sitting under "No cloud drive yet," which the blind reader could not reconcile. Watch
Evidence gaps
[UX-REVIEWED] 18fc996 |
Opus 4.8 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
3e441d7 to
7502bad
Compare
7502bad to
07fd1e2
Compare
|
Round 1 response — all on GPT 5.6 (3 blocking) — all fixed
Design (CONCERNS) — fixed
First Principles (CONCERNS)
Also from re-shooting the frames after the changes: the Overview drive tile label wraps instead of truncating ("Artifac…" at 1280 in the half-width card), and the account row no longer shows a stray "·" at 390px when the region hides. Screenshots in the description re-pinned to the new sha. |
07fd1e2 to
aed315f
Compare
|
Round 2 — on GPT 5.6 (1 blocking) — fixed. Both Overview reads now branch on the error code: only a 409 whose code is First Principles (CONCERNS) — taken.
|
|
Round 3 — on GPT 5.6 (1 blocking) — fixed as prescribed. The failure captions are gone: a stat whose read failed shows the dash and nothing under it, on the Overview (spend, drive, share links, backups) and on the Usage pane ( First Principles (CONCERNS) — taken.
|
5378801 to
fd59be2
Compare
|
Round 4 — on Taken
Not taken
|
fd59be2 to
581d742
Compare
|
Round 5 — on GPT 5.6 (non-blocking finding) — fixed. The Overview's two compact gates now pass UX (CONCERNS) — taken
First Principles (from the previous round) — |
GPT 5.6 Review —
|
1 similar comment
GPT 5.6 Review —
|
581d742 to
2c4cdf6
Compare
|
Round 6 — on |
2c4cdf6 to
fe721b1
Compare
|
Round 7 — on GPT 5.6 (1 blocking) — fixed in both cost views. A 200 that carries UX (CONCERNS) — taken
Not taken
|
The app opened on a file listing and every pane was hand-rolled markup: about twenty retyped card containers with four different insets, nine raw buttons where primitives exist, four grammars of empty state, three encodings of health, and a consent card that spent four definition rows on one boolean. Nothing told the reader whether anything was wrong before they clicked. The app now opens on an Overview: a strip of metric cards (accounts, keys healthy of total, drive used, month-to-date spend, live share links, backup schedule) each with a one-line reading under its number, then an Accounts card and a Cloud drive card side by side, then Paid services. Every figure restates a fact another pane owns, so the pane adds no mutation beyond the two consent gates. Account rows are one component with a density variant, shared with the Accounts pane, so the remove flow and the Reconnect disclosure exist once. Across the panes: containers are Card with PanelSectionHeader, search is SearchInput, checkboxes are Checkbox, empty states are EmptyState or FilteredEmpty, loading mirrors the row box, and health is a dot plus a Badge word on every row. AwsConsentGate's compact mode renders receipt, ask and error as one row each with no container, so both panes lay them in one list; its default card is rebuilt on Card. The storage split is one shared StorageBar placed by both the Usage meter and the Overview card. The month-to-date figure states why it is missing in a visible line rather than a title attribute. The App Store card and detail page gain hero art for the app, in the same palette and restraint as the other builtins.
fe721b1 to
18fc996
Compare
|
Round 8 — on UX (CONCERNS) — taken
Not taken
|
Summary
Follows #8943 (remove-account, merged); rebased onto
mainafter it landed.AWS Control was a flat, hand-rolled surface: ~20 retyped card containers with four different insets, nine raw
<button>s where primitives exist, four grammars of empty state, three encodings of health, and a consent card that spent four<dl>rows on one boolean. Nothing told the reader whether anything was wrong before they clicked. This brings it to the same bar as Issue Radar / Ops Mission Control, using only primitives that already exist inui.tsx.New Overview pane (the app's landing). A metric strip (Accounts, Keys healthy, Drive used, Month to date, Share links, Backup) — each card carries a one-line reading under its number — then an Accounts card and a Cloud drive card side by side, then Paid services. Every figure restates a fact another pane owns; the pane adds no mutation beyond the two consent gates. The bare
/aws-controlpath and unknown segments land here; every named pane path is unchanged.One account row, two densities.
AccountRowgained avariantand is shared by the Overview card and the Accounts pane, so the remove flow (#8943), the Reconnect disclosure and the hand-off gating exist once. Degraded accounts now get a Reconnect button in the row (previously only unresolved rows had a route back to green).Primitives everywhere.
Card+PanelSectionHeaderaround every list;SearchInput,Checkbox,IconButton,Clickablereplace the hand-rolled controls;EmptyState/FilteredEmptyreplace the four empty-state grammars (the filtered state now offers Clear in place); loading mirrors the row box; health is a dot plus aBadgeword on every row (account, key, backup, share) and the word is never hidden at any width.Consent.
AwsConsentGatecompactmode renders receipt / ask / error as one row each with no container of its own, so Overview and Usage lay them in onedivide-ylist; the default card is rebuilt onCard. Usage's bill row becomes threeStatCards; the reason a figure is missing is a visible line, not atitleattribute.Storage split drawn once.
StorageBarinshared.tsxis placed by both the UsageStorageMeterand the Overview drive card.App Store art. Four hero SVGs (
hero-{light,dark}.svg,hero-detail-{light,dark}.svg) with the same restraint as the other builtins' art and a hue of their own (cyan, with the amber accent), wired intoapp.json.i18n. 41 new keys in all 12 catalogs (+
en-XA), three newly dead keys removed, plural forms per locale (CJK without_one, ru with_few/_many),pluralKeys.jsonregistered.Behaviour changes, declared. The bare
/aws-controlpath lands on Overview instead of Files. File grid tiles showsize · modifiedunder the name instead of the kind word (the kind is already the tile's icon and the list view's Kind column; the two facts a tile could not otherwise show are how big and how recent). "Failed" on an account row is relabelled "Needs attention". Reconnect and Remove are items in the account row's overflow menu. The Accounts pane's totals line ("N accounts · M of K keys healthy", same test id) moves from its own strip into the pane header's subtitle slot. Its account count, and the Overview's Accounts card, count every listed row including the unresolved "Not connected yet" pseudo-row (accounts.length), where the strip used to count resolved accounts only (totals.accounts), so the sentence, the card and the list header always name one number. The Overview's "N need attention" counts the rows that wear the Needs attention badge (degraded), not the unresolved "Unknown" row. Each metric card opens the pane that owns its figure. The default key's star on the Keys card is now a "Default profile" badge with the word beside the glyph. The Backup pane's state badge for a recorded run reads "Backed up" rather than "Up to date", since the ledger records that a run happened, not that it is recent.Dialogs stay hand-rolled on purpose:
DriveSectionViewrestores focus to a remembered opener that Radix's dialog would fight; their panels are restyled to the card classes.Screenshots
Overview (dark / light):
Accounts · Files · Usage:
States a plain pane load never shows (account row menu open · filter with no match · Files grid view · Overview before the drive exists · Reconnect guidance open · empty Files · the full consent card · empty Share links · Add accounts expanded · a stale bill with its notice · a failed consent status read as a compact row):
More frames (390px, backup, share links, library, store art)
Tests
Every pre-existing
data-testidis kept. Behavioural assertions changed only where the surface moved: the bare path now lands on Overview (six navigation tests updated to say so), the health word is aBadge(tone assertions read the badge variant), the filtered-empty state isFilteredEmpty(one Files assertion rewritten to pin the echo + Clear), the em-dash cost tests assert the value and its visible reason. Added: Overview renders the six metric cards from the mocked queries; the Overview Accounts card offers the same remove flow; Add account lands on the Accounts pane with the disclosure open; the drive card shows the setupEmptyStatewhenexists: false; 390px root list includes Overview; compact consent rows (ask / receipt / error / no-container); storage tiles; backup state badges.Verification
tsc -b, eslint (0 errors), jscpd (0 clones),lint:phantom-classes,i18n:check(19 checks PASS), docs-lint, brand gate, black gate — clean. Full frontend suite: 1875 files / 29 495 tests passed. Backend: the manifest/asset/registry suites plustest_aws_control_app.py— 554 passed (no Python besidesapp.jsonchanged). Every frame above is a real render of this branch against fixture APIs (dark 1280, light 1280, dark 390 for all seven panes).