Cross-repo relay from the objectui whole-repo seat (session session_017Qqyix2QcnpUC9XeYVDzx3), carrying the platform-side half of objectui#4155 per the lane split recorded there. Filed unassigned for the objectstack lane's triage; the objectui seat does not land platform code.
Evidence (measured during objectui#4155's diagnosis, read-only)
packages/data-objectstack/src/index.ts:2818 (objectui repo, adapter layer) — updateViewConfig writes this.client.meta.saveItem('view', viewId, merged): one org-wide metadata item keyed by view id, with no per-user scoping anywhere in the call. Meanwhile the console consumer (ObjectView.tsx:~1456) describes the keys it hydrates from that item as "persisted user preferences … (Airtable-style per-view personal config)" — which this storage does not deliver.
Why this survives objectui#4155's fix
objectui PR #4214 removed the DESTRUCTIVE key from that path: the list filter panel no longer persists a view overlay at all, which closes the reported symptom (a normal user's panel interaction silently replacing the source-declared filter for every account). But the toolbar still persists sort, hiddenFields, columnState, rowHeight by design — each written org-wide and applied to every user of the view. The client has nowhere to put a per-user overlay: the platform's view metadata offers no per-user scope.
Downstream field reports on objectui#4155 (S06 acceptance run) additionally observed overlays surviving logout/re-login and applying across accounts — consistent with this storage shape.
Related observation (same path, decide whether it belongs here or its own card)
persistViewPatch writes {...baseViewDef, ...patch}, so an overlay written by a mere sort/columnState change copies the view's current effective filter into the overlay verbatim. Not a session-state leak (verified: the panel's draft never enters viewDef), but it pins the filter as-of-write: a later change to the SOURCE view's filter does not reach users whose overlay carries the frozen copy.
The decision that is the platform's to make
Either the view-overlay store grows a per-user scope (delivering the "personal config" the console promises), or the contract is explicitly org-wide and the console's prose + UX must stop presenting these as personal preferences (and arguably gate them behind a permission, since today any user with the panel can restyle the view for everyone). objectui will follow whichever contract is ruled — the seat asks only that the ruling be recorded on this card so the consumer side can cite it.
Refs: objectui#4155 (diagnosis + fix of the destructive half, PR objectui#4214), objectui#4211 (adjacent UI-layer set-default gap, same surface family).
Cross-repo relay from the objectui whole-repo seat (session
session_017Qqyix2QcnpUC9XeYVDzx3), carrying the platform-side half of objectui#4155 per the lane split recorded there. Filed unassigned for the objectstack lane's triage; the objectui seat does not land platform code.Evidence (measured during objectui#4155's diagnosis, read-only)
packages/data-objectstack/src/index.ts:2818(objectui repo, adapter layer) —updateViewConfigwritesthis.client.meta.saveItem('view', viewId, merged): one org-wide metadata item keyed by view id, with no per-user scoping anywhere in the call. Meanwhile the console consumer (ObjectView.tsx:~1456) describes the keys it hydrates from that item as "persisted user preferences … (Airtable-style per-view personal config)" — which this storage does not deliver.Why this survives objectui#4155's fix
objectui PR #4214 removed the DESTRUCTIVE key from that path: the list filter panel no longer persists a view overlay at all, which closes the reported symptom (a normal user's panel interaction silently replacing the source-declared
filterfor every account). But the toolbar still persists sort, hiddenFields, columnState, rowHeight by design — each written org-wide and applied to every user of the view. The client has nowhere to put a per-user overlay: the platform's view metadata offers no per-user scope.Downstream field reports on objectui#4155 (S06 acceptance run) additionally observed overlays surviving logout/re-login and applying across accounts — consistent with this storage shape.
Related observation (same path, decide whether it belongs here or its own card)
persistViewPatchwrites{...baseViewDef, ...patch}, so an overlay written by a mere sort/columnState change copies the view's current effective filter into the overlay verbatim. Not a session-state leak (verified: the panel's draft never entersviewDef), but it pins the filter as-of-write: a later change to the SOURCE view's filter does not reach users whose overlay carries the frozen copy.The decision that is the platform's to make
Either the view-overlay store grows a per-user scope (delivering the "personal config" the console promises), or the contract is explicitly org-wide and the console's prose + UX must stop presenting these as personal preferences (and arguably gate them behind a permission, since today any user with the panel can restyle the view for everyone). objectui will follow whichever contract is ruled — the seat asks only that the ruling be recorded on this card so the consumer side can cite it.
Refs: objectui#4155 (diagnosis + fix of the destructive half, PR objectui#4214), objectui#4211 (adjacent UI-layer set-default gap, same surface family).