@micha.bigler/ui-core-micha 3.14.3 → 4.0.0

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 (367) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +7 -0
  3. package/dist/auth/UserMenu.js +1 -1
  4. package/dist/auth/apiClient.js +7 -6
  5. package/dist/chat/ChatList.js +1 -1
  6. package/dist/chat/ChatThread.js +2 -1
  7. package/dist/chat/ChatWorkspace.js +1 -1
  8. package/dist/chat/ModelPicker.js +2 -5
  9. package/dist/chat/kitSxRegistry.js +9 -0
  10. package/dist/chat/useChatSocket.js +1 -1
  11. package/dist/components/LoginForm.js +1 -1
  12. package/dist/components/SecurityComponent.js +1 -1
  13. package/dist/components/UserListComponent.js +2 -8
  14. package/dist/components/charts/ChartFrame.js +1 -1
  15. package/dist/components/charts/ScatterChart.js +2 -1
  16. package/dist/components/charts/kitSxRegistry.js +6 -0
  17. package/dist/entries/charts.js +6 -0
  18. package/dist/entries/chat.js +8 -0
  19. package/dist/entries/markdown.js +1 -0
  20. package/dist/index.js +0 -14
  21. package/dist/layout/SectionNav.js +1 -1
  22. package/dist/messaging/AttachmentList.js +2 -2
  23. package/dist/messaging/Composer.js +2 -1
  24. package/dist/messaging/ConversationLaunchers.js +1 -4
  25. package/dist/messaging/ConversationList.js +1 -1
  26. package/dist/messaging/DirectMessageLauncher.js +1 -1
  27. package/dist/messaging/MessagingProvider.js +0 -0
  28. package/dist/messaging/PollCard.js +7 -5
  29. package/dist/messaging/ReadTicks.js +2 -2
  30. package/dist/messaging/Thread.js +5 -3
  31. package/dist/notifications/NotificationBell.js +4 -7
  32. package/dist/notifications/NotificationSettings.js +1 -1
  33. package/dist/onboarding/OnboardingProvider.js +3 -6
  34. package/dist/pages/AccountPage.js +1 -2
  35. package/dist/pages/LoginPage.js +2 -3
  36. package/dist/pages/PasswordChangePage.js +2 -3
  37. package/dist/pages/PasswordInvitePage.js +2 -3
  38. package/dist/pages/PasswordResetRequestPage.js +2 -3
  39. package/dist/pages/SignUpPage.js +2 -3
  40. package/dist/pages/SignupConfirmPage.js +2 -3
  41. package/dist/theme/createAppTheme.js +5 -4
  42. package/dist/theme/kitSxEntry.js +11 -0
  43. package/dist/theme/kitSxRegistry.js +2 -15
  44. package/dist/theme/themeCompleteness.js +3 -12
  45. package/dist/utils/auth-errors.js +4 -3
  46. package/package.json +41 -16
  47. package/.github/workflows/publish.yml +0 -126
  48. package/DESIGN.md +0 -60
  49. package/WORK_ORDERS.md +0 -148
  50. package/dev/entries.jsx +0 -721
  51. package/dev/fixtures.js +0 -26
  52. package/dev/main.jsx +0 -75
  53. package/dev/mockTransport.jsx +0 -128
  54. package/docs/CHART-LAYOUT.md +0 -157
  55. package/docs/DARK-TOKENS.md +0 -140
  56. package/docs/TYPE-SCALE.md +0 -111
  57. package/docs/messaging-deviations.md +0 -118
  58. package/index.html +0 -12
  59. package/renovate.json +0 -10
  60. package/scripts/chart-api-census.mjs +0 -415
  61. package/src/auth/AuthContext.jsx +0 -158
  62. package/src/auth/ReauthModal.jsx +0 -82
  63. package/src/auth/UserMenu.jsx +0 -121
  64. package/src/auth/apiClient.jsx +0 -232
  65. package/src/auth/authApi.jsx +0 -539
  66. package/src/auth/authConfig.jsx +0 -34
  67. package/src/auth/reauth.js +0 -47
  68. package/src/chat/ChatComposer.jsx +0 -36
  69. package/src/chat/ChatList.jsx +0 -87
  70. package/src/chat/ChatThread.jsx +0 -128
  71. package/src/chat/ChatWorkspace.jsx +0 -244
  72. package/src/chat/MarkdownReply.jsx +0 -22
  73. package/src/chat/ModelPicker.jsx +0 -85
  74. package/src/chat/api.js +0 -18
  75. package/src/chat/useChatSocket.js +0 -32
  76. package/src/chat/wire.js +0 -7
  77. package/src/components/AccessCodeManager.jsx +0 -288
  78. package/src/components/AccessCodeSingleUseToggle.jsx +0 -92
  79. package/src/components/AllowedEmailDomainsManager.jsx +0 -92
  80. package/src/components/AuthFactorRequirementCard.jsx +0 -95
  81. package/src/components/BulkInviteCsvTab.jsx +0 -198
  82. package/src/components/EmptyState.jsx +0 -38
  83. package/src/components/LoginForm.jsx +0 -159
  84. package/src/components/MFAComponent.jsx +0 -350
  85. package/src/components/MfaLoginComponent.jsx +0 -252
  86. package/src/components/MobileBottomNav.jsx +0 -82
  87. package/src/components/PasskeysComponent.jsx +0 -252
  88. package/src/components/PasswordChangeForm.jsx +0 -87
  89. package/src/components/PasswordResetRequestForm.jsx +0 -43
  90. package/src/components/PasswordSetForm.jsx +0 -97
  91. package/src/components/ProfileComponent.jsx +0 -348
  92. package/src/components/QrSignupManager.jsx +0 -404
  93. package/src/components/QrSignupValidityManager.jsx +0 -106
  94. package/src/components/RegistrationMethodsManager.jsx +0 -150
  95. package/src/components/SecurityComponent.jsx +0 -141
  96. package/src/components/SocialLoginButtons.jsx +0 -83
  97. package/src/components/SoftChip.jsx +0 -93
  98. package/src/components/StatTile.jsx +0 -39
  99. package/src/components/SupportRecoveryRequestsTab.jsx +0 -482
  100. package/src/components/TurnstileWidget.jsx +0 -99
  101. package/src/components/UserInviteComponent.jsx +0 -76
  102. package/src/components/UserListComponent.jsx +0 -618
  103. package/src/components/charts/BarChart.jsx +0 -102
  104. package/src/components/charts/ChartFrame.jsx +0 -214
  105. package/src/components/charts/LineChart.jsx +0 -126
  106. package/src/components/charts/ScatterChart.jsx +0 -299
  107. package/src/components/charts/TimeSeriesChart.jsx +0 -300
  108. package/src/components/charts/chartDefaults.js +0 -644
  109. package/src/components/charts/chartLabels.js +0 -36
  110. package/src/components/charts/exportChart.js +0 -258
  111. package/src/components/charts/formatters.js +0 -39
  112. package/src/components/charts/palette.js +0 -33
  113. package/src/components/charts/yearTickInterval.js +0 -7
  114. package/src/i18n/authTranslations.ts +0 -2651
  115. package/src/i18n/chartsTranslations.ts +0 -91
  116. package/src/i18n/chatTranslations.ts +0 -55
  117. package/src/i18n/messagingTranslations.ts +0 -120
  118. package/src/i18n/notificationsTranslations.ts +0 -32
  119. package/src/i18n/onboardingTranslations.ts +0 -29
  120. package/src/i18n/sectionNavTranslations.ts +0 -20
  121. package/src/i18n/uiCoreTranslations.js +0 -29
  122. package/src/i18n/userMenuTranslations.ts +0 -5
  123. package/src/index.js +0 -158
  124. package/src/layout/PageLayout.jsx +0 -36
  125. package/src/layout/SectionNav.jsx +0 -320
  126. package/src/messaging/AttachmentList.jsx +0 -145
  127. package/src/messaging/Composer.jsx +0 -197
  128. package/src/messaging/ConversationLaunchers.jsx +0 -51
  129. package/src/messaging/ConversationList.jsx +0 -109
  130. package/src/messaging/DirectMessageLauncher.jsx +0 -112
  131. package/src/messaging/MessageBubble.jsx +0 -183
  132. package/src/messaging/MessagingProvider.jsx +0 -0
  133. package/src/messaging/MessagingScopeConfig.jsx +0 -24
  134. package/src/messaging/PollCard.jsx +0 -163
  135. package/src/messaging/ReactionBar.jsx +0 -43
  136. package/src/messaging/ReadTicks.jsx +0 -82
  137. package/src/messaging/Thread.jsx +0 -195
  138. package/src/messaging/api.js +0 -48
  139. package/src/messaging/composerImageCompression.js +0 -35
  140. package/src/messaging/linkifyText.jsx +0 -37
  141. package/src/notifications/NotificationBell.jsx +0 -84
  142. package/src/notifications/NotificationSettings.jsx +0 -330
  143. package/src/notifications/NotificationsProvider.jsx +0 -224
  144. package/src/notifications/PopupSurface.jsx +0 -105
  145. package/src/notifications/api.js +0 -55
  146. package/src/notifications/feedApi.js +0 -18
  147. package/src/notifications/realtime.jsx +0 -138
  148. package/src/notifications/serviceWorker/sw.js +0 -50
  149. package/src/onboarding/OnboardingProvider.jsx +0 -326
  150. package/src/onboarding/OnboardingWizard.jsx +0 -61
  151. package/src/onboarding/WizardDialogShell.jsx +0 -51
  152. package/src/onboarding/api.js +0 -13
  153. package/src/onboarding/stepSelection.js +0 -16
  154. package/src/onboarding/steps/BrowserPushStep.jsx +0 -121
  155. package/src/onboarding/steps/CompleteNameStep.jsx +0 -46
  156. package/src/onboarding/steps/CookieConsentStep.jsx +0 -133
  157. package/src/onboarding/steps/PwaInstallStep.jsx +0 -47
  158. package/src/pages/AccountPage.jsx +0 -394
  159. package/src/pages/LoginPage.jsx +0 -343
  160. package/src/pages/PasswordChangePage.jsx +0 -62
  161. package/src/pages/PasswordInvitePage.jsx +0 -177
  162. package/src/pages/PasswordResetRequestPage.jsx +0 -68
  163. package/src/pages/SignUpPage.jsx +0 -268
  164. package/src/pages/SignupConfirmPage.jsx +0 -155
  165. package/src/testing/checkKitIntegration.js +0 -233
  166. package/src/theme/createAppTheme.js +0 -423
  167. package/src/theme/fonts.js +0 -3
  168. package/src/theme/index.js +0 -21
  169. package/src/theme/kitSxRegistry.js +0 -285
  170. package/src/theme/themeCompleteness.js +0 -1045
  171. package/src/theme/tokens.js +0 -478
  172. package/src/utils/auth-errors.js +0 -76
  173. package/src/utils/authService.js +0 -223
  174. package/src/utils/resolveErrorText.js +0 -28
  175. package/src/utils/webauthn.js +0 -51
  176. package/tests/AccountPage.profileStatements.test.jsx +0 -162
  177. package/tests/AccountPage.test.jsx +0 -200
  178. package/tests/AuthContext.test.jsx +0 -129
  179. package/tests/BarChart.test.jsx +0 -112
  180. package/tests/BrowserPushStep.test.jsx +0 -110
  181. package/tests/ChartFrame.test.jsx +0 -336
  182. package/tests/ConversationList.test.jsx +0 -144
  183. package/tests/CookieConsentStep.test.jsx +0 -69
  184. package/tests/EmptyState.test.jsx +0 -62
  185. package/tests/LineChart.test.jsx +0 -80
  186. package/tests/MessagingProvider.test.jsx +0 -50
  187. package/tests/MobileBottomNav.test.jsx +0 -319
  188. package/tests/NotificationBell.test.jsx +0 -60
  189. package/tests/NotificationSettings.test.jsx +0 -276
  190. package/tests/NotificationsProvider.test.jsx +0 -240
  191. package/tests/OnboardingProvider.test.jsx +0 -294
  192. package/tests/OnboardingWizard.test.jsx +0 -143
  193. package/tests/PasswordChangeForm.test.jsx +0 -70
  194. package/tests/PasswordInvitePage.test.jsx +0 -142
  195. package/tests/PasswordSetForm.test.jsx +0 -70
  196. package/tests/PopupSurface.test.jsx +0 -142
  197. package/tests/ProfileComponent.refresh.test.jsx +0 -194
  198. package/tests/QrSignupManager.registrationContext.test.jsx +0 -106
  199. package/tests/QrSignupManagerInfoBox.test.jsx +0 -49
  200. package/tests/ScatterChart.test.jsx +0 -270
  201. package/tests/SectionNav.test.jsx +0 -363
  202. package/tests/SignUpPage.test.jsx +0 -208
  203. package/tests/SoftChip.test.jsx +0 -105
  204. package/tests/StatTile.test.jsx +0 -57
  205. package/tests/Thread.test.jsx +0 -151
  206. package/tests/TimeSeriesChart.test.jsx +0 -367
  207. package/tests/UserListComponent.test.jsx +0 -192
  208. package/tests/UserMenu.test.jsx +0 -171
  209. package/tests/apiClientLanguage.test.js +0 -33
  210. package/tests/apiClientPublicPaths.test.js +0 -178
  211. package/tests/authApiLogin.test.js +0 -42
  212. package/tests/authApiRegistration.test.js +0 -31
  213. package/tests/authErrorCodeRendering.test.jsx +0 -77
  214. package/tests/authErrors.test.js +0 -74
  215. package/tests/authTranslations.test.js +0 -74
  216. package/tests/chart-api-census.test.js +0 -366
  217. package/tests/chartAxisTickBand.test.jsx +0 -95
  218. package/tests/chartDefaults.test.js +0 -902
  219. package/tests/chartLabels.test.js +0 -50
  220. package/tests/chartsPalette.test.js +0 -99
  221. package/tests/chatApi.test.js +0 -48
  222. package/tests/chatDriverNames.test.jsx +0 -71
  223. package/tests/chatExports.test.js +0 -3
  224. package/tests/chatList.test.jsx +0 -84
  225. package/tests/chatPicker.test.jsx +0 -82
  226. package/tests/chatSocket.test.jsx +0 -26
  227. package/tests/chatThread.test.jsx +0 -116
  228. package/tests/chatTranslations.test.js +0 -47
  229. package/tests/chatWorkspace.test.jsx +0 -234
  230. package/tests/checkKitIntegration.test.jsx +0 -219
  231. package/tests/createAppTheme.test.js +0 -132
  232. package/tests/createAppThemeDark.test.js +0 -127
  233. package/tests/createAppThemeLightGuard.test.js +0 -40
  234. package/tests/createAppThemePageContrast.test.js +0 -108
  235. package/tests/createAppThemeTypography.test.js +0 -53
  236. package/tests/errorCallSiteGuard.test.js +0 -32
  237. package/tests/exportChart.test.js +0 -313
  238. package/tests/feedApi.test.js +0 -46
  239. package/tests/fixtures/light-theme-baseline.json +0 -2234
  240. package/tests/i18nAggregate.test.js +0 -120
  241. package/tests/i18nGermanVariant.test.js +0 -65
  242. package/tests/loginPageErrorResolution.test.jsx +0 -102
  243. package/tests/messagingApi.test.js +0 -32
  244. package/tests/messagingChunk6.test.jsx +0 -116
  245. package/tests/messagingCompactBubble.test.jsx +0 -64
  246. package/tests/messagingComposer.test.jsx +0 -136
  247. package/tests/messagingComposerChunk5.test.jsx +0 -113
  248. package/tests/messagingContractConformance.test.js +0 -69
  249. package/tests/messagingDirectMessageLauncher.test.jsx +0 -151
  250. package/tests/messagingExports.test.js +0 -21
  251. package/tests/messagingInteractions.test.jsx +0 -136
  252. package/tests/messagingLastMessagePreview.test.jsx +0 -93
  253. package/tests/messagingLinkify.test.jsx +0 -51
  254. package/tests/messagingMessageActions.test.jsx +0 -163
  255. package/tests/messagingMsg6.test.jsx +0 -105
  256. package/tests/messagingMsg6f.test.jsx +0 -155
  257. package/tests/messagingMsg6g.test.jsx +0 -166
  258. package/tests/messagingMsg6h.test.jsx +0 -136
  259. package/tests/messagingMsg6i.test.jsx +0 -129
  260. package/tests/messagingPollRendering.test.jsx +0 -142
  261. package/tests/messagingReactionMerge.test.jsx +0 -77
  262. package/tests/messagingReadTicksTooltip.test.jsx +0 -36
  263. package/tests/messagingThreadReceipts.test.jsx +0 -178
  264. package/tests/messagingThreadingQuoting.test.jsx +0 -87
  265. package/tests/messagingUnreadLifecycle.test.jsx +0 -78
  266. package/tests/notificationsApi.test.js +0 -41
  267. package/tests/notificationsExports.test.js +0 -34
  268. package/tests/onboardingDescriptors.test.js +0 -132
  269. package/tests/packageTreeShaking.test.js +0 -126
  270. package/tests/realtime.test.jsx +0 -219
  271. package/tests/resolveErrorText.test.js +0 -72
  272. package/tests/stepSelection.test.js +0 -53
  273. package/tests/themeCompleteness.test.js +0 -626
  274. package/tests/timeSeriesLegend.test.js +0 -99
  275. package/tests/userScreenTranslations.test.jsx +0 -218
  276. package/tsconfig.build.json +0 -18
  277. package/vite.config.mjs +0 -6
  278. package/work-orders/AUTH-1.md +0 -74
  279. package/work-orders/AUTH-2.md +0 -74
  280. package/work-orders/AUTH-4.md +0 -183
  281. package/work-orders/AUTH-5.md +0 -154
  282. package/work-orders/AUTH-7.md +0 -181
  283. package/work-orders/AUTH-8.md +0 -184
  284. package/work-orders/CHART-1.md +0 -285
  285. package/work-orders/CHART-2.md +0 -222
  286. package/work-orders/CHART-3.md +0 -163
  287. package/work-orders/CHART-4.md +0 -203
  288. package/work-orders/CHART-5.md +0 -226
  289. package/work-orders/CHART-6.md +0 -428
  290. package/work-orders/CHART-7.md +0 -175
  291. package/work-orders/DX-1.md +0 -169
  292. package/work-orders/DX-2.md +0 -188
  293. package/work-orders/DX-3.md +0 -195
  294. package/work-orders/I18N-1.md +0 -254
  295. package/work-orders/I18N-3.md +0 -207
  296. package/work-orders/MSG-3.md +0 -375
  297. package/work-orders/MSG-3b.md +0 -1002
  298. package/work-orders/MSG-3c.md +0 -378
  299. package/work-orders/MSG-3d.md +0 -268
  300. package/work-orders/MSG-3e.md +0 -164
  301. package/work-orders/MSG-3f.md +0 -391
  302. package/work-orders/MSG-6e.md +0 -308
  303. package/work-orders/MSG-6f.md +0 -214
  304. package/work-orders/MSG-6g.md +0 -244
  305. package/work-orders/MSG-6h.md +0 -238
  306. package/work-orders/MSG-6i.md +0 -271
  307. package/work-orders/MSG-6j.md +0 -117
  308. package/work-orders/NOTIF-12.md +0 -214
  309. package/work-orders/NOTIF-13.md +0 -142
  310. package/work-orders/NOTIF-14.md +0 -151
  311. package/work-orders/PRIM-1.md +0 -177
  312. package/work-orders/SHELL-1.md +0 -255
  313. package/work-orders/SHELL-2.md +0 -197
  314. package/work-orders/SHELL-3.md +0 -359
  315. package/work-orders/SHELL-4.md +0 -351
  316. package/work-orders/SHELL-5.md +0 -345
  317. package/work-orders/SHELL-6.md +0 -210
  318. package/work-orders/THEME-1.md +0 -587
  319. package/work-orders/THEME-10.md +0 -303
  320. package/work-orders/THEME-11.md +0 -208
  321. package/work-orders/THEME-2.md +0 -339
  322. package/work-orders/THEME-3.md +0 -210
  323. package/work-orders/THEME-4.md +0 -271
  324. package/work-orders/THEME-5.md +0 -341
  325. package/work-orders/THEME-6.md +0 -247
  326. package/work-orders/THEME-7.md +0 -82
  327. package/work-orders/THEME-8.md +0 -211
  328. package/work-orders/THEME-9.md +0 -194
  329. package/work-orders/UCM-AUTH-10.md +0 -490
  330. package/work-orders/UCM-AUTH-11.md +0 -185
  331. package/work-orders/UCM-AUTH-12.md +0 -98
  332. package/work-orders/UCM-AUTH-13.md +0 -47
  333. package/work-orders/UCM-AUTH-9.md +0 -207
  334. package/work-orders/UCM-CHART-10.md +0 -150
  335. package/work-orders/UCM-CHART-11.md +0 -132
  336. package/work-orders/UCM-CHART-12.md +0 -348
  337. package/work-orders/UCM-CHART-13.md +0 -122
  338. package/work-orders/UCM-CHART-14.md +0 -198
  339. package/work-orders/UCM-CHART-15.md +0 -187
  340. package/work-orders/UCM-CHART-16.md +0 -169
  341. package/work-orders/UCM-CHART-17.md +0 -195
  342. package/work-orders/UCM-CHART-18.md +0 -200
  343. package/work-orders/UCM-CHART-8.md +0 -147
  344. package/work-orders/UCM-CHART-9.md +0 -265
  345. package/work-orders/UCM-CHAT-1.md +0 -190
  346. package/work-orders/UCM-CHAT-2.md +0 -75
  347. package/work-orders/UCM-DEP-1.md +0 -63
  348. package/work-orders/UCM-I18N-4.md +0 -226
  349. package/work-orders/UCM-I18N-5.md +0 -211
  350. package/work-orders/UCM-MSG-20.md +0 -192
  351. package/work-orders/UCM-PRIM-2.md +0 -114
  352. package/work-orders/UCM-SHELL-7.md +0 -134
  353. package/work-orders/UCM-SHELL-8.md +0 -125
  354. package/work-orders/UCM-TEST-1.md +0 -304
  355. package/work-orders/UCM-THEME-13.md +0 -69
  356. package/work-orders/UCM-THEME-14.md +0 -312
  357. package/work-orders/UCM-THEME-15.md +0 -356
  358. package/work-orders/UCM-THEME-16.md +0 -80
  359. package/work-orders/UCM-THEME-17.md +0 -111
  360. package/work-orders/UCM-THEME-18.md +0 -184
  361. package/work-orders/assets/AUTH-4-user-list-card.html +0 -407
  362. package/work-orders/assets/PRIM-1-dashboard-primitives.html +0 -624
  363. package/work-orders/assets/SHELL-2-account-navigation.html +0 -1159
  364. package/work-orders/assets/THEME-1-baseline-reference-sheet.html +0 -1352
  365. package/work-orders/assets/UCM-CHAT-1-ai-chat.html +0 -447
  366. package/work-orders/assets/UCM-THEME-13-dark-prototype.html +0 -390
  367. package/work-orders/assets/UCM-THEME-17-type-scale.html +0 -391
@@ -1,122 +0,0 @@
1
- # UCM-CHART-13 — A card has no size of its own. Remove `height` and `aspect` from `ChartFrame`.
2
-
3
- - **Repo:** `ui-core-micha`, branch `main`
4
- - **Tier:** 3 — shared-core API removal, **four measured consumer call sites** (see below). Breaking:
5
- `4.0.0`, sequenced with `FM-CHART-1`.
6
- - **Status:** planned
7
- - **Workstream:** `CHART-*`
8
- - **Files:** `src/components/charts/ChartFrame.jsx` and its tests.
9
-
10
- > **Why. Twice reversed — the reasoning below is what settled it, not the earlier prop-inventory.**
11
- >
12
- > Draft 1 said remove `height` **and** `aspect`, on the grounds that both were dead code. That
13
- > premise was wrong: `aspect` **is** applied — `ChartFrame.jsx:136-139` sets
14
- > `sx={{ width: '100%', minHeight, aspectRatio: aspect, ... }}`.
15
- >
16
- > Draft 2 therefore kept `aspect`. **That was the worse error**, and the operator caught it: it
17
- > reintroduces through the card exactly what `UCM-CHART-12` removed from the chart.
18
- >
19
- > **The structural argument, which neither earlier draft made.** After the migration a consumer
20
- > looks like this:
21
- >
22
- > ```jsx
23
- > <ChartFrame minHeight={320} aspect="960 / 380"> // height derived from WIDTH
24
- > <LineChart size="tall" /> // height from a TOKEN
25
- > </ChartFrame>
26
- > ```
27
- >
28
- > **Two independent size sources for nested boxes that have to agree.** Before the migration they
29
- > were coherent — same ratio on both. Afterwards the frame tracks width and the chart tracks a token,
30
- > and they coincide only by accident. Whichever way they diverge is a defect this series already has
31
- > a name for: the frame taller than its content is dead space, the frame shorter is the
32
- > `UCM-CHART-9` overflow.
33
- >
34
- > **A card must have no size of its own.** Its height is its content's height, with `minHeight` as a
35
- > floor so an empty or loading state does not collapse. That is what `UCM-CHART-9` established — it
36
- > found the defect at a fixed `height`; `aspect` is the same defect derived from width instead of
37
- > stated directly.
38
- >
39
- > | prop | applied today | verdict |
40
- > |---|---|---|
41
- > | `minHeight` | yes (`:138`) | **stays** — the floor, and the only legitimate one |
42
- > | `aspect` | yes (`:139`) | **goes** — a second size source on a box that must follow its content |
43
- > | `height` | no — only feeds a warning | **goes** — accepted and silently ignored |
44
- >
45
- > **This one has consumer impact**, unlike draft 2's claim: four `ChartFrame`s pass `aspect` —
46
- > `fitness-monitor/BodyHistoryPage.jsx:328, :449` and `EnvironmentPage.jsx:250, :284`. They are
47
- > migrated by `FM-CHART-1`, not here.
48
-
49
- ## Part A — Envelope (authoritative WHAT/WHY)
50
-
51
- ### Goal
52
-
53
- `ChartFrame` has no size source of its own. Its height is its content's height, floored by
54
- `minHeight`. `aspect` and `height` are gone.
55
-
56
- ### Definition of Done
57
-
58
- - [ ] **`aspect` removed** from the signature and from the applied `sx` (`:139`). A card that sizes
59
- itself from its width can be shorter than its content (the `UCM-CHART-9` overflow) or taller
60
- (dead space); both are defects this series already has names for.
61
- - [ ] **`height` removed** from `ChartFrame`'s signature, and `warnOnChartFrameHeightMismatch` deleted
62
- with it — the warning exists only to explain a prop that should not be accepted in the first
63
- place. **A prop that is accepted and silently ignored is worse than one that errors**: it lets a
64
- caller believe the card was sized when it was not, which is precisely the `UCM-CHART-9`
65
- regression in slow motion.
66
- - [ ] **`minHeight` stays, unchanged.** It is the one justified prop: a card with a loading or empty
67
- state would otherwise collapse, and `UCM-CHART-9` established the floor as correct. Do not
68
- touch its behaviour.
69
- - [ ] **Passing `height` or `aspect` to `ChartFrame` is a dev-mode error naming what to do instead**
70
- — `minHeight` for a floor, or `size` on the chart *inside* the frame if the caller meant the
71
- chart's height. Consistent with how `UCM-CHART-12` treats the presets' removed props.
72
- - [ ] **`docs/CHART-LAYOUT.md`'s "What stays unchanged" entry is made precise.** It lists the frame's
73
- `minHeight`/`height`/`aspect` as retained without saying which are applied. Replace it: the frame
74
- keeps **`minHeight` only**, as a floor; it has no size source of its own, and a chart's height
75
- comes from its `size` token.
76
-
77
- ### Non-goals
78
-
79
- - Do not change `minHeight`'s semantics, and do not give `ChartFrame` a `size` token. The frame is
80
- not a chart (`UCM-CHART-9`); its height follows its content with a floor, and that is correct.
81
- - Do not touch the four presets. `UCM-CHART-12` settled them.
82
- - No consumer migration here. The four `ChartFrame`s passing `aspect` are fitness-monitor's, and
83
- `FM-CHART-1` removes them — **sequence this after `FM-CHART-1`, or land both together**, or those
84
- four cards hit the new error.
85
-
86
- ### Risks
87
-
88
- - **`height` is free — no consumer passes it and it does nothing.** `aspect` is not: four cards
89
- depend on it and lose their shape when it goes. That is intended (their height becomes their
90
- content's), but it is a **visible change in fitness-monitor**, so `FM-CHART-1`'s rendered two-width
91
- check is what confirms it, not this WO's unit tests.
92
- - **Re-run the consumer scan by reading the call sites, not by grepping.** Both earlier drafts of this
93
- WO were wrong about `aspect` — once from a grep that matched nothing, once from a `head`-truncated
94
- grep that cut off the line where it is applied. Open the files.
95
-
96
- ### Tests to WRITE — narrow
97
-
98
- - `ChartFrame` with `minHeight`: floor applied, `UCM-CHART-9`'s existing assertions unchanged.
99
- - `ChartFrame` given `height` or `aspect`: dev-mode error naming the replacement, and **no
100
- `aspectRatio` or `height` on the box**.
101
- - **A `ChartFrame` whose content is taller than `minHeight` grows to fit** — `UCM-CHART-9`'s
102
- regression test, unchanged, and now the only thing that decides the card's height.
103
- - The `UCM-CHART-9` regression test (content taller than the floor grows the box) stays green,
104
- unchanged.
105
-
106
- No full suite.
107
-
108
- ---
109
-
110
- ## Part B — Implementation map
111
-
112
- > **TO BE FILLED BY THE ORCHESTRATOR** on `git pull`. Must carry `ChartFrame.jsx`'s signature
113
- > (`:56-58`), the applied `sx` (`:138`), `warnOnChartFrameHeightMismatch` (`:27-35`), the
114
- > `docs/CHART-LAYOUT.md` line to correct, the absolute working directory, the progress contract, and
115
- > the preamble. **Do not dispatch while this placeholder stands.**
116
-
117
- ---
118
-
119
- ## Part C — Orchestrator-only
120
-
121
- > **TO BE FILLED BY THE ORCHESTRATOR.** Review routing, register maintenance, registry publish
122
- > verification, commit, and the execution directive with its self-address guard.
@@ -1,198 +0,0 @@
1
- # UCM-CHART-14 — The removal was right. The reason on the record is false, and the error message says the opposite of the docblock.
2
-
3
- - **Repo:** `ui-core-micha`, branch `main`
4
- - **Tier:** 3 — shared-core. Version **`3.1.1`** (patch — see "Why 3.1.1 and not 4.0.0").
5
- - **Status:** planned
6
- - **Workstream:** `CHART-*`
7
- - **Files:** `src/components/charts/ChartFrame.jsx`, `docs/CHART-LAYOUT.md`,
8
- `tests/ChartFrame.test.jsx`, `package.json`, and one new dev script + its tests.
9
-
10
- > **`UCM-CHART-13` shipped the right change for a stated reason that is false.** The mechanics are
11
- > correct and are not being reopened: `height` and `aspect` are gone, `minHeight` stays,
12
- > `warnOnChartFrameHeightMismatch` is deleted, and parameterising `assertRemovedChartProp` with
13
- > `removedIn` was a genuine improvement over what the WO asked for — the error now attributes the
14
- > right WO instead of always blaming `UCM-CHART-12`.
15
- >
16
- > What is wrong is the **justification** recorded alongside it, and one user-visible consequence.
17
-
18
- ## Part A — Envelope (authoritative WHAT/WHY)
19
-
20
- ### The three findings
21
-
22
- **F1 — the shipped consumer measurement is false.** Three places state that nothing passed `aspect`:
23
-
24
- | where | text |
25
- |---|---|
26
- | `ChartFrame.jsx:29-30` (docblock) | "no consumer across the five apps passes it (measured against 3.0.1)" |
27
- | `docs/CHART-LAYOUT.md` | "it is gone because no consumer across the five apps passed it (measured against 3.0.1)" |
28
- | commit `676af5c` message | "aspect was applied … but unused by all five consuming apps" |
29
-
30
- **Four `ChartFrame`s pass `aspect`**, at `origin/main` of fitness-monitor and in its working tree
31
- right now:
32
-
33
- ```
34
- fitness-monitor/frontend/src/pages/BodyHistoryPage.jsx:295 <ChartFrame minHeight aspect>
35
- fitness-monitor/frontend/src/pages/BodyHistoryPage.jsx:444 <ChartFrame minHeight aspect>
36
- fitness-monitor/frontend/src/pages/EnvironmentPage.jsx:245 <ChartFrame minHeight aspect>
37
- fitness-monitor/frontend/src/pages/EnvironmentPage.jsx:279 <ChartFrame minHeight aspect>
38
- ```
39
-
40
- Measured 2026-08-22 by parsing JSX opening tags with brace- and string-awareness, across all 13 app
41
- repos plus ucm. Same scan confirms **hram is clean**: 16 `ChartFrame`s, 11 carrying `minHeight` only,
42
- zero carrying `aspect` or `height` — so `HRAM-CHT-4` (landed, `4e55d1ae`) is unaffected by this WO.
43
-
44
- **F2 — the runtime error message states the opposite of the docblock 50 lines above it.**
45
-
46
- ```js
47
- // ChartFrame.jsx:79
48
- 'Removed -- it was never applied to the frame. Use size on the chart inside the frame …'
49
- ```
50
-
51
- ```js
52
- // ChartFrame.jsx:28, the same file
53
- // it WAS wired to `aspectRatio` on the box at 3.0.1, and worked.
54
- ```
55
-
56
- **The four consumers who hit this error are the four whose cards actually change shape**, and the
57
- message tells them the prop never did anything. Deleting it on that advice is a silent layout change.
58
- This WO's predecessor argued that "a prop accepted and silently ignored is worse than one that
59
- errors" — an error that misdescribes what it is guarding is worse than both.
60
- `tests/ChartFrame.test.jsx:254` repeats the same false claim in a comment.
61
-
62
- **F3 — `3.1.0` is a minor for removing an applied prop with four live call sites.** The removal is
63
- breaking, and the minor was chosen *because* of F1. `3.1.0` is published and cannot be unpublished.
64
- **The remedy is a corrected record and a truthful error message, NOT a compensating major** — see
65
- below; this was argued the other way first and the operator was right.
66
-
67
- ### Goal
68
-
69
- The record matches what was measured, the error message tells the truth to the four callers who will
70
- see it — and **the consumer count stops being a claim and becomes a command.**
71
-
72
- ### The actual deliverable: a census, not three corrected sentences
73
-
74
- `UCM-CHART-12` established the pattern — *the deliverable is the invariant, not the fix*. The
75
- analogue here is blunt: **this is the sixth wrong consumer count in this series**, and every one of
76
- them came from a grep.
77
-
78
- | # | claim | reality |
79
- |---|---|---|
80
- | 1 | `UCM-CHART-8`: 3 `aspect` sites in fitness-monitor | 8 hits; `EnvironmentPage` never listed |
81
- | 2 | "8 call sites" | 4 charts (4 frame+chart pairs) |
82
- | 3 | `HRAM-CHT-4`: "18 preset files" | 14 files, 19 old-API sites |
83
- | 4 | "0 consumers pass `aspect`/`height` to `ChartFrame`" | 4 pass `aspect` |
84
- | 5 | "`aspect` is never applied in `ChartFrame`" | applied at `:139`; a `head`-truncated grep hid it |
85
- | 6 | `UCM-CHART-13`: "no consumer across the five apps passed it" | the same 4 |
86
-
87
- Greps cannot see JSX structure: a prop three lines below its component name, an arrow function whose
88
- `=>` ends the match early, an apostrophe inside a comment, a `{a > b}` in a sibling prop. Every entry
89
- above is one of those. **Ship the parser, and "measured against X" becomes reproducible output
90
- instead of a sentence somebody has to trust.**
91
-
92
- ### Definition of Done
93
-
94
- - [ ] **`scripts/chart-api-census.mjs`** — takes a workspace root, walks every sibling repo's
95
- `frontend/src` (falling back to `src/`), and reports per app: every `<ChartFrame>` and every ucm
96
- chart preset element, with which of `aspect` / `height` / `minHeight` / `margin` / `xAxisAngle`
97
- each one carries, and file:line. Only counts components actually imported from
98
- `@micha.bigler/ui-core-micha` — a local `BarChart` of the same name is not a consumer.
99
- - [ ] **It parses, it does not grep.** Opening-tag scanning must track string literals, template
100
- literals, `{}` depth, and `//` + `/* */` comments. **A tag it cannot close is reported as
101
- `UNPARSED`, never skipped and never counted as clean** — a census that silently drops what it
102
- cannot read is the failure it exists to prevent.
103
- - [ ] **Its own tests, over fixtures carrying the four traps that actually broke the ad-hoc scans:**
104
- an arrow function in a prop, an apostrophe inside a JSX comment, nested braces, and a prop on a
105
- line far below the component name. Each fixture asserts the exact props found.
106
- - [ ] **`aspect`'s error message rewritten to be true and actionable.** It must say the prop *was*
107
- applied (`aspectRatio` on the card box, up to 3.0.1), that the card's height now follows its
108
- content with `minHeight` as the floor, and that a caller who wants the chart taller or shorter
109
- sets `size` on the chart inside. Do not describe it as never-applied anywhere.
110
- - [ ] **`height`'s message left as it is** — it *was* genuinely dead, so that one is already true.
111
- - [ ] **F1's text corrected in all three places** — docblock, `docs/CHART-LAYOUT.md`, and the comment
112
- at `tests/ChartFrame.test.jsx:254`. Replace "no consumer passed it" with what the census
113
- reports: four call sites in fitness-monitor, removed by `FM-CHART-1`. **Do not quietly delete
114
- the sentence** — the point is that a measurement was wrong, and that is worth leaving legible.
115
- - [ ] **Version `3.1.1`**, with a CHANGELOG entry saying plainly that **`3.1.0` removed an applied
116
- prop under a minor**, that four call sites were affected, and that the dev-mode error is what
117
- makes the break loud. Do not publish a compensating `4.0.0`.
118
- - [ ] **Run the census and paste its output into this WO's register Notiz.** A WO about unverified
119
- counts that lands with an unverified count is self-refuting.
120
-
121
- ### Why `3.1.1` and not `4.0.0`
122
-
123
- **This WO changes no API.** Corrected prose, one error-message string, one dev script that never
124
- ships. On its own diff it is a patch, and labelling it `4.0.0` would announce a breaking change it
125
- does not contain.
126
-
127
- The counter-argument, made first in this WO and **withdrawn**: no consumer has crossed `3.1.0` —
128
- hram is on `3.0.1` (`HRAM-CHT-4`, landed), fitness-monitor on `2.37.0` committed / `3.0.1` in its
129
- working tree, jg-ferien on `2.41.1` — so the break is still ahead of all three, and a major would put
130
- the boundary where they will actually meet it.
131
-
132
- **What settles it: the break is not silent.** `assertRemovedChartProp` throws on first render in dev
133
- and names the replacement. The protection a major version buys — "read the notes before upgrading" —
134
- is already delivered by a hard error at the exact call site, which is strictly better than a version
135
- number nobody reads. A major would buy a second copy of a signal that already exists, at the cost of
136
- a version number that lies about its own contents.
137
-
138
- **This is conditional, and the condition is F2.** The guard is only a safety net if it tells the
139
- truth. An error saying `aspect` "was never applied" invites precisely the wrong action from the four
140
- callers whose cards change shape. **`3.1.1` is defensible because F2 is fixed in it — not
141
- independently of that.** If F2 were deferred, this argument collapses and the major comes back.
142
-
143
- `3.1.0` may additionally be deprecated on npm (`npm deprecate`, operator-only — a registry mutation).
144
- Low value here since nobody is on it and `3.1.1` supersedes it immediately; noted as available, not
145
- recommended.
146
-
147
- ### Non-goals
148
-
149
- - **Do not reinstate `aspect`, and do not touch `minHeight`.** The removal stands; only its stated
150
- reason and its error text are wrong.
151
- - Do not migrate fitness-monitor's four call sites — `FM-CHART-1` owns them.
152
- - Do not rewrite history, unpublish `3.1.0`, or publish a compensating `4.0.0`.
153
- - Do not extend the census beyond chart props. It answers "who passes what to the chart API", not
154
- "who uses ucm".
155
-
156
- ### Risks
157
-
158
- - **The census must stay out of the published package.** It is a dev script: keep it off the
159
- `exports` map and out of `files`, and confirm the existing `packageTreeShaking` test still passes —
160
- that test has been flaky under concurrent load before (`UCM-CHART-12`'s note), so a failure there
161
- needs re-running alone before it is believed.
162
- - **The census reads sibling repos and must degrade gracefully** when a repo is absent, has no
163
- frontend, or is a fresh clone — report "not present", never throw. It must never write anything.
164
- - **`FM-CHART-1` is mid-flight** with fitness-monitor's pin at `3.0.1` and all four `aspect` props
165
- still in place. Until it lands, the census correctly reports 4 — that is the expected output, not a
166
- failure. Do not "fix" fitness-monitor from here.
167
- - The corrected error message will be seen by that session. Getting F2 right is what makes its
168
- remaining work safe, so **do F2 before anything else in this WO.**
169
-
170
- ### Tests to WRITE — narrow
171
-
172
- - `ChartFrame` + `aspect`: the thrown message names `minHeight` and `size`, and **does not contain
173
- "never applied"**. Assert on content, not just that it throws — `13`'s test matched
174
- `/ChartFrame.*aspect.*size/s`, which the false message passes.
175
- - `ChartFrame` + `height`: unchanged, still green.
176
- - The census fixtures above.
177
- - Nothing else. `13`'s suite stays as it is apart from the corrected comment and the tightened
178
- message assertion.
179
-
180
- No full suite.
181
-
182
- ---
183
-
184
- ## Part B — Implementation map
185
-
186
- > **TO BE FILLED BY THE ORCHESTRATOR** on `git pull`. Must carry: `ChartFrame.jsx:22-35` (docblock)
187
- > and `:72-81` (the two `assertRemovedChartProp` calls); `assertRemovedChartProp` itself at
188
- > `chartDefaults.js:566`; the `docs/CHART-LAYOUT.md` "What stays unchanged" block; the test file's
189
- > `describe` at `:257` and comment at `:254`; the absolute working directory; the progress contract;
190
- > and the preamble. **Do not dispatch while this placeholder stands.**
191
-
192
- ---
193
-
194
- ## Part C — Orchestrator-only
195
-
196
- > **TO BE FILLED BY THE ORCHESTRATOR.** Review routing (Tier 3: `reviewer` + `ui_reviewer`
197
- > concurrent), register maintenance including the pasted census output, publish verification for
198
- > `3.1.1`, commit, and the execution directive with its self-address guard.
@@ -1,187 +0,0 @@
1
- # UCM-CHART-15 — Shift the chart size scale up one step, and raise the ceiling
2
-
3
- ## Part A — Envelope
4
-
5
- *Authored by the Expertenchat. Authoritative WHAT/WHY.*
6
-
7
- ### Goal
8
-
9
- The named chart sizes become one step taller, and the scale gains two steps above `tall`.
10
-
11
- | token | today | new |
12
- |---|---|---|
13
- | `compact` | 30 → 240 px | **40 → 320 px** |
14
- | `standard` | 40 → 320 px | **50 → 400 px** |
15
- | `tall` | 50 → 400 px | **60 → 480 px** |
16
- | `extra_tall` | — | **70 → 560 px** |
17
- | `super_tall` | — | **80 → 640 px** |
18
-
19
- The 10-unit step is preserved throughout, and every value stays a clean multiple of the theme's 8 px
20
- spacing unit.
21
-
22
- ### Why
23
-
24
- Two independent pressures, both from real call sites rather than speculation.
25
-
26
- **The ceiling is too low.** `tall` (400 px) is the largest token, and hram has already had to use the
27
- documented `height` escape to get past it — `StructuralReachabilityPanel` sits at `height={480}` with
28
- a comment recording exactly this: *"no size token goes taller than `tall`"*. An escape used because
29
- the scale ends is a scale that ends too early.
30
-
31
- **The whole scale is too cramped.** The operator's judgement, on existing plots and not only the new
32
- ones. That judgement lands on a value that was never chosen on its merits: the comment at
33
- `src/components/charts/chartDefaults.js:295` says `standard` is
34
-
35
- > "pinned to the pre-existing deployed default (`TimeSeriesChart`'s old `CHART_HEIGHT = 320`) so this
36
- > migration does not also silently redraw every already-shipped default-sized chart"
37
-
38
- That was a **migration guardrail, not a design verdict** — 320 was kept because it was the previous
39
- value. The migration it protected is complete, so the pin has served its purpose and what remains is
40
- a height inherited rather than decided.
41
-
42
- ### The blast radius is one app, and that is why now
43
-
44
- Measured across the workspace on 2026-08-24:
45
-
46
- ```
47
- hram 3.0.1 <- the only 3.x consumer
48
- 14 other apps 2.41.3 / 2.37.0
49
- ```
50
-
51
- The size tokens are a **3.0.0 feature** (this repo's own CHANGELOG marks 3.0.0 "Breaking": `size`
52
- replaced `minHeight`/`height`/`aspect`). On 2.x the scale does not exist. So no chart outside hram
53
- changes, and the verification surface is one application.
54
-
55
- **That inverts the usual caution into urgency:** fourteen apps are still to migrate onto 3.x. Every
56
- app that migrates onto a scale already known to be too cramped has to be revisited afterwards.
57
- Correcting the scale before they migrate is strictly cheaper than after.
58
-
59
- ### Version: minor, by operator decision — and what that obliges
60
-
61
- Redefining what an existing public token renders is breaking under semver, and the Expertenchat
62
- recommended a major. **The operator decided minor on 2026-08-24; that decision stands and this WO
63
- implements it.**
64
-
65
- The consequence has to be carried somewhere, so it is carried here: a minor version can arrive
66
- through automation. Renovate's weekly run bumps minors without a human reading the diff, and on this
67
- estate that triage is also the vehicle that opens `develop → main`. A silent minor could therefore
68
- make every hram chart 80 px taller in a PR nobody read as a visual change.
69
-
70
- Two obligations follow, and they are not optional decoration:
71
-
72
- 1. **The CHANGELOG entry must lead with the redraw**, in the plainest possible words: every existing
73
- `compact`/`standard`/`tall` chart becomes 80 px taller. Not a bullet at the bottom — the first
74
- line of the entry.
75
- 2. **Release and consumption are coordinated**, not left to the weekly bump. `hram`'s pin bump and
76
- its own verification are `HRAM-CHT-5` and land deliberately.
77
-
78
- ### Scope
79
-
80
- **`src/components/charts/chartDefaults.js`**
81
-
82
- 1. `CHART_SIZE_SPACING_UNITS` becomes `{ compact: 40, standard: 50, tall: 60, extra_tall: 70,
83
- super_tall: 80 }`.
84
- 2. **Rewrite the pin comment at `:294-299`, do not delete it.** It explains why 320 was there; without
85
- a successor the next reader sees an unexplained shift. The new text should say what the old pin
86
- was for, that its migration is complete, and that the scale is now chosen rather than inherited.
87
-
88
- **The enumeration sites — all of them.** The valid-size list is written out in more places than the
89
- one that matters, and a half-updated enumeration is this change's most likely defect:
90
-
91
- 3. `resolveChartHeightPx`'s error message (`:407`) — `"compact" | "standard" | "tall"`.
92
- 4. `assertRemovedChartProp`'s guidance string in **each** chart component that carries it
93
- (`LineChart.jsx:72`, `BarChart.jsx:54`, and the same call in `ScatterChart`).
94
- 5. The `size` JSDoc in **each** preset (`LineChart.jsx:44`, `BarChart.jsx:27`, `ScatterChart.jsx:155`).
95
- 6. `docs/CHART-LAYOUT.md`.
96
- 7. The CHANGELOG entry described above.
97
-
98
- Grep for the literal `"tall"` before declaring this done; the list above is what was found on
99
- 2026-08-24 and is not guaranteed complete.
100
-
101
- ### Non-goals / do not touch
102
-
103
- - `resolveChartLayout`'s geometry, the axis-band resolution, margins, `xLabels`, rotation logic.
104
- - The `height` px escape — it stays exactly as documented.
105
- - `ChartFrame`'s `minHeight` semantics.
106
- - Any consuming app. hram's adoption is `HRAM-CHT-5`.
107
- - Adding a sixth step. If 640 px proves too small later, the scale extends by another 10 units; do
108
- not pre-add one now.
109
-
110
- ### Risks
111
-
112
- - **A half-updated enumeration.** Adding the tokens to the resolver but not to the error message
113
- produces a runtime error that lists only three valid values while five work — which reads as a bug
114
- in the caller's code, not in this package.
115
- - **A test that asserts the token names but not their values** would pass against both the old and
116
- new scale and prove nothing. See test 1.
117
- - The two new tokens have **no call site yet** in this repo. That is intended — `HRAM-CHT-5` adopts
118
- them — but it means nothing here exercises them beyond the resolver test.
119
-
120
- ### Tests to write
121
-
122
- 1. `resolveChartHeightPx` returns **320 / 400 / 480 / 560 / 640** for the five tokens — asserting the
123
- pixel values, not just that a number comes back. Written so it fails against the current scale.
124
- 2. An unknown size still throws, and the message names **all five** valid tokens.
125
- 3. The `height` escape still wins over `size`, for a new token as well as an old one.
126
- 4. Existing chart-layout tests that hard-code 240/320/400 are updated deliberately, each one seen
127
- and changed rather than mass-replaced — one of them may be asserting the old value *on purpose*.
128
-
129
- ---
130
-
131
- ## Part B — Implementation map
132
-
133
- `.claude/models.local.json` has no local override, so the default applies: `implementation.runtime`
134
- is `claude`/`sonnet` — the Orchestrator implemented directly, no Codex dispatch, no preamble/progress
135
- contract needed.
136
-
137
- Context package used:
138
-
139
- - `src/components/charts/chartDefaults.js:294-300` (the pin comment + `CHART_SIZE_SPACING_UNITS`)
140
- and `:402-419` (`resolveChartHeightPx`, its error message, and the `theme.spacing` unwrap comment).
141
- - Enumeration sites confirmed by grep for the literal `"tall"` (matched the WO's own 2026-08-24
142
- list exactly, nothing extra found): `LineChart.jsx:44,72`, `BarChart.jsx:27,54`,
143
- `ScatterChart.jsx:155,198`, `docs/CHART-LAYOUT.md:66,73-75`.
144
- - Existing hardcoded-value tests located via grep for `240|320|400` across `tests/*.test.{js,jsx}`:
145
- `chartDefaults.test.js:119,562,576`, `BarChart.test.jsx:36,83-85`, `LineChart.test.jsx:51-53`,
146
- `ScatterChart.test.jsx:242-244`. Distinguished from unrelated same-valued `minHeight`/`ChartFrame`
147
- test fixtures (`chartDefaults.test.js:291,298,308,315,318`, `ChartFrame.test.jsx:294,311`,
148
- `chart-api-census.test.js:196`), which were left untouched — they assert an arbitrary prop value,
149
- not a size-token pixel height.
150
-
151
- ---
152
-
153
- ## Part C — Orchestrator only
154
-
155
- > **STOP — everything below addresses the Orchestrator.**
156
-
157
- **Tier 3 · tests: the four resolver cases plus the updated layout tests**
158
-
159
- Shared-core — a change *inside* `ui-core-micha` is Tier 3 by the tiering table regardless of diff
160
- size, and this one redefines rendered output for every consumer that reaches 3.x.
161
-
162
- - `reviewer` — the enumeration completeness and the test's ability to fail are its brief.
163
- - `ui_reviewer` — the scale as a design decision: does the 10-unit step still read as a coherent
164
- scale with five members, and is `super_tall` distinguishable from `extra_tall` in practice.
165
- - `sec_reviewer` — not run. No auth, no data, no exposure surface.
166
- - Concurrent, full context.
167
-
168
- ### Release
169
-
170
- Minor bump per the operator's decision → **3.2.0** from the current 3.1.1. Follow this repo's release
171
- procedure. The CHANGELOG obligation in Part A is a release gate, not a nicety: if the entry does not
172
- lead with "every existing chart becomes 80 px taller", the release is not ready.
173
-
174
- Do **not** bump hram from here. `HRAM-CHT-5` owns that, and it carries the visual verification.
175
-
176
- ### Register
177
-
178
- Row `UCM-CHART-15`, review notes in the required shape, the published version, landing SHA(s) in a
179
- second commit before the push. Record explicitly that a **major was recommended and minor was chosen
180
- by the operator** — a future reader tracing a silent redraw should find that decision, not infer it.
181
-
182
- ### Log
183
-
184
- - **2026-08-24** — Envelope authored. Operator judged all three existing tokens too cramped and chose
185
- a full one-step shift over adding a token at the top, accepting the breaking redraw; added
186
- `super_tall` to the two steps proposed. Version set to minor against the Expertenchat's
187
- recommendation of major, recorded above with its consequence.