Development record
A reservation footprint can hold a whole directory (docs, hooks, internal/surface/cli), and the overlap check then refuses every other reservation naming any file inside it. Generated files that every verb-adding branch regenerates, such as docs/reference/cli/commands.md, sit inside such directories, so two unrelated intents held by the same person from two copies could not both declare an honest footprint: on 2026-10-15 the messaging reservation's renewal was refused twice and had to leave out .githooks/pre-push, the ruleset mirror and the generated CLI reference, which it does change.
A reservation footprint can hold a whole directory (docs, hooks, internal/surface/cli), and the overlap check then refuses every other reservation naming any file inside it. Generated files that every verb-adding branch regenerates, such as docs/reference/cli/commands.md, sit inside such directories, so two unrelated intents held by the same person from two copies could not both declare an honest footprint: on 2026-10-15 the messaging reservation's renewal was refused twice and had to leave out .githooks/pre-push, the ruleset mirror and the generated CLI reference, which it does change.
Measured 2026-10-16 for the multi-account drain: 14 eligible issues name a directory as found_at; while one account holds internal/core/implement/loop, every other account is blocked from all 32 eligible issues under it, and in the lab the reverse held too (a directory issue could not be reserved while a file inside it was held).
Frontmatter
| id | iss-2610152125101468 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610152125101468-a-reservation-footprint-can-hold-a-whole.md
open on GitHub ↗ · commit history ↗
References1
- itd-2610161016394967Drains on several accounts share the workrelated
mentions15
- dcn-26101610403851522026-10-16 — Generated files never block a reservation (facilitator-on-delegation, drain-many-accounts): generated files are declared with the forge's own linguist-generated attribute in .gitattributes, read from origin's default branch, and never count as an overlap; a person's own abcd reserve that overlaps another of their copies warns instead of refusing, while reservations a drain makes keep the back-off between one person's copies; and a lane's reservation narrows to the files its branch changed at its first renewal after the implement stage, since narrowing never widens a hold (grounds: the forge's linguist convention, and lock de-escalation; iss-2610152125101468).
- dcn-26101706524644732026-10-17 — Generated files are read from one shared declaration (facilitator-on-delegation, drain-many-accounts step 11, refines dcn-2610161040385152): the files origin's default branch, as last fetched, marks linguist-generated in its root .gitattributes, read as stored from disk with a 256 KiB cap and never fetched; nested .gitattributes files, .git/info/attributes and the working tree are not read, because the declaration must be one every account shares (iss-2610152125101468).
- dcn-26101706524755172026-10-17 — Reading generated files fails strict (facilitator-on-delegation, drain-many-accounts step 11): every misreading leans towards not generated, so an overlap is still refused; an absent file or no default branch declares nothing, a file that cannot be read, is not a regular file or is over the cap declares nothing and the act says why, and a line the reader does not understand (a macro, a C-quoted pattern, a negated pattern) is skipped (iss-2610152125101468).
- dcn-26101706524767432026-10-17 — Generated-file patterns follow git's gitattributes rules for the subset abcd reads (facilitator-on-delegation, drain-many-accounts step 11): a pattern with no slash matches the basename at any depth, one with a slash is anchored to the root with a leading slash stripped, star, question mark, classes and double star are supported, a trailing-slash pattern matches nothing, later lines win, and only linguist-generated set or =true means generated (iss-2610152125101468).
- dcn-26101706524813262026-10-17 — A shared path that is a generated file is no overlap, and a directory never is (facilitator-on-delegation, drain-many-accounts step 11): two footprint paths overlap as sharedPath says unless the deeper of the two is a generated file; the rule holds in both the reservation act and the drain's pass-over, through one matcher loaded once per view (iss-2610152125101468).
- dcn-26101706524887702026-10-17 — A person's own reservation that overlaps their other copy warns and is made (facilitator-on-delegation, drain-many-accounts step 11, refines dcn-2610161040385152): a reservation that is not a drain's goes ahead over a live reservation with the same holder from another copy and names the shared path, the other record and its expiry; a drain's reservation and the drain's pass-over still back off, another person's overlap still backs off, and the cap is unchanged (iss-2610152125101468).
- dcn-26101706524911352026-10-17 — abcd declares two of its own files generated (facilitator-on-delegation, drain-many-accounts step 11, builder): docs/reference/cli/commands.md and .abcd/development/release/surface.json, which go generate writes whole; the brief's surface chapters are not named, since each mixes hand-written prose with a generated appendix and the surfaces register is hand-written (iss-2610152125101468).
- dcn-26101706524977342026-10-17 — The generated-file reader's own choices (facilitator-on-delegation, drain-many-accounts step 11, builder): a file counts as generated only when origin's default branch holds it as a blob, which is how a directory is never generated; .gitattributes is located with ls-tree -l, so absence, its type and its size are read before its blob; matching is case-sensitive whatever core.ignorecase says; a line git ignores (a negated pattern, an invalid or reserved attribute name) is ignored, and a line git reads but abcd does not understand voids every line before it when it could unset the attribute; a macro naming linguist-generated decides not generated; the reader stays inside the claim package, and the drain's conflict check reaches it through the reservation view, which carries the set as Generated with its Is method (grounds: git 2.52 check-attr agrees on every supported row of the differential test; iss-2610152125101468).
- dcn-26101707282530952026-10-17 — Only the reserve verb warns over one's own other copy (facilitator-on-delegation, drain-many-accounts step 11, refines the step's own-overlap decision): the warning is a positive opt-in on the request, WarnOwnOverlap, which only abcd reserve sets; a build's, a drain's and the land fence's reservations are automated and keep the back-off over the same person's other copy, so two automated lanes never edit the same files (iss-2610152125101468).
- dcn-26101707340713612026-10-17 — A lane's reservation narrows by a renewal that carries the narrower footprint, never by a fresh reservation (facilitator-on-delegation, drain-many-accounts step 12): claim.Request gains Narrow, honoured only with Renew and only when the fetched tip's footprint covers every path of it, so the compare-and-swap that refuses a released, lapsed-and-taken or another copy's tip refuses a narrowing too, and a hold never widens; the narrowed set is the files the lane's own non-merge commits changed from its base to its head that lie within the tip's footprint, taken at the first due renewal once an issue lane is past its implement stage; a narrowing too long for the message cap is not made and the renewal still is; an intent's run never narrows, since its one reservation covers lanes not yet opened; a later fix that changes a file outside the narrowed footprint is not re-reserved by a renewal (grounds: lock de-escalation, which only ever weakens a held lock; a plain reserve over one's own tip would re-reserve a record a person released; iss-2610152125101468)
- dcn-26101707491207342026-10-17 — A file under a nested .gitattributes is never generated (facilitator-on-delegation, drain-many-accounts step 11, refines dcn-2610170652464473): generated files are declared in the root .gitattributes of origin's default branch alone, and since a nested .gitattributes could unset the attribute below it, every file at or below a directory holding one is left out of the generated set, found from the same file listing with no extra git read (iss-2610152125101468).
- dcn-26101708312908232026-10-17 — Unsetting lines match regardless of case and setting lines only where every clone would (facilitator-on-delegation, drain-many-accounts step 11, refines dcn-2610170652476743): a line that unsets linguist-generated matches wherever git's would on a clone that ignores case or on one that does not, and a line that sets it matches only where git's would on both, so abcd never calls a file generated that git on some clone calls unset; the only cost is less sharing. Within a class, git ignoring case lowers the text byte but not the class's own bytes, so the two readings are judged separately (grounds: git check-attr under core.ignorecase true and false agreed on 303,104 comparisons; iss-2610152125101468).
- dcn-26101709005751762026-10-17 — abcd shares only on a plain declaration (facilitator-on-delegation, drain-many-accounts step 11, refines dcn-2610170652475517 and dcn-2610170831290823): generatedFiles declares nothing, and names the rule, when the root .gitattributes holds a byte outside ASCII, quotes a pattern or names a macro (a bare [attr] included), or when the tree holds a .gitattributes named or placed outside ASCII or a second root one in other capitals; a file whose path is not ASCII is never generated; within those bounds the ASCII case rules stand, and every line visited costs budget steps (iss-2610152125101468).
- itd-2609091034175565Before an agent starts on an item, it reserves it on the shared remote, and everyone who works on the project sees the reservation
- spc-2610161044461448drain-many-accounts