Development record
The Review Bar Fires By Itself, In Every Repo abcd Manages
Press Release
abcd's reviewer agents now invoke themselves at the moment they are needed. A
REVIEWdomain in the bundled rules loader recalls on the language of shipping — review, diff, PR, present, ship, release — and injects the standing rule just-in-time: a non-trivial diff getsabcd:ruthless-reviewerbefore it is presented; a change touching a trust boundary getsabcd:security-reviewerbefore it lands; a release getsabcd:docs-currency-reviewer. Nothing to remember, nothing to configure, no text copied into your repo. Install abcd and the review bar is simply on."I kept forgetting to run the security reviewer on exactly the changes that needed it most — the ones I was in a hurry to ship," said Carol, a solo maintainer. "Now it just happens. The one time it blocked me, it was right."
Why This Matters
itd-81 shipped four reviewer agents
into the plugin, and they are reachable — abcd:ruthless-reviewer and friends
resolve in every repo with abcd enabled. But nothing calls them. They fire only
when the host model happens to choose to delegate, or when a human remembers to ask.
Under abcd's own wired-or-it-isn't-done rule, that is not done: an agent nothing
invokes is scaffolding with a good description.
The rule that makes them fire currently lives in the maintainer's personal machine-level instructions — a file no abcd user has, in a directory no abcd user has. Every other repo abcd manages gets the agents and none of the discipline. The capability is shipped; the reason to use it is not.
abcd already owns the right mechanism. The modular rules loader (itd-3)
ships eight bundled domains with keyword recall, injects matched rules just-in-time
on UserPromptSubmit via a wired hook, and is per-repo overridable through
.abcd/rules.json. COMMITTING already carries standing rules of exactly this shape
("Substantive work goes on a branch + PR", "never force-push"). A review bar is the
same kind of rule, and it belongs in the same place — not copied into every repo's
AGENTS.md, which would be a fourth copy of text that has a canonical home.
What's In Scope
- A
REVIEWdomain in the bundledrules.json,state: active, recalling on the vocabulary of shipping (review,diff,pull request,present,ship,release,security,merge) with the standing rules that name the agents: ruthless before presenting a non-trivial diff; security on any trust boundary (auth, secrets, input parsing, network, subprocess); docs-currency before a release tag. Whether a security BLOCK is a hard stop or advisory is an open question below — it turns on whether the agent has been measured. - Rules point at the agents and the canonical discipline
(itd-81); they never restate its
content. This follows the
OPINIONSprecedent, whose rules point at.abcd/development/principles/rather than copying them. - A host-agnostic fallback: a one-line pointer in the marked conventions section
of
AGENTS.mdthatprepare-this-repoalready owns, so a harness that does not run the hook still learns the agents exist. A pointer, not a restatement — if the line grows into a copy of the rules, the design has failed. - Per-repo override: a repo that wants a different bar (or none) turns the domain off
or replaces its rules through
.abcd/rules.json, using the loader's existing per-field override and sticky kill switch.
What's Out of Scope
- Enforcement. The domain injects a rule; it does not gate a commit. A hook that hard-blocks a commit until a reviewer has run is a separate, heavier capability, and it would need itd-81's corpus scores first — enforcing an unmeasured judge is exactly the failure that discipline exists to prevent.
- Auto-fixing what a reviewer finds. Findings go to the human.
- Calibrating the reviewers. That is itd-81's corpus work, and it is a hard prerequisite for trusting anything this intent causes to fire.
- Changing the agents' prompts. They ship as-is at
0.1.0.
Acceptance Criteria
BDD format, per the itd-1 discipline.
- Given a repo with the abcd plugin enabled, when
abcd rules REVIEWruns, then it renders the review domain's rules, each naming the agent it invokes. - Given a session in an abcd-managed repo, when the operator's prompt matches the review domain's recall vocabulary, then the prompt-router hook injects the review rules exactly once per session signature (the loader's existing dedup).
- Given a repo whose
.abcd/rules.jsondisables or overrides theREVIEWdomain, when the loader runs, then the repo's choice wins and the bundled default does not reappear. - Given an abcd-managed repo prepared by
prepare-this-repo, when itsAGENTS.mdconventions section is read, then it points at the reviewer agents in one line and does not restate the rules the loader injects. - Given a harness that does not run the prompt-router hook, when an agent
reads
AGENTS.md, then it can still discover that the reviewer agents exist and what each is for. - Given this intent ships, when the wired-or-it-isn't-done check runs, then
each of
abcd:ruthless-reviewer,abcd:security-reviewer, andabcd:docs-currency-revieweris demonstrably invoked from a production path, not merely present inagents/.
SOTA
Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the forge, CI and merge SOTA note. The host-agnostic fallback was surveyed in the AGENTS.md consumers note and its recheck and is not redone.
- Measured uptake of automated review comments is low, and precision is the stated reason: CodeRabbit comments across 239 repositories were 36.4% accepted, 7.3% discussed, 56.3% rejected, rejections attributed to "invalid suggestions that were false positives, redundant, or out of scope" (Lin et al., arXiv 2607.03316); across 13 review agents, agent-only pull requests merged at 45.2% against 68.4% for human-only review and 12 of 13 agents averaged a signal ratio below 60% (Chowdhury et al., MSR 2026); over 278,790 review conversations, agent suggestions were adopted at a significantly lower rate than human ones and over half of the unadopted were incorrect or were fixed another way (Zhong et al., arXiv 2603.15911).
- What gets acted on: comments that are "concise, include code snippets, and are manually triggered" (Sun et al., arXiv 2508.18771, 16 review Actions, 22,000 comments). A rule that fires on the words of shipping is nearer "manually triggered" than a bot on every push.
- The calibrated-precision precedent: Google shipped ML-suggested edits at a 50% target precision, with 40–50% of previewed suggestions applied.
- Review capacity is what the bar competes for: under an enterprise "2×" mandate, "per-reviewer load roughly doubled and automated review overtook human review", with merge and revert rates unchanged (He et al., arXiv 2607.01904).
- The forge's own self-firing reviewer is advisory by default: Copilot
code review is requestable automatically by repository, organisation or
ruleset; "By default, its reviews do not count toward required approvals";
a preview lets its approval satisfy a required-approval rule. A live
copilot_code_reviewruleset rule was read anonymously on a public repository on 2026-10-23.
Path 2: a native review rule fired inside the host through the rules loader, with an opt-in forge-side reviewer adapter as the seam kept open for later; the reason the field's forge-bot shape is not adopted first is abcd's host-delegated boundary and the basics-built-in principle (a deferred seam is still Path 2 under sota-per-intent, so no complexity stop is invoked). The evidence supports the record's leaning on the open question it carries, ship the security rule as advisory until a measured true-negative rate exists (low measured precision; the forge's own self-firing reviewer is advisory by default); the call stays the maintainer's. The independent fit-challenge runs at plan time.
Open Questions
- One
REVIEWdomain, or rules folded into the existingCOMMITTINGdomain?COMMITTINGalready recalls onpr/branch/mergeand already carries branch-and-PR rules, so a reviewer rule is arguably at home there — but review also fires onreleaseandsecurity, whichCOMMITTINGdoes not recall. Leaning toward a separate domain; confirm at spec time by looking at real recall overlap. - Does the security rule's BLOCK belong in a rule at all, given the agent is
unmeasured (
0.1.0)? A rule that says "a BLOCK stops the change" grants authority to a judge whose false-positive rate is unknown. Options: ship the rule as advisory until itd-81 produces a TNR figure, or ship it as a stop and accept the noise. Recommend advisory until measured — but this is a maintainer call. - Host-agnosticism. The loader's injection path is a Claude Code hook. Naming the
fallback "
AGENTS.md" assumes other harnesses read that file. Is that assumption good enough, or does the fallback need its own surface? - (SOTA 2026-10-23) Whether the rule asks the reviewer for one concise, snippet-bearing finding set rather than a running commentary, since that is the shape the measurements say gets acted on.
- (SOTA 2026-10-23) Where a managed repository already has the forge's
self-firing reviewer (a
copilot_code_reviewruleset rule), whether the review bar reports it as part of the bar or ignores it.
Dependencies
- Hard prerequisite: itd-3 — the rules loader, its domains, and the prompt-router hook. Phases 1 + 3 have shipped; this intent adds a domain to what exists and builds no new machinery.
- Hard prerequisite: itd-81 — the agents this intent wires, and the discipline that says they must be measured before they are trusted. Wiring an unmeasured judge into a hard gate is out of scope for exactly that reason.
- Coordinated with:
prepare-this-repo— it owns the markedAGENTS.mdconventions section the fallback pointer lands in.
Audit Notes
Empty. Populated by intent-fidelity-reviewer when this intent ships.
References
itd-81-judge-calibration.md— the discipline that shipped the agents and governs when they may be trusted.itd-3-modular-rules-loader.md— the mechanism this intent extends.itd-5-prompt-quality-additions.md— the prompt-quality floor every agent named here inherits.
Frontmatter
| id | itd-83 |
|---|---|
| type | intent |
| lifecycle | drafts |
| severity | major |
.abcd/development/intents/drafts/itd-83-review-bar-fires-itself.md
open on GitHub ↗ · commit history ↗
References2
Referenced by7
- adr-40Review, audit, lint, and gate are four buckets, separated by what each comparesrelated
- iss-2610262031459784The press release says `/abcd:ahoy install` writes the AGENTS.md marker block, but itd-83 says `prepare-this-repo` owns that section.related
- iss-2610262033012386itd-83 puts a pointer to abcd's reviewer agents in the AGENTS.md conventions section that prepare-this-repo owns; the ahoy page says that block never mentions abcd, and the prepare page is retired.related
- iss-2610262034176558itd-83 puts its fallback pointer in an AGENTS.md section that `prepare-this-repo` owns; the board chapter says the `prepare-this-repo` page retired into the install.related
- iss-2610262039184070itd-83 says the reviewer agents ship as-is at 0.1.0, but the prompt-quality page says they entered the changelog at 0.2.0related
- iss-2610262039188312itd-83's fallback for harnesses without hooks is a pointer in AGENTS.md's marked section, but the configuration page says a default install writes no marker blockrelated
- iss-2610262044419558The review-bar draft says prepare-this-repo owns the AGENTS.md conventions section, but prepare-this-repo has folded into ahoy installrelated
mentions7
- iss-124Review receipts and the review bar have no home or path for repos-we-don't-own: itd-83 fires reviewer agents only in managed repos and itd-28's receipt store is in-tree only, so outbound PRs to foreign repos carry unfalsifiable prose self-attestations ('Reviewed adversarially; no exploitable path found') instead of receipt-backed claims — the evaluator-inside-the-loop shape itd-58's A4 exploit gate refuses. Live specimen: the maintainer's PR #868 to a third-party repo (2026-07-21, reviewed 2026-07-25 with SOTA + adversarial passes). iss-89 is the routing precedent (foreign-repo work products need a home outside the cwd repo). Two seeds ride on this capture rather than as fresh intents: (1) a same-act deferred-hardenings discipline — any hardening a change consciously defers must exist as a filed, cited issue before the change is presented (generalises workaround-records-the-defect beyond abcd's own defects; mechanically lintable: a PR-body 'Deferred' line without an issue id is detectable); (2) a receipt-backed PR-comment adapter for outbound contributions — receipt lands at home per itd-28, a Stage-1-sanitised rendered summary posts to the forge; SOTA review found the receipt-plus-comment position unoccupied (verdict-as-comment is saturated, SLSA v1.2 leaves review attestations explicitly undefined).
- iss-381The delivery pipeline abcd runs on itself is hand-orchestrated and should be deterministic. This session hand-ran the full sequence: SOTA research -> itd-84 decomposition -> draft intent -> TWO independent adversarial reviews (design/feasibility + record-discipline) -> planning interview -> plan+spec -> test-first implementation -> TWO more adversarial reviews of the diff (ruthless + security) -> apply/refute findings -> gates (preflight, record-lint) -> atomic commits + PR -> resolve the ledger issue with provenance -> seed the deferred items back into the ledger. Every hand-off, gate, and review-pair was driven by judgement, not a deterministic harness. The individual stages already have records — itd-83 (the review bar fires itself), itd-84 (decompose before filing), itd-82 (ledger drain), itd-78 (intent-dependency graph) — but ALL are drafts/staged and NONE composes the others into one orchestrated pipeline. Honest constraint (loud-staging): the pipeline cannot be MORE automated than its stages, so full automation waits on those disciplines shipping; but the deterministic SCAFFOLD — the fixed stage order, the mandatory review-pair gate before plan and before merge, the hand-offs to the host for the human-in-the-loop steps, the ledger-seed-the-deferrals close-out — can be built now as a workflow/routine (itd-107 versioned-routine-template is the nearest delivery vehicle). Routing note: this is a big, cross-record idea, not a decomposed intent — it likely needs /abcd:ideate then itd-84 decomposition before it becomes filable, and it may reshape rather than duplicate itd-83/82/78.
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Them
- itd-5Every Agent Prompt Carries Its Version, Earns Its Lock, And Survives Injection
- itd-97The Facilitator Is a Mode, Not a Person
- itd-2610240922461281The review set is a setting, in model classes
- spc-2610240951109420a-person-sets-how-many-models-review