@micha.bigler/ui-core-micha 3.14.4 → 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 (341) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +7 -0
  3. package/dist/chat/kitSxRegistry.js +9 -0
  4. package/dist/components/charts/kitSxRegistry.js +6 -0
  5. package/dist/entries/charts.js +6 -0
  6. package/dist/entries/chat.js +8 -0
  7. package/dist/entries/markdown.js +1 -0
  8. package/dist/index.js +0 -14
  9. package/dist/pages/AccountPage.js +1 -2
  10. package/dist/pages/LoginPage.js +1 -2
  11. package/dist/pages/PasswordChangePage.js +1 -2
  12. package/dist/pages/PasswordInvitePage.js +1 -2
  13. package/dist/pages/PasswordResetRequestPage.js +1 -2
  14. package/dist/pages/SignUpPage.js +1 -2
  15. package/dist/pages/SignupConfirmPage.js +1 -2
  16. package/dist/theme/kitSxEntry.js +11 -0
  17. package/dist/theme/kitSxRegistry.js +2 -15
  18. package/package.json +32 -7
  19. package/.github/workflows/ci.yml +0 -35
  20. package/.github/workflows/publish.yml +0 -126
  21. package/DESIGN.md +0 -60
  22. package/WORK_ORDERS.md +0 -150
  23. package/dev/entries.jsx +0 -721
  24. package/dev/fixtures.js +0 -26
  25. package/dev/main.jsx +0 -75
  26. package/dev/mockTransport.jsx +0 -128
  27. package/docs/CHART-LAYOUT.md +0 -157
  28. package/docs/DARK-TOKENS.md +0 -140
  29. package/docs/TYPE-SCALE.md +0 -111
  30. package/docs/messaging-deviations.md +0 -118
  31. package/index.html +0 -12
  32. package/renovate.json +0 -10
  33. package/scripts/chart-api-census.mjs +0 -415
  34. package/src/auth/AuthContext.jsx +0 -158
  35. package/src/auth/ReauthModal.jsx +0 -82
  36. package/src/auth/UserMenu.jsx +0 -121
  37. package/src/auth/apiClient.jsx +0 -232
  38. package/src/auth/authApi.jsx +0 -539
  39. package/src/auth/authConfig.jsx +0 -34
  40. package/src/auth/reauth.js +0 -47
  41. package/src/chat/ChatComposer.jsx +0 -36
  42. package/src/chat/ChatList.jsx +0 -87
  43. package/src/chat/ChatThread.jsx +0 -128
  44. package/src/chat/ChatWorkspace.jsx +0 -244
  45. package/src/chat/MarkdownReply.jsx +0 -22
  46. package/src/chat/ModelPicker.jsx +0 -85
  47. package/src/chat/api.js +0 -18
  48. package/src/chat/useChatSocket.js +0 -32
  49. package/src/chat/wire.js +0 -7
  50. package/src/components/AccessCodeManager.jsx +0 -288
  51. package/src/components/AccessCodeSingleUseToggle.jsx +0 -92
  52. package/src/components/AllowedEmailDomainsManager.jsx +0 -92
  53. package/src/components/AuthFactorRequirementCard.jsx +0 -95
  54. package/src/components/BulkInviteCsvTab.jsx +0 -198
  55. package/src/components/EmptyState.jsx +0 -38
  56. package/src/components/LoginForm.jsx +0 -159
  57. package/src/components/MFAComponent.jsx +0 -350
  58. package/src/components/MfaLoginComponent.jsx +0 -252
  59. package/src/components/MobileBottomNav.jsx +0 -82
  60. package/src/components/PasskeysComponent.jsx +0 -252
  61. package/src/components/PasswordChangeForm.jsx +0 -87
  62. package/src/components/PasswordResetRequestForm.jsx +0 -43
  63. package/src/components/PasswordSetForm.jsx +0 -97
  64. package/src/components/ProfileComponent.jsx +0 -348
  65. package/src/components/QrSignupManager.jsx +0 -404
  66. package/src/components/QrSignupValidityManager.jsx +0 -106
  67. package/src/components/RegistrationMethodsManager.jsx +0 -150
  68. package/src/components/SecurityComponent.jsx +0 -141
  69. package/src/components/SocialLoginButtons.jsx +0 -83
  70. package/src/components/SoftChip.jsx +0 -93
  71. package/src/components/StatTile.jsx +0 -39
  72. package/src/components/SupportRecoveryRequestsTab.jsx +0 -482
  73. package/src/components/TurnstileWidget.jsx +0 -99
  74. package/src/components/UserInviteComponent.jsx +0 -76
  75. package/src/components/UserListComponent.jsx +0 -618
  76. package/src/components/charts/BarChart.jsx +0 -102
  77. package/src/components/charts/ChartFrame.jsx +0 -214
  78. package/src/components/charts/LineChart.jsx +0 -126
  79. package/src/components/charts/ScatterChart.jsx +0 -299
  80. package/src/components/charts/TimeSeriesChart.jsx +0 -300
  81. package/src/components/charts/chartDefaults.js +0 -644
  82. package/src/components/charts/chartLabels.js +0 -36
  83. package/src/components/charts/exportChart.js +0 -258
  84. package/src/components/charts/formatters.js +0 -39
  85. package/src/components/charts/palette.js +0 -33
  86. package/src/components/charts/yearTickInterval.js +0 -7
  87. package/src/i18n/authTranslations.ts +0 -2651
  88. package/src/i18n/chartsTranslations.ts +0 -91
  89. package/src/i18n/chatTranslations.ts +0 -55
  90. package/src/i18n/messagingTranslations.ts +0 -120
  91. package/src/i18n/notificationsTranslations.ts +0 -32
  92. package/src/i18n/onboardingTranslations.ts +0 -29
  93. package/src/i18n/sectionNavTranslations.ts +0 -20
  94. package/src/i18n/uiCoreTranslations.js +0 -29
  95. package/src/i18n/userMenuTranslations.ts +0 -5
  96. package/src/index.js +0 -158
  97. package/src/layout/PageLayout.jsx +0 -36
  98. package/src/layout/SectionNav.jsx +0 -320
  99. package/src/messaging/AttachmentList.jsx +0 -145
  100. package/src/messaging/Composer.jsx +0 -197
  101. package/src/messaging/ConversationLaunchers.jsx +0 -51
  102. package/src/messaging/ConversationList.jsx +0 -109
  103. package/src/messaging/DirectMessageLauncher.jsx +0 -112
  104. package/src/messaging/MessageBubble.jsx +0 -183
  105. package/src/messaging/MessagingProvider.jsx +0 -0
  106. package/src/messaging/MessagingScopeConfig.jsx +0 -24
  107. package/src/messaging/PollCard.jsx +0 -163
  108. package/src/messaging/ReactionBar.jsx +0 -43
  109. package/src/messaging/ReadTicks.jsx +0 -82
  110. package/src/messaging/Thread.jsx +0 -195
  111. package/src/messaging/api.js +0 -48
  112. package/src/messaging/composerImageCompression.js +0 -35
  113. package/src/messaging/linkifyText.jsx +0 -37
  114. package/src/notifications/NotificationBell.jsx +0 -84
  115. package/src/notifications/NotificationSettings.jsx +0 -330
  116. package/src/notifications/NotificationsProvider.jsx +0 -224
  117. package/src/notifications/PopupSurface.jsx +0 -105
  118. package/src/notifications/api.js +0 -55
  119. package/src/notifications/feedApi.js +0 -18
  120. package/src/notifications/realtime.jsx +0 -138
  121. package/src/notifications/serviceWorker/sw.js +0 -50
  122. package/src/onboarding/OnboardingProvider.jsx +0 -326
  123. package/src/onboarding/OnboardingWizard.jsx +0 -61
  124. package/src/onboarding/WizardDialogShell.jsx +0 -51
  125. package/src/onboarding/api.js +0 -13
  126. package/src/onboarding/stepSelection.js +0 -16
  127. package/src/onboarding/steps/BrowserPushStep.jsx +0 -121
  128. package/src/onboarding/steps/CompleteNameStep.jsx +0 -46
  129. package/src/onboarding/steps/CookieConsentStep.jsx +0 -133
  130. package/src/onboarding/steps/PwaInstallStep.jsx +0 -47
  131. package/src/pages/AccountPage.jsx +0 -394
  132. package/src/pages/LoginPage.jsx +0 -343
  133. package/src/pages/PasswordChangePage.jsx +0 -62
  134. package/src/pages/PasswordInvitePage.jsx +0 -177
  135. package/src/pages/PasswordResetRequestPage.jsx +0 -68
  136. package/src/pages/SignUpPage.jsx +0 -268
  137. package/src/pages/SignupConfirmPage.jsx +0 -155
  138. package/src/testing/checkKitIntegration.js +0 -233
  139. package/src/theme/createAppTheme.js +0 -423
  140. package/src/theme/fonts.js +0 -3
  141. package/src/theme/index.js +0 -21
  142. package/src/theme/kitSxRegistry.js +0 -285
  143. package/src/theme/themeCompleteness.js +0 -1045
  144. package/src/theme/tokens.js +0 -478
  145. package/src/utils/auth-errors.js +0 -76
  146. package/src/utils/authService.js +0 -223
  147. package/src/utils/resolveErrorText.js +0 -28
  148. package/src/utils/webauthn.js +0 -51
  149. package/tests/AccountPage.profileStatements.test.jsx +0 -162
  150. package/tests/AccountPage.test.jsx +0 -200
  151. package/tests/AuthContext.test.jsx +0 -129
  152. package/tests/BarChart.test.jsx +0 -112
  153. package/tests/BrowserPushStep.test.jsx +0 -110
  154. package/tests/ChartFrame.test.jsx +0 -336
  155. package/tests/ConversationList.test.jsx +0 -144
  156. package/tests/CookieConsentStep.test.jsx +0 -69
  157. package/tests/EmptyState.test.jsx +0 -62
  158. package/tests/LineChart.test.jsx +0 -80
  159. package/tests/MessagingProvider.test.jsx +0 -50
  160. package/tests/MobileBottomNav.test.jsx +0 -319
  161. package/tests/NotificationBell.test.jsx +0 -60
  162. package/tests/NotificationSettings.test.jsx +0 -276
  163. package/tests/NotificationsProvider.test.jsx +0 -240
  164. package/tests/OnboardingProvider.test.jsx +0 -294
  165. package/tests/OnboardingWizard.test.jsx +0 -143
  166. package/tests/PasswordChangeForm.test.jsx +0 -70
  167. package/tests/PasswordInvitePage.test.jsx +0 -142
  168. package/tests/PasswordSetForm.test.jsx +0 -70
  169. package/tests/PopupSurface.test.jsx +0 -142
  170. package/tests/ProfileComponent.refresh.test.jsx +0 -194
  171. package/tests/QrSignupManager.registrationContext.test.jsx +0 -106
  172. package/tests/QrSignupManagerInfoBox.test.jsx +0 -49
  173. package/tests/ScatterChart.test.jsx +0 -270
  174. package/tests/SectionNav.test.jsx +0 -363
  175. package/tests/SignUpPage.test.jsx +0 -208
  176. package/tests/SoftChip.test.jsx +0 -105
  177. package/tests/StatTile.test.jsx +0 -57
  178. package/tests/Thread.test.jsx +0 -151
  179. package/tests/TimeSeriesChart.test.jsx +0 -367
  180. package/tests/UserListComponent.test.jsx +0 -192
  181. package/tests/UserMenu.test.jsx +0 -171
  182. package/tests/apiClientLanguage.test.js +0 -33
  183. package/tests/apiClientPublicPaths.test.js +0 -178
  184. package/tests/authApiLogin.test.js +0 -42
  185. package/tests/authApiRegistration.test.js +0 -31
  186. package/tests/authErrorCodeRendering.test.jsx +0 -77
  187. package/tests/authErrors.test.js +0 -74
  188. package/tests/authTranslations.test.js +0 -74
  189. package/tests/chart-api-census.test.js +0 -366
  190. package/tests/chartAxisTickBand.test.jsx +0 -95
  191. package/tests/chartDefaults.test.js +0 -902
  192. package/tests/chartLabels.test.js +0 -50
  193. package/tests/chartsPalette.test.js +0 -99
  194. package/tests/chatApi.test.js +0 -48
  195. package/tests/chatDriverNames.test.jsx +0 -71
  196. package/tests/chatExports.test.js +0 -3
  197. package/tests/chatList.test.jsx +0 -84
  198. package/tests/chatPicker.test.jsx +0 -82
  199. package/tests/chatSocket.test.jsx +0 -26
  200. package/tests/chatThread.test.jsx +0 -116
  201. package/tests/chatTranslations.test.js +0 -47
  202. package/tests/chatWorkspace.test.jsx +0 -234
  203. package/tests/checkKitIntegration.test.jsx +0 -219
  204. package/tests/createAppTheme.test.js +0 -132
  205. package/tests/createAppThemeDark.test.js +0 -127
  206. package/tests/createAppThemeLightGuard.test.js +0 -40
  207. package/tests/createAppThemePageContrast.test.js +0 -108
  208. package/tests/createAppThemeTypography.test.js +0 -53
  209. package/tests/errorCallSiteGuard.test.js +0 -32
  210. package/tests/exportChart.test.js +0 -313
  211. package/tests/feedApi.test.js +0 -46
  212. package/tests/fixtures/light-theme-baseline.json +0 -2234
  213. package/tests/i18nAggregate.test.js +0 -120
  214. package/tests/i18nGermanVariant.test.js +0 -65
  215. package/tests/loginPageErrorResolution.test.jsx +0 -102
  216. package/tests/messagingApi.test.js +0 -32
  217. package/tests/messagingChunk6.test.jsx +0 -116
  218. package/tests/messagingCompactBubble.test.jsx +0 -64
  219. package/tests/messagingComposer.test.jsx +0 -136
  220. package/tests/messagingComposerChunk5.test.jsx +0 -113
  221. package/tests/messagingContractConformance.test.js +0 -69
  222. package/tests/messagingDirectMessageLauncher.test.jsx +0 -151
  223. package/tests/messagingExports.test.js +0 -21
  224. package/tests/messagingInteractions.test.jsx +0 -136
  225. package/tests/messagingLastMessagePreview.test.jsx +0 -93
  226. package/tests/messagingLinkify.test.jsx +0 -51
  227. package/tests/messagingMessageActions.test.jsx +0 -163
  228. package/tests/messagingMsg6.test.jsx +0 -105
  229. package/tests/messagingMsg6f.test.jsx +0 -155
  230. package/tests/messagingMsg6g.test.jsx +0 -166
  231. package/tests/messagingMsg6h.test.jsx +0 -136
  232. package/tests/messagingMsg6i.test.jsx +0 -129
  233. package/tests/messagingPollRendering.test.jsx +0 -142
  234. package/tests/messagingReactionMerge.test.jsx +0 -77
  235. package/tests/messagingReadTicksTooltip.test.jsx +0 -36
  236. package/tests/messagingThreadReceipts.test.jsx +0 -178
  237. package/tests/messagingThreadingQuoting.test.jsx +0 -87
  238. package/tests/messagingUnreadLifecycle.test.jsx +0 -78
  239. package/tests/notificationsApi.test.js +0 -41
  240. package/tests/notificationsExports.test.js +0 -34
  241. package/tests/onboardingDescriptors.test.js +0 -132
  242. package/tests/packageTreeShaking.test.js +0 -126
  243. package/tests/realtime.test.jsx +0 -219
  244. package/tests/resolveErrorText.test.js +0 -72
  245. package/tests/stepSelection.test.js +0 -53
  246. package/tests/themeCompleteness.test.js +0 -626
  247. package/tests/timeSeriesLegend.test.js +0 -99
  248. package/tests/userScreenTranslations.test.jsx +0 -218
  249. package/tsconfig.build.json +0 -18
  250. package/vite.config.mjs +0 -6
  251. package/work-orders/AUTH-1.md +0 -74
  252. package/work-orders/AUTH-2.md +0 -74
  253. package/work-orders/AUTH-4.md +0 -183
  254. package/work-orders/AUTH-5.md +0 -154
  255. package/work-orders/AUTH-7.md +0 -181
  256. package/work-orders/AUTH-8.md +0 -184
  257. package/work-orders/CHART-1.md +0 -285
  258. package/work-orders/CHART-2.md +0 -222
  259. package/work-orders/CHART-3.md +0 -163
  260. package/work-orders/CHART-4.md +0 -203
  261. package/work-orders/CHART-5.md +0 -226
  262. package/work-orders/CHART-6.md +0 -428
  263. package/work-orders/CHART-7.md +0 -175
  264. package/work-orders/DX-1.md +0 -169
  265. package/work-orders/DX-2.md +0 -188
  266. package/work-orders/DX-3.md +0 -195
  267. package/work-orders/I18N-1.md +0 -254
  268. package/work-orders/I18N-3.md +0 -207
  269. package/work-orders/MSG-3.md +0 -375
  270. package/work-orders/MSG-3b.md +0 -1002
  271. package/work-orders/MSG-3c.md +0 -378
  272. package/work-orders/MSG-3d.md +0 -268
  273. package/work-orders/MSG-3e.md +0 -164
  274. package/work-orders/MSG-3f.md +0 -391
  275. package/work-orders/MSG-6e.md +0 -308
  276. package/work-orders/MSG-6f.md +0 -214
  277. package/work-orders/MSG-6g.md +0 -244
  278. package/work-orders/MSG-6h.md +0 -238
  279. package/work-orders/MSG-6i.md +0 -271
  280. package/work-orders/MSG-6j.md +0 -117
  281. package/work-orders/NOTIF-12.md +0 -214
  282. package/work-orders/NOTIF-13.md +0 -142
  283. package/work-orders/NOTIF-14.md +0 -151
  284. package/work-orders/PRIM-1.md +0 -177
  285. package/work-orders/SHELL-1.md +0 -255
  286. package/work-orders/SHELL-2.md +0 -197
  287. package/work-orders/SHELL-3.md +0 -359
  288. package/work-orders/SHELL-4.md +0 -351
  289. package/work-orders/SHELL-5.md +0 -345
  290. package/work-orders/SHELL-6.md +0 -210
  291. package/work-orders/THEME-1.md +0 -587
  292. package/work-orders/THEME-10.md +0 -303
  293. package/work-orders/THEME-11.md +0 -208
  294. package/work-orders/THEME-2.md +0 -339
  295. package/work-orders/THEME-3.md +0 -210
  296. package/work-orders/THEME-4.md +0 -271
  297. package/work-orders/THEME-5.md +0 -341
  298. package/work-orders/THEME-6.md +0 -247
  299. package/work-orders/THEME-7.md +0 -82
  300. package/work-orders/THEME-8.md +0 -211
  301. package/work-orders/THEME-9.md +0 -194
  302. package/work-orders/UCM-AUTH-10.md +0 -490
  303. package/work-orders/UCM-AUTH-11.md +0 -185
  304. package/work-orders/UCM-AUTH-12.md +0 -98
  305. package/work-orders/UCM-AUTH-13.md +0 -47
  306. package/work-orders/UCM-AUTH-9.md +0 -207
  307. package/work-orders/UCM-CHART-10.md +0 -150
  308. package/work-orders/UCM-CHART-11.md +0 -132
  309. package/work-orders/UCM-CHART-12.md +0 -348
  310. package/work-orders/UCM-CHART-13.md +0 -122
  311. package/work-orders/UCM-CHART-14.md +0 -198
  312. package/work-orders/UCM-CHART-15.md +0 -187
  313. package/work-orders/UCM-CHART-16.md +0 -169
  314. package/work-orders/UCM-CHART-17.md +0 -195
  315. package/work-orders/UCM-CHART-18.md +0 -200
  316. package/work-orders/UCM-CHART-8.md +0 -147
  317. package/work-orders/UCM-CHART-9.md +0 -265
  318. package/work-orders/UCM-CHAT-1.md +0 -190
  319. package/work-orders/UCM-CHAT-2.md +0 -75
  320. package/work-orders/UCM-CI-1.md +0 -65
  321. package/work-orders/UCM-DEP-1.md +0 -63
  322. package/work-orders/UCM-I18N-4.md +0 -226
  323. package/work-orders/UCM-I18N-5.md +0 -211
  324. package/work-orders/UCM-MSG-20.md +0 -192
  325. package/work-orders/UCM-PRIM-2.md +0 -114
  326. package/work-orders/UCM-SHELL-7.md +0 -134
  327. package/work-orders/UCM-SHELL-8.md +0 -125
  328. package/work-orders/UCM-TEST-1.md +0 -304
  329. package/work-orders/UCM-THEME-13.md +0 -69
  330. package/work-orders/UCM-THEME-14.md +0 -312
  331. package/work-orders/UCM-THEME-15.md +0 -356
  332. package/work-orders/UCM-THEME-16.md +0 -80
  333. package/work-orders/UCM-THEME-17.md +0 -111
  334. package/work-orders/UCM-THEME-18.md +0 -184
  335. package/work-orders/assets/AUTH-4-user-list-card.html +0 -407
  336. package/work-orders/assets/PRIM-1-dashboard-primitives.html +0 -624
  337. package/work-orders/assets/SHELL-2-account-navigation.html +0 -1159
  338. package/work-orders/assets/THEME-1-baseline-reference-sheet.html +0 -1352
  339. package/work-orders/assets/UCM-CHAT-1-ai-chat.html +0 -447
  340. package/work-orders/assets/UCM-THEME-13-dark-prototype.html +0 -390
  341. 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.