d127fb2197
A raw newline in the _CMDPOS start-position class made ANY multi-line quoted argument look like a command boundary, so hermes send message bodies, multi-line git commit -m messages, and heredoc text that merely mentioned dangerous command names tripped the unconditional hardline blocklist and could not run at all. Mask newlines inside single/double quotes (detection-only, mirroring the quote tracking in _iter_shell_command_starts) before building detection variants. Real threats keep blocking: unquoted newlines stay command separators, command substitutions inside quotes still anchor, and _mark_command_starts still re-inserts newlines at genuine quote-aware command starts. Masking runs on the RAW command before normalization, which strips escapes and would otherwise corrupt quote state. Regression tests cover both directions: multi-line quoted data passes (hermes send, git commit -m, heredocs); bare/chained/substituted shutdown-class and rm-floor commands still block.