sdd-flow-kit 1.3.0 → 1.3.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdd-flow-kit",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "private": false,
5
5
  "description": "Cross-agent SDD automated development workflow kit (ADI/ADI-like).",
6
6
  "license": "MIT",
@@ -12,9 +12,11 @@ python3 confluence-doc.py {{VERSION_EXAMPLE}}
12
12
 
13
13
  版本号可传:`2.3.2`、`V2.3.2`、`ADI_V2.3.2`、`ADI-V2.3.2`(脚本会归一化)。
14
14
 
15
- 2. 脚本会依次搜索:`{{PRODUCT_PREFIX}}-V*`、`{{PRODUCT_PREFIX}}_V*`、`{{PRODUCT_PREFIX}} V*`、`V*` 等。
15
+ 2. 脚本会依次搜索(含用户原样输入):`ADI_V*` → `ADI-V*` → `ADI_*` → `ADI-*` → `ADI_v*` → `ADI-v*` → `ADI V*` → `V*` 等。
16
16
 
17
- 3. 成功后把生成的 `docs/*.md` **主文档**复制/回填到本 run 目录:
17
+ 3. **禁止**在 Confluence 脚本未跑完或未确认失败前,用本地 Word/原型替代 `source/PRD.md`。
18
+
19
+ 4. 成功后把生成的 `docs/*.md` **主文档**复制/回填到本 run 目录:
18
20
  - `source/PRD.md`
19
21
 
20
22
  ## 路径说明
@@ -61,24 +61,52 @@ def version_slug(prefix: str, version: str) -> str:
61
61
  return prefix.lower() + "-v" + version.replace(".", "")
62
62
 
63
63
 
64
- def search_keywords(prefix: str, version: str) -> list[str]:
65
- """固定顺序(与用户 Confluence 全局搜索习惯一致)。"""
64
+ def dedupe_keywords(items: list[str]) -> list[str]:
65
+ """去重并保持顺序。"""
66
+ seen: set[str] = set()
67
+ out: list[str] = []
68
+ for item in items:
69
+ key = item.strip()
70
+ if not key or key in seen:
71
+ continue
72
+ seen.add(key)
73
+ out.append(key)
74
+ return out
75
+
76
+
77
+ def search_keywords(prefix: str, version: str, raw_input: str | None = None) -> list[str]:
78
+ """固定顺序(与用户 Confluence 全局搜索习惯一致)。
79
+
80
+ ADI 等产品的典型降级链:
81
+ 用户原样输入 → ADI_V2.3.4 → ADI-V2.3.4 → ADI_2.3.4 → ADI-2.3.4
82
+ → ADI_v2.3.4 → ADI-v2.3.4 → ADI V2.3.4 → V2.3.4
83
+ """
66
84
  p = prefix.strip()
67
85
  # BreakX(破圈引擎)PRD 在 xhs 空间,页面标题多为 V1.0.2 xxx,而非 BreakX_V1.0.2
68
86
  if p.upper() in ("BREAKX", "BX"):
69
- return [
87
+ return dedupe_keywords(
88
+ [
89
+ *( [raw_input.strip()] if raw_input and raw_input.strip() else [] ),
90
+ f"V{version}",
91
+ f"BreakX V{version}",
92
+ f"BreakX_V{version}",
93
+ f"BreakX-V{version}",
94
+ f"xhs V{version}",
95
+ ]
96
+ )
97
+ return dedupe_keywords(
98
+ [
99
+ *( [raw_input.strip()] if raw_input and raw_input.strip() else [] ),
100
+ f"{prefix}_V{version}",
101
+ f"{prefix}-V{version}",
102
+ f"{prefix}_{version}",
103
+ f"{prefix}-{version}",
104
+ f"{prefix}_v{version}",
105
+ f"{prefix}-v{version}",
106
+ f"{prefix} V{version}",
70
107
  f"V{version}",
71
- f"BreakX V{version}",
72
- f"BreakX_V{version}",
73
- f"BreakX-V{version}",
74
- f"xhs V{version}",
75
108
  ]
76
- return [
77
- f"{prefix}_V{version}",
78
- f"{prefix}-V{version}",
79
- f"{prefix}_{version}",
80
- f"{prefix}-{version}",
81
- ]
109
+ )
82
110
 
83
111
 
84
112
  def sanitize_filename(name: str) -> str:
@@ -398,8 +426,9 @@ def main():
398
426
  prefix = os.environ.get("DOC_PRODUCT_PREFIX", "{{DOC_PRODUCT_PREFIX}}").strip() or "{{DOC_PRODUCT_PREFIX}}"
399
427
  if prefix.upper() in ("BREAKX", "BX") and not os.environ.get("CONFLUENCE_SPACE"):
400
428
  os.environ["CONFLUENCE_SPACE"] = "xhs"
401
- version = normalize_version(sys.argv[1])
402
- keywords = search_keywords(prefix, version)
429
+ raw_arg = sys.argv[1].strip()
430
+ version = normalize_version(raw_arg)
431
+ keywords = search_keywords(prefix, version, raw_input=raw_arg)
403
432
 
404
433
  # 输出目录默认为仓库 docs/ 下
405
434
  default_download = os.environ.get("DOC_DOWNLOAD_DIR")
@@ -463,7 +492,8 @@ def main():
463
492
  pass
464
493
  print(f"❌ 未找到 {prefix} {version} 的需求文档。")
465
494
  print(
466
- " 排查:1) 是否存在 PRD 父级页面 2) 依次尝试 ADI_V2.3.2 / ADI-V2.3.2 / ADI_2.3.2 / ADI-2.3.2"
495
+ " 排查:1) 是否存在 PRD 父级页面 2) 依次尝试 "
496
+ "ADI_V2.3.4 / ADI-V2.3.4 / ADI_2.3.4 / ADI-2.3.4 / ADI_v2.3.4 / V2.3.4"
467
497
  )
468
498
  print(" 3) 或设置 CONFLUENCE_PAGE_URL=<页面完整URL> 直接下载")
469
499
  sys.exit(1)