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
Studio Data › Actions: switching what an action does (or its Type) leaves an invalid draft that blocks every later save of the object with no message; Body Shape is a free-text box that writes an invalid value #26736
Filing gate: ① product defect, reproduced, landing site named.
Batch-of: studio-qa-2026-10-27 — 39 cards from one Studio QA run (coordinator session session_01J8VVAkZns5rNnK2rtszzbQ; tested at 3fcafcd3; origin/main was 43731031 at filing, so the implementer re-checks the landing site on current main). The run record is the qa-run issue filed with this batch.
Symptom
After a kind switch every subsequent object autosave is refused 422 and the UI shows nothing; a reload reverts the action. Typing the documented {wrap} form into Body Shape also bricks saves.
Reproduction
What it does → "Run a script" → saves body: {language} without source → 422 actions.N.body.source.
Type a body, then Type → API → body is kept → 422 "body only runs for type: 'script'"; all following endpoint/method edits are refused; reload reverts to "Update fields" (three attempts on call_api).
Body Shape: type {"wrap":"payload"} → 422 actions.N.bodyShape invalid_union, later saves fail until reload; a stored {wrap:"payload"} displays as "payload" and would re-save as an invalid string.
Expected
A kind/type switch drops keys the new kind does not accept and holds incomplete required keys; a refused save is shown at the action; Body Shape is a Flat / Wrap(key) control.
Suspected landing site (the implementer verifies)
ActionDefaultInspector.tsx kind/type switch and the bodyShape control.
Filing facts
reach: Studio UI, measured by the data gap-fill card.
Business reason: The editor silently stops saving the whole object; builders lose subsequent work.
Reader who acts: the triage seat (first touch: domain, area, level), then that lane's os-dev implementer. QA suggestion only: domain:ui, area:studio, p2.
Claim: PM loop round 1
Session: session_01QsR2jTfvjNTaR29ehLk26T
Account: zhuangjianguo
Branch: claude/project-thread-kfmx2w (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)
Worktree: objectstack-issue-26736
Domain: domain:ui
Seat: domain:ui#4
File surface: ui/packages/app-shell/src/views/metadata-admin/inspectors/ActionDefaultInspector.tsx, the metadata-admin autosave refusal surface it reports through, ui/packages/i18n/src/namespaces/studio/en.ts and zh.ts, tests beside, one root changeset (one PR with #26728); ⛔ packages/spec/**, server packages, any new key (stop on breach; explain in the report)
Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: the Studio action inspector (app-shell, this lane) keeps keys a new action kind refuses and writes Body Shape as free text, so every later object save answers 422 with no message · the platform path that may cover it: the schema's own refusal, which the editor neither shows nor recovers from · reached by every builder who switches an action's kind or Type
Thread-read: 6447207372
Premise: holds (git grep -c bodyShape origin/main -- ui/packages/app-shell/src/views/metadata-admin/inspectors/ActionDefaultInspector.tsx → 2 (one free-text control) on origin/main c8583f80 at 2026-10-27T16:51Z)
Serial constraints cleared: no open PR touches the surface (scan of the 80 most recently updated open PRs 2026-10-27T16:51Z)
Dispatched at 2026-10-27T16:56Z to the card thread on that branch; the order lives in the thread's opening message.
The card thread (claude/project-thread-kfmx2w, one PR with #26728) named the autosave refusal surface the order left open, and one bounded in-place fix the change makes necessary.
File surface: ui/packages/app-shell/src/views/metadata-admin/inspectors/ActionDefaultInspector.tsx; the refusal surface ui/packages/app-shell/src/views/studio-design/metadataError.ts (action hold judge, actions.N locator), studio-design/StudioDesignSurface.tsx (the Data pillar's "Show me" routes action targets, about 20 lines) and ObjectActionsPanel.tsx (a focus prop, about 15 lines); metadata-admin/previews/ActionPreview.tsx (its AI pill reads ai.exposed, not the flat aiExposed, 3 lines) with its two test fixtures (automationPreviews.i18n-10862.test.tsx, inspectorStrings.hookAction.i18n-10586.test.tsx) moved to ai: { exposed }; ui/packages/i18n/src/namespaces/studio/en.ts and zh.ts; tests beside; one root changeset; ⛔ packages/spec/**, server packages, any new key (stop on breach)
Clause-②: no
Metadata-protocol: none
Serial: #26737 (claude/project-thread-51d5nn) also edits StudioDesignSurface.tsx, in the flow designer's config fold, a different region. Whichever PR lands second merges main.
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
priority:p1·domain:ui·area:studio·pm:queue(findingremoved) · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T16:15Z⛔ Not a claim, ⛔ not a dispatch.
aiExposedkey the spec refuses — every later save of the object answers 422 until reload, unticking does not recover #26728, so one PR may take both. From the studio-qa-2026-10-27 batch. Re-check the landing site on currentmain.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 1
Session:
session_01QsR2jTfvjNTaR29ehLk26TAccount:
zhuangjianguoBranch:
claude/project-thread-kfmx2w(platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)Worktree:
objectstack-issue-26736Domain:
domain:uiSeat:
domain:ui#4File surface:
ui/packages/app-shell/src/views/metadata-admin/inspectors/ActionDefaultInspector.tsx, the metadata-admin autosave refusal surface it reports through,ui/packages/i18n/src/namespaces/studio/en.tsandzh.ts, tests beside, one root changeset (one PR with #26728); ⛔packages/spec/**, server packages, any new key (stop on breach; explain in the report)Container & model:
M,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z),effort: highClause-②: no
Metadata-protocol: none
Responsibility: the Studio action inspector (app-shell, this lane) keeps keys a new action kind refuses and writes Body Shape as free text, so every later object save answers 422 with no message · the platform path that may cover it: the schema's own refusal, which the editor neither shows nor recovers from · reached by every builder who switches an action's kind or Type
Thread-read: 6447207372
Premise: holds (
git grep -c bodyShape origin/main -- ui/packages/app-shell/src/views/metadata-admin/inspectors/ActionDefaultInspector.tsx→ 2 (one free-text control) on origin/mainc8583f80at 2026-10-27T16:51Z)Serial constraints cleared: no open PR touches the surface (scan of the 80 most recently updated open PRs 2026-10-27T16:51Z)
Dispatched at 2026-10-27T16:56Z to the card thread on that branch; the order lives in the thread's opening message.
Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim amendment · domain:ui#4 · 2026-10-27T17:03Z
Thread-read: none
The card thread (
claude/project-thread-kfmx2w, one PR with #26728) named the autosave refusal surface the order left open, and one bounded in-place fix the change makes necessary.File surface:
ui/packages/app-shell/src/views/metadata-admin/inspectors/ActionDefaultInspector.tsx; the refusal surfaceui/packages/app-shell/src/views/studio-design/metadataError.ts(action hold judge,actions.Nlocator),studio-design/StudioDesignSurface.tsx(the Data pillar's "Show me" routes action targets, about 20 lines) andObjectActionsPanel.tsx(a focus prop, about 15 lines);metadata-admin/previews/ActionPreview.tsx(its AI pill readsai.exposed, not the flataiExposed, 3 lines) with its two test fixtures (automationPreviews.i18n-10862.test.tsx,inspectorStrings.hookAction.i18n-10586.test.tsx) moved toai: { exposed };ui/packages/i18n/src/namespaces/studio/en.tsandzh.ts; tests beside; one root changeset; ⛔packages/spec/**, server packages, any new key (stop on breach)Clause-②: no
Metadata-protocol: none
Serial: #26737 (
claude/project-thread-51d5nn) also editsStudioDesignSurface.tsx, in the flow designer's config fold, a different region. Whichever PR lands second merges main.