@mycodemap/mycodemap 0.4.1 → 0.5.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 (309) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/README.md +307 -243
  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-options.d.ts +36 -0
  32. package/dist/cli/commands/analyze-options.d.ts.map +1 -0
  33. package/dist/cli/commands/analyze-options.js +147 -0
  34. package/dist/cli/commands/analyze-options.js.map +1 -0
  35. package/dist/cli/commands/analyze.d.ts +93 -4
  36. package/dist/cli/commands/analyze.d.ts.map +1 -1
  37. package/dist/cli/commands/analyze.js +592 -176
  38. package/dist/cli/commands/analyze.js.map +1 -1
  39. package/dist/cli/commands/ci.d.ts +47 -1
  40. package/dist/cli/commands/ci.d.ts.map +1 -1
  41. package/dist/cli/commands/ci.js +208 -1
  42. package/dist/cli/commands/ci.js.map +1 -1
  43. package/dist/cli/commands/design.d.ts +47 -0
  44. package/dist/cli/commands/design.d.ts.map +1 -0
  45. package/dist/cli/commands/design.js +268 -0
  46. package/dist/cli/commands/design.js.map +1 -0
  47. package/dist/cli/commands/export.d.ts.map +1 -1
  48. package/dist/cli/commands/export.js +2 -2
  49. package/dist/cli/commands/export.js.map +1 -1
  50. package/dist/cli/commands/generate.d.ts +8 -2
  51. package/dist/cli/commands/generate.d.ts.map +1 -1
  52. package/dist/cli/commands/generate.js +151 -22
  53. package/dist/cli/commands/generate.js.map +1 -1
  54. package/dist/cli/commands/init.d.ts.map +1 -1
  55. package/dist/cli/commands/init.js +2 -13
  56. package/dist/cli/commands/init.js.map +1 -1
  57. package/dist/cli/commands/server.d.ts.map +1 -1
  58. package/dist/cli/commands/server.js +2 -5
  59. package/dist/cli/commands/server.js.map +1 -1
  60. package/dist/cli/commands/ship/checker.d.ts.map +1 -1
  61. package/dist/cli/commands/ship/checker.js +0 -3
  62. package/dist/cli/commands/ship/checker.js.map +1 -1
  63. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  64. package/dist/cli/commands/ship/pipeline.js +8 -1
  65. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  66. package/dist/cli/commands/ship/publisher.d.ts +9 -1
  67. package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
  68. package/dist/cli/commands/ship/publisher.js +149 -6
  69. package/dist/cli/commands/ship/publisher.js.map +1 -1
  70. package/dist/cli/commands/ship/rules/quality-rules.d.ts +0 -1
  71. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -1
  72. package/dist/cli/commands/ship/rules/quality-rules.js +4 -76
  73. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -1
  74. package/dist/cli/commands/workflow.js +4 -4
  75. package/dist/cli/commands/workflow.js.map +1 -1
  76. package/dist/cli/config-loader.d.ts +31 -0
  77. package/dist/cli/config-loader.d.ts.map +1 -0
  78. package/dist/cli/config-loader.js +235 -0
  79. package/dist/cli/config-loader.js.map +1 -0
  80. package/dist/cli/design-contract-loader.d.ts +15 -0
  81. package/dist/cli/design-contract-loader.d.ts.map +1 -0
  82. package/dist/cli/design-contract-loader.js +175 -0
  83. package/dist/cli/design-contract-loader.js.map +1 -0
  84. package/dist/cli/design-contract-schema.d.ts +11 -0
  85. package/dist/cli/design-contract-schema.d.ts.map +1 -0
  86. package/dist/cli/design-contract-schema.js +75 -0
  87. package/dist/cli/design-contract-schema.js.map +1 -0
  88. package/dist/cli/design-handoff-builder.d.ts +15 -0
  89. package/dist/cli/design-handoff-builder.d.ts.map +1 -0
  90. package/dist/cli/design-handoff-builder.js +345 -0
  91. package/dist/cli/design-handoff-builder.js.map +1 -0
  92. package/dist/cli/design-scope-resolver.d.ts +8 -0
  93. package/dist/cli/design-scope-resolver.d.ts.map +1 -0
  94. package/dist/cli/design-scope-resolver.js +712 -0
  95. package/dist/cli/design-scope-resolver.js.map +1 -0
  96. package/dist/cli/design-verification-builder.d.ts +8 -0
  97. package/dist/cli/design-verification-builder.d.ts.map +1 -0
  98. package/dist/cli/design-verification-builder.js +369 -0
  99. package/dist/cli/design-verification-builder.js.map +1 -0
  100. package/dist/cli/index.js +20 -63
  101. package/dist/cli/index.js.map +1 -1
  102. package/dist/cli/removed-commands.d.ts +9 -0
  103. package/dist/cli/removed-commands.d.ts.map +1 -0
  104. package/dist/cli/removed-commands.js +48 -0
  105. package/dist/cli/removed-commands.js.map +1 -0
  106. package/dist/cli/storage-runtime.d.ts +8 -0
  107. package/dist/cli/storage-runtime.d.ts.map +1 -0
  108. package/dist/cli/storage-runtime.js +14 -0
  109. package/dist/cli/storage-runtime.js.map +1 -0
  110. package/dist/cli/tree-sitter-check.d.ts.map +1 -1
  111. package/dist/cli/tree-sitter-check.js +0 -1
  112. package/dist/cli/tree-sitter-check.js.map +1 -1
  113. package/dist/cli-new/commands/export.d.ts.map +1 -1
  114. package/dist/cli-new/commands/export.js +2 -2
  115. package/dist/cli-new/commands/export.js.map +1 -1
  116. package/dist/cli-new/commands/query.d.ts.map +1 -1
  117. package/dist/cli-new/commands/query.js +5 -4
  118. package/dist/cli-new/commands/query.js.map +1 -1
  119. package/dist/cli-new/commands/server.d.ts.map +1 -1
  120. package/dist/cli-new/commands/server.js +2 -6
  121. package/dist/cli-new/commands/server.js.map +1 -1
  122. package/dist/cli-new/index.d.ts.map +1 -1
  123. package/dist/cli-new/index.js +0 -2
  124. package/dist/cli-new/index.js.map +1 -1
  125. package/dist/core/analyzer.d.ts.map +1 -1
  126. package/dist/core/analyzer.js +7 -39
  127. package/dist/core/analyzer.js.map +1 -1
  128. package/dist/core/file-discovery.d.ts +17 -0
  129. package/dist/core/file-discovery.d.ts.map +1 -0
  130. package/dist/core/file-discovery.js +75 -0
  131. package/dist/core/file-discovery.js.map +1 -0
  132. package/dist/core/global-index.d.ts +5 -0
  133. package/dist/core/global-index.d.ts.map +1 -1
  134. package/dist/core/global-index.js +71 -21
  135. package/dist/core/global-index.js.map +1 -1
  136. package/dist/generator/ai-overview.d.ts +51 -0
  137. package/dist/generator/ai-overview.d.ts.map +1 -0
  138. package/dist/generator/ai-overview.js +160 -0
  139. package/dist/generator/ai-overview.js.map +1 -0
  140. package/dist/generator/index.d.ts.map +1 -1
  141. package/dist/generator/index.js +8 -0
  142. package/dist/generator/index.js.map +1 -1
  143. package/dist/infrastructure/parser/implementations/GoParser.d.ts +2 -5
  144. package/dist/infrastructure/parser/implementations/GoParser.d.ts.map +1 -1
  145. package/dist/infrastructure/parser/implementations/GoParser.js +2 -5
  146. package/dist/infrastructure/parser/implementations/GoParser.js.map +1 -1
  147. package/dist/infrastructure/parser/implementations/PythonParser.d.ts +1 -5
  148. package/dist/infrastructure/parser/implementations/PythonParser.d.ts.map +1 -1
  149. package/dist/infrastructure/parser/implementations/PythonParser.js +1 -5
  150. package/dist/infrastructure/parser/implementations/PythonParser.js.map +1 -1
  151. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts +1 -5
  152. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts.map +1 -1
  153. package/dist/infrastructure/parser/implementations/TypeScriptParser.js +1 -5
  154. package/dist/infrastructure/parser/implementations/TypeScriptParser.js.map +1 -1
  155. package/dist/infrastructure/storage/StorageFactory.d.ts +12 -6
  156. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  157. package/dist/infrastructure/storage/StorageFactory.js +59 -43
  158. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  159. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
  160. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +24 -137
  161. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
  162. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +10 -18
  163. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
  164. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +103 -146
  165. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
  166. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +0 -1
  167. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
  168. package/dist/infrastructure/storage/adapters/MemoryStorage.js +16 -136
  169. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
  170. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +9 -17
  171. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -1
  172. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +78 -138
  173. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -1
  174. package/dist/infrastructure/storage/graph-helpers.d.ts +16 -0
  175. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -0
  176. package/dist/infrastructure/storage/graph-helpers.js +161 -0
  177. package/dist/infrastructure/storage/graph-helpers.js.map +1 -0
  178. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  179. package/dist/interface/config/index.d.ts +10 -1
  180. package/dist/interface/config/index.d.ts.map +1 -1
  181. package/dist/interface/types/design-contract.d.ts +68 -0
  182. package/dist/interface/types/design-contract.d.ts.map +1 -0
  183. package/dist/interface/types/design-contract.js +7 -0
  184. package/dist/interface/types/design-contract.js.map +1 -0
  185. package/dist/interface/types/design-handoff.d.ts +68 -0
  186. package/dist/interface/types/design-handoff.d.ts.map +1 -0
  187. package/dist/interface/types/design-handoff.js +4 -0
  188. package/dist/interface/types/design-handoff.js.map +1 -0
  189. package/dist/interface/types/design-mapping.d.ts +51 -0
  190. package/dist/interface/types/design-mapping.d.ts.map +1 -0
  191. package/dist/interface/types/design-mapping.js +4 -0
  192. package/dist/interface/types/design-mapping.js.map +1 -0
  193. package/dist/interface/types/design-verification.d.ts +49 -0
  194. package/dist/interface/types/design-verification.d.ts.map +1 -0
  195. package/dist/interface/types/design-verification.js +4 -0
  196. package/dist/interface/types/design-verification.js.map +1 -0
  197. package/dist/interface/types/index.d.ts +17 -0
  198. package/dist/interface/types/index.d.ts.map +1 -1
  199. package/dist/interface/types/storage.d.ts +1 -4
  200. package/dist/interface/types/storage.d.ts.map +1 -1
  201. package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
  202. package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
  203. package/dist/orchestrator/ai-feed-generator.js +377 -0
  204. package/dist/orchestrator/ai-feed-generator.js.map +1 -0
  205. package/dist/orchestrator/confidence.d.ts +9 -9
  206. package/dist/orchestrator/confidence.d.ts.map +1 -1
  207. package/dist/orchestrator/confidence.js +44 -67
  208. package/dist/orchestrator/confidence.js.map +1 -1
  209. package/dist/orchestrator/file-header-scanner.d.ts.map +1 -1
  210. package/dist/orchestrator/file-header-scanner.js +22 -31
  211. package/dist/orchestrator/file-header-scanner.js.map +1 -1
  212. package/dist/orchestrator/intent-router.d.ts +2 -11
  213. package/dist/orchestrator/intent-router.d.ts.map +1 -1
  214. package/dist/orchestrator/intent-router.js +58 -49
  215. package/dist/orchestrator/intent-router.js.map +1 -1
  216. package/dist/orchestrator/tool-orchestrator.d.ts.map +1 -1
  217. package/dist/orchestrator/tool-orchestrator.js +6 -4
  218. package/dist/orchestrator/tool-orchestrator.js.map +1 -1
  219. package/dist/orchestrator/types.d.ts +113 -2
  220. package/dist/orchestrator/types.d.ts.map +1 -1
  221. package/dist/orchestrator/types.js +29 -0
  222. package/dist/orchestrator/types.js.map +1 -1
  223. package/dist/orchestrator/workflow/config.d.ts +4 -12
  224. package/dist/orchestrator/workflow/config.d.ts.map +1 -1
  225. package/dist/orchestrator/workflow/config.js +4 -6
  226. package/dist/orchestrator/workflow/config.js.map +1 -1
  227. package/dist/orchestrator/workflow/git-analyzer.d.ts.map +1 -1
  228. package/dist/orchestrator/workflow/git-analyzer.js +9 -19
  229. package/dist/orchestrator/workflow/git-analyzer.js.map +1 -1
  230. package/dist/orchestrator/workflow/phase-inheritance.d.ts.map +1 -1
  231. package/dist/orchestrator/workflow/phase-inheritance.js +14 -23
  232. package/dist/orchestrator/workflow/phase-inheritance.js.map +1 -1
  233. package/dist/orchestrator/workflow/result-fusion.d.ts.map +1 -1
  234. package/dist/orchestrator/workflow/result-fusion.js +9 -11
  235. package/dist/orchestrator/workflow/result-fusion.js.map +1 -1
  236. package/dist/orchestrator/workflow/templates.d.ts +4 -1
  237. package/dist/orchestrator/workflow/templates.d.ts.map +1 -1
  238. package/dist/orchestrator/workflow/templates.js +49 -207
  239. package/dist/orchestrator/workflow/templates.js.map +1 -1
  240. package/dist/orchestrator/workflow/test-linker.d.ts.map +1 -1
  241. package/dist/orchestrator/workflow/test-linker.js +12 -24
  242. package/dist/orchestrator/workflow/test-linker.js.map +1 -1
  243. package/dist/orchestrator/workflow/types.d.ts +11 -8
  244. package/dist/orchestrator/workflow/types.d.ts.map +1 -1
  245. package/dist/orchestrator/workflow/types.js +8 -1
  246. package/dist/orchestrator/workflow/types.js.map +1 -1
  247. package/dist/orchestrator/workflow/visualizer.d.ts.map +1 -1
  248. package/dist/orchestrator/workflow/visualizer.js +7 -9
  249. package/dist/orchestrator/workflow/visualizer.js.map +1 -1
  250. package/dist/orchestrator/workflow/workflow-context.d.ts.map +1 -1
  251. package/dist/orchestrator/workflow/workflow-context.js +3 -5
  252. package/dist/orchestrator/workflow/workflow-context.js.map +1 -1
  253. package/dist/orchestrator/workflow/workflow-orchestrator.d.ts +0 -4
  254. package/dist/orchestrator/workflow/workflow-orchestrator.d.ts.map +1 -1
  255. package/dist/orchestrator/workflow/workflow-orchestrator.js +7 -99
  256. package/dist/orchestrator/workflow/workflow-orchestrator.js.map +1 -1
  257. package/dist/parser/index.d.ts.map +1 -1
  258. package/dist/parser/index.js +2 -2
  259. package/dist/parser/index.js.map +1 -1
  260. package/dist/plugins/index.d.ts +5 -3
  261. package/dist/plugins/index.d.ts.map +1 -1
  262. package/dist/plugins/index.js +19 -8
  263. package/dist/plugins/index.js.map +1 -1
  264. package/dist/plugins/plugin-loader.d.ts +21 -6
  265. package/dist/plugins/plugin-loader.d.ts.map +1 -1
  266. package/dist/plugins/plugin-loader.js +170 -54
  267. package/dist/plugins/plugin-loader.js.map +1 -1
  268. package/dist/plugins/plugin-registry.d.ts +7 -4
  269. package/dist/plugins/plugin-registry.d.ts.map +1 -1
  270. package/dist/plugins/plugin-registry.js +62 -14
  271. package/dist/plugins/plugin-registry.js.map +1 -1
  272. package/dist/plugins/types.d.ts +16 -6
  273. package/dist/plugins/types.d.ts.map +1 -1
  274. package/dist/plugins/types.js +2 -0
  275. package/dist/plugins/types.js.map +1 -1
  276. package/dist/server/handlers/AnalysisHandler.d.ts +16 -2
  277. package/dist/server/handlers/AnalysisHandler.d.ts.map +1 -1
  278. package/dist/server/handlers/AnalysisHandler.js +31 -47
  279. package/dist/server/handlers/AnalysisHandler.js.map +1 -1
  280. package/dist/server/routes/api.d.ts.map +1 -1
  281. package/dist/server/routes/api.js +31 -12
  282. package/dist/server/routes/api.js.map +1 -1
  283. package/docs/AI_ASSISTANT_SETUP.md +3 -1
  284. package/docs/SETUP_GUIDE.md +41 -17
  285. package/docs/ai-guide/COMMANDS.md +179 -102
  286. package/docs/ai-guide/INTEGRATION.md +23 -21
  287. package/docs/ai-guide/OUTPUT.md +621 -10
  288. package/docs/ai-guide/PATTERNS.md +77 -18
  289. package/docs/ai-guide/PROMPTS.md +24 -18
  290. package/docs/ai-guide/QUICKSTART.md +35 -19
  291. package/docs/ai-guide/README.md +22 -4
  292. package/docs/archive/test-report-symbol-search.md +384 -0
  293. package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
  294. package/docs/archive/test_report_scenario5.md +615 -0
  295. package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
  296. package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +79 -0
  297. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +159 -434
  298. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +169 -261
  299. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +201 -1259
  300. package/docs/product-specs/README.md +9 -1
  301. package/docs/rules/architecture-guardrails.md +1 -2
  302. package/docs/rules/engineering-with-codex-openai.md +20 -10
  303. package/docs/rules/validation.md +29 -4
  304. package/mycodemap.config.schema.json +76 -5
  305. package/package.json +1 -1
  306. package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
  307. package/scripts/sync-analyze-docs.js +500 -0
  308. package/scripts/validate-ai-docs.js +54 -1
  309. package/scripts/validate-docs.js +992 -25
@@ -4,6 +4,7 @@
4
4
  import { existsSync, readFileSync } from 'node:fs';
5
5
  import path from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
+ import { collectAnalyzeDocSyncFailures } from './sync-analyze-docs.js';
7
8
 
8
9
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
10
  const defaultRootDir = path.resolve(__dirname, '..');
@@ -45,6 +46,20 @@ function expectNotIncludes(text, snippet, label, failures) {
45
46
  }
46
47
  }
47
48
 
49
+ function validateSnippets(text, label, requiredSnippets, outdatedSnippets, failures) {
50
+ if (!text) {
51
+ return;
52
+ }
53
+
54
+ for (const snippet of requiredSnippets) {
55
+ expectIncludes(text, snippet, label, failures);
56
+ }
57
+
58
+ for (const snippet of outdatedSnippets) {
59
+ expectNotIncludes(text, snippet, label, failures);
60
+ }
61
+ }
62
+
48
63
  function validatePackageScripts(rootDir, failures) {
49
64
  const packageJsonText = readText(rootDir, 'package.json', failures);
50
65
  if (!packageJsonText) {
@@ -67,43 +82,799 @@ function validatePackageScripts(rootDir, failures) {
67
82
 
68
83
  function validateAnalyzeDocs(rootDir, failures) {
69
84
  const readme = readText(rootDir, 'README.md', failures);
70
- const cliSource = readText(rootDir, 'src/cli/index.ts', failures);
85
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
86
+ const claudeGuide = readText(rootDir, 'CLAUDE.md', failures);
87
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
88
+ const outputGuide = readText(rootDir, 'docs/ai-guide/OUTPUT.md', failures);
89
+ const engineeringGuide = readText(rootDir, 'docs/rules/engineering-with-codex-openai.md', failures);
90
+ const analyzeOptionsSource = readText(rootDir, 'src/cli/commands/analyze-options.ts', failures);
91
+ const cliIndexSource = readText(rootDir, 'src/cli/index.ts', failures);
71
92
 
72
- if (!readme || !cliSource) {
93
+ if (!analyzeOptionsSource || !cliIndexSource) {
73
94
  return;
74
95
  }
75
96
 
76
- const requiredCliSnippets = [
77
- ".option('-i, --intent <type>'",
78
- ".option('-t, --targets <paths...>'",
79
- ".option('-k, --keywords <words...>'",
80
- ".option('--include-tests'"
97
+ const requiredAnalyzeOptionSnippets = [
98
+ 'ANALYZE_OPTION_DEFINITIONS',
99
+ "flags: '-i, --intent <type>'",
100
+ "flags: '-t, --targets <paths...>'",
101
+ "flags: '-k, --keywords <words...>'",
102
+ "flags: '--include-tests'",
103
+ 'docDescription:',
104
+ 'docDefaultValue:',
105
+ 'getAnalyzeHelpText'
81
106
  ];
82
107
 
83
- for (const snippet of requiredCliSnippets) {
84
- expectIncludes(cliSource, snippet, 'src/cli/index.ts', failures);
108
+ for (const snippet of requiredAnalyzeOptionSnippets) {
109
+ expectIncludes(
110
+ analyzeOptionsSource,
111
+ snippet,
112
+ 'src/cli/commands/analyze-options.ts',
113
+ failures
114
+ );
85
115
  }
86
116
 
87
- const requiredReadmeExamples = [
88
- 'mycodemap analyze -i overview -t src/orchestrator',
89
- 'mycodemap analyze -i impact -t src/cli/index.ts --include-tests',
90
- 'mycodemap analyze -i dependency -t src/cli/index.ts',
91
- 'mycodemap analyze -i search -k UnifiedResult'
92
- ];
117
+ expectIncludes(cliIndexSource, 'configureAnalyzeCommand(', 'src/cli/index.ts', failures);
118
+
119
+ validateSnippets(
120
+ readme,
121
+ 'README.md analyze examples',
122
+ [
123
+ 'mycodemap analyze -i find -k SourceLocation',
124
+ 'mycodemap analyze -i read -t src/cli/index.ts --include-tests --json',
125
+ 'mycodemap analyze -i link -t src/cli/index.ts',
126
+ 'mycodemap analyze -i show -t src/orchestrator',
127
+ '`refactor` 会返回 `E0001_INVALID_INTENT`'
128
+ ],
129
+ [
130
+ 'mycodemap analyze -i overview -t src/orchestrator',
131
+ 'mycodemap analyze -i impact -t src/cli/index.ts --include-tests',
132
+ 'mycodemap analyze -i dependency -t src/cli/index.ts',
133
+ 'mycodemap analyze -i search -k UnifiedResult',
134
+ 'mycodemap analyze --intent impact --file src/cli/index.ts'
135
+ ],
136
+ failures
137
+ );
138
+
139
+ validateSnippets(
140
+ aiGuide,
141
+ 'AI_GUIDE.md analyze baseline',
142
+ [
143
+ 'analyze -i show -t "src/" --json',
144
+ 'node dist/cli/index.js analyze -i read -t "{{FILE}}" --scope transitive --json',
145
+ 'intent: "find" | "read" | "link" | "show";'
146
+ ],
147
+ [
148
+ 'analyze -i overview -t "src/" --json',
149
+ 'node dist/cli/index.js analyze -i impact -t "{{FILE}}" --transitive --json',
150
+ 'analyze -i refactor'
151
+ ],
152
+ failures
153
+ );
154
+
155
+ validateSnippets(
156
+ commandsGuide,
157
+ 'docs/ai-guide/COMMANDS.md analyze baseline',
158
+ [
159
+ '### 当前公共契约:4 种分析意图',
160
+ 'mycodemap analyze -i find -k "UnifiedResult"',
161
+ 'mycodemap analyze -i read -t "src/index.ts" --scope transitive',
162
+ 'mycodemap analyze -i link -t "src/orchestrator"',
163
+ 'mycodemap analyze -i show -t "src/"',
164
+ '### legacy 兼容映射'
165
+ ],
166
+ [
167
+ '### 当前实现:8 种分析意图(过渡态)',
168
+ 'mycodemap analyze -i impact -t "src/index.ts"',
169
+ 'mycodemap analyze -i dependency -t "src/orchestrator"',
170
+ 'mycodemap analyze -i complexity -t "src/domain"',
171
+ 'mycodemap analyze -i search -k "UnifiedResult"',
172
+ 'mycodemap analyze -i overview -t "src/"',
173
+ 'mycodemap analyze -i refactor -t "src/cache"',
174
+ 'mycodemap analyze -i reference -t "src/interface/types"',
175
+ 'mycodemap analyze -i documentation -t "src/domain/services"'
176
+ ],
177
+ failures
178
+ );
93
179
 
94
- for (const example of requiredReadmeExamples) {
95
- expectIncludes(readme, example, 'README.md analyze examples', failures);
180
+ validateSnippets(
181
+ outputGuide,
182
+ 'docs/ai-guide/OUTPUT.md analyze schema',
183
+ [
184
+ '当前公共契约已固定为 `find` / `read` / `link` / `show`',
185
+ 'type AnalyzeIntent = "find" | "read" | "link" | "show";',
186
+ 'warnings?: AnalyzeWarning[];',
187
+ 'analysis?: ReadAnalysis | LinkAnalysis | ShowAnalysis;',
188
+ '"intent": "read"',
189
+ '"code": "deprecated-intent"'
190
+ ],
191
+ [
192
+ '当前仍是 8 意图过渡态,本文件先记录真实 schema',
193
+ 'intent: "impact" | "dependency" | "search" | "documentation" | "complexity" | "overview" | "refactor" | "reference";'
194
+ ],
195
+ failures
196
+ );
197
+
198
+ validateSnippets(
199
+ claudeGuide,
200
+ 'CLAUDE.md analyze retrieval guidance',
201
+ [
202
+ 'node dist/cli/index.js analyze -i <find|read|link|show>'
203
+ ],
204
+ [
205
+ 'node dist/cli/index.js analyze <intent>'
206
+ ],
207
+ failures
208
+ );
209
+
210
+ validateSnippets(
211
+ engineeringGuide,
212
+ 'docs/rules/engineering-with-codex-openai.md analyze guardrail',
213
+ [
214
+ 'node dist/cli/index.js analyze --help',
215
+ '`find` / `read` / `link` / `show`',
216
+ '`warnings[]`',
217
+ '`--structured --json`'
218
+ ],
219
+ [
220
+ '`--output-mode machine --json`',
221
+ 'analyze documentation'
222
+ ],
223
+ failures
224
+ );
225
+
226
+ failures.push(...collectAnalyzeDocSyncFailures(rootDir));
227
+ }
228
+
229
+ function validateDesignContractDocs(rootDir, failures) {
230
+ const readme = readText(rootDir, 'README.md', failures);
231
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
232
+ const claudeGuide = readText(rootDir, 'CLAUDE.md', failures);
233
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
234
+ const outputGuide = readText(rootDir, 'docs/ai-guide/OUTPUT.md', failures);
235
+ const patternsGuide = readText(rootDir, 'docs/ai-guide/PATTERNS.md', failures);
236
+ const promptsGuide = readText(rootDir, 'docs/ai-guide/PROMPTS.md', failures);
237
+ const engineeringGuide = readText(rootDir, 'docs/rules/engineering-with-codex-openai.md', failures);
238
+ const validationRule = readText(rootDir, 'docs/rules/validation.md', failures);
239
+ const productSpecsReadme = readText(rootDir, 'docs/product-specs/README.md', failures);
240
+ const designTemplate = readText(rootDir, 'docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md', failures);
241
+ const cliIndexSource = readText(rootDir, 'src/cli/index.ts', failures);
242
+ const designCommandSource = readText(rootDir, 'src/cli/commands/design.ts', failures);
243
+
244
+ if (cliIndexSource) {
245
+ expectIncludes(cliIndexSource, 'program.addCommand(designCommand);', 'src/cli/index.ts design command registration', failures);
96
246
  }
97
247
 
98
- const outdatedReadmeExamples = [
99
- 'mycodemap analyze "',
100
- 'mycodemap analyze --intent impact --file',
101
- 'mycodemap analyze --intent dependency --file',
102
- 'mycodemap analyze --intent search "'
103
- ];
248
+ if (designCommandSource) {
249
+ validateSnippets(
250
+ designCommandSource,
251
+ 'src/cli/commands/design.ts command surface',
252
+ [
253
+ "new Command('design')",
254
+ ".command('validate')",
255
+ ".command('map')",
256
+ ".command('handoff')",
257
+ ".command('verify')",
258
+ 'renderDesignMappingResult',
259
+ 'renderDesignVerificationResult',
260
+ 'runDesignHandoff',
261
+ 'runDesignVerify',
262
+ 'DEFAULT_DESIGN_CONTRACT_PATH',
263
+ 'JSON 格式输出'
264
+ ],
265
+ [],
266
+ failures
267
+ );
268
+ }
269
+
270
+ if (readme) {
271
+ validateSnippets(
272
+ readme,
273
+ 'README.md design contract baseline',
274
+ [
275
+ 'mycodemap design validate mycodemap.design.md --json',
276
+ 'mycodemap design map mycodemap.design.md --json',
277
+ 'mycodemap design handoff mycodemap.design.md --json',
278
+ 'mycodemap design verify mycodemap.design.md --json',
279
+ 'docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md',
280
+ '`mycodemap.design.md`',
281
+ '`design validate → design map → design handoff → design verify`'
282
+ ],
283
+ [],
284
+ failures
285
+ );
286
+ }
287
+
288
+ if (aiGuide) {
289
+ validateSnippets(
290
+ aiGuide,
291
+ 'AI_GUIDE.md design contract baseline',
292
+ [
293
+ 'design validate mycodemap.design.md --json',
294
+ 'design map mycodemap.design.md --json',
295
+ 'design handoff mycodemap.design.md --json',
296
+ 'design verify mycodemap.design.md --json',
297
+ '`mycodemap.design.md`',
298
+ 'interface DesignValidateOutput {',
299
+ 'interface DesignMapOutput {',
300
+ 'interface DesignHandoffOutput {',
301
+ 'interface DesignVerificationOutput {'
302
+ ],
303
+ [],
304
+ failures
305
+ );
306
+ }
307
+
308
+ if (claudeGuide) {
309
+ validateSnippets(
310
+ claudeGuide,
311
+ 'CLAUDE.md design retrieval guidance',
312
+ [
313
+ 'node dist/cli/index.js design validate [file] --json',
314
+ 'node dist/cli/index.js design map [file] --json',
315
+ 'node dist/cli/index.js design handoff [file] --json',
316
+ 'node dist/cli/index.js design verify [file] --json'
317
+ ],
318
+ [],
319
+ failures
320
+ );
321
+ }
322
+
323
+ if (commandsGuide) {
324
+ validateSnippets(
325
+ commandsGuide,
326
+ 'docs/ai-guide/COMMANDS.md design contract baseline',
327
+ [
328
+ '## design - 设计契约输入、范围映射与验证',
329
+ 'mycodemap design validate mycodemap.design.md --json',
330
+ 'mycodemap design map mycodemap.design.md --json',
331
+ 'mycodemap design handoff mycodemap.design.md --json',
332
+ 'mycodemap design verify mycodemap.design.md --json',
333
+ '`mycodemap.design.md`',
334
+ '### 必填 sections',
335
+ '### map',
336
+ '### handoff',
337
+ '### verify',
338
+ 'no-candidates'
339
+ ],
340
+ [],
341
+ failures
342
+ );
343
+ }
344
+
345
+ if (outputGuide) {
346
+ validateSnippets(
347
+ outputGuide,
348
+ 'docs/ai-guide/OUTPUT.md design validate schema',
349
+ [
350
+ '## design validate 命令输出结构',
351
+ '## design map 命令输出结构',
352
+ '## design handoff 命令输出结构',
353
+ '## design verify 命令输出结构',
354
+ 'type DesignContractDiagnosticCode =',
355
+ 'interface DesignValidateOutput {',
356
+ 'interface DesignMapOutput {',
357
+ 'interface DesignHandoffOutput {',
358
+ 'interface DesignVerificationOutput {',
359
+ 'unknowns: string[];',
360
+ 'diagnostics: DesignMappingDiagnostic[];',
361
+ 'readyForExecution: boolean;',
362
+ 'approvals: Array<DesignHandoffTraceItem & {',
363
+ 'assumptions: DesignHandoffTraceItem[];',
364
+ 'openQuestions: DesignHandoffTraceItem[];',
365
+ 'type DesignVerificationStatus =',
366
+ 'type DesignDriftKind =',
367
+ 'checklist: Array<{',
368
+ 'drift: Array<{',
369
+ '"code": "handoff-missing"',
370
+ '"code": "missing-section"',
371
+ '"code": "high-risk-scope"',
372
+ '"code": "review-required"'
373
+ ],
374
+ [],
375
+ failures
376
+ );
377
+ }
378
+
379
+ if (patternsGuide) {
380
+ validateSnippets(
381
+ patternsGuide,
382
+ 'docs/ai-guide/PATTERNS.md design/workflow baseline',
383
+ [
384
+ 'node dist/cli/index.js design validate mycodemap.design.md --json',
385
+ 'node dist/cli/index.js design map mycodemap.design.md --json',
386
+ 'node dist/cli/index.js design handoff mycodemap.design.md --json',
387
+ 'node dist/cli/index.js design verify mycodemap.design.md --json',
388
+ '`design validate → design map → design handoff → design verify`',
389
+ '`workflow` 仍只保留 `find` / `read` / `link` / `show` 四阶段'
390
+ ],
391
+ [
392
+ '5. `commit` - 提交验证',
393
+ '6. `ci` - CI 验证'
394
+ ],
395
+ failures
396
+ );
397
+ }
398
+
399
+ if (promptsGuide) {
400
+ validateSnippets(
401
+ promptsGuide,
402
+ 'docs/ai-guide/PROMPTS.md design contract prompt',
403
+ [
404
+ 'cp docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md mycodemap.design.md',
405
+ 'node dist/cli/index.js design validate mycodemap.design.md --json'
406
+ ],
407
+ [],
408
+ failures
409
+ );
410
+ }
411
+
412
+ if (engineeringGuide) {
413
+ validateSnippets(
414
+ engineeringGuide,
415
+ 'docs/rules/engineering-with-codex-openai.md design command guardrail',
416
+ [
417
+ '`node dist/cli/index.js design validate mycodemap.design.md --json`',
418
+ '`node dist/cli/index.js design map mycodemap.design.md --json`',
419
+ '`node dist/cli/index.js design handoff mycodemap.design.md --json`',
420
+ '`node dist/cli/index.js design verify mycodemap.design.md --json`',
421
+ '`candidates` / `unknowns` / `diagnostics`',
422
+ '`readyForExecution` / `approvals` / `assumptions` / `openQuestions`',
423
+ '`checklist` / `drift` / `diagnostics` / `readyForExecution`',
424
+ '`docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md`'
425
+ ],
426
+ [],
427
+ failures
428
+ );
429
+ }
430
+
431
+ if (productSpecsReadme) {
432
+ validateSnippets(
433
+ productSpecsReadme,
434
+ 'docs/product-specs/README.md design template index',
435
+ [
436
+ '`DESIGN_CONTRACT_TEMPLATE.md`'
437
+ ],
438
+ [],
439
+ failures
440
+ );
441
+ }
442
+
443
+ if (validationRule) {
444
+ validateSnippets(
445
+ validationRule,
446
+ 'docs/rules/validation.md design verification baseline',
447
+ [
448
+ '`design validate` / `design map` / `design handoff` / `design verify`',
449
+ '`design validate → design map → design handoff → design verify`',
450
+ 'design verify mycodemap.design.md --json',
451
+ 'review-needed 与 blocker 退出语义'
452
+ ],
453
+ [],
454
+ failures
455
+ );
456
+ }
457
+
458
+ if (designTemplate) {
459
+ validateSnippets(
460
+ designTemplate,
461
+ 'docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md',
462
+ [
463
+ '保存为 `mycodemap.design.md`',
464
+ '## Goal',
465
+ '## Constraints',
466
+ '## Acceptance Criteria',
467
+ '## Non-Goals'
468
+ ],
469
+ [],
470
+ failures
471
+ );
472
+ }
473
+ }
474
+
475
+ function validatePositioningBaselineDocs(rootDir, failures) {
476
+ const readme = readText(rootDir, 'README.md', failures);
477
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
478
+ const aiGuideIndex = readText(rootDir, 'docs/ai-guide/README.md', failures);
479
+ const outputGuide = readText(rootDir, 'docs/ai-guide/OUTPUT.md', failures);
480
+ const architecture = readText(rootDir, 'ARCHITECTURE.md', failures);
481
+
482
+ if (readme) {
483
+ const requiredReadmeSnippets = [
484
+ 'AI-first 代码地图工具',
485
+ 'AI/Agent 是主要消费者',
486
+ '`server`、`watch`、`report`、`logs` 已从 public CLI 移除,并在调用时给出迁移提示。'
487
+ ];
488
+
489
+ for (const snippet of requiredReadmeSnippets) {
490
+ expectIncludes(readme, snippet, 'README.md positioning baseline', failures);
491
+ }
492
+
493
+ expectNotIncludes(
494
+ readme,
495
+ '当前公共 CLI 仍包含 `workflow`、`ship`、`server`、`watch`、`report`、`logs` 等过渡能力',
496
+ 'README.md positioning baseline',
497
+ failures
498
+ );
499
+ }
500
+
501
+ if (aiGuide) {
502
+ const requiredAiGuideSnippets = [
503
+ 'CodeMap 是一个 AI-first 代码地图工具',
504
+ '当前 CLI 过渡现实',
505
+ '`Server Layer` 是内部架构层,不等于公共 `mycodemap server` 命令',
506
+ '后者已从 public CLI 移除'
507
+ ];
508
+
509
+ for (const snippet of requiredAiGuideSnippets) {
510
+ expectIncludes(aiGuide, snippet, 'AI_GUIDE.md positioning baseline', failures);
511
+ }
512
+ }
513
+
514
+ if (aiGuideIndex) {
515
+ const requiredIndexSnippets = [
516
+ 'AI-first 代码地图工具',
517
+ 'AI/Agent 是主要消费者',
518
+ '`server`、`watch`、`report`、`logs` 已从 public CLI 移除'
519
+ ];
520
+
521
+ for (const snippet of requiredIndexSnippets) {
522
+ expectIncludes(aiGuideIndex, snippet, 'docs/ai-guide/README.md positioning baseline', failures);
523
+ }
524
+ }
525
+
526
+ if (outputGuide) {
527
+ const requiredOutputSnippets = [
528
+ '目标态',
529
+ '当前 CLI 现实',
530
+ '机器可读优先'
531
+ ];
532
+
533
+ for (const snippet of requiredOutputSnippets) {
534
+ expectIncludes(outputGuide, snippet, 'docs/ai-guide/OUTPUT.md contract baseline', failures);
535
+ }
536
+ }
104
537
 
105
- for (const example of outdatedReadmeExamples) {
106
- expectNotIncludes(readme, example, 'README.md analyze examples', failures);
538
+ if (architecture) {
539
+ expectIncludes(
540
+ architecture,
541
+ '`Server Layer` 是内部架构层,不等于公共 `mycodemap server` 命令',
542
+ 'ARCHITECTURE.md naming boundary',
543
+ failures
544
+ );
545
+ }
546
+ }
547
+
548
+ function validateCliSurfaceDocs(rootDir, failures) {
549
+ const readme = readText(rootDir, 'README.md', failures);
550
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
551
+ const aiGuideIndex = readText(rootDir, 'docs/ai-guide/README.md', failures);
552
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
553
+ const setupGuide = readText(rootDir, 'docs/SETUP_GUIDE.md', failures);
554
+ const assistantGuide = readText(rootDir, 'docs/AI_ASSISTANT_SETUP.md', failures);
555
+ const quickstart = readText(rootDir, 'docs/ai-guide/QUICKSTART.md', failures);
556
+ const integration = readText(rootDir, 'docs/ai-guide/INTEGRATION.md', failures);
557
+
558
+ if (readme) {
559
+ expectIncludes(readme, '### 已移除的公共 CLI 命令', 'README.md cli surface', failures);
560
+
561
+ const outdatedReadmeSnippets = [
562
+ '### `mycodemap watch`',
563
+ '### `mycodemap report`(当前过渡能力)',
564
+ '### `mycodemap logs`(当前过渡能力)',
565
+ '### `mycodemap server`(当前过渡能力,且不等于 Server Layer)',
566
+ ];
567
+
568
+ for (const snippet of outdatedReadmeSnippets) {
569
+ expectNotIncludes(readme, snippet, 'README.md cli surface', failures);
570
+ }
571
+ }
572
+
573
+ if (aiGuide) {
574
+ expectNotIncludes(aiGuide, '后者当前仍公开', 'AI_GUIDE.md cli surface', failures);
575
+ }
576
+
577
+ if (aiGuideIndex) {
578
+ expectNotIncludes(
579
+ aiGuideIndex,
580
+ '`workflow`、`server`、`watch`、`report`、`logs`、`ship` 仍是当前公开的过渡能力',
581
+ 'docs/ai-guide/README.md cli surface',
582
+ failures
583
+ );
584
+ }
585
+
586
+ if (commandsGuide) {
587
+ expectIncludes(commandsGuide, '## 已移除的公共命令', 'docs/ai-guide/COMMANDS.md cli surface', failures);
588
+
589
+ const outdatedCommandSnippets = [
590
+ '## server - HTTP 服务器(当前过渡能力)',
591
+ '### watch - 监听模式',
592
+ '### report - 生成报告',
593
+ '### logs - 日志管理',
594
+ ];
595
+
596
+ for (const snippet of outdatedCommandSnippets) {
597
+ expectNotIncludes(commandsGuide, snippet, 'docs/ai-guide/COMMANDS.md cli surface', failures);
598
+ }
599
+ }
600
+
601
+ if (setupGuide) {
602
+ expectIncludes(setupGuide, '### 已移除的公共 CLI 命令', 'docs/SETUP_GUIDE.md cli surface', failures);
603
+ expectNotIncludes(setupGuide, '### 监听模式', 'docs/SETUP_GUIDE.md cli surface', failures);
604
+ expectNotIncludes(setupGuide, 'mycodemap watch', 'docs/SETUP_GUIDE.md cli surface', failures);
605
+ }
606
+
607
+ if (assistantGuide) {
608
+ expectIncludes(
609
+ assistantGuide,
610
+ '若文档或提示词仍把 `server`、`watch`、`report`、`logs` 当成当前 public CLI',
611
+ 'docs/AI_ASSISTANT_SETUP.md cli surface',
612
+ failures
613
+ );
614
+ }
615
+
616
+ if (quickstart) {
617
+ expectIncludes(
618
+ quickstart,
619
+ '公共 `mycodemap server` 命令已从 public CLI 移除',
620
+ 'docs/ai-guide/QUICKSTART.md cli surface',
621
+ failures
622
+ );
623
+ expectNotIncludes(
624
+ quickstart,
625
+ '公共 `mycodemap server` 命令仍存在',
626
+ 'docs/ai-guide/QUICKSTART.md cli surface',
627
+ failures
628
+ );
629
+ }
630
+
631
+ if (integration) {
632
+ expectNotIncludes(integration, 'mycodemap watch', 'docs/ai-guide/INTEGRATION.md cli surface', failures);
633
+ }
634
+ }
635
+
636
+ function validateConfigDocs(rootDir, failures) {
637
+ const readme = readText(rootDir, 'README.md', failures);
638
+ const setupGuide = readText(rootDir, 'docs/SETUP_GUIDE.md', failures);
639
+ const assistantGuide = readText(rootDir, 'docs/AI_ASSISTANT_SETUP.md', failures);
640
+
641
+ if (readme) {
642
+ validateSnippets(
643
+ readme,
644
+ 'README.md config contract',
645
+ [
646
+ '执行后会在项目根目录生成 `mycodemap.config.json` 配置文件。',
647
+ '通过 `mycodemap init` 生成的 `mycodemap.config.json` 配置文件支持以下选项:',
648
+ '"$schema": "https://mycodemap.dev/schema/config.json"',
649
+ '"mode": "hybrid"',
650
+ '"plugins": {',
651
+ '| `plugins.builtInPlugins` | `boolean` | 是否启用内置插件 | `true` |'
652
+ ],
653
+ [
654
+ '执行后会在项目根目录生成 `codemap.config.json` 配置文件。',
655
+ '通过 `codemap init` 生成的 `codemap.config.json` 配置文件支持以下选项:',
656
+ '"$schema": "https://codemap.dev/schema.json"',
657
+ '"mode": "fast"'
658
+ ],
659
+ failures
660
+ );
661
+ }
662
+
663
+ if (setupGuide) {
664
+ validateSnippets(
665
+ setupGuide,
666
+ 'docs/SETUP_GUIDE.md config contract',
667
+ [
668
+ '生成的配置文件 `mycodemap.config.json`:',
669
+ '"include": ["src/**/*.ts"]',
670
+ '"watch": false',
671
+ '"plugins": {',
672
+ '| `plugins.debug` | boolean | `false` | 是否输出插件调试日志 |'
673
+ ],
674
+ [
675
+ '"include": ["src/**/*"]'
676
+ ],
677
+ failures
678
+ );
679
+ }
680
+
681
+ if (assistantGuide) {
682
+ validateSnippets(
683
+ assistantGuide,
684
+ 'docs/AI_ASSISTANT_SETUP.md config contract',
685
+ [
686
+ '- `mycodemap.config.json` - CodeMap 配置文件'
687
+ ],
688
+ [
689
+ '- `codemap.config.json` - CodeMap 配置文件'
690
+ ],
691
+ failures
692
+ );
693
+ }
694
+ }
695
+
696
+ function validatePluginRuntimeDocs(rootDir, failures) {
697
+ const readme = readText(rootDir, 'README.md', failures);
698
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
699
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
700
+ const outputGuide = readText(rootDir, 'docs/ai-guide/OUTPUT.md', failures);
701
+ const quickstartGuide = readText(rootDir, 'docs/ai-guide/QUICKSTART.md', failures);
702
+
703
+ if (readme) {
704
+ validateSnippets(
705
+ readme,
706
+ 'README.md plugin runtime contract',
707
+ [
708
+ '只有**显式声明了** `plugins` 段时,`generate` 才会启用插件 runtime;没有该段的旧项目保持原有行为。',
709
+ '`AI_MAP.md` 的 `Plugin Summary` 与 `codemap.json` 的 `pluginReport`',
710
+ '已加载插件、插件生成文件数量与插件诊断摘要'
711
+ ],
712
+ [],
713
+ failures
714
+ );
715
+ }
716
+
717
+ if (aiGuide) {
718
+ validateSnippets(
719
+ aiGuide,
720
+ 'AI_GUIDE.md plugin runtime contract',
721
+ [
722
+ '`codemap.json.pluginReport`',
723
+ '`pluginReport.diagnostics[]` 用统一结构暴露 `load / initialize / analyze / generate` 四个阶段'
724
+ ],
725
+ [],
726
+ failures
727
+ );
728
+ }
729
+
730
+ if (commandsGuide) {
731
+ validateSnippets(
732
+ commandsGuide,
733
+ 'docs/ai-guide/COMMANDS.md plugin runtime contract',
734
+ [
735
+ '`generate` 不提供独立 `--plugin` flags;插件通过 `mycodemap.config.json` 的 `plugins` 段声明。',
736
+ '`AI_MAP.md` 会增加 `Plugin Summary`,`codemap.json` 会增加 `pluginReport`'
737
+ ],
738
+ [],
739
+ failures
740
+ );
741
+ }
742
+
743
+ if (outputGuide) {
744
+ validateSnippets(
745
+ outputGuide,
746
+ 'docs/ai-guide/OUTPUT.md plugin runtime contract',
747
+ [
748
+ 'interface PluginExecutionReport {',
749
+ 'pluginReport?: PluginExecutionReport;',
750
+ 'stage: "load" | "initialize" | "analyze" | "generate";'
751
+ ],
752
+ [],
753
+ failures
754
+ );
755
+ }
756
+
757
+ if (quickstartGuide) {
758
+ validateSnippets(
759
+ quickstartGuide,
760
+ 'docs/ai-guide/QUICKSTART.md plugin runtime contract',
761
+ [
762
+ '若显式配置了 plugins,也要看 Plugin Summary',
763
+ '解析 `.mycodemap/codemap.json` 的 `pluginReport`'
764
+ ],
765
+ [],
766
+ failures
767
+ );
768
+ }
769
+ }
770
+
771
+ function validateGraphStorageDocs(rootDir, failures) {
772
+ const readme = readText(rootDir, 'README.md', failures);
773
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
774
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
775
+ const quickstartGuide = readText(rootDir, 'docs/ai-guide/QUICKSTART.md', failures);
776
+ const setupGuide = readText(rootDir, 'docs/SETUP_GUIDE.md', failures);
777
+ const validationRule = readText(rootDir, 'docs/rules/validation.md', failures);
778
+ const schema = readText(rootDir, 'mycodemap.config.schema.json', failures);
779
+
780
+ if (readme) {
781
+ validateSnippets(
782
+ readme,
783
+ 'README.md graph storage contract',
784
+ [
785
+ '"storage": {',
786
+ '| `storage.type` | `"filesystem" \\| "kuzudb" \\| "memory" \\| "auto"` | 图存储后端类型 | `"filesystem"` |',
787
+ '`neo4j` 已不再是正式支持的 backend;旧配置会返回显式迁移错误,不会静默 fallback 到 `filesystem`。',
788
+ '图存储后端生产化不等于重新开放公共 HTTP API 产品面;`Server Layer` 仍是内部架构层。'
789
+ ],
790
+ [],
791
+ failures
792
+ );
793
+ }
794
+
795
+ if (aiGuide) {
796
+ validateSnippets(
797
+ aiGuide,
798
+ 'AI_GUIDE.md graph storage contract',
799
+ [
800
+ '| "需要切换/排查图存储后端" | 编辑 `mycodemap.config.json.storage` → 运行 `generate` / `export` |',
801
+ '`generate` 会写入配置的图存储后端;`export` 与内部 `Server Layer` handler 会读取同一份后端数据。',
802
+ '`neo4j` 已不再是正式支持的 backend;旧配置会暴露显式迁移错误,不会静默 fallback。'
803
+ ],
804
+ [],
805
+ failures
806
+ );
807
+ }
808
+
809
+ if (commandsGuide) {
810
+ validateSnippets(
811
+ commandsGuide,
812
+ 'docs/ai-guide/COMMANDS.md graph storage contract',
813
+ [
814
+ '`generate` 会读取 `mycodemap.config.json.storage`,并把 CodeGraph 写入所选后端。',
815
+ '`export json|graphml|dot` 会从 `mycodemap.config.json.storage` 指定的后端读取 CodeGraph。',
816
+ '图存储后端收口不等于重新开放公共 `mycodemap server` 产品面;`Server Layer` 仍是内部层。'
817
+ ],
818
+ [],
819
+ failures
820
+ );
821
+ }
822
+
823
+ if (quickstartGuide) {
824
+ validateSnippets(
825
+ quickstartGuide,
826
+ 'docs/ai-guide/QUICKSTART.md graph storage contract',
827
+ [
828
+ 'stdout 还会显示当前写入的 `MVP3 Storage (...)`',
829
+ '| "需要切换/排查图存储后端" | 编辑 `mycodemap.config.json.storage` 后运行 `generate` | `export json` 验证是否能从同一 backend 读回 | 文本 + 机器可读 |'
830
+ ],
831
+ [],
832
+ failures
833
+ );
834
+ }
835
+
836
+ if (setupGuide) {
837
+ validateSnippets(
838
+ setupGuide,
839
+ 'docs/SETUP_GUIDE.md graph storage contract',
840
+ [
841
+ '"storage": {',
842
+ '| `storage.type` | string | `"filesystem"` | 图存储后端类型:`filesystem` / `kuzudb` / `memory` / `auto` |',
843
+ '旧的 `neo4j` 配置已不再受支持,会返回显式迁移错误,不会静默 fallback 到 `filesystem`。'
844
+ ],
845
+ [],
846
+ failures
847
+ );
848
+ }
849
+
850
+ if (validationRule) {
851
+ validateSnippets(
852
+ validationRule,
853
+ 'docs/rules/validation.md graph storage guardrail',
854
+ [
855
+ '若改动涉及 `mycodemap.config.json.storage` 或图数据库适配器',
856
+ 'schema / README / AI 文档没同步',
857
+ '旧的 `neo4j` 配置已经不受支持,但文档还把它写成正式 backend'
858
+ ],
859
+ [],
860
+ failures
861
+ );
862
+ }
863
+
864
+ if (schema) {
865
+ validateSnippets(
866
+ schema,
867
+ 'mycodemap.config.schema.json storage contract',
868
+ [
869
+ '"storage"',
870
+ '"enum": ["filesystem", "kuzudb", "memory", "auto"]',
871
+ '"outputPath"',
872
+ '"databasePath"',
873
+ '"autoThresholds"'
874
+ ],
875
+ [],
876
+ failures
877
+ );
107
878
  }
108
879
  }
109
880
 
@@ -133,6 +904,194 @@ function validateTestingDocs(rootDir, failures) {
133
904
  expectIncludes(testingRule, '`vitest.benchmark.config.ts`', 'docs/rules/testing.md', failures);
134
905
  }
135
906
 
907
+ function validateWorkflowAndDiscoveryDocs(rootDir, failures) {
908
+ const readme = readText(rootDir, 'README.md', failures);
909
+ const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
910
+ const commandsGuide = readText(rootDir, 'docs/ai-guide/COMMANDS.md', failures);
911
+ const outputGuide = readText(rootDir, 'docs/ai-guide/OUTPUT.md', failures);
912
+ const engineeringRule = readText(rootDir, 'docs/rules/engineering-with-codex-openai.md', failures);
913
+ const validationRule = readText(rootDir, 'docs/rules/validation.md', failures);
914
+
915
+ if (readme) {
916
+ validateSnippets(
917
+ readme,
918
+ 'README.md workflow/discovery boundary',
919
+ [
920
+ '`workflow` 是公开的 analysis-only 工作流能力,只编排分析阶段:`find → read → link → show`。',
921
+ '共享同一套 `.gitignore` 感知排除规则',
922
+ '"coverage/**"',
923
+ '"**/*.test.ts"',
924
+ '"**/*.spec.ts"',
925
+ '"**/*.d.ts"',
926
+ '`mycodemap ship` 的 CHECK 阶段现在复用 `ci check-working-tree`、`ci check-branch`、`ci check-scripts`'
927
+ ],
928
+ [
929
+ ' "*.test.ts",',
930
+ ' "*.spec.ts",'
931
+ ],
932
+ failures
933
+ );
934
+ }
935
+
936
+ if (aiGuide) {
937
+ validateSnippets(
938
+ aiGuide,
939
+ 'AI_GUIDE.md discovery baseline',
940
+ [
941
+ '| 文件发现契约 | 扫描类命令共享 `.gitignore` 感知排除模块;无 `.gitignore` 时回退到默认 `exclude` |'
942
+ ],
943
+ [],
944
+ failures
945
+ );
946
+ }
947
+
948
+ if (commandsGuide) {
949
+ validateSnippets(
950
+ commandsGuide,
951
+ 'docs/ai-guide/COMMANDS.md workflow/ci boundary',
952
+ [
953
+ '`ship` 的 CHECK 阶段会复用 `ci check-working-tree`、`ci check-branch`、`ci check-scripts`',
954
+ '`ci check-branch --allow` 支持 `*` 通配',
955
+ '`ci check-headers -d` 与 `generate` / `analyze` 共享同一套 `.gitignore` 感知排除规则',
956
+ '`workflow` 只保留 `find → read → link → show` 四个分析阶段'
957
+ ],
958
+ [],
959
+ failures
960
+ );
961
+ }
962
+
963
+ if (outputGuide) {
964
+ validateSnippets(
965
+ outputGuide,
966
+ 'docs/ai-guide/OUTPUT.md discovery contract',
967
+ [
968
+ '| 文件发现 | 扫描类命令共享一个文件发现模块 | 先尊重仓库 `.gitignore`,无 `.gitignore` 时回退到默认 `exclude` |',
969
+ 'type DiscoveryFallbackExclude =',
970
+ '"coverage/**"',
971
+ '"**/*.test.ts"',
972
+ '"**/*.spec.ts"',
973
+ '"**/*.d.ts"',
974
+ 'sharedBy: ["generate", "analyze", "ci check-headers -d"];'
975
+ ],
976
+ [],
977
+ failures
978
+ );
979
+ }
980
+
981
+ if (engineeringRule) {
982
+ validateSnippets(
983
+ engineeringRule,
984
+ 'docs/rules/engineering-with-codex-openai.md workflow/ci boundary',
985
+ [
986
+ '`ci check-branch --allow` 支持 `*` 通配;在 CI / PR 环境中,分支识别会回退到 `GITHUB_HEAD_REF` / `GITHUB_REF_NAME`。',
987
+ '`generate`、`analyze` 与 `ci check-headers -d` 共享 `.gitignore` 感知文件发现模块;没有 `.gitignore` 时回退到统一默认 `exclude`。',
988
+ '`check-working-tree`、`check-branch`、`check-scripts` 作为共享发布前 gate checks,由本地 `ci` 命令提供,`ship` 的 CHECK 阶段直接复用它们。'
989
+ ],
990
+ [
991
+ '然后再通过 `node dist/cli/index.js ci ...` 执行 `check-working-tree`、`check-branch`、`check-scripts`'
992
+ ],
993
+ failures
994
+ );
995
+ }
996
+
997
+ if (validationRule) {
998
+ validateSnippets(
999
+ validationRule,
1000
+ 'docs/rules/validation.md workflow/discovery boundary',
1001
+ [
1002
+ '若改动涉及产品定位、输出契约、共享文件发现规则或 `Server Layer` / `mycodemap server` 边界',
1003
+ '当前 CI Gateway 直接执行 `check-docs-sync`、commit 格式、文件头、risk、output contract;`ship` 的本地 CHECK 阶段复用 `check-working-tree`、`check-branch`、`check-scripts`',
1004
+ '文档声称扫描类命令会尊重 `.gitignore`,但实现仍保留手写跳过规则',
1005
+ '把 `workflow` 重新扩回非分析阶段,却没同步 README / AI 命令文档 / guardrail 脚本'
1006
+ ],
1007
+ [],
1008
+ failures
1009
+ );
1010
+ }
1011
+ }
1012
+
1013
+ function validateProductSpecsDocs(rootDir, failures) {
1014
+ const productSpecsReadme = readText(rootDir, 'docs/product-specs/README.md', failures);
1015
+ const comparison = readText(rootDir, 'docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md', failures);
1016
+ const prd = readText(rootDir, 'docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md', failures);
1017
+ const techPrd = readText(rootDir, 'docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md', failures);
1018
+
1019
+ if (productSpecsReadme) {
1020
+ validateSnippets(
1021
+ productSpecsReadme,
1022
+ 'docs/product-specs/README.md active specs index',
1023
+ [
1024
+ '## 当前有效规格',
1025
+ '`MVP3-ARCHITECTURE-COMPARISON.md`',
1026
+ '`MVP3-ARCHITECTURE-REDESIGN-PRD.md`',
1027
+ '`MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md`'
1028
+ ],
1029
+ [
1030
+ '当前活跃产品规格暂为空'
1031
+ ],
1032
+ failures
1033
+ );
1034
+ }
1035
+
1036
+ if (comparison) {
1037
+ validateSnippets(
1038
+ comparison,
1039
+ 'docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md baseline',
1040
+ [
1041
+ '# MVP3 架构对比:历史设计目标 vs v1.3 已落地基线',
1042
+ '`src/server/` 保留为**内部架构层**;公共 `server` 命令已移除',
1043
+ '`filesystem` / `memory` / `kuzudb` / `auto` 为正式 surface;`neo4j` 已退出正式支持',
1044
+ '当前公开能力仅保留 analysis-only:`find → read → link → show`',
1045
+ 'Java / Rust / C/C++ 等更多 parser 实现 | 接口预留,未作为当前 shipped reality |'
1046
+ ],
1047
+ [
1048
+ '# MVP3 架构对比:Before vs After',
1049
+ 'cli/commands/viz.ts',
1050
+ '支持 14 种语言'
1051
+ ],
1052
+ failures
1053
+ );
1054
+ }
1055
+
1056
+ if (prd) {
1057
+ validateSnippets(
1058
+ prd,
1059
+ 'docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md shipped baseline',
1060
+ [
1061
+ '# CodeMap MVP3 架构重构产品需求文档(PRD,v1.3 同步版)',
1062
+ '公共 CLI 不再暴露 `server`、`watch`、`report`、`logs`',
1063
+ '| `neo4j` | removed | 不再是正式支持 backend;旧配置返回显式迁移错误 |',
1064
+ '`workflow` 是 **analysis-only** 能力,只编排 `find → read → link → show`',
1065
+ '| 公共 HTTP API / `mycodemap server` 产品面 | Deferred |'
1066
+ ],
1067
+ [
1068
+ '支持 14 种语言',
1069
+ 'neo4j | shipped'
1070
+ ],
1071
+ failures
1072
+ );
1073
+ }
1074
+
1075
+ if (techPrd) {
1076
+ validateSnippets(
1077
+ techPrd,
1078
+ 'docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md technical baseline',
1079
+ [
1080
+ '# CodeMap MVP3 架构重构技术需求文档(Tech-PRD,v1.3 同步版)',
1081
+ '`neo4j` 已不再是正式支持 backend。',
1082
+ '`auto` 是稳定配置面',
1083
+ '但“按规模自动切到图数据库”的更强启发式仍是未来候选,而不是当前完成能力',
1084
+ '| analyze / refresh / incremental update 作为公共能力 | 明确返回 `501` unsupported |',
1085
+ '`workflow` 当前是 analysis-only 能力:'
1086
+ ],
1087
+ [
1088
+ 'TypeScriptParser, GoParser, PythonParser, ParserRegistry'
1089
+ ],
1090
+ failures
1091
+ );
1092
+ }
1093
+ }
1094
+
136
1095
  function validateGuardrailDocs(rootDir, failures) {
137
1096
  const readme = readText(rootDir, 'README.md', failures);
138
1097
  const engineeringRule = readText(rootDir, 'docs/rules/engineering-with-codex-openai.md', failures);
@@ -219,8 +1178,16 @@ function validateDocs(rootDir) {
219
1178
  const failures = [];
220
1179
 
221
1180
  validatePackageScripts(rootDir, failures);
1181
+ validatePositioningBaselineDocs(rootDir, failures);
1182
+ validateCliSurfaceDocs(rootDir, failures);
1183
+ validateConfigDocs(rootDir, failures);
1184
+ validatePluginRuntimeDocs(rootDir, failures);
1185
+ validateGraphStorageDocs(rootDir, failures);
222
1186
  validateAnalyzeDocs(rootDir, failures);
1187
+ validateDesignContractDocs(rootDir, failures);
223
1188
  validateTestingDocs(rootDir, failures);
1189
+ validateWorkflowAndDiscoveryDocs(rootDir, failures);
1190
+ validateProductSpecsDocs(rootDir, failures);
224
1191
  validateGuardrailDocs(rootDir, failures);
225
1192
  validateAssistantDocs(rootDir, failures);
226
1193