@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/github-skill-sungen-viewpoint-group-b-data-ops.md
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# GROUP B: DATA OPERATIONS
|
|
2
|
-
|
|
3
|
-
> The user creates, edits, or deletes a specific record in the system.
|
|
4
|
-
|
|
5
|
-
Patterns: 4. Create / Add · 5. Update / Edit · 6. Delete
|
|
6
|
-
See `SKILL.md` for the 4 Viewpoints, Shared Checks, and Security Tag Rules.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 4. Create / Add
|
|
11
|
-
|
|
12
|
-
**Apply when**: the screen has a function to create a new record (an "Add", "Create", "New" button, or a link to a create form).
|
|
13
|
-
|
|
14
|
-
**Inherits**: Form & Inputs — field-level validation (required, format, maxlength, whitespace, real-time error clear). Generate those once here; this pattern adds the create-specific rules below.
|
|
15
|
-
|
|
16
|
-
**Shared checks applied**: XSS/Injection
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
### Tier 1 — @high
|
|
21
|
-
|
|
22
|
-
**[VP-LOGIC] Create behavior**
|
|
23
|
-
|
|
24
|
-
- Open the create form → all fields are empty (blank slate), no data cached from a previous open or a previous submit
|
|
25
|
-
- Submit the form with valid data → the record is created successfully, success feedback appears (toast and/or redirect), no error on the form
|
|
26
|
-
- The new record appears in the correct position in the list per the current sort rule (usually newest first)
|
|
27
|
-
- Submit success → toast shows {{success_message}} from test-data.yaml, auto-dismisses after a few seconds
|
|
28
|
-
- Cancel / navigate away while the form is dirty → confirmation dialog "Discard changes?"; choosing Discard → no record is created in the DB
|
|
29
|
-
- User clicks Save twice in a row before the response → only 1 record is created, no duplicate
|
|
30
|
-
|
|
31
|
-
**[VP-VAL] Unique constraints**
|
|
32
|
-
|
|
33
|
-
- Enter a value duplicating an existing unique field (e.g. email, employee code) → rejected, inline error right at that field
|
|
34
|
-
- Required fields empty → the form cannot submit, no record is created in the DB (Submit disabled, or an inline error at each field on Submit click — depends on impl)
|
|
35
|
-
- Enter the wrong format → inline error at the field, field highlighted (text comes from {{format_error}} in test-data.yaml)
|
|
36
|
-
|
|
37
|
-
**[VP-SEC]**
|
|
38
|
-
|
|
39
|
-
- POST request to create a record without authentication → 401/403, no record is created in the DB
|
|
40
|
-
- POST request to create a record beyond the user's privilege (lower role) → 403 Forbidden from the server
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### Tier 2 — @normal + @low
|
|
45
|
-
|
|
46
|
-
**[VP-UI] Interface states**
|
|
47
|
-
|
|
48
|
-
- [@normal] Form opens: required fields have a visual indicator (asterisk, color), optional fields do not
|
|
49
|
-
- [@normal] Navigate away while the form is unchanged (pristine) → no confirmation dialog appears
|
|
50
|
-
- [@low] Autofocus: the cursor moves to the first field automatically when the form opens
|
|
51
|
-
- [@low] "Save & Add Another" (if the spec has it): save succeeds → the form resets to blank, no redirect
|
|
52
|
-
|
|
53
|
-
**[VP-VAL] Dependency**
|
|
54
|
-
|
|
55
|
-
- [@normal] Select Field A (parent dropdown) → Field B (child dropdown) updates its options accordingly
|
|
56
|
-
- [@normal] Fields with default values: the value is shown when the form opens, the user can clear it and enter another value
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
### ⚡ Cross-pattern interactions
|
|
61
|
-
|
|
62
|
-
- **+ Form & Inputs**: Apply the entire VP-VAL checklist of Form & Inputs (boundary values, real-time error clear)
|
|
63
|
-
- **+ File Upload**: A form with a file upload field → cannot submit if the upload is not finished
|
|
64
|
-
- **+ Modal/Dialog**: Form inside a modal → on submit success the modal closes, the background list auto-refreshes
|
|
65
|
-
- **+ Data Table**: The new record appears in the table in the correct position, the total count increases by 1
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 5. Update / Edit
|
|
70
|
-
|
|
71
|
-
**Apply when**: the screen has a function to edit an existing record (an "Edit" button, a pencil icon, or inline edit).
|
|
72
|
-
|
|
73
|
-
**Inherits**: Form & Inputs — field-level validation (required, format, maxlength, whitespace, real-time error clear). Generate those once here; this pattern adds the edit-specific rules below.
|
|
74
|
-
|
|
75
|
-
**Shared checks applied**: XSS/Injection
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
### Tier 1 — @high
|
|
80
|
-
|
|
81
|
-
**[VP-LOGIC] Edit behavior**
|
|
82
|
-
|
|
83
|
-
- Open the edit form → all fields are pre-filled with the correct current data from the DB (text, selected dropdown, date, radio, checkbox)
|
|
84
|
-
- Change data and save → the record is updated in the DB, the UI reflects the new data immediately without a full-page reload
|
|
85
|
-
- Save success → toast shows {{success_message}} from test-data.yaml, auto-dismisses after a few seconds
|
|
86
|
-
- Cancel / navigate away while the form is dirty → confirmation dialog "Discard changes?"; choosing Discard → the DB is unchanged, data stays at the old value
|
|
87
|
-
- Save when the form has no changes (pristine) → no redundant DB UPDATE: either the Save button is disabled, or a request is sent but the server returns a no-op (verify via the Network tab: no write operation)
|
|
88
|
-
|
|
89
|
-
**[VP-VAL] Validation on edit**
|
|
90
|
-
|
|
91
|
-
- Change a unique field to a value already used by another record → rejected, inline error at the field
|
|
92
|
-
- Leave a unique field of the same record unchanged → save succeeds, no self-duplicate error
|
|
93
|
-
- Clear a required field → the Submit button becomes disabled again (override if the spec validates on submit: an inline error appears at the field on Submit click)
|
|
94
|
-
- Readonly / identity fields (ID, created date, username) → cannot be edited, accept no click/input
|
|
95
|
-
|
|
96
|
-
**[VP-SEC]**
|
|
97
|
-
|
|
98
|
-
- PUT/PATCH request without authentication → 401/403, the DB is unchanged
|
|
99
|
-
- Edit a record belonging to another user/tenant (IDOR) → 403 Forbidden, the DB is unchanged
|
|
100
|
-
- Edit a record that has been deleted (stale link) → 404 Not Found
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
### Tier 2 — @normal + @low
|
|
105
|
-
|
|
106
|
-
**[VP-UI] Interface states**
|
|
107
|
-
|
|
108
|
-
- [@normal] Readonly fields: visually dimmed, cursor not-allowed, accept no input
|
|
109
|
-
- [@normal] Unsaved-changes indicator: the title or tab shows a "•" or "(unsaved)" mark while the form is dirty
|
|
110
|
-
- [@normal] Concurrent edit: the server returns 409 Conflict on save → the error message clearly states "data was changed by someone else", the user does not lose entered data and is guided to reload to see the latest version
|
|
111
|
-
- [@low] "Last updated by [user] at [time]": the username and timestamp match exactly the last edit in the DB
|
|
112
|
-
|
|
113
|
-
**[VP-VAL] Dependency on edit**
|
|
114
|
-
|
|
115
|
-
- [@normal] Field dependency works as in Create: changing Field A → Field B updates its options, without resetting unrelated fields
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
### ⚡ Cross-pattern interactions
|
|
120
|
-
|
|
121
|
-
- **+ Form & Inputs**: Apply the entire VP-VAL checklist of Form & Inputs
|
|
122
|
-
- **+ File Upload**: The current file is shown → the user can replace it (new upload) or remove it, no need to re-upload if unchanged
|
|
123
|
-
- **+ Modal/Dialog**: Edit form inside a modal → on submit success the modal closes, the background data refreshes immediately
|
|
124
|
-
- **+ Data Table**: The row in the table reflects the new data immediately after a successful edit, without reloading the whole table
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 6. Delete
|
|
129
|
-
|
|
130
|
-
**Apply when**: the screen has a function to delete a record (a "Delete" button, a trash icon, or a context-menu action).
|
|
131
|
-
|
|
132
|
-
**Shared checks applied**: (no default shared check)
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### Tier 1 — @high
|
|
137
|
-
|
|
138
|
-
**[VP-LOGIC] Delete behavior**
|
|
139
|
-
|
|
140
|
-
- Click Delete → a confirmation dialog must appear (no immediate delete), the confirm button uses a warning color (red/orange)
|
|
141
|
-
- Confirm the delete → the record disappears from the UI immediately, a toast shows the delete success message
|
|
142
|
-
- Cancel the confirmation → the dialog closes, the record stays in the UI and in the DB, no API is called
|
|
143
|
-
- Delete the last record on the current page (pagination) → automatically go to the previous page, no blank page is shown
|
|
144
|
-
- Delete a record referenced by another record (foreign key) → blocked, error message states the name of the module still using this record, the record is not deleted
|
|
145
|
-
|
|
146
|
-
**[VP-VAL] Delete type**
|
|
147
|
-
|
|
148
|
-
- Soft delete (default): the record is hidden from the main list, still in the DB with the flag `is_deleted = true`, the direct URL → 404 (override if the spec uses hard delete: the record is fully removed from the DB)
|
|
149
|
-
|
|
150
|
-
**[VP-SEC]**
|
|
151
|
-
|
|
152
|
-
- DELETE request without authentication → 401/403, the record is not deleted from the DB
|
|
153
|
-
- DELETE a record belonging to another user/tenant (IDOR via API) → 403 Forbidden, the record is not deleted
|
|
154
|
-
- Directly access the URL of a deleted record (soft or hard) → 404 Not Found
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
### Tier 2 — @normal + @low
|
|
159
|
-
|
|
160
|
-
**[VP-UI] Interface states**
|
|
161
|
-
|
|
162
|
-
- [@normal] Confirmation dialog: a clear title "Delete [record name]?", a body explaining the action cannot be undone
|
|
163
|
-
- [@normal] Deleting (loading): the confirm button shows a spinner and is disabled to prevent a double-click
|
|
164
|
-
- [@normal] Delete button: visually a warning (red color or a warning icon), not placed next to Save to avoid mis-clicks
|
|
165
|
-
- [@low] Bulk delete (if the spec has it): select multiple records → one confirmation for all, count stated clearly "Delete 3 records?"
|
|
166
|
-
|
|
167
|
-
**[VP-VAL] Dependency**
|
|
168
|
-
|
|
169
|
-
- [@normal] Cascade delete (if the spec has it): delete a parent → the confirmation dialog lists how many children will be deleted with it
|
|
170
|
-
- [@normal] Set Null (if the spec has it): delete a parent → child records still exist, the reference field becomes "Unassigned" or null
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
### ⚡ Cross-pattern interactions
|
|
175
|
-
|
|
176
|
-
- **+ Data Table**: The record disappears from the table immediately, the total count decreases by 1, the pagination adjusts itself
|
|
177
|
-
- **+ Modal/Dialog**: The delete confirmation is a modal → close the modal after deleting, the background table refreshes
|
|
178
|
-
- **+ List/Card View**: The card/row disappears immediately after a successful delete, no page reload needed
|
|
179
|
-
- **+ Notification**: The delete-success toast shows {{delete_success_message}} from test-data.yaml
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
# GROUP C: DATA EXPLORATION
|
|
2
|
-
|
|
3
|
-
> The user searches, filters, and browses existing data in the system.
|
|
4
|
-
|
|
5
|
-
Patterns: 7. Data Table · 8. Search · 9. Filter · 10. List / Card View
|
|
6
|
-
See `SKILL.md` for the 4 Viewpoints, Shared Checks, and Security Tag Rules.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 7. Data Table
|
|
11
|
-
|
|
12
|
-
**Apply when**: the screen shows data as a table with rows and columns, usually with sort, pagination, and row-level actions.
|
|
13
|
-
|
|
14
|
-
**Shared checks applied**: Loading State, Empty State, XSS/Injection (data from the DB displayed safely)
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
### Tier 1 — @high
|
|
19
|
-
|
|
20
|
-
**[VP-LOGIC] Table behavior**
|
|
21
|
-
|
|
22
|
-
- Table finishes loading → the number of rows shown matches the configured page size (e.g. 10, 20, 50 rows/page)
|
|
23
|
-
- The total record count in the UI ("Total: X records") matches exactly the real record count in the DB
|
|
24
|
-
- Click a sortable column header → data re-sorts in the correct order (ASC first, DESC second), the sort icon changes accordingly
|
|
25
|
-
- Click a sortable column header once → sort ASC, ↑ icon shows; twice → sort DESC, ↓ icon shows; three times → back to unsorted, icon disappears
|
|
26
|
-
- Click an action button (Edit/Delete/View) on a row → the action applies to that exact row (correct record ID, not a different row)
|
|
27
|
-
- *Pagination:* Click page 2 → the table shows the correct next records, no overlap with page 1
|
|
28
|
-
- *Pagination:* Change the page size → the table reloads with the new row count, resets to page 1
|
|
29
|
-
|
|
30
|
-
**[VP-VAL] Data integrity**
|
|
31
|
-
|
|
32
|
-
- The value in each cell matches exactly the data in the DB (amount, date, status label, unit)
|
|
33
|
-
- Long text in a cell → truncated with `...`, does not break the layout or push the column out
|
|
34
|
-
- A column with a null/empty value → shows a placeholder (em dash or empty cell), not raw "undefined" or "null", the cell layout does not break
|
|
35
|
-
|
|
36
|
-
**[VP-SEC]**
|
|
37
|
-
|
|
38
|
-
- Data from the DB containing HTML/script tags → rendered as literal text, not executed (XSS)
|
|
39
|
-
- A user without permission to view a sensitive column (salary, national ID…) → the column is fully hidden from the DOM, not leaked via the API response (override if the spec wants to show `***` so the user knows the field exists)
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
### Tier 2 — @normal + @low
|
|
44
|
-
|
|
45
|
-
**[VP-UI] Interface states**
|
|
46
|
-
|
|
47
|
-
- [@normal] Sortable column header: has an arrow/indicator icon and a pointer cursor; a non-sortable column has no icon
|
|
48
|
-
- [@normal] Sticky header: scroll down vertically → the header row stays fixed, the column headers are always visible
|
|
49
|
-
- [@normal] Sticky action column (if the table scrolls horizontally): the Edit/Delete column is fixed on the right, not scrolled out of the viewport
|
|
50
|
-
- [@normal] Row hover: the background color changes slightly, clearly indicating which row is hovered
|
|
51
|
-
- [@normal] Pagination controls: Previous is disabled on page 1; Next is disabled on the last page; the current page is highlighted
|
|
52
|
-
- [@low] Column resize (if present): drag the header border to change the width, without affecting the data
|
|
53
|
-
|
|
54
|
-
**[VP-VAL] Edge cases**
|
|
55
|
-
|
|
56
|
-
- [@normal] Table with 1 row → pagination is fully hidden (override if the spec wants "Page 1 of 1"), no UI glitch
|
|
57
|
-
- [@normal] Sort on a datetime column → sorts correctly by the real timestamp, not alphabetically as a string
|
|
58
|
-
- [@normal] Sort on a numeric column → sorts correctly by numeric value (10 > 9), not as a string ("10" < "9")
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
### ⚡ Cross-pattern interactions
|
|
63
|
-
|
|
64
|
-
- **+ Search**: Search submit → the table filters immediately, pagination resets to page 1, the sort state is preserved
|
|
65
|
-
- **+ Filter**: Apply a filter → the table shows only matching rows, the total count updates, pagination resets to page 1
|
|
66
|
-
- **+ Update/Edit**: Save an edit successfully → the row in the table reflects the new data immediately, no full-page reload
|
|
67
|
-
- **+ Delete**: Delete a record → the row disappears immediately, the total count decreases by 1, pagination adjusts itself
|
|
68
|
-
- **+ Import/Export**: After import → the table auto-refreshes; Export takes exactly the data currently shown (current filter + sort)
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## 8. Search
|
|
73
|
-
|
|
74
|
-
**Apply when**: the screen has a search box (search bar) letting the user filter data by keyword.
|
|
75
|
-
|
|
76
|
-
**Shared checks applied**: Empty State, XSS/Injection
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
### Tier 1 — @high
|
|
81
|
-
|
|
82
|
-
**[VP-LOGIC] Search behavior**
|
|
83
|
-
|
|
84
|
-
*Basic search:*
|
|
85
|
-
- Enter a valid keyword → results show the correct records containing the keyword (case-insensitive)
|
|
86
|
-
- Partial-match keyword → records containing the keyword anywhere all appear
|
|
87
|
-
- Enter a keyword matching no record → the Empty State message appears ("No results found"), the layout does not break
|
|
88
|
-
- Clear the keyword → the list reloads to the default state (all records), no need to press Search again
|
|
89
|
-
|
|
90
|
-
*Advanced search (if the spec has multiple search fields):*
|
|
91
|
-
- Fill multiple fields → results satisfy ALL filled conditions (AND logic)
|
|
92
|
-
- Leave some fields empty → filter only by the filled fields, empty fields are ignored
|
|
93
|
-
|
|
94
|
-
**[VP-VAL] Input handling**
|
|
95
|
-
|
|
96
|
-
- Input containing only whitespace → auto-trimmed, search with empty string → results as if not searched
|
|
97
|
-
- Enter special characters (single quote `'`, `%`, `_`) → treated as literal text, the query is not broken, results are valid
|
|
98
|
-
- Input beyond max length → field accepts no more characters (HTML maxlength default)
|
|
99
|
-
|
|
100
|
-
**[VP-SEC]** → Apply Shared Check: XSS/Injection (the search term shown in the results must be escaped correctly) + **SQL injection layer 2** (the search field reaches a LIKE query → test the API-level bypass `@high @manual`)
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
### Tier 2 — @normal + @low
|
|
105
|
-
|
|
106
|
-
**[VP-UI] Interface states**
|
|
107
|
-
|
|
108
|
-
- [@normal] A search icon or placeholder clearly hints what the field is for ("Search by name, email…")
|
|
109
|
-
- [@normal] Clear button (X): appears when there is text, click → the field empties and the list resets, no navigation away from the page
|
|
110
|
-
- [@normal] Search trigger: debounce ~300ms after stopping typing, or press Enter → the API call runs, a loading indicator shows in the table
|
|
111
|
-
- [@low] The keyword is highlighted in the results: the matching text portion is bold or a standout color
|
|
112
|
-
|
|
113
|
-
**[VP-VAL] Edge cases**
|
|
114
|
-
|
|
115
|
-
- [@normal] Keyword is pure digits (e.g. "12345") → searches correctly in numeric fields and text fields
|
|
116
|
-
- [@normal] Keyword is accented Vietnamese → results are correct, no encoding glitch
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
### ⚡ Cross-pattern interactions
|
|
121
|
-
|
|
122
|
-
- **+ Data Table**: Search submit → the table filters immediately, pagination resets to page 1
|
|
123
|
-
- **+ Filter**: Search + Filter both active → results satisfy BOTH conditions (AND)
|
|
124
|
-
- **+ Pagination**: Search returns many results → pagination shows correctly, the total count updates
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 9. Filter
|
|
129
|
-
|
|
130
|
-
**Apply when**: the screen has filters (dropdown, date range picker, checkbox group, radio group…) to narrow down the displayed dataset.
|
|
131
|
-
|
|
132
|
-
**Shared checks applied**: Empty State, URL Manipulation
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### Tier 1 — @high
|
|
137
|
-
|
|
138
|
-
**[VP-LOGIC] Filter behavior**
|
|
139
|
-
|
|
140
|
-
- Select 1 filter value → the list/table shows only matching records, the total count updates correctly
|
|
141
|
-
- Select multiple values within the same filter group → show records matching ANY value in the group (OR logic within the group)
|
|
142
|
-
- Apply multiple filter groups at once → show records matching ALL groups (AND across groups)
|
|
143
|
-
- Reset / Clear All filters → the list returns to default, all filter controls return to their initial values
|
|
144
|
-
- A filter combination yielding 0 results → the Empty State appears, the layout does not break
|
|
145
|
-
- Dependent filter (if the screen has one): select Filter A → Filter B's options reset and reload per A's value immediately, no stale old options retained
|
|
146
|
-
|
|
147
|
-
**[VP-VAL] Input validation**
|
|
148
|
-
|
|
149
|
-
- Date range: start date > end date → the Apply button is disabled, the filter is not activated
|
|
150
|
-
- Numeric range: min > max → the Apply button is disabled, the filter is not activated
|
|
151
|
-
- Dropdown filter: options match exactly the real data in the DB (no orphan option)
|
|
152
|
-
|
|
153
|
-
**[VP-SEC]** → Apply Shared Check: URL Manipulation (tampered filter params → fallback to default, no crash)
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
### Tier 2 — @normal + @low
|
|
158
|
-
|
|
159
|
-
**[VP-UI] Interface states**
|
|
160
|
-
|
|
161
|
-
- [@normal] Active filters: shown as clear tags/chips, each tag has an X to remove that filter individually
|
|
162
|
-
- [@normal] Collapse/expand the filter panel: the selected state of the filters is preserved, not reset on collapse
|
|
163
|
-
- [@normal] Filter count badge: "Filters (3)" or an indicator shows the number of active filters
|
|
164
|
-
- [@low] Filter options in alphabetical order (override if the spec uses frequency sort or a custom order), not random on each open
|
|
165
|
-
|
|
166
|
-
**[VP-VAL] Edge cases**
|
|
167
|
-
|
|
168
|
-
- [@normal] A filter option removed from the DB (orphan option) → does not appear in the dropdown, no crash even if the URL still has the old param
|
|
169
|
-
- [@normal] Filter with a date range spanning a different timezone → results are correct per the server's timezone
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
### ⚡ Cross-pattern interactions
|
|
174
|
-
|
|
175
|
-
- **+ Search**: Filter + Search both active → AND logic, total records = the intersection of both conditions
|
|
176
|
-
- **+ Data Table**: Apply a filter → the table reloads, pagination resets to page 1, the sort state is preserved
|
|
177
|
-
- **+ Export**: Export with an active filter → the file contains only filtered records, not the entire dataset
|
|
178
|
-
- **+ Pagination**: A filter changing the total count → pagination recalculates, automatically goes to page 1
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## 10. List / Card View
|
|
183
|
-
|
|
184
|
-
**Apply when**: the screen shows many records as a list (rows) or cards (grid), possibly with infinite scroll or a "Load More" button instead of traditional pagination.
|
|
185
|
-
|
|
186
|
-
**Shared checks applied**: Loading State, Empty State
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
### Tier 1 — @high
|
|
191
|
-
|
|
192
|
-
**[VP-LOGIC] Navigation & actions**
|
|
193
|
-
|
|
194
|
-
- Click a card/row → navigate to the correct detail page of that record (correct ID, not a different record)
|
|
195
|
-
- A quick action directly on the card (Like, Bookmark, Add to Cart, Status toggle) → changes the state immediately without navigating to another page
|
|
196
|
-
- *Infinite scroll:* Scroll to the bottom → the next records are appended to the list, the scroll position does not jump back to the top
|
|
197
|
-
- *Load More button:* Click "Load More" → the next records are appended, the total count updates
|
|
198
|
-
- Broken image (image URL is broken or returns 404) → a placeholder image is shown, the card layout does not break
|
|
199
|
-
|
|
200
|
-
**[VP-VAL] Data integrity**
|
|
201
|
-
|
|
202
|
-
- The values shown on the card (price, status, tag, rating) match exactly the data in the DB
|
|
203
|
-
- The total count ("Showing X of Y") matches the real total records after applying the current filter/search
|
|
204
|
-
|
|
205
|
-
**[VP-SEC]**
|
|
206
|
-
|
|
207
|
-
- Sensitive data (national ID, bank account number) of another user is not shown in the card → verify the DOM does not contain this data
|
|
208
|
-
- A quick action (Like, Follow) without auth → redirect to Login, the action is not performed
|
|
209
|
-
|
|
210
|
-
---
|
|
211
|
-
|
|
212
|
-
### Tier 2 — @normal + @low
|
|
213
|
-
|
|
214
|
-
**[VP-UI] Interface states**
|
|
215
|
-
|
|
216
|
-
- [@normal] Interactive cards: a clear hover effect (shadow, scale, or overlay) + pointer cursor; non-interactive (informational only) cards: no hover effect, default cursor
|
|
217
|
-
- [@normal] Grid/List layout toggle (if present): the switch changes the layout immediately, the data is unchanged, the preference is saved on page reload
|
|
218
|
-
- [@normal] Skeleton loading: while fetching → skeleton cards show the correct count and layout, no blank screen
|
|
219
|
-
- [@low] Lazy-loading images: images in the viewport load first, images outside load when scrolled to
|
|
220
|
-
|
|
221
|
-
**[VP-VAL] Edge cases**
|
|
222
|
-
|
|
223
|
-
- [@normal] A card with very long text (title, description) → text truncates with single-line ellipsis, does not break the card width (override if the spec uses a multi-line clamp: max 2-3 lines)
|
|
224
|
-
- [@normal] Load More / infinite scroll with total < page size → the "Load More" button is fully hidden (override if the spec wants it shown disabled with "No more records")
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
### ⚡ Cross-pattern interactions
|
|
229
|
-
|
|
230
|
-
- **+ Search**: Keyword submit → the list filters immediately, showing only cards matching the keyword
|
|
231
|
-
- **+ Filter**: Apply a filter → the list reloads, showing only cards matching the condition
|
|
232
|
-
- **+ Delete**: Delete a record → the card disappears from the list immediately, the total count decreases by 1
|
|
233
|
-
- **+ Update/Edit**: Edit successfully → the card reflects the new data immediately (name, status, image)
|
package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-d-display.md
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
# GROUP D: DISPLAY & FEEDBACK
|
|
2
|
-
|
|
3
|
-
> The user reads visualized data, interacts with overlay panels, moves between sections, and receives feedback from the system.
|
|
4
|
-
|
|
5
|
-
Patterns: 11. Chart / Analytics · 12. Modal / Dialog · 13. Navigation · 14. Notification / Toast / Alert
|
|
6
|
-
See `SKILL.md` for the 4 Viewpoints, Shared Checks, and Security Tag Rules.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 11. Chart / Analytics
|
|
11
|
-
|
|
12
|
-
**Apply when**: the screen has charts (bar, line, pie, donut, scatter…) or a dashboard showing aggregate figures (KPI cards, metrics).
|
|
13
|
-
|
|
14
|
-
**Shared checks applied**: Loading State, Empty State
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
### Tier 1 — @high
|
|
19
|
-
|
|
20
|
-
**[VP-LOGIC] Data accuracy**
|
|
21
|
-
|
|
22
|
-
- The values shown on the chart (numbers, %, totals) match exactly the raw data in the DB after computation
|
|
23
|
-
- Change the time range/filter → the chart reloads with the correct data for the new range, no stale data from the previous fetch
|
|
24
|
-
- Hover a data point/bar/slice → the tooltip shows the exact value, matching the corresponding Y/X axis
|
|
25
|
-
- Multiple series on one chart → the legend has the correct names and colors, toggling hide/show hides/shows the corresponding data
|
|
26
|
-
- Click a data point with drill-down → navigate to a list/detail showing exactly the records of that dimension
|
|
27
|
-
|
|
28
|
-
**[VP-VAL] Data integrity**
|
|
29
|
-
|
|
30
|
-
- A chart with a value of 0 → shows 0 clearly (bar height = 0, the data point is not hidden), no crash
|
|
31
|
-
- A chart with a single data point → renders correctly, no scale/ratio glitch
|
|
32
|
-
- A very large outlier value → the Y-axis scale adjusts to fit, smaller data points remain distinguishable
|
|
33
|
-
|
|
34
|
-
**[VP-SEC]**
|
|
35
|
-
|
|
36
|
-
- A chart showing another tenant's data via a changed URL param → 403 Forbidden, no data returned
|
|
37
|
-
- Sensitive data (salary, private revenue) for a user without permission → the API returns no data, the chart shows "No permission" instead of an empty state
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
### Tier 2 — @normal + @low
|
|
42
|
-
|
|
43
|
-
**[VP-UI] Interface states**
|
|
44
|
-
|
|
45
|
-
- [@normal] Loading: a skeleton chart or spinner shows while fetching, axes and labels do not flash/flicker when the data arrives
|
|
46
|
-
- [@normal] Responsive: the chart resizes correctly when the viewport changes, no overflow of the container and no clipping
|
|
47
|
-
- [@normal] Legend: the colors in the legend match exactly the colors on the chart, clicking toggles hide/show of a series immediately
|
|
48
|
-
- [@low] Axis labels: do not overlap (rotate if needed), have a clear unit (VND, %, people)
|
|
49
|
-
- [@low] Export chart (if present): the PNG/PDF file contains the chart currently shown, including title, legend, and axis labels
|
|
50
|
-
|
|
51
|
-
**[VP-VAL] Edge cases**
|
|
52
|
-
|
|
53
|
-
- [@normal] API timeout/error → the chart area shows a clear error state + a "Retry" button, not an empty chart or a chart with stale data
|
|
54
|
-
- [@normal] A very wide time range (multiple years) → the chart aggregates data correctly (by month/quarter, not by day), no performance issue or layout break
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
### ⚡ Cross-pattern interactions
|
|
59
|
-
|
|
60
|
-
- **+ Filter**: Apply a filter → the chart re-renders with filtered data, the title/subtitle updates to reflect the active filter
|
|
61
|
-
- **+ Data Table**: Chart and table shown on the same screen → the total on the chart matches the total rows in the table
|
|
62
|
-
- **+ Export**: Export data from the chart → the CSV/XLSX contains raw data matching exactly the values shown on the chart
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## 12. Modal / Dialog
|
|
67
|
-
|
|
68
|
-
**Apply when**: the screen has an overlay panel that opens on top of the main page (confirm an action, a small form, show details).
|
|
69
|
-
|
|
70
|
-
**Shared checks applied**: (no default shared check)
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
### Tier 1 — @high
|
|
75
|
-
|
|
76
|
-
**[VP-LOGIC] Open/close behavior**
|
|
77
|
-
|
|
78
|
-
- Trigger the modal (click a button/link) → the modal opens with the correct content, a backdrop overlay covers the whole background
|
|
79
|
-
- Click the X or Cancel button → the modal closes, the user's entered data is cleared, the background is unchanged
|
|
80
|
-
- Press Escape → the modal closes, equivalent to Cancel
|
|
81
|
-
- Click the backdrop (outside the modal area) → the modal closes if it is dismissible
|
|
82
|
-
- A submit action in the modal succeeds → the modal closes itself, the background data/list refreshes immediately without a page reload
|
|
83
|
-
- A submit action in the modal fails (server error) → the modal stays open, the error message appears inside the modal, the entered data is not lost
|
|
84
|
-
|
|
85
|
-
**[VP-VAL]**
|
|
86
|
-
|
|
87
|
-
- A form inside a modal: apply all the validation rules of the Form & Inputs pattern
|
|
88
|
-
- A confirmation dialog: only a message + 2 buttons Confirm/Cancel, no input field
|
|
89
|
-
|
|
90
|
-
**[VP-SEC]**
|
|
91
|
-
|
|
92
|
-
- A modal containing sensitive data (PII, credentials) → when the modal closes, the HTML is removed from the DOM (no longer present in inspect element)
|
|
93
|
-
- Trigger the modal without authentication → redirect to Login, the modal content is not rendered
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
### Tier 2 — @normal + @low
|
|
98
|
-
|
|
99
|
-
**[VP-UI] Interface states**
|
|
100
|
-
|
|
101
|
-
- [@normal] Modal centered: in the middle of the viewport, the backdrop dims the whole screen, background scroll is locked
|
|
102
|
-
- [@normal] Focus trap: the Tab key only cycles through elements INSIDE the modal, does not jump out to the backdrop
|
|
103
|
-
- [@normal] Stacked modals: Modal B opens on top of Modal A → B has a higher z-index, closing B keeps A still present and usable
|
|
104
|
-
- [@normal] Responsive: on mobile the modal takes full width or a bottom-sheet form, the action buttons are not hidden by the keyboard
|
|
105
|
-
- [@low] Animation: the modal opens with a fade-in/slide-in, closes with a fade-out, no jitter or flicker
|
|
106
|
-
|
|
107
|
-
**[VP-VAL] Edge cases**
|
|
108
|
-
|
|
109
|
-
- [@normal] Reopen the modal after closing → the content resets to the initial state, no data retained from the previous open
|
|
110
|
-
- [@low] Modal content overflow: content taller than the viewport → the modal has an internal scroll, the background page does not scroll
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
### ⚡ Cross-pattern interactions
|
|
115
|
-
|
|
116
|
-
- **+ Form & Inputs**: A modal form submit succeeds → the modal closes, a success toast shows on the background page
|
|
117
|
-
- **+ Create/Add**: A create form in a modal → on success: the modal closes, the list auto-refreshes, the total count increases by 1
|
|
118
|
-
- **+ Delete**: A confirmation modal → Confirm: the modal closes, the record is deleted, the list refreshes; Cancel: the modal closes, the record remains
|
|
119
|
-
- **+ Notification**: An action in the modal triggers a toast → the toast shows on the background page after the modal closes, not hidden by the modal
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## 13. Navigation
|
|
124
|
-
|
|
125
|
-
**Apply when**: the screen has a side menu, tab bar, breadcrumb, or top navigation bar to move between sections/pages.
|
|
126
|
-
|
|
127
|
-
**Shared checks applied**: (no default shared check)
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
### Tier 1 — @high
|
|
132
|
-
|
|
133
|
-
**[VP-LOGIC] Navigation behavior**
|
|
134
|
-
|
|
135
|
-
- Click a menu item/tab → navigate to the correct corresponding page/section, the URL changes correctly
|
|
136
|
-
- The active item is clearly highlighted (visually distinct from inactive items)
|
|
137
|
-
- Breadcrumb: click a parent-level link → navigate to the correct parent page, no 404
|
|
138
|
-
- Breadcrumb: the last item (current page) is plain text, not a link, not navigable
|
|
139
|
-
- Sub-menu: click a parent menu → the sub-menu expands; click again → it collapses; the state is preserved when navigating to another menu and back
|
|
140
|
-
|
|
141
|
-
**[VP-VAL]**
|
|
142
|
-
|
|
143
|
-
- A menu item with a badge/counter (notification count) → the number matches the actual unread count from the API, updates after reading
|
|
144
|
-
- A tab with dynamic content → switching tabs loads the correct content of that tab, not another tab's content
|
|
145
|
-
|
|
146
|
-
**[VP-SEC]**
|
|
147
|
-
|
|
148
|
-
- A menu item for a restricted page is shown but the user has no permission → click → a 403 page; or the item is hidden from the menu (verify the DOM has no link and the API returns no data)
|
|
149
|
-
- Direct URL access to a restricted page while not logged in → redirect to Login, the URL is preserved so post-login redirects correctly
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
### Tier 2 — @normal + @low
|
|
154
|
-
|
|
155
|
-
**[VP-UI] Interface states**
|
|
156
|
-
|
|
157
|
-
- [@normal] Side menu collapsed: icon-only mode, a tooltip shows the full menu name on icon hover
|
|
158
|
-
- [@normal] Side menu expanded: menu item names are fully shown, not truncated at normal lengths
|
|
159
|
-
- [@normal] Tab bar: tabs do not wrap to a second line, scroll horizontally if there are too many tabs
|
|
160
|
-
- [@normal] Responsive: the side menu becomes a hamburger menu on mobile, toggling open/close does not cover the main content
|
|
161
|
-
- [@low] Scroll restoration: navigate away and back via the browser Back button → the scroll position of the old page is restored
|
|
162
|
-
|
|
163
|
-
**[VP-VAL] Edge cases**
|
|
164
|
-
|
|
165
|
-
- [@normal] Browser back/forward button: navigates correctly per the history stack, no blank page or wrong URL
|
|
166
|
-
- [@low] Deep link: paste a sub-page URL into a new browser → loads that exact page (no redirect to home)
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
### ⚡ Cross-pattern interactions
|
|
171
|
-
|
|
172
|
-
- **+ Filter/Search**: Navigate to another section/tab and back → the filter and search state are preserved, not reset to default
|
|
173
|
-
- **+ Notification**: The badge counter on a menu item updates when a new notification is received (without a page reload)
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## 14. Notification / Toast / Alert
|
|
178
|
-
|
|
179
|
-
**Apply when**: the screen has a temporary feedback message (toast, snackbar) or a persistent alert (banner, inline alert) to report the result of an action.
|
|
180
|
-
|
|
181
|
-
**Shared checks applied**: (no default shared check)
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
### Tier 1 — @high
|
|
186
|
-
|
|
187
|
-
**[VP-LOGIC] Message behavior**
|
|
188
|
-
|
|
189
|
-
- A successful action (save, delete, submit) → a success toast shows the correct message, auto-dismisses after ~3–5 seconds
|
|
190
|
-
- A failed action (validation error, server error) → an error toast/alert shows the correct message, does NOT auto-dismiss, the user must dismiss it actively
|
|
191
|
-
- Multiple actions in a row → each action has its own toast, the toasts stack in order of appearance, not overwriting each other
|
|
192
|
-
- Click X to dismiss a toast → the toast disappears immediately, the remaining toasts fill the gap
|
|
193
|
-
|
|
194
|
-
**[VP-VAL]**
|
|
195
|
-
|
|
196
|
-
- The message text matches exactly {{success_message}} / {{error_message}} in test-data.yaml, not hardcoded wrong
|
|
197
|
-
- The toast type matches the semantic: success → check icon + green background; error → X icon + red background; warning → ! icon + yellow background; info → i icon + blue background
|
|
198
|
-
|
|
199
|
-
**[VP-SEC]**
|
|
200
|
-
|
|
201
|
-
- A message containing data from user input (e.g. "Created '[record name]' successfully") → the name is rendered as literal text, no script execution (XSS)
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
### Tier 2 — @normal + @low
|
|
206
|
-
|
|
207
|
-
**[VP-UI] Interface states**
|
|
208
|
-
|
|
209
|
-
- [@normal] Position: the toast appears in the defined corner (top-right, bottom-center…), not covering the active action buttons or form fields
|
|
210
|
-
- [@normal] Progress bar (if present): the countdown bar runs for the correct duration, the toast auto-dismisses when it finishes
|
|
211
|
-
- [@normal] A toast appearing while a modal is open → the toast appears on top of the modal (higher z-index), not hidden by the backdrop
|
|
212
|
-
- [@low] Pause on hover: hover the toast → the auto-dismiss timer pauses; mouse leaves → the timer resumes from where it stopped
|
|
213
|
-
|
|
214
|
-
**[VP-VAL] Edge cases**
|
|
215
|
-
|
|
216
|
-
- [@normal] Very long message text → the toast wraps text within its container, no overflow out of the viewport
|
|
217
|
-
- [@low] Rapid fire: trigger 5+ actions in a row → toasts queue in the correct order, no UI crash, the oldest toast dismisses first
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
### ⚡ Cross-pattern interactions
|
|
222
|
-
|
|
223
|
-
- **+ Create/Add**: Submit success → the success toast auto-dismisses; submit failure → the error toast stays until the user dismisses it
|
|
224
|
-
- **+ Delete**: Delete success → a success toast; blocked by a foreign key → an error toast stating the module still using the record
|
|
225
|
-
- **+ Import/Export**: An async operation completes → a toast or the notification bell updates with the result summary
|
|
226
|
-
- **+ Modal/Dialog**: An action in a modal → the modal closes first, then the toast shows on the background page
|