@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.
Files changed (96) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +84 -10
  3. package/dist/cli/commands/init.d.ts +7 -2
  4. package/dist/cli/commands/init.d.ts.map +1 -1
  5. package/dist/cli/commands/init.js +22 -34
  6. package/dist/cli/commands/init.js.map +1 -1
  7. package/dist/cli/commands/publish-status.d.ts +31 -0
  8. package/dist/cli/commands/publish-status.d.ts.map +1 -0
  9. package/dist/cli/commands/publish-status.js +101 -0
  10. package/dist/cli/commands/publish-status.js.map +1 -0
  11. package/dist/cli/commands/readiness-gate.d.ts +25 -0
  12. package/dist/cli/commands/readiness-gate.d.ts.map +1 -0
  13. package/dist/cli/commands/readiness-gate.js +197 -0
  14. package/dist/cli/commands/readiness-gate.js.map +1 -0
  15. package/dist/cli/commands/ship/checker.d.ts +4 -9
  16. package/dist/cli/commands/ship/checker.d.ts.map +1 -1
  17. package/dist/cli/commands/ship/checker.js +60 -22
  18. package/dist/cli/commands/ship/checker.js.map +1 -1
  19. package/dist/cli/commands/ship/monitor.d.ts +6 -1
  20. package/dist/cli/commands/ship/monitor.d.ts.map +1 -1
  21. package/dist/cli/commands/ship/monitor.js +223 -46
  22. package/dist/cli/commands/ship/monitor.js.map +1 -1
  23. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  24. package/dist/cli/commands/ship/pipeline.js +14 -5
  25. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  26. package/dist/cli/commands/ship/rules/quality-rules.d.ts +12 -8
  27. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -1
  28. package/dist/cli/commands/ship/rules/quality-rules.js +49 -34
  29. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -1
  30. package/dist/cli/config-loader.js +1 -1
  31. package/dist/cli/config-loader.js.map +1 -1
  32. package/dist/cli/first-run-guide.d.ts.map +1 -1
  33. package/dist/cli/first-run-guide.js +10 -12
  34. package/dist/cli/first-run-guide.js.map +1 -1
  35. package/dist/cli/index.js +8 -1
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/cli/init/hooks.d.ts +17 -0
  38. package/dist/cli/init/hooks.d.ts.map +1 -0
  39. package/dist/cli/init/hooks.js +220 -0
  40. package/dist/cli/init/hooks.js.map +1 -0
  41. package/dist/cli/init/receipt.d.ts +4 -0
  42. package/dist/cli/init/receipt.d.ts.map +1 -0
  43. package/dist/cli/init/receipt.js +117 -0
  44. package/dist/cli/init/receipt.js.map +1 -0
  45. package/dist/cli/init/reconciler.d.ts +44 -0
  46. package/dist/cli/init/reconciler.d.ts.map +1 -0
  47. package/dist/cli/init/reconciler.js +377 -0
  48. package/dist/cli/init/reconciler.js.map +1 -0
  49. package/dist/cli/init/rule-templates.d.ts +9 -0
  50. package/dist/cli/init/rule-templates.d.ts.map +1 -0
  51. package/dist/cli/init/rule-templates.js +105 -0
  52. package/dist/cli/init/rule-templates.js.map +1 -0
  53. package/dist/cli/init/rules.d.ts +13 -0
  54. package/dist/cli/init/rules.d.ts.map +1 -0
  55. package/dist/cli/init/rules.js +113 -0
  56. package/dist/cli/init/rules.js.map +1 -0
  57. package/dist/cli/paths.d.ts +4 -2
  58. package/dist/cli/paths.d.ts.map +1 -1
  59. package/dist/cli/paths.js +13 -5
  60. package/dist/cli/paths.js.map +1 -1
  61. package/dist/orchestrator/test-linker.d.ts.map +1 -1
  62. package/dist/orchestrator/test-linker.js +5 -36
  63. package/dist/orchestrator/test-linker.js.map +1 -1
  64. package/docs/AI_ASSISTANT_SETUP.md +4 -2
  65. package/docs/SETUP_GUIDE.md +12 -12
  66. package/docs/agents/domain.md +36 -0
  67. package/docs/agents/issue-tracker.md +22 -0
  68. package/docs/agents/triage-labels.md +15 -0
  69. package/docs/ai-guide/COMMANDS.md +57 -3
  70. package/docs/ai-guide/INTEGRATION.md +1 -1
  71. package/docs/ai-guide/PATTERNS.md +3 -3
  72. package/docs/ai-guide/QUICKSTART.md +13 -4
  73. package/docs/ai-guide/README.md +7 -7
  74. package/docs/archive/ideation/2026-04-22-harness-rules-entry-docs-optimization-ideation.md +102 -0
  75. package/docs/archive/ideation/2026-04-22-rules-claude-agents-optimization-ideation.md +107 -0
  76. package/docs/brainstorms/2026-04-22-rules-entry-docs-phase1-structure-consolidation-requirements.md +110 -0
  77. package/docs/brainstorms/999.1-mycodemap-init-enhancements-requirements.md +166 -0
  78. package/docs/exec-plans/README.md +3 -0
  79. package/docs/ideation/2026-04-20-mycodemap-init-enhancements-ideation.md +96 -0
  80. package/docs/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation.md +119 -0
  81. package/docs/lesson-learn/2026-04-19-prerelease-trusted-publishing-fix.md +119 -0
  82. package/docs/lesson-learn/image.png +0 -0
  83. package/docs/rules/README.md +4 -1
  84. package/docs/rules/deployment.md +7 -0
  85. package/docs/rules/engineering-with-codex-openai.md +47 -8
  86. package/docs/rules/pre-release-checklist.md +44 -33
  87. package/docs/rules/release.md +303 -0
  88. package/docs/rules/testing.md +19 -0
  89. package/docs/rules/validation.md +16 -7
  90. package/mycodemap.config.schema.json +1 -1
  91. package/package.json +3 -3
  92. package/scripts/hooks/templates/commit-msg +38 -0
  93. package/scripts/hooks/templates/pre-commit +224 -0
  94. package/scripts/pre-release-check.js +4 -4
  95. package/scripts/release.sh +1 -1
  96. 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*
@@ -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
 
@@ -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 build` | 构建验证 |
44
- | 6 | `node scripts/calibrate-contract-gate.mjs --max-changed-files 10 --max-false-positive-rate 0.10` | 设计 contract 校准;`changed files <= 10` 才可能进入 hard gate |
45
- | 7 | `node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format github` | PR 注解与 contract gate |
46
- | 8 | `node dist/cli/index.js ci check-docs-sync` | 统一 docs/AI guardrail |
47
- | 9 | `node dist/cli/index.js ci assess-risk --threshold=0.7` | 风险评估 |
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
- - 若改动涉及 `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 脚本同步。
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
  ```
@@ -53,7 +53,7 @@
53
53
  },
54
54
  "outputPath": {
55
55
  "type": "string",
56
- "default": ".codemap/storage",
56
+ "default": ".mycodemap/storage",
57
57
  "description": "Filesystem storage directory"
58
58
  },
59
59
  "databasePath": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mycodemap/mycodemap",
3
- "version": "0.5.2-beta.1",
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