Repository navigation
fix(spec): a dataset dimension's nullLabel is live; move the objectui pin past its reader - #25437
Conversation
… pin past its reader The console now draws a dataset chart's null bucket under the name its dimension declares. objectstack#25402 carries the name on the answer's column descriptor as `fields[].nullLabel`, and objectui#13354 reads it, so: - `.objectui-sha` moves 5fef032b1ada -> 1d178e06ac5e (objectui#13354's merge), with the regenerated SDUI manifest record and the console changeset the bump writes. - `liveness/dataset.json` re-grades `dimensions[].nullLabel` planned -> live, measured at that pin: evidence objectui DatasetWidget#declaredNullCategoryLabel, producer service-analytics enrichResultColumns. `authorWarn` goes with the flip. - The dataset form's Dimensions repeater offers the Null Label column, and the reconciliation ledger's planned-only omit row for it is deleted, as that ledger prescribes once the verdict moves. Claude-Session: https://claude.ai/code/session_016qAuAwFXMw94v5vFqTVcw2 Co-authored-by: Claude <noreply@anthropic.com>
- packages/sdui-parser/objectui-lockstep.json re-recorded at the new pin 1d178e06ac5e (check:sdui-lockstep). - liveness/state-counts/dataset.md regenerated: dataset is 28 live, 0 planned. - The dataset form's new Null Label row label enters the metadata-form catalogs (en from the source; zh-CN 空值标签, ja-JP 空値ラベル, es-ES Etiqueta de nulos), and the two catalog census pins count it: 677 -> 678 translated leaves, 37 -> 38 dataset-form leaves. Claude-Session: https://claude.ai/code/session_016qAuAwFXMw94v5vFqTVcw2 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 3 package(s): 1 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not see
Coarse fallback — 144 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin d2878dda9cbd5a5db0cd4d9044ccf2bc11eca3fd && git checkout d2878dda9cbd5a5db0cd4d9044ccf2bc11eca3fd
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 77392e901cce58316e803144971f2741ef049fc4 78302ab05f8b1c5841514020b67133d87c0e7d41 && git checkout -B drift-repro 77392e901cce58316e803144971f2741ef049fc4 && git merge --no-ff 78302ab05f8b1c5841514020b67133d87c0e7d41
node scripts/docs-audit/affected-docs.mjs --json 77392e901cce58316e803144971f2741ef049fc4
|
|
Overlap note, no objection: #25430 (pin move for the 18.1.0 cut) also moves Neither pin greens If this PR lands first, #25430 merges it and moves on from Generated by Claude Code |
席位核对ACCEPT ·
Generated by Claude Code |
|
Follow-up to the overlap note: the other Generated by Claude Code |
…8e06ac5e → 6fb31dcc9954 (#25430) #25437 landed first with its own pin move and console changeset over 5fef032b1ada..1d178e06ac5e. The conflicted .objectui-sha and both records take main's side, then scripts/bump-objectui.sh re-runs to 6fb31dcc9954, so this branch's console changeset now covers 1d178e06ac5e..6fb31dcc9954 only, and the SDUI manifest record and lockstep record are regenerated from a fresh console build at the pin. Claude-Session: https://claude.ai/code/session_01CBtjEGZifSHGenaRcRBKYb Co-authored-by: Claude <noreply@anthropic.com>
Requested by Tesla · project thread
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:
830a63a6) carries a dataset dimension'snullLabelon the answer's column descriptor asfields[].nullLabel. It also names System Overview's null user bucket "System".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
.objectui-shamoves from5fef032b1adato1d178e06ac5ebyscripts/bump-objectui.sh. It brings five objectui commits in. Their six changesets are digested into.changeset/console-1d178e06ac5e.mdas an@objectstack/consolepatch.pnpm objectui:buildran, andnode scripts/gen-sdui-manifest-node.mjsre-recordedscripts/sdui-manifest.record.json. The manifest itself is byte-identical: 107 components.pnpm gen:sdui-lockstepre-recordedpackages/sdui-parser/objectui-lockstep.jsonwith the objectui checkout parked on the pin. objectui's parser region did not change.liveness/dataset.jsonmovesdimensions[].nullLabelfromplannedtolive. It was measured at the pin, following the shape ofrunAction(Flip the navrunActionliveness-ledger row tolive— the objectui half landed, and it needs TWO evidence pointers, not one #10068) andprint(spec liveness: the console pin hop to objectui 1f23d5b070fa makespage.printandtranslation.flows.successMessage/errorMessagereadplannedwhile the shipped console applies them (family card; theparentDataSourceleg is #23585) #23710).cross-repo, objectui @1d178e06ac5e):packages/plugin-dashboard/src/DatasetWidget.tsx#declaredNullCategoryLabel. It reads the category dimension'sfields[].nullLabel, and the widget passes it as the chart'snullCategoryLabel, ahead ofchart.nullCategory.packages/services/service-analytics/src/analytics-service.ts#enrichResultColumns. It resolves the dimension'snullLabelat the request locale and writes it onto the column descriptor, which is the second input the reader depends on.authorWarnandauthorHintgo with the flip, soos lintstops telling an author that nothing draws the bucket. Thestate-counts/dataset.mdshard is regenerated: 27 live / 1 planned becomes 28 live / 0 planned..meta({ title: 'Null Label' })).label, which has the sameI18nLabeltype.空值标签, ja-JP空値ラベルand es-ESEtiqueta de nulosare authored. That way no locale echoes English, and the dataset panel's zero-echo pin holds.@objectstack/specpatch (.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.tsnow requires the form to offerdimensions.nullLabel, because no ledger row excuses it any more.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 exactlymain'sc0701a46. 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 andgit diff HEADis empty.check:livenessresolves the newproducersymbol anchor in this repo and attributes the objectui evidence.nullLabelno longer opts intoauthorWarn.Verification
All at head
78302ab05f, basef0fdd45bbc.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. Itstypecheckexits 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 pin1d178e06ac5e.pnpm check:console-sha: exit 0.Acceptance notes
DatasetReportRendererandObjectChartstill draw the null bucket underchart.nullCategoryonly. The flat table draws a null dimension value as—. These are recorded in the row's note and are not carried here.buildChartSeriestakes one null label for both arms. This is recorded in the row's evidence.🤖 Generated with Claude Code
https://claude.ai/code/session_016qAuAwFXMw94v5vFqTVcw2