Skip to content
Closed
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.1",
"version": "3.2.0",
"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.1/spec-kit-workflow-preset-v3.1.1.zip",
"download_url": "https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.2.0/spec-kit-workflow-preset-v3.2.0.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": "393db34fb4e6a2a20e03038b774594a0b2edd6bd",
"sha256": "418b28ddca87a1e105df700c9063262d3a77d815cd6ac6fa6dd864e7b13d6768"
"source_commit": "bf99bc24cbbf4d1462fabed90ac47bc6101e8ebb",
"sha256": "4215f409a81a017d9ecb3050623007c5d1d881920fc42a7777f94777ff1fb279"
}
}
}
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.1",
"version": "3.2.0",
"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": "393db34fb4e6a2a20e03038b774594a0b2edd6bd",
"sha256": "418b28ddca87a1e105df700c9063262d3a77d815cd6ac6fa6dd864e7b13d6768"
"source_commit": "bf99bc24cbbf4d1462fabed90ac47bc6101e8ebb",
"sha256": "4215f409a81a017d9ecb3050623007c5d1d881920fc42a7777f94777ff1fb279"
}
}
}
54 changes: 31 additions & 23 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.1.zip",
"sha256": "418b28ddca87a1e105df700c9063262d3a77d815cd6ac6fa6dd864e7b13d6768"
"name": "spec-kit-workflow-preset-v3.2.0.zip",
"sha256": "4215f409a81a017d9ecb3050623007c5d1d881920fc42a7777f94777ff1fb279"
},
"files": [
{
Expand All @@ -10,19 +10,19 @@
},
{
"path": "CHANGELOG.md",
"sha256": "59a583460843504156209338956f24334cbe90933bab8736d9b864dd5b0d11fc"
"sha256": "096623162acd4a80f087359bb9616e576b44fae45c6c014006bddf26084b8ea2"
},
{
"path": "LICENSE",
"sha256": "8c9a47687655839e45d596c67fb9a13a1c9cd39eca4aaa0846e7afd9a01f1ab1"
},
{
"path": "README.md",
"sha256": "69a358dd0fb5ccfefd49429797bbad8d77b43783bb3263fc0ba7ed289c714b2e"
"sha256": "ddd3fd57ab57e98e0ac3d0c7eed0143218d831db9dda5ef627e32c93cc1fc3a0"
},
{
"path": "commands/speckit.analyze.md",
"sha256": "5fbd1e926038c6d587fd120851af4fd4c4153a678780113eeeaccc76e90cf0e0"
"sha256": "632bea1039cdeb2c0dabe8ce7a11dbba448a6d2f28e7e703c12392f488dbe7d1"
},
{
"path": "commands/speckit.checklist.md",
Expand All @@ -38,23 +38,23 @@
},
{
"path": "commands/speckit.plan.md",
"sha256": "bd9a75332655abbaa48f9d7a2673aa084090cd7069e240893d8926a460adc3a0"
"sha256": "e82cc984ab6d898ea4358cc1cc7a80d4b32c43fbd89bd408bb8ab41c20acead1"
},
{
"path": "commands/speckit.specify.md",
"sha256": "8c5c744f42265223ce807b38e0a0626b59125bd88f253fb9449c670e198962c6"
"sha256": "19bc99aa51d826721d49c0a4fe406d15d5f20bb6b82038465986824bdd6ae093"
},
{
"path": "commands/speckit.tasks.md",
"sha256": "a26f2b305cc99505bfbeb80a50e1b812c949b634e1a12780c0d5247374876339"
"sha256": "31ddb13915bc447e8bd471e501bd85bad1f939d54063f872ba1a65280e816cb8"
},
{
"path": "docs/extension-governance.md",
"sha256": "feddb04f5a80eed12d0439a6c56eb7590df9b20f9cb7079ef9e612e2f0a5cab2"
"sha256": "7a19c10f824371b27e9233f4699ffe8f1bf04326ed93b1061cf04f9d378e0232"
},
{
"path": "preset.yml",
"sha256": "9722b3121cba934f2ebd5ad77ed1c4d43eaa64c4c7e5f08fed43b1e94786f4a4"
"sha256": "97387ed796ade8df30f2385b8864c4b3affd325e30c15554f24f51df1442b94e"
},
{
"path": "requirements-dev.txt",
Expand Down Expand Up @@ -126,7 +126,7 @@
},
{
"path": "templates/plan-template.md",
"sha256": "10b9da0be3591bac4272efd424e2019e79e828297a4907939bf9d734ee00011c"
"sha256": "68069b9e8395951209c7afc3fc7ded4d51b8e1f31cb56de2752d6d5824a733dc"
},
{
"path": "templates/quickstart-template.md",
Expand All @@ -146,15 +146,15 @@
},
{
"path": "templates/requirements/visual-gate.md",
"sha256": "3c25de98d60f7f5f4e5352c1c8d0054b73b6c1c3ceeeb0d56c3f1d364221a828"
"sha256": "f5d4993d015f726d369de8ede3b0065fe8f5c6412a6b306cacffdc8fb43f41a4"
},
{
"path": "templates/sequences-template.md",
"sha256": "efc7ab0dcd6d44befa8d97eb5c395cb62f53968a311991784b0b4cce58a42045"
},
{
"path": "templates/spec-template.md",
"sha256": "400116470fc3c4dc9222eaf16b48a9f03b383158cfc271f915151cfc599dbe6a"
"sha256": "db0b7fe137cd48d7c97f037592704629b1b9d60aee8e57692bea6701d6540930"
},
{
"path": "templates/test-readiness-template.md",
Expand All @@ -166,47 +166,55 @@
},
{
"path": "templates/ui-ux-design-template.md",
"sha256": "deda68c43af32410e529b4addde3d86fabdcce37a7251ae6975a04eaefef53f5"
"sha256": "a0a86e5a31df93c295e31880bb2af6d65ce3a08949eca7f79bb144645b9b5ef0"
},
{
"path": "tests/contracts/speckit-cross-agent-protocol.md",
"sha256": "53aa0d7f739cd7ab64cc517997f7b370c87b3c2e8f551f1222b2b69a54b3e854"
},
{
"path": "tests/fixtures/plan_bundles/async_retry_compensation.json",
"sha256": "4d875ff6e343aea2c518c974ca6c8d659361edb768ad24d436f24cf1d36d5864"
"sha256": "9ec8e69848b0cf20bcfc365e444ebf00d94459cbd8032547ab7d70ec0b78464c"
},
{
"path": "tests/fixtures/plan_bundles/minimal_repository.json",
"sha256": "86349398d9168146a9c6c79f1980eef2cd27e14c3565aa7621da9f2483df765e"
"sha256": "893c4b50845ad2d62312446c0c6461785f8c55ee869fa8a0eb8c63ebb3656bb3"
},
{
"path": "tests/fixtures/plan_bundles/non_ui_single_interface.json",
"sha256": "fe62e206f1167071064e840bde44c3848203953db3af7b381364d10e6347d34d"
"sha256": "4ada23a46878a14f0788315b652e0613bbe306aeac988eca012487c7f71941fa"
},
{
"path": "tests/fixtures/plan_bundles/ui_only.json",
"sha256": "cb653d0d759e156641e6d46943c51b889730790ecd8ce293edf98447c5e90d01"
"sha256": "3d3f47c1b5d1064456d6f9c02345cdf045af07066ab627217ef7ca1131576246"
},
{
"path": "tests/test_preset_contract.py",
"sha256": "f5382ee7bd11720781057abecf2a5a39ed18e069a3adaedf2fb38ad2a1e0027a"
"sha256": "d4182caa33afc838ac9296144d30e1298a7b3b67b7f24c6aca4fc6c3b6a742ea"
},
{
"path": "validators/__init__.py",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "validators/speckit_analyze_contract.py",
"sha256": "8f108da51daf1f582781bcf9833946ec8bf4e99131bb0561513cd24ea1f44394"
"sha256": "5cc89e5987b139622dd6544b4e60ca04e88ccb52a3ddfa3221cfcfc28411a4f1"
},
{
"path": "validators/speckit_behavior_contract.py",
"sha256": "112d2438a6fa4d1002ee45ebfb8a86ff1fe37390c80ef9492512a8a4debc141a"
},
{
"path": "validators/speckit_plan_contract.py",
"sha256": "e724eede9933107c2a627d49a8b0178ebe6b6433fd7e0dc89ee4f6ae7852bb71"
"sha256": "db08c3417d86a58a16dffc1fe6fed77318752d03c8df07502c538df55db21045"
},
{
"path": "validators/speckit_spec_contract.py",
"sha256": "072845c892da168a263c3790df2da3363d03db33effec28b8a2956633e46f3b5"
},
{
"path": "validators/speckit_tasks_contract.py",
"sha256": "96f9813d5e4038af001375b62bb5779ebcf87a6353b62c1510452c4690122cdf"
},
{
"path": "validators/speckit_test_contract.py",
Expand All @@ -215,7 +223,7 @@
],
"preset_id": "workflow-preset",
"schema_version": "1.0",
"source_commit": "393db34fb4e6a2a20e03038b774594a0b2edd6bd",
"source_commit": "bf99bc24cbbf4d1462fabed90ac47bc6101e8ebb",
"source_repository": "https://github.com/bigsmartben/spec-kit-workflow-preset",
"version": "3.1.1"
"version": "3.2.0"
}
12 changes: 12 additions & 0 deletions presets/workflow-preset/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

## Unreleased

## 3.2.0 - 2026-07-30

- Added one canonical `UI-*` specification model with deterministic source,
requirement, route, state, interaction, responsive, and accessibility
coverage.
- Projected UI requirements through X2-B delivery and readiness without moving
product truth out of `spec.md` or adding external-source validation.
- Required Tasks to map X2-B visual implementation and acceptance work while
preserving dependency ordering and Final Code Review as the last phase.
- Added validator and fixture coverage for missing, duplicate, orphaned, and
incomplete UI specification paths.

## 3.1.1 - 2026-07-27

- Hardened Plan bundle validation so blocked Test Readiness rows and blocked
Expand Down
52 changes: 39 additions & 13 deletions presets/workflow-preset/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Constitution + Architecture

### 需求层

授权来源投影完成后,`spec.md` 是当前功能的产品需求唯一事实源(SSOT,
有界输入投影完成后,`spec.md` 是当前功能的产品需求唯一事实源(SSOT,
Single Source of Truth)。功能需求、非功能需求、UX/UI、视觉、安全隐私、
数据、集成、依赖、边界、假设和排除项都使用可选载体;不适用时明确写
N/A。
Expand All @@ -45,7 +45,7 @@ N/A。
`/speckit.checklist` 只提出可回答的问题,不把实现方案写回需求。

例如:退款需求可以同时声明 `FR-001`(退款规则)、`NFR-001`(响应时间)和
`UI-001`(加载/成功/失败状态);若已授权的设计说明缺少结账失败态证据
`UI-001`(加载/成功/失败状态);若已供应的设计说明缺少结账失败态证据
就在对应 `SRC-*` 行记录本地阻塞,不把它混成产品澄清问题。

### 来源中立契约
Expand All @@ -55,20 +55,21 @@ Source Reference Contract(来源引用契约):

```text
SRC ref | role | opaque locator/description | revision/identity
| authorized scope/facts | projected requirement refs | status/blocker
| bounded feature scope | supplied content/facts
| projected requirement refs | status/blocker
```

| 角色 | 含义 | 例子 |
|---|---|---|
| `requirement-input` | 可投影已确认、已切片的 WHAT/WHY | 当前对话中的退款规则 |
| `requirement-input` | 可投影已供应、已切片的 WHAT/WHY | 当前对话中的退款规则 |
| `visual-input` | 只可投影 `UI-*` / `VIS-*` | 结账错误态的可执行页面引用 |
| `technical-evidence` | 可引用,但不升级成产品需求 | 性能测量报告 |
| `context-only` | 只作背景,不授权规范性事实 | 竞品介绍 |

定位符(locator)、路径、版本、摘要或文字描述都按不透明来源信息保存。
预设不会因为看到一个引用就打开、执行或验证它,也不会推断相邻目录或要求
上游工具。宽泛来源必须先确定当前功能切片;无法安全切片时只记录本地阻塞
或待澄清项,不默认整份导入。
`/speckit.specify` 从内容或来源事实已经供应完毕的位置开始。定位符
(locator)、路径、版本、摘要或文字描述只是不透明来源信息;如果没有随附
内容/事实,则记录 `SRC_EVIDENCE_MISSING`,不投影本地需求。宽泛来源必须先
确定当前功能切片;无法安全切片时只记录本地阻塞或待澄清项,不默认整份导入。

本地链路是:

Expand All @@ -82,6 +83,27 @@ X2-B: ui-ux-design.md → UIF
Tasks 只做实现映射;Analyze 只做本地引用审计
```

### UI 证据与还原契约

`spec.md` 内的 `UI-*` / `VIS-*` 行会记录需求种类、可观察结果、`SRC-*`、
输入内证据定位、界面/状态/视口、推导分类、可测验收条件和阻塞状态。推导分类
固定为 `observed`(直接观察)、`derived`(确定性推导)、`assumed`(低影响
假设)、`unresolved`(证据不足)和 `conflicting`(证据冲突)。

还原需求会显式覆盖内容、信息结构、外观、交互反馈、UI 状态、响应式视口、
无障碍和资产。像素还原使用稳定的 `PXR-*` 配置、`PXT-*` 界面 × 状态 ×
视口目标和 `PEX-*` 例外;缺少基线、渲染上下文、保真模式、可测容差或例外
策略时保持阻塞。跨平台还原还必须声明具体目标平台、适配模式、目标上下文和
逐维度的 `preserve/adapt/add/omit/clarify/blocked` 决策。具体组件与实现
映射仍归 X2-B,像素范围不进入 Test Conditions 或 Test Readiness。

Plan 在 X0 和 `ui-ux-design.md` 记录同一个本地 `spec.md` SHA-256,用于
发现 Clarify 造成的同 ID 语义变化。X2-B 只建立引用式 `X2B-*` 交付映射:
通用 UI 映射、像素目标映射和平台适配映射。它不会复制 Spec 拥有的需求语句、
基线、视口/状态、保真模式、验收容差、例外边界或适配决策;摘要变化或任何
`UI/VIS/RST/PXR/PXT/PEX/ADP` 映射缺失都会阻止
`X2B_UIUX_READY` 和 `PLAN_OUTPUT_READY`。

### Plan:X0–X4

X0–X4 是嵌套在原有 Core Plan 流程中的内部里程碑,不替换 Core 的 setup、
Expand All @@ -101,15 +123,19 @@ Phase 0、Phase 1 或 Constitution re-check。
(测试数据)和 assertion(断言)只有在技术适用时才生成;非 UI 功能和
无 fixture 场景可以记录明确理由。

UI/UX 像素级交付准备可以在 Plan 中完成,但 Tasks 不得生成像素还原、
截图对比、visual diff(视觉差异)、baseline(基线)、视觉恢复或渲染审查
任务。
UI/UX 像素级交付准备在 Plan 中完成。Tasks 可以把 `X2B-PX-*` 映射成间距、
排版、颜色、资产适配、层叠、溢出和裁剪等实现任务;但不得生成截图/基线、
pixel/perceptual comparison(像素/感知比较)、visual diff(视觉差异)、
视觉验收或最终渲染保真度审查任务。

### Tasks 与 Analyze

`/speckit.tasks` 只消费 `PLAN_OUTPUT_READY`,按 T0–T5 映射已存在的设计对象、
路径、依赖、测试条件和 `VAL-*`。必需的 `TC-*` 会覆盖 Core 模板中“测试可选”
的默认提示;最后一个强制阶段始终是 **Final Code Review**。
的默认提示。`X2B-UI-*`、`X2B-PX-*`、`X2B-ADP-*` 分别生成通用 UI、视觉
实现和平台适配任务;每个 Required 映射必须落到具体路径,或保留 Plan 明确
允许的“仅评审方法、无任务”理由。最后一个强制阶段始终是
**Final Code Review**。

`/speckit.analyze` 一次读取 Constitution、Architecture、Spec、Plan 与 Tasks,
输出稳定 finding ID、严重级别、证据和第一个阻塞点。它负责检查
Expand All @@ -128,7 +154,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.1/spec-kit-workflow-preset-v3.1.1.zip
specify preset add --from https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.2.0/spec-kit-workflow-preset-v3.2.0.zip
```

安装后可检查预设信息:
Expand Down
15 changes: 9 additions & 6 deletions presets/workflow-preset/commands/speckit.analyze.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,13 @@ Audit only the local Source Reference Contract and its local projections:

- every referenced `SRC-*` exists exactly once in the Spec carrier;
- every source has exactly one allowed role, opaque locator/description,
explicit authorized scope/facts, projection refs or a reason for none, and a
status/blocker;
explicit bounded feature scope, supplied content/facts, projection refs or a
reason for none, and a status/blocker;
- a locator-only row has no projected refs and records
`SRC_EVIDENCE_MISSING`;
- every projected requirement ref exists locally and is compatible with the
role: `requirement-input` may project WHAT/WHY refs, `visual-input` only
`UI-*`/`VIS-*`, while `technical-evidence` and `context-only` authorize no
`UI-*`/`VIS-*`, while `technical-evidence` and `context-only` support no
normative requirement;
- a broad source without a safe feature slice remains blocked or needs
clarification instead of projecting unrelated facts;
Expand All @@ -58,9 +60,10 @@ Audit only the local Source Reference Contract and its local projections:

Use stable codes including `SRC_REF_MISSING`, `SRC_REF_DUPLICATE`,
`SRC_FIELD_INVALID`, `SRC_ROLE_INVALID`, `SRC_ROLE_PROJECTION_INVALID`,
`SRC_PROJECTED_REF_MISSING`, `SRC_FEATURE_SLICE_MISSING`, `SRC_ORPHAN`,
`SRC_STATUS_CONTRADICTORY`, `SRC_UIUX_MAPPING_MISSING`, and
`SRC_UIF_MAPPING_MISSING`.
`SRC_BOUNDED_SCOPE_MISSING`, `SRC_SUPPLIED_FACTS_INVALID`,
`SRC_EVIDENCE_MISSING`, `SRC_BLOCKER_MISSING`, `SRC_PROJECTED_REF_MISSING`,
`SRC_FEATURE_SLICE_MISSING`, `SRC_ORPHAN`, `SRC_STATUS_CONTRADICTORY`,
`SRC_UIUX_MAPPING_MISSING`, and `SRC_UIF_MAPPING_MISSING`.

Do not open, run, inspect, compare, fetch, or otherwise dereference an external
locator. Do not decide source authenticity, availability, revision/digest
Expand Down
Loading