Skip to content

feat(workspace): polish research history reading - #7253

Merged
loopx-agent merged 3 commits into
mainfrom
codex/research-workbench-release-polish
Oct 24, 2026
Merged

loopx-agent merged 3 commits into
mainfrom
codex/research-workbench-release-polish

Conversation

@loopx-agent

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

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

  • Outcome basis / optional anchor: LoopX 2.0 research-workbench release polish; self-contained UI refinement with no invented issue or roadmap ID.
  • Goal/source and gap: The research workflow was functional, but its first viewport, timeline, decision trail, reading surfaces, responsive layout, and read states did not yet provide a coherent release-quality visual hierarchy.
  • Observable before → after, with the validation row that proves it: The first viewport now has a clear title and unified controls; phase meaning and recording density are easier to scan; decision cards use a responsive 3/2/1-column grid; evidence and saved findings read as deliberate surfaces; loading, empty, and failure states have stable, actionable presentations; expanded mobile questions show their complete wording. The real_entrypoint, regression_parity, and manual rows below qualify these results.
  • Issue/task and intended base: User-requested LoopX 2.0 research-workbench visual polish; intended base main. No issue is closed by this PR.

Author Declaration

  • Written by: model_agent — Kimi (Moonshot AI), via WorkBuddy AI.

Implemented against

  • Specification and revision: docs/development/design.md and docs/product/releases/v2.0.0.md at base revision 44050e953.
  • Criteria:
Criterion (spec clause) Disposition Symbol / path Test or command
Calm, token-based presentation with readable typography, responsive layout, and designed read states implemented goal-research-history.css, goal-research-analysis.css, goal-explore-results.css, goal-research-progress.css npm run build --prefix apps/presentation/dashboard; CSS token check; desktop/mobile screenshot review
Reading, citation, refresh, and source switching remain separate from authorized model analysis implemented goal-research-history.tsx; examples/personal-workspace-browser/research-history.mjs LOOPX_PERSONAL_WORKSPACE_SCENARIO=research-history node examples/personal-workspace-browser-smoke.mjs
Preserve real records, provenance, negative/tentative states, and recorded relationships without fabricating research edges or outcomes implemented Research timeline/history composition and existing real checkpoint fixtures Complete research-history browser scenario; three public checkpoint readbacks; zero mutation/model-write assertions
  • Self-check before submission: Reviewed the complete diff, merge base, DCO trailers, desktop/mobile screenshots, loading skeleton, empty state, refresh failure, and expanded mobile evidence. Rebased onto latest origin/main before submission. Deliberately excluded live model execution, scientific/benchmark qualification, unrelated bundle optimization, and full-repository refactors.

Scope And Continuation

  • Completed scope and remaining work: Complete within this visual-polish scope. The change covers the research header, controls, timeline, density plot, decision trail, reading surfaces, loading/empty/error states, and expanded mobile questions, with public visual evidence.
  • Slice boundary / successor: N/A; no ceremonial follow-up is required. Broader bundle-size work and live research quality evaluation are separate concerns.

Validation

  • Tested revision: 07d1e4f99 (implementation); 7b76c23dc adds only the public screenshots attached below.
  • Run state: finished
  • Input classes: public_fixture, synthetic
Check kind Result Public-safe evidence / limitation
static passed npm run build --prefix apps/presentation/dashboard: TypeScript, desktop Vite build, and packaged chat bundle passed. Existing large-chunk warning remains non-blocking and unchanged in scope.
static passed npm run check:css-custom-properties --prefix apps/presentation/dashboard: 31 stylesheets, 60 defined tokens, no undefined references.
real_entrypoint passed LOOPX_PERSONAL_WORKSPACE_SCENARIO=research-history node examples/personal-workspace-browser-smoke.mjs: complete scenario passed on the rebased implementation, including desktop/mobile, pagination, Goal isolation, refresh recovery, empty-state focus, citations, and expanded questions.
real_backend passed Read-only local production HTTP owner and packaged chat journeys passed for native results and synthesis. Three real public checkpoint histories retained their source records; model dispatch and mutation counters remained zero.
regression_parity passed Base 44050e953 reproduced the expanded-mobile-question assertion failure and visible two-line clamp. Head 07d1e4f99 passed the deterministic unclamped-state assertion and the complete scenario; before/after screenshots are included.
manual passed Reviewed 1512×982 desktop and 390×844 mobile captures for the first viewport, timeline, report reading, loading, empty state, refresh failure, and expanded evidence. No horizontal overflow was reported by the scenario.
  • Coverage and gaps: No full-repository pytest/canary suite or live model call was run; CI remains the broader qualification boundary. A parallel baseline/head evidence invocation encountered a preview-service connection refusal, so the candidate scenario was rerun standalone and passed. This PR qualifies presentation and read behavior only, not research efficacy or bundle performance.

See validation disclosure guidance.

Frontend / Visual Evidence

Before / after comparison · 前后对比

Screenshot assets are pinned to 3efe6ed729a17afffaba30768aedc0d145504c93. Before captures show base 44050e953; the desktop/mobile after captures were refreshed for the complete-title follow-up below. Original supplemental captures retain the earlier implementation boundary.

Viewport / 视口 Before / 改前 After / 改后
Desktop / 桌面 · 1512×982 Desktop before Desktop after
Mobile / 手机 · 390×844 Mobile before Mobile after

Click an image to view its full-size original. 点击图片可查看原图。

  • States and viewports shown: Desktop 1512×982 and mobile 390×844; timeline first viewport, loading skeleton, empty history, recoverable refresh failure with preserved records, and collapsed/expanded mobile evidence.
  • Source data: public_fixture for real checkpoint history; synthetic for explicitly labeled analysis/read-state regressions.
  • Attention review: The research timeline remains the primary reading surface. Controls are consolidated without adding metrics or changing phase semantics; recorded findings and uncertainty remain visible; technical error details are collapsed while retry stays one step away; the empty action focuses the existing research-mode control rather than creating another configuration owner.
  • Craft review: Token-based color, typography, spacing, and motion; Lucide status glyphs; no new raw hex; stable loading geometry and reduced-motion handling; responsive 3/2/1 decision grid; no invented graph edges, decorative data, or grouping-only metric cards.

Complete decision titles · 决策卡片完整标题

Follow-up 3efe6ed72 removes the two-line title clamp from the decision trail. Titles wrap in full at the existing body size; long unbroken identifiers wrap inside the card. Supporting change previews keep their existing compact treatment and open the original reader when selected. No research records, analysis, execution or permission rules changed.

Viewport / 视口 Before this fix / 修复前 (7b76c23dc) After / 修复后 (3efe6ed72)
Desktop · 1512×982 Clipped desktop titles Complete desktop titles
Mobile · 390×844 Clipped mobile titles Complete mobile titles

Follow-up validation: built both the original and repaired packaged frontend against the same disposable read-only production HTTP owner and existing public checkpoint fixtures. Inspected the full viewport and decision section at both widths. All displayed long titles fit their content; nine decisions after “show more”, refresh/reload, keyboard opening and Escape closing remained usable. A temporary Chinese/unbroken-identifier rendering stress case stayed within its card without horizontal overflow; original source records were preserved and backend mutation attempts remained zero. No live model or installed-App adoption is claimed.

npm run build --prefix apps/presentation/dashboard, CSS custom-property checks and diff/RFC hygiene passed. The scoped standard premerge ran four direct checks and two selected catalog checks with no automated failures; six binary-image manual review holds remain for exact-head review. All six changed images were inspected for pixels, PNG dimensions and embedded text/EXIF metadata. This is author validation, not independent review or merge authorization.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring (no functional changes)
  • Documentation update
  • Test update

LoopX Area

  • Control plane (goals, todos, quota, scheduler, registry, runtime)
  • Benchmark boundary (adapters, runners, verifiers, scoring, evidence)
  • Capability or extension (providers, adapters, skills)
  • Public docs or presentation surface (README, protocols, dashboard)
  • Build, packaging, installer, or CI
  • Host or runtime integration

Technical Direction

  • Direction / acceptance reference, when applicable: Operator surface and IM integration; LoopX 2.0 browser/PWA research workbench presentation.

Shared-authority RFC fixture impact

  • Production-scale fixture schema: N/A
  • Semantic dimensions changed, or reviewed no-impact rationale: N/A; no shared-authority protocol or fixture schema changed.
  • Provider conformance arms run: N/A
  • Read-only legacy/file/PostgreSQL three-arm rehearsal (required for promotion, runtime-routing, or compatibility-projection changes): N/A

Boundary Checklist

  • Neither the diff nor this PR body/comments/attachments disclose private state, credentials, raw traces or verifier output, internal links, or local machine paths (including .loopx/, .codex/goals/, and live ACTIVE_GOAL_STATE.md).
  • I did not duplicate maintainer-owned benchmark work unless a maintainer split out a public issue for it.
  • I kept the change scoped to the linked issue/task.
  • Existing English/Chinese RFC pairs (including ledger entries) both have a diff, and the local premerge check python3 scripts/check_rfc_bilingual.py --base origin/main --head HEAD passes, or no paired RFC changed.
  • I completed the visual evidence section for UI changes, or marked UI impact none.
  • Every commit includes a DCO Signed-off-by trailer (git commit -s).

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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 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)

非阻塞建议 [P3]:用实际文本可见性验证展开阅读,而不是精确CSS属性;位置见当前断言。没有发现阻塞性的功能问题。

动机

研究页读者需要从完整研究历程中找到决策、失败和原文,并在手机上读完整问题。 原视图的控件、阶段、决策列表与读取异常缺少统一层级;原候选还把决策卡片标题截成两行。现在保留同一记录和阅读入口,按3/2/1列排列决策,标题完整换行,失败保留记录并提供原位重试。 当前打包页面可读取三组315条原记录,单Goal的76/76完整读回、分页、切换、返回和异常恢复成立;完整决策标题及390px展开阅读已实际检查。 仅资格化本PR的打包展示与只读恢复,不资格化已安装App、真实用户理解收益、模型分析准确性或研究因果效果。 已安装App/原生WebView、真实研究者理解和科学效用未验证;全版本持续采用与整体2.0验收仍开放。

读者需要保留原问题、否定条件、失败与引用,而不是先处理界面或重新配置已知来源。本次的有用增量是把现有读取与恢复路径做成一个可读的页面,并让默认决策标题不再丢掉末尾条件。我的结论针对实际读回,不将作者提供的截图或“已完成”声明自动当作验收。

改动思路

复用既有研究组件、read controller、引用与Goal配置owner足够;局部refresh和focus函数无需新状态、协议、配置或后端。 本PR交付可独立检查并可撤销的研究阅读层级与读取状态;LoopX2.0整体、安装采用与研究效果继续由原产品和研究owner验收。 研究记录仍由原typed history owner提供;组件只改变排版、空态和错误呈现。刷新复用原revision推进与analysis.read,错误不会把已加载的76条记录清空;空态按钮只滚动并聚焦现有研究模式控件,不开启模式或启动模型。

我比较了不改、只增加说明、在现有组件整理层级和另建工作台四条路径。前两者不能解决控件、长标题和恢复的可发现性;另建页面会增加导航和第二状态owner。当前局部路径足够。原有意图和授权之上没有新增用户问答或确认,查看原文和返回仍用现有入口;刷新重试的额外操作只在读取失败时需要。

具体改动

完整base-to-head为19个路径、+123/-45,含五个展示文件、一个既有场景文件和13张公开PNG。先完整检查了7b76,再逐项检查到3efe的七路径变化:实际产品改动只有决策标题的一条CSS规则,其余是四张卡片对照图及两张更新首屏。旧版捕获按原修订保留;当前构建、完整history和premerge重新执行,没有将旧头批准继承到新头。

先验依据是44050e953aa21f6deb932935fa158b5e415894c1的设计契约,在diff前读取,当前主工作区文本与该版本SHA完全相同。attention-and-reading在原入口、统一控制及完整标题上implemented;truthful-records-and-recovery在真实记录、负状态、失败保留与重试上implemented;populated-and-narrow-readback在整页、下半部、来源和390px展开阅读上implemented。安装/科学效果不属于此切片完成声明,没有为了匹配实现改写规范。

关键代码讲解

  • GoalResearchHistory:371 提取原刷新步骤;没有新调度、调用权限或写入。375行的空态操作只定位已有Goal配置入口,419行的错误面板保留记录、技术细节和原位重试。
  • research-history.css:195 调整决策列表与响应式列数。198行的标题现在用正常block和overflow-wrap;公开原标题不被重新命名、推断或缩写,辅助变更预览仍有既有原文入口。
  • research-assessment open规则:53 与analysis-episode的同类规则显式清除clamp/overflow。独立前后对照表明展开文本原先也完整,这部分应理解为样式明确化,不能计作新修复收益。
  • researchHistoryScenario:1155 仍走真实HTTP与隔离SQLite;完整场景验证分页、跨Goal、引用、恢复与零页面写入。1158行的属性断言保留下面的P3建议。

对主干的风险

实际复跑当前head的类型检查、桌面与Chat生产构建、CSS token检查、完整打包research-history均通过;三个公开checkpoint合计315条,选中Goal完整76/76。标准premerge的四项直接和十三项选中命令通过,原始总门仍因13张图片为manual_review_required。我逐张检查了这些PNG的像素、尺寸和块元数据,未见嵌入文本/EXIF或私人运行内容。当前CQR cqr_674df767a6ad52c202e7为pass并保留test_validation advisory,不能把它说成没有改进项或合并授权。按现行策略没有查询、轮询或等待远端CI。

对最强反例做了额外同源对照:204字长问题在两版指标阅读为280/280px、深度阅读为381/381px;相同四问题结构的edge-aware展开均为80/80px且原文完整。故未复现“展开被两行截断”,不能拿旧computed clamp=2、新none作为功能差异证据。P3:这里把完整可见性的断言换成三个CSS属性,不能单独证明问题从截断变成完整。同一真实SQLite/HTTP注册的四问题夹具,在390px下,旧44050与当前3efe的edge-aware行都已open且clientHeight=scrollHeight=80;204字长问题的指标/深度阅读也分别为280/381px,两端均完整。旧版display:block已经取消实际两行裁切,尽管计算属性仍写2。建议保留可观察的文本/裁切边界断言,并将不能复现的“展开丢字修复”改成样式显式化;公开before-expanded图也应标明真实展开状态。这不否定当前完整卡片标题修复和其他已验证布局,因此作为非阻塞P3。

这与新决策标题修复是两回事:当前真实卡片标题80px完整;临时施加原7b两行规则后,clientHeight为40、scrollHeight仍80,移除该展示探针立即恢复80/80。来源字节和后端记录均未改,读取后source_unchanged=true、mutation_attempts=0。这个独立可见性oracle能区分实际裁切与仅属性变化。先前Ego定位失败来自把隐式命名section当显式role属性,以及未展开逐片段父details;按当前DOM修正后正常,未作为产品失败。

语义与CI对齐

这是明确披露的默认展示调整,没有default-off声明或新能力开关。新class、readFailure和局部refresh都是展示语义;记录、图边、分析权限、Goal/来源隔离、当前状态和引用owner不变。失败技术详情按需读取,重试保留原服务边界;空态聚焦不等于启用功能。当前测试全部通过,不把历史T103的其他scope失败硬套给该UI切片;现有bundle大小警告保留。

我的整体评价

APPROVE,交付判断为justified_increment。复用既有研究组件、read controller、引用与Goal配置owner足够;局部refresh和focus函数无需新状态、协议、配置或后端。 本PR交付可独立检查并可撤销的研究阅读层级与读取状态;LoopX2.0整体、安装采用与研究效果继续由原产品和研究owner验收。 long_horizon在已测读路径上preserved:多次分页、切换、返回和失败恢复没有丢原记录或新增执行;user_experience的现有任务路径preserved,完整决策标题和错误恢复的可发现性在实际页面成立,但不把布局偏好解释为统计上的理解收益。

已检查315条公开研究记录和合成长问题的整页:首屏保留真实Goal、76/76覆盖和研究导航,阶段与负状态可扫读;决策下半部的完整标题及现有阅读器可达,手机展开正文可读。 未验证范围:已安装App/原生WebView、真实研究者理解和科学效用未验证;全版本持续采用与整体2.0验收仍开放。 已检查正常、空态、加载、异常及完整来源;长标题和问题以原文阅读,方法/哈希仍可按需读取。默认列表更宽松,手机仍需向下滚动读决策,这一有限展示成本可直接观察;本次没有新增必须配置或确认的步骤。P3验证表达建议保持公开,但没有把不存在的新运行故障当阻塞项。结论仅绑定 3efe6ed729a17afffaba30768aedc0d145504c93,合并仍需当前readiness和独立维护者权限。

English verdict: APPROVE — 3efe6ed729a17afffaba30768aedc0d145504c93. The existing read journey preserves source records, recovery and authority; decision titles now wrap fully. Current build/type/CSS, complete SQLite/HTTP history and four direct/thirteen selected checks pass; all thirteen public images were inspected. One nonblocking P3 asks for an observable expansion oracle and accurate baseline wording: both versions already show the tested expanded questions fully. Installed adoption and user/scientific benefit remain unqualified.

@loopx-agent
loopx-agent merged commit a2cd3b0 into main Oct 24, 2026
32 of 43 checks passed
@loopx-agent
loopx-agent deleted the codex/research-workbench-release-polish branch October 24, 2026 12:36
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