@qijenchen/design-system 0.1.0-beta.145 → 0.1.0-beta.147

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 (576) hide show
  1. package/dist/components/Accordion/accordion.d.ts +1 -1
  2. package/dist/components/Accordion/accordion.d.ts.map +1 -1
  3. package/dist/components/Accordion/accordion.js +8 -3
  4. package/dist/components/Accordion/accordion.js.map +1 -1
  5. package/dist/components/AccountMenu/account-menu.d.ts.map +1 -1
  6. package/dist/components/AccountMenu/account-menu.js.map +1 -1
  7. package/dist/components/AgentPanel/agent-panel-fab.d.ts +7 -1
  8. package/dist/components/AgentPanel/agent-panel-fab.d.ts.map +1 -1
  9. package/dist/components/AgentPanel/agent-panel-fab.js +36 -14
  10. package/dist/components/AgentPanel/agent-panel-fab.js.map +1 -1
  11. package/dist/components/AgentPanel/agent-panel-logo.d.ts +3 -3
  12. package/dist/components/AgentPanel/agent-panel-logo.js.map +1 -1
  13. package/dist/components/AgentPanel/agent-panel.d.ts +1 -1
  14. package/dist/components/AgentPanel/agent-panel.d.ts.map +1 -1
  15. package/dist/components/AgentPanel/agent-panel.js +28 -22
  16. package/dist/components/AgentPanel/agent-panel.js.map +1 -1
  17. package/dist/components/AppShell/app-shell.d.ts +1 -1
  18. package/dist/components/AppShell/app-shell.js +1 -1
  19. package/dist/components/AppShell/app-shell.js.map +1 -1
  20. package/dist/components/Avatar/avatar.d.ts +95 -1
  21. package/dist/components/Avatar/avatar.d.ts.map +1 -1
  22. package/dist/components/Avatar/avatar.js +106 -15
  23. package/dist/components/Avatar/avatar.js.map +1 -1
  24. package/dist/components/Avatar/index.js +14 -2
  25. package/dist/components/Breadcrumb/breadcrumb.d.ts +4 -2
  26. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -1
  27. package/dist/components/Breadcrumb/breadcrumb.js +2 -2
  28. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  29. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
  30. package/dist/components/BulkActionBar/bulk-action-bar.js +27 -2
  31. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
  32. package/dist/components/Button/button.d.ts +2 -2
  33. package/dist/components/Button/button.d.ts.map +1 -1
  34. package/dist/components/Button/button.js +118 -22
  35. package/dist/components/Button/button.js.map +1 -1
  36. package/dist/components/Calendar/calendar.d.ts +34 -10
  37. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  38. package/dist/components/Calendar/calendar.js +210 -36
  39. package/dist/components/Calendar/calendar.js.map +1 -1
  40. package/dist/components/Carousel/carousel.d.ts +1 -1
  41. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  42. package/dist/components/Carousel/carousel.js +3 -2
  43. package/dist/components/Carousel/carousel.js.map +1 -1
  44. package/dist/components/Chart/chart.d.ts +1 -0
  45. package/dist/components/Chart/chart.d.ts.map +1 -1
  46. package/dist/components/Chart/chart.js +8 -0
  47. package/dist/components/Chart/chart.js.map +1 -1
  48. package/dist/components/Checkbox/checkbox.d.ts +1 -1
  49. package/dist/components/Checkbox/checkbox.d.ts.map +1 -1
  50. package/dist/components/Checkbox/checkbox.js +10 -2
  51. package/dist/components/Checkbox/checkbox.js.map +1 -1
  52. package/dist/components/Chip/chip.d.ts +1 -1
  53. package/dist/components/Chip/chip.d.ts.map +1 -1
  54. package/dist/components/Chip/chip.js +4 -2
  55. package/dist/components/Chip/chip.js.map +1 -1
  56. package/dist/components/Combobox/combobox.d.ts +1 -1
  57. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  58. package/dist/components/Combobox/combobox.js +37 -11
  59. package/dist/components/Combobox/combobox.js.map +1 -1
  60. package/dist/components/Command/command.d.ts +1 -1
  61. package/dist/components/Command/command.d.ts.map +1 -1
  62. package/dist/components/Command/command.js +106 -8
  63. package/dist/components/Command/command.js.map +1 -1
  64. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  65. package/dist/components/DataTable/cell-registry.js +3 -2
  66. package/dist/components/DataTable/cell-registry.js.map +1 -1
  67. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -1
  68. package/dist/components/DataTable/data-table-column-visibility-panel.js +24 -24
  69. package/dist/components/DataTable/data-table-column-visibility-panel.js.map +1 -1
  70. package/dist/components/DataTable/data-table-interaction-layer.d.ts +2 -1
  71. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -1
  72. package/dist/components/DataTable/data-table-interaction-layer.js +3 -4
  73. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -1
  74. package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -1
  75. package/dist/components/DataTable/data-table-sort-manager.js +20 -20
  76. package/dist/components/DataTable/data-table-sort-manager.js.map +1 -1
  77. package/dist/components/DataTable/data-table.d.ts +8 -5
  78. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  79. package/dist/components/DataTable/data-table.js +197 -71
  80. package/dist/components/DataTable/data-table.js.map +1 -1
  81. package/dist/components/DateGrid/date-grid.d.ts +1 -1
  82. package/dist/components/DateGrid/date-grid.d.ts.map +1 -1
  83. package/dist/components/DateGrid/date-grid.js +358 -225
  84. package/dist/components/DateGrid/date-grid.js.map +1 -1
  85. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  86. package/dist/components/DatePicker/date-picker.js +16 -1
  87. package/dist/components/DatePicker/date-picker.js.map +1 -1
  88. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  89. package/dist/components/Dialog/dialog.js +55 -43
  90. package/dist/components/Dialog/dialog.js.map +1 -1
  91. package/dist/components/DropdownMenu/dropdown-menu-keyboard.d.ts +86 -0
  92. package/dist/components/DropdownMenu/dropdown-menu-keyboard.d.ts.map +1 -0
  93. package/dist/components/DropdownMenu/dropdown-menu-keyboard.js +172 -0
  94. package/dist/components/DropdownMenu/dropdown-menu-keyboard.js.map +1 -0
  95. package/dist/components/DropdownMenu/dropdown-menu.d.ts +6 -1
  96. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  97. package/dist/components/DropdownMenu/dropdown-menu.js +50 -39
  98. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
  99. package/dist/components/Field/field-context.d.ts +4 -0
  100. package/dist/components/Field/field-context.d.ts.map +1 -1
  101. package/dist/components/Field/field-context.js +1 -2
  102. package/dist/components/Field/field-context.js.map +1 -1
  103. package/dist/components/Field/field-edit-keys.d.ts +8 -0
  104. package/dist/components/Field/field-edit-keys.d.ts.map +1 -1
  105. package/dist/components/Field/field-edit-keys.js +3 -0
  106. package/dist/components/Field/field-edit-keys.js.map +1 -1
  107. package/dist/components/Field/field-wrapper.d.ts +18 -1
  108. package/dist/components/Field/field-wrapper.d.ts.map +1 -1
  109. package/dist/components/Field/field-wrapper.js +39 -10
  110. package/dist/components/Field/field-wrapper.js.map +1 -1
  111. package/dist/components/Field/field.d.ts +3 -2
  112. package/dist/components/Field/field.d.ts.map +1 -1
  113. package/dist/components/Field/field.js +2 -1
  114. package/dist/components/Field/field.js.map +1 -1
  115. package/dist/components/FileItem/file-item.d.ts +26 -2
  116. package/dist/components/FileItem/file-item.d.ts.map +1 -1
  117. package/dist/components/FileItem/file-item.js +82 -25
  118. package/dist/components/FileItem/file-item.js.map +1 -1
  119. package/dist/components/FileItem/index.js +4 -2
  120. package/dist/components/FileUpload/file-upload.d.ts +1 -1
  121. package/dist/components/FileUpload/file-upload.d.ts.map +1 -1
  122. package/dist/components/FileUpload/file-upload.js +132 -55
  123. package/dist/components/FileUpload/file-upload.js.map +1 -1
  124. package/dist/components/FileViewer/file-viewer.d.ts +1 -1
  125. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  126. package/dist/components/FileViewer/file-viewer.js +9 -4
  127. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  128. package/dist/components/InlineEdit/inline-edit.d.ts.map +1 -1
  129. package/dist/components/InlineEdit/inline-edit.js +1 -1
  130. package/dist/components/InlineEdit/inline-edit.js.map +1 -1
  131. package/dist/components/Input/input.d.ts.map +1 -1
  132. package/dist/components/Input/input.js +6 -1
  133. package/dist/components/Input/input.js.map +1 -1
  134. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  135. package/dist/components/LinkInput/link-input.js +20 -4
  136. package/dist/components/LinkInput/link-input.js.map +1 -1
  137. package/dist/components/Notice/notice.js +1 -1
  138. package/dist/components/Notice/notice.js.map +1 -1
  139. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  140. package/dist/components/NumberInput/number-input.js +6 -1
  141. package/dist/components/NumberInput/number-input.js.map +1 -1
  142. package/dist/components/OverflowIndicator/index.js +2 -1
  143. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +19 -1
  144. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -1
  145. package/dist/components/OverflowIndicator/overflow-indicator.js +47 -27
  146. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -1
  147. package/dist/components/Pagination/pagination.d.ts +1 -1
  148. package/dist/components/Pagination/pagination.js +1 -1
  149. package/dist/components/Pagination/pagination.js.map +1 -1
  150. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts +7 -6
  151. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts.map +1 -1
  152. package/dist/components/PeoplePicker/avatar-stack-overflow.js +6 -7
  153. package/dist/components/PeoplePicker/avatar-stack-overflow.js.map +1 -1
  154. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -1
  155. package/dist/components/PeoplePicker/people-picker-helpers.js +1 -1
  156. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -1
  157. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  158. package/dist/components/PeoplePicker/people-picker.js +2 -2
  159. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  160. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
  161. package/dist/components/PeoplePicker/person-display.js +26 -28
  162. package/dist/components/PeoplePicker/person-display.js.map +1 -1
  163. package/dist/components/ProfileCard/profile-card.d.ts.map +1 -1
  164. package/dist/components/ProfileCard/profile-card.js.map +1 -1
  165. package/dist/components/RadioGroup/radio-group.d.ts +1 -1
  166. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
  167. package/dist/components/RadioGroup/radio-group.js +10 -4
  168. package/dist/components/RadioGroup/radio-group.js.map +1 -1
  169. package/dist/components/Rating/rating.d.ts +28 -6
  170. package/dist/components/Rating/rating.d.ts.map +1 -1
  171. package/dist/components/Rating/rating.js +97 -80
  172. package/dist/components/Rating/rating.js.map +1 -1
  173. package/dist/components/ScrollArea/scroll-area.d.ts +1 -1
  174. package/dist/components/ScrollArea/scroll-area.js +1 -1
  175. package/dist/components/ScrollArea/scroll-area.js.map +1 -1
  176. package/dist/components/SegmentedControl/segmented-control.d.ts +1 -1
  177. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -1
  178. package/dist/components/SegmentedControl/segmented-control.js +3 -2
  179. package/dist/components/SegmentedControl/segmented-control.js.map +1 -1
  180. package/dist/components/Select/select.d.ts.map +1 -1
  181. package/dist/components/Select/select.js +15 -8
  182. package/dist/components/Select/select.js.map +1 -1
  183. package/dist/components/SelectMenu/index.js +2 -1
  184. package/dist/components/SelectMenu/index.js.map +1 -1
  185. package/dist/components/SelectMenu/select-menu-keyboard.d.ts +59 -0
  186. package/dist/components/SelectMenu/select-menu-keyboard.d.ts.map +1 -0
  187. package/dist/components/SelectMenu/select-menu-keyboard.js +107 -0
  188. package/dist/components/SelectMenu/select-menu-keyboard.js.map +1 -0
  189. package/dist/components/SelectMenu/select-menu.d.ts +1 -22
  190. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
  191. package/dist/components/SelectMenu/select-menu.js +18 -34
  192. package/dist/components/SelectMenu/select-menu.js.map +1 -1
  193. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -1
  194. package/dist/components/SelectionControl/selection-item.js +1 -0
  195. package/dist/components/SelectionControl/selection-item.js.map +1 -1
  196. package/dist/components/Sidebar/sidebar.d.ts +7 -9
  197. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  198. package/dist/components/Sidebar/sidebar.js +171 -50
  199. package/dist/components/Sidebar/sidebar.js.map +1 -1
  200. package/dist/components/Slider/slider.d.ts +1 -1
  201. package/dist/components/Slider/slider.d.ts.map +1 -1
  202. package/dist/components/Slider/slider.js +9 -4
  203. package/dist/components/Slider/slider.js.map +1 -1
  204. package/dist/components/Steps/steps.d.ts.map +1 -1
  205. package/dist/components/Steps/steps.js +54 -26
  206. package/dist/components/Steps/steps.js.map +1 -1
  207. package/dist/components/Switch/switch.d.ts +1 -1
  208. package/dist/components/Switch/switch.d.ts.map +1 -1
  209. package/dist/components/Switch/switch.js +7 -2
  210. package/dist/components/Switch/switch.js.map +1 -1
  211. package/dist/components/Tabs/tabs.d.ts +1 -1
  212. package/dist/components/Tabs/tabs.d.ts.map +1 -1
  213. package/dist/components/Tabs/tabs.js +39 -4
  214. package/dist/components/Tabs/tabs.js.map +1 -1
  215. package/dist/components/Tag/tag.d.ts +1 -1
  216. package/dist/components/Tag/tag.d.ts.map +1 -1
  217. package/dist/components/Tag/tag.js +3 -2
  218. package/dist/components/Tag/tag.js.map +1 -1
  219. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  220. package/dist/components/Textarea/textarea.js +8 -2
  221. package/dist/components/Textarea/textarea.js.map +1 -1
  222. package/dist/components/TimePicker/time-columns.d.ts.map +1 -1
  223. package/dist/components/TimePicker/time-columns.js +8 -4
  224. package/dist/components/TimePicker/time-columns.js.map +1 -1
  225. package/dist/components/TimePicker/time-picker.d.ts +1 -1
  226. package/dist/components/TimePicker/time-picker.js +1 -1
  227. package/dist/components/TimePicker/time-picker.js.map +1 -1
  228. package/dist/components/TreeView/tree-view.d.ts +9 -5
  229. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  230. package/dist/components/TreeView/tree-view.js +266 -214
  231. package/dist/components/TreeView/tree-view.js.map +1 -1
  232. package/dist/hooks/use-input-modality.d.ts +12 -17
  233. package/dist/hooks/use-input-modality.d.ts.map +1 -1
  234. package/dist/hooks/use-input-modality.js +4 -34
  235. package/dist/hooks/use-input-modality.js.map +1 -1
  236. package/dist/hooks/use-overflow-items.d.ts.map +1 -1
  237. package/dist/hooks/use-overflow-items.js +2 -0
  238. package/dist/hooks/use-overflow-items.js.map +1 -1
  239. package/dist/hooks/use-truncated.d.ts.map +1 -1
  240. package/dist/hooks/use-truncated.js.map +1 -1
  241. package/dist/index.d.ts +3 -0
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +23 -3
  244. package/dist/index.js.map +1 -1
  245. package/dist/lib/drag-announcements.d.ts +32 -0
  246. package/dist/lib/drag-announcements.d.ts.map +1 -1
  247. package/dist/lib/drag-announcements.js +39 -1
  248. package/dist/lib/drag-announcements.js.map +1 -1
  249. package/dist/lib/focus-after-trigger.d.ts +45 -0
  250. package/dist/lib/focus-after-trigger.d.ts.map +1 -0
  251. package/dist/lib/focus-after-trigger.js +66 -0
  252. package/dist/lib/focus-after-trigger.js.map +1 -0
  253. package/dist/lib/overlay-coexistence.js +1 -1
  254. package/dist/lib/roving-list-keyboard.d.ts +208 -0
  255. package/dist/lib/roving-list-keyboard.d.ts.map +1 -0
  256. package/dist/lib/roving-list-keyboard.js +174 -0
  257. package/dist/lib/roving-list-keyboard.js.map +1 -0
  258. package/dist/lib/utils.d.ts.map +1 -1
  259. package/dist/lib/utils.js +6 -1
  260. package/dist/lib/utils.js.map +1 -1
  261. package/dist/patterns/element-anatomy/item-anatomy.d.ts +4 -4
  262. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  263. package/dist/patterns/element-anatomy/item-anatomy.js +14 -4
  264. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  265. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts.map +1 -1
  266. package/dist/patterns/horizontal-overflow/horizontal-overflow.js +25 -0
  267. package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -1
  268. package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -1
  269. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -1
  270. package/dist/tokens/categorical-color.d.ts +6 -1
  271. package/dist/tokens/categorical-color.d.ts.map +1 -1
  272. package/dist/tokens/categorical-color.js.map +1 -1
  273. package/dist/tokens/uiSize/icon-size.d.ts +1 -1
  274. package/dist/tokens/uiSize/stack-gap.d.ts +18 -0
  275. package/dist/tokens/uiSize/stack-gap.d.ts.map +1 -0
  276. package/dist/tokens/uiSize/stack-gap.js +5 -0
  277. package/dist/tokens/uiSize/stack-gap.js.map +1 -0
  278. package/ds-canonical/fork/codex/agents/skills/performance-audit/SKILL.md +1 -1
  279. package/ds-canonical/fork/codex/hooks.json +1 -1
  280. package/ds-canonical/fork/consumer/lock.json +17 -14
  281. package/ds-canonical/fork/consumer/managed-files/423729840acdd43c812f17c245b871716c6b60f76e4d3e94864d0e34a815bf8d.blob +9 -0
  282. package/ds-canonical/fork/consumer/managed-files/46f10bc55cdfdf834d0749eebff42ea0bb8576f361b36d2b6ba1851354c50150.blob +47 -9
  283. package/ds-canonical/fork/consumer/managed-files/5a0d134a2645114c8caac20458070b00a7f0fd55b3e8805b7325cb4cf52fa15e.blob +110 -0
  284. package/ds-canonical/fork/consumer/managed-files/5af0a46760af338d51fd0f7950675f8e97f7d2f09386b8818fcd7a58e6654e75.blob +790 -0
  285. package/ds-canonical/fork/consumer/managed-files/68bfcddff9c4a16388c248cd34fb66163e9e64b3d809a48ef3984f6ae4ff6d12.blob +211 -0
  286. package/ds-canonical/fork/consumer/managed-files/7eb6cc60abfdabaf6617c336058fad1454ccde08889295767bfd9b7fd153cc6e.blob +45 -6
  287. package/ds-canonical/fork/consumer/managed-files/92e4828cdcb96ff0d01daa16f6885f24045a8e72820665650f2a1890dc3a446c.blob +42 -2
  288. package/ds-canonical/fork/consumer/managed-files/ab072e7f2eca51f0e18a5e18c4b333260ee5d219a12cc6df5bb2d683f0b2734d.blob +27 -1
  289. package/ds-canonical/fork/consumer/managed-files/e71c65f45c6af7ce12b6b3c0d8028f185da5b719e2050c9b2a6b243d41ae4878.blob +62 -14
  290. package/ds-canonical/fork/governance.lock +41 -17
  291. package/ds-canonical/fork/hooks/check_consumer_app_invariants.sh +16 -4
  292. package/ds-canonical/fork/hooks/check_consumer_code_quality.sh +3 -1
  293. package/ds-canonical/fork/hooks/check_pattern_invariants.sh +13 -9
  294. package/ds-canonical/fork/launchers/settings-hooks.json +1 -1
  295. package/ds-canonical/fork/manifest.json +17 -11
  296. package/ds-canonical/fork/providers/claude/skills/performance-audit/SKILL.md +1 -1
  297. package/ds-canonical/fork/providers/codex/hook-config.json +1 -1
  298. package/ds-canonical/fork/providers/codex/skills/performance-audit/SKILL.md +1 -1
  299. package/ds-canonical/fork/skills/performance-audit/SKILL.md +1 -1
  300. package/ds-canonical/hooks/check_consumer_app_invariants.sh +16 -4
  301. package/ds-canonical/hooks/check_consumer_code_quality.sh +3 -1
  302. package/ds-canonical/hooks/check_datatable_invariants.sh +4 -1
  303. package/ds-canonical/hooks/check_pattern_invariants.sh +13 -9
  304. package/ds-canonical/hooks/check_plugin_fork_health.sh +8 -1
  305. package/ds-canonical/hooks/check_propose_discipline.sh +8 -1
  306. package/ds-canonical/hooks/check_storybook_addon_packaging.sh +8 -1
  307. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +64 -2
  308. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +5 -2
  309. package/ds-canonical/hooks/registrations.json +12 -7
  310. package/ds-canonical/hooks/session_start_governance_check.sh +16 -0
  311. package/ds-canonical/hooks/tests/test_check_consumer_app_invariants.sh +25 -0
  312. package/ds-canonical/hooks/tests/test_check_consumer_code_quality.sh +4 -0
  313. package/ds-canonical/hooks/tests/test_check_consumer_ds_primitive_misuse.sh +14 -0
  314. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +24 -0
  315. package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +32 -0
  316. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +59 -0
  317. package/ds-canonical/hooks/tests/test_check_plugin_fork_health.sh +32 -1
  318. package/ds-canonical/hooks/tests/test_check_propose_discipline.sh +21 -0
  319. package/ds-canonical/hooks/tests/test_check_storybook_addon_packaging.sh +21 -0
  320. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +97 -0
  321. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +49 -0
  322. package/ds-canonical/references/README.md +12 -6
  323. package/ds-canonical/references/drag-canonical.md +3 -1
  324. package/ds-canonical/references/focus-canonical.md +26 -13
  325. package/ds-canonical/references/governance-audit-coverage.md +1 -1
  326. package/ds-canonical/references/hit-area-canonical.md +361 -0
  327. package/ds-canonical/references/item-anatomy-recipe.md +4 -2
  328. package/ds-canonical/references/keyboard-model-canonical.md +559 -0
  329. package/ds-canonical/rules/meta-patterns.md +4 -4
  330. package/ds-canonical/rules/self-verify.md +4 -4
  331. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1 -1
  332. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +96 -0
  333. package/ds-canonical/skills/knowledge-prune/SKILL.md +4 -1
  334. package/ds-canonical/skills/performance-audit/SKILL.md +1 -1
  335. package/ds-story-manifest.json +19 -7
  336. package/llms-full.txt +2 -2
  337. package/llms.txt +2 -2
  338. package/package.json +3 -1
  339. package/src/components/Accordion/accordion.anatomy.stories.tsx +3 -3
  340. package/src/components/Accordion/accordion.spec.md +1 -1
  341. package/src/components/Accordion/accordion.tsx +8 -3
  342. package/src/components/AccountMenu/account-menu.spec.md +2 -3
  343. package/src/components/AccountMenu/account-menu.tsx +0 -1
  344. package/src/components/AgentPanel/agent-decision-card.spec.md +88 -0
  345. package/src/components/AgentPanel/agent-panel-fab.spec.md +151 -0
  346. package/src/components/AgentPanel/agent-panel-fab.tsx +67 -24
  347. package/src/components/AgentPanel/agent-panel-logo.spec.md +87 -0
  348. package/src/components/AgentPanel/agent-panel-logo.tsx +3 -3
  349. package/src/components/AgentPanel/agent-panel.anatomy.stories.tsx +1 -1
  350. package/src/components/AgentPanel/agent-panel.principles.stories.tsx +1 -1
  351. package/src/components/AgentPanel/agent-panel.spec.md +30 -275
  352. package/src/components/AgentPanel/agent-panel.stories.tsx +113 -8
  353. package/src/components/AgentPanel/agent-panel.tsx +59 -22
  354. package/src/components/Alert/alert.anatomy.stories.tsx +1 -1
  355. package/src/components/AppShell/app-shell.tsx +1 -1
  356. package/src/components/AspectRatio/aspect-ratio.anatomy.stories.tsx +10 -15
  357. package/src/components/Avatar/avatar.anatomy.stories.tsx +23 -26
  358. package/src/components/Avatar/avatar.principles.stories.tsx +10 -10
  359. package/src/components/Avatar/avatar.spec.md +45 -6
  360. package/src/components/Avatar/avatar.stories.tsx +8 -8
  361. package/src/components/Avatar/avatar.tsx +227 -21
  362. package/src/components/Badge/badge.anatomy.stories.tsx +16 -21
  363. package/src/components/Breadcrumb/breadcrumb.anatomy.stories.tsx +3 -3
  364. package/src/components/Breadcrumb/breadcrumb.spec.md +3 -3
  365. package/src/components/Breadcrumb/breadcrumb.tsx +5 -3
  366. package/src/components/BulkActionBar/bulk-action-bar.anatomy.stories.tsx +1 -1
  367. package/src/components/BulkActionBar/bulk-action-bar.principles.stories.tsx +1 -1
  368. package/src/components/BulkActionBar/bulk-action-bar.spec.md +1 -0
  369. package/src/components/BulkActionBar/bulk-action-bar.stories.tsx +57 -2
  370. package/src/components/BulkActionBar/bulk-action-bar.tsx +32 -2
  371. package/src/components/Button/button.anatomy.stories.tsx +174 -33
  372. package/src/components/Button/button.spec.md +23 -8
  373. package/src/components/Button/button.tsx +116 -21
  374. package/src/components/Calendar/calendar.anatomy.stories.tsx +34 -11
  375. package/src/components/Calendar/calendar.principles.stories.tsx +44 -1
  376. package/src/components/Calendar/calendar.spec.md +97 -20
  377. package/src/components/Calendar/calendar.stories.tsx +101 -4
  378. package/src/components/Calendar/calendar.tsx +379 -74
  379. package/src/components/Carousel/carousel.anatomy.stories.tsx +16 -17
  380. package/src/components/Carousel/carousel.spec.md +48 -2
  381. package/src/components/Carousel/carousel.tsx +9 -3
  382. package/src/components/Chart/chart.anatomy.stories.tsx +7 -5
  383. package/src/components/Chart/chart.spec.md +32 -7
  384. package/src/components/Chart/chart.tsx +9 -0
  385. package/src/components/Checkbox/checkbox.anatomy.stories.tsx +21 -28
  386. package/src/components/Checkbox/checkbox.spec.md +4 -2
  387. package/src/components/Checkbox/checkbox.tsx +10 -2
  388. package/src/components/Chip/chip.anatomy.stories.tsx +1 -1
  389. package/src/components/Chip/chip.spec.md +2 -1
  390. package/src/components/Chip/chip.tsx +4 -2
  391. package/src/components/Combobox/combobox.anatomy.stories.tsx +30 -37
  392. package/src/components/Combobox/combobox.spec.md +11 -3
  393. package/src/components/Combobox/combobox.tsx +43 -12
  394. package/src/components/Command/command.spec.md +11 -0
  395. package/src/components/Command/command.tsx +143 -10
  396. package/src/components/DataTable/cell-registry.tsx +5 -1
  397. package/src/components/DataTable/data-table-column-visibility-panel.tsx +5 -6
  398. package/src/components/DataTable/data-table-interaction-layer.tsx +27 -14
  399. package/src/components/DataTable/data-table-known-defects.spec.md +72 -0
  400. package/src/components/DataTable/data-table-scroll-performance.spec.md +295 -0
  401. package/src/components/DataTable/data-table-sort-manager.tsx +5 -6
  402. package/src/components/DataTable/data-table.anatomy.stories.tsx +1 -1
  403. package/src/components/DataTable/data-table.css +64 -0
  404. package/src/components/DataTable/data-table.spec.md +70 -346
  405. package/src/components/DataTable/data-table.stories.tsx +56 -9
  406. package/src/components/DataTable/data-table.tsx +392 -103
  407. package/src/components/DateGrid/date-grid.anatomy.stories.tsx +2 -2
  408. package/src/components/DateGrid/date-grid.spec.md +163 -1
  409. package/src/components/DateGrid/date-grid.tsx +270 -7
  410. package/src/components/DatePicker/date-picker.anatomy.stories.tsx +18 -27
  411. package/src/components/DatePicker/date-picker.spec.md +6 -2
  412. package/src/components/DatePicker/date-picker.tsx +20 -1
  413. package/src/components/Dialog/dialog.spec.md +6 -2
  414. package/src/components/Dialog/dialog.stories.tsx +18 -9
  415. package/src/components/Dialog/dialog.tsx +83 -48
  416. package/src/components/DropdownMenu/dropdown-menu-keyboard.ts +255 -0
  417. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +32 -33
  418. package/src/components/DropdownMenu/dropdown-menu.spec.md +18 -5
  419. package/src/components/DropdownMenu/dropdown-menu.stories.tsx +58 -1
  420. package/src/components/DropdownMenu/dropdown-menu.tsx +70 -33
  421. package/src/components/Empty/empty.spec.md +1 -2
  422. package/src/components/Field/field-context.ts +9 -4
  423. package/src/components/Field/field-controls.spec.md +5 -2
  424. package/src/components/Field/field-edit-keys.ts +12 -0
  425. package/src/components/Field/field-wrapper.tsx +76 -10
  426. package/src/components/Field/field.anatomy.stories.tsx +1 -1
  427. package/src/components/Field/field.spec.md +11 -6
  428. package/src/components/Field/field.stories.tsx +24 -1
  429. package/src/components/Field/field.tsx +10 -4
  430. package/src/components/FileItem/file-item.anatomy.stories.tsx +20 -10
  431. package/src/components/FileItem/file-item.principles.stories.tsx +14 -7
  432. package/src/components/FileItem/file-item.spec.md +50 -48
  433. package/src/components/FileItem/file-item.stories.tsx +41 -28
  434. package/src/components/FileItem/file-item.tsx +184 -50
  435. package/src/components/FileUpload/file-upload.anatomy.stories.tsx +11 -15
  436. package/src/components/FileUpload/file-upload.spec.md +27 -1
  437. package/src/components/FileUpload/file-upload.stories.tsx +33 -0
  438. package/src/components/FileUpload/file-upload.tsx +173 -43
  439. package/src/components/FileViewer/file-viewer.tsx +9 -4
  440. package/src/components/HoverCard/hover-card.stories.tsx +2 -2
  441. package/src/components/InlineEdit/inline-edit.spec.md +2 -0
  442. package/src/components/InlineEdit/inline-edit.tsx +8 -3
  443. package/src/components/Input/input.anatomy.stories.tsx +23 -31
  444. package/src/components/Input/input.spec.md +11 -0
  445. package/src/components/Input/input.tsx +6 -1
  446. package/src/components/LinkInput/link-input.anatomy.stories.tsx +18 -21
  447. package/src/components/LinkInput/link-input.principles.stories.tsx +4 -4
  448. package/src/components/LinkInput/link-input.spec.md +12 -1
  449. package/src/components/LinkInput/link-input.tsx +37 -4
  450. package/src/components/Menu/menu-item.anatomy.stories.tsx +50 -56
  451. package/src/components/Menu/menu-item.spec.md +1 -1
  452. package/src/components/Menu/menu-item.stories.tsx +48 -42
  453. package/src/components/Notice/notice.anatomy.stories.tsx +8 -16
  454. package/src/components/Notice/notice.spec.md +1 -1
  455. package/src/components/Notice/notice.tsx +1 -1
  456. package/src/components/NumberInput/number-input.anatomy.stories.tsx +21 -28
  457. package/src/components/NumberInput/number-input.spec.md +2 -0
  458. package/src/components/NumberInput/number-input.tsx +8 -1
  459. package/src/components/OverflowIndicator/overflow-indicator.anatomy.stories.tsx +28 -48
  460. package/src/components/OverflowIndicator/overflow-indicator.spec.md +13 -1
  461. package/src/components/OverflowIndicator/overflow-indicator.stories.tsx +12 -9
  462. package/src/components/OverflowIndicator/overflow-indicator.tsx +32 -12
  463. package/src/components/Pagination/pagination.spec.md +1 -0
  464. package/src/components/Pagination/pagination.tsx +1 -1
  465. package/src/components/PeoplePicker/avatar-stack-overflow.ts +14 -13
  466. package/src/components/PeoplePicker/people-picker-helpers.ts +5 -2
  467. package/src/components/PeoplePicker/people-picker.anatomy.stories.tsx +1 -1
  468. package/src/components/PeoplePicker/people-picker.spec.md +4 -2
  469. package/src/components/PeoplePicker/people-picker.tsx +1 -4
  470. package/src/components/PeoplePicker/person-display.tsx +45 -28
  471. package/src/components/Popover/popover.anatomy.stories.tsx +1 -1
  472. package/src/components/Popover/popover.principles.stories.tsx +3 -12
  473. package/src/components/Popover/popover.spec.md +7 -3
  474. package/src/components/ProfileCard/profile-card.anatomy.stories.tsx +1 -1
  475. package/src/components/ProfileCard/profile-card.spec.md +1 -1
  476. package/src/components/ProfileCard/profile-card.tsx +0 -3
  477. package/src/components/ProgressBar/progress-bar.anatomy.stories.tsx +11 -21
  478. package/src/components/ProgressBar/progress-bar.spec.md +1 -1
  479. package/src/components/RadioGroup/radio-group.anatomy.stories.tsx +17 -24
  480. package/src/components/RadioGroup/radio-group.spec.md +1 -1
  481. package/src/components/RadioGroup/radio-group.tsx +22 -4
  482. package/src/components/Rating/rating.anatomy.stories.tsx +131 -124
  483. package/src/components/Rating/rating.principles.stories.tsx +69 -43
  484. package/src/components/Rating/rating.spec.md +142 -63
  485. package/src/components/Rating/rating.stories.tsx +11 -15
  486. package/src/components/Rating/rating.tsx +131 -117
  487. package/src/components/ScrollArea/scroll-area.anatomy.stories.tsx +1 -1
  488. package/src/components/ScrollArea/scroll-area.principles.stories.tsx +6 -3
  489. package/src/components/ScrollArea/scroll-area.spec.md +3 -1
  490. package/src/components/ScrollArea/scroll-area.stories.tsx +5 -2
  491. package/src/components/ScrollArea/scroll-area.tsx +1 -1
  492. package/src/components/SegmentedControl/segmented-control.anatomy.stories.tsx +1 -1
  493. package/src/components/SegmentedControl/segmented-control.spec.md +2 -2
  494. package/src/components/SegmentedControl/segmented-control.tsx +3 -2
  495. package/src/components/Select/select.anatomy.stories.tsx +26 -35
  496. package/src/components/Select/select.spec.md +4 -3
  497. package/src/components/Select/select.tsx +11 -4
  498. package/src/components/SelectMenu/select-menu-keyboard.ts +218 -0
  499. package/src/components/SelectMenu/select-menu.anatomy.stories.tsx +6 -17
  500. package/src/components/SelectMenu/select-menu.spec.md +12 -4
  501. package/src/components/SelectMenu/select-menu.tsx +21 -56
  502. package/src/components/SelectionControl/selection-item.anatomy.stories.tsx +9 -33
  503. package/src/components/SelectionControl/selection-item.spec.md +2 -2
  504. package/src/components/SelectionControl/selection-item.tsx +3 -1
  505. package/src/components/Separator/separator.stories.tsx +4 -4
  506. package/src/components/Sheet/sheet.principles.stories.tsx +31 -13
  507. package/src/components/Sidebar/sidebar.anatomy.stories.tsx +1 -1
  508. package/src/components/Sidebar/sidebar.spec.md +73 -6
  509. package/src/components/Sidebar/sidebar.stories.tsx +82 -4
  510. package/src/components/Sidebar/sidebar.tsx +281 -64
  511. package/src/components/Skeleton/skeleton.spec.md +1 -1
  512. package/src/components/Slider/slider.anatomy.stories.tsx +1 -1
  513. package/src/components/Slider/slider.spec.md +6 -5
  514. package/src/components/Slider/slider.tsx +13 -8
  515. package/src/components/Steps/steps-state-visuals.spec.md +157 -0
  516. package/src/components/Steps/steps.anatomy.stories.tsx +1 -0
  517. package/src/components/Steps/steps.spec.md +59 -142
  518. package/src/components/Steps/steps.stories.tsx +1 -1
  519. package/src/components/Steps/steps.tsx +125 -33
  520. package/src/components/Switch/switch.spec.md +3 -3
  521. package/src/components/Switch/switch.tsx +6 -1
  522. package/src/components/Tabs/tabs.spec.md +5 -1
  523. package/src/components/Tabs/tabs.tsx +42 -3
  524. package/src/components/Tag/tag.anatomy.stories.tsx +24 -28
  525. package/src/components/Tag/tag.spec.md +10 -11
  526. package/src/components/Tag/tag.tsx +3 -3
  527. package/src/components/Textarea/textarea.tsx +7 -1
  528. package/src/components/TimePicker/time-columns.tsx +9 -4
  529. package/src/components/TimePicker/time-picker.spec.md +4 -1
  530. package/src/components/TimePicker/time-picker.tsx +1 -1
  531. package/src/components/Tooltip/tooltip.anatomy.stories.tsx +6 -15
  532. package/src/components/Tooltip/tooltip.principles.stories.tsx +4 -16
  533. package/src/components/Tooltip/tooltip.spec.md +2 -1
  534. package/src/components/TreeView/tree-view.anatomy.stories.tsx +35 -13
  535. package/src/components/TreeView/tree-view.spec.md +67 -38
  536. package/src/components/TreeView/tree-view.stories.tsx +221 -12
  537. package/src/components/TreeView/tree-view.tsx +463 -356
  538. package/src/hooks/use-input-modality.ts +17 -46
  539. package/src/hooks/use-overflow-items.ts +4 -0
  540. package/src/hooks/use-truncated.ts +3 -2
  541. package/src/index.ts +17 -0
  542. package/src/lib/README.md +2 -0
  543. package/src/lib/drag-announcements.ts +78 -0
  544. package/src/lib/focus-after-trigger.ts +102 -0
  545. package/src/lib/roving-list-keyboard.ts +400 -0
  546. package/src/lib/utils.ts +5 -0
  547. package/src/patterns/action-bar/action-bar.spec.md +2 -0
  548. package/src/patterns/element-anatomy/inline-action.spec.md +16 -12
  549. package/src/patterns/element-anatomy/item-anatomy.spec.md +98 -6
  550. package/src/patterns/element-anatomy/item-anatomy.stories.tsx +75 -70
  551. package/src/patterns/element-anatomy/item-anatomy.tsx +17 -6
  552. package/src/patterns/element-anatomy/truncated-text.spec.md +1 -0
  553. package/src/patterns/header-canonical/header-canonical.spec.md +3 -2
  554. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +2 -0
  555. package/src/patterns/horizontal-overflow/horizontal-overflow.stories.tsx +36 -0
  556. package/src/patterns/horizontal-overflow/horizontal-overflow.tsx +28 -0
  557. package/src/patterns/overlay-surface/overlay-chrome-sizing.spec.md +180 -0
  558. package/src/patterns/overlay-surface/overlay-surface.spec.md +8 -162
  559. package/src/patterns/overlay-surface/overlay-surface.tsx +5 -3
  560. package/src/patterns/resize-handle/resize-handle.spec.md +3 -3
  561. package/src/styles/base.css +1 -1
  562. package/src/tokens/categorical-color.ts +6 -1
  563. package/src/tokens/color/color.spec.md +91 -24
  564. package/src/tokens/color/color.stories.tsx +50 -2
  565. package/src/tokens/color/primitives.css +41 -38
  566. package/src/tokens/color/semantic.css +105 -36
  567. package/src/tokens/layoutSpace/layoutSpace.spec.md +2 -0
  568. package/src/tokens/motion/motion.spec.md +31 -8
  569. package/src/tokens/orphan-tokens.spec.md +1 -1
  570. package/src/tokens/uiSize/icon-size.ts +1 -1
  571. package/src/tokens/uiSize/stack-gap.ts +17 -0
  572. package/src/tokens/uiSize/uiSize.css +12 -0
  573. package/src/tokens/uiSize/uiSize.spec.md +17 -16
  574. package/src/tokens/uiSize/uiSize.stories.tsx +1 -1
  575. package/dist/node_modules/aria-hidden/dist/es2015/index.js +0 -147
  576. package/dist/node_modules/aria-hidden/dist/es2015/index.js.map +0 -1
@@ -95,7 +95,7 @@
95
95
  {
96
96
  "schemaVersion": 1,
97
97
  "file": "codex/agents/skills/performance-audit/SKILL.md",
98
- "sha256": "7cf7e2a728222b9942de866ffa7c5133ecb6e8809364442376f934b83335c350",
98
+ "sha256": "627c8fa6a37d3cd75a716abc6f477e0db321865dfb6e4cfe8efd03c442973761",
99
99
  "source": "providers/codex/skills/performance-audit",
100
100
  "classification": null,
101
101
  "destination": null
@@ -255,7 +255,7 @@
255
255
  {
256
256
  "schemaVersion": 1,
257
257
  "file": "codex/hooks.json",
258
- "sha256": "7c1a887511e6d4e4d06c374084544c8ef77ac684a196d4b7bad2965cb4200226",
258
+ "sha256": "94bc0e9e2f6cdbcb211495ee776943b71ef3fc44ece562f6ee152a810cb8a97d",
259
259
  "source": "providers/codex/hook-config.json",
260
260
  "classification": null,
261
261
  "destination": null
@@ -351,7 +351,7 @@
351
351
  {
352
352
  "schemaVersion": 1,
353
353
  "file": "consumer/managed-files/423729840acdd43c812f17c245b871716c6b60f76e4d3e94864d0e34a815bf8d.blob",
354
- "sha256": "725072155d0b15b373bf6befb333cd2085dc8a38fff8538b4f4c8ea56f9c5308",
354
+ "sha256": "aad4e8ba31f3efbead67700bcff05855dc89cab6f562943d61aae3842cc2276f",
355
355
  "source": "scripts/consumer-source-harness.mjs",
356
356
  "classification": null,
357
357
  "destination": "scripts/consumer-source-harness.mjs"
@@ -359,7 +359,7 @@
359
359
  {
360
360
  "schemaVersion": 1,
361
361
  "file": "consumer/managed-files/46f10bc55cdfdf834d0749eebff42ea0bb8576f361b36d2b6ba1851354c50150.blob",
362
- "sha256": "82c17173dfe06c5f28e961973d7320fee35ab3b43921a23807c5c724f99f7724",
362
+ "sha256": "6a50540b801c0e561d9b416758685d2441027673b5b06ccc0e4cf25ae126e131",
363
363
  "source": "scripts/lib/governance-dependency-bootstrap.mjs",
364
364
  "classification": null,
365
365
  "destination": "scripts/lib/governance-dependency-bootstrap.mjs"
@@ -372,6 +372,14 @@
372
372
  "classification": null,
373
373
  "destination": "scripts/setup-workspace.mjs"
374
374
  },
375
+ {
376
+ "schemaVersion": 1,
377
+ "file": "consumer/managed-files/5a0d134a2645114c8caac20458070b00a7f0fd55b3e8805b7325cb4cf52fa15e.blob",
378
+ "sha256": "583beac441f2f2bc88630da73a00d38bfb4da0b1c1e11152b1e9a87030837418",
379
+ "source": "scripts/lib/storybook-render-health.mjs",
380
+ "classification": null,
381
+ "destination": "scripts/lib/storybook-render-health.mjs"
382
+ },
375
383
  {
376
384
  "schemaVersion": 1,
377
385
  "file": "consumer/managed-files/5aeda1df235815f40dd755951f2b868d4e02035653d4536a8dde209cdc75b493.blob",
@@ -380,6 +388,14 @@
380
388
  "classification": null,
381
389
  "destination": "scripts/lib/exact-workspace-dependencies.mjs"
382
390
  },
391
+ {
392
+ "schemaVersion": 1,
393
+ "file": "consumer/managed-files/5af0a46760af338d51fd0f7950675f8e97f7d2f09386b8818fcd7a58e6654e75.blob",
394
+ "sha256": "b02ac574a00dedf75476a200261aa3145c87ebe8ce2bfd7b08024b241a760b05",
395
+ "source": "scripts/lib/launch-browser.mjs",
396
+ "classification": null,
397
+ "destination": "scripts/lib/launch-browser.mjs"
398
+ },
383
399
  {
384
400
  "schemaVersion": 1,
385
401
  "file": "consumer/managed-files/61c6aca6d7f04bedbf556eaa9d3043681fe48cbe0e93a8ccb1d69a7c5e23fdcf.blob",
@@ -404,6 +420,14 @@
404
420
  "classification": null,
405
421
  "destination": "scripts/product-template-scaffold-lock.mjs"
406
422
  },
423
+ {
424
+ "schemaVersion": 1,
425
+ "file": "consumer/managed-files/68bfcddff9c4a16388c248cd34fb66163e9e64b3d809a48ef3984f6ae4ff6d12.blob",
426
+ "sha256": "a6ed23c4285d57ded8b4943d276cb2b71bc1a545ab867b80c06eda7d59ea48b9",
427
+ "source": "scripts/lib/storybook-static-snapshot.mjs",
428
+ "classification": null,
429
+ "destination": "scripts/lib/storybook-static-snapshot.mjs"
430
+ },
407
431
  {
408
432
  "schemaVersion": 1,
409
433
  "file": "consumer/managed-files/6b746628ac11fcccbe277ef6fea94cc2a7b90ea2822e83536eae80d5ee4b3fa5.blob",
@@ -455,7 +479,7 @@
455
479
  {
456
480
  "schemaVersion": 1,
457
481
  "file": "consumer/managed-files/7eb6cc60abfdabaf6617c336058fad1454ccde08889295767bfd9b7fd153cc6e.blob",
458
- "sha256": "811ed3390a4ff6b4e818a5ce8b5c0ce34e10f48fb443b6177d6e4c8e14fa9670",
482
+ "sha256": "8537daddc2bc4ad7f5464407ec4ba5e9373b7461ac5a862a8f19cfaf625f4d54",
459
483
  "source": "scripts/lib/verified-exact-npm-runtime.mjs",
460
484
  "classification": null,
461
485
  "destination": "scripts/lib/verified-exact-npm-runtime.mjs"
@@ -487,7 +511,7 @@
487
511
  {
488
512
  "schemaVersion": 1,
489
513
  "file": "consumer/managed-files/92e4828cdcb96ff0d01daa16f6885f24045a8e72820665650f2a1890dc3a446c.blob",
490
- "sha256": "29072309bd7aba9a64c54a77370a9633a6b95bf135bfde39dd7098a97d23b373",
514
+ "sha256": "c22322959d2898bc8ebb6c95077bd4c97499f49a690e1fe00f2220e8f809f4ef",
491
515
  "source": "scripts/lib/a11y-static-server.mjs",
492
516
  "classification": null,
493
517
  "destination": "scripts/lib/a11y-static-server.mjs"
@@ -527,7 +551,7 @@
527
551
  {
528
552
  "schemaVersion": 1,
529
553
  "file": "consumer/managed-files/ab072e7f2eca51f0e18a5e18c4b333260ee5d219a12cc6df5bb2d683f0b2734d.blob",
530
- "sha256": "613e10b71405805af900ad328d6baf0ae0ce3a02e58085aab6984163b7f8ad1a",
554
+ "sha256": "a4392d893207c425a973f6dbfd1351568ee3e21a8205a7c5b550914ad775199b",
531
555
  "source": "scripts/sync-all.mjs",
532
556
  "classification": null,
533
557
  "destination": "scripts/sync-all.mjs"
@@ -591,7 +615,7 @@
591
615
  {
592
616
  "schemaVersion": 1,
593
617
  "file": "consumer/managed-files/e71c65f45c6af7ce12b6b3c0d8028f185da5b719e2050c9b2a6b243d41ae4878.blob",
594
- "sha256": "b4305068d9a403726c2370b7678566484f21a84fd6478e58491ab0ffe79bdaef",
618
+ "sha256": "648b65cedabb5a21538487da857c0398621f2a8ce5da53da7bce534499def467",
595
619
  "source": "scripts/audit-consumer-a11y.mjs",
596
620
  "classification": null,
597
621
  "destination": "scripts/audit-consumer-a11y.mjs"
@@ -663,7 +687,7 @@
663
687
  {
664
688
  "schemaVersion": 1,
665
689
  "file": "hooks/check_consumer_app_invariants.sh",
666
- "sha256": "d004be0fd899f1147fa436fe783d16a7df1172ed4b8d7b44c1d106352880ffe5",
690
+ "sha256": "e3c5f3ab5a2c2ea879e7a3336341d77c11c05cad9c402ecd4c4f0bbc5c17768f",
667
691
  "source": "check_consumer_app_invariants.sh",
668
692
  "classification": "SHIP_AS_IS",
669
693
  "destination": null
@@ -671,7 +695,7 @@
671
695
  {
672
696
  "schemaVersion": 1,
673
697
  "file": "hooks/check_consumer_code_quality.sh",
674
- "sha256": "32b8e4d32426c0915c4afe2ad3d1e9a84a1de59549f4da68743457bebda17bfd",
698
+ "sha256": "c3aa27661e55c8a2d0598262e596d3bce7e55ff7aabddd0f7e1fba31b9352d39",
675
699
  "source": "check_consumer_code_quality.sh",
676
700
  "classification": "SHIP_REWRITTEN",
677
701
  "destination": null
@@ -743,7 +767,7 @@
743
767
  {
744
768
  "schemaVersion": 1,
745
769
  "file": "hooks/check_pattern_invariants.sh",
746
- "sha256": "795faed2ac9d3695f43c25f652994e04c3bc631868fe19607b9fc53ee5ba194f",
770
+ "sha256": "7717cf577bc92ebda5bfbeddfd0ef87dcc4e7b906466b72ac02426f22ab44770",
747
771
  "source": "check_pattern_invariants.sh",
748
772
  "classification": "SHIP_AS_IS",
749
773
  "destination": null
@@ -911,7 +935,7 @@
911
935
  {
912
936
  "schemaVersion": 1,
913
937
  "file": "launchers/settings-hooks.json",
914
- "sha256": "cecb7818723bf5852f974d17f077ed78c426edc21c593bca71379c597457da8b",
938
+ "sha256": "6ef1611f18493fc0312c24f943c16962de8deec83484a8f8d8fda7e608e52dc3",
915
939
  "source": "packages/design-system/ds-canonical/templates/product-provider-wiring.json + packages/governance/canonical/providers.json",
916
940
  "classification": null,
917
941
  "destination": null
@@ -919,7 +943,7 @@
919
943
  {
920
944
  "schemaVersion": 1,
921
945
  "file": "manifest.json",
922
- "sha256": "9d83605a7991427d4524bcffb3fa320beb96d587365f2fa2ac5a4849ed79acea",
946
+ "sha256": "bd48c026e685ac734159c47ff36e80bb8d36cf265b7cdfb117309040f5935c1a",
923
947
  "source": null,
924
948
  "classification": null,
925
949
  "destination": null
@@ -1015,7 +1039,7 @@
1015
1039
  {
1016
1040
  "schemaVersion": 1,
1017
1041
  "file": "providers/claude/skills/performance-audit/SKILL.md",
1018
- "sha256": "aa78ebdf7b3413ca0fdcd9d16f81c22ce15ade59fc89f5dab31fb382b202905d",
1042
+ "sha256": "5659167c166c9687a8e9c1bc5c6b4a0d522bb2fdbeb5108c819db32e0f489a85",
1019
1043
  "source": "skills/performance-audit/SKILL.md",
1020
1044
  "classification": null,
1021
1045
  "destination": null
@@ -1175,7 +1199,7 @@
1175
1199
  {
1176
1200
  "schemaVersion": 1,
1177
1201
  "file": "providers/codex/hook-config.json",
1178
- "sha256": "7c1a887511e6d4e4d06c374084544c8ef77ac684a196d4b7bad2965cb4200226",
1202
+ "sha256": "94bc0e9e2f6cdbcb211495ee776943b71ef3fc44ece562f6ee152a810cb8a97d",
1179
1203
  "source": "packages/design-system/ds-canonical/templates/product-provider-wiring.json + providers.json:codex",
1180
1204
  "classification": null,
1181
1205
  "destination": null
@@ -1255,7 +1279,7 @@
1255
1279
  {
1256
1280
  "schemaVersion": 1,
1257
1281
  "file": "providers/codex/skills/performance-audit/SKILL.md",
1258
- "sha256": "7cf7e2a728222b9942de866ffa7c5133ecb6e8809364442376f934b83335c350",
1282
+ "sha256": "627c8fa6a37d3cd75a716abc6f477e0db321865dfb6e4cfe8efd03c442973761",
1259
1283
  "source": "skills/performance-audit/SKILL.md",
1260
1284
  "classification": null,
1261
1285
  "destination": null
@@ -1535,7 +1559,7 @@
1535
1559
  {
1536
1560
  "schemaVersion": 1,
1537
1561
  "file": "skills/performance-audit/SKILL.md",
1538
- "sha256": "4dc8b663ba9f4f373c81b34c996a6ba1972e81c5610acc93c239e397c1f9d128",
1562
+ "sha256": "9353b7b54df0a1142178ba9cc47a84867da15c38954bc9f921243ef420370f0c",
1539
1563
  "source": null,
1540
1564
  "classification": null,
1541
1565
  "destination": null
@@ -498,16 +498,21 @@ fi
498
498
  # 2026-07-10 WM 戰役收官:手刻 menu-item 可點列簽名(WM TypeSettingsDialog 左 rail 錨例 —
499
499
  # 手刻 <button hover:bg-neutral-hover + bg-neutral-selected> nav row,未消費 MenuItem)。
500
500
  # 前置:DS API 根因已修(MenuItem startContent slot,beta.84)→ 有合法替代才上機械攔(避免
501
- # fork 無路可走 brick)。簽名 = hover:bg-neutral-hover 與 bg-neutral-selected 成對出現
501
+ # fork 無路可走 brick)。簽名 = 滑過底色 token(當初只認 hover:bg-neutral-hover,2026-09-25 擴大,見下)與 bg-neutral-selected 成對出現
502
502
  # (= menu-item family 狀態語義)+ 可點訊號(<button/<a/onClick),且沒在消費 <MenuItem。
503
503
  # 注意:不 tag-anchor className(WM 錨例把 class 抽 const 再 className={cls} 引用,
504
504
  # tag-anchored regex 會漏 — test 27 抓到的真實 shape)。
505
- if grep -q 'hover:bg-neutral-hover' <<<"$CONTENT" && \
505
+ # 2026-09-25:滑過底色認任何 `-hover` 配對 token,不只 `hover:bg-neutral-hover` 這一串字(color.spec.md「Hover 換色配對總則」:
506
+ # 有自己靜止底色的列換成那個底自己的 -hover,例 --secondary-hover)。唯一排除 `--neutral-selected-hover`:
507
+ # 它是可取消切換鈕專屬、列元件禁用(color.spec.md「Selected state family」),出現它代表切換鈕而不是 menu-item 列。
508
+ # 先收進變數再判斷:管線末端若用 `grep -q` 會提早關管線,上游收到 SIGPIPE,pipefail 讓條件整條變假(本檔 :692 同一個坑)。
509
+ ROW_HOVER_TOKENS=$(grep -oE 'hover:!?bg-(\[var\(--)?[a-z0-9-]+-hover' <<<"$CONTENT" | grep -vE 'neutral-selected-hover$' || true)
510
+ if [ -n "$ROW_HOVER_TOKENS" ] && \
506
511
  grep -q 'bg-neutral-selected' <<<"$CONTENT" && \
507
512
  grep -qE '<button\b|<a\b|onClick=' <<<"$CONTENT" && \
508
513
  ! grep -q '<MenuItem' <<<"$CONTENT" && \
509
514
  ! grep -q '@nav-row-handcraft-ok:' <<<"$CONTENT"; then
510
- VIOLATIONS="${VIOLATIONS} - 手刻 menu-item 可點列(hover:bg-neutral-hover + bg-neutral-selected 成對)→ 必包 <MenuItem>(subpath @qijenchen/design-system/components/Menu;selected prop + startIcon/avatar/startContent slot;menu-item.spec.md「結構」)。非 menu-item 語義 → 行內 @nav-row-handcraft-ok: <rationale>\n"
515
+ VIOLATIONS="${VIOLATIONS} - 手刻 menu-item 可點列(滑過底色 token(如 hover:bg-neutral-hover)+ bg-neutral-selected 成對)→ 必包 <MenuItem>(subpath @qijenchen/design-system/components/Menu;selected prop + startIcon/avatar/startContent slot;menu-item.spec.md「結構」)。非 menu-item 語義 → 行內 @nav-row-handcraft-ok: <rationale>\n"
511
516
  fi
512
517
 
513
518
  # ── 2026-07-10 批次 A(治理覆蓋 matrix 收官;來源 governance/planning/2026-07-10-consumer-coverage-remediation.md)──
@@ -685,13 +690,20 @@ _CAPTURE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/check-consumer-app-invariants.XXXXXX")
685
690
  exit 70
686
691
  }
687
692
  trap 'rm -rf -- "$_CAPTURE_DIR"' EXIT
693
+ # 輸入先落檔再餵給每條規則,不用 `printf | rule`(2026-09-25):規則若沒讀 stdin 就先退出
694
+ # (例如非 Claude provider 時 r2 直接 exit 0),寫端 printf 會收到 SIGPIPE,pipefail 讓整條管線回 141,
695
+ # 被誤判成「規則回傳未定義 exit code」—— 時序決定紅不紅,CI Linux 偶發紅過(21ca94e2)。
696
+ # 規則一定要跑在子殼層 `( "$_rule" )`:規則裡的 `exit` 只能結束它自己;原本是管線替它開了子殼層,
697
+ # 拿掉管線卻不補子殼層,r1 的 `exit 0` 會直接結束整支 hook,後面的規則全部沒跑(本次改法第一版就犯了)。
698
+ _INPUT_FILE="$_CAPTURE_DIR/input"
699
+ printf '%s' "$INPUT" >"$_INPUT_FILE"
688
700
  _RULE_INDEX=0
689
701
 
690
702
  for _rule in r1_no_ds_catalog r2_story_baseline r3_ds_primitive_misuse r4_app_story_title; do
691
703
  _RULE_INDEX=$((_RULE_INDEX + 1))
692
704
  _stdout="$_CAPTURE_DIR/$_RULE_INDEX.stdout"
693
705
  _stderr="$_CAPTURE_DIR/$_RULE_INDEX.stderr"
694
- printf '%s' "$INPUT" | "$_rule" >"$_stdout" 2>"$_stderr"
706
+ ( "$_rule" ) <"$_INPUT_FILE" >"$_stdout" 2>"$_stderr"
695
707
  _rc=$?
696
708
  case "$_rc" in
697
709
  0)
@@ -106,7 +106,9 @@ if [ -n "$OVERLAY" ] && ! has_rationale 'overlay-handcraft-allow'; then
106
106
  add_violation 'hand-crafted overlay chrome; consume Popover/Dialog/Sheet/Surface header/body/footer primitives'
107
107
  fi
108
108
 
109
- RAW_ROW=$(printf '%s' "$BODY" | perl -0777 -ne 'print "hit" if /<div\b[^>]*className="(?=[^"]*\bflex\b)(?=[^"]*\bgap-[12]\b)(?=[^"]*px-\[var\(--layout-space-loose\)\])(?=[^"]*hover:bg-neutral-hover)(?=[^"]*rounded)[^"]*"/s') \
109
+ # 滑過底色認任何 `-hover` 配對 token(2026-09-25;color.spec.md「Hover 換色配對總則」:有自己靜止底色的列換成那個底自己的 -hover,
110
+ # 只認 `hover:bg-neutral-hover` 會漏掉用 --secondary-hover / --surface-hover 等配對 token 的手刻列)
111
+ RAW_ROW=$(printf '%s' "$BODY" | perl -0777 -ne 'print "hit" if /<div\b[^>]*className="(?=[^"]*\bflex\b)(?=[^"]*\bgap-[12]\b)(?=[^"]*px-\[var\(--layout-space-loose\)\])(?=[^"]*hover:!?bg-(?:\[var\(--)?[a-z0-9-]+-hover\b)(?=[^"]*rounded)[^"]*"/s') \
110
112
  || governance_hook_integrity_fail 'consumer quality row parser failed'
111
113
  if [ -n "$RAW_ROW" ] && ! has_rationale 'menu-item-handcraft-allow'; then
112
114
  add_violation 'hand-crafted MenuItem-like row; consume the DS row/menu primitive'
@@ -113,14 +113,16 @@ record_worst() { local lvl=$1; [ "$lvl" -gt "$WORST" ] && WORST=$lvl; }
113
113
 
114
114
  # ── C.6 selected token 狀態語意(P0 BLOCK exit 2;2026-08-11 user 拍板)──────────
115
115
  # 教義(semantic.css + color.spec.md「Selected state family」):
116
- # -active = 按壓專屬 / -hover = 可取消切換鈕變淺專屬 / 反白·鍵盤焦點深化 = -focus。
116
+ # -active = 按壓專屬 / -hover = 可取消切換鈕專屬(已按下的下一階:2026-09-07 由「變淺」改為「變深」neutral-3)。
117
+ # -focus 已於 2026-09-07 退役:鍵盤焦點一律畫框(focus-ring-inset),不改底色(user 2026-09-09 拍板)。
118
+ # (2026-09-25 更正本段過期說法;SSOT = color.spec.md「Selected state family」+ semantic.css 選中家族註解)
117
119
  # 兩年偏移錨:2026-07-05 D4 借 -active 裝反白、滑鼠搭便車,選單 vs sidebar 因此不一致。
118
120
  # 本規則攔「-active/-hover 出現在 hover/焦點/反白修飾鏈」的借用寫法(零誤判:合法用途已窮舉排除)。
119
121
  if ! grep -q '@token-state-allow' <<<"$NEW_CONTENT"; then
120
122
  SUSPECT_C6=$(printf '%s' "$NEW_CONTENT" | grep -oE "[][A-Za-z0-9_=:.-]*bg-neutral-selected-(active|hover)" | while IFS= read -r tok; do
121
123
  case "$tok" in
122
124
  (*active:*) ;; # 修飾鏈含按壓(active:)= 合法按壓用途
123
- (*hover:*bg-neutral-selected-hover) ;; # 切換鈕 pressed 上 hover 變淺 = 誕生語意,合法
125
+ (*hover:*bg-neutral-selected-hover) ;; # 切換鈕 pressed 上 hover 深一階(neutral-2 → neutral-3,2026-09-07 起)= 誕生語意,合法
124
126
  (*)
125
127
  case "$tok" in
126
128
  (*hover:*|*focus-visible:*|*focus:*|*data-\[highlighted*|*data-\[selected*)
@@ -129,6 +131,7 @@ if ! grep -q '@token-state-allow' <<<"$NEW_CONTENT"; then
129
131
  esac
130
132
  done | sort -u)
131
133
  if [ -n "$SUSPECT_C6" ]; then
134
+ # 下方 heredoc 沒加引號:反引號要寫成 \` 才是字面值(2026-09-26 修:原本寫成兩個反斜線,反引號變成指令替換,訊息在「例外」那行斷掉並印 syntax error)
132
135
  cat >&2 <<EOF
133
136
 
134
137
  ┄┄┄ C.6 check_pattern_invariants — selected token 狀態語意 BLOCKER ┄┄┄
@@ -141,15 +144,16 @@ $SUSPECT_C6
141
144
  滑鼠 hover 選中列 → 釘住 bg-neutral-selected 不變
142
145
  鍵盤游標停在任何列 → 畫框(focus-ring-inset)、不上底色;選中列 = 框疊在 bg-neutral-selected 上
143
146
  (focus-canonical 規則二,user 2026-09-09 拍板;-focus 深一階 token 已於 2026-09-07 退役)
144
- ⚠️ **selector 必須對上該元件的焦點模型**:虛擬游標(cmdk data-selected / Radix data-highlighted /
145
- aria-activedescendant)由元件依 hooks/use-input-modality.ts 判鍵盤模態才掛 focus-ring-inset,
147
+ ⚠️ **selector 必須對上該元件的焦點模型**:會搶反白的虛擬游標(cmdk data-selected / Radix data-highlighted)
148
+ 由元件依 hooks/use-input-modality.ts 的 useCursorMover(反白來歷)才掛 focus-ring-inset;
149
+ aria-activedescendant 容器(TimePicker 欄)看容器自己的 :focus-visible(group-focus-visible/listbox:);
146
150
  真焦點元件用 focus-visible:focus-ring-inset。2026-09-06 實測:寫錯 selector 的樣式**從未生效**
147
- (TreeView 列無 tabIndex、MenuItem 根節點非可聚焦,都曾寫 focus-visible: 而永不 match)。
148
- 正確示範:command.tsx CommandItem 與 dropdown-menu.tsx radixCursorClass(依模態分流)、
149
- sidebar.tsx focus-visible:focus-ring-inset(真焦點)、tree-view.tsx showRing(state 驅動)。
151
+ (當時 TreeView 列無 tabIndex、MenuItem 根節點非可聚焦,都曾寫 focus-visible: 而永不 match)。
152
+ 正確示範:command.tsx CommandItem 與 dropdown-menu.tsx radixCursorClass(依反白來歷分流)、
153
+ sidebar.tsx / tree-view.tsx 列的 focus-visible:focus-ring-inset(真焦點;TreeView 2026-09-25 起列上 roving tabindex,待辦總帳 B9)。
150
154
  bg-neutral-selected-active → 只准出現在含 active:(按壓)的修飾鏈
151
- bg-neutral-selected-hover → 只准切換鈕 pressed 上 hover(變淺)
152
- 例外:行尾 \\`// @token-state-allow: <reason>\\`
155
+ bg-neutral-selected-hover → 只准切換鈕 pressed 上 hover(深一階;2026-09-07 起 neutral-3)
156
+ 例外:行尾 \`// @token-state-allow: <reason>\`
153
157
 
154
158
  EOF
155
159
  record_worst 2
@@ -2,7 +2,7 @@
2
2
  "_generated": "build-fork-governance.mjs",
3
3
  "kind": "provider-hook-merge-policies",
4
4
  "schemaVersion": 1,
5
- "sourceDigest": "d676e191ac6dcfe2a9d076e7e2ebbf5225fc8624275421a404d423e63b7a1033",
5
+ "sourceDigest": "a22cf76b2776fa4b8c71cc08f3b470b07997e0b4f31faf80ec7fd735eae7d8a4",
6
6
  "surfaces": {
7
7
  "claude": {
8
8
  "schemaVersion": 1,
@@ -104,20 +104,20 @@
104
104
  },
105
105
  "providerLifecycle": {
106
106
  "schemaVersion": 4,
107
- "releaseVersion": "0.1.0-beta.145",
107
+ "releaseVersion": "0.1.0-beta.147",
108
108
  "immutableHead": {
109
109
  "providerInventorySha256": "86e9d0668cb54ad1bf05c36e78b4aa80417d5f468c929dd3ddcf69c1afbf32e4",
110
- "releaseVersion": "0.1.0-beta.144",
111
- "snapshotSha256": "073ca2de0f49bb62353b6549fe5e3a8d3450505fae46cfe8d328c2ff9315726b"
110
+ "releaseVersion": "0.1.0-beta.146",
111
+ "snapshotSha256": "79f23ec182887c28344e6a21fdab6ede75e362f3b88fc5293cb2cf47d0e889ab"
112
112
  },
113
- "ledgerSha256": "fffe804dd7cda35c5a40d403c1fd85a91e6e6b84afb6a6539c18f8d30ba49309",
114
- "previousSnapshotSha256": "073ca2de0f49bb62353b6549fe5e3a8d3450505fae46cfe8d328c2ff9315726b",
115
- "currentSnapshotSha256": "fbd0fb8a22296a8646f99ee7edeaba1a76455b8aba591cfb8ec4ccf859f4af9e",
113
+ "ledgerSha256": "095b87351093ad143ff8dc19b124988a2e65bd12eb6c510cbbce54c1398b73a7",
114
+ "previousSnapshotSha256": "79f23ec182887c28344e6a21fdab6ede75e362f3b88fc5293cb2cf47d0e889ab",
115
+ "currentSnapshotSha256": "2c440b4d5427f7094ba19b68bafb8fd72b2f2c1e22aa5f6325b126e4ad1562e7",
116
116
  "currentProviderInventorySha256": "86e9d0668cb54ad1bf05c36e78b4aa80417d5f468c929dd3ddcf69c1afbf32e4",
117
117
  "retiredProviders": [],
118
118
  "currentSnapshot": {
119
- "releaseVersion": "0.1.0-beta.145",
120
- "previousSnapshotSha256": "073ca2de0f49bb62353b6549fe5e3a8d3450505fae46cfe8d328c2ff9315726b",
119
+ "releaseVersion": "0.1.0-beta.147",
120
+ "previousSnapshotSha256": "79f23ec182887c28344e6a21fdab6ede75e362f3b88fc5293cb2cf47d0e889ab",
121
121
  "providers": [
122
122
  {
123
123
  "id": "claude",
@@ -193,8 +193,8 @@
193
193
  "retiredProviders": []
194
194
  },
195
195
  "immutableHeadSnapshot": {
196
- "releaseVersion": "0.1.0-beta.144",
197
- "previousSnapshotSha256": "308a306e6c2914e54b750cd5c63f3e8bfd647e5655aaebb8446b8ce4ad6c257e",
196
+ "releaseVersion": "0.1.0-beta.146",
197
+ "previousSnapshotSha256": "fbd0fb8a22296a8646f99ee7edeaba1a76455b8aba591cfb8ec4ccf859f4af9e",
198
198
  "providers": [
199
199
  {
200
200
  "id": "claude",
@@ -1331,7 +1331,7 @@
1331
1331
  "file": "hooks/check_fork_product_quality.sh",
1332
1332
  "sourceHook": "check_substantive_edit_approval_preflight.sh",
1333
1333
  "bucket": "REPLACE",
1334
- "matcher": "Edit|Write|MultiEdit",
1334
+ "matcher": "Edit|Write|MultiEdit|Bash",
1335
1335
  "runtime": "bash",
1336
1336
  "outputMode": "governance-context",
1337
1337
  "inputContract": "event-v1",
@@ -1867,7 +1867,10 @@
1867
1867
  "scripts/lib/consumer-control-plane-policy.mjs": "consumer/managed-files/145aab4b4fc470fc9ba7679b4a1d87d4f6a6d604940bd40f8d675c8af696498f.blob",
1868
1868
  "scripts/lib/exact-workspace-dependencies.mjs": "consumer/managed-files/5aeda1df235815f40dd755951f2b868d4e02035653d4536a8dde209cdc75b493.blob",
1869
1869
  "scripts/lib/governance-dependency-bootstrap.mjs": "consumer/managed-files/46f10bc55cdfdf834d0749eebff42ea0bb8576f361b36d2b6ba1851354c50150.blob",
1870
+ "scripts/lib/launch-browser.mjs": "consumer/managed-files/5af0a46760af338d51fd0f7950675f8e97f7d2f09386b8818fcd7a58e6654e75.blob",
1870
1871
  "scripts/lib/provider-lifecycle.mjs": "consumer/managed-files/76d485470d30ff014afacf7ce643763de9f4f956d9fc8128dbc1814774cf2e63.blob",
1872
+ "scripts/lib/storybook-render-health.mjs": "consumer/managed-files/5a0d134a2645114c8caac20458070b00a7f0fd55b3e8805b7325cb4cf52fa15e.blob",
1873
+ "scripts/lib/storybook-static-snapshot.mjs": "consumer/managed-files/68bfcddff9c4a16388c248cd34fb66163e9e64b3d809a48ef3984f6ae4ff6d12.blob",
1871
1874
  "scripts/lib/verified-exact-npm-runtime.mjs": "consumer/managed-files/7eb6cc60abfdabaf6617c336058fad1454ccde08889295767bfd9b7fd153cc6e.blob",
1872
1875
  "scripts/lib/workspace-post-create.mjs": "consumer/managed-files/c893e9b734b162f4c631fef871128c16a9ab565f796a0e76d7f320f821f220f5.blob",
1873
1876
  "scripts/lib/worktree-fingerprint.mjs": "consumer/managed-files/61c6aca6d7f04bedbf556eaa9d3043681fe48cbe0e93a8ccb1d69a7c5e23fdcf.blob",
@@ -1934,7 +1937,10 @@
1934
1937
  "scripts/lib/consumer-control-plane-policy.mjs",
1935
1938
  "scripts/lib/exact-workspace-dependencies.mjs",
1936
1939
  "scripts/lib/governance-dependency-bootstrap.mjs",
1940
+ "scripts/lib/launch-browser.mjs",
1937
1941
  "scripts/lib/provider-lifecycle.mjs",
1942
+ "scripts/lib/storybook-render-health.mjs",
1943
+ "scripts/lib/storybook-static-snapshot.mjs",
1938
1944
  "scripts/lib/verified-exact-npm-runtime.mjs",
1939
1945
  "scripts/lib/workspace-post-create.mjs",
1940
1946
  "scripts/lib/worktree-fingerprint.mjs",
@@ -70,7 +70,7 @@ description: Performance audit for design-system components and product UI. Chec
70
70
 
71
71
  **工具**:
72
72
  - `npx vite build --report`(vite bundle visualizer)
73
- - **bundle-size gate(已落地 2026-07-07)**:`npm run build`(budget SSOT = the product build/bundle budget configuration,total + top-8 entry 各 +10% headroom;governance check and protected product CI 內建必跑;蓄意增大 → `--init` 更新 budget + commit 說明)
73
+ - **bundle-size gate(已落地 2026-07-07)**:`npm run build`(budget SSOT = the product build/bundle budget configuration,total + top-8 entry 各 +10% headroom;CI `verify-static` job 直呼 `run the product-specific --silent check only when package.json defines it`(`.github/workflows/ci.yml`,2026-09-21 接進;舊句「governance check and protected product CI 內建必跑」的 `perform the equivalent check described in the common product instruction (governance check and protected product CI.mjs is DS-author-only)` 已於 2026-08-04 退役);蓄意增大 → `--init` 更新 budget + commit 說明)
74
74
 
75
75
  ### Phase F — Report and route
76
76
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "_generated: build-fork-governance.mjs; provider=codex; sourceDigest=d676e191ac6dcfe2a9d076e7e2ebbf5225fc8624275421a404d423e63b7a1033; exact npm corpus; native hooks are feedback only, provider-neutral check + protected CI are authoritative.",
2
+ "description": "_generated: build-fork-governance.mjs; provider=codex; sourceDigest=a22cf76b2776fa4b8c71cc08f3b470b07997e0b4f31faf80ec7fd735eae7d8a4; exact npm corpus; native hooks are feedback only, provider-neutral check + protected CI are authoritative.",
3
3
  "hooks": {
4
4
  "SessionStart": [
5
5
  {
@@ -70,7 +70,7 @@ description: Performance audit for design-system components and product UI. Chec
70
70
 
71
71
  **工具**:
72
72
  - `npx vite build --report`(vite bundle visualizer)
73
- - **bundle-size gate(已落地 2026-07-07)**:`npm run build`(budget SSOT = the product build/bundle budget configuration,total + top-8 entry 各 +10% headroom;governance check and protected product CI 內建必跑;蓄意增大 → `--init` 更新 budget + commit 說明)
73
+ - **bundle-size gate(已落地 2026-07-07)**:`npm run build`(budget SSOT = the product build/bundle budget configuration,total + top-8 entry 各 +10% headroom;CI `verify-static` job 直呼 `run the product-specific --silent check only when package.json defines it`(`.github/workflows/ci.yml`,2026-09-21 接進;舊句「governance check and protected product CI 內建必跑」的 `perform the equivalent check described in the common product instruction (governance check and protected product CI.mjs is DS-author-only)` 已於 2026-08-04 退役);蓄意增大 → `--init` 更新 budget + commit 說明)
74
74
 
75
75
  ### Phase F — Report and route
76
76
 
@@ -68,7 +68,7 @@ description: Performance audit for design-system components and product UI. Chec
68
68
 
69
69
  **工具**:
70
70
  - `npx vite build --report`(vite bundle visualizer)
71
- - **bundle-size gate(已落地 2026-07-07)**:`npm run build`(budget SSOT = the product build/bundle budget configuration,total + top-8 entry 各 +10% headroom;governance check and protected product CI 內建必跑;蓄意增大 → `--init` 更新 budget + commit 說明)
71
+ - **bundle-size gate(已落地 2026-07-07)**:`npm run build`(budget SSOT = the product build/bundle budget configuration,total + top-8 entry 各 +10% headroom;CI `verify-static` job 直呼 `run the product-specific --silent check only when package.json defines it`(`.github/workflows/ci.yml`,2026-09-21 接進;舊句「governance check and protected product CI 內建必跑」的 `perform the equivalent check described in the common product instruction (governance check and protected product CI.mjs is DS-author-only)` 已於 2026-08-04 退役);蓄意增大 → `--init` 更新 budget + commit 說明)
72
72
 
73
73
  ### Phase F — Report and route
74
74
 
@@ -498,16 +498,21 @@ fi
498
498
  # 2026-07-10 WM 戰役收官:手刻 menu-item 可點列簽名(WM TypeSettingsDialog 左 rail 錨例 —
499
499
  # 手刻 <button hover:bg-neutral-hover + bg-neutral-selected> nav row,未消費 MenuItem)。
500
500
  # 前置:DS API 根因已修(MenuItem startContent slot,beta.84)→ 有合法替代才上機械攔(避免
501
- # fork 無路可走 brick)。簽名 = hover:bg-neutral-hover 與 bg-neutral-selected 成對出現
501
+ # fork 無路可走 brick)。簽名 = 滑過底色 token(當初只認 hover:bg-neutral-hover,2026-09-25 擴大,見下)與 bg-neutral-selected 成對出現
502
502
  # (= menu-item family 狀態語義)+ 可點訊號(<button/<a/onClick),且沒在消費 <MenuItem。
503
503
  # 注意:不 tag-anchor className(WM 錨例把 class 抽 const 再 className={cls} 引用,
504
504
  # tag-anchored regex 會漏 — test 27 抓到的真實 shape)。
505
- if grep -q 'hover:bg-neutral-hover' <<<"$CONTENT" && \
505
+ # 2026-09-25:滑過底色認任何 `-hover` 配對 token,不只 `hover:bg-neutral-hover` 這一串字(color.spec.md「Hover 換色配對總則」:
506
+ # 有自己靜止底色的列換成那個底自己的 -hover,例 --secondary-hover)。唯一排除 `--neutral-selected-hover`:
507
+ # 它是可取消切換鈕專屬、列元件禁用(color.spec.md「Selected state family」),出現它代表切換鈕而不是 menu-item 列。
508
+ # 先收進變數再判斷:管線末端若用 `grep -q` 會提早關管線,上游收到 SIGPIPE,pipefail 讓條件整條變假(本檔 :692 同一個坑)。
509
+ ROW_HOVER_TOKENS=$(grep -oE 'hover:!?bg-(\[var\(--)?[a-z0-9-]+-hover' <<<"$CONTENT" | grep -vE 'neutral-selected-hover$' || true)
510
+ if [ -n "$ROW_HOVER_TOKENS" ] && \
506
511
  grep -q 'bg-neutral-selected' <<<"$CONTENT" && \
507
512
  grep -qE '<button\b|<a\b|onClick=' <<<"$CONTENT" && \
508
513
  ! grep -q '<MenuItem' <<<"$CONTENT" && \
509
514
  ! grep -q '@nav-row-handcraft-ok:' <<<"$CONTENT"; then
510
- VIOLATIONS="${VIOLATIONS} - 手刻 menu-item 可點列(hover:bg-neutral-hover + bg-neutral-selected 成對)→ 必包 <MenuItem>(subpath @qijenchen/design-system/components/Menu;selected prop + startIcon/avatar/startContent slot;menu-item.spec.md「結構」)。非 menu-item 語義 → 行內 @nav-row-handcraft-ok: <rationale>\n"
515
+ VIOLATIONS="${VIOLATIONS} - 手刻 menu-item 可點列(滑過底色 token(如 hover:bg-neutral-hover)+ bg-neutral-selected 成對)→ 必包 <MenuItem>(subpath @qijenchen/design-system/components/Menu;selected prop + startIcon/avatar/startContent slot;menu-item.spec.md「結構」)。非 menu-item 語義 → 行內 @nav-row-handcraft-ok: <rationale>\n"
511
516
  fi
512
517
 
513
518
  # ── 2026-07-10 批次 A(治理覆蓋 matrix 收官;來源 governance/planning/2026-07-10-consumer-coverage-remediation.md)──
@@ -685,13 +690,20 @@ _CAPTURE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/check-consumer-app-invariants.XXXXXX")
685
690
  exit 70
686
691
  }
687
692
  trap 'rm -rf -- "$_CAPTURE_DIR"' EXIT
693
+ # 輸入先落檔再餵給每條規則,不用 `printf | rule`(2026-09-25):規則若沒讀 stdin 就先退出
694
+ # (例如非 Claude provider 時 r2 直接 exit 0),寫端 printf 會收到 SIGPIPE,pipefail 讓整條管線回 141,
695
+ # 被誤判成「規則回傳未定義 exit code」—— 時序決定紅不紅,CI Linux 偶發紅過(21ca94e2)。
696
+ # 規則一定要跑在子殼層 `( "$_rule" )`:規則裡的 `exit` 只能結束它自己;原本是管線替它開了子殼層,
697
+ # 拿掉管線卻不補子殼層,r1 的 `exit 0` 會直接結束整支 hook,後面的規則全部沒跑(本次改法第一版就犯了)。
698
+ _INPUT_FILE="$_CAPTURE_DIR/input"
699
+ printf '%s' "$INPUT" >"$_INPUT_FILE"
688
700
  _RULE_INDEX=0
689
701
 
690
702
  for _rule in r1_no_ds_catalog r2_story_baseline r3_ds_primitive_misuse r4_app_story_title; do
691
703
  _RULE_INDEX=$((_RULE_INDEX + 1))
692
704
  _stdout="$_CAPTURE_DIR/$_RULE_INDEX.stdout"
693
705
  _stderr="$_CAPTURE_DIR/$_RULE_INDEX.stderr"
694
- printf '%s' "$INPUT" | "$_rule" >"$_stdout" 2>"$_stderr"
706
+ ( "$_rule" ) <"$_INPUT_FILE" >"$_stdout" 2>"$_stderr"
695
707
  _rc=$?
696
708
  case "$_rc" in
697
709
  0)
@@ -106,7 +106,9 @@ if [ -n "$OVERLAY" ] && ! has_rationale 'overlay-handcraft-allow'; then
106
106
  add_violation 'hand-crafted overlay chrome; consume Popover/Dialog/Sheet/Surface header/body/footer primitives'
107
107
  fi
108
108
 
109
- RAW_ROW=$(printf '%s' "$BODY" | perl -0777 -ne 'print "hit" if /<div\b[^>]*className="(?=[^"]*\bflex\b)(?=[^"]*\bgap-[12]\b)(?=[^"]*px-\[var\(--layout-space-loose\)\])(?=[^"]*hover:bg-neutral-hover)(?=[^"]*rounded)[^"]*"/s') \
109
+ # 滑過底色認任何 `-hover` 配對 token(2026-09-25;color.spec.md「Hover 換色配對總則」:有自己靜止底色的列換成那個底自己的 -hover,
110
+ # 只認 `hover:bg-neutral-hover` 會漏掉用 --secondary-hover / --surface-hover 等配對 token 的手刻列)
111
+ RAW_ROW=$(printf '%s' "$BODY" | perl -0777 -ne 'print "hit" if /<div\b[^>]*className="(?=[^"]*\bflex\b)(?=[^"]*\bgap-[12]\b)(?=[^"]*px-\[var\(--layout-space-loose\)\])(?=[^"]*hover:!?bg-(?:\[var\(--)?[a-z0-9-]+-hover\b)(?=[^"]*rounded)[^"]*"/s') \
110
112
  || governance_hook_integrity_fail 'consumer quality row parser failed'
111
113
  if [ -n "$RAW_ROW" ] && ! has_rationale 'menu-item-handcraft-allow'; then
112
114
  add_violation 'hand-crafted MenuItem-like row; consume the DS row/menu primitive'
@@ -244,8 +244,11 @@ EOF
244
244
  exit 0
245
245
  }
246
246
 
247
+ # 用 here-string 餵輸入,不用 `printf | rule`:規則沒讀 stdin 就先退出時,寫端會收到 SIGPIPE,
248
+ # pipefail 讓管線回 141 並被當成規則的結果(同族修正見 check_plugin_fork_health.sh,2026-09-25)。
249
+ # 子殼層 `( "$_rule" )` 不可省:規則裡的 `exit` 只能結束它自己。
247
250
  for _rule in r1_datatable_invariants r2_size_num_to_meta_width; do
248
- printf '%s' "$INPUT" | "$_rule"
251
+ ( "$_rule" ) <<<"$INPUT"
249
252
  _rc=$?
250
253
  case "$_rc" in
251
254
  0) ;;
@@ -113,14 +113,16 @@ record_worst() { local lvl=$1; [ "$lvl" -gt "$WORST" ] && WORST=$lvl; }
113
113
 
114
114
  # ── C.6 selected token 狀態語意(P0 BLOCK exit 2;2026-08-11 user 拍板)──────────
115
115
  # 教義(semantic.css + color.spec.md「Selected state family」):
116
- # -active = 按壓專屬 / -hover = 可取消切換鈕變淺專屬 / 反白·鍵盤焦點深化 = -focus。
116
+ # -active = 按壓專屬 / -hover = 可取消切換鈕專屬(已按下的下一階:2026-09-07 由「變淺」改為「變深」neutral-3)。
117
+ # -focus 已於 2026-09-07 退役:鍵盤焦點一律畫框(focus-ring-inset),不改底色(user 2026-09-09 拍板)。
118
+ # (2026-09-25 更正本段過期說法;SSOT = color.spec.md「Selected state family」+ semantic.css 選中家族註解)
117
119
  # 兩年偏移錨:2026-07-05 D4 借 -active 裝反白、滑鼠搭便車,選單 vs sidebar 因此不一致。
118
120
  # 本規則攔「-active/-hover 出現在 hover/焦點/反白修飾鏈」的借用寫法(零誤判:合法用途已窮舉排除)。
119
121
  if ! grep -q '@token-state-allow' <<<"$NEW_CONTENT"; then
120
122
  SUSPECT_C6=$(printf '%s' "$NEW_CONTENT" | grep -oE "[][A-Za-z0-9_=:.-]*bg-neutral-selected-(active|hover)" | while IFS= read -r tok; do
121
123
  case "$tok" in
122
124
  (*active:*) ;; # 修飾鏈含按壓(active:)= 合法按壓用途
123
- (*hover:*bg-neutral-selected-hover) ;; # 切換鈕 pressed 上 hover 變淺 = 誕生語意,合法
125
+ (*hover:*bg-neutral-selected-hover) ;; # 切換鈕 pressed 上 hover 深一階(neutral-2 → neutral-3,2026-09-07 起)= 誕生語意,合法
124
126
  (*)
125
127
  case "$tok" in
126
128
  (*hover:*|*focus-visible:*|*focus:*|*data-\[highlighted*|*data-\[selected*)
@@ -129,6 +131,7 @@ if ! grep -q '@token-state-allow' <<<"$NEW_CONTENT"; then
129
131
  esac
130
132
  done | sort -u)
131
133
  if [ -n "$SUSPECT_C6" ]; then
134
+ # 下方 heredoc 沒加引號:反引號要寫成 \` 才是字面值(2026-09-26 修:原本寫成兩個反斜線,反引號變成指令替換,訊息在「例外」那行斷掉並印 syntax error)
132
135
  cat >&2 <<EOF
133
136
 
134
137
  ┄┄┄ C.6 check_pattern_invariants — selected token 狀態語意 BLOCKER ┄┄┄
@@ -141,15 +144,16 @@ $SUSPECT_C6
141
144
  滑鼠 hover 選中列 → 釘住 bg-neutral-selected 不變
142
145
  鍵盤游標停在任何列 → 畫框(focus-ring-inset)、不上底色;選中列 = 框疊在 bg-neutral-selected 上
143
146
  (focus-canonical 規則二,user 2026-09-09 拍板;-focus 深一階 token 已於 2026-09-07 退役)
144
- ⚠️ **selector 必須對上該元件的焦點模型**:虛擬游標(cmdk data-selected / Radix data-highlighted /
145
- aria-activedescendant)由元件依 hooks/use-input-modality.ts 判鍵盤模態才掛 focus-ring-inset,
147
+ ⚠️ **selector 必須對上該元件的焦點模型**:會搶反白的虛擬游標(cmdk data-selected / Radix data-highlighted)
148
+ 由元件依 hooks/use-input-modality.ts 的 useCursorMover(反白來歷)才掛 focus-ring-inset;
149
+ aria-activedescendant 容器(TimePicker 欄)看容器自己的 :focus-visible(group-focus-visible/listbox:);
146
150
  真焦點元件用 focus-visible:focus-ring-inset。2026-09-06 實測:寫錯 selector 的樣式**從未生效**
147
- (TreeView 列無 tabIndex、MenuItem 根節點非可聚焦,都曾寫 focus-visible: 而永不 match)。
148
- 正確示範:command.tsx CommandItem 與 dropdown-menu.tsx radixCursorClass(依模態分流)、
149
- sidebar.tsx focus-visible:focus-ring-inset(真焦點)、tree-view.tsx showRing(state 驅動)。
151
+ (當時 TreeView 列無 tabIndex、MenuItem 根節點非可聚焦,都曾寫 focus-visible: 而永不 match)。
152
+ 正確示範:command.tsx CommandItem 與 dropdown-menu.tsx radixCursorClass(依反白來歷分流)、
153
+ sidebar.tsx / tree-view.tsx 列的 focus-visible:focus-ring-inset(真焦點;TreeView 2026-09-25 起列上 roving tabindex,待辦總帳 B9)。
150
154
  bg-neutral-selected-active → 只准出現在含 active:(按壓)的修飾鏈
151
- bg-neutral-selected-hover → 只准切換鈕 pressed 上 hover(變淺)
152
- 例外:行尾 \\`// @token-state-allow: <reason>\\`
155
+ bg-neutral-selected-hover → 只准切換鈕 pressed 上 hover(深一階;2026-09-07 起 neutral-3)
156
+ 例外:行尾 \`// @token-state-allow: <reason>\`
153
157
 
154
158
  EOF
155
159
  record_worst 2
@@ -222,12 +222,19 @@ _CAPTURE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/check-plugin-fork-health.XXXXXX") || {
222
222
  }
223
223
  trap 'rm -rf -- "$_CAPTURE_DIR"' EXIT
224
224
  CONTEXTS=""
225
+ # 輸入先落檔再餵給每條規則,不用 `printf | rule`(2026-09-25):規則若沒讀 stdin 就先退出
226
+ # (例如非 Claude provider 時 r2 直接 exit 0),寫端 printf 會收到 SIGPIPE,pipefail 讓整條管線回 141,
227
+ # 被誤判成「規則回傳未定義 exit code」—— 時序決定紅不紅,CI Linux 偶發紅過(21ca94e2)。
228
+ # 規則一定要跑在子殼層 `( "$_rule" )`:規則裡的 `exit` 只能結束它自己;原本是管線替它開了子殼層,
229
+ # 拿掉管線卻不補子殼層,r1 的 `exit 0` 會直接結束整支 hook,後面的規則全部沒跑(本次改法第一版就犯了)。
230
+ _INPUT_FILE="$_CAPTURE_DIR/input"
231
+ printf '%s' "$INPUT" >"$_INPUT_FILE"
225
232
  _RULE_INDEX=0
226
233
  for _rule in r1_plugin_install r2_plugin_freshness; do
227
234
  _RULE_INDEX=$((_RULE_INDEX + 1))
228
235
  _stdout="$_CAPTURE_DIR/$_RULE_INDEX.stdout"
229
236
  _stderr="$_CAPTURE_DIR/$_RULE_INDEX.stderr"
230
- printf '%s' "$INPUT" | "$_rule" >"$_stdout" 2>"$_stderr"
237
+ ( "$_rule" ) <"$_INPUT_FILE" >"$_stdout" 2>"$_stderr"
231
238
  _rc=$?
232
239
  case "$_rc" in
233
240
  0)
@@ -172,13 +172,20 @@ _CAPTURE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/check-propose-discipline.XXXXXX") || {
172
172
  }
173
173
  trap 'rm -rf -- "$_CAPTURE_DIR"' EXIT
174
174
  _CONTEXTS=""
175
+ # 輸入先落檔再餵給每條規則,不用 `printf | rule`(2026-09-25):規則若沒讀 stdin 就先退出
176
+ # (例如非 Claude provider 時 r2 直接 exit 0),寫端 printf 會收到 SIGPIPE,pipefail 讓整條管線回 141,
177
+ # 被誤判成「規則回傳未定義 exit code」—— 時序決定紅不紅,CI Linux 偶發紅過(21ca94e2)。
178
+ # 規則一定要跑在子殼層 `( "$_rule" )`:規則裡的 `exit` 只能結束它自己;原本是管線替它開了子殼層,
179
+ # 拿掉管線卻不補子殼層,r1 的 `exit 0` 會直接結束整支 hook,後面的規則全部沒跑(本次改法第一版就犯了)。
180
+ _INPUT_FILE="$_CAPTURE_DIR/input"
181
+ printf '%s' "$INPUT" >"$_INPUT_FILE"
175
182
  _RULE_INDEX=0
176
183
 
177
184
  for _rule in r1_plain_chinese r2_cite_required; do
178
185
  _RULE_INDEX=$((_RULE_INDEX + 1))
179
186
  _stdout="$_CAPTURE_DIR/$_RULE_INDEX.stdout"
180
187
  _stderr="$_CAPTURE_DIR/$_RULE_INDEX.stderr"
181
- printf '%s' "$INPUT" | "$_rule" >"$_stdout" 2>"$_stderr"
188
+ ( "$_rule" ) <"$_INPUT_FILE" >"$_stdout" 2>"$_stderr"
182
189
  _rc=$?
183
190
  case "$_rc" in
184
191
  0)