You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Type: Feature Summary: The close-out review's existing acceptance-criteria rollup gains a pattern column when the container's criteria carry EARS tags.
Amended 2026-09-06, second amendment. The first amendment moved this slice from slice-level verification to the close-out review, which was the right surface. It was still wrong about what was missing there. Review of the plan established that plugins/review/skills/quality-gate/context/close-out.mdalready does almost everything this issue asked for: it anchors the pass on the container's acceptance criteria, gives every criterion a verdict of delivered, partial, missing or unverifiable, states that unverifiable is "never quietly folded into delivered", and renders an acceptance-criteria rollup of every criterion with its verdict, unconditionally rather than behind any trigger.
So the original premise, that the close-out reports narrative prose and an unchecked criterion can pass unnoticed, is false. The rollup exists. What it lacks is any awareness of the EARS pattern a criterion carries. This slice is now that one column, and nothing else.
Two things the earlier version proposed are dropped outright. A second verdict vocabulary (met / not-met / unverifiable) alongside the existing four-value one would be a competing vocabulary for the same judgment. And a roll-up rule making unverifiable keep the container open would change a blocking contract that today fires only on missing or wrong, is co-owned by plugins/work-items/skills/decompose/context/container-lifecycle.md, and sits outside this slice's fence. Changing when a container closes is a container-level decision, not a side effect of adding a column.
Current behavior:
The close-out review's acceptance-criteria rollup lists every criterion with its verdict. It has no notion of the criterion's requirement pattern, so a reader cannot see at a glance that, for example, every unwanted-behaviour criterion in a container came back unverifiable while the event-driven ones were all delivered. That shape is exactly what an EARS-tagged criteria set makes visible, and the rollup currently discards it.
Desired behavior:
When the container's acceptance criteria carry EARS pattern tags, the rollup gains one additional column naming each criterion's pattern.
The five pattern names are exactly ubiquitous, event-driven, state-driven, unwanted-behaviour, and optional-feature, written as a bracketed prefix on the criterion line, as #3821 emits them:
- [event-driven] WHEN the upload completes, the manifest is rewritten
- [unwanted-behaviour] IF the upload fails, THEN the partial manifest is discarded
This vocabulary is the contract. A name that differs from #3821's breaks the match silently.
The existing verdict vocabulary is unchanged: delivered, partial, missing, unverifiable. The existing blocking rule is unchanged: missing or wrong keeps the container open. This slice adds a column and changes no judgment.
A partially tagged criteria set still yields one row per criterion, with an empty pattern cell for untagged ones. No criterion is dropped from the rollup for lacking a tag.
When no criterion carries a tag, the rollup renders exactly as it does today, without the column.
Key interfaces:
The close-out review's acceptance-criteria rollup — gains one conditional column.
The tag grammar — read, never written, and matched on bracket presence rather than on any convention key.
Acceptance criteria:
When the container's criteria carry bracketed EARS tags, the acceptance-criteria rollup carries a pattern column naming each criterion's pattern.
The five pattern names appear verbatim in the touched body.
The existing verdict vocabulary is unchanged: no met or not-met value is introduced.
The existing blocking rule is unchanged: the body does not make unverifiable keep the container open.
A partially tagged set yields one row per criterion, with an empty pattern cell for untagged ones.
With no tagged criteria, the rollup renders exactly as today, with no pattern column.
No flag, lever, or convention key is added, and no resolution ladder is restated, because detection is tag presence rather than a key read.
/skill-quality:check passes for the quality-gate skill.
markdownlint passes on the changed files.
The review plugin version is bumped per repo convention.
The review plugin README and any reference doc listing its skills reflect the change.
Changing when a container closes. That rule is co-owned with the work-items container lifecycle and any change to it belongs at container level.
Changing what counts as evidence, the basis resolution, or the cross-item findings pass.
The single-session flow that never decomposes. verification:confirm reads an approved plan's acceptance criteria directly, so tagged criteria can reach it with no pattern column. That gap is known, stated here, and deliberately not closed by this slice.
Parent
Refs #3799
Agent Brief
Type: Feature
Summary: The close-out review's existing acceptance-criteria rollup gains a pattern column when the container's criteria carry EARS tags.
Current behavior:
The close-out review's acceptance-criteria rollup lists every criterion with its verdict. It has no notion of the criterion's requirement pattern, so a reader cannot see at a glance that, for example, every unwanted-behaviour criterion in a container came back
unverifiablewhile the event-driven ones were alldelivered. That shape is exactly what an EARS-tagged criteria set makes visible, and the rollup currently discards it.Desired behavior:
When the container's acceptance criteria carry EARS pattern tags, the rollup gains one additional column naming each criterion's pattern.
The five pattern names are exactly
ubiquitous,event-driven,state-driven,unwanted-behaviour, andoptional-feature, written as a bracketed prefix on the criterion line, as#3821emits them:This vocabulary is the contract. A name that differs from #3821's breaks the match silently.
The existing verdict vocabulary is unchanged:
delivered,partial,missing,unverifiable. The existing blocking rule is unchanged:missingorwrongkeeps the container open. This slice adds a column and changes no judgment.A partially tagged criteria set still yields one row per criterion, with an empty pattern cell for untagged ones. No criterion is dropped from the rollup for lacking a tag.
When no criterion carries a tag, the rollup renders exactly as it does today, without the column.
Key interfaces:
Acceptance criteria:
metornot-metvalue is introduced.unverifiablekeep the container open./skill-quality:checkpasses for the quality-gate skill.markdownlintpasses on the changed files.Out of scope:
verification:confirmreads an approved plan's acceptance criteria directly, so tagged criteria can reach it with no pattern column. That gap is known, stated here, and deliberately not closed by this slice.Blocked by
#3821