feat(desktop): rubric+growth+runtime three-page fusion

Architectural refactor unifying three previously-independent pages
around a single shared event-log model:

  rubric-fusion-model.js — the shared model. One log of scored
    events keyed by (rubric, runtime, timestamp), plus a small set
    of derivations (recent-scores window, per-rubric aggregates,
    per-runtime rubric grid) that all three views subscribe to.
  rubric-fusion-seed.js  — fixture seed used by tests and the
    isolation-machine screenshots below.

The three page views:

  Rubrics — now leads with a hint card (recent pass/fail streaks,
    stalest rubric) and a stats strip (7-run rolling pass rate,
    latest score, delta vs. previous). Rubric list is unchanged.
  Growth  — rewritten. The old compact-window event feed is gone;
    the page is now a pure SVG time-series curve over the event
    log (score-y × time-x), with per-rubric coloring and a
    hover-time tooltip. -420 lines of the old feed → +630 of the
    curve renderer.
  Runtime — adds a "Rubric grid" tab next to the existing Status
    tab. Grid is one row per rubric × one column per runtime;
    cells are pass/fail/unrun, click-through to the raw event.

Wiring is careful about the five hot zones the parallel lanes are
each touching (nav / chat / context / trace / artifact) — Lane D
stays entirely inside rubric/growth/runtime and their shared model,
so this composes with the C/A lanes without stepping on their
finishTurnContainer or chat-triple regions. style.css conflict
against the C+A combined append was tail-append vs tail-append and
resolved by concatenation (brace balance verified).

  rubric-fusion-model.js       419 +
  rubric-fusion-seed.js        624 +
  rubric-fusion-model.test.js  181 +
  rubric-fusion-views.test.js  189 +
  growth-v2.js                 +631/-420   (SVG time-series rewrite)
  rubrics-page.js              +89 -0      (hint + stats strip)
  runtimes-page.js             +198 -0     (rubric-grid tab)
  index.html                   +7          (three mount points)
  style.css                    +252        (new page sections)
  rubric-fusion-fixture.json   +94         (test/screenshot seed)

Test suite: 1704/1704 pass (+22 over Lane C+A baseline). Isolation-
machine fixture screenshots (rubrics/growth/runtimes,
docs/rubric-fusion-shots/0{1,2,3}-*.png) reproduce from the merged
HEAD.
This commit is contained in:
ZiyaZhang
2026-07-19 01:05:01 -07:00
parent 5e46a54de7
commit 4c47ce55e2
13 changed files with 2259 additions and 416 deletions

View File

@@ -1402,6 +1402,13 @@
(inlined fixture blobs), then the page renderers. -->
<script src="./rubrics-model.js"></script>
<script src="./annotation-model.js"></script>
<!-- Rubric fusion (D lane): single event-log store shared by Rubrics,
Growth, and Runtime. Loads AFTER rubrics-model so it can pull
dim-spec normalizers, and BEFORE the three view scripts (rubrics-
page, growth-v2, runtimes-page all consume it). Seed is inlined so
we avoid file:// fetch, mirroring rubrics-seed.js. -->
<script src="./rubric-fusion-model.js"></script>
<script src="./rubric-fusion-seed.js"></script>
<script src="./rubrics-seed.js"></script>
<script src="./rubrics-page.js"></script>
<script src="./annotation-panel.js"></script>