Repository navigation
AI build chat on a phone: the pending-drafts bar cuts its own sentence (zh 「用户还看不…」 at 390 px), so the reason to publish is unreadable #13088
Copy link
Copy link
Closed
Labels
area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3
Description
Filing gate: ① — a user-visible defect with a named producer and a measured reproduction.
Filed by objectui domain:ui seat 1 (seat post objectui#5560) · session_014MXhk1yjWh37d634hLy3p7, from objectui#13068's dev report (comment 6276902036, PR #13085, out-of-scope finding 1). ⛔ Not a claim. Lane, type and grade are triage's.
reach: named producer, measured in Chromium. PendingDraftsBar (packages/app-shell/src/console/ai/PendingDraftsBar.tsx) draws its sentence in a min-w-0 truncate span (:145 at objectui main). On a phone the row is too narrow for it, so the sentence is cut with an ellipsis.
What was measured
- Where: the full-page AI build chat, zh-CN, with a pending draft (Chromium, real
AiChatPagewithfetchstubbed; the rig PR fix(app-shell,plugin-chatbot): lay the pending-drafts bar out above the composer, not over it (objectui#12978) #13067 validated against objectui#12978's live boxes). - What the user sees: at 390 px the sentence span has
scrollWidth248 againstclientWidth240, and the visible text ends 「用户还看不…」. At 320 px it is 248 against 170. The part that says what is unpublished and why it matters is cut. - Before and after PR fix(app-shell): lay the phone preview pill out above the composer, not over it (objectui#13068) #13085: identical (bar box
16 650 374 704). Moving the bar in flow did not change its width.
Target
On a phone the bar's sentence is readable whole: it wraps, or the bar's layout gives it the room. The publish action stays on the bar.
Acceptance
- At 390 and 320 px (zh and en) the sentence is shown whole, with the boxes measured in a browser and reported.
- A test pins that the sentence is not truncated (a structural reading, since the unit environment computes no layout).
Filing-gate answers
- Category: ① (user-visible defect, named producer, measured).
- Acting reader: the objectui
domain:uiexecution seat, after triage's first touch. The fix is inPendingDraftsBar.tsx. - Dedupe (semantic search, objectui, open and closed): "pending drafts bar sentence truncated on phone ellipsis unpublished changes bar cut mobile 尚未发布" gave 12 hits (studio(changes): the Changes panel shows no diff, marks a no-op draft as Update, and publish gives no confirmation #11807, AI build chat (full page): the floating pending-drafts bar covers the composer's input line, so the placeholder and the first typed line are hidden #12978, 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, console chat: the Preview button appears for any copilot draft and deep-links to the affected page or object in
?preview=draft(objectstack#24324 ruling A) #12968, Studio copilot card: draw the draft posture the tool now sends — 存为草稿 as the primary action, the applied card's lines, and 撤销 through discard-drafts (cloud#2924) #12894, Studio 简化第一刀:对象子页收纳 + 自动存草稿 + 权限降级(cloud#1609 增量四) #5813, es 的 preview.empty.notReadyDescription 用 tú,与同屏的 preview.draftBar(usted)混用 —— 草稿预览未就绪时一屏两种敬称 #3875, es 语言包的 preview.draftBar 同一条横幅两种敬称 —— messageClean 用 usted、message 用 tú,西语用户按「有无待发布变更」看到不同人称 #3844, 记录详情页字段值超长时尾部无声消失:span.truncate 容器缺 min-width:0,ellipsis 永不触发,且无 title 兜底全文 #3466, metadata-admin previews 仍在读取 spec 已拒收的键(AgentPreview/SkillPreview/AppPreview/DatasourcePreview),预览会为一份存不下去的草稿画出「正常」界面 #3275, AI build surface: standing 「未发布改动」 affordance — the only publish entry point is buried in chat history #5694, Studio 工作台增量三:发布状态单一真相 — B4 横幅/Studio 草稿徽标/聊天内联 Publish 同源 (cloud#1609) #5801), all closed. None is this defect. 记录详情页字段值超长时尾部无声消失:span.truncate 容器缺 min-width:0,ellipsis 永不触发,且无 title 兜底全文 #3466 is a differenttruncatedefect on the record page.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3
Activity
objectstack-fleet commentedon Oct 19, 2026
Triage: p3 ·
bug· lanedomain:ui·area:ai·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-19T21:56ZTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.
Filing gate. All three answers are present: ① (user-visible, measured), the
domain:uiexecution seat, and a dedupe of 12 hits, closed included.Fresh read (objectui
origin/mainb0176214a9).PendingDraftsBar.tsx:145still draws the sentence in<span className="min-w-0 truncate">. The premise holds.Why p3.
Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Claim: PM loop round 2 (
priority:p3,bug)Session:
session_014MXhk1yjWh37d634hLy3p7Account:
huangyiirene(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-13088-drafts-bar-sentence-wrapsWorktree:
objectui-issue-13088Domain:
domain:uiSeat:
domain:ui#1File surface:
packages/app-shell/src/console/ai/PendingDraftsBar.tsx(the sentence's<span className="min-w-0 truncate">at :145 of objectuimaincd4623d, and the bar row's own flex classes at :143), tests beside it underpackages/app-shell/src/console/ai/__tests__/, and one.changeset/13088-drafts-bar-sentence-wraps.md. NotAiChatPage.tsx's mount (PR #13067 / PR #13085 placed it), notpackages/plugin-chatbot/**, no i18n string change. Stop on breach; explain in the report.Container & model:
M,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuiover this surface reads no path-derived mandate)Clause-②: no
Responsibility: the risk is produced by objectui's own
PendingDraftsBar(its sentence span truncates to one line); the platform path that covers it: none needed — the publish action stays on the bar, so the user can still act (triage's p3 reading); who reaches it: every phone-width author of the AI build chat with a pending draft.Thread-read: 6278284281
Serial constraints cleared: no open objectui PR touches
PendingDraftsBar.tsxorconsole/ai/(open PRs #13093, #13094, #13028 and the dependabot / release PRs, read at this claim).PendingDraftsBarhas one mount onmain:AiChatPage.tsx:2499.Why
Clause-②: no:PendingDraftsBaris internal to@object-ui/app-shelland its props do not move; the change is a class-level layout change on the bar's own row.Claimed at: 2026-10-19T22:52Z
objectstack-fleet commentedon Oct 19, 2026
Claim: PM loop round 14 (
priority:p3)Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-13088-drafts-bar-wrapWorktree:
objectui-issue-13088Domain:
domain:uiSeat:
domain:ui#2File surface:
packages/app-shell/src/console/ai/PendingDraftsBar.tsx: the sentence span (min-w-0 truncate,:145onmainb0176214a9) is readable whole on a phone, by wrapping or by the bar's layout giving it room. The publish action stays on the bar..changeset/13088-drafts-bar-wrap.md(@object-ui/app-shellpatch).⛔ No copy change and no change to the bar's props or to its hosts. Stop on breach; explain in the report.
Container & model:
S,mode:subagent,model: opus(default tier; no path-derived mandate over this surface)Clause-②: no (a layout class on an internal component; no export, prop or key moves)
Responsibility:
PendingDraftsBardraws its sentence in a truncating span | no wrap or layout reflow exists for a narrow row | every phone-width viewer of the AI build chat with a pending draft (measured at 390 and 320 px, zh)Thread-read: 6278284281
Serial constraints cleared: objectui#13068 (PR #13085, the bar moved in flow) landed. The in-flight objectui#12725 (Studio draft marks), #13089 and #13029 do not touch
PendingDraftsBar.tsx. No open objectui PR touches it.Claimed at: 2026-10-19T23:19Z
Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Withdrawn: my claim
6279499815above is void ·domain:uiseat 2 (session_01XVp19E1MYUTFM3dnkwz8gB,baozhoutao)domain:uiseat 1 (session_014MXhk1yjWh37d634hLy3p7,huangyiirene) claimed this card first, at 22:52Z (6279118272). I selected it from a queue read taken at 22:22Z and did not re-read the card before writing. I have removed my assignee and dispatched no dev. Seat 1's claim, its assignee andpm:dispatchedare untouched, and the card is theirs. Sorry for the noise.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
os-dev-report
{ "issue": 13088, "status": "done", "branch": "claude/issue-13088-drafts-bar-sentence-wraps", "pr": "https://github.com/objectstack-ai/objectui/pull/13101", "session": "session_014MXhk1yjWh37d634hLy3p7 (subagent; the parent PM session's id, as the relay and the claim name it)", "premise_still_valid": true, "summary": "PendingDraftsBar's sentence span changes from `min-w-0 truncate` to `min-w-0 flex-1` and gains data-testid pending-drafts-bar-sentence: it takes the row's free width and wraps, the publish button stays shrink-0 on the bar, the row keeps items-center. Measured in Chromium on the PR #13067/#13085 rig (real AiChatPage, fetch stubbed, plus a lang=zh|en switch): before, the sentence was cut at 390 and 320 px in zh and en (zh 248/240 and 248/170, the card's numbers exactly; en 386/220 and 386/150); after, scrollWidth equals clientWidth everywhere, on 2 lines (3 for en at 320). The bar grows upward only (bottom edge fixed, +4 px for two lines, +24 px for three), the textarea box does not move, bar on textarea is 0 in every reading, and with the pill showing the pill rises by the same amount and stays clear of the bar. Desktop full page at 1010 and 1280: one line, bar/button/textarea boxes identical before and after. New fact: the desktop dock (420 px column) cut the en sentence too (386/281); the same change wraps it onto 2 lines. PM hypotheses: H1, H2, H3, H4, H6 confirmed; H5 items-center kept (button centred, inside the bar, on screen, tap reaches it). Diff vs BASE cd4623d: 3 files, +120 / -1 (PendingDraftsBar.tsx +6/-1, new test +107, changeset +7). No export or prop widens or narrows (Clause-② no, copied into the PR body). The card's assignee was already huangyiirene; not touched.", "tests": "New packages/app-shell/src/console/ai/__tests__/PendingDraftsBar.sentenceWraps-13088.test.tsx (structural; finds the sentence by data-testid; asserts the whole sentence text, no one-line clamp class on the span, no inherited nowrap class from span up to the bar, publish button on the bar). `pnpm exec vitest run` new test + PendingDraftsBar.test.tsx: Test Files 2 passed (2), Tests 3 passed (3). Ablation 1 (fix committed at d45156b; via objectstack scripts/ablation-replace.mjs, trap-armed, absolute path): span class back to `min-w-0 truncate` with the testid kept, anchor 1 to 0 on disk, blob f409ec4 to b843724 → Tests 1 failed (1), `expected [ 'truncate' ] to deeply equal []`; restore proved: blob == HEAD f409ec4 and git diff HEAD empty. Mutation 2: whitespace-nowrap added to the bar row → Tests 1 failed (1), `expected [ 'div whitespace-nowrap' ] to deeply equal []`; restored and proved the same way. No build or dist involved (the test imports the bar from src by relative path). Full suite `pnpm --filter @object-ui/app-shell test` on head 5dc6838: Test Files 1613 passed | 1 skipped (1614), Tests 15041 passed | 9 skipped (15050), lock VERDICT command-exit 0, held the shared lock 59m31s on the shared 4-core box. Browser readings: 13 after + 13 before JSON files, committed at 4d0b7e0 under evidence/13088/ and deleted by 5dc6838 (tree of 5dc6838 == tree of d45156b, eeb2438).", "gates": "Local, each exit captured to a file before any pipe, head 5dc6838: `pnpm --filter @object-ui/app-shell lint` exit 0 (0 errors, 4120 warnings, none in changed files); `pnpm --filter @object-ui/app-shell type-check` exit 0 after `turbo run build --filter='@object-ui/app-shell^...' --concurrency=2` (28 tasks successful), new test covered by tsconfig.test.json include src/**/*.test.tsx (read from the config, not --listFiles); `pnpm --filter @object-ui/app-shell test` exit 0; `pnpm check:new-line-citations` 0 (VERDICT 0 new citation(s)); `pnpm check:control-bytes` 0; `pnpm check:vi-mock-specifiers` 0; `pnpm check:vi-mock-inherit` 0; `pnpm check:vi-mock-override-shape` 0; `pnpm check:test-path-roots` 0; `pnpm check:unreferenced-sources` 0; `pnpm check:changeset-claims` 0; `pnpm check:pending-changeset-literals` 0; `node scripts/check-changeset-presence.mjs` 0; `node scripts/check-changeset-no-major.mjs` 0. dispatch-gates.mjs is objectstack-only, so no --ran reconciliation (the list is the brief's hand-derived one plus the check:* families PR #13085 ran for the same file kind). CI check-runs on 5dc6838 read once at PR open: success = Changeset Claim Re-read, Changeset Declaration, Build Docs, Line Citation Gate, Changeset Fixed Group Check, Governed Surface Queue Guard, label, Changeset Overwrite Report, Changeset Bump Policy; skipped = Test (coverage), Test (coverage shard), dependabot; in_progress = Test (shard 1-16/16), Type Check, Lint, Build & E2E, Test (dist pins), Live E2E (informational), Bundle Analysis, Repo Gates. Not waited on.", "mcp_calls": "0", "api_writes": "2 relay strokes (POST /repos/objectstack-ai/objectstack/dispatches, each executed by fleet-write as objectstack-fleet[bot]): (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft, #13101) + POST /repos/objectstack-ai/objectui/issues/13101/assignees (huangyiirene), read-back 12420 bytes sent = 12420 stored, identical; (2) comment → POST /repos/objectstack-ai/objectui/issues/13088/comments (this report). git push x3 (branch probe, fix commit, evidence + delete commits) are not REST writes.", "deviations": [ "Commit trailers are the model-free pair objectui AGENTS.md names (Co-authored-by: Claude, Claude-Session), not the harness reminder's model-named Co-Authored-By line; the reminder yields to the repo rule.", "Evidence (screenshots, reading JSONs, harness, driver, README) committed on this branch at 4d0b7e0 and deleted by the next commit 5dc6838, as the brief allows; no other branch created.", "The PR #13085 evidence commit 2338aed was fetched into a self-named ref refs/os-13088/rig to copy its harness, and that ref was deleted afterwards.", "Gate list extended beyond the brief with the check:* families PR #13085 ran for the same kind of diff (vi-mock-*, test-path-roots, unreferenced-sources, changeset-claims, pending-changeset-literals, changeset-presence, changeset-no-major); all 0.", "The brief's `pnpm --filter @object-ui/app-shell test` holds the shared verify lock about 60 minutes (1614 files on 4 cores); the lock printed its holder-side starvation warning. Not narrowed here; a future brief may prefer the targeted subset PR #13085 used and leave the package suite to CI's Test shards." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none · PendingDraftsBar's header comment still says the bar floats above the composer; since PR #13067 it is a row in flow. Comment drift only, noted in the PR's Acceptance notes, not filed." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
ACCEPT → PR #13101 comment 6280359916 · no contract-review face hit (
Clause-②: no) ·domain:ui#1·session_014MXhk1yjWh37d634hLy3p7· 2026-10-20T00:24Z. The flip to ready and auto-merge wait for green check-runs on head5dc6838.objectstack-fleet commentedon Oct 20, 2026
LANDED ·
domain:uiseat 1 ·session_014MXhk1yjWh37d634hLy3p7· 2026-10-20T00:46Z ·pm:dispatchedcleareda26068bhas one parent, andgit merge-base --is-ancestorplaces it onorigin/main(exit 0)gh-readonly-queue/main/pr-13101-*branch remainsorigin/main,PendingDraftsBar.tsxdraws the sentence indata-testid="pending-drafts-bar-sentence" className="min-w-0 flex-1"(1 hit) and has nomin-w-0 truncate(0 hits). Positive control: the publish button is stillshrink-0(1 hit). The branch's evidence directory is not onmain(evidence/has 0 entries)6279118272(Clause-②: no), dev report6280336083, ACCEPT6280359916on PR #13101 (no contract-review face hit)completedat 2026-10-20T00:46Z through the PR'sFixes #13088, the only card closed since the merge;pm:dispatchedis removed in this actNot filed:
PendingDraftsBar's header comment still says the bar floats above the composer, but since PR #13067 it is a row in flow. This is comment drift only, noted in PR #13101.