Skip to content

[PowerX] enable NVL72 smart provisioning on measured compute-module power / 为 NVL72 启用基于实测计算模块功耗的智能预配 - #1190

Open
edwingao28 wants to merge 32 commits into
feat/powerx-article-parityfrom
feat/powerx-nvl72-smart-provisioning
Open

edwingao28 wants to merge 32 commits into
feat/powerx-article-parityfrom
feat/powerx-nvl72-smart-provisioning

Conversation

@edwingao28

@edwingao28 edwingao28 commented Sep 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

flowchart TD
    A[Performance + GPU and Grace/module measurements]
    B[Validate power and select compatible curve at target]
    C[Model rack overhead and PUE]
    D[Apply 10% planning reserve]
    E[Calculate capacity and profit per GW]
    F[Keep provisioned fallback in Compare both]
    A --> B
    B -->|Valid| C --> D --> E
    B -->|Unavailable| F
Loading

NVL72 uses measured module or GPU+Grace power. Measured tables retain GPU-valid rows; profit selects power-valid curves before interpolation, with matched Compare both bars. Guide.

Depends on #1220; collection and calibration pending.

AI model disclosure

GPT-6 (variant unverified): implementation/review/tests; claude-fable-5-1: Chinese review; earlier versions unverified.

Validation

c5a86f7d: 7,383 unit tests (4 skipped) and 195 browser cases pass (EN/ZH, desktop/mobile, history, overlays); typecheck/lint/format pass. No GPU qualification.

  • I have completed the AI model disclosure and kept it current

中文说明

NVL72 采用实测模块功耗,或 GPU 与 Grace 实测功耗。实测表格保留 GPU 功耗有效的记录;利润估算先筛选功耗有效的曲线再插值,Compare both 两根柱子使用同一条曲线。指南。

依赖 #1220;功耗采集和硬件校准仍待完成。

GPT-6 负责实现、审核及测试,精确变体无法核实;claude-fable-5-1 负责中文审核。早期版本无法核实。

c5a86f7d:7,383 项单元测试通过(4 项跳过),195 项浏览器用例通过,覆盖中英文、桌面/手机、历史数据和叠加运行;类型检查、lint 和格式检查通过。未做 GPU 资格验证。


Note

High Risk
Changes admission and math for NVL72 system power, GW-year profit capacity, and public inference view/CSV contracts—areas where telemetry gaps or curve selection bugs directly misstate planning numbers.

Overview
NVL72 “All in Measured” now estimates facility power from validated GPU telemetry plus complete Grace or compute-module readings in the same window, with rack overhead, DLC PUE 1.1, and the existing planning reserve. GB200/GB300 are no longer blanket-unsupported in docs and transforms when CPU-side evidence is present; missing telemetry surfaces as cpu-telemetry / table reasons instead of hiding rows.

Inference / views API: For All in Measured, responses add tableRows that keep every GPU-valid point in scope (including axis-clipped and non-frontier), with y: null, status, and unavailableReason when the system estimate fails; measuredGpuWatts stays populated. CSV for this metric exports tableRows (blank missing values), not only plotted series. Official, date comparison, and unofficial overlays each carry their own tableRows.

Per-GW profit estimator: modeled / compare build throughput and power from a power-valid performance curve at the selected target (no extrapolation across invalid knots); compare pairs bars on the same valid curve and keeps provisioned when measured is unavailable. Charts gain horizontal scroll on narrow viewports (PNG export still full width); the per-SKU unavailable-estimate disclosure list is removed (skipped reasons remain in API/CSV). Tooltips and CSV add power basis / sensor / profile metadata; NVL72 help text moves into option help and captions.

Docs & ops: Power boundary labels align with GPU Level Measured / All in Measured; powerx-system-power is rewritten with a Chinese twin. Offline export uses per-hardware default PUE and NVL72 columns; Python profile generation is dropped in favor of app-owned provenance (update-system-power-provenance.ts). NEXT_PUBLIC_APP_SOURCE_REF pins GitHub doc/model links in tooltips.

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

…timate

Pin inferencex_power_model 963ead8b (feat/gb200-nvl72-rack-model) and emit
gb200/gb300 rack profiles plus 204 Python parity cases; the x86 chassis
profiles and their 292 cases regenerate byte-identically. Port the rack
evaluation to TypeScript with the source rounding order (rack AC rounded
before PUE). modelSystemPower admits NVL72 rows as compute trays (one host,
four GPUs, two Grace sockets) whose module or GPU-board + Grace-socket watts
are measured: cpu_power_valid=1 and the Grace-side keys are required, the
Grace side is never modelled, DLC PUE 1.1 applies once at rack AC, a partial
tray extrapolates only the GPU-board share, and the result carries
topologyBasis 'nvl72-trays', measuredBasis, sensorKind and the new
cpu-telemetry reason. x86 rows are unchanged.

中文:固定 inferencex_power_model 963ead8b(feat/gb200-nvl72-rack-model),
生成 gb200/gb300 机架 profile 和 204 条 Python 对照用例,x86 机箱 profile 及
其 292 条用例逐字节不变。TypeScript 按原模型的舍入顺序移植机架计算(机架交流
功率先舍入再乘 PUE)。modelSystemPower 将 NVL72 行按计算 tray(单主机、4 张
GPU、2 个 Grace socket)接纳,输入为实测模块功耗或 GPU 板卡 + Grace socket
功耗:要求 cpu_power_valid=1 及 Grace 侧指标,Grace 侧从不建模,DLC PUE 1.1
在机架交流侧只应用一次,部分分配的 tray 仅外推 GPU 板卡份额,结果新增
topologyBasis 'nvl72-trays'、measuredBasis、sensorKind 和 cpu-telemetry
原因。x86 行为不变。
…nd name the power basis

Planning kW/GPU now admits nvl72-trays estimates whose trays are all fully
measured next to the eight-GPU single-node chassis; partial trays stay
rejected. Two frontier knots must share the same measured basis and sensor
kind or the bracket stays unavailable. Modeled rows carry powerSource
(topology, measured basis, sensor kind, PUE, pinned profile path, revision
and source SHA-256); the bar tooltip, a caption line and three CSV columns
name it per row. English strings for x86 rows are byte-identical.

中文:规划 kW/GPU 除八卡单节点机箱外,接受全部 tray 完整实测的 NVL72 估算,
部分 tray 仍被拒绝;两个前沿数据点的实测口径或传感器类型不同时保持不可用。
估算行携带 powerSource(拓扑、实测口径、传感器类型、PUE、固定 profile 路径、
版本和源文件 SHA-256),柱形提示、标注行和三列 CSV 逐行标出;x86 行英文字符串
逐字节不变。
…onstants, ingest and the API reference

avg_cpu_socket_power_w, avg_total_cpu_power_w, total_cpu_energy_j,
avg_total_module_power_w and total_module_energy_j join
MEASURED_POWER_METRIC_KEY_LIST (withheld with power_valid=0 like every
measured key); cpu_power_valid joins the contract discriminators and is
normalized as a verdict independent of power_valid. extractPowerAudit keeps
a bounded power_audit.cpu block matching the consumer's audit_summary.
The API registry documents the six keys, the cpu audit schema, and a
bilingual measured-power note and example; no route catalog digest changes.

中文:五个 CPU 侧实测指标加入 MEASURED_POWER_METRIC_KEY_LIST(与其他实测键一样
在 power_valid=0 时移除);cpu_power_valid 加入契约字段并按独立于 power_valid
的验证结论归一化;extractPowerAudit 保留与消费端 audit_summary 一致的有界
power_audit.cpu。API 文档新增六个键的说明、cpu 审计 schema 以及中英文
measured-power 说明与示例;路由目录摘要无需刷新。
…ress spec

profit-fixtures gains an NVL72 SKU (one four-GPU tray with CPU-side keys and
the module sensor) kept out of PROFIT_SKUS so existing bar counts hold. The
new case checks the control stays hidden while the gate is locked, then
prices the tray on Measured + modeled, names the measured module basis and
DLC PUE 1.1 in the caption, and leaves GB300 unavailable.

中文:profit-fixtures 新增 NVL72 SKU(单个四卡 tray,含 CPU 侧指标与模块传感器),
不加入 PROFIT_SKUS 以保持现有柱形数量。新用例验证功能开关锁定时控件隐藏,解锁后
按实测 + 估算为该 tray 定价,标注行写明实测模块口径与液冷 PUE 1.1,GB300 保持不可用。
Measured input and admission rules, the modeled residual table with the
UNVERIFIED parameters and their ranges, the shelf overflow bound, and the
Profit Estimator gate rules, in English and in the 中文说明 section. The
Profit Estimator paragraphs now name the per-hardware PUE policy, the
same-basis knot rule and the CSV provenance columns in both languages.

中文:新增 NVL72 机架估算一节:实测输入与接纳条件、含 UNVERIFIED 参数及范围的
建模残差表、电源架容量上限和利润估算器门槛规则,中英文同步;利润估算器段落
双语补充按硬件取值的 PUE 策略、同口径数据点规则和 CSV 出处列。
… one rack

- ingest withholds the CPU-side keys on cpu_power_valid != 1 and GPU-side keys on power_valid = 0; mapper tests cover all four verdict combinations; the power manifest carries cpu_power_valid
- exporter shares defaultSystemPue with the dashboard (1.3 chassis, 1.1 DLC NVL72); NVL72 rows carry the rack profile, measured basis, sensor kind and CPU-side inputs; x86 rows byte-identical
- chart tooltip names NVL72 compute trays and the measured basis instead of eight-GPU chassis (en/zh)
- heterogeneous measured trays fold into one rack at their mean; the shelf curve is evaluated once at rack DC load, matching gb200_nvl72_rack_power; estimateRackPower and parity cases unchanged

中文:摄取按 cpu_power_valid 独立清除 CPU 侧指标,GPU 侧仍按 power_valid,mapper 测试覆盖四种组合,功耗清单附带 cpu_power_valid;导出器与仪表板共用 defaultSystemPue(机箱 1.3、液冷 NVL72 1.1),NVL72 行补充机架 profile、实测口径、传感器类型与 CPU 侧输入,x86 行逐字节不变;图表提示改用 NVL72 计算 tray 措辞并标出实测口径(中英文);多 tray 按均值折算为整机架,电源架曲线只在机架直流负载处求值一次,与 Python 模型一致,estimateRackPower 与对照用例不变。
…with multinode chassis planning

Brings in the base's deleted-run skip for artifact backfills, the
`uniform-hosts` topology basis (aggregate multinode chassis modeled at the
deployment mean) and the per-host `power_audit_` telemetry ingest, and
reconciles them with the NVL72 tray path:

- `modelSystemPower`: the `uniform-hosts` branch keeps the base's x86
  semantics unchanged and now fills the shared `MeasuredUnit` list; it is
  chassis-only (`!rack`), so an aggregate multinode NVL72 row without a
  per-worker array stays `topology`-unavailable rather than inferring a
  tray count from the GPU total. The supported-estimate union carries
  `'single-node' | 'worker-hosts' | 'uniform-hosts'` beside `'nvl72-trays'`.
- Profit planning gate: every fully measured estimate is admitted
  (`chassisBasis: 'full'`); `nvl72-trays` estimates keep the measured-basis
  and sensor-kind source label, every chassis topology is labeled `chassis`.
- Tooltip: the uniform-hosts note renders in the same position as on the
  base, alongside the NVL72 tray copy; English and Chinese x86 strings are
  unchanged.
- Docs and tests from both sides kept; new tests pin the chassis-only
  uniform-hosts decision and the `chassis` label for multi-host sources.

中文:合并 feat/powerx-db-ingest(跳过 GitHub 已删除的 run、聚合多节点机箱按
部署平均功耗建模的 `uniform-hosts` 拓扑基准、按主机拆分的 `power_audit_`
telemetry 入库),并与 NVL72 tray 路径对齐:`uniform-hosts` 分支保持 x86
语义不变、仅对机箱硬件生效,无 worker 数组的 NVL72 聚合多节点行仍按
`topology` 不可用;Profit Estimator 规划闸门接受所有完整实测的估算,
NVL72 tray 保留实测基准与传感器标签,机箱拓扑统一标为 `chassis`;tooltip
的 uniform-hosts 说明位置与基线一致,x86 中英文文案不变;两侧文档与测试
均保留,并新增测试固定上述决策。
… array

The Kimi K3 GB200 aggregate producer (dynamo-vLLM TP16, sixteen GPUs on four
trays) emits no `workers` array, so `modelSystemPower` rejected every such row
as `topology` and the tray path never reached the Profit Estimator. Generalize
the base's `uniform-hosts` branch from eight-GPU chassis to the unit size of
the hardware: on GB200/GB300, a non-disaggregated multinode row without a
worker array is `gpuCount / 4` compute trays, each fed the deployment mean
(module total per tray when the module keys are present, otherwise GPU-board
plus Grace-socket watts per tray, exactly as on the worker-hosts tray path),
with `chassisBasis: 'full'`, `topologyBasis: 'nvl72-trays'` and the usual
measured basis and sensor kind. A GPU total that does not fill whole trays is
`gpu-count`; the tray count must agree with the Grace-socket count recovered
from the CPU-side keys and, when the CPU leg recorded it, with
`power_audit.cpu.observed_sockets`, otherwise `cpu-telemetry`. The x86
uniform-hosts path, the worker-hosts tray path and every English string are
unchanged. Tests cover module and Grace-socket bases, both socket mismatches,
the uneven count and the Profit Estimator source label; the system-power doc
records the rule in English and Chinese.

中文:Kimi K3 GB200 聚合采集端(dynamo-vLLM TP16,16 张 GPU 分布在 4 个 tray)
不输出 `workers` 数组,`modelSystemPower` 一律按 `topology` 拒绝,tray 路径无法进入
Profit Estimator。现将基线的 `uniform-hosts` 分支从八卡机箱推广到硬件的单元大小:
GB200/GB300 上无 worker 数组的非 disagg 多节点行按 GPU 总数 ÷ 4 推算 tray 数,每个
tray 取部署平均值(有模块指标时用模块总功耗 ÷ tray 数,否则用 GPU 板卡 + Grace socket
每 tray 功耗,与 worker-hosts tray 路径一致),`chassisBasis: 'full'`、
`topologyBasis: 'nvl72-trays'`,实测口径与传感器类型不变。GPU 总数无法填满整数个
tray 时为 `gpu-count`;tray 数须与 CPU 侧指标推算的 Grace socket 数一致,且在 CPU
采集记录了 `power_audit.cpu.observed_sockets` 时与之一致,否则为 `cpu-telemetry`。
x86 uniform-hosts 路径、worker-hosts tray 路径及所有英文文案不变。测试覆盖模块与
Grace socket 两种口径、两类 socket 不一致、非整数 tray 数以及 Profit Estimator 的
来源标签;系统功耗文档中英文同步。
…-side comments

Three comments referenced a task-tracker ticket that does not exist in this
repository; point them at the InferenceX producer contract instead. No code
change.

中文:三处注释引用了仓库中不存在的本地工单,改为指向 InferenceX 的生产端契约文档;无代码变更。
@vercel

vercel Bot commented Sep 20, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
inferencemax-app Ready Ready Preview Oct 1, 2026 10:10pm UTC

Request Review

@edwingao28
edwingao28 marked this pull request as ready for review September 21, 2026 08:07
@github-actions

github-actions Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

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


Review complete — 🟢 LGTM, no blocking issues found

I reviewed the full diff against origin/feat/powerx-db-ingest, traced the new logic paths, and verified the Profit Estimator renders live at http://localhost:3000/profit-estimator-per-gigawatt (GB300/GB200 NVL72 SKUs plot correctly, 0 console errors).

Todo

  • Gather context (diff vs base, changed files)
  • Check CI status
  • Review core logic (modeled-system-power, system-power-model, profit-power, benchmark-mapper, metric-keys)
  • Review UI changes (ProfitEstimator, tooltips) + runtime verification
  • Review tests & docs coverage
  • Review Chinese copy
  • Post findings

What I verified

  • Rack topology invariants (system-power-model.profiles.json): gb200/gb300 both = 4 GPUs/tray × 18 trays = 72 GPUs, 2 Grace/tray. Consistent with unitGpuCount, the socketCount === units.length × graceSocketsPerComputeTray gate, and the "rack AC ÷ 72 GPUs" normalization (chassisAcWattsPerGpu reduces to rackAc/72 regardless of units.length). ✅
  • Fail-closed scrubbing (benchmark-mapper.ts): CPU-side keys are governed by cpu_power_valid independently of power_valid; scrubWithheldPowerMetrics correctly excludes the CPU subset from the GPU-side delete and vice-versa; absent verdict → withheld (no legacy rows predate it). Consistent across metric-keys.ts, power-publication.ts manifest, and the estimator's admission gate. ✅
  • Planning gate (profit-power.ts): only fully-measured units (chassisBasis === 'full') become planning figures; interpolation refuses to mix two bases between knots (powerSourceKey guard); partial/extrapolated trays are correctly excluded from pricing. ✅
  • Module vs. gpu-plus-grace basis: module reading is never scaled (covers whole tray incl. idle GPUs); gpu-plus-grace adds the sourced regulator-loss allowance on the GPU share only. Per-tray means divide deployment totals by units.length consistently. No division-by-zero (all units branches guarantee ≥1 element before modelTray). ✅
  • Both large JSON files parse; the offline exporter's per-hardware default PUE selection (1.3 air-cooled / 1.1 DLC) matches the dashboard's defaultSystemPue, so article figures track chart hovers. ✅
  • CSV/tooltip/label plumbing: column counts stay aligned when includeBasis is on (3 headers ↔ 3 basisColumns); provisioned rows (compare mode) fall back cleanly. useMemo/useCallback dep arrays updated for the new locale/powerBasisNotes reads. ✅
  • Test coverage: new functions/paths all have colocated tests (profit-power.test, modeled-system-power.test, system-power-model.test, benchmark-mapper.test, tooltip-utils.test, api-documentation.power.test, metric-keys.test, plus the Cypress basis-control spec). No missing-test gaps. ✅

Chinese copy

The diff touches user-visible zh strings in ProfitEstimatorChart.tsx, ProfitEstimatorDisplay.tsx, and tooltipUtils.ts (功耗口径 / 实测 + 估算 / 稳压损耗由模型估算 / tray assumptions, etc.). All are semantically faithful and read as natural technical Chinese, with product/hardware/profile/socket/tray terms correctly kept in English per the copy guide. No fidelity or register issues — nothing requiring maintainer confirmation.

Notes (non-blocking)

  • The tests-unit / tests-e2e / lint CI workflows haven't reported on this PR head yet (only Vercel + Claude route). The PR body states they pass locally; worth confirming the merge-gate checks are green before merge.
  • Runtime verification of the measured NVL72 path is not possible yet — no live row carries the CPU leg, so those rows report cpu-telemetry unavailable as the PR documents. The estimator's official-frontier-only scope makes the ?unofficialrun= overlay rule correctly N/A.

This is a carefully structured, well-tested change. No changes requested.
· feat/powerx-nvl72-smart-provisioning

@edwingao28
edwingao28 changed the base branch from feat/powerx-db-ingest to master September 21, 2026 08:13
@github-actions

github-actions Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

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


Claude Code Review — finalizing

  • Gather context (diff, CI status, dev server)
  • Review NVL72 rack model & planning gate (profit-power.ts, modeled-system-power.ts)
  • Review gpu-metrics-point API route + measured-metric config + power-compare utils
  • Runtime: Profit Estimator (NVL72 bars), boundaries chart, roles chart, power timeline — all render real data, 0 console errors
  • ChartDisplay timeline routing + boundary disclosures verified
  • Deep static review of large files (PowerTimeline, ScatterGraph, gpu-metrics route) — awaiting subagent
  • Post findings

Integrate the released partial-chassis rules, retain provisioned comparison rows when measured power is unavailable, and validate complete Grace or module provenance.

整合已发布的部分卡机箱规则;实测功耗缺失时保留预配功耗对比结果,并校验完整 Grace 或 module 遥测来源。
Preserve measured module and Grace provenance, retain provisioned comparisons when measured power is unavailable, and align API documentation, exports and collapsed assumptions.

中文:将 NVL72 规划整合到统一 PowerX 界面,保留模块及 Grace 实测来源;实测功耗不可用时仍显示预配对比,并同步 API 文档、导出与折叠说明。
@edwingao28
edwingao28 changed the base branch from master to feat/powerx-article-parity September 30, 2026 00:22
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity. Traced the new logic paths and verified the Profit Estimator renders live at /profit-estimator-per-gigawatt (GB300/GB200 NVL72 SKUs plot real data, 0 console errors).

  • Gather context (diff vs feat/powerx-article-parity, CI status)
  • Review core logic (system-power-model, modeled-system-power, profit-power, benchmark-mapper)
  • Runtime verification (Profit Estimator renders, 0 console errors)
  • Review tests + Chinese copy
  • Post findings

What I verified

  • Rack topology invariants (system-power-model.profiles.json): gb200/gb300 both = 4 GPUs/tray × 18 trays = 72 GPUs, 2 Grace sockets/tray. Consistent with unitGpuCount, the socketCount === units.length × graceSocketsPerComputeTray gate, and the rack-AC ÷ 72 normalization (per-GPU reduces to rackAc/72 for any units.length). ✅
  • Fail-closed scrubbing (benchmark-mapper.ts / metric-keys.ts): CPU-side keys are a subset of MEASURED_POWER_METRIC_KEY_LIST and governed by cpu_power_valid independently of power_valid; the GPU-side delete correctly excludes the CPU subset (!CPU_SIDE_POWER_METRIC_KEYS.has(key)) and vice-versa; absent verdict → withheld. power-publication.ts manifest carries cpu_power_valid. ✅
  • Planning gate (profit-power.ts): powerSourceKey refuses to interpolate between knots with different bases (incompatible-power-basis); cpu-telemetry → no-cpu-power; source provenance (pue/modelPath/revision/sha, measuredBasis/sensorKind) threaded into tooltips/CSV. The compare-mode change (provisioned row pushed before the modeled-availability check) is intentional and tested: a SKU with no measured leg still shows its provisioned bar and is added to skipped with the reason (profit-power.test.ts:267-270). ✅
  • Tray modeling (modeled-system-power.ts): module reading never scaled (covers whole tray incl. idle GPUs); gpu-plus-grace adds the regulator allowance on the GPU share only; heterogeneous trays averaged before a single shelf-curve evaluation; no division-by-zero (units guaranteed ≥1 before modelTray). ✅
  • Test coverage: all new functions/paths have colocated tests (profit-power.test, modeled-system-power.test, system-power-model.test, benchmark-mapper.test, tooltip-utils.test, api-documentation.power.test, metric-keys.test, plus the Cypress basis spec). No missing-test gaps. ✅

Chinese copy

The /zh tooltip and chart strings (功耗口径 / 实测 GPU 板卡 / 稳压损耗由模型估算 / tray assumptions) are semantically faithful and read as natural technical Chinese; tray/socket/module/NVSwitch/DPU correctly kept in English per the copy guide. No fidelity or register issues — nothing requiring maintainer confirmation.

Notes (non-blocking)

  • CI on this head: Lint & Format and Zizmor green; Tests (Unit/E2E/Skills) still in progress at review time — confirm they finish green before merge.
  • The measured NVL72 path can't be exercised at runtime yet — no live row carries the CPU leg, so those rows correctly report cpu-telemetry unavailable as the PR documents. The official-frontier-only scope makes the ?unofficialrun= overlay rule N/A.

Carefully structured, well-tested change. No changes requested.
· feat/powerx-nvl72-smart-provisioning

@blacksmith-sh

blacksmith-sh Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Found 3 test failures on Blacksmith runners:

Failures

Test View Logs
Landing page performance/does not load the decorative circuit mask on mobile View Logs
Power boundary labels/keeps metric selection and the modeled-component note clear (en) View Logs
Power boundary labels/keeps metric selection and the modeled-component note clear (zh) View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

中文:将运行级标尺分享与移动端提示框修复同步到 NVL72 视图,保留实测传感器校验和模型边界。
中文:同步整合 UI 的 Chrome 功耗菜单测试修正,保留 NVL72 模型与实测传感器校验。
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity. Focused on what's new since the prior LGTM reviews and on the 3 Blacksmith test failures reported above.

  • Gather context (diff + new commits vs feat/powerx-article-parity)
  • Check CI status + investigate the 3 reported test failures
  • Review new/changed logic (modeled-system-power, system-power-model, profit-power, benchmark-mapper, tooltip/CSV plumbing)
  • Runtime verification (Profit Estimator, 0 console errors)
  • Chinese copy pass on the touched /zh strings
  • Post findings

The 3 Blacksmith failures are not attributable to this diff

I traced each failing test to the file it lives in and the component it exercises, then diffed those against the base:

Failing test Spec file Component under test
decorative circuit mask on mobile cypress/e2e/landing-performance.cy.ts landing page
power boundary labels (en) cypress/component/measured-metric-controls.cy.tsx MeasuredMetricControls + measured-metric-config + power-basis
power boundary labels (zh) same same

git diff origin/feat/powerx-article-parity...HEAD shows all five of those files are UNCHANGED on this branch (spec files, MeasuredMetricControls.tsx, measured-metric-config.ts, power-basis.ts). The metric-keys additions in this PR are DB keys (avg_total_module_power_w, …), not chart y-axis selector options, so the component's hardcoded option list (y_measuredAvgPower / y_gpuProvisionedWatts / …) is unaffected. These read as flaky/environmental on the Blacksmith runners (mobile decorative-mask load; Radix-menu + cy.screenshot + viewport-width assertions), not a regression from this PR. Worth a re-run to confirm green, but not blocking.

⚠️ The dedicated tests-unit / tests-e2e / lint merge-gate workflows haven't reported on this exact head yet (only Vercel + Claude route are green). Confirm those finish green before merge — that's the authoritative signal, not this comment.

What I verified in the diff

  • CPU-side fail-closed scrubbing (benchmark-mapper.ts): scrubWithheldPowerMetrics deletes the CPU subset whenever cpu_power_valid !== 1 (absent verdict → withheld) independently of power_valid, and the GPU-side delete correctly excludes the CPU subset (!CPU_SIDE_POWER_METRIC_KEYS.has(key)). Return value stays keyed to GPU withholding for the worker-telemetry drop. extractPowerAuditCpu bounds sensor kind / source length / socket counts and drops unrecognized kinds. ✅
  • Rack model (system-power-model.ts): interpolateEfficiency is a faithful refactor of the old inline chassis loop (same clamp-outside / linear-between behavior at every knot boundary — traced the edge cases). estimateRackPower guards pue < 1, non-finite/≤0 inputs, and shelf over-capacity; regulator allowance applied to the GPU-board share only on gpu-plus-grace, zero on module. ✅
  • Tray modeling (modeled-system-power.ts): module reading is never scaled as model input (whole-tray sensor); the deploymentAcWatts share scaling by measuredGpus/unitGpuCount is a separate, intended attribution of the measured-GPU share, consistent for both bases. Socket-count gate (socketCount === units.length × graceSocketsPerComputeTray) and the aggregate-multinode observedSockets cross-check are enforced. No division-by-zero (units ≥ 1 before modelTray). ✅
  • Planning gate (profit-power.ts): powerSourceKey refuses to interpolate across knots with different bases (incompatible-power-basis); compare-mode pushes the provisioned bar before the modeled-availability check so a SKU with no measured leg still shows its provisioned bar and lands in skipped — matches profit-power.test.ts. ✅
  • UI/CSV plumbing (ProfitEstimatorDisplay.tsx): csvPowerHeaders (3) ↔ basisColumns (3) stay aligned; useMemo/useCallback dep arrays updated for the new locale / powerBasis / powerBasisNotes reads. ✅
  • Runtime: /profit-estimator-per-gigawatt renders real data, 0 console errors (one benign unrelated preload/crossorigin warning). The measured NVL72 path can't be exercised live yet — no row carries the CPU leg, so those rows report cpu-telemetry unavailable as documented; official-frontier scope makes the ?unofficialrun= rule N/A.
  • Test coverage: every new function/path has colocated tests (modeled-system-power.test, system-power-model.test, profit-power.test, benchmark-mapper.test, tooltip-utils.test, api-documentation.power.test, metric-keys.test, Cypress basis spec). No gaps. ✅

Chinese copy

The touched /zh strings (功耗口径 / 实测模块功耗 / 稳压损耗由模型估算 / 实测 GPU 板卡 + Grace socket 功耗 / tray assumptions / new skip reasons) are semantically faithful and read as natural technical Chinese, with module/socket/tray/DPU/NVSwitch/profile/PUE correctly kept in English per the copy guide. No fidelity or register issues — nothing requiring Chinese-maintainer confirmation.

Carefully structured, well-tested change. No changes requested.
· feat/powerx-nvl72-smart-provisioning

中文:将 NVL72 参考模型固定到最新修订,重新生成来源哈希与版本信息;所有机箱、机架参数及参考用例数值保持不变。
中文:将 PowerX 系统功耗与智能容量规划说明拆分为完整的中英文文档,补充 Kimi K3 缺失结果、NVL72 计算示例和模型更新流程,并明确参考源码尚未发布及校准边界。
Include the parent snapshot identity repair without changing the child scope.

中文:将父分支的 PowerX 曲线对比来源修复同步至NVL72 建模,保持当前 PR 的改动范围。
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the single new commit since the prior LGTM at 55d43315.

  • Gather context (new commits since last review)
  • Review changed logic
  • Check CI status
  • Runtime verification (N/A — see below)
  • Chinese copy pass (N/A — see below)
  • Post findings

What changed since the last review

Only one new commit: the merge 78bbbe7e "chore: sync PowerX comparison fix into NVL72 modeling" (merging parent 75b6f61a). The parent-branch comparison-fix files (equal-service-comparison.ts, powerx-compare.cy.ts, inference/route.test.ts, docs/dashboard-readonly-views.md, …) cancel against the base — the net PR diff is still the same 37 files.

The only net delta the merge introduces into the PR's own file set is a docs/skills sync:

  • packages/skills/skills/inferencex-api/references/dashboard-views.md (+5 lines): clarifies source-snapshot grouping — stitched points keep their original producer provenance; differing telemetry producer/exporter hashes don't split a snapshot; and reworded "bridge different runs" → "bridge different sources".
  • packages/skills/skills/inferencex-api/integrity.json: the dashboard-views.md digest bump.

No production code, no user-visible Chinese strings, and no UI surface are touched by this commit, so the Playwright runtime check and the /zh copy review don't apply here.

Verified

  • Integrity guard is consistent: recomputed sha256(dashboard-views.md) = 666d6fec…dab41e, which exactly matches the recorded digest in integrity.json. The skills manifest won't fail its integrity check. ✅
  • Scope containment: the merge's other files are not in the net diff (git diff base...HEAD file set is identical to the 55d43315 review), so the previously-reviewed PowerX/NVL72 logic (modeled-system-power.ts, system-power-model.ts, profit-power.ts, benchmark-mapper.ts, tooltip/CSV plumbing) is unchanged since the last comprehensive pass. ✅

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by shared-tree PR [PowerX] expose footer navigation and power controls / 开放页脚入口与功耗控件 #1228 per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the sync. No changes requested.
· feat/powerx-nvl72-smart-provisioning

Correct measured-power eligibility, energy scaling, and cooling-specific PUE in chart copy and model documentation. Show the app model digest and cover English/Chinese desktop and mobile states.

中文:修正 NVL72 图表说明,使其与实测输入一致。更新实测功耗准入、能耗换算及不同冷却方式的 PUE 说明,显示模型摘要,并覆盖中英文桌面和手机状态。
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the single new commit since the prior LGTM at 78bbbe7e.

  • Gather context (new commits since last review, CI status)
  • Review new/changed logic
  • Runtime verification
  • Chinese copy pass
  • Post findings

What changed since the last review

Only one new commit: b41c0e41 "fix: align NVL72 chart explanations with measured inputs". It is a copy/documentation alignment change — no model math, admission gates, or planning logic are touched:

  • ChartDisplay.tsx — rewrites the systemPowerAssumptions, noSystemPowerData, and utility-modeled boundary-disclosure strings (EN + ZH) so they describe the NVL72 rack path (measured Grace/module + modeled rack overhead) and the two cooling-specific PUEs, and shows a 12-char model-revision label.
  • power-basis.ts — updates the ALL_IN_MEASURED_EMPTY empty-state copy to say NVL72 needs complete Grace/module telemetry (dropping the old "not NVL72 systems" carve-out).
  • docs/data-transforms.md, docs/powerx-permanent-view.md — prose sync to the same story.
  • scatter-graph.cy.tsx — new Cypress cases exercising the copy.

Verified

  • DLC_SYSTEM_PUE import is real: AIR_COOLED_SYSTEM_PUE = 1.3 / DLC_SYSTEM_PUE = 1.1 are both exported from modeled-system-power.ts and match the copy ("PUE 1.3 air-cooled, 1.1 NVL72"). ✅
  • modelRevisionLabel is correct: SYSTEM_POWER_MODEL_REVISION = app-sha256:99b252a0422c…; the label strips ^app-sha256: and slices 12 → 99b252a0422c, so the note never renders the app-sha prefix — consistent with the new test's .and('not.contain.text', 'app-sha') assertion. ✅
  • Test coverage for the copy change: the new/updated Cypress cases pin the NVL72 telemetry sentence, both PUE values, the absence of the old NVL72 carve-out text, and desktop+mobile (EN/ZH) rendering without overflow. No untested new behavior. ✅
  • Runtime: /inference renders real data, 0 console errors (1 benign unrelated preload/crossorigin warning). The copy lives behind the "All in Measured" boundary; no logic path changed.

Chinese copy

The reworded /zh strings — 基于已验证遥测的 8K / 1K 估算…数据中心功耗只应用一次 PUE:风冷机箱为 1.3,NVL72 为 1.1, the utility-modeled disclosure (每 GPU 分摊的数据中心功耗 = 每 GPU 分摊的 IT 功耗估算 × PUE …), and the reworded ALL_IN_MEASURED_EMPTY (NVL72 还需要同一测量窗口内完整的 Grace 或 module 遥测) — are semantically faithful to the English and read as natural technical Chinese, with Grace/module/NVL72/PUE/GPU/token correctly kept in English per the copy guide. No fidelity or register issues — nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the copy alignment. No changes requested.
· feat/powerx-nvl72-smart-provisioning

中文:同步 NVL72 仪表板父分支,保留对比控件移除结果与现有功耗模型,并更新 API 技能完整性清单。修复新版 Chrome 中滚动操作改变 Cypress 断言对象的问题。
Reserve readable bar spacing, retain the SVG across scrolling thresholds, and export the full plot without moving the live chart.

中文:为密集利润对比图保留足够的柱形间距,在窄屏中启用图内横向滚动,并保持完整 PNG 导出与固定说明区域。切换滚动状态时保留 SVG,避免临界宽度下图形消失。
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on what's new since the prior LGTM at b41c0e41.

  • Gather context (new commits since last review)
  • Check CI status
  • Review new/changed logic
  • Runtime verification (Profit Estimator, narrow viewport)
  • Chinese copy pass
  • Post findings

What changed since the last review

Three new commits; only one touches production code:

  • 3278b48b "fix: keep dense profit comparison charts readable" — the substantive change. Adds an in-chart horizontal scroller so bars keep a readable minimum step (MIN_BAR_STEP_PX = 96) instead of being crushed on narrow viewports, and keeps the SVG mounted across the scroll on/off threshold so the chart doesn't disappear at the critical width.
  • 517145bb "synchronize NVL72 dashboard with updated parent" — a parent-branch sync (PowerServiceComparison → PowerAnalysisPanels refactor, url-state/ChartControls reconciliation). Those files cancel against the base — the net PR diff is still the documented 49-file set; none of the removed/added parent files appear in it.
  • 2f9b6202 — one-line skills integrity.json digest bump. Trivial.

What I verified in 3278b48b

  • Width/scroll derivation (ProfitEstimatorChart.tsx): chartWidth = max(dimensions.width, rows.length × 96 + minimumMargin.left + minimumMargin.right), and all downstream layout (labelLayout, margin, bandwidth, yDomain) is recomputed from chartWidth with matching useMemo dep arrays — no stale closures. The constant floor (rows.length × 96 + margins) is independent of dimensions.width, so chartWidth = max(measured, CONST) converges and can't feed back into an unbounded growth loop. enabled: chartWidth > dimensions.width correctly gates the scroller. ✅
  • SVG retention across threshold (d3-chart-wrapper.tsx): when scrollablePlot is provided the plot element is always rendered inside the same [data-chart-scroll] wrapper; only the wrapper's className/tabIndex/role/aria-label toggle with enabled, so the SVG node is never remounted when scrolling flips on/off. Pinned exactly by the new Cypress case (expect($current[0]).to.equal(svg) at ±1px of the threshold). Keyboard handler guards event.target !== event.currentTarget so arrow keys only scroll when the region itself is focused. ✅
  • Export (useChartExport.ts): the clone selector was correctly widened to ':scope > .flex, [data-chart-scroll] > .flex' to find the plot in both the scrollable and non-scrollable DOM shapes; the scroller clone is forced to fit-content/overflow:visible and scrollLeft = 0 so the full plot exports regardless of live scroll position. The new useChartExport.test.ts case asserts the live chart is untouched (chart.innerHTML === original, liveScroller.scrollLeft === 250 preserved) for both scrolling states. ✅
  • Test coverage: new/updated colocated and Cypress tests cover the threshold SVG retention, phone-viewport label non-overlap, loss-label retention in the scrollable plot, and export behavior. No missing-test gaps for the new code. ✅
  • Runtime: loaded /profit-estimator-per-gigawatt at a 400px viewport — bars render real data with readable spacing, the "Scroll horizontally to view the full chart." hint appears, 0 console errors (only the pre-existing benign left-pattern-full.svg preload/crossorigin warning).

Chinese copy

The only new user-visible zh string is scrollHint: '横向滚动查看完整图表。' — a faithful, natural rendering of "Scroll horizontally to view the full chart." No fidelity or register issues; nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the readability/scroll change. No changes requested.
· feat/powerx-nvl72-smart-provisioning

@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 3278b48. Configure here.

Comment thread packages/app/src/components/calculator/ProfitEstimatorDisplay.tsx Outdated
Group unavailable notices by the exact retained provisioned result, preserving configuration and history identity without changing estimates or API data.

中文:按实际保留的预配置功耗估算区分未定价 SKU 与缺少实测加建模结果的提示,避免将没有基准估算的配置误标为仅缺少实测功耗。保留现有 GPU 与 Grace 功耗回退行为。
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the Cursor Bugbot finding on 3278b48b and the single new commit since the prior LGTM.

  • Gather context (new commits, CI status)
  • Investigate Cursor Bugbot finding (compare skip mislabeling)
  • Review the fix + its test coverage
  • Runtime verification
  • Post findings

The Cursor Bugbot finding is already fixed by 84b9d53d

Bugbot flagged (on 3278b48b) that compare mode prefixed every skipped SKU with modeledUnavailable, even baseline-priced failures (outside-measured-range, no-cost, no-token-mix, no-power) that are pushed to skipped before a provisioned bar is ever added — so a SKU that couldn't be priced at all was mislabeled as merely "missing a measured estimate".

The follow-up commit 84b9d53d "fix: distinguish unpriced profit estimates from missing power" resolves it. powerUnavailable (ProfitEstimatorDisplay.tsx:1374-1395) now partitions the skip list by whether a provisioned bar actually exists for that SKU:

const entries =
  powerBasis === 'compare' &&
  fullEstimate.rows.some((priced) => priced.resultKey === `${row.resultKey}__provisioned`)
    ? measuredUnavailable   // priced fine; only the modeled/measured leg failed
    : unpriced;             // baseline itself failed → "Not priced:"

I traced this against estimateProfitByPower (profit-power.ts:159-180): the baseline-failure path (!isProfitEstimatorRow(baseline) at 159-162) pushes to skipped and continues before the compare-mode provisioned bar is pushed (163-169), so those rows have no __provisioned row and correctly land in unpriced. The measured-leg failure (170-180, and the modeled re-price failure at 187-190) only happens after the provisioned bar exists, so those land in measuredUnavailable. resultKey matches exactly (baseline.resultKey === result.resultKey). Correct partition. ✅

Test coverage is present: a new en/zh e2e case (profit-estimator.cy.ts, "distinguishes unpriced SKUs from missing measured-power estimates") stubs an unpriced SKU (H200) alongside missing-measured NVL72 SKUs (B300/GB300) and asserts H200 appears under "Not priced:" / 未定价: while B300/GB300 appear under "Measured + modeled unavailable:" / 实测加建模估算不可用: — exactly the Bugbot scenario, both locales. ✅

Chinese copy

The skip-notice split strings (未定价:, 实测加建模估算不可用:, 同一组基准测试数据点缺少有效功耗, 缺少完整的 Grace 或 module 功耗) are semantically faithful and read as natural technical Chinese, with Grace/module correctly kept in English per the copy guide. No fidelity/register issues; nothing requiring Chinese-maintainer confirmation.

Runtime

/profit-estimator-per-gigawatt?c_power=compare renders real data, 0 console errors (1 benign pre-existing preload/crossorigin warning). The measured NVL72 path still can't be exercised live — no row carries the CPU leg, so those rows report cpu-telemetry unavailable as documented; official-frontier scope makes the ?unofficialrun= rule N/A.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

The Bugbot finding is resolved and tested. No changes requested.
· feat/powerx-nvl72-smart-provisioning

Enable the existing AgentX model option in shared chart transforms while
keeping the standalone chassis AC metric scoped to 8K/1K. Preserve valid
multi-node rows across charts, tables, history, overlays and the public view.

简体中文:整体实测功耗复用现有 AgentX 模型选项,保留符合条件的多节点
曲线与表格记录;独立机箱交流功耗指标仍仅适用于 8K/1K。精简中英文指南,
说明操作步骤、遥测要求和模型假设,移除 PR 与交付历史。
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the single new commit since the prior LGTM at 84b9d53d.

  • Gather context (only new commit: c80f7f3e "fix: retain AgentX estimates in all-in power views")
  • Check CI status
  • Review new/changed logic
  • Runtime verification (AgentX All in Measured)
  • Chinese copy pass
  • Post findings

What changed since the last review

One production-code commit, c80f7f3e: it admits AgentX rows into the All in Measured (B4 / utility-modeled) boundary while keeping the standalone chassis-AC metric scoped to 8K/1K.

  • benchmark-transform.ts — modelSystemPower(row, undefined, true) opts the shared chart transform into the allowAgenticPreview path (already used by profit-power.ts), so agentic_traces rows produce a supported estimate feeding B4 across charts, tables, history, overlays, and the public views API.
  • chart-utils.ts — the standalone modeledChassisPowerPerGpu field is now explicitly gated to single_turn && isl===8192 && osl===1024, so it doesn't leak AgentX now that those rows are supported.
  • power-basis.ts / tooltipUtils.ts / ChartDisplay.tsx — add the ALL_IN_MEASURED_AGENTIC_NOTE calibration disclaimer (EN+ZH), an AgentX tooltip heading, and update the empty-state/disclosure copy to "8K / 1K or AgentX".

Verified in the diff

  • AgentX admission is correctly scoped. modelSystemPower only widens past 8K/1K when allowAgenticPreview && benchmark_type === 'agentic_traces'; every other gate (hardware, telemetry power_valid/schema, gpu-count recovery, NVL72 CPU/socket) is unchanged. B4 reads modeledFacilityWattsPerGpu from that estimate and remains withheld wherever B1 is. ✅
  • The standalone metric gate is right. Since the only supported estimates are 8K/1K single-turn or AgentX, the new single_turn && 8192 && 1024 guard newly excludes exactly the AgentX rows and is a no-op for legitimate 8K/1K rows (which are single-turn by definition). ✅
  • Note gating (ChartDisplay.tsx:1227-1237): all three guard variables (isAgenticSequence, selectedPowerBasis, powerCompare) are in scope; the note shows for the agentic sequence when utility-modeled is selected or in boundaries compare. No stale closures. ✅
  • Test coverage is thorough. power-basis.test.ts pins AgentX multinode B4 across the derived builder, historical lightweight points, transformBenchmarkRows, and the public buildInferenceSeries; asserts modeledChassisPowerPerGpu is undefined for AgentX; asserts B4 is omitted when GPU telemetry is missing; keeps the 8K/1K standalone metric. tooltip-utils.test.ts + the powerx-compare.cy.ts e2e (incl. the ?unofficialrun= overlay path) pin the calibration note in both locales. No missing-test gaps. ✅
  • Public-API change is documented in docs/dashboard-readonly-views.md, the skills dashboard-views.md (+ integrity.json digest), and the views-api inference doc. ✅

Runtime verification

Loaded /inference?i_metric=y_utilityModeledWatts (Agentic scenario, DeepSeek V4 Pro) — the All in Measured Power per Chip chart renders real data (B300/B200/MI355X FP4 curves), the disclosure reads "Available for 8K / 1K and AgentX on supported hardware," and the AgentX calibration note renders below the title. 0 console errors (only the pre-existing benign left-pattern-full.svg preload warning). The measured NVL72 path still can't be exercised live (no row carries the CPU leg) as documented.

Chinese copy

The touched /zh strings — AgentX 估算复用机箱或机架功耗模型,尚未针对 AgentX 工作负载进行独立校准。, the 8K / 1K 或 AgentX 场景 empty-state/disclosure edits, and the 系统功耗模型(草案)· AgentX tooltip heading — are semantically faithful and read as natural technical Chinese, with AgentX/GPU/PUE/Grace/module correctly kept in English per the copy guide. No fidelity or register issues; nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the AgentX All-in-Measured change. No changes requested.
· feat/powerx-nvl72-smart-provisioning

中文:整体功耗估算不可用时保留实测记录。
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the single new commit since the prior LGTM at c80f7f3e: 78585abe "fix: retain measured rows without all-in estimates".

  • Gather context (only new commit: 78585abe)
  • Check CI status
  • Review new/changed logic (inference-table-data.ts, series.ts, ChartDisplay.tsx, CSV/API plumbing)
  • Runtime verification (All in Measured table)
  • Chinese copy pass
  • Post findings

What changed since the last review

This commit makes the All in Measured table retain every GPU-valid observation even when the all-in (modeled) estimate can't be computed, instead of dropping those rows. The modeled estimate renders as — with a reason; the measured GPU power stays visible; the chart/series and count still carry only numeric points. New shared helper inference-table-data.ts powers the UI table, the frontend CSV, and the public /api/v1/views/inference tableRows.

Verified in the diff

  • No crash on measuredAvgPower! (series.ts:1545, allInMeasuredTableData): allInMeasuredTableData filters to Number.isFinite(point.measuredAvgPower?.y) && measuredAvgPower.y > 0 first, and remapInferencePoint spreads ...point (shallow), so measuredAvgPower survives the remap — the non-null assertion is safe. ✅
  • Missing estimate never substitutes throughput. allInMeasuredTableData overrides remap's y with point[metricKey]?.y ?? NaN, so an unavailable row carries NaN (→ null/—/blank), not the fallback service value. Pinned by inference-table-data.test.ts ("never substitutes throughput for a missing estimate"). ✅
  • Frontier flagging by object identity holds. frontierMetrics is a Set of the frontier points' nested point[metricKey] objects; table rows keep that same reference through the shallow remap, and unavailable rows (unavailableReason !== null) are forced frontier: false. Pinned in series.test.ts ([1,false],[2,true]). ✅
  • Null-safe sort / display / CSV. inferenceTableYValue returns null for non-finite values; sortRowsByYMetric sends null rows to the end; formatInferenceTableNumber(null) → —; nestedMetric and the x-column now guard Number.isFinite, so NaN x/y export as blank. ✅
  • Scope/overlay/comparison parity. ChartDisplay threads tableData through official, overlay (incl. ?unofficialrun=), and compare-pair paths; route.ts emits tableRows per top-level/comparison/overlay scope and csvRows switches to tableRows when present. API schema, route-catalog digests, skills integrity.json, and the EN/ZH docs are all updated in-commit. ✅

Runtime verification

Loaded /inference?i_metric=y_utilityModeledWatts&i_seq=agentic-traces (DeepSeek V4 Pro, Agentic). The chart renders real B200/B300/MI355X FP4 curves; the Table view now shows the new Measured GPU Power (W/chip) and All-in Estimate Status columns, with measured GPU power sensibly below the all-in figure and status Available for every live row. 0 console errors (only the pre-existing benign left-pattern-full.svg preload warning). The unavailable (cpu-telemetry) path still can't be exercised live — no row carries the Grace/module leg, as documented — but it is covered by powerx-compare.cy.ts, series.test.ts, and route.test.ts.

Test coverage

Comprehensive and colocated: inference-table-data.test.ts (new), series.test.ts, route.test.ts, utils.test.ts, plus the powerx-compare.cy.ts e2e (table rows, CSV blanks, status column, best/concurrency reselection, GPU-only selection). No missing-test gaps.

Chinese copy

The new /zh strings — the unavailable-reason dictionary (不支持此工作负载, GPU 遥测缺失或无效, Grace 或 module 遥测缺失或无效, Prefill 或 decode 功耗不完整, 超出模型适用范围, 缺少实测能耗, 整体功耗估算不可用), the table headers (GPU 实测功耗 (W/芯片), 整体估算状态, 可用), and the reworded utility-modeled disclosure (…估算不可用的数据点仍保留在表格中,并显示实测 GPU 功耗和不可用原因。) — are semantically faithful and read as natural technical Chinese, with Grace/module/GPU/Prefill/decode/PUE/NVL72 correctly kept in English per the copy guide. No fidelity or register issues; nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the retain-measured-rows change. No changes requested.
· feat/powerx-nvl72-smart-provisioning

中文:明确多节点系统估算不可用的含义。
中文:移除无法估算配置列表。
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the two new commits since the prior LGTM at 78585abe.

  • Gather context (new commits: cd073942, 9a627452)
  • Check CI status
  • Review new/changed logic
  • Runtime verification (Profit Estimator, compare mode)
  • Chinese copy pass
  • Post findings

What changed since the last review

  • 9a627452 "fix: remove unavailable estimate lists ([PowerX] remove unavailable estimate lists / 移除无法估算配置列表 #1249)" — the substantive change. It removes the per-configuration "Unavailable estimates" disclosure from ProfitEstimatorDisplay.tsx (the powerUnavailable memo, the unavailableEstimates/skipped/modeledUnavailable/skipReason STRINGS, the details/profit-power-unavailable block, and the zero-row powerPreview + powerUnavailable note), together with the matching EN/ZH docs and the Cypress assertions.
  • cd073942 "docs: clarify unavailable multi-node system estimates" — docs-only wording: "B200/H200 multinode rows missing" → "B200/H200 multinode system estimate unavailable" (EN + ZH), no code.

This also fully supersedes the earlier Cursor Bugbot finding (compare-mode skip mislabeling at 3278b48b, patched at 84b9d53d): the mislabel-prone grouping code is now deleted entirely, so there is no remaining surface for it.

Verified in the diff

  • No dangling references after the removal. powerUnavailable has zero remaining refs; t.unavailableEstimates / t.skipReason / t.skipped / t.modeledUnavailable and the profit_estimator_power_unavailable_toggled event are gone with no readers left (the remaining output.skipped in profit-power.ts and the unrelated t.skipped in CollectiveXSwapSection.tsx are untouched). The ProfitEstimatorSkipReason import was dropped but powerPreview / rowLabel / fullEstimate are all still used. ✅
  • No stale useMemo deps. powerUnavailable and fullEstimate.skipped were removed from the ResultContext memo dep array only because their sole consumers were deleted — correct, no stale closure introduced. ✅
  • No broken empty state. The removed zero-row powerPreview note is now covered by ProfitEstimatorChart's own rows.length === 0 branch (t.noData = "No SKU can be priced…" / "当前选择下没有可定价的 SKU。"), so an all-unavailable selection still renders a clean message rather than a blank chart. ✅
  • API/skills contract unchanged. The skip reasons are still computed in profit-power.ts (output.skipped) and were never exposed through the views API — this is a presentation-only removal, so no /api/v1/* or packages/skills change is required. The docs (dashboard-readonly-views.md, powerx-system-power.md, tco-calculator.md) are updated to say the list is omitted and the API still retains skipped rows/reasons. ✅
  • Tests updated to match. profit-estimator.cy.ts now asserts [data-testid="profit-power-unavailable"] does not exist across the renamed cases (both locales, NVL72 compare, historical provisioned bars), and the now-dead assertDisclosureOpen helper was removed. No orphaned assertions. ✅

Runtime verification

Loaded /profit-estimator-per-gigawatt?c_power=compare — the chart renders real data (18 bars), the profit-power-unavailable element is absent, no No SKU can be priced fallback, 0 console errors (only the pre-existing benign preload/crossorigin warning). The measured NVL72 path still can't be exercised live (no row carries the Grace/module leg) as documented.

Chinese copy

The touched /zh doc strings are removals or faithful rewordings — the 展开 Unavailable estimates… step and the 完全无法定价的配置,与仅缺少实测估算的配置分开列出 sentence were dropped in lockstep with the UI/EN docs, and B200/H200 多节点系统估算不可用 reads as natural technical Chinese matching the English, with module/socket/Grace/profile/PUE correctly kept in English. These are repo docs rather than /zh website pages; no user-facing Chinese UI string was added. No fidelity or register issues; nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in a prior review to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the unavailable-list removal. No changes requested.
· feat/powerx-nvl72-smart-provisioning

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the two new commits since the prior LGTM at 78585abe.

  • Gather context (new commits: cd073942 docs, 9a627452 fix)
  • Check CI status
  • Review new/changed logic
  • Runtime verification (Profit Estimator, compare mode)
  • Chinese copy pass
  • Post findings

What changed since the last review

  • 9a627452 "fix: remove unavailable estimate lists ([PowerX] remove unavailable estimate lists / 移除无法估算配置列表 #1249)" — the only production-code change. Removes the collapsible "Unavailable estimates (N)" list from the Profit Estimator (ProfitEstimatorDisplay.tsx, −81 lines): the powerUnavailable useMemo, the <details> block, the empty-state powerPreview + powerUnavailable paragraph, and the unavailableEstimates/skipped/modeledUnavailable/skipReason EN+ZH strings. The skip computation itself still runs in profit-power.ts (fullEstimate.skipped) — it's just no longer surfaced per-configuration in this view.
  • cd073942 "docs: clarify unavailable multi-node system estimates" — docs-only wording tweak (EN + ZH mirror).

Verified in 9a627452

  • Clean removal, no dangling references. Grepped the file and src/ — powerUnavailable, unavailableEstimates, skipReason, t.skipped, modeledUnavailable, the profit-power-unavailable test id, and the track('profit_estimator_power_unavailable_toggled') call are all gone. The type ProfitEstimatorSkipReason import was dropped from this file but the type is still defined/used in profit-estimator.ts/profit-power.ts. powerPreview and rowLabel are still imported and still used (CSV caption / power tooltip; rowLabel at lines 1352/1503). The useMemo/CSV dep arrays were updated to drop powerUnavailable and fullEstimate.skipped. bun run typecheck passes. ✅
  • Empty state still covered. The removed estimate.rows.length === 0 paragraph is redundant — ProfitEstimatorChart.tsx:1171 already renders the No SKU can be priced for the current selection. / 当前选择下没有可定价的 SKU。 noData block when rows.length === 0, which the updated Cypress spec now asserts (cy.contains('No SKU can be priced…')). ✅
  • This moots the earlier Cursor Bugbot finding. The "compare skips mislabel non-power failures" issue (and its 84b9d53d partition fix) concerned the content of this list; removing the list entirely removes the mislabeling surface. No regression — the internal skipped partitioning is unchanged. ✅
  • Docs/tests updated in-commit and consistent. The EN/ZH guides no longer describe a "listed separately" UI list (In Compare both, a valid provisioned result remains when its measured estimate is unavailable. Measured-only mode never substitutes provisioned watts. / Compare both 在实测估算不可用时仍保留有效预配结果。仅实测模式不会用预配功率代替。). The Cypress spec flips its assertions to profit-power-unavailable not existing while keeping the provisioned-bar / revenue-label / basis-label coverage. ✅

Runtime verification

Loaded /profit-estimator-per-gigawatt?c_power=compare (Kimi K3, compare mode). The chart renders real data — GB300/GB200 NVL72, B300, B200, MI355X profit/margin bars — with no "Unavailable estimates" disclosure below it, and 0 console errors (1 benign pre-existing preload/crossorigin warning). The measured NVL72 path still can't be exercised live (no row carries the CPU leg) as documented; official-frontier scope keeps ?unofficialrun= N/A.

Chinese copy

cd073942 refines the troubleshooting-table row B200/H200 多节点记录缺失 → B200/H200 多节点系统估算不可用, which is more accurate (the system estimate is unavailable, not the records) and reads as natural technical Chinese, with topology/role-power/gpu-count/socket/module/PUE/profile correctly kept in English per the copy guide. The 9a627452 zh removals drop strings cleanly with no stale references left. These are developer-facing guide docs (not /zh site pages). No fidelity or register issues; nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • Product note (not a bug): the Profit Estimator UI no longer explains why a specific SKU's measured estimate is unavailable; that rationale now lives only in the inference All-in-Measured table and the docs. This matches the stated intent of [PowerX] remove unavailable estimate lists / 移除无法估算配置列表 #1249.

No new issues introduced by the list removal or the docs clarification. No changes requested.

中文:利润估算先选择功耗有效的曲线。
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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


Re-review — 🟢 LGTM, no blocking issues found

Re-reviewed against origin/feat/powerx-article-parity, focused on the single new commit since the prior LGTM at 9a627452.

  • Identify new commits since last review — only c5a86f7d "fix: select power-valid curves for profit estimates"
  • Review changed logic
  • Check CI status
  • Runtime verification (Profit Estimator, compare mode)
  • Post findings

What changed since the last review

c5a86f7d changes the Profit Estimator's GW-year curve selection. Previously each profit mode reused the full performance frontier and refused to replace a power-invalid bounding point. Now a new shared helper interpolateProfitForGPU (profit-power.ts) selects a power-valid curve at the same target before pricing: it partitions the group's points into cohorts by sensor/model basis (powerSourceKey), interpolates each cohort at the unchanged target, keeps only cohorts whose modeledPowerAtTarget succeeds, and picks the highest-throughput valid cohort. compare prices both bars from that one valid curve; provisioned (and non-interactivity_to_throughput modes) return the original curve untouched; when no valid cohort covers the target it falls back to original, preserving the provisioned bar and its skip reason.

Verified in the diff

  • No regression for non-profit callers. useThroughputData.getResults / getHistoryResults gained a powerBasis parameter defaulting to 'provisioned', for which interpolateProfitForGPU returns interpolateForGPU(...) byte-for-byte — existing consumers (inference charts) are unaffected. Confirmed the Profit Estimator passes curvePowerBasis = basis === 'gw-year' ? powerBasis : 'provisioned' for both the current and history paths. ✅
  • Target is never extrapolated. Each cohort is interpolated at the same target; modeledPowerAtTarget rejects clamped/out-of-range cohorts (outside-measured-range) so best is always in-range. Because cohorts are partitioned by powerSourceKey, the within-cohort incompatible-power-basis branch can't trip — the selected knots always share a basis. Tie-break is deterministic ([...keys].toSorted() + strict candidate.value > best.value), so selection is input-order-independent as the comment claims. ✅
  • Compare-mode pairing is consistent. In estimateProfitByPower, the provisioned bar derives from the same result (the valid curve), and the modeled bar re-reads modeledPowerAtTarget on that already-validated curve, so paired bars share throughput (test asserts equal revenue/gpuHours). When best is null it correctly yields a single provisioned bar + no-measured-power skip. ✅
  • UI/API parity maintained. calculator-extensions.ts (the public /api/v1/views profit path) was switched to the same interpolateProfitForGPU with the identical basis === 'gw-year' ? powerBasis : 'provisioned' gate, so the API and UI can't diverge. Docs (dashboard-readonly-views.md, powerx-system-power.md/.zh.md, views-api/docs/extensions.ts), the skills dashboard-views.md + integrity.json digest, and the api-route-catalog.ts contract digests (new profit-power.ts source digest, updated calculator-extensions.ts digest) are all updated in-commit. ✅
  • Test coverage is thorough. New/expanded colocated unit tests (profit-power.test.ts +209, profit-history.test.ts +46), API-parity tests (extensions.test.ts +70 covering official/historical/overlay × modeled/compare), and a new Cypress e2e (profit-power-curves.cy.ts) pinning the retained target, paired CSV revenue, provisioned fallback, NaN-free output, and independent historical scopes (EN/ZH). No missing-test gaps. ✅

Runtime verification

Loaded /profit-estimator-per-gigawatt?c_power=compare (Kimi K3, compare) — the chart renders real data (GB300/GB200 NVL72, MI355X ATOM + vLLM, B300, B200 profit/margin bars), 0 console errors (only the pre-existing benign left-pattern-full.svg preload/crossorigin warnings). As documented, the measured NVL72 path can't be exercised live (no live row carries the Grace/module leg), so compare falls back to provisioned; the valid-curve selection is covered by the fixtures-based e2e.

Chinese copy

The one new user-visible /zh string — the reworded powerTooltip (整体实测功耗在选定目标下采用功耗有效的最优曲线。对比两种估算方式时,若实测估算可用,两根柱子采用同一条曲线。价格、利用率和单位成本保持不变。) — is semantically faithful to the English and reads as natural technical Chinese, with GW/PUE/token terms correctly kept in English per the copy guide. The .zh.md guide and extensions.ts zh API-doc rewordings match their English counterparts. No fidelity or register issues; nothing requiring Chinese-maintainer confirmation.

Notes (non-blocking)

  • CI on this head: only the Claude route reports on this feature-branch PR; the authoritative tests-unit / tests-e2e / lint merge-gate workflows don't run here (covered by the shared-tree PR per the PR body). Confirm those are green before merge — that's the authoritative signal, not this comment.
  • The earlier Blacksmith failures (decorative circuit mask, power boundary labels) were traced in prior reviews to files unchanged on this branch and read as flaky/environmental.

No new issues introduced by the power-valid curve selection. No changes requested.
· feat/powerx-nvl72-smart-provisioning

This branch was successfully deployed

1 active deployment
Preview — c5a86f7d Deployed Oct 1, 2026 by vercel[bot]
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