Repository navigation
feat(app-shell): Studio item toolbar — layers, references, history with rollback, audit and source on every pillar item - #28296
Merged
Conversation
…ools directory LayeredDiff, ResourceHistoryPage (HistoryPanel), AuditPanel and JsonSourceEditor move with their own tests; the references panel and its lazy scan leave ResourceEditPage as ReferencesPanel + useReferencesScan. Setup's item page imports them from the new directory, behaviour unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5
…tomations item Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5
… rollback, trail gate, Setup control Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5
…nd body types Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5
…f reads it Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5
8 tasks done
Contributor
Author
|
domain:ui#3 · os-tesla · session_01L9qibz8HEj53Wx2uphTo2o 维护者速读
席位意见:组件是搬家不是复制,Setup 与 Studio 共用一份;回滚的放行条件与 Setup 保存一致,可直接落地。 席位核对ACCEPT · seat
|
This was referenced Oct 31, 2026
This was referenced Oct 31, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Tesla · project thread
Fixes #28239
Clause-②: no
Metadata-protocol: none
维护者速读
views/item-tools/,Setup 改为从那里引用,行为不变。ui/packages/app-shell/src/views/item-tools/StudioItemTools.tsx(工具栏与回滚门槛)、StudioDesignSurface.tsx三处头部接线、ResourceEditPage.tsx引用面板换 hook 的那几处。What changes
LayeredDiff,ResourceHistoryPage(HistoryPaneland the history route page),AuditPanelandJsonSourceEditormove, with their own tests, toui/packages/app-shell/src/views/item-tools/(git mv, so history follows). The references panel and its lazy scan leaveResourceEditPage.tsxasitem-tools/ReferencesPanel.tsx(ReferencesPanel+useReferencesScan, the same idle / loading / loaded / error union and re-entry guard). Setup's item page imports all five from there; its behaviour is unchanged.item-tools/StudioItemTools.tsx: five icon buttons in each pillar's item-header actions slot, each opening the panel Setup's sheet holds.useCanReadAuthoringTrailadmits the caller, as on Setup.client.rollback, and bumps the pillar's own reload nonce (objReloadNonce/leafReloadNonce/flowReloadNonce) so the item is re-read.client.layered(type, name, { packageId })lazily, with an error arm and a retry.DraftReviewPanel.engine.studio.itemTools.*block per pack (en, zh); every tool label reuses Setup's existingengine.edit.*keys.Move map (old path → new path)
Under
ui/packages/app-shell/src/views/:metadata-admin/LayeredDiff.tsxitem-tools/LayeredDiff.tsxmetadata-admin/LayeredDiff.overlayScope.test.tsxitem-tools/LayeredDiff.overlayScope.test.tsxmetadata-admin/ResourceHistoryPage.tsxitem-tools/ResourceHistoryPage.tsxmetadata-admin/AuditPanel.tsxitem-tools/AuditPanel.tsxmetadata-admin/AuditPanel.emptyPlaceholderAffordance-8504.test.tsxitem-tools/AuditPanel.emptyPlaceholderAffordance-8504.test.tsxmetadata-admin/AuditPanel.loadFailure.test.tsxitem-tools/AuditPanel.loadFailure.test.tsxmetadata-admin/AuditPanel.lockState.test.tsxitem-tools/AuditPanel.lockState.test.tsxmetadata-admin/JsonSourceEditor.tsxitem-tools/JsonSourceEditor.tsxmetadata-admin/JsonSourceEditor.fallback.test.tsxitem-tools/JsonSourceEditor.fallback.test.tsxmetadata-admin/JsonSourceEditor.monaco-export.test.tsxitem-tools/JsonSourceEditor.monaco-export.test.tsxmetadata-admin/ResourceEditPage.tsx(ReferencesState,ReferencesPanel, the references loader)item-tools/ReferencesPanel.tsx(ReferencesState,ReferencesPanel,useReferencesScan)Import re-paths only:
src/index.ts(theLayeredDiffandMetadataResourceHistoryPageexports keep their names),metadata-admin/index.ts,ResourceRouter.tsx,PermissionMatrixEditor.tsx,DraftReviewPanel.tsx, and the testsmetadataAdminFaces.displayLocale-9909,useMonacoFallback.fastfail,useMonacoFallback.loaderRejection-11800,ResourceHistoryPage.rollbackConfirm-13333(stays inmetadata-admin/; its native-confirm file list re-pathed), andi18n'sariaLabelLiteralCensus-12145path row.Size note
Rename-aware (
git diff -M --numstat): +900 / −186 = 1,086 lines, under the order's ~1,500 split line, so move and wiring ship as one PR.dispatch-gates.mjscounts without rename detection (+3,033 / −2,319 = 5,352) and reports it over the 3,000 human-merge line; the seat reads GitHub's own additions/deletions on this PR for the landing class.Tests
studio-design/StudioDesignSurface.itemTools-28239.test.tsx(8 tests, real pillars and real Setup page, the metadata client doubled):object), Interfaces (page) and Automations (flow) shows the five buttons in order and opens all five, each reading its own door for that item (layeredwith the package,references,history,audit), Source holding the item's JSON, editable;object/showcase_accountand version 1, accepting callsclient.rollback('object', 'showcase_account', 1)once, and the pillar re-reads the object;setup.access-only caller gets Layers, References and Source, not History or Audit;DataPillar.headerActions-12511— the header's control set on every tab is now the rail toggle plus the five tools (was the rail toggle alone); its docblock says why (rulings D-5 / D-7).Acceptance notes
docs/adr/0005-metadata-customization-overlay.mdstill namesmetadata-admin/LayeredDiff.tsx; that file is Tier H and left untouched (the claim's file surface excludesdocs/adr/**).views/setup/PackagedAutomationPage.tsx, the object pickers andResourceEditPage.tsx's validation region are untouched.Verification
Head
b0fe67bc, local, underscripts/pm/os-verify-lock.sh.Tests
pnpm --dir ui exec vitest runoveritem-tools/, the new test,DataPillar.headerActions-12511, everymetadata-admin/ResourceEditPage*,ResourceHistoryPage.rollbackConfirm-13333,metadataAdminFaces.displayLocale-9909,useMonacoFallback*,trailDoorsGate-12475,PermissionMatrixEditor*,DraftReviewPanel.test.tsx: Test Files 99 passed (99), Tests 539 passed (539).DataPillar.*,AutomationsPillar.*,InterfacesPillar.*,StudioItemHeader.*test (head0754547f, before two type-only commits toStudioItemTools.tsx): Test Files 55 passed (55), Tests 244 passed (244).packages/i18n/: Test Files 93 passed (93), Tests 1433 passed, 13 skipped.studio-design/directory was not run locally (over the foreground limit); CI's Test UI shards run it.Type-check
pnpm --filter @object-ui/app-shell run type-check(both programs, afterenv -u OS_SKIP_DTS pnpm turbo run build --filter='@object-ui/app-shell^...'): exit 0.pnpm --filter @object-ui/i18n run type-check: exit 0.Derived gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack→ 34 families, each run with stdin closed, every oneexit 0(includingnode scripts/check-sdui-manifest.mjs,pnpm check:cross-package-test-inputs,pnpm check:type-check-coverage,pnpm check:type-check-debt,pnpm check:test-source-alias, andpnpm --dir ui exec vitest run scripts/: Test Files 169 passed, 2 skipped).--ranreconciliation: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN. Tier: no path-derived mandate.Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_01L9qiby6kg33hPqfAa7kpc5