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.
Files changed (31) hide show
  1. package/README.md +71 -45
  2. package/dist/adapters/index.js +6 -6
  3. package/dist/cli.js +45 -9
  4. package/dist/core/acMatrix.js +116 -0
  5. package/dist/core/bootstrap.js +14 -6
  6. package/dist/core/inferProject.js +9 -2
  7. package/dist/core/openspecGate.js +45 -0
  8. package/dist/core/prdArtifacts.js +26 -0
  9. package/dist/core/projectRoots.js +79 -2
  10. package/dist/core/sessionState.js +2 -0
  11. package/dist/core/writeNext.js +19 -2
  12. package/dist/postinstall.js +22 -8
  13. package/dist/steps/runDeliver.js +18 -6
  14. package/dist/steps/runGate.js +97 -0
  15. package/dist/steps/runPhaseAdvance.js +53 -6
  16. package/dist/steps/runPropose.js +3 -1
  17. package/dist/steps/runValidate.js +204 -0
  18. package/dist/steps/setupProject.js +65 -2
  19. package/dist/steps/startFlow.js +14 -11
  20. package/package.json +1 -1
  21. 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
  22. package/src/templates/artifacts/04-/346/212/200/346/234/257/346/226/207/346/241/243.template.md +272 -11
  23. package/src/templates/artifacts/05-/351/252/214/346/224/266/346/270/205/345/215/225.template.md +38 -0
  24. package/src/templates/artifacts/06-agent-skill.template.md +23 -9
  25. package/src/templates/artifacts/{05-openspec- → 06-openspec-}/346/217/220/346/241/210/350/215/211/347/250/277.template.md +16 -4
  26. package/src/templates/artifacts/{06-opsx-auto-chain.template.md → 07-opsx-auto-chain.template.md} +23 -9
  27. package/src/templates/prompts/02-sdd-loop-prompt.md +26 -9
  28. package/src/templates/rules/sdd-no-implement-until-apply.mdc.template +27 -8
  29. package/src/templates/skills/confluence-doc.py.template +25 -1
  30. package/src/templates/skills/doc-skill.SKILL.md.template +2 -0
  31. 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 全局搜索习惯一致)。无论用户输入 ADI 2.3.2 还是 ADI_V2.3.2 都走这一套。"""
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
 
@@ -63,6 +63,8 @@ python3 confluence-doc.py {{PRODUCT_PREFIX}}_V1.2.3
63
63
 
64
64
  ## 注意事项
65
65
 
66
+ {{CONFLUENCE_SPACE_NOTE}}
67
+
66
68
  - 依赖 Playwright:`pip install playwright && playwright install chromium`
67
69
  - 脚本:`docs/{{SKILL_DIR}}/confluence-doc.py`
68
70
  - 脚本已内置默认账号密码;如需使用其他账号可用环境变量覆盖
@@ -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」。