workflow.md
87 lines · skills/bmad-build-auto/workflow.md at bd70c64
Most marks come from matching words in the file, so treat them as pointers.
{% if workflow.route not in ("oneshot", "full", "auto") %}{{ halt("workflow.route must be oneshot, full, or auto, not " ~ workflow.route) }}{% endif %} {% if workflow.review not in ("none", "quick", "thorough", "auto") %}{{ halt("workflow.review must be none, quick, thorough, or auto, not " ~ workflow.review) }}{% endif %}
Build Auto Workflow
Goal: Turn intent into a hardened, reviewable artifact, without human interaction.
CRITICAL: If a step directs you to another snapshot file, read it fully and follow it. No exceptions.
Raw lines 1 to 8HALT
To HALT with a final status and optional blocking condition. The halts blocked plan supplied and dropped plan supplied write nothing, so the plan keeps its first reason or its dropped status: go straight to 3.
- A ticket from the tree (
{ticket_args}is set) with final statusblocked: runuv run {project-root}/_bmad/method/scripts/tickets.py --project-root {project-root} mark {ticket_args} blocked --blocked <blocking condition>, with each argument quoted for the shell, which writesstatus,blocked_at, andblocked_reasonto{plan_file}and creates it when there is none. Then append missing result details under## Auto Run Resultin{plan_file}. Ifmarkfails, follow 2 instead. - Otherwise:
- If
{plan_file}is known and exists, updatestatusin frontmatter and append missing result details under## Auto Run Result. - If
{plan_file}is unknown or missing, create{{ initiative_folder }}/bmad-build-auto-result-<slug-or-timestamp>.mdwith: ```markdown --- status: <final status> ---
# BMad Build Auto Result
Status: <final status> Blocking condition: <blocking condition, if any> ```
- Follow On Complete below, then stop the workflow.
On Complete
If anything appears below, follow it as the final terminal instruction before exiting; otherwise exit normally.
{{ workflow.on_complete }}
Raw lines 29 to 34Subagents
Using subagents when instructed is mandatory. If you cannot, HALT with status blocked and blocking condition no subagents.
Launch all the subagents a step calls for in one message — several blocking calls awaited together in the same turn — then wait for all their results before continuing; a step that calls for one subagent is that same message with one call. Never split a step's launches across messages, and never run one detached. Never run a subagent in the background / detached / async (e.g. run_in_background: true), and never end your turn to "await a completion notification." This workflow runs unattended: there is no event loop to resume a yielded turn, so a backgrounded subagent never hands control back and the run stalls. The only sanctioned way to end a turn is the HALT protocol above with an explicit terminal status.
READY FOR DEVELOPMENT STANDARD
A oneshot plan is "Ready for Development" when its intent is clear, complete, coherent, and sufficient to implement and verify, its route choice and reason are recorded, and all template frontmatter fields are preserved.
A full plan is "Ready for Development" when:
- Actionable: Every task has a file path and specific action.
- Logical: Tasks ordered by dependency.
- Testable: All ACs use Given/When/Then, and each is a check the implementer can prove it met without pointing at code.
- Surface-anchored: ACs observe the outermost surface the intent references — never a more internal proxy for it.
- Complete: No placeholders or TBDs.
- Sufficient: No known requirement, acceptance, dependency, or implementation gaps remain unresolved.
- Coherent: No unresolved ambiguities or internal contradictions.
Conventions
- Whenever this workflow captures or records a version-control revision, obtain the full canonical identifier directly from version control and preserve it verbatim.
On Activation
Raw lines 59 to 60Step 1: Execute Prepend Steps
Execute each of these steps in order before proceeding (_None._ means skip):
{{ workflow.activation_steps_prepend }}
Raw lines 61 to 66Step 2: Load Persistent Facts
Treat every entry below as foundational context you carry for the rest of the workflow run. Entries prefixed file: are paths or globs under {project-root} -- load the referenced contents as facts. All other entries are facts verbatim (_None._ means none):
{{ workflow.persistent_facts }}
Raw lines 67 to 72Step 3: Execute Append Steps
Execute each of these steps in order (_None._ means skip):
{{ workflow.activation_steps_append }}
Activation is complete after all activation steps have run.
Raw lines 73 to 80Workflow Execution
Follow the step files in order. Read one step fully, execute it, then load the next step only when directed. Do not skip, reorder, or pre-load steps.
Raw lines 81 to 84First Workflow Step
Read fully and follow: {{ rendered("step-01-clarify-and-route.md") }}.