report_live_state: also scan installed scripts under /usr/local

Found while surveying system-maintenance: /usr/local/bin holds copies
that hardcode repo paths, and no section of the inventory looked there.
The installed copy is what actually runs, so grepping the repo for its
own paths never finds them.

Three were invisible until now:

  periodic-system-maintenance.sh  3 paths into digital_wellbeing + hosts
  hosts-file-monitor.sh           1 path into hosts
  wsg-grabber                     PYTHONPATH into the repo root

The first runs hourly, which means the two subsystem extractions coming
next have to reinstall it -- editing the repo copy alone would leave the
live one pointing at a directory that no longer exists.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
This commit is contained in:
Krzysztof Rudnicki 2026-08-23 17:44:10 +02:00
parent 6b5fe8e7a7
commit b50b146dad
3 changed files with 80 additions and 50 deletions

View File

@ -1,13 +1,19 @@
# Live state pointing into testsAndMisc
Generated by `meta/scripts/report_live_state.sh` at 2026-08-23T16:56:34+02:00.
Baseline commit: f4535b6b
Generated by `meta/scripts/report_live_state.sh` at 2026-08-23T17:43:44+02:00.
Commit: 6b5fe8e7
This is the checklist for the repo restructure. Every entry below names
an absolute path inside this repo; when that path moves, the referring
file must be repointed in the same step. Re-run the script with
`--check` after each move to prove nothing was left behind.
The "installed scripts" section was added after `/usr/local/bin/`
copies were found naming repo paths. Those are the easiest references to
miss: the installed copy is what actually runs, so grepping the repo for
its own paths never finds them, and a stale one fails at whatever hour
its timer next fires.
```
## systemd units
/etc/systemd/system/dns-blocklist-refresh.service
@ -18,9 +24,6 @@ file must be repointed in the same step. Re-run the script with
3:Documentation=file:///home/kuhy/testsAndMisc/endurain/README.md
11:WorkingDirectory=/home/kuhy/testsAndMisc
21:ExecStart=/usr/bin/bash -c 'ENDURAIN_API_KEY="$(cat /home/kuhy/testsAndMisc/endurain/.api_key)" /home/kuhy/testsAndMisc/.venv/bin/python -m python_pkg.endurain_import'
/home/kuhy/.config/systemd/user/kcd2-dice-build.service
7:WorkingDirectory=/home/kuhy/testsAndMisc/kcd2_dice_solver
8:ExecStart=/home/kuhy/testsAndMisc/kcd2_dice_solver/deploy_build.sh
/home/kuhy/.config/systemd/user/morning-routine.service
13:Environment=PYTHONPATH=%h/testsAndMisc
16:WorkingDirectory=%h/testsAndMisc
@ -34,6 +37,16 @@ file must be repointed in the same step. Re-run the script with
/etc/guard-lib/targets/resolved.conf
4:PLUGIN="/home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/hosts/guard/plugins/resolved-plugin.sh"
## installed scripts referencing the repo
/usr/local/bin/hosts-file-monitor.sh
10:HOSTS_INSTALL_SCRIPT="/home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/hosts/install.sh"
/usr/local/bin/periodic-system-maintenance.sh
26:PACMAN_WRAPPER_INSTALL="/home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/digital_wellbeing/pacman/install_pacman_wrapper.sh"
27:MAKEPKG_WRAPPER_INSTALL="/home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/digital_wellbeing/pacman/install_makepkg_wrapper.sh"
28:HOSTS_INSTALL_SCRIPT="/home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/hosts/install.sh"
/usr/local/bin/wsg-grabber
4:export PYTHONPATH="/home/kuhy/testsAndMisc${PYTHONPATH:+:$PYTHONPATH}"
## symlinks into the repo
/home/kuhy/.config/i3blocks/claude_usage.sh -> /home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/i3-configuration/i3blocks/claude_usage.sh
/home/kuhy/.config/i3blocks/config -> /home/kuhy/testsAndMisc/linux_configuration/scripts/periodic_background/i3-configuration/i3blocks/config
@ -56,49 +69,10 @@ file must be repointed in the same step. Re-run the script with
/home/kuhy/.oh-my-zsh/custom/token-savers.zsh -> /home/kuhy/testsAndMisc/linux_configuration/zsh/token-savers.zsh
```
## Depth-cap dry run (step 0)
## Depth-cap progress
`meta/scripts/check_directory_depth.sh --all` at baseline:
| Bucket | Files |
| --------------------------------------- | ------- |
| Total violations | 556 |
| Disappear with the archives/extractions | 349 |
| **Remain — the step D worklist** | **207** |
Step D worklist by directory:
```
36 linux_configuration/scripts/single_use/utils
24 linux_configuration/scripts/single_use/features
18 linux_configuration/scripts/single_use/misc/testsAndMisc-bash
17 linux_configuration/scripts/single_use/fixes
14 linux_configuration/scripts/single_use/fresh-install
13 linux_configuration/scripts/periodic_background/i3-configuration/i3blocks
10 linux_configuration/scripts/single_use/misc/testsAndMisc-bash/tools
9 linux_configuration/C/atop_agg
7 python_pkg/artgate/routes
6 meta/scripts/fixtures/mutations
6 meta/scripts/fixtures
6 linux_configuration/scripts/single_use
6 linux_configuration/docs/security-hardening
5 linux_configuration/dwm/bin
3 python_pkg/artgate/styles
3 linux_configuration/scripts/diagnostics
3 linux_configuration/scripts/boot_recovery
2 linux_configuration/scripts/single_use/features/systemd
2 linux_configuration/scripts/periodic_background/i3-configuration
2 linux_configuration/scripts/periodic_background
2 linux_configuration/scripts/gaming
2 linux_configuration/scripts/boot_recovery/hooks
2 linux_configuration/dwm/patches
1 meta/scripts/run_all
1 linux_configuration/zsh/scratchpad
1 linux_configuration/scripts/single_use/utils/data
1 linux_configuration/scripts/single_use/misc/testsAndMisc-bash/.vscode
1 linux_configuration/scripts/single_use/feedback-appimage
1 linux_configuration/scripts/periodic_background/i3-configuration/i3
1 linux_configuration/scripts/meta
1 linux_configuration/.github/workflows
1 linux_configuration/docs/pacman-wrapper
```
| Bucket | Files |
| ---------------------------------------- | ------- |
| Violations now | 294 |
| Disappear with the remaining extractions | 87 |
| **Remain — the step D worklist** | **207** |

View File

@ -0,0 +1,37 @@
{
"intent": "Close a gap in the live-state inventory: scripts installed under /usr/local that hardcode repo paths were invisible to the checklist the restructure relies on.",
"scope": [
"meta/scripts/report_live_state.sh - new report_installed section scanning /usr/local/bin and /usr/local/lib",
"docs/restructure-live-state.md - regenerated",
"Non-goal: repointing the references it found; each travels with its own subsystem extraction"
],
"changes": [
"Added report_installed(), which greps /usr/local/bin and /usr/local/lib for the repo path and prints each hit with line numbers, matching the existing sections' shape and feeding the same --check exit code.",
"Regenerated the inventory doc and folded in current depth-cap progress."
],
"verification": [
{
"command": "./meta/scripts/report_live_state.sh",
"result": "pass",
"evidence": "Found 3 installed scripts naming repo paths that no prior section reported: /usr/local/bin/periodic-system-maintenance.sh (3 paths into digital_wellbeing and hosts), /usr/local/bin/hosts-file-monitor.sh (1 into hosts), /usr/local/bin/wsg-grabber (PYTHONPATH into the repo root)."
},
{
"command": "./meta/scripts/report_live_state.sh --check; echo $?",
"result": "pass",
"evidence": "Exit 1, correct while references remain; the new section participates in the same aggregate."
},
{
"command": "shellcheck meta/scripts/report_live_state.sh",
"result": "pass",
"evidence": "Clean, no findings at any severity."
}
],
"risks": [
"The scan covers /usr/local/bin and /usr/local/lib. A reference installed elsewhere on PATH would still be missed; those two are where this machine's installers write.",
"periodic-system-maintenance.sh runs hourly and names install scripts in two subsystems that are about to move, so those extractions must reinstall it rather than only editing the repo copy."
],
"rollback": [
"git revert; the section is additive and nothing depends on its output yet.",
"Re-run report_live_state.sh to confirm the remaining sections still report."
]
}

View File

@ -63,6 +63,23 @@ report_etc() {
return "$found"
}
# Scripts INSTALLED outside the repo that name a path inside it. These are the
# easiest references to miss: the copy under /usr/local/bin is what actually
# runs, so grepping the repo for its own paths never finds them, and a stale
# one fails at whatever hour its timer next fires.
report_installed() {
echo "## installed scripts referencing the repo"
local found=0 path
while IFS= read -r path; do
[[ -n "$path" ]] || continue
found=1
printf ' %s\n' "$path"
grep -n "$REPO" "$path" 2>/dev/null | sed 's/^/ /'
done < <(grep -rl "$REPO" /usr/local/bin /usr/local/lib 2>/dev/null | sort)
((found)) || echo " (none)"
return "$found"
}
# Symlinks anywhere in $HOME resolving into the repo: i3blocks, ~/.local/bin,
# oh-my-zsh custom. Depth 4 covers every known location without walking the
# whole home directory.
@ -86,6 +103,8 @@ main() {
echo
report_etc || any=1
echo
report_installed || any=1
echo
report_symlinks || any=1
if ((CHECK_ONLY)); then