Skip to content

[Mobile] The group-chat surfaces are unadapted below 640 px: message rows, composer, attachments and approval cards #1147

Closed

Description

@Birfy

Owner: Dev3

The in-repo half of the mobile decision in #647 (PWA first). #647 keeps the half this repository cannot do — the manifest and the icon pair live in the DSH web-frontend package — and stays needs-human; this issue is the part that is ours.

Why this is a real gap and not polish

plugins/social/client.js has exactly one @media block, line :258 (.fs-hold Approve/Reject at 40px). Every other surface this plugin draws — group message rows, the composer and its send button, attachment lines, approval cards — is laid out on desktop widths and simply shrinks below 640 px. core/src/client/mobile.js (MOBILE_MAX_WIDTH = 640, :8) covers core's own surfaces; it does not reach the plugin's.

Scope (one plugin, three paths)

At 375 px and at 640 px, without horizontal scrolling of the message column:

  1. Group message rows — a long unbroken run (a URL, a code block, a Bot's tool output) wraps inside the bubble; the sender label and timestamp do not collide with the text.
  2. Composer and send — the input keeps its usable width with the send button present, both touch targets at least 40 px, and the composer stays above the safe-area inset rather than behind it.
  3. Attachments and approval cards — attachment lines truncate with the file name visible, the card's action row wraps instead of overflowing, and each action is a 40 px+ target (this is the one path :258 already does for held replies — keep it and extend the shape, do not restyle it away).

Acceptance

  1. Each of the three paths gets at least one assertion, not only new CSS. A CSS string assertion in plugins/social/test/ is acceptable if that is what the surface allows — say so in the PR and point at the test. Deleting the new rule must turn exactly that assertion red.
  2. plugins/social stays green with 0 skipped, and core/ is not touched.
  3. No change to what any of these surfaces says or when it appears — layout only.
  4. If a rule cannot be verified in this repo (see the safe-area note below), it does not go in.

Hard constraints

  • Do not touch the shell or the DSH package. rel=manifest, display, the icons and viewport-fit=cover are DSH's (AGENTS.md hard rule 1). Overriding the shell's <link rel=manifest> from a plugin is the same rule from the other side.
  • env(safe-area-inset-bottom) is 0 on this stack today. The shipped index.html has width=device-width, initial-scale=1 and no viewport-fit=cover, so core/src/client/mobile.js:19's inset is inert and any new inset-based rule for this plugin would be unverifiable. Write the composer rule so it is correct at inset 0 now and does not depend on the inset; the shell half is tracked in [Mobile] Android 客户端支持 #647.
  • Reviewer: in the PR must not be Dev3.

Activity

  1. added
    enhancementNew feature or request
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    area:uiWeb/desktop UI and copy
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 25, 2026
  2. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    Taking it: Owner: Dev3

    Branch: dev3/feat/1147-group-phone, from main 0978e62d. PR: #1150 @ 7d0e1542.

    Scope as written: one phone block in plugins/social/client.js (extending #362's, not a second one), 40 px targets on the surfaces this panel draws, overflow-wrap:anywhere on a held reply's long run, and no env(safe-area-inset-*) rule — the inset is 0 on this stack because the shipped shell has no viewport-fit=cover, and that half is #647 (needs-human). Each of the three paths has an assertion in plugins/social/test/group-phone.test.js; they are CSS-string assertions, which the issue allows for this package.

    core/ untouched, so no ds-bot patch regeneration was involved.

  3. self-assigned this
    on Oct 25, 2026
  4. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    done — merged as c1f2edc6 (squash of 20608864, 2026-10-25T10:39:02Z), which is the current main.

    Four closing items, checked on main:

    • #1147 and #1149 both closed/completed by this merge (the PR carried Fixes #1147 and Fixes #1149 on their own lines).
    • changelog.d/1147-group-phone-tap-targets.changed.md is on main.
    • The social.md line is on main, narrowed to what the code does: 40 px buttons and inputs, row controls at least 32 px, the block is the last one in the stylesheet, and the dock's env(safe-area-inset-bottom,0px) reads as a plain 6 px until the shell gains viewport-fit=cover ([Mobile] Android 客户端支持 #647).
    • The rules themselves: one @media (max-width:640px) block, at the end of the stylesheet, extending Mobile: PWA first, then native — approvals and reminders on the phone #362's held-reply pair rather than replacing it.

    agent-working removed here. #647 stays needs-human for the DSH half (192/512 px icon pair, viewport-fit=cover) — nothing in this merge claims the notch is handled.

  5. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:uiWeb/desktop UI and copyenhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions