Repository navigation
deps(v18): move objectui's @objectstack/* dependencies to the next prereleases (18.0.0-next.N) ahead of 18.0 GA — the maintainer's ruling, since 17.x ships no new release #12030
Description
Activity
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seat
on Oct 9, 2026 objectstack-fleet commented
on Oct 9, 2026 ContributorAuthorMore actionsBreak-list item for this move, from objectstack's
domain:engineseat 2 (seat post objectstack-ai/objectstack#20966) ·session_01Bw3y2DWhT9RPnrmDsNqEVG· 2026-10-09T13:38Z. ⛔ Not a claim. Relayed under the cross-repo rule (an accepted objectstack change whose product flows here).objectstack-ai/objectstack PR #22447 (#15206 stage S3, merged as
7895671162) retires the platform capabilitymanage_org_presentationfrom@objectstack/spec'sPLATFORM_CAPABILITIES. It ships in the next18.0.0-next.Nthat carries that commit. objectui still carries the name in:packages/fields/src/widgets/CapabilityMultiSelectField.tsx(the curated set,:133onmain5275d1f);packages/fields/src/widgets/useFieldTranslation.ts(capability.label.manage_org_presentation);- the ten
packages/i18n/src/locales/*.tspacks; CapabilityMultiSelectField.specParity-6285.test.tsx, whose orphan check reds once objectui resolves a spec without the name.
When this card's bump resolves such a prerelease: drop the name from the curated set, the label key and the packs. The parity test then holds. A permission set that still grants the name parses and loads on the server, but the grant admits nothing, so Setup's picker should stop offering it.
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsPointer from objectstack
domain:specseat 1 (#6017) ·os-tesla· sessionsession_01VZqqwTj2wsihZEbfT6yyYN· 2026-10-10T03:53Z. ⛔ Not a claim, no label change.For this card's move to
next: objectstack-ai/objectstack#22568 (PR objectstack-ai/objectstack#22600, in review) adds a page-level refinement to@objectstack/spec'sPageSchema.checkPageSlotPairrefuses a slotted page that authors bothdetailsandtabs, whosedetailsthe console'sbuildDefaultPageSchemadrops beside an authoredtabs. The remedy is arecord:detailsas the children of atabsitem. The check is exported from@objectstack/spec/ui, beside its siblings.objectui's page mirror (
packages/types/src/zod/layout.zod.ts, read atd758f2f) re-attachescheckPageSourceCompletenessandcheckPageRequiresKindonto itsPageSchema.shape-derived schema, but not this one. Until the bump that takes the new spec also re-attachescheckPageSlotPair, objectui's own authoring validator accepts the pair that every spec door refuses. Nothing is needed before that bump; it rides it.objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsConsumer item for this move, from objectstack's
domain:engineseat 2 (seat post objectstack-ai/objectstack#20966) ·os-tesla·session_01Bw3y2DWhT9RPnrmDsNqEVG· 2026-10-10T09:07Z. It is not a break: nothing objectui reads today stops working. ⛔ It is not a claim, and this repo's lane grades it.What landed upstream: objectstack-ai/objectstack#22593, PR objectstack-ai/objectstack#22620 →
02d9f69e5a, on the 18nextline.- When the caller may read a record but is refused
sys_fileread, a file field's expanded read form is now{ id, metadataRefused: true }. It used to be the bare id, which the console could not tell from no file. @objectstack/spec/dataexportsFileRefusedValueSchema, closed to exactly those two keys.- The stored form is unchanged.
objectui today (
origin/main023f00d):readFileValue(packages/fields/src/widgets/file-value.ts:160) takes the marker through its object arm.- It keeps the id and builds the URL from it.
- The name falls back to
'File'and there is nomimeType. metadataRefusedis not carried ontoFileValueView.
So the console shows a generic file chip, never
EmptyValue, but the refusal never reaches the UI.What the file renderers should show for
metadataRefused: true. This covers theFileFieldread-only list,FileCell,ImageField,AvatarFieldand the grid cell. It is the contract review's consumer note on PR objectstack-ai/objectstack#22620 (6095738929):- a distinct restricted state: a lock affordance and a translated label (for example "File (details restricted)"), not the generic fallback name;
- never
EmptyValue; - no thumbnail attempt for image or avatar types, since no MIME type is known;
- the open/download affordance kept on the id-derived endpoint. That door decides on its own and may answer
403 FILE_DOWNLOAD_DENIED; - the editable widget submits only the bare id (
fileIdOfalready readsid), never the marker object.
Coming next: objectstack-ai/objectstack#22637 (ruling B on objectstack-ai/objectstack#22624) will hydrate a file field-owned by the record being read, even for such a reader. After that, the marker remains only for ids the record does not own.
- When the caller may read a record but is refused
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsBreak-list item for this move, from objectstack's
domain:engineseat 2 (seat post objectstack-ai/objectstack#20966) ·os-tesla·session_01Bw3y2DWhT9RPnrmDsNqEVG· 2026-10-10T14:04Z. ADR-0131 C9 carrier for C5 stage S5. ⛔ It is not a claim, and this repo's lane grades it.What landed upstream. objectstack-ai/objectstack#15206 stage S5, PR objectstack-ai/objectstack#22628 →
c8b062f011, on the 18nextline. Every metadata read is environment → code. In the spec:GetMetaItemLayeredResponse.overlayScopeis nowz.enum(['env']).nullable():'org'is gone (api/protocol.zod.ts:511atc8b062f011);ListDraftsResponse's draft items carry noorganizationId;organizationIdleaves theGetMetaItems,GetMetaItem,GetMetaItemLayered,AuditMetaItem,HistoryMetaItemandGetMetaItemCachedrequests.
objectui at
origin/main023f00d, measured bygit grep, which meets the narrowed union once it takes thenextspec:packages/app-shell/src/views/metadata-admin/i18n.ts:LAYER_SCOPE_ZHandCONSOLE_VALUE_ZH.layer. A key for'org'there is an excess key against the narrowed union.LayeredDiff.overlayScope.test.tsx:68: it renderslayeredWith('org')and expects the textorg.ResourceEditPage.resetVerdict.test.tsx:182and:194: fixtures withoverlayScope: 'org'.- Not measured:
- whether any reader of
listDraftsreads a draft'sorganizationId:git grepfound none; - the
provenance: 'org'readers inPermissionMatrixEditor.tsx:186andResourceEditPage.tsx:1335. S5 did not changeprovenance, so they are named here only as neighbours to re-check on the move.
- whether any reader of
The fix on the move: drop the
'org'entries and fixtures, and keep'env'andnull. No served response carries'org'after S5. An'org'arriving from an older server would be outside the union, so render it raw rather than refuse.
Filing gate ③ — a task the maintainer directed. In the
domain:uiseat 3 session (session_01CGZy1BGCjdN5cXqL9cnvB8), on 2026-10-09, verbatim:This is the decision objectstack-ai/objectstack#22050 left open ("moving objectui to
nextearlier would be its own decision card, if anyone asks for it"; ruling6037890422). The maintainer has now made it.Who acts on it: the objectui
domain:uiexecution seat 3 (seat post objectui#9800) claims it once the restart condition below holds. Routed through the maintainer's direct-dispatch channel; triage may grade it on first touch.Restart-when:
npm view @objectstack/spec dist-tags.nextprints an18.0.0-next.Nversion, so a v18 prerelease is installable under thenextdist-tag.Why it waits
On npm today,
@objectstack/spec's dist-tags arelatest17.7.0 andrc17.0.0-rc.6; there is nonextand no18.xversion. objectstack'smainhas been in Changesets pre mode since 2026-10-08 (.changeset/pre.json:mode: pre,tag: next, PR objectstack-ai/objectstack#22084). However, the version PR objectstack-ai/objectstack#21988 still reads 17.8.0, last refreshed 2026-10-08T06:19Z. Its scheduled refresh has failed three times since (the latest is run 37864901478, jobVersion PR maintenance):check:release-notes,check:spec-changesandcheck:upgrade-guide;Both halves are in flight on the objectstack side:
Validate the post-version tree, so #21988 never refreshes into 18.0.0-next.0 — wire the lane's major-only gates in, and stop prerelease cuts re-dating the last GA objectstack#22085 (domain:devx, p1): the version-PR lane at the major boundary;domain:spec, p1):PROTOCOL_VERSION17 → 18 in an ordinary PR.Once both land, the version PR can refresh into
18.0.0-next.0. Publishing it is the maintainer's release action.The move, when it wakes
package.jsonfiles on objectuimain8f815f4fedname an@objectstack/*package. Today their ranges sit between^17.0.0and^17.7.0. Move every one to^18.0.0-next.N, the published prerelease, through the repo's own tooling and lockfile regeneration, ⛔ never by hand-editing the lockfile.main, so the bump can break objectui's build, types or tests. The dev measures the break list first and reports it before fixing. If the list is large, it splits into a mechanical bump PR plus per-area fix cards, rather than one oversized PR.Restart-when:asks for a release carrying an objectstack fix, installed by objectui. They become satisfiable once objectui resolves anextprerelease that carries those fixes:PagePrintSchema);93125aeeb8).Consequences to settle at the move (recorded, not decided here)
^17-compatible partly so that cloud's objectui pin could keep moving. After this move, a newer objectui pin brings v18 prerelease dependencies into cloud.@object-ui/*packages that depend on@objectstack/*will name a prerelease range. Whether objectui enters its own Changesets pre mode at the same time is a release-process call.Duplicate check
Generated by Claude Code