Repository navigation
chore(deps): resolve @objectstack/* 17.7.0; attach the objectui#11334 mirror and objectui#11417's arm, follow 17.7.0's mechanical moves; the eager-closure line raised on maintainer ruling A (objectui#11717) - #11742
Conversation
…i#11717) Regenerated with pnpm only, never by hand: every @objectstack/* specifier was raised to ^17.7.0 for one `pnpm install`, every manifest was restored byte for byte to HEAD, and a second `pnpm install` reconciled the importers back to their declared ranges. The seven packages objectui resolves (spec, types, core, client, formula, lint, sdui-parser) move 17.6.0 -> 17.7.0; no importer specifier line and no other package moves. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
… backend pin on 17.7.0 (objectui#11717) check-lockfile-integrity.test.ts builds its samples from the real lockfile's @objectstack/* snapshot keys and asked to be rebuilt when they moved; they are re-keyed on 17.7.0. e2e/live/ci/backend.env must equal the resolved @objectstack/spec (ci-cd-pipeline-doc.test.ts): OBJECTSTACK_VERSION=17.7.0, whose @objectstack/cli@17.7.0 tag resolves to the release commit 4e4e881427. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…ks; the objectui#11334 mirror and objectui#11417's single-series arm (objectui#11717) DashboardWidgetSchema chains checkDashboardWidgetChartMeasureArity after the metric-family check, by import (objectui#11334 rulings 5925828806 and 5956401275). The page node and the page-kind node chain checkPageRequiresKind beside checkPageSourceCompleteness (objectui#7715 ruling B1). The 7715 census names both and its notAttachable booking is struck. The three OWED TO objectui#11334 bookings are struck by flipping their rows to the refusal: the census entry, and the two 8894 ledgers, whose cap rows now require the unrefused set to be empty. The dimensionless two-measure pie is pinned on both faces; its one-dimension control is stated per arm, because 17.7.0 refuses that pie by the single-series arm, which is pinned with its controls. PR objectui#11433's two door assertions and the dimensionless pie pin in DatasetWidget.unrenderedMeasures-8894 flip to the stored-document form. DatasetWidget reads DASHBOARD_WIDGET_MULTI_MEASURE_TYPES instead of restating it. Floors: @object-ui/types ^17.7.0, @object-ui/plugin-dashboard ^17.6.0. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
….7.0; ledger four historical sites (objectui#11717) check:installed-pin-claims reported 22 findings naming 17.6.0. Each fact was re-read on the installed 17.7.0 before its stamp moved: SelectOptionSchema's blank label, CalendarConfigSchema's three legs, object-calendar's ten strict members, FieldSchema dependsOn / rows / option description / referenceTo, record:details columns, record:highlights icon and layout, record:alert visible, waitForInput's missing default, the lint field-rule root messages, and the retired-key brand. Three lines name the 17.6.0 release as an event and are ledgered historical (plugin-grid keyboardNavigation, two eager-closure lines), as is the console parity row that dates the closed details entry. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…leaves with the type (objectui#11717) @objectstack/spec 17.7.0 drops ai:chat_window from PageComponentType and refuses it by name (objectstack#21504). block-config.test.ts's 'every exclusion names a real spec type' refused the stale entry. It goes the way user:profile / element:form did at 17.3.0, and the probes that read it move to the unknown-type branch. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…nts, as 17.7.0 refuses them (objectui#11717) element-text-published-variants-7450.test.ts went red as it promised to and named the follow-up: drop the pair from the registry inputs enum and from VARIANT_CLASS / VARIANT_TAG, and move the expectation to []. Done. The rows that pinned the old rendering flip to the refusal on every gate (contract, html tier, safeValidateSchema) and to the read site's body answer for a stored value. Prose that said the contract still accepts the pair is corrected. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…jectui#11717) Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
… pins (objectui#11717) objectstack#21893 judges an approval node's config against ApprovalNodeConfigSchema at the build doors. The type-only fixture carries the approvers its contract requires, with a new pin for the refusal's location; the required-marker measurement for a seeded approval now reads Approvers and Type; the escalation round-trip matches its labels without the required marker the inspector now draws on timeoutHours. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…the guard's paragraph collapses into the relationship form (objectui#11717) The objectui#11253 tripwire went red and said what to do: the server refuses a select / radio with no option source at fields.NAME.options, so the guard's docblock no longer calls that refusal ahead of the server, and the block becomes the refusal pin, with controls and an equality between FieldSchema's answer and the guard's list. select-option-spec-extension-7014's select control carries one option so it stays about rows alone. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…c defaults, a sixth z.lazy, two new chained checks (objectui#11717) object-form, object-metric and object-master-detail-form rows reach a spec default since 17.7.0 (sections[].fields[] take the page-block section shape; object-metric drillDown.report is ReportSchema), so stripImportedDefaults hands back a stripped derivation; the two by-reference pins re-pin to 'the bag IS that derivation'. The walker docblock names the sixth lazy node, and the 8317 census lists the two newly chained checks. object-form-unmirrored-members moves visibleWhen off the group-referencing section, which 17.7.0 refuses. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…; flip the key-not-shape pin and restate the mirror's position (objectui#11717) objectstack#21464 stage 2 (7d674dfc) makes ComponentPropsMap['object-calendar'] .calendar the list view's strict calendar block. calendarUnionReads-8651's 'the slot refuses nothing' row flips: the control key, the dateField alias and 42 are refused now. The ObjectCalendarSchema.calendar docblock is re-measured, and it says the mirror's .passthrough() now admits an unexamined key the spec refuses. That difference is reported by row on the PR, not changed here. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
… row's own describe (objectui#11717) Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…adds (objectui#11717) Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…ow retired upstream, object-grid.resizableColumns harvested, the sortField fork closed (objectui#11717) Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…sed with the spec's retired-key message (objectui#11624 rows, objectui#11717) 17.7.0 carries 6ec54f00 (objectstack#21589). The objectui#11396 types pin's forward tripwire flips to the refusal on both published faces, with the spec's message at the member. The MasterDetailDetailConfig docblock, the 8071 test's header and compile-time block, and the details registration description stop calling the retirement unreleased. The Omit stays: the entry still lists the key as a tombstone. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
Brings in main through 02a3896 (objectui#11694); git merged the lockfile and the locale packs without a conflict. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…k, not off zod (objectui#11717)
@object-ui/plugin-dashboard declares no zod dependency, so `import type { z }`
failed its tsconfig.test.json compile (TS2307). The context's type is read off
checkDashboardWidgetChartMeasureArity's own parameter instead.
Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V
Co-authored-by: Claude <noreply@anthropic.com>
…ing variant as live (objectui#11717) Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V 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. Which half objected:
📦 Bundle Size Report
Size Limits
|
…(objectui#11717) - twins-spec-by-reference-9736: the Page control writes `requires`, which `checkPageRequiresKind` now refuses on a page with no `kind` (the spec default `full`); the control carries `kind: 'html'`, where the key is legal. - exclusion-reason-truthfulness: the no-renderer population emptied when `ai:chat_window`, its last member, left PALETTE_EXCLUSIONS with the type's upstream retirement. The row that required it non-empty now asserts it is empty and why, and goes red the day a new reason claims "no renderer". Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V 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. Which half objected:
📦 Bundle Size Report
Size Limits
|
|
Generated by Claude Code |
Contract reviewServed-tier: Rendered by the isolated at-tier contract reviewer of Check-runs on The one red, ① Derived judgmentsEvery accept-set and public-surface change the diff implies, each judged.
No path is governed ( ② Semver levelClause-②: yes (narrowing). The diff narrows the accept set of The changesets match what the diff publishes. Nine changesets, none
objectui has no ③ Boundary flagsEvery dev flag (PR Deviations, Acceptance notes, the report's
Reviewer's own observations, none blocking:
Implemented-by: VERDICT: PASS |
Brings in main through 9b673e5; git merged without a conflict, the lockfile and the locale packs included. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V Co-authored-by: Claude <noreply@anthropic.com>
…tstack/* 17.7.0, on maintainer ruling A (objectui#11717) The ruling is record 6027998226 on objectui#11717, verbatim 「A 抬预算+回收卡 (Recommended)」, answering decision request 6024630321. One commit, in the objectui#11088 shape: - BASELINE re-pinned to the merged head c1e32e9: 3,591,028 gzipped bytes across 331 of 2451 chunks, squashMerge null. - MAX_EAGER_CLOSURE_GZIP_BYTES 3,410,284 to 3,637,000, which is 3,591,028 + 45,568 rounded to the nearest thousand. Headroom is 45,972 bytes = 0.50x the regression. - vendor-objectstack: PER_CHUNK_BASELINE 1,420,958 to 1,604,474 and its ceiling 1,439,157 to 1,623,000 (headroom 18,526 = 0.20x). The retired ceiling fired on this build. - A new header section names the ruling and gives the chunk table against a 9b673e5 control built the same way. The aggregate grows by +183,008, of which vendor-objectstack is +182,909. It says what the bytes buy and names the payback card objectstack#22044. REGRESSION_THIS_GATE_MUST_CATCH_BYTES is untouched. No exemption was added and no import was made lazy. The other three per-chunk rows passed and did not move. The unit test's rendered literal moves 3306.8 to 3506.9. The pin-claims ledger entry for this file drops from two historical 17.6.0 sites to one, because the provenance line now cites the 17.7.0 build. The bump changeset gains the @object-ui/console bullet, following the 17.6.0 precedent. Claude-Session: https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V 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: Rendered by the isolated at-tier contract reviewer of Check-runs on What moved since the PASS record ① Derived judgmentsEvery accept-set and public-surface change the diff implies, each judged.
No path is governed: no ② Semver levelClause-②: yes (narrowing) — unchanged from record The changesets match what the diff publishes, and nothing
③ Boundary flagsEvery dev flag on this head — the round-2 report's
Reviewer's own observations, none blocking:
Implemented-by: VERDICT: PASS |
Fixes #11717
Fixes #11334
Fixes #11417
Clause-②: yes — measured, see "Clause ②" below. The claim (
6019218018) saidnoand delegated the answer to this measurement.What this PR is
pnpm-lock.yamlnow resolves@objectstack/*17.7.0. It was regenerated with pnpm only, never edited by hand. Every gate the bump turned red is listed below by row. The card's three riders ride here: the objectui#11334 mirror, objectui#11417's single-series arm, and the objectui#11624sortFieldflips. One gate went red that was not mechanical:check:eager-closure. Maintainer ruling A (6027998226) resolved it, and the raise is one commit on this branch,b680973f. See "Resolved by ruling A" below.mainlock)@objectstack/spec·types·core·client·formula·lint·sdui-parserNothing else moved. The census of package and snapshot keys runs in both directions: seven keys removed at 17.6.0 and seven added at 17.7.0, the same for the peer-context keys. The only importer
specifierlines that move are the two floors below.How the lock was regenerated. I used the route of the 17.5.0 and 17.6.0 bumps. Every
@objectstack/*specifier was raised to^17.7.0for onepnpm install. Every manifest was then restored byte for byte to HEAD, and a secondpnpm installreconciled the importers.mainmoved by ten commits while this was in flight, including objectui#11686's lockfile edit. I merged it as a merge commit, not a rebase, and git merged the lockfile without a conflict. After the merge,pnpm install --frozen-lockfileexited 0 with engine-strict on, and a plainpnpm installleft the lockfile byte-identical. For round 2,mainhad moved 13 more commits. I merged9b673e54as a second merge commit,c1e32e96, again not a rebase, and git merged it without a conflict, the lockfile included.pnpm install --frozen-lockfileexited 0 on that head, and it exited 0 again onb680973f. The 43 test files the merge brought in ran green against 17.7.0 under the lock (376 tests), so the merge brought no new red to fix.Floors. Two move, each because published code now imports something an older release does not export.
check:spec-floorsis green over a full build.@object-ui/types:^17.6.0to^17.7.0. It now chainscheckDashboardWidgetChartMeasureArityandcheckPageRequiresKind, which 17.7.0 first exports.@object-ui/plugin-dashboard:^17.5.0to^17.6.0.DatasetWidgetnow readsDASHBOARD_WIDGET_MULTI_MEASURE_TYPES, which 17.6.0 first exports (objectstack11d28c17; the ancestry reading is below).The card's riders
DashboardWidgetSchemachains.superRefine(checkDashboardWidgetChartMeasureArity)after the metric-family chain, by import, with no second copy of the check. The 7715 census names it. ItsnotAttachablebooking and bothOWED_TO_OBJECTUI_11334ledgers (the types 8894 file and the panel 8894 file) are struck by flipping their rows to the refusal; no assertion was deleted. The cap rows now require the unrefused set to be EMPTY. The arms are read off the exported check itself. The dimensionless two-measurepieis pinned on both faces as ONE issue atvalueswith the spec's own message.pieas the parse control. 17.7.0 refuses thatpieanyway, through the single-series arm. So the control is stated per arm: with one dimension the dimensionless refusal is gone, the refusal that remains is the single-series one, and a two-measureradarwith one dimension parses on both faces.pie,donut,funnel,treemap,sankey) is pinned refused with one dimension and two measures, on both faces, with the spec's own issue. Two controls: one measure with a dimension parses, andscatter/radarwith a dimension and two measures parse. PR objectui#11433's two door assertions flip to the stored-document form.MEASURE_AXIS_CHART_FAMILIESis nownew Set(DASHBOARD_WIDGET_MULTI_MEASURE_TYPES), read offCHART_TYPE_MAPexactly as before (table/pivotare noCHART_TYPE_MAPfamily and keepisTable), so what is drawn does not change. Its remaining items are done here, so this PR completes the card.sortFieldrows.object-master-detail-form-details-entry-11396's forward tripwire flips to REFUSED on both published faces, with the spec's retired-key message at the member. The prose moves in the five places the card lists: theMasterDetailDetailConfigdocblock, the 8071 test's header and compile-time block, the types pin's header, thedetailsregistration description, and the console parity row.MasterDetailDetailConfigkeeps itsOmit, because the 17.7.0 entry still LISTS the key as a tombstone.Disposition by row
Done here (mechanical)
spec-object-refinements-7715(Page row)PageSchemagainscheckPageRequiresKind(objectstack#21459)pagenode and the page-kind node besidecheckPageSourceCompleteness(ruling B1 of objectui#7715: the check readskindandrequires, both carried by reference). Three refusal rows with the spec's own message, and two controls.check:installed-pin-claims(22 findings)dependsOn/rows/ optiondescription/referenceTo, record:details / highlights / alert,waitForInput, the lint field-rule root messages, and the retired-key brand. Four lines that name the 17.6.0 release as an event are ledgeredhistorical. Gate:OK.check-lockfile-integrity.test.tsci-cd-pipeline-doc.test.tsOBJECTSTACK_VERSION=17.7.0. The@objectstack/cli@17.7.0tag peels to the release commit4e4e881427.ai:chat_windowledger, andblock-config"every exclusion names a real spec type"ai:chat_windowretired by name (objectstack#21504)user:profile/element:formdid at 17.3.0.canvas-display-metamoves its probe to the unknown-type branch.object-grid.resizableColumnsrowsresizable(objectstack#21445)defaultSortwas at 17.3.0: the exemption, the GA carve-out and the pending-key entries go, andHARVESTEDgains the tenth key. Retiring the renderer's own read of the old spelling stays objectui#6152's.element-text-published-variants-7450(2)heading/subheadingrefused (objectstack#21015)inputsenum and fromVARIANT_CLASS/VARIANT_TAG, and move the expectation to[]. The rows that pinned the old rendering flip to a refusal on every gate. A stored value renders asbody.CapabilityMultiSelectField.specParity-6285(3)PLATFORM_CAPABILITIESgainsview_all_audit_logFIELD_DEFAULTSand in all ten locale packs.actionKeys.pinActionSchemagainsrequiresMembershipReachdescription/executionare.ActionDefdoes not declare it.object-metadata-write-guard.derivation(2)options(objectstack#21390)FieldSchema's choice set to equal the guard's list.select-option-spec-extension-7014selectselectcarries one option, so it stays aboutrowsalone.clientValidation.flowNodeTypes,FlowNodeInspector.requiredMarkers-10948,FlowNodeInspector.escalationOff-11660(2)ApprovalNodeConfigSchema(objectstack#21893)approvers, and a new pin covers the refusal location. The marker measurement for a seeded approval now readsApproversandType. The escalation round-trip matches labels without the required marker the inspector now draws ontimeoutHours.imported-defaults-8317(lazy count, and the census of chained checks)z.lazy(the form-field group underobject-form'ssections[].fields[])REFINEMENT_EXCEPTIONS.object-form-properties-bag-10859-b4,registered-type-arms-10859-b2(2)drillDown.report)object-form-unmirrored-members-6152visibleWhenbesidegroupvisibleWhenmoves to the standalone section.calendarUnionReads-8651object-calendar.calendaris typed as the list view's strict calendar block (objectstack7d674dfc)ObjectCalendarSchema.calendardocblock is re-measured (see the second table).objectGanttInputs-11168,objectTimelineInputs-11168markers,itemsandmappingmovedDashboardEditor.measureDoor-8894,DatasetWidget.unrenderedMeasures-8894Resolved by ruling A (
6027998226)check:eager-closure(CIBundle Analysis) was the one red that was not mechanical. The maintainer answered decision request6024630321with ruling A, record6027998226on objectui#11717. The selection, verbatim: 「A 抬预算+回收卡 (Recommended)」. One commit,b680973f, raises the line in the objectui#11088 shape:BASELINE2ba091cc1e32e96MAX_EAGER_CLOSURE_GZIP_BYTESPER_CHUNK_BASELINE['vendor-objectstack']PER_CHUNK_GZIP_CEILINGS['vendor-objectstack']REGRESSION_THIS_GATE_MUST_CATCH_BYTES) = 3,636,596, rounded to the nearest thousand as every earlier raise was. That leaves 45,972 bytes of headroom, 0.50x.vendor-objectstackceiling leaves 18,526 bytes of headroom, 0.20x, the band the two paybacks kept.REGRESSION_THIS_GATE_MUST_CATCH_BYTESis untouched. No exemption was added, and no import was made lazy.The bytes, in gzip bytes. The instrument is the same for both columns:
pnpm exec turbo run build --filter=!@object-ui/site --concurrency=2underscripts/pm/os-verify-lock.sh, in one container, thenpnpm check:eager-closure, which readsapps/console/dist/eager-closure.json. The control ismain9b673e54, built in a worktree of its own with 17.6.0 resolved.9b673e54(main)c1e32e96(merged head)vendor-objectstackui-componentsframeworksrci18n-locale-enWhat the bytes buy: the console's client-side validation answers as the 17.7.0 server does, with its new refusals and its schemas. They also unblock the cards this bump unblocks. They do not buy a new console capability.
The payback card is objectstack#22044. When it lands, the ceiling and
BASELINEcome down together by exactly what it recovers, the way objectui#11101 and objectui#11438 lowered the third raise.The gate's header has a new section, "⚠️ RAISED A FOURTH TIME, ON EXPLICIT MAINTAINER RULING (objectui#11717)". It carries the ruling, this table, the instrument and the payback card. On
b680973f,pnpm check:eager-closureexits 0 and prints: "Console eager closure is 3506.9 KB gzipped across 331 of 2451 chunks (budget: 3551.8 KB, headroom: 44.9 KB)", aggregate 0.50x,vendor-objectstack1566.9 KB against a 1585.0 KB ceiling (0.20x).Differences no gate reads, reported by row (not red)
ObjectCalendarSchema.calendar(@object-ui/types).passthrough(), so it admits an unexamined key the spec refuses, the forbidden direction of objectui#8327. The docblock now says so. Following the spec by reference narrows a published door.object-grid/object-kanban/object-calendarmembers 17.7.0 types (objectstack#21464 stage 2, #21463:operationsstrict withoutread/import,conditionalFormattingthe list view's rules,filterthe rule array)pinssentences still accept or describe the older shapes. No test went red.6020673439: its strokes stay there)Leads re-measured (Zone 2)
latest= 17.7.0; spec published 2026-10-06T12:22:14Z).32d5769080,6ec54f00and11d28c17dfare each an ancestor of4e4e881427(exit 0, which needs no control leg). For the negative half:32d5769080and6ec54f00are not ancestors of the 17.6.0 tag commit617f25f8a4(exit 1), with the repository's root commit as the control leg (exit 0, deeper than both).check:doc-snippetsjudged all 782 blocks over a 17.7.0 build with 0 failures, the plugin-grid README snippets included.OWED_TO_OBJECTUI_11344has 0 hits in the tree; it was struck before this branch.main.Clause ②
This was measured on the built declaration closure of
@object-ui/types. Itsdistwas built atmain7300fca(spec 17.6.0, a worktree of its own) and at this branch (17.7.0), and the.d.tsfiles were compared with comment lines dropped and line order ignored:zod/index.zod.d.ts,zod/objectql.zod.d.ts,zod/public-blocks.zod.d.tsandzod/layout.zod.d.ts.The emitted zod declarations inline the spec's shapes, so the bump moves what
@object-ui/typespublishes in both directions:action:group/action:menumember actions);new-tab,separator-before);ast,bodyExtra);ai:chat_windowleaves the page component type unions.On top of that, the two chained checks narrow the runtime accept set toward the spec. Hence
Clause-②: yes. An at-tier contract review is owed before landing, as the claim already said.Tests
The full repository-root suite (
pnpm exec vitest run, under the verify lock) ran on the lockfile-only commit60ed1ad:The 24 failing files are the rows above. After the fixes, the 38 files this PR edits plus every file that was red re-ran together under the lock: 36 green and 3 rows red in 2 files. The last commits fix those, and those 3 files re-ran green (373 tests).
After this PR opened, the full repository-root suite ran under the verify lock on the PR head
50ed869:c7bbce48: thetwins-spec-by-reference-9736Page control and theexclusion-reason-truthfulnessvacuity row. CI onc7bbce48then had 41 successes, 3 skips and one failure,Bundle Analysis, which the ruling above resolves.record-details.hideFieldsUncast-9965timed out at 15000 ms under full load and passes alone.date-only-zone-pins-10183fails only while this worktree's vitest results cache is present. With the cache file moved aside, the same head passes 27/27, and so does a control worktree atmain02a38967.Round 2 ran on
b680973f, under the lock, each exit code written to disk before any pipe:scripts/__tests__/check-eager-closure-budget.test.ts: 179/179 passed. Withcheck-installed-spec-pin-claims.test.tsbeside it, 208/208.mainmerge brought in passed against 17.7.0: 43 files, 376 tests, on thec1e32e96tree.Gates
These ran on the merged head after a full
turbo run build(43/43). Exit codes were captured before any pipe.pnpm install --frozen-lockfile(engine-strict)turbo run type-check --concurrency=2check:lockfile-integrity·check:lockfile-dedupeVERDICT clean·VERDICT dedupedcheck:spec-floors·check:spec-symbolscheck:installed-pin-claimsOKcheck:component-surface-paritycheck:doc-snippets·check:doc-types·check:doc-examples·check:readme-exportscheck:new-line-citations·check:control-bytes·check:test-path-rootscheck:changeset-claims·check:pending-changeset-literalscheck:eager-closure(round 2,b680973f)vendor-objectstack1566.9 / 1585.0 KB (0.20x)b680973f:pnpm install --frozen-lockfile·check:new-line-citations·check:control-bytes·check:changeset-claims·check:pending-changeset-literals·check:installed-pin-claims·check-changeset-presence·check-changeset-no-major·type-check:scriptscheck:eager-locale-catalogues·check:skill-examples·check:prompt-keys·check:sdui-registration-pins· the three i18n gates ·check:action-forward-parity·check:designer-field-key-parity·check:phantom-deps·check:unused-depsturbo run lint --concurrency=2(50ed869)Changesets
Nine changesets, none
major.node scripts/check-changeset-presence.mjsexits 0, and so doescheck-changeset-no-major.11717-objectstack-17-7-0: the two floors (@object-ui/types,@object-ui/plugin-dashboard, patch), and the@object-ui/consolepatch bullet for the closure delta and the budget re-pin, following the 17.6.0 bump's6158e4c.@object-ui/consoleis not private and is in thefixedgroup, so it takes a real bump bullet, not an empty declaration.11717-dashboard-widget-chart-measure-arityand11717-page-requires-kind:@object-ui/typesminor. Both are narrowings, with the breaking semantics in the prose.11717-element-text-retired-variants:@object-ui/componentsminor.11717-capability-view-all-audit-log:@object-ui/fields,@object-ui/i18n;11717-spec-row-describes:@object-ui/plugin-gantt,@object-ui/plugin-timeline;11717-master-detail-sort-field-refused:@object-ui/plugin-form;11717-action-key-requires-membership-reach:@object-ui/core.11717-bump-prose: empty frontmatter, for re-pins and comments.Size and route
Against
main9b673e54, after the round-2 merge: 87 files, +1083 / −607, lockfile included. That is under the 5,000-line human-merge line. No path is under.claude/**,skills/**,docs/adr/**,AGENTS.mdorCLAUDE.md.Acceptance notes (observations, not filed)
ActionDefdeclaresrequiresFeaturebut not its 17.7.0 siblingrequiresMembershipReach. The spec's parse lowers both intovisible. Whether the runner should read the raw key has not been measured.pinssentences still say theobject-calendar/object-kanbanfilterrow isz.unknown(). 17.7.0 types it as the rule array. They are part of objectui#6152's family above. Nothing parses them.Omit" at this bump. TheOmitwas kept, for the reason in the docblock. The spec entry still lists the key, and the face does not offer a member whose only legal value is absence.Deviations
yes, not the claim'sno, as the dispatch asked.piecontrol is stated per arm (see the riders).b680973fwas committed and before it was pushed. Both commits were re-read as unverified, and every gate above was re-run onb680973fafter the restart. The console build output survived the restart. It was built fromc1e32e96, andb680973fchanges no bundler input, so the build was not repeated.c1e32e96, as the gate's own claim check requires.eager closure vendor-objectstack 17.7.0·calendar slot passthrough·object-grid operations read import·requiresMembershipReach.The session that ran this is
https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V, dispatched by objectui'sdomain:devxseat 2.Generated by Claude Code