Repository navigation
docs(analytics): key the label-resolution prose on the field carrying options, not on the select type - #18909
Merged
Conversation
…ng field, not the `select` type
Both bullets named `select` as the option arm's trigger. The resolver keys on
the field carrying a non-empty `options` list instead — `dimension-labels.ts`
tests `Array.isArray(meta.options) && meta.options.length > 0` at all three
sites and never tests `type === 'select'`. A `radio` axis therefore resolves a
label while the docs said it did not.
The prose now names the property the implementation names ("carries `options`")
rather than growing a type enumeration. An enumeration would be wrong in both
directions: `options` is an untyped optional key on the field schema, and
`MULTI_OPTION_TYPES` includes the free-form `tags`, which need not declare
options at all.
Claude-Session: https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk
Co-authored-by: Claude <noreply@anthropic.com>
os-try-charles
marked this pull request as ready for review
September 18, 2026 06:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #18475
Both docs sentences named
selectas what makes the analytics label-resolutionoption arm fire. The implementation keys on the field carrying options
instead, so a
radioaxis resolves its label while the docs said it did not.The measurement
packages/services/service-analytics/src/dimension-labels.ts, read on thisbranch at
84ba4a847(identical toorigin/mainat dispatch):The firing control is taken from the probed file itself and reads 0 there;
it appears nowhere in this diff, which touches only
content/docs/**.Why a property, and not a type list
The card left open whether an option-side noun exists or whether the prose
must grow a type enumeration. Two readings settle it against the enumeration:
optionsis an ordinary optional key on the field schema(
packages/spec/src/data/field.zod.ts:1228) — it is not gated on type,so a field of any type that carries options enters the arm.
MULTI_OPTION_TYPES(packages/spec/src/data/field-value.zod.ts:145)includes
tags, which that file documents as free-form. Atagsfieldneed not declare
optionsat all.So an enumeration would be wrong in both directions: it would over-claim on
tagsand under-claim on anything else carrying options. Naming the propertythe implementation names is the only formulation that matches the resolver, and
it is the same move the sibling half took — name what the implementation already
names rather than growing a list.
What this deliberately does not say
The prose states what makes the arm fire, and stops there. It does not
assert a per-type outcome — in particular it does not claim what a multi-valued
stored value resolves to. That behavioural question is named by the card as a
different question it did not measure, and it stays unmeasured here.
Scope held to the two sentences.
packages/services/service-analytics/**andevery schema are untouched: the resolver accepts the wider set and is correct;
narrowing it would shrink a published accept set, which is another class of
change entirely.
Acceptance notes
content/docs/releases/v9.mdxandcontent/docs/releases/v17/17-0.mdxcarrythe same
select-only phrasing. Release-owned and never edited in a code PR;they are also accurate as historical records of what those releases said.
Noted, not filed.
dimension-labels.ts(:8) describes the same arm asselect only, one layer up from the two sentences repaired here. Out of the
file surface this PR was dispatched with, so it is reported rather than
touched. Dedupe words:
dimension-labels header,module doc comment select,option arm prose,service-analytics tsdoc. The seat disagreed with thenoted-not-filed grading and filed it separately; it is now tracked on its own
card, [finding] the dimension-labels module header names the option arm as
select, where the resolver keys on a declaredoptionslist #18923 (named without a closing keyword on purpose — this PR does notdeliver it). Nothing in this PR waits on it.
content/docs/data-modeling/import-mappings.mdxnamesselect / multiselectfor label-to-value resolution on import. That is the opposite direction
through a different subsystem, not this arm. Noted, not filed.
Verification
No changeset: measured, nothing published moves. No package's
files[]mentions
content/docs(0 of the workspace manifests); its only consumer@objectstack/docsisprivate: true. Positive control: the same readerreturns
@objectstack/spec's non-emptyfiles[], so the absence is a readingand not a broken probe.
Generated by Claude Code
Generated by Claude Code