Development record
An AI-written interview's role can slow the change guard by writing core.hooksPath into .git/config, naming a large directory outside the tree: the reading after the turn hashes every file there (toward the 500,000-path bound, with no byte bound) before it reports the configuration change. A probe with a 16 GiB sparse file held the reading about 7 seconds, growing with the size. The guard still fails closed (the change to .git/config and the planted directory are named), but a turn can take minutes first. The followed-link budget (iss-2610040847166532) does not cover it, because the hooks directory is resolved and read whole, not reached through a followed link.
An AI-written interview's role can slow the change guard by writing core.hooksPath into .git/config, naming a large directory outside the tree: the reading after the turn hashes every file there (toward the 500,000-path bound, with no byte bound) before it reports the configuration change. A probe with a 16 GiB sparse file held the reading about 7 seconds, growing with the size. The guard still fails closed (the change to .git/config and the planted directory are named), but a turn can take minutes first. The followed-link budget (iss-2610040847166532) does not cover it, because the hooks directory is resolved and read whole, not reached through a followed link.
Grounds
- pursued: a role pointing core.hooksPath at a tree holding a 128 GiB sparse file, or at one past 1,024 entries, is refused in well under a second naming the value (TestAReadingOutsideTheTreeIsBounded, RED on the base: three cases timed out at 20 s and the rest read the tree without refusing), while 25 worktrees each keeping 50 receipts are read whole; a refusal of a real checkout's hooks directory or receipts, or a reading that still walks a large hooks tree, would show it wrong
Frontmatter
| id | iss-2610050315146044 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610050315146044-an-ai-written-interview-s-role-can-slow.md
open on GitHub ↗ · commit history ↗
mentions3
- iss-2610040847166532An AI-written interview's role can slow the change guard by planting a link to a huge directory tree where the guard follows links (for example its turn directory's preflight-receipts made a symlink and registered as a worktree): followLink content-hashes up to maxWatched (500,000) files before refusing. The guard still fails closed (the interview stops and nothing is accepted), but a turn can take minutes first.
- iss-2610050348402910An AI-written interview's role can redirect where the change guard reads git's own directory, and slow the reading after its turn: a commondir file written into a main checkout's .git (or a linked worktree's commondir or .git file rewritten) makes git resolve the common directory elsewhere, and the next reading then hashes that directory's hooks, info, configuration, refs, modules and worktrees whole, with no budget, before the change is reported. A probe on a scratch repository: .git/commondir naming a directory holding only objects/ and refs/ made git rev-parse --git-common-dir name it, and git status still ran. The guard fails closed (every key of the person's own git directory disappears from the reading, so the turn is stopped), but a refs file there of many GiB holds the turn for minutes first. The followed-link and hooks-directory budget (iss-2610050315146044) does not cover it: git's own directory is read as owned, and its legitimate size (loose refs) is not one the 1,024-entry budget can hold.
- iss-2610050348533437An AI-written interview's role can slow the change guard by writing one large file into the working tree: the reading after its turn hashes every path git status lists whole (hashOne, then contentState's io.Copy), with no byte bound, so an untracked sparse file of many GiB holds the turn for as long as hashing it takes (about 7 s for 16 GiB in the hooks-directory probe, growing with the size) before the new path is reported. The guard fails closed (the path is named), and the budget on what one reading reads outside the tree (iss-2610050315146044) does not cover it, because the path is inside the tree, where a large untracked file can be the person's own.