components/stream/WithdrawButton.tsx (idle → signing → submitting → done/error state machine, mount-guarded state updates) and components/stream/StreamActions.tsx (role-gated button rendering, the run() helper's pending/error handling, the top-up modal's amount validation including the MAX_I128 bound check) are the core mutation UI for the whole app, but neither has a test file. Every other file in components/stream/ that has meaningful branching logic (StreamFlowChart.tsx, BatchStreamCreator.tsx, BulkWithdrawButton.tsx) already has one under components/__tests__/ or components/stream/__tests__/; these two are the notable gap, and they're arguably the highest-stakes ones since they're what actually moves funds.
components/stream/WithdrawButton.tsx(idle → signing → submitting → done/error state machine, mount-guarded state updates) andcomponents/stream/StreamActions.tsx(role-gated button rendering, therun()helper's pending/error handling, the top-up modal's amount validation including theMAX_I128bound check) are the core mutation UI for the whole app, but neither has a test file. Every other file incomponents/stream/that has meaningful branching logic (StreamFlowChart.tsx,BatchStreamCreator.tsx,BulkWithdrawButton.tsx) already has one undercomponents/__tests__/orcomponents/stream/__tests__/; these two are the notable gap, and they're arguably the highest-stakes ones since they're what actually moves funds.