fix(spec): one row bound per view — retire the unpublished per-kind view limit - #19809
Conversation
…limit Remove the per-kind `limit` from the gallery, kanban and timeline view configs, with `rowLimitKey`, `DEFAULT_VIEW_ROW_LIMIT` and the pending changeset that would have published them. `KanbanConfigSchema` has one shape again, so `KanbanConfigParsed` goes and the schema is re-pinned isomorphic (ADR-0122 D3). The truncation obligation moves onto `pagination.pageSize`, the view's remaining row bound. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
…tired view limit The `object-timeline` `timeline` door describe listed `limit` as a member of the block and called it accepted and defaulted; the block no longer has it. The `object-kanban` / `object-timeline` docblocks and the pending changeset recorded where the view-face per-kind `limit` and its applied default landed. All of it is removed by deletion; the flat `limit` keys, their describes and their declared precedence are unchanged. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
…tion The build's authorable-surface gate refuses a baseline line that leaves without a proof. The three per-kind configs now name `limit` in their strictObject guidance, so an author who writes it is refused with the pointer to `pagination.pageSize` (proof 4), and the three baseline lines go with the key. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
authorable-defaults, api-surface, export-origins and the reference docs, each through its own generator after a fresh build. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
… block `TimelineConfigSchema` is also the nested `timeline` block of an `object-timeline` node, where the row bound is the node's flat `limit`, not `pagination.pageSize`. The prescription now names both. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check12 anchor(s) derived from 1 changed package(s); no hand-written page names any of them. What this run could not see
Coarse fallback — 136 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 527afc6b70c55abc90d632c9eee81d49e8bb06fe && git checkout 527afc6b70c55abc90d632c9eee81d49e8bb06fe
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin b76aad5f6fac71cbbcd4ea6bfdf21a59e2fd4d56 b7106a4781f3d59f9928d83dec7d6b1927f954f5 && git checkout -B drift-repro b76aad5f6fac71cbbcd4ea6bfdf21a59e2fd4d56 && git merge --no-ff b7106a4781f3d59f9928d83dec7d6b1927f954f5
node scripts/docs-audit/affected-docs.mjs --json b76aad5f6fac71cbbcd4ea6bfdf21a59e2fd4d56 |
Contract reviewServed-tier: Reviewed and posted 2026-09-23T08:07Z by the at-tier review subagent the ① Derived judgments
Sentences that ship or stand (each checked; none found false): the guidance string (true; carries no tracker number); ② Semver level
③ Boundary flags(1) Strict-object guidance added so the build's authorable-surface gate accepts the removal — SOUND, not a workaround. (2) Deleting the component-face describe clauses about the nested (3) Trimming and deleting the two pending release notes — SOUND and gate-consistent. Ruling D step 1 orders the 17393 note rewritten or deleted so no release carries the key; the route-record note's deleted section described the same key and its applied default, and its remaining text is verified true. The foreign-changeset rule (#17712) reds on Follow-ups the seat carries (not grounds): (a) CI at head — 46 runs, de-duplicated by name keeping the latest Model identifiers: swept the 5 commit messages (model-free trailer pair), all 80 added lines, and the PR title and body for every model-identifier spelling — 0 matches; control ( Blocking: none. Implemented-by: VERDICT: PASS |
落地状态 —— 达档复核 PASS;只差维护者对两条待发布说明的书面确认
⏳ 待办: 维护者在本 PR 上书面确认这两条更正(一句即可)。收到之后,本席转 ready 并开启 auto-merge。 Generated by Claude Code |
|
Heads-up for this PR's holder ( PR #19932 has landed on The re-run procedure is in PR #19932's body, section 「Landing order: this PR lands first, then #19809 re-runs the re-key on its own pin」, and the
⛔ Do not hand-resolve the pin block. Run the transform, then check the set with This PR landed first on the maintainer's instruction to follow it to merge: 「你应该跟进到合并啊」, in seat 1's live PM chat. This PR had been a draft since 2026-09-23T08:09Z. |
Two hand-written paths conflicted; both are resolved so each side's intent stands. Generated artifacts are regenerated in the next commit. packages/spec/src/type-alias-convention.pin.test.ts: not resolved by hand. Main re-keyed every isomorphic pin from the IsoNNN counter to a name derived from module path and schema. This branch's pre-merge copy of the file was re-keyed with that change's own rekey.mjs transform (controls: it reproduces ece9f71 from fdeeea0 byte for byte, and is idempotent on main's copy), then main's prose half was re-applied with git merge-file against ece9f71 / fc8eda2. The one conflicting hunk is the tail of the count history: both entries are kept, 789 -> 789 first, then 789 -> 790. The new pin is Iso_ui_view__KanbanConfigSchema, and the ui/view note names it and no longer says a numeral stays vacant. readIsomorphicPins: 790 = 790 against the branch's pre-transform file, set difference 0 both ways, 0 bodies changed, 0 names off the rule, sorted; against main, +1 (ui/view.zod.ts::KanbanConfigSchema). packages/spec/src/ui/view.zod.ts: this branch deletes the rowLimitKey helper and its docblock with the retired per-kind view limit; main re-measured one citation paragraph inside that docblock at the new console pin. The docblock describes a key that no longer exists, so it goes; the rest of main's changes to the file merged cleanly and stay. The branch's delta against main now equals its delta against the merge base, line for line, except that the deleted paragraph is main's re-measured text. Claude-Session: https://claude.ai/code/session_019c3Hi6ZMU1p6m6aA6Bz45d Co-authored-by: Claude <noreply@anthropic.com>
The os-regen driver merged seven generated paths without a text merge and kept this branch's side of each, dropping main's changes to them. This commit takes main's side (os-regen-merge.sh step 2, against the recorded pre-merge base fae8703) and regenerates on the merged tree: spec build (gen:schema), gen:api-surface, gen:export-origins, gen:docs. check:generated: 15 of 15 artifacts current. authorable-surface/ui.json is the one path this branch had edited by hand: its three GalleryConfig / KanbanConfig / TimelineConfig `limit` lines were deleted deliberately, since the generator refuses a bare deletion. That committed deletion is re-applied onto main's side with git apply (context verified), and the build's check (c) proof 4 accepts each of the three: the key is refused as unrecognized and the refusal carries the guidance prescription. For every one of the seven paths, this commit's delta equals main's delta since the merge base, and the branch's delta against main equals the PR's delta against the base. Claude-Session: https://claude.ai/code/session_019c3Hi6ZMU1p6m6aA6Bz45d Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: 139/139 Isolated at-tier reviewer subagent, run by the Reviewed 2026-09-24 by the isolated at-tier review subagent of the ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Maintainer confirmation — the DELIBERATE CORRECTION of two pending notes, 2026-09-24T23:05Z
Provenance.
What it confirms, at head
The at-tier PASS The red. Landing. Not in this act. The allow-listed Generated by Claude Code |
Two hand-written conflicts, both keeping both intents: - packages/spec/src/ui/view.zod.ts: main re-measured the citations of the per-kind view `limit` docblock at the new console pin; this branch deletes that docblock and its helper with the key. Kept the branch side; main's re-measured text goes with the key it describes. Every other main change to the file auto-merged. - packages/spec/src/ui/component.zod.ts: main re-measured the anchors of the object-kanban "third door" paragraph (the view-face `kanban.limit` spread); this branch deletes that paragraph with the key. Kept the branch side, and annotated main's re-measure list in the same docblock: the seven anchors it records for that paragraph are no longer cited by the block. Generated artifacts are regenerated in the next commit. Claude-Session: https://claude.ai/code/session_019c3Hi6ZMU1p6m6aA6Bz45d Co-authored-by: Claude <noreply@anthropic.com>
The os-regen driver kept the branch side of content/docs/references/data/object.mdx and content/docs/references/ui/view.mdx, dropping main's rows (the currency `scale` retirement, the form `options` describe, the console-pin `span` citation). os-regen-merge.sh step 2 restored main's side; gen:docs then re-derived the branch's change on top. Every regen path now differs from main by exactly the branch's own delta against its previous base. Claude-Session: https://claude.ai/code/session_019c3Hi6ZMU1p6m6aA6Bz45d Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: 104/104 Isolated at-tier reviewer subagent, run by the Reviewed 2026-09-25 by the isolated adversarial reviewer subagent of session ① Derived judgments
② Semver levelUnchanged from the PASSed record: ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Part of #19228
Clause-②: no
Rewritten short by the dispatching seat (2026-09-23T08:08Z). The developer's measurements are in its report on #19228; the at-tier review record is
5791323483on this PR.What changes
Ruling D (#19228,
5789634193): a view carries one row bound,pagination.pageSize. The per-kind viewlimitadded for #17393 was never published (npmlatestis 17.4.0; the key is absent from its tarball), so it is removed before a release carries it.GalleryConfigSchema/KanbanConfigSchema/TimelineConfigSchemaloselimit;rowLimitKey,DEFAULT_VIEW_ROW_LIMITandKanbanConfigParsedgo with it (Kanban has one shape again, re-pinned per ADR-0122).limitin those blocks is refused as an unknown key, and the refusal names both alternatives:pagination.pageSizeon a view, or the flatlimiton a page component node.pagination.pageSize's description carries the truncation obligation thatlimit's description carried.object-kanban/object-timelinecomponentlimitkeys and their precedence are unchanged; only text describing the removed view-level key was deleted..changeset/17393-view-row-ceiling.mdis deleted, and the pending.changeset/19228-view-row-limit-route-record.mdloses its section about the view-levellimit, so no release announces a key that does not ship. Apatchchangeset covers the description change.Net: 16 files, +86 / −528.
Check Changesetis red on purposeThis PR corrects two PENDING release notes instead of adding one, which
check-empty-changeset.mjsnames the DELIBERATE CORRECTION class. The workflow (pr-automation.yml, route 0) says to leave the check red and get the correction confirmed in writing on the PR;Check Changesetis not a required context. The two notes and what changed under them are listed above. Maintainer confirmation requested on this PR.Not in this PR
objectui still spreads a view's kanban / gallery / timeline block onto the rendered node; reading
pagination.pageSizeas the fetch ceiling and showing the truncation signal there is objectui work. objectui#7390 is closed, so that work has no open card; triage is asked to route it (#19228).维护者速读
limit,从没发布过;按您的裁决 D,改为每个视图只用pagination.pageSize一个上限。Check Changeset因此按规定保持红色,需要您在本 PR 上书面确认一句。🤖 Generated with Claude Code
https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1