All notable changes to Product Forge are documented here. Format follows Keep a Changelog. Versioning follows Semantic Versioning.
Nothing yet.
1.7.0 — "Ivysaur" — 2026-06-13
Feature wave (v1.7, 2026-06) — roadmap items P1-B/P1-C/P2-A/P2-C/P3-A/P3-B/P3-C from docs/improvements/2026-06-feature-roadmap.md, triangulated from the SpecKit-community gallery × Hermes runtime leverage × internal gaps. Every addition is executable + gated by a
lint-docs/doctorcheck and keeps the human gate. Followed by a two-reviewer independent code review whose findings are folded into the Fixed section below.
- Cross-model code review (P1-B) —
code-review --cross-model: exports the consolidatedgate-review.md+ git diff as a portablereview-package.md, has a different model review it out-of-band, and ingests its findings asF-NNN(source: cross-model).reviewed_by_modelstamped on the gate (CARRIER-enforced). Configreview.cross_model. - Constitution↔code standing drift layer (P1-C) —
sync-verifyLayer 10 andverify-fullLayer 11 re-assert the project architecture constitution against the code (resilience / EDA / layering / security), deterministic probe where possible. Newlint-docsLAYER-COUNT rule keeps the "N-layer" prose honest. All "9-layer" prose → 10. - Lessons → Hermes skills (P2-A) —
retrospectiveStep 5B promotes a lesson that recurs across ≥learning.min_recurrencefeatures into a reusableSKILL.mdviaskill_manage(skills_promoted[]carrier). Cross-project, cross-session. No-op outside Hermes. Configlearning.*. - Parallel implementation (P2-C) —
implement --parallelruns path-disjoint task groups viadelegate_task, proven independent by theportfolioconflict matrix; reconciled serially under the state-lock, single gate. policy §1.1 carve-out (intra-phase only). --dry-runis now normative (P3-A) — runtime §7 rewritten from a "planned" stub into an enforceable contract: write redirection to.forge-dry-run/, no status mutation, no external side-effects, aDRY-RUN-REPORT.mdper phase. Composes with--ci/--parallel/--cross-model.- Phase-map single source (P3-B) —
docs/schema/phase-map.ymlis the canonical phase set + per-mode applicability; the two forge.md tables now render it andlint-docsPHASEMAP asserts they agree (kills the phase-map drift class, mirroring the enum single-source). Completes step 3 of the schema-as-source design note. status --cost+scripts/cost-report.js(P3-C) — rolls up the per-phasetokens_in/out/tool_callstelemetry (recorded by the orchestrator at phase completion when the host exposes usage accounting; see runtime §8.1a) per feature and--portfolio. Dollar cost only when the caller supplies a rate; reports "no telemetry recorded" rather than zeros when the host provides none.lint-docsself-test 9→23;doctor12→15 checks; 12 helper scripts.
A two-reviewer pass (Node-scripts + doc-contract integrity) on the feature wave. All findings reproduced and fixed; each lint-rule fix carries a regression test.
- Phase-status scope (HIGH).
validate-traceability.js readCompletedPhasesmatchedname: completedlines anywhere, so a sibling block keyed by phase name (e.g.gate_summary:) falsely marked phases complete → spuriousmust_have.code/testserrors and a false--strictFAIL. Now scoped to thephases:block. - Layer-count report templates (HIGH).
sync-verify's report still emitted{1-9}/{N}/9after Layer 10 (P1-C) was added, so constitution↔code drift had no report slot. Fixed to{1-10}/{N}/{applicable}. - Gate carrier schema (P1-B).
reviewed_by_model+cross_model_findingswere stamped ongates[]but missing from the canonical schema and the runtime §6 audit trail — added to both. skills_promotedread-back (P2-A).retrospectiveStep 5B wrote the carrier but never read it; it now drives the create-vs-patch decision (idempotent across features).skills_promoted+cross_model_findingsadded to the lint CARRIER registry.- Token-telemetry producer (P3-C).
status --costconsumed per-phasetokens_*/tool_callsthat no step produced; added the producer hook in runtime §8.1a (host-dependent) and corrected the overstated "already captures" wording. --dry-runimplementation gap (P3-A). The §7 mandate was callout-deep; added explicit honor-notes to all 10 spine writing phases and a coverage clause (§7.3).- Lint-rule precision. LAYER-COUNT no longer false-positives on a line naming
both
sync-verifyandverify-full; SCRIPT-PATH is now per-occurrence (a barenode scripts/…is flagged even in a file that uses${PLUGIN_ROOT}elsewhere); PHASEMAP flags empty/word-form per-mode cells instead of skipping them. - Script hygiene.
cost-report.js num()usesNumber()(decimals + thousands separators no longer truncate);require.mainguards +module.exportsadded to cost-report/check-links/validate-traceability/doctor; a non-liststeps:block now warns instead of being silently ignored. - Docs.
.forge-dry-run/described as "add to your project.gitignore" (it lives in the consumer project);PRODUCT_FORGE_COST_RATE_IN/OUTdocumented in config.md; the--dry-run"composes with--parallel/--cross-model" note scoped to standalone sub-skill invocation. lint-docsself-test 18→23;validate-traceability20→23.
Repo-hardening + tooling pass on top of v1.6.0 — addresses the 2026-06 deep review (docs/improvements/2026-06-deep-review.md). No behavioural change to the lifecycle; closes a runtime-portability bug, a dead config switch, and residual doc drift, and adds a deterministic consistency gate so the whole class can't silently return.
- Bundled-script path resolution (P1).
forge.md,verify-full.md, andtest-run.mdinvokednode scripts/…/require('./scripts/…')by bare relative path, which does not resolve once the plugin is installed to~/.claude/plugins/cache(cwd = user's project). All call sites now route through${PLUGIN_ROOT}with a WARN-and-fall-back-to-LLM rule. New normative sectiondocs/runtime.md §1A"Locating bundled scripts". a11y_gatedead switch. The key was documented asaxe | nonebut no command read it (the axe floor was unconditional).test-plan.md §4now gates generation andtest-run.md §4.7gates execution ona11y_gate.how-it-works-v2.md §1still said "v1.5 adds…" → updated to the v1.6 narrative; removed the phantomdocs/adr/+docs/reviews/tree lines (those dirs were intentionally removed) and refreshed the doc/script tree to reality.- QA test plan quick-smoke said "18 phase rows" (actual 20), pinned
version: "1.5.0", and carried anexpress-omitting abort message → corrected and made executable (delegates todoctor.js/lint-docs.js; dynamic counts replace hard-coded ones). - Task-ID drift. Canonicalized on
T0NN(withTASK-NNNas an accepted alias) acrossschema.md §8,file-structure.md,traceability-matrix.md, andverify-full.md; added missingSEC-/F-rows to the ID registry. docs/claude-plugin.mdrelative-ref typo (./config-template.yml).
scripts/lint-docs.js— deterministic doc-corpus consistency linter (zero-dep,--selftest,--json). Rules: XREF (dangling refs + plugin-root escapes + anchors), CMD-COUNT, VERSION (extension.yml == plugin.json + stale narrative), ENUM, PHASEMAP, CONFIG-READER (dead-switch detection), SCRIPT-PATH (${PLUGIN_ROOT}enforcement), ID-FORMAT.scripts/doctor.js— aggregate self-check (every--selftest+ lint-docs- a live fixture smoke + release-blocking invariants). One command to gate a
change;
node scripts/doctor.js.
- a live fixture smoke + release-blocking invariants). One command to gate a
change;
.github/workflows/ci.yml— runsdoctoron every push/PR (+ best-effortclaude plugin validate). The repo's first automated consistency gate.fixtures/features/demo/— a known-good feature state (.forge-status.ymltraceability.yml+journeys.yml) that passesvalidate-traceability.js --strict; real-file test input fordoctorand CI.
docs/concept.md— 10-minute mental model + the producer→consumer wiring map for new contributors.docs/improvements/2026-06-schema-as-source-design-note.md— staged design for single-sourcing enum/count invariants from the schema (preventive fix for the drift class).forge.mdcommand-syntax note (extension/speckit.product-forge.Xvs plugin/speckit-product-forge:X)..gitignore: ignore.serena/and.remember/agent-runtime dirs.
docs/schema/enums.yml— the single canonical source for thefeature_mode/ gate-decision / phase-status / gate-policy-action enums.lint-docs.jsENUM now reads it and asserts the curated enumeration sites (schema.yml, schema.md, runtime.md, forge.md) list the full canonical set — true single-source enforcement, not a spot-check (step 2 of the schema-as- source design note).lint-docs.jsCARRIER rule — every cross-phase carrier field (red_gate,reviewed_sha,commit_sha, the doc↔code drift carrier,produced_by) must have BOTH a producer and a consumer that name it. Direct antidote to the "callout-deep" class (a field written but read by nobody).lint-docs.jsGATE-POLICY rule — validatesdocs/templates/gate-policy.yml: every phase key is a real phase and every routing value is a canonical action, soforge --cican't be driven by a malformed policy.validate-traceability.jsSTEP coverage — object-shaped journey steps ({id, tests}) are now checked individually (≥1 test oncetest_runcompletes), fulfilling the template's "each step should map to ≥1 test"; bare steps still fall under journey-level coverage. Demo fixture upgraded to object-shaped steps.scripts/check-links.js— best-effort external-link liveness checker (zero-dep, built-infetch,--selftest, ignores illustrative/placeholder/ own-repo URLs). Wired as acontinue-on-errorCI job; never blocks a merge.CONTRIBUTING.md— contributor workflow anchored ondoctor+concept.mdand the linter rules.doctornow also runs thecheck-linksself-test + STEP-aware fixture smoke (13 checks); lint-docs self-test 14/14, validate-traceability 20/20.
1.6.0 — "Bulbasaur" — 2026-05-29
First codenamed release 🌱 (Bulbasaur). A minor, fully additive release in three strands: (1) the SDD-flow wave — a spec-anchored living spec with a full traceability matrix, structured journeys → Playwright E2E, FE↔BE contract-first APIs, telemetry MCP wiring, a risk-scored two-layer gate review, and a first-class express track; (2) configurable documentation storage strategies, a single path-resolution contract, and a layered global config; (3) a repo-wide consistency/audit pass (56 findings). No breaking changes — with no new config keys set, behavior is byte-for-byte identical to v1.5.1. Schema v3 stays additive; the flat layout remains the zero-config default.
storage_strategyconfig key — selectable feature-root placement, all four values active:flat(default, today'sfeatures/<slug>/),domain-nested(features/<domain>/<slug>/),ddd(features/<context>/<slug>/, backed by afeatures/domains.ymlregistry), andworkspace(features/<workspace>/<slug>/, monoreposcope.primary). The internal artifact tree is invariant across every strategy. Seedocs/file-structure.md§"Storage strategies",config-template.yml, and the registry templatedocs/templates/domains.yml.- Path-Resolution Contract — a single normative rule
(
docs/runtime.md§12) for resolving a feature root from a slug (resolve) and enumerating all features (enumerate), parameterized bystorage_strategy, so every command/script shares one path rule instead of scattered globs. scripts/lib-paths.js— the executable form of the contract (resolveFeatureDir()+enumerateFeatures(), depth-tolerant and strategy-agnostic), with its own--selftest.gate-risk.js,validate-traceability.js, andmigrate-status-v2-to-v3.jsnow resolve/ enumerate through it, and the cross-feature commands (portfolio, status, sync-verify, feature-flag-cleanup, bridge) + single-feature resolvers (research, monitoring-setup, backfill) point at the contract. lib-paths reads theddddomains.ymlregistry (O(1), read-only; orchestrator heals it). All four strategies work end-to-end (scripts find nested features acrossdomain-nested/ddd/workspace;_archived/_portfolio/domains.ymlexcluded from enumeration; ambiguous bare slugs error with a qualified-ref hint).- Global (cross-project) config layer —
~/.product-forge/config.yml(canonical) with$XDG_CONFIG_HOME/product-forge/config.ymlfallback, layeredshipped defaults < global < project < per-feature < envwith deep-merge of nested keys, plus a config-key → layer classification table. Seedocs/config.md§"Global Configuration". - Documented previously-undocumented config keys:
supply_chain.license_allowlist,supported_locales,constitution_path.
- Repo-wide consistency pass (56 verified findings; see
docs/improvements/2026-05-system-audit.md): command count29 → 31; version coherence at1.6.0across README / CHANGELOG /extension.yml/ QA plan;sync-verifyconsistently described as 9-layer; status-enum (completed_with_known_issues), gate-enum (rolled_back), and supporting-command phase keys reconciled into the canonical schema; theapi_docssibling collision renamed toapi_docs_report. - Six command/template files whose inner triple-backtick code fences prematurely closed the outer block (bridge, code-review, product-spec, retrospective, tracking-plan, portfolio-report) now use 4-backtick wrappers; fixed a malformed GFM table in experiment-design.
- Three real helper bugs:
validate-traceability.js(substring task-ID matching → exact normalized equality; journey-coverage check no longer skipped when edges exist);gate-risk.js(countFindingsnow counts only open findings, so the CIno_open_criticalgate clears once findings are resolved);acquire-lock.sh(rejects unsafesession_idto prevent JSON/grep injection). release-readinesslicense-allowlist env override renamed to the documentedPRODUCT_FORGE_SUPPLY_CHAIN_LICENSE_ALLOWLISTprefix.
speckit.product-forge.design-system-harvest(Phase 2H, opt; UI features) — Harvests a read-only manifest of the project's in-code design system (components withCMP-ids, props, variants, stable selectors, in-code token refs, Storybook) so mockups, component decomposition, and UI verification are grounded in real components rather than abstractions. The in-code design system stays the single source of truth.speckit.product-forge.spec-merge(Phase 10 + cross-cutting; living spec) — Merges a feature's delta specs (ADDED/MODIFIED/REMOVED) into the canonicalspecs/<domain>/and archives the change with audit history (spec-anchored source of truth, OpenSpec model).
feature_mode: expressis now a first-class lifecycle mode alongsidelite,standard, andv-model. Express runs a minimal combined pass (product-spec minimal → plan inline → implement → verify) for trivial copy/config/one-liner changes, with everything else markednot_applicable. Escalation tolite/standardis append-only. Validated inforge.mdMode Resolution and the canonical schema.
- Canonical
specs/<domain>/living spec with stableREQ-NNNrequirement ids;bridgeemits delta specs (ADDED/MODIFIED/REMOVED) against it,change-requestpropagates deltas,backfillseeds canonical specs for brown-field entry, andspec-mergefolds approved deltas back in. - Live
traceability.ymlmatrix (REQ→US→JRN→FR→CMP→API→TASK→code→TEST→EVT) — seeded bytasks, filled byimplementas tasks complete, and consumed byverify-fullinstead of re-deriving the chain. New helperscripts/validate-traceability.jswith a--selftestentry point.
- Structured journeys are now first-class artifacts in
product-spec/journeys/journeys.yml(JRN/STEP/EDGE, GIVEN/WHEN/THEN), the authoritative E2E source of truth (docs/journeys.md+ journey-spec template).test-plangenerates Playwright specs directly fromjourneys.yml(selectors viacomponent-map.yml);test-runmaps failures back toJRN/STEP/EDGE.playwright-cliis the committed default runner (e2e_runnerconfig).
bridgedefines contract-first OpenAPI 3.1 + AsyncAPI (API-*ids) shared by front-end and back-end;api-docsbecomes validation/regeneration against the contracts and the implementation.verify-fullandsync-verifygain a contract-drift leg.
- Real telemetry via connected MCPs —
retrospectivepulls funnels/errors from PostHog/Amplitude and Sentry (NewRelic optional);monitoring-setupcreates real dashboards/alerts;experiment-designcan create the real PostHog experiment. - Two-layer code review —
code-reviewadds a machine-gate layer (lint/types/security/coverage) before the agent/human judgment dimensions, plus a doc↔code reconciliation dimension. - Risk-scored gate review —
gate-review.md/gate-policy.ymltemplates andscripts/gate-risk.js(with--selftest) drive a unifiedF-NNNgate-finding model and the--ciauto-recommend pre-gate. - WCAG-AA accessibility gate —
test-planemits one@axe-core/playwrightcheck per journey (JRN) andtest-runexecutes it.
sync-verifyexpanded from 7 to 9 layers — adds Layer 8 (FE↔BE contract drift) and Layer 9 (doc↔code reconciliation) on top of the original seven artifact-pair layers.verify-fulladds Layers 7–10 — journey↔E2E coverage, UI↔design-system, FE↔BE contract drift, and doc↔code reconciliation.- Test-first Red gate —
tasksorders test tasks before implementation andimplementenforces a Red gate (unit/contract tests written and confirmed failing) before implementing Must-Have stories. - All consumers point at structured
journeys/— every command and doc that read the old free-formproduct-spec/user-journey*.mdnow readsproduct-spec/journeys/journeys.yml. extension.yml— version1.6.0; registersdesign-system-harvestandspec-merge(31 commands total); description and tags updated for the v1.6 wave.config-template.yml/docs/config.md— documented v1.6 keys:flow_mode,e2e_runner,a11y_gate,telemetry,design_system,default_track_hint; v1.6 file-layout appendix (canonicalspecs/,contracts/,design-system/,journeys/,traceability.yml).
- Standard mode is 8 always-on core phases + 12 optional/conditional = 20 phase
slots (Phase Map = 20 rows; 19 have a
## Phasesection — 2H is a Phase-2 helper — plus a post-launch Retrospective);forge.md's Phase Map is the source of truth.
- No action required. Existing features continue to work; nothing on disk
moves. The flat feature layout remains the zero-config default. The first time
a v1.6-aware skill writes to a feature's
.forge-status.ymlit keepsschema_version: 3and may populate new optional fields as it runs.
1.5.1 — 2026-04-24
Docs-only patch. No behavioural change — closes a documentation gap on how users install the optional V-Model dependency.
- README.md — new "V-Model mode (optional)" subsection under
Requirements that names the external
leocamello/spec-kit-v-modelplugin (≥0.5.0), includes the install command, and spells out the "hard dependency only for v-model mode" rule with an explicit "no silent fallback" note for regulated/safety-critical work. - config-template.yml —
feature_modecomment expanded: thev-modelvalue now includes the install command for the external plugin and the abort-on-missing rule. - docs/config.md — rewrite the v-model bullet in
feature_modedocumentation to describe what Product Forge owns vs what the V-Model plugin owns, include the install command, and link todocs/v-model-integration.md.
No functional code change. The plugin already aborted with the install command when v-model mode was selected without the dependency; this release just makes the dependency visible to users before they try.
1.5.0 — 2026-04-19
Minor release (additive). Expansion of the lifecycle with portfolio view, brown-field entry, lite mode, full monorepo support, optional V-Model integration, unit + integration test phases, and operational readiness artifacts. Schema v3 for
.forge-status.ymlis additive over v2 — no breaking change to existing features; a lazy migration stampsschema_version: 3on first write.
speckit.product-forge.portfolio— Cross-cutting portfolio view. Scans everyfeatures/*/.forge-status.yml, produces feature table, file-conflict matrix, dependency graph (Mermaid), and suggested merge order. Read-only.speckit.product-forge.backfill— Brown-field entry. Reverse-engineers a feature folder from existing code: retro product-spec, plan, simplified tasks,.forge-status.ymlwithbackfilled: true, and a gaps-report of missing artifacts.speckit.product-forge.monitoring-setup(Phase 9.5, opt) — Produces real NewRelic-compatible dashboard JSON, alert rules, and SLI/SLO doc from plan NFRs and tracking-plan events. Wrapsnewrelic-dashboard-builder.speckit.product-forge.migration-plan(Phase 5.5, opt, conditional) — Generates zero-downtime migration plan withforward.sql,rollback.sql,validation.sql, backfill plan, and risk matrix when plan.md introduces schema changes. Wrapsdb-migration-manager/mongodb-ops.speckit.product-forge.i18n-harvest(post-bridge, opt) — Extracts user-facing strings from wireframes/spec, generates feature-namespaced locale keys, stubs TODO entries in every configured locale. Wrapsi18n-workflow.speckit.product-forge.experiment-design(Phase 9B, opt) — Forces a pre-registered A/B plan — hypothesis, MDE, sample size, exposure rules, guardrails, decision rule — before shipping a flag-gated feature. Wrapsfeature-flag-ab-testing.speckit.product-forge.feature-flag-cleanup— Cross-cutting stale-flag audit. Scans everyflags/registry.yml, cross-checks codebase, produces removal recipes for flags pastcleanup_after. Read-only; wrapsfeature-flag-manager.
codebase.pathsblock in project config, withworkspace_type(pnpm | yarn | npm | turbo | nx | rush | lerna | none) driving test- runner resolution. Legacycodebase_pathstill supported.scope.paths,scope.cross_workspace,scope.primaryon.forge-status.yml— names which workspaces a feature touches.- Workspace-prefixed paths in
tasks.mdandtask_log[].paths(e.g.backend:src/users.ts). - Per-workspace conflict matrix in
/portfoliowith grouped "By workspace" section. - Affected-only test execution in implement + test-run when running under nx / turbo / pnpm workspaces.
- Cross-workspace change propagation — scope widens automatically when a change request touches code outside the original scope; recorded as gate condition.
- Documented in runtime.md §9, config.md Paths.
optional_extensionsblock inextension.ymldeclaring leocamello/spec-kit-v-model (≥0.5.0) as an opt-in dependency.feature_mode: v-modelis now a real mode, not a stub. When selected,forge.mddetects the V-Model extension and delegates the middle of the lifecycle (V1–V13) to its 14 commands: requirements, acceptance, system / architecture / module design paired with system / integration / unit test plans, trace, peer-review, test-results ingestion, audit report.- No silent fallback: if V-Model plugin is absent, v-model mode aborts with the install command. Regulated work must not degrade.
- Domain selection via
v-model-config.yml(iec_62304 | iso_26262 | do_178c | generic). - New docs/v-model-integration.md covers the full phase map, detection, fallback rules, status-file additions.
- New docs/testing-strategy.md — universal (framework-agnostic) pyramid, when unit vs integration vs contract vs E2E, per-layer coverage criteria, anti-patterns, flaky-test handling, test-data management, monorepo-aware execution.
test-plan.md§5E Unit Tests (TC-UNIT-NNN) — derived from module boundaries + behavioural acceptance criteria. Framework-agnostic.test-plan.md§5F Integration Tests (TC-INT-NNN) — beyond endpoint contracts: service↔DB, service↔cache, event emitter↔listener, middleware stacks, cross-workspace integration.test-run.md§4E Unit and §4F Integration — non-browser execution with the same auto-fix loop; §4F handles testcontainers / docker-compose / in-memory / shared-DB isolation strategies.
.forge-status.ymlschema v3 — Additive over v2. New fields:feature_mode,backfilled,v2_native, phasestarted_at/completed_at/tokens_in/tokens_out/tool_calls/digest_path/skipped/skip_reason,task_log[](renamed from early-drafttasks[]to avoid collision withphases.tasks) withsize(XS/S/M/L/XL),paths, andcommit_sha,gates[].approvals,gates[].skip_reason,dependencies.depends_on/depended_on_by,role_approvals.solo_mode/required_roles_per_phase. Newstatusenum valuenot_applicablefor out-of-mode and backfilled phases. Full spec indocs/schema/forge-status-v3.schema.yml. Migration rules indocs/schema/migration-v2-to-v3.md. Optional helper scriptscripts/migrate-status-v2-to-v3.ts.- State-lock protocol —
.forge-status.yml.lockfile-based lock with TTL-based takeover. Prevents concurrent-writer corruption between the orchestrator and sub-skills. Documented indocs/runtime.md §2. - Per-phase digests — Every major phase (
research,product_spec,plan,tasks,implement,verify) now writes<phase>/digest.md. Runtime refuses to mark a phase completed without a digest. Downstream phases (verify-full, portfolio, retrospective) read digests first to keep context budgets small. Template:docs/templates/phase-digest.md. - Lite mode — New
feature_modefield selects a 5-phase map (problem-discoveryopt →product-spec→plan→implement→verify) for small features. Escalation to standard is append-only. Details indocs/policy.md §4. - Skip-reason policy — Skipping an optional phase now requires a
free-text reason when
require_skip_reason: true(default). Reason is persisted on both the phase and the gate entry. Enforced by all skippable commands. Details indocs/policy.md §3. - Learning loop —
.product-forge/lessons.mdappend-only log. Written byretrospectiveat launch close, read byresearchas a new dimension ("Prior lessons that apply") scored by tag overlap. Format indocs/lessons-format.md. - Drift budget —
sync-verifynow categorizes drift asstructural(always human-in-the-loop) orcosmetic(whitespace, ordering, stale dates). Opt-insync_verify.auto_resolve.cosmeticauto-fixes whitelisted drift only; structural drift never auto-resolves. Budget warns when cosmetic count exceeds threshold. - Release-readiness becomes an artifact producer — Step 1D now invokes
feature-flag-managerto produceflags/registry.yml; Step 3D invokesnewrelic-dashboard-builderto producemonitoring/dashboard.json,alerts.yml,slo.md. Graceful fallback when provider skills are missing.
commands/forge.mdrefactored. Operating rules moved todocs/policy.md; runtime flow (config, state lock, detection, resume, pre-flight, sync, gate audit, digest enforcement, context budget) moved todocs/runtime.md; status schema narrative moved todocs/schema.md. The orchestrator file now focuses on phase delegation and the mode- resolution entry. No behavioral change; cross-references only.config-template.yml— New keys:default_feature_mode,require_skip_reason,sync_verify.drift_budget.{cosmetic, structural},sync_verify.auto_resolve.cosmetic.research.mdStep 2.5 — Consults.product-forge/lessons.mdfor matching prior lessons and surfaces them inresearch/README.md.retrospective.mdStep 5 — Drafts lesson blocks, confirms with user, appends tolessons.md, records count inphases.retrospective.lessons_added.
Surfaced by the plugin test plan dry-run and closed before release:
- Broken historical refs removed from
CHANGELOG.md,README.md, anddocs/how-it-works-v2.md— pointed to archive directories that are not in this tree. - Policy.md §3 tightened — empty skip reasons under
require_skip_reason: truenow explicitly reject the gate and re-prompt; noskippedgate entry is written until a non-empty reason is supplied. - Enum validation added to
commands/forge.mdMode Resolution anddocs/runtime.md §4pre-flight — invalidfeature_mode,phases.<name>.status, orgates[].decisionvalues abort with a clear message instead of falling through silently. tasks.mdStep 4.1 — hard structural checks for task-ID uniqueness and monorepo workspace-prefix validation. Duplicates and unknown workspace names now abort the phase with a pointer to the offending line instead of propagating intotask_log[].- Test-plan self-references — smoke and Layer B criteria updated
to exclude
docs/qa/plugin-test-plan.md(which legitimately names the patterns being searched for).
- No action required. Existing features continue to work. First time a
v1.5.0-aware skill writes to a feature's
.forge-status.yml, it stampsschema_version: 3and may populate new optional fields as it runs. - Optional: run
scripts/migrate-status-v2-to-v3.tsonce to stamp every feature at once. - Monorepo support (GitHub issue #1) remains unchanged in this release.
Schema v3 fields reserve room for it (
dependencies,backfilled) but the codebase-path configuration remains single-path. Tracked for a follow-up release.
1.4.0 — 2026-04-04
Minor release. Spec quality and lifecycle hardening across research, bridge, plan, and revalidation phases. No new commands — every improvement extends an existing phase with stricter validation, richer artifacts, or new self-checks.
- Codebase Constraint Analysis in
research— the codebase-analysis dimension now captures concrete constraints (exact identifiers, payload interfaces, source paths) and Event / Message Patterns, so downstream phases see real integration shape instead of abstractions. - Dependency Discovery in
bridge(Step 2.5) — bridge now walks sibling features' status files and surfaces upstream dependencies before writingspec.md, preventing silent coupling. - EDA Event Verification in
bridge(Step 4.5) — when the plan touches an event bus, bridge verifies every produced event has a declared consumer contract and vice-versa; missing pairs are raised as CRITICAL before spec.md is approved. - Constitution Compliance auto-check in
plan(Step 3.5) — reads the project's constitution (configurable path:config.yml→.specify/memory/constitution.md→ skip) and auto-flags plan sections that violate declared principles. Results surfaced in the Approval Gate. - Feature-type detection in
bridge(shared_infrastructurevsend_user) driving a conditional section table — infrastructure features don't need UX sections, end-user features don't need internal-API contracts. Removes boilerplate without removing information. - Unified
review.mdformat inrevalidate— every revision now writes four sub-sections: Open Questions Resolution (OQR), Decision Log, Change History, and the agent-notes block. Step 4B-post runs a drift-check between product-spec and spec.md after each approval round.
commands/bridge.md—spec.mdtemplate extended with Prerequisites, NFR Measurement Contract, Codebase Constraints, Consumer Contract, Testing Specification. Step 5 self-checks expanded from 6 to 10 with conditional guards based on feature type.commands/plan.md— Approval Gate now shows constitution-compliance results alongside cross-validation status.commands/revalidate.md—review.mdinit extended with OQR table and Decision Log; Step 3D writes all four sub-sections per revision; drift-check runs automatically after every approval.config-template.yml—constitution_pathkey added (commented out by default) under the SpecKit Integration block.
- No action required. All changes are additive. Existing features keep working; new features (or re-runs of a phase) pick up the richer templates automatically.
1.3.0 — 2026-04-01
-
speckit.product-forge.sync-verify— Cross-cutting 9-layer artifact consistency checker:- Detects forward drift (earlier artifacts not reflected in later) and backward drift (later decisions that should update earlier)
- Checks 9 layers: research↔product-spec, product-spec↔spec.md, spec↔plan, plan↔tasks, tasks↔code, spec↔code, cross-links, FE↔BE contract drift, doc↔code
- Each drift item: severity (CRITICAL/WARNING/INFO), direction, proposed resolution, human approval
--quickmode runs automatically between forge phase transitions (configurable viaauto_sync_between_phases)--fixmode applies approved resolutions after user confirmation- Outputs:
sync-report.md,sync-report.json
-
speckit.product-forge.pre-impl-review(Phase 5C) — Combined design, architecture, and risk gate:- Design Review: state completeness (empty/loading/error/partial/offline), UX pattern compliance, accessibility pre-check, component reuse
- Architecture Review: structural checks, integration point validation, NFR coverage
- Risk Assessment: technical/scope/integration/rollback risks with likelihood×impact matrix
- Rollout strategy recommendation based on risk profile
- Optional for features with ≤5 tasks and no UI
- Outputs:
pre-impl-review.md
-
speckit.product-forge.code-review(Phase 6B) — Multi-agent code review:- 4 parallel review dimensions: Quality (SOLID, DRY), Security (OWASP surface scan), Patterns (vs codebase-analysis.md), Tests (coverage vs spec.md)
- Enriched with Product Forge context — not a generic linter
- Findings with CRITICAL/HIGH/MEDIUM/LOW severity and suggested code fixes
- Outputs:
code-review.md
-
speckit.product-forge.release-readiness(Phase 9) — Pre-ship checklist:- Feature flags & rollout: flag detection, rollout strategy, rollback plan
- Documentation: user docs, API docs status, changelog, migration guide
- Monitoring: metrics, alerts, dashboard panels, runbook
- Analytics: tracking plan status, event instrumentation
- Dependencies: environment readiness, infrastructure, security status
- Consolidates api-docs, security-check, and tracking-plan status
- Outputs:
release-readiness.mdwith READY/CONDITIONAL/NOT READY verdict
-
speckit.product-forge.change-request— Formal scope change management:- Captures change description, rationale, priority
- Impact analysis: which artifacts affected, effort delta, risk assessment
- Decision gate: Accept/Defer/Reject/Modify
- Propagates approved changes with
<!-- CR-NNN -->markers across all artifacts - Runs sync-verify after application
- Deferred changes logged in
backlog.md - Outputs:
change-log.md(append-only)
-
forge.md(major rewrite) — Now orchestrates 13 phases + 2 cross-cutting commands (was 9 phases):- Phase Map expanded with Phase 5C (Pre-Impl Review), Phase 6B (Code Review), Phase 9 (Release Readiness)
- Automatic quick sync-verify between every phase transition
- Gate audit trail: every gate decision recorded in
.forge-status.ymlgates:array - Schema migration: auto-detects v1
.forge-status.ymland migrates to v2 - Cross-cutting commands (sync-verify, change-request) surfaced in operating rules
-
implement.md(enhanced) — Progressive verification during implementation:- Mini-verify checkpoint every N tasks (configurable via
progressive_verify_interval) - Checks: task-code correspondence, spec AC alignment, unplanned changes, plan alignment
- Results logged in
implementation-log.md - CRITICAL drift pauses implementation with user options
- Handoff now suggests code-review as next step
- Mini-verify checkpoint every N tasks (configurable via
-
status.md(enhanced) — Displays new phases, gate audit trail, sync history, change requests -
.forge-status.ymlschema v2:- Added
schema_version: 2for migration detection - Split
plan_tasksinto separateplanandtasksfields - Added phase fields:
pre_impl_review,code_review,release_readiness,retrospective - Added
gates:array for audit trail - Added
sync_runs:section for sync-verify history - Added
change_requests:array for CR tracking
- Added
-
extension.yml— Version 1.3.0, 5 new command entries, 4 new tags -
config-template.yml— 3 new config keys:progressive_verify_interval(default: 3) — tasks between progressive verify checkpointsauto_sync_between_phases(default: true) — automatic quick sync at phase transitionsrelease_readiness(default: "optional") — required/optional/skip
-
docs/file-structure.md— Updated directory layout, schema v2 documentation, new naming conventions (CR-NNN, DRIFT-NNN, D-NNN, A-NNN, R-NNN) -
README.md— Updated lifecycle diagram, 20-command table, file structure, installation version
1.2.1 — 2026-03-30
speckit.product-forge.implement previously covered Phase 5 (plan), Phase 5B (tasks), and Phase 6 (implementation) as a single monolithic command. It is now split into three standalone, independently runnable commands:
speckit.product-forge.plan(new, Phase 5) — generatesplan.mdfromspec.md, cross-validates against product-spec, exits after approval. Extension point before tasks.speckit.product-forge.tasks(new, Phase 5B) — generatestasks.mdfromplan.md, cross-validates all US-NNN and FR-NNN coverage, exits after approval. Extension point before implementation.speckit.product-forge.implement(narrowed, Phase 6) — executes implementation fromtasks.mdonly, exits when all tasks are[x]. Extension point before verification.
Why: Community members can now insert custom steps between any of the three phases — architecture review, cost estimation, sprint planning, PR approval gates, external review workflows — without forking or patching the core commands.
Forge orchestrator updated: forge.md now delegates to plan → tasks → implement as three separate calls, with explicit extension point prompts between each.
.forge-status.yml schema updated: plan_tasks field replaced by separate plan and tasks fields.
Migration: If you call speckit.product-forge.implement directly and expect it to also run plan/tasks — update your workflow to call plan → tasks → implement in sequence.
1.2.0 — 2026-03-30
-
speckit.product-forge.problem-discovery(Phase 0) — validate the problem before any research begins:- JTBD analysis (functional / emotional / social job layers)
- Competing Forces model (Push + Pull vs Inertia + Anxiety)
- Problem Statement Canvas saved to
problem-discovery/problem-statement.md - User interview script with scoring rubric saved to
problem-discovery/interview-script.md - Go / Investigate further / No-go decision with confidence score
- Hypotheses H1–HN passed forward to Phase 1 research agents
-
speckit.product-forge.api-docs— generate production-ready API documentation fromplan.mdcontracts:- Auto-detects API framework (NestJS, Express, FastAPI, etc.) and existing OpenAPI setup
- Generates OpenAPI 3.1
openapi.ymlwith full request/response schemas and examples - Generates
postman-collection.jsonwith auto-token-save login request - Consistency check: plan.md contracts vs actual implementation (reports drift)
- Outputs:
api-docs/openapi.yml,api-docs/postman-collection.json,api-docs/consistency-report.md
-
speckit.product-forge.security-check— feature-scoped OWASP security audit:- Builds a threat model from
plan.md— only checks surfaces present in this feature - Covers: A01 Broken Access Control, A02 Crypto Failures, A03 Injection, A04 Insecure Design, A05 Misconfiguration, A07 Auth Failures, A08 Integrity Failures
- Scans for hardcoded secrets, missing ownership checks, mass assignment, missing rate limiting
- Outputs prioritized findings (Critical / High / Medium / Low) with code evidence and fix patterns
- Ship-readiness decision: ✅ Ready /
⚠️ Fix critical first / 🔴 Not ready
- Builds a threat model from
-
speckit.product-forge.tracking-plan— analytics tracking plan from user journeys:- Auto-detects analytics SDK (Mixpanel, Amplitude, PostHog, Firebase, Segment)
- Generates event taxonomy with property schemas, required/optional flags, and examples
- Defines conversion funnels and abandonment funnels mapped to product-spec success metrics
- Coverage matrix: each user story → key event → success metric
- Generates ready-to-paste typed SDK snippets for the detected framework
- Outputs:
tracking/tracking-plan.md,tracking/snippets.md
-
speckit.product-forge.retrospective— post-launch retrospective (run ≥14 days after ship):- Loads predicted KPIs from
research/metrics-roi.mdas the baseline - Queries NewRelic (via MCP) for real performance data since launch date
- Compares predicted vs actual: adoption, completion rate, latency, error rate, business metrics
- Research accuracy audit: were Phase 1 predictions correct?
- Lessons learned, open issues table, and next-step recommendations
- Closes the full lifecycle loop: Idea → Ship → Measure → Learn
- Loads predicted KPIs from
extension.yml: description updated to reflect full 15-command lifecycleextension.yml: added tagsanalytics,security,api-docs,jtbdREADME.md: commands table expanded to 15 commandsREADME.md: lifecycle diagram now includes Phase 0 (Problem Discovery) and post-implementation block (api-docs, security-check, tracking-plan, retrospective)README.md: file structure updated withproblem-discovery/,api-docs/,tracking/,security-check.md,retrospective.mdREADME.md: Why section updated to reflect the full 9-step value proposition
1.1.3 — 2026-03-28
README.mdInstallation section rewritten with properspecify extension add/updatecommands:- Install latest:
specify extension add product-forge --from .../archive/refs/heads/main.zip - Install pinned version:
specify extension add product-forge --from .../archive/refs/tags/v1.1.3.zip - Update:
specify extension update product-forge --from ... - Added post-install config setup instructions with
specify extension path product-forge
- Install latest:
1.1.2 — 2026-03-28
playwright-clias execution engine for Phase 8B (speckit.product-forge.test-run): agent now drives the browser interactively usingplaywright-cli open,playwright-cli click/fill/snapshot/screenshot,playwright-cli tracing-start/stop, andplaywright-cli -s=pf-auth state-save/loadfor auth session reuse- Dual execution model documented in
commands/test-plan.md:test-cases.md(primary, agent-driven viaplaywright-cli) vs.spec.tsfiles (CI/CD companion, run withnpx playwright test) test-cases.mdformat specification: each test case now uses a playwright-cli action table (# | Action | playwright-cli equivalent) so Phase 8B can translate steps mechanically without ambiguityplaywright-clidependency section inREADME.mdRequirements with install instructions and link to github.com/microsoft/playwright-cli- "How to Run Tests" section in generated
test-plan.mdnow documents both execution paths: agent-driven (/speckit.product-forge.test-run) and CI/CD (npx playwright test)
1.1.1 — 2026-03-28
- Command names updated to required
speckit.{extension}.{command}pattern (wasproduct-forge.*) - All 10 commands renamed:
speckit.product-forge.forge,speckit.product-forge.research, etc. - All internal cross-references in command files updated accordingly
1.1.0 — 2026-03-28
speckit.product-forge.test-plan— Phase 8A: Auto-detects test framework, ports, and env vars; generates smoke/E2E/API/regression test cases withTC-*-NNNIDs; writes runnable Playwright.spec.tsfiles with story traceability comments; initializesbugs/README.mddashboardspeckit.product-forge.test-run— Phase 8B: Executes tests in priority order (smoke → E2E → API → regression); createsbugs/BUG-NNN.mdper failed test with evidence, gap analysis, and fix log; auto-fix loop for P0/P1 bugs with single-test retest and smoke regression check; generatestest-report.mdwith full coverage matrix and traceability chain- Adaptive research depth in
speckit.product-forge.research: input richness scoring (0–8 across 4 dimensions) selects FULL_INTERVIEW / PARTIAL_INTERVIEW / CONFIRM mode; avoids redundant questions when context is already rich
speckit.product-forge.forgeorchestrator updated to 9-phase pipeline (8A and 8B added as optional after Phase 7)forge.mdPhase Map table updated; Phase 8A/8B offer shown after every successful Phase 7 completionextension.ymlversion bumped to1.1.0; tags updated to includetestingdocs/phases.mdupdated with full Phase 8A and 8B documentationdocs/file-structure.mdupdated withtesting/,bugs/, andtest-report.mdin directory layout;.forge-status.ymlschema updated withtest_plan,test_run, andtesting:block;BUG-NNN.mdandtest-report.mdschemas added; naming conventions updated with TC-* and BUG-NNN IDsREADME.mdupdated with 9-phase lifecycle diagram, 10-command table, and expanded file structure
forge.mdPhase 5 and 6 previously referenced SpecKit directly; corrected to delegate viaspeckit.product-forge.implementas intended
1.0.0 — 2026-03-28
speckit.product-forge.forge— Full lifecycle orchestrator with 7-phase pipeline and human-in-the-loop gatesspeckit.product-forge.research— Phase 1: Parallel research across competitors, UX/UI patterns, codebase analysis (mandatory), tech stack and metrics/ROI (optional)speckit.product-forge.product-spec— Phase 2: Interactive product spec creation with configurable detail levels (concise/standard/exhaustive) and auto-decomposition for large featuresspeckit.product-forge.revalidate— Phase 3: Iterative review loop with structured change tracking in review.md; exits only on explicit user approvalspeckit.product-forge.bridge— Phase 4: Converts approved product-spec into SpecKit spec.md; supports Classic and V-Model SpecKit modesspeckit.product-forge.implement— Phase 5-6: Wraps SpecKit plan + tasks + implement with product-spec cross-validation at each sub-phasespeckit.product-forge.verify-full— Phase 7: Full traceability verification across 6 layers (code ↔ tasks ↔ plan ↔ spec ↔ product-spec ↔ research)speckit.product-forge.status— Status reporter showing all phases, artifact inventory, and next recommended action
Introduced the features/<name>/ directory convention with:
research/— all research artifacts + README indexproduct-spec/— all product spec artifacts + README index.forge-status.yml— phase trackerreview.md— revalidation changelogverify-report.md— verification report
- Auto-detects large features and suggests file decomposition for user journeys and wireframes
- All documents cross-linked via feature root README.md and product-spec/README.md
- Token budget awareness with
max_tokens_per_docconfig setting
config-template.ymlwith full project configuration options.product-forge/config.ymlproject-level config support- Per-feature config override support