@mycodemap/mycodemap 0.4.2 → 0.5.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.
Files changed (288) hide show
  1. package/CHANGELOG.md +105 -3
  2. package/README.md +192 -53
  3. package/dist/ai/claude.d.ts +38 -0
  4. package/dist/ai/claude.d.ts.map +1 -0
  5. package/dist/ai/claude.js +169 -0
  6. package/dist/ai/claude.js.map +1 -0
  7. package/dist/ai/codex.d.ts +38 -0
  8. package/dist/ai/codex.d.ts.map +1 -0
  9. package/dist/ai/codex.js +169 -0
  10. package/dist/ai/codex.js.map +1 -0
  11. package/dist/ai/factory.d.ts +48 -0
  12. package/dist/ai/factory.d.ts.map +1 -0
  13. package/dist/ai/factory.js +95 -0
  14. package/dist/ai/factory.js.map +1 -0
  15. package/dist/ai/index.d.ts +12 -0
  16. package/dist/ai/index.d.ts.map +1 -0
  17. package/dist/ai/index.js +29 -0
  18. package/dist/ai/index.js.map +1 -0
  19. package/dist/ai/provider.d.ts +70 -0
  20. package/dist/ai/provider.d.ts.map +1 -0
  21. package/dist/ai/provider.js +31 -0
  22. package/dist/ai/provider.js.map +1 -0
  23. package/dist/ai/subagent-caller.d.ts +90 -0
  24. package/dist/ai/subagent-caller.d.ts.map +1 -0
  25. package/dist/ai/subagent-caller.js +280 -0
  26. package/dist/ai/subagent-caller.js.map +1 -0
  27. package/dist/ai/types.d.ts +70 -0
  28. package/dist/ai/types.d.ts.map +1 -0
  29. package/dist/ai/types.js +5 -0
  30. package/dist/ai/types.js.map +1 -0
  31. package/dist/cli/commands/analyze.d.ts +18 -0
  32. package/dist/cli/commands/analyze.d.ts.map +1 -1
  33. package/dist/cli/commands/analyze.js +239 -6
  34. package/dist/cli/commands/analyze.js.map +1 -1
  35. package/dist/cli/commands/check.d.ts +22 -0
  36. package/dist/cli/commands/check.d.ts.map +1 -0
  37. package/dist/cli/commands/check.js +168 -0
  38. package/dist/cli/commands/check.js.map +1 -0
  39. package/dist/cli/commands/ci.d.ts +25 -0
  40. package/dist/cli/commands/ci.d.ts.map +1 -1
  41. package/dist/cli/commands/ci.js +139 -36
  42. package/dist/cli/commands/ci.js.map +1 -1
  43. package/dist/cli/commands/complexity.d.ts.map +1 -1
  44. package/dist/cli/commands/complexity.js +6 -0
  45. package/dist/cli/commands/complexity.js.map +1 -1
  46. package/dist/cli/commands/design.d.ts +52 -0
  47. package/dist/cli/commands/design.d.ts.map +1 -0
  48. package/dist/cli/commands/design.js +274 -0
  49. package/dist/cli/commands/design.js.map +1 -0
  50. package/dist/cli/commands/generate.d.ts +1 -0
  51. package/dist/cli/commands/generate.d.ts.map +1 -1
  52. package/dist/cli/commands/generate.js +121 -8
  53. package/dist/cli/commands/generate.js.map +1 -1
  54. package/dist/cli/commands/history.d.ts +26 -0
  55. package/dist/cli/commands/history.d.ts.map +1 -0
  56. package/dist/cli/commands/history.js +92 -0
  57. package/dist/cli/commands/history.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +13 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +108 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/server.d.ts +9 -0
  63. package/dist/cli/commands/server.d.ts.map +1 -0
  64. package/dist/cli/commands/server.js +65 -0
  65. package/dist/cli/commands/server.js.map +1 -0
  66. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  67. package/dist/cli/commands/ship/pipeline.js +8 -1
  68. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  69. package/dist/cli/commands/ship/publisher.d.ts +9 -1
  70. package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
  71. package/dist/cli/commands/ship/publisher.js +149 -6
  72. package/dist/cli/commands/ship/publisher.js.map +1 -1
  73. package/dist/cli/commands/workflow.d.ts.map +1 -1
  74. package/dist/cli/commands/workflow.js +22 -2
  75. package/dist/cli/commands/workflow.js.map +1 -1
  76. package/dist/cli/config-loader.d.ts.map +1 -1
  77. package/dist/cli/config-loader.js +3 -2
  78. package/dist/cli/config-loader.js.map +1 -1
  79. package/dist/cli/contract-checker.d.ts +33 -0
  80. package/dist/cli/contract-checker.d.ts.map +1 -0
  81. package/dist/cli/contract-checker.js +719 -0
  82. package/dist/cli/contract-checker.js.map +1 -0
  83. package/dist/cli/contract-diff-scope.d.ts +14 -0
  84. package/dist/cli/contract-diff-scope.d.ts.map +1 -0
  85. package/dist/cli/contract-diff-scope.js +127 -0
  86. package/dist/cli/contract-diff-scope.js.map +1 -0
  87. package/dist/cli/contract-gate-thresholds.d.ts +14 -0
  88. package/dist/cli/contract-gate-thresholds.d.ts.map +1 -0
  89. package/dist/cli/contract-gate-thresholds.js +19 -0
  90. package/dist/cli/contract-gate-thresholds.js.map +1 -0
  91. package/dist/cli/design-contract-loader.d.ts +15 -0
  92. package/dist/cli/design-contract-loader.d.ts.map +1 -0
  93. package/dist/cli/design-contract-loader.js +527 -0
  94. package/dist/cli/design-contract-loader.js.map +1 -0
  95. package/dist/cli/design-contract-schema.d.ts +11 -0
  96. package/dist/cli/design-contract-schema.d.ts.map +1 -0
  97. package/dist/cli/design-contract-schema.js +75 -0
  98. package/dist/cli/design-contract-schema.js.map +1 -0
  99. package/dist/cli/design-handoff-builder.d.ts +15 -0
  100. package/dist/cli/design-handoff-builder.d.ts.map +1 -0
  101. package/dist/cli/design-handoff-builder.js +345 -0
  102. package/dist/cli/design-handoff-builder.js.map +1 -0
  103. package/dist/cli/design-scope-resolver.d.ts +8 -0
  104. package/dist/cli/design-scope-resolver.d.ts.map +1 -0
  105. package/dist/cli/design-scope-resolver.js +760 -0
  106. package/dist/cli/design-scope-resolver.js.map +1 -0
  107. package/dist/cli/design-verification-builder.d.ts +8 -0
  108. package/dist/cli/design-verification-builder.d.ts.map +1 -0
  109. package/dist/cli/design-verification-builder.js +369 -0
  110. package/dist/cli/design-verification-builder.js.map +1 -0
  111. package/dist/cli/index.js +20 -6
  112. package/dist/cli/index.js.map +1 -1
  113. package/dist/cli/paths.d.ts.map +1 -1
  114. package/dist/cli/paths.js +30 -7
  115. package/dist/cli/paths.js.map +1 -1
  116. package/dist/cli-new/commands/server.d.ts +13 -0
  117. package/dist/cli-new/commands/server.d.ts.map +1 -0
  118. package/dist/cli-new/commands/server.js +90 -0
  119. package/dist/cli-new/commands/server.js.map +1 -0
  120. package/dist/core/analyzer.d.ts.map +1 -1
  121. package/dist/core/analyzer.js +16 -0
  122. package/dist/core/analyzer.js.map +1 -1
  123. package/dist/domain/entities/CodeGraph.d.ts +5 -1
  124. package/dist/domain/entities/CodeGraph.d.ts.map +1 -1
  125. package/dist/domain/entities/CodeGraph.js +29 -12
  126. package/dist/domain/entities/CodeGraph.js.map +1 -1
  127. package/dist/domain/entities/Dependency.d.ts +8 -1
  128. package/dist/domain/entities/Dependency.d.ts.map +1 -1
  129. package/dist/domain/entities/Dependency.js +19 -4
  130. package/dist/domain/entities/Dependency.js.map +1 -1
  131. package/dist/domain/entities/Symbol.d.ts +2 -1
  132. package/dist/domain/entities/Symbol.d.ts.map +1 -1
  133. package/dist/domain/entities/Symbol.js +6 -3
  134. package/dist/domain/entities/Symbol.js.map +1 -1
  135. package/dist/generator/ai-overview.d.ts +51 -0
  136. package/dist/generator/ai-overview.d.ts.map +1 -0
  137. package/dist/generator/ai-overview.js +160 -0
  138. package/dist/generator/ai-overview.js.map +1 -0
  139. package/dist/infrastructure/storage/StorageFactory.d.ts +13 -5
  140. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  141. package/dist/infrastructure/storage/StorageFactory.js +62 -16
  142. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  143. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts +3 -1
  144. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
  145. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +10 -2
  146. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
  147. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +3 -1
  148. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
  149. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +9 -1
  150. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
  151. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +3 -1
  152. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
  153. package/dist/infrastructure/storage/adapters/MemoryStorage.js +9 -1
  154. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
  155. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
  156. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
  157. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
  158. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
  159. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts +53 -0
  160. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -0
  161. package/dist/infrastructure/storage/adapters/SQLiteStorage.js +879 -0
  162. package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -0
  163. package/dist/infrastructure/storage/graph-helpers.d.ts +3 -1
  164. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -1
  165. package/dist/infrastructure/storage/graph-helpers.js +90 -0
  166. package/dist/infrastructure/storage/graph-helpers.js.map +1 -1
  167. package/dist/infrastructure/storage/index.d.ts +1 -1
  168. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  169. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +3 -1
  170. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -1
  171. package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -1
  172. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts +27 -0
  173. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts.map +1 -0
  174. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js +246 -0
  175. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js.map +1 -0
  176. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts +25 -0
  177. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts.map +1 -0
  178. package/dist/infrastructure/storage/sqlite/perf-thresholds.js +25 -0
  179. package/dist/infrastructure/storage/sqlite/perf-thresholds.js.map +1 -0
  180. package/dist/infrastructure/storage/sqlite/schema.d.ts +4 -0
  181. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
  182. package/dist/infrastructure/storage/sqlite/schema.js +111 -0
  183. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
  184. package/dist/interface/types/design-check.d.ts +73 -0
  185. package/dist/interface/types/design-check.d.ts.map +1 -0
  186. package/dist/interface/types/design-check.js +4 -0
  187. package/dist/interface/types/design-check.js.map +1 -0
  188. package/dist/interface/types/design-contract.d.ts +123 -0
  189. package/dist/interface/types/design-contract.d.ts.map +1 -0
  190. package/dist/interface/types/design-contract.js +7 -0
  191. package/dist/interface/types/design-contract.js.map +1 -0
  192. package/dist/interface/types/design-handoff.d.ts +68 -0
  193. package/dist/interface/types/design-handoff.d.ts.map +1 -0
  194. package/dist/interface/types/design-handoff.js +4 -0
  195. package/dist/interface/types/design-handoff.js.map +1 -0
  196. package/dist/interface/types/design-mapping.d.ts +51 -0
  197. package/dist/interface/types/design-mapping.d.ts.map +1 -0
  198. package/dist/interface/types/design-mapping.js +4 -0
  199. package/dist/interface/types/design-mapping.js.map +1 -0
  200. package/dist/interface/types/design-verification.d.ts +49 -0
  201. package/dist/interface/types/design-verification.d.ts.map +1 -0
  202. package/dist/interface/types/design-verification.js +4 -0
  203. package/dist/interface/types/design-verification.js.map +1 -0
  204. package/dist/interface/types/history-risk.d.ts +90 -0
  205. package/dist/interface/types/history-risk.d.ts.map +1 -0
  206. package/dist/interface/types/history-risk.js +4 -0
  207. package/dist/interface/types/history-risk.js.map +1 -0
  208. package/dist/interface/types/index.d.ts +20 -1
  209. package/dist/interface/types/index.d.ts.map +1 -1
  210. package/dist/interface/types/storage.d.ts +28 -1
  211. package/dist/interface/types/storage.d.ts.map +1 -1
  212. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts +10 -0
  213. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts.map +1 -1
  214. package/dist/orchestrator/adapters/ast-grep-adapter.js +46 -17
  215. package/dist/orchestrator/adapters/ast-grep-adapter.js.map +1 -1
  216. package/dist/orchestrator/adapters/codemap-adapter.d.ts.map +1 -1
  217. package/dist/orchestrator/adapters/codemap-adapter.js +2 -22
  218. package/dist/orchestrator/adapters/codemap-adapter.js.map +1 -1
  219. package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
  220. package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
  221. package/dist/orchestrator/ai-feed-generator.js +377 -0
  222. package/dist/orchestrator/ai-feed-generator.js.map +1 -0
  223. package/dist/orchestrator/history-risk-service.d.ts +55 -0
  224. package/dist/orchestrator/history-risk-service.d.ts.map +1 -0
  225. package/dist/orchestrator/history-risk-service.js +680 -0
  226. package/dist/orchestrator/history-risk-service.js.map +1 -0
  227. package/dist/orchestrator/types.d.ts +19 -1
  228. package/dist/orchestrator/types.d.ts.map +1 -1
  229. package/dist/orchestrator/types.js +19 -0
  230. package/dist/orchestrator/types.js.map +1 -1
  231. package/dist/server/mcp/index.d.ts +4 -0
  232. package/dist/server/mcp/index.d.ts.map +1 -0
  233. package/dist/server/mcp/index.js +5 -0
  234. package/dist/server/mcp/index.js.map +1 -0
  235. package/dist/server/mcp/server.d.ts +17 -0
  236. package/dist/server/mcp/server.d.ts.map +1 -0
  237. package/dist/server/mcp/server.js +84 -0
  238. package/dist/server/mcp/server.js.map +1 -0
  239. package/dist/server/mcp/service.d.ts +22 -0
  240. package/dist/server/mcp/service.d.ts.map +1 -0
  241. package/dist/server/mcp/service.js +177 -0
  242. package/dist/server/mcp/service.js.map +1 -0
  243. package/dist/server/mcp/types.d.ts +56 -0
  244. package/dist/server/mcp/types.d.ts.map +1 -0
  245. package/dist/server/mcp/types.js +4 -0
  246. package/dist/server/mcp/types.js.map +1 -0
  247. package/docs/AI_ASSISTANT_SETUP.md +1 -1
  248. package/docs/SETUP_GUIDE.md +6 -6
  249. package/docs/ai-guide/COMMANDS.md +171 -4
  250. package/docs/ai-guide/INTEGRATION.md +137 -433
  251. package/docs/ai-guide/OUTPUT.md +890 -5
  252. package/docs/ai-guide/PATTERNS.md +54 -14
  253. package/docs/ai-guide/PROMPTS.md +17 -6
  254. package/docs/archive/test-report-symbol-search.md +384 -0
  255. package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
  256. package/docs/archive/test_report_scenario5.md +615 -0
  257. package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
  258. package/docs/backlog.md +177 -0
  259. package/docs/eatdogfood-reports/2026-04-17-eatdogfood-agent-experience.md +231 -0
  260. package/docs/exec-plans/completed/2026-04-17-eatdogfood-codemap-cli.md +103 -0
  261. package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +102 -0
  262. package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +126 -0
  263. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +11 -10
  264. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +10 -10
  265. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +17 -12
  266. package/docs/product-specs/README.md +2 -1
  267. package/docs/rules/README.md +16 -11
  268. package/docs/rules/architecture-guardrails.md +24 -336
  269. package/docs/rules/code-quality-redlines.md +25 -311
  270. package/docs/rules/engineering-with-codex-openai.md +20 -3
  271. package/docs/rules/validation.md +90 -37
  272. package/mycodemap.config.schema.json +3 -3
  273. package/package.json +7 -2
  274. package/scripts/benchmark-governance-graph.mjs +132 -0
  275. package/scripts/calibrate-contract-gate.mjs +221 -0
  276. package/scripts/capability-report.py +255 -0
  277. package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
  278. package/scripts/qa-rule-control.sh +254 -0
  279. package/scripts/report-high-risk-files.mjs +395 -0
  280. package/scripts/rule-context.mjs +155 -0
  281. package/scripts/smoke-sqlite-impact.mjs +85 -0
  282. package/scripts/sync-analyze-docs.js +1 -0
  283. package/scripts/tests/test_capability_report.py +89 -0
  284. package/scripts/tests/test_rule_control_workflow.py +51 -0
  285. package/scripts/tests/test_validate_rules.py +81 -0
  286. package/scripts/validate-ai-docs.js +283 -1
  287. package/scripts/validate-docs.js +479 -25
  288. package/scripts/validate-rules.py +254 -0
@@ -170,6 +170,9 @@ node dist/cli/index.js ci check-headers
170
170
  # Step 3: 评估变更风险
171
171
  node dist/cli/index.js ci assess-risk
172
172
 
173
+ # Step 3.5: 需要看某个符号为什么危险 / 最近谁改过时
174
+ node dist/cli/index.js history --symbol createCheckCommand
175
+
173
176
  # Step 4: 检查输出契约(如果修改了 analyze)
174
177
  node dist/cli/index.js ci check-output-contract
175
178
 
@@ -180,6 +183,8 @@ node dist/cli/index.js ci check-docs-sync
180
183
  npm test
181
184
  ```
182
185
 
186
+ > `ci assess-risk`、`check`、`history` 共用同一套 Git history risk truth;若历史不可用,输出会显式返回 `unavailable` / warning,而不是默默降成低风险。
187
+
183
188
  ---
184
189
 
185
190
  ### 模式 F: 复杂分析任务(analysis-only workflow)
@@ -189,13 +194,31 @@ npm test
189
194
  **执行步骤**:
190
195
 
191
196
  ```bash
197
+ # Step 0: 如果任务来自人类设计,先校验 design contract
198
+ node dist/cli/index.js design validate mycodemap.design.md --json
199
+
200
+ # Step 0.5: 把 design contract 映射成 candidate code scope
201
+ node dist/cli/index.js design map mycodemap.design.md --json
202
+
203
+ # Step 0.75: 生成 reviewer / agent 共用的 handoff package
204
+ node dist/cli/index.js design handoff mycodemap.design.md --json
205
+
206
+ # Step 0.9: 基于 reviewed handoff truth 做 verification / drift 检查
207
+ node dist/cli/index.js design verify mycodemap.design.md --json
208
+
209
+ # Step 0.95: 先校准当前仓库是否还能默认 hard gate
210
+ node scripts/calibrate-contract-gate.mjs --max-changed-files 10 --max-false-positive-rate 0.10
211
+
212
+ # Step 0.97: 如果需要把 contract 变成 PR 门禁,显式输出 GitHub annotations
213
+ node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format github
214
+
192
215
  # Step 1: 启动工作流
193
216
  node dist/cli/index.js workflow start "实现用户认证模块"
194
217
 
195
218
  # Step 2: 查看当前阶段建议
196
219
  node dist/cli/index.js workflow status
197
220
 
198
- # Step 3: 执行当前阶段的分析和实现
221
+ # Step 3: 执行当前阶段的分析(实现/提交/CI 不在 workflow phase 内)
199
222
 
200
223
  # Step 4: 完成阶段后推进
201
224
  node dist/cli/index.js workflow proceed
@@ -214,14 +237,34 @@ node dist/cli/index.js workflow checkpoint
214
237
  2. `read` - 阅读影响范围、复杂度与上下文
215
238
  3. `link` - 汇总依赖、引用与关联关系
216
239
  4. `show` - 生成概览、摘要与展示型结果
217
- 5. `commit` - 提交验证
218
- 6. `ci` - CI 验证
219
240
 
220
- > 说明:以上是当前公开实现,不代表最终收敛模型;如果只需要代码地图能力,优先使用前面几个核心分析模式。
241
+ > 说明:`workflow` 仍只保留 `find` / `read` / `link` / `show` 四阶段;如果任务由人类设计驱动,先走 `design validate → design map → design handoff → design verify` 固定输入、候选范围、review gate 与 drift 检查;若还需要执行仓库级代码门禁,先校准再显式运行 `check`。
242
+
243
+ ### 模式 G: CI-native contract gate
244
+
245
+ **适用场景**: 需要把 `mycodemap.design.md` 真正接进 PR / CI,同时保持 annotation 可见且避免 noisy hard gate
246
+
247
+ **执行步骤**:
248
+
249
+ ```bash
250
+ # Step 1: 校准当前仓库的 hard-gate 窗口
251
+ node scripts/calibrate-contract-gate.mjs --max-changed-files 10 --max-false-positive-rate 0.10
252
+
253
+ # Step 2: 在 GitHub PR 中输出 annotation-friendly diagnostics
254
+ node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format github
255
+
256
+ # Step 3: 如需 GitLab artifact,写出 line-scoped code-quality 报告
257
+ node dist/cli/index.js check --contract mycodemap.design.md --against src --base origin/main --annotation-format gitlab --annotation-file gl-code-quality-report.json
258
+ ```
259
+
260
+ **决策要点**:
261
+ - PR 默认 hard gate 只在 calibration 通过且 `changed files <= 10` 时开启。
262
+ - 超过窗口、出现 `diff-scope-fallback`,或 `false-positive rate >10%` 时必须显式退回 `warn-only / fallback`。
263
+ - GitHub 允许 file-scoped degraded diagnostics;GitLab 只应输出 line-scoped diagnostics,不伪造行号。
221
264
 
222
265
  ---
223
266
 
224
- ### 模式 G: 切换图存储后端
267
+ ### 模式 H: 切换图存储后端
225
268
 
226
269
  **适用场景**: 需要把 CodeGraph 从默认文件系统存储切到 KùzuDB,或验证 graph backend 是否真正生效
227
270
 
@@ -234,24 +277,21 @@ cat mycodemap.config.json
234
277
  # Step 2: 选择后端
235
278
  # {
236
279
  # "storage": {
237
- # "type": "kuzudb",
238
- # "databasePath": ".codemap/kuzu"
280
+ # "type": "sqlite",
281
+ # "databasePath": ".codemap/governance.sqlite"
239
282
  # }
240
283
  # }
241
284
 
242
- # Step 3: 如需 Kùzu 图数据库后端,安装可选依赖
243
- npm install kuzu
244
-
245
- # Step 4: 重新生成代码地图
285
+ # Step 3: 重新生成代码地图
246
286
  node dist/cli/index.js generate
247
287
 
248
- # Step 5: 验证同一 backend 可被读取
288
+ # Step 4: 验证同一 backend 可被读取
249
289
  node dist/cli/index.js export json -o /tmp/codemap.json
250
290
  ```
251
291
 
252
292
  **决策要点**:
253
- - 旧的 `neo4j` 配置现在应该直接报迁移错误;缺少 `kuzu` 时也应看到显式错误,而不是静默 fallback。
254
- - `storage.type = "auto"` 当前仍保守落到 `filesystem`,不要把阈值字段误读成已上线自动切换。
293
+ - 旧的 `neo4j` / `kuzudb` 配置现在应该直接报迁移错误;显式 `sqlite` 但运行时不满足条件时也应看到显式错误,而不是静默 fallback。
294
+ - `storage.type = "auto"` 当前优先落到 `sqlite`;只有 SQLite 不可用时才回退 `filesystem`,不要把阈值字段误读成更复杂的调度器。
255
295
  - 图存储生产化只收口存储面,不重新开放公共 HTTP API 产品面。
256
296
 
257
297
  ---
@@ -340,32 +340,43 @@
340
340
 
341
341
  请执行以下步骤:
342
342
 
343
- 1. **相关代码搜索**
343
+ 1. **先把设计写成可验证输入**
344
+ ```bash
345
+ cp docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md mycodemap.design.md
346
+ node dist/cli/index.js design validate mycodemap.design.md --json
347
+ ```
348
+
349
+ 2. **如果这是架构边界类需求,先跑 contract gate**
350
+ ```bash
351
+ node dist/cli/index.js check --contract mycodemap.design.md --against src
352
+ ```
353
+
354
+ 3. **相关代码搜索**
344
355
  ```bash
345
356
  node dist/cli/index.js analyze -i find -k "{{RELATED_KEYWORD}}" --topK 10 --json
346
357
  ```
347
358
 
348
- 2. **参考现有实现**
359
+ 4. **参考现有实现**
349
360
  分析类似功能的实现方式
350
361
 
351
- 3. **确定实现位置**
362
+ 5. **确定实现位置**
352
363
  ```bash
353
364
  node dist/cli/index.js analyze -i read -t "候选目录" --json
354
365
  ```
355
366
  选择复杂度最低的模块
356
367
 
357
- 4. **影响分析**(如果需要修改现有代码)
368
+ 6. **影响分析**(如果需要修改现有代码)
358
369
  ```bash
359
370
  node dist/cli/index.js analyze -i read -t "目标文件" --json
360
371
  ```
361
372
 
362
- 5. **实现步骤**
373
+ 7. **实现步骤**
363
374
  - [ ] 创建新文件(添加 [META] [WHY] 头)
364
375
  - [ ] 实现核心功能
365
376
  - [ ] 添加单元测试
366
377
  - [ ] 运行测试验证
367
378
 
368
- 6. **验证**
379
+ 8. **验证**
369
380
  ```bash
370
381
  node dist/cli/index.js ci check-headers -f "新文件.ts"
371
382
  npm test
@@ -0,0 +1,384 @@
1
+ # CodeMap 符号搜索对比测试报告
2
+
3
+ ## 测试概述
4
+
5
+ **测试目标**: 对比 `codemap query -s/-S` 与 `grep/rg` 在搜索代码符号时的差异
6
+
7
+ **测试环境**: /data/codemap 目录
8
+
9
+ **测试时间**: 2026-03-02
10
+
11
+ ---
12
+
13
+ ## 测试场景1: 精确搜索符号 "ModuleInfo"
14
+
15
+ ### 测试目的
16
+ 搜索项目中广泛使用的类型名称 "ModuleInfo",对比各工具的精确匹配能力。
17
+
18
+ ### CodeMap 执行
19
+ ```bash
20
+ npx codemap query -s "ModuleInfo"
21
+ ```
22
+
23
+ **输出:**
24
+ ```
25
+ 🔍 查询 "ModuleInfo" (symbol)
26
+ 找到 5 个结果
27
+
28
+ moduleInfo
29
+ 类型: variable
30
+ 路径: /data/codemap/src/core/analyzer.ts
31
+ 定义于 src/core/analyzer.ts:55
32
+
33
+ moduleInfo
34
+ 类型: variable
35
+ 路径: /data/codemap/src/core/analyzer.ts
36
+ 定义于 src/core/analyzer.ts:63
37
+
38
+ moduleInfo
39
+ 类型: variable
40
+ 路径: /data/codemap/src/core/analyzer.ts
41
+ 定义于 src/core/analyzer.ts:76
42
+
43
+ ModuleInfo
44
+ 类型: interface
45
+ 路径: /data/codemap/src/types/index.ts
46
+ 导出于 src/types/index.ts
47
+
48
+ ModuleInfo
49
+ 类型: interface
50
+ 路径: /data/codemap/src/types/index.ts
51
+ 定义于 src/types/index.ts:154
52
+ ```
53
+
54
+ **执行时间**: 0.538s (real)
55
+
56
+ ### rg 执行
57
+ ```bash
58
+ rg -n "ModuleInfo" src/
59
+ ```
60
+
61
+ **输出:** (共找到 82 处匹配,以下为部分示例)
62
+ ```
63
+ src/parser/index.ts:8:import type { ModuleInfo, ImportInfo, ExportInfo, ModuleSymbol, SymbolKind, DecoratorInfo } from '../types/index.js';
64
+ src/parser/index.ts:60:export async function parseFile(filePath: string): Promise<ModuleInfo> {
65
+ src/core/analyzer.ts:5:import type { CodeMap, AnalysisOptions, ModuleInfo, DependencyGraph, ProjectInfo, ProjectSummary } from '../types/index.js';
66
+ src/core/analyzer.ts:43: const modules: ModuleInfo[] = [];
67
+ src/types/index.ts:154:export interface ModuleInfo {
68
+ src/cache/index.ts:10:import type { ModuleInfo } from '../types/index.js';
69
+ ...
70
+ ```
71
+
72
+ **执行时间**: 0.008s (real)
73
+
74
+ ### grep 执行
75
+ ```bash
76
+ grep -rn "ModuleInfo" src/
77
+ ```
78
+
79
+ **输出:** (与 rg 类似,共 82 处匹配)
80
+
81
+ **执行时间**: 0.003s (real)
82
+
83
+ ### 对比分析
84
+
85
+ | 维度 | CodeMap | rg | grep |
86
+ |------|---------|-----|------|
87
+ | **速度** | 0.538s | 0.008s | 0.003s |
88
+ | **结果数量** | 5 个符号定义 | 82 处匹配 | 82 处匹配 |
89
+ | **准确性** | 仅返回符号定义和导出 | 返回所有文本匹配 | 返回所有文本匹配 |
90
+ | **符号类型识别** | ✅ 是 (interface, variable) | ❌ 否 | ❌ 否 |
91
+ | **导出信息** | ✅ 显示导出位置 | ❌ 否 | ❌ 否 |
92
+ | **可读性** | 结构化,带类型标签 | 纯文本行 | 纯文本行 |
93
+
94
+ ### 发现的问题
95
+
96
+ 1. **CodeMap 速度较慢**: CodeMap 比 rg 慢约 67 倍,比 grep 慢约 179 倍
97
+ 2. **CodeMap 结果不完整**: CodeMap 只返回 5 个结果,而 rg/grep 返回 82 处匹配
98
+ 3. **CodeMap 区分大小写问题**: 搜索 "ModuleInfo" 时,变量名 "moduleInfo"(小写)也被返回,但可能并非用户期望的精确匹配
99
+ 4. **rg/grep 缺乏语义**: 无法区分类型定义、变量声明和普通文本引用
100
+
101
+ ---
102
+
103
+ ## 测试场景2: 模糊搜索 "cache"
104
+
105
+ ### 测试目的
106
+ 使用模糊搜索查找与 "cache" 相关的符号,对比各工具的模糊匹配能力。
107
+
108
+ ### CodeMap 执行
109
+ ```bash
110
+ npx codemap query -S "cache"
111
+ ```
112
+
113
+ **输出:**
114
+ ```
115
+ 🔍 查询 "cache" (search)
116
+ 找到 20 个结果
117
+
118
+ cached
119
+ 类型: variable
120
+ 路径: /data/codemap/src/ai/factory.ts
121
+ 定义于 src/ai/factory.ts:25
122
+
123
+ clearCache
124
+ 类型: method
125
+ 路径: /data/codemap/src/ai/factory.ts
126
+ 定义于 src/ai/factory.ts:95
127
+
128
+ src/cache/file-hash-cache.ts
129
+ 类型: module
130
+ 路径: /data/codemap/src/cache/file-hash-cache.ts
131
+ 模块匹配
132
+
133
+ FileHashCache
134
+ 类型: export (class)
135
+ 路径: /data/codemap/src/cache/file-hash-cache.ts
136
+ 导出于 src/cache/file-hash-cache.ts
137
+
138
+ generateCacheKey
139
+ 类型: export (function)
140
+ 路径: /data/codemap/src/cache/file-hash-cache.ts
141
+ 导出于 src/cache/file-hash-cache.ts
142
+
143
+ parseCacheKey
144
+ 类型: export (function)
145
+ 路径: /data/codemap/src/cache/file-hash-cache.ts
146
+ 导出于 src/cache/file-hash-cache.ts
147
+
148
+ FileHashCache
149
+ 类型: class
150
+ 路径: /data/codemap/src/cache/file-hash-cache.ts
151
+ 定义于 src/cache/file-hash-cache.ts:66
152
+
153
+ ... (共20个结果)
154
+ ```
155
+
156
+ **执行时间**: 0.642s (real)
157
+
158
+ ### rg 执行
159
+ ```bash
160
+ rg -n "cache" src/ -i
161
+ ```
162
+
163
+ **输出:** (共找到约 300+ 处匹配,以下为部分)
164
+ ```
165
+ src/cache/file-hash-cache.ts:2:// File Hash Cache - 文件哈希缓存
166
+ src/cache/file-hash-cache.ts:66:export class FileHashCache {
167
+ src/cache/file-hash-cache.ts:67: private hashCache = new Map<string, { hash: string; mtime: number }>();
168
+ src/cache/lru-cache.ts:2:// LRU Cache Implementation - 最近最少使用缓存
169
+ src/cache/lru-cache.ts:9:export class LRUCache<K, V> {
170
+ src/cache/index.ts:2:// Cache Module - 缓存系统入口
171
+ ...
172
+ ```
173
+
174
+ **执行时间**: 0.007s (real)
175
+
176
+ ### 对比分析
177
+
178
+ | 维度 | CodeMap (-S) | rg (-i) |
179
+ |------|--------------|---------|
180
+ | **速度** | 0.642s | 0.007s |
181
+ | **结果数量** | 20 个符号 | 300+ 处文本匹配 |
182
+ | **匹配模式** | 符号级模糊匹配 | 文本级正则匹配 |
183
+ | **信息类型** | 符号定义、导出、模块 | 所有文本行 |
184
+ | **去重** | ✅ 符号去重 (如 FileHashCache 类只出现一次定义) | ❌ 每行都显示 |
185
+ | **可读性** | 结构化,带类型信息 | 纯文本,含代码上下文 |
186
+
187
+ ### 发现的问题
188
+
189
+ 1. **CodeMap 模糊搜索速度慢**: 比 rg 慢约 91 倍
190
+ 2. **CodeMap 结果数量受限**: 仅返回 20 个结果,而 rg 返回 300+ 处
191
+ 3. **CodeMap 不显示引用位置**: 只显示定义位置,不显示使用位置
192
+ 4. **rg 结果噪音大**: 返回所有包含 "cache" 文本的行,包括注释、字符串、变量名等
193
+
194
+ ---
195
+
196
+ ## 测试场景3: 搜索类/接口定义 "Analyzer"
197
+
198
+ ### 测试目的
199
+ 搜索类或接口定义,对比各工具的类型识别能力。
200
+
201
+ ### CodeMap 执行
202
+ ```bash
203
+ npx codemap query -s "Analyzer"
204
+ ```
205
+
206
+ **输出:**
207
+ ```
208
+ 🔍 查询 "Analyzer" (symbol)
209
+ 找到 1 个结果
210
+
211
+ analyzer
212
+ 类型: variable
213
+ 路径: /data/codemap/src/orchestrator/__tests__/git-analyzer.test.ts
214
+ 定义于 src/orchestrator/__tests__/git-analyzer.test.ts:27
215
+ ```
216
+
217
+ **执行时间**: 0.515s (real)
218
+
219
+ ### rg 执行 (类/接口定义模式)
220
+ ```bash
221
+ rg -n "class Analyzer|interface Analyzer" src/
222
+ ```
223
+
224
+ **输出:**
225
+ ```
226
+ (无匹配,退出码 1)
227
+ ```
228
+
229
+ **执行时间**: 0.009s (real)
230
+
231
+ ### rg 执行 (扩展搜索)
232
+ ```bash
233
+ rg -n "Analyzer" src/ | head -30
234
+ ```
235
+
236
+ **输出:**
237
+ ```
238
+ src/cli/commands/ci.ts:9:import { GitAnalyzer } from '../../orchestrator/git-analyzer.js';
239
+ src/orchestrator/git-analyzer.ts:118: * GitAnalyzer 类
240
+ src/orchestrator/git-analyzer.ts:121:export class GitAnalyzer {
241
+ src/plugins/built-in/complexity-analyzer.ts:96:class ComplexityAnalyzerPlugin implements CodeMapPlugin {
242
+ src/orchestrator/index.ts:53: GitAnalyzer,
243
+ ...
244
+ ```
245
+
246
+ ### grep 执行
247
+ ```bash
248
+ grep -rn "Analyzer" src/ | head -30
249
+ ```
250
+
251
+ **输出:** (与 rg 类似)
252
+
253
+ ### 对比分析
254
+
255
+ | 维度 | CodeMap | rg (class/interface) | rg (extended) |
256
+ |------|---------|---------------------|---------------|
257
+ | **速度** | 0.515s | 0.009s | 0.010s |
258
+ | **结果** | 1 个变量 | 0 个 | 约 50+ 处 |
259
+ | **类型过滤** | ❌ 未正确过滤 | ✅ 精确匹配模式 | ❌ 无过滤 |
260
+ | **大小写敏感** | ❌ 不敏感 ("analyzer" 匹配 "Analyzer") | ✅ 敏感 | ✅ 敏感 |
261
+
262
+ ### 发现的问题
263
+
264
+ 1. **CodeMap 搜索 "Analyzer" 未找到 GitAnalyzer 类**: 这是严重问题!项目中存在 `GitAnalyzer` 类和 `ComplexityAnalyzerPlugin` 类,但 CodeMap 只找到一个测试文件中的变量 `analyzer`。
265
+ 2. **CodeMap 大小写不敏感问题**: 搜索 "Analyzer" 却匹配了 "analyzer" (小写变量名)。
266
+ 3. **rg 精确模式有效但过于严格**: `class Analyzer|interface Analyzer` 精确模式没有匹配到 `class GitAnalyzer` (因为类名是 GitAnalyzer 不是 Analyzer)。
267
+ 4. **CodeMap 缺少子串匹配**: CodeMap 似乎未将 "GitAnalyzer" 中的 "Analyzer" 子串作为匹配结果。
268
+
269
+ ---
270
+
271
+ ## 综合分析
272
+
273
+ ### 速度对比
274
+
275
+ | 工具 | Test1 (ModuleInfo) | Test2 (cache) | Test3 (Analyzer) | 平均 |
276
+ |------|-------------------|---------------|------------------|------|
277
+ | CodeMap | 0.538s | 0.642s | 0.515s | **0.565s** |
278
+ | rg | 0.008s | 0.007s | 0.010s | **0.008s** |
279
+ | grep | 0.003s | - | - | **0.003s** |
280
+
281
+ **结论**: CodeMap 比 rg 慢约 70 倍,比 grep 慢约 188 倍。
282
+
283
+ ### 准确性对比
284
+
285
+ | 场景 | CodeMap | rg/grep |
286
+ |------|---------|---------|
287
+ | 精确搜索 | ⚠️ 仅返回定义,遗漏大量引用 | ✅ 返回所有文本匹配 |
288
+ | 模糊搜索 | ✅ 返回相关符号,结构化 | ⚠️ 返回所有文本,噪音大 |
289
+ | 类型搜索 | ❌ 严重遗漏 (未找到 GitAnalyzer) | ⚠️ 需要复杂正则 |
290
+
291
+ ### 信息丰富度对比
292
+
293
+ | 信息类型 | CodeMap | rg | grep |
294
+ |---------|---------|-----|------|
295
+ | 符号类型 | ✅ | ❌ | ❌ |
296
+ | 导出信息 | ✅ | ❌ | ❌ |
297
+ | 文件路径 | ✅ | ✅ | ✅ |
298
+ | 行号 | ✅ | ✅ | ✅ |
299
+ | 代码上下文 | ❌ | ✅ | ✅ |
300
+ | 依赖关系 | ❌ | ❌ | ❌ |
301
+
302
+ ### 易用性对比
303
+
304
+ | 维度 | CodeMap | rg | grep |
305
+ |------|---------|-----|------|
306
+ | 命令简洁度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
307
+ | 输出可读性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
308
+ | 学习曲线 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
309
+ | 无需索引 | ❌ | ✅ | ✅ |
310
+
311
+ ---
312
+
313
+ ## 发现的关键问题
314
+
315
+ ### 🔴 严重问题
316
+
317
+ 1. **符号搜索遗漏严重**: CodeMap 在搜索 "Analyzer" 时完全遗漏了 `GitAnalyzer` 类和 `ComplexityAnalyzerPlugin` 类,只找到一个不相关的变量。
318
+ - 检查 codemap.json 发现 GitAnalyzer 存在于索引中(多处)
319
+ - 可能是搜索算法未正确处理子串匹配或类名前缀
320
+
321
+ 2. **大小写处理不一致**:
322
+ - 搜索 "ModuleInfo" 返回了 "moduleInfo" (小写变量)
323
+ - 搜索 "Analyzer" 返回了 "analyzer" (小写变量)
324
+ - 但搜索 "cache" 却正确区分了大小写变体
325
+
326
+ ### 🟡 中等问题
327
+
328
+ 3. **速度性能差**: CodeMap 比传统工具慢 70-180 倍,对于大型项目可能无法接受。
329
+
330
+ 4. **结果数量有限**: 模糊搜索仅返回 20 个结果,可能遗漏重要符号。
331
+
332
+ ### 🟢 轻微问题
333
+
334
+ 5. **缺少引用信息**: CodeMap 只返回定义位置,不显示符号在哪里被使用。
335
+
336
+ 6. **无代码上下文**: 不像 rg/grep 那样显示匹配的代码行。
337
+
338
+ ---
339
+
340
+ ## 建议
341
+
342
+ ### 对 CodeMap 的改进建议
343
+
344
+ 1. **修复搜索算法**:
345
+ - 确保子串匹配正常工作(如 "Analyzer" 应匹配 "GitAnalyzer")
346
+ - 检查符号索引的查询逻辑
347
+
348
+ 2. **优化性能**:
349
+ - 使用更高效的数据结构(如 Trie 树)进行符号查找
350
+ - 考虑使用 SQLite 或嵌入式数据库加速查询
351
+
352
+ 3. **增强搜索选项**:
353
+ - 添加 `--case-sensitive` 和 `--case-insensitive` 选项
354
+ - 添加 `--include-references` 选项显示符号引用位置
355
+ - 添加 `-n/--limit` 选项控制结果数量
356
+
357
+ 4. **显示代码上下文**:
358
+ - 添加选项显示匹配行的代码片段
359
+
360
+ ### 使用建议
361
+
362
+ | 场景 | 推荐工具 | 原因 |
363
+ |------|---------|------|
364
+ | 快速查找文本 | rg/grep | 速度快,无需索引 |
365
+ | 查找符号定义 | CodeMap | 结构化输出,带类型信息 |
366
+ | 理解代码结构 | CodeMap | 显示导出和模块关系 |
367
+ | 查找类/接口定义 | rg + 正则 | CodeMap 当前有遗漏问题 |
368
+ | 模糊探索代码库 | CodeMap | 符号级模糊匹配减少噪音 |
369
+
370
+ ---
371
+
372
+ ## 附录: 测试原始数据
373
+
374
+ ### CodeMap 索引统计
375
+ - 总文件数: 104
376
+ - 总行数: 28,878
377
+ - 总模块数: 104
378
+ - 总导出: 378
379
+ - 总类型: 70
380
+
381
+ ### 发现的符号
382
+ - `ModuleInfo` 接口定义于: src/types/index.ts:154
383
+ - `GitAnalyzer` 类定义于: src/orchestrator/git-analyzer.ts:121
384
+ - `ComplexityAnalyzerPlugin` 类定义于: src/plugins/built-in/complexity-analyzer.ts:96