Skip to content

Fix clipped status-only conversation labels - #6778

Merged
loopx-agent merged 2 commits into
mainfrom
codex/chat-readonly-mode-layout-20261018
Oct 18, 2026
Merged

loopx-agent merged 2 commits into
mainfrom
codex/chat-readonly-mode-layout-20261018

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

The active “Status only” label used the same fixed 36px grid as icon-only controls. Its text wrapped vertically beyond the button on desktop and phones. It now fits beside the icon on one line, without another interaction.

Author Declaration

Written by: model_agent · OpenAI Codex, GPT-6 family; exact model variant and reasoning effort unreported.

Implemented against

Specification: LoopX design contract at the tested base.

Criterion Disposition Implementation Evidence
Earn The User’s Attention implemented Active mode remains directly readable Packaged before/after viewports below
Typography / Responsive Behavior implemented Existing body tokens; content-sized active label Chinese 1512px/390px; English 390px
Accessibility implemented Existing button, label and aria-pressed retained Keyboard focus/Enter and refresh readback

Self-check: reviewed the complete six-path diff, existing header switch handler and responsive rules. Two local CSS rules reuse the existing state and prevent icon shrinkage. A new component, setting or state owner would add unnecessary structure here.

Scope And Continuation

Complete within this label-layout scope. The inactive icon control and original executor-selection handler are retained. Broader conversation, native IME, shared-session and installed-App acceptance remains with the existing work; this repair does not certify it.

Validation

Tested source matches committed CSS blob dda47243dafaa3990e20c30538d6335ffad730d7 at 5a6a5ad5c046553e63082b3543a6878b44369025.

  • Packaged Chat build/typecheck and source verification passed; typography and existing workspace contracts passed.
  • Actual production ChatHTTPServer, isolated empty workspace and synthetic File-authority Goal: Chinese desktop/phone and English phone, refresh, keyboard focus/Enter, no label or document overflow. No sessions or Turns were created. Browser preview only; no native App installation or model execution.
  • Premerge: 14 selected checks and four direct checks passed. Its docs/public-boundary selection is supplemented by the actual CSS/browser checks above.
  • Required validation remains non-passing: root-module tests report 1 failed, 5 passed, with 146 modules against the pinned 145 limit (workflow_skill_install.py). No Python inputs change here. The existing repair is tracked in fix(packaging): restore top-level module budget #6768; the exact-scope quality receipt remains failed, without a baseline waiver. No merge is requested as already qualified.
  • Public text and PNG metadata scans passed; all five images were visually inspected.

Additional native qualification at the unchanged head

A release-mode Tauri QA App was built from 5a6a5ad5c046553e63082b3543a6878b44369025 and connected to a genuine privately installed wheel from that source. The App identity and updater endpoint were overridden only for the isolated QA bundle. Production Rust, packaged frontend and backend sources were unchanged; no installed user App or default CLI was replaced. The read-only status/Chat service identities and disposable registry routes were checked before native input.

  • Physical macOS Pinyin input in the actual Tauri Goal conversation: candidate-confirmation Enter leaves the draft in place, both idle and busy. A subsequent Enter sends normally or creates one real next-Turn queue entry.
  • Shift+Enter preserves the exact Chinese multiline message; Command+Enter steers the precise active upstream Turn and falls back to ordinary send when idle. The queued message actually executes after the original Turn ends.
  • Status refresh retains the exact queue entry. Normal quit/reopen returns to the same Goal and canonical Session with all saved messages, no added Turn or steering, and no remaining active/queued work. Reopen performs one thread/resume reattachment to the same saved ordinary Chat thread; this is not evidence for the separate attached-provider no-resume boundary.
  • The executor is a scripted stdio fixture: five Turn starts and one steering request, no actual model inference or private conversation test. The native shell's production minimum width remains960px; prior390px frontend/WebKit evidence remains separate. This adds desktop native qualification, not native390px, live Lark/CS-Notes, installed-user-App adoption or parent-task completion.
  • The unqualified source/editable CLI was first correctly rejected. A genuine wheel and canonical isolated global registry repaired the QA setup; no runtime identity was manufactured or gate bypassed. The QA App and its owned service ports were closed afterwards.

The required module test was rerun to reconcile the earlier description's count: 1 failed /5 passed,146>145. The existing failed quality receipt and merge hold remain; the exact-head layout approval does not waive them.

Visual Evidence

Actual first viewports from the packaged preview. The before/after pairs use the same isolated backend and unavailable-executor state. Model metadata shown in the empty preview is unexecuted configuration.

View Before After
Desktop, Chinese Status-only label before on desktop Status-only label after on desktop
390px, Chinese Status-only label before on phone Status-only label after on phone

Goal conversation, English at 390px (candidate):

Goal conversation with readable Status only label

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

审查绑定 5a6a5ad5c046553e63082b3543a6878b44369025。无阻塞发现;此 COMMENTED 承载代码批准结论,不代表正式 GitHub 自批准、required quality 或合并资格已通过。

动机

在 Manager 或 Goal 对话中选择「仅查状态」的用户,需要直接看清当前模式及“不调用模型”的含义。基线把图标和文字塞进固定36px图标按钮,中文在桌面与手机越出按钮,英文手机还会挤压图标;候选按内容扩展按钮,原位置即可读清当前模式。独立的准确头打包预览已在真实 ChatHTTPServer 与合成 File-authority Goal 上读回:中英文标签单行完整,键盘切换与焦点可见,刷新保留选择,未选中图标布局与基线一致。验收只覆盖状态按钮的布局及既有操作;不认证正式 App 安装、模型对话、原生输入法、飞书或共享会话,也不关闭这些已有产品验收缺口。

这是当前模式可读性的修复:保留原状会让用户误读选中状态,隐藏文字或缩小字号又会丢掉直接反馈。原有操作已经表达用户意图,所以修复增加零个必需陈述、选择、确认或准备步骤。

改动思路

复用 ChannelHeader 的现有 statusOnly、aria-pressed 和切换 handler,只在同一 stylesheet 中让选中标签按内容布局;无需第二个组件、状态 owner 或设置。该切片完成已复现的标签越界修复;原执行器可用性、会话创建、发送和后端权限继续由已有 owner 负责。只改变选中状态的排版,没有把译文、图标或 CSS 变成第二个状态 owner。

同一真实页面与后端 基线 CSS 对照 准确头
中文 Manager,1512/390px 36px 控件内文字越界 98px,单行完整
英文 Manager/Goal,390px 文字越界,Manager 图标可被压扁 113.8125px,图标16px,单行完整
未选中的 Goal 图标 36px、16px SVG 同位置、同尺寸、同字体,测量结果一致

此表来自独立执行。使用准确头构建的打包 Chat、生产 ChatHTTPServer 和合成 File-authority Goal;对照在同一真实页面只移除两条新增 CSSOM 规则。源码核验表明移除它们即可逐字还原不可变基线 CSS,全部 JS/后端也未改动。它是明确标识的历史样式反例,不冒称另一次完整基线 App 构建。

具体改动

完整差异六个路径:生产 CSS 仅新增两条规则,另有五张公开合成首屏,共562878字节;一个提交带 DCO。修改前规范为 docs/development/design.md,revision 105c4bc15091afac832495167cb98a1389951a04,并结合该版本 task-first delivery;已在读差异前确认相关条款。

  • Earn The User’s Attention:implemented。整体首屏能直接读清当前模式;Manager 与 Goal 两个真实入口均验证。PR 内五张中英文/桌面/手机图片已逐图检查。
  • Typography / Responsive Behavior:implemented。沿用 body/leading token,实际仍为14px/20px;选中内容横排、留6px间隔和9px边距。中文98px、英文113.8125px,实际文字范围在按钮内,页面无横向溢出。
  • Accessibility:implemented。既有 button、可访问名称、title、aria-pressed 与键盘入口保持;真实 Enter 切换、可见焦点和刷新/重载已读回。没有可用执行器时保持仅查状态。

关键代码是 personal-status-mode 的选中规则:以准确布尔属性选择内容尺寸 flex,未选中状态继续使用既有图标按钮。下一行 SVG 的 flex: none 防止标签挤压眼睛图标。实际手机覆盖规则与 Goal 导航换行也已检查,不能只看这一处 CSS。

ChannelHeader 的原 handler 未变化:选择状态由现有 selectedAgentId 决定;离开仅查状态时找第一个可用执行器,否则保持原状态。独立用仅响应版本探测的合成 CLI 检查 true→false→true,未执行 Agent;再从真实会话 API 读到空列表,磁盘无 Turn。没有引入新设置、持久化字段、公共协议或跨语言决策 owner。

对主干的风险

最强反例是内容尺寸按钮挤占窄屏导航、图标变形或焦点消失,而构建和静态合同仍全绿。本轮用现有生产入口做独立文字范围判断:四个历史 CSS 对照均失败,准确头均通过;未选中图标的完整位置/尺寸/样式测量一致。可用探测执行器的键盘切换、不可用状态、Goal 刷新和重载都保留真实反馈,没有发送消息或调用模型。

准确头的 packaged build/typecheck、source verification、font 与现有 workspace contracts 通过;标准 premerge 四项 direct 和十四项选择检查通过。其 selector 偏 docs/public,所以这些检查不能代替实际浏览器验证。五张 PNG 的 CRC、文本/EXIF 元数据与像素已检查,无私有操作内容。独立浏览器夹具及服务已清理,没有正式 App 安装或默认 CLI 变更。

required 根模块检查仍为 1 failed / 5 passed,146 > 145,workflow_skill_install.py。相同不可变基线和本头的完整错误只差末尾耗时;检查器、预算 fixture、offender 字节及完整146模块清单相同,且本 PR 不改 Python。保留这个原有质量失败,没有放宽预算或扫描范围。作者正文报告的通过数不替代这里独立观测的5;其精确 scope CQR fail 仍归作者,reviewer 工作区的原生核验为 receipt_missing,不把它说成可复用的 passing receipt。按当前策略没有查询、轮询或等待 CI。

我的整体评价

APPROVE;goal_achieved 仅限已复现的标签布局切片。 user_experience=improved:原位置直接读清当前模式,零额外交互轮次;long_horizon=preserved:选择与会话 owner、任务/调度/权限未改动,重载和真实零会话读回支持这个有界判断,不宣称 Agent 效果收益。邻近改善是同 owner 的内容尺寸与 SVG 约束;进一步组件或框架重构没有必要。

已经采用召回经验中“真实任务、整体首屏与失败后读回”的方法,没有继承旧案例结论,也没有把记忆投递、图片或本次代码批准当作产品采用。required quality、正式安装、原生 IME、飞书、共享会话和上层产品验收仍各有边界,审查不授予合并或发布权限。

English verdict: APPROVE 5a6a5ad5c046553e63082b3543a6878b44369025. Independent source-packaged Chat on the real production backend confirms readable Chinese/English Manager and Goal labels, keyboard operation, reload and inactive geometry parity. Removing exactly the two CSS rules reproduces the historical defect. Build and focused checks pass; the independently identical pre-existing146/145required failure and CQR qualification gap remain. CI was not consulted; no merge, installation or parent-product completion is implied.

@loopx-agent
loopx-agent merged commit dd6895f into main Oct 18, 2026
10 of 12 checks passed
@loopx-agent
loopx-agent deleted the codex/chat-readonly-mode-layout-20261018 branch October 18, 2026 05:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant