Development record
2026-09-23 — Three rulings from the product thinker's run A interview, 14:38Z to 14:41Z, on items F and G. F, abcd's name in an adopted repository's two name-guard hooks and its `.gitignore` fence (iss-2609231103413459): the 2026-09-11 ruling that the install does not write abcd by name into a target repository (iss-2609110944498549) covers them, but they are its sanctioned exception. The hooks run the binary and the fence tells people not to hand-edit it, so both keep their markers and naming as the one allowed mention of abcd in an adopted repository, with no rename and no migration; whether the record ids in the hook prose count as part of that mention is left to check, since the ruling named the markers, not the ids. G1, the em-dash-in-list-item house-style token in a prepared repository's docs lint: it is offered at install and the adopter chooses whether it blocks or warns, in the product thinker's words "It's offered at abcd install. the user chosen: Either blocking or warning"; not "off". An unattended (`--yes`) install seeds it as a warning (the 14:41Z follow-up). The run settled what the ruling left open: a bare Enter or end of input takes the displayed default, the warning; an answer naming neither choice, such as the `y` a piped `yes` sends, seeds the warning and the install result says what was heard rather than guessing a gate; the chosen severity is recorded as the token's severity in the seeded config itself; and the question is asked only when that config is being created, so a repository with its own config keeps its severity. G2, `docs lint` with nothing checked: warn, do not fail. The exit status stays 0, since an exit 2 would turn red the CI of every repository prepared before its config carried rules, and the run prints a loud warning that nothing was checked and why (no rule armed, or roots that hold no markdown document), on stderr and in the JSON envelope.
2026-09-23 — Three rulings from the product thinker's run A interview, 14:38Z to 14:41Z, on items F and G. F, abcd's name in an adopted repository's two name-guard hooks and its .gitignore fence (iss-2609231103413459): the 2026-09-11 ruling that the install does not write abcd by name into a target repository (iss-2609110944498549) covers them, but they are its sanctioned exception. The hooks run the binary and the fence tells people not to hand-edit it, so both keep their markers and naming as the one allowed mention of abcd in an adopted repository, with no rename and no migration; whether the record ids in the hook prose count as part of that mention is left to check, since the ruling named the markers, not the ids. G1, the em-dash-in-list-item house-style token in a prepared repository's docs lint: it is offered at install and the adopter chooses whether it blocks or warns, in the product thinker's words "It's offered at abcd install. the user chosen: Either blocking or warning"; not "off". An unattended (--yes) install seeds it as a warning (the 14:41Z follow-up). The run settled what the ruling left open: a bare Enter or end of input takes the displayed default, the warning; an answer naming neither choice, such as the y a piped yes sends, seeds the warning and the install result says what was heard rather than guessing a gate; the chosen severity is recorded as the token's severity in the seeded config itself; and the question is asked only when that config is being created, so a repository with its own config keeps its severity. G2, docs lint with nothing checked: warn, do not fail. The exit status stays 0, since an exit 2 would turn red the CI of every repository prepared before its config carried rules, and the run prints a loud warning that nothing was checked and why (no rule armed, or roots that hold no markdown document), on stderr and in the JSON envelope.
Frontmatter
| id | dcn-2609230000000020 |
|---|---|
| type | decision |
| date | 2026-09-23 |
.abcd/work/decisions/dcn-2609230000000020-three-rulings-from-the-product-thinker-s.md
open on GitHub ↗ · commit history ↗
mentions2
- iss-2609110944498549**Maintainer ruling, 2026-09-11: `ahoy install` must not write abcd by name into
- iss-2609231103413459A default ahoy install still commits abcd's name, and abcd-internal record references, outside the .abcd/ namespace the adopter accepts: the two name-guard hooks (.githooks/pre-commit and .githooks/pre-merge-commit: the '# abcd-name-guard: v1' marker, prose naming abcd, 'abcd ahoy' and 'abcd banlist', and the itd-74 / spc-20 ids) and the .gitignore fence ('# BEGIN ABCD', '# abcd-managed block — do not hand-edit. Run /abcd:ahoy to refresh.'). Reproduced 2026-09-23 on a fresh git repo with 'abcd ahoy install --yes --adopt --visibility private': grep -ril abcd over the tracked result names both hooks and .gitignore. The 2026-09-11 ruling (iss-2609110944498549) is that ahoy install must not write abcd by name into a repository it adopts, and prepare-this-repo's acceptance promises no abcd-internal content in any committed artefact. The fix for that record removed the conventions-file block from the default (docs target skip); these writes remain. Major: this is the unmet remainder of iss-2609110944498549 (major), whose acceptance 1 (no committed file contains abcd after a default install) this record now holds; it carries that severity rather than a lower one, so the remainder still meets the release-cut guard. The hooks are not the files a repository's contributors read first, and the hooks run the abcd binary, so part of the naming is functional, but that bears on the fix, not on whether the ruling is met. What a fix has to settle: the hook marker and the fence are what detection classifies by (classifyGuardHook, gitignoreBlockDrifts), so a rename is a migration over every already-adopted repo, and the hooks are security-sensitive; whether the name in a hook that invokes the tool is in scope of the ruling at all is the product thinker's call.