Repository navigation
chore(deps): move @objectstack/* to 18.0.0-next.1 and follow its contract (objectui#12370) - #12381
Conversation
40 ranges in 32 manifests; pnpm-lock.yaml regenerated by pnpm install. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
…#12338) Since @objectstack/spec 18.0.0-next.1 a page action row with no executor refuses onSuccess; the row the remedy lands on gives the hop an executor. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
Each restamped sentence's fact was re-parsed against next.1 with next.0 as control (same verdict on both); the eager-closure baseline sentence names the tree it was measured on and is ledgered historical. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
- held-public-block-arms: the four action rows now carry ActionSchema's onSuccess block, whose openIn default the import boundary strips, so the arm holds the bounded row (objectui#8317), not the row itself. - gridDataInputContract: ViewData's api provider is retired upstream; three providers parse and api is refused. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
…reference pins - spec-subschema-parity: ViewDataSchema has no imported default left once the api provider is retired, so it is the raw spec object. - check-lockfile-integrity: samples re-keyed onto the next.1 snapshot keys. - QUICK_REFERENCE.md re-synced by scripts/sync-quick-reference-release.mjs. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
…ata pins - registry-inputs-spec-parity: record:related_list.parentDataSource, which next.1 declares as planned and not yet rendered, is booked unpublished to the card that wires it (objectui#12294). - objectTreeInputs: the spec row refuses the retired api provider; a stored one still draws nothing. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
…onentViewData (objectui#12370) next.1 adds checkPageComponentViewData to PageSchema: a view-data component under regions or slots whose properties.data names the retired api provider is refused at that properties.data.provider. PageNodeSchema and PageKindNodeSchema re-attach it as they do the other three page checks (objectui#7715 ruling B1). Without it a slotted page's object-grid naming api passed objectui's faces while the spec refused it; region children were already refused by the component union. Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: Inputs read: card #12370 (body, claim ① Derived judgmentsEach accept-set or public-surface change the diff implies, judged against the cards and the head's gates:
Nothing in the diff widens an accept set. Every narrowing is the installed spec's, reached by reference, and each is pinned at the objectui face by a test in this diff or an existing identity pin. ② Semver level
The level matches what the diff publishes under this repo's policy: a prerelease-floor move plus spec-following narrowings on the 18 prerelease line, the same shape #12030 shipped as
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #12370
Clause-②: yes — next.1 narrows
@object-ui/typesaccept sets that parse through the spec's own page action rows and view data schema; the table under "Clause-② accept-set moves" lists each, with a parse that flips (next.0 ACCEPT, next.1 REJECT) on both public faces.Fixes #12338
Scope: move objectui's
@objectstack/*from18.0.0-next.0to18.0.0-next.1and follow its contract, by the method objectui#12030 used (measure, then follow). The six held follow-ups that wait on this release (objectui#12326, objectui#12294, objectui#12335, objectui#12349, objectui#12329, objectui#12195) are not done here; only #12338's row rides, as its card directs.What this does
npm view @objectstack/spec@next versionanswers18.0.0-next.1(dist-tagsnext: 18.0.0-next.1,latest: 17.7.0); the release tag@objectstack/cli@18.0.0-next.1peels to objectstack0c52e43075.@objectstack/*range moves from^18.0.0-next.0to^18.0.0-next.1, uniformly as objectui#12030 did: 40 ranges in 32 manifests, edited textually;pnpm-lock.yamlregenerated bypnpm installonly (9918.0.0-next.1keys, 0next.0left).pnpm install --frozen-lockfileexits 0 afterwards.mainmerged twice (8992522, after objectui#12371 landed as0a19a68;94b542a, afterd78e70b). Neither merge touched a manifest or the lockfile.The break list (measured on next.1, control on next.0)
Full suite in four lock-held quarters (
pnpm exec vitest run --shard=K/4), on the heads named: shard 1 atbd55fee2 files red / 1261 passed; shard 2 at89925224 / 1256; shard 3 at272a2691 / 1263; shard 4 at08331ae3 / 1260. Negative control: the nine red files as they stand onmain2d8450e, installed18.0.0-next.0, run under the same lock:Test Files 9 passed (9),Tests 505 passed (505). After the fixes, the same files plus the ones touched since, on76afe66(next.1):Test Files 12 passed (12),Tests 571 passed (571).packages/types/src/__tests__/held-public-block-arms-10872.test.ts— the flat-onSuccess remedy row (#12338)1623fafc(objectstack#23331): a page action row'sonSuccessis refused beside a built-in other than api / script, and beside no executoractionType: 'api'with atarget, as the card prescribes4d1e4a80(objectstack#23164): the row'sonSuccessisActionSchema's own block, whoseopenIncarries.default('self')stripImportedDefaults(row)(memoised) and asserts the rebuild happens only on the four action rowspackages/plugin-grid/src/__tests__/gridDataInputContract.test.ts— four providers parse1912af47(objectstack#23160): the view-levelapidata source is retiredapiis refused (its readers already left with objectui#12325)packages/plugin-tree/src/__tests__/objectTreeInputs-11168.test.tsx— api provider accepted1912af47packages/types/src/__tests__/spec-subschema-parity.test.ts— ViewDataSchema carried an imported default1912af47: the api provider's request block was where the default livedapps/console/src/__tests__/registry-inputs-spec-parity.test.ts—record:related_listpublishes every declared key4cc3ff9d(objectstack#23205): declaresparentDataSource, described "[PLANNED — not yet rendered]"UNPUBLISHED_EXEMPTIONSwith that card as owner; no renderer here reads the key (git grep parentDataSource -- packagesis empty)scripts/__tests__/check-lockfile-integrity.test.tsscripts/__tests__/quick-reference-current-release-4143.test.ts,sync-quick-reference-release.test.tsQUICK_REFERENCE.mdre-synced bynode scripts/sync-quick-reference-release.mjsscripts/__tests__/ci-cd-pipeline-doc.test.ts— live-e2e pine2e/live/ci/backend.envOBJECTSTACK_VERSION=18.0.0-next.1(tag resolves, peeled0c52e430)scripts/__tests__/check-object-metadata-write-doors.test.ts— 15 s timeout in shard 4check:installed-pin-claims— 22 findings, 30 sitesSelectOptionSchema,FieldSchema,CalendarConfigSchema,ComponentPropsMaprows for object-calendar / object-kanban / object-grid / record:details / record:alert,RecordHighlightsProps, and the lint and automation dist text), then restamped; thecheck-eager-closure-budget.mjssentence names the tree it measured (5488ae7) and is ledgeredhistoricalpnpm build(turbo, all but the site) 43/43 andpnpm type-check81/81 on76afe66; after the second merge,type-checkof app-shell and plugin-grid 31/31 and the ten test files that merge brought 177/177 on94b542a.Clause-② accept-set moves (
@object-ui/types)Measured through
safeValidateSchema(tolerant) andStrictAnyComponentSchema(strict), same documents,maintree on next.0 vs this branch on next.1 (tsxprobe overpackages/types/src/zod/index.zod.ts). Every row reads the same on both faces.propertiesshown)action:button/action:iconwithonSuccessand no executorcustomatproperties.onSuccess1623fafcaction:buttonwithactionTypeurl,modalorflowandonSuccesscustomatproperties.onSuccess1623fafcaction:groupmembertype: 'url'withonSuccesscustomatproperties.actions.0.onSuccess1623fafcaction:buttonwithactionType: 'navigation'customatproperties.actionType4d1e4a80action:groupmembertype: 'navigation'customatproperties.actions.0.type4d1e4a80action:buttononSuccesswith a key besidesnavigate/openInunrecognized_keysatproperties.onSuccess4d1e4a80action:buttonoperation: 'update'withonSuccesscustomatproperties.onSuccess775ed65eaction:buttonname: 'url',target: 'tasks list'customatproperties.targetb529a5c2object-griddata: { provider: 'api', read }invalid_unionatproperties.data.provider1912af47page(or a page-kind node) withkind: 'slotted'andslots.details: [{ type: 'object-grid', properties: { objectName: 'task', data: { provider: 'api', read: { url: '/api/rows' } } } }]customatslots.details.0.properties.data.provider(the spec's own message)05ab9ef8(objectstack#23419,checkPageComponentViewData)Added in the patch round (
d9eb32a). ThecheckPageComponentViewDatarow was measured throughPageNodeSchemaandsafeValidateSchema. The same document withdata: { provider: 'object', object: 'task' }stays ACCEPT on both versions, and the spec'sPageSchemagives the same verdicts. A region child with theapiprovider already flips through theobject-gridrow above.PageNodeSchema/PageKindNodeSchemaattach the check by the spec's own export, as they attach the other page checks.Controls that stay ACCEPT on both:
actionType: 'api'+target+onSuccess; a host handler (actionType: 'run') or a barenamewithonSuccess;actionType: 'url'withoutonSuccess;operation: 'update'withoutonSuccess; anaction:menumembertype: 'api'withonSuccess;object-griddata: { provider: 'object' }.Exports: none added or removed.
ViewDataSchema(exported) becomes reference-equal to the spec's object, since next.1 leaves it nothing to strip; its accept set is the row above.Changeset
.changeset/pre.jsonis absent onmain(objectui#12334 has not landed), so no prerelease mode is in play..changeset/12370-spec-next-1.mddeclares the 22 packages objectui#12030 declared, plus the console and runner bundles, allminor(nevermajor), stating the range move and the accept-set narrowing above; it rides the next release with objectui#12030's entries. Two clauses in objectui#12030's pending changesets that namenext.0as the floor now saynext.1.check-changeset-presence✅,check-changeset-no-major✅,check:changeset-claims✅,check:pending-changeset-literals✅.Gates (exit codes,
76afe66unless noted)pnpm install --frozen-lockfile0 · build 0 (43/43) · type-check 0 (81/81) · full suite: four quarters as above, red sites all closed and re-run green ·check:phantom-deps0 ·check:self-import0 ·check:unreferenced-sources0 ·check:doc-example-readers0 ·check:handler-key-reads0 ·check:side-effects-array0 ·check:element-data-source-declaration0 ·check:spec-symbols0 ·check:action-forward-parity0 ·check:designer-field-key-parity0 ·check:icon-record-names0 ·check:i18n-keys0 ·check:i18n-drift0 ·check:i18n-designer-parity0 ·check:installed-pin-claims0 (at94b542atoo) ·check:lockfile-integrity0 ·check:control-bytes0 ·node scripts/check-changeset-fixed.mjs0.check:spec-floorsexits 1 with "The scan collapsed: 0 package(s) declare @objectstack/spec in a consumer-facing field" on this branch and, identically, onmain2d8450e: the bump does not change it (objectui#12334 owns it).pnpm lint). Narrowed and measured:eslint --no-inline-config --format jsonover the 34 changed.ts/.tsx/.mjsfiles reports 34 files, 0 errors;eslint.config.jssets noparserOptions.project/projectService, so linting is not type-aware and this diff cannot move a verdict on an untouched file.Acceptance notes
flowValueSlots-12101.test.tsxruns green on next.1 (in the 12-file re-run): no verdict change.packages/core/src/utils/normalize-list-view.ts:430(and its test at:401) and theobject-treedatadescription inpackages/types/src/zod/objectql.zod.ts:2795still say the viewdataslot has four providers / names theapiprovider. Prose only; nothing reads it. Left as is.Generated by Claude Code