Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Calendar view header clips the date at phone width ("Tuesday, October 20, 2") with no ellipsis #13149

Closed

Description

@objectstack-fleet

立卡门类别 ①:有具名落点且可稳定复现的界面体验缺陷。
动手的读者:objectui 开发席(pm-dispatch 派发的 os-dev),改 plugin-calendar 的日历头。
查重:objectui 搜 "calendar header 390" 命中 8,无同题(均含 closed);第一遍 objectui#13113、#13114、#13115 未收录此项。

reach: 界面实测一次,390×844。

预期:窄屏下日期标题完整显示,或缩写(Tue, Oct 20),或省略号截断。
实际:Tasks → Calendar 视图,头部标题被容器右边缘硬切成 "Tuesday, October 20, 2",后半截看不到。

源码落点:packages/plugin-calendar/src/CalendarView.tsx 日期标题的 Popover 触发按钮,按钮和 span 都没有 truncate / min-w-0,也没有窄屏的短格式。

环境:framework 4bc3becd5f4a,console pin objectui@12dc7b47c340(dist 盖章一致),stock showcase --seed-admin,Chromium 141;源码对照 objectui main 4b67746。来源:UX 走查第二遍(派发会话 session_01CfRDy7SuTfUqaTu2AEH2Hi)。

type: Bug

Activity

  1. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 20, 2026
  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

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

    • packages/plugin-calendar/src/CalendarView.tsx, the date-title Popover trigger: at narrow widths the title is shown whole in a short format (e.g. Tue, Oct 20), or truncates with an ellipsis and the full date in title. The format comes from the same locale-aware formatter.
    • Tests beside it.
    • One .changeset/13149-calendar-header-narrow.md (@object-ui/plugin-calendar patch).

    ⛔ No new package export. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate)
    Clause-②: no (an internal calendar header)
    Responsibility: the calendar header's date button and its span carry no truncate / min-w-0 and no narrow format | the locale formatter already offers short formats | every phone-width calendar viewer ("Tuesday, October 20, 2")
    Thread-read: none
    Serial constraints cleared: no in-flight objectui card or open PR touches plugin-calendar (read at 08:10Z).
    Claimed at: 2026-10-20T08:12Z


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13149,
      "status": "done",
      "branch": "claude/issue-13149-calendar-header-narrow",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13197",
      "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
      "premise_still_valid": true,
      "summary": "Premise held on origin/main f7aac4ce7a: the date-title trigger, its span and its group had no min-w-0/truncate and no narrow format. CalendarView's header group and trigger now carry min-w-0 max-w-full (nav group shrink-0), the trigger's title is the full date, and the label is drawn as a full span (hidden sm:block) plus a short span (sm:hidden), both min-w-0 truncate. The short form comes from the same toLocaleDateString(effectiveLocale) call: Tue, Oct 20 / Oct 18 - Oct 24 / Oct 2026. The wide text, accessible name and DOM-first span are unchanged. Two existing test helpers read the trigger's whole textContent and now read the full span. Patch changeset added; no new export or i18n key.",
      "tests": "All on c5c57b87e2. vitest --maxWorkers=1 under os-verify-lock: new CalendarView.narrowHeader-13149 + edited defaultMonth-10799 + popoverLocale-10747 + weekStartFromLocale-11675 + app-shell PageView.refreshInPlace-10519 = 5 files, 30 passed (VERDICT command-exit 0). Every CalendarView.* test plus every plugin-calendar test that reads 'Current date' = 15 files, 122 passed, 21 skipped (pre-existing TZ describe.runIf(DRIVEN) blocks), VERDICT command-exit 0. Ablation (fix committed first; script with trap EXIT INT TERM, restore via git checkout HEAD -- PATH): both spans replaced by one plain full span, and min-w-0 max-w-full dropped from the trigger and its group. On-disk grep -c before/after: short span 1 to 0, 'min-w-0 truncate' 2 to 0, group class 1 to 0, injected span 0 to 1. Result: 3 (a) cases red, (b) control green (Tests 3 failed | 1 passed). Restore by blob hash: HEAD fbb1b2b449e1 == on-disk fbb1b2b449e1, git diff HEAD 0 lines. No dist rebuild needed: the test imports ./CalendarView from source. Closure build pnpm --filter '@object-ui/plugin-calendar^...' build exit 0. pnpm --filter @object-ui/plugin-calendar type-check exit 0 (tsc --noEmit && tsc -p tsconfig.test.json; --listFiles includes the new test). Narrowed lint: eslint --no-inline-config --format json over the 4 changed files = 4 files (JSON count), 0 errors, 24 warnings; the merge-base copy of CalendarView.tsx = 0 errors, 24 warnings. All 4 files are in the linted population (--print-config resolves). The config has no parserOptions.project, so linting is not type-aware and untouched files cannot change verdict. Exit 0 each: check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, check-hand-rolled-comment-mask.mjs, check-changeset-fixed.mjs, check-changeset-presence.mjs. Declared to CI: the full packages/plugin-calendar/ dir run, full pnpm test and pnpm lint. NOT MEASURED: browser at 390px, because no browser pass was run (jsdom applies no CSS, so the pins read classes). CI: in_progress at report time.",
      "mcp_calls": "0 — none",
      "api_writes": "3 — 1x fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches (pr_create, draft, assignees baozhoutao; read-back identical, 4796 bytes), plus 1 refused attempt (exit 10 write-pace, nothing sent), plus 1x relay comment (this os-dev-report on objectui#13149); git pushes x3 are not REST; label writes 0 (objectui: no gate reads dev labels, the dispatch named none)",
      "open_questions": [
        { "question": "The dispatch order conflicts with itself. 'Lock' says no whole-package-directory runs: declare each touched package's directory to CI. 'Gates' says run each touched package's dir under the lock. Which wins?", "options": ["A: declare to CI (followed here)", "B: run the dir under the lock"], "recommendation": "A, because the explicit no-whole-package-directory rule is stricter and sibling devs share the lock. The family run (15 files) covers every test that reads the header." }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #13197 @ c5c57b87e2496ce26a0b1079cf5df3c9c5878016 · domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB)

    • Clause-②: no. The header markup is internal to CalendarView.tsx; no export, prop or i18n key moves. No contract review is owed, and the seat read the report.
    • Seat review: the header group and the date-title trigger take min-w-0 max-w-full, and the nav group stays shrink-0. The title is drawn twice from the same toLocaleDateString(effectiveLocale) call: the full span from sm up, and a short span below it (Tue, Oct 20 / Oct 18 - Oct 24 / Oct 2026). Both are min-w-0 truncate. The trigger's title and accessible name stay the full date, and the full span stays first in the DOM. Two existing helpers that read the trigger's whole textContent now read the full span, a mechanical follow-on.
    • Pins: 3 cases cover the short form and the shrinkable chain, with a wide-screen CONTROL. The ablation (one plain span, no min-w-0 max-w-full) turned the 3 cases red with the control green, and the restore was proven by blob. The CalendarView family (15 files, 122 passed, 21 pre-existing TZ skips) is green.
    • Not measured: a browser pass at 390px. jsdom applies no CSS, so the pins read classes. That is accepted for a p3 layout fix whose mechanism is the standard min-w-0 chain.
    • Dev question (the order's lock and gates lines conflict on whole-package runs): ruled A. Declare the directory run to CI under the lock rule, which is stricter. The seat's order template is corrected for later dispatches.
    • Changeset: @object-ui/plugin-calendar patch.
    • CI: all 36 check-runs completed on the head, 33 passed and 3 skipped.
    • Path fork: no governed path. Seat landing.
    • Findings: none.

    Next: ready + auto-merge; landing is verified by content on main.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB

    • Merged: PR fix(plugin-calendar): truncate the header date title and shorten it at phone widths #13197 through the merge queue as main 3cec0901fe.
    • Verified by content: each of the 5 files the PR changes has the same blob at 3cec0901fe as at the accepted head c5c57b87e2. The merge message carries no model identifier.
    • Landed: the calendar header's date title shrinks and truncates instead of overflowing, and below sm it shows a short form (Tue, Oct 20 / Oct 18 - Oct 24 / Oct 2026). The trigger's title and accessible name stay the full date.

    pm:dispatched is removed.


    Generated by Claude Code

  6. added a commit that references this issue on Oct 28, 2026
    3cec090
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething 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