@epoint-testtech/ep-stage-skill 0.0.4-alpha.1 → 0.0.6

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 (213) hide show
  1. package/SKILL.md +27 -27
  2. package/codex-skill/ep-stage/glue-create-project/SKILL.md +223 -206
  3. package/codex-skill/ep-stage/glue-generate-testcase/SKILL.md +275 -274
  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 -112
  6. package/codex-skill/ep-stage/glue-generate-testcase/references/testcase-tpl.md +72 -72
  7. package/codex-skill/ep-stage/glue-run-test/SKILL.md +295 -289
  8. package/codex-skill/ep-stage/glue-run-test/references/ai-runtime-loop.md +30 -0
  9. package/codex-skill/ep-stage/glue-run-test/references/crud-pipeline.md +132 -145
  10. package/codex-skill/ep-stage/glue-run-test/references/gap-review-protocol.md +44 -43
  11. package/codex-skill/ep-stage/glue-run-test/references/harness-principles.md +46 -46
  12. package/codex-skill/ep-stage/glue-run-test/references/playwright-cli-odav.md +166 -0
  13. package/codex-skill/ep-stage/glue-run-test/scripts/extract-page-elements-eval.mjs +233 -0
  14. package/codex-skill/ep-stage/glue-run-test/scripts/generate-crud-spec.mjs +149 -149
  15. package/codex-skill/ep-stage/page-element-scan/SKILL.md +91 -0
  16. package/codex-skill/ep-stage/page-element-scan/evals/evals.json +37 -0
  17. package/codex-skill/ep-stage/page-element-scan/evals/fixtures/sample-list-page.html +85 -0
  18. package/codex-skill/ep-stage/page-element-scan/references/pagination-controls.md +153 -0
  19. package/codex-skill/ep-stage/page-element-scan/scripts/extract-page-elements-eval.mjs +233 -0
  20. package/codex-skill/ep-stage/page-element-scan/scripts/extract-page-elements.mjs +298 -0
  21. package/codex-skill/ep-stage/page-element-scan/scripts/scan-page.mjs +749 -0
  22. package/codex-skill/ep-stage/recording-to-glue/SKILL.md +28 -28
  23. package/codex-skill/ep-stage/scripts/validate-skill.mjs +98 -95
  24. package/dist/src/cli/generate-testcase.d.ts +17 -51
  25. package/dist/src/cli/generate-testcase.d.ts.map +1 -1
  26. package/dist/src/cli/generate-testcase.js +74 -181
  27. package/dist/src/cli/index.d.ts +3 -2
  28. package/dist/src/cli/index.d.ts.map +1 -1
  29. package/dist/src/cli/index.js +51 -17
  30. package/dist/src/cli/run.d.ts +136 -29
  31. package/dist/src/cli/run.d.ts.map +1 -1
  32. package/dist/src/cli/run.js +507 -65
  33. package/dist/src/cli/spec.d.ts +17 -13
  34. package/dist/src/cli/spec.d.ts.map +1 -1
  35. package/dist/src/cli/spec.js +59 -33
  36. package/dist/src/contracts/crud-business-module.d.ts +6 -0
  37. package/dist/src/contracts/crud-business-module.d.ts.map +1 -1
  38. package/dist/src/contracts/glue-contract-v1.d.ts +98 -0
  39. package/dist/src/contracts/glue-contract-v1.d.ts.map +1 -0
  40. package/dist/src/contracts/glue-contract-v1.js +9 -0
  41. package/dist/src/contracts/observable-chain.d.ts +4 -0
  42. package/dist/src/contracts/observable-chain.d.ts.map +1 -1
  43. package/dist/src/extractors/code-list-json5.d.ts +192 -0
  44. package/dist/src/extractors/code-list-json5.d.ts.map +1 -0
  45. package/dist/src/extractors/code-list-json5.js +91 -0
  46. package/dist/src/extractors/html-page.d.ts +9 -0
  47. package/dist/src/extractors/html-page.d.ts.map +1 -1
  48. package/dist/src/extractors/html-page.js +26 -2
  49. package/dist/src/extractors/prd-extractor.d.ts +70 -0
  50. package/dist/src/extractors/prd-extractor.d.ts.map +1 -0
  51. package/dist/src/extractors/prd-extractor.js +248 -0
  52. package/dist/src/generators/agent-inferred-workflow-script.js +66 -66
  53. package/dist/src/generators/stage-skeleton-script.d.ts +87 -20
  54. package/dist/src/generators/stage-skeleton-script.d.ts.map +1 -1
  55. package/dist/src/generators/stage-skeleton-script.js +647 -238
  56. package/dist/src/index.d.ts +2 -2
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +1 -1
  59. package/dist/src/normalizers/crud-contract.d.ts +3 -0
  60. package/dist/src/normalizers/crud-contract.d.ts.map +1 -1
  61. package/dist/src/normalizers/crud-contract.js +3 -0
  62. package/dist/src/runtime/ai-runtime-trace.d.ts +88 -0
  63. package/dist/src/runtime/ai-runtime-trace.d.ts.map +1 -0
  64. package/dist/src/runtime/ai-runtime-trace.js +119 -0
  65. package/dist/src/testcase/button-interaction-inference.d.ts +37 -0
  66. package/dist/src/testcase/button-interaction-inference.d.ts.map +1 -0
  67. package/dist/src/testcase/button-interaction-inference.js +385 -0
  68. package/dist/src/testcase/contract-testcase-assembler.d.ts +44 -0
  69. package/dist/src/testcase/contract-testcase-assembler.d.ts.map +1 -0
  70. package/dist/src/testcase/contract-testcase-assembler.js +806 -0
  71. package/dist/src/testcase/prd-button-mapper.d.ts +72 -0
  72. package/dist/src/testcase/prd-button-mapper.d.ts.map +1 -0
  73. package/dist/src/testcase/prd-button-mapper.js +148 -0
  74. package/dist/src/testcase/runtime-context.d.ts +9 -0
  75. package/dist/src/testcase/runtime-context.d.ts.map +1 -0
  76. package/dist/src/testcase/runtime-context.js +1 -0
  77. package/dist/src/testcase/test-access.d.ts +38 -0
  78. package/dist/src/testcase/test-access.d.ts.map +1 -0
  79. package/dist/src/testcase/test-access.js +106 -0
  80. package/dist/src/testcase/testcase-execution-fields.d.ts +10 -0
  81. package/dist/src/testcase/testcase-execution-fields.d.ts.map +1 -0
  82. package/dist/src/testcase/testcase-execution-fields.js +1 -0
  83. package/dist/src/testcase/testcase-generator.d.ts.map +1 -1
  84. package/dist/src/testcase/testcase-generator.js +6 -0
  85. package/dist/src/testcase/testcase-markdown.d.ts +11 -0
  86. package/dist/src/testcase/testcase-markdown.d.ts.map +1 -0
  87. package/dist/src/testcase/testcase-markdown.js +181 -0
  88. package/dist/src/testcase/testcase-skeleton.d.ts +4 -0
  89. package/dist/src/testcase/testcase-skeleton.d.ts.map +1 -1
  90. package/dist/src/testcase/testcase-spec-assembly.d.ts +4 -0
  91. package/dist/src/testcase/testcase-spec-assembly.d.ts.map +1 -1
  92. package/dist/src/testcase/testcase-v1-draft.d.ts +58 -0
  93. package/dist/src/testcase/testcase-v1-draft.d.ts.map +1 -0
  94. package/dist/src/testcase/testcase-v1-draft.js +13 -0
  95. package/dist/src/validation/contract.d.ts +14 -0
  96. package/dist/src/validation/contract.d.ts.map +1 -0
  97. package/dist/src/validation/contract.js +132 -0
  98. package/dist/src/validation/credentials.d.ts +7 -2
  99. package/dist/src/validation/credentials.d.ts.map +1 -1
  100. package/dist/src/validation/credentials.js +15 -4
  101. package/dist/src/validation/index.d.ts +1 -0
  102. package/dist/src/validation/index.d.ts.map +1 -1
  103. package/dist/src/validation/index.js +1 -0
  104. package/dist/src/validation/testcase.d.ts +9 -7
  105. package/dist/src/validation/testcase.d.ts.map +1 -1
  106. package/dist/src/validation/testcase.js +181 -34
  107. package/docs/README.md +124 -134
  108. package/docs/mvp-usage-guide.md +298 -298
  109. package/examples/schemeresource-observable-docs/schemeresource.context.md +20 -20
  110. package/examples/schemeresource.module-hints.json +38 -38
  111. package/examples/schemeresource.observable.code_list.md +37 -37
  112. package/examples/zwplace-observable-docs/zwplace.context.md +16 -16
  113. package/examples/zwplace-placecategory-validation.json +29 -29
  114. package/examples/zwplace.module-hints.json +69 -69
  115. package/examples/zwplace.observable.code_list.md +37 -37
  116. package/package.json +2 -2
  117. package/codex-skill/ep-stage/.omc/state/sessions/d636ad35-5fc9-4d5e-85b0-2bcad7d86ee5/pre-tool-advisory-throttle.json +0 -10
  118. package/dist/test/cli/extract-contract.test.d.ts +0 -2
  119. package/dist/test/cli/extract-contract.test.d.ts.map +0 -1
  120. package/dist/test/cli/extract-contract.test.js +0 -32
  121. package/dist/test/cli/generate-testcase-inference.test.d.ts +0 -2
  122. package/dist/test/cli/generate-testcase-inference.test.d.ts.map +0 -1
  123. package/dist/test/cli/generate-testcase-inference.test.js +0 -63
  124. package/dist/test/cli/generate-testcase-paths.test.d.ts +0 -2
  125. package/dist/test/cli/generate-testcase-paths.test.d.ts.map +0 -1
  126. package/dist/test/cli/generate-testcase-paths.test.js +0 -165
  127. package/dist/test/cli/generate-testcase-requirements.test.d.ts +0 -2
  128. package/dist/test/cli/generate-testcase-requirements.test.d.ts.map +0 -1
  129. package/dist/test/cli/generate-testcase-requirements.test.js +0 -229
  130. package/dist/test/cli/generate-testcase.test.d.ts +0 -2
  131. package/dist/test/cli/generate-testcase.test.d.ts.map +0 -1
  132. package/dist/test/cli/generate-testcase.test.js +0 -130
  133. package/dist/test/cli/index.test.d.ts +0 -2
  134. package/dist/test/cli/index.test.d.ts.map +0 -1
  135. package/dist/test/cli/index.test.js +0 -113
  136. package/dist/test/cli/probe.test.d.ts +0 -2
  137. package/dist/test/cli/probe.test.d.ts.map +0 -1
  138. package/dist/test/cli/probe.test.js +0 -31
  139. package/dist/test/cli/run.test.d.ts +0 -2
  140. package/dist/test/cli/run.test.d.ts.map +0 -1
  141. package/dist/test/cli/run.test.js +0 -149
  142. package/dist/test/cli/spec-boundary.test.d.ts +0 -2
  143. package/dist/test/cli/spec-boundary.test.d.ts.map +0 -1
  144. package/dist/test/cli/spec-boundary.test.js +0 -198
  145. package/dist/test/cli/spec.test.d.ts +0 -2
  146. package/dist/test/cli/spec.test.d.ts.map +0 -1
  147. package/dist/test/cli/spec.test.js +0 -196
  148. package/dist/test/code-list.test.d.ts +0 -2
  149. package/dist/test/code-list.test.d.ts.map +0 -1
  150. package/dist/test/code-list.test.js +0 -39
  151. package/dist/test/crud-contract.test.d.ts +0 -2
  152. package/dist/test/crud-contract.test.d.ts.map +0 -1
  153. package/dist/test/crud-contract.test.js +0 -799
  154. package/dist/test/gap-inference.test.d.ts +0 -2
  155. package/dist/test/gap-inference.test.d.ts.map +0 -1
  156. package/dist/test/gap-inference.test.js +0 -597
  157. package/dist/test/generalization.test.d.ts +0 -2
  158. package/dist/test/generalization.test.d.ts.map +0 -1
  159. package/dist/test/generalization.test.js +0 -73
  160. package/dist/test/inference/module-hints-inference.test.d.ts +0 -2
  161. package/dist/test/inference/module-hints-inference.test.d.ts.map +0 -1
  162. package/dist/test/inference/module-hints-inference.test.js +0 -25
  163. package/dist/test/inference/source-analysis.test.d.ts +0 -2
  164. package/dist/test/inference/source-analysis.test.d.ts.map +0 -1
  165. package/dist/test/inference/source-analysis.test.js +0 -23
  166. package/dist/test/material-inventory.test.d.ts +0 -2
  167. package/dist/test/material-inventory.test.d.ts.map +0 -1
  168. package/dist/test/material-inventory.test.js +0 -154
  169. package/dist/test/observable-chain.test.d.ts +0 -2
  170. package/dist/test/observable-chain.test.d.ts.map +0 -1
  171. package/dist/test/observable-chain.test.js +0 -123
  172. package/dist/test/observable-pipeline.test.d.ts +0 -2
  173. package/dist/test/observable-pipeline.test.d.ts.map +0 -1
  174. package/dist/test/observable-pipeline.test.js +0 -470
  175. package/dist/test/page-structure.test.d.ts +0 -2
  176. package/dist/test/page-structure.test.d.ts.map +0 -1
  177. package/dist/test/page-structure.test.js +0 -45
  178. package/dist/test/scenario-inference.test.d.ts +0 -2
  179. package/dist/test/scenario-inference.test.d.ts.map +0 -1
  180. package/dist/test/scenario-inference.test.js +0 -73
  181. package/dist/test/stage-context.test.d.ts +0 -2
  182. package/dist/test/stage-context.test.d.ts.map +0 -1
  183. package/dist/test/stage-context.test.js +0 -395
  184. package/dist/test/testcase-generator.test.d.ts +0 -2
  185. package/dist/test/testcase-generator.test.d.ts.map +0 -1
  186. package/dist/test/testcase-generator.test.js +0 -276
  187. package/dist/test/testcase-skeleton.test.d.ts +0 -2
  188. package/dist/test/testcase-skeleton.test.d.ts.map +0 -1
  189. package/dist/test/testcase-skeleton.test.js +0 -185
  190. package/dist/test/testcase-spec-assembly.test.d.ts +0 -2
  191. package/dist/test/testcase-spec-assembly.test.d.ts.map +0 -1
  192. package/dist/test/testcase-spec-assembly.test.js +0 -105
  193. package/dist/test/util/credentials.test.d.ts +0 -2
  194. package/dist/test/util/credentials.test.d.ts.map +0 -1
  195. package/dist/test/util/credentials.test.js +0 -64
  196. package/dist/test/util/i18n-testcase.test.d.ts +0 -2
  197. package/dist/test/util/i18n-testcase.test.d.ts.map +0 -1
  198. package/dist/test/util/i18n-testcase.test.js +0 -119
  199. package/dist/test/util/softlink.test.d.ts +0 -2
  200. package/dist/test/util/softlink.test.d.ts.map +0 -1
  201. package/dist/test/util/softlink.test.js +0 -82
  202. package/dist/test/validation/credentials.test.d.ts +0 -2
  203. package/dist/test/validation/credentials.test.d.ts.map +0 -1
  204. package/dist/test/validation/credentials.test.js +0 -72
  205. package/dist/test/validation/projects-index.test.d.ts +0 -2
  206. package/dist/test/validation/projects-index.test.d.ts.map +0 -1
  207. package/dist/test/validation/projects-index.test.js +0 -48
  208. package/dist/test/validation/testcase.test.d.ts +0 -2
  209. package/dist/test/validation/testcase.test.d.ts.map +0 -1
  210. package/dist/test/validation/testcase.test.js +0 -129
  211. package/dist/vitest.config.d.ts +0 -3
  212. package/dist/vitest.config.d.ts.map +0 -1
  213. package/dist/vitest.config.js +0 -7
@@ -1,38 +1,38 @@
1
- {
2
- "dataKey": {
3
- "selectedField": "scheme_name",
4
- "generationStrategy": "timestamp_prefix"
5
- },
6
- "searchConditions": [
7
- {
8
- "field": "scheme_name",
9
- "component": "input",
10
- "seedValue": "自动化测试方案资源",
11
- "strategy": "timestamp_prefix",
12
- "updatePrefix": "修改"
13
- }
14
- ],
15
- "buttonAliases": {
16
- "create": ["新增记录", "新增"],
17
- "saveAndClose": ["保存并关闭"],
18
- "search": ["搜索", "查询"],
19
- "edit": ["修改记录", "修改"],
20
- "delete": ["删除选定"],
21
- "confirm": ["确定"]
22
- },
23
- "autofill": {
24
- "overrideFields": [
25
- {
26
- "field": "scheme_name",
27
- "strategy": "timestamp_prefix",
28
- "value": "自动化测试方案资源"
29
- }
30
- ]
31
- },
32
- "deletePolicy": "success_delete",
33
- "assertionPolicy": {
34
- "afterCreate": "record_exists",
35
- "afterUpdate": "record_exists",
36
- "afterDelete": "toast_message"
37
- }
38
- }
1
+ {
2
+ "dataKey": {
3
+ "selectedField": "scheme_name",
4
+ "generationStrategy": "timestamp_prefix"
5
+ },
6
+ "searchConditions": [
7
+ {
8
+ "field": "scheme_name",
9
+ "component": "input",
10
+ "seedValue": "自动化测试方案资源",
11
+ "strategy": "timestamp_prefix",
12
+ "updatePrefix": "修改"
13
+ }
14
+ ],
15
+ "buttonAliases": {
16
+ "create": ["新增记录", "新增"],
17
+ "saveAndClose": ["保存并关闭"],
18
+ "search": ["搜索", "查询"],
19
+ "edit": ["修改记录", "修改"],
20
+ "delete": ["删除选定"],
21
+ "confirm": ["确定"]
22
+ },
23
+ "autofill": {
24
+ "overrideFields": [
25
+ {
26
+ "field": "scheme_name",
27
+ "strategy": "timestamp_prefix",
28
+ "value": "自动化测试方案资源"
29
+ }
30
+ ]
31
+ },
32
+ "deletePolicy": "success_delete",
33
+ "assertionPolicy": {
34
+ "afterCreate": "record_exists",
35
+ "afterUpdate": "record_exists",
36
+ "afterDelete": "toast_message"
37
+ }
38
+ }
@@ -1,37 +1,37 @@
1
- # 方案资源文档代码清单
2
-
3
- > 此文件用于模拟 `stage-glue` 在交互补齐后回写到 `code_list.md` 的结果。
4
- > 当前样例面向 `schemeresource` 普通 CRUD;真实 e2e 时仍允许继续通过交互补齐菜单真值和业务种子值。
5
-
6
- knowledgeRoot: ../../../knowledge-project/epoint-web-v9.5.2
7
- menu: 方案资源文档>方案资源文档列表
8
-
9
- ---
10
-
11
- ## 已补齐入口字段
12
-
13
- - `knowledgeRoot`:用于把 `code_list.md` 中的相对物料路径统一解析到真实上游物料根目录。
14
- - `menu`:先给默认入口一个可消费的菜单路径,避免链路一开始就停在 menu gate。
15
- - `./schemeresource.module-hints.json`:补齐当前已知的 `dataKey`、按钮别名、删除策略和断言策略;附件文件、下拉值等未确认业务值留待 e2e 交互补齐。
16
-
17
- ## 文档物料(模拟交互补齐后的可消费 docsDir)
18
-
19
- - `./schemeresource-observable-docs/schemeresource.context.md`
20
-
21
- ## 前端文件
22
-
23
- - `src/main/webapp/perpage/schemeresource/schemeresourcelist.html`
24
- - `src/main/webapp/perpage/schemeresource/schemeresourceadd.html`
25
- - `src/main/webapp/perpage/schemeresource/schemeresourceedit.html`
26
- - `src/main/webapp/perpage/schemeresource/schemeresourcedetail.html`
27
-
28
- ## 后端文件
29
-
30
- - `src/main/java/com/epoint/schemeresource/action/SchemeResourceListAction.java`
31
- - `src/main/java/com/epoint/schemeresource/action/SchemeResourceAddAction.java`
32
- - `src/main/java/com/epoint/schemeresource/action/SchemeResourceEditAction.java`
33
- - `src/main/java/com/epoint/schemeresource/action/SchemeResourceDetailAction.java`
34
-
35
- ## 提示物料
36
-
37
- - `./schemeresource.module-hints.json`
1
+ # 方案资源文档代码清单
2
+
3
+ > 此文件用于模拟 `stage-glue` 在交互补齐后回写到 `code_list.md` 的结果。
4
+ > 当前样例面向 `schemeresource` 普通 CRUD;真实 e2e 时仍允许继续通过交互补齐菜单真值和业务种子值。
5
+
6
+ knowledgeRoot: ../../../knowledge-project/epoint-web-v9.5.2
7
+ menu: 方案资源文档>方案资源文档列表
8
+
9
+ ---
10
+
11
+ ## 已补齐入口字段
12
+
13
+ - `knowledgeRoot`:用于把 `code_list.md` 中的相对物料路径统一解析到真实上游物料根目录。
14
+ - `menu`:先给默认入口一个可消费的菜单路径,避免链路一开始就停在 menu gate。
15
+ - `./schemeresource.module-hints.json`:补齐当前已知的 `dataKey`、按钮别名、删除策略和断言策略;附件文件、下拉值等未确认业务值留待 e2e 交互补齐。
16
+
17
+ ## 文档物料(模拟交互补齐后的可消费 docsDir)
18
+
19
+ - `./schemeresource-observable-docs/schemeresource.context.md`
20
+
21
+ ## 前端文件
22
+
23
+ - `src/main/webapp/perpage/schemeresource/schemeresourcelist.html`
24
+ - `src/main/webapp/perpage/schemeresource/schemeresourceadd.html`
25
+ - `src/main/webapp/perpage/schemeresource/schemeresourceedit.html`
26
+ - `src/main/webapp/perpage/schemeresource/schemeresourcedetail.html`
27
+
28
+ ## 后端文件
29
+
30
+ - `src/main/java/com/epoint/schemeresource/action/SchemeResourceListAction.java`
31
+ - `src/main/java/com/epoint/schemeresource/action/SchemeResourceAddAction.java`
32
+ - `src/main/java/com/epoint/schemeresource/action/SchemeResourceEditAction.java`
33
+ - `src/main/java/com/epoint/schemeresource/action/SchemeResourceDetailAction.java`
34
+
35
+ ## 提示物料
36
+
37
+ - `./schemeresource.module-hints.json`
@@ -1,16 +1,16 @@
1
- # 场所窗口信息管理可观测入口补充说明
2
-
3
- 本文件是 `packages/ep-stage-skill/examples/zwplace.observable.code_list.md` 的配套文档物料,用于模拟
4
- `stage-glue` 在交互补齐后,为 `code_list.md` 增补的可消费上下文。
5
-
6
- ## 当前确定信息
7
-
8
- - 模块:场所窗口信息管理(`zwplace`)
9
- - 菜单:`场所窗口信息管理>场所窗口信息列表`
10
- - 列表页标题:`场所信息管理列表`
11
- - 当前一期目标:验证普通 CRUD 场景的可观测链路,不把嵌套 CRUD 写入正式契约
12
-
13
- ## 备注
14
-
15
- - 上游真实 HTML / Java Action 仍来自 `knowledge-project/epoint-web-v9.5.2`
16
- - 当前样例的价值在于:让 `--code-list` 默认入口可以只依赖一个可写文件完成物料扎口
1
+ # 场所窗口信息管理可观测入口补充说明
2
+
3
+ 本文件是 `packages/ep-stage-skill/examples/zwplace.observable.code_list.md` 的配套文档物料,用于模拟
4
+ `stage-glue` 在交互补齐后,为 `code_list.md` 增补的可消费上下文。
5
+
6
+ ## 当前确定信息
7
+
8
+ - 模块:场所窗口信息管理(`zwplace`)
9
+ - 菜单:`场所窗口信息管理>场所窗口信息列表`
10
+ - 列表页标题:`场所信息管理列表`
11
+ - 当前一期目标:验证普通 CRUD 场景的可观测链路,不把嵌套 CRUD 写入正式契约
12
+
13
+ ## 备注
14
+
15
+ - 上游真实 HTML / Java Action 仍来自 `knowledge-project/epoint-web-v9.5.2`
16
+ - 当前样例的价值在于:让 `--code-list` 默认入口可以只依赖一个可写文件完成物料扎口
@@ -1,29 +1,29 @@
1
- {
2
- "dataKey": {
3
- "selectedField": "placecategory",
4
- "generationStrategy": "timestamp_prefix"
5
- },
6
- "buttonAliases": {
7
- "create": ["新增场所信息管理", "新增"],
8
- "saveAndClose": ["保存并关闭"],
9
- "search": ["搜索", "查询"],
10
- "edit": ["修改", "编辑"],
11
- "delete": ["删除选定"],
12
- "confirm": ["确定"]
13
- },
14
- "autofill": {
15
- "overrideFields": [
16
- {
17
- "field": "placecategory",
18
- "strategy": "timestamp_prefix",
19
- "value": "自动化测试场所分类"
20
- }
21
- ]
22
- },
23
- "deletePolicy": "blocked_by_business_rule",
24
- "assertionPolicy": {
25
- "afterCreate": "record_exists",
26
- "afterUpdate": "record_exists",
27
- "afterDelete": "toast_message"
28
- }
29
- }
1
+ {
2
+ "dataKey": {
3
+ "selectedField": "placecategory",
4
+ "generationStrategy": "timestamp_prefix"
5
+ },
6
+ "buttonAliases": {
7
+ "create": ["新增场所信息管理", "新增"],
8
+ "saveAndClose": ["保存并关闭"],
9
+ "search": ["搜索", "查询"],
10
+ "edit": ["修改", "编辑"],
11
+ "delete": ["删除选定"],
12
+ "confirm": ["确定"]
13
+ },
14
+ "autofill": {
15
+ "overrideFields": [
16
+ {
17
+ "field": "placecategory",
18
+ "strategy": "timestamp_prefix",
19
+ "value": "自动化测试场所分类"
20
+ }
21
+ ]
22
+ },
23
+ "deletePolicy": "blocked_by_business_rule",
24
+ "assertionPolicy": {
25
+ "afterCreate": "record_exists",
26
+ "afterUpdate": "record_exists",
27
+ "afterDelete": "toast_message"
28
+ }
29
+ }
@@ -1,69 +1,69 @@
1
- {
2
- "dataKey": {
3
- "selectedField": "placename",
4
- "generationStrategy": "timestamp_prefix"
5
- },
6
- "searchConditions": [
7
- {
8
- "field": "placename",
9
- "component": "input",
10
- "seedValue": "自动化测试名称",
11
- "strategy": "timestamp_prefix",
12
- "updatePrefix": "修改"
13
- },
14
- {
15
- "field": "placecategory",
16
- "component": "listbox",
17
- "value": "条线大厅",
18
- "createSelections": [
19
- {
20
- "field": "placecategory",
21
- "value": "条线大厅"
22
- }
23
- ]
24
- },
25
- {
26
- "field": "status",
27
- "component": "listbox",
28
- "value": "在用",
29
- "createSelections": [
30
- {
31
- "field": "placecategory",
32
- "value": "条线大厅"
33
- }
34
- ]
35
- }
36
- ],
37
- "buttonAliases": {
38
- "create": ["新增场所信息管理", "新增"],
39
- "saveAndClose": ["保存并关闭"],
40
- "search": ["搜索", "查询"],
41
- "edit": ["修改", "编辑"],
42
- "delete": ["删除选定"],
43
- "confirm": ["确定"]
44
- },
45
- "autofill": {
46
- "overrideFields": [
47
- {
48
- "field": "placename",
49
- "strategy": "timestamp_prefix",
50
- "value": "自动化测试场所名称"
51
- }
52
- ]
53
- },
54
- "deletePolicy": "blocked_by_business_rule",
55
- "assertionPolicy": {
56
- "afterCreate": "record_exists",
57
- "afterUpdate": "record_exists",
58
- "afterDelete": "toast_message"
59
- },
60
- "customWorkflows": [
61
- {
62
- "label": "同步窗口管理系统",
63
- "actionAlias": ["同步窗口管理系统"],
64
- "expectedIntent": "同步窗口管理系统数据",
65
- "expectedAssertion": "同步完成",
66
- "include": true
67
- }
68
- ]
69
- }
1
+ {
2
+ "dataKey": {
3
+ "selectedField": "placename",
4
+ "generationStrategy": "timestamp_prefix"
5
+ },
6
+ "searchConditions": [
7
+ {
8
+ "field": "placename",
9
+ "component": "input",
10
+ "seedValue": "自动化测试名称",
11
+ "strategy": "timestamp_prefix",
12
+ "updatePrefix": "修改"
13
+ },
14
+ {
15
+ "field": "placecategory",
16
+ "component": "listbox",
17
+ "value": "条线大厅",
18
+ "createSelections": [
19
+ {
20
+ "field": "placecategory",
21
+ "value": "条线大厅"
22
+ }
23
+ ]
24
+ },
25
+ {
26
+ "field": "status",
27
+ "component": "listbox",
28
+ "value": "在用",
29
+ "createSelections": [
30
+ {
31
+ "field": "placecategory",
32
+ "value": "条线大厅"
33
+ }
34
+ ]
35
+ }
36
+ ],
37
+ "buttonAliases": {
38
+ "create": ["新增场所信息管理", "新增"],
39
+ "saveAndClose": ["保存并关闭"],
40
+ "search": ["搜索", "查询"],
41
+ "edit": ["修改", "编辑"],
42
+ "delete": ["删除选定"],
43
+ "confirm": ["确定"]
44
+ },
45
+ "autofill": {
46
+ "overrideFields": [
47
+ {
48
+ "field": "placename",
49
+ "strategy": "timestamp_prefix",
50
+ "value": "自动化测试场所名称"
51
+ }
52
+ ]
53
+ },
54
+ "deletePolicy": "blocked_by_business_rule",
55
+ "assertionPolicy": {
56
+ "afterCreate": "record_exists",
57
+ "afterUpdate": "record_exists",
58
+ "afterDelete": "toast_message"
59
+ },
60
+ "customWorkflows": [
61
+ {
62
+ "label": "同步窗口管理系统",
63
+ "actionAlias": ["同步窗口管理系统"],
64
+ "expectedIntent": "同步窗口管理系统数据",
65
+ "expectedAssertion": "同步完成",
66
+ "include": true
67
+ }
68
+ ]
69
+ }
@@ -1,37 +1,37 @@
1
- # 场所窗口信息管理代码清单
2
-
3
- > 此文件是 `knowledge-project/epoint-web-v9.5.2/_docs/code_list.md` 的**可写镜像**。
4
- > 真实上游 `knowledge-project/.../_docs/code_list.md` 是当前唯一真相源;本文件只用于开发期模拟交互补齐后的回写结果,以及只读真相源无法落盘时的 e2e 入口验证。
5
-
6
- knowledgeRoot: ../../../knowledge-project/epoint-web-v9.5.2
7
- menu: 场所窗口信息管理>场所窗口信息列表
8
-
9
- ---
10
-
11
- ## 已补齐入口字段
12
-
13
- - `knowledgeRoot`:用于把 `code_list.md` 中的相对物料路径统一解析到真实上游物料根目录。
14
- - `menu`:用于默认入口直达菜单导航,避免链路停在菜单候选 gate。
15
- - `./zwplace.module-hints.json`:用于补齐 `ModuleHints`,避免 custom workflow 只停留在 candidate。
16
-
17
- ## 文档物料(模拟交互补齐后的可消费 docsDir)
18
-
19
- - `./zwplace-observable-docs/zwplace.context.md`
20
-
21
- ## 前端文件
22
-
23
- - `src/main/webapp/perpage/zwplace/gxhzwplacelist.html`
24
- - `src/main/webapp/perpage/zwplace/gxhzwplaceadd.html`
25
- - `src/main/webapp/perpage/zwplace/gxhzwplaceedit.html`
26
- - `src/main/webapp/perpage/zwplace/gxhzwplacedetail.html`
27
-
28
- ## 后端文件
29
-
30
- - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceListAction.java`
31
- - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceAddAction.java`
32
- - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceEditAction.java`
33
- - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceDetailAction.java`
34
-
35
- ## 提示物料
36
-
37
- - `./zwplace.module-hints.json`
1
+ # 场所窗口信息管理代码清单
2
+
3
+ > 此文件是 `knowledge-project/epoint-web-v9.5.2/_docs/code_list.md` 的**可写镜像**。
4
+ > 真实上游 `knowledge-project/.../_docs/code_list.md` 是当前唯一真相源;本文件只用于开发期模拟交互补齐后的回写结果,以及只读真相源无法落盘时的 e2e 入口验证。
5
+
6
+ knowledgeRoot: ../../../knowledge-project/epoint-web-v9.5.2
7
+ menu: 场所窗口信息管理>场所窗口信息列表
8
+
9
+ ---
10
+
11
+ ## 已补齐入口字段
12
+
13
+ - `knowledgeRoot`:用于把 `code_list.md` 中的相对物料路径统一解析到真实上游物料根目录。
14
+ - `menu`:用于默认入口直达菜单导航,避免链路停在菜单候选 gate。
15
+ - `./zwplace.module-hints.json`:用于补齐 `ModuleHints`,避免 custom workflow 只停留在 candidate。
16
+
17
+ ## 文档物料(模拟交互补齐后的可消费 docsDir)
18
+
19
+ - `./zwplace-observable-docs/zwplace.context.md`
20
+
21
+ ## 前端文件
22
+
23
+ - `src/main/webapp/perpage/zwplace/gxhzwplacelist.html`
24
+ - `src/main/webapp/perpage/zwplace/gxhzwplaceadd.html`
25
+ - `src/main/webapp/perpage/zwplace/gxhzwplaceedit.html`
26
+ - `src/main/webapp/perpage/zwplace/gxhzwplacedetail.html`
27
+
28
+ ## 后端文件
29
+
30
+ - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceListAction.java`
31
+ - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceAddAction.java`
32
+ - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceEditAction.java`
33
+ - `src/main/java/com/epoint/zwplace/action/GxhZwPlaceDetailAction.java`
34
+
35
+ ## 提示物料
36
+
37
+ - `./zwplace.module-hints.json`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epoint-testtech/ep-stage-skill",
3
- "version": "0.0.4-alpha.1",
3
+ "version": "0.0.6",
4
4
  "type": "module",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "scripts": {
34
34
  "typecheck": "tsc --noEmit",
35
35
  "test": "vitest run",
36
- "build": "tsc",
36
+ "build": "tsc -p tsconfig.build.json",
37
37
  "generate:crud-contract": "node --import tsx src/cli/dev/extract-contract.ts",
38
38
  "generate:playwright-tests": "node --import tsx src/cli/index.ts spec",
39
39
  "run:gap-pipeline": "node --import tsx src/cli/run-gap-pipeline.ts",
@@ -1,10 +0,0 @@
1
- {
2
- "version": 1,
3
- "entries": {
4
- "79a93d4a2f8f50b95f852280616242fee1855dc99a3c75211917f55e72e95fae": {
5
- "last_emitted_at_ms": 1782437222409,
6
- "message": "Use parallel execution for independent tasks. Use run_in_background for long operations (npm install, builds, tests)."
7
- }
8
- },
9
- "updated_at": "2026-06-26T01:27:02.409Z"
10
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=extract-contract.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract-contract.test.d.ts","sourceRoot":"","sources":["../../../test/cli/extract-contract.test.ts"],"names":[],"mappings":""}
@@ -1,32 +0,0 @@
1
- /**
2
- * dev/extract-contract.ts 入参解析单元测试。
3
- *
4
- * 实际 contract 提取已在 crud-contract.test.ts 端到端覆盖;本测试只检查参数解析
5
- * 边界,避免依赖主仓 knowledge-project 物料(受顶级硬约束保护、本 worktree 可能未填充)。
6
- */
7
- import { describe, expect, it } from 'vitest';
8
- import { runExtractContract } from '../../src/cli/dev/extract-contract.js';
9
- describe('runExtractContract 入参解析', () => {
10
- it('显式使用废弃 --module 时抛错', () => {
11
- expect(() => runExtractContract([
12
- '--module', 'zwplace',
13
- '--docs', '/tmp/docs',
14
- '--code-list', '/tmp/code_list.md',
15
- '--webapp', '/tmp/webapp',
16
- '--java-actions', '/tmp/java',
17
- '--out', '/tmp/out.json',
18
- ])).toThrow(/已废弃 --module/);
19
- });
20
- it('缺失 --module-id 时抛错', () => {
21
- expect(() => runExtractContract([
22
- '--docs', '/tmp/docs',
23
- '--code-list', '/tmp/code_list.md',
24
- '--webapp', '/tmp/webapp',
25
- '--java-actions', '/tmp/java',
26
- '--out', '/tmp/out.json',
27
- ])).toThrow(/Missing required argument --module-id/);
28
- });
29
- it('参数对非法时抛错', () => {
30
- expect(() => runExtractContract(['--module-id'])).toThrow(/Invalid argument pair/);
31
- });
32
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=generate-testcase-inference.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-testcase-inference.test.d.ts","sourceRoot":"","sources":["../../../test/cli/generate-testcase-inference.test.ts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
- import { tmpdir } from 'node:os';
3
- import { dirname, join, resolve } from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import JSON5 from 'json5';
6
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
7
- import { runGenerateTestcase } from '../../src/cli/generate-testcase.js';
8
- const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../../..');
9
- const codeList = join(repoRoot, 'knowledge-project/epoint-web-v9.5.2/_docs/014-测试需求10-20260622/code_list.md');
10
- /**
11
- * HOME 隔离 + 预填 projects.index.json5,让 runGenerateTestcase 的 requirement 追加不报错、不污染真实环境。
12
- */
13
- function seedIsolatedHomeWithProject(homeDir, projectDir) {
14
- const indexPath = join(homeDir, '.ep-stage', 'projects.index.json5');
15
- mkdirSync(dirname(indexPath), { recursive: true });
16
- writeFileSync(indexPath, `${JSON5.stringify({
17
- projects: [
18
- {
19
- projectName: 'test-inference',
20
- projectDir,
21
- mode: 'glue',
22
- stageCreateVersion: '0.0.0-test',
23
- requirements: [],
24
- },
25
- ],
26
- systems: [],
27
- }, null, 2)}\n`, 'utf8');
28
- }
29
- describe('runGenerateTestcase inference trace output', () => {
30
- let tmpDir = '';
31
- let tmpHome = '';
32
- const originalHome = process.env.HOME;
33
- beforeEach(() => {
34
- tmpHome = mkdtempSync(join(tmpdir(), 'ep-stage-inference-home-'));
35
- process.env.HOME = tmpHome;
36
- });
37
- afterEach(() => {
38
- process.env.HOME = originalHome;
39
- if (tmpHome)
40
- rmSync(tmpHome, { recursive: true, force: true });
41
- if (tmpDir)
42
- rmSync(tmpDir, { recursive: true, force: true });
43
- });
44
- it('只传 code_list 时落 contract.json 与 inference-trace.json,不落独立 module-hints 文件', () => {
45
- tmpDir = mkdtempSync(join(tmpdir(), 'ep-stage-testcase-'));
46
- const projectDir = join(tmpDir, 'project');
47
- const testsDir = join(projectDir, 'src', 'tests', '014-测试需求10-20260622');
48
- seedIsolatedHomeWithProject(tmpHome, projectDir);
49
- runGenerateTestcase({ codeList, testsDir, requirementDir: dirname(codeList), projectDir });
50
- const tracePath = join(testsDir, '.ep-stage/inference-trace.json');
51
- const contractPath = join(testsDir, '.ep-stage/contract.json');
52
- expect(existsSync(tracePath)).toBe(true);
53
- expect(existsSync(contractPath)).toBe(true);
54
- expect(existsSync(join(testsDir, '.ep-stage/source-spec.json'))).toBe(false);
55
- expect(existsSync(join(testsDir, '.ep-stage/module-hints.inferred.json5'))).toBe(false);
56
- const trace = JSON.parse(readFileSync(tracePath, 'utf8'));
57
- expect(trace.schemaVersion).toBe('inference-trace/v1');
58
- expect(trace.sourceAnalysis.mode).toMatch(/prd|mixed|inferred/);
59
- expect(trace.moduleHintsInference.dataKey.selectedField).toBe('placename');
60
- const testcase = JSON5.parse(readFileSync(join(testsDir, 'testcase.json5'), 'utf8'));
61
- expect(testcase.moduleId).toBe('zwplace');
62
- });
63
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=generate-testcase-paths.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-testcase-paths.test.d.ts","sourceRoot":"","sources":["../../../test/cli/generate-testcase-paths.test.ts"],"names":[],"mappings":""}