{ "title": "Split setup_night_lockdown.sh under the 250-line cap", "objective": "Bring setup_night_lockdown.sh (918 lines) under the cap by moving its top-level functions into five libs and its two quoted heredocs into verbatim payload files, while guaranteeing the two scripts it deploys to /usr/local/bin are unchanged — night-lockdown-unlock.timer is enabled and fires at 05:00.", "acceptance_criteria": [ "The entry script and every lib is at most 250 lines, verified with the payloads git-tracked so the gate actually sees them.", "The emitted night-lockdown-enter.sh and night-lockdown-unlock.sh hash identically to the files currently deployed in /usr/local/bin, with mode 0755.", "verify_shell_split.sh reports additions only — no moved function's body changed.", "`--help` is byte-identical to the pre-split baseline and `status` differs only in live clock state.", "Both payloads parse as standalone scripts; shellcheck passes without -x and shfmt is a no-op, with no suppression added.", "install_enter_script and install_unlock_script run without an unbound variable." ], "out_of_scope": [ "Running `setup_night_lockdown.sh setup`: it masks the TTY login surface and tears down the GUI, with SSH as the only recovery path.", "Re-deploying to /usr/local/bin — unnecessary, since the split provably emits the same bytes already there.", "Splitting the 279-line enter payload: it is one generated artifact, and the user chose the .sh.in convention over splitting it." ], "verifier": "sha256 of emitted artifacts vs /usr/local/bin (the decisive check); check_file_length.sh --all with payloads tracked; verify_shell_split.sh; diff of --help/status against baselines; bash -n on payloads; shellcheck + shfmt idempotence." }