testsAndMisc/meta/scripts
Krzysztof kuhy Rudnicki 28f2925c30 Instrument: multi-line array elements are not statements; clear arch_perf_fixes
Fourth flavour of defect (a) found this session, after multi-line quotes,
`} |` and the backslash-continued assignment. bash reports a multi-line array
assignment at its OPENING line and never emits the element lines or the
closing paren, so kcov instrumenting them inflates the denominator:

    +L3 items=('one' 'two')      # opened line 3, closed line 6
                                 # lines 4, 5, 6: never emitted

The rule is therefore symmetric with the existing multi-line-quote case: the
opening line is the statement, everything up to the closing paren is data.
_closes_array() finds that paren by recomputing quote state per candidate, so
an element like "a(b)" does not end the literal early.

Measured effect through fixes/lib/tests/run_all.sh:

  arch_perf_fixes.sh  93.48% -> 100.00%  (43/43)
  bt_audio.sh        100.00% -> 100.00%  (127/127)
  arch_perf_report.sh 100.00% -> 100.00% (59/59)
  arch_perf_probes.sh 100.00% -> 100.00% (93/93)
  ubuntu_perf_more.sh 100.00% -> 100.00% (32/32)
  bt_report.sh       100.00% -> 100.00%  (37/37)
  bt_pairing.sh      100.00% -> 100.00%  (65/65)

One gained, six held, none went DOWN. Acceptance test unchanged:
dot_resolver_install.sh 39/39 and rpi_nc_ca.sh 73/73. arch_perf_fixes.sh
therefore comes off the allowlist in the same commit, confirmed by the real
gate with no exemption.

The fail-open check, since over-detection INFLATES coverage: the old and new
predicates were diffed over every allowlisted lib plus the six cleared ones,
printing each newly excluded line WITH its text. All 91 across 10 libs are
array elements or closing parens -- common.sh's tool tables, packages.sh's
associative arrays, arch_sysctl.sh's sysctl maps, thorium_repairs.sh's four
path lists, ubuntu_perf_fixes.sh's sssd units, and so on. No statement caught.

Tests cover both directions, including three negatives: a single-line
`x=(a b)`, an element containing a parenthesis, and `x=$(echo hi)` which is a
command substitution rather than an array. Module stays at 100% branch
coverage.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 20:13:45 +02:00
..
fixtures focus_ctl: split 1091 -> 171 + 8 siblings, one per enforcer 2026-08-17 17:46:04 +02:00
lib Instrument: multi-line array elements are not statements; clear arch_perf_fixes 2026-08-22 20:13:45 +02:00
run_all refactor(linux_configuration): move remaining dirs + scripts/ to meta/ 2026-05-15 00:53:01 +02:00
_schema_validation.py feat: split oversized modules for 500-line limit, fix kasa coverage gap 2026-06-14 07:19:37 +02:00
_session_autopsy_mutations.py Split test_security_hardening.sh; finish the mutation-driver split 2026-08-16 22:24:02 +02:00
check_agent_contract.sh refactor: extract all inline Python from shell scripts into proper .py files 2026-06-06 10:31:48 +02:00
check_ai_evidence.sh refactor: extract all inline Python from shell scripts into proper .py files 2026-06-06 10:31:48 +02:00
check_append_only_sessions.sh refactor(linux_configuration): move remaining dirs + scripts/ to meta/ 2026-05-15 00:53:01 +02:00
check_ci_green.sh Phase 2: enforce the 250-line cap and stop pushing red 2026-08-21 16:41:31 +02:00
check_file_length.sh meta: add the check_file_length.sh gate the splits assumed existed 2026-08-17 14:52:24 +02:00
check_no_binaries.sh refactor(linux_configuration): move remaining dirs + scripts/ to meta/ 2026-05-15 00:53:01 +02:00
check_no_dufs_conf.sh linux_configuration: self-hosted dufs cloud storage + KeePass WebDAV auto-sync 2026-07-12 03:40:54 +02:00
check_no_inline_python.sh Gate the no-inline-Python rule instead of asking people to remember it 2026-08-16 15:11:56 +02:00
check_no_secrets.sh refactor(linux_configuration): move remaining dirs + scripts/ to meta/ 2026-05-15 00:53:01 +02:00
check_polling_antipatterns.sh Fail the build on any shellcheck finding; fix the 222 the old gate hid 2026-08-03 19:49:11 +02:00
check_python_location.sh refactor: extract all inline Python from shell scripts into proper .py files 2026-06-06 10:31:48 +02:00
check_requirements_sync.py requirements-sync: map bs4 and exempt foreign-runtime imports 2026-07-19 18:58:35 +02:00
check_shell_coverage.sh Shell coverage: convert the ratchet to a measured 100% bar 2026-08-22 11:20:58 +02:00
ci_mirror.sh Make the jailed lib/tests gate able to fail, without breaking measurement 2026-08-22 12:16:18 +02:00
disk_cleanup_check.sh Split disk_cleanup_check.sh: extract the helpers and the output blocks 2026-08-16 22:57:06 +02:00
extract_shell_functions.py extract_shell_functions: recognise the function name() spelling 2026-08-21 16:11:29 +02:00
init_agent_artifacts.sh refactor(linux_configuration): move remaining dirs + scripts/ to meta/ 2026-05-15 00:53:01 +02:00
install_hooks.sh fix(hooks): make git hooks and their toolchain mandatory and fail-closed 2026-08-03 11:09:11 +02:00
makepkg-manual-dlagent.sh refactor(linux_configuration): move remaining dirs + scripts/ to meta/ 2026-05-15 00:53:01 +02:00
mutate_session_autopsy_hooks.py Split test_security_hardening.sh; finish the mutation-driver split 2026-08-16 22:24:02 +02:00
mutate_shell.py meta: make this session's 65 mutations reproducible from the repo 2026-08-17 16:38:46 +02:00
pytest_changed_packages.py Move billsplit Flutter app into the monorepo 2026-08-03 12:22:22 +02:00
run_prettier_capped.sh Move billsplit Flutter app into the monorepo 2026-08-03 12:22:22 +02:00
run_with_heavy_lock.sh Diagnose the pacman first-hook stall; fix the drift that hid a stale wrapper 2026-08-03 15:15:34 +02:00
shell_coverage_jail.sh Fix both kcov defects: dwm_config 47.95% -> 98.48%, rpi_nc_install 11.36% -> 96.59% 2026-08-22 14:24:25 +02:00
shell_coverage_report.py Name the lines outside kcov's line set; bound defect (c) as fail-closed 2026-08-22 14:30:39 +02:00
shell_coverage.sh meta: measurable shell coverage, and dns_iptables.sh at 100% 2026-08-17 15:29:08 +02:00
trace_shell_split.sh Close three fail-open paths in the prefix trace harness 2026-08-16 23:38:38 +02:00
validate_contract.py feat: split oversized modules for 500-line limit, fix kasa coverage gap 2026-06-14 07:19:37 +02:00
validate_evidence.py feat: split oversized modules for 500-line limit, fix kasa coverage gap 2026-06-14 07:19:37 +02:00
verify_shell_split.sh shell splits: add a verbatim-move harness and triage all 29 targets 2026-08-17 14:07:20 +02:00