by em
Unified SDD + parallel-implementation + dynamic-review workflow. /em-workflow:develop drives spec → design (conditional; fully-autonomous DESIGN.md + HTML mockups + design-system/tokens.yaml — implementers never invent design, refinement happens post-implementation via /em-workflow:design) → plan (task decomposition with complexity/domain tagging) → fully-parallel implementation in git worktrees driven as a work queue (background implementer launches with up to max_parallel_implementers in flight, notification-driven slot refill, machine-written journal.jsonl + a fail-open guard-hook net (full hook inventory: em-workflow/references/implement-phase.md); each implementer merges its own task via flock-serialized merge-task.sh, resolving conflicts by parent-side adoption; before touching any file an implementer records which tests were already failing, so a post-implementation failure is attributed by set difference rather than re-investigated after the fact, and it commits that baseline plus the AC → test mapping with the observed red per criterion to test-docs/{feature}/{task_id}.tests.yaml alongside the implementation) → dynamic review selection (rule floor + orchestrator discretion): each selected perspective dispatches ONE non-Claude primary reviewer taken from the front of that perspective's registry-defined chain (Codex and, when the separately-installed vertex-review plugin is present, Vertex AI MaaS via LiteLLM), falling back to the Claude generic reviewer only when every chain entry for that perspective is unavailable; once every perspective's result is final, a single Opus evaluator subagent evaluates the whole round and the orchestrator decides the next action (auto-fix / another round / rework / completion) → bounded auto-fix → retrospect collection. Every workflow artifact (workflow.yaml, REQUIREMENTS.md/SPEC.md/DESIGN.md/IMPLEMENTATION.md/VERIFICATION.md, tasks/, feature-docs/{feature}/reviews/roundN.yaml, retrospect.yaml) lives exclusively inside a per-feature integration worktree/branch (em-workflow/{feature}/integration) — each update is committed there immediately via commit-docs.sh, so the main working tree stays clean until the final merge and a crashed/interrupted run resumes by enumerating integration branches rather than scanning the main tree. workflow.yaml-sourced shell commands are user-approved once per project (approval store outside the repo) and enforced deterministically by a bundled PreToolUse hook. Develop start (Step 0) runs a git-setup gate: it probes gitleaks availability and idempotently installs a gitleaks pre-commit hook, aborting the workflow when gitleaks is absent. License consistency is a cross-workflow constraint: create-spec records the project license (SPDX id) into workflow.yaml, create-plan checks new library choices against it (conflict → replace the library or relicense, user's choice), and the review phase adds a license perspective whenever the diff touches dependency manifests. Every phase's dialogue and file writes are separated by role: the orchestrator is the sole writer of workflow.yaml and the sole caller of AskUserQuestion, while a requirements-analyst investigates and a spec-writer authors REQUIREMENTS.md/SPEC.md for create-spec, an autonomous designer worker owns the design step, an implementation-planner proposes IMPLEMENTATION.md/tasks/VERIFICATION.md, and a rework-planner plans review/verify-triggered follow-up tasks — every worker returns a structured envelope (question packets or workflow patches) instead of writing shared state directly. A --batch flag runs develop unattended for externally-triggered headless launches: every AskUserQuestion gate resolves mechanically — a gate carried in a worker's question packet resolves per references/question-resolution.md's batch resolution sequence against references/batch-policies.yaml (spec ambiguities settled via a bounded Codex consultation loop, command approvals auto-recorded with refusal patterns still hard-failing), while a gate that never passes through a question packet (git-setup failure, feature selection, the review diff-size gate, capped auto-rework for review residuals and verify failures, keep-branch completion, and the rest) resolves per references/batch-mode.md's Non-packet gates table — batch never merges, and opens a PR only when the launch passes --pr: by default it removes the integration worktree and leaves the branch for the human to merge or PR from the main tree; failures still stop with a report. Also provides /em-workflow:review for standalone reviews, /em-workflow:retrospect for cross-feature lesson mining, /em-workflow:design for interactive post-implementation design refinement, /em-workflow:git-setup for standalone idempotent git local-config setup, and /em-workflow:gen-license for dependency-license analysis + LICENSE generation/relicensing.
Claude Code21 Skills