- cli.py: guard --lyrics read against missing/unreadable/undecodable
files, matching the file's existing error-reporting conventions
- stages/grid.py: route ValueError from scale_bpm/to_ultrastar through
PipelineError with a user-facing message; use bpm_override is not None
instead of truthiness so an explicit 0 override isn't silently ignored