Development record
The six bundled OPINIONS rules each end with a pointer to a file under .abcd/development/principles/ that exists only in the abcd repo itself — a managed repo inherits the injected lines verbatim, so every prompt whose recall matches the domain hands its agent six dangling references (the principles corpus is not part of adoption). Either the bundled lines need self-contained phrasings with the pointer marked as abcd-repo-only, or adoption (prepare-this-repo / ahoy) should ship a distilled principles set the pointers can resolve against. Found while adding the memory-graduation rule, whose line was written self-contained for exactly this reason
The six bundled OPINIONS rules each end with a pointer to a file under .abcd/development/principles/ that exists only in the abcd repo itself — a managed repo inherits the injected lines verbatim, so every prompt whose recall matches the domain hands its agent six dangling references (the principles corpus is not part of adoption). Either the bundled lines need self-contained phrasings with the pointer marked as abcd-repo-only, or adoption (prepare-this-repo / ahoy) should ship a distilled principles set the pointers can resolve against. Found while adding the memory-graduation rule, whose line was written self-contained for exactly this reason
Corroboration (2026-09-17, Gropius managed-repo session gropiusllm-56, relayed
to abcd-17). The dangling pointers were met in practice: the bundled OPINIONS
domain injected its six .abcd/development/principles/<name>.md pointers on a
matching prompt, a reviewer in that session was asked to check the principles
the rules cite, and found no such directory in the managed repo. The session
proposed the three remedies this record already weighs plus one more: go dormant
when the directory is absent, lay the principles down at prepare time, or
resolve the pointers to the plugin's bundled copies. Second independent hit;
the first was the filing.
Third hit (2026-09-19, Gropius session gropiusllm-66, relayed to abcd-17).
The managed repository answered the dangling pointers itself: it wrote its own
.abcd/development/principles/ directory (its PR 88) and a test holding the
six pointers resolvable (its PR 97). The binary still ships pointers a fresh
repository cannot follow, so every other adopter starts where this one did.
Remedy grounds (2026-09-29)
- The four options are the ones the record and its two corroborations weigh; a managed repository took the first on its own, which is evidence for demand, not a ruling.
- Rejected: editing the bundled lines here, which changes the shipped itd-3 design the deferral names.
Evidence 2026-10-04 (a downstream lab)
A downstream private project's brief-authoring lab met the dangling pointers again: the injected OPINIONS rules cite .abcd/development/principles/*.md, which no install creates. Reproduced at tip 57d5ec9fa: after ahoy install --adopt in a scratch repository, abcd rules OPINIONS prints ten references to .abcd/development/principles/, and the folder does not exist. Fourth independent hit; the ruling the deferral names is still owed.
Frontmatter
| id | iss-2608210934566220 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2608210934566220-bundled-opinions-pointers-dangle-in.md
open on GitHub ↗ · commit history ↗
mentions4
- iss-2610010618373016The conventions-file block ahoy writes into a managed repository's AGENTS.md / CLAUDE.md (template internal/core/ahoy/defaults/claude-md-marker-block.md) names two paths that exist only in abcd's own source tree: .abcd/development/principles/ (the OPINIONS paragraph, 'the canonical conventions under .abcd/development/principles/') and .abcd/development/brief/05-internals/03-configuration.md (the closing 'For internals see …' line). Both sit inside the abcd-managed fence, so the adopter cannot hand-fix them: ahoy rewrites the block on drift. Met in practice in a managed repository whose CI pins v0.11.1, relayed by a peer session; that repository holds its own record deferred until abcd ships the fix. The principles half shares its ruling with iss-2608210934566220 (the injected OPINIONS rules' dangling pointers); the 03-configuration.md pointer is independent of that ruling and fixable on its own. Expected: the managed block names only paths that exist in the managed repository, or names them as abcd-repository locations.
- iss-2610020700529281The managed block ahoy install plants into an adopted repository's conventions file when a docs target is chosen (internal/core/ahoy/defaults/claude-md-marker-block.md) is abcd's own rule-loader section copied verbatim, and it breaks the repositories that receive it. (a) It ends 'For internals see .abcd/development/brief/05-internals/03-configuration.md' and says OPINIONS points at .abcd/development/principles/; both exist only in abcd's own repository, so they dangle in every adopted one. (b) At tip it is 98 lines with em dashes on 10 of them, so a repository whose own AGENTS.md rules bound file length, ban em dashes or require every link to resolve fails its own gate on the block. (c) Its header says /abcd:ahoy 'silently overwrites this block on drift (per itd-3)', citing an abcd-internal record id, so the adopter cannot trim it to fit. (d) It is inserted directly under the H1, ahead of the repository's own opening text. This record is intent-shaped: the ask is a capability, a short pointer variant of the block for adopted repositories (a few ASCII lines, no repository-internal links or record ids) or keeping the long text where consumer repositories never commit it; routing it to an intent is the product thinker's call. Related: iss-2609110944498549 (resolved, the default docs target is skip) and iss-2608210934566220 (the injected OPINIONS pointers dangle in managed repositories).
- iss-2610241549433260Five open records carry remedies that name verbs or pages itd-2610090831227812 retired with no alias on 2026-10-09: iss-25 and iss-52 name abcd source add (iss-52 also source ledger), and iss-92, iss-2608210934566220 and iss-2610040350491915 name prepare-this-repo, so a lane applying any of them targets a command that no longer exists; nothing checks a remedy against the retired names.
- itd-3abcd Loads Its Own Rules On Demand