@micha.bigler/ui-core-micha 3.14.4 → 4.0.1
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.
- package/CHANGELOG.md +29 -0
- package/README.md +7 -0
- package/dist/chat/kitSxRegistry.js +9 -0
- package/dist/components/charts/kitSxRegistry.js +6 -0
- package/dist/entries/charts.js +6 -0
- package/dist/entries/chat.js +8 -0
- package/dist/entries/markdown.js +1 -0
- package/dist/index.js +0 -14
- package/dist/pages/AccountPage.js +1 -2
- package/dist/pages/LoginPage.js +1 -2
- package/dist/pages/PasswordChangePage.js +1 -2
- package/dist/pages/PasswordInvitePage.js +1 -2
- package/dist/pages/PasswordResetRequestPage.js +1 -2
- package/dist/pages/SignUpPage.js +1 -2
- package/dist/pages/SignupConfirmPage.js +1 -2
- package/dist/theme/kitSxEntry.js +11 -0
- package/dist/theme/kitSxRegistry.js +2 -15
- package/package.json +31 -7
- package/.github/workflows/ci.yml +0 -35
- package/.github/workflows/publish.yml +0 -126
- package/DESIGN.md +0 -60
- package/WORK_ORDERS.md +0 -150
- package/dev/entries.jsx +0 -721
- package/dev/fixtures.js +0 -26
- package/dev/main.jsx +0 -75
- package/dev/mockTransport.jsx +0 -128
- package/docs/CHART-LAYOUT.md +0 -157
- package/docs/DARK-TOKENS.md +0 -140
- package/docs/TYPE-SCALE.md +0 -111
- package/docs/messaging-deviations.md +0 -118
- package/index.html +0 -12
- package/renovate.json +0 -10
- package/scripts/chart-api-census.mjs +0 -415
- package/src/auth/AuthContext.jsx +0 -158
- package/src/auth/ReauthModal.jsx +0 -82
- package/src/auth/UserMenu.jsx +0 -121
- package/src/auth/apiClient.jsx +0 -232
- package/src/auth/authApi.jsx +0 -539
- package/src/auth/authConfig.jsx +0 -34
- package/src/auth/reauth.js +0 -47
- package/src/chat/ChatComposer.jsx +0 -36
- package/src/chat/ChatList.jsx +0 -87
- package/src/chat/ChatThread.jsx +0 -128
- package/src/chat/ChatWorkspace.jsx +0 -244
- package/src/chat/MarkdownReply.jsx +0 -22
- package/src/chat/ModelPicker.jsx +0 -85
- package/src/chat/api.js +0 -18
- package/src/chat/useChatSocket.js +0 -32
- package/src/chat/wire.js +0 -7
- package/src/components/AccessCodeManager.jsx +0 -288
- package/src/components/AccessCodeSingleUseToggle.jsx +0 -92
- package/src/components/AllowedEmailDomainsManager.jsx +0 -92
- package/src/components/AuthFactorRequirementCard.jsx +0 -95
- package/src/components/BulkInviteCsvTab.jsx +0 -198
- package/src/components/EmptyState.jsx +0 -38
- package/src/components/LoginForm.jsx +0 -159
- package/src/components/MFAComponent.jsx +0 -350
- package/src/components/MfaLoginComponent.jsx +0 -252
- package/src/components/MobileBottomNav.jsx +0 -82
- package/src/components/PasskeysComponent.jsx +0 -252
- package/src/components/PasswordChangeForm.jsx +0 -87
- package/src/components/PasswordResetRequestForm.jsx +0 -43
- package/src/components/PasswordSetForm.jsx +0 -97
- package/src/components/ProfileComponent.jsx +0 -348
- package/src/components/QrSignupManager.jsx +0 -404
- package/src/components/QrSignupValidityManager.jsx +0 -106
- package/src/components/RegistrationMethodsManager.jsx +0 -150
- package/src/components/SecurityComponent.jsx +0 -141
- package/src/components/SocialLoginButtons.jsx +0 -83
- package/src/components/SoftChip.jsx +0 -93
- package/src/components/StatTile.jsx +0 -39
- package/src/components/SupportRecoveryRequestsTab.jsx +0 -482
- package/src/components/TurnstileWidget.jsx +0 -99
- package/src/components/UserInviteComponent.jsx +0 -76
- package/src/components/UserListComponent.jsx +0 -618
- package/src/components/charts/BarChart.jsx +0 -102
- package/src/components/charts/ChartFrame.jsx +0 -214
- package/src/components/charts/LineChart.jsx +0 -126
- package/src/components/charts/ScatterChart.jsx +0 -299
- package/src/components/charts/TimeSeriesChart.jsx +0 -300
- package/src/components/charts/chartDefaults.js +0 -644
- package/src/components/charts/chartLabels.js +0 -36
- package/src/components/charts/exportChart.js +0 -258
- package/src/components/charts/formatters.js +0 -39
- package/src/components/charts/palette.js +0 -33
- package/src/components/charts/yearTickInterval.js +0 -7
- package/src/i18n/authTranslations.ts +0 -2651
- package/src/i18n/chartsTranslations.ts +0 -91
- package/src/i18n/chatTranslations.ts +0 -55
- package/src/i18n/messagingTranslations.ts +0 -120
- package/src/i18n/notificationsTranslations.ts +0 -32
- package/src/i18n/onboardingTranslations.ts +0 -29
- package/src/i18n/sectionNavTranslations.ts +0 -20
- package/src/i18n/uiCoreTranslations.js +0 -29
- package/src/i18n/userMenuTranslations.ts +0 -5
- package/src/index.js +0 -158
- package/src/layout/PageLayout.jsx +0 -36
- package/src/layout/SectionNav.jsx +0 -320
- package/src/messaging/AttachmentList.jsx +0 -145
- package/src/messaging/Composer.jsx +0 -197
- package/src/messaging/ConversationLaunchers.jsx +0 -51
- package/src/messaging/ConversationList.jsx +0 -109
- package/src/messaging/DirectMessageLauncher.jsx +0 -112
- package/src/messaging/MessageBubble.jsx +0 -183
- package/src/messaging/MessagingProvider.jsx +0 -0
- package/src/messaging/MessagingScopeConfig.jsx +0 -24
- package/src/messaging/PollCard.jsx +0 -163
- package/src/messaging/ReactionBar.jsx +0 -43
- package/src/messaging/ReadTicks.jsx +0 -82
- package/src/messaging/Thread.jsx +0 -195
- package/src/messaging/api.js +0 -48
- package/src/messaging/composerImageCompression.js +0 -35
- package/src/messaging/linkifyText.jsx +0 -37
- package/src/notifications/NotificationBell.jsx +0 -84
- package/src/notifications/NotificationSettings.jsx +0 -330
- package/src/notifications/NotificationsProvider.jsx +0 -224
- package/src/notifications/PopupSurface.jsx +0 -105
- package/src/notifications/api.js +0 -55
- package/src/notifications/feedApi.js +0 -18
- package/src/notifications/realtime.jsx +0 -138
- package/src/notifications/serviceWorker/sw.js +0 -50
- package/src/onboarding/OnboardingProvider.jsx +0 -326
- package/src/onboarding/OnboardingWizard.jsx +0 -61
- package/src/onboarding/WizardDialogShell.jsx +0 -51
- package/src/onboarding/api.js +0 -13
- package/src/onboarding/stepSelection.js +0 -16
- package/src/onboarding/steps/BrowserPushStep.jsx +0 -121
- package/src/onboarding/steps/CompleteNameStep.jsx +0 -46
- package/src/onboarding/steps/CookieConsentStep.jsx +0 -133
- package/src/onboarding/steps/PwaInstallStep.jsx +0 -47
- package/src/pages/AccountPage.jsx +0 -394
- package/src/pages/LoginPage.jsx +0 -343
- package/src/pages/PasswordChangePage.jsx +0 -62
- package/src/pages/PasswordInvitePage.jsx +0 -177
- package/src/pages/PasswordResetRequestPage.jsx +0 -68
- package/src/pages/SignUpPage.jsx +0 -268
- package/src/pages/SignupConfirmPage.jsx +0 -155
- package/src/testing/checkKitIntegration.js +0 -233
- package/src/theme/createAppTheme.js +0 -423
- package/src/theme/fonts.js +0 -3
- package/src/theme/index.js +0 -21
- package/src/theme/kitSxRegistry.js +0 -285
- package/src/theme/themeCompleteness.js +0 -1045
- package/src/theme/tokens.js +0 -478
- package/src/utils/auth-errors.js +0 -76
- package/src/utils/authService.js +0 -223
- package/src/utils/resolveErrorText.js +0 -28
- package/src/utils/webauthn.js +0 -51
- package/tests/AccountPage.profileStatements.test.jsx +0 -162
- package/tests/AccountPage.test.jsx +0 -200
- package/tests/AuthContext.test.jsx +0 -129
- package/tests/BarChart.test.jsx +0 -112
- package/tests/BrowserPushStep.test.jsx +0 -110
- package/tests/ChartFrame.test.jsx +0 -336
- package/tests/ConversationList.test.jsx +0 -144
- package/tests/CookieConsentStep.test.jsx +0 -69
- package/tests/EmptyState.test.jsx +0 -62
- package/tests/LineChart.test.jsx +0 -80
- package/tests/MessagingProvider.test.jsx +0 -50
- package/tests/MobileBottomNav.test.jsx +0 -319
- package/tests/NotificationBell.test.jsx +0 -60
- package/tests/NotificationSettings.test.jsx +0 -276
- package/tests/NotificationsProvider.test.jsx +0 -240
- package/tests/OnboardingProvider.test.jsx +0 -294
- package/tests/OnboardingWizard.test.jsx +0 -143
- package/tests/PasswordChangeForm.test.jsx +0 -70
- package/tests/PasswordInvitePage.test.jsx +0 -142
- package/tests/PasswordSetForm.test.jsx +0 -70
- package/tests/PopupSurface.test.jsx +0 -142
- package/tests/ProfileComponent.refresh.test.jsx +0 -194
- package/tests/QrSignupManager.registrationContext.test.jsx +0 -106
- package/tests/QrSignupManagerInfoBox.test.jsx +0 -49
- package/tests/ScatterChart.test.jsx +0 -270
- package/tests/SectionNav.test.jsx +0 -363
- package/tests/SignUpPage.test.jsx +0 -208
- package/tests/SoftChip.test.jsx +0 -105
- package/tests/StatTile.test.jsx +0 -57
- package/tests/Thread.test.jsx +0 -151
- package/tests/TimeSeriesChart.test.jsx +0 -367
- package/tests/UserListComponent.test.jsx +0 -192
- package/tests/UserMenu.test.jsx +0 -171
- package/tests/apiClientLanguage.test.js +0 -33
- package/tests/apiClientPublicPaths.test.js +0 -178
- package/tests/authApiLogin.test.js +0 -42
- package/tests/authApiRegistration.test.js +0 -31
- package/tests/authErrorCodeRendering.test.jsx +0 -77
- package/tests/authErrors.test.js +0 -74
- package/tests/authTranslations.test.js +0 -74
- package/tests/chart-api-census.test.js +0 -366
- package/tests/chartAxisTickBand.test.jsx +0 -95
- package/tests/chartDefaults.test.js +0 -902
- package/tests/chartLabels.test.js +0 -50
- package/tests/chartsPalette.test.js +0 -99
- package/tests/chatApi.test.js +0 -48
- package/tests/chatDriverNames.test.jsx +0 -71
- package/tests/chatExports.test.js +0 -3
- package/tests/chatList.test.jsx +0 -84
- package/tests/chatPicker.test.jsx +0 -82
- package/tests/chatSocket.test.jsx +0 -26
- package/tests/chatThread.test.jsx +0 -116
- package/tests/chatTranslations.test.js +0 -47
- package/tests/chatWorkspace.test.jsx +0 -234
- package/tests/checkKitIntegration.test.jsx +0 -219
- package/tests/createAppTheme.test.js +0 -132
- package/tests/createAppThemeDark.test.js +0 -127
- package/tests/createAppThemeLightGuard.test.js +0 -40
- package/tests/createAppThemePageContrast.test.js +0 -108
- package/tests/createAppThemeTypography.test.js +0 -53
- package/tests/errorCallSiteGuard.test.js +0 -32
- package/tests/exportChart.test.js +0 -313
- package/tests/feedApi.test.js +0 -46
- package/tests/fixtures/light-theme-baseline.json +0 -2234
- package/tests/i18nAggregate.test.js +0 -120
- package/tests/i18nGermanVariant.test.js +0 -65
- package/tests/loginPageErrorResolution.test.jsx +0 -102
- package/tests/messagingApi.test.js +0 -32
- package/tests/messagingChunk6.test.jsx +0 -116
- package/tests/messagingCompactBubble.test.jsx +0 -64
- package/tests/messagingComposer.test.jsx +0 -136
- package/tests/messagingComposerChunk5.test.jsx +0 -113
- package/tests/messagingContractConformance.test.js +0 -69
- package/tests/messagingDirectMessageLauncher.test.jsx +0 -151
- package/tests/messagingExports.test.js +0 -21
- package/tests/messagingInteractions.test.jsx +0 -136
- package/tests/messagingLastMessagePreview.test.jsx +0 -93
- package/tests/messagingLinkify.test.jsx +0 -51
- package/tests/messagingMessageActions.test.jsx +0 -163
- package/tests/messagingMsg6.test.jsx +0 -105
- package/tests/messagingMsg6f.test.jsx +0 -155
- package/tests/messagingMsg6g.test.jsx +0 -166
- package/tests/messagingMsg6h.test.jsx +0 -136
- package/tests/messagingMsg6i.test.jsx +0 -129
- package/tests/messagingPollRendering.test.jsx +0 -142
- package/tests/messagingReactionMerge.test.jsx +0 -77
- package/tests/messagingReadTicksTooltip.test.jsx +0 -36
- package/tests/messagingThreadReceipts.test.jsx +0 -178
- package/tests/messagingThreadingQuoting.test.jsx +0 -87
- package/tests/messagingUnreadLifecycle.test.jsx +0 -78
- package/tests/notificationsApi.test.js +0 -41
- package/tests/notificationsExports.test.js +0 -34
- package/tests/onboardingDescriptors.test.js +0 -132
- package/tests/packageTreeShaking.test.js +0 -126
- package/tests/realtime.test.jsx +0 -219
- package/tests/resolveErrorText.test.js +0 -72
- package/tests/stepSelection.test.js +0 -53
- package/tests/themeCompleteness.test.js +0 -626
- package/tests/timeSeriesLegend.test.js +0 -99
- package/tests/userScreenTranslations.test.jsx +0 -218
- package/tsconfig.build.json +0 -18
- package/vite.config.mjs +0 -6
- package/work-orders/AUTH-1.md +0 -74
- package/work-orders/AUTH-2.md +0 -74
- package/work-orders/AUTH-4.md +0 -183
- package/work-orders/AUTH-5.md +0 -154
- package/work-orders/AUTH-7.md +0 -181
- package/work-orders/AUTH-8.md +0 -184
- package/work-orders/CHART-1.md +0 -285
- package/work-orders/CHART-2.md +0 -222
- package/work-orders/CHART-3.md +0 -163
- package/work-orders/CHART-4.md +0 -203
- package/work-orders/CHART-5.md +0 -226
- package/work-orders/CHART-6.md +0 -428
- package/work-orders/CHART-7.md +0 -175
- package/work-orders/DX-1.md +0 -169
- package/work-orders/DX-2.md +0 -188
- package/work-orders/DX-3.md +0 -195
- package/work-orders/I18N-1.md +0 -254
- package/work-orders/I18N-3.md +0 -207
- package/work-orders/MSG-3.md +0 -375
- package/work-orders/MSG-3b.md +0 -1002
- package/work-orders/MSG-3c.md +0 -378
- package/work-orders/MSG-3d.md +0 -268
- package/work-orders/MSG-3e.md +0 -164
- package/work-orders/MSG-3f.md +0 -391
- package/work-orders/MSG-6e.md +0 -308
- package/work-orders/MSG-6f.md +0 -214
- package/work-orders/MSG-6g.md +0 -244
- package/work-orders/MSG-6h.md +0 -238
- package/work-orders/MSG-6i.md +0 -271
- package/work-orders/MSG-6j.md +0 -117
- package/work-orders/NOTIF-12.md +0 -214
- package/work-orders/NOTIF-13.md +0 -142
- package/work-orders/NOTIF-14.md +0 -151
- package/work-orders/PRIM-1.md +0 -177
- package/work-orders/SHELL-1.md +0 -255
- package/work-orders/SHELL-2.md +0 -197
- package/work-orders/SHELL-3.md +0 -359
- package/work-orders/SHELL-4.md +0 -351
- package/work-orders/SHELL-5.md +0 -345
- package/work-orders/SHELL-6.md +0 -210
- package/work-orders/THEME-1.md +0 -587
- package/work-orders/THEME-10.md +0 -303
- package/work-orders/THEME-11.md +0 -208
- package/work-orders/THEME-2.md +0 -339
- package/work-orders/THEME-3.md +0 -210
- package/work-orders/THEME-4.md +0 -271
- package/work-orders/THEME-5.md +0 -341
- package/work-orders/THEME-6.md +0 -247
- package/work-orders/THEME-7.md +0 -82
- package/work-orders/THEME-8.md +0 -211
- package/work-orders/THEME-9.md +0 -194
- package/work-orders/UCM-AUTH-10.md +0 -490
- package/work-orders/UCM-AUTH-11.md +0 -185
- package/work-orders/UCM-AUTH-12.md +0 -98
- package/work-orders/UCM-AUTH-13.md +0 -47
- package/work-orders/UCM-AUTH-9.md +0 -207
- package/work-orders/UCM-CHART-10.md +0 -150
- package/work-orders/UCM-CHART-11.md +0 -132
- package/work-orders/UCM-CHART-12.md +0 -348
- package/work-orders/UCM-CHART-13.md +0 -122
- package/work-orders/UCM-CHART-14.md +0 -198
- package/work-orders/UCM-CHART-15.md +0 -187
- package/work-orders/UCM-CHART-16.md +0 -169
- package/work-orders/UCM-CHART-17.md +0 -195
- package/work-orders/UCM-CHART-18.md +0 -200
- package/work-orders/UCM-CHART-8.md +0 -147
- package/work-orders/UCM-CHART-9.md +0 -265
- package/work-orders/UCM-CHAT-1.md +0 -190
- package/work-orders/UCM-CHAT-2.md +0 -75
- package/work-orders/UCM-CI-1.md +0 -65
- package/work-orders/UCM-DEP-1.md +0 -63
- package/work-orders/UCM-I18N-4.md +0 -226
- package/work-orders/UCM-I18N-5.md +0 -211
- package/work-orders/UCM-MSG-20.md +0 -192
- package/work-orders/UCM-PRIM-2.md +0 -114
- package/work-orders/UCM-SHELL-7.md +0 -134
- package/work-orders/UCM-SHELL-8.md +0 -125
- package/work-orders/UCM-TEST-1.md +0 -304
- package/work-orders/UCM-THEME-13.md +0 -69
- package/work-orders/UCM-THEME-14.md +0 -312
- package/work-orders/UCM-THEME-15.md +0 -356
- package/work-orders/UCM-THEME-16.md +0 -80
- package/work-orders/UCM-THEME-17.md +0 -111
- package/work-orders/UCM-THEME-18.md +0 -184
- package/work-orders/assets/AUTH-4-user-list-card.html +0 -407
- package/work-orders/assets/PRIM-1-dashboard-primitives.html +0 -624
- package/work-orders/assets/SHELL-2-account-navigation.html +0 -1159
- package/work-orders/assets/THEME-1-baseline-reference-sheet.html +0 -1352
- package/work-orders/assets/UCM-CHAT-1-ai-chat.html +0 -447
- package/work-orders/assets/UCM-THEME-13-dark-prototype.html +0 -390
- 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.
|