Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions presets/catalog.community.json
Original file line number Diff line number Diff line change
Expand Up @@ -670,11 +670,11 @@
"workflow-preset": {
"name": "Workflow Preset",
"id": "workflow-preset",
"version": "3.1.0",
"version": "3.1.1",
"description": "Constitution-managed architecture, behavior-first specification, design artifacts, and execution-ready task mapping",
"author": "bigsmartben",
"repository": "https://github.com/bigsmartben/spec-kit-workflow-preset",
"download_url": "https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.1.0/spec-kit-workflow-preset-v3.1.0.zip",
"download_url": "https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.1.1/spec-kit-workflow-preset-v3.1.1.zip",
"homepage": "https://github.com/bigsmartben/spec-kit-workflow-preset",
"documentation": "https://github.com/bigsmartben/spec-kit-workflow-preset/blob/main/README.md",
"license": "MIT",
Expand All @@ -697,8 +697,8 @@
],
"created_at": "2026-05-27T00:00:00Z",
"updated_at": "2026-07-26T00:00:00Z",
"source_commit": "e20dcafde5a1b031643156db49eb3e988e322bf9",
"sha256": "9f92d3820ce5365a80a3816890850fb9cc190006fd3ad025ff941baa90165fcb"
"source_commit": "393db34fb4e6a2a20e03038b774594a0b2edd6bd",
"sha256": "418b28ddca87a1e105df700c9063262d3a77d815cd6ac6fa6dd864e7b13d6768"
}
}
}
6 changes: 3 additions & 3 deletions presets/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"workflow-preset": {
"name": "Workflow Preset",
"id": "workflow-preset",
"version": "3.1.0",
"version": "3.1.1",
"description": "Constitution-managed architecture, behavior-first specification, design artifacts, and execution-ready task mapping",
"author": "bigsmartben",
"repository": "https://github.com/bigsmartben/spec-kit-workflow-preset",
Expand All @@ -52,8 +52,8 @@
"planning",
"implementation"
],
"source_commit": "e20dcafde5a1b031643156db49eb3e988e322bf9",
"sha256": "9f92d3820ce5365a80a3816890850fb9cc190006fd3ad025ff941baa90165fcb"
"source_commit": "393db34fb4e6a2a20e03038b774594a0b2edd6bd",
"sha256": "418b28ddca87a1e105df700c9063262d3a77d815cd6ac6fa6dd864e7b13d6768"
}
}
}
48 changes: 34 additions & 14 deletions presets/workflow-preset.release.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"artifact": {
"name": "spec-kit-workflow-preset-v3.1.0.zip",
"sha256": "9f92d3820ce5365a80a3816890850fb9cc190006fd3ad025ff941baa90165fcb"
"name": "spec-kit-workflow-preset-v3.1.1.zip",
"sha256": "418b28ddca87a1e105df700c9063262d3a77d815cd6ac6fa6dd864e7b13d6768"
},
"files": [
{
Expand All @@ -10,15 +10,15 @@
},
{
"path": "CHANGELOG.md",
"sha256": "ce932c8a0ef0bf82d6c342ea1fedb8e90cd11878674d168059d6b1e5e5561a3e"
"sha256": "59a583460843504156209338956f24334cbe90933bab8736d9b864dd5b0d11fc"
},
{
"path": "LICENSE",
"sha256": "8c9a47687655839e45d596c67fb9a13a1c9cd39eca4aaa0846e7afd9a01f1ab1"
},
{
"path": "README.md",
"sha256": "bdfe954c0737ec587eebf557ed042836f26f0f27a076e17d17ab895c0a2822b6"
"sha256": "69a358dd0fb5ccfefd49429797bbad8d77b43783bb3263fc0ba7ed289c714b2e"
},
{
"path": "commands/speckit.analyze.md",
Expand All @@ -38,7 +38,7 @@
},
{
"path": "commands/speckit.plan.md",
"sha256": "9e07188cab506100041ad1f9dbf9b92feb0bae3c9c5fde948ab2e4b9287e8eed"
"sha256": "bd9a75332655abbaa48f9d7a2673aa084090cd7069e240893d8926a460adc3a0"
},
{
"path": "commands/speckit.specify.md",
Expand All @@ -50,11 +50,11 @@
},
{
"path": "docs/extension-governance.md",
"sha256": "c2f8ae1500adf144c1d3102c6e00424ab4c420a4e25ded9f54974fd8eb38bc26"
"sha256": "feddb04f5a80eed12d0439a6c56eb7590df9b20f9cb7079ef9e612e2f0a5cab2"
},
{
"path": "preset.yml",
"sha256": "68967ef1e3fb93af09ebaf3894d05cf5a57325f7839df0661dc44f2f618ec86c"
"sha256": "9722b3121cba934f2ebd5ad77ed1c4d43eaa64c4c7e5f08fed43b1e94786f4a4"
},
{
"path": "requirements-dev.txt",
Expand Down Expand Up @@ -126,7 +126,7 @@
},
{
"path": "templates/plan-template.md",
"sha256": "653684caafb63216b5c6b1ba80adc4c04b7446494ccba55c6cd0cb80474437cf"
"sha256": "10b9da0be3591bac4272efd424e2019e79e828297a4907939bf9d734ee00011c"
},
{
"path": "templates/quickstart-template.md",
Expand Down Expand Up @@ -158,7 +158,7 @@
},
{
"path": "templates/test-readiness-template.md",
"sha256": "7695440deacf892f1646f12e12245e28f09f4d1383d8dcb130e1240bb58793b4"
"sha256": "e8c3fcd10c47e6b0112b1dad15d30da167735d19730bc131be0b6db08fa99b81"
},
{
"path": "templates/test/test-conditions.json",
Expand All @@ -170,11 +170,27 @@
},
{
"path": "tests/contracts/speckit-cross-agent-protocol.md",
"sha256": "faade06b315050d256d54d55fe15a8c4104ed669a0be4ad0dc01822fee776f71"
"sha256": "53aa0d7f739cd7ab64cc517997f7b370c87b3c2e8f551f1222b2b69a54b3e854"
},
{
"path": "tests/fixtures/plan_bundles/async_retry_compensation.json",
"sha256": "4d875ff6e343aea2c518c974ca6c8d659361edb768ad24d436f24cf1d36d5864"
},
{
"path": "tests/fixtures/plan_bundles/minimal_repository.json",
"sha256": "86349398d9168146a9c6c79f1980eef2cd27e14c3565aa7621da9f2483df765e"
},
{
"path": "tests/fixtures/plan_bundles/non_ui_single_interface.json",
"sha256": "fe62e206f1167071064e840bde44c3848203953db3af7b381364d10e6347d34d"
},
{
"path": "tests/fixtures/plan_bundles/ui_only.json",
"sha256": "cb653d0d759e156641e6d46943c51b889730790ecd8ce293edf98447c5e90d01"
},
{
"path": "tests/test_preset_contract.py",
"sha256": "526e9f4bb20d17a93b2c75e0ec9e4958d57aa34ab5cc286719fcb27013b4194e"
"sha256": "f5382ee7bd11720781057abecf2a5a39ed18e069a3adaedf2fb38ad2a1e0027a"
},
{
"path": "validators/__init__.py",
Expand All @@ -188,14 +204,18 @@
"path": "validators/speckit_behavior_contract.py",
"sha256": "112d2438a6fa4d1002ee45ebfb8a86ff1fe37390c80ef9492512a8a4debc141a"
},
{
"path": "validators/speckit_plan_contract.py",
"sha256": "e724eede9933107c2a627d49a8b0178ebe6b6433fd7e0dc89ee4f6ae7852bb71"
},
{
"path": "validators/speckit_test_contract.py",
"sha256": "4c0827812f68c4c67258f1c57e5af22465d0d3e7abddc6f699bdbdc995ac6e8b"
"sha256": "1b741476ce8135e358157a0dd81c8a9757ead04ebf9195ed7349083953e5a8e2"
}
],
"preset_id": "workflow-preset",
"schema_version": "1.0",
"source_commit": "e20dcafde5a1b031643156db49eb3e988e322bf9",
"source_commit": "393db34fb4e6a2a20e03038b774594a0b2edd6bd",
"source_repository": "https://github.com/bigsmartben/spec-kit-workflow-preset",
"version": "3.1.0"
"version": "3.1.1"
}
11 changes: 11 additions & 0 deletions presets/workflow-preset/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

## Unreleased

## 3.1.1 - 2026-07-27

- Hardened Plan bundle validation so blocked Test Readiness rows and blocked
Test Conditions prevent false `PLAN_OUTPUT_READY: READY` conclusions.
- Preserved independently verified X2-C outputs during blocked continuation and
kept blocked X2-B delivery distinct from N/A.
- Allowed pure domain/internal-object X2-A design without an unnecessary
interface contract.
- Added representative Plan bundle fixtures, release packaging assertions, and
local preset installation coverage for the corrected boundaries.

## 3.1.0 - 2026-07-27

- Split SDD governance from repository Architecture and added independent
Expand Down
2 changes: 1 addition & 1 deletion presets/workflow-preset/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ specify preset add --dev /path/to/spec-kit-workflow-preset
已发布版本:

```bash
specify preset add --from https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.1.0/spec-kit-workflow-preset-v3.1.0.zip
specify preset add --from https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.1.1/spec-kit-workflow-preset-v3.1.1.zip
```

安装后可检查预设信息:
Expand Down
153 changes: 144 additions & 9 deletions presets/workflow-preset/commands/speckit.plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,47 @@ pre/post hooks, Phase 0, Phase 1, and completion behavior in their official
order. Do not add, remove, rename, reorder, duplicate, or reinterpret a Core
phase or gate. Do not re-run Checklist or aggregate Planning Readiness.

## Deterministic Execution Spine

Run this preset-internal spine inside the unchanged Core lifecycle:

```text
Core setup
-> X0 scope/lane control
-> X1 decisions
-> X2-A / X2-B / X2-C active lanes
-> X2 cross-lane reconciliation
-> X3 VAL paths
-> refresh affected X2 reconciliation checks
-> unchanged Core post-design Constitution re-check
-> X4 closeout
-> derive PLAN_OUTPUT_READY
```

For every internal milestone or active lane, use exactly this Gate loop:

| Gate step | Required action |
|---|---|
| Entry conditions | Confirm every dependency Gate is `READY` or explicitly `N/A`; otherwise stop the dependent scope. |
| Bounded reads | Read only the upstream inputs, packaged templates/schemas, repository facts, and already-produced Plan artifacts needed by this scope. |
| Owned writes | Write only the artifacts owned by the current milestone/lane. |
| Validation | Check required outputs, conditional decisions, stable refs, placeholders, ownership, and lane-specific prohibitions. |
| Evidence | Record `READY`, `BLOCKED: <ID>`, or `N/A: <reason>` plus concrete artifact/section/ID evidence in `plan.md`. |
| Failure handling | Keep the owning lane blocked, record the smallest actionable blocker or context gap, and do not enter a dependent milestone. |

File existence, prose confidence, or a summary statement is never Gate
evidence. A Gate is `READY` only when all of its required checks pass. An
inactive lane is `N/A` only through the decision rules below. Any unresolved
required check makes the Gate `BLOCKED`; do not continue into a scope that
depends on it.

## External Input Boundary

Read only `spec.md`, `.specify/memory/constitution.md`,
`.specify/memory/architecture.md`, and current repository facts. Planning has
one strategy for every repository:
Authoritative upstream inputs are limited to `spec.md`,
`.specify/memory/constitution.md`, `.specify/memory/architecture.md`, and
current repository facts. “Read only” does not prohibit reading packaged
templates/schemas or the current Plan stage's already-generated artifacts for
validation and reconciliation. Planning has one strategy for every repository:

```text
current repository facts
Expand All @@ -54,6 +90,55 @@ Apply Change Scope Granularity: lock planned `M + U`; `plan.md` may record
repository/module directory topology required by Core, but no task IDs,
per-task paths, operation-level changes, or implementation order.

## Ownership And Conditional Artifact Decisions

| Scope | Sole final writer | Owned outputs | Must not absorb |
|---|---|---|---|
| X0/X4 control | Plan Core Agent | `plan.md` control, Gate evidence, derivation index, closeout | complete designs, Test Conditions, tasks |
| X1 decisions | Plan Core Agent | `research.md` `DEC-*` records | complete designs, runnable paths, cross-command audit |
| X2-A | Plan Core Agent | `data-model.md`, contextual class/sequence artifacts, interface contracts | UI delivery detail, fixtures, assertions, task paths |
| X2-B | Plan Core Agent | `ui-ux-design.md`, `contracts/uif/` | API payload schemas, pixel tests, external-source certification |
| X2-C | Plan Core Agent | Test Conditions and selected technique children | UI styling/fidelity, validation run guidance, tasks |
| X3 | Plan Core Agent | `quickstart.md` `VAL-*` paths | test design decisions, implementation bodies, results |

Use this decision table; never infer N/A merely because an artifact is absent:

| Artifact/lane | Required when | N/A allowed when | Blocked when |
|---|---|---|---|
| `class-diagram.md` | multiple cooperating objects, dependency direction, patterns, or object ownership must be designed | one object or responsibilities are fully expressed without an object relationship view; record the concrete reason | trigger applies but responsibilities/relationships cannot yet be resolved |
| interface contracts | an externally observable protocol, input/output, error, compatibility/versioning, or state-effect boundary must be designed | X2-A is pure domain/internal-object design with no externally observable interface contract; record the concrete reason | an interface trigger applies but its observable contract cannot yet be resolved |
| `contracts/sequences.md` | observable cross-boundary order, async callback, retry, rollback, compensation, or failure propagation exists | no observable ordering or failure-flow design exists; record the concrete reason | trigger applies but participants/order/failure path is unresolved |
| X2-B + `ui-ux-design.md`/UIF | any `UX-*`, `UI-*`, `VIS-*`, interactive surface/state, responsive, asset, or accessibility delivery applies | feature has no user-visible or interactive delivery; cite the scoped Spec evidence | applicable UI/visual refs lack a local delivery mapping or stable blocker |
| BDD/scenario child | parent `TC-*` selects BDD/scenario technique | no parent selects that technique | selected technique lacks its parent-linked child |
| fixture child | a parent `TC-*` requires reusable/formal setup data | every applicable condition records a fixture-free rationale | required reusable setup is unresolved or missing |
| assertion child | a parent `TC-*` selects structured scenario/assertion technique | no parent selects a structured assertion technique and each oracle remains complete in its parent | selected technique lacks outcome assertions |

A blocked applicable lane remains `Blocked`; never relabel it `N/A`. During a
resume, preserve each independently verified `Required` output and mark only
the affected output `Blocked`. In particular, X2-C does not require Test
Conditions, Quickstart, and Test Readiness to become blocked as a group.

## Stage-Local Work Units

If bounded subagents are available, the Plan Core Agent may assign independent
X1/X2/X3 derivation units. Every transient assignment must contain:

```text
assigned_scope
allowed_reads
allowed_writes
required_outputs
validation_gate
blockers
context_gaps
```

The assignment is runtime context only, not a file, manifest, queue, handoff
protocol, or worker result. The Plan Core Agent remains the sole final writer
and sole Gate decision owner. It validates returned content before incorporating
it. If delegation is unavailable or a unit is blocked, process one assigned
scope at a time with the same fields and Gate loop.

## X0 — Feature Plan Control

Run after Core setup has materialized `plan.md`, before detailed research.
Expand Down Expand Up @@ -169,6 +254,33 @@ Conditions or Test Readiness.
`X2C_TEST_DESIGN_READY` requires all TC dimensions and internal refs, every
technique-triggered child or stable blocker, and zero pixel-level Test entries.

## X2 — Cross-Lane Reconciliation

After all active X2 lanes have reached `READY`, and before entering X3, the Plan
Core Agent performs one explicit reconciliation pass. Do not delegate the final
judgment. Inventory each declared `DEC-*`, design/interface/sequence ID, UIF,
`TC-*`, and requested `VAL-*` mapping once, then check:

1. every consumed ref resolves to exactly one producer and uses one stable ID or
name; report missing, duplicate, renamed, and stale refs;
2. every material `DEC-*` reaches each affected active-lane output;
3. every UIF API/design ref resolves in X2-A and every applicable UI/VIS source
pair resolves in X2-B;
4. every `TC-*` resolves its requirement, design/UIF/interface refs and every
technique-triggered child;
5. every condition needing execution declares the expected `VAL-*` mapping or
a stable X3 blocker;
6. content remains with its sole owner; record misplaced domain, interface, UI,
Test, or validation-path content;
7. each blocker is recorded against its real owning lane, and every dependent
lane points to that blocker instead of copying or relabeling it.

Record the inventory, findings, blocker owners, and evidence in the
`X2_RECONCILIATION_READY` section of `plan.md`. Any unresolved finding blocks
X3. After X3 writes `VAL-*`, refresh all reconciliation rows affected by
created, renamed, blocked, or removed paths; a requested mapping is not closed
until the actual `VAL-*` or blocker resolves.

## X3 — Integration & Validation Paths

Within Core Phase 1, populate `quickstart.md` using stable `VAL-*` records:
Expand All @@ -187,6 +299,23 @@ implementation bodies, migrations, task IDs/order, or fabricated results.
`X3_VALIDATION_PATHS_READY` requires each condition needing a runnable path to
map to a complete `VAL-*` or stable runtime blocker.

## Continuation And Resume

Treat the `plan.md` Internal Gate Summary and its evidence as the resume index:

1. validate the recorded evidence rather than trusting the status text;
2. preserve an already-verified artifact when its bounded inputs and stable refs
are unchanged;
3. resume at the first Gate whose evidence is absent, invalid, `BLOCKED`, or
affected by changed input;
4. re-run that Gate and every downstream reconciliation/Gate that consumes the
changed artifact or ref;
5. never unconditionally overwrite a verified upstream artifact, and never
preserve a downstream `READY` status after an input/ref it depends on changed.

No `PENDING` state is introduced. A Gate without closed evidence is simply not
ready and is treated as the first resume candidate.

## X4 — Independent Closeout

After Core design and its post-design Constitution re-check:
Expand All @@ -196,14 +325,20 @@ After Core design and its post-design Constitution re-check:
class | interface/sequence | blocker`.
2. Finalize UI/UX Delivery Readiness in `ui-ux-design.md` or explicit N/A.
3. Create `test-readiness.md` as the only Test/Tasks readiness SSOT, one row per
required `TC-*`. Do not create/retain authoritative
required `TC-*`. Each row is `READY` with evidence or `BLOCKED` with a
blocker; any blocked row blocks `PLAN_OUTPUT_READY`. Do not create/retain authoritative
`behavior/behavior-testability.md`, `planning-readiness.md`, or
`test-plan.md`.
4. Summarize gate status and lane-owned blockers in `plan.md`.

`PLAN_OUTPUT_READY` equals X0 + X1 + applicable X2 gates + applicable X3 +
complete Design/UI/UX/Test readiness + resolved Plan-internal refs + no
placeholder presented as a decision. It validates Plan outputs only.
4. Re-run the final cross-lane reference and ownership checks, then summarize
Gate status and lane-owned blockers in `plan.md`.

Derive `PLAN_OUTPUT_READY`; never set it independently. It is `READY` if and
only if X0 + X1 + `X2_RECONCILIATION_READY` + every applicable X2 Gate +
applicable X3 + complete Design/UI/UX/Test readiness are evidenced, every
conditional artifact is Required/READY or has a valid N/A reason, all
Plan-internal refs resolve, all blockers are lane-owned, and no placeholder is
presented as a decision. Otherwise it is `BLOCKED` with the failed Gate and
blocker evidence. It validates Plan outputs only.

{CORE_TEMPLATE}

Expand Down
Loading