{ "title": "Split analyze_repo.sh (869 lines) into an entry script and five libs", "objective": "Bring linux_configuration/scripts/single_use/utils/analyze_repo.sh under the repo-wide 250-line cap by extracting its helper functions and its per-STEP top-level blocks into lib/analyze_repo_*.sh, without changing what the script emits.", "acceptance_criteria": [ "analyze_repo.sh and every new lib/analyze_repo_*.sh file is at most 250 lines.", "shellcheck reports zero findings across the entry script and all five libs, at the repo's no-severity-filter setting, with no suppression added.", "The set of shell functions defined after sourcing is a superset of the original eight, adding only the six wrappers introduced around former top-level blocks: detect_languages, separate_code_and_comments, report_languages, analyze_symbols, analyze_cscope, analyze_clang_ast.", "Every executable (non-comment, non-blank) line of the original file survives somewhere in the entry or a lib, except for lines deliberately edited to quote an assoc-array subscript, quote $TOP_N, or add a local declaration.", "A stubbed run of the entry script's preamble defines all fourteen functions, proving each source line resolves at runtime rather than merely parsing.", "The eight STEP headers the script prints are all still emitted, in the original order.", "No lib sources another lib; the entry sources all five." ], "out_of_scope": [ "Executing analyze_repo.sh, whose install_missing_tools calls sudo pacman, cargo install and makepkg; decision 6 forbids running it.", "Defining KEYWORDS_SHELL and KEYWORDS_JAVA, which the report pass references but which have never existed. The lookup guards on a non-empty value so those two languages are silently skipped; defining them would change output and is a separate fix.", "Fixing the unguarded cd calls or other pre-existing behaviour in the moved code beyond what shellcheck requires." ], "verifier": "shellcheck over the entry plus all five libs (expects zero findings), bash -n on each, bash ~/utils/scripts/check_file_length.sh over the six files (expects none listed), a line-set diff of the original against entry+libs showing no unintended loss, and a stubbed run of the entry preamble printing all fourteen function names." }