Repository navigation
deps: bump objectui's @objectstack/* to 17.7.0 — eight held cards' conditions are met on npm, and objectui's lockfile still resolves 17.6.0 #11717
Description
Activity
- addeddomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iterateand removed
on Oct 6, 2026 objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsClaim: PM loop round 1 (maintainer direct dispatch)
Session:session_01XgevVHGcN8dnegiiY3v75V
Account:os-support-ai(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-11717-objectstack-17-7-0
Worktree:objectui-issue-11717
Domain:domain:devx
Seat:domain:devx#2(objectui#10917, round-open marker6019163160)
File surface: the@objectstack/*ranges in objectui'spackage.jsonfiles, andpnpm-lock.yamlregenerated by the repository's own tooling (⛔ never by hand). The card's three named riders: the objectui#11334 mirror inpackages/types/src/zod/complex.zod.ts, with its census row inspec-object-refinements-7715.test.tsand the threeOWED TO objectui#11334bookings it strikes; objectui#11417's single-series arm pin; the objectui#11624sortFieldflips in the five places the card lists. Plus the mechanical fixes for gates that 17.7.0 turns red, each named by row in the PR. A non-mechanical red is reported by row, not fixed. Stop on breach and explain in the report.
Container & model:M,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuiprinted "no path-derived mandate")
Clause-②: yes
Thread-read: none
Serial constraints cleared: PR objectui#11721 (objectui#11686) also editspnpm-lock.yamlandpackages/plugin-tree/package.json. That is ordinary concurrency: the later lander mergesmainand regenerates the lockfile with tooling. PR objectui#11600 is the release PR, and PR objectui#11069 (objectui#5250, parked) touches none of this surface. All eight held cards in the body arepm:on-holdwith no assignee, so none is in flight.pnpm-lock.yamlis not aSINGLE_CLAIM_PATHSentry.Clause-②amended fromnotoyesby this seat, after report6024525892. The claim delegated the answer to the dev's measurement on the built declaration closure of@object-ui/types. Report6024525892and PR objectui#11742 measureyes: the emitted zod declarations inline 17.7.0's shapes, and four.d.tsfiles differ in declarations; the two chained checks also narrow the runtime accept set. An at-tier contract review is owed before landing, and it is running.Authority. The maintainer's words in this seat's session chat, verbatim: 「11717 最优先」 and 「11717 如果衍生出相关的阻塞卡片,你也负责派发处理」. Cards derived from this one that block it are dispatched by this seat, each with its own claim.
Placement rulings carried in: objectui#11334
5925828806(triage: the PR that bumps@objectstack/speccarries the mirror) and5956401275(chain the renamedcheckDashboardWidgetChartMeasureArity). Precedent: objectui#11438 (17.6.0), rulings A′5965062249and A″5968177777.Stamp: 2026-10-06T15:08Z · read against objectui
origin/main7300fca; npm@objectstack/speclatest= 17.7.0 (published 2026-10-06T12:22Z), and the lockfile resolves 17.6.0
Generated by Claude Code
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsThis amends my filing body above. Its "Not released by 17.7.0" line lists objectui#6152, and that is wrong. objectui#6152's condition is an
@objectstack/specrelease on npm that refusesresizableColumnsonobject-grid. 17.7.0 does: measured at this write, with{ resizable: true }as the lit control. So objectui#6152 waits on this card, like the eight rows in the table.Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-06T16:20Z. ⛔ Not a claim. ⛔ No scope change for the claim6019218018.-
For this PR: nothing new to do. objectui#6152's four strokes stay on objectui#6152, which is claimed afresh after this card lands.
-
A pointer for the claimant: objectui#6152's comment
5961014236lists, as measured at pin89cad75d55, the objectui places that 17.7.0'sobject-gridrow (PR feat(spec)!: an object-grid page block types the seven members the grid reads, and resizableColumns retires for resizable (#21445) objectstack#21463) turns red:operations, which becomes strict:readandimportare refused, the rootREADME.mdexample included;conditionalFormatting;apps/console'sregistry-inputs-spec-parity.test.tsrow forobject-grid.resizableColumns.
This card's own rule covers them: fix a mechanical red here, and report a non-mechanical one by row.
-
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 11717, "status": "done", "branch": "claude/issue-11717-objectstack-17-7-0", "pr": "https://github.com/objectstack-ai/objectui/pull/11742", "session": "session_01XgevVHGcN8dnegiiY3v75V", "premise_still_valid": true, "summary": "pnpm-lock.yaml resolves @objectstack/* 17.7.0 (pnpm-only regeneration, census: only the seven packages move). The card's three riders are done: the objectui#11334 mirror (checkDashboardWidgetChartMeasureArity chained by import, the census row named, and all three OWED TO objectui#11334 bookings struck by flipping rows to the refusal), objectui#11417's single-series arm pinned, PR objectui#11433's door assertions flipped, DASHBOARD_WIDGET_MULTI_MEASURE_TYPES imported in place of a restated list, and the objectui#11624 sortField rows flipped to refused with the spec's retired-key message, with prose updated in the five places. Every other gate 17.7.0 turned red was fixed here as mechanical, by row; checkPageRequiresKind was attached under ruling B1. One red stays, and it is not mechanical: check:eager-closure (Bundle Analysis), vendor-objectstack +182,909 gzip bytes over main's control. Floors: @object-ui/types ^17.7.0, @object-ui/plugin-dashboard ^17.6.0. Clause-②: measured yes.", "tests": "(1) Full root suite under the lock on the lockfile-only commit 60ed1ad: Test Files 24 failed | 4458 passed | 7 skipped (4489); Tests 41 failed | 60842 passed | 359 skipped (61242). All 24 are rows in the PR. (2) Full root suite under the lock on the PR head 50ed869: Test Files 4 failed | 4494 passed | 7 skipped (4505); Tests 5 failed | 61065 passed | 359 skipped (61429). Two are CI shard 7's rows, fixed in c7bbce48 (twins-spec-by-reference-9736 Page control; exclusion-reason-truthfulness vacuity row). Two are not this branch's: record-details.hideFieldsUncast-9965 timed out at 15000ms under full load and passes alone; date-only-zone-pins-10183 fails only with this worktree's vitest results cache present. Moving node_modules/.vite/vitest/.../results.json aside, the same head passes 27/27, and a control worktree at main 02a38967 passes 27/27. (3) After the fixes: packages/types/ + app-shell previews/ + the two files, 456/457 files green, the date-zone file red with the cache; the three changed or timed-out files rerun 24/24 green. (4) PR CI on 50ed869: 39 success, 3 failure (Test shard 7/8 with its Test aggregate, Bundle Analysis), 3 skipped. Spec Main Shape Gate, Lint, Type Check, Build & E2E, Live E2E (informational, backend 17.7.0) and the other 7 shards are green. CI on c7bbce48 at report time: 24 success, 17 in_progress, 3 skipped, 0 failure. The CI state is in_progress. No ablation was owed: the reverse proofs are the census and cap rows themselves, which went red on the bump-only tree and green with the mirror.", "gates": [ { "cmd": "pnpm install --frozen-lockfile (engine-strict, merged head 25251a80)", "exit": 0 }, { "cmd": "pnpm install (lockfile byte-identical after)", "exit": 0 }, { "cmd": "turbo run build --filter=!@object-ui/site --concurrency=2 (25251a80, 43/43)", "exit": 0 }, { "cmd": "turbo run type-check --concurrency=2 --continue (81/81, on 47b0ff99's tree)", "exit": 0 }, { "cmd": "turbo run lint --concurrency=2 --continue (47/47, 0 errors; 50ed869)", "exit": 0 }, { "cmd": "pnpm exec vitest run (full, 60ed1ad bump-only)", "exit": 1 }, { "cmd": "pnpm exec vitest run (full, 50ed869)", "exit": 1 }, { "cmd": "vitest targeted reruns after fixes (c7bbce48 tree)", "exit": 0 }, { "cmd": "check:lockfile-integrity", "exit": 0 }, { "cmd": "check:lockfile-dedupe", "exit": 0 }, { "cmd": "check:spec-floors", "exit": 0 }, { "cmd": "check:spec-symbols", "exit": 0 }, { "cmd": "check:installed-pin-claims", "exit": 0 }, { "cmd": "check:component-surface-parity (report-only)", "exit": 0 }, { "cmd": "check:doc-snippets", "exit": 0 }, { "cmd": "check:doc-types", "exit": 0 }, { "cmd": "check:doc-examples", "exit": 0 }, { "cmd": "check:readme-exports", "exit": 0 }, { "cmd": "check:new-line-citations", "exit": 0 }, { "cmd": "check:control-bytes", "exit": 0 }, { "cmd": "check:test-path-roots", "exit": 0 }, { "cmd": "check:changeset-claims", "exit": 0 }, { "cmd": "check:pending-changeset-literals", "exit": 0 }, { "cmd": "node scripts/check-changeset-presence.mjs", "exit": 0 }, { "cmd": "node scripts/check-changeset-no-major.mjs", "exit": 0 }, { "cmd": "check:eager-closure", "exit": 1 }, { "cmd": "check:eager-locale-catalogues", "exit": 0 }, { "cmd": "check:skill-examples / prompt-keys / sdui-registration-pins / i18n-keys / i18n-drift / i18n-dead-keys / action-forward-parity / designer-field-key-parity / phantom-deps / unused-deps / registry-bare-names / handler-key-reads / metadata-write-doors / doc-fences / doc-example-ids", "exit": 0 } ], "line_budget": { "additions": 942, "deletions": 574, "files": 85, "against": "merge-base 02a38967 (GitHub reads the same on the PR at c7bbce48); under the 5,000 human-merge line" }, "files_changed": 85, "eager_closure_measurement": { "instrument": "the console build's apps/console/dist/eager-closure.json (emitEagerClosureReport, gzipBytes per eager chunk), read by pnpm check:eager-closure; control = main 02a38967 built with turbo run build --filter=@object-ui/console... in its own worktree (spec 17.6.0); head = 25251a80 (shipped source identical to c7bbce48), same command family; 331 eager chunks on both", "chunk_rows_gzip_bytes": [ { "chunk": "vendor-objectstack", "control": 1421565, "head": 1604474, "delta": 182909 }, { "chunk": "ui-components", "control": 282560, "head": 282557, "delta": -3 }, { "chunk": "framework", "control": 74652, "head": 74670, "delta": 18 }, { "chunk": "src", "control": 176055, "head": 176052, "delta": -3 }, { "chunk": "i18n-locale-en", "control": 44497, "head": 44525, "delta": 28 }, { "chunk": "everything else (326 names)", "control": 1406387, "head": 1406376, "delta": -11 }, { "chunk": "aggregate", "control": 3405716, "head": 3588654, "delta": 182938 } ], "ceilings_that_fired": "MAX_EAGER_CLOSURE_GZIP_BYTES 3,410,284: head over by 178,370. PER_CHUNK_GZIP_CEILINGS vendor-objectstack 1,439,157: head over by 165,317 (PER_CHUNK_BASELINE 1,420,958). ui-components, framework and i18n-locale-en pass. The control passes all of them, with 4.5 KB aggregate headroom.", "attribution_below_chunk": "Instrument: raw and gzip-9 byte sizes of each ESM entry file in the installed @objectstack/spec 17.7.0 against the npm 17.6.0 tarball. Gzip deltas for the entries objectui's shipped code imports: shared +152,445 (raw +522,843; same 79 exports, while the bundle inlines 71 more strictObject( and 58 more lazySchema( call sites); browser (root) +66,383; browser/system +61,940; ui +42,688; browser/kernel +23,229; api +17,065; browser/data +11,196; ai +3,004; identity +956; security +355; contracts +115; automation -862. migrations grew +203,315, but no shipped objectui import names it (only tests do). Other @objectstack packages are small by comparison: lint +9,125, types +6,089, core +1,497, formula +929, client 0, sdui-parser -33. Prose proxy: 211 long string literals (80 chars or more) new in 17.7.0 are found in the head vendor chunk, 57,905 chars, about 19,830 gzip bytes on their own, roughly 11% of the growth.", "not_measured": "Which entries and modules the vendor chunk actually keeps after tree-shaking: the build emits no module-level sizes or sourcemaps for the chunk. So the split of the remaining growth, about 163 KB gzip, is NOT MEASURED. Whether any of it is code the first screen does not need, a lazy-load candidate on the objectui side versus a payback on the objectstack side, is also NOT MEASURED. The shared entry's growth behind an unchanged export list is the strongest objectstack-side payback lead.", "handling": "Left red. MAX_EAGER_CLOSURE_GZIP_BYTES, BASELINE, PER_CHUNK_BASELINE and the headroom constants are untouched, per the PM's guidance and the 11088 precedent (raised only on an explicit maintainer ruling)." }, "clause_2": "yes, by measurement. The @object-ui/types dist .d.ts files were compared, with comments dropped and line order ignored, between main 7300fca (spec 17.6.0, its own worktree) and this branch (17.7.0). 13 files differ, and 4 differ in declarations: zod/index.zod.d.ts (2,498 lines), zod/objectql.zod.d.ts (3,324), zod/public-blocks.zod.d.ts (374) and zod/layout.zod.d.ts (54). The emitted zod declarations inline spec shapes in both directions: typed action:group / action:menu members, new enum members (new-tab, separator-before), new optional keys (ast, bodyExtra), and ai:chat_window leaving the page component type unions. The two chained checks also narrow the runtime accept set. The claim said Clause-② no, and the PR body carries yes.", "mcp_calls": "0", "api_writes": "3 relay strokes, each sent as POST /repos/objectstack-ai/objectstack/dispatches and executed as objectstack-fleet[bot]: (1) pr_create, POST /repos/objectstack-ai/objectui/pulls (draft #11742); (2) label-write assign, POST /repos/objectstack-ai/objectui/issues/11742/assignees (os-support-ai); (3) this os-dev-report comment, POST /repos/objectstack-ai/objectui/issues/11717/comments. git push is not counted. Reads used unauthenticated REST through the proxy.", "open_questions": [], "deviations": [ "PR body and later measurements: the PR body is written once, at creation. It records the full-suite run as NOT MEASURED at PR open, and the eager-closure row in KB only. The byte-precise chunk table, the attribution and the head full-run reading are in this report. If the PR body should carry them, the seat pastes eager_closure_measurement into the Still red row, and the tests line into Tests.", "Clause-② is the measured yes, not the claim's no. The dispatch made the measurement decide.", "objectui#11334's one-dimension pie control: 17.7.0 refuses that pie through the single-series arm, so it cannot parse. The control is stated per arm: no dimensionless-arm issue on it, and a two-measure radar with one dimension parses on both faces.", "objectui#11396's pin said to drop the Omit on MasterDetailDetailConfig at this bump. The Omit is kept, because the 17.7.0 entry still lists sortField as a tombstone. The card lists prose only.", "Zone 3's owner-card searches were not run: this dev's contract leaves dedupe to the seat. Dedupe words are listed below.", "The verify lock was used for build, test, type-check and lint, as objectui AGENTS.md requires, although the dispatch said it does not apply.", "main moved again by 9 commits after the 25251a80 merge. The PR reads mergeable_state behind, and it was not re-merged. The queue rebuilds on main.", "One local full run was taken on the PR head, before the PM's guidance arrived, and it measured the same head CI did. None was started after." ], "out_of_scope_findings": [ "class: none of a/b/c (reported by row on the PR, not red) · carrier: objectui#6152 (triage 6020673439) · 17.7.0 types object-grid operations (strict, no read / import), conditionalFormatting (the list view's rules), and the object-calendar / object-kanban filter (rule array). objectui's renderers, mirrors, root README Data Grid example and several console parity pins sentences still accept or describe the older shapes; no test went red · dedupe words: object-grid operations read import, conditionalFormatting list view rules 17.7.0", "class: none (difference, reported by row) · carrier: objectui#8651 lane, for the seat · ObjectCalendarSchema.calendar keeps .passthrough() while the 17.7.0 spec slot is strict, so objectui admits an unexamined key the spec refuses (the forbidden direction of objectui#8327). The docblock now says so; following the spec by reference would narrow a published door · dedupe words: object-calendar calendar slot passthrough strict 17.7.0", "carrier: none · noted, not filed · scripts/__tests__/date-only-zone-pins-10183 goes red when a worktree's vitest results cache orders files so that a forked child carries TZ from an earlier pin into FormulaFunctions.dateOnlyZone-10866's UTC control (expected 03:00, got 11:00, Asia/Shanghai). The same head passes 27/27 with the cache moved aside; CI is green. No reach: field (test harness only) · dedupe words: date-only zone pins TZ leak forks child vitest cache order", "carrier: none · noted, not filed · ActionDef declares requiresFeature but not its 17.7.0 sibling requiresMembershipReach (both are lowered into visible by the spec's parse). It is inventoried only; whether the runner should read the raw key is unmeasured · dedupe words: requiresMembershipReach ActionDef" ], "leads_measured": "A1 confirmed (seven packages at 17.7.0 on npm, latest 17.7.0). A2 confirmed (ancestor exits: 0 for 32d5769080 / 6ec54f00 / 11d28c17df in 4e4e881427; 1 for 32d5769080 / 6ec54f00 in 617f25f8a4, with the root commit as the control leg at 0). A3(a) disproved (doc-snippets 782/782). A3(b) confirmed as a not-red difference. A3(c): no stale ledger (11344 booking: 0 hits; 11068: struck on main; 11536: still booked, parity green). A4: objectui#11334 and objectui#11417 complete, so Fixes lines for both. A5: types ^17.7.0, plus plugin-dashboard ^17.6.0 by spec-floors. A6: Clause-② yes.", "cleanup": "Control worktrees objectui-issue-11717-base and objectui-issue-11717-ctl removed (node_modules first, no --force). The work worktree /home/user/objectui-issue-11717 is kept, because the PM may continue this branch. No dev server or monitor was started.", "ci_state": "in_progress on c7bbce48 (24 success, 17 in_progress, 3 skipped at report time); Bundle Analysis is expected red (the eager-closure row)" }Session:
https://claude.ai/code/session_01XgevVHGcN8dnegiiY3v75V
Generated by Claude Code
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actions[待裁] 17.7.0 升级让 console 首屏多加载约 179 KiB(gzip),超出性能预算:按 17.5.0 先例借额度先落地,还是先瘦身?
domain:devx@ objectui 席 2(session_01XgevVHGcN8dnegiiY3v75V)· 2026-10-06T20:14Z维护者速读
- 一句话问题:把 objectui 升到
@objectstack/*17.7.0 后,用户每次打开 console 首屏要多下载约 179 KiB(gzip,首屏总量约 3.4 MB 的 5%)。这超出了 console 的首屏性能预算,CI 的Bundle Analysis因此红着。其余 41 项检查已绿或在跑,开发 agent 能修的红都已修完。 - 席位意见:荐 A,即照 17.5.0 先例(objectui#11088,你批的「11088 同意」)在本 PR 里抬高预算,同时立回收卡,回收落地后预算按回收量降回来。
- 你要做的:回一行,例如「11717 A」。
背景与实测
- PR objectui#11742(head
c7bbce48)已完成本卡全部机械工作:锁文件升到 17.7.0;objectui#11334 的镜像与 objectui#11417 的单序列分支已接上;objectui#11624 的sortField已翻转;另修了 17.7.0 带来的十几处机械红。开发 agent 的报告是6024525892。 - 唯一不能机械处理的红:console 首屏加载的总包体(eager closure)超预算。
- CI 日志读数:
BUDGET_CLOSURE_GZIP_KB: 3504.6,预算3330.4。main上同一检查是绿的。 - 开发 agent 实测(对照
main02a38967,同一构建命令):增量全部落在vendor-objectstack这一块,+182,909 字节;其余 330 块合计净变化约 0。 - 增量来源(开发 agent 对比 npm 上 17.6.0 和 17.7.0 两个版本各入口文件的 gzip 字节):
@objectstack/spec的shared入口 +152,445,导出名单没变,增长来自更多严格 schema(多出 71 处strictObject(、58 处lazySchema();其次是根入口 +66,383、ui+42,688。 - 未测量:摇树之后到底留下了哪些模块;其中哪些是首屏用不到的。
- CI 日志读数:
- 多出的字节换来什么:console 在编辑时的校验与 17.7.0 服务端一致。图表度量数、退役的
sortField、页面requires要求有kind、element:text退役的标题变体、审批节点配置、一批object-*成员收紧,都会当场拒收,作者或 AI 不会写出保存时才被服务端拒的元数据。同时解锁 9 张在等这次升级的卡(卡正文表里 8 张,加上分诊6020673439更正的 objectui#6152),本 PR 顺带关掉 objectui#11334 与 objectui#11417。
Governing text
scripts/check-eager-closure-budget.mjs头部「Raising it」节:「Re-baselining is legitimate — it is how a ratchet advances — but it is a DECISION, so make it visible: update the constant, update the measured figure in the prose attached to it, and say in the PR what the added bytes buy.」- 同文件「RAISED A THIRD TIME, ON EXPLICIT MAINTAINER RULING (objectui#11088; objectui#11073)」:每次抬高都出自维护者明确裁定。
- 先例裁定
5890854293(objectui#11088,本趟已取回):「The ceiling and the headroom assertion … are raised to the new baseline in the same commit …, the PR body states what the 413.8 KB gzip buys …, and two payback cards are filed in the same stroke. The upgrade lands now. Precedent: objectui#5531」。
前提(各带复核命令)
- P1:本 head 的
Bundle Analysis因 eager-closure 预算失败。复核:GET /repos/objectstack-ai/objectui/commits/HEAD_SHA/check-runs?check_name=Bundle%20Analysis看 conclusion,再读 job 日志 grepBUDGET_CLOSURE_(日志须走 MCPget_job_logs)。 - P2:
main上同一检查是绿的。复核:对main现 head 发同一请求(席位读到d39ac2e5为 success)。 - P3:增量全在
vendor-objectstack。这是开发 agent 的实测,席位未重测。复核:两棵树各自构建 console,比对apps/console/dist/eager-closure.json。
选项 × 真实代价
选项 做什么 用户可感知的后果 A 借额度先落地 本 PR 同一提交里抬高总预算、 vendor-objectstack分块预算与 BASELINE,余量照旧是半个回归量;PR 写明多出的字节换来什么;同笔立回收卡(objectstack 侧:specshared入口在导出不变时涨了 152 KB gzip;是否要 objectui 侧的卡由实测决定)首屏今天就多 179 KiB;编辑校验立刻与服务端一致;9 张卡解锁。回收卡落地后,预算按回收量降回 B 先瘦身再升级 PR 停在草稿;先在 objectstack 侧把 spec 入口减下来,发新版本后再升级 首屏不变大;但 console 继续按 17.6.0 校验,作者写出服务端会拒的元数据,保存时才报错;9 张卡继续等 C objectui 侧懒加载 先把 spec 校验移出首屏再落地 能救回多少未测量;17.5.0 那次读源码的结论是大头在 spec 入口里,console 侧懒加载救不回大部分 业务含义直译:A = 先赊账把新货上架,账单和还款计划同时写好;B = 等供应商把包装改小再上货,这期间货架上是旧版;C = 自己拆包装重装,省多少不知道。
四轴(业务立场)
- 项目长远合理性:A 是带具名还款卡的借贷,先例两次都还了(objectui#11101、objectstack#20646 落地后预算两次下调);B 让 console 与服务端的校验长期不一致;C 是消费端绕行,收益未测。
- 实际业务拉动:9 张卡在等这次升级(实测于本卡正文与分诊更正);你点名「11717 最优先」。
- 防 AI 犯错:A 让 AI 在 console 写元数据时当场被拒(响亮);B、C 拖期间,AI 在 console 里写出的是服务端保存时才拒的文档(编辑期静默)。
- 创业阶段不扩散:A 只按裁定改既有门禁的参数,不新增门禁也不加豁免;C 要多一套懒加载结构。
os-decision-facets
① 项目长远合理性:A 借额度带具名回收卡,先例两次回收兑现;B 拉长前后端校验分歧;C 消费端绕行,收益未测。
② 实际业务拉动:9 张卡等升级(实测);维护者点名最优先。
③ 防 AI 犯错:A 编辑期响亮拒收;B/C 期间 console 静默接受服务端会拒的文档。
④ 创业阶段不扩散:A 只改既有门禁参数,不加门禁不加豁免;C 新增懒加载结构。
Prior rulings read: eager-closure budget raise → objectui#110885890854293(A),objectui#5531(gate header 引用,未逐字取回); ADR none; thread: 本卡60245258926020673439推荐:A,回退 B。只看①选 A;②③④ 是否翻转:否。
置信缺口:摇树后留在首屏的具体模块未测量,所以回收卡能收回多少未知;首屏是否真需要这些 schema 也未测量。裁后执行
- 裁 A:
- 本席续派同一个开发 agent:合并最新
main;在一个提交里改MAX_EAGER_CLOSURE_GZIP_BYTES、BASELINE、PER_CHUNK_BASELINE,头部按 11088 的格式写明分块表、换来什么与回收卡号; - 本席立回收卡:objectstack 侧 spec
shared入口体积;objectui 侧仅在实测指向时立; - 契约复核(达档)覆盖落地 head 后,翻 ready、入队。
- 本席续派同一个开发 agent:合并最新
- 裁 B:本卡转
pm:blocked,Blocked-by:指向新立的 objectstack 瘦身卡;PR 保持草稿。 - 裁 C:本席续派开发 agent 先测量可懒加载的量,按读数回报。
本笔状态:
pm:dispatched→needs-user-decision。认领、assignee 与 PR 都保留;PR 保持草稿。在途的达档契约复核照常进行。
Generated by Claude Code
- 一句话问题:把 objectui 升到
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actions✅ ACCEPT (work as delivered): PR objectui#11742 at
c7bbce48. Landing waits on the maintainer's ruling6024630321domain:devx@ objectui seat 2 ·session_01XgevVHGcN8dnegiiY3v75V· 2026-10-06T20:25Z. Reviewed against GitHub, not against the report (6024525892).Checklist
- Shape: draft PR to
main; the first line references the card. The closing lines areFixes #11717,Fixes #11334andFixes #11417, and the body has no other closing keyword. objectui#11334's scope (chain, census row, import list,piepin) and objectui#11417's remaining item (the single-series arm) are both completed in the diff. - Scope: 85 files, +942 / −574 (
pulls/11742), under the 5,000-line human-merge line. No path under.claude/**,skills/**,docs/adr/**,AGENTS.md,CLAUDE.md,.github/**orcontent/docs/releases/**. The mirror is chained by import inpackages/types/src/zod/complex.zod.ts, with no second copy (diff read). - Changesets: nine, none
major.@object-ui/typesisminorfor the two narrowings, which matchesClause-②: yes. Zero-release edits ride the empty-frontmatter11717-bump-prose. - CI on
c7bbce48: 41 success and 3 skipped by design (push-only coverage, actor-gated dependabot).Lint,Type Check,Spec Main Shape Gate, all eightTestshards andBuild & E2Eare green. The 1 failure isBundle Analysis, the non-mechanical row (PR comment6024667002). - Contract review: at-tier record
6024785014on the PR, PASS atc7bbce48.Clause-②is a measuredyes, and the claim line is amended to match. - Deviations accepted: the one-dimension
piecontrol stated per arm (17.7.0 refuses thatpiethrough the single-series arm); theOmitkept onMasterDetailDetailConfig(the 17.7.0 entry still lists the tombstone).
Out-of-scope findings
object-grid/object-kanban/object-calendar17.7.0 shape moves (operations,conditionalFormatting,filter): Acceptance notes, carrier objectui#6152 (triage6020673439).ObjectCalendarSchema.calendarkeeps.passthrough()while the 17.7.0 slot is strict: carrier objectui#6152. The card the dev named, objectui#8651, is closed. A pointer comment on objectui#6152 is posted at landing, when the divergence reachesmain.date-only-zone-pins-10183red only with a local vitest results cache: dropped. Every CI shard is green on this head, and it has no reach beyond a local cache.ActionDeflacksrequiresMembershipReach: dropped, because noreach:was measured (the spec's parse lowers it intovisible).
Landing route
- Ruling A: the same dev continues on this branch. It merges
main, then raisesMAX_EAGER_CLOSURE_GZIP_BYTES,BASELINEandPER_CHUNK_BASELINEin one commit in the objectui#11088 shape. The seat files the payback card(s). A contract review covers the landing head. Then ready, then auto-merge. - Ruling B or C: per decision request
6024630321.
Generated by Claude Code
- Shape: draft PR to
objectstack-fleet commented
on Oct 7, 2026 ContributorAuthorMore actionsRuling: A. The maintainer's answer to decision request
6024630321domain:devx@ objectui seat 2 ·session_01XgevVHGcN8dnegiiY3v75V· 2026-10-07T00:19Z- Provenance: the maintainer, in this seat's session chat. They first asked 「11742 红了,什么情况」, and the seat answered with the decision put as a question with options A, B and C. The maintainer selected, verbatim: 「A 抬预算+回收卡 (Recommended)」.
- Freshness gate: no comment on this card after the seat's ACCEPT
6024824834. The decision request6024630321is the latest statement of the question. - Ruled: the eager-closure ceiling (
MAX_EAGER_CLOSURE_GZIP_BYTES),BASELINEand thevendor-objectstackrow ofPER_CHUNK_BASELINE/ its per-chunk ceiling are raised in one commit of PR objectui#11742, in the objectui#11088 shape:- the header names this ruling;
- the header gives the chunk table (control vs head, instrument named) and what the bytes buy;
- the headroom stays half of
REGRESSION_THIS_GATE_MUST_CATCH_BYTES.
A payback card is filed in the same stroke. When it lands, the ceiling andBASELINEcome down by the amount it recovers.
- Not taken: B (hold the bump until the spec slims) and C (an objectui-side lazy load whose yield is unmeasured).
- State:
needs-user-decision→pm:dispatchedin this act. The claim, the assignee and PR objectui#11742 are unchanged. - Next: the same dev continues on
claude/issue-11717-objectstack-17-7-0. It mergesmain(13 commits behind), re-measures on the merged head, and raises the constants. An at-tier contract review then covers the landing head, and the PR goes ready and to auto-merge.
Generated by Claude Code
objectstack-fleet commented
on Oct 7, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 11717, "round": 2, "status": "done", "branch": "claude/issue-11717-objectstack-17-7-0", "pr": "https://github.com/objectstack-ai/objectui/pull/11742", "session": "session_01XgevVHGcN8dnegiiY3v75V", "premise_still_valid": true, "summary": "Round 2 carried out ruling A (6027998226, verbatim 「A 抬预算+回收卡 (Recommended)」, answering decision request 6024630321). (1) origin/main 9b673e54 was merged as a merge commit, c1e32e96. git merged it with no conflict, the lockfile included. pnpm install --frozen-lockfile exits 0. The 43 test files the merge brought in pass against 17.7.0, so the merge brought no new red to fix. (2) The eager closure was re-measured on c1e32e96 against a 9b673e54 control built the same way in its own worktree. Aggregate +183,008, of which vendor-objectstack is +182,909. (3) One commit, b680973f, raises the line in the objectui#11088 shape. BASELINE goes to 3,591,028 over 331 of 2451 chunks on c1e32e96. MAX_EAGER_CLOSURE_GZIP_BYTES goes from 3,410,284 to 3,637,000 (baseline + 45,568, rounded to the thousand; headroom 0.50x). vendor-objectstack's PER_CHUNK_BASELINE goes from 1,420,958 to 1,604,474 and its ceiling from 1,439,157 to 1,623,000 (0.20x). A new header section, 'RAISED A FOURTH TIME, ON EXPLICIT MAINTAINER RULING (objectui#11717)', carries the ruling, the chunk table with both commits and the instrument, what the bytes buy, and payback objectstack#22044. REGRESSION_THIS_GATE_MUST_CATCH_BYTES is untouched. There is no exemption and no lazy import, and the other three per-chunk rows passed and did not move. (4) The container restarted after b680973f was committed and before it was pushed. Both commits were re-read as unverified, and every gate was re-run on b680973f before the push. The PR body was updated once.", "tests": "All on b680973f after the container restart, unless a line says otherwise. Exit codes were written to disk before any pipe. (a) Under the lock: pnpm exec vitest run --maxWorkers=2 scripts/__tests__/check-eager-closure-budget.test.ts gives 'Test Files 1 passed (1) / Tests 179 passed (179)' and 'VERDICT command-exit 0'. With scripts/__tests__/check-installed-spec-pin-claims.test.ts beside it, the result is 'Test Files 2 passed (2) / Tests 208 passed (208)', VERDICT 0. (b) The 43 test files the main merge brought in ran under the lock before the restart, on the c1e32e96 tree. The only extra state then was this round's uncommitted scripts/ and .changeset edits, which those tests do not read. Result: 'Test Files 43 passed (43) / Tests 376 passed (376)', VERDICT 0. (c) Also before the restart: the 9 suites that name the edited gate scripts gave 'Test Files 9 passed (9) / Tests 318 passed (318)', VERDICT 0. (d) The full-suite readings from round 1 are now pasted into the PR's Tests section. On 60ed1ad: 24 failed | 4458 passed | 7 skipped files; 41 failed | 60842 passed | 359 skipped tests. On 50ed869: 4 failed | 4494 passed | 7 skipped files; 5 failed | 61065 passed | 359 skipped tests. Two of those failures were fixed in c7bbce48 (CI on c7bbce48: 41 success, 3 skipped, 1 failure, Bundle Analysis only). The other two are not this branch's: a timeout under load, and the vitest results-cache artefact. No full local suite ran this round, as directed. No ablation was owed: the reverse proof is the gate itself. The retired constants red on the c1e32e96 build (check:eager-closure exit 1, round-2 measurement), and the new ones are green on the same build (exit 0).", "eager_closure_measurement": { "instrument": "pnpm exec turbo run build --filter=!@object-ui/site --concurrency=2 in each worktree under scripts/pm/os-verify-lock.sh (control: VERDICT command-exit 0, 328s; head: VERDICT command-exit 0, 372s, 43/43 tasks), then pnpm check:eager-closure, which reads apps/console/dist/eager-closure.json; same container", "control": "9b673e54 (origin/main), its own worktree, 17.6.0 resolved: 3,408,020 over 331 of 2451 chunks", "head": "c1e32e96 (merged head), 17.7.0: 3,591,028 over 331 of 2451 chunks", "rows": { "vendor-objectstack": [ 1421565, 1604474, 182909 ], "ui-components": [ 283061, 283079, 18 ], "framework": [ 74774, 74785, 11 ], "src": [ 176172, 176181, 9 ], "i18n-locale-en": [ 44592, 44620, 28 ], "everything else (326 names)": [ 1407856, 1407889, 33 ], "aggregate": [ 3408020, 3591028, 183008 ] }, "re_derived_after_restart": "Both eager-closure.json files were re-read after the restart and every row above was re-derived from them, matching to the byte.", "attribution_below_chunk": "This was not measured by a build: the build records no module-level sizes. The round-1 entry-file byte diff of the two installed releases stands. spec shared was +152,445 gzip as a standalone file, then browser root +66,383, browser/system +61,940, ui +42,688 and browser/kernel +23,229." }, "gates": [ { "cmd": "pnpm install --frozen-lockfile (c1e32e96 before the restart; b680973f after it)", "exit": 0 }, { "cmd": "pnpm check:eager-closure (b680973f, console build of c1e32e96; b680973f changes no bundler input). 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-objectstack 1566.9 / 1585.0 KB 0.20x", "exit": 0 }, { "cmd": "pnpm check:eager-closure (c1e32e96 with the retired constants, the round-2 measurement)", "exit": 1 }, { "cmd": "vitest scripts/__tests__/check-eager-closure-budget.test.ts (179/179)", "exit": 0 }, { "cmd": "vitest check-eager-closure-budget + check-installed-spec-pin-claims tests (208/208)", "exit": 0 }, { "cmd": "pnpm check:new-line-citations: 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only'", "exit": 0 }, { "cmd": "pnpm check:control-bytes: 'OK (scanned 7745 tracked text file(s); skipped 85 binary)'", "exit": 0 }, { "cmd": "pnpm check:changeset-claims: 'No pending changeset names a file this change touches.'", "exit": 0 }, { "cmd": "pnpm check:pending-changeset-literals: 'No test source names a pending changeset.'", "exit": 0 }, { "cmd": "pnpm check:installed-pin-claims (the ledger entry for the gate file re-counted to 1 site): 'OK'", "exit": 0 }, { "cmd": "node scripts/check-changeset-presence.mjs: 70 source file(s) of 16 released package(s), 9 changeset(s) declared", "exit": 0 }, { "cmd": "node scripts/check-changeset-no-major.mjs: 'No changeset declares a major bump.'", "exit": 0 }, { "cmd": "pnpm type-check:scripts (tsc -p tsconfig.scripts.json), under the lock", "exit": 0 }, { "cmd": "vitest: 43 merged-in test files on the c1e32e96 tree (376/376)", "exit": 0 } ], "line_budget": { "round_2_commit_b680973f": "4 files, +143 / -35", "pr_against_main": "87 files, +1083 / -607 against 9b673e54, the lockfile included; under the 5,000-line human-merge line", "governed_paths": "none (.claude/**, skills/**, docs/adr/**, AGENTS.md, CLAUDE.md: 0 files)" }, "files_changed": [ "c1e32e96 (merge of origin/main 9b673e54, no conflict, no hand edits)", "scripts/check-eager-closure-budget.mjs (b680973f)", "scripts/__tests__/check-eager-closure-budget.test.ts (b680973f: rendered literal 3306.8 to 3506.9 at its two pins, and the ledger case's history comment)", "scripts/check-installed-spec-pin-claims.mjs (b680973f: LEDGER entry for the gate file, sites 2 to 1)", ".changeset/11717-objectstack-17-7-0.md (b680973f: the '@object-ui/console': patch line and bullet)" ], "changeset": "@object-ui/console is not private (no private field), is in .changeset/config.json's fixed group, and is not in ignore. Per AGENTS.md section 9, a real bump bullet is the right form, not an empty declaration. Following 6158e4c, the bump changeset 11717-objectstack-17-7-0 gains '@object-ui/console': patch and a bullet for the closure delta and the budget re-pin.", "mcp_calls": "0. No MCP tool was called this round. Reads went through gh api and curl over REST.", "api_writes": "2 relay strokes, each sent as POST /repos/objectstack-ai/objectstack/dispatches and executed as objectstack-fleet[bot]. (1) issue_patch on PATCH /repos/objectstack-ai/objectui/issues/11742 (the PR body): run 37554090575 success; read-back '23230 byte(s) sent, 23230 stored — identical'. (2) This os-dev-report comment, POST /repos/objectstack-ai/objectui/issues/11717/comments, through scripts/pm/post-stamped.mjs. git push (c7bbce48..b680973f, not forced) is not counted. No ready, auto-merge, label or assignee action was taken.", "open_questions": [], "deviations": [ "The container restarted after b680973f was committed and before it was pushed. Following the PM's recovery note, c1e32e96 and b680973f were re-read hunk by hunk as unverified, and the gates were re-run on b680973f. The console build in apps/console/dist survived the restart and was not rebuilt. It was built at c1e32e96, and b680973f touches only scripts/ and .changeset/, which no bundler reads. Both eager-closure.json files were re-read and the table re-derived to the byte.", "The 43 merged-in test files and the 9 sibling script suites ran before the restart, not after it. Their readings are cited with the tree they ran on.", "One file outside the gate and its test moved in the raise commit: scripts/check-installed-spec-pin-claims.mjs. Its LEDGER entry for the gate file counted 2 historical 17.6.0 sites, and the provenance sentence that must cite BASELINE's live commit now names the 17.7.0 build c1e32e96. check:installed-pin-claims reported 'entry says 2 site(s), the tree has 1' and was fixed by re-counting the entry. This is mechanical, and the gate is green.", "The PR title still reads '... one non-mechanical red reported by row (objectui#11717)'. Only the body was in the write budget, so the title was not touched. If the seat wants to retitle, a suggested title is: '... ; the eager-closure line raised on maintainer ruling A (objectui#11717)'.", "The worktree /home/user/objectui-issue-11717 is kept, not removed, so a patch round can continue in it, as this recovery did. The control worktree objectui-issue-11717-ctl2 was removed: node_modules first, then git worktree remove without --force, exit 0.", "The commit trailers are the model-free pair from the dispatch contract (Claude-Session and 'Co-authored-by: Claude'). A harness reminder asked for a model-named trailer. It was not followed, because the agent contract's precedence clause applies." ], "out_of_scope_findings": [ "None new in round 2. Round 1's Acceptance notes and its two 'differences no gate reads' rows (objectui#8651 lane; objectui#6152) stand unchanged." ], "cleanup": "No process of this run is alive: the restart ended all of them, and nothing was started in the background after it. ctl2 worktree removed. The objectui-issue-11717 worktree is kept for patch rounds.", "ci_state": "in_progress. PR CI on b680973f at report time: 23 success, 18 in_progress, 3 skipped, 0 failure. Bundle Analysis, Lint and Type Check are in_progress. The five Changeset checks succeeded. Per the contract, the report does not wait on CI." }objectstack-fleet commented
on Oct 7, 2026 ContributorAuthorMore actions✅ Round 2 accepted; PR objectui#11742 is ready, with auto-merge on (queue landing)
domain:devx@ objectui seat 2 ·session_01XgevVHGcN8dnegiiY3v75V· 2026-10-07T01:08Z. Reviewed against GitHub, not against report6028471471.- Head:
b680973f=c1e32e96(merge oforigin/main9b673e54; its diff tomainis exactly the branch's own content) +b680973f(the raise under ruling A6027998226, 4 files +143/−35). - Ruling A checked against the diff:
MAX_EAGER_CLOSURE_GZIP_BYTES3,410,284 → 3,637,000, which isBASELINE3,591,028 (measured onc1e32e96) plus 45,568, rounded;vendor-objectstackbaseline 1,420,958 → 1,604,474, and its ceiling → 1,623,000;REGRESSION_THIS_GATE_MUST_CATCH_BYTESuntouched;- the header section names the ruling, the chunk table and payback spec: the
sharedentry grew +152 KB gzip from 17.6.0 to 17.7.0 with the same exports, and objectui's console first screen carries it (the payback owed by objectui's 17.7.0 budget raise) objectstack#22044.
- CI on
b680973f: 42 success and 3 skipped by design (push-only coverage, actor-gated dependabot); 0 failure.Bundle Analysisis green: 3506.9 KB against 3551.8 KB (6028487050). - Contract review: the at-tier record
6028656926on the PR, PASS atb680973f, the landing head. - Landing gates:
check-governed-merges --pr objectstack-ai/objectui#11742reads not governed (0 of 87 paths), 1,690 lines, under the 5,000 line;mergeableisclean;- the closing keywords are exactly
Fixes #11717,Fixes #11334andFixes #11417.
- Done in this act:
pr_ready+automerge_enablethrough the relay (run 37555477827). Read back:draft: false, auto-merge on. - At MERGED:
- the seat confirms the landing by content;
- it checks that only the three
Fixescards closed; - it posts the
ObjectCalendarSchema.calendarpassthrough pointer on objectui#6152, per ACCEPT6024824834.
Generated by Claude Code
- Head:
objectstack-fleet commented
on Oct 7, 2026 ContributorAuthorMore actionsLanded: PR objectui#11742 merged through the queue as
c0862c1cdomain:devx@ objectui seat 2 ·session_01XgevVHGcN8dnegiiY3v75V· 2026-10-07T01:33Z- Verified on objectui
origin/mainby content:pnpm-lock.yamlresolves@objectstack/[email protected](2 keys), with 0 keys left at 17.6.0, which is the control;packages/types/package.jsondeclares"@objectstack/spec": "^17.7.0";complex.zod.tschains.superRefine(checkDashboardWidgetChartMeasureArity);MAX_EAGER_CLOSURE_GZIP_BYTES = 3_637_000(ruling A6027998226).
- Closed
completedby the PR's closing lines: this card, objectui#11334 and objectui#11417. No other objectui issue closed in that window (closed-issue list read for 01:29–01:31Z). - State flushed in this act:
pm:dispatchedremoved here and the claim's assignee released.pm:on-holdremoved from objectui#11334 and objectui#11417, each with a note. - What follows, ⛔ not by this card's own act:
- The held cards in this card's table, plus objectui#6152 (triage
6020673439), now have the release half of theirRestart-when:met onmain. Triage's unlock scan releases each one after re-reading its own condition. - Payback spec: the
sharedentry grew +152 KB gzip from 17.6.0 to 17.7.0 with the same exports, and objectui's console first screen carries it (the payback owed by objectui's 17.7.0 budget raise) objectstack#22044 lowers the eager-closure ceiling by what it recovers, once objectui resolves it.
- The held cards in this card's table, plus objectui#6152 (triage
- Acceptance-note carrier: the
ObjectCalendarSchema.calendarpassthrough difference now onmainis pointed at objectui#6152 in this act.
Generated by Claude Code
- Verified on objectui
- added a commit that references this issue
on Oct 7, 2026
Filing gate: ④ a coordination node. One change unblocks many held cards. Filed by the triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015,
session_01AavokzJ5DndAwitDXvKy4U) at the unlock scan after@objectstack/spec17.7.0 reached npm (published 2026-10-06T12:22Z). objectstack-ai/objectstack#21352 merged at 2026-10-06T11:49Z, and the tag commit is4e4e881427. The shape is objectui#11438's, the 17.6.0 bump. ⛔ Not a claim.Why one card
These objectui cards are
pm:on-holdon "an@objectstack/*release that carries X, and objectui resolves it". Each X was tested against the 17.7.0 tag commit4e4e881427withgit merge-base --is-ancestor.f5b8e29e37(PR objectstack-ai/objectstack#21890)48297ad980(PR objectstack-ai/objectstack#21833)6dd99b82c3(PR objectstack-ai/objectstack#21566)39119014dc(PR objectstack-ai/objectstack#21344)dcc5ef4c5a(PR objectstack-ai/objectstack#21256)99e1912afc(PR objectstack-ai/objectstack#21342)32d576908032d5769080Not released by 17.7.0: objectui#11168 (it waits on a maintainer ruling), objectui#10971 (a producer measurement), objectui#6152, objectui#5144, objectui#3592 and objectui#2763 (each waits on something other than a release).
objectui
origin/mainstill declares"@objectstack/spec": "^17.6.0"inpackages/types/package.json, andpnpm-lock.yamlresolves@objectstack/[email protected](read at filing). Every row above names "objectui resolves it" as half its trigger. Eight claimants each bumping the lockfile would collide, so this card does it once.The change
@objectstack/*dependencies to 17.7.0, and regeneratepnpm-lock.yamlwith the repository's own tooling. ⛔ Never edit it by hand.^17.7.0). The consuming card may do this instead: say which in the PR.5956401275) says the PR that bumps@objectstack/speccarries the mirror, re-attachingcheckDashboardWidgetChartMeasureArityunder its new name by import. objectui#11417 closes with it. ⛔ No second copy of the check.One red the bump will meet, by design
This is from the cross-lane memo of
domain:spec @ objectui(objectstack-ai/objectstack#6015, comment6016611286).1c2e2c46) pinssortFieldon theobject-master-detail-formdetailsentry as accepted. 17.7.0 carries6ec54f00, which retires that key, so those rows go red at the bump.MasterDetailDetailConfigdocblock inMasterDetailForm.tsx;masterDetailDetailsMembers-8071.test.tsxand the header of the types pin;detailsregistration description inplugin-form'sindex.tsx;object-master-detail-form.details.After it lands
Each row above then has its
Restart-when:met. Triage's next unlock scan releases each hold, after re-reading its own condition on the merged ref. ⛔ No hold is released by this card's own act.Generated by Claude Code