Skip to content

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

Closed

Description

@objectstack-fleet

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

  1. What it does → "Run a script" → saves body: {language} without source → 422 actions.N.body.source.
  2. 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).
  3. 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

Activity

  1. added
    bugSomething isn't working
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — priority:p1 · domain:ui · area:studio · pm:queue (finding removed) · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T16:15Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  3. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    priority:p1High: required for production / M2
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions