xwang 0.0.2 → 0.0.3
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.
|
@@ -16,14 +16,40 @@ if [ ! -f "$XWANG_STATE" ]; then
|
|
|
16
16
|
return 1
|
|
17
17
|
fi
|
|
18
18
|
|
|
19
|
+
# Locate a file by expanding globs under a list of directories.
|
|
20
|
+
# Avoids `find` so it works on Windows where only CMD/PowerShell find.exe exists.
|
|
21
|
+
locate_by_glob() {
|
|
22
|
+
local glob="$1"
|
|
23
|
+
shift
|
|
24
|
+
local dir candidate
|
|
25
|
+
for dir in "$@"; do
|
|
26
|
+
[ -d "$dir" ] || continue
|
|
27
|
+
for candidate in "$dir"/$glob; do
|
|
28
|
+
if [ -f "$candidate" ]; then
|
|
29
|
+
printf '%s' "$candidate"
|
|
30
|
+
return 0
|
|
31
|
+
fi
|
|
32
|
+
done
|
|
33
|
+
done
|
|
34
|
+
return 1
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Search locations, in order of preference.
|
|
38
|
+
SEARCH_DIRS=(
|
|
39
|
+
"$XWANG_SCRIPT_DIR"
|
|
40
|
+
"$XWANG_SCRIPT_DIR/.."
|
|
41
|
+
"$HOME"
|
|
42
|
+
"$HOME/.config"
|
|
43
|
+
)
|
|
44
|
+
|
|
19
45
|
# Locate xwang-open-check.sh dynamically without hardcoding a .claude path.
|
|
20
|
-
# Prefer the sibling relative location, then fall back to a
|
|
46
|
+
# Prefer the sibling relative location, then fall back to a glob search.
|
|
21
47
|
if [ -z "${XWANG_OPEN_CHECK:-}" ]; then
|
|
22
|
-
XWANG_OPEN_CHECK_SIBLING="${XWANG_SCRIPT_DIR}
|
|
48
|
+
XWANG_OPEN_CHECK_SIBLING="${XWANG_SCRIPT_DIR}/../../xwang-open/scripts/xwang-open-check.sh"
|
|
23
49
|
if [ -f "$XWANG_OPEN_CHECK_SIBLING" ]; then
|
|
24
|
-
XWANG_OPEN_CHECK="$XWANG_OPEN_CHECK_SIBLING"
|
|
50
|
+
XWANG_OPEN_CHECK="$(cd "$(dirname "$XWANG_OPEN_CHECK_SIBLING")" && pwd)/$(basename "$XWANG_OPEN_CHECK_SIBLING")"
|
|
25
51
|
else
|
|
26
|
-
XWANG_OPEN_CHECK="$(
|
|
52
|
+
XWANG_OPEN_CHECK="$(locate_by_glob '*/xwang-open/scripts/xwang-open-check.sh' "${SEARCH_DIRS[@]}" 2>/dev/null || true)"
|
|
27
53
|
fi
|
|
28
54
|
fi
|
|
29
55
|
export XWANG_OPEN_CHECK
|
|
@@ -32,9 +58,9 @@ export XWANG_OPEN_CHECK
|
|
|
32
58
|
if [ -z "${XWANG_GUARD:-}" ]; then
|
|
33
59
|
XWANG_GUARD_SIBLING="${XWANG_SCRIPT_DIR}/xwang-guard.sh"
|
|
34
60
|
if [ -f "$XWANG_GUARD_SIBLING" ]; then
|
|
35
|
-
XWANG_GUARD="$XWANG_GUARD_SIBLING"
|
|
61
|
+
XWANG_GUARD="$(cd "$(dirname "$XWANG_GUARD_SIBLING")" && pwd)/$(basename "$XWANG_GUARD_SIBLING")"
|
|
36
62
|
else
|
|
37
|
-
XWANG_GUARD="$(
|
|
63
|
+
XWANG_GUARD="$(locate_by_glob '*/xwang/scripts/xwang-guard.sh' "${SEARCH_DIRS[@]}" 2>/dev/null || true)"
|
|
38
64
|
fi
|
|
39
65
|
fi
|
|
40
66
|
export XWANG_GUARD
|
|
@@ -10,7 +10,7 @@ description: 启动 xwang 项目阶段2:深度设计,明确需求并同步
|
|
|
10
10
|
当用户触发 xwang 阶段2时:
|
|
11
11
|
|
|
12
12
|
1. 调用 `/grill-with-docs` 围绕需求目标、范围、用户、约束、验收标准等逐层追问,同时对照现有领域模型和文档(CONTEXT.md、ADRs)挑战术语、澄清冲突,直到达成共识。
|
|
13
|
-
2.
|
|
13
|
+
2. **强制进行 PRD 拆分预检(阻塞点)**:`/grill-with-docs` 确认需求完成后,**必须**输出一份 `PRD 拆分预检报告`,基于已澄清信息评估是否需要拆分为多个 change。**无论是否需要拆分,都必须停下来向用户展示报告并等待明确选择**;未确认前不得生成 PRD 或创建 OpenSpec change。
|
|
14
14
|
3. grilling 结束后,根据需求内容自己总结一个简洁的 kebab-case 需求名称 `<name>`,用于生成 `docs/mattpocock/<name>-prd.md`。
|
|
15
15
|
4. 创建 `docs/mattpocock/` 目录(如不存在)。
|
|
16
16
|
5. **需求澄清完成确认(阻塞点)**:向用户输出一份结构化的需求摘要(目标、范围、用户、核心行为、边界情况、非功能性需求、依赖与限制),等待用户明确确认或提出修改;未确认前不得生成 PRD 或创建 OpenSpec change。
|
|
@@ -50,24 +50,50 @@ fi
|
|
|
50
50
|
- [ ] 确认用户要启动 xwang 阶段2(关键词:xwang-design、xwang 阶段2、开始 xwang)。
|
|
51
51
|
- [ ] 调用 `/grill-with-docs`,从用户视角深挖:目标用户、核心问题、预期行为、边界情况、非功能性需求、依赖与限制;并对照现有 CONTEXT.md/ADRs 挑战术语、澄清冲突,必要时实时更新文档。
|
|
52
52
|
- [ ] grilling 过程中持续追问,直到形成清晰的需求理解。
|
|
53
|
+
- [ ] `/grill-with-docs` 完成需求确认后,**不得立即生成 PRD**,必须先进入 Step 1a 的强制拆分预检。
|
|
53
54
|
|
|
54
|
-
### Step 1a:PRD
|
|
55
|
+
### Step 1a:PRD 拆分预检(强制阻塞点)
|
|
55
56
|
|
|
56
|
-
grilling
|
|
57
|
+
grilling 确认完成后、生成 PRD 前,**必须**执行 PRD 拆分预检并输出报告。
|
|
57
58
|
|
|
58
|
-
- [ ]
|
|
59
|
-
|
|
59
|
+
- [ ] **输出《PRD 拆分预检报告》**,格式如下:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
### PRD 拆分预检报告
|
|
63
|
+
|
|
64
|
+
评估结论:<建议拆分 / 无需拆分>
|
|
65
|
+
|
|
66
|
+
触发拆分的信号(如存在):
|
|
67
|
+
- <信号1:例如 涉及多个独立 capability>
|
|
68
|
+
- <信号2:例如 预计超过 3 个大任务>
|
|
69
|
+
- ...
|
|
70
|
+
|
|
71
|
+
候选拆分清单(仅在建议拆分时输出):
|
|
72
|
+
1. <change-name-1>
|
|
73
|
+
- 目标与范围:<一句话描述>
|
|
74
|
+
- 明确非目标:<本 change 不做的事>
|
|
75
|
+
- 依赖关系/推荐顺序:<依赖谁、谁先谁后>
|
|
76
|
+
- 核心验收场景:<1-2 个验收场景>
|
|
77
|
+
2. <change-name-2>
|
|
78
|
+
...
|
|
79
|
+
|
|
80
|
+
用户选择:
|
|
81
|
+
- [ ] 创建多个 OpenSpec changes(按候选拆分逐个创建)
|
|
82
|
+
- [ ] 保持为一个 change(并在 PRD 中记录不拆分原因)
|
|
83
|
+
- [ ] 调整拆分方案(用户说明方向后重新输出报告并再次确认)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- [ ] 满足任一条件时结论必须为「建议拆分」:
|
|
60
87
|
- PRD 包含多个可独立设计、构建、验证、归档的 capability
|
|
61
88
|
- 涉及多个模块或用户路径,且其中一部分可独立交付
|
|
62
89
|
- 存在明显分阶段里程碑
|
|
63
90
|
- 预计会产生多个 delta spec 或超过 3 个大任务
|
|
64
91
|
- 任一部分失败或延期不应阻塞其他部分进入后续阶段
|
|
65
|
-
- [ ]
|
|
66
|
-
- **创建多个 OpenSpec changes**:按候选拆分逐个创建独立 change
|
|
67
|
-
- **保持为一个 change**:继续单 change 流程,并在 PRD 中记录不拆分原因
|
|
68
|
-
- **调整拆分方案后继续**:用户说明调整方向后,重新输出候选拆分清单并再次确认
|
|
92
|
+
- [ ] **无论结论如何,都必须使用当前平台可用的用户输入/确认机制暂停并等待用户选择**。
|
|
69
93
|
- [ ] 用户选择「创建多个 changes」后,当前 `/xwang-design` 调用只完成拆分确认;随后按用户确认的顺序分别进入每个拆分项的 `/xwang-design`,每个拆分项默认跳过本预检。
|
|
70
|
-
- [ ]
|
|
94
|
+
- [ ] 用户选择「保持为一个 change」后,必须在最终 PRD 中显式记录“不拆分原因”,然后继续后续步骤。
|
|
95
|
+
- [ ] 用户选择「调整拆分方案」后,根据用户反馈重新输出预检报告并再次等待确认。
|
|
96
|
+
- [ ] **未得到用户明确选择前,不得生成 PRD,不得创建 OpenSpec change。**
|
|
71
97
|
|
|
72
98
|
### Step 1b:需求澄清完成确认(阻塞点)
|
|
73
99
|
|
|
@@ -81,6 +107,7 @@ grilling 结束后、生成 PRD 前,基于已澄清信息评估是否需要拆
|
|
|
81
107
|
|
|
82
108
|
- [ ] 用户确认后,调用 `/to-prd` 生成**中文** PRD(遵循 to-prd 的 PRD 模板),无需额外用户确认。
|
|
83
109
|
- [ ] 将 PRD 写入 `docs/mattpocock/<name>-prd.md`;如果 grilling 过程中名称有调整,使用最终生成的名称。
|
|
110
|
+
- [ ] **如果 Step 1a 结论为「保持为一个 change」,在 PRD 中显式写入“不拆分原因”章节。**
|
|
84
111
|
|
|
85
112
|
### Step 3:创建 OpenSpec change
|
|
86
113
|
|