feat(site): publish LHTB five-arm research brief - #4703
huangruiteng merged 2 commits into
Conversation
Signed-off-by: shangzh0 <2586756592@qq.com>
Signed-off-by: shangzh0 <2586756592@qq.com>
huangruiteng
left a comment
There was a problem hiding this comment.
审阅对象:PR #4703,exact head d60813451609ad28b2855fe7acda9a4701740c40(作者 shangzh0),base f22879d,本次审阅该 exact head 的完整增量(6 files, +1482/-1)。
动机
这个 PR 的目标是发布一份公开研究简报:在站点上新增双语页面 /benchmarks/lhtb/,用五种长程执行机制(Plain、Native Goal、LoopX SSH-Goal、Legacy Heartbeat、New Heartbeat)在 46 个 LHTB 任务上的结果做对比,并把公开安全的聚合数据放在 benchmark/LHTB/studies/five-arm-gpt56sol-max/。动机本身成立:站上已有两份同类简报(/benchmarks/swe-marathon/、/benchmarks/deepswe/behavior-discovery/),LHTB 这份在此之前没有公开入口;同时研究目录里已有的公开安全规范(只放泛化代码与公开安全结论)也需要一个新的聚合数据落点。
需要强调:这个 PR 的交付物不是"页面能跑",而是"读者能在 public 站点上打开它"。因此本轮审阅的重点落在发布链路上。
改动思路
页面构造完全复用既有模式,没有引入新机制:
main.tsx在既有二选一(swe-marathon / 首页)上增加一个路径分支,按最后两段路径判断,因此BASE_URL前缀下也成立。LhtbBrief.tsx沿用SweMarathonBrief.tsx的结构:构建期直接 importbenchmark/.../data.json(路径写法与既有简报一致)、usePublicPageNavigation共享语言状态、以及lhtb-copy.json双语字典;臂顺序用keyof typeof study.arms做类型约束,表格模式是闭集联合类型。- 数据侧新增
benchmark/LHTB/studies/five-arm-gpt56sol-max/:README.md明确证据边界(每个 task-arm 格只贡献一次有效 trial;New vs Legacy 是多维同时变化,只能作为机制证据而非单变量消融;替换 trial 已披露;历史成本是估算、New Heartbeat 成本是记录遥测),data.json只放聚合与逐任务奖励。
具体改动
apps/presentation/site/src/LhtbBrief.tsx(+305)、lhtb-brief.css(+449)、lhtb-copy.json(+256,en/zh)、main.tsx(+6/-1,路由分支与样式导入);benchmark/LHTB/studies/five-arm-gpt56sol-max/README.md(+31)与 data.json(+435)。
关键点讲解:
- 路由:
main.tsx第三个分支,pathSegments.slice(-2).join("/") === "benchmarks/lhtb"。在开发服务器与vite build产物里都能命中。 - 页面:固定五臂顺序 + 逐任务 reward spread + 三种表格模式(all / spread / heartbeat)+ 搜索;页面文案包含 benchmark-native 阈值(0.95)与成本口径说明。
- 数据:46 个唯一公开任务 id,只含
mean_reward/pass_095/token/成本/运行时与heartbeat_comparison;本轮扫描确认没有绝对路径、IP、URL、邮箱或类凭据字符串。 - 双语:en/zh 各 182 个叶子键、集合完全一致,不存在只在一侧渲染的文案。
对主干的风险
阻断发现 [P1]:新页面在 public 站点上不会被发布,读者打开 /benchmarks/lhtb/ 会 404,而当前所有检查仍会全绿。
理由是可复核的代码路径与产物事实,而不是推测:
- 站点是 SPA,
vite build只产出根index.html(我在该 head 上实跑npm ci+npm run build,dist/只有index.html、site-assets/、blog/,没有benchmarks/目录;构建本身tsc --noEmit干净、1800+ 模块通过)。 - Pages 产物的子路径入口由
examples/export-frontstage-share-bundle.mjs的copyPublicSiteRoutes()显式枚举:目前只有benchmarks/swe-marathon(复制首页 HTML)与benchmarks/deepswe/behavior-discovery(复制静态文章)。该文件与两个产物 smoke、以及 README/benchmark README 中都没有任何lhtb/LHTB注册(已用rg在该 head 上确认)。 examples/frontstage-share-bundle-smoke.mjs只断言已登记的两份简报条目,因此即使路由缺失,frontstage-pages 工作流也会通过——这就是"绿 CI 掩盖未发布页面"的机制。
最小修复(照搬 swe-marathon 的既有登记方式即可):在 copyPublicSiteRoutes() 的路由列表加入 benchmarks/lhtb;补 manifest 条目 lhtb_brief_entry: "site/benchmarks/lhtb/index.html" 与 content_sources.lhtb_brief = "benchmark/LHTB/studies/five-arm-gpt56sol-max",以及生成的 brief URL/README 引用;在 examples/frontstage-share-bundle-smoke.mjs 增加该条目的存在性与 manifest 断言,并把目的地加入 examples/dashboard-frontstage-design-baseline-smoke.mjs 的列表;建议同时在 benchmark/README.md 的 Current work 与 README 特性列表里列出这份简报,保持与既有两份一致的发现路径。回归测试:frontstage-pages 工作流中的 frontstage-share-bundle smoke(含新条目)与 design-baseline smoke,修复前应失败、修复后通过。
非阻断建议 [P3]:仓库已有一份"发布范围"测试 benchmark/tests/test_publication_scope.py(校验已发布文案与聚合数据的臂/范围一致)。新简报目前没有对应守卫,臂名或范围在 data.json 与 lhtb-copy.json 之间漂移不会被发现;建议按同一形态补一个 LHTB 范围用例。
其余风险面反向检查结果是好的:本次改动只给 main.tsx 增加一个路径分支,首页与既有两份简报不受影响;数据只含聚合与公开任务 id;双语完全对称;页面文案没有把机制对比写成单变量因果断言,反而明确写了边界。
未验证项如实标注:本轮没有执行 Pages 导出/部署(需要 dashboard 依赖与网络),因此 P1 的结论来自导出器代码路径与本地构建产物,而不是已部署 URL;该 head 的 CI 在审阅时仍有 14 项 running(无失败),且即便 frontstage-pages 跑绿也不能消除该发现。修复后建议按 AGENTS.md 的公开首屏要求,在部署预览或本地预览中实际打开该页再合并。
我的整体评价
REQUEST_CHANGES。页面与数据本身做得扎实:完全复用既有简报的模式(同一导航 hook、同样的 benchmark JSON 构建期导入、同形态的双语字典与单个路由分支),数据公开安全且证据边界写得很清楚,双语 182 对 182 完全对称,站点构建在该 head 上干净通过。对一份 1482 行的公开页面来说,这样的复用比自创机制更符合仓库习惯。
但它当前不能合并,原因是交付物与"发布"不匹配:新路由没有进入 Pages 导出器与产物 smoke 的登记清单,public 站点上不会存在 /benchmarks/lhtb/ 入口文档;而现有检查恰好只断言另两份简报,导致这个缺口不会被 CI 捕获。按既有的 swe-marathon 登记方式补齐(路由复制、manifest、内容来源、smoke 断言、design baseline),这个 PR 就可以直接转为 APPROVE;顺带补上 LHTB 版的发布范围测试会更稳。
English verdict: REQUEST_CHANGES - #4703 at exact head d608134 adds a well-built bilingual LHTB five-arm research brief (page, styles and copy reuse the accepted swe-marathon pattern; the site builds cleanly with tsc --noEmit + vite at this head; the published aggregate is public-safe with 46 unique task ids and no paths/IPs/URLs/emails/credentials; en/zh copy have exact 182/182 parity; the study README states its evidence boundary honestly), but the brief is not actually published: the site is a client-side SPA whose single dist/index.html has no benchmarks/ subpath, and examples/export-frontstage-share-bundle.mjs copies entry documents only for the explicitly enumerated routes (benchmarks/swe-marathon, benchmarks/deepswe/behavior-discovery). Nothing in the exporter, the share-bundle smoke, the design-baseline smoke or the READMEs registers the new route, so /benchmarks/lhtb/ would 404 after deployment while CI stays green (the bundle smoke asserts only the two known brief entries). Minimum repair: mirror the swe-marathon registration - add benchmarks/lhtb to copyPublicSiteRoutes(), add the manifest entry, content source and generated brief URL/README reference, assert them in examples/frontstage-share-bundle-smoke.mjs, add the destination to examples/dashboard-frontstage-design-baseline-smoke.mjs, and list the brief in benchmark/README.md for discoverability; a non-blocking follow-up is an LHTB-scoped publication-scope test mirroring benchmark/tests/test_publication_scope.py. Not verified here: the Pages export/deploy itself and the still-running CI checks.
Summary
/benchmarks/lhtb/research brief comparing Plain, Native Goal, LoopX SSH-Goal, Legacy Heartbeat, and New Heartbeat across all 46 LHTB tasksEvidence boundary
>= 0.95solved threshold remain benchmark-nativeValidation
npm run buildinapps/presentation/site