Skip to content

40 referenced-but-absent files across 19 repos — triaged (estate sweep) #653

Description

@hyperpolymath

An estate-wide sweep of 454 unique repos / 5,111 tracked shell scripts looked for literal file paths that scripts try to read (rg/grep/cat/source/[ -f ] operands) but which do not exist.

After discarding runtime-created files and vendored trees, 40 references across 19 repos remained. Triaged below — not all are defects, and the classes want different responses.

1. False positives — no action (5)

standards: a.md, b.md, x.md, target.md, check.sh — all inside scripts/spdx-inject-copyright-test.sh, which creates them as fixtures (cat > target.md <<EOF). Correctly absent from the repo.

2. Wrong path, not a missing licence (4)

repo script looks for repo actually has
anamnesis LICENSE.txt LICENSE + LICENSES/{AGPL-3.0-or-later,CC-BY-SA-4.0,MPL-2.0}.txt
my-lang LICENSE.txt LICENSE + LICENSES/{CC-BY-SA-4.0,MPL-2.0}.txt
social-media-polygraph LICENSE-PALIMPSEST.txt LICENSE + LICENSES/*
social-media-tools LICENSE-PALIMPSEST.txt LICENSE + LICENSES/PMPL-1.0-or-later.txt

The licences are present and correct; the checks name files that were never the convention. Repoint the checks at LICENSE / LICENSES/. These checks are failing today on compliant repos.

3. Genuine documentation gaps — the largest group (14)

An identical seven-file set is referenced but never authored, in two repos:

docs/API_REFERENCE.md   docs/ARCHITECTURE.md   docs/EXAMPLES.md   docs/FAQ.md
docs/MIGRATION.md       docs/QUICKSTART.md     docs/TROUBLESHOOTING.md
  • asdf-tool-plugins — that set, plus RSR.md
  • developer-ecosystem — that set, plus RSR.md, READINESS.md, TPCF.md

The identical shape in both suggests a scaffold that declared a documentation contract nobody then filled. Decision needed: author the docs, or drop the checks. Leaving them asserts a contract the repos do not meet.

4. Checks for banned tooling — stale by policy (3)

repo looks for note
preference-injector deno.json Deno is REMOVED estate-wide; Bun is the runtime
quandledb frontend/deno.json same
.git-private-farm rescript.json ReScript is purged estate-wide

These can never pass and should not — the tooling was deliberately removed. Delete the checks.

5. Possible undeclared dependencies (2)

candy-crash and universal-project-manager reference a package.json that does not exist. Worth checking against ubicity, where the same absence meant the project could not build under any toolchain — its sources imported zod and glob with no manifest declaring them (fixed in hyperpolymath/ubicity#107).

6. Same missing script in two repos (2)

bag-of-actions and continuation-mesh both reference guix-install.sh, absent from both. Likely a shared scaffold step that was never vendored in.

7. Singles (10)

repo missing
academic-workflow-suite run-tests.sh
excel-economic-numbers-tool TPCF.md
lithoglyph SUMMARY.md
protocol-squisher docs/BENCHMARK-QUICKSTART.md
rsr-template-repo-experiment scripts/check-no-vlang.sh
standards scripts/apply-common-files.sh

Why this matters

A grep/rg on a missing file exits non-zero, so if ! rg … X; then fail; fi is permanently true — the check fails regardless of the repo's actual state. Where the reference sits inside if [ -f X ], the opposite happens: the guarded block is silently skipped and the gate reports success by not checking.

This sweep is the sibling of the .md.adoc migration finding: 56 further checks across 18 repos were pointed at files the migration had renamed. Those are fixed (17 PRs). The 40 above are what remained after that class was removed.

Method note

The probe took four iterations before it was trustworthy: v1 examined 1 repo of 454 (a cd in a shared shell); v2 flagged 417 of 454 (it matched cross-repo uses: references); v3 flagged 57 but resolved paths only from the repo root, giving false positives on monorepo-relative and script-relative paths. v4 resolves from repo root, the script's own directory, or basename anywhere, and self-tests against a planted ghost file, a real file, a sibling-directory file and a cross-repo reference.

v3's 57 was the dangerous one — it sat squarely in the range a real defect rate would occupy, so nothing about the number itself would have caught it. Only opening three entries did.

Metadata

Metadata

Assignees

No one assigned

    Labels

    scope:estateAffects many or all repos across the estatetech-debtKnown shortcut, drift, or hygiene owed - includes cleanup

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions