Development record
A custom domain with `"recall": ["the"]` in `.abcd/rules.json` fires on ordinary English prose (reproduced at v0.7.0: it injected on "update the roadmap"), so a repository can make any domain — and any override text — inject on nearly every prompt. Recall matching (`termHit`, internal/core/rules/rules.go) is word-bounded and stemmed but has no notion of a keyword too common to be a signal. Whether to refuse or warn on stop-word recall terms, and against which list, is a policy question rather than a mechanical fix; captured so the decision has a marker. Sibling of GHSA-22f8-qf5r-gjgq: the provenance marker that fix adds makes such a domain visible as a repo override but does not stop it firing.
A custom domain with "recall": ["the"] in .abcd/rules.json fires on ordinary English prose (reproduced at v0.7.0: it injected on "update the roadmap"), so a repository can make any domain — and any override text — inject on nearly every prompt. Recall matching (termHit, internal/core/rules/rules.go) is word-bounded and stemmed but has no notion of a keyword too common to be a signal. Whether to refuse or warn on stop-word recall terms, and against which list, is a policy question rather than a mechanical fix; captured so the decision has a marker. Sibling of GHSA-22f8-qf5r-gjgq: the provenance marker that fix adds makes such a domain visible as a repo override but does not stop it firing.
Remedy grounds (2026-09-29)
- The Snowball project publishes an English stop-word list built for the same stemming family recall matching uses (https://snowballstem.org/algorithms/english/stop.txt, checked 2026-09-30).
- The loader already reports a skipped domain on stderr, so either answer reuses that seam. Rejected: frequency-based detection over a corpus, which adds a data file with no gain over a fixed list for a single-token check.
Frontmatter
| id | iss-2609012039220931 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2609012039220931-a-custom-domain-with-recall-the-in-abcd.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2609200618138053Bundle a WRITING rule domain so the review-only writing-style rules reach agents in every managed repo. docs/reference/writing-style.md holds the canonical rules, but none of the eight bundled domains (COMMITTING, DOCUMENTATION, ROADMAP, ISSUES, INTENTS, LIFEBOAT, PII, OPINIONS) carries them, so an agent in a managed repo never sees them unless the repo declares a custom domain. The four review-only rules (capital after a colon, lower case after a semicolon, serial comma, no em dash inside a list item) are exactly the ones no lint catches (adr-54), so injection is the only enforcement they can have; the observed effect in TeachingPrep is repeated lowercase-after-colon in agent-written handover files and ledger text from two different agent sessions. TeachingPrep has added a repo-override WRITING domain in .abcd/rules.json as the interim; a bundled default with the same rules and a broad recall list (write, draft, prose, note, handover, readme, markdown, document, report, message, edit, style) would replace it, and the repo override should then be removed. Relation to iss-2609012039220931: a bundled domain with common-word recall is exactly the case where recall breadth is a design choice rather than an abuse, so decide the two together.