Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/review/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "review",
"version": "0.26.19",
"version": "0.26.20",
"description": "Code-review toolkit: six read-only reviewer agents (code, security, architecture, doc drift, build/test/lint, CI-log audit) plus orchestration skills \u2014 quality gate, fan-out, and CI lane commands (/review:code-review, /review:security-review) for org reusable workflows.",
"author": {
"name": "Melodic Software",
Expand Down
17 changes: 17 additions & 0 deletions plugins/review/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@
All notable changes to the `review` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.26.20]

### Added

- **`quality-gate`:** close-out mode's acceptance-criteria rollup gains a requirement-pattern
column when any of the container's retrieved criteria opens with a bracketed EARS tag. The cell
carries one of exactly five names, `ubiquitous`, `event-driven`, `state-driven`,
`unwanted-behaviour`, `optional-feature`, matching what the planning surfaces emit; a bracket
holding anything else leaves the cell empty rather than echoing raw text. Detection is a leading
bracket holding one of those names, so a checklist marker (`- [ ]`) is not read as a tag and no
flag, lever, or convention key is read at all. Every criterion still gets a
row, so a partially tagged set shows its untagged rows with an empty pattern cell, and a set
with no tag renders exactly as before with no extra column. Step 2's extraction bullet now says
to keep the criterion line whole so the tag survives the read. The verdict vocabulary
(`delivered` / `partial` / `missing` / `unverifiable`) and the blocking rule (`missing` or
`wrong` keeps the container open) are unchanged.

## [0.26.19]

### Changed
Expand Down
4 changes: 3 additions & 1 deletion plugins/review/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ Invoke via `@review:<agent>` or let Claude delegate.
`security`, `spec` (spec-fidelity: did the change deliver what the originating item, plan, or
brief asked for), `close-out` (the same fidelity lens at spec-container scale, one cumulative
pass over everything a container shipped, across however many PRs, against the container's own
body; derives its own diff basis per execution shape), `downstream` (what the change breaks
body; derives its own diff basis per execution shape, and its acceptance-criteria rollup gains a
requirement-pattern column when the container's criteria carry bracketed EARS tags),
`downstream` (what the change breaks
outside its own diff: callers, serialization boundaries, cross-service consumers), `pr`,
`criteria`, `slice <name>`, `restatement`.
- **`/review:fanout [mode]`**. Breadth review: fans out across the
Expand Down
19 changes: 17 additions & 2 deletions plugins/review/skills/quality-gate/context/close-out.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ inside the verbatim fence [spec.md](spec.md) "Step 2" specifies.

From the body, extract the three things the rest of this mode needs:

- the **acceptance criteria** — the checklist the cumulative verdict is rendered against
- the **acceptance criteria** — the checklist the cumulative verdict is rendered against. Keep each
criterion line whole rather than stripping it to prose: a leading bracketed tag is part of the
line, and Step 6 reads it
- any **scope statement** (an `## Out of scope` section, an acceptance-criteria list read as
exhaustive) — without one, `scope-creep` is not reachable at all, per [spec.md](spec.md)
"Finding classes"
Expand Down Expand Up @@ -369,7 +371,20 @@ plus, above it:
`sub-item → PR → oid`, so the basis is auditable rather than asserted; name the rung, and say
outright when it was the heuristic scan
- the **acceptance-criteria rollup** — every criterion with its `delivered` / `partial` /
`missing` / `unverifiable` verdict
`missing` / `unverifiable` verdict, and, **when any criterion retrieved in Step 2 opens with a
bracketed EARS tag, one more column naming that criterion's requirement pattern**. That column is
what makes the shape of a tagged set legible: that every `unwanted-behaviour` criterion came back
`unverifiable` while the `event-driven` ones were all `delivered` is a fact the verdict column
alone cannot show. The pattern cell carries one of exactly five names, `ubiquitous`,
`event-driven`, `state-driven`, `unwanted-behaviour`, `optional-feature`, or nothing at all; a
bracket holding anything else is an untagged criterion that looks tagged, so the cell stays empty
rather than echoing the raw text. Detection is a leading bracket holding one of those five names
in the criteria as retrieved, nothing else: a checklist marker (`- [ ]`) is a bracket and not a
tag, and no flag, no lever, and no convention key is read here. **Every criterion
still gets a row.** A partially tagged set leaves the untagged rows' pattern cell empty rather
than dropping them, which is the invisibility this rollup exists to remove; a set carrying no tag
at all renders exactly as it does today, with no pattern column. The column names the pattern and
changes no verdict
- the **`no-code` sub-items** — those the provider confirms closed without a PR, each with the
closing comment its criteria were judged against. These are journey coverage, not gaps.
- any sub-item whose shipping commit could not be resolved (`unresolved`), listed as a coverage gap
Expand Down
Loading