This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

An AI-written interview's role can slow the change guard, and change a submodule's refs unseen, through a tracked submodule's git directory: git status in the checkout runs status inside each populated submodule, which reads that submodule's git directory under the common directory's modules/ (its HEAD, config, packed-refs, info/exclude) whole, and the guard neither sizes those files before git runs nor hashes the submodule's HEAD and refs (readModules hashes its hooks and config only). A check's probe grew .git/modules/sub/packed-refs to 128 GiB sparse and held the reading past 20 s; a small write to the same file was unseen (changedSince empty).

issueresolvedminoriss-2610050504094430

An AI-written interview's role can slow the change guard, and change a submodule's refs unseen, through a tracked submodule's git directory: git status in the checkout runs status inside each populated submodule, which reads that submodule's git directory under the common directory's modules/ (its HEAD, config, packed-refs, info/exclude) whole, and the guard neither sizes those files before git runs nor hashes the submodule's HEAD and refs (readModules hashes its hooks and config only). A check's probe grew .git/modules/sub/packed-refs to 128 GiB sparse and held the reading past 20 s; a small write to the same file was unseen (changedSince empty).

Remainder after the 2026-10-07 review

The branch that sized and watched submodule git directories (fix/guard-commondir-bound) was reviewed adversarially before it merged (verdict SHIP-WITH-FIXES). Fixed on that branch: a write to a submodule's commondir is now named, and a pipe or device where git reads a file whole is refused before git runs. Two placements are still not pinned, so this record stays open for them:

  • A submodule's commondir is named only after git has run, not pinned before it: a write pointing it at a foreign directory is caught at that reading, but git reads the foreign directory's configuration and refs (unsized) during that same reading. Remedy: pin every modules/**/commondir beside the checkout's own pointers at the first reading, refusing a changed one before git runs (the redirectedError path).
  • A submodule's own .git pointer file (<path>/.git, gitdir: …) is never read: rewriting it moves the submodule's git directory anywhere, and the superproject's status does not list it. Remedy: enumerate gitlinks (mode 160000 in git ls-files -s, or .gitmodules) at the first reading and pin each <path>/.git as a pointer, refusing a changed one before git runs.

Frontmatter

idiss-2610050504094430
typeissue
lifecycleresolved
severityminor