Skip to content

Add the Slopinator to the review panel - #460

Merged
stbenjam merged 7 commits into
stbenjam:mainfrom
not-stbenjam:review-panel-prose-specialist
Jul 26, 2026
Merged

Add the Slopinator to the review panel#460
stbenjam merged 7 commits into
stbenjam:mainfrom
not-stbenjam:review-panel-prose-specialist

Conversation

@not-stbenjam

@not-stbenjam not-stbenjam commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Motivation

Review conversations leak into shipped code. skillsaw PR #451 merged four
comments that only made sense next to the review thread, and all four had to be
removed afterward:

Shipped comment Problem
# Without this a Codex catalog fell through to the single-page renderer Describes a bug that never existed on main — a reviewer's hypothetical frozen into a permanent claim about history
# this was 99.2% of extract_docs runtime on a 180-plugin repository A benchmark from one review round, stale the moment the code changes
# The direct probes were fixed; the recursive scan was not Narrates the order the fixes landed in
Test sections headed Review follow-ups, round three / round four Organizes tests by when they were written, not what they cover

No existing specialist looks for this. The Technical Writer checks whether docs
are accurate and current; nobody checks whether the writing describes the code
that shipped or the process that produced it.

What this adds

A seventh specialist, the Slopinator. It reads the change as an editor
would, across two halves. A palimpsest — a manuscript whose erased earlier text
still shows through the new writing — is what an AI-authored diff reads like,
and the scope file uses that as its framing. Slop is a defect, so the reviewer
files BLOCKING on the same scale as every other specialist.

Part A — review-history residue in code. Phantom bugs, round-scoped
benchmark numbers, fix-sequence narration, round-numbered test organization,
change announcements (# now also handles X), prose restatements of the next
line, defensive over-commenting, signature-echo docstrings, conversational
filler, changelog narration inside a module. The working heuristic is a
stranger test: would this read as a description of the code to someone opening
the file a year from now who has never seen the PR?

Part B — humanizing technical writing. Applied to docs, docstrings, commit
messages and PR prose: AI vocabulary tells, copula avoidance ("serves as",
"boasts"), rule-of-three padding, negative parallelism, signposting, sycophancy,
hedging, em dash and boldface abuse, Title Case headings, manufactured
punchlines, generic conclusions, chatbot artifacts. Rewrite suggestions must
never invent a fact, number, name or rationale that is not in the source or the
code.

Prior art

Part B draws on the humanizer skill by
blader, which catalogues 33 anti-patterns of AI-generated prose, and on
Wikipedia:Signs of AI
writing
from
WikiProject AI Cleanup, which humanizer is derived from. Both target
encyclopedic and marketing prose. This scope keeps the patterns that survive the
move to a codebase and drops the ones that do not. Humanizer's §30
"Diff-Anchored Writing" is the closest existing statement of the Part A problem;
this reference file expands it into the code-comment case with the concrete #451
examples. The citation is in the reference file's Reference section.

Calibration — this is not meant to be pedantic

Blocking raises the cost of a false positive, so the scope file is explicit
about restraint:

  • BLOCKING covers slop, and slop does not merge: an unresolved Slopinator
    BLOCKING rules out APPROVE on its own and holds the verdict at
    REQUEST_CHANGES. It covers every Part A residue instance (residue is
    binary, so one review-history comment is enough), any comment or docstring
    that is factually false about the shipped code, and Part B tells
    clustered densely enough that a passage reads as generated. Findings must
    quote both the offending text and the proposed replacement, so one edit
    clears them.
  • The arbiter may not soften slop — it is not filtered as a style nit and not
    downgraded because the rest of the change is good.
  • SUGGESTION and NOTE remain for a lone prose tell and for one-line polish.
  • Clustering governs Part B only, where one overused word is genuinely
    nothing. It is never a reason to let residue through.
  • A full "What NOT to flag" section protects: long "why" comments that earn
    their length, project house style (skillsaw's own files use em dashes and bold
    bullet lead-ins throughout), domain vocabulary and terms of art, a single em
    dash used correctly, version-scoped documents like changelogs and migration
    guides, comments a reviewer explicitly asked for, and existing text a diff
    merely moves.
  • Output is capped: prefer clusters over isolated hits, report the strongest
    handful and group the rest as one NOTE rather than filing one per instance.
  • "Clean writing is a valid outcome" — the file says so, matching the panel's
    existing rule against manufacturing findings.

Changes

  • references/slopinator.md — new specialist scope file
  • SKILL.md — roster row, description frontmatter (6 → 7 specialists), the
    "6 specialist reviewers + 1 arbiter" line, parallel/serial dispatch counts and
    roster order, severity calibration (slop added to BLOCKING), quality-gate
    checklist row, and the slop carve-out from the panel's advisory stance —
    disposition criteria and arbiter biases now both state that slop does not
    merge
  • references/serial-mode.md — roster order
  • verdict-template.md{{SLOPINATOR_FINDINGS}} section
  • DEVELOPMENT.md — reviewer count and list
  • .agents/ and .claude/ copies regenerated via make update; make verify-apm confirms they match the .apm/ source

Verification

  • make test — 2965 passed, unchanged from main (this PR ships no test
    changes; the panel is a prompt, so its behavior is checked by running it, not
    by asserting on its text)
  • make lint — clean
  • make update / make verify-apm — all three skill copies identical
  • .venv/bin/skillsaw lint . — 0 errors, 0 warnings, grade A+

🤖 Generated with Claude Code

Adds a seventh specialist to skillsaw-review-panel. It reads the writing
in a diff as an editor: code comments, docstrings, docs, commit messages
and PR prose.

Part A catches review-history residue — comments that describe the review
conversation instead of the shipped code. skillsaw PR stbenjam#451 merged four
such comments that had to be removed afterward, including one describing
a bug that never existed on main and test sections headed "Review
follow-ups, round three".

Part B applies AI-prose detection to technical writing: vocabulary tells,
copula avoidance, rule-of-three padding, negative parallelism,
signposting, sycophancy, hedging, Title Case headings, manufactured
punchlines and generic conclusions. Prior art is the humanizer skill
(https://github.com/blader/humanizer) and Wikipedia's "Signs of AI
writing".

The reviewer is deliberately calibrated to stay advisory: findings are
SUGGESTION or NOTE by default, it can only reach BLOCKING when a comment
is factually false about the shipped code and another specialist
corroborates, and it never sets the disposition on its own. An explicit
"what NOT to flag" section protects long "why" comments, project house
style, domain vocabulary, correctly used em dashes and version-scoped
documents like changelogs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@not-stbenjam
not-stbenjam requested a review from stbenjam as a code owner July 26, 2026 19:17
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The review panel now runs seven specialists plus an arbiter, adds Palimpsest review guidance and arbitration rules, updates serial execution and verdict rendering, and adds regression tests for roster, dispatch, synchronization, and template completeness.

Changes

Review panel behavior

Layer / File(s) Summary
Seven-specialist roster and execution
.apm/skills/skillsaw-review-panel/SKILL.md, .apm/skills/skillsaw-review-panel/references/serial-mode.md, DEVELOPMENT.md
The panel adds Palimpsest to the seven-specialist roster and requires all specialists to complete before verdict generation in parallel or serial mode.
Palimpsest guidance and verdict integration
.apm/skills/skillsaw-review-panel/references/palimpsest.md, .apm/skills/skillsaw-review-panel/SKILL.md, .apm/skills/skillsaw-review-panel/verdict-template.md
Palimpsest findings are advisory by default, with factually false claims eligible for corroborated blocking disposition, and its findings receive a verdict section.
Compiled artifact and policy validation
tests/test_review_panel_skill.py
Regression tests validate specialist coverage, synchronous dispatch, severity arbitration, compiled-copy synchronization, serial mode, context size, and verdict placeholders.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: stbenjam, stbenjam

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.76% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ⚠️ Warning The title names the Slopinator, but the PR actually adds the Palimpsest Reviewer to the review panel. Rename the title to mention the Palimpsest Reviewer and the review-panel expansion.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Add Palimpsest specialist reviewer to skillsaw review panel

✨ Enhancement 📝 Documentation ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Add a Palimpsest Reviewer specialist to the review-panel roster and checklist.
• Define scope and severity calibration for review-residue and AI-prose-tell findings.
• Extend verdict templates to render Palimpsest findings alongside existing specialists.
Diagram

graph TD
  A[Panel runner] --> B[/"Skill roster"/] --> D[Palimpsest reviewer] --> F[/"Verdict template"/] --> G{{"Findings slot"}} --> H[/"PR verdict"/]
  D --> C[/"Palimpsest scope"/]
  B --> E[Other reviewers]
  subgraph Legend
    direction LR
    _p[Process] ~~~ _d[/"Markdown doc"/] ~~~ _s{{"Template slot"}}
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Fold Palimpsest checks into Technical Writer specialist
  • ➕ Fewer specialists to run and reason about
  • ➕ Single place for writing-related guidance
  • ➖ Conflates doc accuracy with review-residue/prose-tell detection
  • ➖ Harder to keep severity calibration (advisory-only) distinct
2. Generate .agents/.apm/.claude skill assets from a single source
  • ➕ Eliminates duplicated SKILL.md/template/scope drift across packaging formats
  • ➕ Reduces maintenance when adding future specialists
  • ➖ Requires adding/maintaining a build or sync step
  • ➖ May complicate contributors’ local edit workflow

Recommendation: Keeping Palimpsest as a separate specialist is the better long-term choice because its remit (review-history residue + prose-tell cleanup) is distinct from doc accuracy and benefits from explicit advisory-only calibration. If duplication across .agents/.apm/.claude becomes a recurring pain point, consider a single-source generation/sync step as a follow-up; it’s a structural improvement but not required for this feature to land.

Files changed (11) +579 / -18

Documentation (5) +519 / -3
palimpsest.mdAdd Palimpsest Reviewer scope and calibration guide +172/-0

Add Palimpsest Reviewer scope and calibration guide

• Introduces a new specialist scope document defining two focus areas: review-history residue in shipped code comments/docstrings and AI-prose tell detection in technical writing. Defines what to flag, what not to flag, and severity calibration (including the narrow BLOCKING condition requiring corroboration).

.agents/skills/skillsaw-review-panel/references/palimpsest.md

palimpsest.mdMirror Palimpsest scope doc in APM package +172/-0

Mirror Palimpsest scope doc in APM package

• Adds the Palimpsest Reviewer scope documentation to the .apm packaging location to match the canonical reviewer guidance.

.apm/skills/skillsaw-review-panel/references/palimpsest.md

palimpsest.mdMirror Palimpsest scope doc in Claude package +172/-0

Mirror Palimpsest scope doc in Claude package

• Adds the same Palimpsest Reviewer scope and calibration document under the .claude packaging path for consistent distribution.

.claude/skills/skillsaw-review-panel/references/palimpsest.md

.skillsaw-card.svgUpdate report card metrics after adding new content +2/-2

Update report card metrics after adding new content

• Refreshes displayed violation density and content token counts to reflect the repository’s updated content footprint after adding the new reviewer documentation.

.skillsaw-card.svg

DEVELOPMENT.mdDocument 7-specialist review panel in developer guide +1/-1

Document 7-specialist review panel in developer guide

• Updates the development documentation to reflect that the review panel now runs 7 specialists (including palimpsest) in parallel plus an arbiter.

DEVELOPMENT.md

Other (6) +60 / -15
SKILL.mdAdd Palimpsest specialist to roster and execution procedure +13/-5

Add Palimpsest specialist to roster and execution procedure

• Updates the review-panel skill description and procedures to dispatch 7 specialists instead of 6. Adds the Palimpsest Reviewer to the roster table, serial-order list, checklist, and documents its advisory-only severity constraints.

.agents/skills/skillsaw-review-panel/SKILL.md

verdict-template.mdRender Palimpsest findings in the verdict output +7/-0

Render Palimpsest findings in the verdict output

• Adds a new collapsible section to the verdict template for Palimpsest Reviewer output. Introduces a PALIMPSEST_FINDINGS placeholder to be filled during panel execution.

.agents/skills/skillsaw-review-panel/verdict-template.md

SKILL.mdMirror Palimpsest specialist wiring in APM skill package +13/-5

Mirror Palimpsest specialist wiring in APM skill package

• Replicates the roster/procedure updates to include Palimpsest in the packaged .apm skill definition, keeping specialist counts, ordering, and checklist consistent.

.apm/skills/skillsaw-review-panel/SKILL.md

verdict-template.mdMirror verdict template Palimpsest section in APM package +7/-0

Mirror verdict template Palimpsest section in APM package

• Adds the Palimpsest Reviewer details block and PALIMPSEST_FINDINGS placeholder to the .apm verdict template.

.apm/skills/skillsaw-review-panel/verdict-template.md

SKILL.mdMirror Palimpsest specialist wiring in Claude skill package +13/-5

Mirror Palimpsest specialist wiring in Claude skill package

• Replicates the 7-specialist roster/procedure updates for the .claude skill package, including the advisory-only severity note and checklist item.

.claude/skills/skillsaw-review-panel/SKILL.md

verdict-template.mdMirror verdict template Palimpsest section in Claude package +7/-0

Mirror verdict template Palimpsest section in Claude package

• Adds a Palimpsest Reviewer details section and PALIMPSEST_FINDINGS placeholder to the .claude verdict template.

.claude/skills/skillsaw-review-panel/verdict-template.md

@not-stbenjam

Copy link
Copy Markdown
Collaborator Author

Heads up — this conflicts with #459 on one line, in all three skill copies.

#459 fixes a live bug in the parallel dispatch added by #458: the specialists are launched with run_in_background: true, which returns immediately, so the dispatching turn ends with every review still running. Headlessly that ends the CI job, and the panel has posted no verdict since #458 landed (run 30216174198 exited green after 3m22s with nothing posted; a retry reproduced it).

Both PRs edit the same line — this one changes 67, #459 changes truefalse. Resolution is all 7 + run_in_background: false.

Suggest landing #459 first, since until it does the Palimpsest Reviewer would be dispatched and abandoned along with the other six.

@qodo-code-review

qodo-code-review Bot commented Jul 26, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 136 rules
✅ Skills: 5 invoked
  skillsaw-pr-review
  skillsaw-issue-solver
  skillsaw-pr-followup
  skillsaw-create-plugin
  skillsaw-review-panel

Grey Divider


Remediation recommended

1. README missing review-panel docs ✗ Dismissed 📜 Skill insight ⚙ Maintainability
Description
The PR adds a new user-facing specialist (Palimpsest Reviewer) to the skillsaw-review-panel
output/roster, but README.md is not updated to document this user-facing capability. This makes
the feature discoverability and top-level docs inconsistent with shipped behavior.
Code

.agents/skills/skillsaw-review-panel/SKILL.md[R49-53]

| QA Engineer | Test coverage gaps, untested error paths, edge cases, concrete test suggestions | [`references/qa-engineer.md`](references/qa-engineer.md) |
| Technical Writer | Verify documentation accuracy, completeness, consistency with code changes, CLAUDE.md drift | [`references/technical-writer.md`](references/technical-writer.md) |
| Ecosystem Reviewer | Review target-tool adoption in the current LLM landscape; core-vs-plugin scope boundary | [`references/ecosystem.md`](references/ecosystem.md) |
+| Palimpsest Reviewer | Catch review-history residue in code comments and AI-authored prose tells in docs, docstrings, and commit messages | [`references/palimpsest.md`](references/palimpsest.md) |
| Panel Arbiter | Handle strategic synthesis, disagreement resolution, final disposition | *(inline, below)* |
Relevance

⭐⭐⭐ High

Team often accepts keeping README/docs in sync with user-facing behavior changes.

PR-#15
PR-#204

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The PR adds Palimpsest Reviewer to the review panel roster (a user-visible behavior change in the
shipped skill), but the top-level README’s documentation table does not mention the review panel
skill at all, so the new feature is not documented in README.md as required.

.agents/skills/skillsaw-review-panel/SKILL.md[42-53]
README.md[79-97]
Skill: skillsaw-review-panel

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A new user-facing feature was added (the `Palimpsest Reviewer` in the `skillsaw-review-panel` skill), but the top-level `README.md` does not document the review panel skill or the updated specialist roster.

## Issue Context
This PR changes shipped behavior/output for the review panel by adding a seventh specialist and a new findings section in the verdict template. Per compliance, new user-facing functionality should be documented in `README.md`.

## Fix Focus Areas
- README.md[75-109]
- .agents/skills/skillsaw-review-panel/SKILL.md[42-53]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread .agents/skills/skillsaw-review-panel/SKILL.md
@codecov

codecov Bot commented Jul 26, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.54%. Comparing base (95769b5) to head (aef37ac).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #460   +/-   ##
=======================================
  Coverage   93.54%   93.54%           
=======================================
  Files         145      145           
  Lines       11418    11418           
=======================================
  Hits        10681    10681           
  Misses        737      737           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c746515f5a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .apm/skills/skillsaw-review-panel/SKILL.md Outdated
Comment thread .apm/skills/skillsaw-review-panel/SKILL.md Outdated
@stbenjam

stbenjam commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Fix conflicts and Palimpsest is a weird name. Call it slopinator. I think you made this from an outdated branch ...

Resolves the conflict with stbenjam#459 as flagged on both PRs — `all 7` from
here, `run_in_background: false` from there.

Addresses the review findings:

- **The BLOCKING criterion was unsatisfiable.** Palimpsest was told to
  escalate a factually false comment only when Architecture or the
  Technical Writer corroborated it — but specialists run isolated from one
  another, so it could never see that and would always self-downgrade,
  while synthesis never upgraded it back. A corroborated correctness
  defect could ship as a SUGGESTION under an APPROVE. It now reports a
  `BLOCKING CANDIDATE` and the arbiter assigns the final severity in a new
  synthesis step, which may not leave one unsettled.

- **Regression coverage** for both this reviewer and the stbenjam#459 dispatch
  fix, in a new `tests/test_review_panel_skill.py`. The panel is a prompt,
  so its failure modes are textual and invisible to the rest of the suite —
  which is exactly how the headless silent-exit shipped green. The guards
  cover: dispatch is synchronous and background dispatch appears only in
  its own prohibition; the run may not end before the verdict; every
  specialist is rostered with a scope file that exists and a quality gate;
  Palimpsest reports a candidate rather than deciding; the three skill
  copies are byte-identical; and the verdict template has a section per
  specialist.

Adding a seventh specialist pushed SKILL.md past the 3,000-token warn
limit its own linter enforces — main was already at ~2,930. Serial mode
moved to `references/serial-mode.md`: it is the non-default path, so an
always-read copy costs every invocation for something most never use.
That is the progressive-disclosure pattern the skill already applies to
specialist scopes, and stbenjam#458 inlined dispatch specifically because it *is*
always read. The file is now smaller than on main despite the addition,
and a test pins the budget so the next specialist has to face the same
question.

No README change: the review panel is not documented there, so there is
nothing for a new specialist to fall out of sync with.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (3)
tests/test_review_panel_skill.py (3)

91-100: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the actual Palimpsest dispositions.

The arbiter test only checks marker text, while the “advisory by default” test checks What NOT to flag, not the SUGGESTION/NOTE default. A regression to the wrong fallback severity could pass these tests.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_review_panel_skill.py` around lines 91 - 100, Strengthen
test_the_arbiter_settles_candidates and
test_the_reviewer_stays_advisory_by_default to assert the actual Palimpsest
disposition values, including SUGGESTION/NOTE as the default advisory severity,
rather than only checking descriptive marker text or “What NOT to flag.”

150-155: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert findings placeholders, not just reviewer names.

This test passes if the Palimpsest section exists but {{PALIMPSEST_FINDINGS}} is missing. Use an explicit reviewer-to-placeholder mapping and assert each token.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_review_panel_skill.py` around lines 150 - 155, Update
TestVerdictTemplate.test_every_specialist_has_a_findings_placeholder to use an
explicit reviewer-to-placeholder mapping and assert each expected findings
token, such as {{PALIMPSEST_FINDINGS}}, is present in verdict-template.md.
Retain the existing section-name validation while ensuring every specialist has
its corresponding placeholder.

73-77: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Anchor roster checks to exact sections and full names.

These assertions search broad bodies using shortened names. A quality-gate line can be removed while the roster still contains the name, and a serial entry can be satisfied by an unrelated occurrence of its first word. Assert exact full specialist names within the relevant section.

Also applies to: 128-132

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_review_panel_skill.py` around lines 73 - 77, Update
test_every_specialist_has_a_quality_gate and the corresponding assertion at the
later roster check to parse the relevant quality-gate and serial sections
separately, then require each exact full specialist name (without shortened-name
matching) in its expected section. Ensure unrelated occurrences elsewhere in the
document cannot satisfy either assertion.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.apm/skills/skillsaw-review-panel/SKILL.md:
- Around line 121-125: Align the Palimpsest corroboration policy across all
three sites: in .apm/skills/skillsaw-review-panel/SKILL.md lines 121-125, define
the permitted specialist roles consistently; in
.apm/skills/skillsaw-review-panel/references/palimpsest.md lines 153-157,
require corroboration of the same factual claim rather than merely the same file
and apply the same role restriction; and in
.apm/skills/skillsaw-review-panel/SKILL.md lines 201-205, make arbiter promotion
follow that identical claim-and-role corroboration policy.
- Around line 168-169: Update the Step 3-to-Step 4 transition wording in the
synchronous dispatch workflow so Step 4 always proceeds after every specialist
has returned, including error or malformed-result responses; ensure the failure
is recorded and the verdict is posted rather than gating on complete findings.
Apply the Markdown change through MarkdownDoc.splice(...), not line-based
replacement.

In `@DEVELOPMENT.md`:
- Line 141: Update the reviewer behavior description near the
specialist-reviewer invocation to distinguish execution contexts: PR reviews
post the structured verdict as a PR comment, while local-branch reviews print
the verdict directly to the user. Preserve the existing reviewer and --serial
details.

---

Nitpick comments:
In `@tests/test_review_panel_skill.py`:
- Around line 91-100: Strengthen test_the_arbiter_settles_candidates and
test_the_reviewer_stays_advisory_by_default to assert the actual Palimpsest
disposition values, including SUGGESTION/NOTE as the default advisory severity,
rather than only checking descriptive marker text or “What NOT to flag.”
- Around line 150-155: Update
TestVerdictTemplate.test_every_specialist_has_a_findings_placeholder to use an
explicit reviewer-to-placeholder mapping and assert each expected findings
token, such as {{PALIMPSEST_FINDINGS}}, is present in verdict-template.md.
Retain the existing section-name validation while ensuring every specialist has
its corresponding placeholder.
- Around line 73-77: Update test_every_specialist_has_a_quality_gate and the
corresponding assertion at the later roster check to parse the relevant
quality-gate and serial sections separately, then require each exact full
specialist name (without shortened-name matching) in its expected section.
Ensure unrelated occurrences elsewhere in the document cannot satisfy either
assertion.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d56278e8-36b8-4485-94d4-15af2bd7d8ee

📥 Commits

Reviewing files that changed from the base of the PR and between 95769b5 and 4193ec7.

⛔ Files ignored due to path filters (9)
  • .agents/skills/skillsaw-review-panel/SKILL.md is excluded by !.agents/**
  • .agents/skills/skillsaw-review-panel/references/palimpsest.md is excluded by !.agents/**
  • .agents/skills/skillsaw-review-panel/references/serial-mode.md is excluded by !.agents/**
  • .agents/skills/skillsaw-review-panel/verdict-template.md is excluded by !.agents/**
  • .claude/skills/skillsaw-review-panel/SKILL.md is excluded by !.claude/**
  • .claude/skills/skillsaw-review-panel/references/palimpsest.md is excluded by !.claude/**
  • .claude/skills/skillsaw-review-panel/references/serial-mode.md is excluded by !.claude/**
  • .claude/skills/skillsaw-review-panel/verdict-template.md is excluded by !.claude/**
  • .skillsaw-card.svg is excluded by !**/*.svg
📒 Files selected for processing (6)
  • .apm/skills/skillsaw-review-panel/SKILL.md
  • .apm/skills/skillsaw-review-panel/references/palimpsest.md
  • .apm/skills/skillsaw-review-panel/references/serial-mode.md
  • .apm/skills/skillsaw-review-panel/verdict-template.md
  • DEVELOPMENT.md
  • tests/test_review_panel_skill.py

Comment thread .apm/skills/skillsaw-review-panel/SKILL.md Outdated
Comment thread .apm/skills/skillsaw-review-panel/SKILL.md Outdated
Comment thread DEVELOPMENT.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4193ec74ba

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .apm/skills/skillsaw-review-panel/SKILL.md Outdated
Comment thread tests/test_review_panel_skill.py Outdated
Comment thread .apm/skills/skillsaw-review-panel/SKILL.md Outdated
@stbenjam

Copy link
Copy Markdown
Owner

Rename the reviewer to slopinator.

Comment thread .apm/skills/skillsaw-review-panel/references/palimpsest.md Outdated
not-stbenjam and others added 2 commits July 26, 2026 17:20
Addresses the review threads on stbenjam#460.

The corroboration rule was stated three times and meant three things:
"another specialist", "reaches the same file", and "Architecture or the
Technical Writer reached the same claim". All three now say the same
thing — any other specialist independently reporting the same underlying
defect, not merely a finding in the same file — and a test asserts the
narrower phrasings do not come back.

`BLOCKING CANDIDATE` was missing from the shared findings format, which
is the whole contract an isolated sub-agent receives. It could not emit
the label, so the arbiter's settle step could never fire. The label is
now in the severity list, marked Palimpsest-only and arbiter-promoted.

The Step 4 gate said "proceed only with every specialist's findings",
contradicting the retry-record-proceed path below it. It now says not to
start while results are still arriving, and that a failed specialist is
handled in Step 4 rather than waited on.

New fixture `tests/fixtures/palimpsest-review-residue/`: a small repo
carrying an instance of every pattern the scope file names, beside clean
counterparts the reviewer must leave alone — an earned "why" comment,
house style, domain vocabulary, a correctly used em dash, a changelog.
The tests pin the fixture to the scope file in both directions, so
adding a pattern to one without the other fails. They do not assert the
reviewer catches anything: the panel is a prompt, so recall and
precision need a model in the loop. Two "what not to flag" rules are
properties of the review situation rather than of a file and are
declared un-representable rather than quietly dropped.

Trimmed SKILL.md back under the 3,000-token skill budget its own linter
enforces — the additions above had pushed it to 3,083 — by cutting
duplicated statements about sub-agent isolation and scope-file paths.
Splitting the disposition criteria under their own heading clears the
content-section-length info the arbiter step had introduced.

DEVELOPMENT.md no longer claims every invocation posts a PR comment; a
local-branch review prints the verdict.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The scope file was itself diff-anchored: it introduced its examples by
citing the review they came from, which is the pattern it tells the
reviewer to flag. The examples stand on their own without it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cec6418fa1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread tests/test_review_panel_skill.py Outdated
body = skill_md(SOURCE)
for name, _ in SPECIALISTS:
short = name.replace(" Reviewer", "").replace(" Engineer", "")
assert f"- [ ] {name}" in body or short in body

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Assert checklist rows within the quality-gate section

If any quality-gate row is removed, this test still passes because every short value already occurs in the roster or other prose, satisfying the right side of the or without a checklist entry. This leaves the new Palimpsest gate—and every existing gate—without effective regression protection; restrict the assertion to ## Check the Quality Gates and require each expected bullet.

AGENTS.md reference: AGENTS.md:L32-L34

Useful? React with 👍 / 👎.

Comment thread tests/test_review_panel_skill.py Outdated
def test_every_specialist_has_a_findings_placeholder(self):
template = (SOURCE / "verdict-template.md").read_text(encoding="utf-8")
for name, _ in SPECIALISTS:
assert name in template, f"{name} has no section in the verdict template"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Assert each verdict findings placeholder

If {{PALIMPSEST_FINDINGS}} is removed while its <summary> heading remains, this test still passes even though rendered verdicts can no longer include that specialist's output. Assert a name-to-placeholder mapping, including the exact {{PALIMPSEST_FINDINGS}} token, so the new verdict path has effective regression protection.

AGENTS.md reference: AGENTS.md:L32-L34

Useful? React with 👍 / 👎.

Per review feedback, the reviewer is now the Slopinator. Renames the
scope file, the fixture directory, the verdict placeholder, and every
reference in the roster, serial mode, and DEVELOPMENT.md.

The scope file's opening no longer explains the palimpsest metaphor,
which the new name does not carry; it states the residue problem
directly instead.
@not-stbenjam

Copy link
Copy Markdown
Collaborator Author

Renamed to Slopinator in 5006f28 — scope file (references/slopinator.md), fixture directory (tests/fixtures/slopinator-review-residue/), the {{SLOPINATOR_FINDINGS}} verdict placeholder, and every mention in the roster, serial-mode reference, tests, and DEVELOPMENT.md. All three skill copies stay byte-identical.

The scope file used to open by explaining the palimpsest metaphor, which the new name does not carry, so that paragraph now states the residue problem directly instead.

On the conflict: #459 landed at 19:19 and is already this branch's merge base, so there is nothing left to resolve. The merged text is the resolution that was suggested — all 7 specialist sub-agents with run_in_background: false.

Full suite green (3043 passed), black --check clean, self-lint A+; report card regenerated.

Comment thread tests/test_review_panel_skill.py Outdated
Per review feedback: skills are exercised by LLM-enabled evals, not by
unit tests asserting on prompt text. Removes tests/test_review_panel_skill.py
and the tests/fixtures/slopinator-review-residue/ corpus it was the only
consumer of.
@not-stbenjam not-stbenjam changed the title Add Palimpsest Reviewer to the review panel Add the Slopinator to the review panel Jul 26, 2026
@stbenjam

Copy link
Copy Markdown
Owner

You are too careful, slop is blocking. Palmpisest-style comments need to never merge.

Slop in shipped text is a defect, not a matter of taste, so the
Slopinator now sets BLOCKING like every other specialist. Drops the
BLOCKING CANDIDATE label, the corroboration requirement, and the
arbiter's settle step that existed only to promote it.

Restores the palimpsest metaphor to the scope file as an explanation of
what the reviewer is looking for, rather than as its name.
@not-stbenjam

Copy link
Copy Markdown
Collaborator Author

Slop blocks now, in aef37ac.

Dropped the whole advisory apparatus: the BLOCKING CANDIDATE label, the corroboration requirement, and the arbiter's Step 5 that existed only to promote candidates. The Slopinator files BLOCKING on the same scale as every other specialist, and slop is listed under BLOCKING in the shared severity calibration.

Since a false positive now costs more, the restraint rules got firmer rather than looser — clustering is stated as a requirement, SUGGESTION/NOTE stay available for a lone tell or one-line polish, and blocking findings must quote both the offending text and the replacement so one edit clears them. "What NOT to flag" is unchanged.

Also brought the palimpsest metaphor back into the scope file as the framing for what the reviewer looks for, just not as the name.

One thing worth naming: SKILL.md line 27 has said "Keep the panel advisory. It does not gate merge" since before this PR. So a Slopinator BLOCKING drives REQUEST_CHANGES on the verdict, it does not hard-block the merge button. Say the word if you want that panel-wide line changed too — it is outside this PR's scope so I left it.

2965 passed, self-lint A+, all three skill copies identical.

@stbenjam
stbenjam enabled auto-merge (squash) July 26, 2026 21:45
@stbenjam
stbenjam merged commit 43654b2 into stbenjam:main Jul 26, 2026
19 checks passed
@not-stbenjam

Copy link
Copy Markdown
Collaborator Author

Fair — it was blocking in name only. Fixed in dfd40c6.

The gap was the panel-wide line that said the panel "does not gate merge", which meant a Slopinator BLOCKING could still land under an APPROVE. Three changes close it:

  • Slop is carved out of the advisory stance. An unresolved Slopinator BLOCKING rules out APPROVE on its own and holds the verdict at REQUEST_CHANGES. Stated in the panel intro and in the disposition criteria.
  • The arbiter may not soften it. New arbiter bias: a slop finding is not filtered as a style nit in the noise-filter step, and not downgraded because the rest of the change is good.
  • Every Part A instance blocks. Residue is binary — a comment either describes the shipped code or the conversation that produced it — so the clustering rule now explicitly governs Part B prose only. One review-history comment is enough. Palimpsest-style comments do not merge.

Worth flagging so it is not a surprise: the panel posts its verdict with gh pr comment, so REQUEST_CHANGES is a verdict in a comment, not a GitHub review state. Nothing in this skill can physically grey out the merge button. If you want a hard gate, the panel would need to post an actual review (gh pr review --request-changes) with branch protection requiring approval — happy to do that here or in a follow-up, just say which.

2965 passed, self-lint back to 6 info violations, the exact main baseline (my first pass had pushed "What NOT to flag" over the section-length limit; split the reporting-volume guidance into its own section). All three skill copies identical.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aef37ac917

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +159 to +160
- `NOTE`: One-line polish — a filler phrase, a Title Case heading, a single
signature-echo docstring in a file that is otherwise fine.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Resolve overlapping Slopinator severities

For an otherwise clean change containing one signature-echo docstring or filler phrase, this NOTE rule conflicts with the earlier instruction that any Part A pattern is BLOCKING (lines 150–152), because both cases are listed as Part A patterns at lines 56–60. Since unresolved blocking findings produce REQUEST_CHANGES, the same input can receive opposite panel verdicts depending on which instruction the reviewer follows; explicitly exempt these isolated cases from the blocking rule or assign them one consistent severity.

Useful? React with 👍 / 👎.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants