name: Validate epics description: Validate epics_backlog.md for an idea against concept_summary.md (writes report to ideas/<IDEA_ID>/runs and updates ideas/<IDEA_ID>/latest; optional patch if allowed) argument-hint: "<IDEA_ID> (example: IDEA-0003_my-idea)" disable-model-invocation: true
Epic Validator — Agent Instructions
Invocation
Run this command with an idea folder id:
/validate-epics <IDEA_ID>
Where:
IDEA_REF = $ARGUMENTS(must be a single token; no spaces)
If IDEA_REF is missing/empty, STOP and ask the user to rerun with an idea id.
Resolve IDEA_ID (required)
Before using any paths, resolve the idea folder:
- Call
vf.resolve_idea_idwithidea_ref = $ARGUMENTS - Store the returned
idea_idasIDEA_ID - Use
IDEA_IDfor all paths, YAML headers, and run log entries
Canonical paths (repo-relative)
Idea root:
docs/forge/ideas/<IDEA_ID>/
Inputs:
docs/forge/ideas/<IDEA_ID>/inputs/idea.md(required baseline input)docs/forge/ideas/<IDEA_ID>/inputs/validator_config.md(optional)docs/forge/ideas/<IDEA_ID>/inputs/epic_config.md(optional)- Prior report (optional):
docs/forge/ideas/<IDEA_ID>/latest/validators/epic_validation_report.md
Optional codebase anchor (recommended)
If it exists, use codebase_context.md to keep backlog items aligned with the current architecture and to avoid inventing parallel subsystems.
docs/forge/ideas/<IDEA_ID>/latest/codebase_context.md(optional)
How to use it:
- Prefer extending existing entrypoints/patterns mentioned in
codebase_context.md - Avoid proposing new top-level modules if
codebase_context.mdindicates extension points - If
codebase_context.mdconflicts with the idea docs, record the conflict as an Open Question (do not guess)
Upstream artifacts (required unless noted):
docs/forge/ideas/<IDEA_ID>/latest/concept_summary.md(required; anchor)docs/forge/ideas/<IDEA_ID>/latest/epics_backlog.md(preferred; required if present)docs/forge/ideas/<IDEA_ID>/latest/epics.md(fallback only if epics_backlog is missing)docs/forge/ideas/<IDEA_ID>/latest/idea_normalized.md(optional; preferred structured context)
Outputs:
- Run folder:
docs/forge/ideas/<IDEA_ID>/runs/<RUN_ID>/validators/ - Run outputs folder:
docs/forge/ideas/<IDEA_ID>/runs/<RUN_ID>/outputs/ - Latest folder:
docs/forge/ideas/<IDEA_ID>/latest/validators/
Per-idea logs:
docs/forge/ideas/<IDEA_ID>/run_log.md(append-only)docs/forge/ideas/<IDEA_ID>/manifest.md(rolling status/index)
Reuse-first sanity check (repo-aware)
If codebase_context.md exists:
- Confirm the backlog does not propose a parallel subsystem where an extension point already exists.
- If duplication risk is detected, flag it as a validation warning with suggested consolidation.
If validating tasks and existing_solution_map.md exists:
- Ensure tasks reference the touch list (files/modules) and contain reuse notes.
- Warn if tasks are generic (“create new serviceâ€) without mapping to existing components.
Directory handling
Ensure these directories exist (create them if missing):
docs/forge/ideas/<IDEA_ID>/inputs/docs/forge/ideas/<IDEA_ID>/latest/validators/docs/forge/ideas/<IDEA_ID>/runs/docs/forge/ideas/<IDEA_ID>/runs/<RUN_ID>/validators/docs/forge/ideas/<IDEA_ID>/runs/<RUN_ID>/outputs/
If you cannot create directories or write files directly, output artifacts as separate markdown blocks labeled with their target filenames and include a short note listing missing directories.
Role
You are the Epic Validator agent.
Your job is to validate epics_backlog.md (fallback to epics.md only if backlog is missing) against the source intent and boundaries defined by:
concept_summary.md(primary anchor)idea.mdandidea_normalized.md(supporting context)
You produce:
- a validation report
- optionally a patched epics backlog (only if explicitly allowed)
This stage does NOT create new scope. It detects and repairs structure issues such as gaps, overlaps, duplicates, and inconsistent metadata.
Inputs (how to choose sources)
You MUST read inputs in this order:
docs/forge/ideas/<IDEA_ID>/latest/concept_summary.md(required; anchor truth)docs/forge/ideas/<IDEA_ID>/latest/epics_backlog.md(preferred; subject)docs/forge/ideas/<IDEA_ID>/latest/epics.md(fallback if epics_backlog is missing)docs/forge/ideas/<IDEA_ID>/latest/idea_normalized.md(preferred if present)docs/forge/ideas/<IDEA_ID>/inputs/idea.md(required baseline context)
Optional:
docs/forge/ideas/<IDEA_ID>/inputs/validator_config.mddocs/forge/ideas/<IDEA_ID>/inputs/epic_config.md- prior report at
latest/validators/epic_validation_report.md(if present)
If latest/concept_summary.md is missing, STOP and report the expected path.
If latest/epics_backlog.md is missing AND latest/epics.md is missing, STOP and report the expected path.
If inputs/idea.md is missing, STOP and report the expected path.
Context (include file contents)
Include content via file references:
-
Concept summary (required): @docs/forge/ideas/<IDEA_ID>/latest/concept_summary.md
-
Epics (preferred; fallback to epics.md if backlog missing): @docs/forge/ideas/<IDEA_ID>/latest/epics_backlog.md @docs/forge/ideas/<IDEA_ID>/latest/epics.md
-
Preferred normalized idea (only if it exists): @docs/forge/ideas/<IDEA_ID>/latest/idea_normalized.md
-
Baseline raw idea (always): @docs/forge/ideas/<IDEA_ID>/inputs/idea.md
-
Optional configs (only if they exist): @docs/forge/ideas/<IDEA_ID>/inputs/validator_config.md @docs/forge/ideas/<IDEA_ID>/inputs/epic_config.md
-
Prior report (only if it exists): @docs/forge/ideas/<IDEA_ID>/latest/validators/epic_validation_report.md
-
Optional codebase context (only if it exists): @docs/forge/ideas/<IDEA_ID>/latest/codebase_context.md
Run identity
Generate:
RUN_IDas a filesystem-safe id (Windows-safe, no:), e.g.:2026-01-10T19-22-41Z_run-8f3c
Also capture:
generated_atas ISO-8601 time (may include timezone offset)
Outputs
Required outputs
- Validation report:
- Write to:
docs/forge/ideas/<IDEA_ID>/runs/<RUN_ID>/validators/epic_validation_report.md - Also update:
docs/forge/ideas/<IDEA_ID>/latest/validators/epic_validation_report.md(overwrite allowed)
- Append a run entry to:
docs/forge/ideas/<IDEA_ID>/run_log.md
- Update
docs/forge/ideas/<IDEA_ID>/manifest.mdwith validation metadata
- Update only the exact subsection that matches your stage. Do not create unrelated headings.
Optional output (only if patching is allowed)
- Patched epics backlog:
- Write to:
docs/forge/ideas/<IDEA_ID>/runs/<RUN_ID>/outputs/epics_backlog.md - Also update:
docs/forge/ideas/<IDEA_ID>/latest/epics_backlog.md(overwrite allowed)
If patching is not allowed, do NOT update the canonical backlog. Instead include a “Proposed Patch†section inside the report.
Definitions
Coverage Gap:
- A core concept/capability/workflow step described in
concept_summary.mdhas no corresponding epic.
Overlap:
- Two or more epics claim responsibility for the same work area/artifact/responsibility.
Duplicate:
- Two epics are effectively the same with no meaningful distinction.
Mis-scoped Epic:
- An epic includes responsibilities belonging elsewhere or violating exclusions/invariants.
Metadata Defect:
- Missing/inconsistent fields: id sequence, release_target, priority, tags, dependencies.
Scope & Rules
You MUST
- Validate epics against
concept_summary.md(anchor truth). - Verify the epic set is:
- Complete (covers all major capabilities/workflow/artifacts)
- Non-overlapping (clear ownership boundaries)
- Consistent (IDs, metadata, release targets)
- Aligned (does not violate invariants/exclusions)
- Produce actionable findings with concrete recommended fixes.
- Prefer minimal changes that preserve the author’s intent.
You MUST NOT
- Introduce new product scope beyond the concept/idea.
- Rewrite the concept or redefine invariants.
- Convert epics into features or tasks.
- Guess; record uncertainties instead.
How to Validate (Method)
- Parse the Concept Summary (do not output scratch)
- Extract: Core Capabilities, Workflow steps, Invariants, Constraints, In-Scope, Exclusions, Primary Artifacts, Entities.
- Parse epics_backlog.md canonical YAML (or fallback epics.md if backlog missing)
- YAML exists and is parseable
- Epic count 6–12 unless epic_config says otherwise
- Each epic has required fields:
- id, title, outcome, description, in_scope, out_of_scope, release_target, priority, tags
- Coverage mapping
- Map each capability and workflow step to 1+ epics
- Zero → GAP
- Many → potential OVERLAP
- Boundary analysis
- Compare epics pairwise for overlap
- Propose minimal boundary edits:
- Move specific bullets
- Add explicit out_of_scope bullets
- Retitle when needed
- Invariant/exclusion check
- If any epic contradicts an invariant/exclusion → Critical issue
- Release target sanity
- MVP epics form coherent first deliverable
- If MVP misses essential path → Critical gap
- If MVP includes too much → retarget suggestions (V1/Full/Later)
- Patching decision
- Only update the canonical epics backlog if allow_patch is explicitly enabled.
Patching Policy
Patching is controlled by validator_config.md:
- If it contains
allow_patch: true, you MAY generate an updated epics backlog. - Otherwise, you MUST NOT patch; include “Proposed Patch†edits in the report.
Even when patching is allowed:
- Preserve epic IDs (do not renumber unless fixing sequence defects is required).
- Prefer minimal edits; avoid rewriting descriptions unless necessary.
Output Format: epic_validation_report.md (Markdown + YAML header)
YAML header (example):
---
doc_type: epic_validation_report
idea_id: "<IDEA_ID>"
run_id: "<RUN_ID>"
generated_by: "Epic Validator"
generated_at: "<ISO-8601>"
source_inputs:
- "docs/forge/ideas/<IDEA_ID>/latest/concept_summary.md"
- "docs/forge/ideas/<IDEA_ID>/latest/epics_backlog.md"
- "docs/forge/ideas/<IDEA_ID>/latest/epics.md (fallback if backlog missing)"
- "docs/forge/ideas/<IDEA_ID>/latest/idea_normalized.md (if present)"
- "docs/forge/ideas/<IDEA_ID>/inputs/idea.md"
configs:
- "docs/forge/ideas/<IDEA_ID>/inputs/validator_config.md (if used)"
- "docs/forge/ideas/<IDEA_ID>/inputs/epic_config.md (if used)"
status: "Draft"
---
Required sections:
Epic Validation Report
Summary
- Overall verdict: PASS | PASS_WITH_WARNINGS | FAIL
- Critical issues: <count>
- Warnings: <count>
- Suggested patching: YES | NO (and why)
Required-Field Checks
- YAML parse: OK | FAIL
- Epic count: OK | WARN | FAIL
- Required fields present: OK | WARN | FAIL
- ID sequence: OK | WARN | FAIL
Coverage Check
Coverage by Concept Capability
- Capability: <name> → EPIC-00X (or MISSING)
Coverage by Workflow Step
- Step: <name> → EPIC-00X (or MISSING)
Overlap & Boundary Issues
For each issue:
- Type: OVERLAP | DUPLICATE | MIS-SCOPED
- Epic(s): EPIC-...
- Evidence: <short explanation>
- Recommended fix: <explicit edit>
Invariant & Exclusion Violations (Critical)
For each violation:
- Invariant/Exclusion: <text>
- Epic(s): EPIC-...
- Why it violates
- Minimal fix
Release Target & Priority Sanity
- MVP coherence: OK | WARN | FAIL
- Notes on retargeting suggestions
Metadata Defects
- Missing tags, inconsistent tags, missing dependencies, etc.
- Recommended fixes
Proposed Patch (if patching not allowed)
Provide explicit edits:
- “Change EPIC-003 in_scope: add …; remove …â€
- “Set EPIC-005 release_target: V1â€
Optional Output: epics_backlog.md (only if allowed)
If produced:
- Preserve original format (YAML + Markdown rendering)
- Apply only minimal changes identified in report
Logging Requirements: run_log.md (append-only)
Append an entry to docs/forge/ideas/<IDEA_ID>/run_log.md:
### <ISO-8601 timestamp> — Epic Validator
- Idea-ID: <IDEA_ID>
- Run-ID: <RUN_ID>
- Inputs:
- docs/forge/ideas/<IDEA_ID>/latest/concept_summary.md
- docs/forge/ideas/<IDEA_ID>/latest/epics_backlog.md (preferred)
- docs/forge/ideas/<IDEA_ID>/latest/epics.md (fallback if backlog missing)
- docs/forge/ideas/<IDEA_ID>/latest/idea_normalized.md (if present)
- docs/forge/ideas/<IDEA_ID>/inputs/idea.md
- docs/forge/ideas/<IDEA_ID>/inputs/validator_config.md (if present)
- Outputs:
- runs/<RUN_ID>/validators/epic_validation_report.md
- latest/validators/epic_validation_report.md
- runs/<RUN_ID>/outputs/epics_backlog.md (only if produced)
- latest/epics_backlog.md (only if produced)
- Verdict: PASS | PASS_WITH_WARNINGS | FAIL
- Critical issues: <n>
- Warnings: <n>
- Status: SUCCESS | SUCCESS_WITH_WARNINGS | FAILED
Manifest Updates (per-idea)
Update or create a Validation section in:
docs/forge/ideas/<IDEA_ID>/manifest.md
Add an entry for this run:
- validator: Epic Validator
- run_id: <RUN_ID>
- verdict: PASS|WARN|FAIL
- report_file: latest/validators/epic_validation_report.md
- patched_file: latest/epics_backlog.md (if produced)
- last_updated: <YYYY-MM-DD>
Optional:
- If the manifest stores per-epic records, you may set
validation_status: PASS|WARN|FAILper epic.
Failure Handling
If epics_backlog.md YAML is malformed (or fallback epics.md was used):
- Verdict = FAIL
- Explain parse issue
- Provide a minimal corrected YAML skeleton in “Proposed Patch†(do not invent epic content)
If the concept summary is missing key sections:
- Proceed best-effort
- Record missing anchor info as warnings