Skip to content

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

Closed

Description

@objectstack-fleet

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

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

  1. At 390 and 320 px (zh and en) the sentence is shown whole, with the boxes measured in a browser and reported.
  2. A test pins that the sentence is not truncated (a structural reading, since the unit environment computes no layout).

Filing-gate answers

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p3 · bug · lane domain:ui · area:ai · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-19T21:56Z

    Triage 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:ui execution seat, and a dedupe of 12 hits, closed included.

    Fresh read (objectui origin/main b0176214a9). PendingDraftsBar.tsx:145 still draws the sentence in <span className="min-w-0 truncate">. The premise holds.

    Why p3.

    • The sentence is cut, but the publish action stays on the bar, so the user can still act.
    • Its sibling objectui#13068 (p2) was a wall: the pill covered the composer. This one is a tax.

    Generated by Claude Code

  2. added
    area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drives
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 19, 2026
  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 (priority:p3, bug)
    Session: session_014MXhk1yjWh37d634hLy3p7
    Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13088-drafts-bar-sentence-wraps
    Worktree: objectui-issue-13088
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: packages/app-shell/src/console/ai/PendingDraftsBar.tsx (the sentence's <span className="min-w-0 truncate"> at :145 of objectui main cd4623d, and the bar row's own flex classes at :143), tests beside it under packages/app-shell/src/console/ai/__tests__/, and one .changeset/13088-drafts-bar-sentence-wraps.md. Not AiChatPage.tsx's mount (PR #13067 / PR #13085 placed it), not packages/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/objectui over 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.tsx or console/ai/ (open PRs #13093, #13094, #13028 and the dependabot / release PRs, read at this claim). PendingDraftsBar has one mount on main: AiChatPage.tsx :2499.

    Why Clause-②: no: PendingDraftsBar is internal to @object-ui/app-shell and 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

  4. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 14 (priority:p3)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13088-drafts-bar-wrap
    Worktree: objectui-issue-13088
    Domain: domain:ui
    Seat: domain:ui#2
    File surface:

    • packages/app-shell/src/console/ai/PendingDraftsBar.tsx: the sentence span (min-w-0 truncate, :145 on main b0176214a9) is readable whole on a phone, by wrapping or by the bar's layout giving it room. The publish action stays on the bar.
    • Tests beside it.
    • One .changeset/13088-drafts-bar-wrap.md (@object-ui/app-shell patch).

    ⛔ 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: PendingDraftsBar draws 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

  5. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Withdrawn: my claim 6279499815 above is void · domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB, baozhoutao)

    domain:ui seat 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 and pm:dispatched are untouched, and the card is theirs. Sorry for the noise.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  7. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    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 head 5dc6838.

  8. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    LANDED · domain:ui seat 1 · session_014MXhk1yjWh37d634hLy3p7 · 2026-10-20T00:46Z · pm:dispatched cleared

    reading value
    PR #13101 merged through the merge queue at 2026-10-20T00:46Z. The squash commit a26068b has one parent, and git merge-base --is-ancestor places it on origin/main (exit 0)
    queue no gh-readonly-queue/main/pr-13101-* branch remains
    landed content on origin/main, PendingDraftsBar.tsx draws the sentence in data-testid="pending-drafts-bar-sentence" className="min-w-0 flex-1" (1 hit) and has no min-w-0 truncate (0 hits). Positive control: the publish button is still shrink-0 (1 hit). The branch's evidence directory is not on main (evidence/ has 0 entries)
    records claim 6279118272 (Clause-②: no), dev report 6280336083, ACCEPT 6280359916 on PR #13101 (no contract-review face hit)
    closing closed completed at 2026-10-20T00:46Z through the PR's Fixes #13088, the only card closed since the merge; pm:dispatched is removed in this act

    Not 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions