T-PCJB-task-ensure-ready-flags-vacuous-universal-acs
Status: closed/superseded · Impact: low · Complexity: small
Auto-generated from a /sdlc:task-work post-mortem. Review and
promote to open/ready before picking up.
/sdlc:task-ensure-ready checks that referenced files and symbols
exist, but it does not sanity-check ACs whose phrasing makes implicit
universal-existence claims (“sibling X also has Y”, “every caller of
Z does W”). When the universal set is empty, the AC is vacuously
satisfied and the task ships an AC that proved nothing. Loosen the
relevance check so the implementer sees the gap before stamping
ready, not after the PR is open. See
T-DPO2-ensure-ready-stamps-quoted-iso-z for the originating
incident.
“The task spec said ‘Sibling entity schemas (epic, milestone, backlog) carrying the same pattern get the same treatment’ but no sibling schemas actually carry that pattern. Ensure-ready’s relevance check passed the spec because the cited files exist, but the AC’s universal-quantifier shape wasn’t sanity-checked against the codebase.”
/sdlc:task-ensure-ready (plugin/skills/task-ensure-ready/SKILL.md)
applies the disqualifier list from
plugin/entities/task/implementation-ready.md. The current
disqualifiers cover non-existent paths, non-existent symbols,
subjective ACs, and placeholder text. They do not cover ACs whose
quantifier (“sibling X”, “every Y”, “all Z”) is unverified against
the live codebase.
Proposed
Section titled “Proposed”Add a hard disqualifier that scans each AC for universal-quantifier
phrasing and rejects the task when the universal set isn’t pinned.
Concretely: if an AC contains a quantifier keyword (sibling,
every, each, all) referencing a class of artifacts, the task
body must either enumerate the members or cite a command grep
recipe that produces them — otherwise readiness fails with a
definition_gap and status: planning/needs-definition (preserving
the in-progress* carve-out per the contract). The author either
deletes the vacuous clause or names what they actually audited.
Approach
Section titled “Approach”- Add a Disqualifier bullet to
plugin/entities/task/implementation-ready.mdunder the existing Disqualifiers section: “An AC contains a universal-quantifier keyword (sibling,every,each,all) referencing a class of artifacts without the task body enumerating the members or citing a query that produces them.” - Add a check to
plugin/skills/task-ensure-ready/SKILL.mdStep 3 that implements this disqualifier — purely textual scan over the AC bullets. The check fires when (a) an AC bullet contains a quantifier keyword AND (b) no enumeration orcommand greprecipe appears within the task body in proximity to the AC. Quantifier keywords are case-insensitive, whole-word. - Add a regression case to
plugin/skills/task-ensure-ready/tests/run_evals.pywith a fixture task whose AC reads “sibling entity schemas get the same treatment” and a body that does not enumerate or query the siblings. Assert ensure-ready records adefinition_gap, downshiftsstatustoplanning/needs-definition, and does not stampreadiness_verified_at. - Add a paired negative-control case: same AC phrasing but the body enumerates the siblings explicitly. Assert ensure-ready passes and stamps normally.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
plugin/entities/task/implementation-ready.md | modify | extend the |
plugin/skills/task-ensure-ready/SKILL.md | new | wire the new check |
plugin/skills/task-ensure-ready/tests/run_evals.py | modify | add the |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: A task whose AC reads “sibling Xs carrying Y get the
same treatment” without enumerating those siblings in the body
fails the readiness gate: ensure-ready records a
definition_gap, downshiftsstatustoplanning/needs-definition, and does not stampreadiness_verified_at(preserving thein-progress*carve-out). - AC-2:
plugin/skills/task-ensure-ready/tests/run_evals.pycontains a positive case (vacuous universal → fails) and a paired negative-control case (same AC phrasing with enumerated body → passes). - AC-3:
plugin/entities/task/implementation-ready.md’s Disqualifiers section lists the new rule with the quantifier keyword set (sibling,every,each,all) explicit.
Out of scope
Section titled “Out of scope”- Broader natural-language analysis of ACs (e.g. detecting subjective phrasing beyond what the current contract already catches).
- Retroactively re-validating already-stamped tasks.
Dependencies
Section titled “Dependencies”- none
Discovery context
Section titled “Discovery context”Spawned by /sdlc:task-work post-mortem of T-DPO2-ensure-ready-stamps-quoted-iso-z on 2026-05-21.