Skip to content

pabcd(A): reviewer strength floor, bounded reviewer reuse, evidence-backed rebuttals, and rebuttal-outcome tracking #294

Closed

Description

@lidge-jun

Summary

PABCD's Audit phase already matches most of what 2026 research says about independent LLM review: decorrelated context (REVIEW-DECORRELATE-01), a read-only reviewer that runs the plan's verifier commands itself (PLAN-VERIFIER-REAL-01), an explicit checklist, and an accept/rebut synthesis instead of patch-to-reviewer (REVIEW-SYNTHESIS-01).

Three rules point the other way from that evidence, and one gap stops the loop from being measured. This issue proposes four changes.

Lines checked on main @ 17e23f5c and dev @ fff148fa:

1. Reviewer strength floor for C3/C4 architecture audits

Current: A dispatches a reviewer "even a small/mini-model one".

Evidence:

  • Cross-model review helps only when the reviewer is at least as strong as the writer. Claude reviewing Codex drafts raised pass rate 71.6% → 89.7%. Codex reviewing Claude drafts dropped it 91.4% → 82.8%. The weaker reviewer tended to discard the writer's data structure and start over. (arXiv 2607.21656, Agentic SE @ KDD'26)
  • In a 900-session study, a lightweight cross-model reviewer scored below even same-context self-review, while a top-tier reviewer matched fresh-session review. (arXiv 2610.01471)

Proposal: Keep "any reviewer beats none" for C2/micro-audit. For C3 work that touches public contract, architecture, or persistence, and for all C4 work, require the reviewer to be the same tier as the plan author or stronger. When that cannot be established, record it in the attest the same way REVIEW-DECORRELATE-01 already records missing family independence.

2. Bound same-reviewer reuse across FAIL rounds

Current: AUDIT-LOOP-01 re-audits with the SAME reviewer and passes it the synthesis plus a change-diff summary. Only a "contaminated reviewer" gets swapped, and contamination is undefined.

Evidence:

  • A second review in the same context underperformed a fresh-session second review (F1 21.7% vs 28.6%). The repeated pass added findings instead of reconsidering the first assessment. (arXiv 2603.12123 v2)
  • Context rot hits delegated workers too. A fresh sub-agent degraded the same way after a large load plus compaction. (arXiv 2607.17937)

The situations are not identical. CCR measured an author re-reading its own output. Here a reviewer re-reads an amended plan. But the reviewer's context still accumulates prior findings and the main agent's rebuttals across rounds.

Proposal: Define "contaminated" concretely. Proposed triggers:

  • the round number reaches 2 or more
  • the reviewer has received main's rebuttal text
  • the reviewer has compacted

On any trigger, dispatch a fresh reviewer with the original packet plus the current plan. Do not pass the prior conversation. Keep SAME-reviewer reuse for the first blocker-closure check only.

3. Rebuttals need the same evidence bar as acceptances

Current: REVIEW-SYNTHESIS-01 requires an explicit accept/rebut decision per blocker, and near-pass lets the MAIN agent rebut High/Critical blockers "with recorded rationale". This guards against over-accepting reviewer comments, which is the right default:

  • 56.3% of agentic review comments in the wild were rejected by developers, and 43.3% of the rejected ones were false positives. (arXiv 2607.03316)
  • Models are more easily persuaded by a follow-up rebuttal than by the same argument presented side by side, especially when the rebuttal includes detailed reasoning, even wrong reasoning. (arXiv 2509.16533) Citation-style rebuttals had the highest regressive rate in SycEval. (arXiv 2502.08177)

The gap: the judge is the plan's author. Self-preference bias means an LLM rates its own output higher than equal-quality alternatives (NeurIPS 2024, arXiv 2404.13076). The current rule blocks over-acceptance but not over-rebuttal. "Recorded rationale" can be prose with no evidence.

Proposal:

  • (a) A rebuttal of a High/Critical blocker must carry the same evidence class PLAN-VERIFIER-REAL-01 demands of the reviewer: a command actually run with its output tail, or an exact path:line showing the reviewer's premise is false. Prose-only rebuttals do not qualify for near-pass.
  • (b) Optional, for C4: run the accept/rebut judgment in a fresh session that sees the plan and the blocker list side by side, rather than inside the authoring conversation. This is the side-by-side framing that reduced sycophancy in 2509.16533.
  • (c) Do not encode a target acceptance ratio. The ratio should be an outcome, not a quota.

4. Record rebuttal outcomes so selectivity becomes measurable

Nothing records whether a rebutted blocker later turned out to be real. Without that, the loop cannot tell good rebuttals from self-preference. "Correction selectivity" (accept correct critiques, resist incorrect ones) is now benchmarked for chat models (SycoBench-600, Findings ACL 2026). I did not find a published measurement of it inside real coding-agent workflows.

Proposal: Add one goalplan ledger event, e.g. rebuttal_outcome {blockerId, decision, laterEvidence: confirmed_wrong | confirmed_right | unknown, phase: C|D|post-merge}. Emit it when C or a later review touches the same blocker.

This gives per-repo data on the following, using goalplans that already exist:

  • rebut precision
  • accept precision
  • whether rebuttals cluster on particular blocker classes

Out of scope

  • Hook enforcement. These stay E7 guidance like the rest of REVIEW-SYNTHESIS-01, except the near-pass attest field for 3(a), which could be form-checked.
  • Model-family policy changes beyond what REVIEW-DECORRELATE-01 already allows.

Caveats on the evidence

Most cited 2026 work is arXiv preprints with small samples. CCR v2 narrowed its own claims: fresh context rescues a second look but does not beat one same-session look. All of these studies measure defect detection, not architectural design quality. None directly measures whether A-phase audits produce better architecture. Item 4 is partly a way to start measuring that.

Activity

  1. lidge-jun commented on Oct 27, 2026

    @lidge-jun
    OwnerAuthor

    Partly adopted in #325 (merged into dev), as guidance in pabcd/references/phase-audit.md (pointers in loop-engineering.md and structure/20):

    • AUDIT-REAUDIT-SCOPE-01: a re-audit round looks at blocker closure and what the amendment broke. A new Low/Medium finding becomes a non-blocking residual. A new High/Critical is still folded or rebutted before A>B, or the work returns to P.
    • REBUTTAL-BASIS-01 (item 3a, guidance only): a High/Critical rebuttal names a checkable basis when one exists, either a command run with its output tail or a path:line. A prose-only rebuttal does not qualify for near-pass.
    • AUDIT-REVIEWER-ROLE-01 (item 1, reframed): small/mini reviewers are for fact checks, and their whole-design rewrites carry little weight. Substantial design work prefers the strongest available reviewer.

    Not adopted, by maintainer decision:

    • Item 2 (fresh reviewer from round 2): in practice, fresh reviewers each round keep finding new minor issues and the audit never converges. Same-reviewer reuse stays the default, and the bounded re-audit scope above addresses the context-accumulation concern.
    • Item 1 tier floor: model tiers cannot be compared reliably across families, and reviewer quality depends on the model more than on a tier label.
    • Item 4 (rebutted-blocker outcome ledger) and a mechanical evidence field: blocker ids do not survive across rounds, and the outcome judge would be the same biased model. A form-only gate would invite filler.

    Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions