A7 — Breakdown skill: generate issues from specs/*.md #142
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#142
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As the operator, I want a
breakdownskill the orchestrator can dispatch against aspecs/*.mdfile so that large spec documents get automatically decomposed into a set of correctly-labeled user-story issues — the way the global CLAUDE.md breakdown conventions prescribe — without me writing every ticket by hand.Context
Closes the A7 story of milestone #16 Agent pool + customization (the last open story — tracking issue #47).
Today, I (claude-desktop) manually write each user-story issue when we decompose a feature. The user wants to move this workload to the boss/dev agents: feed a
specs/<name>.mdto abreakdownskill, get a batch of tickets back with:As a <role>, I want <capability>, so that <outcome>)area:*+type:user-storylabelsThe resulting labels drive label-aware dispatch (A3) — a
reviewer-securityinstance picks up issues taggedarea:security, etc.Acceptance criteria
Skill file
skills/breakdown.md, following the same vocabulary + structure as the existingimplement.md.{{repo}},{{spec_path}},{{milestone}}(optional).{{spec_path}}from the repo'sspecs/directory (fail loudly if missing).As a <role>… / Acceptance / Out of scope / References / Dependencies).list_repo_labels; file newarea:*labels only if the operator has pre-approved them in a config (see below).mcp__forgejo__create_issuein parallel where safe (the operator is fine with non-sequential issue numbers — see CLAUDE.md).add_issue_labels(by numeric ID — the forgejo-mcp gotcha in memory).update_issue.{{tracking_issue}}optional var): lists the created numbers + their titles, with the suggested implementation order.Dispatch path
POST /breakdown— payload{ repo, spec_path, milestone?, tracking_issue? }. Looks up the boss pool, dispatches the breakdown skill, returns{ task_id }.type:spec-breakdownpointing at aspecs/*.mdpath in the body. Simpler to wire; the first story in the resulting breakdown can be the operator's review of the batch.Guardrails
repomust match the orchestrator's own configured repo (out-of-scope per #47).{{dry_run}}var): if true, the skill lists the proposed issues as a comment instead of creating them.Tests
src/breakdown.test.ts— unit coverage of the webhook / HTTP route that dispatches the skill. Seed a fixture worker, call the route, assert the task text includes{{spec_path}}and the boss type was dispatched.src/webhook-handlers.test.ts(if webhook-triggered option is chosen): assert thetype:spec-breakdownlabel on an issue fires a breakdown dispatch.Docs
breakdownflow or note that boss owns the skill.POST /breakdownendpoint, or note the label-triggered path.curl -X POST /breakdown -d '{"repo": "charles/foo", "spec_path": "specs/multi-tenant.md"}').Out of scope
create_labelautonomously. This keeps thearea:*taxonomy operator-controlled.Resolves open question from #47
The tracking issue says A7 is a "stretch story for milestone close." Shipping this ticket closes #47's dependency graph and completes milestone 16.
References
skills/implement.md,skills/breakdown.md(if it exists — this story creates it fresh if not),skills/design-breakdown.md.~/.claude/CLAUDE.md"Issue authoring conventions" + "Label & milestone scheme".forgejo_mcp_label_ids.md—add_issue_labelsneeds numeric IDs, not names.Dependencies
main.