xwang 0.0.8 → 0.0.9
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.
|
@@ -50,15 +50,19 @@ validate_change_name() {
|
|
|
50
50
|
red "ERROR: Change name cannot be empty" >&2
|
|
51
51
|
exit 1
|
|
52
52
|
fi
|
|
53
|
-
if [[ ! "$name" =~ ^[a-zA-Z0-9_-]+$ ]]; then
|
|
54
|
-
red "ERROR: Invalid change name: '$name'" >&2
|
|
55
|
-
red "Valid characters: a-z, A-Z, 0-9, -, _" >&2
|
|
56
|
-
exit 1
|
|
57
|
-
fi
|
|
58
53
|
if [[ "$name" =~ \.\. ]]; then
|
|
59
54
|
red "ERROR: Change name cannot contain '..' (path traversal not allowed)" >&2
|
|
60
55
|
exit 1
|
|
61
56
|
fi
|
|
57
|
+
# Reject path separators, whitespace, control chars, and shell metacharacters.
|
|
58
|
+
# CJK characters and other Unicode letters are allowed.
|
|
59
|
+
if printf '%s' "$name" | perl -ne 'exit 1 if m{[/\\\s\0-\x1F\x7F;|&$`()<>{}[\]*'"'"'"!#@%^=+~]}; exit 0'; then
|
|
60
|
+
: # valid
|
|
61
|
+
else
|
|
62
|
+
red "ERROR: Invalid change name: '$name'" >&2
|
|
63
|
+
red "Avoid: / \\ spaces control chars and shell metacharacters" >&2
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
if [ "${XWANG_GUARD_SOURCE_ONLY:-0}" = "1" ]; then
|
|
@@ -62,15 +62,19 @@ validate_change_name() {
|
|
|
62
62
|
red "ERROR: Change name cannot be empty" >&2
|
|
63
63
|
exit 1
|
|
64
64
|
fi
|
|
65
|
-
if [[ ! "$name" =~ ^[a-zA-Z0-9_-]+$ ]]; then
|
|
66
|
-
red "ERROR: Invalid change name: '$name'" >&2
|
|
67
|
-
red "Valid characters: a-z, A-Z, 0-9, -, _" >&2
|
|
68
|
-
exit 1
|
|
69
|
-
fi
|
|
70
65
|
if [[ "$name" =~ \.\. ]]; then
|
|
71
66
|
red "ERROR: Change name cannot contain '..' (path traversal not allowed)" >&2
|
|
72
67
|
exit 1
|
|
73
68
|
fi
|
|
69
|
+
# Reject path separators, whitespace, control chars, and shell metacharacters.
|
|
70
|
+
# CJK characters and other Unicode letters are allowed.
|
|
71
|
+
if printf '%s' "$name" | perl -ne 'exit 1 if m{[/\\\s\0-\x1F\x7F;|&$`()<>{}[\]*'"'"'"!#@%^=+~]}; exit 0'; then
|
|
72
|
+
: # valid
|
|
73
|
+
else
|
|
74
|
+
red "ERROR: Invalid change name: '$name'" >&2
|
|
75
|
+
red "Avoid: / \\ spaces control chars and shell metacharacters" >&2
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
validate_enum() {
|
|
@@ -11,10 +11,10 @@ description: 启动 xwang 项目阶段2:深度设计,明确需求并同步
|
|
|
11
11
|
|
|
12
12
|
1. 调用 `/grill-with-docs` 围绕需求目标、范围、用户、约束、验收标准等逐层追问,同时对照现有领域模型和文档(CONTEXT.md、ADRs)挑战术语、澄清冲突,直到达成共识。
|
|
13
13
|
2. **强制进行 PRD 拆分预检(阻塞点)**:`/grill-with-docs` 确认需求完成后,**必须**输出一份 `PRD 拆分预检报告`,基于已澄清信息评估是否需要拆分为多个 change。**无论是否需要拆分,都必须停下来向用户展示报告并等待明确选择**;未确认前不得生成 PRD 或创建 OpenSpec change。
|
|
14
|
-
3. grilling
|
|
14
|
+
3. grilling 结束后,根据需求内容自己总结一个简洁的中文需求名称 `<name>`,用于生成 `docs/mattpocock/<name>-prd.md`。
|
|
15
15
|
4. 创建 `docs/mattpocock/` 目录(如不存在)。
|
|
16
16
|
5. **需求澄清完成确认(阻塞点)**:向用户输出一份结构化的需求摘要(目标、范围、用户、核心行为、边界情况、非功能性需求、依赖与限制),等待用户明确确认或提出修改;未确认前不得生成 PRD 或创建 OpenSpec change。
|
|
17
|
-
6. 用户确认后,调用 `/to-prd`
|
|
17
|
+
6. 用户确认后,调用 `/to-prd` 基于对话上下文合成 PRD。
|
|
18
18
|
7. 将生成的 PRD 内容写入 `docs/mattpocock/<name>-prd.md`。
|
|
19
19
|
8. 直接调用 `/openspec-new-change`:以 `<name>` 作为 change 名称,将 PRD 的中文内容作为 change 文档/上下文创建 change,过程中无需用户确认;若 `/openspec-new-change` 流程中出现任何确认提示(如“是否继续创建 proposal.md?”),直接代为确认并继续,不得将确认问题抛给用户;**要求 `/openspec-new-change` 生成的所有文档/artifact 必须使用中文表述,包括但不限于 `proposal.md`、`design.md`、`tasks.md` 以及 `specs/*/spec.md`**。
|
|
20
20
|
9. **初始化 xwang 状态**:调用 `"$XWANG_STATE" init <name> full`,在 `openspec/changes/<name>/.xwang.yaml` 创建状态文件(起始 phase 为 `design`)。
|
|
@@ -97,7 +97,7 @@ grilling 确认完成后、生成 PRD 前,**必须**执行 PRD 拆分预检并
|
|
|
97
97
|
|
|
98
98
|
### Step 1b:需求澄清完成确认(阻塞点)
|
|
99
99
|
|
|
100
|
-
- [ ] grilling
|
|
100
|
+
- [ ] grilling 结束后,根据需求核心内容自己生成一个简洁的中文名称(如 `会议周视图 UI 增强`)作为 `<name>`,直接使用无需确认。
|
|
101
101
|
- [ ] 使用 `mkdir -p docs/mattpocock` 确保目录存在。
|
|
102
102
|
- [ ] 向用户输出结构化的**需求确认摘要**(建议包含:目标、范围、目标用户、核心行为、边界情况、非功能性需求、依赖与限制)。
|
|
103
103
|
- [ ] **必须使用当前平台可用的用户输入/确认机制暂停并等待用户确认需求澄清完成**。若用户提出修改,根据反馈调整摘要并再次确认,直到达成共识。
|