agentleFS
etretr/groundwork/skills/task-validation-loop/SKILL.md

task-validation-loop

Skill45 starsChanged 4 days agoMITView on GitHub

This skill should be used when the task list is complete to run multi-agent verification ensuring tasks cover PRD, follow architecture, and respect design system

The file

Show its rules and text

We split this skill into the rules it gives an agent

24 rules. About 0 are common, 16 are distinctive, and 8 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈16

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 8

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If effort is low or medium (i.e.

    line 16
  2. Distinctive:

    If you are not Sonnet or Opus, you MUST show the recommendation prompt - regardless of effort level.

    line 17
  3. Distinctive:

    If the user selects "Cancel — I'll switch first": output the switching commands above and stop.

    line 35
  4. Very specific:

    If yes → Is {{project_name}} non-empty?

    line 42
  5. Very specific:

    If empty → Invoke Skill(skill="groundwork:select-project") to select a project, then restart this skill.

    line 43
  6. Very specific:

    If set → Project is {{project_name}}, specs at {{specs_dir}}/.

    line 44
  7. Distinctive:

    If no → Continue (single-project repo).

    line 45
  8. Distinctive:

    If CWD is the repo root → fine, proceed.

    line 48
  9. Very specific:

    Check which project's path CWD falls inside (compare against all projects in .groundwork.yml).

    line 49
  10. Distinctive:

    If CWD is inside the selected project's path → fine, proceed.

    line 50
  11. Very specific:

    If CWD is inside a different project's path → warn via AskUserQuestion:

    line 51
  12. Very specific:

    If the user switches, invoke Skill(skill="groundwork:select-project").

    line 55
  13. Distinctive:

    If CWD doesn't match any project → proceed without warning (shared directory).

    line 56
  14. Distinctive:

    Before invoking this skill, ensure:

    line 61
  15. Very specific:

    Detection: Check for file first (takes precedence), then directory.

    line 80
  16. Distinctive:

    Use Agent tool to launch all 3 agents in parallel:

    line 94
  17. Distinctive:

    requirement-not-tasked: Add new task for the requirement

    line 149
  18. Distinctive:

    component-mismatch: Update task's Component field

    line 150
  19. Distinctive:

    accessibility-missing: Add acceptance criteria to task

    line 151
  20. Distinctive:

    over-tasked: Remove task or add requirement to PRD (user decision)

    line 152
  21. Distinctive:

    ALL approve → PASS, return success

    line 162
  22. Distinctive:

    If same finding appears 3 times:

    line 169
  23. Distinctive:

    Use AskUserQuestion for guidance

    line 187
  24. Distinctive:

    If still fails, escalate to user

    line 241

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Task Validation Loop Skill

Autonomous verification loop that runs 3 specialized agents to validate task list completeness and alignment before implementation begins.

Pre-flight: Model Recommendation

Your current effort level is {{effort_level}}.

Skip this step silently if effort is high, xhigh, or max (the scale is low < medium < high < xhigh < max, so xhigh and max are already above high) AND you are Sonnet or Opus. If effort is low or medium (i.e. below high), you MUST show the recommendation prompt — regardless of model. If you are not Sonnet or Opus, you MUST show the recommendation prompt - regardless of effort level.

Otherwise → use AskUserQuestion:

{
  "questions": [{
    "question": "Do you want to switch? Fix loop management across 3 validation agents benefits from consistent reasoning.\n\nTo switch: cancel, run `/effort high` (and `/model sonnet` if on Haiku), then re-invoke this skill.",
    "header": "Recommended: Sonnet or Opus at high effort",
    "options": [
      { "label": "Continue" },
      { "label": "Cancel — I'll switch first" }
    ],
    "multiSelect": false
  }]
}

If the user selects "Cancel — I'll switch first": output the switching commands above and stop. Do not proceed with the skill.

Step 0: Resolve Project Context

Before loading specs, ensure project context is resolved:

  1. Monorepo check: Does .groundwork.yml exist at the repo root?
    • If yes → Is {{project_name}} non-empty?
      • If empty → Invoke Skill(skill="groundwork:select-project") to select a project, then restart this skill.
      • If set → Project is {{project_name}}, specs at {{specs_dir}}/.
    • If no → Continue (single-project repo).
  2. CWD mismatch check (monorepo only):
    • Skip if not in monorepo mode or if the project was just selected in item 1 above.
    • If CWD is the repo root → fine, proceed.
    • Check which project's path CWD falls inside (compare against all projects in .groundwork.yml).
    • If CWD is inside the selected project's path → fine, proceed.
    • If CWD is inside a different project's path → warn via AskUserQuestion:

      "You're working from <cwd> (inside [cwd-project]), but the selected Groundwork project is [selected-project] ([selected-project-path]/). What would you like to do?"

      • "Switch to [cwd-project]"
      • "Stay with [selected-project]" If the user switches, invoke Skill(skill="groundwork:select-project").
    • If CWD doesn't match any project → proceed without warning (shared directory).
  3. Proceed with the resolved project context. All {{specs_dir}}/ paths will resolve to the correct location.

Prerequisites

Before invoking this skill, ensure:

  • Task list is complete ({{specs_dir}}/tasks/ directory or {{specs_dir}}/tasks.md exists)
  • PRD exists ({{specs_dir}}/product_specs.md)
  • Architecture exists ({{specs_dir}}/architecture.md)
  • User has approved the task breakdown

Workflow

1. Gather Context

Collect inputs for the agents:

task_list     ← Read {{specs_dir}}/tasks.md (or {{specs_dir}}/tasks/ directory)
product_specs ← Read {{specs_dir}}/product_specs.md (or {{specs_dir}}/product_specs/ directory)
architecture  ← Read {{specs_dir}}/architecture.md (or {{specs_dir}}/architecture/ directory)
design_system ← Read {{specs_dir}}/design_system.md (if exists, optional)

Detection: Check for file first (takes precedence), then directory. When reading a directory, aggregate all .md files recursively.

1.5. Determine Active Agents

AgentSkip when
design-task-alignment-checkerNo design_system found AND no UI/frontend tasks in task list

prd-task-alignment-checker and architecture-task-alignment-checker always run (their inputs are prerequisites).

Record skipped agents with verdict skipped.

2. Launch Validation Agents

Use Agent tool to launch all 3 agents in parallel:

Agent (subagent_type)Context to Provide
groundwork:prd-task-alignment-checker:prd-task-alignment-checkertask_list, product_specs
groundwork:architecture-task-alignment-checker:architecture-task-alignment-checkertask_list, architecture
groundwork:design-task-alignment-checker:design-task-alignment-checkertask_list, design_system

Each returns JSON:

{
  "summary": "One-sentence assessment",
  "score": 0-100,
  "findings": [{"severity": "critical|major|minor", "category": "...", "task_reference": "TASK-NNN", "finding": "...", "recommendation": "..."}],
  "verdict": "approve|request-changes"
}

3. Aggregate Results

Present results in table format:

## Task List Validation Report

| Agent | Score | Verdict | Critical | Major | Minor |
|-------|-------|---------|----------|-------|-------|
| PRD Alignment | 92 | approve | 0 | 1 | 2 |
| Architecture Alignment | 88 | approve | 0 | 1 | 1 |
| Design Alignment | 85 | approve | 0 | 2 | 1 |

**Overall:** PASS / NEEDS FIXES

4. Autonomous Fix-and-Retry Loop

Rule: Continue this loop until ALL agents return approve.

On any request-changes verdict:

  1. Log Iteration
    ## Validation Iteration [N]
    | Agent | Verdict | Findings |
    |-------|---------|----------|
    | ... | ... | ... |
    Fixing [X] issues...
  2. Fix Each Finding - Apply each critical/major recommendation

    • Modify the relevant task file in {{specs_dir}}/tasks/ (or {{specs_dir}}/tasks.md if single-file)
    • Track what was changed
    • Note which finding each fix addresses

    Fix types:

    • requirement-not-tasked: Add new task for the requirement
    • component-mismatch: Update task's Component field
    • accessibility-missing: Add acceptance criteria to task
    • over-tasked: Remove task or add requirement to PRD (user decision)
  3. Re-run Agent Validation — Re-launch ONLY agents that returned request-changes. Agents that approved retain their verdict unless the fix changed content in their domain:

    • PRD alignment checker: re-run if tasks were added/removed or requirements mapping changed
    • Architecture alignment checker: re-run if component assignments or technology references changed
    • Design alignment checker: re-run if accessibility criteria or design token references changed

    For agents NOT re-run, carry forward their previous approve verdict and score.

  4. Check Results
    • ALL approve → PASS, return success
    • Any request-changes → Return to step 1

5. Stuck Detection

Track findings by key: [Agent]-[Category]-[TaskRef]

If same finding appears 3 times:

## Stuck - Need User Input

Issue persists after 3 attempts:

**[Agent] Finding description**
- Task: TASK-NNN
- Category: [category]
- Attempts:
  1. [what was tried]
  2. [what was tried]
  3. [what was tried]

I need clarification: [specific question]
  • Use AskUserQuestion for guidance
  • Apply fix based on user input
  • Continue loop

Also escalate when:

  • Conflicting requirements between PRD and architecture
  • Missing information to create required task
  • Scope decisions needed (add to PRD vs. remove task)

6. Return Result

On PASS:

## Task List Validation PASSED

All 3 agents approved after [N] iteration(s).

| Agent | Score | Verdict | Summary |
|-------|-------|---------|---------|
| PRD Alignment | 95 | APPROVE | All requirements covered |
| Architecture Alignment | 92 | APPROVE | Tasks follow architecture |
| Design Alignment | 90 | APPROVE | UI tasks include a11y |

Issues fixed:
- [Iteration N] Agent: Description

Coverage Summary:
- PRD Requirements: [X]% covered
- Architecture Components: All referenced
- Design System: [Applied/N/A]

Minor suggestions (optional):
- ...

Return control to calling skill (tasks skill).

Severity Reference

LevelAction
criticalMust fix, loop continues
majorMust fix, loop continues
minorOptional, does not block

Edge Cases

No design system:

  • Design agent still runs (checks accessibility)
  • Note in summary: "Design system not found"

Agent returns error:

  • Log the error
  • Retry once
  • If still fails, escalate to user

All agents approve immediately:

  • Log success
  • Return without iteration

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.