sdd-flow-kit 1.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -45
- package/dist/adapters/index.js +6 -6
- package/dist/cli.js +45 -9
- package/dist/core/acMatrix.js +116 -0
- package/dist/core/bootstrap.js +14 -6
- package/dist/core/inferProject.js +9 -2
- package/dist/core/openspecGate.js +45 -0
- package/dist/core/prdArtifacts.js +26 -0
- package/dist/core/projectRoots.js +79 -2
- package/dist/core/sessionState.js +2 -0
- package/dist/core/writeNext.js +19 -2
- package/dist/postinstall.js +22 -8
- package/dist/steps/runDeliver.js +18 -6
- package/dist/steps/runGate.js +97 -0
- package/dist/steps/runPhaseAdvance.js +53 -6
- package/dist/steps/runPropose.js +3 -1
- package/dist/steps/runValidate.js +204 -0
- package/dist/steps/setupProject.js +65 -2
- package/dist/steps/startFlow.js +14 -11
- package/package.json +1 -1
- package/src/templates/artifacts/01-/351/234/200/346/261/202/345/210/206/346/236/220/346/212/245/345/221/212.template.md +6 -1
- package/src/templates/artifacts/04-/346/212/200/346/234/257/346/226/207/346/241/243.template.md +272 -11
- package/src/templates/artifacts/05-/351/252/214/346/224/266/346/270/205/345/215/225.template.md +38 -0
- package/src/templates/artifacts/06-agent-skill.template.md +23 -9
- package/src/templates/artifacts/{05-openspec- → 06-openspec-}/346/217/220/346/241/210/350/215/211/347/250/277.template.md +16 -4
- package/src/templates/artifacts/{06-opsx-auto-chain.template.md → 07-opsx-auto-chain.template.md} +23 -9
- package/src/templates/prompts/02-sdd-loop-prompt.md +26 -9
- package/src/templates/rules/sdd-no-implement-until-apply.mdc.template +27 -8
- package/src/templates/skills/confluence-doc.py.template +25 -1
- package/src/templates/skills/doc-skill.SKILL.md.template +2 -0
- package/src/templates/skills/layered-testing-strategy.md +35 -0
|
@@ -62,7 +62,17 @@ def version_slug(prefix: str, version: str) -> str:
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
def search_keywords(prefix: str, version: str) -> list[str]:
|
|
65
|
-
"""固定顺序(与用户 Confluence
|
|
65
|
+
"""固定顺序(与用户 Confluence 全局搜索习惯一致)。"""
|
|
66
|
+
p = prefix.strip()
|
|
67
|
+
# BreakX(破圈引擎)PRD 在 xhs 空间,页面标题多为 V1.0.2 xxx,而非 BreakX_V1.0.2
|
|
68
|
+
if p.upper() in ("BREAKX", "BX"):
|
|
69
|
+
return [
|
|
70
|
+
f"V{version}",
|
|
71
|
+
f"BreakX V{version}",
|
|
72
|
+
f"BreakX_V{version}",
|
|
73
|
+
f"BreakX-V{version}",
|
|
74
|
+
f"xhs V{version}",
|
|
75
|
+
]
|
|
66
76
|
return [
|
|
67
77
|
f"{prefix}_V{version}",
|
|
68
78
|
f"{prefix}-V{version}",
|
|
@@ -147,6 +157,12 @@ def score_link_match(text: str, href: str, prefix: str, version: str, keyword: s
|
|
|
147
157
|
slug = f"{p}v{v_compact}"
|
|
148
158
|
if slug in path_compact or f"{p}-v{v_compact}" in path or f"{p}_v{v_compact}" in path:
|
|
149
159
|
score += 4
|
|
160
|
+
# BreakX:标题以 V1.0.2 开头时加分
|
|
161
|
+
if p in ("breakx", "bx") and (t.startswith(f"v{version}") or f"v{version}" in t[:12]):
|
|
162
|
+
score += 5
|
|
163
|
+
space = env("CONFLUENCE_SPACE", "").lower()
|
|
164
|
+
if space and f"/spaces/{space}/" in href.lower():
|
|
165
|
+
score += 5
|
|
150
166
|
return score
|
|
151
167
|
|
|
152
168
|
|
|
@@ -215,6 +231,12 @@ def is_prd_page(page, page_url: str) -> bool:
|
|
|
215
231
|
|
|
216
232
|
crumbs = read_breadcrumb_text(page)
|
|
217
233
|
crumbs_upper = crumbs.upper()
|
|
234
|
+
prefix = env("DOC_PRODUCT_PREFIX", "").upper()
|
|
235
|
+
# BreakX:xhs 空间 PRD 挂在「产品设计」下,不一定有 PRD 字样
|
|
236
|
+
if prefix in ("BREAKX", "BX") and "/spaces/xhs/" in page_url.lower():
|
|
237
|
+
if "产品设计" in crumbs or "BREAKX" in crumbs_upper or "破圈" in crumbs:
|
|
238
|
+
print(f" ✓ BreakX/xhs 产品设计命中: {crumbs[:120]}")
|
|
239
|
+
return True
|
|
218
240
|
if re.search(r"\bPRD\b", crumbs_upper) or "需求" in crumbs or "PRD" in crumbs_upper:
|
|
219
241
|
print(f" ✓ PRD 父级命中: {crumbs[:120]}")
|
|
220
242
|
return True
|
|
@@ -374,6 +396,8 @@ def main():
|
|
|
374
396
|
or DEFAULT_CONFLUENCE_PASSWORD
|
|
375
397
|
)
|
|
376
398
|
prefix = os.environ.get("DOC_PRODUCT_PREFIX", "{{DOC_PRODUCT_PREFIX}}").strip() or "{{DOC_PRODUCT_PREFIX}}"
|
|
399
|
+
if prefix.upper() in ("BREAKX", "BX") and not os.environ.get("CONFLUENCE_SPACE"):
|
|
400
|
+
os.environ["CONFLUENCE_SPACE"] = "xhs"
|
|
377
401
|
version = normalize_version(sys.argv[1])
|
|
378
402
|
keywords = search_keywords(prefix, version)
|
|
379
403
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 分层测试策略(SDD / OpenSpec 强制)
|
|
2
|
+
|
|
3
|
+
> 由 `sdd-flow-kit` 安装到目标项目时,应合并进 `tdd-script` 与 `playwright-e2e-dev-server` skill 的「验收层级」章节。
|
|
4
|
+
|
|
5
|
+
## 四层模型
|
|
6
|
+
|
|
7
|
+
| 层级 | 覆盖范围 | 典型断言 | 缺失风险 |
|
|
8
|
+
|------|---------|---------|---------|
|
|
9
|
+
| **L1 能力** | API、状态机、mapper、脏数据 | 接口封装、枚举映射、mutation 参数 | 主流程不通 |
|
|
10
|
+
| **L2 交互契约** | 列序、disabled、toast、tooltip、placeholder | **完整字符串**(禁止 `toContain('成功')`) | PRD 细节漏项 |
|
|
11
|
+
| **L3 路径** | 每页面/每主链路一条 E2E | 登录 → 设规则 → 结果页重审 | 只 smoke 一条路径 |
|
|
12
|
+
| **L4 视觉** | 原型图 / Figma / `playwright-pic` | 列位置、紫色摘要、布局两行限制 | UI 与原型偏差 |
|
|
13
|
+
|
|
14
|
+
## 与 05-验收清单的绑定
|
|
15
|
+
|
|
16
|
+
1. 每条 AC 的「测试类型」列决定最低层级(`unit`→L1/L2,`e2e`→L3,`visual`→L4)。
|
|
17
|
+
2. `tasks.md` 的 Red task 标题须含 `[AC-XX]`,断言文案从 05「验收标准」列复制。
|
|
18
|
+
3. P0 AC 至少一条自动化测试(unit/component/e2e);纯 `manual` 的 P0 须在 deliver 前在 05 标 `已验收` 并注明证据路径。
|
|
19
|
+
|
|
20
|
+
## UI 类 change 强制规则
|
|
21
|
+
|
|
22
|
+
- **每个受影响页面**至少 **1 条 E2E**(非单点 smoke)。
|
|
23
|
+
- **列表/表格类**:断言列顺序(`nth-child`、`data-column-index` 或表头文案顺序)。
|
|
24
|
+
- **文案类**:断言 PRD/05 中的**完整** toast、tooltip、placeholder。
|
|
25
|
+
- **弹窗类**:单条/批量模式、保存成功/失败分支均须有 L2 或 L3 覆盖。
|
|
26
|
+
|
|
27
|
+
## Playwright
|
|
28
|
+
|
|
29
|
+
- 默认无头;每用例结束截图到 `playwright-pic/<module>/<change>/`。
|
|
30
|
+
- change 级 scope 须覆盖 05 中所有 `e2e` 类型 AC。
|
|
31
|
+
|
|
32
|
+
## TDD Red 阶段
|
|
33
|
+
|
|
34
|
+
- 先写失败测试,断言来自 `05-验收清单.md`,再写实现。
|
|
35
|
+
- 禁止「规则列展示」类模糊断言;须写清「第 N 列」「文案为 XXX」。
|