testsAndMisc/DOCS-restructure-handoff.md
Krzysztof kuhy Rudnicki f15f00f3fe Re-point paths for the ~ reorganisation (home-tidy)
Also bumps the 16 meta/requirements pins the freshness gate flagged
(anthropic 1.5.0, numpy 2.5.3, pytest-randomly 5, flake8-bugbear 26.9.9,
ruff 0.16.7, pyright 1.1.414, selenium 4.49.0, hypothesis 6.168.0, lxml
6.1.3, pipdeptree 4.2.5, the two types-* stubs) and Flutter 3.47.3 in
meta/.fvmrc. One test still expected the pre-move ~/mcp-servers path.

The pre-commit hook fed .zsh files to shfmt and shellcheck, neither of
which parses zsh (SC2148/SC1071), so no zsh file could be committed since
the hook was tightened on 2026-08-22; those now get `zsh -n` instead. The
hook's own shfmt pass also staged its reformat of 8 shell files.

CI_GREEN_SKIP because main is red on exactly the dependency-freshness
finding this commit fixes, which is the documented use of that flag.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwtowrowDXx6ccmWVPkCaF
2026-09-11 20:50:19 +02:00

114 lines
5.7 KiB
Markdown

# testsAndMisc restructure — DONE
**The campaign is finished. There is no next step in it.**
The directory-depth cap enforces, both remaining units are their own repos,
and every stale live reference is gone. What follows is the closing state and
the handful of things deliberately left undone.
Superseded: `NEXT_SESSION_PROMPT.md` and `NEXT_SESSION_RESTRUCTURE.md` (merged
here 2026-08-23). `INSTALLER_FIX_TASK.md` is a **different, still-open** job.
## Closing state (2026-08-23, all pushed, `main` clean)
```
depth violations 0 (was 46; the gate now runs WITHOUT --warn)
source files 949 / 1200 ceiling
tracked files 1090 (2295 at the campaign start)
stale live refs 0 (was 8, pre-existing from the flatten)
```
Verify any of it:
```bash
./meta/scripts/check_directory_depth.sh --all # exits 0
./meta/scripts/check_repo_size.sh
./meta/scripts/report_live_state.sh --check
```
## What landed this session
**`hosts-blocker`** — [github.com/kuhyx/hosts-blocker](https://github.com/kuhyx/hosts-blocker),
cloned at `~/src/hosts-blocker`. 52 commits.
**`digital-wellbeing`** — [github.com/kuhyx/digital-wellbeing](https://github.com/kuhyx/digital-wellbeing),
cloned at `~/src/digital-wellbeing`. 89 commits, and it carries the six suites that
used to sit in `linux_configuration/tests/`.
**The cap enforces.** `--warn` is gone from the `directory-depth-cap` hook, and
its name changed from "Report paths over" to "Enforce". Re-adding `--warn`
re-opens the hole; put the offending path somewhere legal instead.
**Live repairs.** Five mechanisms were silently pointing at deleted paths and
none of them said so:
- `hosts-file-monitor.service` (active) had logged **37** failures to restore
`/etc/hosts` — it detected tampering it could not repair.
- `dns-blocklist-refresh.service` (enabled, runs 00:01) and
`media-organizer.service` named pre-flatten `single_use/` paths.
- `setup_periodic_system.sh` read **all ten** of its templates from a
directory holding only untracked build residue since `system-maintenance`
was extracted.
- The pacman-wrapper drift manifest embeds **absolute** paths, so
`check_and_enable_services.sh` reported a permanent false "stale or
tampered". It now verifies.
Backups of every live artifact: `/var/tmp/*.pre-{extract,fix,dw}`.
**Deleted.** `.hippo/` (161 files, 0 retrievals ever) and 3.7 GB of untracked
extraction residue. Before deleting the latter, `focus_owner/android/key.properties`
was preserved to `~/.android/release/key.properties` (mode 600) — it holds the
**Android release signing password**, it is correctly gitignored, and those two
copies were the only ones on the machine.
## Deliberately NOT done
- **Nextcloud dedup** — measured and recommended against. 3,618 lines across
22 files; the `nc_*` and `rpi_nc_*` families are parallel _evolutions_, not
copies; only 3 of 15 libs have tests; the target is a Raspberry Pi that
cannot be reached from here. Do not attempt without hardware access.
- **The unwrapped `discord` / `signal-desktop` binaries.** `test_security_hardening.sh`
reports 18 passed / 1 failed / 5 skipped, and the failure is those two
missing `/usr/bin` wrappers. **Identical at baseline** — verified in a
detached worktree at HEAD. Live-system state, not a regression.
- **`workout_locker` reports error** in `check_and_enable_services.sh`. That is
the separate `screen-locker` repo.
- **`syncyomi-guard` is red** since 00:00 on 2026-08-23, working as designed:
the library collapsed from 2185 manga to 8. See the
`syncyomi-restore-silent-partial` memory; do NOT checkpoint the WAL before
recovering. Newest snapshot: `~/services/syncyomi/snapshots/`, 2026-08-15.
## Traps worth keeping
- **Filter history on every path a unit has EVER lived at.** `hosts` had 1
commit at its current path and 51 across four roots; `digital_wellbeing` had
2 and 63 across three. A single `--path` truncates history to the last move
and `git log | head` looks perfectly fine afterwards.
- **A unit's tests may not live beside it.** Six suites for `digital_wellbeing`
sat in `linux_configuration/tests/`, and five of them ran in CI's Arch
container. Moving code without them leaves tests exercising code that is
gone, and leaves their names in `shell-tests.yml`'s hardcoded arrays.
- **Run the caller; do not read it.** `shellcheck` and `grep` both passed
`check_and_enable_services.sh` while `DW_REPO` was used 30 lines above its
definition. `dns-blocklist-refresh.service` likewise only revealed
`/root/hosts-blocker` when actually started — under systemd there is no
`SUDO_USER` and `id -un` is `root`.
- **`$HOME` is the wrong question.** Use `SUDO_USER`'s passwd entry; fall back
to the owner of the file itself when running as bare root. That is what
`linux_configuration/lib/extracted_repos.sh` does.
- **A shrinking denominator can break a duplication gate.** Removing 80 files
pushed jscpd to 2.09% on clones this session never touched — inside the
_generated_ `.ci-mirror-venv/`, which jscpd scanned because it walks the
working tree, not the index.
- **A guarded check that skips is worse than one that fails.** Several of these
defects survived months because the code said `if [[ -f $x ]]` and quietly
did nothing when `$x` had moved.
- **`.pre-commit-config.yaml` is NOT a symlink**, unlike `pyproject.toml`,
`run.sh`, `requirements.txt`, `lint_python.sh` and `.fvmrc`. Do not "sync" it
with `meta/.pre-commit-config.yaml`; they are deliberately different.
- **Never raise the 2G pytest cap** on a "tests passed, then Killed" push —
that is the ci-mirror concurrency issue, already fixed by
`should_serialise_gates`.
- **A red `main` deadlocks its own fix.** `CI_GREEN_SKIP=1` must be set on the
**push**, not the commit, and only when the push really is the fix.