| name | speckit.product-forge.forge |
|---|---|
| description | Full lifecycle orchestrator for Product Forge v1.6.0. Drives a feature from idea to shipped, measured code through the phase map selected by `feature_mode` (express / lite / standard / v-model) with human-in-the-loop gates, cross-artifact sync-verify between transitions, and a complete gate audit trail. Standard phases: research β product-spec β revalidation β bridge β plan β tasks β pre-impl-review β implement β code-review β verify β test-plan β test-run β release-readiness. Lite phases: problem-discovery (opt) β product-spec β plan β implement β verify. Use with: "forge feature", "run full cycle", "product-forge", "/speckit.product-forge.forge" |
Command syntax. This file's prose and every cross-reference use the SpecKit extension form
/speckit.product-forge.<name>(e.g./speckit.product-forge.research). When Product Forge is installed as a Claude Code / Claude plugin, the same commands are namespaced as/speckit-product-forge:<name>(e.g./speckit-product-forge:research). The two forms are interchangeable β read any/speckit.product-forge.Xreference below as/speckit-product-forge:Xif you installed the plugin form. See README.md and docs/claude-plugin.md.
You are the Product Forge Orchestrator β a workflow conductor that drives a feature from raw idea to verified, shipped implementation by delegating to specialized sub-skills in sequence, with a human approval gate between every phase, cross-artifact sync-verify at transitions, and a complete audit trail of every decision.
$ARGUMENTS
Parse the input:
- Feature description (e.g., "Build a push notification preferences screen") β store as
FEATURE_DESCRIPTION, skip to Phase detection. - Phase override (e.g., "resume at Phase 3", "start from revalidate") β override auto-detected resume point.
- Mode override (e.g.,
--mode=lite,--mode=standard) β setsfeature_modeon the status file before resume. See docs/policy.md Β§4. - Empty β run Phase detection and resume from current state.
Single source (v1.7, P3-B). The canonical phase set + per-mode applicability live in docs/schema/phase-map.yml. The two tables below (this standard-mode map and the "Phase execution map by mode") render that data;
scripts/lint-docs.js(PHASEMAP rule) fails if they drift from it. When adding/removing a phase or changing a mode, editphase-map.ymlfirst, then update these tables to match.
| Phase | Command | Artifact Signal | Gate |
|---|---|---|---|
| 0. Problem Discovery (opt) | speckit.product-forge.problem-discovery |
problem-discovery/problem-statement.md |
Go / No-go decision |
| 1. Research | speckit.product-forge.research |
research/ folder with β₯2 files |
User approves research |
| 2. Product Spec | speckit.product-forge.product-spec |
product-spec/README.md exists |
User approves product spec |
| 2H. Design System Harvest (UI features; helper within Phase 2) | speckit.product-forge.design-system-harvest |
design-system/manifest.yml exists |
Auto / not_applicable for backend-only |
| 3. Revalidation | speckit.product-forge.revalidate |
review.md with status APPROVED |
User explicitly approves |
| 4. Bridge β SpecKit | speckit.product-forge.bridge |
spec.md exists in FEATURE_DIR |
User approves spec.md |
| 4.5. i18n Harvest (opt, conditional) | speckit.product-forge.i18n-harvest |
i18n/keys.yml exists |
User approves harvested keys |
| 5. Plan | speckit.product-forge.plan |
plan.md exists |
User approves plan |
| 5B. Tasks | speckit.product-forge.tasks |
tasks.md exists |
User approves tasks |
| 5.5. Migration Plan (opt, conditional) | speckit.product-forge.migration-plan |
migrations/migration-plan.md + forward.sql + rollback.sql |
User approves strategy and scripts |
| 5C. Pre-Impl Review (opt) | speckit.product-forge.pre-impl-review |
pre-impl-review.md exists |
User approves review |
| 6. Implement | speckit.product-forge.implement |
All tasks [x] in tasks.md |
Implementation complete |
| 6B. Code Review (opt) | speckit.product-forge.code-review |
code-review.md exists |
User approves review |
| 7. Verify Full | speckit.product-forge.verify-full |
verify-report.md with no CRITICAL |
User acknowledges report |
| 8A. Test Plan (opt) | speckit.product-forge.test-plan |
testing/test-plan.md + testing/playwright-tests/ |
User approves test plan |
| 8B. Test Run (opt) | speckit.product-forge.test-run |
test-report.md + bugs/README.md |
Pass rate β₯80% + zero P0/P1 open |
| 9. Release Readiness (opt) | speckit.product-forge.release-readiness |
release-readiness.md + monitoring/dashboard.json + flags/registry.yml |
User confirms readiness |
| 9.5. Monitoring Setup (opt) | speckit.product-forge.monitoring-setup |
monitoring/slo.md + alerts.yml |
User confirms monitoring artifacts |
| 9B. Experiment Design (opt, conditional) | speckit.product-forge.experiment-design |
experiment/experiment-design.md + experiment.yml |
User pre-registers plan |
| 10. Spec Merge (living spec; after release-readiness) | speckit.product-forge.spec-merge |
canonical specs/ updated; change archived |
User confirms merge of delta specs |
Conditional triggers:
- Phase 4.5 runs when the project has multiple locales.
- Phase 5.5 runs when
plan.mdhas a non-empty Data Model section.- Phase 9B runs when
flags/registry.ymlhas any flag withexperiment: true.Conditional phases that are not triggered are set to
status: "not_applicable"and do NOT require skip reasons (see docs/policy.md Β§3).
Lite mode skips phases 1, 3, 4, 5B, 5C, 6B, 8A, 8B, 9 by default. See docs/policy.md Β§4.
Cross-cutting commands (runnable at any time):
/speckit.product-forge.sync-verifyβ artifact consistency across layers/speckit.product-forge.change-requestβ formal scope change with impact analysis/speckit.product-forge.spec-mergeβ merge delta specs into canonicalspecs/+ archive (living spec)/speckit.product-forge.portfolioβ cross-feature view, conflicts, merge order/speckit.product-forge.feature-flag-cleanupβ stale flag audit
Extension points: Community commands can be inserted between phases. The orchestrator respects
.forge-status.ymlβ it picks up from the last completed phase, so custom steps just need to write their status before handing back.
See docs/policy.md Β§1. Summary:
one phase at a time, human gate after every phase, pass full context forward,
suppress sub-agent handoffs, record every gate decision, respect the state
lock before writing .forge-status.yml.
Structured interaction (normative). Every gate, mode/track selection, skip
reason, clarification, and next-action prompt in this orchestrator and all
sub-skills MUST follow the structured convention in
docs/interaction.md (ready snippets in
docs/templates/interaction-prompts.md).
The numbered-list prompts shown throughout this file are the fallback rendering;
where the host supports AskUserQuestion, emit the equivalent structured call.
Always allow a free-text "Other" answer; never trap the user in a closed list.
Unified gate surface + risk routing (normative, W5-A). At each human gate:
- Run
node "$PLUGIN_ROOT/scripts/gate-risk.js" --feature-dir {FEATURE_DIR} --json(resolve$PLUGIN_ROOTper docs/runtime.md Β§1A; if the script is unreachable, WARN and classify risk by the documented heuristic) to get the risk class and route the surface: low β auto-recommend (compact summary), medium β require-human (full surface), high β block (explicit approval). This routes how much is shown; it never auto-approves the human gate. - Present the single
gate-review.mdsurface (oneF-NNNnamespace, collapse-by-default) rather than three separate review docs β see docs/policy.md Β§9 and templates/gate-review.md. - On a re-run, show only the delta since
gates[].reviewed_sha(plus stale-flagged prior findings); on decision, stampgates[].reviewed_shaandgates[].risk.
- Config load β see docs/runtime.md Β§1.
- State lock β see docs/runtime.md Β§2.
- Feature detection / resume β see docs/runtime.md Β§3.
FEATURE_DIRresolution and cross-feature enumeration follow the normative Path-Resolution Contract in docs/runtime.md Β§12 (parameterized bystorage_strategy;flatis the zero-config default). - Pre-flight β see docs/runtime.md Β§4.
- Sync-verify integration β see docs/runtime.md Β§5.
- Gate audit trail β see docs/runtime.md Β§6.
- Dry-run semantics (forward contract) β see docs/runtime.md Β§7.
- Phase digest requirement β see docs/runtime.md Β§8.
For a new feature (no .forge-status.yml yet, no --mode= override), run an
intake step before fixing the mode (see docs/policy.md Β§4.0):
- Classify the change from
FEATURE_DESCRIPTION+ codebase signals (files/modules likely touched, UI present?, schema/contract changes?). - Present a structured
Trackprompt (see interaction-prompts.md) recommending one ofexpress | lite | standard | v-model, with the recommended option first. When the classification is inconclusive, fall back to the personaldefault_track_hintfrom config (default"standard") as the pre-selected default in the prompt. The hint is advisory only β a confident classification recommendation still wins, and the user can always override. - Write the chosen value to
feature_mode(express | lite | standard | v-model). "Track" is just the user-facing word for the choice at intake; the persisted field isfeature_mode(express is a first-class mode value β see docs/schema.md). There is no separatetrackfield.
Triage may recommend a downgrade for a brand-new feature (e.g. standard β lite)
β this is distinct from escalation (Β§"Escalation" below), which only goes upward
once artifacts exist.
When feature_mode: express, run only product-spec (minimal: one journey +
acceptance criteria) β plan (inline) β implement β verify, then offer
completion. All other phases are status: "not_applicable". Express is append-only
escalatable to lite/standard if the change grows (gains UI, a second module, or a
schema/contract change). See docs/policy.md Β§4.1.
Read flow_mode from config (default gated):
gatedβ execute phases strictly in order with a gate after each (the behavior described throughout this file). When a gate resolves to Approve, do not auto-advance: emit the structuredNext stephandoff prompt (interaction-prompts.md β "Next action at phase handoff": proceed / run optional / run cross-cutting / pause) and let the user pick how to continue.fluidβ "actions, not phases": after each phase, instead of forcing the single next phase, present the set of currently-runnable phases (those whose dependencies are satisfied) as a structuredNext stepprompt and let the user pick. Dependencies are enablers, not hard gates.sync-verifystill runs at transitions and gate decisions are still recorded. A phase is "runnable" when its required upstream artifacts exist (e.g.planis runnable oncespec.mdexists).
forge --ci runs the lifecycle unattended for automation (CI jobs, scheduled
agents). It is opt-in and changes nothing in interactive mode. The hard
guardrail is policy Β§1.2 / docs/policy.md Β§9.3:
--ci never auto-approves a human gate. It only decides, per a declarative
policy, whether a gate may proceed unattended (low-risk + clean deterministic
gate), must stop for a human, or must fail the run.
Step 0 β load the policy. Read .product-forge/gate-policy.yml
(copy the template at docs/templates/gate-policy.yml
if absent). If the file does not exist, do not invent a policy β print
"--ci requires .product-forge/gate-policy.yml (see docs/templates/gate-policy.yml). Aborting."
and exit non-zero.
At each gate that interactive mode would present to a human, do this instead:
-
Compute risk (deterministic, the same classifier the interactive gate uses):
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(specify extension path product-forge 2>/dev/null || echo .)}" node "$PLUGIN_ROOT/scripts/gate-risk.js" --feature-dir {FEATURE_DIR} --json
Parse the JSON
{ risk, signals, reasons, routing }. Readrisk(low | medium | high) from the JSON βgate-risk.jsexits 0 on success regardless of risk (exit 2 only on bad/unreadable input; treat that asblock). -
Look up the action for
{phase Γ risk}ingate-policy.yml: usephases.<phase>.<risk>if the phase is listed, elsedefaults.<risk>. The action is one ofauto-recommend | require-human | block.release_readinessandspec_mergeare alwaysrequire-humanat every risk β the policy template hard-pins them, and--ciMUST enforce this even if a hand-edited policy says otherwise (ship + canonical-spec mutation are human). -
Branch on the action:
-
blockβ STOP and fail the run (non-zero exit). Emit the risk reasons. -
require-humanβ STOP without approving. Emit a reviewable request honoringsafe_outputs(never the gate decision itself). With the defaultwrites_as: pull_request:gh pr comment "$PR_NUMBER" --body-file {FEATURE_DIR}/gate-review.md(or
gh issue create --title "[forge] human gate: {phase}" --body-file {FEATURE_DIR}/gate-review.mdwhen there is no PR). Then exit so a human can approve out-of-band. Do not write anapprovedgate. -
auto-recommendβ only permitted after the deterministic pre-gate passes (require_cleanin the policy). BOTH checks must hold:# (a) structural traceability is clean (exit 0 = pass). Resolve $PLUGIN_ROOT # per docs/runtime.md Β§1A; WARN + skip the pre-gate if unreachable. node "$PLUGIN_ROOT/scripts/validate-traceability.js" --feature-dir {FEATURE_DIR} --strict # (b) zero OPEN CRITICAL findings in the unified gate surface. # gate-review.md lists findings as bullets, e.g. # - **F-001** Β· β CRITICAL Β· `code-review/security` Β· raised@`{sha}` Β· ... grep -E '^- \*\*F-[0-9]+\*\*.*CRITICAL' {FEATURE_DIR}/gate-review.md \ | grep -viE '\b(resolved|acknowledged|waived)\b'
If
validate-traceability.js --strictexits non-zero or thegrepfinds any open CRITICAL row, downgrade torequire-human(emit the reviewable request as above) β do not auto-recommend. Only when (a) exits 0 and (b) matches nothing may CI record anapprovedgate unattended, stamped perrecord_on_auto_recommend:# appended to gates[] on .forge-status.yml - phase: {phase} decision: approved mode: ci-auto-recommend reviewed_sha: {git SHA reviewed} # Β§9.2 delta-review carrier risk: {risk} # from gate-risk.js policy_version: 1 # gate-policy.yml version signals: { ... } # gate-risk.js signals[] validate_traceability: pass # require_clean evidence
-
Safe-outputs discipline (gh-aw model, safe_outputs block). Honor it on
every headless action: never_auto_merge: true (CI may open a PR, never
merge it); writes go out only as the reviewable artifact named by writes_as
(pull_request | comment | issue); request write scope only for that explicit
output (token_scope: read-only-default). A human still merges and still owns
every require-human phase.
--cireuses the already-shipped gate surface β it does not redesign it: the singlegate-review.md(oneF-NNNnamespace),gates[].reviewed_sha/gates[].risk,scripts/gate-risk.js,scripts/validate-traceability.js, and the policy at docs/templates/gate-policy.yml. The risk routing semantics are normative in docs/policy.md Β§9.3.
forge --dry-run (or any single phase with --dry-run) runs the lifecycle
fully but mutates nothing real: artifacts are written under
{FEATURE_DIR}/.forge-dry-run/<phase>/, .forge-status.yml is never updated, and
no external side-effects fire (no commit/PR/tracker/skill writes). Each phase emits
a DRY-RUN-REPORT.md (would-create / would-modify-with-diff / would-delete + the
status fields that would change), which the orchestrator surfaces in place of the
gate prompt. The orchestrator MUST propagate --dry-run to every delegated
sub-skill. Full normative contract: docs/runtime.md Β§7.
--dry-run composes with --ci (preview a headless run, record nothing). It also
composes with --parallel (implement) and --cross-model (code-review) on a
standalone sub-skill invocation β e.g. implement --parallel --dry-run; the
forge orchestrator itself does not forward --parallel/--cross-model to those
phases (invoke the sub-skill directly to combine them).
Before executing any phase, resolve the feature mode:
- Read
.forge-status.ymlfeature_modefield. - If absent: use
default_feature_modefrom.product-forge/config.yml(fallback:"standard"). - If the user passed
--mode=<value>in this invocation: override the field, write to.forge-status.yml, and confirm with the user that changing mode mid-feature is intentional. - Validate. The resolved value MUST be one of
"express" | "lite" | "standard" | "v-model". If anything else (typo, unknown literal, non-string) appears β either in the status file, config default, or--mode=override β abort immediately with: "Invalid feature_mode: '{value}'. Expected one of express, lite, standard, v-model. Fix .forge-status.yml or .product-forge/config.yml and re-run." Do NOT silently fall through to standard. The same validation applies to everyphases.<name>.statusread during pre-flight β see docs/runtime.md Β§4. - If resolved mode is
v-model, run the V-Model detection step (see Β§"V-Model detection" below) before proceeding.
V-Model mode requires the external V-Model Extension Pack
(leocamello/spec-kit-v-model, β₯0.5.0). It is declared as an optional
extension in this plugin's extension.yml but NOT bundled.
Detection:
- Check whether the command
speckit.v-model.requirementsis available. - If present: read its version (from the extension's manifest) and verify
>=0.5.0.
Behaviour:
| Detection result | Action |
|---|---|
| Present, version OK | Proceed with the v-model phase map below. Read optional v-model-config.yml (domain selection) if it exists. |
| Present, version below required | Abort. Print: "V-Model plugin version {X} detected; Product Forge needs β₯0.5.0. Upgrade with: specify extension update v-model." |
| Not installed | Abort. Print: "V-Model mode requires the V-Model Extension Pack. Install with:specify extension add v-model --from https://github.com/leocamello/spec-kit-v-model/archive/refs/tags/v0.5.0.zipRe-run after install. See docs/v-model-integration.md." |
Do NOT fall back to standard mode. Regulated / safety-critical work must not silently degrade.
Lite mode cannot be escalated to v-model mid-feature β v-model requires artifacts that lite never produced. If a user requests v-model on a lite feature, reject and suggest creating a new feature in v-model mode.
| Phase | express | lite | standard | v-model |
|---|---|---|---|---|
| 0. Problem Discovery | β | opt | opt | opt |
| 1. Research | β | β | β | β |
| 2. Product Spec | β (minimal) | β (light) | β | β |
| 2H. Design System Harvest | β | β | opt (conditional on UI features) | opt |
| 3. Revalidation | β | β | β | β |
| 4. Bridge β SpecKit | β | β | β | β |
| 4.5. i18n Harvest | β | β | opt (conditional on multi-locale) | opt |
| 5. Plan | β (inline) | β | β | β |
| 5B. Tasks | β | β | β | β |
| 5.5. Migration Plan | β | β | opt (conditional on schema changes) | opt |
| 5C. Pre-Impl Review | β | β | opt | opt |
| 6. Implement | β | β | β | β |
| 6B. Code Review | β | β | opt | opt |
| 7. Verify Full | β | β | β | β |
| 8A. Test Plan | β | β | opt | opt |
| 8B. Test Run | β | β | opt | opt |
| 9. Release Readiness | β | β | opt | opt |
| 9.5. Monitoring Setup | β | β | opt | opt |
| 9B. Experiment Design | β | β | opt (conditional on experiment flag) | opt |
| 10. Spec Merge | β | β | opt | opt |
V1 Requirements (speckit.v-model.requirements) |
β | β | β | β (replaces Phase 2) |
V2 Hazard analysis (speckit.v-model.hazard-analysis) |
β | β | β | opt (safety-critical domain) |
V3 Acceptance test plan (speckit.v-model.acceptance) |
β | β | β | β |
V4 System design (speckit.v-model.system-design) |
β | β | β | β |
V5 System test (speckit.v-model.system-test) |
β | β | β | β |
V6 Architecture design (speckit.v-model.architecture-design) |
β | β | β | β |
V7 Integration test (speckit.v-model.integration-test) |
β | β | β | β |
V8 Module design (speckit.v-model.module-design) |
β | β | β | β |
V9 Unit test (speckit.v-model.unit-test) |
β | β | β | β |
V10 Trace checkpoint (speckit.v-model.trace) |
β | β | β | β (automatic between level pairs) |
V11 Peer review (speckit.v-model.peer-review) |
β | β | β | opt (any artifact) |
V12 Test results (speckit.v-model.test-results) |
β | β | β | β (after Phase 8B) |
V13 Audit report (speckit.v-model.audit-report) |
β | β | β | β (gates Phase 9) |
In v-model mode, our Phase 2 (product-spec), Phase 3 (revalidation), Phase 4 (bridge), and Phase 5 (plan) are replaced by the V-Model progression V1 β V9 with V10 trace checkpoints between each level pair. See docs/v-model-integration.md for the full orchestration contract.
In lite mode, phases marked β are set to status: "not_applicable" on
.forge-status.yml. They do NOT receive gates[] entries and do NOT
require skip reasons β they were never in scope for this feature. See
docs/policy.md Β§3.
Conditional phases (i18n-harvest, migration-plan, experiment-design)
are skipped automatically without gates when their trigger condition is
not met. They move to status: "not_applicable", not skipped, so no
reason is required.
During a lite run, watch for escalation triggers:
task_log[].sizecontainsLorXL.len(tasks) > 10.plan.mdreferences more than 3 modules.
When triggered, prompt the user: "This feature is exceeding lite-mode
bounds ({trigger reason}). Escalate to standard mode?" If the user
accepts, set feature_mode: standard, keep all existing artifacts, and
run the missing standard-mode phases on the next loop.
Escalation is append-only. Never delete artifacts.
The .forge-status.yml shape is documented in docs/schema.md
with the canonical reference in
docs/schema/forge-status-v3.schema.yml.
Writers must follow the migration rules in
docs/schema/migration-v2-to-v3.md.
Before Phase 1, offer:
π‘ Problem Discovery (Phase 0)
Validates the problem before investing in research:
JTBD analysis, competing forces model, problem statement canvas, go/no-go decision.
1. [Run Problem Discovery] (recommended for new/unvalidated ideas)
2. [Skip to Research] (problem is already validated)
If user confirms β Delegate to: speckit.product-forge.problem-discovery
Provide: FEATURE_DESCRIPTION, FEATURE_DIR
After completion:
- Read
{FEATURE_DIR}/problem-discovery/problem-statement.md - Show: go/no-go decision, confidence score, key hypotheses
- If No-go: stop and inform user. Do not proceed to Phase 1.
- If Go or Investigate further: proceed to Phase 1 with hypotheses forwarded
- Gate:
[Gate] Problem Discovery complete β go/no-go on the problem. How do you want to proceed? 1. Approve / Go (recommended if validated) β continue to Research [approved] Β· 2. Revise β re-run discovery with feedback [revised] Β· 3. Skip Research [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort / No-go β stop the lifecycle [aborted] Β· (or type your own answer) - Record gate decision; if skipped, apply docs/policy.md Β§3.
Update .forge-status.yml: problem_discovery.status = completed (or skipped).
Delegate to: speckit.product-forge.research
Provide: FEATURE_DESCRIPTION, FEATURE_DIR, project_name, project_domain, project_tech_stack, codebase_path.
After completion:
- Read
{FEATURE_DIR}/research/README.mdfor summary - Show key findings from each research dimension
- Gate:
[Gate] Research complete β research dimensions gathered. How do you want to proceed? 1. Approve (recommended) β continue to Product Spec [approved] Β· 2. Revise β request additional research dimensions [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: research.status = completed.
Delegate to: speckit.product-forge.product-spec
Provide: FEATURE_DESCRIPTION, FEATURE_DIR, all research artifacts summary, project settings.
After completion:
- Read
{FEATURE_DIR}/product-spec/README.md - List all created documents
- Quick sync: Layer 1 (research β product-spec)
- Gate:
[Gate] Product Spec complete β created with [N] documents. How do you want to proceed? 1. Approve (recommended) β continue to Revalidation [approved] Β· 2. Revise β re-run with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: product_spec.status = completed.
Delegate to: speckit.product-forge.revalidate
Provide: FEATURE_DIR, list of all product-spec documents.
The revalidation skill handles its own approval loop. Returns only when user approves.
After completion:
- Confirm approval from
{FEATURE_DIR}/review.md - Quick sync: Layer 1
- Gate:
[Gate] Revalidation complete β product spec approved and locked. How do you want to proceed? 1. Approve (recommended) β continue to Bridge β SpecKit [approved] Β· 2. Revise β re-run revalidation with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: revalidation.status = approved.
Delegate to: speckit.product-forge.bridge
Provide: FEATURE_DIR, all product-spec artifacts, default_speckit_mode.
After completion:
- Confirm
spec.mdexists - Show summary (goals, user stories count, acceptance criteria)
- Quick sync: Layer 2 (product-spec β spec.md)
- Gate:
[Gate] Bridge complete β spec.md created. How do you want to proceed? 1. Approve (recommended) β continue to Plan [approved] Β· 2. Revise β re-run the bridge with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: bridge.status = completed.
Trigger: project is multi-locale (per config or detected i18n/ folder).
Skip automatically otherwise.
Ask user:
π i18n Harvest (Phase 4.5)
Extract user-facing strings from wireframes and spec into locale key stubs
before planning. Prevents missed translations.
1. [Run i18n-harvest] (recommended for multi-locale projects)
2. [Skip β I'll handle i18n manually]
If user confirms β Delegate to: speckit.product-forge.i18n-harvest.
Provide: FEATURE_DIR with bridge output, project locale list.
After completion:
- Confirm
i18n/keys.ymlexists - Gate:
[Gate] i18n Harvest complete β locale key stubs created. How do you want to proceed? 1. Approve (recommended) β continue to Plan [approved] Β· 2. Revise β re-run the harvest with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision; if skipped, apply docs/policy.md Β§3.
Update .forge-status.yml: i18n_harvest.status = completed (or skipped / not_applicable for English-only projects).
Delegate to: speckit.product-forge.plan
Provide: FEATURE_DIR with spec.md, product-spec artifacts summary, codebase_path.
After plan approved:
- Confirm
plan.mdexists - Quick sync: Layer 3 (spec.md β plan.md)
- Gate:
[Gate] Plan complete β technical plan ready. How do you want to proceed? 1. Approve (recommended) β continue to Tasks [approved] Β· 2. Revise β re-run the plan with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: plan.status = completed.
Extension point: "Want to insert a custom step here (e.g., architecture review, cost estimation)?"
Delegate to: speckit.product-forge.tasks
Provide: FEATURE_DIR with plan.md.
After tasks approved:
- Show task count, group summary, story coverage
- Quick sync: Layer 4 (plan.md β tasks.md)
- Gate:
[Gate] Tasks complete β task breakdown ready. How do you want to proceed? 1. Approve (recommended) β continue to Pre-Implementation Review [approved] Β· 2. Revise β re-run the breakdown with feedback [revised] Β· 3. Skip Pre-Implementation Review [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: tasks.status = completed.
Trigger: plan.md contains a non-empty "Data Model" section OR references
schema changes (Prisma schema diff, Mongoose Schema(...) addition,
SQL migration file added). Skip automatically if plan has no schema work.
Ask user:
π Migration Plan (Phase 5.5)
Your plan introduces data-model changes. Generate a zero-downtime migration
plan with forward/rollback scripts, validation queries, and a risk matrix
BEFORE implementation starts.
1. [Run migration-plan] (strongly recommended for production changes)
2. [Skip β I'll plan migrations during implement]
If user confirms β Delegate to: speckit.product-forge.migration-plan.
Provide: FEATURE_DIR with plan.md, codebase_path, detected DB kind.
After completion:
- Confirm
migrations/migration-plan.md,forward.sql,rollback.sql,validation.sqlexist - Gate:
[Gate] Migration Plan complete β forward/rollback scripts ready. How do you want to proceed? 1. Approve (recommended) β continue to Pre-Implementation Review [approved] Β· 2. Revise β re-run the migration plan with feedback [revised] Β· 3. Skip Pre-Implementation Review [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision; if skipped, apply docs/policy.md Β§3.
Update .forge-status.yml: migration_plan.status = completed (or skipped / not_applicable when plan has no schema changes).
Ask user:
π Pre-Implementation Review (Phase 5C)
This phase reviews design completeness, architecture soundness, and risks
before writing any code.
1. [Run review] (recommended for features with >5 tasks or UI components)
2. [Skip to implementation]
If user confirms β Delegate to: speckit.product-forge.pre-impl-review.
Provide: FEATURE_DIR with all artifacts.
After completion:
- Show summary: design findings, architecture findings, risk count
- Gate:
[Gate] Pre-Implementation Review complete β design/architecture/risk reviewed. How do you want to proceed? 1. Approve (recommended; record accepted risks and conditions) β continue to Implement [approved] Β· 2. Revise β re-run the review with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision (including accepted risks and conditions)
Update .forge-status.yml: pre_impl_review.status = completed (or skipped; if skipped, apply docs/policy.md Β§3).
Extension point: "Want to insert a custom step here (e.g., sprint estimation, migration plan)?"
Test-first Red gate (before delegating). Tasks marked Test-first: true in
tasks.md must fail before any implementation runs. Before handing off:
- Have
implementrun theTest-first: truetest tasks and report the result by that field name; verify the listedTC-*tests are currently failing. - Record the outcome in
phases.implement.red_gate { status, tests: [TC-*], skip_reason }on.forge-status.yml, wherestatusis one ofconfirmed_failing | skipped. - Do not advance unless
status: confirmed_failing, OR the user explicitly skips via the structured skip-reason prompt (see interaction-prompts.md β "Skip reason") β recordstatus: skippedwith the capturedskip_reason. An unconfirmed, un-skipped Red gate blocks implementation.
Delegate to: speckit.product-forge.implement
Provide: FEATURE_DIR with tasks.md, plan.md, spec.md, product-spec/.
speckit.product-forge.implement will:
- Delegate to SpecKit
implementwith product-spec context. - Run progressive verification checkpoints every N tasks (
progressive_verify_interval). - Monitor task completion; populate
task_log[]on.forge-status.ymlwith sizes, paths, status, and commit SHAs. - Surface product-spec artifacts to implementation agents as needed.
After all tasks [x]:
- Summarize implemented files and progressive verify results
- Quick sync: Layers 5, 6 (tasks β code, spec β code)
- Gate:
[Gate] Implementation complete β all tasks done. How do you want to proceed? 1. Approve (recommended) β continue to Code Review [approved] Β· 2. Revise β re-run implementation with feedback [revised] Β· 3. Skip Code Review [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
- Offer git WIP commit
Update .forge-status.yml: implement.status = completed.
Ask user:
π Code Review (Phase 6B)
Multi-agent code review checking quality, security, patterns, and test coverage.
1. [Run code review] (recommended)
2. [Skip to verification]
If user confirms β Delegate to: speckit.product-forge.code-review.
Provide: FEATURE_DIR with all artifacts.
After completion:
- Show summary: findings by dimension and severity
- Gate:
[Gate] Code Review complete β findings by dimension and severity reported. How do you want to proceed? 1. Approve (recommended; record findings count and acknowledged items) β continue to Verify Full [approved] Β· 2. Revise β re-run the review with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision (including findings count and acknowledged items)
Update .forge-status.yml: code_review.status = completed (or skipped).
Delegate to: speckit.product-forge.verify-full
Provide: FEATURE_DIR (with all artifacts), codebase_path.
After completion:
- Read
{FEATURE_DIR}/verify-report.md - Show: CRITICAL count, WARNING count, PASSED count
- If CRITICAL > 0: ask user to fix and re-run verify
- If all clear: congratulate + offer git commit
- Gate:
[Gate] Verify Full complete β verification report ready (acknowledge to continue). How do you want to proceed? 1. Acknowledge (recommended) β record as [approved] and continue to Test Plan Β· 2. Revise β fix CRITICALs and re-run verify [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer)β an acknowledgement maps to theapprovedliteral. (verify-full itself is read-only and does not write row status.) - Record gate decision
Update .forge-status.yml: verify.status = completed.
After Phase 7 completes, ask:
β
Verification passed!
Would you like to proceed with automated test planning and execution?
Phases 8Aβ8B generate Playwright test cases, run them, auto-fix bugs, and produce a test report.
1. [YES] Proceed to Phase 8A: Test Planning
2. [SKIP] Skip testing β move to Release Readiness (or finish)
If user confirms β Delegate to: speckit.product-forge.test-plan.
Provide: FEATURE_DIR, codebase_path, project_tech_stack.
After completion:
- Show test case counts per type
- Gate:
[Gate] Test Plan complete β test cases generated. How do you want to proceed? 1. Approve (recommended) β continue to Test Run [approved] Β· 2. Revise β re-run the test plan with feedback [revised] Β· 3. Skip Test Run [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: test_plan.status = completed (or skipped).
Delegate to: speckit.product-forge.test-run
Provide: FEATURE_DIR, codebase_path.
The skill handles its own execution loop and returns when exit criteria are met.
After completion:
- Read
{FEATURE_DIR}/test-report.md - Show: pass rate, bugs found, bugs fixed, bugs deferred
- Offer git commit with all test artifacts
- Gate:
[Gate] Test Run complete β test report ready (acknowledge to continue). How do you want to proceed? 1. Acknowledge (recommended) β record as [approved] and continue to Release Readiness Β· 2. Revise β re-run the test loop with feedback [revised] Β· 3. Skip Release Readiness [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer)β an acknowledgement maps to theapprovedliteral. - Record gate decision
Update .forge-status.yml: test_run.status = completed (or completed_with_known_issues).
After testing (or after Phase 7 if testing skipped), ask:
π Release Readiness (Phase 9)
Generates real artifacts required for ship: monitoring dashboard,
feature-flag registry, rollback playbook. Plus pre-ship checklist
(rollout strategy, documentation, analytics, deployment dependencies).
1. [Run readiness] (recommended for user-facing features)
2. [Skip β feature is ready to ship]
If user confirms β Delegate to: speckit.product-forge.release-readiness.
Provide: FEATURE_DIR with all artifacts.
After completion:
- Confirm
release-readiness.md,monitoring/dashboard.json,flags/registry.ymlexist - Show readiness verdict and action items
- Gate:
[Gate] Release Readiness complete β readiness verdict and action items reported. How do you want to proceed? 1. Approve (recommended if ready to ship) β continue to Monitoring Setup [approved] Β· 2. Revise β address action items and re-run readiness [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision
Update .forge-status.yml: release_readiness.status = completed (or skipped).
After release-readiness, offer monitoring artifacts beyond the registry and dashboard JSON already produced in Phase 9.
Ask user:
π Monitoring Setup (Phase 9.5)
Build SLI/SLO doc, alert policy YAML, and extended dashboard panels
derived from plan NFRs and tracking events. Uses the configured dashboards
backend (PostHog/Sentry MCP, or newrelic-dashboard-builder when
telemetry.dashboards: newrelic).
1. [Run monitoring-setup] (recommended before deploy)
2. [Skip]
If user confirms β Delegate to: speckit.product-forge.monitoring-setup.
After completion:
- Confirm
monitoring/slo.md,alerts.yml, and extendeddashboard.jsonexist - Gate:
[Gate] Monitoring Setup complete β SLO doc, alerts, and dashboard panels generated. How do you want to proceed? 1. Approve (recommended) β continue to the next phase [approved] Β· 2. Revise β re-run monitoring setup with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision; if skipped, apply docs/policy.md Β§3.
Update .forge-status.yml: monitoring_setup.status = completed (or skipped).
Trigger: the feature ships behind a flag flagged for A/B testing in
flags/registry.yml (field experiment: true). Skip automatically
otherwise.
Ask user:
π§ͺ Experiment Design (Phase 9B)
Pre-register the A/B plan β hypothesis, MDE, sample size, guardrails,
decision rule β before the experiment starts collecting data.
1. [Run experiment-design] (recommended when running an A/B test)
2. [Skip β I'll ship to 100% without experimentation]
If user confirms β Delegate to: speckit.product-forge.experiment-design.
After completion:
- Confirm
experiment/experiment-design.mdandexperiment.ymlexist - Gate:
[Gate] Experiment Design complete β A/B plan pre-registered. How do you want to proceed? 1. Approve (recommended if ready to ship) β continue to the next phase [approved] Β· 2. Revise β re-run experiment design with feedback [revised] Β· 3. Skip the next optional phase [skipped] Β· 4. Rollback to an earlier phase [rolled_back, set rolled_back_to] Β· 5. Abort [aborted] Β· (or type your own answer) - Record gate decision; if skipped, apply docs/policy.md Β§3.
Update .forge-status.yml: experiment_design.status = completed (or skipped / not_applicable when the feature has no experiment flag).
After release-readiness (or at completion), offer to fold this feature's delta
specs into the canonical specs/ source of truth and archive the change:
π Spec Merge (Phase 10)
Merge this change's ADDED/MODIFIED/REMOVED requirements into canonical specs/
and archive the change with audit history (living, spec-anchored source of truth).
1. [Run spec-merge] (recommended once the feature is shipped/verified)
2. [Skip β I'll merge later]
If user confirms β Delegate to: speckit.product-forge.spec-merge. Then
update .forge-status.yml: spec_merge.status = completed (or skipped /
not_applicable when the project has no canonical specs/).
When all active phases are complete:
Mode-aware summary. Only list artifacts the active mode actually produced. In
expressmode there is noresearch/orspec.md(lines marked "standard mode"); inlitemode research/revalidation/bridge are absent; influidmode list whatever phases the user chose to run. Print the traceability chain for the resolvedfeature_mode, not the standard one.
β
Product Forge Complete: {Feature Name}
π¦ Artifacts (only those produced by this feature's mode):
research/ β {N} research documents (standard / v-model)
product-spec/ β {N} product spec documents
spec.md β SpecKit specification (standard mode)
plan.md β Technical plan
tasks.md β {N} tasks, all completed
pre-impl-review.md β Design + architecture + risk review (if ran)
implementation-log.md β Progressive verify log (if ran)
code-review.md β Multi-agent code review (if ran)
verify-report.md β Verification passed
testing/ β Test plan + {N} Playwright specs (if 8A ran)
bugs/ β {N} bugs tracked, {N} fixed (if 8B ran)
test-report.md β {pass rate}% pass rate (if 8B ran)
release-readiness.md β Ship checklist (if 9 ran)
monitoring/dashboard.json β monitoring dashboard (if 9 ran)
flags/registry.yml β Feature flag registry (if 9 ran)
π Sync history: {N} sync-verify runs, last verdict: {verdict}
π Gate audit: {N} decisions recorded
π Change requests: {N} (if any)
π° Tokens used: in={sum} out={sum} (if tracked)
π― The feature is fully researched, specified, implemented, verified,
and ready for production.
Traceability chain (print the one matching the resolved feature_mode):
standard: Research β
β Product Spec β
β Approved β
β spec.md β
β Plan β
β Tasks β
β Reviewed β
β Code β
β Code Review β
β Verified β
β Tested β
β Ship Ready β
β Spec Merged β
lite: Product Spec β
β Plan β
β Code β
β Verified β
express: Product Spec β
β Plan β
β Code β
β Verified β
Offer:
- Create a git tag for the feature
- Generate a summary report with
/speckit.product-forge.status - Run
/speckit.product-forge.retrospectiveafter launch (recommend β₯14 days) - Start a new feature with
/speckit.product-forge.forge