You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 0a70bdb
Browse filesBrowse the repository at this point in the historyBrowse files
fix(spec): stageField describe states only what the parse refuses; changeset names platform-objects and metadata-core; FLS contract fixture declares kind
Copy file name to clipboardExpand all lines: .changeset/23809-select-option-kind.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,7 @@
1
1
---
2
2
'@objectstack/spec': minor
3
+
'@objectstack/platform-objects': patch
4
+
'@objectstack/metadata-core': patch
3
5
---
4
6
5
7
feat(spec)!: a select option declares its lifecycle `kind` (`open` / `won` / `lost`), and every option of an object's `stageField` must declare it
@@ -24,4 +26,9 @@ No conversion makes this edit, because which option ends a record's life success
24
26
25
27
The Studio object designer's options repeater offers `kind`; the field form's options repeater lists it.
26
28
29
+
The other packages follow the new key:
30
+
31
+
-**`@objectstack/platform-objects`.** The metadata-form translation bundles (`./metadata-translations`) carry the options repeater's new `kind` row, with its label and help text in zh-CN, ja-JP and es-ES.
32
+
-**`@objectstack/metadata-core`.** The published contract fixture `FLS_CONTRACT_OBJECT` (`@objectstack/metadata-core/testing`) names `salary_grade` as its `stageField`, so its two options now declare `kind: 'open'` and the fixture still parses through `ObjectSchema`.
* path/stepper today; kanban default grouping, list badges and report
2886
2886
* bucketing are natural future consumers.
2887
2887
*
2888
-
* [#23809] The named field is a single-value `select` / `radio` whose inline
2889
-
* options EACH declare their lifecycle `kind` (`open` / `won` / `lost`), so
2890
-
* those consumers tell the steps from the two ends by declaration, not by
2891
-
* the value's spelling. Refused at parse otherwise — see
2892
-
* `refuseStageFieldWithoutKinds`.
2888
+
* [#23809] When the named field carries options, it must be a single-value
2889
+
* `select` / `radio` whose inline options EACH declare their lifecycle `kind`
2890
+
* (`open` / `won` / `lost`), so those consumers tell the steps from the two
2891
+
* ends by declaration, not by the value's spelling. The parse refuses such a
2892
+
* field with an option lacking `kind`, a `picklist`-backed one, and a
2893
+
* multi-value one (see `refuseStageFieldWithoutKinds`). Not judged here:
2894
+
* `false`, a name that resolves to no declared field (the lint
2895
+
* `semantic-roles` rule reports it), and a field with no options at all.
2893
2896
*/
2894
-
stageField: z.union([z.string(),z.literal(false)]).optional().describe("[ADR-0085] Lifecycle stage field (linear/ordered), or false to declare the status field non-linear and suppress stage heuristics. Absent = heuristic detection allowed. The named field is a single-value `select` / `radio` with inline `options`, and every option declares its `kind` ('open' / 'won' / 'lost'); refused otherwise."),
2897
+
stageField: z.union([z.string(),z.literal(false)]).optional().describe("[ADR-0085] Lifecycle stage field (linear/ordered), or false to declare the status field non-linear and suppress stage heuristics. Absent = heuristic detection allowed. When the named field carries options, it must be a single-value `select` / `radio` with inline `options`, each declaring its `kind` ('open' / 'won' / 'lost'); a picklist-backed or multi-value stage field is refused. A name that resolves to no declared field, or a field with no options, is not judged at parse."),
2895
2898
2896
2899
/**
2897
2900
* Cross-renderer EDIT-INTERACTION intent: whether a record of this object is
0 commit comments