@miniidealab/openlogos 0.9.30 → 0.10.2

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 (51) hide show
  1. package/claude-plugin-template/.claude-plugin/plugin.json +1 -1
  2. package/dist/commands/adopt.d.ts.map +1 -1
  3. package/dist/commands/adopt.js +4 -3
  4. package/dist/commands/adopt.js.map +1 -1
  5. package/dist/commands/detect.d.ts +2 -1
  6. package/dist/commands/detect.d.ts.map +1 -1
  7. package/dist/commands/detect.js +2 -1
  8. package/dist/commands/detect.js.map +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +8 -2
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/launch.d.ts.map +1 -1
  13. package/dist/commands/launch.js +3 -2
  14. package/dist/commands/launch.js.map +1 -1
  15. package/dist/commands/next.d.ts +1 -1
  16. package/dist/commands/next.d.ts.map +1 -1
  17. package/dist/commands/next.js +9 -5
  18. package/dist/commands/next.js.map +1 -1
  19. package/dist/commands/smoke.d.ts +3 -1
  20. package/dist/commands/smoke.d.ts.map +1 -1
  21. package/dist/commands/smoke.js +43 -9
  22. package/dist/commands/smoke.js.map +1 -1
  23. package/dist/commands/status.d.ts +3 -3
  24. package/dist/commands/status.d.ts.map +1 -1
  25. package/dist/commands/status.js +21 -13
  26. package/dist/commands/status.js.map +1 -1
  27. package/dist/commands/verify.d.ts +10 -1
  28. package/dist/commands/verify.d.ts.map +1 -1
  29. package/dist/commands/verify.js +128 -67
  30. package/dist/commands/verify.js.map +1 -1
  31. package/dist/i18n.d.ts.map +1 -1
  32. package/dist/i18n.js +4 -0
  33. package/dist/i18n.js.map +1 -1
  34. package/dist/lib/project-yaml.d.ts +4 -1
  35. package/dist/lib/project-yaml.d.ts.map +1 -1
  36. package/dist/lib/project-yaml.js +7 -1
  37. package/dist/lib/project-yaml.js.map +1 -1
  38. package/dist/lib/sandbox.d.ts +38 -0
  39. package/dist/lib/sandbox.d.ts.map +1 -0
  40. package/dist/lib/sandbox.js +246 -0
  41. package/dist/lib/sandbox.js.map +1 -0
  42. package/dist/lib/verify-config.d.ts +8 -0
  43. package/dist/lib/verify-config.d.ts.map +1 -1
  44. package/dist/lib/verify-config.js +29 -0
  45. package/dist/lib/verify-config.js.map +1 -1
  46. package/package.json +1 -1
  47. package/spec/cli-json-output.md +41 -0
  48. package/spec/logos-project.md +18 -2
  49. package/spec/logos.config.schema.json +44 -3
  50. package/spec/test-results.md +25 -0
  51. package/spec/workflow.md +56 -0
@@ -138,6 +138,20 @@ logos/resources/verify/test-results.jsonl
138
138
  4. 同一个用例 ID 多次出现时,最后一次结果生效。
139
139
  5. 若未配置阶段结果路径,CLI 必须用临时快照或等价机制避免第二阶段 reporter 清空第一阶段结果。
140
140
 
141
+ ### `verify.sandbox_mode` / `smoke.sandbox_mode`
142
+
143
+ OpenLogos 的 JSONL reporter 仍然负责写入测试结果,但当 `verify` 或 `smoke` 开启沙箱模式时,reporter 和命令执行器的职责必须分离:
144
+
145
+ - reporter 只写配置声明的结果文件;
146
+ - CLI 负责在沙箱中执行测试命令;
147
+ - CLI 负责回收结果文件并阻断仓库工作区的额外写入。
148
+
149
+ ### 新增约束
150
+ - `verify.sandbox_mode="always"` 时,测试命令不得直接写入仓库根目录中的非白名单路径。
151
+ - `smoke.sandbox_mode="always"` 时,`smoke.command` 不得直接写入仓库根目录中的非白名单路径。
152
+ - 若测试脚本在沙箱内失败,CLI 必须保留失败输出,并在 JSON / 文本结果中暴露 `sandbox` 诊断。
153
+ - 阶段化结果路径(`regression_result_path` / `incremental_result_path`)与沙箱隔离可以同时存在,二者不冲突。
154
+
141
155
  ### 覆盖不足诊断
142
156
 
143
157
  当项目没有配置 `pre_run_command`、`regression_command` 或 `incremental_command`,且 verify 发现覆盖不足时,CLI 必须诊断这可能是只运行了局部测试导致,并建议配置 verify 预跑命令。
@@ -153,6 +167,17 @@ logos/resources/verify/test-results.jsonl
153
167
 
154
168
  两阶段模型下,回归阶段和增量阶段可以写入不同结果文件;如果两个阶段都写入默认 `result_path`,CLI 必须在阶段之间保留快照,确保最终合并结果不会丢失第一阶段覆盖。
155
169
 
170
+ ### reporter 输出建议
171
+ ```json
172
+ {"id":"UT-S13-01","status":"pass","duration_ms":12,"timestamp":"2026-04-10T10:00:00Z"}
173
+ ```
174
+
175
+ 当启用沙箱时,reporter 不需要知道沙箱实现细节,但可在错误消息中保留命令上下文,便于 CLI 汇总诊断。
176
+
177
+ ### 兼容性
178
+ - 现有 reporter 仍然按原格式工作,不需要新增字段。
179
+ - CLI 新增的沙箱执行器不得改变 `test-results.jsonl` 的基本 schema。
180
+
156
181
  ### 目录创建
157
182
 
158
183
  reporter 在写入前应确保 `logos/resources/verify/` 目录存在(`mkdir -p` 等效操作)。
package/spec/workflow.md CHANGED
@@ -294,6 +294,62 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
294
294
  - Step 6 不承担“补写测试代码”的职责;其职责是对已完成的 Step 5 产物做自动化判定
295
295
  - 项目应配置 verify 预跑命令;若无法推断,必须在交付说明中明确风险与手动配置方式
296
296
 
297
+ **verify / smoke 沙箱执行标准**:
298
+
299
+ `openlogos verify` 与 `openlogos smoke` 的命令执行属于运行时安全边界,不能只依赖 prompt 约束。CLI 必须支持在 `logos.config.json` 中配置沙箱策略,并在执行前置测试命令或 `smoke.command` 时按策略处理。
300
+
301
+ 配置入口:
302
+
303
+ ```json
304
+ {
305
+ "verify": {
306
+ "sandbox_mode": "auto",
307
+ "sandbox_root": "/private/tmp",
308
+ "sandbox_deny_workspace_write": true
309
+ },
310
+ "smoke": {
311
+ "sandbox_mode": "auto",
312
+ "sandbox_root": "/private/tmp",
313
+ "sandbox_deny_workspace_write": true
314
+ }
315
+ }
316
+ ```
317
+
318
+ 沙箱模式:
319
+
320
+ | 模式 | 行为 |
321
+ |------|------|
322
+ | `off` | 关闭沙箱,保持历史行为 |
323
+ | `auto` | 优先使用沙箱;环境不支持时降级并输出告警 |
324
+ | `always` | 必须使用沙箱;无法隔离或检测到工作区写入时直接失败 |
325
+
326
+ verify 顺序:
327
+ 1. 读取 `verify.sandbox_*` 与预跑命令配置。
328
+ 2. 若配置 `regression_command` / `incremental_command`,按两阶段模型执行。
329
+ 3. 若只配置 `pre_run_command`,按单阶段模型执行。
330
+ 4. 若 `sandbox_mode != "off"`,所有预跑命令必须通过沙箱执行器运行。
331
+ 5. 执行结束后,仅允许回收配置声明的结果文件到 `verify.result_path`、`verify.regression_result_path` 或 `verify.incremental_result_path`。
332
+ 6. 读取结果并计算 Gate 3.5。
333
+ 7. 文本与 JSON 输出必须暴露沙箱模式、是否隔离、失败原因和修复建议。
334
+
335
+ smoke 顺序:
336
+ 1. 完成提案级部署决策、`DEPLOY_DONE` 与 smoke 门禁检查。
337
+ 2. 读取 `smoke.sandbox_*` 与 `smoke.command`。
338
+ 3. 若配置 `smoke.command` 且 `sandbox_mode != "off"`,通过沙箱执行器运行。
339
+ 4. 执行结束后,仅允许回收 `smoke.result_path` 指向的结果文件。
340
+ 5. 读取 smoke 用例与结果并计算 Gate 3.8。
341
+ 6. 文本与 JSON 输出必须暴露沙箱模式、是否隔离、失败原因和修复建议。
342
+
343
+ 工作区写入保护:
344
+ - 当 `sandbox_deny_workspace_write=true` 时,沙箱执行器必须阻止预跑命令或 smoke 命令写入仓库根目录中的非白名单路径。
345
+ - 白名单仅包含配置声明的结果文件、报告文件和 CLI 显式生成的门禁标记。
346
+ - `always` 模式下,一旦检测到非白名单写入,命令必须失败。
347
+ - `auto` 模式下,无法启用写入保护时必须输出告警,并在 JSON `sandbox.status` 中标记为 `warn`。
348
+
349
+ 兼容性:
350
+ - 未配置 `sandbox_mode` 的历史项目等价于 `off`,不得破坏既有 verify / smoke 行为。
351
+ - `init`、`adopt`、`sync` 可以为新项目补齐推荐配置,但不得覆盖用户已有沙箱配置。
352
+
297
353
  **验收流程**:
298
354
 
299
355
  1. AI 在 Step 5 生成测试代码时,内嵌 OpenLogos reporter(见 [test-results.md](./test-results.md))