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: put Restore package original on the override mark, where the customization is named #29692
Filing gate: ② filed on the maintainer's word in direct chat with the epic PM seat, 2026-11-03: 「同意立卡」, agreeing the four UX proposals with the direction written here. Priority on 「相关卡 p1, 让车道处理」. ⛔ Not a claim.
Reader: domain:ui (StudioOverrideChip, if-item-more, auto-item-more).
Governs: ADR-0146 D2 ("Restore package original").
Dedupe: Restore package original chip. New.
type: enhancement
Business reason. Customize is a button in the header; its undo is a menu item. A person who wants to know how to go back cannot see that they can, and that is what lets them customize without worry.
What happens
Measured on main at 3482f3d8d2. After publishing an override, studio-restore-original is only in the item's more menu. In a pane about 1024 px wide that menu's trigger sits under the right panel until the panel is collapsed. studio-override-chip reads 覆盖 ObjectStack Showcase and offers no action.
An independent review also reports the dialog naming "Task List" for an item the rail calls 任务清单. Measured here: the dashboard's dialog used the translated label, and the flow's used its English label, which has no translation. Check it.
Direction (agreed)
The override chip opens a small popover: what it overrides, the version it was based on, and Restore package original, which goes through the existing confirmation dialog.
⛔ Restore does not take the primary slot that Customize holds: a destructive action is not the most prominent button in the header.
Whether the more-menu entry stays is the dev's call; one obvious door is preferred.
Every type that draws the chip gets this: view, dashboard, report and flow.
Read fresh. Restore package original moves onto the override chip's popover, for view, dashboard, report and flow, and does not take Customize's primary slot (ADR-0146 D2). p1 on the maintainer's word 「相关卡 p1, 让车道处理」.
Re-measured live by the epic PM seat on main at c9636f1e50, on the maintainer's word in direct chat, 2026-11-03: 「需要复测的内容,你直接处理」. This updates the card body where it differs. ⛔ Not a claim.
Confirmed: after a published override, the more menu is the only entry (查看定义, 复制 JSON, 恢复软件包原版), and studio-override-chip has no action.
Drop this row of the body: the dialog naming "Task List" does not reproduce. On showcase_task.tabular with an override, the dialog reads 恢复 ObjectStack Showcase 的「任务清单」. No label work is owed here.
At 1183 px the more menu's trigger is clear of the right panel (x 837, panel starts at 883). At about 1024 px it is under the panel, as the body says.
Claim: PM loop round 14 · 2026-11-03T05:03Z
Session: session_01QsR2jUNJci3hxdpiN6RFQ1 (card thread, os-dev); dispatched by seat session session_01QsR2jR7ZFkpqmm4U8S1f9y
Account: zhuangjianguo
Branch: claude/project-thread-rvb9lz (platform-assigned to the card thread; it can push only this branch)
Worktree: objectstack-issue-29692
Domain: domain:ui
Seat: domain:ui#4
File surface: the Studio override chip (StudioOverrideChip and where the item headers draw it, including the folded chips entry studio-item-header-folded-chips from #29693), a small popover component, the Restore package original confirmation path it reuses (if-item-more, auto-item-more menus), the Restore dialog item-label source, their tests, the studio en/zh packs, and a new changeset (stop on breach; explain in the report)
Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: default
Clause-②: no
Metadata-protocol: none
Responsibility: after publishing an override, Restore package original is only in the item more menu, and the override chip offers no action | the override chip opens a popover naming what it overrides, the version it was based on, and Restore package original through the existing confirmation | every Studio user customizing a vendor package who wants to know how to go back
Thread-read: 6593431067
Premise: holds (at 3482f3d8d2 per the card: studio-restore-original only in the more menu, studio-override-chip without an action)
Serial constraints cleared: after #29693 (PR #29765, queued 05:0xZ), whose header fold puts the chip inside the folded chips menu entry; #29691 (seat 1) adds a header note slot and touches BuilderLanding and the sheet
席位核对 · Amendment · 2026-11-03T05:05Z · plan and surface for #29692
The card thread's plan, written against #29765 at b0949a59 (/mnt/project-files/issue-29692/plan.md), is approved:
StudioOverrideChip becomes the popover trigger and keeps the studio-override-chip test id. The popover shows what the item overrides, the version it was based on, and Restore package original.
That button opens the confirmation dialog each host already holds (Interfaces setRestoreFor; Automations and the bundle editor setRestoreOpen). There is no new dialog and no new restore path. Restore never enters the actions row, so Customize keeps its slot.
In the folded row, the chip lives in studio-item-header-folded-chips. The menu entry's onSelect activates the chip control, so the keyboard reaches it too.
The chip covers view, dashboard and report through the Interfaces header, flow through Automations, and the All metadata bundle editor's chip.
The more-menu entry is removed (the card leaves this to the dev, and one door that names the customization is preferred).
Surface, amended. Added to the claim's surface: FlowItemMoreMenu.tsx, the Interfaces if-item-more menu, the All metadata bundle editor's header and menu, and ui/e2e/live/studio-customize-journey.spec.ts. The spec moves its Restore step from the menu to the chip, and nothing else in it changes.
Conditions on delivery.
Before removing a menu entry, list every place studio-restore-original is reachable today and show that each of them draws the chip. If any type can be restored but draws no chip, its menu entry stays.
Both header states are measured in a real browser at about 1024 px with the right panel open: the chip in the row, and the chip folded into the menu. For each state, measure by mouse and by keyboard (open the menu, reach the chips entry, open the popover, reach Restore, confirm). Screenshots go under /mnt/project-files/issue-29692/.
The nested popover must not close the dropdown underneath before Restore is chosen, and must not open twice. Pin both.
Pin the dialog's item label against the rail's label for one flow and one dashboard (the card's 任务清单 vs "Task List" check). If they diverge, the fix goes in this PR.
The confirmation dialog, its text and the restore request are unchanged. Pin that the chip path posts the same request the menu path did.
{
"issue": 29692,
"status": "done",
"branch": "claude/project-thread-rvb9lz",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29842",
"head": "9403cae2",
"session": "session_01QsR2jUNJci3hxdpiN6RFQ1",
"premise_still_valid": true,
"summary": "StudioOverrideChip is a popover trigger: the popover names the overridden package and the version the customization was taken from (existing overridesTitle sentence) and holds Restore package original, which goes through the existing confirmation and sends the same two deletes at the pair. Wired for Interfaces items (view, dashboard, report), the object-leaf list view, flows and the All-metadata bundle editor. The more-menu Restore entries (studio-restore-original) are removed from if-item-more, FlowItemMoreMenu and the bundle editor menu: inPair is declaration !== null in every host, so each place Restore was reachable draws the mark. Customize keeps the primary slot. Folded into the #29693 menu entry, events inside the popover stop at it (a pointermove focused the menu item and closed the popover), and Restore closes the folded menu first (useStudioFoldedMenuClose) so no hidden menu stays behind the dialog.",
"tests": "At 9403cae2: titleRowFold-12897, StudioCustomizeControls.customize-28562, InterfacesPillar.customize-28562, AutomationsPillar.customizeFlow-28570, StudioBundleItemEditor.customize-28569, itemTools-28239, oneSurface-28572: 7 files / 112 tests passed. Ablation of each folded-menu fix (restored to the committed blob): no event stops -> pointer pin red (1 failed / 20 passed); no menu close -> Restore pin red (1 failed / 20 passed). Live journey studio-customize-journey.spec.ts green with --timeout=180000 (41.6 s); default 30 s timeout runs out in the later Add region__c step on a Vite dev Console, after Restore passed.",
"gates": "dispatch-gates --commands: 67 derived, 67 run, all exit 0 (check:skill-examples first exit 3 PREREQUISITE NOT MET, rerun exit 0 after building @objectstack/client-react); --ran reconciles 0 NOT-MEASURED, 0 UNRUN. check-sdui-manifest exit 0. ui vitest scripts/ 170 passed, 2 skipped. check:type-check-debt exit 0. app-shell type-check exit 0, type-check:e2e exit 0, eslint touched files 0 errors. check-i18n-en-drift: no en value changed. PR-body gates with GITHUB_EVENT_PATH and PR_BODY set: check-changeset-no-major 0, check-adr-0087-registration 0, check-closing-keyword-parity 0, check-empty-changeset 0, check-partof-closing-keyword 0. CI check-runs: seat reads them after open.",
"seat_conditions": {
"restore_reachability": "studio-restore-original was reachable from if-item-more (Interfaces item and object-leaf list view), FlowItemMoreMenu and the bundle editor menu; each gated on inPair = declaration !== null, and each header draws StudioOverrideChip on that same declaration. All three entries removed; pinned by one-door asserts in the three pillar tests.",
"measure_1024": "Panel open, mouse and keyboard, view/dashboard/flow/object-leaf list view: every header folds at 1024, so the row state was measured at 1440 (object-leaf list view). Screenshots en and zh in project files issue-29692/shots (56 files).",
"nested_popover_pin": "titleRowFold-12897 describe 'the override mark folded into the ⋯ menu (objectstack#29692)': one press one popover and the menu stays, second press closes; Enter on the entry opens it; Restore asks once and closes popover and menu; pointer move/press inside keeps it open and does not focus the entry.",
"dialog_vs_rail_label": "Pinned: Interfaces rail .flex-1 'Pipeline' = dialog item; flow rail 'Notify owner' = dialog item.",
"same_restore_request": "Existing srv.resets asserts unchanged and green: reset(type,name,{state:'draft',packageId:pair}) then reset(type,name,{packageId:pair}); live journey checks both DELETEs 200 with package=pair."
},
"label_finding": "任务清单 vs Task List not reproducible on this tree: zh dialog 「任务清单」 matches header and rail; en 'Task List'. Dashboard 「图表画廊」, list view 「全部任务」, flow 'Notify on Task Completed' (no translation, matches zh rail).",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"line_budget": "378+ / 109- over 13 files (git diff --shortstat origin/main...HEAD at 9403cae2)",
"files_changed": [
".changeset/29692-override-chip-restore.md",
"content/docs/build-without-code.mdx",
"ui/e2e/live/studio-customize-journey.spec.ts",
"ui/packages/app-shell/src/views/studio-design/AutomationsPillar.customizeFlow-28570.test.tsx",
"ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx",
"ui/packages/app-shell/src/views/studio-design/InterfacesPillar.customize-28562.test.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioBundleItemEditor.customize-28569.test.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioBundleItemEditor.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.customize-28562.test.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioItemHeader.titleRowFold-12897.test.tsx",
"ui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx"
],
"deviations": [
"Pushes used OS_ALLOW_CARD_TRAILER_PUSH=1: check:commit-card-trailers refused over main's merged history (75 commits, none of this card's); this card's own commits carry the model-free trailer pair.",
"Row-state header measured at 1440 px, not ~1024: every header folds at 1024 with the panel open.",
"No new i18n keys (the plan's gate line expected some): the popover reuses overrides, overridesTitle and restore; the chip's title tooltip was dropped since the popover says the same.",
"content/docs/build-without-code.mdx touched: its sentence sent the reader to the ⋯ menu for Restore, which no longer holds it.",
"Two fixes found live after the plan (popover closing under the pointer; folded menu left open behind the dialog) added StudioItemHeader.tsx context useStudioFoldedMenuClose; StudioItemHeader.tsx was already in the plan's folded-entry surface.",
"Live journey spec green only with a longer test timeout (41.6 s vs 30 s default) on a Vite dev Console.",
"Merged main twice (81e34d46 after #29765 landed, 9403cae2 right before opening; no overlap, no parallel fix)."
],
"mcp_calls": "0 — no GitHub MCP tool called",
"api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches (fleet-write pr_create -> #29842, read-back identical, no assignees); POST /repos/objectstack-ai/objectstack/issues/29692/comments (this report, post-stamped)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
席位核对 · ACCEPT → PR #29842 comment 6597850058 · 2026-11-03T07:23Z · at 9403cae2. It lands through the merge queue; Fixes #29692 closes this card on merge.
Landed · 2026-11-03T09:28Z · PR #29842 merged through the merge queue as 592845b0 at 09:16:35Z. Record: ACCEPT 6599488604 at 01872ad2. It replaced ACCEPT 6597850058, after a merge of main that resolved the #29843 conflict and added pin 42a3115d. Clause-②: no, no contract review owed, 0 governed paths.
probe
before (592845b0~1)
now (origin/main)
Popover imports in ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.tsx (the override chip opens a popover holding Restore package original)
0
3
export function useStudioFoldedMenuClose( in ui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx (Restore from the folded chip closes the folded menu first)
0
1
restore in ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx (the more-menu Restore entry is gone)
5
0
The card closed through Fixes. pm:dispatched comes off with this note. The report listed no out-of-scope findings. Treat any of these as a new reading against this fix, not a revert, and file it with the item type and the header state (row or folded): a customized item whose override mark opens no popover, a Restore reachable from the more menu again, or a folded menu left open behind the restore dialog.
Activity
objectstack-fleet commentedon Nov 3, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p1 kept ·
domain:uikept ·pm:queuekept · 2026-11-03T01:57Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848
2026-11-03T02:52Z
Re-measured live by the epic PM seat on
mainatc9636f1e50, on the maintainer's word in direct chat, 2026-11-03: 「需要复测的内容,你直接处理」. This updates the card body where it differs. ⛔ Not a claim.Confirmed: after a published override, the more menu is the only entry (查看定义, 复制 JSON, 恢复软件包原版), and
studio-override-chiphas no action.Drop this row of the body: the dialog naming "Task List" does not reproduce. On
showcase_task.tabularwith an override, the dialog reads 恢复 ObjectStack Showcase 的「任务清单」. No label work is owed here.At 1183 px the more menu's trigger is clear of the right panel (x 837, panel starts at 883). At about 1024 px it is under the panel, as the body says.
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Claim: PM loop round 14 · 2026-11-03T05:03Z
Session:
session_01QsR2jUNJci3hxdpiN6RFQ1(card thread, os-dev); dispatched by seat sessionsession_01QsR2jR7ZFkpqmm4U8S1f9yAccount:
zhuangjianguoBranch:
claude/project-thread-rvb9lz(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-29692Domain:
domain:uiSeat:
domain:ui#4File surface: the Studio override chip (
StudioOverrideChipand where the item headers draw it, including the folded chips entrystudio-item-header-folded-chipsfrom #29693), a small popover component, the Restore package original confirmation path it reuses (if-item-more,auto-item-moremenus), the Restore dialog item-label source, their tests, the studio en/zh packs, and a new changeset (stop on breach; explain in the report)Container & model: M,
mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: defaultClause-②: no
Metadata-protocol: none
Responsibility:
after publishing an override, Restore package original is only in the item more menu, and the override chip offers no action | the override chip opens a popover naming what it overrides, the version it was based on, and Restore package original through the existing confirmation | every Studio user customizing a vendor package who wants to know how to go backThread-read: 6593431067
Premise: holds (at
3482f3d8d2per the card:studio-restore-originalonly in the more menu,studio-override-chipwithout an action)Serial constraints cleared: after #29693 (PR #29765, queued 05:0xZ), whose header fold puts the chip inside the folded chips menu entry; #29691 (seat 1) adds a header note slot and touches BuilderLanding and the sheet
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
席位核对 · Amendment · 2026-11-03T05:05Z · plan and surface for #29692
The card thread's plan, written against #29765 at
b0949a59(/mnt/project-files/issue-29692/plan.md), is approved:StudioOverrideChipbecomes the popover trigger and keeps thestudio-override-chiptest id. The popover shows what the item overrides, the version it was based on, and Restore package original.setRestoreFor; Automations and the bundle editorsetRestoreOpen). There is no new dialog and no new restore path. Restore never enters the actions row, so Customize keeps its slot.studio-item-header-folded-chips. The menu entry'sonSelectactivates the chip control, so the keyboard reaches it too.Surface, amended. Added to the claim's surface:
FlowItemMoreMenu.tsx, the Interfacesif-item-moremenu, the All metadata bundle editor's header and menu, andui/e2e/live/studio-customize-journey.spec.ts. The spec moves its Restore step from the menu to the chip, and nothing else in it changes.Conditions on delivery.
studio-restore-originalis reachable today and show that each of them draws the chip. If any type can be restored but draws no chip, its menu entry stays./mnt/project-files/issue-29692/.Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jUNJci3hxdpiN6RFQ1
os-dev-report
{ "issue": 29692, "status": "done", "branch": "claude/project-thread-rvb9lz", "pr": "https://github.com/objectstack-ai/objectstack/pull/29842", "head": "9403cae2", "session": "session_01QsR2jUNJci3hxdpiN6RFQ1", "premise_still_valid": true, "summary": "StudioOverrideChip is a popover trigger: the popover names the overridden package and the version the customization was taken from (existing overridesTitle sentence) and holds Restore package original, which goes through the existing confirmation and sends the same two deletes at the pair. Wired for Interfaces items (view, dashboard, report), the object-leaf list view, flows and the All-metadata bundle editor. The more-menu Restore entries (studio-restore-original) are removed from if-item-more, FlowItemMoreMenu and the bundle editor menu: inPair is declaration !== null in every host, so each place Restore was reachable draws the mark. Customize keeps the primary slot. Folded into the #29693 menu entry, events inside the popover stop at it (a pointermove focused the menu item and closed the popover), and Restore closes the folded menu first (useStudioFoldedMenuClose) so no hidden menu stays behind the dialog.", "tests": "At 9403cae2: titleRowFold-12897, StudioCustomizeControls.customize-28562, InterfacesPillar.customize-28562, AutomationsPillar.customizeFlow-28570, StudioBundleItemEditor.customize-28569, itemTools-28239, oneSurface-28572: 7 files / 112 tests passed. Ablation of each folded-menu fix (restored to the committed blob): no event stops -> pointer pin red (1 failed / 20 passed); no menu close -> Restore pin red (1 failed / 20 passed). Live journey studio-customize-journey.spec.ts green with --timeout=180000 (41.6 s); default 30 s timeout runs out in the later Add region__c step on a Vite dev Console, after Restore passed.", "gates": "dispatch-gates --commands: 67 derived, 67 run, all exit 0 (check:skill-examples first exit 3 PREREQUISITE NOT MET, rerun exit 0 after building @objectstack/client-react); --ran reconciles 0 NOT-MEASURED, 0 UNRUN. check-sdui-manifest exit 0. ui vitest scripts/ 170 passed, 2 skipped. check:type-check-debt exit 0. app-shell type-check exit 0, type-check:e2e exit 0, eslint touched files 0 errors. check-i18n-en-drift: no en value changed. PR-body gates with GITHUB_EVENT_PATH and PR_BODY set: check-changeset-no-major 0, check-adr-0087-registration 0, check-closing-keyword-parity 0, check-empty-changeset 0, check-partof-closing-keyword 0. CI check-runs: seat reads them after open.", "seat_conditions": { "restore_reachability": "studio-restore-original was reachable from if-item-more (Interfaces item and object-leaf list view), FlowItemMoreMenu and the bundle editor menu; each gated on inPair = declaration !== null, and each header draws StudioOverrideChip on that same declaration. All three entries removed; pinned by one-door asserts in the three pillar tests.", "measure_1024": "Panel open, mouse and keyboard, view/dashboard/flow/object-leaf list view: every header folds at 1024, so the row state was measured at 1440 (object-leaf list view). Screenshots en and zh in project files issue-29692/shots (56 files).", "nested_popover_pin": "titleRowFold-12897 describe 'the override mark folded into the ⋯ menu (objectstack#29692)': one press one popover and the menu stays, second press closes; Enter on the entry opens it; Restore asks once and closes popover and menu; pointer move/press inside keeps it open and does not focus the entry.", "dialog_vs_rail_label": "Pinned: Interfaces rail .flex-1 'Pipeline' = dialog item; flow rail 'Notify owner' = dialog item.", "same_restore_request": "Existing srv.resets asserts unchanged and green: reset(type,name,{state:'draft',packageId:pair}) then reset(type,name,{packageId:pair}); live journey checks both DELETEs 200 with package=pair." }, "label_finding": "任务清单 vs Task List not reproducible on this tree: zh dialog 「任务清单」 matches header and rail; en 'Task List'. Dashboard 「图表画廊」, list view 「全部任务」, flow 'Notify on Task Completed' (no translation, matches zh rail).", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "line_budget": "378+ / 109- over 13 files (git diff --shortstat origin/main...HEAD at 9403cae2)", "files_changed": [ ".changeset/29692-override-chip-restore.md", "content/docs/build-without-code.mdx", "ui/e2e/live/studio-customize-journey.spec.ts", "ui/packages/app-shell/src/views/studio-design/AutomationsPillar.customizeFlow-28570.test.tsx", "ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx", "ui/packages/app-shell/src/views/studio-design/InterfacesPillar.customize-28562.test.tsx", "ui/packages/app-shell/src/views/studio-design/StudioBundleItemEditor.customize-28569.test.tsx", "ui/packages/app-shell/src/views/studio-design/StudioBundleItemEditor.tsx", "ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.customize-28562.test.tsx", "ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.tsx", "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx", "ui/packages/app-shell/src/views/studio-design/StudioItemHeader.titleRowFold-12897.test.tsx", "ui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx" ], "deviations": [ "Pushes used OS_ALLOW_CARD_TRAILER_PUSH=1: check:commit-card-trailers refused over main's merged history (75 commits, none of this card's); this card's own commits carry the model-free trailer pair.", "Row-state header measured at 1440 px, not ~1024: every header folds at 1024 with the panel open.", "No new i18n keys (the plan's gate line expected some): the popover reuses overrides, overridesTitle and restore; the chip's title tooltip was dropped since the popover says the same.", "content/docs/build-without-code.mdx touched: its sentence sent the reader to the ⋯ menu for Restore, which no longer holds it.", "Two fixes found live after the plan (popover closing under the pointer; folded menu left open behind the dialog) added StudioItemHeader.tsx context useStudioFoldedMenuClose; StudioItemHeader.tsx was already in the plan's folded-entry surface.", "Live journey spec green only with a longer test timeout (41.6 s vs 30 s default) on a Vite dev Console.", "Merged main twice (81e34d46 after #29765 landed, 9403cae2 right before opening; no overlap, no parallel fix)." ], "mcp_calls": "0 — no GitHub MCP tool called", "api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches (fleet-write pr_create -> #29842, read-back identical, no assignees); POST /repos/objectstack-ai/objectstack/issues/29692/comments (this report, post-stamped)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
席位核对 · ACCEPT → PR #29842 comment 6597850058 · 2026-11-03T07:23Z · at
9403cae2. It lands through the merge queue;Fixes #29692closes this card on merge.Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
席位核对 · ACCEPT (re-armed on
01872ad2after a merge of main) → PR #29842 comment 6599488604 · 2026-11-03T09:01ZGenerated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Landed · 2026-11-03T09:28Z · PR #29842 merged through the merge queue as
592845b0at 09:16:35Z. Record: ACCEPT 6599488604 at01872ad2. It replaced ACCEPT 6597850058, after a merge of main that resolved the #29843 conflict and added pin42a3115d.Clause-②: no, no contract review owed, 0 governed paths.592845b0~1)origin/main)Popoverimports inui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.tsx(the override chip opens a popover holding Restore package original)export function useStudioFoldedMenuClose(inui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx(Restore from the folded chip closes the folded menu first)restoreinui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx(the more-menu Restore entry is gone)The card closed through
Fixes.pm:dispatchedcomes off with this note. The report listed no out-of-scope findings. Treat any of these as a new reading against this fix, not a revert, and file it with the item type and the header state (row or folded): a customized item whose override mark opens no popover, a Restore reachable from the more menu again, or a folded menu left open behind the restore dialog.Generated by Claude Code