agentleFS
niksavisniksavis/basicly/.claude/skills/decompose-plan/SKILL.md

decompose-plan

Skill2 starsChanged 6 days agoMITView on GitHub

Splits an epic or feature into child tasks a build can check: EARS criteria, scope, dependencies and a demonstration command. Use to split work into tasks, or when the plan gate refuses a child.

2 other projects use a version of this, 1 of them edited.

Adopted by

Most recently taken up by

The file

Files
SKILL.md
<!-- Generated by `basicly skills-build` from skill.yaml. Do not edit; edit the source. -->

Decompose a plan the gate accepts

Cut one parent record, an epic or a feature, into children that each do something a consumer can see. The plan gate refuses an incomplete child before any build starts.

Rules

  • Slice vertically. Each child changes something a consumer can see, so verify has something to check. A schema-only or tests-only child is a horizontal cut.
  • Give every child a runnable demonstration in backticks, on one line.
  • Scope the file that produces the value, not the file that shows it, and name the child's own file, never a directory glob. Scoping shows how to find the producer.
  • Flatten, never nest. A child that needs children was cut wrong.

Steps

  1. Find the producer of each value the work changes, as scoping shows.
  2. Write plan.toml:

    [[children]]
    title = "Refuse a flag with no expiry"
    acceptance = ["When basicly flag add runs without --expires, the command shall exit 2 and name the flag."]
    scope = ["src/basicly/flags.py", "tests/test_flags.py", "changelog.d/PARENT-ID.1.added.md"]
    depends_on = []
    demonstration = "`basicly flag add beta --owner me` exits 2 and prints the missing --expires"
  3. Preview it with --dry-run. A line that reads `PATH`: collapses the grouping means more than one child writes that path. Give the path to one child, or list it under shared when each child only appends to it. Then run without --dry-run:

    basicly decompose PARENT-ID --plan plan.toml --dry-run
    basicly decompose PARENT-ID --plan plan.toml

The plan fields

FieldRefused whenNotes
titleabsentSibling titles are the names depends_on uses.
acceptanceabsentWrite each criterion in EARS form (trigger, state, condition, optional feature, ubiquitous), so a check can be derived from it.
scopeabsentTwo children that write one path serialize.
depends_onabsent, or cyclicAn empty list is a declaration; an absent key is not. A cycle is refused with its members before any record is created.
demonstrationabsent, no backticked runnable span, or spread over several linesA command, a request or a test through the consumer surface.
sharedoptionalPaths from scope that each child only appends its own entry to, such as a lockfile.
typeempty, or not a stringOptional. An absent type makes the child a task.
budget_tokenspresent but invalidOptional. Omit it when the user sets no limit.
integritypresent but invalidOptional.

Spending limits and historical integrity fields are optional.

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.