@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.
Files changed (355) hide show
  1. package/dist/capabilities/discover.d.ts.map +1 -1
  2. package/dist/capabilities/discover.js +26 -3
  3. package/dist/capabilities/discover.js.map +1 -1
  4. package/dist/cli/commands/add-flow.d.ts.map +1 -1
  5. package/dist/cli/commands/add-flow.js +2 -0
  6. package/dist/cli/commands/add-flow.js.map +1 -1
  7. package/dist/cli/commands/add.d.ts.map +1 -1
  8. package/dist/cli/commands/add.js +4 -0
  9. package/dist/cli/commands/add.js.map +1 -1
  10. package/dist/cli/commands/capability.d.ts.map +1 -1
  11. package/dist/cli/commands/capability.js +61 -0
  12. package/dist/cli/commands/capability.js.map +1 -1
  13. package/dist/cli/commands/delivery.d.ts.map +1 -1
  14. package/dist/cli/commands/delivery.js +89 -2
  15. package/dist/cli/commands/delivery.js.map +1 -1
  16. package/dist/cli/commands/eval.js +3 -3
  17. package/dist/cli/commands/eval.js.map +1 -1
  18. package/dist/cli/commands/gate.d.ts +3 -0
  19. package/dist/cli/commands/gate.d.ts.map +1 -0
  20. package/dist/cli/commands/gate.js +83 -0
  21. package/dist/cli/commands/gate.js.map +1 -0
  22. package/dist/cli/commands/generate.d.ts.map +1 -1
  23. package/dist/cli/commands/generate.js +2 -1
  24. package/dist/cli/commands/generate.js.map +1 -1
  25. package/dist/cli/commands/init.d.ts.map +1 -1
  26. package/dist/cli/commands/init.js +32 -2
  27. package/dist/cli/commands/init.js.map +1 -1
  28. package/dist/cli/commands/journey.d.ts +3 -0
  29. package/dist/cli/commands/journey.d.ts.map +1 -0
  30. package/dist/cli/commands/journey.js +114 -0
  31. package/dist/cli/commands/journey.js.map +1 -0
  32. package/dist/cli/commands/update.d.ts.map +1 -1
  33. package/dist/cli/commands/update.js +10 -3
  34. package/dist/cli/commands/update.js.map +1 -1
  35. package/dist/cli/index.js +4 -0
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/dashboard/snapshot-builder.d.ts.map +1 -1
  38. package/dist/dashboard/snapshot-builder.js +10 -1
  39. package/dist/dashboard/snapshot-builder.js.map +1 -1
  40. package/dist/exporters/csv-exporter.d.ts.map +1 -1
  41. package/dist/exporters/csv-exporter.js +3 -1
  42. package/dist/exporters/csv-exporter.js.map +1 -1
  43. package/dist/exporters/json-exporter.js +3 -1
  44. package/dist/exporters/json-exporter.js.map +1 -1
  45. package/dist/exporters/mobile-app-id.d.ts +22 -0
  46. package/dist/exporters/mobile-app-id.d.ts.map +1 -0
  47. package/dist/exporters/mobile-app-id.js +37 -0
  48. package/dist/exporters/mobile-app-id.js.map +1 -0
  49. package/dist/exporters/spec-parser.d.ts.map +1 -1
  50. package/dist/exporters/spec-parser.js +6 -2
  51. package/dist/exporters/spec-parser.js.map +1 -1
  52. package/dist/generators/test-generator/adapters/adapter-interface.d.ts +3 -0
  53. package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
  54. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/scroll-action.hbs +7 -4
  55. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/toggle-action.hbs +20 -3
  56. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/checked-assertion.hbs +4 -1
  57. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/not-checked-assertion.hbs +4 -1
  58. package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +3 -0
  59. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  60. package/dist/generators/test-generator/code-generator.js +48 -9
  61. package/dist/generators/test-generator/code-generator.js.map +1 -1
  62. package/dist/generators/test-generator/template-engine.d.ts +3 -0
  63. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  64. package/dist/generators/test-generator/template-engine.js +11 -1
  65. package/dist/generators/test-generator/template-engine.js.map +1 -1
  66. package/dist/generators/test-generator/utils/selector-resolver.d.ts +11 -1
  67. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  68. package/dist/generators/test-generator/utils/selector-resolver.js +33 -0
  69. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  70. package/dist/harness/audit.d.ts.map +1 -1
  71. package/dist/harness/audit.js +8 -1
  72. package/dist/harness/audit.js.map +1 -1
  73. package/dist/harness/catalog/universal-viewpoints.yaml +15 -0
  74. package/dist/harness/eval/skill-lint.d.ts +3 -3
  75. package/dist/harness/eval/skill-lint.d.ts.map +1 -1
  76. package/dist/harness/eval/skill-lint.js +88 -68
  77. package/dist/harness/eval/skill-lint.js.map +1 -1
  78. package/dist/harness/journey.d.ts +88 -0
  79. package/dist/harness/journey.d.ts.map +1 -0
  80. package/dist/harness/journey.js +414 -0
  81. package/dist/harness/journey.js.map +1 -0
  82. package/dist/harness/quality-gates.d.ts +13 -0
  83. package/dist/harness/quality-gates.d.ts.map +1 -1
  84. package/dist/harness/quality-gates.js +23 -0
  85. package/dist/harness/quality-gates.js.map +1 -1
  86. package/dist/harness/sensors.d.ts +1 -1
  87. package/dist/harness/sensors.d.ts.map +1 -1
  88. package/dist/harness/sensors.js +32 -9
  89. package/dist/harness/sensors.js.map +1 -1
  90. package/dist/orchestrator/ai-rules-updater.d.ts +11 -3
  91. package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -1
  92. package/dist/orchestrator/ai-rules-updater.js +44 -180
  93. package/dist/orchestrator/ai-rules-updater.js.map +1 -1
  94. package/dist/orchestrator/ai-skills/adapters.d.ts +28 -0
  95. package/dist/orchestrator/ai-skills/adapters.d.ts.map +1 -0
  96. package/dist/orchestrator/ai-skills/adapters.js +34 -0
  97. package/dist/orchestrator/ai-skills/adapters.js.map +1 -0
  98. package/dist/orchestrator/ai-skills/build.d.ts +10 -0
  99. package/dist/orchestrator/ai-skills/build.d.ts.map +1 -0
  100. package/dist/orchestrator/ai-skills/build.js +128 -0
  101. package/dist/orchestrator/ai-skills/build.js.map +1 -0
  102. package/dist/orchestrator/ai-skills/cap-stripper.d.ts +27 -0
  103. package/dist/orchestrator/ai-skills/cap-stripper.d.ts.map +1 -0
  104. package/dist/orchestrator/ai-skills/cap-stripper.js +78 -0
  105. package/dist/orchestrator/ai-skills/cap-stripper.js.map +1 -0
  106. package/dist/orchestrator/ai-skills/commands.d.ts +22 -0
  107. package/dist/orchestrator/ai-skills/commands.d.ts.map +1 -0
  108. package/dist/orchestrator/ai-skills/commands.js +109 -0
  109. package/dist/orchestrator/ai-skills/commands.js.map +1 -0
  110. package/dist/orchestrator/ai-skills/generator.d.ts +23 -0
  111. package/dist/orchestrator/ai-skills/generator.d.ts.map +1 -0
  112. package/dist/orchestrator/ai-skills/generator.js +79 -0
  113. package/dist/orchestrator/ai-skills/generator.js.map +1 -0
  114. package/dist/orchestrator/ai-skills/golden-skills.test.d.ts +2 -0
  115. package/dist/orchestrator/ai-skills/golden-skills.test.d.ts.map +1 -0
  116. package/dist/orchestrator/ai-skills/golden-skills.test.js +183 -0
  117. package/dist/orchestrator/ai-skills/golden-skills.test.js.map +1 -0
  118. package/dist/orchestrator/ai-skills/resolve-assistants.d.ts +8 -0
  119. package/dist/orchestrator/ai-skills/resolve-assistants.d.ts.map +1 -0
  120. package/dist/orchestrator/ai-skills/resolve-assistants.js +28 -0
  121. package/dist/orchestrator/ai-skills/resolve-assistants.js.map +1 -0
  122. package/dist/orchestrator/ai-skills/writer.d.ts +15 -0
  123. package/dist/orchestrator/ai-skills/writer.d.ts.map +1 -0
  124. package/dist/orchestrator/ai-skills/writer.js +129 -0
  125. package/dist/orchestrator/ai-skills/writer.js.map +1 -0
  126. package/dist/orchestrator/flow-manager.d.ts +11 -0
  127. package/dist/orchestrator/flow-manager.d.ts.map +1 -1
  128. package/dist/orchestrator/flow-manager.js +147 -29
  129. package/dist/orchestrator/flow-manager.js.map +1 -1
  130. package/dist/orchestrator/mobile-runtime-scaffolder.d.ts +59 -0
  131. package/dist/orchestrator/mobile-runtime-scaffolder.d.ts.map +1 -0
  132. package/dist/orchestrator/mobile-runtime-scaffolder.js +298 -0
  133. package/dist/orchestrator/mobile-runtime-scaffolder.js.map +1 -0
  134. package/dist/orchestrator/project-initializer.d.ts +44 -7
  135. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  136. package/dist/orchestrator/project-initializer.js +147 -79
  137. package/dist/orchestrator/project-initializer.js.map +1 -1
  138. package/dist/orchestrator/screen-manager.d.ts +30 -0
  139. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  140. package/dist/orchestrator/screen-manager.js +205 -22
  141. package/dist/orchestrator/screen-manager.js.map +1 -1
  142. package/dist/orchestrator/templates/ai-src/README.md +58 -0
  143. package/dist/orchestrator/templates/{ai-instructions/claude-cmd-add-flow.md → ai-src/commands/add-flow.md} +63 -2
  144. package/dist/orchestrator/templates/{ai-instructions/claude-cmd-add-screen.md → ai-src/commands/add-screen.md} +171 -6
  145. package/dist/orchestrator/templates/{ai-instructions/claude-cmd-create-test.md → ai-src/commands/create-test.md} +118 -4
  146. package/{src/orchestrator/templates/ai-instructions/claude-cmd-dashboard.md → dist/orchestrator/templates/ai-src/commands/dashboard.md} +25 -3
  147. package/{src/orchestrator/templates/ai-instructions/claude-cmd-delivery.md → dist/orchestrator/templates/ai-src/commands/delivery.md} +67 -3
  148. package/dist/orchestrator/templates/ai-src/commands/design.md +29 -0
  149. package/{src/orchestrator/templates/ai-instructions/claude-cmd-feedback.md → dist/orchestrator/templates/ai-src/commands/feedback.md} +34 -3
  150. package/dist/orchestrator/templates/{ai-instructions/claude-cmd-locale.md → ai-src/commands/locale.md} +56 -4
  151. package/{src/orchestrator/templates/ai-instructions/claude-cmd-review.md → dist/orchestrator/templates/ai-src/commands/review.md} +57 -2
  152. package/{src/orchestrator/templates/ai-instructions/claude-cmd-run-test.md → dist/orchestrator/templates/ai-src/commands/run-test.md} +116 -5
  153. package/dist/orchestrator/templates/ai-src/config/codex.md +8 -0
  154. package/{src/orchestrator/templates/ai-instructions/claude-skill-capture-mobile.md → dist/orchestrator/templates/ai-src/skills/sungen-capture-mobile/SKILL.md} +11 -0
  155. package/dist/orchestrator/templates/{ai-instructions/github-skill-sungen-error-mapping.md → ai-src/skills/sungen-error-mapping/SKILL.md} +49 -9
  156. package/{src/orchestrator/templates/ai-instructions/claude-skill-harness-audit.md → dist/orchestrator/templates/ai-src/skills/sungen-harness-audit/SKILL.md} +5 -5
  157. package/{src/orchestrator/templates/ai-instructions/claude-skill-locale.md → dist/orchestrator/templates/ai-src/skills/sungen-locale/SKILL.md} +275 -3
  158. 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
  159. package/dist/orchestrator/templates/{ai-instructions/claude-skill-selector-fix-mobile.md → ai-src/skills/sungen-selector-fix-mobile/SKILL.md} +5 -0
  160. package/dist/orchestrator/templates/{ai-instructions/claude-skill-tc-generation.md → ai-src/skills/sungen-tc-generation/SKILL.md} +5 -0
  161. package/dist/orchestrator/templates/playwright.config.ts +7 -4
  162. package/package.json +3 -3
  163. package/src/capabilities/discover.ts +29 -3
  164. package/src/cli/commands/add-flow.ts +2 -0
  165. package/src/cli/commands/add.ts +4 -0
  166. package/src/cli/commands/capability.ts +64 -1
  167. package/src/cli/commands/delivery.ts +89 -2
  168. package/src/cli/commands/eval.ts +3 -3
  169. package/src/cli/commands/gate.ts +44 -0
  170. package/src/cli/commands/generate.ts +2 -1
  171. package/src/cli/commands/init.ts +50 -3
  172. package/src/cli/commands/journey.ts +72 -0
  173. package/src/cli/commands/update.ts +14 -4
  174. package/src/cli/index.ts +4 -0
  175. package/src/dashboard/snapshot-builder.ts +10 -1
  176. package/src/exporters/csv-exporter.ts +3 -1
  177. package/src/exporters/json-exporter.ts +3 -1
  178. package/src/exporters/mobile-app-id.ts +34 -0
  179. package/src/exporters/spec-parser.ts +6 -2
  180. package/src/generators/test-generator/adapters/adapter-interface.ts +3 -0
  181. package/src/generators/test-generator/adapters/appium/templates/steps/actions/scroll-action.hbs +7 -4
  182. package/src/generators/test-generator/adapters/appium/templates/steps/actions/toggle-action.hbs +20 -3
  183. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/checked-assertion.hbs +4 -1
  184. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/not-checked-assertion.hbs +4 -1
  185. package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +3 -0
  186. package/src/generators/test-generator/code-generator.ts +49 -9
  187. package/src/generators/test-generator/template-engine.ts +14 -1
  188. package/src/generators/test-generator/utils/selector-resolver.ts +51 -1
  189. package/src/harness/audit.ts +9 -2
  190. package/src/harness/catalog/universal-viewpoints.yaml +15 -0
  191. package/src/harness/eval/skill-lint.ts +71 -60
  192. package/src/harness/journey.ts +434 -0
  193. package/src/harness/quality-gates.ts +20 -0
  194. package/src/harness/sensors.ts +25 -8
  195. package/src/orchestrator/ai-rules-updater.ts +35 -197
  196. package/src/orchestrator/ai-skills/adapters.ts +52 -0
  197. package/src/orchestrator/ai-skills/build.ts +103 -0
  198. package/src/orchestrator/ai-skills/cap-stripper.ts +85 -0
  199. package/src/orchestrator/ai-skills/commands.ts +112 -0
  200. package/src/orchestrator/ai-skills/generator.ts +47 -0
  201. package/src/orchestrator/ai-skills/golden-skills.test.ts +124 -0
  202. package/src/orchestrator/ai-skills/resolve-assistants.ts +18 -0
  203. package/src/orchestrator/ai-skills/writer.ts +92 -0
  204. package/src/orchestrator/flow-manager.ts +165 -29
  205. package/src/orchestrator/mobile-runtime-scaffolder.ts +277 -0
  206. package/src/orchestrator/project-initializer.ts +159 -86
  207. package/src/orchestrator/screen-manager.ts +237 -22
  208. package/src/orchestrator/templates/ai-src/README.md +58 -0
  209. package/src/orchestrator/templates/{ai-instructions/claude-cmd-add-flow.md → ai-src/commands/add-flow.md} +63 -2
  210. package/src/orchestrator/templates/{ai-instructions/claude-cmd-add-screen.md → ai-src/commands/add-screen.md} +171 -6
  211. package/src/orchestrator/templates/{ai-instructions/claude-cmd-create-test.md → ai-src/commands/create-test.md} +118 -4
  212. package/{dist/orchestrator/templates/ai-instructions/claude-cmd-dashboard.md → src/orchestrator/templates/ai-src/commands/dashboard.md} +25 -3
  213. package/{dist/orchestrator/templates/ai-instructions/claude-cmd-delivery.md → src/orchestrator/templates/ai-src/commands/delivery.md} +67 -3
  214. package/src/orchestrator/templates/ai-src/commands/design.md +29 -0
  215. package/{dist/orchestrator/templates/ai-instructions/claude-cmd-feedback.md → src/orchestrator/templates/ai-src/commands/feedback.md} +34 -3
  216. package/src/orchestrator/templates/{ai-instructions/claude-cmd-locale.md → ai-src/commands/locale.md} +56 -4
  217. package/{dist/orchestrator/templates/ai-instructions/claude-cmd-review.md → src/orchestrator/templates/ai-src/commands/review.md} +57 -2
  218. package/{dist/orchestrator/templates/ai-instructions/claude-cmd-run-test.md → src/orchestrator/templates/ai-src/commands/run-test.md} +116 -5
  219. package/src/orchestrator/templates/ai-src/config/codex.md +8 -0
  220. package/{dist/orchestrator/templates/ai-instructions/claude-skill-capture-mobile.md → src/orchestrator/templates/ai-src/skills/sungen-capture-mobile/SKILL.md} +11 -0
  221. package/{dist/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md → src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md} +49 -9
  222. package/{dist/orchestrator/templates/ai-instructions/claude-skill-harness-audit.md → src/orchestrator/templates/ai-src/skills/sungen-harness-audit/SKILL.md} +5 -5
  223. package/{dist/orchestrator/templates/ai-instructions/claude-skill-locale.md → src/orchestrator/templates/ai-src/skills/sungen-locale/SKILL.md} +275 -3
  224. 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
  225. package/src/orchestrator/templates/{ai-instructions/claude-skill-selector-fix-mobile.md → ai-src/skills/sungen-selector-fix-mobile/SKILL.md} +5 -0
  226. package/src/orchestrator/templates/{ai-instructions/claude-skill-tc-generation.md → ai-src/skills/sungen-tc-generation/SKILL.md} +5 -0
  227. package/src/orchestrator/templates/playwright.config.ts +7 -4
  228. package/dist/orchestrator/templates/ai-instructions/claude-cmd-design.md +0 -12
  229. package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +0 -347
  230. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-flow.md +0 -86
  231. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +0 -131
  232. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +0 -93
  233. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-dashboard.md +0 -65
  234. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-delivery.md +0 -83
  235. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-design.md +0 -13
  236. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-feedback.md +0 -24
  237. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-locale.md +0 -70
  238. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-review.md +0 -38
  239. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +0 -155
  240. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mobile.md +0 -184
  241. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-harness-audit.md +0 -85
  242. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-locale.md +0 -291
  243. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix-mobile.md +0 -316
  244. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +0 -221
  245. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +0 -617
  246. package/src/orchestrator/templates/ai-instructions/claude-cmd-design.md +0 -12
  247. package/src/orchestrator/templates/ai-instructions/claude-skill-api-design.md +0 -62
  248. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-mcp.md +0 -82
  249. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-pat.md +0 -117
  250. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-live.md +0 -60
  251. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-local.md +0 -38
  252. package/src/orchestrator/templates/ai-instructions/claude-skill-capture.md +0 -35
  253. package/src/orchestrator/templates/ai-instructions/claude-skill-dashboard.md +0 -121
  254. package/src/orchestrator/templates/ai-instructions/claude-skill-delivery.md +0 -141
  255. package/src/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md +0 -157
  256. package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +0 -446
  257. package/src/orchestrator/templates/ai-instructions/claude-skill-ingest-legacy.md +0 -79
  258. package/src/orchestrator/templates/ai-instructions/claude-skill-mobile-gestures.md +0 -109
  259. package/src/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +0 -347
  260. package/src/orchestrator/templates/ai-instructions/claude-skill-tc-review.md +0 -320
  261. package/src/orchestrator/templates/ai-instructions/claude-skill-test-design-techniques.md +0 -118
  262. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-a-data-entry.md +0 -203
  263. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-b-data-ops.md +0 -179
  264. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-c-data-explore.md +0 -233
  265. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-d-display.md +0 -226
  266. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint-group-e-identity.md +0 -177
  267. package/src/orchestrator/templates/ai-instructions/claude-skill-viewpoint.md +0 -118
  268. package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-flow.md +0 -86
  269. package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +0 -131
  270. package/src/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +0 -93
  271. package/src/orchestrator/templates/ai-instructions/copilot-cmd-dashboard.md +0 -65
  272. package/src/orchestrator/templates/ai-instructions/copilot-cmd-delivery.md +0 -83
  273. package/src/orchestrator/templates/ai-instructions/copilot-cmd-design.md +0 -13
  274. package/src/orchestrator/templates/ai-instructions/copilot-cmd-feedback.md +0 -24
  275. package/src/orchestrator/templates/ai-instructions/copilot-cmd-locale.md +0 -70
  276. package/src/orchestrator/templates/ai-instructions/copilot-cmd-review.md +0 -38
  277. package/src/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +0 -155
  278. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-api-design.md +0 -62
  279. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mobile.md +0 -184
  280. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-mcp.md +0 -82
  281. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-pat.md +0 -117
  282. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-live.md +0 -60
  283. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-local.md +0 -38
  284. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture.md +0 -35
  285. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-dashboard.md +0 -121
  286. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md +0 -141
  287. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-error-mapping.md +0 -157
  288. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +0 -446
  289. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-harness-audit.md +0 -85
  290. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-ingest-legacy.md +0 -79
  291. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-locale.md +0 -291
  292. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-mobile-gestures.md +0 -109
  293. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix-mobile.md +0 -316
  294. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +0 -221
  295. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +0 -617
  296. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-review.md +0 -320
  297. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-test-design-techniques.md +0 -118
  298. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-a-data-entry.md +0 -203
  299. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-b-data-ops.md +0 -179
  300. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-c-data-explore.md +0 -233
  301. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-d-display.md +0 -226
  302. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint-group-e-identity.md +0 -177
  303. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint.md +0 -118
  304. /package/dist/orchestrator/templates/{ai-instructions/claude-agent-challenge.md → ai-src/agents/challenge.md} +0 -0
  305. /package/dist/orchestrator/templates/{ai-instructions/claude-agent-discovery.md → ai-src/agents/discovery.md} +0 -0
  306. /package/dist/orchestrator/templates/{ai-instructions/claude-agent-generator.md → ai-src/agents/generator.md} +0 -0
  307. /package/dist/orchestrator/templates/{ai-instructions/claude-agent-reviewer.md → ai-src/agents/reviewer.md} +0 -0
  308. /package/dist/orchestrator/templates/{ai-instructions/claude-config.md → ai-src/config/claude.md} +0 -0
  309. /package/dist/orchestrator/templates/{ai-instructions/copilot-config.md → ai-src/config/copilot.md} +0 -0
  310. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-api-design.md → ai-src/skills/sungen-api-design/SKILL.md} +0 -0
  311. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture.md → ai-src/skills/sungen-capture/SKILL.md} +0 -0
  312. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-figma-mcp.md → ai-src/skills/sungen-capture/mode-figma-mcp.md} +0 -0
  313. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-figma-pat.md → ai-src/skills/sungen-capture/mode-figma-pat.md} +0 -0
  314. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-live.md → ai-src/skills/sungen-capture/mode-live.md} +0 -0
  315. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-capture-mode-local.md → ai-src/skills/sungen-capture/mode-local.md} +0 -0
  316. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-dashboard.md → ai-src/skills/sungen-dashboard/SKILL.md} +0 -0
  317. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-delivery.md → ai-src/skills/sungen-delivery/SKILL.md} +0 -0
  318. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-gherkin-syntax.md → ai-src/skills/sungen-gherkin-syntax/SKILL.md} +0 -0
  319. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-ingest-legacy.md → ai-src/skills/sungen-ingest-legacy/SKILL.md} +0 -0
  320. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-mobile-gestures.md → ai-src/skills/sungen-mobile-gestures/SKILL.md} +0 -0
  321. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-selector-keys.md → ai-src/skills/sungen-selector-keys/SKILL.md} +0 -0
  322. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-tc-review.md → ai-src/skills/sungen-tc-review/SKILL.md} +0 -0
  323. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-test-design-techniques.md → ai-src/skills/sungen-test-design-techniques/SKILL.md} +0 -0
  324. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint.md → ai-src/skills/sungen-viewpoint/SKILL.md} +0 -0
  325. /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
  326. /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
  327. /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
  328. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-d-display.md → ai-src/skills/sungen-viewpoint/group-d-display.md} +0 -0
  329. /package/dist/orchestrator/templates/{ai-instructions/claude-skill-viewpoint-group-e-identity.md → ai-src/skills/sungen-viewpoint/group-e-identity.md} +0 -0
  330. /package/src/orchestrator/templates/{ai-instructions/claude-agent-challenge.md → ai-src/agents/challenge.md} +0 -0
  331. /package/src/orchestrator/templates/{ai-instructions/claude-agent-discovery.md → ai-src/agents/discovery.md} +0 -0
  332. /package/src/orchestrator/templates/{ai-instructions/claude-agent-generator.md → ai-src/agents/generator.md} +0 -0
  333. /package/src/orchestrator/templates/{ai-instructions/claude-agent-reviewer.md → ai-src/agents/reviewer.md} +0 -0
  334. /package/src/orchestrator/templates/{ai-instructions/claude-config.md → ai-src/config/claude.md} +0 -0
  335. /package/src/orchestrator/templates/{ai-instructions/copilot-config.md → ai-src/config/copilot.md} +0 -0
  336. /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
  337. /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture.md → src/orchestrator/templates/ai-src/skills/sungen-capture/SKILL.md} +0 -0
  338. /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
  339. /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
  340. /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
  341. /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
  342. /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-dashboard.md → src/orchestrator/templates/ai-src/skills/sungen-dashboard/SKILL.md} +0 -0
  343. /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md → src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md} +0 -0
  344. /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
  345. /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
  346. /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
  347. /package/src/orchestrator/templates/{ai-instructions/claude-skill-selector-keys.md → ai-src/skills/sungen-selector-keys/SKILL.md} +0 -0
  348. /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
  349. /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
  350. /package/{dist/orchestrator/templates/ai-instructions/github-skill-sungen-viewpoint.md → src/orchestrator/templates/ai-src/skills/sungen-viewpoint/SKILL.md} +0 -0
  351. /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
  352. /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
  353. /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
  354. /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
  355. /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
@@ -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)
@@ -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