@sun-asterisk/sungen 3.2.2 → 3.2.3-beta.3
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/dist/capabilities/discover.d.ts.map +1 -1
- package/dist/capabilities/discover.js +26 -3
- package/dist/capabilities/discover.js.map +1 -1
- package/dist/cli/commands/add-flow.d.ts.map +1 -1
- package/dist/cli/commands/add-flow.js +2 -0
- package/dist/cli/commands/add-flow.js.map +1 -1
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +4 -0
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/capability.d.ts.map +1 -1
- package/dist/cli/commands/capability.js +61 -0
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +89 -2
- package/dist/cli/commands/delivery.js.map +1 -1
- package/dist/cli/commands/eval.js +3 -3
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/gate.d.ts +3 -0
- package/dist/cli/commands/gate.d.ts.map +1 -0
- package/dist/cli/commands/gate.js +83 -0
- package/dist/cli/commands/gate.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +2 -1
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +32 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/journey.d.ts +3 -0
- package/dist/cli/commands/journey.d.ts.map +1 -0
- package/dist/cli/commands/journey.js +114 -0
- package/dist/cli/commands/journey.js.map +1 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +10 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/snapshot-builder.d.ts.map +1 -1
- package/dist/dashboard/snapshot-builder.js +10 -1
- package/dist/dashboard/snapshot-builder.js.map +1 -1
- package/dist/exporters/csv-exporter.d.ts.map +1 -1
- package/dist/exporters/csv-exporter.js +3 -1
- package/dist/exporters/csv-exporter.js.map +1 -1
- package/dist/exporters/json-exporter.js +3 -1
- package/dist/exporters/json-exporter.js.map +1 -1
- package/dist/exporters/mobile-app-id.d.ts +22 -0
- package/dist/exporters/mobile-app-id.d.ts.map +1 -0
- package/dist/exporters/mobile-app-id.js +37 -0
- package/dist/exporters/mobile-app-id.js.map +1 -0
- package/dist/exporters/spec-parser.d.ts.map +1 -1
- package/dist/exporters/spec-parser.js +6 -2
- package/dist/exporters/spec-parser.js.map +1 -1
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts +3 -0
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/scroll-action.hbs +7 -4
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/toggle-action.hbs +20 -3
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/checked-assertion.hbs +4 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/not-checked-assertion.hbs +4 -1
- package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +3 -0
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +48 -9
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/template-engine.d.ts +3 -0
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +11 -1
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +11 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +33 -0
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +8 -1
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/catalog/universal-viewpoints.yaml +15 -0
- package/dist/harness/eval/skill-lint.d.ts +3 -3
- package/dist/harness/eval/skill-lint.d.ts.map +1 -1
- package/dist/harness/eval/skill-lint.js +88 -68
- package/dist/harness/eval/skill-lint.js.map +1 -1
- package/dist/harness/journey.d.ts +88 -0
- package/dist/harness/journey.d.ts.map +1 -0
- package/dist/harness/journey.js +414 -0
- package/dist/harness/journey.js.map +1 -0
- package/dist/harness/quality-gates.d.ts +13 -0
- package/dist/harness/quality-gates.d.ts.map +1 -1
- package/dist/harness/quality-gates.js +23 -0
- package/dist/harness/quality-gates.js.map +1 -1
- package/dist/harness/sensors.d.ts +1 -1
- package/dist/harness/sensors.d.ts.map +1 -1
- package/dist/harness/sensors.js +32 -9
- package/dist/harness/sensors.js.map +1 -1
- package/dist/orchestrator/ai-rules-updater.d.ts +11 -3
- package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -1
- package/dist/orchestrator/ai-rules-updater.js +44 -180
- package/dist/orchestrator/ai-rules-updater.js.map +1 -1
- package/dist/orchestrator/ai-skills/adapters.d.ts +28 -0
- package/dist/orchestrator/ai-skills/adapters.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/adapters.js +34 -0
- package/dist/orchestrator/ai-skills/adapters.js.map +1 -0
- package/dist/orchestrator/ai-skills/build.d.ts +10 -0
- package/dist/orchestrator/ai-skills/build.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/build.js +128 -0
- package/dist/orchestrator/ai-skills/build.js.map +1 -0
- package/dist/orchestrator/ai-skills/cap-stripper.d.ts +27 -0
- package/dist/orchestrator/ai-skills/cap-stripper.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/cap-stripper.js +78 -0
- package/dist/orchestrator/ai-skills/cap-stripper.js.map +1 -0
- package/dist/orchestrator/ai-skills/commands.d.ts +22 -0
- package/dist/orchestrator/ai-skills/commands.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/commands.js +109 -0
- package/dist/orchestrator/ai-skills/commands.js.map +1 -0
- package/dist/orchestrator/ai-skills/generator.d.ts +23 -0
- package/dist/orchestrator/ai-skills/generator.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/generator.js +79 -0
- package/dist/orchestrator/ai-skills/generator.js.map +1 -0
- package/dist/orchestrator/ai-skills/golden-skills.test.d.ts +2 -0
- package/dist/orchestrator/ai-skills/golden-skills.test.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/golden-skills.test.js +183 -0
- package/dist/orchestrator/ai-skills/golden-skills.test.js.map +1 -0
- package/dist/orchestrator/ai-skills/resolve-assistants.d.ts +8 -0
- package/dist/orchestrator/ai-skills/resolve-assistants.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/resolve-assistants.js +28 -0
- package/dist/orchestrator/ai-skills/resolve-assistants.js.map +1 -0
- package/dist/orchestrator/ai-skills/writer.d.ts +15 -0
- package/dist/orchestrator/ai-skills/writer.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/writer.js +129 -0
- package/dist/orchestrator/ai-skills/writer.js.map +1 -0
- package/dist/orchestrator/flow-manager.d.ts +11 -0
- package/dist/orchestrator/flow-manager.d.ts.map +1 -1
- package/dist/orchestrator/flow-manager.js +147 -29
- package/dist/orchestrator/flow-manager.js.map +1 -1
- package/dist/orchestrator/mobile-runtime-scaffolder.d.ts +59 -0
- package/dist/orchestrator/mobile-runtime-scaffolder.d.ts.map +1 -0
- package/dist/orchestrator/mobile-runtime-scaffolder.js +298 -0
- package/dist/orchestrator/mobile-runtime-scaffolder.js.map +1 -0
- package/dist/orchestrator/project-initializer.d.ts +44 -7
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +147 -79
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/screen-manager.d.ts +30 -0
- package/dist/orchestrator/screen-manager.d.ts.map +1 -1
- package/dist/orchestrator/screen-manager.js +205 -22
- package/dist/orchestrator/screen-manager.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/README.md +58 -0
- package/dist/orchestrator/templates/{ai-instructions/claude-cmd-add-flow.md → ai-src/commands/add-flow.md} +63 -2
- package/dist/orchestrator/templates/{ai-instructions/claude-cmd-add-screen.md → ai-src/commands/add-screen.md} +171 -6
- package/dist/orchestrator/templates/{ai-instructions/claude-cmd-create-test.md → ai-src/commands/create-test.md} +118 -4
- package/{src/orchestrator/templates/ai-instructions/claude-cmd-dashboard.md → dist/orchestrator/templates/ai-src/commands/dashboard.md} +25 -3
- package/{src/orchestrator/templates/ai-instructions/claude-cmd-delivery.md → dist/orchestrator/templates/ai-src/commands/delivery.md} +67 -3
- package/dist/orchestrator/templates/ai-src/commands/design.md +29 -0
- package/{src/orchestrator/templates/ai-instructions/claude-cmd-feedback.md → dist/orchestrator/templates/ai-src/commands/feedback.md} +34 -3
- package/dist/orchestrator/templates/{ai-instructions/claude-cmd-locale.md → ai-src/commands/locale.md} +56 -4
- package/{src/orchestrator/templates/ai-instructions/claude-cmd-review.md → dist/orchestrator/templates/ai-src/commands/review.md} +57 -2
- package/{src/orchestrator/templates/ai-instructions/claude-cmd-run-test.md → dist/orchestrator/templates/ai-src/commands/run-test.md} +116 -5
- package/dist/orchestrator/templates/ai-src/config/codex.md +8 -0
- package/{src/orchestrator/templates/ai-instructions/claude-skill-capture-mobile.md → dist/orchestrator/templates/ai-src/skills/sungen-capture-mobile/SKILL.md} +11 -0
- package/dist/orchestrator/templates/{ai-instructions/github-skill-sungen-error-mapping.md → ai-src/skills/sungen-error-mapping/SKILL.md} +49 -9
- package/{src/orchestrator/templates/ai-instructions/claude-skill-harness-audit.md → dist/orchestrator/templates/ai-src/skills/sungen-harness-audit/SKILL.md} +5 -5
- package/{src/orchestrator/templates/ai-instructions/claude-skill-locale.md → dist/orchestrator/templates/ai-src/skills/sungen-locale/SKILL.md} +275 -3
- package/{src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md → dist/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md} +17 -0
- package/dist/orchestrator/templates/{ai-instructions/claude-skill-selector-fix-mobile.md → ai-src/skills/sungen-selector-fix-mobile/SKILL.md} +5 -0
- package/dist/orchestrator/templates/{ai-instructions/claude-skill-tc-generation.md → ai-src/skills/sungen-tc-generation/SKILL.md} +5 -0
- package/dist/orchestrator/templates/playwright.config.ts +7 -4
- package/package.json +3 -3
- package/src/capabilities/discover.ts +29 -3
- package/src/cli/commands/add-flow.ts +2 -0
- package/src/cli/commands/add.ts +4 -0
- package/src/cli/commands/capability.ts +64 -1
- package/src/cli/commands/delivery.ts +89 -2
- package/src/cli/commands/eval.ts +3 -3
- package/src/cli/commands/gate.ts +44 -0
- package/src/cli/commands/generate.ts +2 -1
- package/src/cli/commands/init.ts +50 -3
- package/src/cli/commands/journey.ts +72 -0
- package/src/cli/commands/update.ts +14 -4
- package/src/cli/index.ts +4 -0
- package/src/dashboard/snapshot-builder.ts +10 -1
- package/src/exporters/csv-exporter.ts +3 -1
- package/src/exporters/json-exporter.ts +3 -1
- package/src/exporters/mobile-app-id.ts +34 -0
- package/src/exporters/spec-parser.ts +6 -2
- package/src/generators/test-generator/adapters/adapter-interface.ts +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/scroll-action.hbs +7 -4
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/toggle-action.hbs +20 -3
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/checked-assertion.hbs +4 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/not-checked-assertion.hbs +4 -1
- package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +3 -0
- package/src/generators/test-generator/code-generator.ts +49 -9
- package/src/generators/test-generator/template-engine.ts +14 -1
- package/src/generators/test-generator/utils/selector-resolver.ts +51 -1
- package/src/harness/audit.ts +9 -2
- package/src/harness/catalog/universal-viewpoints.yaml +15 -0
- package/src/harness/eval/skill-lint.ts +71 -60
- package/src/harness/journey.ts +434 -0
- package/src/harness/quality-gates.ts +20 -0
- package/src/harness/sensors.ts +25 -8
- package/src/orchestrator/ai-rules-updater.ts +35 -197
- package/src/orchestrator/ai-skills/adapters.ts +52 -0
- package/src/orchestrator/ai-skills/build.ts +103 -0
- package/src/orchestrator/ai-skills/cap-stripper.ts +85 -0
- package/src/orchestrator/ai-skills/commands.ts +112 -0
- package/src/orchestrator/ai-skills/generator.ts +47 -0
- package/src/orchestrator/ai-skills/golden-skills.test.ts +124 -0
- package/src/orchestrator/ai-skills/resolve-assistants.ts +18 -0
- package/src/orchestrator/ai-skills/writer.ts +92 -0
- package/src/orchestrator/flow-manager.ts +165 -29
- package/src/orchestrator/mobile-runtime-scaffolder.ts +277 -0
- package/src/orchestrator/project-initializer.ts +159 -86
- package/src/orchestrator/screen-manager.ts +237 -22
- package/src/orchestrator/templates/ai-src/README.md +58 -0
- package/src/orchestrator/templates/{ai-instructions/claude-cmd-add-flow.md → ai-src/commands/add-flow.md} +63 -2
- package/src/orchestrator/templates/{ai-instructions/claude-cmd-add-screen.md → ai-src/commands/add-screen.md} +171 -6
- package/src/orchestrator/templates/{ai-instructions/claude-cmd-create-test.md → ai-src/commands/create-test.md} +118 -4
- package/{dist/orchestrator/templates/ai-instructions/claude-cmd-dashboard.md → src/orchestrator/templates/ai-src/commands/dashboard.md} +25 -3
- package/{dist/orchestrator/templates/ai-instructions/claude-cmd-delivery.md → src/orchestrator/templates/ai-src/commands/delivery.md} +67 -3
- package/src/orchestrator/templates/ai-src/commands/design.md +29 -0
- package/{dist/orchestrator/templates/ai-instructions/claude-cmd-feedback.md → src/orchestrator/templates/ai-src/commands/feedback.md} +34 -3
- package/src/orchestrator/templates/{ai-instructions/claude-cmd-locale.md → ai-src/commands/locale.md} +56 -4
- package/{dist/orchestrator/templates/ai-instructions/claude-cmd-review.md → src/orchestrator/templates/ai-src/commands/review.md} +57 -2
- package/{dist/orchestrator/templates/ai-instructions/claude-cmd-run-test.md → src/orchestrator/templates/ai-src/commands/run-test.md} +116 -5
- package/src/orchestrator/templates/ai-src/config/codex.md +8 -0
- package/{dist/orchestrator/templates/ai-instructions/claude-skill-capture-mobile.md → src/orchestrator/templates/ai-src/skills/sungen-capture-mobile/SKILL.md} +11 -0
- package/{dist/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md → src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md} +49 -9
- package/{dist/orchestrator/templates/ai-instructions/claude-skill-harness-audit.md → src/orchestrator/templates/ai-src/skills/sungen-harness-audit/SKILL.md} +5 -5
- package/{dist/orchestrator/templates/ai-instructions/claude-skill-locale.md → src/orchestrator/templates/ai-src/skills/sungen-locale/SKILL.md} +275 -3
- package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md → src/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md} +17 -0
- package/src/orchestrator/templates/{ai-instructions/claude-skill-selector-fix-mobile.md → ai-src/skills/sungen-selector-fix-mobile/SKILL.md} +5 -0
- package/src/orchestrator/templates/{ai-instructions/claude-skill-tc-generation.md → ai-src/skills/sungen-tc-generation/SKILL.md} +5 -0
- package/src/orchestrator/templates/playwright.config.ts +7 -4
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-design.md +0 -12
- package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +0 -347
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-flow.md +0 -86
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +0 -131
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +0 -93
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-dashboard.md +0 -65
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-delivery.md +0 -83
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-design.md +0 -13
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-feedback.md +0 -24
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-locale.md +0 -70
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-review.md +0 -38
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +0 -155
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mobile.md +0 -184
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-harness-audit.md +0 -85
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-locale.md +0 -291
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix-mobile.md +0 -316
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +0 -221
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +0 -617
- package/src/orchestrator/templates/ai-instructions/claude-cmd-design.md +0 -12
- package/src/orchestrator/templates/ai-instructions/claude-skill-api-design.md +0 -62
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-mcp.md +0 -82
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-pat.md +0 -117
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-live.md +0 -60
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-local.md +0 -38
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture.md +0 -35
- package/src/orchestrator/templates/ai-instructions/claude-skill-dashboard.md +0 -121
- package/src/orchestrator/templates/ai-instructions/claude-skill-delivery.md +0 -141
- package/src/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md +0 -157
- package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +0 -446
- package/src/orchestrator/templates/ai-instructions/claude-skill-ingest-legacy.md +0 -79
- package/src/orchestrator/templates/ai-instructions/claude-skill-mobile-gestures.md +0 -109
- package/src/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +0 -347
- package/src/orchestrator/templates/ai-instructions/claude-skill-tc-review.md +0 -320
- package/src/orchestrator/templates/ai-instructions/claude-skill-test-design-techniques.md +0 -118
- package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-a-data-entry.md +0 -203
- package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-b-data-ops.md +0 -179
- package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-c-data-explore.md +0 -233
- package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-d-display.md +0 -226
- package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-e-identity.md +0 -177
- package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint.md +0 -118
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-flow.md +0 -86
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +0 -131
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +0 -93
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-dashboard.md +0 -65
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-delivery.md +0 -83
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-design.md +0 -13
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-feedback.md +0 -24
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-locale.md +0 -70
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-review.md +0 -38
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +0 -155
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-api-design.md +0 -62
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mobile.md +0 -184
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-mcp.md +0 -82
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-pat.md +0 -117
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-live.md +0 -60
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-local.md +0 -38
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture.md +0 -35
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-dashboard.md +0 -121
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md +0 -141
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-error-mapping.md +0 -157
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +0 -446
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-harness-audit.md +0 -85
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-ingest-legacy.md +0 -79
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-locale.md +0 -291
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-mobile-gestures.md +0 -109
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix-mobile.md +0 -316
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +0 -221
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +0 -617
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-review.md +0 -320
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-test-design-techniques.md +0 -118
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-a-data-entry.md +0 -203
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-b-data-ops.md +0 -179
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-c-data-explore.md +0 -233
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-d-display.md +0 -226
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-e-identity.md +0 -177
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint.md +0 -118
- /package/dist/orchestrator/templates/{ai-instructions/claude-agent-challenge.md → ai-src/agents/challenge.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-agent-discovery.md → ai-src/agents/discovery.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-agent-generator.md → ai-src/agents/generator.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-agent-reviewer.md → ai-src/agents/reviewer.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-config.md → ai-src/config/claude.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/copilot-config.md → ai-src/config/copilot.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-api-design.md → ai-src/skills/sungen-api-design/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture.md → ai-src/skills/sungen-capture/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-figma-mcp.md → ai-src/skills/sungen-capture/mode-figma-mcp.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-figma-pat.md → ai-src/skills/sungen-capture/mode-figma-pat.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-live.md → ai-src/skills/sungen-capture/mode-live.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-local.md → ai-src/skills/sungen-capture/mode-local.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-dashboard.md → ai-src/skills/sungen-dashboard/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-delivery.md → ai-src/skills/sungen-delivery/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-gherkin-syntax.md → ai-src/skills/sungen-gherkin-syntax/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-ingest-legacy.md → ai-src/skills/sungen-ingest-legacy/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-mobile-gestures.md → ai-src/skills/sungen-mobile-gestures/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-selector-keys.md → ai-src/skills/sungen-selector-keys/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-tc-review.md → ai-src/skills/sungen-tc-review/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-test-design-techniques.md → ai-src/skills/sungen-test-design-techniques/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint.md → ai-src/skills/sungen-viewpoint/SKILL.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-a-data-entry.md → ai-src/skills/sungen-viewpoint/group-a-data-entry.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-b-data-ops.md → ai-src/skills/sungen-viewpoint/group-b-data-ops.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-c-data-explore.md → ai-src/skills/sungen-viewpoint/group-c-data-explore.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-d-display.md → ai-src/skills/sungen-viewpoint/group-d-display.md} +0 -0
- /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-e-identity.md → ai-src/skills/sungen-viewpoint/group-e-identity.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/claude-agent-challenge.md → ai-src/agents/challenge.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/claude-agent-discovery.md → ai-src/agents/discovery.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/claude-agent-generator.md → ai-src/agents/generator.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/claude-agent-reviewer.md → ai-src/agents/reviewer.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/claude-config.md → ai-src/config/claude.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/copilot-config.md → ai-src/config/copilot.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-api-design.md → src/orchestrator/templates/ai-src/skills/sungen-api-design/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture.md → src/orchestrator/templates/ai-src/skills/sungen-capture/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-mcp.md → src/orchestrator/templates/ai-src/skills/sungen-capture/mode-figma-mcp.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-pat.md → src/orchestrator/templates/ai-src/skills/sungen-capture/mode-figma-pat.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-live.md → src/orchestrator/templates/ai-src/skills/sungen-capture/mode-live.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-local.md → src/orchestrator/templates/ai-src/skills/sungen-capture/mode-local.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-dashboard.md → src/orchestrator/templates/ai-src/skills/sungen-dashboard/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md → src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md → src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-ingest-legacy.md → src/orchestrator/templates/ai-src/skills/sungen-ingest-legacy/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-mobile-gestures.md → src/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md} +0 -0
- /package/src/orchestrator/templates/{ai-instructions/claude-skill-selector-keys.md → ai-src/skills/sungen-selector-keys/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-review.md → src/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-test-design-techniques.md → src/orchestrator/templates/ai-src/skills/sungen-test-design-techniques/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/SKILL.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-a-data-entry.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-a-data-entry.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-b-data-ops.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-b-data-ops.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-c-data-explore.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-c-data-explore.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-d-display.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-d-display.md} +0 -0
- /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-e-identity.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-e-identity.md} +0 -0
package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-e-identity.md
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# GROUP E: IDENTITY & AUTHENTICATION
|
|
2
|
-
|
|
3
|
-
> The user creates an account, authenticates their identity, and manages credentials.
|
|
4
|
-
|
|
5
|
-
Patterns: 15. Login / Logout · 16. Register · 17. Password Management
|
|
6
|
-
See `SKILL.md` for the 4 Viewpoints, Shared Checks, and Security Tag Rules.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 15. Login / Logout
|
|
11
|
-
|
|
12
|
-
**Apply when**: the screen has a login form and/or a logout button.
|
|
13
|
-
|
|
14
|
-
**Inherits**: Form & Inputs — field-level validation (required, format, maxlength, whitespace, real-time error clear). Generate those once here; this pattern adds the auth-specific rules below.
|
|
15
|
-
|
|
16
|
-
**Shared checks applied**: XSS/Injection
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
### Tier 1 — @high
|
|
21
|
-
|
|
22
|
-
**[VP-LOGIC] Auth behavior**
|
|
23
|
-
|
|
24
|
-
- Enter the correct email + password → login succeeds, redirect to the dashboard/home, a session is created with a valid token
|
|
25
|
-
- Click Logout → the session is destroyed server-side, redirect to the Login page, the old token no longer works
|
|
26
|
-
- After logout, use the browser Back button to a protected page → redirect to Login (no cached content shown)
|
|
27
|
-
- "Remember me" checked → the session persists after closing/reopening the browser (cookie expiry longer than the default session)
|
|
28
|
-
|
|
29
|
-
**[VP-VAL]**
|
|
30
|
-
|
|
31
|
-
- Correct email, wrong password → a generic error message "Email or password is incorrect" (does not state which field is wrong, to avoid enumeration)
|
|
32
|
-
- An email not in the system → the same generic error as a wrong password (does not reveal "email not registered")
|
|
33
|
-
- Wrong password N times in a row (N per config) → the account is temporarily locked, the error states the wait time
|
|
34
|
-
|
|
35
|
-
**[VP-SEC]**
|
|
36
|
-
|
|
37
|
-
- Access a protected page while not logged in → redirect to Login, the intended URL is preserved in a query param so post-login redirects correctly
|
|
38
|
-
- Login succeeds → a new session token is issued (session fixation prevention), the old pre-login token no longer works
|
|
39
|
-
- Password field: the value is not visible in the page source, not logged in the browser console or the network payload
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
### Tier 2 — @normal + @low
|
|
44
|
-
|
|
45
|
-
**[VP-UI] Interface states**
|
|
46
|
-
|
|
47
|
-
- [@normal] Password field: the show/hide toggle works, the eye/eye-off icon changes to the correct state
|
|
48
|
-
- [@normal] Submit button: disabled or showing a loading spinner while the API is being called (prevents double submit)
|
|
49
|
-
- [@normal] Login failure: the form keeps the entered email, only the password field is cleared
|
|
50
|
-
- [@low] Caps Lock warning: when Caps Lock is on → a warning text shows near the password field
|
|
51
|
-
|
|
52
|
-
**[VP-VAL] Edge cases**
|
|
53
|
-
|
|
54
|
-
- [@normal] Email with uppercase characters → login succeeds even when entering "User@Email.com" instead of "user@email.com" (case-insensitive)
|
|
55
|
-
- [@low] Session timeout while in use → redirect to Login with a toast "Your session has expired"
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
### ⚡ Cross-pattern interactions
|
|
60
|
-
|
|
61
|
-
- **+ Navigation**: After a successful login → the active menu item reflects the first page the user is redirected to
|
|
62
|
-
- **+ Notification**: The API returns 401 while in use → a toast "Your session has expired" shows before redirecting to Login
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## 16. Register
|
|
67
|
-
|
|
68
|
-
**Apply when**: the screen has a form to create a new account (email/password) or sign up via SSO (Google, Microsoft, Facebook…).
|
|
69
|
-
|
|
70
|
-
**Inherits**: Form & Inputs — field-level validation (required, format, maxlength, whitespace, real-time error clear). Generate those once here; this pattern adds the registration-specific rules below.
|
|
71
|
-
|
|
72
|
-
**Shared checks applied**: XSS/Injection
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
### Tier 1 — @high
|
|
77
|
-
|
|
78
|
-
**[VP-LOGIC] Registration flow**
|
|
79
|
-
|
|
80
|
-
- Fill in all valid information, submit → the account is created, the user receives a verification email, redirect to a confirmation page
|
|
81
|
-
- Sign up via SSO: click a provider button → redirect to the provider to authorize → redirect back to the app, the account is created/linked automatically, the user enters the app immediately without email verification
|
|
82
|
-
- Verification email link → click → the account is activated, the user can log in immediately
|
|
83
|
-
- An unverified account tries to access a protected page → blocked, a message asks for verification with a "Resend email" button
|
|
84
|
-
|
|
85
|
-
**[VP-VAL]**
|
|
86
|
-
|
|
87
|
-
- An email already in the system → submit is blocked, inline error "This email is already registered"
|
|
88
|
-
- A password that is not strong enough (below min length, missing a character type per the rule) → error at the field, no submit
|
|
89
|
-
- Confirm password differs from password → inline error "Passwords do not match", no submit
|
|
90
|
-
- Wrong email format → inline error at the email field, no submit
|
|
91
|
-
|
|
92
|
-
**[VP-SEC]**
|
|
93
|
-
|
|
94
|
-
- Submit without a CSRF token → the server rejects the request, no account is created
|
|
95
|
-
- The POST body contains an extra field `role=admin` → the server ignores that field, the account is created with the default role (user)
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
### Tier 2 — @normal + @low
|
|
100
|
-
|
|
101
|
-
**[VP-UI] Interface states**
|
|
102
|
-
|
|
103
|
-
- [@normal] Password strength indicator: updates in real time as the user types, the color changes correctly by level (weak/medium/strong)
|
|
104
|
-
- [@normal] Terms & Conditions checkbox: Submit disabled while unchecked, enabled after checking
|
|
105
|
-
- [@normal] SSO buttons: the provider logos are correct, the button switches to loading/disabled while redirecting
|
|
106
|
-
- [@low] Resend verification email: the button only activates after the cooldown ends, disabled + a countdown timer shows during the wait
|
|
107
|
-
|
|
108
|
-
**[VP-VAL] Edge cases**
|
|
109
|
-
|
|
110
|
-
- [@normal] Register with a sub-address email (user+tag@gmail.com) → treated as a unique email, creation succeeds
|
|
111
|
-
- [@low] Browser autofill fills the fields → the form receives the correct values, no conflict with a custom input component
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
### ⚡ Cross-pattern interactions
|
|
116
|
-
|
|
117
|
-
- **+ Login**: After register + email verification succeeds → the user can log in immediately with the just-created credentials
|
|
118
|
-
- **+ Notification**: Register success → a toast "Check your email to complete registration"; resend email → a cooldown toast with a countdown
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## 17. Password Management
|
|
123
|
-
|
|
124
|
-
**Apply when**: the screen has a Forgot Password function, a Reset Password via email function, or a Change Password while logged in function.
|
|
125
|
-
|
|
126
|
-
**Inherits**: Form & Inputs — field-level validation (required, format, maxlength, whitespace, real-time error clear). Generate those once here; this pattern adds the password-specific rules below.
|
|
127
|
-
|
|
128
|
-
**Shared checks applied**: (no default shared check)
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
### Tier 1 — @high
|
|
133
|
-
|
|
134
|
-
**[VP-LOGIC] Password flow**
|
|
135
|
-
|
|
136
|
-
- *Forgot Password:* Enter a registered email → a reset-link email is sent to the inbox, an "email sent" message shows in the UI
|
|
137
|
-
- *Reset Password:* Click the link in the email → a set-new-password form opens; submit a valid password → the password is changed, the user can log in immediately with the new password
|
|
138
|
-
- *Single-use reset link:* Reuse an already-used link → 400/410, a message "Link already used", no second reset
|
|
139
|
-
- *Expired reset link:* Use a link past its expiry → 400/410, a message "Link expired" with a link back to the Forgot Password page
|
|
140
|
-
- *Change Password:* Enter the correct current password + a valid new password → the password is changed, all other sessions are invalidated immediately
|
|
141
|
-
|
|
142
|
-
**[VP-VAL]**
|
|
143
|
-
|
|
144
|
-
- *Forgot Password:* Enter an email not in the system → the same "email sent" message (does not reveal "email not registered")
|
|
145
|
-
- *Reset Password:* A new password that is not strong enough → error at the field, no submit
|
|
146
|
-
- *Reset Password:* Confirm password differs → inline error "Passwords do not match"
|
|
147
|
-
- *Change Password:* Enter the wrong current password → error "Current password is incorrect", the new password is not saved
|
|
148
|
-
- *Change Password:* The new password equals the current password → error "New password must differ from the old one"
|
|
149
|
-
|
|
150
|
-
**[VP-SEC]**
|
|
151
|
-
|
|
152
|
-
- A tampered/forged reset token in the URL → the server rejects it, 400 error, the password is unchanged
|
|
153
|
-
- The token is invalidated immediately after use: after a successful reset, reusing the same link → rejected
|
|
154
|
-
- The Change Password endpoint without authentication → 401 Forbidden, the password is unchanged
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
### Tier 2 — @normal + @low
|
|
159
|
-
|
|
160
|
-
**[VP-UI] Interface states**
|
|
161
|
-
|
|
162
|
-
- [@normal] Forgot Password form: only 1 email field + a Submit button + a back-to-Login link, no extra fields
|
|
163
|
-
- [@normal] Reset Password form: both password fields are type=password with a show/hide toggle, a strength indicator updates in real time
|
|
164
|
-
- [@normal] Change Password form: 3 separate fields (current, new, confirm), fully separated from the profile form
|
|
165
|
-
- [@low] Rate limiting: send many reset requests in a row in a short time → the Submit button is on cooldown or a Captcha appears
|
|
166
|
-
|
|
167
|
-
**[VP-VAL] Edge cases**
|
|
168
|
-
|
|
169
|
-
- [@normal] Forgot Password sent multiple times for the same email → only the latest link is valid, all older links are invalidated
|
|
170
|
-
- [@low] Click a reset link from browser history after it was used → rejected immediately with a "Link already used" message
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
### ⚡ Cross-pattern interactions
|
|
175
|
-
|
|
176
|
-
- **+ Login**: Reset succeeds → redirect to Login with a toast "Password changed successfully, please log in again"
|
|
177
|
-
- **+ Notification**: Change Password succeeds → a success toast in the UI + an email notification "Your account password was just changed" sent to the inbox
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sungen-viewpoint
|
|
3
|
-
description: '17 UI patterns x 4 viewpoints — structured checklist for test case
|
|
4
|
-
generation and review. Auto-loaded by create-test and review commands.'
|
|
5
|
-
user-invocable: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## How to use this skill
|
|
9
|
-
|
|
10
|
-
This skill is a **router**. The detailed checklists live in 5 group files — load only the ones relevant to the screen under test.
|
|
11
|
-
|
|
12
|
-
1. Read the **4 Viewpoints** and **Shared Checks** below (always).
|
|
13
|
-
2. Identify which UI patterns the screen contains, resolve any overlap via **Pattern selection** below, then read **only** the matching group file(s) from the routing table.
|
|
14
|
-
3. Generate Tier 1 (`@high`) scenarios first, then Tier 2 (`@normal` + `@low`). Apply each Shared Check **once per screen**, not once per pattern.
|
|
15
|
-
|
|
16
|
-
> All checklist items are written in English. Render scenario names, step text, and test IDs in English.
|
|
17
|
-
|
|
18
|
-
## Routing table
|
|
19
|
-
|
|
20
|
-
| UI element on the screen | Pattern | Read file |
|
|
21
|
-
|---|---|---|
|
|
22
|
-
| Plain input form (settings, profile, contact) | 1. Form & Inputs **(base)** | `group-a-data-entry.md` |
|
|
23
|
-
| File picker / drop zone | 2. File Upload | `group-a-data-entry.md` |
|
|
24
|
-
| Bulk import / export | 3. Import / Export | `group-a-data-entry.md` |
|
|
25
|
-
| "Add" / "Create" / "New" | 4. Create / Add | `group-b-data-ops.md` |
|
|
26
|
-
| "Edit" / pencil icon / inline edit | 5. Update / Edit | `group-b-data-ops.md` |
|
|
27
|
-
| "Delete" / trash icon | 6. Delete | `group-b-data-ops.md` |
|
|
28
|
-
| Rows + columns grid | 7. Data Table | `group-c-data-explore.md` |
|
|
29
|
-
| Search box / search bar | 8. Search | `group-c-data-explore.md` |
|
|
30
|
-
| Filter controls (dropdown, date range, checkboxes) | 9. Filter | `group-c-data-explore.md` |
|
|
31
|
-
| Card / list grid, infinite scroll, "Load More" | 10. List / Card View | `group-c-data-explore.md` |
|
|
32
|
-
| Charts / KPI cards / dashboard | 11. Chart / Analytics | `group-d-display.md` |
|
|
33
|
-
| Overlay panel on top of the page | 12. Modal / Dialog | `group-d-display.md` |
|
|
34
|
-
| Side menu / tabs / breadcrumb / top nav | 13. Navigation | `group-d-display.md` |
|
|
35
|
-
| Toast / snackbar / alert / banner | 14. Notification / Toast / Alert | `group-d-display.md` |
|
|
36
|
-
| Login form / logout button | 15. Login / Logout | `group-e-identity.md` |
|
|
37
|
-
| Sign-up form / SSO | 16. Register | `group-e-identity.md` |
|
|
38
|
-
| Forgot / reset / change password | 17. Password Management | `group-e-identity.md` |
|
|
39
|
-
|
|
40
|
-
## Pattern selection (precedence & inheritance)
|
|
41
|
-
|
|
42
|
-
A screen often matches several patterns at once — a login screen is *both* a form and an authentication flow. Use these rules so the choice is deterministic and scenarios are never duplicated:
|
|
43
|
-
|
|
44
|
-
1. **Most specific wins.** Pick the most specialized pattern as the screen's primary section. Auth and CRUD forms route to their specific pattern, NOT to Form & Inputs:
|
|
45
|
-
- Login/logout → **15**, sign-up → **16**, forgot/reset/change password → **17**
|
|
46
|
-
- Create form → **4**, edit form → **5**
|
|
47
|
-
2. **Form & Inputs (1) is a BASE pattern, not a sibling.** Generate it as its own section only for a plain form with no more-specific role (settings, profile, contact). When a specialization applies, do NOT also create a separate "Form & Inputs" section.
|
|
48
|
-
3. **Inheritance.** A specialized form pattern (4, 5, 15, 16, 17) **inherits** Form & Inputs field-level validation (required, format, maxlength, whitespace, real-time error clear) and adds its own rules. Apply the inherited checks inside the specialized section — generate each check once, never twice.
|
|
49
|
-
4. **Genuinely parallel pairs** — these cover different concerns; choose per the table:
|
|
50
|
-
|
|
51
|
-
| If the screen has… | Decision |
|
|
52
|
-
|---|---|
|
|
53
|
-
| A grid of records | Pick **7. Data Table** *or* **10. List/Card** by layout (rows+columns → Table; cards/tiles/infinite-scroll → List/Card) — not both for the same surface |
|
|
54
|
-
| Both a keyword box and filter controls | Apply **8. Search** *and* **9. Filter** (Search = free-text match; Filter = structured narrowing) + one combined AND-logic scenario |
|
|
55
|
-
| A form rendered inside an overlay | Apply the form's pattern (1/4/5/15…) for fields/submit **and** **12. Modal/Dialog** for open/close/focus-trap/backdrop |
|
|
56
|
-
|
|
57
|
-
## 4 Viewpoints
|
|
58
|
-
|
|
59
|
-
| VP | Focus | Tag |
|
|
60
|
-
|---|---|---|
|
|
61
|
-
| **UI/UX** | Interface state, layout, visual feedback | VP-UI |
|
|
62
|
-
| **Data & Validate** | Input constraints, data integrity, error messages | VP-VAL |
|
|
63
|
-
| **Logic** | Business rules, interactions, state changes | VP-LOGIC |
|
|
64
|
-
| **Security** | Authentication, authorization, injection | VP-SEC |
|
|
65
|
-
|
|
66
|
-
**Classification rules:**
|
|
67
|
-
- VP-UI = state that is always true regardless of what the user does (element present, layout, label)
|
|
68
|
-
- VP-VAL = outcome depends on the input *value* (valid / invalid / boundary)
|
|
69
|
-
- VP-LOGIC = outcome depends on the user's *action* (click, submit, navigate)
|
|
70
|
-
- VP-SEC = checks access control and malicious input
|
|
71
|
-
|
|
72
|
-
### Domain category codes — required for the coverage-balance gate
|
|
73
|
-
|
|
74
|
-
The 4 viewpoints above are the *generic* axes. On a domain screen, the `VP-<CAT>` code must use the **canonical short code** for what the scenario exercises, so the audit's coverage-balance gate buckets it correctly. Use these exact codes — **never long-form or freeform** (`VP-NAV` not `VP-NAVIGATION`, `VP-SUB` not `VP-SUBSCRIPTION`, `VP-FILTER` not `VP-FILTERING`):
|
|
75
|
-
|
|
76
|
-
| Bucket | Codes | Use for |
|
|
77
|
-
|---|---|---|
|
|
78
|
-
| **business-core** | `LIST` · `CART` · `PRODUCT` · `FILTER` · `CHECKOUT` · `ORDER` | the screen's core domain data/actions (product list, cart, checkout, order, filtered results) |
|
|
79
|
-
| presentation | `UI` | layout / visual state |
|
|
80
|
-
| validation-security | `VAL` · `SEC` · `SUB` | input validation · access/injection · subscribe/newsletter |
|
|
81
|
-
| behavior | `LOGIC` | action-driven state changes |
|
|
82
|
-
| navigation | `NAV` | landing on / moving between pages |
|
|
83
|
-
|
|
84
|
-
**On a business-core page** (product list, cart, checkout, search results), the core data scenarios MUST carry a **business-core** code (`VP-LIST-*`, `VP-CART-*`, `VP-PRODUCT-*`, …) — not a generic `VP-UI`/`VP-LOGIC` or a freeform `VP-<word>`. A freeform/long-form prefix parses as `NONE`, scores **0 on the balance axis**, and drops the audit score (~9.3 → ~7.7 in practice). Keep `VP-UI/VAL/LOGIC/SEC` for the cross-cutting checks; give the domain scenarios their domain code.
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Shared Checks
|
|
89
|
-
|
|
90
|
-
Generate **once per screen**, do not repeat for each pattern.
|
|
91
|
-
Each pattern only points back with "Shared checks applied: [name]".
|
|
92
|
-
|
|
93
|
-
| Check | Condition → Expected | VP | Priority |
|
|
94
|
-
|---|---|---|---|
|
|
95
|
-
| **Loading State** | Data fetch in progress → spinner/skeleton shown, user cannot interact | UI | @normal |
|
|
96
|
-
| **Empty State** | Query returns 0 records → clear message shown, layout does not break | UI | @normal |
|
|
97
|
-
| **XSS** | Script tag entered into a field → rendered as literal text, not executed | SEC | @high |
|
|
98
|
-
| **SQL injection** | SQL payload entered into a field → DB unaffected, no data exposed | SEC | @high |
|
|
99
|
-
| **URL Manipulation** | URL params wrong/missing/out-of-range → fallback to default, no 500 crash | SEC | @high |
|
|
100
|
-
|
|
101
|
-
> **SQL injection — 2 layers for search/LIKE fields**: (1) field-level: UI blocks special chars → `@high` automated; (2) API-level: if the field reaches a LIKE query (search, partial-match), send `1 OR 1=1` straight to the API endpoint (bypassing the UI) → verify a parameterized query is used → `@high @manual`. Missing layer 2 = a real attack vector is overlooked even when field validation is correct.
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Security Tag Rules
|
|
106
|
-
|
|
107
|
-
For VP-SEC scenarios testing **unauthorized access** (no login, wrong role, direct URL):
|
|
108
|
-
- Use the **`@no-auth`** tag — runs without authentication to verify the redirect/block.
|
|
109
|
-
- Do NOT use `@manual` for these — they are automatable.
|
|
110
|
-
|
|
111
|
-
```gherkin
|
|
112
|
-
@high @no-auth
|
|
113
|
-
Scenario: VP-SEC-001 Unauthenticated user cannot access admin page
|
|
114
|
-
Given User is on [Admin] page
|
|
115
|
-
Then User see [Login] page
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Use `@manual` only when the environment truly cannot be set up automatically.
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sungen-add-flow
|
|
3
|
-
description: 'Add a new Sungen flow — scaffolds directories for E2E cross-screen testing, helps fill spec.md, and can capture visuals via the capture skills'
|
|
4
|
-
argument-hint: '[flow-name] [--path <start-url>]'
|
|
5
|
-
agent: 'agent'
|
|
6
|
-
tools: [vscode, execute, read, agent, edit, search, todo]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
**Input**: Flow name and optional starting URL (e.g., `/sungen-add-flow award-submission --path /login`).
|
|
10
|
-
|
|
11
|
-
You are adding a new Sungen flow for E2E cross-screen test generation.
|
|
12
|
-
|
|
13
|
-
## Parameters
|
|
14
|
-
|
|
15
|
-
- **flow** — ${input:flow:flow name (e.g., award-submission, user-onboarding)}
|
|
16
|
-
- **--path \<url\>** — starting page URL path (default: `/login`)
|
|
17
|
-
- **--description \<text\>** — flow description (optional)
|
|
18
|
-
|
|
19
|
-
## Steps
|
|
20
|
-
|
|
21
|
-
### 1. Scaffold the flow
|
|
22
|
-
|
|
23
|
-
Run with #tool:terminal:
|
|
24
|
-
```bash
|
|
25
|
-
sungen add-flow --flow ${input:flow} --path ${input:path}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
This creates:
|
|
29
|
-
```
|
|
30
|
-
qa/flows/${input:flow}/
|
|
31
|
-
├── features/${input:flow}.feature # Gherkin with @flow tag, Background, sample scenarios
|
|
32
|
-
├── selectors/${input:flow}.yaml # Namespaced keys: "login:submit", "awards:submit"
|
|
33
|
-
├── test-data/${input:flow}.yaml # Namespaced data: login.email, submission.nominee
|
|
34
|
-
└── requirements/
|
|
35
|
-
├── spec.md # Flow specification
|
|
36
|
-
└── ui/ # Screenshots, mockups
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### 1a. Identify the screens in the flow
|
|
40
|
-
|
|
41
|
-
Ask the user: "Which screens does this flow visit, in order? (e.g., login → dashboard → award-form → confirmation)"
|
|
42
|
-
|
|
43
|
-
Record the screen list — you will need it for:
|
|
44
|
-
- Filling `spec.md` (Step 3)
|
|
45
|
-
- Suggesting `[Screen:Element]` namespace prefixes
|
|
46
|
-
- Capturing visuals per screen (Step 2)
|
|
47
|
-
|
|
48
|
-
### 2. Capture visual source
|
|
49
|
-
|
|
50
|
-
Ask: *"Pick a visual source for this flow's screens:"*
|
|
51
|
-
- **Figma designs** (Recommended for pre-launch) — invoke `sungen-capture` skill (mode figma-mcp) for each screen
|
|
52
|
-
- **Live page scan** (dev/staging is up) — invoke `sungen-capture` skill (mode live) for each screen URL
|
|
53
|
-
- **Local images** — invoke `sungen-capture` skill (mode local) to load from `requirements/ui/`
|
|
54
|
-
- **Skip** — user will drop images manually into `requirements/ui/` later
|
|
55
|
-
|
|
56
|
-
Each capture skill writes outputs into `qa/flows/${input:flow}/requirements/ui/` and reports back a summary. Do not inline capture logic here — always delegate to the skill.
|
|
57
|
-
|
|
58
|
-
### 3. Fill spec.md
|
|
59
|
-
|
|
60
|
-
Ask: *"Fill `spec.md` now? (You can reference the captured visuals)"* — offer **Yes, fill now (Recommended)** / **Skip, fill later**.
|
|
61
|
-
|
|
62
|
-
If yes → open `qa/flows/${input:flow}/requirements/spec.md` and help the user fill:
|
|
63
|
-
- **Screens list** — ordered list of screens with URL paths
|
|
64
|
-
- **Flow steps** — what the user does at each screen
|
|
65
|
-
- **Transitions** — what triggers navigation between screens
|
|
66
|
-
- **Business rules** — cross-screen validation, state that persists
|
|
67
|
-
- **Test data** — what data is entered at each screen
|
|
68
|
-
|
|
69
|
-
Reference the captured visuals from Step 2 to suggest field names, form elements, and UI states.
|
|
70
|
-
|
|
71
|
-
### 4. Next steps
|
|
72
|
-
|
|
73
|
-
Tell the user what was created and offer next steps:
|
|
74
|
-
|
|
75
|
-
- **`/sungen-create-test ${input:flow}`** — Generate test scenarios for the flow (Recommended)
|
|
76
|
-
- **Done for now** — I'll come back later
|
|
77
|
-
|
|
78
|
-
## Key Rules
|
|
79
|
-
|
|
80
|
-
- Flows are **independent** from screens — own selectors, own test-data
|
|
81
|
-
- Selectors use `[Screen:Element]` namespace format with colon
|
|
82
|
-
- YAML keys must be **quoted** due to colon: `"login:submit":`
|
|
83
|
-
- Test data namespaced by phase: `login.email`, `submission.nominee`
|
|
84
|
-
- `@flow` tag required at feature level
|
|
85
|
-
- `Background:` should only contain the starting page navigation
|
|
86
|
-
- Each scenario = one phase of the journey
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sungen-add-screen
|
|
3
|
-
description: 'Add a new Sungen screen or a sub-feature to an existing one — scaffolds directories, helps fill spec.md, and can auto-capture a live-page screenshot via Playwright MCP'
|
|
4
|
-
argument-hint: '[screen-name] [url-path] [--feature <name>] [--figma <url>]'
|
|
5
|
-
agent: 'agent'
|
|
6
|
-
tools: [vscode, execute, read, agent, edit, search, web, browser, todo, 'playwright/*']
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
**Input**: Screen name and URL path (e.g., `/sungen-add-screen login /login`).
|
|
10
|
-
Optionally include a Figma URL: `/sungen-add-screen login /login --figma https://www.figma.com/design/...`.
|
|
11
|
-
To add a sub-feature file to an existing screen: `/sungen-add-screen awards --feature modal`.
|
|
12
|
-
|
|
13
|
-
You are adding a new Sungen screen for test generation, or extending an existing screen with an additional `.feature` file (sub-feature).
|
|
14
|
-
|
|
15
|
-
## Parameters
|
|
16
|
-
|
|
17
|
-
- **screen** — ${input:screen:screen name (e.g., login, dashboard)}
|
|
18
|
-
- **path** — ${input:path:URL path (e.g., /login, /dashboard)} — optional when --figma is provided or when adding a sub-feature
|
|
19
|
-
- **`--feature <name>`** — sub-feature name to add to an existing screen (e.g., `modal`, `filter`, `create-flow`). Creates `<screen>-<feature>.feature` + matching `selectors/<screen>-<feature>.yaml` + `test-data/<screen>-<feature>.yaml` without touching the screen's other files. Use this when one screen has multiple `.feature` files.
|
|
20
|
-
- **`--figma <url>`** — Figma share URL (optional)
|
|
21
|
-
- **`--refresh`** — bypass Figma cache and re-fetch (optional, use with --figma)
|
|
22
|
-
- **`--scale <n>`** — PNG export scale factor, default 2 (optional)
|
|
23
|
-
- **`--hi-res`** — export at 4× scale, shorthand for --scale 4 (optional)
|
|
24
|
-
|
|
25
|
-
**Mode detection** — before invoking the CLI, check whether `qa/screens/<screen>/` already exists:
|
|
26
|
-
- Screen does NOT exist → fresh screen creation (need `--path` unless `--figma` provided)
|
|
27
|
-
- Screen exists AND `--feature <name>` provided → sub-feature mode (skip spec.md, only generate the 3 new files)
|
|
28
|
-
- Screen exists AND no `--feature` → ask the user whether they meant to add a sub-feature (offer `--feature <suggested-name>`) or refresh visuals only (with `--figma`)
|
|
29
|
-
|
|
30
|
-
## Steps
|
|
31
|
-
|
|
32
|
-
### 1. Scaffold the screen (or sub-feature)
|
|
33
|
-
|
|
34
|
-
**Standard path (no --figma, no --feature):**
|
|
35
|
-
|
|
36
|
-
Run with #tool:terminal:
|
|
37
|
-
```bash
|
|
38
|
-
sungen add --screen ${input:screen} --path ${input:path}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
**Sub-feature mode (`--feature <name>` provided):**
|
|
42
|
-
|
|
43
|
-
Run with #tool:terminal:
|
|
44
|
-
```bash
|
|
45
|
-
sungen add --screen ${input:screen} --feature <name> [--path ${input:path}]
|
|
46
|
-
# Generates qa/screens/${input:screen}/{features,selectors,test-data}/${input:screen}-<name>.{feature,yaml,yaml}
|
|
47
|
-
# Existing screen files (spec.md, awards.feature, …) are untouched.
|
|
48
|
-
# --path is optional — defaults to /${input:screen} when omitted.
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Figma branch (when --figma \<url\> is provided):**
|
|
52
|
-
|
|
53
|
-
Run with #tool:terminal:
|
|
54
|
-
```bash
|
|
55
|
-
sungen add --screen ${input:screen} --figma <figma-url> [--path ${input:path}] [--feature <name>] [--refresh] [--scale <n>]
|
|
56
|
-
# --feature can be combined with --figma when the new sub-feature has its own Figma frame.
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
This CLI command automatically:
|
|
60
|
-
1. Parses the Figma URL and fetches the design node.
|
|
61
|
-
2. Downloads frame + variant PNGs to `qa/screens/${input:screen}/requirements/ui/`.
|
|
62
|
-
3. Writes `qa/screens/${input:screen}/requirements/spec_figma.md` (auto-generated, always overwritten on re-run).
|
|
63
|
-
4. Creates `qa/screens/${input:screen}/requirements/spec.md` stub **only if the file does not already exist** — never overwrites existing human content.
|
|
64
|
-
|
|
65
|
-
**Important coexistence rules:**
|
|
66
|
-
- `--figma` and `--path` can be passed together.
|
|
67
|
-
- `spec.md` is the human-authored source of truth — never modify it automatically.
|
|
68
|
-
- `spec_figma.md` is auto-generated — tell the user to copy useful sections into `spec.md`.
|
|
69
|
-
- `--capture` (Playwright screenshot) and `--figma` can be used simultaneously.
|
|
70
|
-
|
|
71
|
-
**If Figma auth is missing**, guide the user to run `sungen figma auth set` and retry.
|
|
72
|
-
|
|
73
|
-
### 1a. Synthesize narrative sections (Figma branch only)
|
|
74
|
-
|
|
75
|
-
After `sungen add --figma` succeeds, the envelope of `spec_figma.md` is deterministic but the narrative below the `<!-- SYNTHESIS-BELOW -->` marker is empty. Invoke the `sungen-capture` skill (mode figma-pat):
|
|
76
|
-
|
|
77
|
-
1. Read `qa/screens/${input:screen}/requirements/spec_figma.md` frontmatter for `file_key`, `node_id`, `figma_version_id`.
|
|
78
|
-
2. Read the cached raw node JSON at `.sungen/figma-cache/<file_key>/<figma_version_id>/<safe_node_id>-raw.json` (colons in node_id become underscores).
|
|
79
|
-
3. Follow the skill's 7-section template (Purpose / ASCII Layout / Regions / Actions / Form Fields / Data Columns / Navigation) and **replace** everything from the marker to EOF.
|
|
80
|
-
4. Preserve the envelope above the marker byte-for-byte.
|
|
81
|
-
|
|
82
|
-
**Review gate.** Before moving on, show the user the synthesized narrative and ask:
|
|
83
|
-
|
|
84
|
-
- **1) Approve** — narrative looks right, continue to Step 2
|
|
85
|
-
- **2) Edit** — user will tweak `spec_figma.md` now; wait for confirmation before continuing
|
|
86
|
-
- **3) Cancel** — abort; advise the user that `spec.md` was NOT modified and they can re-run `sungen add --figma --refresh` later
|
|
87
|
-
|
|
88
|
-
### 2. Capture visual source
|
|
89
|
-
|
|
90
|
-
**If Figma branch (Step 1) already downloaded PNGs** → visuals already exist. Offer:
|
|
91
|
-
- **1) Continue** — Figma visuals are enough (Recommended)
|
|
92
|
-
- **2) Also capture live page** — supplement Figma with real page scan (invoke `sungen-capture` skill (mode live))
|
|
93
|
-
|
|
94
|
-
**If standard path (no --figma)** → go straight to source selection:
|
|
95
|
-
- **1) Figma design** (Recommended for pre-launch) — invoke `sungen-capture` skill (mode figma-mcp)
|
|
96
|
-
- **2) Live page scan** (dev/staging is up) — invoke `sungen-capture` skill (mode live)
|
|
97
|
-
- **3) Skip** — user will drop images manually into `requirements/ui/` later
|
|
98
|
-
|
|
99
|
-
Each capture skill writes outputs into `qa/screens/${input:screen}/requirements/ui/` and reports back. Do not inline capture logic here — delegate to the skill so behavior stays consistent with `/sungen-create-test`.
|
|
100
|
-
|
|
101
|
-
### 3. Fill spec.md
|
|
102
|
-
|
|
103
|
-
**Skip this step when `--feature` was used** — the screen's existing `spec.md` is reused for all sub-features; only suggest the user append a new section for the sub-feature if useful (e.g. `## Modal — Confirm Withdrawal`).
|
|
104
|
-
|
|
105
|
-
For fresh screen creation, ask: *"Fill `spec.md` now? (You can reference the captured visuals)"* — offer **1) Yes, fill now (Recommended)** / **2) Skip, fill later**.
|
|
106
|
-
|
|
107
|
-
If yes → open `qa/screens/${input:screen}/requirements/spec.md` and help the user fill sections, fields, validation rules, business rules, and states. Reference the captured visuals from Step 2 to suggest field names, form elements, and UI states. Especially prompt for the optional **Figma URL** and **Live URL** fields in Overview — those unlock auto-capture without re-asking next run.
|
|
108
|
-
|
|
109
|
-
### 4. Next steps
|
|
110
|
-
|
|
111
|
-
Tell the user what was created. When `--feature` was used, list the 3 new files explicitly (`features/${input:screen}-<name>.feature`, `selectors/${input:screen}-<name>.yaml`, `test-data/${input:screen}-<name>.yaml`) and remind that `/sungen-create-test` currently operates at the screen level — it will see both the parent feature and the new sub-feature and ask which one to update.
|
|
112
|
-
|
|
113
|
-
Then offer next steps:
|
|
114
|
-
|
|
115
|
-
- **`/sungen-create-test ${input:screen}`** — Create test cases from requirements/designs (Recommended)
|
|
116
|
-
- **Done for now** — I'll come back later
|
|
117
|
-
|
|
118
|
-
## CLI Reference
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
sungen add --screen <name>
|
|
122
|
-
[-p, --path <path>] URL route (e.g., /awards). Required for capture; defaults to /<screen> when omitted.
|
|
123
|
-
[-f, --feature <name>] Add a sub-feature .feature file to an existing screen.
|
|
124
|
-
Output filename = <screen>-<feature>.{feature,yaml,yaml}.
|
|
125
|
-
[-c, --capture] Auto-capture a live screenshot to requirements/ui/ (needs --path).
|
|
126
|
-
[-d, --description <text>] Screen description (used in spec.md stub).
|
|
127
|
-
[--figma <url>] Figma share URL — generates spec_figma.md + ui/*.png.
|
|
128
|
-
[--refresh] Bypass Figma cache (use with --figma).
|
|
129
|
-
[--scale <n>] PNG export scale (default 2).
|
|
130
|
-
[--hi-res] Shorthand for --scale 4.
|
|
131
|
-
```
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sungen-create-test
|
|
3
|
-
description: 'Create or update test cases for a Sungen screen — generates feature + test-data files (tier-based: critical+high first, expand later). Uses sungen-gherkin-syntax and sungen-tc-generation skills.'
|
|
4
|
-
argument-hint: '[screen-name]'
|
|
5
|
-
agent: 'agent'
|
|
6
|
-
tools: [vscode, execute, read, agent, edit, search, web, browser, todo, 'playwright/*']
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
**Input**: Screen or flow name (e.g., `/sungen-create-test admin-users`).
|
|
10
|
-
|
|
11
|
-
## Role
|
|
12
|
-
|
|
13
|
-
You are a **Senior QA Engineer**. You structure test cases by viewpoint categories and translate UI into Gherkin test cases following the `sungen-gherkin-syntax` and `sungen-tc-generation` skills. **Tier 1 (critical+high) first** — expand coverage later. **Gherkin scenarios and test data only** — selectors are handled during `/sungen-run-test`.
|
|
14
|
-
|
|
15
|
-
**Quality is built in.** After generating, run a **harness loop**: `sungen audit` measures the output and you **repair the findings** until critical viewpoints are covered — the user does not ask for this. Use the `sungen-harness-audit` skill. (`/sungen-design` is an **alias** of this command.)
|
|
16
|
-
|
|
17
|
-
## Parameters
|
|
18
|
-
|
|
19
|
-
- **name** — ${input:name:screen or flow name (e.g., login, award-submission)}
|
|
20
|
-
|
|
21
|
-
**Auto-detect context**: check if `qa/api/<name>/` or `qa/api/flows/<name>/` exists → **API unit mode** (below). Else if `qa/flows/<name>/` → flow mode (base path: `qa/flows/<name>/`). Else `qa/screens/<name>/` → screen mode (base path: `qa/screens/<name>/`).
|
|
22
|
-
|
|
23
|
-
## API unit mode (driver-api)
|
|
24
|
-
|
|
25
|
-
If the unit is **api-first** (`qa/api/<name>/` or `qa/api/flows/<name>/`), the design loop differs — **no visual capture, no selectors**; the contract is the named-endpoint catalog. **Follow the `sungen-api-design` skill end-to-end** instead of the screen/flow steps: `sungen context --area <name>` (discover) → API viewpoint overview → generate `@api`/`@cases`/flow/`@concurrent`/`@query` scenarios → **`sungen audit --area <name>` gate + reviewer + repair loop to businessDepth ≥ 0.7** → record + trace. Then recommend `/sungen-run-test <name>`. The capture / viewpoint-group / selector steps do **not** apply.
|
|
26
|
-
|
|
27
|
-
## Steps
|
|
28
|
-
|
|
29
|
-
1. **Flow**: Verify `qa/flows/${input:name}/` exists. If not → `/sungen-add-flow` first.
|
|
30
|
-
**Screen**: Verify `qa/screens/${input:name}/` exists. If not → `/sungen-add-screen` first.
|
|
31
|
-
2. Check if `.feature` already has scenarios.
|
|
32
|
-
- If yes → summarize existing coverage and ask update mode (options depend on which tiers already exist — see `sungen-tc-generation` skill for details).
|
|
33
|
-
- If no → fresh creation. **Write the feature file incrementally** (successive writes/edits, ≈10-15 scenarios per call) — never emit the whole suite in one response, or it can exceed the model's output-token cap (`response exceeded the N output token maximum`). Ask generation scope:
|
|
34
|
-
- **1) Tier 1 — Critical & High priority** — ~10-15 scenarios/section: happy paths, core validation, security basics **(Recommended)**
|
|
35
|
-
- **2) Full coverage (incremental)** — Tier 1 + 2 + 3, written tier-by-tier in batches. Safe on any output-token budget.
|
|
36
|
-
- **3) Full coverage (single pass)** — everything in one go (~40-60 scenarios/section). Faster, but **only if you raised your output cap** (`CLAUDE_CODE_MAX_OUTPUT_TOKENS ≥ 64000`) — otherwise it errors mid-generation. For power users on a high-token model/config.
|
|
37
|
-
3. **Read project context + screen requirements**
|
|
38
|
-
|
|
39
|
-
**Project context** — check `qa/context.md` (project root, not screen-specific):
|
|
40
|
-
- If exists → read it. Extract: roles, testing strategy directives, global business rules, error patterns.
|
|
41
|
-
- Summarize what you found in one line (e.g. `"Roles: admin/staff/user | Strategy: focus security, skip VP-UI T1 | 2 global rules"`).
|
|
42
|
-
- These are carried into the Coverage Map when invoking the `sungen-tc-generation` skill.
|
|
43
|
-
- If absent → continue without it, no action needed.
|
|
44
|
-
|
|
45
|
-
**Screen requirements** — check `<base>/${input:name}/requirements/`:
|
|
46
|
-
- If `spec.md` exists → read it as PRIMARY source (sections, fields, validation rules, business rules, states).
|
|
47
|
-
- If `test-viewpoint.md` exists → read it. If it only contains HTML comments (scaffold template), ask:
|
|
48
|
-
- **1) Fill test-viewpoint.md first** — identify edge cases, known issues, and design decisions before generating tests
|
|
49
|
-
- **2) Continue without it** — generate tests from spec and other sources only
|
|
50
|
-
|
|
51
|
-
**Auto-detect visual source** — do NOT ask the user to pick a source. Instead, check what already exists and use it:
|
|
52
|
-
1. If `spec_figma.md` exists → read it as Figma supplement (PAT flow already completed during `add-screen`). Do NOT call any `mcp__figma__*` tool.
|
|
53
|
-
2. If `ui/` has images (`.png`, `.jpg`, etc.) → read them for visual context (layout, element positions, states).
|
|
54
|
-
3. If neither exists → ask: *"No visual source found. Pick one:"* — then invoke the **`sungen-capture`** skill with the matching **mode** (read only that mode's file):
|
|
55
|
-
- **1) Figma PAT** — ask for URL, run `sungen add --screen ${input:name} --figma '<url>'`, then `sungen-capture` **mode figma-pat**
|
|
56
|
-
- **2) Figma MCP** — `sungen-capture` **mode figma-mcp**
|
|
57
|
-
- **3) Live page scan** — `sungen-capture` **mode live**
|
|
58
|
-
- **4) Skip** — generate from spec.md only
|
|
59
|
-
|
|
60
|
-
(When `spec_figma.md` exists, that is also `sungen-capture` **mode figma-pat**; when `ui/` images exist, that is **mode local**.)
|
|
61
|
-
|
|
62
|
-
**Cross-check**: if both `spec.md` and visual sources exist, flag any discrepancies (missing fields, different labels) before moving on. When `spec_figma.md` is present, follow the Figma supplement rules in `sungen-tc-generation` skill (reading order, Text Inventory, conflict handling).
|
|
63
|
-
|
|
64
|
-
Summarize what you found in requirements and present to the user.
|
|
65
|
-
|
|
66
|
-
4. Follow the `sungen-tc-generation` skill for section identification, viewpoint generation, and output format. **For flows**, use the "Flow Test Generation" section in the skill. When requirements exist, use the "Requirements-Driven Generation" strategy. **For Tier 1**, apply the **Lightweight Guard** — verify required fields, validation rules, business rules, security checks, and key state transitions all have TCs after generation. **For Tier 2+**, **MUST** apply the full **Mapping Contract** — walk every `spec.md` section top-to-bottom and produce the indicated TCs per Table 1; handle `test-viewpoint.md` per Table 2. Do not silently skip sections. Present sections as a numbered list and let user pick.
|
|
67
|
-
5. Generate or update `.feature` + `test-data.yaml` following `sungen-gherkin-syntax` and `sungen-tc-generation` skills. Generate **group-by-group** (one viewpoint group at a time, tier-by-tier `Write`/`Edit` batches) to stay under the output-token cap. **For flows**: use `[Screen:Element]` namespace format, namespace test-data by phase, add `@flow` tag.
|
|
68
|
-
> **No parallel fan-out here.** Copilot has no sub-agents, so generation is sequential (the Claude Code variant fans out one `sungen-generator` per viewpoint group and merges). Same output, no speedup.
|
|
69
|
-
5.4. **Depth self-check (deterministic — BEFORE the audit).** Run `sungen depth-lint --screen ${input:name}`. It splits every shallow business-critical scenario into **DEEPEN IN PLACE** (add a real value assertion — the printed `template` is a theme-keyed hint, apply judgment to the actual claim; never fake one onto a visibility/behavior scenario) and **CROSS-SCREEN** (route to a flow / tag `@manual:Mx` + reason — removes it from the depth denominator honestly). Act on both, re-run until `deepen` is empty (or only honest over-counts remain), THEN gate. Lifts first-pass `businessDepth` mechanically instead of via 2–3 repair rounds.
|
|
70
|
-
5.5. **Quality gate & repair (harness — always run).** Per `sungen-harness-audit`: run `sungen audit --screen ${input:name}` (structural), THEN do an **independent semantic review inline** using the `sungen-reviewer` criteria (does each scenario's steps PROVE its title/viewpoint? observable Thens? business-critical assertion depth?). Merge both sets of issues; if gate FAILs / findings exist, repair (budget 3) and re-audit — GATE missing theme → generate it (cross-screen → **automate it in the flow** via `/sungen:add-flow`, NOT a full `@manual` screen duplicate — `sungen audit` flags an automatable `@manual` as `MANUAL-AUTOMATABLE`; reserve `@manual:Mx` for true judgment/missing-capability); DEPTH → add data assertions; BALANCE → add business-core first; TRACE → align VP ids. Never fake a pass.
|
|
71
|
-
5.6. **Record.** `sungen manifest --screen ${input:name}`. Ledger **each phase** (not just repair) — pick one `runId` at the start and pass it so `trace`/`ledger report` show THIS run, not a mix: `sungen ledger record --screen ${input:name} --run <runId> --step <discovery|viewpoint|gherkin|audit|repair:N> --ms <elapsed>`. On re-run, start with `sungen manifest --screen ${input:name} --diff` and only regenerate changed sections.
|
|
72
|
-
6. **Converge — show the trace.** Run `sungen trace --screen ${input:name}` and present: process map (phases + repair rounds), bottlenecks, **HUMAN-LOOP FOCUS** (@manual to verify), audit score + gate + residual gaps. Then offer next steps based on which tier was just generated:
|
|
73
|
-
|
|
74
|
-
> The harness gate + reviewer already ran above — `/sungen-review` is the independent checkpoint (hand/prompt-authored or pre-delivery), not a needed next step here.
|
|
75
|
-
|
|
76
|
-
**Optional — exploration mode (Loop 2).** The suite above is the deterministic official output. To push past "same output every time", offer the **challenge pass**: run `sungen challenge --screen ${input:name}` (deterministic structural critics), then apply the `sungen-challenge` criteria inline for semantic + novelty candidates. Advisory only — surfaces blind spots + ≤20% novelty candidates, never auto-merges. Record a confirmed recurring miss with `sungen blindspot add` so future runs don't repeat it.
|
|
77
|
-
|
|
78
|
-
**After Tier 1 generation:**
|
|
79
|
-
- **`/sungen-run-test ${input:name}`** — Generate selectors and run tests now (Recommended)
|
|
80
|
-
- **`/sungen-create-test ${input:name}`** — Expand coverage: add @normal + @low scenarios (Tier 2)
|
|
81
|
-
- **Done for now** — I'll come back later
|
|
82
|
-
|
|
83
|
-
**After Tier 2 generation:**
|
|
84
|
-
- **`/sungen-create-test ${input:name}`** — Deep coverage: add BVA combos, cross-field validation, negative inputs, race conditions (Tier 3) (Recommended)
|
|
85
|
-
- **`/sungen-run-test ${input:name}`** — Generate selectors and run tests now
|
|
86
|
-
- **Done for now** — I'll come back later
|
|
87
|
-
|
|
88
|
-
**After Tier 3 or Full generation:**
|
|
89
|
-
- **`/sungen-run-test ${input:name}`** — Generate selectors and run tests now (Recommended)
|
|
90
|
-
- **`/sungen-create-test ${input:name}`** — Add more sections if the screen changed
|
|
91
|
-
- **Done for now** — I'll come back later
|
|
92
|
-
|
|
93
|
-
**No selectors.yaml** — selectors are generated during `/sungen-run-test`.
|