You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
app-shell: a refused metadata write on the view, report and draft surfaces is logged only — the view-config panel's edit Save is measured silent (the objectui#11578 family's closing card) #11583
Filing gate: class (a), a product defect with a named landing and a reproduction. reach:public door, measured: the object page's view-config panel Save in edit mode, mounted with a metadata client whose save rejects with 403. Reader: triage grades and routes it.
Filed by domain:ui seat 1 (session_01FjqrwXPfSMkSfkKYDSRkN2, seat post objectui#5560). It comes from the objectui#11578 dev's out-of-scope finding (report 5974794723, PR objectui#11582). This seat re-read every location at objectui origin/main0a53c67. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.
Family rule: objectui#11578 (the two create doors) is the first occurrence of "a refused metadata write is caught with a log line only, and the UI looks saved". This is the second, so this card is the family's closing card, with an enumeration pin over every location, rather than one card per site.
What happens (measured)
Measured by the objectui#11578 dev, with a throwaway probe built on the objectui#10210 wiring harness (not committed): the metadata client's save rejects with 403, and the user presses Save in the view-config panel's edit mode.
toast.error: 0 calls. toast.success: 0 calls.
The only trace is console.error('[ViewConfigPanel] Failed to persist view config:', …).
From source (not mounted): ViewConfigPanel.handleSave calls onSave without awaiting, then clears isDirty and bumps savedSignal. Save is disabled while the panel is not dirty in edit mode, so a refused edit looks saved, and the user cannot retry it without making another edit.
Already fixed, not this card: ObjectDataPage.handleSaveAsView and ObjectView.handleViewCreate (objectui#11578, PR objectui#11582). Those doors now raise toast.error(t('form.saveError'), { description: formatMetadataError(err) }) and report the failure to their dialog.
Likely landing (a lead, not a ruling)
Each row raises the refusal through the console's existing toast.error channel, with the door's message (formatMetadataError), the way objectui#11578's doors do. ⛔ No new notification surface.
Row 2: the panel clears isDirty only after a successful save, so a refused edit stays dirty and can be retried.
Acceptance, the enumeration pin: a census over every metadata write call site under packages/app-shell/src/views/ (createRuntimeMetadata, persistRuntimeMetadata, publishRuntimeMetadata, discardRuntimeDraft and dataSource.updateView). Each site either surfaces a refusal to the user or is ledgered with a reason. A new write site with no row turns the census red.
Serial note: rows 1–3 share ObjectView.tsx with PR objectui#11582 (objectui#11578) and with objectui#11581 (pm:blocked, Blocked-by: #11578).
Filing gate: class (a), a product defect with a named landing and a reproduction.
reach:public door, measured: the object page's view-config panel Save in edit mode, mounted with a metadata client whose save rejects with 403. Reader: triage grades and routes it.Filed by
domain:uiseat 1 (session_01FjqrwXPfSMkSfkKYDSRkN2, seat post objectui#5560). It comes from the objectui#11578 dev's out-of-scope finding (report5974794723, PR objectui#11582). This seat re-read every location at objectuiorigin/main0a53c67. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.Family rule: objectui#11578 (the two create doors) is the first occurrence of "a refused metadata write is caught with a log line only, and the UI looks saved". This is the second, so this card is the family's closing card, with an enumeration pin over every location, rather than one card per site.
What happens (measured)
Measured by the objectui#11578 dev, with a throwaway probe built on the objectui#10210 wiring harness (not committed): the metadata client's
saverejects with 403, and the user presses Save in the view-config panel's edit mode.toast.error: 0 calls.toast.success: 0 calls.console.error('[ViewConfigPanel] Failed to persist view config:', …).ViewConfigPanel.handleSavecallsonSavewithout awaiting, then clearsisDirtyand bumpssavedSignal. Save is disabled while the panel is not dirty in edit mode, so a refused edit looks saved, and the user cannot retry it without making another edit.The family, enumerated (read at
0a53c67)packages/app-shell/src/views/ObjectView.tsx,handleViewConfigSave(about:1495)persistRuntimeMetadata('view', …).catch→console.error('[ViewConfigPanel] Failed to persist view config:')packages/app-shell/src/views/ViewConfigPanel.tsx,handleSave(about:192)onSavesetIsDirty(false)runs before the save settlespackages/app-shell/src/views/ObjectView.tsx,handlePinView(about:2262)dataSource.updateView(…, { isPinned })console.error('[ViewTabBar] Failed to pin view:'); its rename, delete and set-default siblings toastpackages/app-shell/src/views/ReportView.tsx,saveSchema(about:177)persistRuntimeMetadata('report', …)console.warn('[ReportView] Auto-save failed:')packages/app-shell/src/views/RuntimeDraftBar.tsx,handlePublish(about:127)publishRuntimeMetadata(…)console.error('[RuntimeDraftBar] Publish failed:')packages/app-shell/src/views/RuntimeDraftBar.tsx,handleDiscard(about:141)discardRuntimeDraft(…)console.error('[RuntimeDraftBar] Discard draft failed:')Already fixed, not this card:
ObjectDataPage.handleSaveAsViewandObjectView.handleViewCreate(objectui#11578, PR objectui#11582). Those doors now raisetoast.error(t('form.saveError'), { description: formatMetadataError(err) })and report the failure to their dialog.Likely landing (a lead, not a ruling)
toast.errorchannel, with the door's message (formatMetadataError), the way objectui#11578's doors do. ⛔ No new notification surface.isDirtyonly after a successful save, so a refused edit stays dirty and can be retried.packages/app-shell/src/views/(createRuntimeMetadata,persistRuntimeMetadata,publishRuntimeMetadata,discardRuntimeDraftanddataSource.updateView). Each site either surfaces a refusal to the user or is ledgered with a reason. A new write site with no row turns the census red.ObjectView.tsxwith PR objectui#11582 (objectui#11578) and with objectui#11581 (pm:blocked,Blocked-by: #11578).Dedupe
isLegacyOverlayRowmisjudges) #10210, finding(app-shell): Studio's shared draft autosave drops an edit made while a save is in flight on its other callers (Automations measured; Data, page inspector) — the family closure, fix in useDraftAutoSave #11204, plugin-form:MasterDetailFormraises its save-success and save-error toasts under separate auto ids, so a refused save followed by a successful one shows both outcomes at once — the #7252 defect class, outside PR #7342's surface #7345, app-shell: publishing a draft view does not invalidate the adapter's view caches — the console's real create-view flow bypasses ObjectStackAdapter entirely #4373, Set-default on a saved view can fire no write at all — the symptom does not originate in updateView (measured while fixing #4139) #4211 and "Set as Default" is dead on every saved view —handleSetDefaultViewcallsupdateViewunbound, sothis.connect()throws before any request is issued #4463, all closed and none about these catches.view config save refused silent·Failed to persist view config console.error only·ViewConfigPanel edit save no toast·RuntimeDraftBar Publish failed silent·ReportView Auto-save failed console.warn·Failed to pin view no toast.Generated by Claude Code