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
When the @objectstack/spec pin moves to 17.3: PR #7510 / #7520's comment "repairs" become FALSE — rows and options[].description are now declared keys #7635
Filed by the domain:ui execution seat (#5560, PM session session_01KbJQ1y1J12nZxYzFWhP8Q3, login os-sam) after the maintainer reported that @objectstack/spec 17.3 has shipped. ⛔ Recording, not claiming.
The repo is still on 17.2.0 — so nothing is broken today
Measured on origin/main0b24d7f8:
pnpm-lock.yaml resolves @objectstack/spec to 17.2.0 everywhere — 57 occurrences of 17.2., zero of 17.3.. CI and every dev worktree install 17.2.0.
But every declared range is a caret — ^17.0.0 (most packages), ^17.1.0 (plugin-detail), ^17.2.0 (core, data-objectstack). 17.3.0 satisfies all of them, so the bump is a lockfile change that a pnpm update or a dependabot PR lands at any time.
⇒ This card is the bump-blocked work, in the shape #7122 already uses for this class.
⭐ The defect the bump creates
@objectstack/spec17.3.0, changelog entry 86e765a — "rows and options[].description become declared, authorable field-metadata keys" (objectui#6140 / objectui#6153, maintainer ruling 2026-08-25, Option A, verbatim 「就全部接受,然后继续下一批」):
rows?: number is now declared on textarea / markdown / html / richtext. The changelog names objectui as the consumer that was already reading it: RichTextField reads richField?.rows || 8, TextAreaField reads textareaField?.rows || 4.
description?: string is now declared on SelectOptionSchema. Again objectui is named as the existing consumer: LookupField searches opt.description on a lookup's authored static options, and recordToOption produces the same key.
Both were consumed-but-undeclared — "real behaviour in the running app… while the strict publish door refused exactly the author who wrote them legally." The ruling declares them. Additive: nothing legal changes meaning.
Why that makes shipped comments false
PR #7510 and PR #7520 "repaired" three comments by rewriting them to assert the spec refuses those keys. Two of the three are exactly these keys. Under 17.3 the repaired prose asserts the opposite of the contract:
repaired comment now says
17.3 says
SelectOptionSchema is .strict() and spells five keys, none of them description — a description on an option 422s the whole field
description is a declaredSelectOptionSchema key
rows is not a field key at all
rows is declared on the four multiline editor types
⭐ This is the same defect class that PR #7617 landed a gate for this morning — a comment teaching a rule the contract does not hold — pointing the other way. Its own header records the measurement as version-stamped (1bae75bb against @objectstack/spec@17.2.0), which is exactly the discipline that makes this card findable rather than a surprise.
⚠️check:spec-symbols will NOT catch it. Its member-granularity rule flags a citation naming a key the symbol does not declare; under 17.3 these citations name keys it does declare, so they pass. The falsehood is in the surrounding prose, which no gate reads. The scripts/__tests__ red/green fixtures are insulated too — they supply their own hand-written SPEC_MEMBERS map precisely so the pair is judged against a fixed spec rather than the installed one. ⇒ Nothing goes red. The prose just quietly becomes wrong.
What a round would need to decide (⛔ not proposing a disposition)
Whether the two comment sites are re-repaired (say the keys are declared, and by which types) or deleted — they exist to warn about a refusal that stops existing.
Whether RichTextField / TextAreaField / LookupField gain anything from the declaration, or whether the objectui half is prose-only. ⚠️ The changelog says the ruling's capability expansion STOPS at rows — the four inert rich-text keys (toolbar / preview / minHeight / maxHeight) stay undeclared with a pin holding that door shut. ⛔ Do not widen.
⚠️dependsOn is deliberately NOT declared — the canonical field-level depends_on already exists, "and the widget-side spelling fix rides the objectui half." That is an objectui obligation named by the spec's own ruling and is not covered by this card.
✅ One landed PR that the bump does NOT break — recorded so nobody "fixes" it
Changelog c459da6 narrows the per-option default key out of the form-view options vocabulary, via a new FormSelectOptionSchema (an Omit of SelectOptionSchema minus default). The object-field face is explicitly "ENFORCED and UNTOUCHED".
PR #7629 (#7540, merged 09:28Z today) works on ObjectFieldInspector — the object-field face — so its probe table and its default-preservation behaviour remain correct under 17.3. ⚠️ But its prose, and my review of it, say "SelectOptionSchema accepts default" without naming the face. Under 17.3 there are two faces and only one accepts it; a reader re-deriving that claim on the form-view face would measure a refusal and think the PR wrong. Worth one sentence of disambiguation whenever that file is next touched.
Not measured
⛔ I did not run the 17.3 schema against this repo — the repo does not install it yet. Everything above is read from @objectstack/spec's own CHANGELOG.md on objectstack main (c64e65fb, packages/spec/package.json = 17.3.0). The FieldSchema / objectName / SelectOptionSchema hit counts across the 17.3.0 section were taken to bound the blast radius (DashboardSchema, ComponentInput, displayField, lookupFilters all read 0), with ActionSchema (11) as the lit control. Whoever takes this card should re-measure against the installed 17.3 rather than trust the changelog.
Filed by the
domain:uiexecution seat (#5560, PM sessionsession_01KbJQ1y1J12nZxYzFWhP8Q3, loginos-sam) after the maintainer reported that@objectstack/spec17.3 has shipped. ⛔ Recording, not claiming.The repo is still on 17.2.0 — so nothing is broken today
Measured on
origin/main0b24d7f8:pnpm-lock.yamlresolves@objectstack/specto17.2.0everywhere — 57 occurrences of17.2., zero of17.3.. CI and every dev worktree install 17.2.0.^17.0.0(most packages),^17.1.0(plugin-detail),^17.2.0(core,data-objectstack). 17.3.0 satisfies all of them, so the bump is a lockfile change that apnpm updateor a dependabot PR lands at any time.⇒ This card is the bump-blocked work, in the shape #7122 already uses for this class.
⭐ The defect the bump creates
@objectstack/spec17.3.0, changelog entry86e765a— "rowsandoptions[].descriptionbecome declared, authorable field-metadata keys" (objectui#6140 / objectui#6153, maintainer ruling 2026-08-25, Option A, verbatim 「就全部接受,然后继续下一批」):rows?: numberis now declared ontextarea/markdown/html/richtext. The changelog names objectui as the consumer that was already reading it:RichTextFieldreadsrichField?.rows || 8,TextAreaFieldreadstextareaField?.rows || 4.description?: stringis now declared onSelectOptionSchema. Again objectui is named as the existing consumer:LookupFieldsearchesopt.descriptionon a lookup's authored static options, andrecordToOptionproduces the same key.Both were consumed-but-undeclared — "real behaviour in the running app… while the strict publish door refused exactly the author who wrote them legally." The ruling declares them. Additive: nothing legal changes meaning.
Why that makes shipped comments false
PR #7510 and PR #7520 "repaired" three comments by rewriting them to assert the spec refuses those keys. Two of the three are exactly these keys. Under 17.3 the repaired prose asserts the opposite of the contract:
SelectOptionSchemais.strict()and spells five keys, none of themdescription— adescriptionon an option 422s the whole fielddescriptionis a declaredSelectOptionSchemakeyrowsis not a field key at allrowsis declared on the four multiline editor types⭐ This is the same defect class that PR #7617 landed a gate for this morning — a comment teaching a rule the contract does not hold — pointing the other way. Its own header records the measurement as version-stamped (
1bae75bbagainst@objectstack/spec@17.2.0), which is exactly the discipline that makes this card findable rather than a surprise.check:spec-symbolswill NOT catch it. Its member-granularity rule flags a citation naming a key the symbol does not declare; under 17.3 these citations name keys it does declare, so they pass. The falsehood is in the surrounding prose, which no gate reads. Thescripts/__tests__red/green fixtures are insulated too — they supply their own hand-writtenSPEC_MEMBERSmap precisely so the pair is judged against a fixed spec rather than the installed one. ⇒ Nothing goes red. The prose just quietly becomes wrong.What a round would need to decide (⛔ not proposing a disposition)
RichTextField/TextAreaField/LookupFieldgain anything from the declaration, or whether the objectui half is prose-only.rows— the four inert rich-text keys (toolbar/preview/minHeight/maxHeight) stay undeclared with a pin holding that door shut. ⛔ Do not widen.dependsOnis deliberately NOT declared — the canonical field-leveldepends_onalready exists, "and the widget-side spelling fix rides the objectui half." That is an objectui obligation named by the spec's own ruling and is not covered by this card.✅ One landed PR that the bump does NOT break — recorded so nobody "fixes" it
Changelog
c459da6narrows the per-optiondefaultkey out of the form-view options vocabulary, via a newFormSelectOptionSchema(anOmitofSelectOptionSchemaminusdefault). The object-field face is explicitly "ENFORCED and UNTOUCHED".PR #7629 (#7540, merged 09:28Z today) works on⚠️ But its prose, and my review of it, say "
ObjectFieldInspector— the object-field face — so its probe table and itsdefault-preservation behaviour remain correct under 17.3.SelectOptionSchemaacceptsdefault" without naming the face. Under 17.3 there are two faces and only one accepts it; a reader re-deriving that claim on the form-view face would measure a refusal and think the PR wrong. Worth one sentence of disambiguation whenever that file is next touched.Not measured
⛔ I did not run the 17.3 schema against this repo — the repo does not install it yet. Everything above is read from
@objectstack/spec's ownCHANGELOG.mdon objectstackmain(c64e65fb,packages/spec/package.json=17.3.0). TheFieldSchema/objectName/SelectOptionSchemahit counts across the 17.3.0 section were taken to bound the blast radius (DashboardSchema,ComponentInput,displayField,lookupFiltersall read 0), withActionSchema(11) as the lit control. Whoever takes this card should re-measure against the installed 17.3 rather than trust the changelog.