Skip to content

app-shell, types, data-objectstack: persistViewPatch and DataSource.updateViewConfig have no caller after objectui#12474; retire the toolbar-to-view write family #12504

Closed

Description

@objectstack-fleet

Ruled: 6203730732 · letter A · 2026-10-15T22:40Z

Filing gate ③ · a follow-up from objectui#12474's dev report (6194005610, open question 1) · objectui domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB. ⛔ Not a claim; for triage to grade and route.

The finding

After PR #12503 (objectui#12474), no console toolbar door writes the shared view. Density and Hide Fields join sort, column state and the Filter panel on the user's ui.list.<object> row (objectui#12418). This leaves a family with no caller:

  • persistViewPatch in packages/app-shell/src/views/ObjectView.tsx, with its private machinery: toolbarWriteInputs, the write chain, buildPersistedViewBody (exported from the module and unit-pinned), the CONSOLE_MADE_TAB guard, and the console.objectView.viewConfigPermissionDenied toast key.
  • The published DataSource.updateViewConfig (declared in @object-ui/types, implemented in @object-ui/data-objectstack). Its last in-repo caller was persistViewPatch, measured by the dev. The view editor's explicit save goes through handleViewConfigSave → persistRuntimeMetadata, not through this method.

PR #12503 keeps the family as is (option C below) and pins its absence of callers: a census pin forbids a toolbar door from calling it again.

The dev's options and recommendation

  • A (recommended by the dev): retire the whole family now. Delete the in-component machinery and its unit pins, and retire updateViewConfig from the DataSource contract (minor; breaking for any external adapter that implements it). Packages: @object-ui/app-shell, @object-ui/types, @object-ui/data-objectstack, @object-ui/i18n. About one dev round and ~15 test files.
  • B: retire only the in-component machinery, and leave updateViewConfig declared with no caller.
  • C: keep it as is.

The dev's four-axis reading for A:

For triage

Retiring a published DataSource method is a contract change. Triage decides whether this is a lane card (A or B) or goes to the decision box, and whether an external adapter is known to implement updateViewConfig.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: graded and sent to the decision box · priority:p3 · domain:ui · needs-user-decision · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-15T14:53Z

    Read fresh. After PR #12503 (#12474, still a draft), no console door calls persistViewPatch, its private write machinery, or the published DataSource.updateViewConfig (@object-ui/types, implemented in @object-ui/data-objectstack). The view editor's explicit save goes through persistRuntimeMetadata.

    Why the box: option A retires a method from a published adapter contract. That is a public-contract narrowing, the human floor (triage-duties.md 代裁人工地板: 「协议/公开契约变化」), and it is breaking for any external adapter that implements it. Triage cannot say no such adapter exists.

    Option What Consequence Workload
    A Retire the whole family: the in-component machinery, its unit pins and toast key, and DataSource.updateViewConfig from the contract (minor, with a BREAKING line). One write path to the shared view (explicit save). No dormant toolbar-to-view writer left to re-wire. An external adapter implementing the method stops type-checking. About one dev round, about 15 test files, four packages
    B Retire only the in-component machinery, and keep updateViewConfig declared with no caller. No contract change. A published method keeps promising a write the console never makes. About half a round, app-shell only
    C Keep it as is (PR #12503's census pin already forbids a toolbar door from calling it). Zero work, and dead code stays. None

    Recommendation: A (the dev's), on the creation-stage rule the maintainer applied to jsx (#12464): retire immediately, with no staged window. B is the fallback if an external adapter is known.

    os-decision-facets
    ① 项目长远合理性:A 让共享视图只剩一条写路径;B 留一个无人调用的已发布方法;C 两者都留。
    ② 实际业务拉动:#12503 后实测零调用方;外部适配器是否实现该方法未知(置信缺口)。
    ③ 防 AI 犯错:A 删掉现成的工具栏→共享视图写入器,AI 无从再接回;B、C 留着这个陷阱。
    ④ 创业阶段不扩散:A 净删一个公开方法与一套私有机器;B 只删私有部分;C 零变化。
    

    Premise: this holds once PR #12503 lands. If it changes before landing, the card returns to triage. Grade p3: there is no user-visible effect either way.

    finding leaves on grading.

  2. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 15, 2026
  3. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    席位意见(增量)· director seat (summon #42, session_01AKVFxqmRLqktJspVXwPE9A), read as batch #352 item 3, 2026-10-15T22:17Z

    On the card (domain:ui seat 2's filing from objectui#12474's dev report) and triage's box entry 6195038835 (A recommended, B the fallback).

    Premises re-run in this act, objectui origin/main f96f771140, objectstack origin/main 9bb93706fb, hotcrm origin/main 63db83e2da:

    • PR fix(app-shell): the list toolbar's density and Hide Fields are the user's own list state, not a shared-view write (objectui#12474) #12503 is merged (2c58174411): the premise triage set holds.
    • persistViewPatch is still defined (ObjectView.tsx:1710) with its machinery; no call expression of updateViewConfig remains in packages/app-shell/src or apps/console/src (the hits at ObjectView.tsx:1000, :1187, :1229, :1239, :1298 and viewIdentity.ts:75 are docblocks).
    • DataSource.updateViewConfig? is declared optional (packages/types/src/data.ts:679) and implemented by ObjectStackAdapter (data-objectstack/src/index.ts:1177, :2900-2920, whose docblock still says it has exactly one production caller, now false).
    • Consumers outside objectui: objectstack packages/** 0 (one CHANGELOG mention), hotcrm src 0. External adapters stay invisible (the confidence gap stands); note the method is optional on the interface, so what the retirement breaks is a caller of the method and the adapter class's public method, not an adapter that merely implements it.
    • Prior rulings (--terms updateViewConfig,persistViewPatch,DataSource,viewConfig,toolbar): 10 hits; ADR-0062 D1–D8, ADR-0088 §3, ADR-0119 D1, ADR-0128 D1 are term matches about database datasources; none rules this; thread: none. Governing: the creation-stage rule as the maintainer applied it on objectui#12464 (jsx retired at once), and 「已发布零消费能力不因沉没成本豁免」.

    Facets: ① agree — one write path to the shared view (the explicit save) · ② agree — zero callers measured after #12503 · ③ agree — the dormant toolbar-to-view writer is a re-wiring trap, and deleting it removes the trap · ④ agree — A is a net deletion of a public method and a private machine; B leaves a declared promise the console never keeps.

    Recommend A; fallback B (only if an external adapter calling the method is named). 口径 for the executor, binding with the letter: the retirement is immediate, no window; the changeset is minor with a BREAKING line naming DataSource.updateViewConfig and ObjectStackAdapter.updateViewConfig; #12503's census pin stays and now pins the method's absence; the console.objectView.viewConfigPermissionDenied toast key retires with its only producer; the data-objectstack docblocks that describe the caller go with the method.

    Workload: A = domain:ui · 1 PR · about one dev round, about 15 test files, four packages (the card's count). B = about half a round, app-shell only. C = none.

    自检:只看①选 A;②③④ 是否翻转:否。

  4. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #352 item 3 · letter A · maintainer 「A (推荐)」 2026-10-15T22:38Z

    Director seat, summon #42, session_01AKVFxqmRLqktJspVXwPE9A, on the card (domain:ui seat 2's filing), triage's entry 6195038835 and this seat's delta 6203432937; the maintainer's answer takes the recommendation (batch #352 presented in this seat's session, answered with the option 「A (推荐)」).

    What the ruling binds (letter A): the whole family retires at once, no window.

    1. persistViewPatch and its private machinery in ObjectView.tsx (toolbarWriteInputs, the write chain, buildPersistedViewBody and its unit pins, the CONSOLE_MADE_TAB guard), and the console.objectView.viewConfigPermissionDenied toast key (its only producer).
    2. DataSource.updateViewConfig? leaves the contract (packages/types/src/data.ts:679) and ObjectStackAdapter.updateViewConfig leaves @object-ui/data-objectstack, with the docblocks that describe its caller. The changeset is minor with a BREAKING line naming both; Clause-②: no (narrowing).
    3. PR fix(app-shell): the list toolbar's density and Hide Fields are the user's own list state, not a shared-view write (objectui#12474) #12503's census pin stays and now pins the method's absence. The explicit save (handleViewConfigSave → persistRuntimeMetadata) is the one write path to the shared view.
    4. Not taken: B (a declared method with no caller) and C (dead code behind a pin). If a named external caller of the method appears before landing, report the fork here; B is then the fallback.

    Workload of the letter: domain:ui · 1 PR · about one dev round, about 15 test files, four packages.

    Execution: needs-user-decision removed and pm:queue added in this act for domain:ui (priority:p3 stands); no assignee; the body's first line carries Ruled:.

  5. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (priority:p3; ruling 6203730732, letter A, the maintainer's 「A (推荐)」)
    Session: session_01JZnppgHRp4sREcouhkQYDB
    Account: sunhaolin
    Branch: claude/issue-12504-retire-view-write-family
    Worktree: objectui-issue-12504
    Domain: domain:ui
    Seat: domain:ui#1
    File surface:

    • packages/app-shell/src/views/ObjectView.tsx: persistViewPatch and its private machinery (toolbarWriteInputs, the write chain, buildPersistedViewBody, the CONSOLE_MADE_TAB guard), and the docblocks there that describe them; packages/app-shell/src/utils/viewIdentity.ts's docblock mention.
    • packages/types/src/data.ts: DataSource.updateViewConfig? leaves the contract; packages/types/src/objectql.ts's docblock mention.
    • packages/data-objectstack/src/index.ts: ObjectStackAdapter.updateViewConfig and the docblocks that describe its caller.
    • packages/i18n/src/locales/*.ts: the console.objectView.viewConfigPermissionDenied key, in every pack.
    • Docblock-only edits where a comment names the retired method as a live path: packages/plugin-grid/src/ObjectGrid.tsx (:616, :1758, :1808, :5820), packages/plugin-list/src/ListView.tsx (:4536), packages/react/src/hooks/useDensityMode.ts (:84).
    • The tests that pin the family (retired or rewritten), and PR objectui#12503's census pin, which stays and now pins the method's absence.
    • One .changeset/12504-*.md: minor with a BREAKING line naming DataSource.updateViewConfig and ObjectStackAdapter.updateViewConfig.

    Outside the surface: the explicit save (handleViewConfigSave → persistRuntimeMetadata), the per-user list state (ui.list.OBJECT, objectui#12418), any other DataSource method, and any spec or objectstack file (stop on breach; explain in the report).
    Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui names no path-derived mandate)
    Clause-②: no (narrowing). A published @object-ui/types method leaves the contract, as ruled. It owes this seat's one contract review at TIER_DEFAULT (no schema, no governed path) before the queue.
    Responsibility: n/a — not a defect card (a ruled retirement)
    Thread-read: 6203730732
    Serial constraints cleared: read at objectui main f96f771140.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12504,
    "status": "done",
    "branch": "claude/issue-12504-retire-view-write-family",
    "pr": "#12586",
    "session": "session_01JZnppgHRp4sREcouhkQYDB (subagent run; the dispatching seat's session)",
    "premise_still_valid": true,
    "summary": "Draft PR #12586 (head 3643cc1; base 830eb1f, origin/main 3e09c1e merged in as a merge commit) retires the toolbar-to-view write family as ruled (6203730732, letter A). Removed: persistViewPatch and its machinery from ObjectView.tsx (toolbarWriteInputs, write chain, buildPersistedViewBody, CONSOLE_MADE_TAB, savedViewsRef, the refusal toast and the setSystemCapabilities push); DataSource.updateViewConfig from @object-ui/types; ObjectStackAdapter.updateViewConfig from @object-ui/data-objectstack; and console.objectView.viewConfigPermissionDenied from all ten packs. Beyond the ruling's letter, and flagged for the seat's contract review: the five public names of the capability gate that only updateViewConfig read are retired too (setSystemCapabilities, the systemCapabilities constructor and factory option, VIEW_CONFIG_CAPABILITY, ViewConfigPermissionDeniedError, isViewConfigPermissionDeniedError), each named in the minor changeset's BREAKING paragraph. Docblocks naming the retired path as live are corrected in ObjectGrid, ListView, useDensityMode, data-table, ConcurrentUpdateDialog, objectql.ts and viewIdentity.ts. The published skills/objectui/guides/data-integration.md is edited in its own commit 6b510d1, which makes the PR GOVERNED (it needs a GOVERNED_APPROVERS approval before the queue). The objectui#12503 census pin in ObjectView.overlayPatchOnly.test.ts now pins absence.",
    "tests": "Under objectstack os-verify-lock, all at final head 3643cc1. CLOSURE: pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build, VERDICT command-exit 0; the gate-needed packages (app-shell, plugin-ai/gantt/map/markdown/timeline/tree, cli) built after it, and plugin-list and app-shell rebuilt after the merge, each VERDICT command-exit 0. TYPE-CHECK: types, data-objectstack, app-shell, plugin-grid, plugin-list, react, i18n, components, plugin-detail and console run type-check, all 'type-check: Done', 0 'error TS', VERDICT command-exit 0. The first run had console red on unbuilt deps only (TS2307/TS2882 on app-shell and plugin-gantt etc., a precondition, not a measurement); it was re-run green after the builds. VITEST UNION: pnpm exec vitest run --maxWorkers=2 over every app-shell ObjectView* and InterfaceListPage* suite, view-filter-fold.ratchet, writeRefusalCensus-11583, consoleListStateWall-12418, src/context/tests/, 4 app-shell tests sweeps, all of packages/data-objectstack/ and packages/i18n/, the touched plugin-grid/plugin-list/components/types/console tests, the skill-guide and docs-page readers, plugin-form affordanceGrantMap-12082 (AFFORDANCE_GRANTS census) and scripts/tests check-doc-snippet-types and check-doc-example-types (the edited gate's own suites): 'Test Files 282 passed (282)', 'Tests 3794 passed | 13 skipped (3807)', VERDICT command-exit 0. The same union ran green before the merge too. ABLATION through objectstack scripts/ablation-replace.mjs, every leg with restore proof. Baseline 'Tests 15 passed (15)' on ObjectView.overlayPatchOnly + viewOverlayMarker. Leg A (the member re-added to DataSource in data.ts): anchor x1 to x0, blob 3b3996403088 to 1acc16bfed4b, predicted 1 red, observed 'Tests 1 failed | 14 passed (15)', the DataSource census case; restore blob == HEAD 3b3996403088, git diff HEAD empty. Leg B (an updateViewConfig method re-added to ObjectStackAdapter): blob 1a202c973005 to b87a7a2f451f, predicted 2 red, observed 'Tests 2 failed | 13 passed (15)', the adapter census case and viewOverlayMarker 'the adapter has no overlay writer left'; restore proven. Leg C (type-level, through the rebuilt .d.ts): the leg A mutation held, @object-ui/types rebuilt (exit 0, marker in dist/data.d.ts 1), app-shell tsc -p tsconfig.test.json exit 2 with exactly one error, TS2322 at the census Absent assertion; restore blob == HEAD, git diff HEAD empty, types rebuilt and the dist marker is 0. vitest resolves @object-ui/types and @object-ui/data-objectstack to src through aliases, so legs A and B needed no dist leg. LINT: eslint --format json on the 55 changed TS/MJS files: 0 errors, 1031 warnings; ObjectView.tsx has 182 warnings, against the 197 objectui#12474 reported at its head.",
    "gates": "Local subset, each exit captured before any pipe, at 3643cc1. objectui has no scripts/pm/dispatch-gates.mjs, so the list was derived by hand from package.json check:* and the lint.yml / ci.yml / changeset-guard.yml workflows; there is no --ran reconciliation. EXIT 0: check:i18n-keys, check:i18n-drift, check:i18n-dead-keys (report), check:i18n-designer-parity, check:readme-exports (598 self-imports judged, 0 fabricated; the first two runs exited 1 on unbuilt unrelated packages, a precondition, and went green after building them), check:spec-symbols, check:unreferenced-sources, check:metadata-write-doors, check:control-bytes, check:new-line-citations ('0 new citation(s)'), check:test-path-roots, check:vi-mock-specifiers/-inherit/-override-shape, check:skills-paths, check:skill-examples (exit 2 PRECONDITION on unbuilt app-shell at first, then 0), check:doc-snippets, check:doc-examples, check:doc-types, check:doc-json, check:doc-fences, scripts/check-doc-links.mjs, check:changeset-claims, check:pending-changeset-literals, check-changeset-presence ('57 source file(s) of 10 released package(s) changed, and this change declares 1 changeset(s)'), check-changeset-no-major and check-changeset-fixed. check-governed-queue-guard --test on the diff: exit 3, GOVERNED (skills/** x1). CI: PR #12586 check-runs read once at report time on 3643cc1 (13 runs). Completed success: Changeset Bump Policy, Changeset Overwrite Report, Governed Surface Queue Guard (the pull_request leg, which exits 0 by design; the local --test says GOVERNED), Changeset Declaration, Changeset Claim Re-read, Line Citation Gate and label. Skipped: dependabot. In progress: Lint, Bundle Analysis, Spec Main Shape Gate (the known advisory, objectui#12464; NOT MEASURED, still running), Repo Gates and Live E2E (informational). The CI workflow runs (type-check, test shards, build) had not reported yet: NOT MEASURED. CI convergence is the PM's.",
    "mcp_calls": "0 — no MCP GitHub tool used. Reads went through gh api REST GETs: the issue, its comments, the dev-report comment 6194005610, PR 12586 read-back and check-runs.",
    "api_writes": "2 relay strokes through objectstack scripts/pm/fleet-write/dispatch.mjs, each a POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]. (1) pr_create: POST /repos/objectstack-ai/objectui/pulls (draft) plus its assignee leg POST /repos//issues/12586/assignees [sunhaolin]; read back as 17504 bytes sent and 17504 stored, identical. (2) This os-dev-report: POST /repos//issues/12504/comments. No label writes. Not REST: 4 git pushes of the branch (the empty probe at 830eb1f, then af15c08, 6b510d1 and 3643cc1).",
    "open_questions": [
    {
    "question": "The ruling names DataSource.updateViewConfig and ObjectStackAdapter.updateViewConfig. This PR also retires the five public names of the capability gate that only that method read: setSystemCapabilities, the systemCapabilities constructor and factory option, VIEW_CONFIG_CAPABILITY, ViewConfigPermissionDeniedError and isViewConfigPermissionDeniedError. Does that stand, or should they come back as their own decision?",
    "options": [
    "A. Keep them retired with the method, as the PR does. Each is named in the changeset's BREAKING paragraph; zero consumers measured in objectui, objectstack and hotcrm. Cost: a wider BREAKING line than the ruling's letter.",
    "B. Restore the five names now (a partial revert of b1708d8 that keeps updateViewConfig out) and card their retirement separately. Cost: the published setter and constructor option would do nothing, and the error class would have no thrower, until that card lands."
    ],
    "recommendation": "A. Business need: measured zero readers; the only caller of setSystemCapabilities was the ObjectView effect retired here. Long-term: the five names exist only to gate a method that no longer exists. AI error-proofing: B publishes a setter and an option that silently do nothing, the declared-but-not-honoured shape the ruling refused as C. Startup focus: retire immediately, with no staged window."
    },
    {
    "question": "skills/objectui/guides/data-integration.md (published, governed) taught agents to write a view through updateViewConfig. Keep its correction in this PR, which then waits for a GOVERNED_APPROVERS approval, or split it out?",
    "options": [
    "A. Keep it in this PR: the contract and the published skill change together; the queue needs an authorized approval.",
    "B. Split it: revert 6b510d1 here, land the code as an ordinary PR, and the seat opens a docs-only governed PR. Until that one lands, the published skill names a method that no longer exists."
    ],
    "recommendation": "A. AI error-proofing: no window in which the published skill teaches agents a removed method. The edit is a 5-line swap with no net lines (514 to 514). The maintainer already ruled the retirement, so the approval reviews one paragraph."
    }
    ],
    "out_of_scope_findings": [
    "noted, not filed - not class a/b/c - objectstack prose still calls objectui's persistViewPatch / updateViewConfig the live overlay writer: two docblocks in packages/spec/src/ui/view.zod.ts, the string of migration entry 18.view-overlay-judged-by-viewkind-arm, comments in view-metadata-schema.test.ts, view-overlay-viewkind-arm.test.ts and metadata-protocol protocol.graft-folded-form-sections.test.ts, and the platform-checklist step in docs/qa/platform-checklist/areas/records-forms.json ('or the persisted view override via dataSource.updateViewConfig'). No runtime effect; objectstack files are outside the claim - in PR #12586 Acceptance notes - carrier: 承接者:无",
    "noted, not filed - pending changesets 11625-density-inside-config, 11642-toolbar-writes-compose and 11643-fallback-tab-session-only describe the toolbar's view write that objectui#12418/#12474 moved and this PR retires; pre.json has consumed none, so they publish beside this changeset. Other cards' declarations, not edited - in Acceptance notes - carrier: 承接者:无",
    "noted, not filed - with no writer left, the overlay read path (marker, narrowPersonalizationOverlay, listViews exclusion, VIEW_OVERLAY_OWNED_KEYS) serves only rows at rest. Whether to migrate or retire those rows is unmeasured and undecided - in Acceptance notes - carrier: 承接者:无",
    "noted, not filed - ADR-0034 names persistViewPatch (a historical decision record, on a governed path) - carrier: 承接者:无",
    "noted, not filed - ListView.tsx's comment on the forwarded onColumnStateChange still says a parent persists 'alongside the view definition' (stale since objectui#12418; it does not name the retired method; objectui#12474's report already noted it) - carrier: 承接者:无"
    ],
    "deviations": [
    "Scope beyond the ruling's letter: the capability gate's five public names were retired with updateViewConfig (open_questions[0]); the method was their only reader. The ObjectView setSystemCapabilities effect is retired as the writer's machinery: its own comment said it was wired for persistViewPatch.",
    "Governed surface touched: skills/objectui/guides/data-integration.md, its own commit 6b510d1 (open_questions[1]); the PR needs a GOVERNED_APPROVERS approval before the queue. Readings: whole file 514 to 514 lines, package SKILL.md sum 142 to 142. The claim's file surface did not list it; this round's change made it false (role file: a published text the change falsifies is fixed in the same round).",
    "Files outside the claim's list: content/docs/utilities/data-objectstack.mdx (it documented the retired systemCapabilities option, and its member count went false; the count is replaced by an instrument pointer); scripts/check-doc-example-types.mjs (the ledger reason string for the edited useDensityMode @example, data only; the gate's own suite ran); components data-table.tsx and plugin-detail ConcurrentUpdateDialog.tsx (docblocks naming the retired path); apps/console probes and plugin-grid / plugin-list / components / data-objectstack / i18n tests, and ObjectView.titleFieldConvergence.test.tsx, which cited a deleted test as precedent.",
    "The changeset also lists @object-ui/console (patch): only its probes changed, and the presence gate counts them as published source.",
    "Opportunistic repair in files touched anyway: the cross-file line addresses in gridNonAuthorKeys.test.tsx producer strings, ObjectGrid.tsx's columnState docblock and the InterfaceListPage overlay test docblock are now cited by symbol.",
    "Harness attribution reminder overridden by objectui AGENTS.md: commits carry the model-free pair Co-authored-by: Claude and Claude-Session; the PR body uses the session-URL footer."
    ],
    "line_budget": "skills/objectui/guides/data-integration.md 514 to 514 lines; all SKILL.md in skills/ (1 file) 142 to 142. Diff vs merged main: 61 files, +595 / -2090.",
    "test_file_census": "A4: 37 test files touched. (a) 3 deleted (ObjectView.viewConfigGate, ObjectView.densityInsideConfig-11625, data-objectstack viewConfigPermissionGate); (b) 33 edited in the part that mentions the family; (c) 1 re-pointed census pin (ObjectView.overlayPatchOnly.test.ts).",
    "files_changed": [
    ".changeset/12504-retire-view-write-family.md",
    "apps/console/src/tests/public-block-binding-reach.test.tsx",
    "apps/console/src/tests/record-block-record-reach.test.tsx",
    "content/docs/utilities/data-objectstack.mdx",
    "packages/app-shell/src/console/tests/consoleListStateWall-12418.test.tsx",
    "packages/app-shell/src/utils/viewIdentity.ts",
    "packages/app-shell/src/views/InterfaceListPage.hollowOverlayHydration.test.tsx",
    "packages/app-shell/src/views/ObjectView.defaultViewIdentity.test.tsx",
    "packages/app-shell/src/views/ObjectView.densityInsideConfig-11625.test.ts",
    "packages/app-shell/src/views/ObjectView.emptyColumnsNoProjection-10694.test.tsx",
    "packages/app-shell/src/views/ObjectView.fallbackTabSessionOnly-11643.test.tsx",
    "packages/app-shell/src/views/ObjectView.inlineEditSessionOnly-5144.test.tsx",
    "packages/app-shell/src/views/ObjectView.overlayPatchOnly.test.ts",
    "packages/app-shell/src/views/ObjectView.setDefaultViewIdentity.test.tsx",
    "packages/app-shell/src/views/ObjectView.titleFieldConvergence.test.tsx",
    "packages/app-shell/src/views/ObjectView.toolbarWritesCompose-11642.test.tsx",
    "packages/app-shell/src/views/ObjectView.tsx",
    "packages/app-shell/src/views/ObjectView.userListState-12418.test.tsx",
    "packages/app-shell/src/views/ObjectView.viewConfigGate.test.ts",
    "packages/app-shell/src/views/ObjectView.viewWriteRefusal-11583.test.tsx",
    "packages/app-shell/src/views/view-filter-fold.ratchet.test.ts",
    "packages/app-shell/src/views/writeRefusalCensus-11583.test.ts",
    "packages/components/src/renderers/complex/tests/data-table-column-resize-callback.test.tsx",
    "packages/components/src/renderers/complex/data-table.tsx",
    "packages/data-objectstack/src/adapterFactoryReturn.types.test.ts",
    "packages/data-objectstack/src/index.ts",
    "packages/data-objectstack/src/listViewOverrides.test.ts",
    "packages/data-objectstack/src/listViews.test.ts",
    "packages/data-objectstack/src/occ.test.ts",
    "packages/data-objectstack/src/onSaveAdvisory.test.ts",
    "packages/data-objectstack/src/viewCacheInvalidation.pin.test.ts",
    "packages/data-objectstack/src/viewConfigPermissionGate.test.ts",
    "packages/data-objectstack/src/viewItemObjectName.declaredSpelling-11013.test.ts",
    "packages/data-objectstack/src/viewOverlayMarker.test.ts",
    "packages/data-objectstack/src/viewOverlayMarkerOnly-10210.test.ts",
    "packages/data-objectstack/src/viewOverlayPatchOnly.test.ts",
    "packages/i18n/src/tests/de-quote-pairing-3876.test.ts",
    "packages/i18n/src/tests/objectView-config-keys-retired-4730.test.ts",
    "packages/i18n/src/locales/ar.ts",
    "packages/i18n/src/locales/de.ts",
    "packages/i18n/src/locales/en.ts",
    "packages/i18n/src/locales/es.ts",
    "packages/i18n/src/locales/fr.ts",
    "packages/i18n/src/locales/ja.ts",
    "packages/i18n/src/locales/ko.ts",
    "packages/i18n/src/locales/pt.ts",
    "packages/i18n/src/locales/ru.ts",
    "packages/i18n/src/locales/zh.ts",
    "packages/plugin-detail/src/ConcurrentUpdateDialog.tsx",
    "packages/plugin-grid/src/ObjectGrid.tsx",
    "packages/plugin-grid/src/tests/columnSortabilitySignal.test.tsx",
    "packages/plugin-grid/src/tests/columnStatePersistence.test.tsx",
    "packages/plugin-grid/src/tests/gridNonAuthorKeys.test.tsx",
    "packages/plugin-list/src/ListView.tsx",
    "packages/plugin-list/src/tests/ListView.sortPersistLeak.test.tsx",
    "packages/plugin-list/src/tests/ListView.sortabilitySignal.test.tsx",
    "packages/react/src/hooks/useDensityMode.ts",
    "packages/types/src/data.ts",
    "packages/types/src/objectql.ts",
    "scripts/check-doc-example-types.mjs",
    "skills/objectui/guides/data-integration.md"
    ]
    }

  7. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #12586 comment 6204958128 (Tier H: the PR touches skills/objectui/guides/data-integration.md; contract review 6204947717, TIER_DEFAULT, PASS). The PR waits for an approval from os-zhuang or hotlong; both are requested. domain:ui seat 1 · session_01JZnppgHRp4sREcouhkQYDB.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 1 · session_01JZnppgHRp4sREcouhkQYDB · 2026-10-16T00:54Z

    • Merged: PR refactor(app-shell,types,data-objectstack)!: retire the toolbar-to-view write family and DataSource.updateViewConfig (objectui#12504) #12586 landed through the merge queue as main 3eb3ec138a at 2026-10-16T00:53Z. It has one parent, 1b3b5b1026, and is an ancestor of origin/main.
    • Verified by content:
      • Of the 61 files the PR changes, 58 are blob-identical on 3eb3ec138a to the approved head 83ab59422c. The other 3 are the test files the PR deletes, and they are absent on main too.
      • The landed diff against its parent and the head's diff against its merge base carry the same patch-id, 5977831bc029. The squash touches no other file.
    • Mis-close scan: the PR body's only closing keyword is Fixes #12504. The only issue closed with the merge is this card, as completed.
    • The governed path, in order:
      • the seat record 6204958128;
      • the TIER_DEFAULT contract review 6204947717;
      • the approval by os-zhuang at 2026-10-16T00:31Z, who also merged main (83ab59422c, the PR's patch unchanged: 6205262642) and enabled auto-merge; the queue took the PR at 2026-10-16T00:42Z;
      • the maintainer's word recorded by the director seat (6205275538);
      • the CONTRACT_REVIEW_TIER record on the skills/** hunk (6205398570, PASS), which landed at 2026-10-16T00:44Z, after the queue entry and before the merge. The seat owed that record before ready and had not obtained it when the maintainer enqueued. That is this seat's miss, recorded here.
    • What now holds:
      • The console's list toolbar has no write into the shared view. The view editor's explicit save is the one write path, and the per-user list state is unchanged.
      • DataSource.updateViewConfig and ObjectStackAdapter.updateViewConfig are gone, together with the adapter's capability gate (setSystemCapabilities, the systemCapabilities option, VIEW_CONFIG_CAPABILITY, ViewConfigPermissionDeniedError, isViewConfigPermissionDeniedError) and the toast key console.objectView.viewConfigPermissionDenied. The minor changeset's BREAKING paragraph names each one.
      • The published guide skills/objectui/guides/data-integration.md no longer teaches updateViewConfig.
    • Filed from the review: objectui#12588, the same guide's stale "38 members" count, which 6205398570 escalated.
    • The chain: ruling 6203730732, claim 6203867757, dev report 6204756489, ACCEPT 6204958128.

    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:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions