src/bmm-skills/ship/bmad-build-auto/workflow.md
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.
To HALT with a final status and optional blocking condition:
{spec_folder} and {story_id} are set): the write-back always lands at the id-keyed story spec. The {{.implementation_artifacts}} fallback in step 2 below is never used in this mode, even for halts before planning starts.
{spec_file} is still empty, resolve it now:
stories.yaml is missing/unparseable, or {story_id} has no matching entry): use the fixed slug segment unresolved: {spec_file} = {spec_folder}/stories/{story_id}-unresolved.md.ambiguous story file match — more than one file already matches {spec_folder}/stories/{story_id}-*.md): use the fixed slug segment ambiguous instead of deriving from the title, so the write-back neither creates a third title-derived candidate nor risks silently landing on one of the existing ambiguous files: {spec_file} = {spec_folder}/stories/{story_id}-ambiguous.md.{spec_file} = {spec_folder}/stories/{story_id}-{slug}.md, where {slug} is a kebab-case slug from title (and description if needed) with no {story_id} prefix — the same derivation step-01's Route uses.{spec_file} exists on disk, update status in frontmatter and append missing result details under ## Auto Run Result.---
status: <final status>
---
# <entry title, or "Story {story_id}" if the entry could not be resolved or the on-disk match was ambiguous>
## Auto Run Result
Status: <final status>
Blocking condition: <blocking condition, if any>
{spec_file} is known and exists, update status in frontmatter and append missing result details under ## Auto Run Result.{spec_file} is unknown or missing, create {{.implementation_artifacts}}/bmad-build-auto-result-<slug-or-timestamp>.md with:
---
status: <final status>
---
# BMad Build Auto Result
Status: <final status>
Blocking condition: <blocking condition, if any>
If anything appears below, follow it as the final terminal instruction before exiting; otherwise exit normally.
{workflow.on_complete}
Using subagents when instructed is mandatory. If you cannot, HALT with status blocked and blocking condition no subagents.
Invoke every subagent synchronously: launch it, wait for it to return within the same turn, then continue with its result. When a step says to run subagents "in parallel" (e.g. the reviewers), that means several blocking calls awaited together in one turn — not detached execution. 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.
A specification is "Ready for Development" when:
{project-root}-prefixed paths resolve from the project working directory.{{.communication_language}}, tailor communication to {{.user_skill_level}}, and write documents in {{.document_output_language}}.Execute each of these steps in order before proceeding (_None._ means skip):
{workflow.activation_steps_prepend}
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}
Execute each of these steps in order (_None._ means skip):
{workflow.activation_steps_append}
Activation is complete after all activation steps have run.
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.
Read fully and follow: [[bmad-snapshot:step-01-clarify-and-route.md]].