agentleFS
prime-radiant-incprime-radiant-inc/iterative-development/skills/extracting-requirements/SKILL.md

extracting-requirements

Skill179 starsChanged 7 months agoApache-2.0View on GitHub

Use when starting an iterative-development run on human spec collateral — reads the spec, produces per-epic requirement files with proof obligations and behavior scenario cards with stable IDs.

The file

Show its rules and text

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 10 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈10

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

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

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

    All scripts referenced below live in this skill's scripts/ directory, next to this SKILL.md file.

    line 22
  2. Distinctive:

    All other chunks → use the Standard Extraction prompt variant

    line 56
  3. Distinctive:

    Wait semantics: if your runtime's wait primitive returns on the first completed agent (not all), loop until every dispatched agent in the …

    line 65
  4. Distinctive:

    Before aggregation, run a PAR omission review.

    line 71
  5. Distinctive:

    Run the story aggregation script on all extracted story JSONs (including any added by the omission review):

    line 84
  6. Distinctive:

    Run the scenario aggregation script:

    line 94
  7. Very specific:

    Additional consolidation check: after merging, verify that scenario owning_story_titles still resolve correctly.

    line 109
  8. Distinctive:

    After both aggregations complete, run the back-linking script to update per-epic story files with scenario references:

    line 113
  9. Distinctive:

    If any chunk is classified as gap, extraction is incomplete.

    line 142
  10. Distinctive:

    If any chunk is classified as story-only and contains observable behavior, extraction is incomplete.

    line 143
  11. Distinctive:

    Journey coverage check: every journey spec file MUST produce at least one JOURNEY-NNNN scenario that preserves the complete step sequence.

    line 145
  12. Very specific:

    Create the initial docs/superpowers/iterations/behavior-corpus.md from the scenario list:

    line 149
  13. Distinctive:

    If validation fails, inspect the output, fix formatting issues, and re-validate.

    line 171

≈ “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

Extracting Requirements

Overview

Reads arbitrary human spec collateral and produces two artifact sets:

  1. Per-epic requirement files in docs/superpowers/iterations/requirements/ — story cards with proof obligations per AC
  2. Behavior scenarios in docs/superpowers/iterations/behavior-scenarios.md — reusable observable-behavior contracts with stable IDs

Uses a chunking + parallel-dispatch + aggregation pipeline so that no single agent holds the entire spec in context. Handles specs from a single page up to ~100K tokens across dozens of files.

When to Use

Invoked by iterative-development during bootstrap, or standalone when you need to regenerate requirements from human spec collateral.

Script Location

All scripts referenced below live in this skill's scripts/ directory, next to this SKILL.md file.

Key Concept: Spec Taxonomy

The spec directory structure drives proof seam classification. See skills/shared/behavior-evidence-formats.md for the full taxonomy. Summary:

Spec directoryDefault proof seam
test-vectors/unit
contracts/integration
domains/integration or app-level
journeys/e2e

Extraction subagents use the appropriate prompt variant based on source file location.

Pipeline

1. Inventory

Enumerate the spec files without reading full contents:

python3 "scripts/chunk_spec.py" <spec-path>

This produces a JSON array of chunks. Each chunk has source_file, heading, start_line, end_line, content, and estimated_tokens. Small files (< 4K tokens) are kept whole. Larger files are split by ## headings, or ### if sections are still too large.

Classify each chunk by spec taxonomy: note whether the source file is under journeys/, contracts/, domains/, or test-vectors/. This determines which extraction prompt variant to use.

2. Dispatch extraction subagents

For each chunk (or batch of small chunks), dispatch an extraction subagent using the appropriate template from extraction-subagent-prompt.md:

  • Chunks from journeys/ → use the Journey Extraction prompt variant
  • All other chunks → use the Standard Extraction prompt variant

Pass the chunk content inline — do NOT make the subagent read the file.

Payload integrity: If your platform has output token limits that could truncate the chunk before it reaches the subagent prompt, stage each chunk individually and verify the subagent received the complete content (e.g., by checking that the extracted stories reference lines from the full range of the chunk). Partial payloads are easy to miss and cause silent under-extraction.

Dispatch strategy:

  • Dispatch subagents in waves of 3-5 (runtime agent thread limits are typically 6; keep headroom). Do not fan out all chunks at once.
  • Persist immediately: as soon as each subagent returns, write its output to a temp file (e.g., a scratch directory under the project root) before dispatching more work. Subagent results that only exist in conversation state can be lost if the session fails.
  • Wait semantics: if your runtime's wait primitive returns on the first completed agent (not all), loop until every dispatched agent in the wave has reached a final state. Persist each result as it arrives.
  • Close completed agents promptly to free thread slots for the next wave.
  • Track completion: maintain a checklist of chunk-to-agent mappings. After all waves finish, verify every chunk produced a persisted output file. Re-dispatch any missing chunks before proceeding.

3. PAR omission review

Before aggregation, run a PAR omission review. The sole job of this review is to find requirements AND scenarios that the extraction subagents dropped.

For each chunk (or batch of chunks), dispatch two reviewers in parallel following skills/shared/parallel-adversarial-review.md:

  1. Give each reviewer the original chunk text and the extracted stories + scenarios for that chunk
  2. Prompt: "Compare the source text against the extracted stories and scenarios. Find every requirement, acceptance criterion, behavioral constraint, or observable behavior in the source that is NOT represented by any extracted story or scenario. Score 5 points for each omission found. Pay special attention to: (a) ACs missing proof obligations, (b) observable behavior with no scenario, (c) journey steps that were summarized or skipped."
  3. Aggregate findings across both reviewers
  4. For each confirmed omission: either add a new story/scenario to the extraction output or document why it's intentionally excluded

This pass is required, not optional. Extraction subagents optimize for what they notice; omission reviewers optimize for what's missing.

4. Aggregate stories

Run the story aggregation script on all extracted story JSONs (including any added by the omission review):

python3 "scripts/aggregate_stories.py" -o docs/superpowers/iterations/requirements/ <json-file-1> <json-file-2> ...

The script combines, deduplicates by title, groups into epics, assigns stable STORY/EPIC IDs, and outputs per-epic files with proof obligations preserved.

5. Aggregate scenarios

Run the scenario aggregation script:

python3 "scripts/aggregate_scenarios.py" \
  -o docs/superpowers/iterations/behavior-scenarios.md \
  --stories-dir docs/superpowers/iterations/requirements/ \
  <json-file-1> <json-file-2> ...

The script combines, deduplicates by title, assigns stable SCENARIO/JOURNEY IDs, resolves story title references to STORY-IDs, and outputs behavior-scenarios.md.

6. Consolidate epics

Same as before: review the epic list, merge near-duplicates, re-run aggregation. See the consolidation rules in the original extraction skill documentation.

Additional consolidation check: after merging, verify that scenario owning_story_titles still resolve correctly. If stories were deduplicated during re-aggregation, re-run scenario aggregation to update resolved refs.

7. Back-link scenarios to stories

After both aggregations complete, run the back-linking script to update per-epic story files with scenario references:

python3 "scripts/backlink_scenarios.py" \
  docs/superpowers/iterations/behavior-scenarios.md \
  docs/superpowers/iterations/requirements/

The script reads scenario → owning-story mappings from behavior-scenarios.md and appends scenario:SCENARIO-NNNN or scenario:JOURNEY-NNNN to AC lines in the epic files that have observable behavioral impact. AC lines that already have scenario refs are skipped.

This creates the bidirectional link: stories → scenarios (via AC lines) and scenarios → stories (via owning_stories field).

8. Coverage ledger

Build a coverage ledger that maps every spec chunk to its extracted stories AND scenarios. This is the traceable proof that extraction is complete.

For each chunk from the inventory (step 1):

  1. List the chunk: source_file, heading, start_line–end_line
  2. List every story ID whose **Sources:** field cites overlapping lines in that file
  3. List every scenario ID whose **Sources:** field cites overlapping lines in that file
  4. Classify the chunk:
    • covered — stories with ACs that correspond to normative content AND scenarios for observable behavior
    • story-only — stories exist but observable behavior has no scenario (needs scenario)
    • non-normative — chunk contains only meta-commentary, table of contents, or boilerplate (explain why)
    • duplicate — chunk's requirements are covered by stories citing a different source
    • gap — normative content with no corresponding story

Hard gates:

  • If any chunk is classified as gap, extraction is incomplete. Re-extract and repeat.
  • If any chunk is classified as story-only and contains observable behavior, extraction is incomplete. Add scenarios for the missing observable behavior.

Journey coverage check: every journey spec file MUST produce at least one JOURNEY-NNNN scenario that preserves the complete step sequence. If a journey file only produced stories (no journey scenario), that is a gap.

9. Initialize behavior corpus index

Create the initial docs/superpowers/iterations/behavior-corpus.md from the scenario list:

# Behavior Corpus

| Scenario ID | Title | Proof seam | Run cadence | Command | Owning stories |
|---|---|---|---|---|---|

Populate with all scenarios. Set run cadence:

  • Journey scenarios → sentinel (they run every iteration)
  • Surface scenarios → iteration (default, refined during scoping)

Set command to TBD — the implementing iterations will fill these in.

10. Validate

python3 "scripts/validate_requirements_index.py" docs/superpowers/iterations/requirements/
python3 "scripts/validate_scenarios.py" docs/superpowers/iterations/behavior-scenarios.md docs/superpowers/iterations/requirements/

If validation fails, inspect the output, fix formatting issues, and re-validate.

11. Commit

git add docs/superpowers/iterations/requirements/
git add docs/superpowers/iterations/behavior-scenarios.md
git add docs/superpowers/iterations/behavior-corpus.md
git commit -m "docs: add requirements with proof obligations, behavior scenarios, and corpus index"

Quick Reference

StepToolInputOutput
Chunkscripts/chunk_spec.pyspec pathJSON chunks (stdout)
ExtractSubagent + extraction-subagent-prompt.mdchunk contentJSON stories + scenarios (per subagent)
Omission reviewPAR (source text vs. stories + scenarios)chunks + stories + scenariosMissing requirements and scenarios
Aggregate storiesscripts/aggregate_stories.py -o <dir>JSON filesPer-epic .md files with proof obligations
Aggregate scenariosscripts/aggregate_scenarios.py -o <file>JSON files + stories dirbehavior-scenarios.md
Back-linkscripts/backlink_scenarios.pyscenarios + storiesUpdated AC lines with scenario refs
Coverage ledgerMap chunks → story IDs + scenario IDschunk list, stories, scenariosGap/covered/story-only per chunk
Init corpusWrite corpus indexscenario listbehavior-corpus.md
Validatescripts/validate_requirements_index.py + scripts/validate_scenarios.py.md filesOK or errors

Deferred to later plans

Hierarchical reduce (specs > 1M tokens), huge-spec decomposition, incremental re-extraction.

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.