@epoint-testtech/ep-stage-skill 0.0.10 → 0.5.0-alpha.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 (158) hide show
  1. package/SKILL.md +27 -27
  2. package/codex-skill/ep-stage/glue-create-project/SKILL.md +223 -223
  3. package/codex-skill/ep-stage/glue-generate-testcase/SKILL.md +275 -275
  4. package/codex-skill/ep-stage/glue-generate-testcase/examples/observable-testcase.json +40 -40
  5. package/codex-skill/ep-stage/glue-generate-testcase/references/testcase-schema.md +95 -95
  6. package/codex-skill/ep-stage/glue-run-test/SKILL.md +273 -296
  7. package/codex-skill/ep-stage/glue-run-test/references/ai-runtime-loop.md +30 -30
  8. package/codex-skill/ep-stage/glue-run-test/references/crud-pipeline.md +132 -132
  9. package/codex-skill/ep-stage/glue-run-test/references/gap-review-protocol.md +44 -44
  10. package/codex-skill/ep-stage/glue-run-test/references/harness-principles.md +46 -46
  11. package/codex-skill/ep-stage/glue-run-test/references/playwright-cli-odav.md +127 -166
  12. package/codex-skill/ep-stage/glue-run-test/scripts/generate-crud-spec.mjs +149 -149
  13. package/codex-skill/ep-stage/recording-to-glue/SKILL.md +28 -28
  14. package/codex-skill/ep-stage/scripts/validate-skill.mjs +95 -98
  15. package/dist/src/cli/generate-testcase.d.ts +0 -1
  16. package/dist/src/cli/generate-testcase.d.ts.map +1 -1
  17. package/dist/src/cli/generate-testcase.js +1 -6
  18. package/dist/src/cli/index.d.ts.map +1 -1
  19. package/dist/src/cli/index.js +14 -38
  20. package/dist/src/cli/run.d.ts +0 -2
  21. package/dist/src/cli/run.d.ts.map +1 -1
  22. package/dist/src/cli/run.js +21 -70
  23. package/dist/src/cli/spec.d.ts.map +1 -1
  24. package/dist/src/cli/spec.js +0 -9
  25. package/dist/src/contracts/glue-contract-v1.d.ts +0 -35
  26. package/dist/src/contracts/glue-contract-v1.d.ts.map +1 -1
  27. package/dist/src/extractors/code-list-json5.d.ts +1 -34
  28. package/dist/src/extractors/code-list-json5.d.ts.map +1 -1
  29. package/dist/src/extractors/code-list-json5.js +0 -1
  30. package/dist/src/extractors/html-page.d.ts +0 -9
  31. package/dist/src/extractors/html-page.d.ts.map +1 -1
  32. package/dist/src/extractors/html-page.js +2 -26
  33. package/dist/src/generators/agent-inferred-workflow-script.js +66 -66
  34. package/dist/src/generators/stage-skeleton-script.d.ts +0 -50
  35. package/dist/src/generators/stage-skeleton-script.d.ts.map +1 -1
  36. package/dist/src/generators/stage-skeleton-script.js +116 -449
  37. package/dist/src/runtime/ai-runtime-trace.d.ts.map +1 -1
  38. package/dist/src/runtime/ai-runtime-trace.js +0 -8
  39. package/dist/src/testcase/contract-testcase-assembler.d.ts +0 -28
  40. package/dist/src/testcase/contract-testcase-assembler.d.ts.map +1 -1
  41. package/dist/src/testcase/contract-testcase-assembler.js +75 -329
  42. package/dist/src/validation/contract.d.ts.map +1 -1
  43. package/dist/src/validation/contract.js +0 -29
  44. package/dist/test/cli/generate-testcase-json5.test.d.ts +2 -0
  45. package/dist/test/cli/generate-testcase-json5.test.d.ts.map +1 -0
  46. package/dist/test/cli/generate-testcase-json5.test.js +154 -0
  47. package/dist/test/cli/index.test.d.ts +2 -0
  48. package/dist/test/cli/index.test.d.ts.map +1 -0
  49. package/dist/test/cli/index.test.js +114 -0
  50. package/dist/test/cli/run.test.d.ts +2 -0
  51. package/dist/test/cli/run.test.d.ts.map +1 -0
  52. package/dist/test/cli/run.test.js +429 -0
  53. package/dist/test/cli/spec.test.d.ts +2 -0
  54. package/dist/test/cli/spec.test.d.ts.map +1 -0
  55. package/dist/test/cli/spec.test.js +112 -0
  56. package/dist/test/code-list-json5.test.d.ts +2 -0
  57. package/dist/test/code-list-json5.test.d.ts.map +1 -0
  58. package/dist/test/code-list-json5.test.js +84 -0
  59. package/dist/test/code-list.test.d.ts +2 -0
  60. package/dist/test/code-list.test.d.ts.map +1 -0
  61. package/dist/test/code-list.test.js +39 -0
  62. package/dist/test/gap-inference.test.d.ts +2 -0
  63. package/dist/test/gap-inference.test.d.ts.map +1 -0
  64. package/dist/test/gap-inference.test.js +597 -0
  65. package/dist/test/generalization.test.d.ts +2 -0
  66. package/dist/test/generalization.test.d.ts.map +1 -0
  67. package/dist/test/generalization.test.js +73 -0
  68. package/dist/test/material-inventory.test.d.ts +2 -0
  69. package/dist/test/material-inventory.test.d.ts.map +1 -0
  70. package/dist/test/material-inventory.test.js +155 -0
  71. package/dist/test/observable-chain.test.d.ts +2 -0
  72. package/dist/test/observable-chain.test.d.ts.map +1 -0
  73. package/dist/test/observable-chain.test.js +123 -0
  74. package/dist/test/page-structure.test.d.ts +2 -0
  75. package/dist/test/page-structure.test.d.ts.map +1 -0
  76. package/dist/test/page-structure.test.js +45 -0
  77. package/dist/test/runtime/ai-runtime-trace.test.d.ts +2 -0
  78. package/dist/test/runtime/ai-runtime-trace.test.d.ts.map +1 -0
  79. package/dist/test/runtime/ai-runtime-trace.test.js +78 -0
  80. package/dist/test/scenario-inference.test.d.ts +2 -0
  81. package/dist/test/scenario-inference.test.d.ts.map +1 -0
  82. package/dist/test/scenario-inference.test.js +73 -0
  83. package/dist/test/stage-context.test.d.ts +2 -0
  84. package/dist/test/stage-context.test.d.ts.map +1 -0
  85. package/dist/test/stage-context.test.js +395 -0
  86. package/dist/test/testcase/testcase-markdown.test.d.ts +2 -0
  87. package/dist/test/testcase/testcase-markdown.test.d.ts.map +1 -0
  88. package/dist/test/testcase/testcase-markdown.test.js +48 -0
  89. package/dist/test/testcase-generator.test.d.ts +2 -0
  90. package/dist/test/testcase-generator.test.d.ts.map +1 -0
  91. package/dist/test/testcase-generator.test.js +276 -0
  92. package/dist/test/testcase-skeleton.test.d.ts +2 -0
  93. package/dist/test/testcase-skeleton.test.d.ts.map +1 -0
  94. package/dist/test/testcase-skeleton.test.js +185 -0
  95. package/dist/test/testcase-spec-assembly.test.d.ts +2 -0
  96. package/dist/test/testcase-spec-assembly.test.d.ts.map +1 -0
  97. package/dist/test/testcase-spec-assembly.test.js +105 -0
  98. package/dist/test/util/credentials.test.d.ts +2 -0
  99. package/dist/test/util/credentials.test.d.ts.map +1 -0
  100. package/dist/test/util/credentials.test.js +64 -0
  101. package/dist/test/util/i18n-testcase.test.d.ts +2 -0
  102. package/dist/test/util/i18n-testcase.test.d.ts.map +1 -0
  103. package/dist/test/util/i18n-testcase.test.js +119 -0
  104. package/dist/test/util/softlink.test.d.ts +2 -0
  105. package/dist/test/util/softlink.test.d.ts.map +1 -0
  106. package/dist/test/util/softlink.test.js +82 -0
  107. package/dist/test/validation/contract.test.d.ts +2 -0
  108. package/dist/test/validation/contract.test.d.ts.map +1 -0
  109. package/dist/test/validation/contract.test.js +116 -0
  110. package/dist/test/validation/credentials.test.d.ts +2 -0
  111. package/dist/test/validation/credentials.test.d.ts.map +1 -0
  112. package/dist/test/validation/credentials.test.js +74 -0
  113. package/dist/test/validation/projects-index.test.d.ts +2 -0
  114. package/dist/test/validation/projects-index.test.d.ts.map +1 -0
  115. package/dist/test/validation/projects-index.test.js +48 -0
  116. package/dist/test/validation/testcase-v1-draft.test.d.ts +2 -0
  117. package/dist/test/validation/testcase-v1-draft.test.d.ts.map +1 -0
  118. package/dist/test/validation/testcase-v1-draft.test.js +173 -0
  119. package/dist/vitest.config.d.ts +3 -0
  120. package/dist/vitest.config.d.ts.map +1 -0
  121. package/dist/vitest.config.js +7 -0
  122. package/docs/README.md +124 -124
  123. package/examples/schemeresource-observable-docs/schemeresource.context.md +20 -20
  124. package/examples/schemeresource.module-hints.json +38 -38
  125. package/examples/schemeresource.observable.code_list.md +37 -37
  126. package/examples/zwplace-observable-docs/zwplace.context.md +16 -16
  127. package/examples/zwplace-placecategory-validation.json +29 -29
  128. package/examples/zwplace.module-hints.json +69 -69
  129. package/examples/zwplace.observable.code_list.md +37 -37
  130. package/package.json +19 -13
  131. package/codex-skill/ep-stage/glue-generate-testcase/references/testcase-tpl.md +0 -72
  132. package/codex-skill/ep-stage/glue-run-test/scripts/extract-page-elements-eval.mjs +0 -233
  133. package/codex-skill/ep-stage/page-element-scan/SKILL.md +0 -91
  134. package/codex-skill/ep-stage/page-element-scan/evals/evals.json +0 -37
  135. package/codex-skill/ep-stage/page-element-scan/evals/fixtures/sample-list-page.html +0 -85
  136. package/codex-skill/ep-stage/page-element-scan/references/pagination-controls.md +0 -153
  137. package/codex-skill/ep-stage/page-element-scan/scripts/extract-page-elements-eval.mjs +0 -233
  138. package/codex-skill/ep-stage/page-element-scan/scripts/extract-page-elements.mjs +0 -298
  139. package/codex-skill/ep-stage/page-element-scan/scripts/scan-page.mjs +0 -749
  140. package/dist/src/cli/probe.d.ts +0 -46
  141. package/dist/src/cli/probe.d.ts.map +0 -1
  142. package/dist/src/cli/probe.js +0 -447
  143. package/dist/src/cli/run-report.d.ts +0 -46
  144. package/dist/src/cli/run-report.d.ts.map +0 -1
  145. package/dist/src/cli/run-report.js +0 -331
  146. package/dist/src/extractors/prd-extractor.d.ts +0 -70
  147. package/dist/src/extractors/prd-extractor.d.ts.map +0 -1
  148. package/dist/src/extractors/prd-extractor.js +0 -248
  149. package/dist/src/testcase/button-interaction-inference.d.ts +0 -37
  150. package/dist/src/testcase/button-interaction-inference.d.ts.map +0 -1
  151. package/dist/src/testcase/button-interaction-inference.js +0 -385
  152. package/dist/src/testcase/prd-button-mapper.d.ts +0 -72
  153. package/dist/src/testcase/prd-button-mapper.d.ts.map +0 -1
  154. package/dist/src/testcase/prd-button-mapper.js +0 -148
  155. package/dist/src/testcase/testcase-v2.d.ts +0 -50
  156. package/dist/src/testcase/testcase-v2.d.ts.map +0 -1
  157. package/dist/src/testcase/testcase-v2.js +0 -1
  158. package/docs/mvp-usage-guide.md +0 -298
@@ -1,40 +1,40 @@
1
- {
2
- "moduleId": "zwplace",
3
- "moduleName": "场所窗口信息管理",
4
- "cases": [
5
- {
6
- "caseId": "zwplace-crud-single-page-smoke",
7
- "title": "标准 CRUD 冒烟用例",
8
- "scenario": "crud.single-page",
9
- "reviewStatus": "confirmed",
10
- "evidence": ["新增、查询、修改、删除动作被当前骨架覆盖"],
11
- "steps": ["登录系统", "进入菜单", "执行 CRUD 骨架流程"],
12
- "assertions": ["创建和修改后的记录可查询"],
13
- "unresolved": []
14
- },
15
- {
16
- "caseId": "zwplace-nested-crud-candidate",
17
- "title": "嵌套 CRUD 候选用例",
18
- "scenario": "crud.nested",
19
- "reviewStatus": "needs_review",
20
- "evidence": ["新增页面中存在 mini-datagrid 与 添加窗口 按钮"],
21
- "steps": ["打开新增页面", "定位窗口明细子表", "验证添加窗口候选动作"],
22
- "assertions": [],
23
- "unresolved": ["子表保存后断言需要人工确认"]
24
- }
25
- ],
26
- "reasoningSummary": {
27
- "conclusion": "生成 2 条用例,其中 1 条需要人工确认。",
28
- "evidenceChain": [
29
- {
30
- "source": "html",
31
- "path": "gxhzwplaceadd.html",
32
- "text": "mini-datagrid + 添加窗口"
33
- }
34
- ],
35
- "alternatives": ["crud.single-page", "crud.nested"],
36
- "confidence": "medium",
37
- "risks": ["子表保存后断言需要人工确认"],
38
- "needsHumanReview": true
39
- }
40
- }
1
+ {
2
+ "moduleId": "zwplace",
3
+ "moduleName": "场所窗口信息管理",
4
+ "cases": [
5
+ {
6
+ "caseId": "zwplace-crud-single-page-smoke",
7
+ "title": "标准 CRUD 冒烟用例",
8
+ "scenario": "crud.single-page",
9
+ "reviewStatus": "confirmed",
10
+ "evidence": ["新增、查询、修改、删除动作被当前骨架覆盖"],
11
+ "steps": ["登录系统", "进入菜单", "执行 CRUD 骨架流程"],
12
+ "assertions": ["创建和修改后的记录可查询"],
13
+ "unresolved": []
14
+ },
15
+ {
16
+ "caseId": "zwplace-nested-crud-candidate",
17
+ "title": "嵌套 CRUD 候选用例",
18
+ "scenario": "crud.nested",
19
+ "reviewStatus": "needs_review",
20
+ "evidence": ["新增页面中存在 mini-datagrid 与 添加窗口 按钮"],
21
+ "steps": ["打开新增页面", "定位窗口明细子表", "验证添加窗口候选动作"],
22
+ "assertions": [],
23
+ "unresolved": ["子表保存后断言需要人工确认"]
24
+ }
25
+ ],
26
+ "reasoningSummary": {
27
+ "conclusion": "生成 2 条用例,其中 1 条需要人工确认。",
28
+ "evidenceChain": [
29
+ {
30
+ "source": "html",
31
+ "path": "gxhzwplaceadd.html",
32
+ "text": "mini-datagrid + 添加窗口"
33
+ }
34
+ ],
35
+ "alternatives": ["crud.single-page", "crud.nested"],
36
+ "confidence": "medium",
37
+ "risks": ["子表保存后断言需要人工确认"],
38
+ "needsHumanReview": true
39
+ }
40
+ }
@@ -1,95 +1,95 @@
1
- # testcase.json5 schema v1-draft
2
-
3
- `testcase.json5` 是测试意图账本,由 `/glue-generate-testcase` 基于 `code_list.json5` 和 `contract.json5` 生成,供 `/glue-run-test` 的 `spec` / `run` 消费。
4
-
5
- ## 顶层结构
6
-
7
- ```json5
8
- {
9
- schemaVersion: 'ep-stage-testcase/v1-draft',
10
- testcaseId: 'zwplace-testcase',
11
- contractRef: '.ep-stage/contract.json5',
12
- scenario: 'crud_export',
13
- moduleId: 'zwplace',
14
- moduleName: '场所窗口信息管理',
15
-
16
- // 可选历史展示字段;新链路不要求 menuPath,directUrl/route 由 contract + runtime 配置解决。
17
- menuPath: undefined,
18
- runtimeContext: {
19
- testProjectDir: '/abs/path/to/glue-project',
20
- caseDir: '/abs/path/to/glue-project/src/tests/014-测试需求10-20260622',
21
- specPath: '/abs/path/to/glue-project/src/tests/014-测试需求10-20260622/crud.spec.ts',
22
- },
23
- testAccess: {
24
- systems: [
25
- {
26
- systemName: '政务系统',
27
- loginUrl: 'https://example.com/login',
28
- roles: [
29
- {
30
- role: '业务管理员',
31
- username: 'qa-admin',
32
- password: 'plain-text-for-dev',
33
- permissions: ['新增', '修改', '删除', '导出'],
34
- },
35
- ],
36
- },
37
- ],
38
- },
39
-
40
- cases: [
41
- {
42
- caseId: 'zwplace-placename-create',
43
- title: '场所名称-新增',
44
- generationStrategy: 'glue',
45
- coverageStatus: 'covered',
46
- reviewStatus: 'confirmed',
47
- queryKey: '场所名称',
48
- precondition: '使用具备权限的测试角色登录系统并进入目标列表页',
49
- steps: '按查询主键完成新增、查询、编辑、删除或导出流程',
50
- assertion: '按查询主键、列表结果或导出行为验证执行结果',
51
- },
52
- ],
53
-
54
- uncoveredCandidates: [
55
- {
56
- caseId: 'businessState.transitions',
57
- label: '状态流转',
58
- generationStrategy: 'ai',
59
- coverageStatus: 'gap',
60
- requiredRole: '业务管理员',
61
- businessIntent: '覆盖在用不可删除等业务规则边界',
62
- assertionExpectation: '在用状态场所执行删除时应被业务规则阻断',
63
- queryKey: '不适用',
64
- precondition: '使用角色:业务管理员',
65
- steps: '按 AI Runtime Task 观察页面并执行:覆盖在用不可删除等业务规则边界',
66
- assertion: '在用状态场所执行删除时应被业务规则阻断',
67
- },
68
- {
69
- caseId: 'statisticsDashboard',
70
- label: '统计看板(无入口)',
71
- generationStrategy: 'ai',
72
- coverageStatus: 'blocked',
73
- requiredRole: '业务管理员',
74
- businessIntent: 'code_list.json5 标记 PRD 提到统计大屏,但本次出码未发现对应实现文件',
75
- assertionExpectation: '运行态推理若仍无入口则记录 blocked,不生成胶水骨架步骤',
76
- queryKey: '不适用',
77
- precondition: '使用角色:业务管理员',
78
- steps: '按 AI Runtime Task 观察页面并执行:code_list.json5 标记 PRD 提到统计大屏,但本次出码未发现对应实现文件',
79
- assertion: '运行态推理若仍无入口则记录 blocked,不生成胶水骨架步骤',
80
- },
81
- ],
82
- }
83
- ```
84
-
85
- ## 约束
86
-
87
- - 顶层可选写入 `runtimeContext`,字段固定为 `testProjectDir / caseDir / specPath`,供 `glue-run-test` 直接定位工程与 spec。
88
- - 顶层可选写入 `testAccess`,结构为 `systems[].{systemName, loginUrl?, roles[]}`;`roles[]` 字段固定为 `role / username? / password? / permissions[]`。
89
- - 当前开发调试阶段允许把 `username / password` 明文写入 `testcase.json5.testAccess`,便于 generate → run 直接串联;`credentials.json5` 仅作为兼容兜底与人工补齐入口。
90
- - `cases[]` 只承载 `generationStrategy: 'glue'`。
91
- - `cases[]` 中正式执行字段为 `queryKey / precondition / steps / assertion`,缺任一字段都不应再视为最新结构。
92
- - `uncoveredCandidates[]` 只承载 `generationStrategy: 'ai'`,同时也必须携带 `queryKey / precondition / steps / assertion` 执行字段。
93
- - 缺入口、缺权限、缺运行态数据等阻断状态用 `coverageStatus: 'blocked'` 表达,不再引入 `manual` 生成策略。
94
- - `menuPath` 不是必填字段;不要从 `code_list.json5` 或历史菜单字段反推为必需导航入口。
95
- - `testcase.md` 只是人审视图,事实源仍是 `testcase.json5`。
1
+ # testcase.json5 schema v1-draft
2
+
3
+ `testcase.json5` 是测试意图账本,由 `/glue-generate-testcase` 基于 `code_list.json5` 和 `contract.json5` 生成,供 `/glue-run-test` 的 `spec` / `run` 消费。
4
+
5
+ ## 顶层结构
6
+
7
+ ```json5
8
+ {
9
+ schemaVersion: 'ep-stage-testcase/v1-draft',
10
+ testcaseId: 'zwplace-testcase',
11
+ contractRef: '.ep-stage/contract.json5',
12
+ scenario: 'crud_export',
13
+ moduleId: 'zwplace',
14
+ moduleName: '场所窗口信息管理',
15
+
16
+ // 可选历史展示字段;新链路不要求 menuPath,directUrl/route 由 contract + runtime 配置解决。
17
+ menuPath: undefined,
18
+ runtimeContext: {
19
+ testProjectDir: '/abs/path/to/glue-project',
20
+ caseDir: '/abs/path/to/glue-project/src/tests/014-测试需求10-20260622',
21
+ specPath: '/abs/path/to/glue-project/src/tests/014-测试需求10-20260622/crud.spec.ts',
22
+ },
23
+ testAccess: {
24
+ systems: [
25
+ {
26
+ systemName: '政务系统',
27
+ loginUrl: 'https://example.com/login',
28
+ roles: [
29
+ {
30
+ role: '业务管理员',
31
+ username: 'qa-admin',
32
+ password: 'plain-text-for-dev',
33
+ permissions: ['新增', '修改', '删除', '导出'],
34
+ },
35
+ ],
36
+ },
37
+ ],
38
+ },
39
+
40
+ cases: [
41
+ {
42
+ caseId: 'zwplace-placename-create',
43
+ title: '场所名称-新增',
44
+ generationStrategy: 'glue',
45
+ coverageStatus: 'covered',
46
+ reviewStatus: 'confirmed',
47
+ queryKey: '场所名称',
48
+ precondition: '使用具备权限的测试角色登录系统并进入目标列表页',
49
+ steps: '按查询主键完成新增、查询、编辑、删除或导出流程',
50
+ assertion: '按查询主键、列表结果或导出行为验证执行结果',
51
+ },
52
+ ],
53
+
54
+ uncoveredCandidates: [
55
+ {
56
+ caseId: 'businessState.transitions',
57
+ label: '状态流转',
58
+ generationStrategy: 'ai',
59
+ coverageStatus: 'gap',
60
+ requiredRole: '业务管理员',
61
+ businessIntent: '覆盖在用不可删除等业务规则边界',
62
+ assertionExpectation: '在用状态场所执行删除时应被业务规则阻断',
63
+ queryKey: '不适用',
64
+ precondition: '使用角色:业务管理员',
65
+ steps: '按 AI Runtime Task 观察页面并执行:覆盖在用不可删除等业务规则边界',
66
+ assertion: '在用状态场所执行删除时应被业务规则阻断',
67
+ },
68
+ {
69
+ caseId: 'statisticsDashboard',
70
+ label: '统计看板(无入口)',
71
+ generationStrategy: 'ai',
72
+ coverageStatus: 'blocked',
73
+ requiredRole: '业务管理员',
74
+ businessIntent: 'code_list.json5 标记 PRD 提到统计大屏,但本次出码未发现对应实现文件',
75
+ assertionExpectation: '运行态推理若仍无入口则记录 blocked,不生成胶水骨架步骤',
76
+ queryKey: '不适用',
77
+ precondition: '使用角色:业务管理员',
78
+ steps: '按 AI Runtime Task 观察页面并执行:code_list.json5 标记 PRD 提到统计大屏,但本次出码未发现对应实现文件',
79
+ assertion: '运行态推理若仍无入口则记录 blocked,不生成胶水骨架步骤',
80
+ },
81
+ ],
82
+ }
83
+ ```
84
+
85
+ ## 约束
86
+
87
+ - 顶层可选写入 `runtimeContext`,字段固定为 `testProjectDir / caseDir / specPath`,供 `glue-run-test` 直接定位工程与 spec。
88
+ - 顶层可选写入 `testAccess`,结构为 `systems[].{systemName, loginUrl?, roles[]}`;`roles[]` 字段固定为 `role / username? / password? / permissions[]`。
89
+ - 当前开发调试阶段允许把 `username / password` 明文写入 `testcase.json5.testAccess`,便于 generate → run 直接串联;`credentials.json5` 仅作为兼容兜底与人工补齐入口。
90
+ - `cases[]` 只承载 `generationStrategy: 'glue'`。
91
+ - `cases[]` 中正式执行字段为 `queryKey / precondition / steps / assertion`,缺任一字段都不应再视为最新结构。
92
+ - `uncoveredCandidates[]` 只承载 `generationStrategy: 'ai'`,同时也必须携带 `queryKey / precondition / steps / assertion` 执行字段。
93
+ - 缺入口、缺权限、缺运行态数据等阻断状态用 `coverageStatus: 'blocked'` 表达,不再引入 `manual` 生成策略。
94
+ - `menuPath` 不是必填字段;不要从 `code_list.json5` 或历史菜单字段反推为必需导航入口。
95
+ - `testcase.md` 只是人审视图,事实源仍是 `testcase.json5`。