@guanlin4924/devflow-pi 0.1.94 → 0.1.96
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/README.md +34 -4
- package/node_modules/@playwright/test/LICENSE +202 -0
- package/node_modules/@playwright/test/NOTICE +5 -0
- package/node_modules/@playwright/test/README.md +318 -0
- package/node_modules/@playwright/test/cli.js +19 -0
- package/node_modules/@playwright/test/index.d.ts +18 -0
- package/node_modules/@playwright/test/index.js +17 -0
- package/node_modules/@playwright/test/index.mjs +18 -0
- package/node_modules/@playwright/test/package.json +35 -0
- package/node_modules/@playwright/test/reporter.d.ts +17 -0
- package/node_modules/@playwright/test/reporter.js +17 -0
- package/node_modules/@playwright/test/reporter.mjs +17 -0
- package/node_modules/playwright/LICENSE +202 -0
- package/node_modules/playwright/NOTICE +5 -0
- package/node_modules/playwright/README.md +318 -0
- package/node_modules/playwright/ThirdPartyNotices.txt +14 -0
- package/node_modules/playwright/cli.js +19 -0
- package/node_modules/playwright/index.d.ts +17 -0
- package/node_modules/playwright/index.js +17 -0
- package/node_modules/playwright/index.mjs +18 -0
- package/node_modules/playwright/jsx-runtime.js +42 -0
- package/node_modules/playwright/jsx-runtime.mjs +21 -0
- package/node_modules/playwright/lib/agents/agentParser.js +89 -0
- package/node_modules/playwright/lib/agents/copilot-setup-steps.yml +34 -0
- package/node_modules/playwright/lib/agents/generateAgents.js +395 -0
- package/node_modules/playwright/lib/agents/playwright-test-coverage.prompt.md +31 -0
- package/node_modules/playwright/lib/agents/playwright-test-generate.prompt.md +8 -0
- package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +88 -0
- package/node_modules/playwright/lib/agents/playwright-test-heal.prompt.md +6 -0
- package/node_modules/playwright/lib/agents/playwright-test-healer.agent.md +56 -0
- package/node_modules/playwright/lib/agents/playwright-test-plan.prompt.md +9 -0
- package/node_modules/playwright/lib/agents/playwright-test-planner.agent.md +74 -0
- package/node_modules/playwright/lib/cli/reportActions.js +78 -0
- package/node_modules/playwright/lib/cli/testActions.js +214 -0
- package/node_modules/playwright/lib/common/index.js +2923 -0
- package/node_modules/playwright/lib/common/index.js.txt +34 -0
- package/node_modules/playwright/lib/errorContext.js +129 -0
- package/node_modules/playwright/lib/globals.js +58 -0
- package/node_modules/playwright/lib/index.js +815 -0
- package/node_modules/playwright/lib/isomorphic.js +260 -0
- package/node_modules/playwright/lib/isomorphic.js.txt +9 -0
- package/node_modules/playwright/lib/loader/loaderProcessEntry.js +34 -0
- package/node_modules/playwright/lib/loader/loaderProcessEntry.js.txt +9 -0
- package/node_modules/playwright/lib/matchers/expect.js +13490 -0
- package/node_modules/playwright/lib/matchers/expect.js.LICENSE +640 -0
- package/node_modules/playwright/lib/matchers/expect.js.txt +67 -0
- package/node_modules/playwright/lib/mcp/test/browserBackend.js +135 -0
- package/node_modules/playwright/lib/mcp/test/generatorTools.js +122 -0
- package/node_modules/playwright/lib/mcp/test/plannerTools.js +150 -0
- package/node_modules/playwright/lib/mcp/test/seed.js +82 -0
- package/node_modules/playwright/lib/mcp/test/streams.js +44 -0
- package/node_modules/playwright/lib/mcp/test/testBackend.js +99 -0
- package/node_modules/playwright/lib/mcp/test/testContext.js +306 -0
- package/node_modules/playwright/lib/mcp/test/testTool.js +30 -0
- package/node_modules/playwright/lib/mcp/test/testTools.js +98 -0
- package/node_modules/playwright/lib/package.js +47 -0
- package/node_modules/playwright/lib/program.js +241 -0
- package/node_modules/playwright/lib/runner/index.js +8527 -0
- package/node_modules/playwright/lib/runner/index.js.txt +61 -0
- package/node_modules/playwright/lib/transform/babelBundle.js +72274 -0
- package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +2384 -0
- package/node_modules/playwright/lib/transform/babelBundle.js.txt +325 -0
- package/node_modules/playwright/lib/transform/esmLoader.js +8054 -0
- package/node_modules/playwright/lib/transform/esmLoader.js.LICENSE +355 -0
- package/node_modules/playwright/lib/transform/esmLoader.js.txt +60 -0
- package/node_modules/playwright/lib/util.js +373 -0
- package/node_modules/playwright/lib/worker/workerProcessEntry.js +1861 -0
- package/node_modules/playwright/lib/worker/workerProcessEntry.js.txt +19 -0
- package/node_modules/playwright/package.json +55 -0
- package/node_modules/playwright/test.d.ts +18 -0
- package/node_modules/playwright/test.js +24 -0
- package/node_modules/playwright/test.mjs +35 -0
- package/node_modules/playwright/types/test.d.ts +11074 -0
- package/node_modules/playwright/types/testReporter.d.ts +950 -0
- package/node_modules/playwright-core/LICENSE +202 -0
- package/node_modules/playwright-core/NOTICE +5 -0
- package/node_modules/playwright-core/README.md +3 -0
- package/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
- package/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
- package/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
- package/node_modules/playwright-core/browsers.json +52 -0
- package/node_modules/playwright-core/cli.js +21 -0
- package/node_modules/playwright-core/index.d.ts +17 -0
- package/node_modules/playwright-core/index.js +17 -0
- package/node_modules/playwright-core/index.mjs +28 -0
- package/node_modules/playwright-core/lib/bootstrap.js +88 -0
- package/node_modules/playwright-core/lib/coreBundle.js +75813 -0
- package/node_modules/playwright-core/lib/entry/cliDaemon.js +5 -0
- package/node_modules/playwright-core/lib/entry/dashboardApp.js +3 -0
- package/node_modules/playwright-core/lib/entry/mcp.js +10 -0
- package/node_modules/playwright-core/lib/entry/oopBrowserDownload.js +3 -0
- package/node_modules/playwright-core/lib/package.js +50 -0
- package/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
- package/node_modules/playwright-core/lib/server/electron/loader.js +116 -0
- package/node_modules/playwright-core/lib/serverRegistry.js +1939 -0
- package/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +65 -0
- package/node_modules/playwright-core/lib/tools/cli-client/channelSessions.js +141 -0
- package/node_modules/playwright-core/lib/tools/cli-client/cli.js +6 -0
- package/node_modules/playwright-core/lib/tools/cli-client/help.json +721 -0
- package/node_modules/playwright-core/lib/tools/cli-client/minimist.js +128 -0
- package/node_modules/playwright-core/lib/tools/cli-client/output.js +351 -0
- package/node_modules/playwright-core/lib/tools/cli-client/program.js +418 -0
- package/node_modules/playwright-core/lib/tools/cli-client/registry.js +180 -0
- package/node_modules/playwright-core/lib/tools/cli-client/session.js +259 -0
- package/node_modules/playwright-core/lib/tools/dashboard/appIcon.png +0 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +425 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/element-attributes.md +23 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/request-mocking.md +87 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +241 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +225 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/storage-state.md +275 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +433 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/tracing.md +139 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +143 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/SKILL.md +136 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +144 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/migration.md +89 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/react.md +69 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/typing.md +173 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/vue.md +77 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +174 -0
- package/node_modules/playwright-core/lib/tools/utils/extension.js +112 -0
- package/node_modules/playwright-core/lib/tools/utils/socketConnection.js +108 -0
- package/node_modules/playwright-core/lib/utilsBundle.js +85357 -0
- package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +1890 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/index.html +29 -0
- package/node_modules/playwright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
- package/node_modules/playwright-core/lib/vite/htmlReport/index.html +16 -0
- package/node_modules/playwright-core/lib/vite/htmlReport/report.css +2 -0
- package/node_modules/playwright-core/lib/vite/htmlReport/report.js +32 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-CVQWJZAA.js +32 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +129 -0
- package/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- package/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-BbkfBe3n.js +32 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +182 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-DywYcAf8.js +7 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.Bqk9acqE.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.B4cLoZK3.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.html +44 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +10 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CU5KtEkS.js +5 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
- package/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
- package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
- package/node_modules/playwright-core/lib/xdg-open +1267 -0
- package/node_modules/playwright-core/package.json +34 -0
- package/node_modules/playwright-core/types/protocol.d.ts +24645 -0
- package/node_modules/playwright-core/types/structs.d.ts +52 -0
- package/node_modules/playwright-core/types/types.d.ts +26632 -0
- package/package.json +13 -2
- package/plugins/devflow-core/extensions/devflow-core.ts +432 -7
- package/plugins/devflow-core/runtime/hooks/hook_common.py +514 -0
- package/plugins/devflow-core/runtime/hooks/index_gate.py +47 -16
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/acceptance_test_runner.py +488 -71
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/advance_state.rb +51 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/approval_pins.py +433 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/approval_store.py +137 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/dsl_coverage.py +87 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/dsl_draft.py +53 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/dsl_v1.py +318 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/environment_profile.py +134 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/execution_contract.rb +1 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/execution_surface.py +138 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/playwright_adapter.py +515 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/tc_hash.py +132 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/test_command_policy.py +102 -8
- package/plugins/devflow-core/skills/workflow-orchestrator/scripts/validate_state.rb +13 -0
- package/plugins/devflow-core/skills/workflow-orchestrator/templates/feature-development.yaml +13 -34
- package/plugins/devflow-core/skills/workflow-pipeline/SKILL.md +3 -1
- package/plugins/devflow-core/skills/workflow-pipeline/references/pipeline-flow.md +68 -140
- package/plugins/devflow-core/skills/workflow-project-context/scripts/validate_initialization_database.py +1 -1
- package/plugins/devflow-implementation/skills/workflow-execute-phase/references/execute-phase.md +3 -1
- package/plugins/devflow-intel/extensions/devflow-intel.ts +1 -1
- package/plugins/devflow-intel/skills/workflow-code-index/scripts/code_index.py +23 -4
- package/plugins/devflow-quality/runtime/playwright/devflow-test-dsl-v1.schema.json +872 -0
- package/plugins/devflow-quality/runtime/playwright/playwright.config.mjs +46 -0
- package/plugins/devflow-quality/runtime/playwright/reporter.mjs +311 -0
- package/plugins/devflow-quality/runtime/playwright/runner.spec.mjs +1308 -0
- package/plugins/devflow-quality/runtime/playwright/runtime-manifest.json +11 -0
- package/plugins/devflow-quality/skills/workflow-acceptance-test-design/SKILL.md +3 -0
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/SKILL.md +71 -58
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/api-mainflow-rules.md +20 -15
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/codebase-discovery.md +3 -1
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/intermediate-format.md +115 -192
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/mainflow-selection.md +27 -23
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/project-dsl-contract.md +78 -153
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/ui-mainflow-rules.md +36 -83
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/compile_dsl.py +497 -556
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/export_legacy_testagent.py +647 -0
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/normalize_case_payloads.py +10 -3
- package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/validate_case_payloads.py +165 -275
- package/plugins/devflow-quality/skills/workflow-human-acceptance/SKILL.md +63 -0
- package/plugins/devflow-quality/skills/workflow-release-closeout/SKILL.md +4 -4
- package/plugins/devflow-quality/skills/workflow-run-acceptance-tests/SKILL.md +17 -9
- package/src/approval-store.ts +340 -0
- package/src/cli.ts +10 -0
- package/src/constants.ts +1 -1
- package/src/doctor.ts +268 -2
- package/src/initialization-store.ts +48 -1
- package/src/mcp/auth.ts +103 -0
- package/src/mcp/core.ts +102 -0
- package/src/mcp/server.ts +193 -0
- package/src/mcp/types.ts +5 -0
- package/src/paths.ts +12 -1
- package/src/project-context.ts +24 -1
- package/templates/omp/hook-config.json +6 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"runtime_version": "0.1.0",
|
|
4
|
+
"playwright_version": "1.63.0",
|
|
5
|
+
"files": {
|
|
6
|
+
"runner.spec.mjs": "5612cde9ddef5a203829d86ab45788d65cbe83891ff7dbb73c308aa9345ead83",
|
|
7
|
+
"playwright.config.mjs": "301c0b97e229f83e6934994718b11b93a1da5d46ec606cfd11a8292e9d622b02",
|
|
8
|
+
"reporter.mjs": "5c91d68c50a93603f583cf82345d427bcd9ce9a7cfb78fd6d0989abddbd55275",
|
|
9
|
+
"devflow-test-dsl-v1.schema.json": "21ce608adcaf60ac138b532b7731f3b74c3e2749cba26dfeb12fc12ce0b6e5f3"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -43,6 +43,7 @@ description: "Use after integration verification and before change planning to d
|
|
|
43
43
|
"acceptance_refs": ["AC-0001"],
|
|
44
44
|
"requirement_refs": ["REQ-0001", "BR-0001"],
|
|
45
45
|
"test_type": "api|page|permission|boundary|resilience|migration|performance",
|
|
46
|
+
"execution_surface": "http|ui|api_flow|project_test",
|
|
46
47
|
"target": "外部可观察的 API、页面或运行边界",
|
|
47
48
|
"preconditions": ["身份、数据和环境前置条件"],
|
|
48
49
|
"steps": ["测试操作"],
|
|
@@ -52,6 +53,8 @@ description: "Use after integration verification and before change planning to d
|
|
|
52
53
|
}
|
|
53
54
|
```
|
|
54
55
|
|
|
56
|
+
- `execution_surface` 必须显式填写:单个 Core HTTP 请求且断言来自 `execution` 用 `http`;真实页面交互用 `ui`;受限 DSL 中的多步骤 API 或 UI/API 组合用 `api_flow`;项目自有测试命令、权限、边界、韧性、迁移和性能专项用 `project_test`。`page` 必须对应 `ui`,带 `execution.protocol: http` 的 Core API TC 必须对应 `http`;新冻结 TC 缺失或冲突会被 CP-3 拒绝。
|
|
57
|
+
- `automated` 的 `ui` / `api_flow` TC 在 `run-acceptance-tests` 绑定阶段必须有 v1 DSL(`workflow-generate-mainflow-cases` 生成,`covers` 逐条映射 `preconditions[i]`、`steps[i]` 和 `oracle`)并经用户批准 `execution_plan`,否则只会 blocked。因此每个前置条件和步骤要写成可单独映射的原子条目,oracle 要写成确定性的可观察结果(具体文案、URL、响应字段);需要纯视觉判断、缺少稳定 locator 或无法准备/隔离数据的场景,现在就标 `manual` 或 `blocked`,不要标 `automated`。
|
|
55
58
|
- `manual` 额外写 `manual_reason` 和 `owner`;`blocked` 额外写 `blocked_by` 和 `owner`。
|
|
56
59
|
- `replay`:可用稳定步骤再次触发,必须写 `replay_scope`(`component|page|api|integration`)。页面优先拆到组件、页面、接口或集成边界,不要求 AI 在真实环境盲目重试。
|
|
57
60
|
- `causal`:用于已由 HAR、控制台、DOM 快照、服务日志或请求链路证明首个偏差、但暂不能稳定重放的缺陷。必须写 `causal_evidence_refs`(已有 `SRC-*` / `CODE-*`)和 `first_divergence`;后续执行绑定还必须提供实际证据文件,Core 会哈希留档。没有这些证据不能称为“已证实”。
|
|
@@ -1,55 +1,59 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: workflow-generate-mainflow-cases
|
|
3
|
-
description: "Use after
|
|
3
|
+
description: "Use after code review, as the binding-phase prerequisite of run-acceptance-tests, to compile one deterministic devflow-test-dsl/v1 file per frozen automated ui/api_flow TC, validate the whole generated-cases directory, get an independent AI review, and propose execution_plan approvals for the user."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# 主流程自动化用例生成(Playwright DSL)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
为冻结套件中 `automation_mode: automated` 且 `execution_surface` 为 `ui` 或 `api_flow` 的正向主流程 TC 生成确定性的 `devflow-test-dsl/v1`,每个 TC 一个文件,交给 Devflow Playwright Runtime 执行。**这是 `run-acceptance-tests` 的真实前置条件**:没有 DSL 并经用户批准 `execution_plan` 的自动化 ui/api_flow TC 只会 `blocked(dsl_not_approved)`,不能进入收口。不生成异常、边界、权限、安全、性能专项;这些 TC 按 `run-acceptance-tests` 的降级规则处理。
|
|
9
9
|
|
|
10
10
|
## Hard Rules
|
|
11
11
|
|
|
12
12
|
- MUST NOT hardcode `platform-backend` or `platform-frontend`.
|
|
13
13
|
- MUST derive code roots from `.devflow/planning/navigation` and `.devflow/context/spec`.
|
|
14
14
|
- MUST use `.devflow/planning/code-index/` for fine-grained entrypoint, route, component, API, call, import, and data-flow evidence when present.
|
|
15
|
-
- MUST
|
|
16
|
-
- MUST read
|
|
17
|
-
- MUST NOT
|
|
18
|
-
- MUST run `
|
|
19
|
-
- MUST run `scripts/validate_case_payloads.py` before reporting success.
|
|
15
|
+
- MUST read the frozen `.devflow/planning/requirements/{feature}/tests.json` before selecting scope. Only frozen, `confirmed`, `automation_mode: automated` TCs whose `execution_surface` is `ui` or `api_flow` get a DSL (legacy `page` TCs derive to `ui`). `http` TCs (including Core-generated API TCs with `execution.expect.error_code`) and `project_test` TCs are executed by their own adapters, not here.
|
|
16
|
+
- MUST NOT read `SUMMARY.md`, delivery self-reports, or diffs to decide what to test. Current code is allowed only to bind an already frozen TC to an entrypoint, `data-testid`/locator, request path, or test data; it must never change the TC's steps or oracle.
|
|
17
|
+
- MUST NOT hand-write or hand-edit `TC-xxxx.json`. Write `case-descriptions.json` and run `compile_dsl.py`; the compiler owns `tc_sha256`, target/driver generation, and hard rejections (`ai_only`, Midscene, xpath, scripts, token injection, fixed waits).
|
|
18
|
+
- MUST run `compile_dsl.py`, then `validate_case_payloads.py` on the whole `generated-cases/{feature}` directory, before reporting success. Block if either exits non-zero.
|
|
20
19
|
- MUST block if codebase discovery fails.
|
|
21
|
-
- MUST
|
|
20
|
+
- MUST get an independent AI review of every DSL against its TC oracle (advisory) before proposing approvals. The reviewer must not be the agent that wrote the descriptions.
|
|
21
|
+
- MUST propose one `execution_plan` approval per automated TC with `devflow_approval`; only the user can approve it, in `/devflow` → “待审批”. The agent cannot confirm, must not write approval records, and must not treat an unapproved DSL as accepted.
|
|
22
|
+
- MUST NOT create `case-import-payloads.json`. That name belongs only to the explicit legacy TestAgent export and is never a Runtime DSL artifact (see Legacy export).
|
|
22
23
|
|
|
23
24
|
## Workflow Position
|
|
24
25
|
|
|
25
|
-
This
|
|
26
|
+
This skill is not a workflow step and must not appear in `pending_steps` or participate in main-chain ordering. It runs inside the binding phase of `run-acceptance-tests`:
|
|
26
27
|
|
|
27
|
-
`execute -> code-review
|
|
28
|
+
`execute -> code-review -> [human acceptance] -> generate DSL (this skill) -> bind + user approves execution plans -> run-acceptance-tests -> release closeout`
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
Before running, verify that the current feature's `code-review` is completed and the frozen TC suite is fresh (`devflow_acceptance_tests(feature)`). A generation, validation, or approval failure means the affected TCs cannot run as `devflow_playwright`; report it and either fix it or downgrade the TC (`manual` with a `mode_override` approval, or `blocked` with owner/reason). It never mutates workflow state itself.
|
|
30
31
|
|
|
31
32
|
## Required Outputs
|
|
32
33
|
|
|
33
|
-
Always create or update
|
|
34
|
+
Always create or update, under `.devflow/planning/generated-cases/{feature}/`:
|
|
34
35
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
36
|
+
- `source-map.md` — frozen TC ID, planning evidence, code-index evidence, source files, and the source of every non-testid locator.
|
|
37
|
+
- `mainflow-analysis.md` — included/excluded TCs with reasons (including TCs that need downgrade), assumptions, traceability.
|
|
38
|
+
- `case-descriptions.json` — the AI-written input (`references/intermediate-format.md`).
|
|
39
|
+
- `TC-xxxx.json` — one v1 DSL per automated ui/api_flow TC, written by `compile_dsl.py` only.
|
|
40
|
+
- `validation-report.md` — output of the directory validation.
|
|
41
|
+
- `ai-review.md` — the independent review findings per TC (advisory).
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
Also `.devflow/planning/phases/{phase}/MAINFLOW-CASES.md` (summary) and support artifact `codebase-discovery.json` (written by the discovery script).
|
|
44
|
+
|
|
45
|
+
`case-import-payloads.json` is **not** an output of this skill.
|
|
43
46
|
|
|
44
47
|
## Resource Loading
|
|
45
48
|
|
|
46
49
|
Read these references before generating cases:
|
|
47
50
|
|
|
48
51
|
- `references/codebase-discovery.md` before scanning any source file.
|
|
49
|
-
- `references/mainflow-selection.md` before deciding which
|
|
50
|
-
- `references/intermediate-format.md` before writing `case-descriptions.json
|
|
51
|
-
- `references/
|
|
52
|
-
- `references/
|
|
52
|
+
- `references/mainflow-selection.md` before deciding which TCs become DSL.
|
|
53
|
+
- `references/intermediate-format.md` before writing `case-descriptions.json` (the exact accepted format).
|
|
54
|
+
- `references/project-dsl-contract.md` for the v1 DSL shape, `covers`, and the approval/hash rules.
|
|
55
|
+
- `references/api-mainflow-rules.md` before generating `api_flow` cases.
|
|
56
|
+
- `references/ui-mainflow-rules.md` before generating `ui` cases.
|
|
53
57
|
|
|
54
58
|
## Process
|
|
55
59
|
|
|
@@ -62,7 +66,7 @@ Read these references before generating cases:
|
|
|
62
66
|
|
|
63
67
|
Stop if it exits non-zero.
|
|
64
68
|
|
|
65
|
-
3. Read the frozen TC suite first
|
|
69
|
+
3. Read the frozen TC suite first and list every `automated` TC whose surface is `ui` or `api_flow`. Record the source `TC-*` for each; a missing or stale TC is a blocker. Then read planning inputs when present:
|
|
66
70
|
- `.devflow/planning/requirements/baseline.md`
|
|
67
71
|
- `.devflow/planning/features/{feature}/功能点梳理.md`
|
|
68
72
|
- `.devflow/planning/features/{feature}/UI-SPEC.md`
|
|
@@ -71,57 +75,66 @@ Read these references before generating cases:
|
|
|
71
75
|
- `.devflow/planning/features/{feature}/变更清单.md`
|
|
72
76
|
- `.devflow/planning/features/{feature}/PROGRESS.md`
|
|
73
77
|
|
|
74
|
-
4. Read discovery output, then
|
|
78
|
+
4. Read discovery output, then each discovered codebase's navigation and spec files. Select scan targets by codebase type:
|
|
75
79
|
- Backend: router/controller, service/usecase, schema/dto/request/response, model/entity, API entry.
|
|
76
80
|
- Frontend: router, pages/views, api/client, types/contracts, stores/hooks/components related to the feature.
|
|
77
81
|
|
|
78
|
-
5. If `.devflow/planning/code-index/` exists, query symbols and relations for candidate entrypoints and
|
|
82
|
+
5. If `.devflow/planning/code-index/` exists, query symbols and relations for candidate entrypoints and flows:
|
|
79
83
|
- Backend/API: `routes_to`, `calls`, `reads`, `writes`, `config_uses`, `tested_by`.
|
|
80
84
|
- Frontend/UI: route/page/component symbols, `routes_to`, `imports`, `calls` into API clients, store/hook relations.
|
|
81
|
-
Read `evidence_path:evidence_line` before using an edge
|
|
82
|
-
6. Inspect actual code paths that are both relevant to `{feature}` and reachable from navigation/spec/code-index. Do not scan excluded historical modules.
|
|
83
|
-
7. Write `source-map.md
|
|
84
|
-
8. Write `
|
|
85
|
-
9.
|
|
86
|
-
10. Compile descriptions into strict DSL:
|
|
85
|
+
Read `evidence_path:evidence_line` before using an edge.
|
|
86
|
+
6. Inspect actual code paths that are both relevant to `{feature}` and reachable from navigation/spec/code-index. Prefer `data-testid` for locators. Do not scan excluded historical modules.
|
|
87
|
+
7. Write `source-map.md`, then `mainflow-analysis.md`.
|
|
88
|
+
8. Write `case-descriptions.json` using `references/intermediate-format.md`: one case per TC, locator strings such as `"testid:save-btn"`, `"role:button:确定"`, `"label:用户名"`, and a `covers` mapping that covers every precondition, every step, and the oracle of the TC. Do NOT write raw DSL.
|
|
89
|
+
9. Compile (writes one `TC-xxxx.json` per TC into `.devflow/planning/generated-cases/{feature}/`; all-or-nothing):
|
|
87
90
|
|
|
88
91
|
```text
|
|
89
|
-
devflow_mainflow(action="compile", args=[".devflow/planning/generated-cases/{feature}/case-descriptions.json", "--
|
|
92
|
+
devflow_mainflow(action="compile", args=[".devflow/planning/generated-cases/{feature}/case-descriptions.json", "--feature", "{feature}"])
|
|
90
93
|
```
|
|
91
94
|
|
|
92
|
-
Stop if it exits non-zero.
|
|
95
|
+
Stop and fix the descriptions if it exits non-zero. Do not pass `--output`: it no longer exists (only `--output-dir`, whose default is already the directory above) and the compiler rejects it. Compiler warnings (non-testid locators, high-risk texts) go into `source-map.md`/the handoff; prefer replacing them by a `data-testid`.
|
|
93
96
|
|
|
94
|
-
|
|
97
|
+
10. Validate the whole directory (pure data, never loads project code):
|
|
95
98
|
|
|
96
99
|
```text
|
|
97
|
-
devflow_mainflow(action="validate", args=[".devflow/planning/generated-cases/{feature}
|
|
100
|
+
devflow_mainflow(action="validate", args=[".devflow/planning/generated-cases/{feature}", "--suite", ".devflow/planning/requirements/{feature}/tests.json", "--output", ".devflow/planning/generated-cases/{feature}/validation-report.md"])
|
|
98
101
|
```
|
|
99
102
|
|
|
100
|
-
Stop if it exits non-zero.
|
|
103
|
+
Stop if it exits non-zero. Read the warnings: an automated ui/api_flow TC listed as having no DSL will be blocked as `dsl_not_approved`.
|
|
104
|
+
|
|
105
|
+
11. Independent AI review (advisory). Have a different agent than the author review each DSL against its frozen TC: read only the TC (`preconditions`, `steps`, `oracle`) and the DSL, and list omissions, weak assertions, assertions on the wrong object, ambiguous or unstable locators, missing data isolation, and any step that does not follow from the TC. Write the findings per TC to `ai-review.md`. Serious findings should be fixed by editing `case-descriptions.json` and repeating steps 9–11; any DSL byte change invalidates approval for that TC. The review never counts as a pass.
|
|
106
|
+
|
|
107
|
+
12. Propose an execution plan per automated TC (one item per TC; `dsl_file` defaults to `.devflow/planning/generated-cases/{feature}/{tc_id}.json`):
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
devflow_approval(action="propose", feature="{feature}", kind="execution_plan",
|
|
111
|
+
items=[{"subject":"TC-0001","dsl_file":".devflow/planning/generated-cases/{feature}/TC-0001.json","review_issues":["<advisory issue from ai-review.md>"],"note":"<optional context>"}])
|
|
112
|
+
```
|
|
101
113
|
|
|
102
|
-
|
|
103
|
-
- Generated case count by tag.
|
|
104
|
-
- Import payload path.
|
|
105
|
-
- Validation status.
|
|
106
|
-
- Source evidence index.
|
|
107
|
-
- Any environment data needed before execution.
|
|
114
|
+
Core pins `suite_graph_revision`, `suite_fingerprint`, `tc_sha256` and `dsl_sha256` and re-runs structural validation; the proposal is all-or-nothing. It requires database authority. Then ask the user to review each TC (oracle text, covering assertions, review issues) and decide in `/devflow` → “待审批”. Re-running `devflow_approval(action="list", feature="{feature}")` shows proposal status; do not wait on, simulate, or write approvals.
|
|
108
115
|
|
|
109
|
-
|
|
116
|
+
13. Write `.devflow/planning/phases/{phase}/MAINFLOW-CASES.md` summarizing: TC IDs and DSL paths, validation status, review issues, approval proposal status, downgrade candidates, environment data/profile needed.
|
|
117
|
+
14. Report success only after compile, validate, and propose succeeded. Return a handoff containing the source TC IDs, DSL directory, `validation-report.md` and `ai-review.md` paths, proposal IDs/status, required environment/test data, TCs without DSL, and any gaps. Do not advance workflow state.
|
|
118
|
+
|
|
119
|
+
If a TC's DSL needs to change after it was approved (TC refrozen, code changed, review findings), recompile, revalidate, re-review, and propose again. Recompiling an unchanged description yields byte-identical output, so existing approvals stay valid.
|
|
110
120
|
|
|
111
121
|
## AI Scope
|
|
112
122
|
|
|
113
123
|
AI is responsible for semantic judgment only:
|
|
114
124
|
|
|
115
|
-
-
|
|
116
|
-
- Confirm implemented behavior from actual code.
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
|
|
125
|
+
- Decide which frozen TCs are eligible and which need downgrade.
|
|
126
|
+
- Confirm implemented behavior from actual code and bind entrypoints, locators, request paths, and data.
|
|
127
|
+
- Write `case-descriptions.json` faithful to each TC and its `covers`.
|
|
128
|
+
- Record source evidence in `source-map.md`.
|
|
129
|
+
- Review (as a different agent) each DSL against the oracle.
|
|
130
|
+
|
|
131
|
+
AI is NOT responsible for, and cannot override:
|
|
132
|
+
|
|
133
|
+
- DSL formatting, `tc_sha256`, target key selection, and step ID assignment (`compile_dsl.py`).
|
|
134
|
+
- Schema, semantic, secret-literal, and structural coverage checks (Core `dsl_v1`/`dsl_coverage` via `validate_case_payloads.py`).
|
|
135
|
+
- The approval of an execution plan or environment profile (only the user, in `/devflow`).
|
|
136
|
+
- Any pass/fail verdict (only Core's `run-acceptance-tests`).
|
|
137
|
+
|
|
138
|
+
## Legacy export
|
|
139
|
+
|
|
140
|
+
Only when a developer explicitly asks for a TestAgent import file, run `scripts/export_legacy_testagent.py` directly with a separate legacy-format input and an explicit `--output` (for example `.devflow/planning/generated-cases/{feature}/legacy-testagent-import.json`). It is not exposed by `devflow_mainflow`, is not part of the gate, and its output cannot be bound to `devflow_playwright`, approved as an execution plan, or counted as an acceptance result. Never write its output as `TC-xxxx.json` and never describe it as a Runtime DSL artifact.
|
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
# API Mainflow Rules
|
|
2
2
|
|
|
3
|
-
API
|
|
3
|
+
这里的 API 用例指冻结的、自动化的 `execution_surface: api_flow` TC:需要多步骤链式请求(变量提取、前后依赖)或 UI/API 组合,用 v1 DSL 表达。单个 Core HTTP 请求且断言来自冻结 TC 的 `execution` 的 API TC 是 `execution_surface: http`,由 Core 的 `http` adapter 直接执行,**不**生成 DSL;带 `execution.expect.error_code` 的异常码 TC 同理,本 Skill 不处理。
|
|
4
|
+
|
|
5
|
+
AI 写 `case-descriptions.json`(`intermediate-format.md`),`compile_dsl.py` 生成 `TC-xxxx.json`(`project-dsl-contract.md`)。
|
|
4
6
|
|
|
5
7
|
## Step Rules
|
|
6
8
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
9
|
+
- 每个请求是一个 API 步骤:`action` 写 `request` 并给 `method`,或直接写 `get`/`post`/`put`/`patch`/`delete`(`head`/`options` 不支持)。
|
|
10
|
+
- `url` 必填:以 `/` 开头相对已批准 profile 的 `api_base_url`(缺省 `base_url`);绝对 URL 的 origin 必须在 profile `api_origins` 中。不要把环境相关主机写死,也不要写变量 `${base_url}`(不是内置变量)。
|
|
11
|
+
- 查询参数写 `query`(标量),请求体写 `json`,请求头写 `headers`。
|
|
12
|
+
- 成功断言:`expect_status`,以及响应体断言 `assertions: [{ "pointer": "/data/status", "op": "equals", "value": "created" }]`(`op`:`equals`/`not_equals`/`contains`/`exists`/`not_exists`,JSON Pointer)。只写 `expect_status: 200` 且没有响应体断言,覆盖 oracle 时会被判为弱断言。没有 `status_code`/`json_path_*`/`regex` 之类旧断言类型。
|
|
13
|
+
- 用 `extract: { "order_id": "/data/id" }` 把 id 提取成变量,后续步骤用 `${order_id}`。只支持 JSON Pointer;提取到的令牌等敏感值写 `{ "pointer": "...", "sensitive": true }`。
|
|
14
|
+
- 步骤按写入顺序执行,没有 `depends_on`;失败即停止。
|
|
15
|
+
- 默认不重试;只有传输失败才可声明 `retry`,POST/PATCH 还需 `idempotent: true`。
|
|
16
|
+
- 凭据用 `variables` 的 `{ "secret": "ENV_KEY" }`,请求头写 `"Authorization": "Bearer ${auth_token}"`;不得出现 token/密码/cookie 字面量。
|
|
17
|
+
- 需要前置数据用 `data.setup`,清理用 `data.cleanup`(都只能是 API 步骤)。
|
|
15
18
|
|
|
16
|
-
##
|
|
19
|
+
## covers 与 TC 忠实性
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
- TC 的每个前置条件(对应 `data.setup` 或步骤的 `covers.preconditions`)、每个步骤都要被某个 DSL 步骤覆盖,oracle 要被带 `assertions`/`expect_status` 的主流程 API 步骤覆盖:`covers: ["oracle"]`。
|
|
22
|
+
- DSL 不得增删或改写 TC 的步骤与 oracle;源码只补充路径、字段名和请求体。
|
|
23
|
+
|
|
24
|
+
## Source Evidence
|
|
19
25
|
|
|
20
|
-
|
|
21
|
-
- Code: router/controller and service/usecase, plus schema/model when they define the contract.
|
|
26
|
+
每个 case 在 `source-map.md` 里至少引用一份规划产物(后端技术方案、变更清单、功能点梳理或需求基线)和一份代码产物(路由/控制器、service/usecase,以及定义契约的 schema/model)。证据不写入 DSL。
|
|
22
27
|
|
|
23
28
|
## Positive Mainflow Boundary
|
|
24
29
|
|
|
25
|
-
|
|
30
|
+
生成范围:当前功能的创建/查询/详情/更新/执行成功链路。
|
|
26
31
|
|
|
27
|
-
|
|
32
|
+
不生成:非法请求、未授权、资源缺失、校验错误、冲突、重试/超时场景、性能场景。这些 TC 走 Core HTTP adapter、项目自有 command 或降级为 `manual`/`blocked`。
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Use discovery before reading feature source files. The goal is to make the skill portable across projects that have valid `.devflow/planning` and `.devflow/context/spec` initialization artifacts.
|
|
4
4
|
|
|
5
|
+
Discovery only locates code roots so that entrypoints, `data-testid`s, routes, and request shapes can be read for the frozen TCs. It is **not** an input to compilation or validation: `validate_case_payloads.py` is pure data and never loads project code (`--discovery` is deprecated and ignored).
|
|
6
|
+
|
|
5
7
|
## Required Sources
|
|
6
8
|
|
|
7
9
|
Read and cross-check:
|
|
@@ -43,7 +45,7 @@ Use `codebase-discovery.json` fields:
|
|
|
43
45
|
- `codebases[].stack_key`
|
|
44
46
|
- `codebases[].scan_profile`
|
|
45
47
|
|
|
46
|
-
Current project discovery should resolve `BACKEND` and `FRONTEND`, but this is an output fact, not a skill rule.
|
|
48
|
+
Current project discovery should resolve `BACKEND` and `FRONTEND`, but this is an output fact, not a skill rule. Reading a codebase only supplies binding facts (entry URL, locator, request path); it never changes a frozen TC's steps or oracle.
|
|
47
49
|
|
|
48
50
|
## Scan Range By Type
|
|
49
51
|
|