Skip to content

Studio Automations: with the right panel hidden, selecting a node shows its configuration nowhere — the config drawer only reopens on mobile #26737

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

A builder who folds the right panel cannot edit the selected step at all until they find the toggle again.

Reproduction

  1. Viewport 900×850 → /_console/studio/<pkg>/automations?surface=flow:<name> → "Hide the right panel" → click a node → no config drawer, no aside.

Expected

Selecting a node with the panel folded opens the config drawer (or unfolds the panel).

Suspected landing site (the implementer verifies)

StudioDesignSurface.tsx ~8157 configFolded && !inSlot; showSlotProps (~1810) reopens only when isMobile.

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:p2 · domain:ui · area:studio · pm:queue (finding removed) · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T16:15Z

    ⛔ Not a claim, ⛔ not a dispatch.

    • p2: with the right panel hidden, selecting a node shows its configuration nowhere, because the drawer reopens only on mobile. Selecting a node opens the panel (or the drawer) at every width. From the studio-qa-2026-10-27 batch. Re-check the landing site on current main.

    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
    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-51d5nn (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-26737
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx, tests beside (not StudioDesignSurface.flowCanvasChip-11665, seat 1's #26692), one root changeset; ⛔ packages/spec/**, server packages, any new key (stop on breach; explain in the report)
    Container & model: S, 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 flow designer (app-shell, this lane) reopens the node config only on mobile, so with the right panel folded a selected node shows its config nowhere · the platform path that may cover it: the panel toggle, which the builder must find again · reached by every builder on a mid-size screen who folds the panel
    Thread-read: 6447219692
    Premise: holds (git grep -n "configFolded && !inSlot" origin/main -- ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx → line 8157 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:59Z 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

    os-dev-report

    {
      "issue": 26737,
      "status": "done",
      "branch": "claude/project-thread-51d5nn",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26824",
      "session": "session_01QsR2jRkRJ1Po9y5UgWCsns",
      "premise_still_valid": true,
      "summary": "Chose 'unfold the panel' (not a drawer): the slot host's showSlotProps now opens the hidden right slot at every width through setSlotOpen (the toggle's and the shortcut's setter, so the shown state is remembered), where it used to open it only when isMobile. The function is held in useState for the surface's life and reads the latest setSlotOpen through a ref, so the three pillars' effects re-ask only on a new selection, never on a re-created callback (ui/AGENTS.md #10): hiding the panel again over the same selection keeps it hidden. Because the fix is in the host, Interfaces block and Data field selections unfold a hidden panel too. Tests replace the objectui#12725 pin 'a hidden slot stays hidden on a selection, as on Interfaces'.",
      "tests": "head 367db7d0. app-shell type-check (turbo, 64 tasks, deps built) VERDICT command-exit 0; re-run at 367db7d0 pnpm --filter @object-ui/app-shell type-check (tsc --noEmit + tsc -p tsconfig.test.json) VERDICT command-exit 0. Touched files pillarsClaimSlot-12725 + rightSlot-12725: Test Files 2 passed (2), Tests 28 passed (28). Narrowed app-shell run, every test file naming StudioDesignSurface / useStudioRightSlot / StudioRightSlot (169 files, flowCanvasChip-11665 excluded as seat 1's #26692): Test Files 169 passed (169), Tests 1333 passed (1333), VERDICT command-exit 0; rest of app-shell left to CI Test UI (declared narrowing). Ablation via ablation-replace.mjs (app-shell tests import src, no dist leg): deleted 'setSlotOpenRef.current(true);', anchor 1->0, blob 15f41dcf->dd54dbc7, Tests 3 failed | 25 passed (28), exactly the 3 new cases; restored blob == HEAD, git diff HEAD empty. ESLint ui config on the 3 files: 0 errors, no warning on changed lines.",
      "gates": "dispatch-gates --commands: 34 derived; 33 node/pnpm commands exit 0 (each captured before any pipe) + pnpm --dir ui exec vitest run scripts/ exit 0 (Test Files 178 passed | 2 skipped, Tests 5065 passed | 2 skipped). --ran: 34 derived, 34 run, 0 NOT-MEASURED; pnpm check:changeset-fixed also ran, exit 0 (outside derivation). ui check:new-line-citations: 0 new. PR-body gates before pr_create: check-changeset-no-major, check-adr-0087-registration, check-closing-keyword-parity, check-partof-closing-keyword all exit 0. CI check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — read-only: issue_read x3 (get x1, get_comments x2), list_commits x1; no MCP write",
      "api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches x2 (fleet-write relay: pr_create with assignees, run 40552881599, read-back identical 7889 bytes; this os-dev-report comment). git push not counted. Reviewer request not made (MCP writes out of bounds); pr_create set the assignee.",
      "open_questions": [
        {
          "question": "The fix reverses objectui#12725 phase 2's pin 'a hidden slot stays hidden on a selection, as on Interfaces' and applies to all three slot pillars (Automations, Interfaces, Data), not only the flow config. Keep it host-wide?",
          "options": [
            "A: keep host-wide (this PR): one behaviour for every selection, matching the handle's own doc ('An element was selected: show its properties') and the phase-2 maintainer quote that properties show on every selection",
            "B: Automations only: needs a second handle method or a drawer inside the slot layout, which phase 2 pinned against ('a row too narrow ... opens no drawer'), and leaves Interfaces/Data with the same defect"
          ],
          "recommendation": "A, because the defect is the host's (showProps did not show), the other two pillars had the same hole, and B adds handle surface or a second layout mode the order forbids."
        }
      ],
      "out_of_scope_findings": [],
      "deviations": "Seat's heads-up asked to keep the change in the flow config fold; it sits in the slot host's showSlotProps instead (the only place that can open the slot), about 6,000 lines away from the Data pillar 'Show me' routing of the #26728/#26736 thread, so no textual overlap expected. Test surface: rightSlot-12725.test.tsx gained one Interfaces case (inside 'tests beside'). Commit trailers: model-free pair, no harness model trailer.",
      "files_changed": [
        ".changeset/26737-studio-selection-unfolds-panel.md",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.pillarsClaimSlot-12725.test.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.rightSlot-12725.test.tsx"
      ],
      "line_budget": "82 changed lines (+71 / -11) across 4 files, under the 3000 human-merge threshold"
    }

    Generated by Claude Code

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:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions