@mycodemap/mycodemap 0.5.2-beta.1 → 1.9.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/CHANGELOG.md +14 -0
- package/README.md +84 -10
- package/dist/cli/commands/init.d.ts +7 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -34
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/publish-status.d.ts +31 -0
- package/dist/cli/commands/publish-status.d.ts.map +1 -0
- package/dist/cli/commands/publish-status.js +101 -0
- package/dist/cli/commands/publish-status.js.map +1 -0
- package/dist/cli/commands/readiness-gate.d.ts +25 -0
- package/dist/cli/commands/readiness-gate.d.ts.map +1 -0
- package/dist/cli/commands/readiness-gate.js +197 -0
- package/dist/cli/commands/readiness-gate.js.map +1 -0
- package/dist/cli/commands/ship/checker.d.ts +4 -9
- package/dist/cli/commands/ship/checker.d.ts.map +1 -1
- package/dist/cli/commands/ship/checker.js +60 -22
- package/dist/cli/commands/ship/checker.js.map +1 -1
- package/dist/cli/commands/ship/monitor.d.ts +6 -1
- package/dist/cli/commands/ship/monitor.d.ts.map +1 -1
- package/dist/cli/commands/ship/monitor.js +223 -46
- package/dist/cli/commands/ship/monitor.js.map +1 -1
- package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/ship/pipeline.js +14 -5
- package/dist/cli/commands/ship/pipeline.js.map +1 -1
- package/dist/cli/commands/ship/rules/quality-rules.d.ts +12 -8
- package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -1
- package/dist/cli/commands/ship/rules/quality-rules.js +49 -34
- package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -1
- package/dist/cli/config-loader.js +1 -1
- package/dist/cli/config-loader.js.map +1 -1
- package/dist/cli/first-run-guide.d.ts.map +1 -1
- package/dist/cli/first-run-guide.js +10 -12
- package/dist/cli/first-run-guide.js.map +1 -1
- package/dist/cli/index.js +8 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hooks.d.ts +17 -0
- package/dist/cli/init/hooks.d.ts.map +1 -0
- package/dist/cli/init/hooks.js +220 -0
- package/dist/cli/init/hooks.js.map +1 -0
- package/dist/cli/init/receipt.d.ts +4 -0
- package/dist/cli/init/receipt.d.ts.map +1 -0
- package/dist/cli/init/receipt.js +117 -0
- package/dist/cli/init/receipt.js.map +1 -0
- package/dist/cli/init/reconciler.d.ts +44 -0
- package/dist/cli/init/reconciler.d.ts.map +1 -0
- package/dist/cli/init/reconciler.js +377 -0
- package/dist/cli/init/reconciler.js.map +1 -0
- package/dist/cli/init/rule-templates.d.ts +9 -0
- package/dist/cli/init/rule-templates.d.ts.map +1 -0
- package/dist/cli/init/rule-templates.js +105 -0
- package/dist/cli/init/rule-templates.js.map +1 -0
- package/dist/cli/init/rules.d.ts +13 -0
- package/dist/cli/init/rules.d.ts.map +1 -0
- package/dist/cli/init/rules.js +113 -0
- package/dist/cli/init/rules.js.map +1 -0
- package/dist/cli/paths.d.ts +4 -2
- package/dist/cli/paths.d.ts.map +1 -1
- package/dist/cli/paths.js +13 -5
- package/dist/cli/paths.js.map +1 -1
- package/dist/orchestrator/test-linker.d.ts.map +1 -1
- package/dist/orchestrator/test-linker.js +5 -36
- package/dist/orchestrator/test-linker.js.map +1 -1
- package/docs/AI_ASSISTANT_SETUP.md +4 -2
- package/docs/SETUP_GUIDE.md +12 -12
- package/docs/agents/domain.md +36 -0
- package/docs/agents/issue-tracker.md +22 -0
- package/docs/agents/triage-labels.md +15 -0
- package/docs/ai-guide/COMMANDS.md +57 -3
- package/docs/ai-guide/INTEGRATION.md +1 -1
- package/docs/ai-guide/PATTERNS.md +3 -3
- package/docs/ai-guide/QUICKSTART.md +13 -4
- package/docs/ai-guide/README.md +7 -7
- package/docs/archive/ideation/2026-04-22-harness-rules-entry-docs-optimization-ideation.md +102 -0
- package/docs/archive/ideation/2026-04-22-rules-claude-agents-optimization-ideation.md +107 -0
- package/docs/brainstorms/2026-04-22-rules-entry-docs-phase1-structure-consolidation-requirements.md +110 -0
- package/docs/brainstorms/999.1-mycodemap-init-enhancements-requirements.md +166 -0
- package/docs/exec-plans/README.md +3 -0
- package/docs/ideation/2026-04-20-mycodemap-init-enhancements-ideation.md +96 -0
- package/docs/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation.md +119 -0
- package/docs/lesson-learn/2026-04-19-prerelease-trusted-publishing-fix.md +119 -0
- package/docs/lesson-learn/image.png +0 -0
- package/docs/rules/README.md +4 -1
- package/docs/rules/deployment.md +7 -0
- package/docs/rules/engineering-with-codex-openai.md +47 -8
- package/docs/rules/pre-release-checklist.md +44 -33
- package/docs/rules/release.md +303 -0
- package/docs/rules/testing.md +19 -0
- package/docs/rules/validation.md +16 -7
- package/mycodemap.config.schema.json +1 -1
- package/package.json +3 -3
- package/scripts/hooks/templates/commit-msg +38 -0
- package/scripts/hooks/templates/pre-commit +224 -0
- package/scripts/pre-release-check.js +4 -4
- package/scripts/release.sh +1 -1
- package/scripts/validate-docs.js +283 -14
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# 版本发布工作流程
|
|
2
|
+
|
|
3
|
+
> 本文档定义 `/release` 命令的完整操作流程。
|
|
4
|
+
> 它是 milestone closeout 与 npm 发布的统一编排入口,也是 `/release` 的单一权威文档。
|
|
5
|
+
>
|
|
6
|
+
> **适用对象**:执行发布的 AI 助手或人类操作者。
|
|
7
|
+
> **前置阅读**:`docs/rules/pre-release-checklist.md`、`docs/rules/deployment.md`。
|
|
8
|
+
|
|
9
|
+
> **Runtime adapters**:`.claude/skills/release/SKILL.md` 与 `.agents/skills/release/SKILL.md` 只允许作为运行时薄适配器存在。它们必须回指本文档,不能替代这里的单一权威流程。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 核心原则
|
|
14
|
+
|
|
15
|
+
1. **1:1 绑定**:每个 milestone 对应一个 npm release。
|
|
16
|
+
2. **版本统一**:milestone 版本即 npm 版本(`vX.Y → X.Y.0`,例如 `v1.9 → 1.9.0`)。
|
|
17
|
+
3. **二次确认**:在触发任何不可逆操作(版本 bump、tag 创建、远程推送)之前,必须等待用户显式确认。
|
|
18
|
+
4. **Thin orchestrator**:`/release` 只做编排和确认门,实际工作委托给现有工具链(`$gsd-complete-milestone`、`scripts/release.sh`、`.github/workflows/publish.yml`)。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 角色分级
|
|
23
|
+
|
|
24
|
+
发布操作在 `AGENTS.md` 中定义为 **L3-禁止** 等级:
|
|
25
|
+
|
|
26
|
+
- AI **不得**自主执行版本号变更、tag 创建、远程推送。
|
|
27
|
+
- AI **可以**运行验证检查、准备方案、展示摘要、等待用户确认后执行。
|
|
28
|
+
- 用户确认是**必需**的,不是可选的。
|
|
29
|
+
- 本流程必须严格经过两道确认门;任何缺少显式确认的发布都视为无效。
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 触发条件
|
|
34
|
+
|
|
35
|
+
运行 `/release v{X.Y}` 命令必须同时满足:
|
|
36
|
+
|
|
37
|
+
1. 当前存在 **已完成且可 closeout** 的 milestone;如果 milestone 已归档,`/release` 只可在做版本发布补步骤时继续,不能跳过 readiness 检查。
|
|
38
|
+
2. 用户显式提供了目标版本号(如 `/release v1.9`)。
|
|
39
|
+
3. 当前工作区干净(无未提交修改)。
|
|
40
|
+
4. 当前分支为 `main`(或仓库定义的发布分支)。
|
|
41
|
+
5. 本地与远程都不存在冲突的目标 tag(例如 `v1.9.0`)。
|
|
42
|
+
|
|
43
|
+
如果以上任一不满足,`/release` 应拒绝执行并说明原因。
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 工作流程
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/release v{X.Y}
|
|
51
|
+
↓
|
|
52
|
+
① 验证触发条件
|
|
53
|
+
② 检查 milestone readiness
|
|
54
|
+
③ 运行 `$gsd-complete-milestone v{X.Y}`
|
|
55
|
+
④ 【Confirmation Gate #1】展示归档摘要
|
|
56
|
+
⑤ 计算并展示版本映射
|
|
57
|
+
⑥ 【Confirmation Gate #2】展示发布摘要
|
|
58
|
+
⑦ 委托机械发布 helper
|
|
59
|
+
⑧ 验证 GitHub Actions 触发
|
|
60
|
+
⑨ 完成报告
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 步骤详解
|
|
64
|
+
|
|
65
|
+
#### ① 验证触发条件
|
|
66
|
+
|
|
67
|
+
检查以下项目,任一失败则终止并报告:
|
|
68
|
+
|
|
69
|
+
- [ ] 用户提供了明确的目标版本号(`v{X.Y}` 格式)
|
|
70
|
+
- [ ] `git status --porcelain` 为空(工作区干净)
|
|
71
|
+
- [ ] 当前分支为 `main`(或项目配置的 base branch)
|
|
72
|
+
- [ ] milestone 已完成并具备 closeout/readiness 证据
|
|
73
|
+
- [ ] 本地不存在目标 tag,远程也不存在同名发布 tag
|
|
74
|
+
- [ ] `package.json` 当前版本已读出,可计算目标版本映射
|
|
75
|
+
|
|
76
|
+
#### ② 检查 Milestone Readiness
|
|
77
|
+
|
|
78
|
+
运行以下检查,收集状态信息用于后续确认门:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# 运行 readiness gate(hard / warn-only / fallback 三层语义)
|
|
82
|
+
mycodemap readiness-gate
|
|
83
|
+
|
|
84
|
+
# 或结构化输出
|
|
85
|
+
mycodemap readiness-gate --json --structured
|
|
86
|
+
|
|
87
|
+
# 检查开放工件
|
|
88
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" audit-open 2>/dev/null
|
|
89
|
+
|
|
90
|
+
# 验证 roadmap 状态
|
|
91
|
+
# (roadmap analyze 输出)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
要求:
|
|
95
|
+
- 所有 phase 有 `SUMMARY.md`
|
|
96
|
+
- 所有 requirement 已勾选(或已记录为 deferred)
|
|
97
|
+
- 无未解决的 blocker
|
|
98
|
+
- readiness gate 无 `fallback` 状态(若存在 fallback,需人工判断后方可继续)
|
|
99
|
+
|
|
100
|
+
如果有开放项目,展示给用户并要求选择:
|
|
101
|
+
- [R] 解决 — 停止,修复后重新运行 `/release`
|
|
102
|
+
- [A] 确认延期 — 记录到 `STATE.md` Deferred Items,继续
|
|
103
|
+
- [C] 取消 — 退出
|
|
104
|
+
|
|
105
|
+
#### ③ 运行 GSD Milestone Closeout
|
|
106
|
+
|
|
107
|
+
委托给现有 GSD 工具链:
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
$gsd-complete-milestone v{X.Y}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
此步骤自动完成:
|
|
114
|
+
- 归档 ROADMAP.md → `milestones/v{X.Y}-ROADMAP.md`
|
|
115
|
+
- 归档 REQUIREMENTS.md → `milestones/v{X.Y}-REQUIREMENTS.md`
|
|
116
|
+
- 更新 MILESTONES.md、PROJECT.md、STATE.md
|
|
117
|
+
- 更新 RETROSPECTIVE.md
|
|
118
|
+
- 创建安全 commit
|
|
119
|
+
|
|
120
|
+
等待此步骤完全完成后,继续下一步。
|
|
121
|
+
|
|
122
|
+
#### ④ 【Confirmation Gate #1】Milestone 归档摘要
|
|
123
|
+
|
|
124
|
+
展示:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Milestone v{X.Y} [{Name}] 归档完成
|
|
128
|
+
|
|
129
|
+
已归档:
|
|
130
|
+
- milestones/v{X.Y}-ROADMAP.md
|
|
131
|
+
- milestones/v{X.Y}-REQUIREMENTS.md
|
|
132
|
+
- MILESTONES.md 已更新
|
|
133
|
+
- PROJECT.md 已演进
|
|
134
|
+
- STATE.md 已更新
|
|
135
|
+
|
|
136
|
+
Phase 统计:{N} phases, {M} plans, {P} tasks
|
|
137
|
+
关键交付:
|
|
138
|
+
- {accomplishment 1}
|
|
139
|
+
- {accomplishment 2}
|
|
140
|
+
- ...
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
用户确认后继续(默认 N)。如果用户不确认,则流程停止,不进入任何发布准备步骤。
|
|
144
|
+
|
|
145
|
+
#### ⑤ 计算并展示版本映射
|
|
146
|
+
|
|
147
|
+
从 `package.json` 读取当前版本,计算新版本:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
版本映射:
|
|
151
|
+
- Milestone: v{X.Y}
|
|
152
|
+
- NPM 当前: {current_version}
|
|
153
|
+
- NPM 目标: {X.Y}.0
|
|
154
|
+
- 变更类型: {major/minor/patch}
|
|
155
|
+
|
|
156
|
+
⚠️ 警告:当前版本 {current_version} → {X.Y}.0 是 {major} 版本跳跃。
|
|
157
|
+
请确认这是预期行为。
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
当前仓库的已知映射示例:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
v1.9 → 1.9.0
|
|
164
|
+
0.5.2-beta.1 → 1.9.0
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
如果版本跳跃跨越 major 边界(0.x → 1.x 或 1.x → 2.x),额外高亮警告并要求操作者重新确认。
|
|
168
|
+
|
|
169
|
+
#### ⑥ 【Confirmation Gate #2】发布摘要
|
|
170
|
+
|
|
171
|
+
在触发任何不可逆操作之前,完整展示:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
═══════════════════════════════════════════════════════
|
|
175
|
+
即将执行以下操作(不可撤销):
|
|
176
|
+
═══════════════════════════════════════════════════════
|
|
177
|
+
|
|
178
|
+
1. 更新 package.json version: {current} → {X.Y}.0
|
|
179
|
+
2. 创建 git commit: "[RELEASE] bump version to v{X.Y}.0"
|
|
180
|
+
3. 创建 git tag: v{X.Y}.0
|
|
181
|
+
4. 推送到远程 origin
|
|
182
|
+
5. 触发 GitHub Actions: publish.yml
|
|
183
|
+
→ 构建、测试、NPM 发布、GitHub Release
|
|
184
|
+
|
|
185
|
+
确认后,以上操作将自动执行。
|
|
186
|
+
|
|
187
|
+
确认发布 v{X.Y}.0? (y/N):
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
用户必须输入 `y` 或 `Y` 才继续。任何其他输入都终止流程。未经过此 gate,不得执行 `npm version`、git commit、git tag、`git push` 或任何会触发 `.github/workflows/publish.yml` 的动作。
|
|
191
|
+
|
|
192
|
+
#### ⑦ 委托机械发布 helper
|
|
193
|
+
|
|
194
|
+
用户确认后,`/release` 默认**委托**给现有机械 helper,而不是在 skill 里重写版本 bump / tag / push 逻辑:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
rtk ./scripts/release.sh {X.Y}.0
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
委托边界如下:
|
|
201
|
+
|
|
202
|
+
- `/release` 负责前置检查、milestone closeout、版本映射、major 跳跃高亮与 **Confirmation Gate #2**
|
|
203
|
+
- `scripts/release.sh` 负责执行既有的 `npm run check:all`、版本写入、git commit、git tag、`git push`
|
|
204
|
+
- `.github/workflows/publish.yml` 负责 tag push 后的构建、测试、NPM 发布与 GitHub Release
|
|
205
|
+
|
|
206
|
+
> 说明:`scripts/release.sh` 当前自带交互确认;它只能作为 `/release` 已通过 **Confirmation Gate #2** 之后的机械 helper,不能替代 `/release` 的安全门。
|
|
207
|
+
>
|
|
208
|
+
> 说明:Phase 31 / Phase 32 / Phase 33 只定义和验证该流程,不会在当前 milestone 内真的执行这些命令。
|
|
209
|
+
|
|
210
|
+
如需理解 helper 将触发的底层动作,可参考 `scripts/release.sh` 当前事实:它会写入 `package.json` / `package-lock.json` 版本、创建 `[RELEASE]` commit、创建 `v{X.Y}.0` tag,并推送分支与 tag 到远程。
|
|
211
|
+
|
|
212
|
+
#### ⑧ 验证 GitHub Actions 触发
|
|
213
|
+
|
|
214
|
+
推送后,验证 Actions 已触发:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# 给出 Actions 页面链接
|
|
218
|
+
echo "GitHub Actions 发布状态:"
|
|
219
|
+
echo "https://github.com/{owner}/{repo}/actions/workflows/publish.yml"
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
如需做**只读 follow-up observability**,统一使用独立命令:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
mycodemap publish-status --tag v{X.Y}.0 --sha {headSha}
|
|
226
|
+
mycodemap publish-status --tag v{X.Y}.0 --sha {headSha} --json --structured
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
约束:
|
|
230
|
+
|
|
231
|
+
- `publish-status` 只读取 `.github/workflows/publish.yml` 的 snapshot truth
|
|
232
|
+
- 它必须依赖 `--tag + --sha` 做精确匹配;无法精确确认时返回 `unavailable` / `ambiguous`
|
|
233
|
+
- 它**不是**第二条发布路径;`/release` 仍是单一权威,`publish-status` 不得 rerun workflow、不得 dispatch、不得 publish、不得 push
|
|
234
|
+
- 默认只做一次 snapshot;是否继续跟进由人类或上层 agent 自主决定
|
|
235
|
+
|
|
236
|
+
可选:使用 `publish-status` 做非阻塞状态复核,但不要把它当成发布 authority 的一部分。
|
|
237
|
+
|
|
238
|
+
#### ⑨ 完成报告
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
✅ Release v{X.Y}.0 已触发
|
|
242
|
+
|
|
243
|
+
Milestone: v{X.Y} — 已归档
|
|
244
|
+
NPM 版本: {X.Y}.0 — 已推送 tag
|
|
245
|
+
GitHub Actions: 运行中
|
|
246
|
+
|
|
247
|
+
查看状态:
|
|
248
|
+
- Actions: https://github.com/{owner}/{repo}/actions
|
|
249
|
+
- NPM: https://www.npmjs.com/package/@mycodemap/mycodemap
|
|
250
|
+
- Release: https://github.com/{owner}/{repo}/releases
|
|
251
|
+
- Follow-up: `mycodemap publish-status --tag v{X.Y}.0 --sha {headSha}`
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 错误处理与回滚
|
|
257
|
+
|
|
258
|
+
### 中途失败
|
|
259
|
+
|
|
260
|
+
如果在步骤 ③(GSD closeout)之前失败:无持久化副作用,直接终止。
|
|
261
|
+
|
|
262
|
+
如果在步骤 ③ 完成后、步骤 ⑦ 之前失败:milestone 已归档,但 npm 未发布。可以修复问题后重新运行 `/release`(GSD closeout 部分会检测到已归档并跳过)。
|
|
263
|
+
|
|
264
|
+
如果在步骤 ⑦ 中失败(如 push 被拒绝):
|
|
265
|
+
- 若 commit 已创建但 push 失败:修复远程冲突后手动推送。
|
|
266
|
+
- 若 tag 已创建但 push 失败:手动 `git push origin v{X.Y}.0`。
|
|
267
|
+
- 若 package.json 已修改但 commit 未创建:`git checkout package.json package-lock.json` 回滚。
|
|
268
|
+
|
|
269
|
+
### 版本冲突
|
|
270
|
+
|
|
271
|
+
如果本地或远程已存在 `v{X.Y}.0` tag:
|
|
272
|
+
- 拒绝执行,报告冲突。
|
|
273
|
+
- 建议用户检查是否重复运行 `/release`。
|
|
274
|
+
|
|
275
|
+
如果 package.json 中版本已经是 `{X.Y}.0`:
|
|
276
|
+
- 跳过版本 bump,只创建 tag 和推送。
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 禁止事项
|
|
281
|
+
|
|
282
|
+
- **不得**在二次确认门之前执行任何 git 写操作(commit、tag、push)。
|
|
283
|
+
- **不得**跳过 GSD milestone closeout 直接执行 `scripts/release.sh`。
|
|
284
|
+
- **不得**在存在未解决 blocker 时继续发布(除非用户显式选择 [A] 确认延期)。
|
|
285
|
+
- **不得**将 `NPM_TOKEN` 硬编码到任何脚本或文档中。
|
|
286
|
+
- **不得**绕过 `docs:check:pre-release` 检查。
|
|
287
|
+
- **不得**把 `/release` 文档写成第二套 closeout 或 publish 实现;它必须是 thin orchestrator。
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 文档同步触发条件
|
|
292
|
+
|
|
293
|
+
以下变更会触发本文档需要更新:
|
|
294
|
+
|
|
295
|
+
- GSD closeout 工作流变更(步骤或顺序变化)
|
|
296
|
+
- `scripts/release.sh` 行为变更(参数、交互方式变化)
|
|
297
|
+
- `.github/workflows/publish.yml` 触发条件变化
|
|
298
|
+
- 版本映射规则变化
|
|
299
|
+
- 确认门内容或格式变化
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
*版本: 1.0.0 | 最后更新: 2026-04-22*
|
package/docs/rules/testing.md
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
| 类型 | 路径 |
|
|
18
18
|
|------|------|
|
|
19
19
|
| 常规测试 | `src/**/*.test.ts` |
|
|
20
|
+
| Workflow E2E | `tests/e2e/**/*.test.ts` |
|
|
20
21
|
| 集成测试 | `tests/` 目录(如存在单独集成测试编排) |
|
|
21
22
|
| 基准测试 | `refer/benchmark-quality.test.ts` |
|
|
22
23
|
|
|
@@ -37,6 +38,21 @@ export default defineConfig({
|
|
|
37
38
|
});
|
|
38
39
|
```
|
|
39
40
|
|
|
41
|
+
```typescript
|
|
42
|
+
// vitest.e2e.config.ts
|
|
43
|
+
export default defineConfig({
|
|
44
|
+
test: {
|
|
45
|
+
globals: true,
|
|
46
|
+
environment: 'node',
|
|
47
|
+
include: ['tests/e2e/**/*.test.ts'],
|
|
48
|
+
exclude: ['node_modules', 'dist', 'refer/**/*.test.ts'],
|
|
49
|
+
testTimeout: 10000,
|
|
50
|
+
hookTimeout: 10000,
|
|
51
|
+
pool: 'threads'
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
40
56
|
## 测试要求
|
|
41
57
|
|
|
42
58
|
- 所有新功能必须附带测试
|
|
@@ -59,6 +75,9 @@ export default defineConfig({
|
|
|
59
75
|
npm test
|
|
60
76
|
npx vitest run
|
|
61
77
|
|
|
78
|
+
# 运行 workflow E2E 护栏
|
|
79
|
+
npm run test:e2e
|
|
80
|
+
|
|
62
81
|
# 运行特定测试文件
|
|
63
82
|
npx vitest run src/orchestrator/__tests__/confidence.test.ts
|
|
64
83
|
|
package/docs/rules/validation.md
CHANGED
|
@@ -12,6 +12,13 @@
|
|
|
12
12
|
| 改实现代码 | `npm run typecheck` → `npm run lint` → `npm test` | 从最小相关验证扩到基础回归 |
|
|
13
13
|
| 改发布/打包边界 | `npm run docs:check:pre-release` → `npm run build` → `npm run validate-pack` | 先锁版本/发布契约,再确认 shipped artifact 仍成立 |
|
|
14
14
|
|
|
15
|
+
## Validation quick truth
|
|
16
|
+
|
|
17
|
+
- 文档/入口变更先跑 `npm run docs:check`。
|
|
18
|
+
- 统一 docs/AI guardrail 入口:`node dist/cli/index.js ci check-docs-sync`(产品命令等价于 `mycodemap ci check-docs-sync`)。
|
|
19
|
+
- repo-local rules 预检:`python3 scripts/validate-rules.py code --report-only` 只报告,不阻断。
|
|
20
|
+
- CI / PR 超窗、fallback 或 false-positive 漂移时,`warn-only / fallback` 不是 hard gate success。
|
|
21
|
+
|
|
15
22
|
## Repo-local rule validator
|
|
16
23
|
|
|
17
24
|
### `validate-rules.py` exit-code 表
|
|
@@ -39,18 +46,19 @@
|
|
|
39
46
|
| 1 | `npm run docs:check` | 文档护栏 |
|
|
40
47
|
| 2 | `npm run typecheck` | 类型检查 |
|
|
41
48
|
| 3 | `npm run lint` | lint |
|
|
42
|
-
| 4 | `npm test` |
|
|
43
|
-
| 5 | `npm run
|
|
44
|
-
| 6 | `
|
|
45
|
-
| 7 | `node
|
|
46
|
-
| 8 | `node dist/cli/index.js
|
|
47
|
-
| 9 | `node dist/cli/index.js ci
|
|
49
|
+
| 4 | `npm test` | 默认 `src/**/*.test.ts` 回归 |
|
|
50
|
+
| 5 | `npm run test:e2e` | `tests/e2e/**/*.test.ts` workflow E2E 护栏 |
|
|
51
|
+
| 6 | `npm run build` | 构建验证 |
|
|
52
|
+
| 7 | `node scripts/calibrate-contract-gate.mjs --max-changed-files 10 --max-false-positive-rate 0.10` | 设计 contract 校准;`changed files <= 10` 才可能进入 hard gate |
|
|
53
|
+
| 8 | `node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format github` | PR 注解与 contract gate |
|
|
54
|
+
| 9 | `node dist/cli/index.js ci check-docs-sync` | 统一 docs/AI guardrail |
|
|
55
|
+
| 10 | `node dist/cli/index.js ci assess-risk --threshold=0.7` | 风险评估 |
|
|
48
56
|
|
|
49
57
|
> PR 超窗、`diff-scope-fallback` 或 `false-positive rate >10%` 时,workflow 必须明确标为 `warn-only / fallback`。
|
|
50
58
|
|
|
51
59
|
## 需要特别补跑的场景
|
|
52
60
|
|
|
53
|
-
- 若改动涉及
|
|
61
|
+
- 若改动涉及 `.mycodemap/config.json` 的 `storage` 段或图数据库适配器,至少补跑对应 storage adapter 定点测试,并确认 `README.md`、`AI_GUIDE.md`、`docs/ai-guide/COMMANDS.md`、`docs/SETUP_GUIDE.md`、`mycodemap.config.schema.json` 与 guardrail 脚本同步。
|
|
54
62
|
- 若改动涉及 `check` / `ci assess-risk` / `history` / `analyze --include-git-history` 的统一 risk truth,至少补跑 `node dist/cli/index.js history --symbol createCheckCommand`、`node scripts/report-high-risk-files.mjs --top 3`、`npm run build`。
|
|
55
63
|
- 若改动涉及产品定位、输出契约、共享文件发现规则或 `Server Layer` / `mycodemap server` 边界,确认 README、AI 文档、架构文档和 guardrail 脚本使用同一套措辞。
|
|
56
64
|
|
|
@@ -96,6 +104,7 @@ node scripts/report-high-risk-files.mjs --top 3
|
|
|
96
104
|
npm run typecheck
|
|
97
105
|
npm run lint
|
|
98
106
|
npm test
|
|
107
|
+
npm run test:e2e
|
|
99
108
|
npm run build
|
|
100
109
|
npm run validate-pack
|
|
101
110
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mycodemap/mycodemap",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "TypeScript 代码地图工具 - 为 AI 辅助开发提供结构化上下文",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"docs:check:ai": "node scripts/validate-ai-docs.js",
|
|
35
35
|
"docs:check:pre-release": "node scripts/pre-release-check.js",
|
|
36
36
|
"test": "vitest run",
|
|
37
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
37
38
|
"lint": "eslint src",
|
|
38
39
|
"typecheck": "tsc --noEmit",
|
|
39
40
|
"benchmark": "bash scripts/run-benchmark.sh",
|
|
@@ -65,6 +66,7 @@
|
|
|
65
66
|
"chalk": "^5.3.0",
|
|
66
67
|
"chokidar": "^3.5.3",
|
|
67
68
|
"commander": "^11.1.0",
|
|
69
|
+
"dependency-cruiser": "^17.3.10",
|
|
68
70
|
"globby": "^14.0.0",
|
|
69
71
|
"hono": "^4.12.8",
|
|
70
72
|
"ora": "^8.0.1",
|
|
@@ -76,12 +78,10 @@
|
|
|
76
78
|
},
|
|
77
79
|
"devDependencies": {
|
|
78
80
|
"@types/better-sqlite3": "^7.6.13",
|
|
79
|
-
"@types/glob": "^8.1.0",
|
|
80
81
|
"@types/node": "^20.10.0",
|
|
81
82
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
82
83
|
"@typescript-eslint/parser": "^6.21.0",
|
|
83
84
|
"@vitest/coverage-v8": "^1.6.1",
|
|
84
|
-
"dependency-cruiser": "^17.3.10",
|
|
85
85
|
"eslint": "^8.57.1",
|
|
86
86
|
"vitest": "^1.1.0"
|
|
87
87
|
},
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Commit-msg hook: 仅验证 Commit 消息格式
|
|
3
|
+
|
|
4
|
+
MSG_FILE=$1
|
|
5
|
+
MSG=$(head -1 "$MSG_FILE")
|
|
6
|
+
|
|
7
|
+
VALID_TAGS="BUGFIX FEATURE REFACTOR CONFIG DOCS DELETE"
|
|
8
|
+
|
|
9
|
+
COMMIT_FILES=$(git diff --cached --name-only --diff-filter=ACM 2>/dev/null || true)
|
|
10
|
+
|
|
11
|
+
ONLY_DOT_DIRS=true
|
|
12
|
+
if [ -n "$COMMIT_FILES" ]; then
|
|
13
|
+
NON_DOT_FILES=$(echo "$COMMIT_FILES" | grep -v '^\.' || true)
|
|
14
|
+
if [ -n "$NON_DOT_FILES" ]; then
|
|
15
|
+
ONLY_DOT_DIRS=false
|
|
16
|
+
fi
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
if [ "$ONLY_DOT_DIRS" = "true" ]; then
|
|
20
|
+
echo "Note: Commit only contains files in dot-directories, skipping message format check"
|
|
21
|
+
elif ! echo "$MSG" | grep -qE '^\[(BUGFIX|FEATURE|REFACTOR|CONFIG|DOCS|DELETE)\]'; then
|
|
22
|
+
echo "ERROR: Commit message must start with an uppercase tag."
|
|
23
|
+
echo "Format: [TAG] scope: message"
|
|
24
|
+
echo "Valid tags: $VALID_TAGS"
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
if [ "$ONLY_DOT_DIRS" = "true" ]; then
|
|
29
|
+
echo "Note: Commit only contains files in dot-directories, skipping scope check"
|
|
30
|
+
elif ! echo "$MSG" | grep -qE '^\[(BUGFIX|FEATURE|REFACTOR|CONFIG|DOCS|DELETE)\]\s+[^:]+:\s+.+'; then
|
|
31
|
+
echo "ERROR: scope and message are required."
|
|
32
|
+
echo "Format: [TAG] scope: message"
|
|
33
|
+
echo "Example: [FEATURE] cli: add new command"
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
echo "Commit message validated"
|
|
38
|
+
exit 0
|