7 PRs opened this wave, plus every issue found while manually testing the icon migration.
Shalabh Agarwal · 2026-09-15
On successful create, the form's onCompleted handler never calls navigate(...) — the UI stays parked on the create form instead of returning to the banks list.
onCompleted missing navigate
The user-search box has autoFocus and a placeholder containing "username" — classic password-manager heuristics (Bitwarden, 1Password) fire an inline autofill prompt on page load for a plain search field.
luyrxzpk — needs a PR. Confirmed pre-existing on main, not a #563 regression.placeholder="...username" + autoFocus
luyrxzpk: reworded placeholder, dropped autoFocus) — no verify capture yet.The "next page" chevron calls handleNext() unconditionally — no disabled tied to result count or a hasNextPage field, so you can page past the last result indefinitely.
ChevronRight onClick={() => handleNext()}
The submenu's useEffect only ever sets isSettingsMenuExpanded to true when a settings route is selected — nothing flips it back to false on navigate-away or outside click.
true
Pending token text only committed on Enter or a document-level click-outside — clicking "Save Changes" fires the click-outside handler after the button's own click handler reads a stale strings closure, so the just-typed value never reaches the mutation.
<input> has no onBlur
onBlur flushes the pending token before Save reads state.With HMA down, the fetch rejects (ECONNREFUSED) before the response-status check runs. The resolver's catch only maps one known error type; everything else becomes a generic GraphQL error, and the client discards the real message for a hardcoded "please try again."
ullwxrty — typed HMAUnavailableError server-side, real message surfaced client-side. Needs a PR.createBank(), unmapped fetch failure
client/.../HashBankForm.tsx#L252-L257 — hardcoded error copy, real error discarded
ReactPlayer's wrapper renders default inline 640×360; the component only constrained max-height, and maxWidth/maxHeight defaulted to Infinity (invalid CSS, silently ignored) — video spills past the rounded/shadowed card.
style={{ display:'flex', maxWidth, maxHeight }}
object-fit: contain.Table wrapper defaults to w-fit-style sizing across 8 dashboard pages (Rules, Reporting Rules, Item Types, Actions, all 3 bank types, Manage Users) — leaves large dead space on wide viewports.
<Table ...> call
"Required" and "Hidden" checkboxes per custom field both used a static id, so every field row collided, breaking label-click association and a11y past the first field. Closes issue #93.
id="required-checkbox" / id="hidden-checkbox"
Nothing on any layer requires a non-empty name — client submit is gated only on edit permission, the resolver and service pass name straight through, and the DB column is NOT NULL but '' satisfies that. Audit found the gap is systemic across 9 config-entity forms (Hash Bank, Item Type, MRT Queue, etc.) with no server-side guard anywhere.
fix-blank-entity-names (server, 24 resolvers) and fix-blank-entity-names-client (client, 8 files) — both unpushed. Needs PRs.createTextBank forwards name unchecked