@qijenchen/design-system 0.1.0-beta.10 → 0.1.0-beta.13

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 (307) hide show
  1. package/CLAUDE.md +201 -0
  2. package/README.md +7 -15
  3. package/cli-init.mjs +90 -0
  4. package/ds-canonical/commands/README.md +26 -0
  5. package/ds-canonical/commands/gov-status.md +79 -0
  6. package/ds-canonical/hooks/README.md +145 -0
  7. package/ds-canonical/hooks/_log-fire.sh +44 -0
  8. package/ds-canonical/hooks/block_prototype_imports.py +111 -0
  9. package/ds-canonical/hooks/check_app_shell_primary_header_consistency.sh +68 -0
  10. package/ds-canonical/hooks/check_audit_post_report_validator.sh +88 -0
  11. package/ds-canonical/hooks/check_audit_sample_escape.sh +73 -0
  12. package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
  13. package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
  14. package/ds-canonical/hooks/check_chrome_header_handcraft.sh +70 -0
  15. package/ds-canonical/hooks/check_codex_brief_invariants.sh +83 -0
  16. package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
  17. package/ds-canonical/hooks/check_datatable_invariants.sh +117 -0
  18. package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
  19. package/ds-canonical/hooks/check_field_controls_contracts.sh +110 -0
  20. package/ds-canonical/hooks/check_field_family_invariants.sh +205 -0
  21. package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
  22. package/ds-canonical/hooks/check_header_with_tabs_border.sh +87 -0
  23. package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
  24. package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
  25. package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
  26. package/ds-canonical/hooks/check_pattern_invariants.sh +194 -0
  27. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
  28. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
  29. package/ds-canonical/hooks/check_propose_plain_chinese.sh +74 -0
  30. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
  31. package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
  32. package/ds-canonical/hooks/check_solo_workflow.sh +258 -0
  33. package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
  34. package/ds-canonical/hooks/check_story_invariants.sh +612 -0
  35. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +105 -0
  36. package/ds-canonical/hooks/check_tab_lg_chrome_header_equal.sh +66 -0
  37. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
  38. package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
  39. package/ds-canonical/hooks/inject_pending_self_audit.sh +204 -0
  40. package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
  41. package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
  42. package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
  43. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
  44. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
  45. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
  46. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +141 -0
  47. package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
  48. package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
  49. package/ds-canonical/hooks/lib/_token_hygiene.sh +95 -0
  50. package/ds-canonical/hooks/log_governance_fires.sh +50 -0
  51. package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
  52. package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
  53. package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
  54. package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
  55. package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
  56. package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
  57. package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
  58. package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
  59. package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
  60. package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
  61. package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
  62. package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
  63. package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
  64. package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
  65. package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
  66. package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
  67. package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
  68. package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
  69. package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
  70. package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
  71. package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
  72. package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
  73. package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
  74. package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
  75. package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
  76. package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
  77. package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
  78. package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
  79. package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
  80. package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
  81. package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
  82. package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
  83. package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
  84. package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
  85. package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
  86. package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
  87. package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
  88. package/ds-canonical/hooks/session_start_governance_check.sh +263 -0
  89. package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
  90. package/ds-canonical/hooks/stop_self_audit.sh +450 -0
  91. package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
  92. package/ds-canonical/hooks/tests/run-all.sh +76 -0
  93. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
  94. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +140 -0
  95. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +115 -0
  96. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
  97. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
  98. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
  99. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +123 -0
  100. package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
  101. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
  102. package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
  103. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
  104. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
  105. package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
  106. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +194 -0
  107. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
  108. package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
  109. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
  110. package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
  111. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
  112. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
  113. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
  114. package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
  115. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
  116. package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
  117. package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
  118. package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
  119. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +126 -0
  120. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
  121. package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
  122. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
  123. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
  124. package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
  125. package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
  126. package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
  127. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +209 -0
  128. package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
  129. package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
  130. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
  131. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +138 -0
  132. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
  133. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
  134. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
  135. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
  136. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
  137. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
  138. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
  139. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +143 -0
  140. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
  141. package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
  142. package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
  143. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
  144. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +76 -0
  145. package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
  146. package/ds-canonical/references/README.md +43 -0
  147. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
  148. package/ds-canonical/references/build-ui-canonicals.md +69 -0
  149. package/ds-canonical/references/cva-patterns.md +41 -0
  150. package/ds-canonical/references/drag-canonical.md +331 -0
  151. package/ds-canonical/references/item-anatomy-recipe.md +225 -0
  152. package/ds-canonical/references/naming-conventions.md +56 -0
  153. package/ds-canonical/references/principle-dim-map.json +515 -0
  154. package/ds-canonical/references/props-naming.md +45 -0
  155. package/ds-canonical/references/spec-rules.md +58 -0
  156. package/ds-canonical/references/ssot-consultation.md +63 -0
  157. package/ds-canonical/references/ssot-index.md +40 -0
  158. package/ds-canonical/references/story-baseline-registry.json +79 -0
  159. package/ds-canonical/references/structural-token-retention.md +42 -0
  160. package/ds-canonical/references/tailwind-gotchas.md +87 -0
  161. package/ds-canonical/references/ui-dev-rules.md +60 -0
  162. package/ds-canonical/rules/README.md +34 -0
  163. package/ds-canonical/rules/meta-patterns.md +87 -0
  164. package/ds-canonical/rules/self-verify.md +53 -0
  165. package/ds-canonical/rules/spec-rules.md +25 -0
  166. package/ds-canonical/rules/story-rules.md +56 -0
  167. package/ds-canonical/rules/ui-development.md +87 -0
  168. package/ds-canonical/skills/README.md +88 -0
  169. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
  170. package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
  171. package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
  172. package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
  173. package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
  174. package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
  175. package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
  176. package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
  177. package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
  178. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +247 -0
  179. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
  180. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +165 -0
  181. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +91 -0
  182. package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
  183. package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
  184. package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
  185. package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  186. package/ds-canonical/skills/design-system-audit/SKILL.md +343 -0
  187. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1260 -0
  188. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
  189. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
  190. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +364 -0
  191. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
  192. package/ds-canonical/skills/design-system-audit/references/spec-template.md +66 -0
  193. package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
  194. package/ds-canonical/skills/governance-health/SKILL.md +146 -0
  195. package/ds-canonical/skills/knowledge-prune/SKILL.md +303 -0
  196. package/ds-canonical/skills/new-component/SKILL.md +170 -0
  197. package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
  198. package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
  199. package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
  200. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
  201. package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
  202. package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
  203. package/ds-canonical/skills/propose-options/SKILL.md +177 -0
  204. package/ds-canonical/skills/prototype/SKILL.md +244 -0
  205. package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
  206. package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
  207. package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
  208. package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
  209. package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
  210. package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
  211. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
  212. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
  213. package/ds-canonical/skills/story-writing/SKILL.md +122 -0
  214. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
  215. package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
  216. package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
  217. package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
  218. package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
  219. package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
  220. package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
  221. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
  222. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
  223. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  224. package/package.json +9 -5
  225. package/src/components/Accordion/accordion.spec.md +114 -0
  226. package/src/components/Alert/alert.spec.md +197 -0
  227. package/src/components/AppShell/app-shell.spec.md +331 -0
  228. package/src/components/AspectRatio/aspect-ratio.spec.md +134 -0
  229. package/src/components/Avatar/avatar.spec.md +329 -0
  230. package/src/components/Badge/badge.spec.md +380 -0
  231. package/src/components/Breadcrumb/breadcrumb.spec.md +257 -0
  232. package/src/components/BulkActionBar/bulk-action-bar.spec.md +210 -0
  233. package/src/components/Button/button.spec.md +460 -0
  234. package/src/components/Calendar/calendar.spec.md +242 -0
  235. package/src/components/Carousel/carousel.spec.md +253 -0
  236. package/src/components/Chart/chart.spec.md +155 -0
  237. package/src/components/Checkbox/checkbox.spec.md +344 -0
  238. package/src/components/Chip/chip.spec.md +237 -0
  239. package/src/components/CircularProgress/circular-progress.spec.md +268 -0
  240. package/src/components/Coachmark/coachmark.spec.md +230 -0
  241. package/src/components/Combobox/combobox.spec.md +180 -0
  242. package/src/components/Command/command.spec.md +171 -0
  243. package/src/components/DataTable/data-table.spec.md +525 -0
  244. package/src/components/DateGrid/date-grid.spec.md +215 -0
  245. package/src/components/DatePicker/date-picker.spec.md +334 -0
  246. package/src/components/DescriptionList/description-list.spec.md +214 -0
  247. package/src/components/Dialog/dialog.spec.md +202 -0
  248. package/src/components/DropdownMenu/dropdown-menu.spec.md +250 -0
  249. package/src/components/Empty/empty.spec.md +214 -0
  250. package/src/components/Field/field-controls.spec.md +338 -0
  251. package/src/components/Field/field.spec.md +438 -0
  252. package/src/components/Field/form-validation.spec.md +152 -0
  253. package/src/components/FieldControlGroup/field-control-group.spec.md +176 -0
  254. package/src/components/FileItem/file-item.spec.md +467 -0
  255. package/src/components/FileUpload/file-upload.spec.md +123 -0
  256. package/src/components/FileViewer/file-viewer.spec.md +373 -0
  257. package/src/components/HoverCard/hover-card.spec.md +157 -0
  258. package/src/components/Input/input.spec.md +193 -0
  259. package/src/components/LinkInput/link-input.spec.md +130 -0
  260. package/src/components/Menu/menu-item.spec.md +290 -0
  261. package/src/components/NameCard/name-card.spec.md +171 -0
  262. package/src/components/Notice/notice.spec.md +149 -0
  263. package/src/components/NumberInput/number-input.spec.md +126 -0
  264. package/src/components/OverflowIndicator/overflow-indicator.spec.md +120 -0
  265. package/src/components/PeoplePicker/people-picker.spec.md +263 -0
  266. package/src/components/Popover/popover.spec.md +198 -0
  267. package/src/components/ProgressBar/progress-bar.spec.md +232 -0
  268. package/src/components/RadioGroup/radio-group.spec.md +141 -0
  269. package/src/components/Rating/rating.spec.md +208 -0
  270. package/src/components/ScrollArea/scroll-area.spec.md +145 -0
  271. package/src/components/SegmentedControl/segmented-control.spec.md +295 -0
  272. package/src/components/Select/select.spec.md +299 -0
  273. package/src/components/SelectMenu/select-menu.spec.md +220 -0
  274. package/src/components/SelectionControl/selection-item.spec.md +128 -0
  275. package/src/components/Separator/separator.spec.md +109 -0
  276. package/src/components/Sheet/sheet.spec.md +148 -0
  277. package/src/components/Sidebar/sidebar.spec.md +713 -0
  278. package/src/components/Skeleton/skeleton.spec.md +104 -0
  279. package/src/components/Slider/slider.spec.md +353 -0
  280. package/src/components/Steps/steps.spec.md +465 -0
  281. package/src/components/Switch/switch.spec.md +215 -0
  282. package/src/components/Tabs/tabs.spec.md +314 -0
  283. package/src/components/Tag/tag.spec.md +282 -0
  284. package/src/components/Textarea/textarea.spec.md +151 -0
  285. package/src/components/TimePicker/time-picker.spec.md +279 -0
  286. package/src/components/Toast/toast.spec.md +177 -0
  287. package/src/components/Tooltip/tooltip.spec.md +139 -0
  288. package/src/components/TreeView/tree-view.spec.md +374 -0
  289. package/src/patterns/action-bar/action-bar.spec.md +458 -0
  290. package/src/patterns/element-anatomy/element-anatomy.spec.md +215 -0
  291. package/src/patterns/element-anatomy/inline-action.spec.md +315 -0
  292. package/src/patterns/element-anatomy/item-anatomy.spec.md +1042 -0
  293. package/src/patterns/header-canonical/header-canonical.spec.md +285 -0
  294. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +191 -0
  295. package/src/patterns/overlay-surface/overlay-surface.spec.md +428 -0
  296. package/src/patterns/resize-handle/resize-handle.spec.md +109 -0
  297. package/src/tokens/color/color.spec.md +804 -0
  298. package/src/tokens/density/density.spec.md +127 -0
  299. package/src/tokens/elevation/elevation.spec.md +81 -0
  300. package/src/tokens/layoutSpace/layoutSpace.spec.md +314 -0
  301. package/src/tokens/motion/motion.spec.md +97 -0
  302. package/src/tokens/opacity/opacity.spec.md +78 -0
  303. package/src/tokens/orphan-tokens.spec.md +117 -0
  304. package/src/tokens/radius/radius.spec.md +123 -0
  305. package/src/tokens/typography/typography.spec.md +202 -0
  306. package/src/tokens/uiSize/uiSize.spec.md +438 -0
  307. package/src/styles/preset.css +0 -31
@@ -0,0 +1,159 @@
1
+ # Report Template — P0/P1/P2 分類 + 報告格式
2
+
3
+ ---
4
+
5
+ ## Severity 分類
6
+
7
+ ### P0 — 必修(無爭議 bug)
8
+
9
+ 自動 bug / 違反明確 DS 規則 / a11y 必要項缺失:
10
+
11
+ - Token 硬寫 hex / rgb / shadcn alias
12
+ - Tailwind default shadow(shadow-sm / md / lg)
13
+ - Tailwind v4 `[--foo]` shorthand
14
+ - icon-only 無 aria-label
15
+ - Dialog / Modal 無 DialogTitle
16
+ - 非 button 綁 onClick(a11y 破壞)
17
+ - 巢狀浮層 / 巢狀 Modal(HTML invalid 或 UX 破壞)
18
+ - CLAUDE.md「同 flex 列互動 slot 幾何鐵律」違反
19
+
20
+ **處理**: AI 可直接修(surgical fix),commit 時 user 一併 review。
21
+
22
+ ### P1 — 批次修 + review
23
+
24
+ 設計原則違反 / 元件誤用 / 可改善但無立即 bug:
25
+
26
+ - Layout primitive 未消費(自 roll Empty / item-layout 等)
27
+ - 硬寫 px 值當應用 token
28
+ - placeholder 文案(Option A/B/C / Lorem ipsum)
29
+ - Primary Button 堆疊
30
+ - 巢狀 Accordion / Tabs / Carousel
31
+ - native overflow 未用 ScrollArea(跨 OS 跑版潛在風險)
32
+ - 硬寫 aspect-* class 未用 AspectRatio
33
+
34
+ **處理**: 批次 fix,每 Dim 一個 commit,由 user review。
35
+
36
+ ### P2 — 需討論
37
+
38
+ scope / 設計決策 / 業務判斷:
39
+
40
+ - cva defaultVariants 三方漂移(可能 intent)
41
+ - Rule B 邊界案例覆蓋不足(scope 決策)
42
+ - 新元件 promotion 判斷
43
+ - 歷史 code 風格差異(rename / refactor 決策)
44
+ - TODO 留白(規格未定)
45
+
46
+ **處理**: 不自動修,由 user 逐項決策。
47
+
48
+ ---
49
+
50
+ ## Report 格式範本
51
+
52
+ ```markdown
53
+ # Product UI Audit Report
54
+
55
+ **Scope**: `src/app/features/checkout/` (23 files)
56
+ **Date**: 2026-04-19
57
+ **Dimensions audited**: 6 (Token / Layout primitive / Component / Mindset / Geometry / A11y)
58
+
59
+ ## Summary
60
+
61
+ | Dim | Total findings | P0 | P1 | P2 |
62
+ |-----|---------------|-----|-----|-----|
63
+ | 1 Token | 3 | 2 | 1 | 0 |
64
+ | 2 Layout primitive | 5 | 0 | 4 | 1 |
65
+ | 3 Component | 2 | 1 | 1 | 0 |
66
+ | 4 Mindset | 4 | 0 | 3 | 1 |
67
+ | 5 Geometry | 1 | 1 | 0 | 0 |
68
+ | 6 A11y | 2 | 2 | 0 | 0 |
69
+ | **Total** | **17** | **6** | **9** | **2** |
70
+
71
+ ## Findings Detail
72
+
73
+ ### P0(必修 6 項)
74
+
75
+ | # | Dim | File:Line | Finding | Fix |
76
+ |---|-----|-----------|---------|-----|
77
+ | 1 | 1 Token | src/app/checkout/PaymentForm.tsx:87 | 硬寫 `#3b82f6` | 改 `var(--primary)` |
78
+ | 2 | 1 Token | src/app/checkout/Summary.tsx:42 | `shadow-md` | 改 `shadow-[var(--elevation-200)]` |
79
+ | 3 | 3 Component | src/app/checkout/PromoButton.tsx:12 | iconOnly Button 無 aria-label | 加 `aria-label="套用折扣碼"` |
80
+ | 4 | 5 Geometry | src/app/checkout/Actions.tsx:55 | 同 flex 行 Button sm(28)+ICon-only Primary(24)box 不一致 | 統一尺寸,或移 icon 入 Button's startIcon |
81
+ | 5 | 6 A11y | src/app/checkout/ProgressNav.tsx:23 | `<div onClick=...>` | 改 `<button>` 或加 `role="button" tabIndex={0} onKeyDown={...}` |
82
+ | 6 | 6 A11y | src/app/checkout/ConfirmModal.tsx:8 | Dialog 無 DialogTitle | 加 `<DialogTitle>確認結帳</DialogTitle>` |
83
+
84
+ ### P1(批次修 9 項)
85
+
86
+ {以 Dim 分組,per-Dim table}
87
+
88
+ ### P2(需討論 2 項)
89
+
90
+ | # | Dim | File:Line | Finding | 為何需討論 |
91
+ |---|-----|-----------|---------|---------|
92
+ | 16 | 2 Layout | src/app/checkout/EmptyCart.tsx:30 | 自 roll icon+title+desc+CTA structure | Consumer 若有品牌化 requirement 可能需 override Empty;需 user 確認 design intent |
93
+ | 17 | 4 Mindset | src/app/checkout/AmountInput.tsx:15 | Input typography 用 `text-[15px]` | 業務要求此欄位字體稍大,需評估 DS 是否加 variant 或 case-by-case 接受 |
94
+
95
+ ## 建議
96
+
97
+ **先修 P0 6 項**(1 個 commit):無爭議 bug,改完即世界級 baseline。
98
+ **再批次修 P1**(建議按 Dim 分 commit,4 commits):
99
+ 1. Token(Dim 1,1 項)
100
+ 2. Layout primitive(Dim 2,4 項)— 最大 batch
101
+ 3. Component(Dim 3,1 項)
102
+ 4. Mindset(Dim 4,3 項)
103
+
104
+ **最後討論 P2**(stakeholder 共同決策)。
105
+
106
+ ## Next
107
+
108
+ 等待 user Checkpoint 決策:
109
+ - (a) AI 直接修 P0,batch 修 P1,P2 逐項討論
110
+ - (b) 全部 findings 先給 user 自己看,AI 等候指令
111
+ - (c) 只修 P0,其他 park 到下個 sprint
112
+ ```
113
+
114
+ ---
115
+
116
+ ## Triage Checkpoint 範本
117
+
118
+ audit 完,**不可**直接開始修。先 triage 問 user:
119
+
120
+ ```
121
+ 🔍 Product UI Audit Report
122
+
123
+ Scope: {scope}
124
+ Total findings: {N}
125
+
126
+ P0(必修,無爭議){N0 個} — token 違反 / a11y 必要缺 / 幾何鐵律違反
127
+ P1(批次修 + review){N1 個} — layout primitive 消費 / placeholder 文案 / Button 堆疊
128
+ P2(需討論){N2 個} — scope / 設計決策 / 業務判斷
129
+
130
+ 建議順序:
131
+ 1. 先修 P0(1 commit,surgical fix)
132
+ 2. 再批次修 P1(每 Dim 一個 commit,共 {N_dims} commits)
133
+ 3. P2 逐項討論
134
+
135
+ 你要:
136
+ (a) 按建議順序執行(我開始修 P0)
137
+ (b) 先讓我完整看 findings 再決定
138
+ (c) 跳過 P2,只修 P0+P1
139
+ (d) 縮窄 scope 到 {sub-folder}
140
+ ```
141
+
142
+ 絕對不可:AI 自行決定修哪些,必過 triage。
143
+
144
+ ---
145
+
146
+ ## 合法例外聲明範本
147
+
148
+ 若 audit hit 被判定為合法例外(per CLAUDE.md 或 spec documented),在 report 中明文標示:
149
+
150
+ ```markdown
151
+ ### Documented exceptions(非 findings,供參考)
152
+
153
+ | File:Line | Pattern | 例外理由 |
154
+ |-----------|---------|---------|
155
+ | Avatar.tsx:46 | `text: '#fff'` | cva 適用範圍例外(style prop 驅動 object map),per CLAUDE.md `cva 適用範圍` |
156
+ | Rating.spec.md:73 | `bg-warning` 黃星 | 世界級 convention(Amazon / Yelp / Google),documented |
157
+ ```
158
+
159
+ 讓 user 知道 AI 有注意到但判斷為合法 — 防被誤解為遺漏。
@@ -0,0 +1,177 @@
1
+ ---
2
+ name: propose-options
3
+ description: Auto-invoke when listing options / 建議 / 候選方案. Forces inline 4-Q principle check(M8 benchmark / M17 SSOT / Rule-of-3 / M10 subsumption)per option BEFORE listing. Failures filtered or labeled. Codifies「verify before propose」runtime discipline.
4
+ ---
5
+
6
+ # /propose-options — Propose-time 4-Q Gate
7
+
8
+ **目的**:Claude 對 user 提建議 / 列 option list 時,**先跑 4 題原則自檢**,通過才寫進回覆。Reject 的不列 OR 列出時標 fail 原因。
9
+
10
+ **對齊**:
11
+ - CLAUDE.md mindset #1(不取巧)+ #2(消費既有)+ #5(猶豫就問)+ #6(meta 抽象)
12
+ - M8 benchmark / M17 SSOT / M12 binary rule / 資訊治理「加規則前 3 題」
13
+ - 本 skill 是上述 meta 的**propose-time 落地** — meta 寫成文字不夠,要 mechanical workflow 釘住
14
+
15
+ ## When to invoke
16
+
17
+ **強制 invoke** 在以下情境(不靠 user 提醒):
18
+ - 寫「Option A / B / C」「選 A / B」「3 個方向」 類列表
19
+ - 寫「建議做」「該做」「提議」 類 verb
20
+ - 寫「c. d. e.」 候選清單(像本 conv 我給 c hook + d M18 那種)
21
+ - 任何「if you sign-off, I'll do X」 提案
22
+
23
+ **不 invoke**:
24
+ - User 已明示要做 X(只是 execute,不 propose)
25
+ - 純資訊回答(描述現況,不選擇)
26
+ - Bug fix 的 surgical solution(無 option,直接修)
27
+
28
+ ---
29
+
30
+ ## Workflow(強制 6 題,缺一就 reject 此 option)
31
+
32
+ 每個 candidate option 過以下 6 題,inline 寫進回覆:
33
+
34
+ ### Q0 — **Pre-ASK self-verify problem 真存在**(2026-05-18 加,absorbs Sheet/inline-action/SurfaceBody 三題誤判事件)
35
+
36
+ **問**:propose 給 user 拍板前,是否已**grep DS-wide + Read 相關 spec.md / tsx + Read consumer usage** 確認 problem **真存在**?
37
+
38
+ **為何**:M18 / M23 / M29 都管「決策過程紀律」,但**propose 給 user 前的「problem 真存在?」基本判斷**沒 codify。本 session 我 propose 3 題(Sheet 補 / 5 元件 migrate inline-action / 5 元件 migrate SurfaceBody)**全部不是真 problem** — Sheet spec 已完整、inline-action 已全消費、SurfaceBody 有意設計不該動 — 但我 propose 給 user 拍板浪費 user 時間 + 動搖 user 信任。
39
+
40
+ **強制檢查**:
41
+ 1. **grep 既有 code DS-wide** — 「該 migrate 的 X 元件」真沒消費 primitive?(`rg "<primitive>" packages/design-system/src/components/<X>`)
42
+ 2. **Read 相關 spec.md** — spec 有沒有明文 codify 該設計是有意 / 例外 / 合法分支?(本 session 例:Tag inline-action colored host 例外是 spec L52-54 明寫的)
43
+ 3. **Read consumer usage** — 該 pattern 已在 N 處 work fine?N ≥ 3 → 該 pattern 是 working canonical,不是 problem
44
+ 4. **反問**:「如果 user 答 A,我會做什麼?該動 K 個 file?那 K 個 file 真有問題嗎?還是我假設的?」
45
+
46
+ **Fail criteria**(任一命中 → reject propose,不丟給 user):
47
+ - 沒 grep 既有就斷言「N 元件缺 X」
48
+ - 沒讀 spec 就斷言「現況違反 canonical」
49
+ - 「我推 A 因 X 比較統一」但 X 已是合法分支(spec 明文)
50
+ - propose 是 mass-migration 但沒列具體哪 K file file:line 需動
51
+
52
+ **Pass criteria**(全過才能 propose):
53
+ - ✅ 列具體 file:line 證據 problem 存在
54
+ - ✅ 列 spec.md 段落 cite 證明「現況違反 spec」
55
+ - ✅ counter-example scan 跑過:DS 其他元件用一樣 pattern → 反證「這不是 problem」
56
+ - ✅ 給 user 的 option list 含「C. 不動(理由)」且 C 經 grep verify 不是 cheap escape
57
+
58
+ **例**:
59
+ - ✅ "grep 結果 Input/NumberInput/LinkInput 3 file 都未消費 ItemInlineAction(file:line)+ spec.md L60 表格列為 expected consumer → 真 gap"
60
+ - ❌ "5 元件應該 migrate"(沒 grep / 沒 cite spec / 不知道 K 元件已 migrate / 是 colored host 合法例外)
61
+
62
+ **對應 hook**:`check_propose_pre_grep_verify.sh`(2026-05-18 加,Edit/Write `*.md` 內含「propose」/「請拍板」/「決策」keyword 但近 N turn 無 grep/Read tool call → P1 warn)
63
+
64
+ ### Q1 — M8 World-class benchmark
65
+ **問**:本 option ≥ 3 家 world-class DS / framework / canonical 有對照嗎?
66
+ **列**:具體實作名 / API 指向 / docs URL
67
+ **Fail**:< 3 家對照 → option 未成熟,不該 propose
68
+ **例**:
69
+ - ✅ "Polaris IconButton padding-free / Atlassian button-iconOnly p:0 / Material UI MuiSvgIcon flex-shrink:0"
70
+ - ❌ "感覺合理 / 可能對 / 沒查"
71
+
72
+ ### Q1' — **M23 DS internal canonical 優先 grep**(2026-05-03 加,chevron 事件後)
73
+ **先 grep DS 既有 token / variant / pattern 命中?有 → 必對齊,Q1 外部 benchmark 只是輔證。**
74
+ **問**:propose 的 visual decision(color / size / spacing / typography / state)是否已 grep `packages/design-system/src/tokens/` + 近親 component spec/tsx 確認沒命中既有?
75
+ **Fail**:跳過 grep 直接搬 world-class → M23 違反(本 conv chevron 用 Ant 5 家 muted 覆蓋 DS 內 icon-only Button = neutral-9 canonical → user 4 輪糾正)
76
+ **例**:
77
+ - ✅ "grep `text-foreground` 已是 icon-only Button 預設(neutral-9 / 85%)→ 對齊;Ant cite 為輔證"
78
+ - ❌ "Ant / Material muted → 直接套(沒 grep 內部 canonical)"
79
+
80
+ ### Q2 — M17 SSOT 必可傳播
81
+ **問**:本 option 動到的 canonical 有真正可執行 SSOT 嗎(token / primitive / utility)?還是只在 markdown 文字?
82
+ **Fail**:只增加 markdown 文字、沒提供 mechanical enforcement → 假 SSOT
83
+ **例**:
84
+ - ✅ "新 utility class `ICON_ONLY_BASE` 共用,2 host import"
85
+ - ❌ "spec 寫一行 rule,未來誰記得就好"
86
+
87
+ ### Q3 — Rule-of-3 SSOT placement
88
+ **問**:本概念在現有 home 已 ≥ 3 處出現?該選 SSOT,其他 pointer。新加的話,SSOT 該住哪 home?
89
+ **Fail**:concept 已 ≥ 3 處仍要新增 home / 重複描述 → 違 Rule-of-3
90
+ **例**:
91
+ - ✅ "uiSize.spec.md 是 SSOT,button.spec.md / segmented-control.spec.md 1 行 pointer"
92
+ - ❌ "每個 spec 各自寫一份"
93
+
94
+ ### Q4 — M10 下游吸收
95
+ **問**:本 option 加入後,既有哪些 rule / memory / bug case 被吸收可刪?
96
+ **Fail**:純 append 沒 retire,違反「上游加 = 下游減」 + 資訊治理 anti-bloat
97
+ **例**:
98
+ - ✅ "M18 加,M12 部分 overlap 但 scope 不同共存(說明)"
99
+ - ❌ "新加 M18,既有 M-row 全保留(沒檢查)"
100
+
101
+ ### Q5 — Issue list 100% mapped(2026-05-05 anti-drift,user trigger 第 5 次後新增)
102
+ **問**:plan iteration / option list 改版時,user 提的**所有** raised issue 是否 100% mapped 到本版的 step / option / 評估?**未 mapped 的逐條 explicit 標**:`done` / `folded into Step X` / `informational(無實作)` / `dropped(原因)` / `pending`。
103
+ **Fail**:silent drop / 沒 mapping table / fold 進 step 沒 trace
104
+ **例**:
105
+ - ✅ "Issue 1-14 列 mapping table,Issue 3+13 標 informational,其他 11 條 mapped"
106
+ - ❌ "改版只列新 Step,沒 walk-through user 之前提的 issue list"
107
+
108
+ ---
109
+
110
+ ## Workflow Output Format
111
+
112
+ 對 user 回覆中的 option list 必含 **inline 5-Q 表 + Issue mapping**(plan iteration 場景):
113
+
114
+ ```markdown
115
+ | 選項 | M23 DS grep | M8 benchmark | M17 SSOT | Rule-of-3 | M10 下游 | Issue cover | 結論 |
116
+ |---|---|---|---|---|---|---|---|
117
+ | A | DS 已有 X token,對齊 | Polaris/Atlassian/Material 輔證 | 抽 utility 共用 | 0 處 SSOT 新增 OK | 可刪 X 條冗餘 | covers 8/14 | **PASS,推薦** |
118
+ | B | 沒 grep | 只查 1 家 | 純 markdown rule | 已 3 處,無新 SSOT 動 | 純 append 沒 retire | covers 4/14 | **REJECT(M23+M8 雙 fail + Q5 不全)** |
119
+ ```
120
+
121
+ **Plan iteration 必含 Issue ↔ Step 完整 mapping table**(不可只列新 step 表,user 看不到原 issue trace):
122
+ ```markdown
123
+ | # | Issue (按 user 提出順序) | 處理 |
124
+ |---|---|---|
125
+ | 1 | <user 原文 issue> | Step X / informational / dropped(reason) |
126
+ | ... | ... | ... |
127
+ ```
128
+
129
+ **所有 fail 過 4-Q 的 option 必明示 reject + 原因**,不只 list 不過的。User 看見 reject 過程才能信 propose 過原則。
130
+
131
+ ---
132
+
133
+ ## Edge cases
134
+
135
+ ### 緊急 / surgical bug fix
136
+ 不需走全 4 題(沒 option list,直接修)。但 commit message 仍應簡述「修法已知 root cause + 不取巧」(對齊 mindset #1)。
137
+
138
+ ### Option 內含 sub-option(nested)
139
+ 每層各自跑 4 題。Skill 不限深度但實作上 ≥ 3 層 nested 已是設計問題,user 該停下重整。
140
+
141
+ ### User 已明示要 X(非 propose)
142
+ 不跑 skill。直接執行。
143
+
144
+ ---
145
+
146
+ ## 為什麼這 skill 必要(本 session 教訓)
147
+
148
+ User 已就「為什麼會給錯誤建議」糾正 ≥ 3 次:
149
+ - session 初:G6/G7/G8 推力,我自己沒 dogfood test → 第 3 次問才補
150
+ - 中:c hook + d M18-inner-area propose,**user sign-off 前剛好我自己覺察跑 4-Q 才撤回**
151
+ - 末:user 直接質問「為什麼會給錯誤建議?如果我答應了會直接執行嗎?」(本 skill 的觸發)
152
+
153
+ **Infra G6/G7/G8 是 post-edit / session-start 防線,沒 propose-time gate**。Claude Code event model 沒 OnAssistantMessage hook,**只能靠 model-runtime 紀律 + skill self-invoke**。本 skill 就是 mechanical 補位 — invoke 時讀本檔,4-Q 表格自然寫進回覆。
154
+
155
+ ---
156
+
157
+ ## Self-improvement capture
158
+
159
+ 每次 invoke 完,session 結束前自問:
160
+ - (a) 是否每個 option 真跑了 4-Q 還是糊弄填表?
161
+ - (b) 是否有 reject option 曾被 list?(reject 不該被列出)
162
+ - (c) 是否 user 仍質疑 propose 品質?(若是 → 4-Q 沒抓到的 gap → 加 Q5)
163
+
164
+ 回填到本 SKILL.md 或 CLAUDE.md M18(若需 escalate)。
165
+
166
+ ---
167
+
168
+ ## 與其他 skill 對位
169
+
170
+ | Skill | scope |
171
+ |---|---|
172
+ | `pre_write_subsumption_check.sh`(hook)| Edit/Write 已發生時 |
173
+ | `post_edit_canonical_interrogate.sh`(hook)| 寫完 canonical 後 3 題 |
174
+ | `check_governance_compliance.sh`(hook)| 寫新 hook 7 題 |
175
+ | **本 skill** `/propose-options` | **propose-time(寫進 user 回覆前)4 題** |
176
+
177
+ 4 個正交 — propose 前 / write 前 / write 中 / write 後 全 cover。
@@ -0,0 +1,244 @@
1
+ ---
2
+ name: prototype
3
+ description: Build UI prototypes / MVPs via a structured UX workflow — benchmark world-class, evaluate against DS + business, produce 2-3 shortlisted candidates as Storybook explorations, self-audit via product-ui-audit, let stakeholders decide. Invoke via /prototype ONLY when user explicitly uses the words「prototype」「MVP」「原型」 in their message (e.g.「做 prototype」「做 MVP」「做原型」「prototype 一個 X」). **DO NOT auto-invoke on casual phrases** like「怎麼做世界級」「給我幾個方案」「比版本」「比幾個版本」「還能怎麼做」「有哪些選項」— these are ambient conversation / thought-partnering, not explicit skill requests; instead ask「要走 prototype skill 正式流程嗎?還是只想先口頭討論?」to confirm before invoking.
4
+ ---
5
+
6
+ # Prototype Workflow
7
+
8
+ Purpose: embody the UX designer's mental model for BUILDING PROTOTYPES — never design by gut; benchmark world-class, filter against DS + business, build multiple shortlisted proposals, self-audit, let stakeholders decide.
9
+
10
+ This skill is the **structured version** of CLAUDE.md Mindset #1「對標世界級」+ #4「真實業務場景」+ #5「猶豫就問」,and the orchestrator for `src/explorations/` folder usage.
11
+
12
+ ## When to run
13
+
14
+ **明確觸發**(直接 invoke):user 用「prototype / MVP / 原型」明確字眼。例:「做 prototype」「做 MVP」「做原型」「prototype 一個 X」「做幾個 prototype 版本 compare」。
15
+
16
+ **模糊觸發**(先 clarify):「給我幾個方案」「怎麼做世界級」「有哪些選項」「比版本」 — 多為 thought-partnering,**先問**「要走正式 prototype skill 還是先口頭討論?」
17
+
18
+ **不觸發**:已確定單一 feature(直接 implement)/ 單一 pattern 諮詢(直接答)/ 產品交付(走 `/delivery-handoff`)/ DS 本身稽核(走 `/design-system-audit`)/ consumer UI 檢查(走 `/product-ui-audit`)。
19
+
20
+ **生態位**:`/prototype` → Phase 3.5 chain `/product-ui-audit` gate → stakeholder 決定 → 採用後 `/delivery-handoff`。新 primitive 採用後,加入 DS 時跑 `/design-system-audit` 確保內部健康(正交關注點)。
21
+
22
+ ## Preconditions
23
+
24
+ - User has briefed a feature / problem / user need (will be clarified in Phase 0)
25
+ - Working directory is project root
26
+ - CLAUDE.md read fully(DS 既有 primitives / layout primitives 清單 / mindset)
27
+
28
+ ---
29
+
30
+ ## 6-Phase Workflow
31
+
32
+ ### Phase 0 — Clarify
33
+
34
+ **Input**: user's initial request(可能模糊)
35
+
36
+ **Process**: AI asks user 3-5 targeted questions to lock down:
37
+ - 要做什麼(feature / flow / component)
38
+ - 給誰用(primary user persona)
39
+ - 解決什麼 jobs-to-be-done(具體使用情境,不是 "better UX")
40
+ - 量化指標(若有)(e.g., "減少 50% 流失率")
41
+ - Constraints(mobile-first? accessibility level? 時程?)
42
+
43
+ **Output**: 一段 1-liner summary 確認 alignment。
44
+
45
+ ### ⚠️ Checkpoint 0 — User confirms framing
46
+
47
+ User approves the problem framing OR clarifies. Do NOT skip to benchmarking without a clean frame.
48
+
49
+ ### Phase 1 — Benchmark research
50
+
51
+ **Input**: Phase 0 framing
52
+
53
+ **Process**: Scan 5+ world-class references. See `references/benchmark-sources.md` for the canonical list of DS + world-class SaaS + industry-specific references.
54
+
55
+ For each reference,收集**兩類資訊**:
56
+
57
+ **A. 視覺 / 互動(表層)**:
58
+ - How do they solve this problem?
59
+ - Screenshot(WebFetch or user provides)
60
+ - Key mechanics:layout / interaction pattern / states / a11y
61
+ - 1-2 line summary of approach
62
+
63
+ **B. OOUX 層(資訊架構深度對標)**:
64
+ - **Core objects** identified(名詞清單 + attributes)
65
+ - **Relationships**(object 間如何連,NOM highlights)
66
+ - **CTAs per role**(key actions each role 對每 object 可做什麼)
67
+ - **UI shape observed**(同一 object 在 list / card / detail / inline 多種 shape 下 attributes 怎麼 progressive disclose)
68
+
69
+ **為什麼加 OOUX 欄**:視覺只看外型會抄到形式,object model 才是 IA 深度。做完 5 家 benchmark 後,你會發現哪些 object 是業界共識 / 哪些命名是該產品獨有 — 這是 Phase 3 自己建 Object Map 的原料。
70
+
71
+ 詳細 OOUX 分析方法與範本見 [`references/ooux-template.md`](references/ooux-template.md)「Phase 1 用法」節(內含 Linear issue tracking 完整範例)。
72
+
73
+ **Output**: Markdown scan table(視覺 + OOUX 兩 section):
74
+
75
+ ```
76
+ | Reference | Approach | Key mechanics | Screenshot |
77
+ |-----------|----------|---------------|------------|
78
+ | Linear | ... | ... | link |
79
+ | Stripe | ... | ... | link |
80
+ | ... | | | |
81
+ ```
82
+
83
+ **Report format**: report back to user as the scan table. Do not advance to evaluation yet.
84
+
85
+ ### ⚠️ Checkpoint 1 — Research scope confirmation
86
+
87
+ User reviews the scan. Options:
88
+ - `(a)` Research is sufficient → proceed to Phase 2
89
+ - `(b)` Add references X, Y → extend Phase 1
90
+ - `(c)` Scope changed → restart Phase 0
91
+
92
+ ### Phase 2 — Evaluate candidates
93
+
94
+ **Input**: Phase 1 scan table
95
+
96
+ **Process**: for each candidate,score on 4 axes(see `references/evaluation-matrix.md`):
97
+
98
+ | Axis | Scale | Meaning |
99
+ |------|-------|---------|
100
+ | 優缺 | Pros / Cons bullets | 每個候選的獨立評估 |
101
+ | DS 一致性 | 1-5 | 能用多少既有元件 / primitives?新元件要不要造? |
102
+ | 業務 fit | 1-5 | 符合 Phase 0 jobs-to-be-done 多深? |
103
+ | 複雜度 | 1-5(低複雜度 = 5) | 開發成本 / 維護負擔 |
104
+
105
+ **Output**: 評分矩陣 + narrative summary per candidate。
106
+
107
+ Narrative 必含:
108
+ - 對齊 Mindset #1:「我們 vs 這家做法一樣 / 不同的理由」
109
+ - 對齊 Mindset #4:「搭我們的業務情境會不會水土不服」
110
+ - 對齊 Mindset #2:「這個 pattern 我們有對應 primitive 嗎?」
111
+
112
+ ### ⚠️ Checkpoint 2 — Shortlist decision(MUST ASK)
113
+
114
+ 這是最關鍵的 checkpoint。presenting 評分後,user 決定:
115
+ - 哪 2-3 個候選進 shortlist(要實際做原型)
116
+ - 哪些直接 drop(排除理由寫在 exploration notes)
117
+ - 是否需要混搭(A 的 interaction + B 的視覺 = 新候選 C)
118
+
119
+ **絕對不可**憑 AI 自己評分就挑 shortlist。這是設計決策,stakeholder 要參與。
120
+
121
+ ### Phase 3.0 — Build Object Map(ORCA,design 前強制)
122
+
123
+ **Input**: shortlist + Phase 1 benchmark 的 OOUX 分析
124
+
125
+ **Process**: 在寫任何 candidate story 之前,**先做 Object Map**(全體 candidate 共享同一個)。ORCA 4 步:
126
+
127
+ 1. **O** Objects:feature 的核心名詞(2-7 個理想;命名三重 test)
128
+ 2. **R** Relationships(NOM):object 間關聯(1:1 / 1:many / optional)
129
+ 3. **C** CTAs per role:每角色對每 object 的動作清單
130
+ 4. **A** Attributes per object:core / metadata / identifying
131
+
132
+ **Output**:`src/explorations/{topic-slug}/notes.md` 增補 OOUX section(見 `references/ooux-template.md`「Phase 3.0」範本 + Step 5 UI Shape → DS 元件映射表)。
133
+
134
+ **為什麼共享同一 Object Map**:3 個 candidate 差異應在 **UI shape + progressive disclosure + CTA ordering**,不在 object 定義本身。若 A candidate 把 Task 拆成 Task + Subtask、B candidate 只有 Task,stakeholder 比稿會變成「比 data model」失焦。除非該 feature 本質就是 data model 辯論,否則 object 定義應一致。
135
+
136
+ **何時跳過**:極小 feature(單一 button / 1-object 開關)可跳過 Phase 3.0,在 notes.md 明文標示「feature 範圍小,跳過 ORCA」。
137
+
138
+ ---
139
+
140
+ ### Phase 3 — Design each shortlisted candidate
141
+
142
+ **Input**: shortlist(2-3 items)+ Phase 3.0 產出的 Object Map
143
+
144
+ **Phase 3.0a — SSOT 5-step pre-check**:寫任何 candidate code 前必過 CLAUDE.md「SSOT 消費 canonical」+ memory `feedback_proactive_5layer_pipeline.md`「5-step pre-check」(SSOT 在 memory + CLAUDE.md,本 skill 不重複)。`check_story_anatomy.sh` PreToolUse 是最後安全網,但 5-step 是事前 discipline。
145
+
146
+ **Process**: 每個 candidate 建一個 exploration story,**各 candidate 共享 Object Map 但差異在 UI shape + CTAs 順序**。see `references/proposal-template.md` for structure。
147
+
148
+ 目錄結構:
149
+ ```
150
+ src/explorations/{topic-slug}/
151
+ ├── notes.md # 本 topic 概述 + Phase 2 評估摘要 + 3 候選簡介
152
+ ├── {CandidateA}.stories.tsx # 候選 A 原型(Storybook)
153
+ ├── {CandidateB}.stories.tsx # 候選 B 原型
154
+ └── {CandidateC}.stories.tsx # 候選 C 原型
155
+ ```
156
+
157
+ Storybook title 慣例(不與 Components/ 衝突):
158
+ `Explorations/{Topic}/{CandidateName}`
159
+
160
+ 每個 candidate story 必含:
161
+ - 標題說明(candidate 名 + 一句話 positioning)
162
+ - 實際可互動 prototype(用 packages/design-system/src/ 既有元件!)
163
+ - 若需新元件,在 notes.md 標示「此 candidate 需新增 X 元件(若選用此版)」
164
+ - 3 種以上使用場景示範(對齊 Mindset #4 真實業務場景)
165
+
166
+ **DS 一致性鐵律**:
167
+ - 優先用既有 `packages/design-system/src/components/` 元件
168
+ - 若需新元件 / primitive,**notes.md 明文標示**(不偷偷 add 到 components/)
169
+ - 所有 token / layout primitive 按 CLAUDE.md「既有 layout primitives 清單」消費
170
+
171
+ ### ⚠️ Checkpoint 3 — 新元件 / primitive 需求
172
+
173
+ 若任一 candidate 需要新 DS 元件,**必須 ASK**:
174
+ - 此新元件是本 candidate 獨有?還是跨 candidate 共用?
175
+ - 若被選中,值得升級到 Components/ 嗎?
176
+ - 三重命名 test 過嗎?(見 CLAUDE.md)
177
+
178
+ **絕對不可**在 explorations/ 階段就偷偷 add 到 Components/,會污染 DS。
179
+
180
+ ### Phase 3.5 — Self-audit(stakeholder-gate,強制進階 6 維)
181
+
182
+ **Input**: Phase 3 完成 + Checkpoint 3 資源決策完畢的 exploration stories
183
+ **核心原則**:exploration code 不該直接進 Phase 4 給 stakeholder 看 — AI 必先掃 6 維(對齊 CLAUDE.md `# 稽核 canonical` M6:stakeholder-visible 產出 → 強制進階模式)。
184
+ **Output**: per candidate 6 維 report,彙整成 Phase 3.5 gate report。
185
+
186
+ **6 維 + 執行順序 + Gate 規則完整詳細** → `references/audit-checks.md`(SSOT;本 skill 不重複)。重點:
187
+ - D1-D5 chain `/product-ui-audit` / `/performance-audit` / `/ux-audit` / `/visual-audit`
188
+ - D6 chain `principle-audit-protocol.md`(設計原則自檢 4 子維)
189
+ - 前置:M15 Flow snapshot coverage(無 OpenSnapshot story = block audit)
190
+ - Gate 規則:P0 必修 / 高 impact 必修 / D6 疑點 STOP 等 sign-off
191
+
192
+ ### Phase 4 — Present & stakeholder decision
193
+
194
+ **Input**: 3 個 exploration stories
195
+
196
+ **Process**: 撰寫 summary(放在 `notes.md`):
197
+ - 每 candidate 一句話重述 positioning
198
+ - 每 candidate 3 個適合場景 / 3 個不適合場景
199
+ - 推薦(AI 可 recommend 一個,但表明 user 決定)
200
+ - Link 到各自 Storybook route
201
+
202
+ **Output**: summary markdown + Storybook URL list → 丟給 stakeholder 評估。
203
+
204
+ ### ⚠️ Checkpoint 4 — Final decision & graduation
205
+
206
+ User / stakeholder 決定採用某 candidate 後:
207
+ - `(a)` 採用 A,promote 到 `packages/design-system/src/` 正式(若需新元件)或消費既有元件建正式 UI
208
+ - `(b)` 採用 A 但修改(進第二輪 proposal)
209
+ - `(c)` 混搭 A+B 新 hybrid(新 exploration)
210
+ - `(d)` 全部不採用(保留 explorations/ 作紀錄,也是有價值的 ruled-out)
211
+
212
+ **Graduation 流程**:若升級到正式,在 `explorations/_archive/` 備份 exploration(CLAUDE.md line 633:「不再使用但需保留的內容移至 _archive/」),正式 code 進 design-system/。
213
+
214
+ ### Phase 5 — Cleanup
215
+
216
+ 刪除 drop 的 exploration 或移 `_archive/`。更新 `src/explorations/` 索引。
217
+
218
+ ---
219
+
220
+ ## Non-goals
221
+
222
+ - 不在 explorations/ 階段做 detail pixel polish(focus 在 pattern 可行性 + 使用者反應)
223
+ - 不自動 promote exploration 到 Components/
224
+ - 不代替 stakeholder 決策(AI 可 recommend,但 flag「需 user / stakeholder 決定」)
225
+ - 不跳過 benchmark 憑直覺造 pattern(違反 Mindset #1 / #2)
226
+ - 不在單個 exploration 塞多個 pattern(一個 story = 一個明確 candidate)
227
+
228
+ ## Common failure modes
229
+
230
+ - **Phase 1 太淺**:只看 shadcn / Material 就收工。世界級 SaaS(Linear / Stripe / Notion / Figma)的在地解法才是精華
231
+ - **Phase 2 評分偏誤**:對 DS 一致性加權過低,結果 shortlist 全是「要造 5 個新元件」 — 違反 DRY
232
+ - **Phase 3 太快**:candidate 只做 1 個 story 沒展示多場景 — stakeholder 看不出 robustness
233
+ - **Checkpoint 2 skip**:AI 自己挑 2 個 shortlist 用戶沒過目 → 建完才發現方向全錯
234
+ - **Phase 4 recommend 太強勢**:summary 幫 user「決定」,違反 skill 精神(exploration 就是讓 stakeholder 評估)
235
+
236
+ ---
237
+
238
+ ## References(`references/`)
239
+
240
+ - `benchmark-sources.md` 世界級對標 + OOUX
241
+ - `ooux-template.md` ORCA / Object Map / NOM / CTA(Sophia V. Prater)
242
+ - `evaluation-matrix.md` 4 軸評分 + 決策規則
243
+ - `proposal-template.md` explorations/ + Storybook 結構
244
+ - `checkpoints.md` 5 MUST ASK 範本 + 歷史 failure mode
@@ -0,0 +1,37 @@
1
+ # Phase 3.5 Self-audit checklist(/prototype 用)
2
+
3
+ 對齊 CLAUDE.md `# 稽核 canonical` M6(stakeholder-visible 產出 → 強制進階模式)。比稿本質是「給 stakeholder 選視覺方向」,6 維任一沒 audit 好就 present = 比稿品質失準。
4
+
5
+ ## 6 維對應 skill
6
+
7
+ | 維度 | Skill | Audit scope |
8
+ |------|-------|-------------|
9
+ | **D1 設計語言一致** | `/product-ui-audit` | 6 dim(token 紀律 / layout primitive / 元件使用 / mindset / 幾何 / a11y) |
10
+ | **D2 程式語言一致** | `tsc --noEmit` + lint | exploration 目錄 |
11
+ | **D3 元件效能** | `/performance-audit` | render / memo / bundle(per candidate) |
12
+ | **D4 UX 行為** | `/ux-audit` | keyboard / focus / ARIA / animation |
13
+ | **D5 視覺品質** | `/visual-audit` | Layer A mechanical + Layer B AI judgement |
14
+ | **D6 設計原則自檢(4 子維)** | chain `principle-audit-protocol.md` | 合理 / 一致 / 無矛盾 / 完整 |
15
+
16
+ ## 執行順序
17
+
18
+ 0. **Flow snapshot coverage 前置檢查**(M15,Phase 3.5 gate 前必過):exploration 必含 OpenSnapshot 類 stories,涵蓋所有 UI flow state(initial / open / confirm / success / error / empty)。Pattern:`defaultOpen` / `useState(true)` / play() interaction 讓 Playwright 能截圖。未提供 = block audit。
19
+ 1. `npm run visual-audit -- --scope=component:{topic-slug}`(D5 Layer A,產 snapshots)
20
+ 2. Chain `/product-ui-audit`(D1)scope 到 `src/explorations/{topic-slug}/`
21
+ 3. Chain `/performance-audit`(D3)scope 到 exploration
22
+ 4. Chain `/ux-audit`(D4)scope 到 exploration
23
+ 5. Chain `/visual-audit`(D5 Layer B AI judgement)讀 `snapshots/*.png`
24
+ 6. **D6 真 scan**:chain `.claude/skills/design-system-audit/references/principle-audit-protocol.md` 對 exploration code 跑 4 子維;依判斷公式 auto / STOP
25
+ 7. **Self-improvement capture**(強制 Phase F step,見 CLAUDE.md `# 資訊治理 canonical`)
26
+
27
+ ## Gate 規則(嚴格)
28
+
29
+ | Finding | 處理 |
30
+ |---------|------|
31
+ | D1 / D2 P0(token alias / 硬色 / 幾何違反 / tsc error) | 必修 |
32
+ | D5 Layer A violation(contrast AA 不過 / geometry assertion fail) | 必修(視同 P0) |
33
+ | D3 / D4 高 impact finding(render 爆 / keyboard 不通 / ARIA 缺) | 必修 |
34
+ | D5 Layer B 明顯設計問題 | 必修 OR notes.md 明文 rationale |
35
+ | D6 canonical 疑點 | 不 block,列 STOP 區等 user sign-off |
36
+ | Code P1 > 3 筆 | 建議修,user 可決定先 present 或先修 |
37
+ | 無 P0 + Layer A 乾淨 + D3/D4 無高 impact | 可進 Phase 4 |