Visual State Inventory
Output 01 defines the visible surfaces. Output 02 defines the materially different conditions those surfaces and controls must visibly support before React begins. V2 adds state families that are commonly missed: unsaved work, conflicts, session changes, context switching, optimistic/queued work, mixed results, bulk actions, duplicate handling, pagination, and expired integration credentials.
A · Complete Truth-State Vocabulary
Check every relevant surfaceNormal + Success
- representative populated state
- active/selected state
- successful completion where material
Empty + No Results
- first-use empty
- search/filter zero results
- next/recovery action
Loading + Pending
- skeleton/progress
- background pending
- queued/unconfirmed work
Dirty + Autosave
- unchanged → modified
- saving → saved
- save failure
- unsaved-leave warning
Stale + Partial
- last-known data
- delayed/incomplete data
- do not pretend stale is current
Partial Success
- some actions succeed
- some fail
- show exactly what needs attention
Error + Outage
- recoverable failure
- dependency unavailable
- retry/alternate path
Concurrent Change
- changed elsewhere
- refresh/review differences
- resolve/overwrite only where applicable
Restricted + Locked
- permission denied
- read-only/locked
- never disguise forbidden as empty
Expired + Reauthentication
- session expired
- sensitive action needs reauth
- signed-out return path
Context Switching
- household/person/workspace switch
- switching/loading
- unavailable/restricted context
Destructive / Irreversible
- confirmation
- consequence
- cancel path
- archive vs delete
B · Conditional State Families
Explicitly check where relevantSelection + Bulk Mode
None selected → one/many selected → bulk-action toolbar → processing → success/partial failure → selection cleared.
Pagination / Load More
Initial page, loading next page, end-of-list, failed next-page load where large datasets use progressive loading.
Duplicate / Merge
Existing match discovered during create/intake/import; review match, merge/use existing, or continue-new treatment where allowed.
Expired / Revoked Credentials
Authorization expired or revoked is distinct from a normal disconnected integration and needs a clear reconnect path.
C · Control & Interaction States
Only when the control is actually usedEdit lifecycle
- blank/create
- populated/edit
- dirty/changed
- saving/saved/save failed
- validation
- locked/read-only
- unsaved-leave warning
Browse + selection
- populated/empty
- filtered/no-results
- selected item
- bulk mode when used
- pagination/end-of-list when used
- phone treatment
Upload / import
- idle/selecting
- validation
- processing
- success/partial success
- failure
- duplicate/conflict
Drawers, dialogs, popovers
- closed/open
- validation/error
- enabled/disabled actions
- destructive confirmation
- phone presentation
D · Platform + App-Family State Checks
Outside ordinary destination pages| Surface | States to resolve | Status |
|---|---|---|
| Family Front / Tile Page | Authenticated context, app available/unavailable, session expired, phone | Not yet decided |
| Application Entry | Entry context, initial destination, restricted/locked, reauth if applicable | Not yet decided |
| App Switching | Current app, return, target selection, unavailable target, context continuity | Not yet decided |
| Household / Person / Workspace Selector | Closed/open, current selection, switching/loading, unavailable/restricted option | Not yet decided |
E · Household Ledger Application Envelope
Independent whole-app state review| Surface family | Blind-spot-aware state review | Status |
|---|---|---|
| Administration | First setup, populated, edit, dirty/saving/saved, validation, conflict, restricted/locked, destructive | Not yet decided |
| Integrations | Connected, disconnected, setup, pending/syncing, outage/error, expired/revoked credentials, reconnect, disconnect confirmation | Not yet decided |
| Import / Export / Migration | Idle, validation, processing, success, partial success, failure, duplicate/merge, conflict | Not yet decided |
| Operations / Queues | Healthy, processing, queued/unconfirmed, delayed/stale, failed, retrying, retry available, empty | Not yet decided |
| Identity / Security | Normal, restricted, locked, session expired, reauth/security confirmation | Not yet decided |
| Settings / Profile | Default, dirty, saving, saved, save failed, context switch, validation, sign-out/unsaved confirmation | Not yet decided |
F · Destination Blind-Spot Sweep
Minimum prompts; exact applicability is still ruled per destinationRecords / Matters / Assets
Add dirty/saving, concurrent conflict, duplicate/merge where relevant, selection/bulk, pagination if used, session/context changes.
Accounts / Integrations
Add expired credentials, queued sync, partial success, conflict, reauth, destructive disconnect/close.
Binder / Communications
Add bulk selection if used, upload mixed results, duplicate/conflict, pagination/end-of-list, restricted/locked distinctions.
Overview / Cash Flow / Daily Command
Add context switching, stale-vs-current distinction, partial aggregation, session expiry, retry behavior where data loads fail.
Vision
Add dirty/autosave, save failure, conflict, unsaved-leave, archive/destructive state where used.
All Destinations
Explicitly rule Required / Not applicable / Not yet decided for each meaningful family rather than inheriting assumptions.
G · Grocery Independent Sweep
Household Ledger coverage does not prove Grocery coverageInventory
Duplicate/merge, dirty/saving, conflict, bulk selection if used, House Check states, destructive/archive, phone.
Shop
Optimistic/queued check-off, offline/interrupted shopping, undo, closeout, reconciliation, partial success/failure.
Meals
Edit/dirty/saving, conflict, planned/unplanned, leftovers, handoff state, phone.
Recipes
Dirty/saving, duplicate/merge on intake, validation, conflict, Cookbooks, Cook Mode, unavailable content.
Grocery Envelope
Session/context changes, Settings save lifecycle, integration credential expiry where applicable, background sync/queue/retry.
Hard Rule
Every bounded app is checked independently against the complete state vocabulary.
Output 02 Close Gate
No meaningful state may remain implied- Every relevant surface is checked against the complete truth-state vocabulary.
- Dirty/saving/unsaved, conflict, session/reauth, context-switching, queued/unconfirmed, and partial-success states are explicitly ruled.
- Selection/bulk, pagination/end-of-list, duplicate/merge, and expired-credential states are explicitly checked where relevant.
- Every used control and overlay has its meaningful alternate states.
- Empty never disguises restricted or unauthorized.
- Failure/outage/retry and destructive consequence/cancel paths are visible where applicable.
- Household Ledger and Grocery are checked independently.
- Every Required state points to accepted HTML authority.
- Omitted states are marked Not applicable.
- Owner accepts the completed Visual State Inventory.