Repository navigation
Commit 1000cc7
fix(spec): a dataset dimension's nullLabel is live; move the objectui pin past its reader (#25437)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} -->
_Requested by **Tesla** · [project
thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6JaoJ8yb43iqvYRAnady5tqTZG)_
Fixes #25330
Clause-②: no
Metadata-protocol: none
This PR is landing 3 of 3 for the label half of #25330, following ruling
A (6358843349, approved by the maintainer). The earlier landings:
- #25402 (merged as `830a63a6`) carries a dataset dimension's
`nullLabel` on the answer's column descriptor as `fields[].nullLabel`.
It also names System Overview's null user bucket "System".
- objectui#13354 (merged as `1d178e06ac5e`) draws a dataset chart's null
bucket under that name.
This PR moves the console pin past that reader, then flips the liveness
row once the reader is at the pin. The seat approved the order as option
(a): bump the pin and flip the row in one PR.
## What changes
- **The objectui pin.** `.objectui-sha` moves from `5fef032b1ada` to
`1d178e06ac5e` by `scripts/bump-objectui.sh`. It brings five objectui
commits in. Their six changesets are digested into
`.changeset/console-1d178e06ac5e.md` as an `@objectstack/console` patch.
- Then `pnpm objectui:build` ran, and `node
scripts/gen-sdui-manifest-node.mjs` re-recorded
`scripts/sdui-manifest.record.json`. The manifest itself is
byte-identical: 107 components.
- `pnpm gen:sdui-lockstep` re-recorded
`packages/sdui-parser/objectui-lockstep.json` with the objectui checkout
parked on the pin. objectui's parser region did not change.
- **Liveness.** `liveness/dataset.json` moves `dimensions[].nullLabel`
from `planned` to `live`. It was measured at the pin, following the
shape of `runAction` (#10068) and `print` (#23710).
- **evidence** (`cross-repo`, objectui @1d178e06ac5e):
`packages/plugin-dashboard/src/DatasetWidget.tsx#declaredNullCategoryLabel`.
It reads the category dimension's `fields[].nullLabel`, and the widget
passes it as the chart's `nullCategoryLabel`, ahead of
`chart.nullCategory`.
- **producer**:
`packages/services/service-analytics/src/analytics-service.ts#enrichResultColumns`.
It resolves the dimension's `nullLabel` at the request locale and writes
it onto the column descriptor, which is the second input the reader
depends on.
- `authorWarn` and `authorHint` go with the flip, so `os lint` stops
telling an author that nothing draws the bucket. The
`state-counts/dataset.md` shard is regenerated: 27 live / 1 planned
becomes 28 live / 0 planned.
- **The dataset form.** The Dimensions repeater offers a Null Label
column (`.meta({ title: 'Null Label' })`).
- The form ↔ Zod reconciliation ledger had excluded the key with the
reason "planned, not yet rendered". The ledger's own rule says such a
row "holds only while the verdict does … delete it and decide the offer
then". So the row is deleted, and the key is offered beside `label`,
which has the same `I18nLabel` type.
- The new row label enters the metadata-form catalogs: en is copied from
the source, and zh-CN `空值标签`, ja-JP `空値ラベル` and es-ES `Etiqueta de
nulos` are authored. That way no locale echoes English, and the dataset
panel's zero-echo pin holds.
- The two catalog census pins count the new label: 677 → 678 translated
leaves and 37 → 38 dataset-form leaves.
- **Changeset.** An `@objectstack/spec` patch
(`.changeset/25330-null-label-live.md`). `Clause-②: no`: the schema,
accept set, served body and error codes are unchanged. Only the ledger
verdict, its advisory and a form column for an already-accepted key
move.
## Pins and ablation
- `metadata-form-zod-reconciliation.test.ts` now requires the form to
offer `dimensions.nullLabel`, because no ledger row excuses it any more.
- **Ablation** (`scripts/ablation-replace.mjs`, under the verify lock):
I replaced the form's `{ field: 'nullLabel', label: 'Null Label' }` with
a comment (anchor ×1 → ×0). The ablated blob is exactly `main`'s
`c0701a46`. The reconciliation test goes **1 failed / 75 passed**:
"dataset.dimensions: accepted by the Zod but unauthorable in the form —
offer it, or add a ledger entry: expected [ 'nullLabel' ] to deeply
equal []". After restoring, the blob equals HEAD and `git diff HEAD` is
empty.
- `check:liveness` resolves the new `producer` symbol anchor in this
repo and attributes the objectui evidence. `nullLabel` no longer opts
into `authorWarn`.
## Verification
All at head `78302ab05f`, base `f0fdd45bbc`.
- `node scripts/pm/dispatch-gates.mjs --commands`: 106 derived families,
all 106 run with exit 0, reconciled with `--ran` (0 UNRUN, 0 NOT
MEASURED). Three were red on the first pass and are fixed in the second
commit:
- `check:liveness`: the count shard was stale.
- `check:i18n`: the new form label was missing from the platform-objects
bundles.
- `check:sdui-lockstep`: the record still named the old pin.
- `pnpm --filter @objectstack/platform-objects test`: 93 files, 1341
tests passed. Its `typecheck` exits 0.
- `pnpm --filter @objectstack/spec exec vitest run
src/system/metadata-form-zod-reconciliation.test.ts src/ui`: 153 files,
5673 tests passed.
- `pnpm --filter @objectstack/spec check:generated`: all 14 artifacts up
to date.
- `node scripts/check-sdui-manifest.mjs`: intact and recorded at the
live pin `1d178e06ac5e`. `pnpm check:console-sha`: exit 0.
## Acceptance notes
- **Other renderers.** objectui's `DatasetReportRenderer` and
`ObjectChart` still draw the null bucket under `chart.nullCategory`
only. The flat table draws a null dimension value as `—`. These are
recorded in the row's note and are not carried here.
- **Pivot.** The objectui reader applies a declared name on a
two-dimension pivot only when both dimensions declare the same one,
because `buildChartSeries` takes one null label for both arms. This is
recorded in the row's evidence.
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_016qAuAwFXMw94v5vFqTVcw2
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 2581efb commit 1000cc7
15 files changed
Lines changed: 62 additions & 25 deletions
File tree
- .changeset
- packages
- platform-objects/src/apps/translations
- sdui-parser
- spec
- liveness
- state-counts
- src
- system
- ui
- scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2039 | 2039 | | |
2040 | 2040 | | |
2041 | 2041 | | |
| 2042 | + | |
| 2043 | + | |
| 2044 | + | |
2042 | 2045 | | |
2043 | 2046 | | |
2044 | 2047 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2039 | 2039 | | |
2040 | 2040 | | |
2041 | 2041 | | |
| 2042 | + | |
| 2043 | + | |
| 2044 | + | |
2042 | 2045 | | |
2043 | 2046 | | |
2044 | 2047 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2039 | 2039 | | |
2040 | 2040 | | |
2041 | 2041 | | |
| 2042 | + | |
| 2043 | + | |
| 2044 | + | |
2042 | 2045 | | |
2043 | 2046 | | |
2044 | 2047 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1212 | 1212 | | |
1213 | 1213 | | |
1214 | 1214 | | |
1215 | | - | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
1216 | 1219 | | |
1217 | 1220 | | |
1218 | 1221 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
62 | | - | |
| 62 | + | |
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| |||
888 | 888 | | |
889 | 889 | | |
890 | 890 | | |
891 | | - | |
| 891 | + | |
| 892 | + | |
892 | 893 | | |
893 | 894 | | |
894 | 895 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2039 | 2039 | | |
2040 | 2040 | | |
2041 | 2041 | | |
| 2042 | + | |
| 2043 | + | |
| 2044 | + | |
2042 | 2045 | | |
2043 | 2046 | | |
2044 | 2047 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
| 9 | + | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
0 commit comments