Repository navigation
fix(app-shell): a Studio selection unfolds a hidden right panel at every width - #26824
Conversation
…ery width With the right panel hidden, selecting a flow node (or an Interfaces block, or a Data field) set the slot to its properties but reopened it only on a phone, so at a desktop width the selection's configuration was drawn nowhere. The slot's showProps now unfolds it at every width, as the slot toggle and the slot shortcut do. It is held in state for the surface's life, so a pillar asks again only on a new selection, never because the callback was re-created. Claude-Session: https://claude.ai/code/session_01QsR2jRkRJ1Po9y5UgWCsns Co-authored-by: Claude <noreply@anthropic.com>
|
Seat note ·
This is not this PR's failure. The diff touches only the slot host's The seat re-runs the failed jobs once. A second failure counts as real. Generated by Claude Code |
…spector string cases The engine.inspector.flowNode rows live in the lazily fetched studio zh catalogue; under this branch's Test UI shard order the file ran before anything loaded it and read the English fallback. Ported byte-identically from the same fix on the branch claude/project-thread-998cn0 so the two merge cleanly. Claude-Session: https://claude.ai/code/session_01QsR2jRkRJ1Po9y5UgWCsns Co-authored-by: Claude <noreply@anthropic.com>
…chip cases Same shard-order cause as the inspector string test: the zh "API name" title lives in the lazily fetched studio catalogue. Ported byte-identically from the same fix on the branch claude/project-thread-998cn0 so the two merge cleanly. Claude-Session: https://claude.ai/code/session_01QsR2jRkRJ1Po9y5UgWCsns Co-authored-by: Claude <noreply@anthropic.com>
|
Seat note · Test UI (15/16) on Generated by Claude Code |
…-51d5nn Claude-Session: https://claude.ai/code/session_01QsR2jRkRJ1Po9y5UgWCsns Co-authored-by: Claude <noreply@anthropic.com>
席位核对ACCEPT · seat
Landing: no contract review is owed (no published schema, no governed text, |
Requested by Steedos · project thread
Fixes #26737
Clause-②: no
Metadata-protocol: none
维护者速读
showProps一处行为,不动任何元数据和 spec。注意它推翻了旧测试钉住的「隐藏的右栏在选中时保持隐藏」,三个设计面板一起生效。回滚即 revert 本 PR。StudioDesignSurface.tsx里showSlotProps的新定义;StudioDesignSurface.pillarsClaimSlot-12725.test.tsx里替换掉的那条用例。What changes
The Studio right slot's handle (
StudioRightSlotHandle) documentsshowPropsas "An element was selected: show its properties". The host implemented it as "switch the slot to properties, and open it only on a phone" (if (isMobile) setSlotOpenMobile(true)), so at a desktop width a selection made while the builder had hidden the panel set the mode and drew the properties nowhere. In Automations the classic folded-row drawer is the other path, and it is drawn only outside the slot (configFolded && !inSlot), so neither path showed the node's configuration.showSlotPropsnow unfolds the slot at every width, through the samesetSlotOpenthat the top-bar toggle and the slot shortcut use, so the shown state is remembered under the Studio key as a click on the toggle remembers it. On a phone nothing changes.The function is now held in
useStatefor the surface's life, reading the latestsetSlotOpenthrough a ref, instead of auseCallbackkeyed onisMobile. The three pillars that call it run their effect on the selection key and on this function. With the old memo, a re-created callback (a breakpoint change, or React discarding the memo, ui/AGENTS.md #10) re-ran those effects, and with this change that would reopen a panel the builder had just hidden over the same selection. Now a pillar asks again only on a new selection.Why
A builder who hides the right panel on a mid-size screen could not edit the selected step without finding the toggle again (QA run studio-qa-2026-10-27, id U9).
Tests
StudioDesignSurface.pillarsClaimSlot-12725.test.tsx(Automations): the case "a hidden slot stays hidden on a selection, as on Interfaces" is replaced. At a desktop width (nomdmatch), the builder hides the slot from the toggle, selects a node, and the slot is visible in properties mode with that node's inspector, the toggle pressed and the Studio key1, with no drawer. A second case: hidden again over the same selection, the slot stays hidden, also when the same node is picked again, and another node unfolds it.StudioDesignSurface.rightSlot-12725.test.tsx(Interfaces): hiding the slot and selecting a block unfolds it on the block's properties.node scripts/ablation-replace.mjsdeletedsetSlotOpenRef.current(true);(anchor 1 → 0, blob15f41dcf→dd54dbc7). The two files ran red: Tests 3 failed, 25 passed (28), exactly the three new cases. Restored: blob equals HEAD,git diff HEADempty.Acceptance notes
Verification
All readings at head
367db7d0(basec8583f80), underscripts/pm/os-verify-lock.sh.Touched package: @object-ui/app-shell
pnpm exec turbo run type-check --filter=@object-ui/app-shell --concurrency=2, 64 tasks successful, VERDICT command-exit 0. Re-run at367db7d0:pnpm --filter @object-ui/app-shell type-check(tsc --noEmitandtsc -p tsconfig.test.json), VERDICT command-exit 0.StudioDesignSurface,useStudioRightSlotorStudioRightSlot(169 files,StudioDesignSurface.flowCanvasChip-11665left out: seat 1 holds it on test(app-shell): StudioDesignSurface.flowCanvasChip-11665 reads the zh tooltip before the lazy studio catalogue lands, so Test UI goes red at random #26692): Test Files 169 passed (169), Tests 1333 passed (1333), VERDICT command-exit 0. The rest of app-shell is left to CI's Test UI shards.ui/eslint.config.json the three touched files: 0 errors, and no warning on the changed lines.Derived gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 34 commands for the 4 changed paths; all 34 exit 0, each code captured before any pipe, among themcheck:nul-bytes,check:test-source-alias,check:cross-package-test-inputs,check:type-check-coverage,check:type-check-debt,check-sdui-manifest,check-empty-changesetandcheck-changeset-no-major.pnpm --dir ui exec vitest run scripts/: Test Files 178 passed, 2 skipped (180), Tests 5065 passed, 2 skipped.--ranreconciled: "34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED".pnpm check:changeset-fixed(roster under.changeset) also ran, exit 0.pnpm --dir ui run check:new-line-citations: 0 new cross-file line-address citations.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (lint is CI's)main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01QsR2jRkRJ1Po9y5UgWCsns
Generated by Claude Code