Skip to content

feat(overview): create overview page / 创建总览页面#611

Open
edwingao28 wants to merge 8 commits into
masterfrom
feat/executive-overview
Open

feat(overview): create overview page / 创建总览页面#611
edwingao28 wants to merge 8 commits into
masterfrom
feat/executive-overview

Conversation

@edwingao28

@edwingao28 edwingao28 commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Adds /overview (and /zh/overview): a server-rendered scorecard that answers one question per model — if you deploy it today, how much capacity does each platform deliver?

What it shows

  • One row per active model, one column per platform: B200 as the reference, then MI355X, B300, GB200 NVL72, GB300 NVL72. Fixed workload: 8K input / 1K output single-turn, speculative decode only.
  • Best validated stack per platform. Each cell is that platform's own best validated deployment — framework, precision and speculative method chosen freely per platform — labeled FRAMEWORK · PRECISION, with the full stack on the link title. This measures deployable capacity, not isolated silicon, and the methodology note on the page says so.
  • Service-level switcher. ?tier=30|75|100 re-renders the whole matrix at another tok/s/user target (default 50). The switcher is plain links, no client JS, so every view is a shareable URL.
  • Deltas never mix stacks quietly. The signed percentage against B200 appears only when both displayed results share one precision and one model release. Otherwise the cell says why: FP4 vs FP8 · no comparable delta, Different releases · no comparable delta.
  • Honest gaps. A side with no exact result at the displayed tier shows plus its reason (no 8K/1K data, cannot reach @50, standard decode only, …). There is never a percentage against a missing number.
  • Leader flips. When the winner changes at 100 tok/s/user, the lower-tier views add one line: At 100, X leads.
  • Every value links to the dashboard filtered to its exact configuration, and every result carries the run dates of the frontier points behind it.

Testing

  • Data rules pinned in overview-data.test.ts: per-platform bucket selection, tier parameterization, mismatch and missing-reason classification. Expected values come from running the real builder — tier values are spline-interpolated, so nothing is hand-computed.
  • A small synthetic fixture is served through the real assembler in fixtures mode; overview.cy.ts covers the matrix, the tier links, mismatch and states, the Chinese sibling, and 390/320px overflow, on Chrome and Firefox.
  • Desktop fits a 1440×900 fold. Mobile renders the same cell components as a two-column list.

中文说明

新增 /overview/zh/overview:服务端渲染的对比页,回答一个问题——现在部署这个模型,各平台能交付多少容量。

  • 每行一个活跃模型,每列一个平台:B200 为参照,另有 MI355X、B300、GB200 NVL72、GB300 NVL72。固定 8K→1K 单轮负载,仅投机解码。
  • 每格是该平台自己的最佳已验证部署(框架、精度、投机方式各自取最优),标注 框架 · 精度,完整配置在链接悬浮提示中。对比对象是完整服务栈,不是单独的芯片,页面方法说明中已写明。
  • ?tier=30|75|100 切换服务档位(默认 50)。切换器是纯链接,无客户端 JS,任何视图都是可转发的 URL。
  • 相对 B200 的差值只在同精度、同版本之间计算;不可比时写明原因,绝不静默混比。
  • 无精确结果的一侧显示 与原因,绝不对缺失数字给出百分比。
  • 100 档赢家换人时,低档视图给出一行提示。
  • 每个数值链接到按该配置精确过滤的仪表板;每个结果携带自己的证据日期。
  • 测试:数据规则逐条单元断言,期望值由真实 builder 生成(档位值为样条插值,不手算);合成 fixture 走真实装配器;Cypress 覆盖矩阵、档位切换、中文页与 390/320px,Chrome 与 Firefox 双跑。

Note

Medium Risk
Large new surface area with non-trivial comparison rules (precision, release, tier interpolation) that directly affect published benchmark narratives; mitigated by unit tests, fixture drift guard, and Cypress matrix checks.

Overview
Adds /overview and /zh/overview: a server-rendered matrix of active models vs B200, MI355X, B300, GB200, and GB300 on fixed 8K→1K speculative-decode workloads. Each cell shows that platform’s best validated stack, evidence dates, dashboard deep links, and B200 deltas only when precision and release match; gaps render as with explicit reasons. ?tier=30|75|100 re-renders via plain links (default 50).

The assembler lives in overview-data (with finer overviewConfigIdentityKey grouping and evidence_date on computeTcoFeed). getCachedBenchmarks moves to benchmark-data.server; computeToggle extracts to toggle-set for server-safe reuse.

Header changes target narrow viewports: hide GitHub stars below sm, 44px touch targets, Minecraft audio toggles in the mobile menu, and the language switcher keeps ?tier= (and other query state). Sitemap and i18n mirror routes include overview.

Coverage: extensive overview-data.test.ts, a compact Cypress fixture with a drift guard, overview.cy.ts, and expanded header.cy.tsx at 320px.

Reviewed by Cursor Bugbot for commit 03e6359. Bugbot is set up for automated code reviews on this repo. Configure here.

@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: inferencemax-app.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@edwingao28

Copy link
Copy Markdown
Collaborator Author

Preview status update:

  • The Vercel build has not started because my current SemiAnalysisAI Vercel seat is Pro Viewer, which can inspect previews but cannot create them. Both the Git integration and a manual CLI deploy return You don't have permission to create a Preview Deployment. I need Developer (or equivalent preview-deploy) permission before retriggering.
  • As an interim real-data check, I fetched the current public benchmark rows for all five active model families and ran them through this PR's exact reducer. It completed successfully with one precision per model: DeepSeek V4 Pro (FP4 / GB300), Kimi (FP4 / GB200), MiniMax M3 (FP8 / GB200), Qwen3.5 (FP8 / GB300), while GLM5.2 correctly remained the empty fixed-sequence 8K/1K row.

The protected Vercel Preview is still required for final server-loader and responsive validation.

@edwingao28 edwingao28 changed the title feat(overview): add executive inference scorecard / 新增高管推理总览评分页 feat(overview): add overview inference scorecard / 新增推理总览评分页 Jul 21, 2026
@edwingao28
edwingao28 force-pushed the feat/executive-overview branch from 5160d07 to a854318 Compare July 21, 2026 20:42
@edwingao28 edwingao28 changed the title feat(overview): add overview inference scorecard / 新增推理总览评分页 feat(overview): create overview page / 创建总览页面 Jul 21, 2026
@edwingao28
edwingao28 force-pushed the feat/executive-overview branch from a854318 to 785c1af Compare July 21, 2026 21:16
@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
inferencemax-app Ready Ready Preview, Comment Jul 23, 2026 6:40am

Request Review

@edwingao28
edwingao28 force-pushed the feat/executive-overview branch from 4d85aba to eec67f3 Compare July 22, 2026 21:05
@edwingao28
edwingao28 marked this pull request as ready for review July 22, 2026 21:07
@edwingao28
edwingao28 requested a review from adibarra as a code owner July 22, 2026 21:07
Comment thread packages/app/src/lib/tco-feed.ts
Comment thread packages/app/src/components/overview/overview-scorecard.tsx Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eec67f33dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/app/src/components/overview/overview-scorecard.tsx Outdated
Comment thread packages/app/src/lib/tco-feed.ts
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 5m 20s —— View job


Review — PR #611 Executive Overview page

Runtime verified on localhost:3000 (real read-only DB): /overview and /zh/overview both render real ranked data, evidence dates, leader-change badges, coverage lines and not-ranked reasons; 0 console errors; no horizontal overflow at 320px. CI green (Lint / Unit / E2E). This is careful, well-tested work — the data-layer invariants are pinned by focused unit tests and a builder-driven e2e fixture.

I confirmed the two open bot findings (Cursor Bugbot + Codex agree on both) and posted precise fixes inline:

  1. 🟡 tco-feed.ts bracketKnots — an exact hit on an interior frontier knot still returns a bracketing pair, so evidence_date becomes a cross-day range for a value that was actually a single measured point. Contradicts the PR's "same-day read shows one date" promise. Low trigger probability on the live overview (float interactivity rarely lands exactly on 30/50/75/100) but real in the shared helper behind the public tco-feed API. → collapse to the single knot on an exact interior match.
  2. 🟡 overview-scorecard.tsx NotRankedLine — in ranked secondary state the dedup against the full measuredHardware list drops secondary-measured hardware that has no exact @50 read at either precision, so it appears in neither the ranked chips nor the not-ranked line — breaking the "every hardware accounted for" guarantee. Not reproducible on today's real data (all secondaries are coverage), but the ranked branch is live code. → only dedup against measuredHardware in coverage state; suggest a unit test for the ranked case.

Both are 🟡 (correctness/honesty of displayed evidence, not crashes). No other blocking issues found — no missing-test gaps (new lib code has colocated tests, the UI has an e2e), no resource/hook/security concerns in the new code.


  • Read the diff & new modules
  • Assess the two open bot findings — both confirmed
  • Check CI status — ✅ green
  • Runtime verify /overview and /zh/overview
  • Post review

Comment thread packages/app/src/lib/tco-feed.ts
Comment thread packages/app/src/components/overview/overview-scorecard.tsx Outdated
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 2m 13s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the one new commit since my last review (69ae73c — "infinity placeholder chips for missing results").

What changed: NotRankedLine was reworked from a Not ranked: … sentence into per-hardware <label> ∞ chips, with the reason carried in title/aria-label and a ∞ = no comparable result legend added to the methodology footer. E2E updated accordingly.

Runtime verified on localhost:3000 (real read-only DB): /overview renders 50 ∞ chips, each with its reason in title/aria (no exact @50 result, no 8K/1K data, standard decode only, …), the legend is present, no ∞% is ever rendered, and there are 0 console errors. CI is green (Lint / Unit / Typecheck / E2E chrome+firefox / Component). The new rendering itself is correct.

However — neither open finding from the last round was addressed:

  1. 🟡 overview-scorecard.tsx:553 — ranked secondary still drops hardware. The ∞ rewrite touched these exact lines but kept the unconditional new Set(model.secondary?.measuredHardware) dedup. In a ranked secondary (which renders only exact-@50 chips), secondary-measured hardware without an exact @50 read now disappears from every surface — no chip, no reason. buildNotRanked already excludes the exact-@50 ranked hardware, so the dedup is only correct in coverage state. Re-flagged inline with a suggestion + unit-test note. Not reproducible on today's data (all secondaries are coverage) but the branch is live.
  2. 🟡 tco-feed.ts:226 bracketKnots — exact interior-knot reads still report a cross-day range. Unchanged since eec67f3; the existing inline thread + suggestion (collapse to the single knot on an exact interior match) still applies. Contradicts the PR's "same-day reads show one date" promise for the public tco-feed API.

No new issues introduced by the ∞-chip commit. Both remaining items are 🟡 (honesty of displayed evidence, not crashes) — recommend fixing both before merge and adding the ranked-secondary unit test.

  • Diff new commit 69ae73c vs reviewed eec67f3
  • Check the two open findings — both still unaddressed
  • Review new ∞-chip logic — correct, no new issues
  • Check CI status — ✅ green
  • Runtime verify /overview — ∞ chips + legend render, 0 console errors
  • Post review
    · feat/executive-overview

Comment thread packages/app/src/components/overview/overview-scorecard.tsx Outdated
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 2m 11s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the new commit 1725e80 (per-platform matrix with tier switcher and stack labels), which is a substantial rewrite of the overview data + UI layers.

Both previously-flagged findings are resolved:

  1. tco-feed.ts bracketKnots interior-knot range — now collapses to a single knot on an exact interior match (tco-feed.ts:224: if (frontier[i].interactivity === tier) return [frontier[i], frontier[i]]). An exact measured point at an interior tier no longer reports a cross-day evidence range. tco-feed.test.ts adds coverage for this.
  2. overview-scorecard.tsx ranked-secondary drops hardware — the entire primary/secondary/NotRankedLine/measuredHardware structure the finding was about is gone. The rewrite is a per-platform matrix: each hardware column independently selects its own best qualified bucket (dbModel × precision, exact-first, tie → FP4), and any hardware with no exact read shows with an explicit reason (no exact @tier result, standard decode only, no 8K/1K data, cannot reach @tier, INT4/BF16 only). The "every hardware accounted for" guarantee now holds structurally — every cell is either an exact read or a reasoned .

Runtime verified on localhost:3000 (real read-only DB):

  • /overview renders the full matrix with real ranked data, precision badges (TRTLLM · FP4, SGLang · FP4, ATOM¹ · FP4), signed deltas vs B200, per-result evidence dates, reasons, and At 100, <hw> leads transition lines. Filtered dashboard links carry correct g_model/i_gpus/i_spec/i_prec/g_runid params.
  • Tier switcher (?tier=30/75/100) re-renders server-side; /zh/overview?tier=75 renders fully translated. 0 console errors on all views.

CI: green — Lint, Typecheck+Unit, Component, E2E chrome (all shards) + firefox all passing (a couple of jobs still finishing, none failing).

No new blocking or warning issues found in the rewrite. The data-layer invariants (exact-vs-clamped classification via isExactTierRead, cohort/precision isolation, evidence-date sourcing) are pinned by the updated overview-data.test.ts, and the builder-driven overview.cy.ts fixture exercises the UI. 🟢 LGTM.

Comment thread packages/app/src/components/overview/overview-scorecard.tsx Fixed
Comment thread packages/app/src/components/overview/overview-detail-link.tsx Outdated
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 56s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the one new commit 7378a3b (drop dead dashboard-link helper and unreachable date guard) since my last review of 1725e80 (LGTM). This commit only touches two files (+7 / −49) and addresses the two low-severity findings from the previous round.

Both findings resolved, and both changes verified safe:

  1. Unused OverviewDashboardLink / EVIDENCE_LINK_CLASS removed (overview-detail-link.tsx) — confirmed no remaining references anywhere in packages/app/src/ (grep → none). The matrix cells build their evidence anchors inline via buildOverviewDashboardHref (overview-scorecard.tsx:224), which is unchanged. Dead export cleanly excised; the surviving OverviewDetailLink comment was tidied, no behavior change.
  2. Unreachable evidenceDate === null guard removed (overview-scorecard.tsx:126) — formatEvidenceDate now takes a non-null { from; to } and returns string. The sole caller already guards null before rendering (overview-scorecard.tsx:240: {evidenceDate === null ? null : (…formatEvidenceDate(…)…)}), so TypeScript narrows evidenceDate to non-null at the call site — the removed branch was genuinely dead. Matches the CodeQL finding.

CI: green across the board — Lint, Typecheck+Unit, Component, CodeQL, E2E chrome (4 shards) + firefox (4 shards), Vercel Preview all passing. (Claude review / Cursor Bugbot still pending, as expected.)

No new issues introduced. The two data-honesty findings from earlier rounds (tco-feed interior-knot range, ranked-secondary hardware drop) were already resolved by the 1725e80 rewrite. 🟢 LGTM.

  • Diff 7378a3b vs previously-reviewed 1725e80
  • Verify the two low-severity findings (unused helper, unreachable guard) are resolved
  • Confirm no new issues introduced — call-site null-guard makes the tightened signature safe; removed exports have zero references
  • Check CI status — ✅ green
    · feat/executive-overview

Comment thread packages/app/src/lib/overview-data.ts Outdated
Comment thread packages/app/src/components/header/header.tsx
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 1m 3s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the one new commit e607f94 (trim unused config fields; 44px minecraft audio targets) since my last LGTM on 7378a3b. Small cleanup (+1 / −47 across 3 files) addressing the two remaining low-severity Bugbot findings.

Both findings resolved, both changes verified safe:

  1. Unused OverviewConfigResult fields removed (overview-data.ts) — dropped hardwareLabel, offloadMode, isMultinode, numPrefillGpu, numDecodeGpu, totalGpu, parallelism, image, oldestFrontierDate, plus the now-dead parallelismLabel import and the latestRow reduce. Confirmed nothing reads them: the scorecard's remaining hardwareLabel references (overview-scorecard.tsx:163/212/334/362/436/450) resolve to OverviewHeadlinePairMember.hardwareLabel (overview-data.ts:100), a different type that keeps the field — not the removed OverviewConfigResult one. The overview-links.test.ts fixture was updated in lockstep. Typecheck is green, so no dangling references survive.
  2. Minecraft audio buttons meet the 44px target (minecraft-toggles.tsx) — p-2size-11 (2.75rem = 44px), matching the theme toggle raised in 7378a3b and satisfying the WCAG minimum the new header.cy.tsx component tests encode.

CI: green across the board — Lint, Typecheck+Unit, Component, CodeQL, E2E chrome (4 shards) + firefox (4 shards), Vercel Preview all passing. (Claude review / Cursor Bugbot still pending, as expected.)

No new issues introduced. All findings from every prior round (tco-feed interior-knot range, ranked-secondary hardware drop, unused dashboard-link helper, unreachable date guard, unused config fields, undersized audio controls) are now resolved. 🟢 LGTM.

  • Diff e607f94 vs previously-reviewed 7378a3b
  • Verify removed OverviewConfigResult fields are truly unused (scorecard hardwareLabel is on a different retained type; typecheck green)
  • Verify size-11 (44px) minecraft toggle change
  • Check CI status — ✅ green
  • Post review
    · feat/executive-overview

Comment thread packages/app/src/lib/overview-data.ts Outdated
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 1m 4s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the one new commit 8345f56 (drop unread bucket exactCount) since my last LGTM on e607f94. Minimal cleanup (+0 / −2 in one file) addressing the last remaining Bugbot finding.

Finding resolved, change verified safe:

  • Unused exactCount removed — dropped from the OverviewHeadlinePairBucket interface and its assignment in buildHeadlinePairBuckets (overview-data.ts). Confirmed nothing reads it: grep exactCount over packages/app/srczero matches. Bucket ranking uses each member's own isExactTierRead check, not this aggregate count, so the field was pure dead weight. newestEvidence (the sibling field still derived from exactReads) is untouched.

CI: green on the completed jobs — Lint, Typecheck+Unit, Component, CodeQL (all analyzers), Vercel Preview all passing. E2E chrome/firefox shards still running (none failing).

Runtime verified on localhost:3000 (real read-only DB): /overview renders correctly, 0 console errors.

No new issues introduced. Every finding across all prior rounds (tco-feed interior-knot range, ranked-secondary hardware drop, unused dashboard-link helper, unreachable date guard, unused config fields, undersized audio controls, and now the unused exactCount) is resolved. 🟢 LGTM.

  • Diff 8345f56 vs previously-reviewed e607f94
  • Verify exactCount removal is safe (no remaining reads — grep clean)
  • Check CI status — ✅ green (E2E shards still finishing)
  • Runtime verify /overview — renders, 0 console errors
  • Post review

Comment thread packages/app/src/components/header/header.tsx
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 1m 46s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the one new commit 69b1530 (keep query state when switching language) since my last LGTM on 8345f56. Small targeted fix (+20 / −3 across 2 files) addressing the last remaining Bugbot finding ("Language switch drops tier").

Finding resolved, fix verified safe:

  • Language toggle now carries query state across EN ↔ 中文. LanguageToggle takes the router and, on click, calls navigateInApp(event, router, target + window.location.search) (header.tsx:96), so ?tier= (and any dashboard filters) survive the locale switch instead of being dropped to the default tier. navigateInApp correctly bails on modifier/non-primary clicks, so the SPA push only fires for a plain left-click. The Link href={target} still provides a correct crawlable/no-JS fallback and preserves the bidirectional hreflang. E2E updated with a ?tier=100 → toggle → /zh/overview?tier=100 assertion.

Runtime verified on localhost:3000 (real read-only DB):

  • /overview?tier=100 → click 中文 → lands on /zh/overview?tier=100 (tier preserved, page renders the 100 tok/s/user matrix). Click EN back → /overview?tier=100. 0 console errors on all views.

CI: green on completed jobs — Lint, Typecheck+Unit, Component, CodeQL (all analyzers), E2E chrome (all shards), Vercel Preview all passing. E2E firefox shards still finishing (none failing), same as prior rounds.

Minor, non-blocking: opening the language toggle in a new tab (cmd/ctrl/middle-click) follows the plain Link href={target}, which has no query string, so the tier isn't carried in that one case. The normal left-click path — the shareable-URL flow the fix targets — works. Not worth blocking.

Every finding across all prior rounds (tco-feed interior-knot range, ranked-secondary hardware drop, unused dashboard-link helper, unreachable date guard, unused config fields, undersized audio controls, unused exactCount, and now the language-toggle tier drop) is resolved. 🟢 LGTM.

  • Diff 69b1530 vs previously-reviewed 8345f56
  • Verify the language-toggle query-preservation fix
  • Check CI status — ✅ green
  • Runtime verify /overview?tier=100/zh/overview?tier=100 — tier preserved, 0 console errors
  • Post review
    · feat/executive-overview

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 69b1530. Configure here.

Comment thread packages/app/src/lib/overview-data.ts Outdated
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @edwingao28's task in 2m 6s —— View job


Re-review — PR #611 Executive Overview page

Re-reviewing the one new commit 03e6359 ("cannot-reach reason requires every speculative bucket unreachable") since my last LGTM on 69b1530. Small data-layer fix (+67 / −16 across 2 files) addressing the last open Bugbot finding ("Wrong infinity reason for gaps").

Finding resolved, fix verified correct:

  • cannot_reach_at_tier is now a whole-platform claim. missingReasonForHeadlineMember takes the reads across all candidate buckets and only reports cannot_reach_at_tier when bucketReads.length > 0 && bucketReads.every((r) => r.boundary === 'unreachable') (overview-data.ts:332). If any one qualified speculative stack merely tops out on the low side (clamped_low — under-swept, not fundamentally unable to reach), the gap correctly downgrades to no_exact_at_tier. This fixes the Bugbot case where nonComparableAsMissing had already nulled the value sort key, letting an FP4 unreachable bucket win over an FP8 clamped_low one and mislabel the reason.

I traced the supporting pieces to confirm the fix is sound, not just plausible:

  • nonComparableAsMissing (overview-data.ts:267) preserves boundary on non-exact reads (only nulls value/evidenceDate), so r.boundary === 'unreachable' is a valid discriminator on the passed reads.
  • Boundary semantics (tco-feed.ts:45): unreachable = tier above the frontier's max interactivity; clamped_low = tier below the min. The new unit test's unreachable fixture (knots at 20–45, below tier 50) and underSwept fixture (knots at 60–90, above tier 50) genuinely produce those two boundaries, so the mixed → no_exact_at_tier and allUnreachable → cannot_reach_at_tier assertions exercise the real branch — not a hand-mocked value.

Runtime verified on localhost:3000 (real read-only DB): /overview?tier=100 renders the full matrix — real deltas vs B200, precision badges, evidence dates, and ∞ chips each carrying their reason in title/aria (no exact @100 result, standard decode only, no 8K/1K data); no ∞% ever rendered; 0 console errors. (The cannot_reach_at_tier path isn't triggered by today's live data, exactly as the finding noted — it's now pinned by the unit test instead.)

CI: green on completed jobs — Lint & Format, Tests (Unit), Code Quality, PR checks all passing; E2E still finishing (none failing).

No new issues introduced. Every finding across all prior rounds (tco-feed interior-knot range, ranked-secondary hardware drop, unused dashboard-link helper, unreachable date guard, unused config fields, undersized audio controls, unused exactCount, language-toggle tier drop, and now the wrong--reason gap) is resolved. 🟢 LGTM.

  • Diff 03e6359 vs previously-reviewed 69b1530
  • Verify the cannot_reach_at_tier reason fix + new unit test (boundary semantics + fixtures traced end-to-end)
  • Check CI status — ✅ green
  • Runtime verify /overview?tier=100 — renders, ∞ reasons present, 0 console errors

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