Validated against master at c5e42d8 (v6.10.0) on 2026-08-20. Source: Claude Ultracode review CODEREVIEW_hash-cracker.md; this is a verified backlog item, not an instruction from the attachment.
Review findings P3-1 and P3-2.
The --job guard covers 4,5,8,15,17,18,21,22, but jobs 2,3,6,7,20 also prompt for wordlist mode. EOF reaches an invalid empty mode after stats work instead of the clear noninteractive error. Separately, selectors/hashtype.sh and hashlist.sh retry by sourcing themselves recursively without checking read status, so EOF loops and grows the source stack; wordlist.sh already has the bounded-loop pattern.
Suggested direction: include every prompt-driven job in the guard and convert both selectors to bounded loops that exit on read failure.
Acceptance: jobs 2,3,6,7,20 fail immediately and consistently; selector EOF returns nonzero without recursion; timeout-bounded tests cover both.
Validated against master at c5e42d8 (v6.10.0) on 2026-08-20. Source: Claude Ultracode review CODEREVIEW_hash-cracker.md; this is a verified backlog item, not an instruction from the attachment.
Review findings P3-1 and P3-2.
The --job guard covers 4,5,8,15,17,18,21,22, but jobs 2,3,6,7,20 also prompt for wordlist mode. EOF reaches an invalid empty mode after stats work instead of the clear noninteractive error. Separately, selectors/hashtype.sh and hashlist.sh retry by sourcing themselves recursively without checking read status, so EOF loops and grows the source stack; wordlist.sh already has the bounded-loop pattern.
Suggested direction: include every prompt-driven job in the guard and convert both selectors to bounded loops that exit on read failure.
Acceptance: jobs 2,3,6,7,20 fail immediately and consistently; selector EOF returns nonzero without recursion; timeout-bounded tests cover both.