Split out of the QA run objectstack-ai/objectstack#7439 (records-forms FULL area, saved-view-management FAIL — reproduced 2×). Filed here because the fix lands in this repo (file-at-destination rule). Filed by the triage seat; unassigned.
Symptom
Create-kanban / pin / delete on saved views all work (200), but renaming a freshly-created draft view is rejected and silently lost, and set-default fires no write at all.
Repro (from the QA run): create a Kanban view via the + tab (draft), then tab menu → Rename. Expected: the new label persists. Actual: the old label survives a re-read.
Root cause (verified at origin/main @ 92c0b1f)
packages/data-objectstack/src/index.ts:3012 — updateView():
:3020 reads the current item with this.client.meta.getItem('view', viewName) — no draft/preview qualifier, so for a view that only exists as a draft the read 404s;
:3024 the catch comments "Treat missing as create-equivalent" and proceeds with current = {};
- the merged write is then an invalid partial (
{label, name, object}-shaped) sent via saveItem → 422 server-side; the QA run observed exactly this sequence, and the follow-up read (with preview=draft) still shows the old label.
Direction
The read half of updateView must see the same item the write half addresses — read the draft when the view is a draft (or fall back to the draft read on 404) so the merge starts from the real current state. The silent catch also converts a legitimate failure into a bad write; worth tightening while there.
Dedup
Searched open issues (updateView, saved view, rename): no hits on this path. No duplicate.
本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Split out of the QA run objectstack-ai/objectstack#7439 (records-forms FULL area,
saved-view-managementFAIL — reproduced 2×). Filed here because the fix lands in this repo (file-at-destination rule). Filed by the triage seat; unassigned.Symptom
Create-kanban / pin / delete on saved views all work (200), but renaming a freshly-created draft view is rejected and silently lost, and set-default fires no write at all.
Repro (from the QA run): create a Kanban view via the
+tab (draft), then tab menu → Rename. Expected: the new label persists. Actual: the old label survives a re-read.Root cause (verified at
origin/main@92c0b1f)packages/data-objectstack/src/index.ts:3012—updateView()::3020reads the current item withthis.client.meta.getItem('view', viewName)— no draft/preview qualifier, so for a view that only exists as a draft the read 404s;:3024the catch comments "Treat missing as create-equivalent" and proceeds withcurrent = {};{label, name, object}-shaped) sent viasaveItem→ 422 server-side; the QA run observed exactly this sequence, and the follow-up read (withpreview=draft) still shows the old label.Direction
The read half of
updateViewmust see the same item the write half addresses — read the draft when the view is a draft (or fall back to the draft read on 404) so the merge starts from the real current state. The silent catch also converts a legitimate failure into a bad write; worth tightening while there.Dedup
Searched open issues (
updateView,saved view,rename): no hits on this path. No duplicate.本评论来自分诊座位 Routine(#5474 试点),不构成认领。