{ "intent": "Test linux_configuration/scripts/single_use/fixes/lib/arch_perf_fixes.sh, eighth of the 16 untested fixes/lib libs, and fix a third instance of the dead journal-size regex. The lib reaches 93.48% and STAYS on the allowlist: the three remaining lines are the element lines of a multi-line array literal, which bash attributes to the array's opening line.", "scope": [ "linux_configuration/scripts/single_use/fixes/lib/arch_perf_fixes.sh (journal regex, plus three env overrides for absolute paths)", "linux_configuration/scripts/single_use/fixes/lib/tests/test_arch_perf_fixes.sh (new, 22 assertions)", "linux_configuration/scripts/single_use/fixes/lib/tests/arch_perf_harness.sh (three new overrides and their per-test reset)", "meta/shell-coverage-allowlist.txt is deliberately UNCHANGED: arch_perf_fixes.sh does not meet the 100% bar", "Non-goal: extending continuation_lines() for multi-line array literals, which lands separately" ], "changes": [ "Fixed the journal size regex at arch_perf_fixes.sh:16, the THIRD instance of the same bug: it required a space before the unit (([0-9]+\\.?[0-9]*)\\ G) but journalctl prints '4.2G' with no separator, so the vacuum branch was dead. The space is now optional, matching the fix already made in arch_perf_report.sh.", "Added JOURNALD_CONF_DIR, SYSTEMD_UNIT_DIR and ORGANIZE_SCRIPT_CANDIDATES overrides, all defaulting to the real paths. fix_journal writes a journald drop-in, fix_media_organizer writes /etc/systemd/system/media-organizer.service, and the organizer script is probed at two absolute home paths. run_all.sh runs UN-jailed in ci_mirror.sh and in CI, so a bind mount would protect only the coverage run.", "Added test_arch_perf_fixes.sh covering fix_journal (multi-gigabyte journal vacuumed and capped, a small journal capped but not vacuumed, and an already-configured cap left alone), fix_nm_wait_online (enabled and already-disabled), and fix_media_organizer (script missing, unit written with the right user and ExecStart, an already-correct unit skipped, and a unit naming the wrong user rewritten)." ], "verification": [ { "command": "bash linux_configuration/scripts/single_use/fixes/lib/tests/run_all.sh", "result": "pass", "evidence": "arch_perf_fixes: 22 passed, 0 failed. All fixes lib test files passed, so the six cleared libs and the eight pacman_hook_stall suites stay green." }, { "command": "bash meta/scripts/shell_coverage_jail.sh --subject linux_configuration/scripts/single_use/fixes/lib/tests/run_all.sh --measure arch_perf_fixes.sh --min 1 --fail-on-case-error -- \"\"", "result": "pass", "evidence": "arch_perf_fixes.sh: 43/46 lines = 93.48%, uncovered 68, 69, 70." }, { "command": "PS4='+L${LINENO} ' bash -x on a minimal multi-line array literal", "result": "pass", "evidence": "bash reports the whole assignment at the OPENING line ('+L3 items=(\\'one\\' \\'two\\')') and never emits the element lines or the closing paren. So lines 68-70 of arch_perf_fixes.sh are data inside a multi-line array, not statements; the array is provably used, since the loop on line 71 iterates it and the media-organizer assertions pass." }, { "command": "ls -la /etc/systemd/system/media-organizer.service after a bare (un-jailed) run of run_all.sh", "result": "pass", "evidence": "Still dated 2026-07-25, a genuine artifact of a past production run, untouched by the suite. The journald drop-in likewise keeps its 2026-03-02 mtime." }, { "command": "Scope the artifact: grep for multi-line array literals across fixes/lib and the allowlist", "result": "pass", "evidence": "Three of the remaining untested libs use the form (arch_perf_fixes.sh 1, thorium_repairs.sh 4, ubuntu_perf_fixes.sh 1), and nine allowlisted libs repo-wide contain a '=(' line ending. Large enough to be worth extending continuation_lines(), which follows as its own commit." } ], "risks": [ "The journal regex fix makes a previously-dead vacuum live: fix_journal will now really run 'journalctl --vacuum-size=300M' when the journal exceeds a gigabyte. Unlike arch_perf_report.sh's version this one is NOT behind an --apply-safe-fixes flag; it runs whenever fix_arch_performance.sh runs. That is the function's evident intent -- it is named fix_journal and its next act is to write a permanent 300M cap -- but the behaviour change is real and worth stating.", "arch_perf_fixes.sh stays on the allowlist at 93.48% pending the array-literal detector change." ], "rollback": [ "git revert the commit; it adds one test file, three harness overrides, and changes one regex plus three path defaults in the lib. No allowlist entry is touched.", "After rollback, run bash linux_configuration/scripts/single_use/fixes/lib/tests/run_all.sh and confirm the remaining suites pass." ] }