Skip to content

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.

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.

  1. Add a Disqualifier bullet to plugin/entities/task/implementation-ready.md under 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.”
  2. Add a check to plugin/skills/task-ensure-ready/SKILL.md Step 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 or command grep recipe appears within the task body in proximity to the AC. Quantifier keywords are case-insensitive, whole-word.
  3. Add a regression case to plugin/skills/task-ensure-ready/tests/run_evals.py with 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 a definition_gap, downshifts status to planning/needs-definition, and does not stamp readiness_verified_at.
  4. Add a paired negative-control case: same AC phrasing but the body enumerates the siblings explicitly. Assert ensure-ready passes and stamps normally.
LocationKindChange
plugin/entities/task/implementation-ready.mdmodifyextend the
plugin/skills/task-ensure-ready/SKILL.mdnewwire the new check
plugin/skills/task-ensure-ready/tests/run_evals.pymodifyadd the
  • 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, downshifts status to planning/needs-definition, and does not stamp readiness_verified_at (preserving the in-progress* carve-out).
  • AC-2: plugin/skills/task-ensure-ready/tests/run_evals.py contains 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.
  • Broader natural-language analysis of ACs (e.g. detecting subjective phrasing beyond what the current contract already catches).
  • Retroactively re-validating already-stamped tasks.
  • none

Spawned by /sdlc:task-work post-mortem of T-DPO2-ensure-ready-stamps-quoted-iso-z on 2026-05-21.


← Back to Tasks