diff --git a/docs/archive/changelogs/changelog-20260727-skill-repackage.md b/docs/archive/changelogs/changelog-20260727-skill-repackage.md index 1043e84..8a0dfb7 100644 --- a/docs/archive/changelogs/changelog-20260727-skill-repackage.md +++ b/docs/archive/changelogs/changelog-20260727-skill-repackage.md @@ -196,3 +196,62 @@ it will recur for anyone documenting the force-push ban in a commit or changelog. Not done here: editing the authoritative skill is a stage-close activity and this session closed no stage. + +## Item 6 -- CORRECTION: this session's repo-lint runs were VACUOUS (0 files scanned) + +Every `bash scripts/repo-lint.sh` PASS reported earlier in this changelog and in +the commit messages of `9ffc904`, `fb8b328` and `029d6ed` was measured from +inside a git worktree at +`.claude/worktrees/skill-repackage-20260727/`, and **scanned zero files**. + +Root cause, measured in `scripts/repo_lint.py`'s walk filter (line ~224): + + or (".claude" in p.parts and "worktrees" in p.parts): + continue + +The exclusion is correct in intent -- DOCFIX-111 added it so a session-local +agent worktree nested under a normal checkout is not linted as repo content. But +it tests the parts of the ABSOLUTE path. When the lint ROOT *is itself* the +worktree, every descendant path carries `.claude` and `worktrees` in its parts, +so the filter matches EVERY file and the walk yields nothing. The linter then +reports `PASS: repo lint (0 fail, 0 warn)` over an empty set. + +This is the repo's own "a checker that cannot fail is not a gate" failure mode, +in its purest form: not a checker that missed a defect, but a checker whose +verdict was computed over nothing while printing the word PASS. It was found only +because the concurrent Stage-5 session's `R15(1)` work added an **L0 +files-scanned floor** that REFUSES a verdict below 100 files -- running that +newer linter against this worktree failed immediately and correctly. + +RE-MEASURED PROPERLY. The branch was exported outside any worktree path +(`git archive origin/skill-repackage-20260727 | tar -x -C `, 728 files) and +linted there: + +- with `main`'s linter (the one used above): **0 fail, 1 warn** +- with the Stage-5 branch's stricter linter: **0 fail, 1 warn, 593 files scanned** + +The single WARN is the known legacy carve-out (`docs/design-decisions.md`, 239 +non-ASCII bytes in the D-001..018 region) -- the same warn the shared checkout +showed at session open, not something this branch introduced. + +**So the verdict stands but the evidence did not.** The correct figure for this +branch is `0 fail, 1 warn`, not the `0 fail, 0 warn` claimed earlier; the earlier +zero-warn reading was an artifact of scanning nothing. No FAIL was ever masked -- +verified twice above, including against the stricter linter. + +SCOPE, measured not assumed: the GAUNTLET is UNAFFECTED. `tests/repo-lint/run-tests.sh` +builds its fixture repos under `mktemp -d` (`/tmp/...`), which carries neither +path component, so its assertions that each lint class FIRES genuinely fired. +`GAUNTLET: ALL GREEN (81 harnesses)` stands as reported. + +CONSEQUENCE BEYOND THIS SESSION (logged, not executed): background jobs on this +host are instructed to isolate into `.claude/worktrees/` before editing, so +**every such session's repo-lint gate is currently vacuous on `main`** -- it will +print PASS no matter what is wrong. The Stage-5 branch's L0 floor fixes the +silent-pass half of this the moment it merges, converting it into a loud FAIL. +The remaining half is that a worktree session then has no working lint at all; +the fix would be to make the filter relative to the lint ROOT rather than testing +absolute path parts. That belongs to whoever owns `R15(1)`, not to this branch -- +raised in the handoff rather than patched here. + +- **Revert:** documentation-only; nothing to revert.