Repository navigation
fix(app-shell): the Studio copilot draws no pending-drafts bar over its composer (objectui#12965, part of objectui#12725) - #12975
Merged
objectstack-fleet[bot] merged 1 commit intoOct 18, 2026
Conversation
…ts composer (objectui#12965, part of objectui#12725) In the package's own Studio, ChatPane no longer mounts PendingDraftsBar. In the copilot's right slot the floating bar sat over the composer's input line (measured at 1010 and 1280 px with the real build agent and one pending draft) and hid the placeholder. There the top bar's 变更 and 发布 and the applied card's 查看变更并发布 review and publish, and the ruled StudioRailCopilot artboard draws no bar. The condition is the reading the applied card's review door already makes: studioChangesReviewTarget replaces the entry exactly when the location is on the bound package's Studio pillar. The full-page chat and the console dock keep the bar unchanged. Claude-Session: https://claude.ai/code/session_01Cbdek8SKSHxddGqTPZXdqX Co-authored-by: Claude <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
Author
席位核对 · ACCEPT ·
|
objectstack-fleet
Bot
deleted the
claude/issue-12965-studio-drafts-bar
branch
October 18, 2026 16:21
This was referenced Oct 18, 2026
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.
Fixes #12965
Clause-②: no
Part of #12725. This is a draft by a dispatched developer; the seat
repo:cloud#2lands it. Session:https://claude.ai/code/session_01Cbdek8SKSHxddGqTPZXdqX.What changes
In the package's own Studio,
ChatPane(packages/app-shell/src/console/ai/AiChatPage.tsx) no longer mountsPendingDraftsBar. In the Studio copilot's right slot, the floating bar (「有 1 项改动尚未发布… 发布」, absolute atbottom-20, objectui#5694) sat over the composer's input line and hid the placeholder and the first typed line. There, the top bar's 变更 and 发布 and the applied card's 查看变更并发布 are the ways to review and publish, and #12725's ruled StudioRailCopilot artboard draws no bar.ChatPanealready makes.onBoundPackageStudioisstudioChangesReviewTarget(boundPackageId, location).replace: the applied card's review door (reviewDrafts, PR feat(app-shell): the copilot's applied card opens the change review and undoes the draft; the badge follows an in-turn publish; the chat fits the 1010 px slot (objectui#12894, objectui#12725 phase 6) #12964) replaces the history entry exactly when the location is already on that package's Studio pillar. The Studio copilot is mounted only on/studio/:packageId/:tabwitheditPackageIdset to that package, soboundPackageIdis that package there. The full-page chat (/ai/...) and the console dock (ConsoleLayout,/apps/...) are never on such a pillar.PendingDraftsBaritself, its placement and its behaviour outside Studio; nopackages/plugin-chatbot/**file; no new prop anywhere; the top bar's 变更 badge and the applied card.content/docs/guide/console.md(AGENTS.md Add automated testing infrastructure and CI/CD workflows #2)..changeset/12965-studio-copilot-no-drafts-bar.md,@object-ui/app-shellpatch.Measured (live, zh-CN, the real
buildagent, one pending draft)The driver is #12725 phase 6's, with the agent named
buildsoisBuildSurfaceis true; only the reading is new. It records the composer textarea's box, the bar's box and their overlap. It also records whatdocument.elementFromPointfinds at five points along the textarea's first text line, where the placeholder is drawn.mainat43efd078)After the fix, the placeholder 「问问数据,或让我改改这个应用…」 measures 208 px in the textarea's font, against 273 px (1010) and 333 px (1280) of content width, so it shows whole. The full-page control gives the same reading before and after.
Tests
packages/app-shell/src/console/ai/__tests__/AiChatPage.studioDraftsBar-12965.test.tsx, 3 tests. The harness is phase 6's: the realChatPaneand the realPendingDraftsBar, withChatbotEnhancedstubbed._draftsanswers one draft for the bound package in every case.pending-drafts-baris drawn. A sibling probe reads the same ledger throughusePendingDrafts, the hook the Studio top bar's 变更 badge uses. The probe must answer 1 before the bar's absence is read, so the absence is not read before the ledger has answered./ai/build/conv-1?package=app.hcpl) and the console dock's location (/apps/hcpl/hcpl_borrowing) still draw the bar.Run:
pnpm exec vitest run packages/app-shell/src/console/ai/__tests__/AiChatPage.studioDraftsBar-12965.test.tsx --maxWorkers=2:Test Files 1 passed (1),Tests 3 passed (3).Ablation (once, on the condition; the fix committed first as
ac7edbc6). It went throughablation-replace.mjsin WRAP mode: anchor{isBuildSurface && !onBoundPackageStudio ? (replaced by{isBuildSurface ? (. The anchor went from 1 hit to 0 and the blob from02504bbffb97to1f902a32a34a. The same run went red as expected:Tests 1 failed | 2 passed (3), the Studio case failing onqueryByTestId('pending-drafts-bar')(it expected null and got the bar's DIV), both controls green. Restore: the blob after restore equals HEAD (02504bbffb97),git diff HEADis empty, and an on-diskgrep -cof the anchor reads 1. The ablation was one-off; no permanent file was added for it.@object-ui/app-shellfull suite, atac7edbc6(the head of this PR), in 12 shards through the verify lock (pnpm exec vitest run --maxWorkers=2 --shard=K/12 packages/app-shell/). Every shard reportedVERDICT command-exit 0. In total:Test Files 1570 passed | 1 skipped (1571), which equals the 1571 tracked app-shell test files (git ls-filesat the same head);Tests 14761 passed | 9 skipped (14770); 0 failed.Gates
Local, each exit code captured before any pipe:
pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build: VERDICT command-exit 0.pnpm --filter @object-ui/app-shell type-check(tsc --noEmit && tsc -p tsconfig.test.json): VERDICT command-exit 0, 0error TS.tsc -p tsconfig.test.json --listFilesOnlylists the new test file.AiChatPage.tsx: 34 at base, 34 at head. The new test file has 0.check:new-line-citations,check:control-bytes,check:test-path-roots,check:vi-mock-specifiers,check:vi-mock-inherit,check:vi-mock-override-shape,check:changeset-claims,check:pending-changeset-literals,check:spec-symbols,check:phantom-deps,check:self-import,check:esm-specifiers,check:unreferenced-sources,check:handler-key-reads,check:metadata-write-doors,check:comment-mask-corpus,check:i18n-keys,check:doc-json(after the closure build; before it, exit 2, PREREQUISITE, the strict face unbuilt),check:doc-fences,check:doc-types,check:doc-example-ids,check:doc-example-readers,check:shell-escape-residue,changeset:check,node scripts/check-changeset-presence.mjs,node scripts/check-changeset-no-major.mjs.check:doc-snippetsandcheck:doc-examples(exit 2, PREREQUISITE: a scoped build of the 34 packages the covered documents import). The docs change is one table-row sentence with no code fence. CI runs both.objectui has no
dispatch-gates.mjs. The list above is the rootpackage.jsoncheck:*scripts whose scan roots readapp-shellsource, test files,.changeset/orcontent/docs, the same derivation as PR #12964. CI's check-runs are the merge gate.Evidence
Branch
claude/issue-12965-evidenceatdf567c61,evidence/12965/(never merged): six screenshots (Studio 1010 and 1280, before and after; full-page 1280, before and after), the six JSON readings, the driver and a README.Deviations
AiChatPage.tsx, tests beside it and a changeset. The PR also adds one sentence tocontent/docs/guide/console.md(AGENTS.md Add automated testing infrastructure and CI/CD workflows #2). Nothing else.editPackageId. Keying on the bound package reuses the one predicate the applied card's door already reads instead of writing a second path test.Acceptance notes
/ai/build?package=...) at 1280 px, with the build agent and one pending draft, the same bar also sits over the composer's first line: overlap 670 by 51 px, all five first-line points on the bar (before-fullpage-1280-draft-pending.pngon the evidence branch). The console dock was not measured. This is reported to the seat in the dev report, for AI build chat: plan card v2 and result card v2 per the AiBuild artboard, a collapsed progress line, no automatic navigation to Studio after a build, and a placeholder without the agent's name #12724's scope (the full-page AI build chat and its composer).Generated by Claude Code