Repository navigation
chore(deps): build @objectstack/* from objectstack main 2ec6827962 and follow its contract (objectui#12971) - #13043
Conversation
feat(metadata-protocol): the draft save records draftChanges per key path; the save declares its surface (?surface=studio|api, copilot in-process only) (#24418) objectstack@2ec6827962ac95a7bdbdad413fd74f65ca238e07 Moved with scripts/bump-objectstack.sh. pnpm install left pnpm-lock.yaml unchanged: the seven pinned packages declare the same dependencies. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
…ch retirement at the new pin - @object-ui/types attaches the spec's checkPageMainRegionWidth on both page nodes beside checkPageRegionPlacement, and checkPageRecordBindingPlacement on the page-kind node only (it reads the kind from type, like checkPageDefaultPlacement); the census accounts for both. - The two passing-keys fixtures stop authoring width 'large' on main. - action:button and action:icon stop publishing the row patch input the spec retired; the operation input says the row runs its named action. - The layout guide says a main region takes only width 'full'. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
…new objectstack pin moves - registry-inputs-spec-parity: list-view gains a ComponentPropsMap row and is judged (60 -> 61 carried, 40 -> 41 judged); record:json and marketplace:installed-list are retired upstream, so their ledger entries read RETIRED UPSTREAM; the two row patch tombstones are pinned by name and the patch member pin leaves with the input. - block-config: record:json is no longer a PageComponentType, so its palette exclusion goes. - record-highlights-layout-9187: the row gains emptyState. - ObjectTree.schemaTyped-8655: the list-view row declares navigation and tree. - action-button-icon-inputs-11168: patch leaves the published-key list. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
The pinned build reads 18.0.0-next.4, so check:installed-pin-claims named 25 files claiming 18.0.0-next.3. Each sentence's fact was re-measured on the new pin (a node probe over @objectstack/spec, @objectstack/lint and the automation schema, plus source identity of the automation engine and view.zod.ts between the two pins) and holds, so the stamp moves. The two lockfile-integrity self-test lines are a synthetic registry key, ledgered historical. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
…5 -> 46) Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
…oundary; keep the 17.3.0 sentence the pin-claims control reads imported-defaults-8317 lists checkPageMainRegionWidth and checkPageRecordBindingPlacement as refinement exceptions (functions, not schemas). The retired marketplace:installed-list ledger entry keeps its "New in 17.3.0" history, the real line check-installed-spec-pin-claims' refusal control reads. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
… 46 (defaultRowScope) Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
ℹ️ Console Performance Budget — not measuredThis run did not produce a console bundle to measure, so there is no pass/fail verdict for the performance budget. This is not a budget violation. Nothing was measured — the numbers a real violation would carry are simply absent.
See the workflow run for details. No package size report: it is only generated from a complete package build, so a partial one is never shown. |
Brings in objectui#13008 (the committed .objectstack-pin manifests) and objectui#12972 (the per-machine pin cache), which the pin bump must follow. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks Co-authored-by: Claude <noreply@anthropic.com>
Written by `node scripts/objectstack-pin.mjs build --write-manifests` at the new pin (objectui#13008 committed them after this branch was cut). Only the packed versions move, 18.0.0-next.3 -> 18.0.0-next.4; `pnpm install` leaves pnpm-lock.yaml unchanged. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks 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
|
docs(skills): objectstack-data says which hook doors provide ctx.title (#24289) (#24504) objectstack@f4755a68a797d5a000cb8bd1c942cb2a9862108e The first move (2ec6827962) built packages that read 18.0.0-next.4, a version objectstack never published or tagged, so the live-e2e backend pin (e2e/live/ci/backend.env, held equal to the lockfile's spec version by ci-cd-pipeline-doc.test.ts) had no published pair. f4755a68a7 is the newest objectstack main commit green at this move (150 check-runs completed, none failed) and is past the 18.0.0-next.5 release commit 820fd5aef0, so its packages read 18.0.0-next.5, which npm publishes and @objectstack/cli@18.0.0-next.5 tags. - scripts/bump-objectstack.sh --no-commit built it and wrote the packed manifests; pnpm install leaves pnpm-lock.yaml unchanged. - OBJECTSTACK_VERSION=18.0.0-next.5 in backend.env. - The installed-pin claims move next.4 -> next.5: the same node probe reads every fact identically on the new pin, and service-automation's engine diff between the two pins touches none of the reads the start-gate table names. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks 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
|
…from the spec's nav-item base objectstack#24332 gave the spec's shared nav-item base one API data source (ElementApiDataSourceSchema), which navigation-spec-parity and the nav editor's base-key pins read off the installed spec. NavigationItemSchema takes it by reference (it stripped the key before), the NavigationItem type derives it from the spec's ObjectNavItem, and the nav editor's base-key table keeps it on a change of type. The spec marks it planned; nothing here reads it. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks 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
|
…13047 and emptyState to objectui#12932; Clause-② reads yes Seat decisions on objectui#12971 (record 6267645900): - D1 = A, under objectui#11111 decision 3 = B: the 38 list-view spec keys the registration does not publish and its 6 owed member pins are booked OWED to objectui#13047 (expires 2026-11-18). Caps rise to exactly the booked entries (unpublishedKeys 38, memberPins 6, MEMBER_PIN_EXEMPTION_CEILING 6); nothing is declared. - D2 = A, the objectui#12370 precedent: three UNPUBLISHED_EXEMPTIONS entries for emptyState on record:details, record:highlights and record:quick_actions, owned by objectui#12932. - D4 = B: the changeset reads Clause-②: yes and lists both directions, the narrowings with the spec's messages. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks 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
|
Brings in objectui#13022 (PR #13033), which landed first by the seat's decision D3 = A on objectui#12971: the Undo snapshot reads the named declaration's patch and no action renderer forwards a row patch. The action renderers merged cleanly: this branch owns the inputs blocks, #13033 the forwarding lines, and both are kept. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks 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
|
Contract reviewServed-tier: ① Derived judgmentsEvery accept-set and public-surface change the diff implies, read in the cited code. Each is named right or wrong; none is wrong.
② Semver level
③ Boundary flags
Implemented-by: VERDICT: FAIL One reason: the Generated by Claude Code |
The contract review on PR #13043 (record 6268625896): a diff that widens one surface and narrows another reads `Clause-②: yes (narrowing)`, the fleet reader's spelling (clause2-line.mjs). The two-direction lists are unchanged. Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks 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
|
Contract reviewServed-tier: What moved since the earlier record, read in the tree. One commit, ① Derived judgmentsCarried forward from 6268625896 unchanged — the line that moved touches no accept set, no public surface, no spec row and no registration, so each judgment's inputs are byte-identical at this head. Each remains right; none is wrong.
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
席位核对 — ACCEPT ·
|
Fixes #12971
Clause-②: yes (narrowing)
Scope: move
.objectstack-shafrom2c9bf9430a(the@objectstack/spec18.0.0-next.3 release commit) to objectstackmainf4755a68a797. Then follow every contract change between the two that turns something red here, with no tolerant fallback. The only exemptions are the bookings the seat ruled on objectui#12971 (record 6267645900, decisions D1 to D4).The held cards' feature work is not done here: objectui#12932, objectui#12931, objectui#12929, objectui#12484 and objectui#13015. This PR makes their commits available.
The Undo snapshot and the renderers' row
patchforwarding are objectui#13022's (PR #13033). That PR landed first by decision D3 and was merged into this branch.Status: CI is green on head
2abf91da(33 success, 3 skipped; listed below). This body was refreshed once through the relay. It replaces the body written at9310c0ea.The pin
f4755a68a797d5a000cb8bd1c942cb2a9862108ewas the newest objectstackmaincommit green at the move: 150 check-runs completed, none failed.2ec6827962, whose packages read18.0.0-next.4. objectstack never published or tagged next.4, soe2e/live/ci/backend.envhad no published version to pair with.ci-cd-pipeline-doc.test.tsholds that file equal to the lockfile's spec version.18.0.0-next.5at820fd5aef0.scripts/bump-objectstack.shmoved the pin again, tof4755a68a7, which is past that release and reads next.5.OBJECTSTACK_VERSION=18.0.0-next.5now resolves the tag@objectstack/cli@18.0.0-next.5, and Live E2E passes on it.git merge-base --is-ancestor SHA f4755a68a7exits 0 for all of these:586705d85d,1e001c7df,e15897c0f1,ef65646843andadb7910f81;69f342b924,3a734e0888and820fd5aef0;2c9bf9430a(201 commits apart).5b14b7f3ad(newer than the pin) exits 1 as the negative control.pnpm-lock.yamlis unchanged: the seven packages declare the same dependency names.main, which brought objectui#13008's committed manifests,.objectstack-pin/*/package.jsonwas rewritten byobjectstack-pin.mjs build --write-manifests. Only the packed versions move.Reds at the new pin, and what this PR does
action:button/action:iconpublishpatch69f342b924, a row's ownpatchis a tombstonepatchmember pin and the published-key list entry go194a42d1f7,list-viewgains aComponentPropsMaprowlist-viewjoins the covered setlist-viewpublishes 6 of 44 live keys, 6 member pins owed194a42d1f7emptyStateunpublished onrecord:details/record:highlights/record:quick_actions586705d85dUNPUBLISHED_EXEMPTIONSentries owned by objectui#12932 (the objectui#12370 precedent)marketplace:installed-list,record:json14a8bd2693,030a7b83e8block-config.test.ts: stalerecord:jsonexclusion030a7b83e8record-highlights-layout-9187key list586705d85demptyStateaddedspec-object-refinements-7715page censusef65646843,3a734e0888checkPageMainRegionWidthattached on both page nodes.checkPageRecordBindingPlacementattached on the page-kind node and recorded not attachable on thepagenode. Two describe blocks compare the spec's own issue, with controlspassing-keys-arms-11440,validate-passing-keys-114403a734e0888width: 'large'removed from themainregionimported-defaults-8317ObjectTree.schemaTyped-8655194a42d1f7list-viewadded to thenavigation/treerowsMetadataService.specKeyObjectPayload/.retiredObjectEnabled31e7d0ba27,defaultRowScopenavigation-spec-parity,nav-target.navEntryTypes-1179026501ae24f(objectstack#24332), nav-item basedataSourceNavigationItemSchema(it stripped the key before) and theNavigationItemtype;NAV_ENTRY_BASE_KEYSkeeps it on a retypeci-cd-pipeline-doc(live-e2e pin)backend.envset to18.0.0-next.5(see the pin section)check:installed-pin-claims(25 files)18.0.0-next.5. Two fixture lines incheck-lockfile-integrity.mjsledgeredhistoricalaction-button-undoable-11168TS235369f342b924Clause-② (D4 = B): yes, both directions
Narrowings, refused with the spec's own message on
safeValidateSchemaandStrictAnyComponentSchema(objectui validate):mainregionwidth: 'small' | 'medium' | 'large'on apagenode or a page-kind node, at the region'swidth: "Regionmainis refused withwidth: 'large'(since @objectstack/spec 18): amainregion takes onlywidth: 'full'."recordbinding on a page-kind node, atrecord, for example: "recordbinds the row of anapppage, and this page istype: 'home', which has no row to bind."patchinput onaction:button/action:iconis no longer published.Widenings, the spec's keys by reference, which the strict face refused as undeclared before:
emptyStateon the three bound record blocks. The renderer half is objectui#12932.recordon apagenode, for anypageType. The renderer half is objectui#12931.dataSourceon navigation entries. The spec marks it planned.The changeset (
.changeset/12971-objectstack-pin-main.md,minor) carries the same line and both lists.Ablation
checkPageMainRegionWidthwas detached at both sites withablation-replace.mjs: anchor x2 to x0, blob1e46e7fa45cdtoed50b46f958d.Tests 3 failed | 97 passed. The three failures are exactly themain-width refusal rows; the controls stayed green.1e46e7fa45cd, andgit diff HEADis empty.Verification at head
2abf91dapnpm type-check --concurrency=2 --continuegivesTasks: 81 successful, 81 total.packages/components/src/renderers/action/__tests__/;ActionRunner.declaredPatch-13022;registry-inputs-spec-parity;check-action-forward-parity(test and gate);spec-object-refinements-7715;imported-defaults-8317.check-governed-queue-guard --test: NOT GOVERNED.changeset:check,check:changeset-claims,check-changeset-presence,check:pending-changeset-literals,check:installed-pin-claims(OK) andcheck:lockfile-integrity(clean) all exit 0.check:lockfile-dedupereads deduped.Acceptance notes
NavigationItemSchemaacceptsvisible: 'data.x'withoutdataSource, which the spec refuses. The spec's check is not exported, so it cannot be attached here yet.RecordDetailView.recordOpenWaves-13010.test.tsxandpage-single-h1.test.tsxstill authorwidth: 'large'onmain. Nothing validates them.Generated by Claude Code