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 copilot: the floating pending-drafts bar covers the copilot composer's input line in the right slot (objectui#12725's ruled artboard draws no bar there) #12965
Part of #12725. Filed by the repo:cloud#2 seat (seat post objectstack-ai/objectstack#24145, session session_01Cbdek8SKSHxddGqTPZXdqX), which dispatches #12725 on the maintainer's order (「objectui #12724 和 #12725 你也负责派发。」). Source: the #12725 phase 6 dev report on PR #12964, out-of-scope finding 1 (class a, user-visible occlusion). ⛔ Not a claim.
What was measured
Where: Studio with the real build agent (cloud BUILD_AGENT_NAME, so isBuildSurface is true), at 1010 and 1280 px, once a copilot draft is pending.
What the user sees:ChatPane's floating PendingDraftsBar (packages/app-shell/src/console/ai/AiChatPage.tsx, rendered absolute at bottom-20, objectui#5694) sits over the copilot composer's input line in the right slot. It hides the placeholder and the first typed line.
Evidence: branch claude/issue-12725f-evidence at 2301a354, evidence/12725f/: doors-1010-2-applied-card.png, doors-1280-2-applied-card.png, after-1010-slot-fits.png, after-1280-slot-fits.png.
#12725's rulings: 「按「右栏二选一」定稿」 with the StudioRailCopilot / StudioRailProps artboards as the final design. The artboards draw no pending-drafts bar in the right slot. The top bar already carries the 变更 badge (in sync with the copilot's drafts since phase 5) and 发布, and the applied card carries 查看变更并发布 / 撤销 (PR #12964).
Target
Inside Studio's copilot slot the bar is not drawn: the top bar's 变更 and 发布 and the applied card are the ways to review and publish there. Outside Studio (the full-page chat and the console dock), the bar stays as it is.
File surface
packages/app-shell/src/console/ai/AiChatPage.tsx (where ChatPane mounts PendingDraftsBar, keyed on the Studio host it already knows), tests beside it, a changeset.
Acceptance
A test: in the Studio copilot with a pending draft, no PendingDraftsBar is rendered, and the composer's input is unobstructed. A control: the full-page chat with a pending draft still shows the bar.
Screenshots at 1010 and 1280 px in the Studio copilot with a pending draft: the composer's placeholder is visible whole.
pnpm --filter @object-ui/app-shell test green.
Dedupe
300 objectui issues (open and closed, by last update) scanned for PendingDraftsBar, "pending drafts bar", and 尚未发布 with composer or 输入: the only hit is PR #12964.
Claim: PM loop round R4 (batch 3) · 2026-10-18T14:03Z · p2, Part of #12725, on the maintainer's order in this seat's chat, 2026-10-18: 「objectui #12724 和 #12725 你也负责派发。」 · filed by this seat from the #12725 phase 6 dev report · pm:queue → pm:dispatched
Session: session_01Cbdek8SKSHxddGqTPZXdqX
Account: os-zhuang
Branch: claude/issue-12965-studio-drafts-bar
Worktree: objectui-issue-12965
Domain: domain:ui
Seat: repo:cloud#2 (seat post objectstack-ai/objectstack#24145; on the maintainer's order above)
File surface: packages/app-shell/src/console/ai/AiChatPage.tsx (where ChatPane mounts PendingDraftsBar), tests beside it, a changeset · ⛔ not packages/plugin-chatbot/** (stop on breach; explain in the report)
Container & model: S (one mount condition, one test and a control), mode:subagent, model: default judgment tier (the seat's per-card call)
Clause-②: no
Responsibility: objectui's own AiChatPage.tsx | the platform path: the top bar's 变更 badge and the applied card already offer review and publish in Studio | reach: every Studio copilot user with a pending draft and the real build agent (measured at 1010 and 1280 px)
Thread-read: none
Serial constraints cleared: PR #12964 (#12725 phase 6, AiChatPage.tsx) landed as 43efd078. No dev in flight touches objectui.
{
"issue": 12965,
"status": "done",
"branch": "claude/issue-12965-studio-drafts-bar",
"pr": "https://github.com/objectstack-ai/objectui/pull/12975",
"session": "session_01Cbdek8SKSHxddGqTPZXdqX",
"premise_still_valid": true,
"summary": "Draft PR #12975 (head ac7edbc6, base main, assignee os-zhuang, first lines Fixes #12965 then Clause-②: no). In the package's own Studio, ChatPane no longer mounts PendingDraftsBar. The key is onBoundPackageStudio = studioChangesReviewTarget(boundPackageId, location).replace, the reading the applied card's review door (reviewDrafts, PR #12964) already makes, so there is no new prop anywhere. The full-page chat and the console dock keep the bar. Measured red first: with the real build agent and one pending draft, the bar overlapped the composer textarea by 267 x 51 px at 1010 and 327 x 51 px at 1280, with all five first-line points on the bar. After the fix there is no bar, the placeholder (208 px) shows whole in 273 and 333 px of content width, and the 变更 badge still reads 1. Diff: AiChatPage.tsx, one new test file, one changeset, one docs sentence.",
"measured_chain": "StudioCopilotConversation (packages/app-shell/src/views/studio-design/StudioAiCopilot.tsx) mounts ChatPane with editPackageId = the Studio package, on /studio/:packageId/:tab only → ChatPane (packages/app-shell/src/console/ai/AiChatPage.tsx): isBuildSurface = agentRouteName(activeAgent) === 'build' → mounts PendingDraftsBar (console/ai/PendingDraftsBar.tsx, unchanged) in a pointer-events-none absolute bottom-20 wrapper, which lies over the ChatbotEnhanced composer's first line. Fix key: studioChangesReviewTarget (views/studio-design/studioChangesLink.ts, unchanged) answers replace: true exactly when the location is on that package's Studio pillar; boundPackageId = deriveBoundPackageId, where editPackageId wins.",
"items": [
"§1 Measure first: done. Live, zh-CN, agent named build, one pending draft. Studio 1010: bar 727,766,994,820 over textarea 712,769,1009,833, overlap 267 x 51, first-line points on the composer 0 of 5. Studio 1280: overlap 327 x 51, 0 of 5. Screenshots before-studio-1010/1280-draft-pending.png.",
"§1 Fix: done. One condition in ChatPane (isBuildSurface && !onBoundPackageStudio). No new prop on plugin-chatbot or anywhere else. Outside Studio the bar is unchanged: the full-page 1280 reading is the same before and after.",
"§1 Green: done. Studio 1010 and 1280 after: bar not drawn, 5 of 5 first-line points on the composer, placeholder 208 px inside 273 / 333 px content width (whole), badge 1, applied card keeps 查看变更并发布 / 撤销.",
"§2 Test and control: done. AiChatPage.studioDraftsBar-12965.test.tsx, 3 tests: Studio pillar with a pending draft draws no pending-drafts-bar (a sibling usePendingDrafts probe answers 1 first, so the absence is not read before the ledger answers); CONTROL full-page chat and CONTROL console-dock location still draw it.",
"§2 Ablation: done, once, on the condition, fix committed first, red as expected, restore proven (see tests).",
"§2 Screenshots: done. Evidence branch claude/issue-12965-evidence at df567c61, evidence/12965/: six PNGs (Studio 1010/1280 before and after, full-page 1280 before and after), six JSON readings, live-driver.cjs, README.",
"§3 Stop rules held: PendingDraftsBar.tsx untouched; no packages/plugin-chatbot/** file; the 变更 badge and the applied card untouched. The PR diff is 4 files.",
"Rig: worktree /home/user/rig-ou12965/objectui-issue-12965 from origin/main 43efd078. Every test, typecheck and build ran through os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-ou12965, maxWorkers=2, workspace-concurrency=2. The lock interleaved the cloud#3022 run between my shards in arrival order. Zero label, claim or card-assignee writes. When done: node_modules removed, git worktree remove exit 0 (no --force), evidence worktree removed, my vite (5965) and backend (4965) stopped by recorded PID."
],
"tests": "New file: 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), VERDICT command-exit 0. Ablation via /home/user/objectstack/scripts/ablation-replace.mjs in WRAP mode, after the fix was committed as ac7edbc6: anchor {isBuildSurface && !onBoundPackageStudio ? ( replaced by {isBuildSurface ? (, anchor x1 → x0, blob 02504bbffb97 → 1f902a32a34a. Result: Tests 1 failed | 2 passed (3), the Studio case red, both controls green (expected direction: red). Restore: blob after restore 02504bbffb97 == HEAD, git diff HEAD empty, independent grep -c of the anchor = 1. No dist or build in the path: the test imports ../AiChatPage from source. Full @object-ui/app-shell suite at ac7edbc6: 12 shards through the lock (pnpm exec vitest run --maxWorkers=2 --shard=K/12 packages/app-shell/), every shard VERDICT command-exit 0. Total Test Files 1570 passed | 1 skipped (1571), which equals the 1571 tracked app-shell test files from git ls-files at the same head; Tests 14761 passed | 9 skipped (14770); 0 failed. @object-ui/i18n not touched.",
"gates": "Local, exit codes captured before any pipe, all at ac7edbc6 (the final commit): pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build → VERDICT command-exit 0. pnpm --filter @object-ui/app-shell type-check → VERDICT command-exit 0, 0 error TS; tsc -p tsconfig.test.json --listFilesOnly exit 0 and lists the new test (1 of 5721). eslint on AiChatPage.tsx plus the new test → exit 0, 0 errors; AiChatPage.tsx warnings 34 at base (43efd078, via --stdin) and 34 at head; new test 0. Exit 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-fences, check:doc-types, check:doc-example-ids, check:doc-example-readers, check:shell-escape-residue, changeset:check, node scripts/check-changeset-presence.mjs (1 released package, 1 changeset declared), node scripts/check-changeset-no-major.mjs. check:doc-json: exit 2 (PREREQUISITE, strict face unbuilt) before the closure build, exit 0 after it. NOT MEASURED: check:doc-snippets and check:doc-examples (exit 2, PREREQUISITE: a scoped build of 34 packages; the docs change is one sentence with no code fence; CI runs both). objectui has no dispatch-gates.mjs, so the list is the root check:* scripts whose scan roots read app-shell source, tests, .changeset/ or content/docs, the same derivation as PR #12964. CI check-runs on ac7edbc6 at report time (35 listed): completed — label success, Changeset Fixed Group Check success, Changeset Bump Policy success, dependabot skipped, Test (coverage) skipped, Test (coverage shard matrix) skipped; in_progress — Type Check, Lint, Repo Gates, Test (shard 1..16/16), Test (dist pins), Build and E2E, Build Docs, Bundle Analysis, Line Citation Gate, Governed Surface Queue Guard, Changeset Declaration, Changeset Claim Re-read, Changeset Overwrite Report, Live E2E (informational). CI convergence belongs to the seat.",
"evidence": "claude/issue-12965-evidence at df567c61 (sits on ac7edbc6, never merged), evidence/12965/.",
"mcp_calls": "0",
"api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft #12975) and POST /repos/objectstack-ai/objectui/issues/12975/assignees (os-zhuang); body read back 8209 bytes sent and stored, identical. (2) comment → POST /repos/objectstack-ai/objectui/issues/12965/comments (this os-dev-report). write-pace checked before each. Git pushes (not REST): the empty branch probe, ac7edbc6, the evidence branch. Zero label writes, no claim, no card assignee write.",
"deviations": [
"File surface: besides AiChatPage.tsx, the test beside it and the changeset, one sentence was added to the Studio Copilot Drafts row of content/docs/guide/console.md (AGENTS.md #2). Nothing else.",
"The key is the bound package's own Studio, not any /studio route. The two agree for every host today, since the copilot always passes its own package as editPackageId. The bound-package key reuses the one predicate the review door reads, instead of adding a second path test.",
"Suite sharding: 12 shards, not phase 5/6's 8. Their ledgered 8-shard runs held about 500 to 560 s each, too close to the 10-minute foreground cap once queue time is added. The shard and type-check runners ran detached (nohup), and I waited on them in the foreground with tail --pid. The counts equal the tracked files.",
"The PR was opened after the local gates, not at the first showable content: the PR body is written once and had to carry the suite result. The branch was pushed at each step.",
"The test-project listing and the base eslint ran in one locked call joined by ;, so its VERDICT is batch-last-exit; each part's exit was captured on its own (both 0).",
"Attribution: commits carry the model-free pair from AGENTS.md (Claude-Session plus Co-authored-by: Claude) and the PR body ends with the os-dev session-URL footer. The harness's model-named trailer and footer were not used, per their precedence rule.",
"The evidence branch sits on the fix commit ac7edbc6 (the tree under test), not on main."
],
"open_questions": [],
"out_of_scope_findings": [
"class: a · reach: public door, measured — the full-page AI build chat (/ai/build?package=com.example.showcase), the real build agent, one pending draft, 1280 x 900, zh-CN: ChatPane's PendingDraftsBar (the absolute bottom-20 float) overlaps the composer textarea by 670 x 51 px. All five first-line points hit pending-drafts-bar, so the placeholder 「问问数据,或让我改改这个应用…」 is hidden. Location: the PendingDraftsBar mount in ChatPane (packages/app-shell/src/console/ai/AiChatPage.tsx) over the ChatbotEnhanced composer. Not changed here: the card keeps the bar outside Studio as it is. · evidence: claude/issue-12965-evidence at df567c61, evidence/12965/before-fullpage-1280-draft-pending.png and before-fullpage-1280.json (the same reading after this PR). The console dock was NOT MEASURED. · home: within objectui#12724's scope (the full-page AI build chat and its composer, AiBuild artboard), so I propose it as #12724's sub-issue for the seat to file. · dedupe words: PendingDraftsBar composer full-page; pending drafts bar covers composer; bottom-20 floating bar; 尚未发布 输入 遮挡; AI build chat composer occluded"
]
}
ACCEPT → PR #12975 comment 6252095615 · repo:cloud#2 · session session_01Cbdek8SKSHxddGqTPZXdqX · 2026-10-18T16:09Z. Ready and auto-merge in this act (head ac7edbc6, every check green or an expected skip). Fixes #12965 closes this card on merge. The same bar over the full-page AI build chat's composer is objectui#12978.
LANDED · repo:cloud#2 · session session_01Cbdek8SKSHxddGqTPZXdqX · 2026-10-18T16:22Z · closed completed by Fixes #12965 · pm:dispatched removed, assignee released
reading
value
origin/main
32a171e5 (PR #12975), through the merge queue; the merge commit names no model
what landed
in the package's own Studio, ChatPane no longer draws the floating pending-drafts bar over the copilot's composer. There the Studio top bar's 变更 and 发布 and the applied card's 查看变更并发布 are the ways to review and publish. The full-page chat and the console dock keep the bar
records
ACCEPT on PR #129756252095615; this card's pointer 6252099746
The same bar over the full-page AI build chat's composer is #12978 (Part of #12724). It reaches cloud's tenants with the next objectui pin move.
Activity
objectstack-fleet commentedon Oct 18, 2026
Claim: PM loop round R4 (batch 3) · 2026-10-18T14:03Z · p2,
Part of #12725, on the maintainer's order in this seat's chat, 2026-10-18: 「objectui #12724 和 #12725 你也负责派发。」 · filed by this seat from the #12725 phase 6 dev report ·pm:queue→pm:dispatchedSession:
session_01Cbdek8SKSHxddGqTPZXdqXAccount:
os-zhuangBranch:
claude/issue-12965-studio-drafts-barWorktree:
objectui-issue-12965Domain:
domain:uiSeat:
repo:cloud#2(seat post objectstack-ai/objectstack#24145; on the maintainer's order above)File surface:
packages/app-shell/src/console/ai/AiChatPage.tsx(whereChatPanemountsPendingDraftsBar), tests beside it, a changeset · ⛔ notpackages/plugin-chatbot/**(stop on breach; explain in the report)Container & model:
S(one mount condition, one test and a control),mode:subagent,model: default judgment tier(the seat's per-card call)Clause-②: no
Responsibility:
objectui's own AiChatPage.tsx | the platform path: the top bar's 变更 badge and the applied card already offer review and publish in Studio | reach: every Studio copilot user with a pending draft and the real build agent (measured at 1010 and 1280 px)Thread-read: none
Serial constraints cleared: PR #12964 (#12725 phase 6,
AiChatPage.tsx) landed as43efd078. No dev in flight touches objectui.objectstack-fleet commentedon Oct 18, 2026
os-dev-report
{ "issue": 12965, "status": "done", "branch": "claude/issue-12965-studio-drafts-bar", "pr": "https://github.com/objectstack-ai/objectui/pull/12975", "session": "session_01Cbdek8SKSHxddGqTPZXdqX", "premise_still_valid": true, "summary": "Draft PR #12975 (head ac7edbc6, base main, assignee os-zhuang, first lines Fixes #12965 then Clause-②: no). In the package's own Studio, ChatPane no longer mounts PendingDraftsBar. The key is onBoundPackageStudio = studioChangesReviewTarget(boundPackageId, location).replace, the reading the applied card's review door (reviewDrafts, PR #12964) already makes, so there is no new prop anywhere. The full-page chat and the console dock keep the bar. Measured red first: with the real build agent and one pending draft, the bar overlapped the composer textarea by 267 x 51 px at 1010 and 327 x 51 px at 1280, with all five first-line points on the bar. After the fix there is no bar, the placeholder (208 px) shows whole in 273 and 333 px of content width, and the 变更 badge still reads 1. Diff: AiChatPage.tsx, one new test file, one changeset, one docs sentence.", "measured_chain": "StudioCopilotConversation (packages/app-shell/src/views/studio-design/StudioAiCopilot.tsx) mounts ChatPane with editPackageId = the Studio package, on /studio/:packageId/:tab only → ChatPane (packages/app-shell/src/console/ai/AiChatPage.tsx): isBuildSurface = agentRouteName(activeAgent) === 'build' → mounts PendingDraftsBar (console/ai/PendingDraftsBar.tsx, unchanged) in a pointer-events-none absolute bottom-20 wrapper, which lies over the ChatbotEnhanced composer's first line. Fix key: studioChangesReviewTarget (views/studio-design/studioChangesLink.ts, unchanged) answers replace: true exactly when the location is on that package's Studio pillar; boundPackageId = deriveBoundPackageId, where editPackageId wins.", "items": [ "§1 Measure first: done. Live, zh-CN, agent named build, one pending draft. Studio 1010: bar 727,766,994,820 over textarea 712,769,1009,833, overlap 267 x 51, first-line points on the composer 0 of 5. Studio 1280: overlap 327 x 51, 0 of 5. Screenshots before-studio-1010/1280-draft-pending.png.", "§1 Fix: done. One condition in ChatPane (isBuildSurface && !onBoundPackageStudio). No new prop on plugin-chatbot or anywhere else. Outside Studio the bar is unchanged: the full-page 1280 reading is the same before and after.", "§1 Green: done. Studio 1010 and 1280 after: bar not drawn, 5 of 5 first-line points on the composer, placeholder 208 px inside 273 / 333 px content width (whole), badge 1, applied card keeps 查看变更并发布 / 撤销.", "§2 Test and control: done. AiChatPage.studioDraftsBar-12965.test.tsx, 3 tests: Studio pillar with a pending draft draws no pending-drafts-bar (a sibling usePendingDrafts probe answers 1 first, so the absence is not read before the ledger answers); CONTROL full-page chat and CONTROL console-dock location still draw it.", "§2 Ablation: done, once, on the condition, fix committed first, red as expected, restore proven (see tests).", "§2 Screenshots: done. Evidence branch claude/issue-12965-evidence at df567c61, evidence/12965/: six PNGs (Studio 1010/1280 before and after, full-page 1280 before and after), six JSON readings, live-driver.cjs, README.", "§3 Stop rules held: PendingDraftsBar.tsx untouched; no packages/plugin-chatbot/** file; the 变更 badge and the applied card untouched. The PR diff is 4 files.", "Rig: worktree /home/user/rig-ou12965/objectui-issue-12965 from origin/main 43efd078. Every test, typecheck and build ran through os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-ou12965, maxWorkers=2, workspace-concurrency=2. The lock interleaved the cloud#3022 run between my shards in arrival order. Zero label, claim or card-assignee writes. When done: node_modules removed, git worktree remove exit 0 (no --force), evidence worktree removed, my vite (5965) and backend (4965) stopped by recorded PID." ], "tests": "New file: 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), VERDICT command-exit 0. Ablation via /home/user/objectstack/scripts/ablation-replace.mjs in WRAP mode, after the fix was committed as ac7edbc6: anchor {isBuildSurface && !onBoundPackageStudio ? ( replaced by {isBuildSurface ? (, anchor x1 → x0, blob 02504bbffb97 → 1f902a32a34a. Result: Tests 1 failed | 2 passed (3), the Studio case red, both controls green (expected direction: red). Restore: blob after restore 02504bbffb97 == HEAD, git diff HEAD empty, independent grep -c of the anchor = 1. No dist or build in the path: the test imports ../AiChatPage from source. Full @object-ui/app-shell suite at ac7edbc6: 12 shards through the lock (pnpm exec vitest run --maxWorkers=2 --shard=K/12 packages/app-shell/), every shard VERDICT command-exit 0. Total Test Files 1570 passed | 1 skipped (1571), which equals the 1571 tracked app-shell test files from git ls-files at the same head; Tests 14761 passed | 9 skipped (14770); 0 failed. @object-ui/i18n not touched.", "gates": "Local, exit codes captured before any pipe, all at ac7edbc6 (the final commit): pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build → VERDICT command-exit 0. pnpm --filter @object-ui/app-shell type-check → VERDICT command-exit 0, 0 error TS; tsc -p tsconfig.test.json --listFilesOnly exit 0 and lists the new test (1 of 5721). eslint on AiChatPage.tsx plus the new test → exit 0, 0 errors; AiChatPage.tsx warnings 34 at base (43efd078, via --stdin) and 34 at head; new test 0. Exit 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-fences, check:doc-types, check:doc-example-ids, check:doc-example-readers, check:shell-escape-residue, changeset:check, node scripts/check-changeset-presence.mjs (1 released package, 1 changeset declared), node scripts/check-changeset-no-major.mjs. check:doc-json: exit 2 (PREREQUISITE, strict face unbuilt) before the closure build, exit 0 after it. NOT MEASURED: check:doc-snippets and check:doc-examples (exit 2, PREREQUISITE: a scoped build of 34 packages; the docs change is one sentence with no code fence; CI runs both). objectui has no dispatch-gates.mjs, so the list is the root check:* scripts whose scan roots read app-shell source, tests, .changeset/ or content/docs, the same derivation as PR #12964. CI check-runs on ac7edbc6 at report time (35 listed): completed — label success, Changeset Fixed Group Check success, Changeset Bump Policy success, dependabot skipped, Test (coverage) skipped, Test (coverage shard matrix) skipped; in_progress — Type Check, Lint, Repo Gates, Test (shard 1..16/16), Test (dist pins), Build and E2E, Build Docs, Bundle Analysis, Line Citation Gate, Governed Surface Queue Guard, Changeset Declaration, Changeset Claim Re-read, Changeset Overwrite Report, Live E2E (informational). CI convergence belongs to the seat.", "evidence": "claude/issue-12965-evidence at df567c61 (sits on ac7edbc6, never merged), evidence/12965/.", "mcp_calls": "0", "api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft #12975) and POST /repos/objectstack-ai/objectui/issues/12975/assignees (os-zhuang); body read back 8209 bytes sent and stored, identical. (2) comment → POST /repos/objectstack-ai/objectui/issues/12965/comments (this os-dev-report). write-pace checked before each. Git pushes (not REST): the empty branch probe, ac7edbc6, the evidence branch. Zero label writes, no claim, no card assignee write.", "deviations": [ "File surface: besides AiChatPage.tsx, the test beside it and the changeset, one sentence was added to the Studio Copilot Drafts row of content/docs/guide/console.md (AGENTS.md #2). Nothing else.", "The key is the bound package's own Studio, not any /studio route. The two agree for every host today, since the copilot always passes its own package as editPackageId. The bound-package key reuses the one predicate the review door reads, instead of adding a second path test.", "Suite sharding: 12 shards, not phase 5/6's 8. Their ledgered 8-shard runs held about 500 to 560 s each, too close to the 10-minute foreground cap once queue time is added. The shard and type-check runners ran detached (nohup), and I waited on them in the foreground with tail --pid. The counts equal the tracked files.", "The PR was opened after the local gates, not at the first showable content: the PR body is written once and had to carry the suite result. The branch was pushed at each step.", "The test-project listing and the base eslint ran in one locked call joined by ;, so its VERDICT is batch-last-exit; each part's exit was captured on its own (both 0).", "Attribution: commits carry the model-free pair from AGENTS.md (Claude-Session plus Co-authored-by: Claude) and the PR body ends with the os-dev session-URL footer. The harness's model-named trailer and footer were not used, per their precedence rule.", "The evidence branch sits on the fix commit ac7edbc6 (the tree under test), not on main." ], "open_questions": [], "out_of_scope_findings": [ "class: a · reach: public door, measured — the full-page AI build chat (/ai/build?package=com.example.showcase), the real build agent, one pending draft, 1280 x 900, zh-CN: ChatPane's PendingDraftsBar (the absolute bottom-20 float) overlaps the composer textarea by 670 x 51 px. All five first-line points hit pending-drafts-bar, so the placeholder 「问问数据,或让我改改这个应用…」 is hidden. Location: the PendingDraftsBar mount in ChatPane (packages/app-shell/src/console/ai/AiChatPage.tsx) over the ChatbotEnhanced composer. Not changed here: the card keeps the bar outside Studio as it is. · evidence: claude/issue-12965-evidence at df567c61, evidence/12965/before-fullpage-1280-draft-pending.png and before-fullpage-1280.json (the same reading after this PR). The console dock was NOT MEASURED. · home: within objectui#12724's scope (the full-page AI build chat and its composer, AiBuild artboard), so I propose it as #12724's sub-issue for the seat to file. · dedupe words: PendingDraftsBar composer full-page; pending drafts bar covers composer; bottom-20 floating bar; 尚未发布 输入 遮挡; AI build chat composer occluded" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 18, 2026
ACCEPT → PR #12975 comment 6252095615 ·
repo:cloud#2· sessionsession_01Cbdek8SKSHxddGqTPZXdqX· 2026-10-18T16:09Z. Ready and auto-merge in this act (headac7edbc6, every check green or an expected skip).Fixes #12965closes this card on merge. The same bar over the full-page AI build chat's composer is objectui#12978.objectstack-fleet commentedon Oct 18, 2026
LANDED ·
repo:cloud#2· sessionsession_01Cbdek8SKSHxddGqTPZXdqX· 2026-10-18T16:22Z · closedcompletedbyFixes #12965·pm:dispatchedremoved, assignee releasedorigin/main32a171e5(PR #12975), through the merge queue; the merge commit names no modelChatPaneno longer draws the floating pending-drafts bar over the copilot's composer. There the Studio top bar's 变更 and 发布 and the applied card's 查看变更并发布 are the ways to review and publish. The full-page chat and the console dock keep the bar6252095615; this card's pointer6252099746The same bar over the full-page AI build chat's composer is #12978 (
Part of #12724). It reaches cloud's tenants with the next objectui pin move.