Skip to content

决策:#7391 在 @object-ui/react 唯一入口上发布了 5 个符号,而裁定 a′ 写的是「the constant is internal」——就地追认、迁 core、还是收回? #7508

Description

@os-project-manager

⛔⛔ THIS CARD IS RULED. The paragraph below is stale — do not read it as a bar on dispatch.

The maintainer ruled it on 2026-09-03, A′, in comment 5529427804 (director seat, decision batch #24; verbatim reply 「11977 转维护者,其他同意」). That ruling also records the state transition it carries: needs-user-decision → pm:queue. ⇒ this is an implementation card and has been one since that date.

What was ruled: applyNonGridRowCeiling / NonGridCeilingResult / NON_GRID_ROW_CEILING move to @object-ui/core, with @object-ui/react keeping the names by re-export; NON_GRID_ROW_CEILING_TOP is deleted from the public surface and the +1 lives only in an exported nonGridRowCeilingQuery(): { $top }; NonGridRowCeilingNote takes result: NonGridCeilingResult and nothing else, ⛔ with no deprecated prop path. The a′ 「the constant is internal」 line is corrected on the record: in this repo's package shape a helper shared by four packages is public by construction, and core is its correct home. Execution: domain:ui, S–M, Part of #7210 / Fixes #7508, Clause-② yes ⇒ the landing PR carries needs:contract-review; changeset minor on core and react.

⛔ Do not re-open the three-way question below, and ⛔ do not file it as a decision. See comment 5529427804 for the full ruling and its execution notes.

一句话

#7210 的裁定 a′ 逐字写着 「Clause-② no (no contract change; the constant is internal and the footnote is renderer copy)」,而落地的 PR #7391 在 packages/react/src/index.ts 上发布了五个符号。裁定的前提没有成立,该发布面今天已经在 main 上。⛔ 本席不裁——这是对已发布 API 的处置,且与维护者裁定的字面直接相抵。

现在做便宜,以后不便宜:审计实测,除四个渲染器与测试外今天没有任何消费者 import 这五个符号中的任何一个。这个窗口一旦有下游采纳就关上了。

发布了什么

packages/react/src/index.ts:100-113:

export {
  NON_GRID_ROW_CEILING,
  NON_GRID_ROW_CEILING_TOP,
  applyNonGridRowCeiling,
  NonGridRowCeilingNote,
} from './utils/nonGridRowCeiling.js';
export type { NonGridCeilingResult } from './utils/nonGridRowCeiling.js';

为什么会走到这里(责任在派发席,记在明处)

不是执行车道擅自扩面。那一轮本席自己下的 barrel 围栏把出路堵死了:#7210 评论 5511301369 声明 core 归 #7349、types+components 归 #7182 当轮所有,「需要就停下回报」。四个渲染器共用一个常量,唯一没被围住的包是 react,而 react 没有 subpath export ⇒ 「把常量放进 react」在物理上只能等于「发布它」。

⚠️ 车道当时应当停下回报(围栏原话如此),而不是铸出 API;但围栏的写法没有点明「若唯一剩下的家是已发布入口,停」。两边各承一半,前一半是本席的。

index.ts:100-104 的注释还把这段历史写成了一个实测为假的技术理由——「the only package all four already depend on」;四个插件的 package.json 各自同时依赖 core、components、types。该注释的订正已单独立卡 #7507(仅改注释,⛔ 不动符号)。

逐符号的可支撑性(审计读数)

符号 读数
applyNonGridRowCeiling / NonGridCeilingResult 可支撑,可加性演进(可选 options 参数、可加字段)。⚠️ 但 total 非来源可信:服务端不报 total 时 data-objectstack 用 records.length 顶替(packages/data-objectstack/src/index.ts:3624-3646),这类服务端上脚注会读成「first 2000 of 2001」。ObjectStack 服务端报 total,故属边界注记。
NON_GRID_ROW_CEILING 可支撑,但家不对:applyNonGridRowCeiling 是 core 自己的 extractRecords 的包装,四个插件本来就从 core import 它。
NON_GRID_ROW_CEILING_TOP 实现细节被发布。它存在只因机制被劈成两半($top 在调用点、切片在 helper)。任何未来的截断探测策略(hasMore、可信 total)都会让它退化成残件。
NonGridRowCeilingNote 形状是陷阱:收 drawn/total/truncated 三个散 prop,而每个调用点都硬写 drawn={NON_GRID_ROW_CEILING}。组件从不见到它本该渲染的 NonGridCeilingResult ⇒ 不自洽的脚注是可表达的。(组件出现在该入口本身有先例:SchemaRenderer、I18nProvider、ElementDataSourceGate。异议在形状,不在类别。)

选项

A —— 迁 @object-ui/core,react 保留再导出(审计的建议)。 把 NON_GRID_ROW_CEILING、applyNonGridRowCeiling、NonGridCeilingResult 移到 core(extractRecords 旁边),react 继续 export … from '@object-ui/core'——react 早已这样再导出下层符号(export { I18nProvider, … } from '@object-ui/i18n'),先例在。零破坏。 另加性收 _TOP(导出一个 nonGridRowCeilingQuery(): { $top },调用点再不手写 +1)与重塑 Note(收 result: NonGridCeilingResult,drawn 由 result.rows.length 推得,旧散 prop 保留为 deprecated 路径)。
⇒ 修好了家与形状,但五个符号仍是公开 API,裁定 a′ 的「internal」并未回复。

B —— 回到裁定的字面:收回发布面。 五个符号全部下架,常量落在一个四个插件都能吃到而不经已发布入口的位置。⚠️ 本席读下来这可能做不到:每个包都只有唯一入口,react 无 subpath export ⇒ B 实际要求先给某个包开 subpath export(或新开一个内部包),那本身是更大的一步。若维护者要 B,请一并裁明这一步走哪条。

C —— 就地追认。 承认裁定 a′ 的「internal」前提在本仓的包形状下不可达,把五个符号作为公开 API 追认,只做 #7507 的注释订正与 _TOP 的文档降级(标注为派生/测试用)。
⇒ 最省,但把一个「因排期围栏而选中的家」永久冻进公开 API。

本席倾向:A

理由:(a) 真实需求——core 是四个插件本来就依赖并从中取 extractRecords 的包,家对了代码才读得顺;(b) 长期健全——_TOP 与 Note 的两处加性修整把「不自洽脚注可表达」和「调用点手写 +1」两个真陷阱都关掉,且都零破坏;(c) AI 不易做错——nonGridRowCeilingQuery() 让 +1 只有一处;(d) 创业期尺度——今天零外部消费者,A 是一次性的便宜迁移,B 要先开 subpath export(实现优先、无人拉动),C 则把已知错的家冻住。

⛔ 但 A 不回复裁定 a′ 的字面前提,所以它需要维护者点头而不是本席自裁。

派工状态

⛔ 本卡不可派工,needs-user-decision。不带 pm:queue 标签——本卡在裁定前不进队列,这是 #6853 点名的缺陷(卡片自己说不可派工,而标签仍在招手)。

不受本卡阻塞、已单独立卡并本轮派工的:#7507(pin 不判定上限、docblock 判别机制写错、changeset 档位与文案、calendar 陈旧 ceiling、假的依赖注释)。审计全文逐字见 #7391 评论 5527977938。


Generated by Claude Code

Activity

  1. os-project-manager commented on Sep 3, 2026

    @os-project-manager
    CollaboratorAuthor

    Maintainer ruling recorded — A′: move the three supportable symbols to @object-ui/core, delete _TOP outright, reshape Note to take the result — no deprecation paths (2026-09-03)

    Provenance. Ruled by the maintainer (pm@objectstack.ai) in the director seat's live session (session_01ShyhexkB2d1AeRZ85tgAAe), decision batch #24, 2026-09-03 after 16:30Z. Verbatim reply: 「11977 转维护者,其他同意」 — this card was presented with recommendation A′ (A without transition paths; fallback C), so 「其他同意」 adopts A′. Ledger: objectstack#12708, batch #24 ledger comment.

    What was ruled. Zero external consumers exist today, so the window is open and nothing is kept for compatibility:

    • applyNonGridRowCeiling, NonGridCeilingResult, NON_GRID_ROW_CEILING move to @object-ui/core beside extractRecords; @object-ui/react keeps the names via export … from '@object-ui/core' (the existing re-export precedent), and the four renderers import from wherever their package already imports core helpers;
    • NON_GRID_ROW_CEILING_TOP is deleted from the public surface; the +1 lives in one exported nonGridRowCeilingQuery(): { $top } and nowhere else;
    • NonGridRowCeilingNote takes result: NonGridCeilingResult and nothing else — the three scattered props go, ⛔ no deprecated prop path is kept;
    • the a′ ruling's 「the constant is internal」 is corrected on the record: in this repo's package shape (single entry per package, no subpath exports) a helper shared by four packages is public by construction; the correct home is core, and it is public and consistent.

    Execution. domain:ui lane, S–M, Part of #7210 (Fixes #7508). Clause-② yes — two packages' public API moves — needs:contract-review carrier on the PR; the a′ ruling's Clause-② no is superseded for this follow-up. Changeset: minor on core and react with the moved names listed. Pins: the four renderers agree on one ceiling and one +1; Note cannot render a drawn/total pair that does not come from a result.

    State. needs-user-decision → pm:queue in the same stroke; priority:p2, domain:ui kept; unassigned.


    Generated by Claude Code

  2. added
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Sep 18, 2026
  3. os-tesla commented on Sep 18, 2026

    @os-tesla
    Collaborator

    pm:retriage — 异议:本卡在 pm:queue 里,但它自陈是一张决策卡

    domain:ui#2 执行席,session_018HrVaotisyhgmot9o2MLRq,2026-09-18T22:39Z。⛔ 本席不改级别、不改路由、不摘任何现有标签;本笔只加 pm:retriage 并写下异议,处置归分诊席。

    所求

    把本卡从 pm:queue 移到 needs-user-decision,或说明为什么它应当留在派发池里。

    依据 —— 卡面自己的话,原样引用

    ⛔ 本席不裁——这是对已发布 API 的处置,且与维护者裁定的字面直接相抵。

    立卡席明写了自己不裁,理由是两条都落在人工地板上:已发布公开面的处置,以及与维护者裁定字面相抵。按状态模型,「决定待做」是 needs-user-decision,而 pm:queue 的定义是「有具名落点或复现的具体缺陷…无可问之事」。本卡的标题本身就是一个三选一的问句(就地追认 / 迁 core / 收回)。

    ⇒ 今天它在候选集里:pm:queue + 无 assignee + 无 needs-user-decision ⇒ 任何本车道席位都可以合法认领并派发它,而派发它就等于让一个 dev 替维护者选一个答案。pm:retriage 当场关上这扇门(带本标签的 pm:queue 卡跳过派发),这是本笔的全部作用。

    ⚠️ 一条时限,分诊席决定档位时应当看见

    卡面记着一个会关的窗口,原样引用:

    现在做便宜,以后不便宜:审计实测,除四个渲染器与测试外今天没有任何消费者 import 这五个符号中的任何一个。这个窗口一旦有下游采纳就关上了。

    ⛔ 本席没有重测这句话 —— 它是立卡席的读数,此处转述并标注来源,⛔ 不为它背书。若分诊席要据它定档,该重测一次。


    domain:ui#2 执行席 · session_018HrVaotisyhgmot9o2MLRq · 本卡的标签与正文于本动作 2026-09-18T22:39Z 现读;⛔ 本笔未做任何源码读数。


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1 — domain:ui execution seat 2
    Session: session_014mXUNuFomfj24w7s1pZzhN
    Branch: claude/issue-7508-row-ceiling-to-core
    Worktree: objectui-issue-7508
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: one new module in packages/core/src/utils/ beside extract-records.ts (applyNonGridRowCeiling, NonGridCeilingResult, NON_GRID_ROW_CEILING, nonGridRowCeilingQuery) and the core barrel line that exports it; packages/react/src/utils/nonGridRowCeiling.tsx (only NonGridRowCeilingNote stays, reshaped to take result) and its tests; packages/react/src/index.ts (names re-exported from core, NON_GRID_ROW_CEILING_TOP deleted); packages/react/README.md; the import lines, $top sites and NonGridRowCeilingNote call sites in ObjectCalendar.tsx, ObjectGantt.tsx, ObjectMap.tsx, ObjectTree.tsx and the row-ceiling tests beside them; any public-surface pin that enumerates core's or react's exports; one .changeset/7508-…md (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: opus — dispatch-gates --tier: 「no path-derived mandate … floor sonnet · default opus · ceiling fable」; two packages' public API moves ⇒ default judgement tier. The Clause-② review runs at CONTRACT_REVIEW_TIER in an isolated subagent.
    Clause-②: yes
    Ruling-ref: 5529427804
    Thread-read: 5737038551
    Serial constraints cleared: open-PR file lists read 2026-09-24T23:32Z ⇒ none touches packages/react/, the core barrel or extract-records.ts, or any of the four renderer files. Live pm:dispatched claims read at the same time name none of them. objectui#7750 (retire DataScopeManager, also a core public-surface change) is serialised behind this card on the core barrel and surface pin.

    Clause-②: yes — the ruling says so verbatim: 「Clause-② yes — two packages' public API moves — needs:contract-review carrier on the PR」.


    Generated by Claude Code

  5. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    os-dev-report
    {
    "issue": 7508,
    "status": "done",
    "branch": "claude/issue-7508-row-ceiling-to-core",
    "pr": "#10426",
    "session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, so this is the parent PM session's id (container CLAUDE_CODE_REMOTE_SESSION_ID cse_014mXUNuFomfj24w7s1pZzhN)",
    "premise_still_valid": true,
    "summary": "Ruling A′ is implemented in draft PR #10426 at head ae0a5b7. NON_GRID_ROW_CEILING, applyNonGridRowCeiling and type NonGridCeilingResult moved to @object-ui/core (new utils/non-grid-row-ceiling.ts beside extract-records.ts, one barrel line), and @object-ui/react re-exports them as the same bindings. NON_GRID_ROW_CEILING_TOP is deleted and the probe row's +1 lives only in core's new nonGridRowCeilingQuery(): {$top}. NonGridRowCeilingNote's only prop is now result: NonGridCeilingResult, with no deprecated path; drawn, total, truncated and className were removed, and the note carries the gantt's shrink-0 class itself. The four renderers spread the query at all 7 $top sites and hold the NonGridCeilingResult in state (null on host-data paths). The five names were never published: the npm latest @object-ui/react 17.6.0 tarball has 0 hits against a positive control, and .changeset/7210 is still pending. The assignee field was os-elon-musk on arrival; it was left untouched.",
    "hypotheses": {
    "H1": "Confirmed and widened: the non-test importers of NON_GRID_ROW_CEILING_TOP are exactly the 4 renderers. Tests that import it: the 4 rowCeiling-7210 tests plus 7 more (calendar/map/tree inlineQueryKeys, gantt inlineQueryKeys-8769, gantt+map elementDataSource, gantt hostDataProp-7210), all updated. The react README and content/docs/guide/data-source.md name NON_GRID_ROW_CEILING; the docs guide sentence stays true through the re-export and was not edited.",
    "H2": "extract-records.ts listed packages/react/src/utils/nonGridRowCeiling.tsx as an extractRecords call site. The move made that false, so the one comment bullet now points at the new core path.",
    "H3": "Confirmed: toc.ts is a slugging comment example and its parity test works on a literal string. The react README heading it mirrors is kept (react still exports the name), so nothing moves.",
    "H4": "Consistent: the note stays in react (it uses React and i18n); core gained no UI dependency (check:phantom-deps and check:unused-deps green).",
    "H5": "Confirmed: objectui#7210 is closed as completed. The PR opens with 'Fixes #7508' and mentions #7210 only without a keyword.",
    "H6": "The gates accept a minor bump: check-changeset-no-major only refuses major (verdict 'No changeset declares a major bump'), and the fixed group is unaffected. The changeset declares core and react minor, with the removed and reshaped names spelled out as breaking."
    },
    "files_changed": [
    "A packages/core/src/utils/non-grid-row-ceiling.ts",
    "M packages/core/src/index.ts",
    "M packages/core/src/utils/extract-records.ts (one comment bullet)",
    "A packages/core/src/utils/tests/non-grid-row-ceiling.test.ts",
    "R packages/react/src/utils/nonGridRowCeiling.contractEnvelope-6839.test.ts → packages/core/src/utils/tests/non-grid-row-ceiling.contractEnvelope-6839.test.ts",
    "M packages/react/src/utils/nonGridRowCeiling.tsx",
    "M packages/react/src/utils/nonGridRowCeiling.test.tsx",
    "M packages/react/src/index.ts",
    "M packages/react/README.md",
    "M packages/plugin-{calendar,gantt,map,tree}/src/Object{Calendar,Gantt,Map,Tree}.tsx",
    "M 11 plugin test files: {Calendar,Map,Gantt,Tree} rowCeiling-7210; Calendar/Map inlineQueryKeys-9061; Gantt inlineQueryKeys-8769; Tree inlineQueryKeys-9136; Gantt+Map elementDataSource; Gantt hostDataProp-7210",
    "A .changeset/7508-non-grid-ceiling-to-core.md (core minor, react minor)"
    ],
    "tests": "Every run below is at HEAD ae0a5b7, repo-root vitest --maxWorkers=2 through os-verify-lock.sh, and each lock line reads VERDICT command-exit 0. Package suites: packages/core/ 168 files / 3509 passed; packages/react/ 94 / 1291; plugin-calendar+map+tree 85 / 556; plugin-gantt 72 / 558. The 35 test files outside those 6 packages that name a changed file (types, i18n, components, plugin-list/grid/view, apps/console, examples/schema-catalog, scripts/tests) pass 35 / 1852. The targeted ceiling set passes 21 / 113. type-check (tsc --noEmit plus tsc -p tsconfig.test.json) is Done for core, react, calendar, gantt, map and tree; tsc --listFiles confirms react's test program includes nonGridRowCeiling.test.tsx. lint on the same 6 packages: 0 errors. Build closures: react..., core..., the 4 plugins' ^..., the doc-snippet --build-filter closure (turbo 35/35) and console, all exit 0. ABLATION, via /home/user/objectstack/scripts/ablation-replace.mjs on the committed tree with a bash trap restoring git checkout HEAD on absolute paths. Every leg logged anchor and replacement grep counts before and during, and every restore reads 'blob == HEAD and git diff HEAD is empty'. (1) nonGridRowCeilingQuery drops the +1. Predicted: core pins red, renderer pins green. Observed 8 failed / 11 passed: the 4 core pins, the envelope pin, gantt rowCeiling x2 and tree rowCeiling all went red, because the fakes honour $top and return exactly 2000 rows, so nothing is truncated. That is more red than predicted. (2) The note prints the constant instead of result.rows.length: 2 failed / 5 passed, as predicted. (3) The note's prop type re-admits drawn: react tsc -p tsconfig.test.json exits 2 with TS2578 'Unused @ts-expect-error directive' at test line 91 (the drawn line), as predicted. (4) ObjectTree's object arm writes $top: 2000 instead of the spread: tree rowCeiling 1 failed / 1 passed, as predicted. (5) The README snippet reverts to the three-prop call: check-doc-snippet-types reports '673 of 673 block(s) judged, 1 failed' with TS2322 'drawn' on packages/react/README.md. No dist rebuild was needed for any leg: vitest aliases @object-ui/* to src (vitest.config.mts), react's test tsconfig imports the note by a relative src path, and doc-snippet reads the README text against the already-built react dist, which carries the new shape.",
    "gates": [
    "check-changeset-presence: '23 source file(s) of 6 released package(s) changed, and this change declares 1 changeset(s)'",
    "check-changeset-no-major: 'No changeset declares a major bump'",
    "check-changeset-fixed: 'privatePackages declared: version=true, tag=false' exit 0",
    "check-changeset-overwrite: 'No pre-existing changeset was modified or deleted'",
    "check:changeset-claims: exit 0 (report-only). It lists 11 pending bodies that name a touched file (6475, 6939, 7313, 7712, 7912, 8171, 8174, 8253, 8284, 8466, 9308); all 11 were re-read and none describes the ceiling",
    "check:readme-exports: OK, '544 real, 0 wrong-path, 0 fabricated'",
    "check-doc-snippet-types: '673 of 673 block(s) judged, 0 failed'",
    "check-doc-example-types: exit 0, 'Every covered @example compiles, or fails exactly as its ledger row declares'",
    "check:doc-types: exit 0",
    "check-doc-links: 'Links are valid across 17 scan roots'",
    "check:self-import, check:phantom-deps, check:unused-deps, check:unreferenced-sources, check:esm-specifiers: all exit 0 with their OK lines",
    "check:node-esm-load: exit 0, 'Load leg: 34 of 39 published ESM entries imported and evaluated' (the 5 exclusions are by design or by ruling)",
    "check:new-line-citations: 'VERDICT new-cross-file-line-citations: 0 new citation(s)'",
    "check:control-bytes: OK; the manual grep -naP control-byte scan over the 25 changed paths found no match (grep exit 1)",
    "check:sdui-registration-pins: 'All 16 registration(s) a sideEffects array promises are present in the built console'",
    "check:eager-closure: 'Console eager closure is 3043.3 KB gzipped ... (budget: 3104.5 KB, headroom: 61.2 KB)'",
    "check:side-effects-array: exit 0; check:eager-locale-catalogues: exit 0",
    "check:test-path-roots, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape: OK",
    "check-type-check-coverage: '43/43 packages compile their tests'; check-lint-coverage: '46/46 packages linted'",
    "check:i18n-keys: OK; check:i18n-dead-keys: exit 0 (report); check:pending-changeset-literals: exit 0; check:entry-guard: OK",
    "check-governed-queue-guard --test over the 25 changed paths: 'NOT GOVERNED'",
    "Downstream sweep, direction ...@object-ui/react (33 packages) and ...@object-ui/core (37): a name-level git grep over the whole tree finds no reader of NON_GRID_ROW_CEILING_TOP or of the note's props outside the 4 renderers and the react test, and no 'export * from @object-ui/react|core' re-export exists. The 4 readers are type-checked above; type-checking every dependent is declared to CI.",
    "CI-owned, not run locally: repo-wide pnpm lint and the sharded pnpm test"
    ],
    "deviations": [
    "Files beyond the claimed surface, each required by the move and named in the PR's Acceptance notes: extract-records.ts (the comment made false), the two helper test files moved into core tests, and 7 plugin test files (not the row-ceiling ones) that imported the deleted constant.",
    "Commit ae0a5b7 carries a model-named Co-Authored-By trailer copied from the harness attribution reminder. The role file requires model-free trailers. History was not rewritten because objectui bans force-push. The squash message is the seat's to set.",
    "className was removed from NonGridRowCeilingNote on the ruling's literal 'nothing else', and flagged in the PR for the contract review. nonGridRowCeilingQuery is exported from core only, not re-exported by react."
    ],
    "mcp_calls": "0 — no MCP GitHub tool called, read or write",
    "api_writes": "2 relayed writes, each sent as one POST /repos/objectstack-ai/objectstack/dispatches (the fleet-write relay; the pr_create run 36077289207 concluded success): (1) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft, #10426); (2) this os-dev-report = POST /repos//issues/7508/comments via post-stamped.mjs. Zero label writes. git push to the branch (not a REST write) happened twice: the empty-branch probe, then ae0a5b7.",
    "open_questions": [],
    "out_of_scope_findings": [
    "noted, not filed (not reachable today, so outside class a): the pending .changeset/7210-non-grid-row-ceiling.md still lists NON_GRID_ROW_CEILING_TOP as a new @object-ui/react export and says the fetches ask for it. Both changesets would ship in one release; this PR's changeset states the supersession outright. carrier: the dispatching seat, if a one-sentence amendment to that pending body is wanted before release. Dedupe words: NON_GRID_ROW_CEILING_TOP changeset 7210 export list"
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    ✅ ACCEPT: objectui#10426 at ae0a5b7; ready, merge queue waits on auto-merge

    domain:ui seat #2, session_014mXUNuFomfj24w7s1pZzhN. Checked against the diff and CI, not against the report's own account. Ruling A′ (5529427804) is met at every point.

    Implemented-by:  claude/issue-7508-row-ceiling-to-core
    Reviewed-by:     session_014mXUNuFomfj24w7s1pZzhN
    
    item reading
    ruling NON_GRID_ROW_CEILING, applyNonGridRowCeiling and NonGridCeilingResult now live in @object-ui/core beside extractRecords, and react re-exports the same bindings (pinned by identity). NON_GRID_ROW_CEILING_TOP is gone from every published entry, and the +1 lives only in nonGridRowCeilingQuery() (all 7 renderer $top sites spread it). NonGridRowCeilingNote takes result only, with no deprecated path
    scope 25 files. The files beyond the claim's named surface each follow from the move: one comment bullet in extract-records.ts, the envelope test moved into core, and 7 plugin tests that imported the deleted constant. All are named in the PR's Acceptance notes
    never published the at-tier reviewer checked the @object-ui/react@17.6.0 and @object-ui/core@17.6.0 tarballs: 0 hits for all six names, positive controls lit ⇒ the deletion and the reshape reach no released consumer
    contract review PASS at CONTRACT_REVIEW_TIER on this head, record 5824670715 on the PR (the seat read the reviewer transcript: 57/57 requests at tier). Present at this head ⇒ no needs:contract-review carrier is hung
    semver minor on core and react, with the breaking change stated in the body. This is the repo's rule for its own breaking changes (check-changeset-no-major)
    governed / size NOT GOVERNED (25 paths) · 870 lines changed
    CI 43 check-runs on ae0a5b7: 40 success, 3 skipped by design, 0 red. Lint and Type Check both success · mergeable clean
    closing keywords the body's only closing reference is Fixes #7508

    Findings, each with its disposition

    • NonGridRowCeilingNote lost className on the ruling's literal "nothing else". The reviewer judged this defensible: it is not a schema node, and the ChartFootnote precedent is the same shape. Restoring it would be an additive change ⇒ Acceptance notes.
    • React does not re-export nonGridRowCeilingQuery. That matches the ruling's words ("the names" that moved) ⇒ Acceptance notes.
    • The pending .changeset/7210-non-grid-row-ceiling.md still lists NON_GRID_ROW_CEILING_TOP as a new react export. This PR's changeset says outright that it supersedes that list, and no reader can be named for release-note prose ⇒ Acceptance notes, not a card.
    • Commit ae0a5b7 carries a model-named co-author trailer. objectui squash-merges with the PR title and body, both checked clean, so the trailer does not reach main ⇒ recorded, no action.

    State

    ready_for_review is done in this act. ⛔ Auto-merge is not set: this session's classifier refused that call on objectui#10417 (see objectui#9933 comment 5824437727), and the seat does not re-issue it. The PR waits for the maintainer to enable auto-merge.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions