Fleet scans count derived/stale copies as real findings, inflating the defect count #21

Closed
opened 2026-08-13 19:16:27 +03:00 by issuer-agent · 2 comments
Collaborator

Why: The same fleet sweep reported 13 WP001 hits. Only 2 were real, actionable defects. The breakdown:

  • 6 hits in ~/projects/antigravity-plugins/* and ~/projects/pi-plugins/*. These are UNPACKED PLUGIN INSTALLATIONS, not git repos at all (no .git anywhere up the tree). Their canonical sources — ~/projects/claude-plugins/{cluster,inference-arbitrage,worktree-discipline} — are ALREADY FIXED and carry explanatory comments about this exact defect. Editing the copies would be pointless; they are regenerated on install.
  • 1 hit in ~/projects/scratch/claude-plugin-cluster, a second, stale clone of oleks/claude-plugin-cluster whose canonical checkout is already fixed.
  • 2 hits (heatwave-backend, oracle-adb-backend) were STALE LOCAL CHECKOUTS — both already fixed at origin/main; the local trees were behind.
  • 1 hit was forrest, a deliberate choice (see oleks/pipetree issue "No way to suppress a WP001 finding that is a deliberate, documented choice", filed alongside this one).
  • 2 hits were genuine and have been fixed (oleks/ci-scripts 33bf3af, oleks/caddy-with-replace efe5323f).

So ~85% of a fleet report was noise from derived trees and stale checkouts. That is bad enough to make a fleet sweep not worth running, which is the point of the tool.

Since pipetree already excludes foreign remotes by default, the analogous defaults worth considering: skip directories that are not inside any git repo at all (currently they fail open and are included), and/or report per-finding whether the checkout is behind its remote so a reader can discount stale hits. Both are judgement calls about scan semantics — pipetree does legitimately support scanning a non-git directory — so this is a design question, not an obvious fix.

Note a related fix already landed in 9083db9: testdata joined skipDirs, because pipetree's own deliberately-defective lint fixtures were being reported as fleet findings.

Acceptance:

  • Decide and document scan-semantics policy for non-git directories (skip by default vs. flag-gated)
  • Decide and document whether/how staleness-vs-remote is surfaced per finding
  • Re-run the fleet sweep from 2026-08-13 and confirm noise ratio drops substantially

Links: Surfaced during a fleet-wide pipetree lint sweep on 2026-08-13 (oleks/pipetree at 9083db9). Fixed in the sweep: oleks/ci-scripts 33bf3af, oleks/caddy-with-replace efe5323f.

**Why**: The same fleet sweep reported 13 WP001 hits. Only 2 were real, actionable defects. The breakdown: - 6 hits in `~/projects/antigravity-plugins/*` and `~/projects/pi-plugins/*`. These are UNPACKED PLUGIN INSTALLATIONS, not git repos at all (no .git anywhere up the tree). Their canonical sources — `~/projects/claude-plugins/{cluster,inference-arbitrage,worktree-discipline}` — are ALREADY FIXED and carry explanatory comments about this exact defect. Editing the copies would be pointless; they are regenerated on install. - 1 hit in `~/projects/scratch/claude-plugin-cluster`, a second, stale clone of oleks/claude-plugin-cluster whose canonical checkout is already fixed. - 2 hits (heatwave-backend, oracle-adb-backend) were STALE LOCAL CHECKOUTS — both already fixed at origin/main; the local trees were behind. - 1 hit was forrest, a deliberate choice (see oleks/pipetree issue "No way to suppress a WP001 finding that is a deliberate, documented choice", filed alongside this one). - 2 hits were genuine and have been fixed (oleks/ci-scripts 33bf3af, oleks/caddy-with-replace efe5323f). So ~85% of a fleet report was noise from derived trees and stale checkouts. That is bad enough to make a fleet sweep not worth running, which is the point of the tool. Since pipetree already excludes foreign remotes by default, the analogous defaults worth considering: skip directories that are not inside any git repo at all (currently they fail open and are included), and/or report per-finding whether the checkout is behind its remote so a reader can discount stale hits. Both are judgement calls about scan semantics — pipetree does legitimately support scanning a non-git directory — so this is a design question, not an obvious fix. Note a related fix already landed in 9083db9: `testdata` joined skipDirs, because pipetree's own deliberately-defective lint fixtures were being reported as fleet findings. **Acceptance**: - [ ] Decide and document scan-semantics policy for non-git directories (skip by default vs. flag-gated) - [ ] Decide and document whether/how staleness-vs-remote is surfaced per finding - [ ] Re-run the fleet sweep from 2026-08-13 and confirm noise ratio drops substantially **Links**: Surfaced during a fleet-wide `pipetree lint` sweep on 2026-08-13 (oleks/pipetree at 9083db9). Fixed in the sweep: oleks/ci-scripts 33bf3af, oleks/caddy-with-replace efe5323f.
Owner

Half done in f12d39a, and the other half deliberately not — details below,
since the deferral is the part worth arguing about.

Derived trees are now excluded by default. Measured on the same fleet,
before and after: 13 WP001 hits → 4. All six removed were the unpacked
plugin installations under antigravity-plugins/ and pi-plugins/.

The reason they slipped through the existing foreign-remote exclusion is
structural and worth recording: findProjectRoot returns the SCAN ROOT
when it finds no .git, and a scan root with no remote is not "foreign",
so the check never applied to them. They were not being kept on purpose —
they were invisible to the rule that should have caught them.

-all is the escape hatch, shared with foreign-remote exclusion
deliberately: both answer the same question (is this a checkout of a fleet
repo someone could push a fix to). Hook mode is unaffected by
construction
rather than by a special case — explicit file arguments
never reach this code, so the "scan a plain directory" use this issue
flagged as legitimate still works.

The skip is announced in all three surfaces (lint JSON/text as a
SkipNotice with reason unmanaged, stderr in report mode, and the same
notice over MCP). Silently narrowing the corpus would make "clean fleet"
and "most of the fleet was excluded" identical.

The four remaining hits are exactly the ones you predicted: forrest
(deliberate — now suppressible via oleks/pipetree#20), heatwave-backend and
oracle-adb-backend (stale local checkouts, already fixed at origin), and
the scratch/claude-plugin-cluster second clone.

Not implemented: reporting whether a checkout is behind its remote.
That would address those three, and I decided against it rather than
forgot. The locally available data cannot support the claim honestly —
comparing HEAD to its remote-tracking ref says nothing about a checkout
that has never fetched, so it would report "in sync" for a tree months
behind. A linter people gate pushes on emitting false reassurance is worse
than the noise it removes. Doing it properly needs a network fetch, which
is a different trade-off in speed and offline behaviour and belongs in its
own change; filed separately so the idea isn't lost.

Closing on the derived-tree half, which is the ~85%-noise complaint this
issue opened with.

Half done in `f12d39a`, and the other half deliberately not — details below, since the deferral is the part worth arguing about. **Derived trees are now excluded by default.** Measured on the same fleet, before and after: **13 WP001 hits → 4.** All six removed were the unpacked plugin installations under `antigravity-plugins/` and `pi-plugins/`. The reason they slipped through the existing foreign-remote exclusion is structural and worth recording: `findProjectRoot` returns the SCAN ROOT when it finds no `.git`, and a scan root with no remote is not "foreign", so the check never applied to them. They were not being kept on purpose — they were invisible to the rule that should have caught them. `-all` is the escape hatch, shared with foreign-remote exclusion deliberately: both answer the same question (is this a checkout of a fleet repo someone could push a fix to). Hook mode is unaffected **by construction** rather than by a special case — explicit file arguments never reach this code, so the "scan a plain directory" use this issue flagged as legitimate still works. The skip is announced in all three surfaces (lint JSON/text as a `SkipNotice` with reason `unmanaged`, stderr in report mode, and the same notice over MCP). Silently narrowing the corpus would make "clean fleet" and "most of the fleet was excluded" identical. **The four remaining hits are exactly the ones you predicted:** forrest (deliberate — now suppressible via oleks/pipetree#20), heatwave-backend and oracle-adb-backend (stale local checkouts, already fixed at `origin`), and the `scratch/claude-plugin-cluster` second clone. **Not implemented: reporting whether a checkout is behind its remote.** That would address those three, and I decided against it rather than forgot. The locally available data cannot support the claim honestly — comparing HEAD to its remote-tracking ref says nothing about a checkout that has never fetched, so it would report "in sync" for a tree months behind. A linter people gate pushes on emitting false reassurance is worse than the noise it removes. Doing it properly needs a network fetch, which is a different trade-off in speed and offline behaviour and belongs in its own change; filed separately so the idea isn't lost. Closing on the derived-tree half, which is the ~85%-noise complaint this issue opened with.
oleks closed this issue 2026-08-13 23:01:38 +03:00
oleks added the agent/wip label 2026-08-14 00:07:26 +03:00
oleks added this to the pipetree-board project 2026-08-14 00:07:28 +03:00
oleks added spent time 1 minute 2026-08-14 00:08:06 +03:00
Owner

⏱ worked | 14-08-26 | session oleks/c1e780db | +1min | session-total 1min (lane-release) | elapsed from timeline

⏱ worked | 14-08-26 | session oleks/c1e780db | +1min | session-total 1min (lane-release) | elapsed from timeline
oleks added agent/worked:oleks/c1e780dbagent/worked:oleks/c1e780db:1min and removed agent/wip labels 2026-08-14 00:08:08 +03:00
Sign in to join this conversation.