Add --adversarial falsification persona to the document bounce - #49
Conversation
The reviewer seat only had a one-line "be adversarial" role, so a high-stakes plan got the same shallow critique as a quick draft. This adds an opt-in structured falsification persona (premise challenging, assumption surfacing, decision stress-testing, simplification pressure, alternative blindness), vendored from the compound-engineering adversarial-document-reviewer so the pipeline stays plugin-free. It composes with existing controls rather than replacing them: --lens becomes a focus line, --chain swaps only the critique stage, and --agents claude,claude runs it single-vendor as an internal review (with a warning that same-model loses cross-vendor disagreement). The persona is recorded in state.json as an additive reviewer_persona field that the scorer ignores. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 73d17ce304
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| # --adversarial swaps only the critique stage; defend/tighten keep | ||
| # their templates (the persona is a critique method, not a chain). | ||
| if [[ "$ADVERSARIAL" == "true" ]]; then | ||
| role_preamble=$(cat "$TEMPLATE_DIR/chain-critique-adversarial.md") |
There was a problem hiding this comment.
Preserve the lens focus in chain adversarial mode
When users combine --adversarial --chain --lens <name>, the chain critique prompt is built directly from chain-critique-adversarial.md, so the lens-specific focus line added by build_reviewer_preamble is skipped. That makes the documented composition silently ignore the requested lens in the high-stakes chain mode, e.g. --lens security auditor produces a generic falsification prompt instead of a security-focused review.
Useful? React with 👍 / 👎.
What
Adds an opt-in
--adversarialreviewer persona toco-evolve-bouncer.sh. Until now the reviewer seat ran a one-line "be adversarial" role regardless of stakes. This gives the document pipeline a structured falsification method — premise challenging, assumption surfacing, decision stress-testing, simplification pressure, alternative blindness — vendored as a repo-owned template so the pipeline stays free of any plugin runtime dependency.Two usage modes:
--adversarialruns the persona on the claude reviewer seat, codex composes the resolution.--adversarial --agents claude,clauderuns it single-vendor, with a logged warning that same-model loses cross-vendor disagreement.Design
modevalue (the scorer's baseline logic keys off mode).--lensbecomes a focus line appended to the persona;--chainswaps only the pass-1 critique stage (chain-critique-adversarial.md); defend/tighten untouched.reviewer_personafield (light/adversarial/lens) instate.json, via an optional 8th arg toinit_bounce_statedefaulting tolight— other callers unaffected, scorer ignores it.adversarial-document-reviewer: dropped the peer-persona deferrals (no peer personas exist in this single-seat pipeline), emit[CONTESTED]/[CLARIFY]markers instead of JSON, kept depth calibration with per-pass finding caps to limit marker flooding.Files
templates/co-evolve/role-reviewer-adversarial.md,chain-critique-adversarial.md— new persona templatesco-evolve-bouncer.sh— flag, template validation,usage(),build_reviewer_preamblebranch, chain swap,REVIEWER_PERSONA+ banner + same-model warninglib/co-evolution.sh— optionalreviewer_personaininit_bounce_stateevals/BOUNCE-RUNNER-CONTRACT.md,skills/co-evolution/SKILL.md,README.md,CLAUDE.md— docstests/adversarial-persona-simulation.sh— new 6-scenario simVerification
tests/run-all.sh: 33/33 suites (incl. new sim at 6/6); bounce-scorer regression 7/7.convergence_status: convergedwithreviewer_persona: adversarial. Head-to-head against the compound-engineering persona (same model) matched its coverage of all 7 seeded flaws.🤖 Generated with Claude Code