| name | blinding-protocol |
| description | Skill for enforcing review blinding — ensuring reviewers cannot see each other's reports, managing worktree isolation, handling optional author anonymization, and controlling unblinding at synthesis.
|
Blinding Protocol
Use this skill when setting up and enforcing blinding throughout the review process.
Blinding is critical for honest, independent review.
Blinding Levels
The system supports three blinding modes, configured in .review-config.yaml:
| Mode | What's Hidden | Use Case |
|---|
| Single blind (default) | Reviewers hidden from authors | Standard peer review |
| Double blind | Authors hidden from reviewers + reviewers hidden from authors | Top-tier venues (NeurIPS, ICML) |
| Open | Nothing hidden | Post-publication review |
Structural Blinding (Worktree Isolation)
Blinding is enforced structurally through git worktrees, not through prompt instructions.
Setup
git worktree add ../review-alpha agent-alpha-<slug>
git worktree add ../review-beta agent-beta-<slug>
git worktree add ../review-gamma agent-gamma-<slug>
Isolation Rules
Each reviewer's worktree contains:
- ✅ The full submission folder
- ✅ Their own reviewer profile (
.review/profiles/reviewer-<role>.yaml)
- ✅ The review template
- ❌ NOT other reviewers' profiles (single reviewer only)
- ❌ NOT other reviewers' reports
- ❌ NOT the meta-review (until re-review phase)
Verification
Before dispatching any reviewer, verify isolation:
ls ../review-alpha/.review/rounds/round-*/review-beta.yaml 2>/dev/null && echo "BLINDING VIOLATION" || echo "OK"
ls ../review-alpha/.review/rounds/round-*/review-gamma.yaml 2>/dev/null && echo "BLINDING VIOLATION" || echo "OK"
Author Anonymization (Double Blind)
When blinding: "double" is configured:
Pre-Review Scrubbing
Strip author identity before distributing to reviewers:
anonymize_submission() {
SUBMISSION="$1"
ANON_DIR="$SUBMISSION/.review/anonymized"
mkdir -p "$ANON_DIR"
if [ -f "$SUBMISSION/paper.tex" ]; then
sed -e '/\\author/,/\\end{author}/d' \
-e '/\\affiliation/d' \
-e '/\\email/d' \
"$SUBMISSION/paper.tex" > "$ANON_DIR/paper.tex"
fi
if [ -f "$SUBMISSION/paper.md" ]; then
sed '/^authors:/,/^[a-z]/{ /^authors:/d; /^ -/d; /^ /d; }' \
"$SUBMISSION/paper.md" > "$ANON_DIR/paper.md"
fi
echo "Cover letter withheld for double-blind review" > "$ANON_DIR/cover-letter-note.md"
yq 'del(.authors)' "$SUBMISSION/metadata.yaml" > "$ANON_DIR/metadata.yaml"
}
What Gets Anonymized
| File | Anonymization |
|---|
paper.tex/md | Author names, affiliations, emails removed |
metadata.yaml | authors field removed |
cover-letter.md | Withheld entirely |
abstract.txt | Kept as-is (usually anonymous) |
code/ | Kept (may reveal identity — accepted risk) |
Unblinding Protocol
After Editorial Decision (Phase 2)
When the AE issues a decision, unblinding occurs:
- All 3 reviews are shared with all parties
- For re-review: reviewers see the meta-review and all reviews
- For rejection/acceptance: everything is visible in the final package
Unblinding Procedure
unblind_reviews() {
ROUND="$1"
REVIEW_DIR=".review/rounds/round-$ROUND"
echo "Reviews unblinded for round $ROUND"
echo "unblinded: true" >> ".review/rounds/round-$ROUND/meta-review.yaml"
}
What Gets Unblinded When
| Phase | α sees | β sees | γ sees | AE sees | Revision Agent sees |
|---|
| Phase 1 (Review) | Own work only | Own work only | Own work only | — | — |
| Phase 2 (Synthesis) | Own work only | Own work only | Own work only | All 3 reviews | — |
| Phase 3 (Revision) | — | — | — | — | All reviews + meta |
| Phase 4 (Re-Review) | All reviews + meta | All reviews + meta | All reviews + meta | All re-reviews | — |
Reviewer Identity
Regardless of blinding mode, reviewer identities are ALWAYS hidden:
- The Revision Agent addresses "Reviewer α/β/γ", not the persona details
- The response letter uses role labels, not expertise descriptions
- In the final package, reviewers are identified by role only
Configuration
In .review-config.yaml:
review:
blinding: "single"
Default is single — reviewers are anonymous to authors, but see author names.