swipium 1.5.0 → 2.0.0
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/CHANGELOG.md +171 -0
- package/README.md +173 -280
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +30 -27
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +47 -21
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +2 -2
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +3 -3
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +2 -2
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +2 -2
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/issues.js +10 -10
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +5 -5
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +77 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +2 -2
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +3 -3
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +1 -1
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +17 -17
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +55 -7
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +3 -3
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +5 -5
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +10 -10
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +3 -3
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +1 -1
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +7 -7
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +3 -3
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +14 -25
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +5 -5
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +2 -2
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +13 -7
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +5 -5
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +265 -106
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +71 -26
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +276 -105
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +6 -4
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +20 -8
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +2 -2
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +7 -7
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +35 -14
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +6 -6
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +45 -14
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +6 -6
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +3 -3
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +65 -62
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +300 -36
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +120 -7
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +350 -50
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +2 -2
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +5 -5
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/policy.js +5 -5
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +301 -284
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +1 -1
- package/dist/featureTesting/executionBootstrap.js +29 -30
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +2 -2
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +12 -12
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +7 -7
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +10 -10
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +6 -6
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +4 -4
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +1 -1
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +1 -1
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +11 -11
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +3 -3
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +5 -5
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +11 -11
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +8 -8
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +9 -9
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +5 -5
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +33 -3
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +20 -10
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/pack.js +3 -3
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +111 -23
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +153 -57
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +50 -5
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +4 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/issues/classify.js +16 -16
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +24 -4
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +94 -31
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +4 -4
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +4 -4
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +4 -4
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +75 -7
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +32 -7
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +1 -1
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +370 -31
- package/dist/lib/lockfile.js.map +1 -1
- package/dist/lib/needsInput.js +3 -3
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +2 -2
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +79 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +3 -3
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +3 -2
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +52 -10
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +294 -15
- package/dist/lib/wda.js.map +1 -1
- package/dist/mobileAudit/checks.js +12 -12
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +1 -1
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +3 -3
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +72 -18
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +219 -36
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +63 -17
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +13 -13
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +4 -4
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +62 -21
- package/dist/orchestration/testThis/execute.js.map +1 -1
- package/dist/orchestration/testThis/pipeline.js +119 -30
- package/dist/orchestration/testThis/pipeline.js.map +1 -1
- package/dist/orchestration/testThis/plan.js +162 -73
- package/dist/orchestration/testThis/plan.js.map +1 -1
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +34 -16
- package/dist/orchestration/testThis/terminal.js.map +1 -1
- package/dist/orchestration/testThis/types.js +1 -1
- package/dist/orchestration/testThis/types.js.map +1 -1
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +22 -22
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/export.js +392 -37
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/policy.js +7 -4
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +8 -8
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +472 -45
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +2 -2
- package/dist/services/build.js.map +1 -1
- package/dist/{tools → services}/flowGenerate.js +29 -13
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +4 -4
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +46 -8
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +24 -9
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +100 -45
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +32 -16
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +28 -3
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +40 -27
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +270 -6
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +317 -48
- package/dist/session/processRegistry.js.map +1 -1
- package/dist/session/progress.js +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +275 -48
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +53 -8
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +28 -4
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +11 -5
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +46 -2
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +9 -5
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +4 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +50 -41
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +9 -7
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +4 -4
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +13 -9
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +5 -5
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +5 -5
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +3 -3
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +794 -164
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +451 -128
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +69 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +188 -130
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +32 -42
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +21 -31
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +55 -12
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +76 -24
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +68 -28
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +41 -47
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +31 -48
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +34 -41
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +183 -103
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +25 -13
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +52 -89
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/getArtifact.js +16 -5
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +15 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +45 -223
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +251 -35
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +41 -16
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +36 -35
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +50 -45
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +31 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +26 -26
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +10 -16
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +117 -50
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +11 -22
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +11 -15
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +78 -24
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +23 -21
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +23 -16
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +20 -16
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +155 -118
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +104 -116
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +72 -43
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +30 -20
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +24 -28
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +686 -210
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -38
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +187 -57
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +31 -22
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +53 -6
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +80 -12
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +194 -128
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +812 -152
- package/package.json +3 -2
- package/dist/tools/assertVisual.js +0 -84
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -179
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -86
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/locator.js +0 -85
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/permissions.js +0 -174
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -52
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -76
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -133
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -217
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -106
- package/dist/tools/visualText.js.map +0 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
// Defense in depth against secret leaks into GENERATED assets and persisted state.
|
|
2
|
+
//
|
|
3
|
+
// The recorder (qa_act) is supposed to mark a value typed into a secure field as `secret` and
|
|
4
|
+
// record a ${VAR} placeholder. But a registered secret (session.secrets) typed into a field the UI
|
|
5
|
+
// does NOT flag as secure is recorded as a plain literal, and every generator downstream (flow YAML,
|
|
6
|
+
// POM/suite, Appium JS/TS/Python, test cases, test-suite.json) would then write it in plaintext.
|
|
7
|
+
//
|
|
8
|
+
// This module is the emit-time backstop every generator and the session persister go through:
|
|
9
|
+
// - secretSafeActions: rewrite recorded actions so any literal that EQUALS or CONTAINS a registered
|
|
10
|
+
// secret becomes a secret step (placeholder var, needs-human-data), never the raw value;
|
|
11
|
+
// - findSecretLeaks / assertNoSecretLeaks: scan generated text for registered secret values
|
|
12
|
+
// (raw + XML/JSON-encoded spellings) and FAIL generation loudly instead of writing a leak.
|
|
13
|
+
import { makeRedactor, REDACTED, TOKEN_REDACTION_MIN } from '../lib/redact.js';
|
|
14
|
+
/** Registered secret values, de-duplicated and non-empty. */
|
|
15
|
+
function secretList(secrets) {
|
|
16
|
+
if (!secrets)
|
|
17
|
+
return [];
|
|
18
|
+
return [...new Set([...secrets].filter((s) => typeof s === 'string' && s.length > 0))];
|
|
19
|
+
}
|
|
20
|
+
/** A "weak" (dictionary-like / short) secret: QA passwords such as "test", "admin", "demo",
|
|
21
|
+
* "password", "Login": letters only, or a short alphanumeric run. Substring-matching these would
|
|
22
|
+
* flag template text ("testID", "tests:") and structural identifiers (resource_id "password",
|
|
23
|
+
* screen "Login"), so they are matched as whole tokens / whole string literals only. Anything with
|
|
24
|
+
* a symbol, or a longer mixed alphanumeric value, stays a "strong" secret (substring-matched). */
|
|
25
|
+
export function isWeakSecret(value) {
|
|
26
|
+
if (!/^[\p{L}\p{N}_-]+$/u.test(value))
|
|
27
|
+
return false;
|
|
28
|
+
return /^\p{L}+$/u.test(value) || value.length < 8;
|
|
29
|
+
}
|
|
30
|
+
const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
31
|
+
/** Redactor used for recorded USER CONTENT (typed text, url, assertion prose): strong secrets are
|
|
32
|
+
* scrubbed as substrings (session-redactor rules); weak secrets only as whole tokens. */
|
|
33
|
+
function contentRedactor(secrets) {
|
|
34
|
+
const strong = makeRedactor(secrets.filter((s) => !isWeakSecret(s)));
|
|
35
|
+
const weak = secrets
|
|
36
|
+
.filter((s) => isWeakSecret(s))
|
|
37
|
+
.sort((a, b) => b.length - a.length)
|
|
38
|
+
.map((s) => new RegExp(`(?<![\\p{L}\\p{N}_])${escapeRe(s)}(?![\\p{L}\\p{N}_])`, 'gu'));
|
|
39
|
+
const r = (v) => {
|
|
40
|
+
if (!v)
|
|
41
|
+
return v;
|
|
42
|
+
let out = strong(v) ?? v;
|
|
43
|
+
for (const re of weak)
|
|
44
|
+
out = out.replace(re, REDACTED);
|
|
45
|
+
return out;
|
|
46
|
+
};
|
|
47
|
+
return r;
|
|
48
|
+
}
|
|
49
|
+
/** True when `value` is, or contains, a registered secret (exact match for any length; substring /
|
|
50
|
+
* token match with the same rules as the session redactor). */
|
|
51
|
+
export function containsSecret(value, secrets, redact) {
|
|
52
|
+
if (!value)
|
|
53
|
+
return false;
|
|
54
|
+
if (secrets.includes(value))
|
|
55
|
+
return true;
|
|
56
|
+
return (redact(value) ?? value) !== value;
|
|
57
|
+
}
|
|
58
|
+
const PLACEHOLDER_RE = /^\$\{[^}]+\}$/;
|
|
59
|
+
/** The session's stored inputs as bindings (varName > raw value, secret flag from metadata). */
|
|
60
|
+
export function inputBindings(session) {
|
|
61
|
+
const out = [];
|
|
62
|
+
for (const [varName, value] of session.inputValues ?? new Map()) {
|
|
63
|
+
if (typeof value !== 'string' || !value)
|
|
64
|
+
continue;
|
|
65
|
+
const meta = session.inputs?.find((i) => i.varName === varName);
|
|
66
|
+
out.push({ varName, value, secret: meta?.secret ?? false });
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/** Recorded typed text that equals a stored session input value > that input's `${VAR}` placeholder
|
|
71
|
+
* (secret inputs AND non-secret ones such as SWIPIUM_TEST_EMAIL). Returns undefined otherwise. */
|
|
72
|
+
export function inputPlaceholderFor(text, inputs) {
|
|
73
|
+
if (!text || !inputs?.length || PLACEHOLDER_RE.test(text))
|
|
74
|
+
return undefined;
|
|
75
|
+
return inputs.find((b) => b.value === text);
|
|
76
|
+
}
|
|
77
|
+
/** A flow-variable name the runner can resolve from the environment: SWIPIUM_-prefixed, [A-Za-z0-9_]. */
|
|
78
|
+
export function swipiumVarName(name) {
|
|
79
|
+
const n = name.replace(/[^A-Za-z0-9_]/g, '_');
|
|
80
|
+
return /^SWIPIUM_/.test(n) ? n : `SWIPIUM_${n}`;
|
|
81
|
+
}
|
|
82
|
+
/** ONE naming rule for secret placeholders across every generator (flow YAML, POM/suite, Appium).
|
|
83
|
+
* Every emitted name is SWIPIUM_-prefixed. The flow runner resolves env vars ONLY for SWIPIUM_*
|
|
84
|
+
* names, so a generated flow replays from env in CI:
|
|
85
|
+
* reuse a meaningful ${VAR} already on the step (e.g. a stored input's SWIPIUM_TEST_PASSWORD; an
|
|
86
|
+
* unprefixed name gets the SWIPIUM_ prefix), but rename a generic recorder placeholder (SECRET_N);
|
|
87
|
+
* else name it from the field (password/otp/token/pin > SWIPIUM_TEST_*), else SWIPIUM_SECRET_N. */
|
|
88
|
+
export function secretVarName(a, index) {
|
|
89
|
+
const existing = a.text?.match(/^\$\{([^}]+)\}$/);
|
|
90
|
+
if (existing && !/^SECRET_\d+$/i.test(existing[1]))
|
|
91
|
+
return swipiumVarName(existing[1]);
|
|
92
|
+
const key = `${a.selector ?? ''}`.toLowerCase();
|
|
93
|
+
if (/pass/.test(key))
|
|
94
|
+
return 'SWIPIUM_TEST_PASSWORD';
|
|
95
|
+
if (/otp|code|2fa|mfa/.test(key))
|
|
96
|
+
return 'SWIPIUM_TEST_OTP';
|
|
97
|
+
if (/token|api[_-]?key/.test(key))
|
|
98
|
+
return 'SWIPIUM_TEST_TOKEN';
|
|
99
|
+
if (/pin/.test(key))
|
|
100
|
+
return 'SWIPIUM_TEST_PIN';
|
|
101
|
+
return `SWIPIUM_SECRET_${index}`;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Return a COPY of `actions` in which no registered secret value survives in recorded USER CONTENT:
|
|
105
|
+
* - a `type` step whose literal text equals a stored session input becomes that input's ${VAR}
|
|
106
|
+
* (secret input > secret step; non-secret input such as an email stays a data placeholder);
|
|
107
|
+
* - a `type` step whose literal text equals/contains a secret becomes a secret step (text dropped so
|
|
108
|
+
* the generators allocate an env-var placeholder; exportability needs-human-data);
|
|
109
|
+
* - user-content prose (url, assertion, warning, OCR text) containing a secret is redacted.
|
|
110
|
+
* Selector / screen / action / id fields are NEVER rewritten: a resource_id "password" or a screen
|
|
111
|
+
* "Login" is a locator, not a leak, and rewriting it to «redacted» makes the step unreplayable (and
|
|
112
|
+
* persisted state.json would carry the broken locator across a restart).
|
|
113
|
+
* Existing ${VAR} placeholders are kept. Input actions are never mutated.
|
|
114
|
+
*/
|
|
115
|
+
export function secretSafeActions(actions, secretsIn, inputs) {
|
|
116
|
+
const secrets = secretList(secretsIn);
|
|
117
|
+
if (!secrets.length && !inputs?.length)
|
|
118
|
+
return { actions, converted: 0 };
|
|
119
|
+
const redact = contentRedactor(secrets);
|
|
120
|
+
const scrub = (v) => (v ? (secrets.includes(v) ? REDACTED : (redact(v) ?? v)) : v);
|
|
121
|
+
let converted = 0;
|
|
122
|
+
const out = actions.map((a) => {
|
|
123
|
+
let next = a;
|
|
124
|
+
if (a.action === 'type' && a.text && !PLACEHOLDER_RE.test(a.text)) {
|
|
125
|
+
const bound = inputPlaceholderFor(a.text, inputs);
|
|
126
|
+
if (bound) {
|
|
127
|
+
const secret = bound.secret || containsSecret(a.text, secrets, redact);
|
|
128
|
+
next = {
|
|
129
|
+
...a,
|
|
130
|
+
text: `\${${swipiumVarName(bound.varName)}}`,
|
|
131
|
+
...(secret ? { secret: true, exportability: 'needs-human-data' } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
else if (secrets.length && containsSecret(a.text, secrets, redact)) {
|
|
135
|
+
next = { ...a, text: undefined, secret: true, exportability: 'needs-human-data' };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (secrets.length) {
|
|
139
|
+
const url = scrub(next.url);
|
|
140
|
+
const assertion = scrub(next.assertion);
|
|
141
|
+
const warning = scrub(next.warning);
|
|
142
|
+
const ocr = next.provenance?.visual?.ocrText;
|
|
143
|
+
const ocrScrubbed = scrub(ocr);
|
|
144
|
+
if (url !== next.url || assertion !== next.assertion || warning !== next.warning || ocrScrubbed !== ocr) {
|
|
145
|
+
next = { ...next, url, assertion, warning };
|
|
146
|
+
if (ocrScrubbed !== ocr && next.provenance?.visual)
|
|
147
|
+
next.provenance = { ...next.provenance, visual: { ...next.provenance.visual, ocrText: ocrScrubbed } };
|
|
148
|
+
for (const k of ['url', 'assertion', 'warning'])
|
|
149
|
+
if (next[k] === undefined)
|
|
150
|
+
delete next[k];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (next !== a)
|
|
154
|
+
converted++;
|
|
155
|
+
return next;
|
|
156
|
+
});
|
|
157
|
+
return { actions: converted ? out : actions, converted };
|
|
158
|
+
}
|
|
159
|
+
/** Structural identifiers of a recording (selectors, screen names/signatures, provenance ids): a
|
|
160
|
+
* weak secret equal to one of these is a LOCATOR in generated output, not a leaked value. */
|
|
161
|
+
export function structuralLiterals(actions) {
|
|
162
|
+
const out = new Set();
|
|
163
|
+
for (const a of actions ?? []) {
|
|
164
|
+
for (const v of [
|
|
165
|
+
a.selector,
|
|
166
|
+
a.screen,
|
|
167
|
+
a.screenSig,
|
|
168
|
+
a.provenance?.resourceId,
|
|
169
|
+
a.provenance?.accessibilityLabel,
|
|
170
|
+
a.provenance?.selectorValue,
|
|
171
|
+
a.provenance?.text,
|
|
172
|
+
a.provenance?.className,
|
|
173
|
+
a.provenance?.originalScreenSignature,
|
|
174
|
+
])
|
|
175
|
+
if (typeof v === 'string' && v)
|
|
176
|
+
out.add(v);
|
|
177
|
+
}
|
|
178
|
+
return [...out];
|
|
179
|
+
}
|
|
180
|
+
/** Redactor for GENERATED structured output (test-suite.json cases…): strong secrets are scrubbed
|
|
181
|
+
* as substrings everywhere (session-redactor rules); a weak secret only when a WHOLE string value
|
|
182
|
+
* equals it and that value is not a structural identifier of the recording (selector/screen),
|
|
183
|
+
* never inside template prose or locators. */
|
|
184
|
+
export function generatedOutputRedactor(secretsIn, structuralIn) {
|
|
185
|
+
const secrets = secretList(secretsIn);
|
|
186
|
+
const strong = makeRedactor(secrets.filter((s) => !isWeakSecret(s)));
|
|
187
|
+
const weak = new Set(secrets.filter((s) => isWeakSecret(s)));
|
|
188
|
+
const structural = new Set(structuralIn ?? []);
|
|
189
|
+
const r = (v) => {
|
|
190
|
+
if (!v)
|
|
191
|
+
return v;
|
|
192
|
+
if (weak.has(v) && !structural.has(v))
|
|
193
|
+
return REDACTED;
|
|
194
|
+
return strong(v) ?? v;
|
|
195
|
+
};
|
|
196
|
+
return r;
|
|
197
|
+
}
|
|
198
|
+
/** Whole string-literal occurrence of `s` in VALUE position: "s" / 's' / `s` (not an object key
|
|
199
|
+
* `"s":`), or a bare YAML scalar value (`key: s`, `- s`). */
|
|
200
|
+
function weakLiteralRe(s) {
|
|
201
|
+
const e = escapeRe(s);
|
|
202
|
+
return new RegExp(`(["'\`])${e}\\1(?!\\s*:)|(?:^|:\\s|-\\s)\\s*${e}\\s*(?:#.*)?$`, 'u');
|
|
203
|
+
}
|
|
204
|
+
/** Find registered secret values in generated file contents, comments included.
|
|
205
|
+
* - strong secrets (symbols / long mixed values): raw or XML/JSON-encoded SUBSTRING, anywhere;
|
|
206
|
+
* - weak secrets (dictionary-like / short, see isWeakSecret): only where the generated text carries
|
|
207
|
+
* the value as a whole string literal / scalar value (an emitted data literal), and not when that
|
|
208
|
+
* value is one of the recording's structural identifiers (a selector or screen name). Template
|
|
209
|
+
* text ("testID", "tests:", "tests/x.smoke.yaml") never matches. */
|
|
210
|
+
export function findSecretLeaks(files, secretsIn, opts = {}) {
|
|
211
|
+
const secrets = secretList(secretsIn);
|
|
212
|
+
if (!secrets.length)
|
|
213
|
+
return [];
|
|
214
|
+
const structural = new Set(opts.structural ?? []);
|
|
215
|
+
const redact = makeRedactor(secrets.filter((s) => !isWeakSecret(s)));
|
|
216
|
+
const weak = secrets.filter((s) => isWeakSecret(s) && s.length >= TOKEN_REDACTION_MIN && !structural.has(s)).map(weakLiteralRe);
|
|
217
|
+
const leaks = [];
|
|
218
|
+
for (const f of files) {
|
|
219
|
+
const lines = f.content.split('\n');
|
|
220
|
+
// Same matching rules as the session redactor (values < 3 chars are not matched: they would
|
|
221
|
+
// flag ordinary step numbers/words; recorded actions are already rewritten on exact equality).
|
|
222
|
+
lines.forEach((line, i) => {
|
|
223
|
+
if ((redact(line) ?? line) !== line || weak.some((re) => re.test(line)))
|
|
224
|
+
leaks.push({ path: f.path, line: i + 1 });
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return leaks;
|
|
228
|
+
}
|
|
229
|
+
/** Thrown when generated output would contain a registered secret value. Callers must NOT write. */
|
|
230
|
+
export class SecretLeakError extends Error {
|
|
231
|
+
leaks;
|
|
232
|
+
code = 'SECRET_IN_GENERATED_OUTPUT';
|
|
233
|
+
constructor(leaks, where) {
|
|
234
|
+
super(`${where}: refusing to write generated output: a registered secret value would be written in plaintext ` +
|
|
235
|
+
`(${leaks
|
|
236
|
+
.slice(0, 5)
|
|
237
|
+
.map((l) => `${l.path}:${l.line}`)
|
|
238
|
+
.join(', ')}${leaks.length > 5 ? `, +${leaks.length - 5} more` : ''})`);
|
|
239
|
+
this.leaks = leaks;
|
|
240
|
+
this.name = 'SecretLeakError';
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/** Throw SecretLeakError when any file contains a registered secret value. */
|
|
244
|
+
export function assertNoSecretLeaks(files, secrets, where, opts = {}) {
|
|
245
|
+
const leaks = findSecretLeaks(files, secrets, opts);
|
|
246
|
+
if (leaks.length)
|
|
247
|
+
throw new SecretLeakError(leaks, where);
|
|
248
|
+
}
|
|
249
|
+
/** Redact registered secret values from qa_note prose (workflow/reason/setup text) before notes feed
|
|
250
|
+
* generated test cases or persisted state. URIs and structured fields are left alone. */
|
|
251
|
+
export function secretSafeNotes(notes, secretsIn) {
|
|
252
|
+
const secrets = secretList(secretsIn);
|
|
253
|
+
if (!secrets.length)
|
|
254
|
+
return notes;
|
|
255
|
+
const redact = makeRedactor(secrets);
|
|
256
|
+
const r = (v) => (v ? (redact(v) ?? v) : v);
|
|
257
|
+
return notes.map((n) => ({
|
|
258
|
+
...n,
|
|
259
|
+
workflow: r(n.workflow) ?? n.workflow,
|
|
260
|
+
reason: r(n.reason),
|
|
261
|
+
missingPrecondition: r(n.missingPrecondition),
|
|
262
|
+
requiredState: r(n.requiredState),
|
|
263
|
+
recommendedSetup: r(n.recommendedSetup),
|
|
264
|
+
}));
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=secretGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretGuard.js","sourceRoot":"","sources":["../../src/suite/secretGuard.ts"],"names":[],"mappings":"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"}
|
package/dist/suite/testcase.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Test-case documentation
|
|
1
|
+
// Test-case documentation: turn a generated POM suite + the session's observed
|
|
2
2
|
// state into an industry-style test case catalog (TC-xxx) with preconditions, steps, expected
|
|
3
3
|
// result, automation status, known blockers, and last-run evidence. PURE; callers serialize.
|
|
4
4
|
import { stringify } from 'yaml';
|
|
@@ -18,6 +18,8 @@ function humanStep(s) {
|
|
|
18
18
|
return `Open ${s.url}`;
|
|
19
19
|
case 'assertVisible':
|
|
20
20
|
return `Verify "${s.text}" is visible on ${s.page}`;
|
|
21
|
+
case 'visualCheck':
|
|
22
|
+
return `MANUAL visual check on ${s.page}: ${s.text}`;
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
export function generateTestCases(pom, opts) {
|
|
@@ -25,11 +27,11 @@ export function generateTestCases(pom, opts) {
|
|
|
25
27
|
const fixtures = opts.fixtures ?? [];
|
|
26
28
|
const notes = opts.notes ?? [];
|
|
27
29
|
const replayStatus = opts.replayStatus ?? 'not_replayed';
|
|
28
|
-
// Automation status from the locator audit: any brittle locator
|
|
30
|
+
// Automation status from the locator audit: any brittle locator > partial, else automated.
|
|
29
31
|
const status = pom.audit.brittle > 0 ? 'partial' : 'automated';
|
|
30
32
|
const knownBlockers = notes
|
|
31
33
|
.filter((n) => n.outcome === 'blocked' || n.category === 'missing_test_data')
|
|
32
|
-
.map((n) => `${n.workflow}: ${n.reason ?? n.missingPrecondition ?? 'blocked'}${n.recommendedSetup ?
|
|
34
|
+
.map((n) => `${n.workflow}: ${n.reason ?? n.missingPrecondition ?? 'blocked'}${n.recommendedSetup ? `: ${n.recommendedSetup}` : ''}`);
|
|
33
35
|
const evidence = notes.flatMap((n) => n.artifactUris ?? []);
|
|
34
36
|
const verifiedVisualOnly = notes.some((n) => n.method === 'visual' || n.verifiedVisually);
|
|
35
37
|
const expected = pom.steps.filter((s) => s.action === 'assertVisible' && s.text).map((s) => `${s.text} is visible`);
|
|
@@ -39,8 +41,8 @@ export function generateTestCases(pom, opts) {
|
|
|
39
41
|
// reviewer/QA can compare intent vs. outcome. When the flow was only recorded (not executed as a
|
|
40
42
|
// discrete test), say so honestly rather than implying a pass.
|
|
41
43
|
const actualResult = notes.length
|
|
42
|
-
? notes.map((n) => `${n.workflow}: ${n.outcome}${n.reason ?
|
|
43
|
-
: ['Not executed as a discrete test in this run
|
|
44
|
+
? notes.map((n) => `${n.workflow}: ${n.outcome}${n.reason ? `: ${n.reason}` : ''}`)
|
|
45
|
+
: ['Not executed as a discrete test in this run. Generated from recorded actions; replay to capture an actual result.'];
|
|
44
46
|
const tc = {
|
|
45
47
|
id: `TC-${(opts.appId ?? 'APP').split('.').pop().slice(0, 6).toUpperCase()}-001`,
|
|
46
48
|
title: pom.testName.replace(/[-_]/g, ' '),
|
|
@@ -54,8 +56,8 @@ export function generateTestCases(pom, opts) {
|
|
|
54
56
|
actualResult,
|
|
55
57
|
cleanup: ['return to home/initial screen', ...(verifiedVisualOnly ? [] : [])],
|
|
56
58
|
risks: [
|
|
57
|
-
...(pom.audit.brittle > 0 ? [`${pom.audit.brittle} brittle locator(s)
|
|
58
|
-
...(verifiedVisualOnly ? ['some verification was visual-only
|
|
59
|
+
...(pom.audit.brittle > 0 ? [`${pom.audit.brittle} brittle locator(s): flow may break on UI changes (see locator audit)`] : []),
|
|
60
|
+
...(verifiedVisualOnly ? ['some verification was visual-only, which is weaker than a structured assertion'] : []),
|
|
59
61
|
...(pom.variables.length ? [`requires test data: ${pom.variables.join(', ')}`] : []),
|
|
60
62
|
],
|
|
61
63
|
automation: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testcase.js","sourceRoot":"","sources":["../../src/suite/testcase.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"testcase.js","sourceRoot":"","sources":["../../src/suite/testcase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// Exporters for the persistent suite
|
|
1
|
+
// Exporters for the persistent suite. PURE: serialize the
|
|
2
2
|
// canonical suite to Markdown (review-ready), a per-functionality YAML directory, JSON, and a
|
|
3
|
-
// JUnit-like results doc. TestRail CSV / Jira-Xray are explicitly deferred (Non-Goals)
|
|
3
|
+
// JUnit-like results doc. TestRail CSV / Jira-Xray are explicitly deferred (Non-Goals); the shapes
|
|
4
4
|
// here are the v1 surface other tools can build on.
|
|
5
5
|
import { stringify } from 'yaml';
|
|
6
6
|
import { functionalitySlug } from './schema.js';
|
|
@@ -21,8 +21,8 @@ export function exportMarkdown(suite) {
|
|
|
21
21
|
out.push(`## ${functionality}`, '');
|
|
22
22
|
for (const c of cases) {
|
|
23
23
|
out.push(`### ${c.id}: ${c.title}`, '', `- **Priority:** ${c.priority} **Type:** ${c.type} **Creativity:** ${c.creativityLevel} **Status:** ${c.status}`, `- **Platforms:** ${c.platforms.join(', ')} **Automation:** ${c.automation.status} (locators ${c.automation.locatorReadiness}, replay ${c.automation.replayStatus})`, `- **Objective:** ${c.objective}`, '', '**Preconditions:**', ...(c.preconditions.length ? c.preconditions.map((p) => `- ${p}`) : ['- _none_']), '', '**Steps:**', ...(c.steps.length
|
|
24
|
-
? c.steps.map((s) => `${s.index}. ${s.action}${s.target ? `
|
|
25
|
-
: ['- _none_']), '', '**Expected:**', ...c.expectedResult.map((e) => `- ${e}`), '', `**Actual:** ${c.actualResult.status}
|
|
24
|
+
? c.steps.map((s) => `${s.index}. ${s.action}${s.target ? ` > ${s.target}` : ''}${s.data ? ` [${s.data}]` : ''}`)
|
|
25
|
+
: ['- _none_']), '', '**Expected:**', ...c.expectedResult.map((e) => `- ${e}`), '', `**Actual:** ${c.actualResult.status}: ${c.actualResult.summary}`, ...(c.evidence.length ? ['', `**Evidence:** ${c.evidence.map((e) => e.uri).join(', ')}`] : []), ...(c.ticketRefs.length ? [`**Tickets:** ${c.ticketRefs.join(', ')}`] : []), ...(c.requirementRefs.length ? [`**Requirements:** ${c.requirementRefs.join(', ')}`] : []), ...(c.issueRefs?.length
|
|
26
26
|
? [`**Linked issues:** ${c.issueRefs.map((r) => `${r.issueId} (${r.relationship}, ${r.lastIssueState})`).join(', ')}`]
|
|
27
27
|
: []), ...(c.risk.length ? ['', '**Risks:**', ...c.risk.map((r) => `- ${r}`)] : []), `- **History:** ${c.history.length} run(s)`, '');
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/testSuite/exporter.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/testSuite/exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// Canonical-case generator (
|
|
1
|
+
// Canonical-case generator (qa_suite_generate + integration hooks). PURE:
|
|
2
2
|
// turns a generated POM, the session's observed outcomes (notes), declared fixtures, and guided
|
|
3
|
-
// exploration coverage into CanonicalTestCase candidates with a blank id (`''`)
|
|
3
|
+
// exploration coverage into CanonicalTestCase candidates with a blank id (`''`); merge.ts assigns a
|
|
4
4
|
// stable id and dedupes. Mirrors src/suite/testcase.ts's intent vs. actual discipline but emits the
|
|
5
5
|
// long-lived canonical schema (creativity level, traceability, automation readiness, history seed).
|
|
6
6
|
import { TEST_SUITE_SCHEMA_VERSION, functionalitySlug, } from './schema.js';
|
|
@@ -29,7 +29,7 @@ function actualFromNotes(notes, now) {
|
|
|
29
29
|
if (!notes.length) {
|
|
30
30
|
return {
|
|
31
31
|
status: 'not_run',
|
|
32
|
-
summary: 'Generated from recorded actions; not executed as a discrete test
|
|
32
|
+
summary: 'Generated from recorded actions; not executed as a discrete test. Replay to capture an actual result.',
|
|
33
33
|
evidence: [],
|
|
34
34
|
};
|
|
35
35
|
}
|
|
@@ -41,7 +41,7 @@ function actualFromNotes(notes, now) {
|
|
|
41
41
|
: statuses.every((s) => s === 'skipped')
|
|
42
42
|
? 'skipped'
|
|
43
43
|
: 'pass';
|
|
44
|
-
const summary = notes.map((n) => `${n.workflow}: ${n.outcome}${n.reason ? `
|
|
44
|
+
const summary = notes.map((n) => `${n.workflow}: ${n.outcome}${n.reason ? ` (${n.reason})` : ''}`).join('; ');
|
|
45
45
|
const evidence = notes.flatMap((n) => n.artifactUris ?? []);
|
|
46
46
|
const failureCode = notes.find((n) => n.outcome === 'fail' || n.outcome === 'blocked')?.category;
|
|
47
47
|
return { status, summary, lastRunAt: now, evidence, failureCode };
|
|
@@ -63,7 +63,11 @@ export function caseFromPom(input) {
|
|
|
63
63
|
action: s.action,
|
|
64
64
|
target: s.element ?? (s.coords ? `(${s.coords[0]},${s.coords[1]})` : undefined),
|
|
65
65
|
data: s.secret ? '••• (secret)' : (s.text ?? s.url ?? s.key ?? s.direction),
|
|
66
|
-
expected: s.action === 'assertVisible' && s.text
|
|
66
|
+
expected: s.action === 'assertVisible' && s.text
|
|
67
|
+
? `${s.text} is visible`
|
|
68
|
+
: s.action === 'visualCheck' && s.text
|
|
69
|
+
? `MANUAL visual check: ${s.text}`
|
|
70
|
+
: undefined,
|
|
67
71
|
mapScreenId: s.page,
|
|
68
72
|
automationSelector: s.element,
|
|
69
73
|
}));
|
|
@@ -109,8 +113,8 @@ export function caseFromPom(input) {
|
|
|
109
113
|
},
|
|
110
114
|
status: input.status ?? 'active',
|
|
111
115
|
risk: [
|
|
112
|
-
...(pom.audit.brittle > 0 ? [`${pom.audit.brittle} brittle locator(s)
|
|
113
|
-
...(visualOnly ? ['some verification was visual-only
|
|
116
|
+
...(pom.audit.brittle > 0 ? [`${pom.audit.brittle} brittle locator(s), flow may break on UI changes`] : []),
|
|
117
|
+
...(visualOnly ? ['some verification was visual-only, weaker than a structured assertion'] : []),
|
|
114
118
|
...(pom.variables.length ? [`requires test data: ${pom.variables.join(', ')}`] : []),
|
|
115
119
|
],
|
|
116
120
|
cleanup: ['return to home/initial screen'],
|
|
@@ -125,7 +129,7 @@ export function caseFromPom(input) {
|
|
|
125
129
|
provenance: [],
|
|
126
130
|
};
|
|
127
131
|
}
|
|
128
|
-
/** Draft cases promoted from guided exploration's per-feature coverage (confidence
|
|
132
|
+
/** Draft cases promoted from guided exploration's per-feature coverage (confidence picks draft vs active). */
|
|
129
133
|
export function casesFromExploration(input) {
|
|
130
134
|
const exp = input.exploration;
|
|
131
135
|
const coverage = exp?.summary.featureCoverage;
|
|
@@ -135,7 +139,7 @@ export function casesFromExploration(input) {
|
|
|
135
139
|
return Object.entries(coverage).map(([feature, conf]) => {
|
|
136
140
|
const functionality = feature;
|
|
137
141
|
const featureId = functionalitySlug(functionality);
|
|
138
|
-
// "covered"/"verified"
|
|
142
|
+
// "covered"/"verified" is active; "partial"/"seen"/anything weaker is draft.
|
|
139
143
|
const status = /cover|verif|pass|done/i.test(conf) ? 'active' : 'draft';
|
|
140
144
|
return {
|
|
141
145
|
schemaVersion: TEST_SUITE_SCHEMA_VERSION,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/testSuite/generator.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,gGAAgG;AAChG,qGAAqG;AACrG,oGAAoG;AACpG,oGAAoG;AAIpG,OAAO,EAYL,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAyBjE,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,CAAC;SACL,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,CAAc;IACrC,OAAO,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC;IAChC,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC;IAChC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gGAAgG;AAChG,SAAS,eAAe,CAAC,KAAiB,EAAE,GAAW;IACrD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,wGAAwG;YACjH,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAiB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;gBACtC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC;IACf,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9G,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,QAAQ,CAAC;IACjG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACpE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,KAAoB;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,UAAU,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,cAAc,CAAC;IAE1D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,KAAK,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,SAAS;QACrF,WAAW,EAAE,CAAC,CAAC,IAAI;QACnB,kBAAkB,EAAE,CAAC,CAAC,OAAO;KAC9B,CAAC,CAAC,CAAC;IAEJ,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;IAC1H,IAAI,CAAC,cAAc,CAAC,MAAM;QAAE,cAAc,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IAEtH,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACzE,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAElF,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,EAAE,EAAE,EAAE;QACN,SAAS;QACT,aAAa;QACb,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,eAAe,aAAa,oBAAoB;QAC7D,SAAS,EAAE,eAAe,aAAa,oBAAoB;QAC3D,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;QAC3B,eAAe;QACf,SAAS;QACT,aAAa,EAAE,CAAC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACtI,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,QAAQ,EAAE;YACR,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;gBACrC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,IAAI;aACf,CAAC,CAAC,CACJ;YACD,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAa,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;SAC3F;QACD,KAAK;QACL,cAAc;QACd,YAAY;QACZ,UAAU,EAAE;YACV,MAAM,EAAE,gBAAgB;YACxB,SAAS,EAAE,cAAc;YACzB,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YACrE,SAAS,EAAE,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACtD,gBAAgB,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;YACtD,YAAY;SACb;QACD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ;QAChC,IAAI,EAAE;YACJ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,oDAAoD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5G,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,wEAAwE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACrF;QACD,OAAO,EAAE,CAAC,+BAA+B,CAAC;QAC1C,QAAQ,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QACnG,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;QAC5C,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,SAAS,EAAE,KAAK,CAAC,GAAG;QACpB,SAAS,EAAE,KAAK,CAAC,GAAG;QACpB,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC;IAC9B,MAAM,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,eAAe,CAAC;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;QACtD,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACnD,2EAA2E;QAC3E,MAAM,MAAM,GAAe,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QACpF,OAAO;YACL,aAAa,EAAE,yBAAyB;YACxC,EAAE,EAAE,EAAE;YACN,SAAS;YACT,aAAa;YACb,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,iBAAiB,aAAa,iDAAiD;YAC5F,SAAS,EAAE,iBAAiB,aAAa,YAAY;YACrD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,IAAI,EAAE,YAAwB;YAC9B,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,UAAU;YACpD,SAAS;YACT,aAAa,EAAE,CAAC,eAAe,CAAC;YAChC,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE;gBACL;oBACE,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,aAAa;oBACrB,QAAQ,EAAE,GAAG,aAAa,oDAAoD;iBAC/E;aACF;YACD,cAAc,EAAE,CAAC,GAAG,aAAa,oDAAoD,CAAC;YACtF,YAAY,EAAE;gBACZ,MAAM,EAAE,CAAC,GAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAiB;gBACtE,OAAO,EAAE,yBAAyB,IAAI,EAAE;gBACxC,SAAS,EAAE,KAAK,CAAC,GAAG;gBACpB,QAAQ,EAAE,EAAE;aACb;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,cAAc;gBACzB,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,EAAE;gBACb,gBAAgB,EAAE,GAAG;gBACrB,YAAY,EAAE,cAAc;aAC7B;YACD,MAAM;YACN,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;YACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;YAClC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;YAC5C,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,eAAe,IAAI,UAAU,CAAC;YAC1D,SAAS,EAAE,KAAK,CAAC,GAAG;YACpB,SAAS,EAAE,KAAK,CAAC,GAAG;YACpB,UAAU,EAAE,EAAE;SACa,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAAC,KAA8D,EAAE,GAAW;IACvG,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACtE,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;QAClB,SAAS;QACT,aAAa;QACb,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,aAAa;QACnC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,aAAa;QAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,YAAY;QAChC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,UAAU;QACpD,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7E,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;QAC1C,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iCAAiC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnH,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI;YAC9B,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,EAAE;YACb,gBAAgB,EAAE,GAAG;YACrB,YAAY,EAAE,cAAc;SAC7B;QACD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,OAAO;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;QAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;QACjC,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IACzD,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/testSuite/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Per-case run-history ledger helpers
|
|
1
|
+
// Per-case run-history ledger helpers.
|
|
2
2
|
// PURE. A TestRunRef is appended on every merge that carries a real run result (merge.ts); these
|
|
3
3
|
// helpers summarize the ledger for reporting and for the persisted per-run files (store.recordRun).
|
|
4
4
|
export function summarizeCaseHistory(c) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/testSuite/history.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/testSuite/history.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,iGAAiG;AACjG,oGAAoG;AAYpG,MAAM,UAAU,oBAAoB,CAAC,CAAoB;IACvD,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,UAAU,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM;QACjD,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,SAAS;QAC/C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC;AAcD,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,KAA0B,EAC1B,IAAmI;IAEnI,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,EAAE;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE;YACvB,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC7B,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO;YAC/B,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ;SAClC,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Link persistent test cases to issue-ledger records.
|
|
2
2
|
//
|
|
3
3
|
// The issue ledger (src/issues) stays the source of truth for issue lifecycle. This layer records,
|
|
4
|
-
// on a canonical test case, WHICH issues caused/blocked it and
|
|
4
|
+
// on a canonical test case, WHICH issues caused/blocked it and (crucially) lets a passing run that
|
|
5
5
|
// is linked to a previously-fixed issue prove the fix held ("verified_fixed"). PURE: mutates the
|
|
6
6
|
// passed case/run objects, takes `now` as input, never touches the clock or fs.
|
|
7
|
-
/** Map an issue category + case outcome to the durable case
|
|
7
|
+
/** Map an issue category + case outcome to the durable case>issue relationship. */
|
|
8
8
|
export function relationshipForCase(category) {
|
|
9
9
|
switch (category) {
|
|
10
10
|
case 'app_bug':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issueLinks.js","sourceRoot":"","sources":["../../src/testSuite/issueLinks.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"issueLinks.js","sourceRoot":"","sources":["../../src/testSuite/issueLinks.ts"],"names":[],"mappings":"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"}
|
package/dist/testSuite/lint.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// Linter for the persistent suite
|
|
1
|
+
// Linter for the persistent suite. PURE. Catches the failure
|
|
2
2
|
// modes that make a maintained suite untrustworthy: missing expected/actual results, unlinked or
|
|
3
|
-
// stale map links, duplicate ids, brittle automation above threshold, and
|
|
3
|
+
// stale map links, duplicate ids, brittle automation above threshold, and (most importantly)
|
|
4
4
|
// `adversarial` cases that lack the safety metadata Swipium requires before it will ever run them.
|
|
5
5
|
/** A case may run adversarially only with explicit disposable-state / consent metadata. */
|
|
6
6
|
function hasAdversarialSafety(c) {
|
|
@@ -40,10 +40,10 @@ export function lintSuite(suite, opts = {}) {
|
|
|
40
40
|
add('warn', 'brittle_automation', `Automated case has brittle locators (grade ${c.automation.locatorReadiness})`, c.id);
|
|
41
41
|
}
|
|
42
42
|
if (c.automation.status === 'automated' && (c.automation.replayStatus === 'failed' || c.automation.replayStatus === 'blocked')) {
|
|
43
|
-
add('warn', 'unreplayable_automation', `Automated case has replayStatus ${c.automation.replayStatus}
|
|
43
|
+
add('warn', 'unreplayable_automation', `Automated case has replayStatus ${c.automation.replayStatus}, not release-gate proof`, c.id);
|
|
44
44
|
}
|
|
45
45
|
if (c.creativityLevel === 'adversarial' && !hasAdversarialSafety(c)) {
|
|
46
|
-
add('error', 'unsafe_adversarial', 'Adversarial case lacks disposable-state/consent safety metadata
|
|
46
|
+
add('error', 'unsafe_adversarial', 'Adversarial case lacks disposable-state/consent safety metadata. Swipium will refuse to run it', c.id);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
const errorCount = findings.filter((f) => f.severity === 'error').length;
|