ma-agents 3.13.2 → 3.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/lib/agents.js +9 -2
- package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +3 -3
- package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-b388526edf307cf56f8e65673466cff074105abf.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/{pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.pack → pack-b388526edf307cf56f8e65673466cff074105abf.pack} +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-b388526edf307cf56f8e65673466cff074105abf.rev +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/bmb/package-lock.json +2 -2
- package/lib/bmad-cache/bmb/package.json +1 -1
- package/lib/bmad-cache/bmb/samples/bmad-agent-code-coach/scripts/wake.py +78 -0
- package/lib/bmad-cache/bmb/samples/bmad-agent-creative-muse/scripts/wake.py +78 -0
- package/lib/bmad-cache/bmb/samples/bmad-agent-sentinel/scripts/wake.py +78 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/customize-template.toml +3 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/init-sanctum-template.py +11 -5
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/report-shell.html +1073 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/wake-template.py +78 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/customize.toml +48 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/count_tokens.py +78 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass.py +258 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/process-template.py +20 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/render_report.py +387 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/adapter-claude-code.json +9 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/aggregate_benchmark.py +236 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/memlog.py +197 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_evals.py +513 -390
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_triggers.py +347 -251
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/tests/test_env_isolation.py +79 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/tests/test_trigger_detection.py +123 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +82 -4
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +55 -11
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/customize-template.toml +3 -5
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/report-shell.html +860 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/customize.toml +59 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/count_tokens.py +77 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/init_skill.py +132 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +186 -221
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/quick_validate.py +117 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/render_report.py +387 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_canon_sync.py +46 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_count_tokens.py +180 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_render_report.py +171 -0
- package/lib/bmad-cache/cache-manifest.json +4 -4
- package/lib/bmad-customize/bmm-qa.customize.yaml +3 -3
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +3 -2
- package/lib/bmad-extension/skills/bmad-dev-epic/SKILL.md +101 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/checklist.md +44 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/customize.toml +54 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/references/story-pipeline.md +112 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-01-intake.md +59 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-02-plan-waves.md +56 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-03-epic-branch.md +35 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-04-run-waves.md +49 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +31 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-06-release.md +57 -0
- package/lib/bmad-extension/skills/bmad-dev-epic/steps/step-07-report.md +40 -0
- package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +3 -3
- package/lib/bmad-extension/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension/skills/module-help.csv +2 -1
- package/lib/bmad-extension/skills/module.yaml +1 -1
- package/lib/bmad-extension/skills/sqa-audit/SKILL.md +2 -2
- package/lib/bmad-extension/skills/sqa-ieee12207/SKILL.md +3 -3
- package/lib/bmad-extension/skills/sqa-requirements-quality/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +4 -3
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/SKILL.md +101 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/checklist.md +44 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/customize.toml +54 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/references/story-pipeline.md +112 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-01-intake.md +59 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-02-plan-waves.md +56 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-03-epic-branch.md +35 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-04-run-waves.md +49 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-05-epic-adversarial.md +31 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-06-release.md +57 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-epic/steps/step-07-report.md +40 -0
- package/lib/bmad-extension-plugin/skills/ma-agent-sqa/SKILL.md +3 -3
- package/lib/bmad-extension-plugin/skills/ma-agent-sqa/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/module-help.csv +2 -1
- package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/sqa-audit/SKILL.md +2 -2
- package/lib/bmad-extension-plugin/skills/sqa-ieee12207/SKILL.md +3 -3
- package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/SKILL.md +2 -2
- package/lib/bmad.js +6 -1
- package/package.json +3 -3
- package/lib/.bmad-extension-plugin.build-22612-1782454014750/.claude-plugin/marketplace.json +0 -109
- package/lib/.bmad-extension-plugin.build-22612-1782454014750/skills/module-help.csv +0 -62
- package/lib/.bmad-extension-plugin.build-22612-1782454014750/skills/module.yaml +0 -20
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.rev +0 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/references/sample-init-sanctum.py +0 -274
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +0 -534
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-execution-deps.py +0 -337
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py +0 -425
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-sanctum-architecture.py +0 -385
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py +0 -482
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +0 -29
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +0 -115
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +0 -184
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +0 -171
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +0 -260
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +0 -287
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +0 -588
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py +0 -288
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# DO NOT EDIT -- overwritten on every update.
|
|
2
|
+
#
|
|
3
|
+
# Workflow customization surface for bmad-dev-epic. Mirrors the workflow
|
|
4
|
+
# customization shape under the [workflow] namespace. Override in
|
|
5
|
+
# {project-root}/_bmad/custom/bmad-dev-epic.toml (team) or
|
|
6
|
+
# {project-root}/_bmad/custom/bmad-dev-epic.user.toml (personal).
|
|
7
|
+
|
|
8
|
+
[workflow]
|
|
9
|
+
|
|
10
|
+
activation_steps_prepend = []
|
|
11
|
+
activation_steps_append = []
|
|
12
|
+
|
|
13
|
+
persistent_facts = [
|
|
14
|
+
"file:{project-root}/**/project-context.md",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
on_complete = ""
|
|
18
|
+
|
|
19
|
+
# ── Orchestration defaults ──────────────────────────────────────────────────
|
|
20
|
+
# These are PROPOSED defaults the intake step shows the user; the user can
|
|
21
|
+
# override every one of them at runtime. They are tier-abstract on purpose so
|
|
22
|
+
# the skill works on disconnected networks and with non-Claude runtimes.
|
|
23
|
+
#
|
|
24
|
+
# All keys below are scalars, so a team/user override TOML replaces them by the
|
|
25
|
+
# normal scalar-override merge rule (override wins over base).
|
|
26
|
+
|
|
27
|
+
[workflow.defaults]
|
|
28
|
+
|
|
29
|
+
# Model tiers are ABSTRACT. The intake step maps each tier to a concrete model
|
|
30
|
+
# that the runtime actually exposes (Claude Opus/Sonnet, Gemini, a local model,
|
|
31
|
+
# etc.). If only one model is available, both tiers collapse to it.
|
|
32
|
+
# review_tier → deep reasoning: create-story, code-review, edge-case-hunter,
|
|
33
|
+
# epic adversarial review.
|
|
34
|
+
# exec_tier → implementation: dev-story, fix loops, e2e generation.
|
|
35
|
+
review_tier_model = "claude-opus" # proposed; ask at runtime
|
|
36
|
+
exec_tier_model = "claude-sonnet" # proposed; ask at runtime
|
|
37
|
+
|
|
38
|
+
# Max story pipelines running concurrently within a single wave.
|
|
39
|
+
max_parallel_stories = 3
|
|
40
|
+
|
|
41
|
+
# Max review→fix→re-review rounds before a story is escalated as blocked.
|
|
42
|
+
fix_loop_cap = 2
|
|
43
|
+
|
|
44
|
+
# Parallelization strategy: "waves" (dependency-aware) | "sequential" | "full".
|
|
45
|
+
parallelism_strategy = "waves"
|
|
46
|
+
|
|
47
|
+
# Human gates. Dev + review run unattended; these two are always confirmed.
|
|
48
|
+
gate_before_publish = true
|
|
49
|
+
gate_before_pr = true
|
|
50
|
+
|
|
51
|
+
# Release behavior at the publish gate.
|
|
52
|
+
npm_dist_tag = "beta"
|
|
53
|
+
version_bump = "prerelease" # npm version <bump> --preid=beta
|
|
54
|
+
pack_ignore_scripts = true # avoid Windows prepare tarball leak
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Per-Story Pipeline Contract
|
|
2
|
+
|
|
3
|
+
This is the self-contained instruction set handed to each story subagent. The
|
|
4
|
+
orchestrator fills the `<…>` placeholders before spawning. The subagent owns
|
|
5
|
+
exactly one story, in exactly one worktree, and never touches the epic branch.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Inputs (filled by the orchestrator)
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
STORY_ID = <id>
|
|
13
|
+
STORY_TITLE = <title>
|
|
14
|
+
EPIC_ID = <epic-id>
|
|
15
|
+
EPIC_BRANCH = feature/epic-<epic-id>
|
|
16
|
+
STORY_BRANCH = feature/epic-<epic-id>-story-<id>
|
|
17
|
+
WORKTREE = .worktrees/epic-<epic-id>-story-<id>
|
|
18
|
+
SPRINT_STATUS = <path to sprint-status.yaml>
|
|
19
|
+
EXEC_MODEL = <execution-tier model | "host-default">
|
|
20
|
+
REVIEW_MODEL = <review-tier model | "host-default">
|
|
21
|
+
FIX_LOOP_CAP = <n>
|
|
22
|
+
TEST_CMD = <project test/build gate>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Setup
|
|
26
|
+
|
|
27
|
+
All git follows `git-workflow-skill`; the only override is the base branch
|
|
28
|
+
(the story branch is cut from `<EPIC_BRANCH>`, not `dev`).
|
|
29
|
+
|
|
30
|
+
1. Create the worktree off the epic branch, per `git-workflow-skill` (manual
|
|
31
|
+
form shown, base overridden to the epic branch):
|
|
32
|
+
```bash
|
|
33
|
+
git worktree add <WORKTREE> -b <STORY_BRANCH> <EPIC_BRANCH>
|
|
34
|
+
```
|
|
35
|
+
2. Work **only** inside `<WORKTREE>`. Use the Conventional Commit format the
|
|
36
|
+
skill enforces (`feat`, `fix`, `test`, `docs`, `refactor`, `chore`, `ci`),
|
|
37
|
+
scoped to the story. Honor the skill's git hooks.
|
|
38
|
+
|
|
39
|
+
## Pipeline
|
|
40
|
+
|
|
41
|
+
### 1. Create story spec — `bmad-create-story` [REVIEW_MODEL]
|
|
42
|
+
Produce the context-filled spec for `<STORY_ID>`. If the spec already exists and
|
|
43
|
+
is complete, validate it instead of regenerating. The spec's acceptance criteria
|
|
44
|
+
(ACs) are the contract for the Definition of Done.
|
|
45
|
+
|
|
46
|
+
**INVEST & size gate (before implementing).** Once the spec is fleshed out,
|
|
47
|
+
re-check it against INVEST and the sizing/focus heuristics (same criteria as
|
|
48
|
+
step-02): one focused goal, small enough to reach Definition of Done in this
|
|
49
|
+
single pass, testable ACs. A spec often only reveals its true size here. **If
|
|
50
|
+
the story is too large or pursues more than one goal, do NOT implement it** —
|
|
51
|
+
return immediately with `status: needs-split` and a `split_proposal` (the
|
|
52
|
+
smallest set of INVEST-compliant sub-stories, each with a focused goal, derived
|
|
53
|
+
ids, and refined dependencies). The orchestrator owns the split because it
|
|
54
|
+
affects the epic-wide wave plan (see step-04). Only proceed to step 2 when the
|
|
55
|
+
story passes the gate.
|
|
56
|
+
|
|
57
|
+
### 2. Implement — `bmad-dev-story` [EXEC_MODEL]
|
|
58
|
+
Implement strictly against the spec. Follow the repo's always-load skills
|
|
59
|
+
(language best-practices, logging, test-accompanied-development, etc.). Commit.
|
|
60
|
+
|
|
61
|
+
### 3. Adversarial + edge-case review (PARALLEL) [REVIEW_MODEL]
|
|
62
|
+
Run both, ideally as parallel sub-subagents, each seeing the story diff:
|
|
63
|
+
- `bmad-code-review` — full adversarial review against spec + context.
|
|
64
|
+
- `bmad-review-edge-case-hunter` — exhaustive boundary/branch analysis.
|
|
65
|
+
Collect both findings sets.
|
|
66
|
+
|
|
67
|
+
### 4. Triage & fix loop [EXEC_MODEL]
|
|
68
|
+
Classify findings as **blocking** (correctness, security, AC miss, broken build)
|
|
69
|
+
vs **non-blocking** (style, nits). For blocking findings:
|
|
70
|
+
- Run `bmad-dev-story` to fix them. Commit.
|
|
71
|
+
- Re-review **only the changed surface**.
|
|
72
|
+
- Repeat until no blocking findings remain OR `FIX_LOOP_CAP` rounds are used.
|
|
73
|
+
- If the cap is hit with blocking findings remaining → return `status: blocked`
|
|
74
|
+
with the unresolved findings. Do not merge, do not paper over.
|
|
75
|
+
Record non-blocking findings in the return notes (not fixed, by design).
|
|
76
|
+
|
|
77
|
+
### 5. E2E tests — `bmad-qa-generate-e2e-tests` [EXEC_MODEL]
|
|
78
|
+
Generate e2e/automated tests for the story's behavior and **run them**. Also run
|
|
79
|
+
`<TEST_CMD>` to confirm the story didn't break the package build. If e2e cannot
|
|
80
|
+
be made green within the fix budget, return `status: blocked` with details.
|
|
81
|
+
|
|
82
|
+
### 6. Definition of Done (gate before returning ready)
|
|
83
|
+
ALL must hold, or the story is `blocked`:
|
|
84
|
+
- [ ] All spec acceptance criteria implemented.
|
|
85
|
+
- [ ] No blocking findings remain from either reviewer.
|
|
86
|
+
- [ ] E2E tests written and passing.
|
|
87
|
+
- [ ] `<TEST_CMD>` passes on the story branch (modulo known pre-existing failures).
|
|
88
|
+
- [ ] All work committed with Conventional Commit messages.
|
|
89
|
+
|
|
90
|
+
## Return value (structured)
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
{
|
|
94
|
+
"story_id": "<STORY_ID>",
|
|
95
|
+
"status": "merged-ready" | "blocked" | "needs-split",
|
|
96
|
+
"branch": "<STORY_BRANCH>",
|
|
97
|
+
"worktree": "<WORKTREE>",
|
|
98
|
+
"commits": [ "<sha> <subject>", … ],
|
|
99
|
+
"e2e_status": "passing" | "failing" | "not-created",
|
|
100
|
+
"unresolved_findings": [ "<blocking finding>", … ],
|
|
101
|
+
"split_proposal": [ { "id": "<S3a>", "goal": "<focused goal>", "acs": [ … ], "depends_on": [ … ] }, … ],
|
|
102
|
+
"fix_rounds_used": <n>,
|
|
103
|
+
"notes": "<non-blocking findings, decisions, caveats>"
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`split_proposal` is populated only when `status: needs-split` (empty/omitted
|
|
108
|
+
otherwise). On `needs-split` the subagent has done **no** implementation — it
|
|
109
|
+
returns the proposal and stops.
|
|
110
|
+
|
|
111
|
+
**Do NOT** merge into `<EPIC_BRANCH>`. The orchestrator serializes all
|
|
112
|
+
integration into the epic branch (step-04) to avoid parallel-merge races.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Step 01 — Intake & Guided Configuration
|
|
2
|
+
|
|
3
|
+
**Goal:** Confirm the epic exists and is ready, then collect the run configuration through guided questions. Nothing is spawned and no branch is created until this step completes.
|
|
4
|
+
|
|
5
|
+
## 1. Locate and validate the epic (PRECONDITION)
|
|
6
|
+
|
|
7
|
+
This skill *runs* an epic; it does not invent one. Find the target epic:
|
|
8
|
+
|
|
9
|
+
1. Read `{sprint_status}` (`{implementation_artifacts}/sprint-status.yaml`) and the epics/stories planning artifacts under `{planning_artifacts}`.
|
|
10
|
+
2. If the user named an epic (id or title), select it. Otherwise list candidate epics and **HALT** for the user to choose.
|
|
11
|
+
3. Enumerate the epic's stories. For each story capture: id, title, status, and declared dependencies / "depends on" / prerequisite references.
|
|
12
|
+
|
|
13
|
+
**If the epic has no stories**, or stories are placeholders without acceptance criteria: STOP and tell the user to run `bmad-create-epics-and-stories` (and `bmad-sprint-planning`) first. Do not fabricate stories.
|
|
14
|
+
|
|
15
|
+
**If some stories are already `done`/`merged`**: by default skip them (treat as satisfied dependencies). Confirm this with the user.
|
|
16
|
+
|
|
17
|
+
## 2. Ask the guided questions
|
|
18
|
+
|
|
19
|
+
Ask these as a single grouped set (use the host's structured-question UI if available; otherwise a numbered list). Show the proposed default from `{workflow.defaults}` for each and accept "use defaults".
|
|
20
|
+
|
|
21
|
+
1. **Model tiers (tier-abstract — critical for disconnected/non-Claude runtimes).**
|
|
22
|
+
First ask: *what models does this runtime actually expose?* Then map:
|
|
23
|
+
- `{review_model}` — deep reasoning tier (create-story, code-review, edge-case-hunter, epic adversarial review). Default: `{workflow.defaults.review_tier_model}`.
|
|
24
|
+
- `{exec_model}` — execution tier (dev-story, fix loops, e2e). Default: `{workflow.defaults.exec_tier_model}`.
|
|
25
|
+
- If only ONE model is available (air-gapped local model, or a single-provider CLI), **collapse both tiers to it** and note that tier separation is disabled.
|
|
26
|
+
- If the runtime is not Claude (e.g. Gemini, Codex, a local model) or does not support per-subagent model selection, record the mapping anyway but note it is **best-effort**: subagents will use whatever model the host assigns. Never block on this.
|
|
27
|
+
|
|
28
|
+
2. **Parallelism strategy** — default `{workflow.defaults.parallelism_strategy}`:
|
|
29
|
+
- `waves` (recommended): dependency-aware; independent stories run in parallel, dependents wait for their predecessors to merge.
|
|
30
|
+
- `sequential`: one story fully done before the next.
|
|
31
|
+
- `full`: all stories at once (warn: ignores dependencies; high merge-conflict / broken-build risk).
|
|
32
|
+
|
|
33
|
+
3. **Max parallel stories per wave** — default `{workflow.defaults.max_parallel_stories}`. Cap to what the host can sanely run concurrently.
|
|
34
|
+
|
|
35
|
+
4. **Fix-loop cap** — default `{workflow.defaults.fix_loop_cap}`. Max review→fix→re-review rounds before a story is escalated as `blocked`.
|
|
36
|
+
|
|
37
|
+
5. **Release gates** — confirm both default to ON: pause before npm publish (`{workflow.defaults.gate_before_publish}`) and before the epic PR (`{workflow.defaults.gate_before_pr}`). Confirm `{workflow.defaults.npm_dist_tag}` (default `beta`) and the version bump (default `{workflow.defaults.version_bump}`).
|
|
38
|
+
|
|
39
|
+
6. **Test command** — the project's real test/build gate for the package-integrity check (step-05). Propose `npm run build:plugin` plus the targeted test subset; confirm. (Note: bare `npm test` has a known pre-existing CRLF failure on Windows — see step-05; do not rely on its exit code alone.)
|
|
40
|
+
|
|
41
|
+
## 3. Record the resolved configuration
|
|
42
|
+
|
|
43
|
+
Write the resolved config into the Run Ledger header and mirror it to
|
|
44
|
+
`{implementation_artifacts}/epic-runs/<epic-id>/run-ledger.md`:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Epic: <id> — <title>
|
|
48
|
+
Stories: <n> ( <ids…> ) skipped(done): <ids…>
|
|
49
|
+
review_model: <model> exec_model: <model> (tiers collapsed: yes/no)
|
|
50
|
+
strategy: <waves|sequential|full> max_parallel: <n> fix_cap: <n>
|
|
51
|
+
gates: publish=<on/off> pr=<on/off> dist-tag=<tag> bump=<bump>
|
|
52
|
+
test_gate: <command(s)>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 4. Confirm and proceed
|
|
56
|
+
|
|
57
|
+
Present the resolved config in one compact block and **HALT for a single go/no-go confirmation**. This is the last broad confirmation — after "go", stories run unattended through to the two release gates.
|
|
58
|
+
|
|
59
|
+
On "go": read fully and follow `./steps/step-02-plan-waves.md`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Step 02 — Right-Size Stories, Build the Dependency DAG, Compute Waves
|
|
2
|
+
|
|
3
|
+
**Goal:** Make the story set sound (INVEST-compliant, focused, appropriately small) and then turn it into an ordered set of execution waves so independent stories parallelize and dependents only start once their prerequisites are merged.
|
|
4
|
+
|
|
5
|
+
## 1. INVEST & story-sizing pre-pass
|
|
6
|
+
|
|
7
|
+
Before graphing dependencies, assess **every** non-skipped story against **INVEST**:
|
|
8
|
+
|
|
9
|
+
- **I**ndependent — minimal coupling to other stories (soft-couples become dependency edges in §2, not blockers).
|
|
10
|
+
- **N**egotiable — describes intent, not a frozen implementation.
|
|
11
|
+
- **V**aluable — delivers a discrete, demonstrable slice of user/system value.
|
|
12
|
+
- **E**stimable — small and clear enough to estimate with confidence.
|
|
13
|
+
- **S**mall — completable within a single focused pipeline run; **one** focused goal.
|
|
14
|
+
- **T**estable — has acceptance criteria that can be verified (and later turned into e2e tests).
|
|
15
|
+
|
|
16
|
+
**Sizing / focus heuristics — a story is "too long" and should be split if any hold:**
|
|
17
|
+
- it pursues more than one distinct goal, or its title contains "and" joining separable outcomes;
|
|
18
|
+
- it spans multiple unrelated modules/layers that could ship and be tested independently;
|
|
19
|
+
- its acceptance criteria are so numerous that they read like several stories stapled together;
|
|
20
|
+
- it cannot plausibly reach Definition of Done (implement + review + e2e) in one focused pass.
|
|
21
|
+
|
|
22
|
+
**When a story is too large or multi-goal:** split it into the smallest set of INVEST-compliant sub-stories, each with one focused goal and its own acceptance criteria. Preserve the original as a parent/epic-let reference, give sub-stories derived ids (e.g. `S3` → `S3a`, `S3b`), and carry over / refine dependencies. **Present the proposed split to the user and HALT for confirmation** before committing it to `sprint-status.yaml` (splitting changes the planned scope). Record the final, right-sized story set — it is the input to §2.
|
|
23
|
+
|
|
24
|
+
> This is the planning-time pass. The per-story pipeline (`references/story-pipeline.md`) re-checks INVEST after `bmad-create-story` and can still return `needs-split` if a story only reveals its true size once its spec is fleshed out — see step-04's handling.
|
|
25
|
+
|
|
26
|
+
## 2. Build the dependency graph
|
|
27
|
+
|
|
28
|
+
For every non-skipped story, resolve its dependencies into a directed graph (edge `A → B` means "A depends on B; B must merge first"). Sources of dependencies, in priority order:
|
|
29
|
+
|
|
30
|
+
1. Explicit `depends_on` / prerequisite fields in `sprint-status.yaml` or the story spec.
|
|
31
|
+
2. Stated dependencies in the epic / story prose ("requires the API from story X").
|
|
32
|
+
3. Shared-file heuristics: if two stories are known to edit the same module, treat them as a soft conflict (same-wave concurrency risk) and prefer to sequence them.
|
|
33
|
+
|
|
34
|
+
## 3. Detect cycles
|
|
35
|
+
|
|
36
|
+
Run a topological sort. **If a cycle exists**, STOP and report the cycle to the user — a circular dependency cannot be waved automatically. Offer to (a) break the cycle by merging the stories, or (b) force a user-specified order.
|
|
37
|
+
|
|
38
|
+
## 4. Compute waves by strategy
|
|
39
|
+
|
|
40
|
+
- **`waves`** (default): Wave *k* = all stories whose dependencies are all satisfied by waves `< k`. Within a wave, cap concurrent pipelines at `max_parallel_stories`; if a wave is larger, run it in batches.
|
|
41
|
+
- **`sequential`**: one story per wave, in topological order.
|
|
42
|
+
- **`full`**: a single wave of all stories (only if the user explicitly chose this; re-warn about conflict risk).
|
|
43
|
+
|
|
44
|
+
## 5. Present the plan
|
|
45
|
+
|
|
46
|
+
Show the wave plan compactly and record it in the Run Ledger:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Wave 1: S1, S2, S3 (independent)
|
|
50
|
+
Wave 2: S4 (needs S1), S5 (needs S2)
|
|
51
|
+
Wave 3: S6 (needs S4,S5)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Do **not** HALT here (the user already gave go in step-01) — but if the computed plan reveals a problem the user could not have anticipated (e.g. every story is sequential and the user expected parallelism, or a story has unresolved/dangling dependencies), surface it in one line and HALT for a decision.
|
|
55
|
+
|
|
56
|
+
Then read fully and follow `./steps/step-03-epic-branch.md`.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Step 03 — Create the Epic Feature Branch
|
|
2
|
+
|
|
3
|
+
**Goal:** Establish the integration branch for the whole epic, off the trunk, before any story work begins. This is the branch the final PR targets `main` from, and the branch every story branch merges back into.
|
|
4
|
+
|
|
5
|
+
## Branch topology (the contract)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
main
|
|
9
|
+
└── feature/epic-<epic-id> ← epic integration branch (this step)
|
|
10
|
+
├── feature/epic-<epic-id>-story-<s1> ← per-story branch (step-04, own worktree)
|
|
11
|
+
├── feature/epic-<epic-id>-story-<s2>
|
|
12
|
+
└── … each merges back into feature/epic-<epic-id>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- The **epic branch** is cut from `main` (this repo's trunk; confirm the trunk name — `main` here).
|
|
16
|
+
- Each **story branch** is cut from the **epic branch**, developed in its own worktree, and merged back into the epic branch when it passes its Definition of Done (step-04). Stories integrate with `--no-ff` so each story is one reviewable merge commit. No PR per story (the user approves only the epic PR).
|
|
17
|
+
- The single **epic PR** (step-06) is `feature/epic-<epic-id>` → `main`.
|
|
18
|
+
|
|
19
|
+
## Procedure
|
|
20
|
+
|
|
21
|
+
All git here follows `git-workflow-skill`. The only epic-specific override is the **base branch**: the epic branch is cut from the **trunk** (`main`), not from `dev`.
|
|
22
|
+
|
|
23
|
+
1. Follow `git-workflow-skill` to create the epic worktree + feature branch, with the base overridden to the trunk. Use its `start-feature.sh` if it accepts a base argument; otherwise use the skill's documented **manual** equivalent:
|
|
24
|
+
```bash
|
|
25
|
+
git fetch origin
|
|
26
|
+
# git-workflow-skill manual form, base overridden to the trunk:
|
|
27
|
+
git worktree add .worktrees/epic-<epic-id> -b feature/epic-<epic-id> main
|
|
28
|
+
```
|
|
29
|
+
(`.worktrees/` is gitignored in this repo. Confirm the trunk name first — `main` here. Ensure the skill's git hooks are installed so commit-message/branch protections apply.)
|
|
30
|
+
2. Record the epic worktree path and branch in the Run Ledger.
|
|
31
|
+
3. Story worktrees are created later, one per story, branched from `feature/epic-<epic-id>` — see step-04.
|
|
32
|
+
|
|
33
|
+
**Do not** write any non-git file outside a worktree from here on. All story output lands in story worktrees; all integration lands on the epic branch.
|
|
34
|
+
|
|
35
|
+
Then read fully and follow `./steps/step-04-run-waves.md`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Step 04 — Run the Waves (Parallel Per-Story Pipelines)
|
|
2
|
+
|
|
3
|
+
**Goal:** Execute each wave by spawning one subagent per story, each running the full per-story pipeline in its own worktree, then integrating passing stories back into the epic branch. This is the core of the orchestration.
|
|
4
|
+
|
|
5
|
+
## How subagents are used
|
|
6
|
+
|
|
7
|
+
- Spawn **one subagent per story** using the host's Agent/Task tool. Put all spawns for a wave (up to `max_parallel_stories`) in a **single response** so they run concurrently.
|
|
8
|
+
- Each subagent is **stateless w.r.t. this conversation** — it receives a self-contained prompt (the story-pipeline contract below) plus the paths it needs. It must not assume access to the orchestrator's context.
|
|
9
|
+
- Assign each subagent the model implied by the step it is running (`{review_model}` vs `{exec_model}`). Because a single subagent runs multiple BMAD skills across both tiers, prefer this split:
|
|
10
|
+
- If the host supports per-skill model switching inside one subagent, instruct it to use `{review_model}` for create-story/code-review/edge-case-hunter and `{exec_model}` for dev-story/fixes/e2e.
|
|
11
|
+
- If not, run the story as **two chained subagents**: an `{exec_model}` "builder" and a `{review_model}` "reviewer", handing the worktree between them.
|
|
12
|
+
- If model selection is unavailable (non-Claude / single-model runtime), run one subagent and note tiers are collapsed.
|
|
13
|
+
|
|
14
|
+
## Per-story pipeline (the contract every story subagent runs)
|
|
15
|
+
|
|
16
|
+
Give each story subagent the full contract in `references/story-pipeline.md` (skill-root–relative). The inline summary below is **illustrative only** — `references/story-pipeline.md` is the authoritative contract; if they diverge, the reference file wins. In summary, in the story's own worktree branched from the epic branch:
|
|
17
|
+
|
|
18
|
+
1. `bmad-create-story` → produce the context-filled story spec. [review tier]
|
|
19
|
+
2. `bmad-dev-story` → implement against the spec. [exec tier]
|
|
20
|
+
3. Parallel review: `bmad-code-review` **and** `bmad-review-edge-case-hunter`. [review tier]
|
|
21
|
+
4. Triage findings → if any are blocking, `bmad-dev-story` fix loop (cap `fix_loop_cap`), then re-review only the changed surface. [exec tier]
|
|
22
|
+
5. `bmad-qa-generate-e2e-tests` → generate e2e tests and run them. [exec tier]
|
|
23
|
+
6. Enforce the **Definition of Done** (review clean + e2e green + spec ACs met). Commit with Conventional Commits.
|
|
24
|
+
|
|
25
|
+
The subagent returns a structured result: `{story_id, status: merged-ready|blocked|needs-split, branch, worktree, commits, unresolved_findings[], split_proposal[], e2e_status, notes}`. It must **not** merge to the epic branch itself — the orchestrator integrates (step below) to keep merges serialized. A `needs-split` result means the story was found too large/multi-goal at spec time and was **not** implemented — the orchestrator handles the split (see below).
|
|
26
|
+
|
|
27
|
+
## Wave loop
|
|
28
|
+
|
|
29
|
+
For each wave in order:
|
|
30
|
+
|
|
31
|
+
1. **Spawn** the wave's story subagents in parallel (respect `max_parallel_stories`; batch if larger). Mark each story `in-progress` in the Run Ledger.
|
|
32
|
+
2. **Collect** results as subagents return. Update the Ledger per story.
|
|
33
|
+
3. **Handle `needs-split` results**: the story was found too large/multi-goal and was not implemented. Apply its `split_proposal`: present the proposed sub-stories to the user and **HALT for confirmation** (splitting changes planned scope), then add the confirmed sub-stories to `sprint-status.yaml`, replace the parent in the Ledger, recompute affected dependencies/waves (re-enter step-02's §2–§4 for just the new stories), and schedule the sub-stories into the current wave (if independent) or a later wave. Discard the parent's unused story worktree/branch via `git-workflow-skill` cleanup.
|
|
34
|
+
4. **Integrate** each `merged-ready` story into the epic branch, **one at a time** (serialized), from the epic worktree (use the epic worktree path recorded in the Run Ledger, not a re-derived guess). Use `git-workflow-skill` conventions; the merge into the epic branch is the epic-specific manual step:
|
|
35
|
+
```bash
|
|
36
|
+
git -C <epic-worktree> merge --no-ff feature/epic-<epic-id>-story-<sid>
|
|
37
|
+
```
|
|
38
|
+
- On a **merge conflict**: do not guess. Spawn an `{exec_model}` subagent scoped to resolve only that conflict against both stories' intent, or HALT and report if it cannot. Re-run that story's e2e after resolution.
|
|
39
|
+
- After a successful merge, run the project build/test gate (the step-01 `test_gate`) on the epic branch to catch cross-story breakage early. If it breaks, treat as a blocking finding against the just-merged story.
|
|
40
|
+
5. **Blocked stories**: a story that exhausts `fix_loop_cap` without converging, or whose e2e cannot pass, is marked `blocked` with its `unresolved_findings`. Do **not** silently drop it. Continue the epic with the rest, but record it for the step-05 report and the PR description. If a *downstream* story depends on a blocked story, mark the dependents `blocked (upstream)` and skip their wave entry.
|
|
41
|
+
6. Clean up each story worktree after its merge, per `git-workflow-skill` (manual form: `git worktree remove .worktrees/epic-<epic-id>-story-<sid>`).
|
|
42
|
+
|
|
43
|
+
**Persist the Run Ledger to disk** (`{implementation_artifacts}/epic-runs/<epic-id>/run-ledger.md`) after integrating each story and again at the end of each wave, so a crashed run can be resumed without redoing merged stories.
|
|
44
|
+
|
|
45
|
+
Proceed to the next wave only when the current wave's stories are all `merged` or `blocked`.
|
|
46
|
+
|
|
47
|
+
## After all waves
|
|
48
|
+
|
|
49
|
+
Record the final tally in the Run Ledger (merged / blocked / skipped) and persist it to disk. Then read fully and follow `./steps/step-05-epic-adversarial.md`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Step 05 — Epic-Level Adversarial Review & Package-Integrity Gate
|
|
2
|
+
|
|
3
|
+
**Goal:** Before any release action, prove that the assembled epic (all merged stories on the epic branch) aligns with requirements + architecture and did **not** break the `ma-agents` package. Operate on the integrated epic branch, not individual stories.
|
|
4
|
+
|
|
5
|
+
## 1. Adversarial alignment review — `bmad-review-adversarial-general` [REVIEW_MODEL]
|
|
6
|
+
|
|
7
|
+
Run a cynical, whole-epic review against the full diff `main...feature/epic-<epic-id>`:
|
|
8
|
+
- Does the implementation satisfy the epic's requirements and acceptance criteria?
|
|
9
|
+
- Does it conform to the project architecture / `project-context.md` and the always-load standards?
|
|
10
|
+
- Cross-story coherence: do the merged stories form a consistent whole, or did parallel development introduce contradictions, dead code, or duplicated abstractions?
|
|
11
|
+
- Did anything regress in adjacent, untouched areas?
|
|
12
|
+
|
|
13
|
+
Produce a findings report graded by severity. **Blocking** findings (requirement/architecture violation, regression, broken contract) must be remediated: spawn an `{exec_model}` fix subagent scoped to the finding, re-run the relevant story/epic tests, and re-review. Loop within reason; if blocking findings cannot be cleared, **HALT** and report to the user — do not proceed to release with known blocking findings.
|
|
14
|
+
|
|
15
|
+
## 2. Package-integrity gate (the "didn't break ma-agents" check)
|
|
16
|
+
|
|
17
|
+
Run the real gate on the epic branch — **not** bare `npm test` alone:
|
|
18
|
+
|
|
19
|
+
1. **Plugin build must pass:** `npm run build:plugin` (assembles `lib/bmad-extension-plugin/`). A failure here is a hard stop.
|
|
20
|
+
2. **Bundle-drift guard:** after building, confirm `lib/bmad-extension-plugin/` and the resolved `marketplace.json` are up to date with the source (`lib/bmad-extension/`). If this epic added/renamed skills or bumped `module.yaml`, the rebuilt bundle must be committed. CI enforces this ("Bundle Drift Guard") — catch it here first.
|
|
21
|
+
3. **Targeted tests:** run the test subset relevant to what the epic changed.
|
|
22
|
+
4. **Known pre-existing failure:** a full `npm test` on Windows exits non-zero due to long-standing MIL-498 template CRLF drift (halts around position 13) and also regenerates `.agents/`. **Do not** classify that specific known failure as an epic regression. Distinguish new failures from the baseline: if in doubt, run the same command on `main` and diff the failure set. Only *new* failures block.
|
|
23
|
+
|
|
24
|
+
Record the gate outcome (build: pass/fail, drift: clean/committed, tests: new-failures vs baseline) in the Run Ledger.
|
|
25
|
+
|
|
26
|
+
## 3. Gate decision
|
|
27
|
+
|
|
28
|
+
- All blocking adversarial findings cleared **and** package-integrity gate clean (no new failures, build green, no uncommitted bundle drift) → proceed.
|
|
29
|
+
- Otherwise → **HALT**, report exactly what is blocking, and let the user decide whether to fix-and-retry or stop.
|
|
30
|
+
|
|
31
|
+
On pass, read fully and follow `./steps/step-06-release.md`.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Step 06 — Gated Beta Publish & Epic PR
|
|
2
|
+
|
|
3
|
+
**Goal:** Ship a testable beta package and open the epic PR — both behind explicit human gates. These are the only two outward, hard-to-undo actions in the run.
|
|
4
|
+
|
|
5
|
+
## Self-review before anything (mandatory)
|
|
6
|
+
|
|
7
|
+
Per repo policy, run the `code-review` skill on the full epic diff (`main...feature/epic-<epic-id>`) and address its findings before opening the PR. This is in addition to the per-story reviews — it catches integration-level issues.
|
|
8
|
+
|
|
9
|
+
## GATE A — npm beta publish
|
|
10
|
+
|
|
11
|
+
Only if `{workflow.defaults.gate_before_publish}` (default ON). **HALT and ask the user to confirm** before running any publish command. Publishing is effectively irreversible (a version can be deprecated but not truly unpublished after 72h) and requires credentials/2FA.
|
|
12
|
+
|
|
13
|
+
On confirmation:
|
|
14
|
+
|
|
15
|
+
1. **Bump version** on the epic branch using the configured bump `{workflow.defaults.version_bump}`:
|
|
16
|
+
```bash
|
|
17
|
+
npm version {workflow.defaults.version_bump} --preid=beta --no-git-tag-version
|
|
18
|
+
```
|
|
19
|
+
(default bump `prerelease` → e.g. `3.14.0` → `3.14.1-beta.0`). Commit the bump.
|
|
20
|
+
2. **Rebuild the bundle** so `marketplace.json` carries the new version, and commit any drift: `npm run build:plugin`.
|
|
21
|
+
3. **Pack** — when `{workflow.defaults.pack_ignore_scripts}` is true (the default), pass `--ignore-scripts` to avoid the known Windows `prepare` tarball leak (a temp build dir leaking into the tarball):
|
|
22
|
+
```bash
|
|
23
|
+
npm pack --ignore-scripts # omit --ignore-scripts only if pack_ignore_scripts = false
|
|
24
|
+
```
|
|
25
|
+
Inspect the tarball contents (`tar -tzf <tgz>`) — confirm no stray temp/build directory is included.
|
|
26
|
+
4. **Publish** to the channel `{workflow.defaults.npm_dist_tag}` (default `beta`; requires npm auth + OTP/2FA; the user supplies the OTP at the gate — never hardcode it). Match the `--ignore-scripts` choice from the pack step:
|
|
27
|
+
```bash
|
|
28
|
+
npm publish --tag {workflow.defaults.npm_dist_tag} --ignore-scripts
|
|
29
|
+
```
|
|
30
|
+
If 2FA prompts, surface it to the user. Confirm the publish with `npm view <pkg> dist-tags`.
|
|
31
|
+
5. Tell the user the exact install line to test, e.g. `npm i ma-agents@beta` (or the resolved `@<version>`).
|
|
32
|
+
|
|
33
|
+
If the user declines GATE A: skip publish, continue to GATE B (the PR can still be opened without a published beta).
|
|
34
|
+
|
|
35
|
+
## GATE B — Epic Pull Request
|
|
36
|
+
|
|
37
|
+
Only if `{workflow.defaults.gate_before_pr}` (default ON). **HALT and ask the user to confirm** before opening the PR.
|
|
38
|
+
|
|
39
|
+
On confirmation, push the epic branch and open ONE PR (`feature/epic-<epic-id>` → `main`) following `git-workflow-skill`'s finish flow. The two epic-specific overrides vs. the skill's `finish-feature.sh` defaults: the PR **base is the trunk (`main`), not `dev`**, and there is **exactly one** PR for the whole epic (no per-story PRs). Use the skill's documented manual finish equivalent:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git -C <epic-worktree> push -u origin feature/epic-<epic-id> # <epic-worktree> = path from the Run Ledger
|
|
43
|
+
gh pr create --base main --head feature/epic-<epic-id> --title "feat(epic-<id>): <epic title>" --body-file <generated-body>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The PR body (generated from the Run Ledger) must include:
|
|
47
|
+
- Epic summary and link to the planning artifacts.
|
|
48
|
+
- Per-story table: status (merged / **blocked** / skipped), e2e status, fix rounds, any unresolved non-blocking findings.
|
|
49
|
+
- Adversarial review summary + package-integrity gate outcome.
|
|
50
|
+
- The published beta version + install line (if GATE A ran).
|
|
51
|
+
- An explicit **"Blocked / follow-up"** section if any story did not converge — never hide this.
|
|
52
|
+
|
|
53
|
+
Credential note: if the default git/`gh` token is rejected, a working PAT may live in the location recorded in memory ("GitHub push credentials location"); use it masked. Never echo tokens.
|
|
54
|
+
|
|
55
|
+
Do **not** merge the PR — the user approves and merges the epic PR themselves.
|
|
56
|
+
|
|
57
|
+
Then read fully and follow `./steps/step-07-report.md`.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Step 07 — Final Report & Cleanup
|
|
2
|
+
|
|
3
|
+
**Goal:** Leave the user with a complete, honest picture of the run and a clean working tree.
|
|
4
|
+
|
|
5
|
+
## 1. Present the run summary
|
|
6
|
+
|
|
7
|
+
From the Run Ledger, present (in `{communication_language}`):
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Epic <id> — <title> | <merged>/<total> stories merged
|
|
11
|
+
|
|
12
|
+
Stories
|
|
13
|
+
✓ S1 merged e2e: pass fixes: 1
|
|
14
|
+
✓ S2 merged e2e: pass fixes: 0
|
|
15
|
+
⚠ S3 BLOCKED <one-line reason + unresolved findings>
|
|
16
|
+
⏭ S4 skipped (already done)
|
|
17
|
+
|
|
18
|
+
Epic adversarial review : <pass | findings cleared: n>
|
|
19
|
+
Package-integrity gate : build ✓ drift ✓ tests: <new-failures: 0 vs baseline>
|
|
20
|
+
Beta publish : <version + install line | skipped/declined>
|
|
21
|
+
Epic PR : <url | not opened>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 2. Surface anything that needs the human
|
|
25
|
+
|
|
26
|
+
- List every `blocked` story and exactly what is unresolved — these are the user's follow-ups.
|
|
27
|
+
- Note any place the run HALTED and why.
|
|
28
|
+
- If the beta publish or PR was declined/skipped, state the exact commands to do it manually.
|
|
29
|
+
|
|
30
|
+
## 3. Cleanup
|
|
31
|
+
|
|
32
|
+
- Remove any remaining story worktrees: `git worktree remove .worktrees/epic-<epic-id>-story-<sid>` (and `git worktree prune`).
|
|
33
|
+
- Leave the **epic worktree and branch in place** until the user merges the PR — they may want to push fixes. After merge, the epic worktree can be removed with `git worktree remove .worktrees/epic-<epic-id>`.
|
|
34
|
+
- Persist the final Run Ledger to `{implementation_artifacts}/epic-runs/<epic-id>/run-ledger.md`.
|
|
35
|
+
|
|
36
|
+
## 4. Suggest next steps
|
|
37
|
+
|
|
38
|
+
Recommend `bmad-retrospective` for the epic once the PR merges, and (if any stories were blocked) `bmad-correct-course` to re-plan them.
|
|
39
|
+
|
|
40
|
+
This completes the workflow.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ma-agent-sqa
|
|
3
|
-
description: SQA Agent (
|
|
3
|
+
description: SQA Agent (Gadi) — Software Quality Assurance and MIL-STD-498 expert for project auditing, compliance verification, quality reporting, and defense documentation generation
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Agent:
|
|
6
|
+
# Agent: Gadi — Software Quality Assurance & Standards Expert
|
|
7
7
|
|
|
8
8
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
9
9
|
|
|
@@ -35,7 +35,7 @@ You must fully embody this agent's persona and follow all activation instruction
|
|
|
35
35
|
| # | Cmd | Action | Trigger | Skill |
|
|
36
36
|
|---|-----|--------|---------|-------|
|
|
37
37
|
| 1 | MH | Redisplay Menu Help | "menu", "help" | _(built-in)_ |
|
|
38
|
-
| 2 | CH | Chat with
|
|
38
|
+
| 2 | CH | Chat with Gadi about quality assurance or MIL-STD-498 | "chat", "quality" | _(built-in)_ |
|
|
39
39
|
| **— SQA Workflows —** | | | | |
|
|
40
40
|
| 3 | AU | Audit Project: Comprehensive quality audit across all project dimensions | "audit", "audit project", "run audit" | sqa-audit |
|
|
41
41
|
| 4 | IC | IEEE 12207 Compliance: Evaluate the project against IEEE/ISO/IEC 12207 software lifecycle processes | "ieee", "12207", "lifecycle compliance", "iso 12207" | sqa-ieee12207 |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type: agent
|
|
2
2
|
name: ma-agent-sqa
|
|
3
|
-
displayName:
|
|
3
|
+
displayName: Gadi
|
|
4
4
|
title: Software Quality Assurance & Standards Expert
|
|
5
5
|
icon: "🔍"
|
|
6
6
|
capabilities: "Software quality assurance, project auditing, process compliance, requirements traceability, sprint health, release validation, IEEE/ISO/IEC 12207 compliance, MIL-STD-498 document generation (SRS, SDD, SDP, OCD, SSS, STD, SSDD)"
|
|
@@ -3,7 +3,7 @@ ma-skills,anytime,SRE Agent,ma-agent-sre,,skill:ma-agent-sre,ma-agent-sre,false,
|
|
|
3
3
|
ma-skills,anytime,DevOps Agent,ma-agent-devops,,skill:ma-agent-devops,ma-agent-devops,false,bmm-devops,,"DevOps Engineer agent for CI/CD pipeline automation, Infrastructure as Code, and cloud-native technologies.",output_folder,"agent customization",
|
|
4
4
|
ma-skills,anytime,Cyber Agent,ma-agent-cyber,,skill:ma-agent-cyber,ma-agent-cyber,false,bmm-cyber,,"Cyber Security Analyst agent for vulnerability assessment, threat modeling, and system hardening.",output_folder,"agent customization",
|
|
5
5
|
ma-skills,anytime,ML Scientist Agent,ma-agent-ml,,skill:ma-agent-ml,ma-agent-ml,false,bmm-demerzel,,"Machine Learning Scientist agent for hypothesis-driven ML lifecycle with scientific rigor.",output_folder,"agent customization",
|
|
6
|
-
ma-skills,anytime,SQA Agent,ma-agent-sqa,,skill:ma-agent-sqa,ma-agent-sqa,false,bmm-qa,,"Software Quality Assurance agent (
|
|
6
|
+
ma-skills,anytime,SQA Agent,ma-agent-sqa,,skill:ma-agent-sqa,ma-agent-sqa,false,bmm-qa,,"Software Quality Assurance agent (Gadi) for project auditing, compliance verification, and quality reporting.",output_folder,"agent customization",
|
|
7
7
|
ma-skills,4-implementation,Generate SSS,mil498-sss,,skill:mil498-sss,bmad-mil-generate-sss,false,bmm-mil498,,"Generate a MIL-STD-498 System/Subsystem Specification (SSS).",output_folder,"MIL-498 document",
|
|
8
8
|
ma-skills,4-implementation,Generate SSDD,mil498-ssdd,,skill:mil498-ssdd,bmad-mil-generate-ssdd,false,bmm-mil498,,"Generate a MIL-STD-498 System/Subsystem Design Description (SSDD).",output_folder,"MIL-498 document",
|
|
9
9
|
ma-skills,4-implementation,Generate OCD,mil498-ocd,,skill:mil498-ocd,bmad-mil-generate-ocd,false,bmm-mil498,,"Generate a MIL-STD-498 Operational Concept Description (OCD).",output_folder,"MIL-498 document",
|
|
@@ -47,6 +47,7 @@ ma-skills,4-implementation,SQA Audit,sqa-audit,,skill:sqa-audit,sqa-audit,false,
|
|
|
47
47
|
ma-skills,4-implementation,IEEE 12207 Compliance,sqa-ieee12207,,skill:sqa-ieee12207,sqa-ieee12207,false,bmm-qa,,"Evaluate the project against IEEE/ISO/IEC 12207:2017 software lifecycle processes — produces a compliance matrix and gap analysis report.",_bmad-output,"compliance report",
|
|
48
48
|
ma-skills,4-implementation,Create Bug Story,create-bug-story,,skill:create-bug-story,create-bug-story,false,bmm-dev,,"Create a structured bug story from a detected defect and add to backlog.",_bmad-output/implementation-artifacts,"bug story",
|
|
49
49
|
ma-skills,4-implementation,Dev Story,bmad-dev-story,,skill:bmad-dev-story,bmad-dev-story,false,bmm-dev,,"Execute story implementation following a context filled story spec file.",_bmad-output/implementation-artifacts,"story implementation",
|
|
50
|
+
ma-skills,4-implementation,Dev Epic,bmad-dev-epic,,skill:bmad-dev-epic,bmad-dev-epic,false,bmm-dev,,"Orchestrate a full epic end-to-end with parallel subagents — per-story create/dev/review/edge-case/fix/e2e pipeline, dependency-aware waves, configurable model tiers, an epic-level adversarial + package-integrity gate, and gated beta publish + PR.",_bmad-output/implementation-artifacts,"epic run ledger + PR",
|
|
50
51
|
ma-skills,4-implementation,Sprint Planning,bmad-sprint-planning,,skill:bmad-sprint-planning,bmad-sprint-planning,false,bmm-sm,,"Bootstrap or update the unified sprint-status.yaml from epics with three sections (epics, backlog, sprints).",_bmad-output/implementation-artifacts,"sprint plan",
|
|
51
52
|
ma-skills,4-implementation,Generate Backlog,generate-backlog,,skill:generate-backlog,generate-backlog,false,bmm-sm,,"Generate or refresh the backlog section of sprint-status.yaml from epics and bug stories.",_bmad-output/implementation-artifacts,"backlog",
|
|
52
53
|
ma-skills,4-implementation,Add Sprint,add-sprint,,skill:add-sprint,add-sprint,false,bmm-sm,,"Create a new sprint entry in the sprints section of sprint-status.yaml with capacity limits, optional ISO dates, and auto-incremented ID.",_bmad-output/implementation-artifacts,"sprint plan",
|
|
@@ -172,7 +172,7 @@ After running all selected dimensions, compile a full audit report.
|
|
|
172
172
|
```
|
|
173
173
|
# SQA Audit Report
|
|
174
174
|
**Date:** {today's date}
|
|
175
|
-
**Auditor:**
|
|
175
|
+
**Auditor:** Gadi (SQA Agent)
|
|
176
176
|
**Scope:** {list of audited dimensions}
|
|
177
177
|
**Overall Status:** PASS | WARNING | FAIL
|
|
178
178
|
|
|
@@ -246,7 +246,7 @@ If yes, generate and save a remediation plan to:
|
|
|
246
246
|
```
|
|
247
247
|
# SQA Remediation Plan
|
|
248
248
|
**Date:** {today's date}
|
|
249
|
-
**Auditor:**
|
|
249
|
+
**Auditor:** Gadi (SQA Agent)
|
|
250
250
|
**Source Report:** sqa-audit-report-{YYYY-MM-DD}.md
|
|
251
251
|
**Scope:** {audited dimensions}
|
|
252
252
|
|
|
@@ -193,7 +193,7 @@ Evaluate each selected process group. For each process area, assign a compliance
|
|
|
193
193
|
|
|
194
194
|
### Group 4 — Organizational Project-Enabling Processes
|
|
195
195
|
|
|
196
|
-
Note to
|
|
196
|
+
Note to Gadi: For Group 4 items, briefly assess based on available evidence only. These are primarily organizational-scope and marked accordingly.
|
|
197
197
|
|
|
198
198
|
#### 4.1 Life Cycle Model Management (6.2.1)
|
|
199
199
|
- Is a defined software life cycle model being followed?
|
|
@@ -216,7 +216,7 @@ Compile the full compliance report.
|
|
|
216
216
|
```
|
|
217
217
|
# IEEE/ISO/IEC 12207:2017 Compliance Report
|
|
218
218
|
**Date:** {today's date}
|
|
219
|
-
**Auditor:**
|
|
219
|
+
**Auditor:** Gadi (SQA Agent)
|
|
220
220
|
**Standard:** IEEE/ISO/IEC 12207:2017 — Systems and software engineering — Software life cycle processes
|
|
221
221
|
**Scope:** {selected process groups}
|
|
222
222
|
**Overall Compliance Level:** COMPLIANT | PARTIAL | NON-COMPLIANT
|
|
@@ -332,7 +332,7 @@ If yes, generate and save a remediation plan to:
|
|
|
332
332
|
```
|
|
333
333
|
# IEEE/ISO/IEC 12207 Remediation Plan
|
|
334
334
|
**Date:** {today's date}
|
|
335
|
-
**Auditor:**
|
|
335
|
+
**Auditor:** Gadi (SQA Agent)
|
|
336
336
|
**Source Report:** sqa-ieee12207-report-{YYYY-MM-DD}.md
|
|
337
337
|
**Standard:** IEEE/ISO/IEC 12207:2017
|
|
338
338
|
|
|
@@ -157,7 +157,7 @@ Compile the full report in this structure:
|
|
|
157
157
|
```
|
|
158
158
|
# Requirements Quality Audit Report
|
|
159
159
|
**Date:** {today's date}
|
|
160
|
-
**Auditor:**
|
|
160
|
+
**Auditor:** Gadi (SQA Agent)
|
|
161
161
|
**Scope:** {selected document sources}
|
|
162
162
|
**Requirements Audited:** {total count}
|
|
163
163
|
**Overall Quality Score:** {X}/{Y} ({P}%)
|
|
@@ -216,7 +216,7 @@ If yes, save a remediation plan to:
|
|
|
216
216
|
```
|
|
217
217
|
# Requirements Quality Remediation Plan
|
|
218
218
|
**Date:** {today's date}
|
|
219
|
-
**Auditor:**
|
|
219
|
+
**Auditor:** Gadi (SQA Agent)
|
|
220
220
|
**Source Report:** sqa-requirements-quality-report-{YYYY-MM-DD}.md
|
|
221
221
|
|
|
222
222
|
---
|