@mycodemap/mycodemap 0.4.2 → 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.
- package/CHANGELOG.md +92 -3
- package/README.md +117 -46
- package/dist/ai/claude.d.ts +38 -0
- package/dist/ai/claude.d.ts.map +1 -0
- package/dist/ai/claude.js +169 -0
- package/dist/ai/claude.js.map +1 -0
- package/dist/ai/codex.d.ts +38 -0
- package/dist/ai/codex.d.ts.map +1 -0
- package/dist/ai/codex.js +169 -0
- package/dist/ai/codex.js.map +1 -0
- package/dist/ai/factory.d.ts +48 -0
- package/dist/ai/factory.d.ts.map +1 -0
- package/dist/ai/factory.js +95 -0
- package/dist/ai/factory.js.map +1 -0
- package/dist/ai/index.d.ts +12 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +29 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/provider.d.ts +70 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +31 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/subagent-caller.d.ts +90 -0
- package/dist/ai/subagent-caller.d.ts.map +1 -0
- package/dist/ai/subagent-caller.js +280 -0
- package/dist/ai/subagent-caller.js.map +1 -0
- package/dist/ai/types.d.ts +70 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +5 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/commands/design.d.ts +47 -0
- package/dist/cli/commands/design.d.ts.map +1 -0
- package/dist/cli/commands/design.js +268 -0
- package/dist/cli/commands/design.js.map +1 -0
- package/dist/cli/commands/server.d.ts +9 -0
- package/dist/cli/commands/server.d.ts.map +1 -0
- package/dist/cli/commands/server.js +65 -0
- package/dist/cli/commands/server.js.map +1 -0
- package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/ship/pipeline.js +8 -1
- package/dist/cli/commands/ship/pipeline.js.map +1 -1
- package/dist/cli/commands/ship/publisher.d.ts +9 -1
- package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
- package/dist/cli/commands/ship/publisher.js +149 -6
- package/dist/cli/commands/ship/publisher.js.map +1 -1
- package/dist/cli/design-contract-loader.d.ts +15 -0
- package/dist/cli/design-contract-loader.d.ts.map +1 -0
- package/dist/cli/design-contract-loader.js +175 -0
- package/dist/cli/design-contract-loader.js.map +1 -0
- package/dist/cli/design-contract-schema.d.ts +11 -0
- package/dist/cli/design-contract-schema.d.ts.map +1 -0
- package/dist/cli/design-contract-schema.js +75 -0
- package/dist/cli/design-contract-schema.js.map +1 -0
- package/dist/cli/design-handoff-builder.d.ts +15 -0
- package/dist/cli/design-handoff-builder.d.ts.map +1 -0
- package/dist/cli/design-handoff-builder.js +345 -0
- package/dist/cli/design-handoff-builder.js.map +1 -0
- package/dist/cli/design-scope-resolver.d.ts +8 -0
- package/dist/cli/design-scope-resolver.d.ts.map +1 -0
- package/dist/cli/design-scope-resolver.js +712 -0
- package/dist/cli/design-scope-resolver.js.map +1 -0
- package/dist/cli/design-verification-builder.d.ts +8 -0
- package/dist/cli/design-verification-builder.d.ts.map +1 -0
- package/dist/cli/design-verification-builder.js +369 -0
- package/dist/cli/design-verification-builder.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-new/commands/server.d.ts +13 -0
- package/dist/cli-new/commands/server.d.ts.map +1 -0
- package/dist/cli-new/commands/server.js +90 -0
- package/dist/cli-new/commands/server.js.map +1 -0
- package/dist/generator/ai-overview.d.ts +51 -0
- package/dist/generator/ai-overview.d.ts.map +1 -0
- package/dist/generator/ai-overview.js +160 -0
- package/dist/generator/ai-overview.js.map +1 -0
- package/dist/infrastructure/storage/StorageFactory.d.ts +12 -5
- package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
- package/dist/infrastructure/storage/StorageFactory.js +55 -14
- package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
- package/dist/interface/types/design-contract.d.ts +68 -0
- package/dist/interface/types/design-contract.d.ts.map +1 -0
- package/dist/interface/types/design-contract.js +7 -0
- package/dist/interface/types/design-contract.js.map +1 -0
- package/dist/interface/types/design-handoff.d.ts +68 -0
- package/dist/interface/types/design-handoff.d.ts.map +1 -0
- package/dist/interface/types/design-handoff.js +4 -0
- package/dist/interface/types/design-handoff.js.map +1 -0
- package/dist/interface/types/design-mapping.d.ts +51 -0
- package/dist/interface/types/design-mapping.d.ts.map +1 -0
- package/dist/interface/types/design-mapping.js +4 -0
- package/dist/interface/types/design-mapping.js.map +1 -0
- package/dist/interface/types/design-verification.d.ts +49 -0
- package/dist/interface/types/design-verification.d.ts.map +1 -0
- package/dist/interface/types/design-verification.js +4 -0
- package/dist/interface/types/design-verification.js.map +1 -0
- package/dist/interface/types/index.d.ts +4 -0
- package/dist/interface/types/index.d.ts.map +1 -1
- package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
- package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
- package/dist/orchestrator/ai-feed-generator.js +377 -0
- package/dist/orchestrator/ai-feed-generator.js.map +1 -0
- package/docs/ai-guide/COMMANDS.md +73 -0
- package/docs/ai-guide/OUTPUT.md +415 -0
- package/docs/ai-guide/PATTERNS.md +14 -4
- package/docs/ai-guide/PROMPTS.md +12 -6
- package/docs/archive/test-report-symbol-search.md +384 -0
- package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
- package/docs/archive/test_report_scenario5.md +615 -0
- package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
- package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +79 -0
- package/docs/product-specs/README.md +2 -1
- package/docs/rules/engineering-with-codex-openai.md +6 -2
- package/docs/rules/validation.md +9 -6
- package/package.json +1 -1
- package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
- package/scripts/validate-docs.js +247 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const HELP_TEXT = `
|
|
4
|
+
ArcadeDB HTTP smoke test
|
|
5
|
+
|
|
6
|
+
Required environment variables:
|
|
7
|
+
ARCADEDB_HTTP_URL Base URL, for example http://localhost:2480
|
|
8
|
+
ARCADEDB_DATABASE Database name used in /api/v1/command/{database}
|
|
9
|
+
ARCADEDB_USERNAME Basic auth username
|
|
10
|
+
ARCADEDB_PASSWORD Basic auth password
|
|
11
|
+
|
|
12
|
+
Optional:
|
|
13
|
+
ARCADEDB_CYPHER Cypher query to run
|
|
14
|
+
|
|
15
|
+
Request:
|
|
16
|
+
POST {ARCADEDB_HTTP_URL}/api/v1/command/{database}
|
|
17
|
+
Body: {"language":"cypher","command":"MATCH (n) RETURN count(n) AS total LIMIT 1"}
|
|
18
|
+
Auth: Authorization: Basic ...
|
|
19
|
+
|
|
20
|
+
This script is intentionally isolated from shipped runtime code.
|
|
21
|
+
Use --help for offline validation when no ArcadeDB server is available.
|
|
22
|
+
`.trim();
|
|
23
|
+
|
|
24
|
+
function printHelp() {
|
|
25
|
+
console.log(HELP_TEXT);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getRequiredEnv(name) {
|
|
29
|
+
const value = process.env[name];
|
|
30
|
+
if (!value || value.trim().length === 0) {
|
|
31
|
+
throw new Error(`Missing required environment variable: ${name}`);
|
|
32
|
+
}
|
|
33
|
+
return value.trim();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function main() {
|
|
37
|
+
if (process.argv.includes("--help")) {
|
|
38
|
+
printHelp();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
let baseUrl;
|
|
43
|
+
let database;
|
|
44
|
+
let username;
|
|
45
|
+
let password;
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
baseUrl = getRequiredEnv("ARCADEDB_HTTP_URL").replace(/\/+$/, "");
|
|
49
|
+
database = getRequiredEnv("ARCADEDB_DATABASE");
|
|
50
|
+
username = getRequiredEnv("ARCADEDB_USERNAME");
|
|
51
|
+
password = getRequiredEnv("ARCADEDB_PASSWORD");
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error(String(error instanceof Error ? error.message : error));
|
|
54
|
+
console.error("Run with --help to see the required contract.");
|
|
55
|
+
process.exitCode = 1;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const command = (process.env.ARCADEDB_CYPHER || "MATCH (n) RETURN count(n) AS total LIMIT 1").trim();
|
|
60
|
+
const endpoint = `${baseUrl}/api/v1/command/${database}`;
|
|
61
|
+
const authHeader = Buffer.from(`${username}:${password}`, "utf8").toString("base64");
|
|
62
|
+
|
|
63
|
+
const response = await fetch(endpoint, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers: {
|
|
66
|
+
"content-type": "application/json",
|
|
67
|
+
authorization: `Basic ${authHeader}`,
|
|
68
|
+
},
|
|
69
|
+
body: JSON.stringify({
|
|
70
|
+
language: "cypher",
|
|
71
|
+
command,
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const text = await response.text();
|
|
76
|
+
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
console.error(`ArcadeDB HTTP smoke failed: ${response.status} ${response.statusText}`);
|
|
79
|
+
console.error(text);
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
console.log("ArcadeDB HTTP smoke succeeded");
|
|
85
|
+
if (text.trim().length > 0) {
|
|
86
|
+
console.log(text);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
await main();
|
package/scripts/validate-docs.js
CHANGED
|
@@ -226,6 +226,252 @@ function validateAnalyzeDocs(rootDir, failures) {
|
|
|
226
226
|
failures.push(...collectAnalyzeDocSyncFailures(rootDir));
|
|
227
227
|
}
|
|
228
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);
|
|
246
|
+
}
|
|
247
|
+
|
|
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
|
+
|
|
229
475
|
function validatePositioningBaselineDocs(rootDir, failures) {
|
|
230
476
|
const readme = readText(rootDir, 'README.md', failures);
|
|
231
477
|
const aiGuide = readText(rootDir, 'AI_GUIDE.md', failures);
|
|
@@ -938,6 +1184,7 @@ function validateDocs(rootDir) {
|
|
|
938
1184
|
validatePluginRuntimeDocs(rootDir, failures);
|
|
939
1185
|
validateGraphStorageDocs(rootDir, failures);
|
|
940
1186
|
validateAnalyzeDocs(rootDir, failures);
|
|
1187
|
+
validateDesignContractDocs(rootDir, failures);
|
|
941
1188
|
validateTestingDocs(rootDir, failures);
|
|
942
1189
|
validateWorkflowAndDiscoveryDocs(rootDir, failures);
|
|
943
1190
|
validateProductSpecsDocs(rootDir, failures);
|