Skip to content

feat(default-skill-review): publish the default tessl review rubric as a plugin#14

Merged
colinhallett merged 4 commits into
mainfrom
opt-1412-default-review
Jun 26, 2026
Merged

feat(default-skill-review): publish the default tessl review rubric as a plugin#14
colinhallett merged 4 commits into
mainfrom
opt-1412-default-review

Conversation

@colinhallett

@colinhallett colinhallett commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Publishes the default tessl review rubric as a first-class plugin, tessl/default-skill-review.

Why

The default reviewer existed only baked into the skill-review recipe in the monorepo — there was nowhere addressable the system could reference it from, so a default review recorded no reviewer identity and the dedup fingerprint folded in none (changing the default could silently serve stale scores). The backend now resolves a configured default reviewer ref through the same path as a custom reviewer. Publishing this plugin gives that ref something to resolve, so the default reviewer gains a real, versioned identity that flows into the run record and the fingerprint.

Behaviour-safe

The reviewer SKILL.md, config.json, and rubrics are copied verbatim from the recipe's baked-in reviewer, so once the default ref resolves to this plugin, scores don't change — only the reviewer's identity and fingerprint now reflect a named, versioned reviewer. The recipe keeps its baked-in copy as the fallback when the ref can't be resolved.

Naming

tessl/default-skill-review (per the review thread).

Description / schema corrections

The schema description text copied from the recipe was inaccurate; corrected here for the public contract:

  • config.schema: the judge weights plus validation_weight sum to 1.0 (not the judge weights alone), and dropped an equal-weights-if-judges-absent claim the reviewer never implements.
  • results.schema: component weights come from config.json's judges map, not a rubric-level weight field (rubrics have none).
  • The plugin README/description no longer mention the validation pass: the reviewer agent only runs the judges; validation is a platform scoring step (the backend derives its weight as 1 − Σ judge weights and adds the component), not this plugin's concern.

The same inaccurate schema descriptions still live in the monorepo recipe and review-plugin-creator; syncing those is a follow-up.

Follow-up (after this lands)

The backend's DEFAULT_REVIEWER_PLUGIN_REF default is currently tessl/default-review; it needs updating to tessl/default-skill-review so the default resolves in prod. Until then the default falls back to the baked-in reviewer (safe, just inert).

Merging publishes tessl/default-skill-review@0.1.0 via the publish-on-merge workflow.

Closes OPT-1412

…ugin

The default reviewer existed only baked into the skill-review recipe, with
nowhere addressable to reference it from. This publishes it as a first-class
plugin so the default reviewer has a real, versioned identity like any other
reviewer. Content is copied verbatim from the recipe's baked-in reviewer, so
the rubric is byte-equivalent to today's default.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@colinhallett colinhallett self-assigned this Jun 26, 2026
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 123b48fe-a0da-46e7-90e4-dd824e0f9588

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new tessl/default-review plugin bundle, with plugin metadata, documentation, reviewer instructions, configuration and schema files, and repository links in the main plugin table.

Changes

Default review plugin bundle

Layer / File(s) Summary
Entry points and packaging
README.md, default-review/.tessl-plugin/plugin.json, default-review/README.md, default-review/tessl.json
Adds the default-review plugin listing, bundle manifest, plugin README, and vendored bundle metadata for tessl/default-review.
Skill-reviewer contract
default-review/skills/skill-reviewer/SKILL.md, default-review/skills/skill-reviewer/references/config.json, default-review/skills/skill-reviewer/references/schemas/config.schema.json, default-review/skills/skill-reviewer/references/schemas/results.schema.json
Defines the reviewer workflow for parsing SKILL.md, loading rubric weights, computing weighted and normalised scores, and writing results.json, with matching config and output schemas.
Rubric definitions and validation
default-review/skills/skill-reviewer/references/schemas/rubric.schema.json, default-review/skills/skill-reviewer/references/rubrics/description.json, default-review/skills/skill-reviewer/references/rubrics/content.json
Adds the rubric schema and the description/content rubric files that define score scales, dimensions, examples, and content-specific scoring notes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • tesslio/product-plugins#9 — Introduces the same skill-reviewer rubric contract and related reference/schema files in a template context.

Suggested reviewers

  • marc-tessl
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 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.
Title check ✅ Passed The title clearly captures the main change: publishing the default Tessl review rubric as a plugin.

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

Comment thread default-review/.tessl-plugin/plugin.json Outdated

@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: 6

🤖 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 `@default-review/.tessl-plugin/plugin.json`:
- Line 4: The published plugin description and the top-level plugin table both
only mention the two LLM judges, but the reviewer also includes the validation
pass; update the wording in the plugin metadata to explicitly include validation
as part of the scoring flow. Use the existing description field in plugin.json
and the corresponding plugin table entry so both surfaces stay aligned and
accurately reflect the full rubric.

In `@default-review/skills/skill-reviewer/references/schemas/config.schema.json`:
- Around line 18-20: The `judges` schema description in `config.schema.json`
contradicts the shipped config contract because it કહે weights must sum to 1.0
while `references/config.json` intentionally reserves 0.2 for
`validation_weight`. Update the `judges` description to reflect the real
contract used by the bundled config, and make sure the wording around
`validation_weight` and equal-weight fallback stays consistent with the schema
and `references/config.json`.

In `@default-review/skills/skill-reviewer/references/schemas/results.schema.json`:
- Line 4: The results schema description in results.schema.json uses the wrong
weight source for scoring components. Update the schema text to say each
component weight comes from references/config.json via
config.judges[stem].weight, matching how SKILL.md builds scoring.components, and
remove the misleading reference to a rubric-level weight that does not exist in
rubric.schema.json. Keep the wording aligned anywhere the same contract is
described in the results schema so consumers implement the actual contract.

In `@default-review/skills/skill-reviewer/references/schemas/rubric.schema.json`:
- Around line 18-31: The scale definition in the rubric schema allows a
zero-width range because the min and max properties can be equal, which can
break score normalization in the scoring logic. Tighten the invariant in the
schema used by rubric validation so the scale enforces min to be strictly less
than max, or add a runtime check in the scoring path that validates the scale
before normalization. Use the existing scale object in rubric.schema.json and
the normalization logic that reads scale.min and scale.max to locate the fix.

In `@default-review/skills/skill-reviewer/SKILL.md`:
- Around line 14-22: Update the skill instructions to use the bundle-relative
locations that actually exist in this plugin: change rubric discovery to read
from references/rubrics, config loading to references/config.json, and schema
loading to references/schemas/results.schema.json. Keep the rest of the workflow
intact, and ensure any references in the bundle-relative file list under
references/scripts and references/assets remain consistent with the new paths.
- Around line 22-27: The scoring setup in SKILL.md assumes config.judges always
exists, but the schema allows it to be omitted and falls back to equal weights,
so the instructions and schema are inconsistent. Update the Step 2 guidance
around scoring.components to either describe how to handle the no-judges
fallback by deriving equal weights when config.judges is missing, or remove the
fallback claim from references/schemas/config.schema.json so both sources match.
Use the identifiers config.judges, scoring.components, and the rubric stem
handling to locate the affected guidance.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9a1b61d2-3875-4e05-a094-b705072d0416

📥 Commits

Reviewing files that changed from the base of the PR and between 6a29d85 and ba941ad.

📒 Files selected for processing (11)
  • README.md
  • default-review/.tessl-plugin/plugin.json
  • default-review/README.md
  • default-review/skills/skill-reviewer/SKILL.md
  • default-review/skills/skill-reviewer/references/config.json
  • default-review/skills/skill-reviewer/references/rubrics/content.json
  • default-review/skills/skill-reviewer/references/rubrics/description.json
  • default-review/skills/skill-reviewer/references/schemas/config.schema.json
  • default-review/skills/skill-reviewer/references/schemas/results.schema.json
  • default-review/skills/skill-reviewer/references/schemas/rubric.schema.json
  • default-review/tessl.json

Comment thread default-review/.tessl-plugin/plugin.json Outdated
Comment thread default-review/skills/skill-reviewer/references/schemas/config.schema.json Outdated
Comment thread default-review/skills/skill-reviewer/references/schemas/results.schema.json Outdated
Comment thread default-skill-review/skills/skill-reviewer/SKILL.md
Comment thread default-skill-review/skills/skill-reviewer/SKILL.md
…t descriptions

- Rename tessl/default-review -> tessl/default-skill-review (PR review thread).
- config.schema: the judge weights plus validation_weight sum to 1.0 (not the
  judge weights alone), and drop the unimplemented equal-weights-if-absent claim.
- results.schema: component weights come from config.json's judges map, not from
  a rubric-level weight field (rubrics have none).
- Drop the validation pass from the plugin's README and description: the reviewer
  agent only runs the judges; validation is a platform scoring step applied to
  every review, not this plugin's concern.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@colinhallett colinhallett changed the title feat(default-review): publish the default tessl review rubric as a plugin feat(default-skill-review): publish the default tessl review rubric as a plugin Jun 26, 2026
colinhallett and others added 2 commits June 26, 2026 17:01
…M judges"

The reviewer is a single agent that reads the skill and scores it against the
rubrics, not a set of LLM judges. Reword the public-facing surfaces — plugin.json,
both READMEs, and the skill-reviewer frontmatter description — accordingly. The
prompt body and the system's internal "judge" vocabulary (config.judges, the
judges map in results) are left unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…er prompt

Reword the reviewer prompt's role line to describe scoring the skill against
each rubric (one evaluation per rubric) rather than "rubric-based LLM judges".
The structural "judge" terms that map to the config.judges and results judges
schema are left intact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@colinhallett
colinhallett requested a review from gjvis June 26, 2026 16:06
@colinhallett
colinhallett merged commit 369a091 into main Jun 26, 2026
2 checks passed
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.

4 participants