@miniidealab/openlogos 0.9.28 → 0.9.30

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 (49) hide show
  1. package/claude-plugin-template/.claude-plugin/plugin.json +1 -1
  2. package/dist/commands/adopt.d.ts +5 -0
  3. package/dist/commands/adopt.d.ts.map +1 -0
  4. package/dist/commands/adopt.js +124 -0
  5. package/dist/commands/adopt.js.map +1 -0
  6. package/dist/commands/init.d.ts +11 -0
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +56 -2
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/launch.d.ts.map +1 -1
  11. package/dist/commands/launch.js +28 -0
  12. package/dist/commands/launch.js.map +1 -1
  13. package/dist/commands/next.d.ts +1 -0
  14. package/dist/commands/next.d.ts.map +1 -1
  15. package/dist/commands/next.js +51 -9
  16. package/dist/commands/next.js.map +1 -1
  17. package/dist/commands/status.d.ts +3 -0
  18. package/dist/commands/status.d.ts.map +1 -1
  19. package/dist/commands/status.js +36 -3
  20. package/dist/commands/status.js.map +1 -1
  21. package/dist/commands/sync.d.ts.map +1 -1
  22. package/dist/commands/sync.js +6 -1
  23. package/dist/commands/sync.js.map +1 -1
  24. package/dist/commands/verify.d.ts +27 -1
  25. package/dist/commands/verify.d.ts.map +1 -1
  26. package/dist/commands/verify.js +208 -53
  27. package/dist/commands/verify.js.map +1 -1
  28. package/dist/i18n.d.ts.map +1 -1
  29. package/dist/i18n.js +20 -0
  30. package/dist/i18n.js.map +1 -1
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +24 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/project-yaml.d.ts +1 -0
  36. package/dist/lib/project-yaml.d.ts.map +1 -1
  37. package/dist/lib/project-yaml.js +3 -0
  38. package/dist/lib/project-yaml.js.map +1 -1
  39. package/dist/lib/verify-config.d.ts +32 -0
  40. package/dist/lib/verify-config.d.ts.map +1 -0
  41. package/dist/lib/verify-config.js +104 -0
  42. package/dist/lib/verify-config.js.map +1 -0
  43. package/package.json +1 -1
  44. package/skills/code-implementor/SKILL.md +3 -2
  45. package/skills/project-init/SKILL.md +22 -0
  46. package/spec/cli-json-output.md +47 -0
  47. package/spec/logos.config.schema.json +36 -2
  48. package/spec/test-results.md +38 -4
  49. package/spec/workflow.md +11 -3
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { init } from './commands/init.js';
3
+ import { adopt } from './commands/adopt.js';
3
4
  import { sync } from './commands/sync.js';
4
5
  import { status } from './commands/status.js';
5
6
  import { next } from './commands/next.js';
@@ -25,6 +26,10 @@ Commands:
25
26
  --locale <en|zh> Set language (skip prompt)
26
27
  --ai-tool <claude-code|opencode|codex|cursor|other|all> Set AI tool (skip prompt)
27
28
  --aitool <claude-code|opencode|codex|cursor|other|all> Alias for --ai-tool
29
+ adopt [name] Adopt an existing project into OpenLogos
30
+ --locale <en|zh> Set language (skip prompt)
31
+ --ai-tool <claude-code|opencode|codex|cursor|other|all> Set AI tool (skip prompt)
32
+ --aitool <claude-code|opencode|codex|cursor|other|all> Alias for --ai-tool
28
33
  sync Regenerate AI instruction files (AGENTS.md, CLAUDE.md)
29
34
  status Show current project phase and suggest next steps
30
35
  --module <id> Filter to a specific module
@@ -50,6 +55,7 @@ Options:
50
55
 
51
56
  Examples:
52
57
  openlogos init my-saas-project
58
+ openlogos adopt
53
59
  openlogos sync
54
60
  openlogos status
55
61
  openlogos status --format json
@@ -94,6 +100,24 @@ async function main() {
94
100
  await init(initName, Object.keys(initOpts).length > 0 ? initOpts : undefined);
95
101
  break;
96
102
  }
103
+ case 'adopt': {
104
+ const adoptArgs = args.slice(1);
105
+ let adoptName;
106
+ const adoptOpts = {};
107
+ for (let i = 0; i < adoptArgs.length; i++) {
108
+ if (adoptArgs[i] === '--locale' && adoptArgs[i + 1]) {
109
+ adoptOpts.locale = adoptArgs[++i];
110
+ }
111
+ else if ((adoptArgs[i] === '--ai-tool' || adoptArgs[i] === '--aitool') && adoptArgs[i + 1]) {
112
+ adoptOpts.aiTool = adoptArgs[++i];
113
+ }
114
+ else if (!adoptArgs[i].startsWith('--')) {
115
+ adoptName = adoptArgs[i];
116
+ }
117
+ }
118
+ await adopt(adoptName, Object.keys(adoptOpts).length > 0 ? adoptOpts : undefined);
119
+ break;
120
+ }
97
121
  case 'sync':
98
122
  sync();
99
123
  break;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export interface ProjectYamlModule {
7
7
  id: string;
8
8
  name: string;
9
9
  lifecycle?: string;
10
+ bootstrap?: string;
10
11
  skip_phases?: string[];
11
12
  deployment_required?: boolean;
12
13
  smoke_required?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"project-yaml.d.ts","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAgOD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAiCnE"}
1
+ {"version":3,"file":"project-yaml.d.ts","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAmOD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAiCnE"}
@@ -55,6 +55,9 @@ function normalizeModule(raw) {
55
55
  if (typeof record.lifecycle === 'string') {
56
56
  module.lifecycle = record.lifecycle;
57
57
  }
58
+ if (typeof record.bootstrap === 'string') {
59
+ module.bootstrap = record.bootstrap;
60
+ }
58
61
  const skipPhases = asStringArray(record.skip_phases);
59
62
  if (skipPhases) {
60
63
  module.skip_phases = skipPhases;
@@ -1 +1 @@
1
- {"version":3,"file":"project-yaml.js","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-yaml.js","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export declare const DEFAULT_VERIFY_RESULT_PATH = "logos/resources/verify/test-results.jsonl";
2
+ export declare const DEFAULT_VERIFY_MERGE_STRATEGY = "last-write-wins";
3
+ export interface VerifyConfig {
4
+ result_path?: string;
5
+ pre_run_command?: string;
6
+ test_command?: string;
7
+ regression_command?: string;
8
+ incremental_command?: string;
9
+ regression_result_path?: string;
10
+ incremental_result_path?: string;
11
+ merge_results?: string;
12
+ }
13
+ export interface NormalizedVerifyConfig {
14
+ resultPath: string;
15
+ preRunCommand?: string;
16
+ regressionCommand?: string;
17
+ incrementalCommand?: string;
18
+ regressionResultPath?: string;
19
+ incrementalResultPath?: string;
20
+ mergeStrategy: 'last-write-wins';
21
+ }
22
+ export interface VerifyPreRunBackfillResult {
23
+ status: 'exists' | 'added' | 'todo';
24
+ command?: string;
25
+ mutated: boolean;
26
+ }
27
+ export declare function inferVerifyPreRunCommand(root: string): string | null;
28
+ export declare function normalizeVerifyConfig(rawVerify: unknown): NormalizedVerifyConfig;
29
+ export declare function readVerifyConfig(root: string): NormalizedVerifyConfig;
30
+ export declare function hasVerifyPreRunConfig(rawVerify: unknown): boolean;
31
+ export declare function backfillVerifyPreRunConfig(root: string, config: Record<string, unknown>): VerifyPreRunBackfillResult;
32
+ //# sourceMappingURL=verify-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-config.d.ts","sourceRoot":"","sources":["../../src/lib/verify-config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,0BAA0B,8CAA8C,CAAC;AACtF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAsCD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBpE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,sBAAsB,CAgBhF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAGrE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAGjE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,0BAA0B,CAkBpH"}
@@ -0,0 +1,104 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export const DEFAULT_VERIFY_RESULT_PATH = 'logos/resources/verify/test-results.jsonl';
4
+ export const DEFAULT_VERIFY_MERGE_STRATEGY = 'last-write-wins';
5
+ function readJsonFile(path) {
6
+ try {
7
+ return JSON.parse(readFileSync(path, 'utf-8'));
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ }
13
+ function asRecord(value) {
14
+ if (!value || typeof value !== 'object' || Array.isArray(value))
15
+ return null;
16
+ return value;
17
+ }
18
+ function hasFile(root, relativePath) {
19
+ return existsSync(join(root, relativePath));
20
+ }
21
+ function hasAnyFile(root, relativePaths) {
22
+ return relativePaths.some(path => hasFile(root, path));
23
+ }
24
+ function hasDependency(pkg, name) {
25
+ const sections = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
26
+ return sections.some(section => {
27
+ const deps = asRecord(pkg[section]);
28
+ return Boolean(deps && typeof deps[name] === 'string');
29
+ });
30
+ }
31
+ function isUsefulTestScript(script) {
32
+ const normalized = script.toLowerCase();
33
+ return !normalized.includes('no test specified')
34
+ && !normalized.includes('exit 1')
35
+ && normalized.trim().length > 0;
36
+ }
37
+ export function inferVerifyPreRunCommand(root) {
38
+ const pkg = asRecord(readJsonFile(join(root, 'package.json')));
39
+ if (pkg) {
40
+ const scripts = asRecord(pkg.scripts);
41
+ const testScript = typeof scripts?.test === 'string' ? scripts.test : null;
42
+ if (testScript && isUsefulTestScript(testScript))
43
+ return 'npm test';
44
+ if (hasDependency(pkg, 'vitest') || hasAnyFile(root, ['vitest.config.ts', 'vitest.config.js', 'vitest.config.mjs', 'vitest.config.cjs'])) {
45
+ return 'npx vitest run';
46
+ }
47
+ if (hasDependency(pkg, 'jest') || hasAnyFile(root, ['jest.config.ts', 'jest.config.js', 'jest.config.mjs', 'jest.config.cjs'])) {
48
+ return 'npx jest';
49
+ }
50
+ }
51
+ const pyprojectPath = join(root, 'pyproject.toml');
52
+ const pyproject = existsSync(pyprojectPath) ? readFileSync(pyprojectPath, 'utf-8').toLowerCase() : '';
53
+ if (hasAnyFile(root, ['pytest.ini', 'tox.ini']) || pyproject.includes('pytest')) {
54
+ return 'pytest';
55
+ }
56
+ if (hasFile(root, 'go.mod'))
57
+ return 'go test ./...';
58
+ if (hasFile(root, 'Cargo.toml'))
59
+ return 'cargo test';
60
+ return null;
61
+ }
62
+ export function normalizeVerifyConfig(rawVerify) {
63
+ const verify = asRecord(rawVerify) ?? {};
64
+ const mergeStrategy = verify.merge_results === DEFAULT_VERIFY_MERGE_STRATEGY
65
+ ? DEFAULT_VERIFY_MERGE_STRATEGY
66
+ : DEFAULT_VERIFY_MERGE_STRATEGY;
67
+ return {
68
+ resultPath: typeof verify.result_path === 'string' ? verify.result_path : DEFAULT_VERIFY_RESULT_PATH,
69
+ preRunCommand: typeof verify.pre_run_command === 'string'
70
+ ? verify.pre_run_command
71
+ : typeof verify.test_command === 'string' ? verify.test_command : undefined,
72
+ regressionCommand: typeof verify.regression_command === 'string' ? verify.regression_command : undefined,
73
+ incrementalCommand: typeof verify.incremental_command === 'string' ? verify.incremental_command : undefined,
74
+ regressionResultPath: typeof verify.regression_result_path === 'string' ? verify.regression_result_path : undefined,
75
+ incrementalResultPath: typeof verify.incremental_result_path === 'string' ? verify.incremental_result_path : undefined,
76
+ mergeStrategy,
77
+ };
78
+ }
79
+ export function readVerifyConfig(root) {
80
+ const config = asRecord(readJsonFile(join(root, 'logos', 'logos.config.json')));
81
+ return normalizeVerifyConfig(config?.verify);
82
+ }
83
+ export function hasVerifyPreRunConfig(rawVerify) {
84
+ const verify = normalizeVerifyConfig(rawVerify);
85
+ return Boolean(verify.preRunCommand || verify.regressionCommand || verify.incrementalCommand);
86
+ }
87
+ export function backfillVerifyPreRunConfig(root, config) {
88
+ const verify = asRecord(config.verify) ?? {};
89
+ let mutated = false;
90
+ if (!verify.result_path) {
91
+ verify.result_path = DEFAULT_VERIFY_RESULT_PATH;
92
+ mutated = true;
93
+ }
94
+ config.verify = verify;
95
+ if (hasVerifyPreRunConfig(verify)) {
96
+ return { status: 'exists', mutated };
97
+ }
98
+ const command = inferVerifyPreRunCommand(root);
99
+ if (!command)
100
+ return { status: 'todo', mutated };
101
+ verify.pre_run_command = command;
102
+ return { status: 'added', command, mutated: true };
103
+ }
104
+ //# sourceMappingURL=verify-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-config.js","sourceRoot":"","sources":["../../src/lib/verify-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miniidealab/openlogos",
3
- "version": "0.9.28",
3
+ "version": "0.9.30",
4
4
  "description": "CLI tool for the OpenLogos software engineering methodology",
5
5
  "type": "module",
6
6
  "bin": {
@@ -62,6 +62,7 @@ test-writer 不写代码;code-implementor 不设计用例;code-reviewer 不
62
62
  - 对应的 UT/ST 用例总数
63
63
  - 技术栈确认(语言、框架、测试框架)
64
64
  - 源码输出目录确认(读取 `sourceRoots.src` 和 `sourceRoots.test`,若不存在则默认 `src/` 和 `test/`)
65
+ - verify 预跑配置确认:`verify.pre_run_command`、`verify.regression_command` 或 `verify.incremental_command` 至少存在一个;若缺失则需要在实现前补齐或明确诊断
65
66
 
66
67
  ### Step 2: 规划分批策略
67
68
 
@@ -202,7 +203,7 @@ Playwright E2E 测试使用 `test.afterEach` + fixture 捕获结果,参见 `lo
202
203
  2. **提示检查结果**:确认 `logos/resources/verify/test-results.jsonl` 已生成
203
204
  3. **所有批次完成后**:引导用户运行 `openlogos verify` 执行 Gate 3.5 验收
204
205
  4. **更新 sourceRoots**:如果实际使用的源码目录与 `logos.config.json` 中的 `sourceRoots` 不同,更新配置文件以反映实际路径。例如,如果业务代码放在 `app/` 而非默认的 `src/`,将 `sourceRoots.src` 更新为 `["app"]`
205
- 5. **自动写入 `verify.pre_run_command`**:检查 `logos.config.json` 是否已有 `verify.pre_run_command` 字段。若没有,根据 `logos-project.yaml` 的 `tech_stack` 推断默认命令并写入,确保后续 `openlogos verify` 能自动跑全量测试:
206
+ 5. **自动写入 `verify.pre_run_command`**:检查 `logos.config.json` 是否已有 `verify.pre_run_command`、`verify.regression_command` 或 `verify.incremental_command` 字段。若没有,根据 `logos-project.yaml` 的 `tech_stack` 推断默认命令并写入,确保后续 `openlogos verify` 能自动跑全量测试:
206
207
 
207
208
  | tech_stack 关键词 | 写入命令 |
208
209
  |---|---|
@@ -213,7 +214,7 @@ Playwright E2E 测试使用 `test.afterEach` + fixture 捕获结果,参见 `lo
213
214
  | cargo test | `cargo test` |
214
215
  | 无法推断 | 提示用户手动在 `logos.config.json` 的 `verify.pre_run_command` 字段填写测试命令 |
215
216
 
216
- **为什么必须配置**:`openlogos-reporter` 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试,JSONL 将缺少其他场景的结果,导致 `openlogos verify` 覆盖率不足而失败。配置 `pre_run_command` 后,`openlogos verify` 会在读取 JSONL 前自动执行全量测试,确保覆盖率完整。
217
+ **为什么必须配置**:`openlogos-reporter` 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试,JSONL 将缺少其他场景的结果,导致 `openlogos verify` 覆盖率不足而失败。配置预跑命令后,`openlogos verify` 会在读取 JSONL 前自动执行全量测试,确保覆盖率完整。若项目明确使用两阶段模型,也可写入 `verify.regression_command` 与 `verify.incremental_command`,并保证阶段结果不会互相覆盖。
217
218
 
218
219
  6. **写入实现清单**:在 `logos/resources/implementation/` 目录下创建实现清单文件(如 `implementation-manifest.md`),记录本次实现覆盖的场景、端点、用例 ID 等信息,标记 Phase 3-4 完成
219
220
 
@@ -186,6 +186,28 @@ Phase 检测逻辑必须包含:
186
186
  - 必须创建 `logos/resources/test/smoke/`
187
187
  - 必须创建 `logos/resources/verify/`
188
188
 
189
+ ## verify 预跑配置初始化规则
190
+
191
+ 项目初始化或已有项目接入时,必须为后续 `openlogos verify` 准备完整测试结果生成路径。
192
+
193
+ 执行规则:
194
+
195
+ 1. 创建 `logos.config.json` 时始终写入 `verify.result_path`。
196
+ 2. 检测常见测试栈:
197
+ - `package.json` 且存在 `scripts.test` → 写入 `verify.pre_run_command: "npm test"`
198
+ - Vitest → 可写入 `npx vitest run`
199
+ - Jest → 可写入 `npx jest`
200
+ - pytest → 可写入 `pytest`
201
+ - Go → 可写入 `go test ./...`
202
+ - Cargo → 可写入 `cargo test`
203
+ 3. 已有用户配置时不得覆盖。
204
+ 4. 无法推断时,必须在输出中生成 TODO,提示用户补充 `verify.pre_run_command` 或 `verify.regression_command`。
205
+ 5. 如果项目明确使用“回归 + 增量”模型,可写入 `verify.regression_command` 与 `verify.incremental_command`,并说明阶段结果合并策略。
206
+
207
+ 原因说明:
208
+
209
+ `openlogos verify` 以 `logos/resources/test/*.md` 的全量用例作为覆盖分母。如果 reporter 只写入局部测试结果,verify 会正确报告覆盖不足,但用户容易误以为业务测试失败。初始化阶段尽早补齐预跑配置,可以让验收默认生成完整 JSONL。
210
+
189
211
  ## 实践经验
190
212
 
191
213
  - **不要过度配置**:初始化时保持最少配置,让用户在使用过程中逐步完善
@@ -334,6 +334,33 @@ openlogos verify --format json # JSON 格式
334
334
  }
335
335
  ]
336
336
  },
337
+ "pre_run": {
338
+ "mode": "two_phase", // "none" | "pre_run_command" | "two_phase"
339
+ "commands": [
340
+ {
341
+ "stage": "regression", // "pre_run" | "regression" | "incremental"
342
+ "command": "npm test",
343
+ "status": "pass", // "pass" | "fail" | "skipped"
344
+ "exit_code": 0,
345
+ "duration_ms": 1200
346
+ },
347
+ {
348
+ "stage": "incremental",
349
+ "command": "npm run test:changed",
350
+ "status": "pass",
351
+ "exit_code": 0,
352
+ "duration_ms": 600
353
+ }
354
+ ],
355
+ "result_paths": {
356
+ "final": "logos/resources/verify/test-results.jsonl",
357
+ "regression": "logos/resources/verify/test-results.regression.jsonl",
358
+ "incremental": "logos/resources/verify/test-results.incremental.jsonl"
359
+ },
360
+ "merge_strategy": "last-write-wins",
361
+ "diagnostics": [],
362
+ "suggestions": []
363
+ },
337
364
  "report_path": "logos/resources/verify/acceptance-report.md"
338
365
  }
339
366
  ```
@@ -363,6 +390,19 @@ openlogos verify --format json # JSON 格式
363
390
  | `ac_trace.total` | number | 是 | 验收条件总数 |
364
391
  | `ac_trace.passed` | number | 是 | 通过的验收条件数 |
365
392
  | `ac_trace.failed_criteria` | array | 是 | 未通过的验收条件列表 |
393
+ | `pre_run.mode` | string | 是 | verify 预跑模式:`"none"`、`"pre_run_command"` 或 `"two_phase"` |
394
+ | `pre_run.commands` | array | 是 | 实际执行或跳过的命令阶段 |
395
+ | `pre_run.commands[].stage` | string | 是 | `pre_run`、`regression` 或 `incremental` |
396
+ | `pre_run.commands[].command` | string | 是 | 实际执行的命令文本 |
397
+ | `pre_run.commands[].status` | string | 是 | `pass`、`fail` 或 `skipped` |
398
+ | `pre_run.commands[].exit_code` | number | 否 | 命令退出码 |
399
+ | `pre_run.commands[].duration_ms` | number | 否 | 命令执行时长 |
400
+ | `pre_run.result_paths.final` | string | 是 | 最终验收读取的 JSONL 路径 |
401
+ | `pre_run.result_paths.regression` | string \| null | 否 | 回归阶段结果路径 |
402
+ | `pre_run.result_paths.incremental` | string \| null | 否 | 增量阶段结果路径 |
403
+ | `pre_run.merge_strategy` | string \| null | 否 | 两阶段合并策略,当前为 `last-write-wins` |
404
+ | `pre_run.diagnostics` | string[] | 是 | 可展示给用户的问题诊断 |
405
+ | `pre_run.suggestions` | string[] | 是 | 可展示给用户的修复建议 |
366
406
  | `report_path` | string | 是 | 生成的验收报告路径 |
367
407
 
368
408
  ### 4.4 gate.reason 取值
@@ -375,6 +415,13 @@ openlogos verify --format json # JSON 格式
375
415
  | `"checklist_incomplete"` | 设计时覆盖度校验未完全确认 |
376
416
  | `"ac_trace_incomplete"` | 验收条件追溯未完全通过 |
377
417
 
418
+ ### 4.5 预跑状态兼容规则
419
+
420
+ - 旧项目只配置 `verify.pre_run_command` 时,`pre_run.mode="pre_run_command"`。
421
+ - 配置 `verify.regression_command` 或 `verify.incremental_command` 时,`pre_run.mode="two_phase"`。
422
+ - 没有任何预跑命令时,`pre_run.mode="none"`。
423
+ - 覆盖不足且 `pre_run.mode="none"` 时,必须输出局部测试诊断和配置建议。
424
+
378
425
  ---
379
426
 
380
427
  ## 5. `openlogos smoke --format json`
@@ -51,11 +51,33 @@
51
51
  "result_path": {
52
52
  "type": "string",
53
53
  "default": "logos/resources/verify/test-results.jsonl",
54
- "description": "测试结果 JSONL 文件路径(相对项目根目录)"
54
+ "description": "最终测试结果 JSONL 文件路径(相对项目根目录)。两阶段模型合并后也写入此路径"
55
55
  },
56
56
  "pre_run_command": {
57
57
  "type": "string",
58
- "description": "测试命令(可选)。配置后 openlogos verify 会先执行此命令再读取结果"
58
+ "description": "兼容字段:单阶段测试命令。配置后 openlogos verify 会先执行此命令再读取结果"
59
+ },
60
+ "regression_command": {
61
+ "type": "string",
62
+ "description": "回归测试命令。配置后 openlogos verify 会在增量测试前执行"
63
+ },
64
+ "incremental_command": {
65
+ "type": "string",
66
+ "description": "增量测试命令。配置后 openlogos verify 会在回归测试后执行"
67
+ },
68
+ "regression_result_path": {
69
+ "type": "string",
70
+ "description": "回归阶段 JSONL 结果路径。未配置时 CLI 必须通过快照或等价机制保留阶段结果"
71
+ },
72
+ "incremental_result_path": {
73
+ "type": "string",
74
+ "description": "增量阶段 JSONL 结果路径。未配置时 CLI 必须通过快照或等价机制保留阶段结果"
75
+ },
76
+ "merge_results": {
77
+ "type": "string",
78
+ "enum": ["last-write-wins"],
79
+ "default": "last-write-wins",
80
+ "description": "两阶段结果合并策略。同一用例 ID 多次出现时,最后一次结果生效"
59
81
  },
60
82
  "test_command": {
61
83
  "type": "string",
@@ -190,6 +212,18 @@
190
212
  "result_path": "logos/resources/verify/smoke-results.jsonl",
191
213
  "report_path": "logos/resources/verify/smoke-report.md"
192
214
  }
215
+ },
216
+ {
217
+ "name": "Two Phase Verify Project",
218
+ "documents": {},
219
+ "verify": {
220
+ "result_path": "logos/resources/verify/test-results.jsonl",
221
+ "regression_command": "npm test",
222
+ "incremental_command": "npm run test:changed",
223
+ "regression_result_path": "logos/resources/verify/test-results.regression.jsonl",
224
+ "incremental_result_path": "logos/resources/verify/test-results.incremental.jsonl",
225
+ "merge_results": "last-write-wins"
226
+ }
193
227
  }
194
228
  ]
195
229
  }
@@ -85,9 +85,9 @@ logos/resources/verify/test-results.jsonl
85
85
 
86
86
  ## 运行约定
87
87
 
88
- ### `verify.pre_run_command`(推荐配置)
88
+ ### `verify.pre_run_command`(兼容配置)
89
89
 
90
- `logos.config.json` 中配置 `verify.pre_run_command`,`openlogos verify` 执行前会自动运行该命令(全量测试),确保 `test-results.jsonl` 始终包含所有场景的结果:
90
+ `verify.pre_run_command` 保持兼容,用于单阶段全量测试。配置后,`openlogos verify` 在读取 `verify.result_path` 前执行该命令:
91
91
 
92
92
  ```json
93
93
  {
@@ -98,7 +98,9 @@ logos/resources/verify/test-results.jsonl
98
98
  }
99
99
  ```
100
100
 
101
- **为什么需要此配置**:reporter 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试(如变更提案只涉及 S03),JSONL 将缺少其他场景(S01、S02)的结果,导致 `openlogos verify` 覆盖率不足而失败。配置此字段后,verify 会先跑全量测试再读取结果,覆盖率始终完整。
101
+ 此字段适用于只需要一条命令生成完整 `test-results.jsonl` 的项目。若同时配置两阶段字段,`openlogos verify` 优先执行两阶段模型,并在输出中标记 `pre_run_command` 作为兼容配置保留。
102
+
103
+ **为什么需要预跑配置**:reporter 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试(如变更提案只涉及 S03),JSONL 将缺少其他场景(S01、S02)的结果,导致 `openlogos verify` 覆盖率不足而失败。配置预跑命令后,verify 会先跑完整测试再读取结果,覆盖率始终完整。
102
104
 
103
105
  常见框架对应命令:
104
106
 
@@ -112,13 +114,45 @@ logos/resources/verify/test-results.jsonl
112
114
 
113
115
  > `code-implementor` Skill 在生成测试代码后会自动检查并写入此字段,无需手动配置。
114
116
 
117
+ ### `verify.regression_command` 与 `verify.incremental_command`
118
+
119
+ 两阶段模型用于先运行回归测试,再运行增量测试:
120
+
121
+ ```json
122
+ {
123
+ "verify": {
124
+ "result_path": "logos/resources/verify/test-results.jsonl",
125
+ "regression_command": "npm test",
126
+ "incremental_command": "npm run test:changed",
127
+ "regression_result_path": "logos/resources/verify/test-results.regression.jsonl",
128
+ "incremental_result_path": "logos/resources/verify/test-results.incremental.jsonl",
129
+ "merge_results": "last-write-wins"
130
+ }
131
+ }
132
+ ```
133
+
134
+ 执行语义:
135
+ 1. 若配置 `regression_command`,先执行回归测试。
136
+ 2. 若配置 `incremental_command`,再执行增量测试。
137
+ 3. CLI 合并阶段结果,写入 `result_path`。
138
+ 4. 同一个用例 ID 多次出现时,最后一次结果生效。
139
+ 5. 若未配置阶段结果路径,CLI 必须用临时快照或等价机制避免第二阶段 reporter 清空第一阶段结果。
140
+
141
+ ### 覆盖不足诊断
142
+
143
+ 当项目没有配置 `pre_run_command`、`regression_command` 或 `incremental_command`,且 verify 发现覆盖不足时,CLI 必须诊断这可能是只运行了局部测试导致,并建议配置 verify 预跑命令。
144
+
145
+ 该诊断不改变 Gate 判定:覆盖不足仍为 FAIL。
146
+
115
147
  ### 清空策略
116
148
 
117
- 每次完整测试运行前,reporter 应**清空**(truncate)结果文件,确保文件只包含最近一次运行的结果。推荐方式:
149
+ 每次完整测试运行前,reporter 应**清空**(truncate)对应阶段的结果文件,确保文件只包含最近一次运行的结果。推荐方式:
118
150
 
119
151
  - 在测试套件的 `globalSetup` 或等效钩子中清空文件
120
152
  - 或者 reporter 的初始化阶段写入空文件
121
153
 
154
+ 两阶段模型下,回归阶段和增量阶段可以写入不同结果文件;如果两个阶段都写入默认 `result_path`,CLI 必须在阶段之间保留快照,确保最终合并结果不会丢失第一阶段覆盖。
155
+
122
156
  ### 目录创建
123
157
 
124
158
  reporter 在写入前应确保 `logos/resources/verify/` 目录存在(`mkdir -p` 等效操作)。
package/spec/workflow.md CHANGED
@@ -265,7 +265,8 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
265
265
  - **单元测试代码**:基于 Step 4a 的单元测试用例规格实现
266
266
  - **场景测试代码**:基于 Step 4a 的场景测试用例规格实现
267
267
  - **部署相关代码**:部署方案中要求的健康检查、迁移脚本、启动脚本或构建脚本
268
- - **OpenLogos reporter 集成**:测试代码内嵌标准 reporter,将用例结果写入 `logos/resources/verify/test-results.jsonl`(格式见 [test-results.md](./test-results.md))
268
+ - **OpenLogos reporter 集成**:测试代码内嵌标准 reporter,将用例结果写入 `logos/resources/verify/test-results.jsonl` 或配置的阶段结果路径(格式见 [test-results.md](./test-results.md))
269
+ - **verify 预跑配置检查**:代码完成前必须检查 `logos.config.json` 是否存在 `verify.pre_run_command`、`verify.regression_command` 或 `verify.incremental_command`;缺失时必须补齐或明确说明无法推断
269
270
 
270
271
  **Step 5 标准交付(不可拆分)**:
271
272
 
@@ -291,12 +292,14 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
291
292
  - 仅当 Step 5 达到“业务代码 + UT/ST 测试代码 + reporter”完整交付时,才允许进入 Step 6
292
293
  - 若发现“仅业务代码、无对应测试”或“测试代码缺少 reporter”,必须回到 Step 5 补齐后再执行验收
293
294
  - Step 6 不承担“补写测试代码”的职责;其职责是对已完成的 Step 5 产物做自动化判定
295
+ - 项目应配置 verify 预跑命令;若无法推断,必须在交付说明中明确风险与手动配置方式
294
296
 
295
297
  **验收流程**:
296
298
 
297
299
  1. AI 在 Step 5 生成测试代码时,内嵌 OpenLogos reporter(见 [test-results.md](./test-results.md))
298
- 2. 用户运行测试(`npm test`、`pytest` 等)→ reporter 自动将每个用例的结果写入 `logos/resources/verify/test-results.jsonl`(JSONL 格式)
299
- 3. 用户运行 `openlogos verify` CLI 读取 JSONL + `logos/resources/test/*.md` 中的用例 ID → 自动计算验收结果
300
+ 2. 用户明确授权运行 `openlogos verify`
301
+ 3. CLI 根据 `logos.config.json` 执行 `pre_run_command`,或按 `regression_command` `incremental_command` 顺序执行两阶段测试
302
+ 4. CLI 合并阶段结果,读取 JSONL + `logos/resources/test/*.md` 中的用例 ID → 自动计算验收结果
300
303
 
301
304
  **验收三层判定**:
302
305
 
@@ -304,6 +307,11 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
304
307
  - **通过率**:status=pass 的用例数 / JSONL 中的总用例数
305
308
  - **需求追溯**(可选):test-cases.md 中声明的覆盖范围是否覆盖 Phase 1 验收条件
306
309
 
310
+ **覆盖不足诊断**:
311
+
312
+ - 未配置任何 verify 预跑命令且覆盖不足时,CLI 必须提示可能只运行了局部测试
313
+ - 诊断必须建议配置 `verify.pre_run_command`,或配置 `verify.regression_command` + `verify.incremental_command`
314
+
307
315
  **验收结果**:
308
316
 
309
317
  - 全部通过 → 生成 `logos/resources/verify/acceptance-report.md`,终端输出 PASS