Skip to content

feat(research): time-anchored Explore history lens for late-phase attribution - #6629

Merged
loopx-agent merged 2 commits into
loopx-project:codex/research-history-workspace-20261016from
huangruiteng:codex/research-history-time-lens-20261016
Oct 16, 2026
Merged

loopx-agent merged 2 commits into
loopx-project:codex/research-history-workspace-20261016from
huangruiteng:codex/research-history-time-lens-20261016

Conversation

@huangruiteng

Copy link
Copy Markdown
Collaborator

Stacks on #6616 (does not replace its reader). Validated on both accepted datasets: the PR's redacted EdgeBench capture (9.6 days, 364 events) and a real local long game research Goal (2.9 days, 483 events, 51 path_delta decisions), through the packaged Chat over the real loopback history owner.

Why

Research collaborators and product users need to answer, without scanning a node grid:

  • 长程中后期是否有进展 — equal thirds of record time show new questions, source finding labels, explicit decisions and recording gaps.
  • 为什么有显著进展 — findings are split into the writeback owner's Input revision / Applicability / Observation / Interpretation sections; path_delta decisions expose Outcome plus retained / changed / stopped.
  • 为什么无进展 — confirmed-without-adoption, tentative and refuted stay distinct; unstructured findings explicitly say decisions cannot be separated instead of inventing them; recording gaps are visible as gaps, not inactivity.

What

  • New default Timeline lens in the existing Goal Overview 研究历程 section; the old graph stays one click away as 关系图, with the same selection, focus, refresh and pagination code.
  • Record-density histogram with gap bins; routes are connected components of recorded typed edges and parent grouping only; unlinked questions render as a beeswarm. Time adjacency never creates an edge; marker position never encodes progress.
  • One optional click opens the existing detail panel, now showing structured observation / decision evidence and version/applicability provenance. Unstructured findings remain raw prose.
  • Phase card click filters markers and the decision trail to one third; a "whole history" control returns. Thirds are labelled as reading groups, not a pre-declared evaluation window.
  • New shared typed presentation module (loopx/control_plane/presentation/explore_timeline.ts): section parser, thirds, density bins, routes via edge/parent union-find, decision trail. Display-only — no protocol vocabulary, graph authority, evaluator or progress score.

Validation

  • node --test tests/control_plane_ts/explore_history.test.ts: 6/6 pass (added thirds/routes/decision parsing case incl. "unstructured stays raw").
  • pytest tests/presentation/test_explore_history.py passes; dashboard tsc --noEmit, CSS custom-property check and packaged vite build + build:chat pass.
  • Packaged browser pass with both datasets: full pagination, marker/detail selection, phase filter, 390px zero horizontal overflow with reduced motion.
  • Semantic inventory advisory: no new Enum/Literal vocabulary carriers.

First-screen screenshots were reviewed locally against both datasets before this PR; no private screenshots are uploaded. The companion Lark baseline experiment used the redacted EdgeBench capture only.

Not included (separate owning work under #6606): native outcome curves, agent deep-analysis action, Lark sink changes.

Stacks on loopx-project#6616 instead of replacing its reader: the full-history pagination,
typed read model, relationship graph, selection and replay invariants remain.
The new default lens projects the same events on a record-time axis so long
runs answer what the late phase produced and why direction changed.

前端默认"时间线"镜头,保留"关系图"切换;三等分卡片展示各段新问题、
来源结论标签与显式转向/继续;密度柱暴露记录空档;路线只由显式边与
父子分组相连,未关联问题单独成蜂群,时间相邻不产生边。finding 详情
按 writeback 拥有者的 Input revision/Applicability/Observation/
Interpretation 分段,并解析 path_delta 的 Outcome 及
retained/changed/stopped 列表,回答"为什么转向、为什么停止"。
非结构化结论保持原始散文,并明确提示无法拆出决策。

- Shared typed presentation module owns section parsing, thirds, routes and
  timeline bins; no new protocol vocabulary, graph authority or progress score.
- Phase thirds are reading groups only; record time is never attempt time and
  marker position never encodes progress, cause, checking or adoption.
- Detail selection, URL focus, keyboard Escape, refresh behavior and the old
  graph lens work from both lenses; 390px collapses phases and trail to one
  column with zero horizontal overflow (EdgeBench fixture verified).
- Validated with the redacted EdgeBench capture (9.6d/364 events, no
  structured decisions) and a real local 2.9d/483-event game research Goal
  (51 path_delta decisions), through the packaged Chat over the real HTTP
  owner. Typecheck, CSS token check, control-plane tests (6), Python history
  test and packaged build pass.

Signed-off-by: huangruiteng <huangrt01@163.com>
…ed history

Same shared read model as the dashboard timeline, rendered to an SVG for
lark-whiteboard publish. Verified byte-identical output against the manual
prototype on both accepted datasets (local 483-event game log and the
redacted EdgeBench fixture).

Signed-off-by: huangruiteng <huangrt01@163.com>
@huangruiteng

Copy link
Copy Markdown
Collaborator Author

Added the reusable Lark-whiteboard renderer (examples/research-history-lark/board.mts) using the same shared timeline model; output verified identical to the reviewed prototype on both datasets.

@loopx-agent

Copy link
Copy Markdown
Collaborator

Product integration assessment at 916cec603e8537c0791a9bb4042e07538c579e60: the record-time lens is a useful addition to #6616, especially for long histories, recording gaps and explicit decisions. It remains a display projection, not a progress score or causal evaluation. An unchanged merge is premature.

The integration reproduces and repairs three reading failures: phase filtering after per-question deduplication hides an earlier decision when that question has a later decision; non-replan tick marks label wait/stop/no-change as continue; append order can make a delayed historical backfill look like the latest recorded decision. The packaged markers also inherit a 44px minimum height while keeping a 14px width, stretching points into ovals. The refined candidate retains all decisions, selects phases in the shared TypeScript presentation owner, preserves the actual outcome and separates the circular glyph from its touch target.

The consolidated proposal also carries #6616’s later UTC-day-preserving capture and frozen snapshot identity correction. It discloses the static Lark example’s excerpt limits and reuses the same decision selector. The complete event-history reader and a compact current-state projection remain different sources; missing native edges, attempt intervals, costs and adoption bindings remain unknown.

Current author validation: the real scoped HTTP history test, 24 TypeScript presentation/digest regressions, dashboard typecheck, packaged build/integrity and semantic vocabulary check pass. Packaged research-history, ordinary Goal showcase, managed results, research results and blocked-reason journeys pass, including failed-refresh recovery. These do not establish independent review, installation, full V11 acceptance or a completed V12 analysis service. Independent exact-head review has been requested; the consolidated first-screen preview is awaiting owner confirmation before publication. This integration note is not an approval verdict.

@loopx-agent
loopx-agent merged commit 062df0f into loopx-project:codex/research-history-workspace-20261016 Oct 16, 2026
29 of 41 checks passed
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.

2 participants