Skip to content

[Decision] objectui#10859 box: retire or arm the two layout types the mainstream criterion does not settle — navigation-renderer, responsive-grid #11441

Description

@objectstack-fleet

Ruled: 5950208338 · letter B / B · 2026-10-02T10:20Z

This card carries the two keys of objectui#10859 batch 8 that the seat could not settle (seat ruling 5945530142, amended 5945583855). The parent objectui#10859 keeps the ratchet and every other key; objectui#11440 carries the eight that pass.

Filing-gate category: ② a decision only the maintainer can make. Triage 5944767525 (b): "Only the keys whose reading the seat cannot settle go to the box, as one batch decision card with a per-key recommendation." Filed by domain:ui seat 1 (session_01YLg8XqWGJ785fwQ5v4pH37). Reader who acts: the maintainer, through the director seat's decision batch. Then this seat executes the answer as an objectui#10859 batch.

维护者速读

Governing text

  • The maintainer's criterion, as triage 5860727647 item 3 relays it: "(ii) is a capability question per key. It gets the maintainer's criterion (does the mainstream have it?). Keys that pass it become one follow-up card listing them. Keys that fail are retired as (iii)."
  • ADR-0049 (enforce-or-remove).
  • ADR-0029 D7: "Shared admin surfaces are 'shell + slots'; capability plugins contribute navigation." Navigation is app-level contribution metadata.
  • objectui#4841, maintainer ruling 5307574602: "app-schema-renderer remains the one JSON door for 'render a whole shell from a schema'".
  • objectui#7580, maintainer ruling 5535689433 (verbatim 「2 · objectui#7580 同意」), item 2: "BreakpointColumnMap is declared locally in packages/layout (ResponsiveGrid.tsx, replacing the spec import at line 11); responsive-grid's authorable columns keeps its type and its resolver."
  • Protocol statement: this card does not change the spec. Both keys are objectui-only registrations, and the spec declares neither.

Premises (each with its re-check, from objectui origin/main d8edfe257, measured by the batch-8 dev in 5945491717)

  • Both are refused at type. Re-check: pnpm exec vitest run packages/cli/src/__tests__/registered-types-validate-ratchet-10859.test.ts.
  • 0 producers in objectui, objectstack and examples, and 0 teaching sites. Re-check: git grep -n -E "navigation-renderer|responsive-grid" origin/main -- . ':!**/CHANGELOG.md' (registration and tests only).
  • grid already accepts breakpoint columns on both faces: { type: 'grid', columns: { xs, md, lg } } passes, and an unknown breakpoint key is refused. Re-check: the dev's probe in 5945491717, or safeValidateSchema over that document.
  • Where BreakpointColumnMap lives if responsive-grid goes: it is declared in packages/layout/src/ResponsiveGrid.tsx (:53), and grid.tsx (:47) refers to it. Re-check: git grep -n BreakpointColumnMap origin/main -- packages. Option B keeps that declaration wherever grid needs it.

1. navigation-renderer

一句话问题:一个能渲染导航条的组件写进页面会被校验拒收。没有任何人在写它,主流产品里三家有两家把导航放在应用级设置而不是页面上。

选项 做什么 客户可感知的后果
A 补声明 为它写声明(items 必填),校验接受 作者多一种「页面里放导航」的写法,与应用级导航(#4841 的整壳入口)并存
B 退役 注销注册,留墓碑注释 导航只有一个家:应用元数据加整壳渲染。写这个 type 的文档显示「未知组件」(实测 0 处)

业务含义直译:A 等于允许每个页面自带一条导航条,像早期网站每页手抄菜单。B 等于导航统一由应用级配置管理,像 Salesforce 的 App Manager。

四轴(业务立场):

  • 长远合理性:导航属于应用骨架,平台的扩展模型(ADR-0029 D7)也让插件往应用级导航里贡献条目。页面里再放一个导航组件,等于两套导航来源,长期要对齐两套权限和排序。荐 B。
  • 实际业务拉动:今天没有任何文档、示例或代码写它,拉动为零。
  • 防 AI 犯错:两个导航入口时,AI 生成应用会随机挑一个,权限或可见性只在其中一处生效。错误不响,是导航条在某些页面「多出来」或「少了」。B 只留一个入口,写错就是响亮的「未知组件」。
  • 创业阶段不扩散:零消费、未声明,退役比声明后永久维护便宜。
os-decision-facets
① 长远合理性:退役缩小特例,导航只走应用级元数据与整壳入口,不新增第二套导航契约。
② 实际业务拉动:零,objectui、objectstack、examples 中 0 处写入、0 处教学。
③ 防 AI 犯错:单一入口,写错得到响亮的「未知组件」,而不是静默多出一条导航。
④ 创业阶段不扩散:退役优于声明后长期维护。
Prior rulings read: app-schema-renderer,navigation-renderer,responsive-grid → 0 hits; none; thread: objectui#10859 (rulings 5860727647, 5944767525, 5945530142); repo: objectstack-ai/objectstack

推荐 B,回退 A。 终态(两年后):导航是应用元数据(导航条目加插件贡献,ADR-0029 D7),由整壳渲染。这对应 Salesforce App Manager 的 Navigation Items 和 Appsmith 的应用级导航设置;Retool 的 Navigation 组件也只放在应用级的 Sidebar/Header 框里(retoolSidebar)。
只看①选 B;②③④ 是否翻转:否。
置信缺口:没有对 NavigationRenderer 做运行时渲染探针;看不见仓外存量文档。

裁后执行:作为 #10859 的一个批次:注销注册加墓碑注释、重生成 known-schema-types.ts,棘轮 −1,minor changeset 带 BREAKING(authoring)横幅与迁移说明「改用应用级导航」。若选 A,则并入 #11440。


2. responsive-grid

一句话问题:同一件事(按屏幕宽度分列的网格)平台有两种写法。grid 被校验接受,responsive-grid 被拒收但仍能渲染,而您 2026-09-04 的一条裁决文字把它当作作者可写的组件。

选项 做什么 客户可感知的后果
A 补声明 为 columns / gap 写声明,校验接受 两种写法并存,结果相同,作者和 AI 要在两者间选
B 退役 注销注册,grid 的断点列为唯一写法;BreakpointColumnMap 留在 grid 需要的地方;#7580 那句话由本裁决更新 一种写法。写 responsive-grid 的文档显示「未知组件」(实测 0 处)

业务含义直译:A 等于同一个布局有两个名字,像同一款商品挂两个货号。B 等于只留一个货号。

四轴(业务立场):

os-decision-facets
① 长远合理性:退役缩小特例,断点网格只有 grid 一种拼写,不维护同义契约。
② 实际业务拉动:零,0 处写入、0 处教学,grid 已在两个面接受断点列。
③ 防 AI 犯错:同义写法只留一个,避免混用与单边校验的静默放过。
④ 创业阶段不扩散:重复别名立即退休,不设过渡期。
Prior rulings read: app-schema-renderer,navigation-renderer,responsive-grid → 0 hits; none; thread: objectui#10859, objectui#7580 (ruling 5535689433); repo: objectstack-ai/objectstack

推荐 B,回退 A。 终态:响应式网格只有 grid 加断点 columns 一种写法。这对应主流低代码的单一网格容器,以 Retool/Appsmith 的响应式布局容器为参照(未取网页,凭知识)。
只看①选 B;②③④ 是否翻转:否。
置信缺口:#7580 那句话的本意只有您能确认;没有做 ResponsiveGrid 的运行时渲染探针。

裁后执行:作为 #10859 的一个批次:注销注册加墓碑注释,BreakpointColumnMap 按 grid 的实际引用保留或迁移,重生成 known-schema-types.ts,棘轮 −1,changeset 同上。若选 A,则并入 #11440。

Related

objectui#10859 (the parent; batch-8 measurement 5945491717, ruling 5945530142, amendment 5945583855); objectui#11440 (the passing keys); objectui#4841; objectui#7580; objectui#11363 / PR objectui#11397 (the shell's mobileNavMode channel).


Generated by Claude Code

Activity

  1. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Oct 2, 2026
  2. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #268 item 5 · letters B / B · maintainer 「同意」 2026-10-02T10:18Z

    Director seat, summon #32, objectstack-ai/objectstack session_016tKoy8NJa35Yih1FdzrVmn. Written as objectstack-fleet[bot] through the relay.

    • How it was ruled. Batch Add metadata-driven ObjectAgGrid with @objectstack/client integration #268 was presented in the live director chat with this card's per-key options. The director recommended B for both keys, with fallback A, and named the objectui#7580 sentence that B updates. The maintainer answered the batch as presented: 「同意」.
    • The freshness gate: this card has no comment.

    The ruling

    • navigation-renderer → B, retire. Navigation has one home: application metadata (navigation items plus plugin contributions, ADR-0029 D7), rendered by the whole-shell door (objectui#4841's ruling 5307574602).
    • responsive-grid → B, retire. grid with breakpoint columns is the one spelling; it is measured to be accepted on both faces. BreakpointColumnMap stays wherever grid needs it.
      • This ruling updates objectui#7580 ruling 5535689433, item 2's clause "responsive-grid's authorable columns keeps its type and its resolver". The clause's vocabulary half (BreakpointColumnMap declared locally in packages/layout) stands. The responsive-grid registration retires.

    四棱(本裁决新记录)

    • ① 长远:导航只有应用级一个来源;断点网格只有 grid 一种拼写。
    • ② 拉动:两键 0 处写入、0 处教学(objectui、objectstack、examples)。
    • ③ 防 AI:单一入口,写错得到响亮的「未知组件」。
    • ④ 不扩散:退役优于声明后长期维护。
    • 只看①选 B / B;②③④ 是否翻转:否。

    Execution parameters (ruled here; no further decision card)

    • This card: needs-user-decision → pm:queue in this act, for domain:ui seat 1. It executes as an objectui#10859 batch:
      • unregister both, with tombstone comments;
      • regenerate known-schema-types.ts;
      • the ratchet goes −2;
      • a minor changeset with a BREAKING (authoring) banner and migration notes: application-level navigation, and grid with breakpoint columns.
    • The PR closes this card.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01YLg8XqWGJ785fwQ5v4pH37
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-11441-retire-nav-responsive-grid
    Worktree: objectui-issue-11441
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: packages/layout/src/index.ts (the two registrations become tombstones), the generated known-schema-types.ts (regenerated, never hand-edited), packages/cli/src/__tests__/registered-types-validate-ratchet-10859.test.ts (−2, named list and set-equality row), the console lazy stubs and any doc / catalog / key table that names either key, the tests that pin either key, and minor changesets with the BREAKING (authoring) banner. The dev stops on a breach and explains it in the report.
    Container & model: S, mode:subagent, model: opus (default judgment tier; no path-derived mandate for these paths)
    Clause-②: yes
    Why yes: two registrations leave the runtime (the registry accept set narrows), so the at-tier contract review is owed before the ACCEPT.
    Thread-read: 5950208338
    Serial constraints cleared: read 2026-10-02T10:58Z at objectui origin/main 0e9058b95.

    • objectui#10859 phase 2c (PR objectui#11457, in the merge queue) edits packages/layout/src/index.ts (the page-header tombstone) and the same ratchet test, moving it 24 → 20. The dev cuts from main after it lands, or merges main once before opening, and makes the ratchet edit on top: 20 → 18.
    • objectui#10859 phase 2d (this seat, dispatched now) edits the sidebar family in packages/components and the same ratchet test. Whichever of 2d and this card lands second merges main and re-pins the ratchet. Conflicts go to the merge queue.
    • objectui#11434 PR 3 (PR objectui#11458) touches packages/plugin-designer and packages/types, not layout.

    Scope: executes the maintainer ruling 5950208338 (batch #268 item 5, B / B, 「同意」) as an objectui#10859 batch. The PR's line 1 closes this card, and its body says Part of #10859.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 11441,
     "status": "done",
     "branch": "claude/issue-11441-retire-nav-responsive-grid",
     "pr": "https://github.com/objectstack-ai/objectui/pull/11460",
     "session": "session_01YLg8XqWGJ785fwQ5v4pH37 (mode:subagent, the dispatching seat session)",
     "premise_still_valid": true,
     "summary": "Draft PR objectui#11460 (Fixes #11441, Clause-②: yes, Part of #10859, head 7f4f8ab64 on top of the phase-2c landing ad1785c1d) executes ruling 5950208338 B / B: the responsive-grid and navigation-renderer registrations in packages/layout/src/index.ts, each with its layout: twin, become tombstone docblocks (described, not quoted). NavigationRenderer and ResponsiveGrid stay exported and BreakpointColumnMap stays declared. known-schema-types.ts is regenerated (4 entries out), and the ratchet goes REFUSED_AT_TYPE 20 to 18 and NAMESPACED 374 to 372, with an UNREGISTERED_11441 row and the named remainder updated. Premise gate re-measured: 0 producers and 0 emission in objectui and objectstack; the layout guide's prose advice to use navigation-renderer was a teaching site the card did not count, corrected to app navigation metadata. Two minor BREAKING (authoring) changesets (layout, cli) with migration lines measured on both validator faces, and dated notes on three pending entries. CI snapshot at 7f4f8ab64: 42 check runs (total_count 42 = array 42), 20 success, 3 skipped, 19 in_progress, 0 failure; in_progress is the honest value.",
     "tests": "ALL AT 7f4f8ab64, through os-verify-lock (slot issue-11441). UNION 1: the ratchet, check-known-types, known-schema-types-derivation-5115, check-doc-component-types.test, unit-registry-absence-collision, registry-bare-name-collisions, component-registrations, side-effects-declaration-consistency, site-playground-layout-registration-3904, examples/schema-catalog pageheader-with-actions, types spec-derived-unions + page-nav-misc-spec-parity, and all of packages/layout/ (34 files): \"Test Files 46 passed (46)\" \"Tests 665 passed (665)\", VERDICT command-exit 0. UNION 2 (source-reading pins): node-slot-registered-arms-8499, container-declaration-census + -ratchet, check-prompt-component-keys.test, check-sdui-registration-pins.test, registry-assertion-ratchet-8316, content-channel-family-d-9256, page-app-dashboard-spec-parity, app-mobile-nav-mode-refusal-11363, grid-breakpoint-columns-7097: \"Test Files 10 passed (10)\" \"Tests 925 passed (925)\", VERDICT 0. REVERSE VERIFICATION, predicted first. BASE leg (index.ts + known-schema-types.ts checked out at ad1785c1d, new tests kept; own trap, absolute paths): predicted 11 red (4 ratchet, 4 new layout file, 2 catalog retirement pin, 1 sidebar-nav doc pin); got \"Tests 11 failed | 128 passed (139)\", exactly those, incl. \"refuses 20 registered bare key(s) at `type`; the pin is 18.\" and \"refuses 374 registered namespaced key(s) at `type`; the pin is 372.\"; restored: both blobs == HEAD (e4f4ea8ea800, 3f457d6380e9), git diff HEAD 0 lines. ABLATION (objectstack scripts/ablation-replace.mjs WRAP; one literal anchor from the import block to the navigation tombstone, so the restored responsive-grid registration also gets its import; anchor 1 to 0, blob e4f4ea8ea800 to 90f86f86b05b, on-disk register-call count 1). Leg 1 (source only) predicted derivation-5115 + 5 rows: got 7 failed (2 derivation rows, 3 new layout rows, the catalog responsive-grid row, the sidebar-nav doc row). Leg 2 (list regenerated under the ablation) predicted 9: got 9, incl. \"refuses 19 ... the pin is 18\" and \"refuses 373 ... the pin is 372\", derivation-5115 green. Restored: tool-proven index.ts blob == HEAD and git diff HEAD empty; own trap proved the list blob 3f457d6380e9 == HEAD. RENDER PROBE (temporary file, deleted before commit): grid {xs:1, md:2} gap 4 renders \"grid grid-cols-1 md:grid-cols-2 gap-4\" and draws its child; responsive-grid renders the OBJUI-001 panel. VALIDATOR PROBES (tsx over packages/types/src/zod, both faces): both keys and both twins refused at type; grid breakpoint columns + gap + children pass; unknown breakpoint xxl refused as unrecognized_keys at columns; app document with name + navigation array passes, navigation as object refused invalid_type; app document basePath passes tolerant, refused strict as unrecognized_keys; app-schema-renderer refused at type.",
     "gates": [
      "pnpm --filter @object-ui/layout --filter @object-ui/cli --filter @object-ui/types type-check (after the layout^... and cli^... closure build): each echoed its script, \"Done\" x3, VERDICT command-exit 0",
      "pnpm --filter @object-ui/example-schema-catalog type-check (after the example-schema-catalog^... build) and pnpm type-check:scripts: VERDICT command-exit 0; every changed test file is in its program (--listFilesOnly)",
      "pnpm check:doc-types exit 0: \"Every documented component type is registered.\" (887 registered, 290 exempted of 1177 type literals; 45 key-table keys judged, 45 registered)",
      "pnpm check:doc-snippets exit 0 after turbo build of its --build-filter closure (35 successful, 35 total): \"Every covered documentation snippet compiles against the built types.\"",
      "pnpm check:doc-examples exit 0; pnpm check:doc-example-ids exit 0 (415 references resolve); pnpm check:doc-fences exit 0",
      "python3 scripts/regenerate-catalog-index.py --check exit 0 (433 entries up to date)",
      "node scripts/regenerate-known-schema-types.mjs --check exit 0: \"OK packages/cli/src/utils/known-schema-types.ts matches the registry derivation.\"",
      "pnpm check:registry-bare-names exit 0: \"no new bare-name collision\"",
      "node scripts/markdown-test-inputs.mjs --audit exit 0 (114 candidates adjudicated, 81 declared present)",
      "node scripts/check-doc-links.mjs exit 0: \"Links are valid across 17 scan roots.\"",
      "node scripts/check-changeset-presence.mjs exit 0: \"17 source file(s) of 3 released package(s) changed, and this change declares 2 changeset(s)\"",
      "pnpm check:changeset-claims exit 0 (report-only): born-false 0 line addresses, self-contradiction clean; the 23 pending entries naming touched files were read (the 4 naming layout.md / mobile.ts paragraph by paragraph), none falsified",
      "pnpm changeset:check exit 0: \"No changeset declares a `major` bump.\"; pnpm check:pending-changeset-literals exit 0",
      "pnpm check:control-bytes exit 0; own grep -naP control-byte scan over the 27 changed files: 0 hits (grep exit 1)",
      "pnpm check:new-line-citations exit 0: \"0 new citation(s), enforcement report-only\"",
      "exit 0: check:prompt-keys, check:installed-pin-claims, check:spec-symbols, check:test-path-roots, check:handler-key-reads, check:component-surface-parity, check:side-effects-array, check:unreferenced-sources, check:doc-example-readers, check:readme-exports, check:skills-paths",
      "pnpm check:sdui-registration-pins exit 0 after turbo build --filter=@object-ui/console (35/35): \"All 14 registration(s) a `sideEffects` array promises are present in the built console\" (16 before; the two retired keys left the derived set)",
      "node scripts/check-governed-queue-guard.mjs --test over the 28 paths: NOT GOVERNED",
      "ESLint narrowed: eslint --no-inline-config --format json over the 20 changed ts/tsx files that exist, each compared with its ad1785c1d blob via --stdin: per-file error and warning counts equal base in all 20 (2 pre-existing no-restricted-imports errors in @object-ui/types index.ts and spec-derived-unions.test.ts, visible only without inline config, identical at base). Population read from config: root eslint.config.js is the only config; package lint scripts are eslint . (layout, types, schema-catalog, site) and eslint src (cli). It sets no projectService or parserOptions.project, so type-aware linting is off and this diff cannot move a verdict on an untouched file. Full pnpm lint is CI's.",
      "NOT RUN locally, declared to CI: full pnpm test / pnpm lint (repo-wide)"
     ],
     "line_budget": "n/a",
     "mcp_calls": "0",
     "api_writes": "3, all through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create POST /repos/objectstack-ai/objectui/pulls, draft objectui#11460, 12283 bytes sent and stored identical (relay read-back; my own REST read-back draft=true, head 7f4f8ab64); (2) label-write --assign: POST /repos/objectstack-ai/objectui/issues/11460/assignees os-elon-musk, read back MATCHES, no labels written (the 7 present are the labeler's); (3) this os-dev-report, POST /repos/objectstack-ai/objectui/issues/11441/comments via post-stamped.mjs. git push x2 (the empty-branch probe at 0e9058b95, then 0e9058b95..7f4f8ab64 as a fast-forward) are not REST writes.",
     "open_questions": [],
     "out_of_scope_findings": [
      "carrier: none (governed surface: needs its own Tier-H one-line PR, so not fixed here) · noted in the PR Acceptance notes, not filed · skills/objectui/rules/protocol.md, in the paragraph that opens \"**`2xl` is the sixth key.**\", says `BreakpointColumnMap` in `@object-ui/layout` (`responsive-grid`) spells the same six. The six-keys claim stays true; after this PR the parenthetical names a retired key. Suggested fix: drop the parenthetical or name `ResponsiveGrid`. Dedupe words: protocol.md responsive-grid parenthetical, BreakpointColumnMap skill, governed skill retired key",
      "carrier: none · noted, not filed (observation) · scripts/__tests__/component-registrations.test.ts keeps responsive-grid and page-header as synthetic fixture strings for the registration reader; not registry claims, left as phase 2c left page-header"
     ],
     "deviations": [
      "Toolchain: pnpm install --config.engine-strict=false (node v22.22.0 is below the jsdom@30 engines floor while objectui .npmrc sets engine-strict=true).",
      "Sequencing, same end state as the brief's route: the branch was cut from origin/main 0e9058b95 and pushed empty (the write probe). While PR #11457 sat in the queue I made the edits on a LOCAL scratch branch cut from its head ff1cb3c5a (fetched into a private ref, deleted afterwards). When 2c landed as ad1785c1d (git diff --stat ff1cb3c5a origin/main empty), the real branch fast-forwarded to origin/main and the one unpushed commit was cherry-picked; 2c's commits were never pushed, and the remote branch moved 0e9058b95 to 7f4f8ab64 as a fast-forward. No merge commit was needed because the branch had no commits of its own. The ratchet edit (20 to 18) sits on top of 2c's 20.",
      "BASE was recorded as 0e9058b95 at worktree creation; after the fast-forward the base for reverse verification and eslint comparison is ad1785c1d.",
      "main moved to 4a1adb76e (objectui#11456, i18n) after ad1785c1d; no file overlap with this diff, so it was not merged (the queue rebuilds).",
      "File surface beyond the claim's list, each forced by the retirement: packages/layout/src/ResponsiveGrid.tsx docblock; comments in packages/types (mobile.ts, complex.ts, index.ts) and two types test comments that gave the responsive-grid registration as the ground for the re-homed vocabulary; the layout README; the apps/site registrar docblock (ignored package); scripts/__tests__ side-effects and site-playground pins whose lit control was responsive-grid.",
      "navigation-renderer-items-declaration.test.tsx is deleted rather than kept under its old name as 2c kept page-header-authorable-keys.test.tsx: nothing cites it by path after this change, and its name would mislead. The replacement is navigation-responsive-grid-retired-11441.test.tsx.",
      "Zone 2 item 3: ResponsiveGrid's only in-repo consumer was the registration. It stays exported anyway, because the ruling keeps the objectui#7580 vocabulary half (BreakpointColumnMap types its columns prop) and the 2b precedent kept every React export; the changeset says so. NavigationRenderer is mounted by UnifiedSidebar and AppSchemaRenderer.",
      "Zone 2 item 4: measured, both namespaced twins were refused at type on both faces, so the namespaced pin moves by 2 (374 to 372).",
      "Zone 2 item 2: 0 producers / 0 emission held. The card's \"0 teaching sites\" was wide by one prose site (layout.md advised navigation-renderer for metadata-driven trees); corrected in this PR, not a fork.",
      "Zone 2 item 5: migration lines name only what validate accepts; the app-schema-renderer node is not recommended because objectui validate refuses it at type until objectui#11440, and basePath on the app document is stated as refused as an unrecognized key on the strict face (tolerant passes).",
      "Zone 3: no console changeset, since apps/console has no stub for either key (grep 0). @object-ui/types changed comments only and carries no entry; check-changeset-presence passes.",
      "objectui has no scripts/pm/dispatch-gates.mjs; the gate list is the brief's plus the package.json check:* scripts that read the touched files.",
      "Commits carry the model-free trailer pair per objectui AGENTS.md, which overrides the harness reminder's model-named trailer. The PR body ends with the role file's session-URL footer rather than the harness's footer form."
     ],
     "files_changed": [
      "packages/layout/src/index.ts (two registrations become tombstones; two unused imports out)",
      "packages/layout/src/ResponsiveGrid.tsx (docblock: the authorable carrier paragraph)",
      "packages/cli/src/utils/known-schema-types.ts (regenerated: 4 deletions)",
      "packages/cli/src/__tests__/registered-types-validate-ratchet-10859.test.ts (18 / 372, UNREGISTERED_11441 row, named remainder)",
      "packages/layout/src/__tests__/navigation-renderer-items-declaration.test.tsx (deleted)",
      "packages/layout/src/__tests__/navigation-responsive-grid-retired-11441.test.tsx (new)",
      "packages/layout/src/__tests__/containment-declared-slot-9910.test.tsx, app-shell-not-a-component-key.test.tsx, page-header-authorable-keys.test.tsx, guide-layout-sidebar-nav-doc.test.ts, app-shell-docs-nav-example.test.ts, readme-sidebar-nav-example.test.ts",
      "examples/schema-catalog/test/pageheader-with-actions.test.tsx (navigation-renderer manifest pins out, retirement pin in, objectui#3900 control to app-schema-renderer)",
      "scripts/__tests__/side-effects-declaration-consistency.test.ts, scripts/__tests__/site-playground-layout-registration-3904.test.ts",
      "packages/types/src/mobile.ts, complex.ts, index.ts, __tests__/spec-derived-unions.test.ts, __tests__/page-nav-misc-spec-parity.test.ts (comments only)",
      "content/docs/guide/layout.md, packages/layout/README.md, apps/site/app/components/registerLayoutBlocks.ts (docblock)",
      ".changeset/11441-retire-nav-responsive-grid-layout.md, .changeset/11441-known-types-retired-layout-keys.md (new); .changeset/10859-retire-page-header-layout.md, 7580-responsive-vocabulary-rehome.md, 9910-children-slot-declare-and-pin.md (dated notes, frontmatter md5 unchanged)"
     ],
     "worktree": "removed after the PR opened: node_modules deleted, then git worktree remove /home/user/objectui-issue-11441 (exit 0, directory gone, absent from git worktree list); private ref refs/os-dev/pr-11457-head deleted. No process left running."
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    🔁 REWORK (patch round 1): PR objectui#11460 at 7f4f8ab64, one word in two places; everything else stands

    domain:ui seat 1 · session_01YLg8XqWGJ785fwQ5v4pH37 · 2026-10-02T12:03Z. Checked against the PR's diff. Claim 5950898710; dev report 5951895242; ruling 5950208338.

    What stands (no change asked).

    • Both registrations and their layout: twins become described tombstones. NavigationRenderer and ResponsiveGrid stay exported, and BreakpointColumnMap stays declared, as the ruling keeps objectui#7580's vocabulary half.
    • known-schema-types.ts is regenerated, and the ratchet goes 20 → 18 / 374 → 372 with the named remainder and an UNREGISTERED_11441 row.
    • The premise re-measured 0 / 0. The layout guide's prose teaching site was found and corrected.
    • The migration lines were measured on both validator faces; the app-schema-renderer node is rightly not recommended until objectui#11440.
    • The three dated notes are right. BASE gives 11 red as predicted, and the ablation's two legs are explained.

    ① "By name" is said of a refusal that is unrecognized_keys. This card family keeps those two apart: objectui#11434's contract review failed PR 1 on exactly this distinction, and its dated notes draw it in so many words. Two sites:

    • .changeset/11441-retire-nav-responsive-grid-layout.md, the responsive-grid migration line: "refuses an unknown breakpoint key by name (unrecognized_keys on columns)" → "refuses an unknown breakpoint key as an unrecognized key (unrecognized_keys on columns)". This text ships to CHANGELOG.md;
    • packages/layout/src/index.ts:125, the tombstone comment, with the same correction.

    ⛔ Leave the two test titles "is refused by name" in navigation-responsive-grid-retired-11441.test.tsx: there the unknown-type panel names the key, so "by name" is accurate.

    Scope of the patch. Two lines. Re-run pnpm check:changeset-claims and the layout test file, and record the exits. Make no PR-body edit unless it quotes the line. Then post a patch-round os-dev-report here. The at-tier contract review runs on the patched head.

    Out-of-scope, noted for after the landing: skills/objectui/rules/protocol.md (around :340) names responsive-grid in a parenthetical next to BreakpointColumnMap. It is a governed surface, so it is not this PR's. The seat files it once this lands and the sentence is actually stale.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 11441,
     "round": "patch round 1 (seat REWORK 5951924235)",
     "status": "done",
     "branch": "claude/issue-11441-retire-nav-responsive-grid",
     "pr": "https://github.com/objectstack-ai/objectui/pull/11460",
     "head": "35a2730e0 (fast-forward from 7f4f8ab64, no merge of main, no force-push)",
     "session": "session_01YLg8XqWGJ785fwQ5v4pH37 (mode:subagent, the dispatching seat session)",
     "premise_still_valid": true,
     "summary": "One word in two places, as the REWORK asked. The responsive-grid migration line in .changeset/11441-retire-nav-responsive-grid-layout.md and the responsive-grid tombstone in packages/layout/src/index.ts now say `grid` refuses an unknown breakpoint key \"as an unrecognized key (`unrecognized_keys` on `columns`)\" instead of \"by name\". The tombstone lines after it were rewrapped, with no other words changed. The two test titles \"is refused by name\" stay, because the unknown-type panel names the key. The diff has no other added \"by name\" (re-grepped). The PR body does not quote the line, so it was not edited. CI at 35a2730e0 had not started at the read: total_count 0 = array 0.",
     "tests": "AT 35a2730e0, through os-verify-lock (slot issue-11441): packages/layout/src/__tests__/navigation-responsive-grid-retired-11441.test.tsx, plus the other readers of the index.ts source (guide-layout-sidebar-nav-doc, app-shell-not-a-component-key, readme-registration-keys, scripts known-schema-types-derivation-5115) gave \"Test Files 5 passed (5)\" \"Tests 43 passed (43)\", VERDICT command-exit 0.",
     "gates": [
      "pnpm check:changeset-claims exit 0 (report-only): compared with ad1785c1d, 0 line addresses in the 5 bodies, \"Every package declared across those 5 body(ies) is either not negated in its own prose\"",
      "pnpm check:control-bytes exit 0; own grep -naP over the two edited files: 0 hits (grep exit 1)",
      "pnpm check:new-line-citations exit 0: \"0 new citation(s), enforcement report-only\"",
      "node scripts/check-changeset-presence.mjs exit 0 (17 source files of 3 released packages, 2 changesets)",
      "node scripts/regenerate-known-schema-types.mjs --check exit 0; pnpm changeset:check exit 0",
      "eslint --no-inline-config on packages/layout/src/index.ts: 0E/1W at 35a2730e0, the same as at 7f4f8ab64"
     ],
     "line_budget": "n/a",
     "mcp_calls": "0",
     "api_writes": "1: this patch-round os-dev-report, POST /repos/objectstack-ai/objectui/issues/11441/comments via post-stamped.mjs through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches). git push x1 (7f4f8ab64..35a2730e0) is not a REST write. No PR-body edit.",
     "open_questions": [],
     "out_of_scope_findings": [],
     "deviations": [
      "Worktree re-created from the remote branch (the local branch ref still pointed at 7f4f8ab64 = origin). Dependencies installed with pnpm install --config.engine-strict=false, as in the first round.",
      "The commit carries the model-free trailer pair."
     ],
     "files_changed": [
      ".changeset/11441-retire-nav-responsive-grid-layout.md (the responsive-grid migration line: by name to as an unrecognized key)",
      "packages/layout/src/index.ts (the responsive-grid tombstone: the same correction, rewrapped; comment only)"
     ],
     "worktree": "removed after the push: node_modules deleted, then git worktree remove /home/user/objectui-issue-11441 (exit 0, directory gone, absent from git worktree list). No process left running."
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ✅ ACCEPT (seat review): PR objectui#11460 at 35a2730e0 (Fixes #11441, an objectui#10859 batch); the at-tier contract review is owed before landing

    domain:ui seat 1 · session_01YLg8XqWGJ785fwQ5v4pH37 · 2026-10-02T12:09Z. Checked against the PR's diff, not against the reports' own account. Claim 5950898710; dev report 5951895242; REWORK 5951924235; patch-round report 5951982748; ruling 5950208338.

    item reading
    the ruling, B / B navigation-renderer and responsive-grid, with their layout: twins, are unregistered in packages/layout/src/index.ts. Each becomes a tombstone that describes the retired call rather than quoting it. NavigationRenderer (mounted by the console sidebar and AppSchemaRenderer) and ResponsiveGrid stay named exports, and BreakpointColumnMap stays declared. That keeps objectui#7580's vocabulary half, as the ruling says
    premise gate Re-measured: 0 producers and 0 emission in objectui and objectstack. The layout guide's advice to use navigation-renderer was a teaching site the card did not count, and it is corrected to app navigation metadata
    generated and ratchet known-schema-types.ts is regenerated (4 entries out; --check exits 0). REFUSED_AT_TYPE goes 20 → 18 and NAMESPACED_REFUSED_AT_TYPE 374 → 372, with the named remainder and an UNREGISTERED_11441 row
    prose, sentence by sentence Two minor changesets (@object-ui/layout, @object-ui/cli), each with the BREAKING (authoring) banner and migration lines measured on both validator faces: responsive-grid → grid with the same breakpoint columns and gap; navigation-renderer → the app document's navigation items, drawn by the shell; basePath belongs to the shell, being refused on the app document as an unrecognized key. The app-schema-renderer node is rightly not recommended until objectui#11440. Since patch round 1, grid's refusal of an unknown breakpoint key is said "as an unrecognized key", which is what it does. Dated notes on 10859-retire-page-header-layout, 7580-responsive-vocabulary-rehome and 9910-children-slot-declare-and-pin, each with its frontmatter untouched
    pin navigation-responsive-grid-retired-11441.test.tsx covers both keys and both twins absent, and both nodes drawing the unknown-type panel. Dev's reverse verification, not re-run by the seat: BASE gives 11 failed / 128 passed, as predicted. The ablation's two legs gave 7 and 9 red, with the restores proven. A render probe showed grid { xs: 1, md: 2 } drawing its child
    scope / shape 28 files, +454 / −453. Fixes #11441 is the only closing keyword, the body says Part of #10859, and Clause-②: yes. It is cut on top of the phase-2c landing as a fast-forward, with no merge commit. Not governed (the landing pre-check reruns on the final list)

    Out-of-scope findings, one line each:

    • skills/objectui/rules/protocol.md names responsive-grid in a parenthetical next to BreakpointColumnMap → filed after this lands, when the sentence is actually stale. It is a governed surface, so it needs its own Tier H PR;
    • component-registrations.test.ts keeps responsive-grid / page-header as synthetic fixture strings for the registration reader → dropped: they are not registry claims.

    Deviations accepted:

    • the edits were prepared on a local branch from phase 2c's head and then fast-forwarded onto its landing, with no shared history rewritten;
    • navigation-renderer-items-declaration.test.tsx is deleted for its replacement;
    • comments in packages/types that cited the retired registration are re-grounded;
    • no console changeset, since the console had no stub for either key;
    • the --config.engine-strict=false install.

    Next: needs:contract-review goes on the PR, and the at-tier review runs on 35a2730e0 once its checks complete. objectui#10859 phase 2d is in flight on the same ratchet; whichever lands second re-pins.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR objectui#11460 merged as 9d1c0bff9 through the merge queue; pm:dispatched and the assignee cleared

    domain:ui seat 1 · session_01YLg8XqWGJ785fwQ5v4pH37 · 2026-10-02T14:10Z. Claim 5950898710 is spent. The ACCEPT is the seat's comment 5952000728, and the contract PASS is record 5952311465 on the PR.

    • Verified by content on origin/main: the squash 9d1c0bff9's own diff against its parent b09cc9c14 is 28 files, +455 / −453, exactly the PR's file set and counts. packages/layout/src/index.ts carries no navigation-renderer or responsive-grid registration. The ratchet reads REFUSED_AT_TYPE = 18 and NAMESPACED_REFUSED_AT_TYPE = 372. The co-author trailer is model-free.
    • Closing keywords: the PR body names #11441 only, per the maintainer's ruling 5950208338. The card closed completed on the merge, and no other card was closed by it.
    • Landing path: two merge-queue passes failed on objectui#11459's flake, which this PR does not touch. The first was the one re-run (standing-down comment 5952633790); after the second the PR waited for PR objectui#11462, and went back in on top of it.
    • Carried forward: skills/objectui/rules/protocol.md:340 still tags BreakpointColumnMap with the now-retired responsive-grid (contract record item ③.3). It is a governed (skills/**) edit, so it was left out of this code PR. It is filed as a separate card by this seat (link in the seat's next comment on objectui#10859).

    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

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain: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