{ "title": "Split block_compulsive_opening.sh under the 250-line cap", "objective": "Bring block_compulsive_opening.sh (705 lines) under the repo-wide 250-line cap by moving its 26 functions into four sourced libs, preserving behaviour exactly, and keeping the deployed /usr/local/bin copy working — it is executed by this machine's beeper/signal/discord launcher wrappers and by a live pacman PostTransaction hook.", "acceptance_criteria": [ "The entry script and all four lib/cco_*.sh files are each at most 250 lines.", "`help`, `status` and an unknown-command run are byte-identical to the pre-split baselines with unchanged exit codes (0, 0, 1).", "verify_shell_split.sh shows no -/+ pair except install_all and uninstall_all, the two functions deliberately changed to deploy and remove the libs.", "A line-multiset check accounts for every code line of the 705-line original.", "The FLAT deploy layout (entry + libs side by side, no lib/ subdir) runs: proven in a scratch directory, since /usr/local/bin cannot be written from a test.", "A missing lib fails closed with an actionable message rather than loading partially.", "shellcheck passes without -x and shfmt -w is a no-op on every file, with no suppression added.", "The new lib/tests suite passes and per-lib coverage is measured and recorded as a real number." ], "out_of_scope": [ "Executing install_all / uninstall_all / install_wrapper against the real system: they move /usr/bin binaries and write /etc/pacman.d/hooks.", "Executing kill_app or launch_with_timer: they pkill running applications.", "Re-deploying to /usr/local/bin. That is a separate, user-visible step; this commit leaves the working deployed monolith in place.", "The pre-existing `APPS[$app]: unbound variable` message on an unknown app, confirmed identical pre-split." ], "verifier": "bash meta/scripts/check_file_length.sh --all; bash meta/scripts/verify_shell_split.sh HEAD ; diff of help/status/unknown against captured baselines; a flat-layout simulation in a scratch dir including the missing-lib case; shellcheck + shfmt idempotence; lib/tests/run_all.sh and shell_coverage.sh." }