Repository navigation
fix(workspace): make Goal overview a bounded reading surface - #7060
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6-astra · OpenAI · runtime_reported · xhigh
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
评审 02e268e97cf9f5633476ace5b6e3d6a1b518361d,未发现剩余阻塞缺陷。
动机
需要从 Goal 概览快速判断当前工作和验收缺口的用户。 原页面把相同任务同时排在主栏和常驻侧栏,任务多时整页被长文本占满;现在先看每位负责人的三条工作,需要时再展开或搜索。 主栏只保留一份工作列表,只读验收先显示缺口、限制和部分观测状态,完整依据仍可打开。 本次不改变任务排序与状态、来源权限、分析内容、执行或验收结论。 顶部目标与验收描述仍有重复,其他页面的整体体验梳理继续沿现有产品任务推进;安装后的真实 App 回读在合并后完成。
改动思路
复用已有工作侧栏、任务详情和原生折叠控件即可减少重复;不需要第二份任务状态、额外摘要服务或新的保存设置。 本 PR 交付概览的工作与验收阅读层级,保留完整任务入口及原始证据。 任务顺序和状态继续来自现有数据投影;组件只负责默认看多少、何时展开。需要用户决定的事项仍在目标旁边,完整任务搜索和历史则使用已有弹层。不能只缩小字号或截掉原文,否则重复仍在,依据却难以找到。
| 阅读动作 | 原行为 | 当前行为 |
|---|---|---|
| 打开桌面概览 | 主栏与常驻侧栏重复任务 | 主栏一份,完整列表按需打开 |
| 五位负责人的200项工作 | 默认200行 | 默认15行,展开可见全部200行 |
| 查看只读验收 | 全部技术细节直接铺开 | 缺口、限制和部分/未知状态;展开看依据 |
表格对应本 head 的打包页面验证,表示阅读方式变化,不表示任务、验收或研究结果发生变化。
具体改动
依据 docs/development/design.md(base 8696bd6c3ba0f5169b92f83a6aa770c651065d45):Earn the users attention 通过删除重复任务栏和折叠非首要细节落实;Populated Page Review 使用长中英文任务、200项混合状态以及桌面/窄屏检查;Owner rail 保留负责人决定及重要状态。新增双语段落明确完整列表和未知验收的边界。更广的顶部文案精简没有混入本 PR。
关键代码讲解
GoalWorkspaceWork复用原手机端的原生 dialog,删除 matchMedia 状态与桌面分支;打开完整列表时才启用已完成历史读取。Escape 关闭并回到触发按钮,选择任务后关闭弹层再打开原详情。RemainingWork只为第三条之后的工作提供原生折叠。原始任务顺序与组摘要不变,选中任务 ID 变化时展开所在组。评审发现最初的布尔依赖会漏掉“手动合上后选同组另一任务”,最终提交改为具体 ID,新增对应回归并通过。GoalAcceptanceObservationCard的 overview 参数默认 false,其他读者保持原展示。概览摘要沿用已有来源不可用、Goal不匹配等判断;即使列出零缺口,也显示部分观测,不生成通过结论。完整原因、要求、缺失来源和截断提示仍在展开正文。GoalOverview只在只读概览使用该折叠样式,删除已经重复的来源说明;关系图不可用时仍解释原因。样式扩大主栏阅读宽度,前三条任务最多两行,完整文字仍在详情和其余任务中。
对主干的风险
主要风险是减少默认内容后把重要状态或选中任务藏起来。既有 digest 的组状态和总数保留,200项场景仍能看到受阻摘要,展开后全部任务、看板和关系图一致;不同任务连续选择的回归已经覆盖。错误 Goal 的验收投影在刷新后变为未知,旧依据被移除,远端快照不会借用本地任务或工作关系,也不产生写请求。
生产构建和类型检查、打包 goal-workspace-m2、goal-workspace-selection 通过。最终 m2 测得初始渲染55ms、完整展开96ms、已加载视图切换96–153ms,满足现有预算,仅说明该夹具通过,不宣称通用性能提升。相同新“无常驻重复栏”断言在不可变 base 上失败,在当前 head 通过。测试使用原生测试 HTTP 和合成状态来检验真实前端交互,不验证模型分析质量。
风险 canary 的4项直接检查、7项 catalog、8项风险检查及公开文本检查通过,原始结果仍为 manual_review_required:四张 PNG 不在文本扫描范围,已逐张检查像素、来源与元数据,均为合成内容,无私有上下文。截图直接在 PR description,标明打包与安装边界。按照当前策略未查询远端 CI。最初短 SHA 的评审请求被拒绝,改用完整 SHA 后取得当前契约,没有绕过版本约束。
语义与 CI 对齐
没有新增共享状态枚举、执行权限、模型提示或持久化格式。分类使用现有精确状态与 Goal ID,折叠不能改变任务准入、证据来源或验收。双语设计新增的义务是展示层级,原用户决定和证据义务保留。共同组件的非概览默认分支保持原样;不以隐藏界面声称关闭能力。
我的整体评价
这是可交付的 justified_increment:长程任务、证据与后续执行保持原语义,用户阅读体验改善,零额外确认轮次。完整列表多一次自愿打开,换来默认页面消除重复。复用已有工作侧栏、任务详情和原生折叠控件即可减少重复;不需要第二份任务状态、额外摘要服务或新的保存设置。 本 PR 交付概览的工作与验收阅读层级,保留完整任务入口及原始证据。 删除响应式双分支是同域简化;保留小型展开 helper 服务真实任务选中恢复,没有引入新的摘要体系。合并资格与安装回读仍须分别完成,整体前端优化未被这一批替代。
English verdict: APPROVE — 02e268e97cf9f5633476ace5b6e3d6a1b518361d. Overview now bounds initial work and acceptance detail while retaining complete, scoped records. Build, packaged UI, negative source/selection cases and automated canary checks pass; four image holds were manually inspected. Same-group reselection was fixed during review. Installed readback follows merge; the wider frontend work remains open.
loopx-agent
left a comment
There was a problem hiding this comment.
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
审查 7060@02e268e97cf9f5633476ace5b6e3d6a1b518361d,不可变基线 8696bd6c3ba0f5169b92f83a6aa770c651065d45。结论:REQUEST_CHANGES,以合并后审计 COMMENT 发布。该精确提交已合并,现补充一处可复现、待修复的模态框键盘问题;其余阅读收敛与数据保留已验证。本次没有执行合并或安装。
Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max
动机
在 Goal 概览查看当前进展、负责人和任务的使用者,会同时遇到常驻的全部工作侧栏与逐项展开的负责人任务。同一组 200 项长文本数据,基线默认显示 200 行并重复列出工作;当前默认显示五个负责人下的 15 行,保留各组总量、受阻状态和其余任务入口。完整任务仍然存在,展开五组后能通过键盘访问全部 200 行。
这个切片的收益是让概览首先回答进展与接下来需要关注什么,搜索、历史和长内容仍可按需读取。它沿用既有工作摘要、任务详情、只读观测与后端;不创建新的任务状态、权限或配置。无改动会保留重复与长页面成本;仅删掉信息会损失任务发现和错误提示,不能达到相同结果。
改动思路
负责人区域先列三项,剩余内容放进原生 disclosure;从全部工作选中后面的任务时,按选中任务身份展开对应分组。所有宽度统一用原生模态对话框呈现全部工作,并在关闭后把焦点交还入口。只读验收观察的正文收进详情,摘要继续显示缺口数、限制数和部分或不可用状态,不能将折叠或零缺口解释为验收通过。
| 路径 | 旧行为 | 当前观察 |
|---|---|---|
| 五组、200 项长任务 | 200 行默认展开、常驻重复侧栏 | 默认 15 行;键盘展开后完整 200 行 |
| 只读观测来源不匹配 | 正文拒绝展示 | 继续拒绝旧正文,摘要显示不可用 |
| 已开详情,再打开全部工作并按 Escape | 桌面仍是常驻工作侧栏 | 错误关闭背后详情;模态框要第二次 Escape 才关闭 |
这张表是行为对照;执行证据来自当前构建、真实浏览器及隔离的原任务后端。默认布局确实发生变化,没有功能开关;共享卡片不传 overview 的十组中英文、部分、缺失、加载与错 Goal 输出与基线逐字节一致。
具体改动
完整读取十个文件,+103/-28,并查看四张已提交截图的像素及 PNG 元数据。生产改动集中在四个现有前端文件;其余为设计说明、四张合成数据截图和既有浏览器回归。没有新增持久化状态、安装步骤、后台操作或第二套任务所有者。
关键代码讲解
GoalWorkspaceWork继续使用现有 digest、任务选择与历史读取。前三行限制只改变初始呈现,未过滤掉后续任务;RemainingWork按选中 id 展开,切换到长任务后能读到完整原要求。历史只在打开可写本地工作面板时请求。GoalAcceptanceObservationCard先判断来源可用性和 Goal 身份。新的摘要不绕过原拒绝路径;部分观测、缺失来源、限制理由和历史证据仍在可访问的正文中,共享默认调用保持原样。
[P2] 让 Escape 关闭最上层全部工作模态框,保留背后的任务详情。 在桌面概览先打开任一任务详情,再打开“全部工作”,按一次 Escape。实际结果是详情关闭,dialog.open 和 :modal 仍为 true;第二次 Escape 才关闭全部工作并返回入口焦点。该顺序在真实构建与隔离的 canonical Todo 后端连续复现。新增的 dialog,第 171 行 只处理浏览器的 cancel;既有 ContextDrawer 全局 keydown 先调用 preventDefault 并关闭底层详情,阻止本次原生 cancel。统一到桌面模态框后,这成为普通桌面路径的回归。
最小修复是在既有对话框和抽屉所有者之间正确仲裁最上层 Escape,例如让底层抽屉在原生模态框存在时不消费该键;避免关闭无关底层选择或另建弹层框架。回归应打开详情 → 打开全部工作 → 只按一次 Escape,断言模态框关闭、原详情仍存在且焦点回到全部工作入口;另保留无底层详情及窄屏路径。
已有审查覆盖了单独关闭,未覆盖详情已开时的叠层路径;本次补充针对该组合。
规范先取自改动前的 docs/development/design.md 与 docs/development/frontend-delivery.md,版本 8696bd6c3ba0f5169b92f83a6aa770c651065d45。映射:Earn the user's attention、Explanations on demand、Populated-page review、Task-first delivery。新增设计文字只是提案的一部分,不为自身或键盘行为作认证。
对主干的风险
当前精确提交的生产构建、TypeScript 检查通过。premerge 的直接检查、七项 catalog、八项风险 smoke 和一项公共边界扫描均通过;总命令仍以 manual_review_required 结束,四张二进制截图的人工检查要求已执行,不能把该退出状态改写成自动准入或合并权限。
独立浏览器检查涵盖 1440×1000 桌面、390×844 窄屏、200 项中英文长任务、完整展开、搜索后选中末项、只读部分观测及错 Goal 的旧内容清除。窄屏无横向溢出,失败验收仍在首屏可见,默认阅读量明显减少。已提交截图使用的 957b750… 与当前 head 只有选中 id 的展开依赖发生变化,四张图片及布局 CSS 相同;当前 head 的相应交互已另行实测。
真实隔离 Todo 后端中,完整要求末尾的验收标记可以通过原详情读回;该后端没有模型或执行服务,页面相应不可用提示被保留,不宣称完整会话服务或已安装资格。另一组合成长任务故意缺少完整来源,页面明确报告完整要求读取失败,没有以摘要冒充正文。未调用任务执行、变更或模型操作。
我的整体评价
阅读层面的方案有明确收益,复用了现有状态和组件,也没有用隐藏信息换取漂亮的静态截图。当前阻断是一个范围清楚的弹层事件冲突,修复可以留在现有两个所有者内,并用一次 Escape 的组合路径验收。这处合并后发现仍需修复;保留其余通过证据,在后续修复提交验证同一组合路径。
English verdict: REQUEST_CHANGES (post-merge audit comment) at 02e268e97cf9f5633476ace5b6e3d6a1b518361d. This exact head is already merged. Opening All work over an existing task drawer makes the first Escape close the underlying drawer while leaving the modal open. Arbitrate the topmost Escape and add the stacked-dialog regression. The bounded reading layout, retained tasks, shared-card parity and source-failure behavior otherwise passed the stated checks. No merge or installed-product qualification is granted.
| </section> | ||
| </div> | ||
| {!quietWork || railOpen ? compactRail ? <dialog className="goal-work-rail-dialog" aria-label={zh ? "全部工作" : "All work"} ref={dialog} onCancel={event => {event.preventDefault(); onCloseRail();}}> | ||
| <dialog className="goal-work-rail-dialog" aria-label={zh ? "全部工作" : "All work"} ref={dialog} onCancel={event => {event.preventDefault(); onCloseRail();}}> |
There was a problem hiding this comment.
[P2] Escape should dismiss the topmost All work modal. On desktop, open a task drawer, then All work, then press Escape once: the underlying task drawer disappears while this dialog remains open and modal. A second Escape is required. The existing ContextDrawer document keydown handler calls preventDefault before the native dialog cancel, so this all-width modal path needs topmost keyboard arbitration. Preserve the underlying selection and add a regression asserting one Escape closes this modal, retains the original task drawer and restores trigger focus. Reproduced twice with the exact built head and an isolated canonical Todo backend; the current main retains both handlers unchanged.
Goal Overview repeats the same tasks in the main column and a permanent desktop rail, while read-only acceptance observations expand into a long diagnostic document. This change gives the page a bounded reading hierarchy.
design.md. Shared acceptance readers outside Overview retain their existing presentation.概览保留当前工作与重要状态,完整列表和验收依据按需打开。研究、任务与成果仍使用各自入口;本次不改任务状态、来源权限、模型调用或验收结论。
Validation: production Chat build/typecheck; packaged
goal-workspace-m2andgoal-workspace-selection; 200-task mixed-state/long-text fixture, keyboard and narrow layouts, task deep-link restoration, foreign-source isolation and wrong-Goal observation recovery. The new duplicate-rail assertion fails against unchanged base8696bd6c3ba0f5169b92f83a6aa770c651065d45. Full 200-task DOM render: 55 ms; explicit expansion: 96 ms; loaded lens switches: 96–153 ms, within the existing budgets. These measurements qualify this fixture, not general performance improvement. Risk-based canary: all automated checks passed (4 direct, 7 catalog, 8 risk and public boundary); original status is manual_review_required for four PNGs, whose pixels, metadata and synthetic sources were inspected. Exact-head review includes the corrected same-group reselection regression; installed macOS App readback passed at merged runtime311e4e7653efadab2e5ed006dbe6c77560699121: the original read-only Goal and a populated writable Goal show bounded owner work, All work opens and closes, complete acceptance evidence expands, and the Research view retains its existing records and analysis. No new analysis or experiment was started. Other automation-template review holds remain outside this UI delivery.Visual evidence
Tested code revision
02e268e97cf9f5633476ace5b6e3d6a1b518361d. Screenshots captured at957b7500018268c89fc07859ea23df7e2fd5d4a0; the final follow-up changes selection recovery only, with no visual-layout change. These captures use the packaged frontend and public synthetic data, not private operational records or benchmark results. No persistent preview server is published.The first viewport keeps the objective, failed criterion and owner decisions visible. The main work column now has the full reading width; a populated case displays 15 initial task rows across five owners instead of 200 rows plus a repeated list. Complete text is available through task inspection/expansion. Desktop 1440×1000 and phone 390×844 were inspected. Hero objective/acceptance wording and broader Settings/Files review remain outside this bounded change.
Phone