Repository navigation
[Dashboard] Phase 1:渐进加载 + 术语统一 + 中英双语 + 过程指标折叠 #30
Description
把现有 Flask dashboard 打磨成:加载快 / 术语统一不混淆 / 中英双语 / 关键信息一目了然 / 过程指标折叠。本任务 = Phase 1(性能/术语/i18n/折叠,均可机验);审美级视觉重设计(见 #19)留 Phase 2,不在本任务。不大改重写,在现有原生 JS + Flask 模板栈上改。
代码在 master 分支(默认分支)。从 master 切分支 feat/dashboard-refresh,不动主线、不动数据库、不改后端 API 的返回字段/语义(只改前端怎么展示)。改动范围:web/templates/index.html、web/static/js/app.js(及 agenda.js / manuscript_routing.js)、web/static/css/style.css、新增 web/static/js/i18n.js。
代码定位若行号漂移,以函数名/字段名/语义为准。
A. 渐进加载(修首屏慢)
现状:app.js 初始化时一次性触发多个 loadXTab() + overview 多个接口 → 首屏并发 8–10 个请求,几个是重查询。
目标:
- 首屏只加载当前(默认 Overview)tab 的数据;其余 tab 的 load 不在 init 触发。
- 切到某 tab 才加载;已加载过缓存,不重复请求(沿用现有
papersLoaded这类标志)。 - 首屏渲染完且空闲后(
requestIdleCallback,无则setTimeout),后台预取其余 tab 写入缓存,切过去秒开。 - 重的 overview 知识图谱延后到首屏文字内容之后渲染。
B. 术语统一(消除"同概念多名字")
只改前端展示用词,不改后端字段名/表名/API。同一概念全站一个名;修掉 tab 导航名与标题不一致。
| 规范名(en) | 中文 | 替换掉这些旧叫法 |
|---|---|---|
| Source Paper | 文献 | "Papers"(输入文献处)/"Paper DB"/"Pipeline Papers" |
| Research Area | 研究领域 | "Taxonomy Node"/"Field"/"domain"/"node";子级 Sub-area 子领域 |
| Result | 基准结果 | "Results" |
| Benchmark Matrix | 基准矩阵 | "Evidence"(矩阵处)/"Method × Dataset Matrix" |
| Claim | 论断 | "Claims & Insights" 里的 claims |
| Research Insight | 研究洞见 | "Insights"/"Research Insights"(= insights 表) |
| Discovery | 深度发现 | "Deep Discovery"/"Deep Insight"/"Idea"/"IDEA #"/"Paper Idea"(= deep_insights 表) |
| Opportunity | 机会点 | 保留,但与 Insight 区分清楚(= node_opportunities 表) |
| Experiment Run | 实验运行 | "Experiment"/"Run"/"RUN #"/"Main run";"forge" 字样从界面去掉 |
| Generated Manuscript | 生成稿件 | "Generated Paper"/"Manuscript"/"Research Paper Generation" |
| Submission Bundle | 投稿包 | "Complete Papers"/"Bundle" |
关键消歧:insights(Research Insight)与 deep_insights(Discovery)是两张不同的表,绝不可再共用 "insight" 一词;Experiments 里那行 deep_insights 不准再叫 "Idea",叫 Discovery。explore 视图三名("Taxonomy Map"/"Research Area Explorer"/"Opportunity Map")统一为一个;tab 导航名与标题全部对齐。
C. i18n 中英双语
- 默认语言 =
navigator.language:以zh开头→中文,否则→英文;右上角手动切换,选择存localStorage。 - 新增
web/static/js/i18n.js:{en:{...}, zh:{...}}词典(en/zh 键集合必须相等)+t(key)+ 扫描data-i18n属性替换文本的应用函数。 - HTML 静态文案加
data-i18n;JS 注入文案走t(key)。 - 清理死代码:
web/app.py中重复定义的中文版_planned_tracks(被英文版覆盖)、app.js中被renderExperimentGroupsV2覆盖的中文版renderExperimentGroups,删掉;界面里写死的遗留中文(tooltip、实验组渲染等)收进 i18n 词典。
D. 精简 / 折叠(前台留 6,过程指标进"高级",不删除)
- 前台保留 6 个主 tab:Overview、Explore(Research Area Explorer)、Evidence(Benchmark Matrix)、Generated(Generated Manuscript)、Insights(Research Insight)、Papers(Source Paper)。
- 其余收进可展开的 "Advanced / 高级" 区(默认收起,不删):Feed、Providers、Paper-progress、Experiments 内部字段、Discoveries(并入 Overview 最新动态)、Agenda;以及概览里的 Meta-Learning Report / Loop Inspection / Automation Services / GPU 调度 / 文件路径 / "Internal stage" / CPU eligible / Manuscript Routing & Lint 等过程项。
- 去重:顶栏 4 项指标条与概览 4 张卡完全重复 → 去掉或改成不重复内容(PR 说明选哪个);合并 "Generated Papers" 与 "Total Manuscripts" 同数双标;合并三处重复的"已完成论文"计数。
Allowed / Forbidden
Allowed: web/templates/*.html、web/static/js/*.js(含新增 i18n.js)、web/static/css/style.css;web/app.py/web/*_routes.py 中仅限删除已确认的死代码(重复中文 _planned_tracks)。
Forbidden: 不改任何后端 API 的返回字段/语义;不删 tab/功能(过程项是折叠,不是删);不动 DB / agents/ / orchestrator/ / contracts/;不引入前端框架(保持原生 JS + Flask);不做 #19 审美级重设计(Phase 2)。
验收标准(可机验)
- 渐进加载:init/
DOMContentLoaded路径不再调用非当前 tab 的loadXTab();有 idle 预取(requestIdleCallback/setTimeout)+ 每 tab 缓存标志;init 直接触发的数据请求数 ≤ 当前 tab 所需。 - 术语统一:全站搜索,旧词不再作为用户可见 label 出现(
IDEA #、作标题的Deep Insight、大小写混用的RUN #、"Method × Dataset Matrix"、explore 三名);每个规范概念只对应一个展示名。 - i18n:
i18n.js存在且 en/zh 键集合相等;navigator.languagezh→中文、否则英文(切换函数可字符串级断言);data-i18n覆盖原写死文案;遗留中文不再硬编码于 HTML/JS 文案。 - 死代码清理:中文版
renderExperimentGroups与重复_planned_tracks已删,引用指向保留版本。 - 折叠结构:前台只剩 6 个主 tab,其余在"Advanced/高级"默认收起;顶栏重复指标条已去重;重复计数已合并。
- 不破坏:
python -c "import web.app"可导入;启动 Flask 后/与/api/stats返回 200(API 行为未变)。
实现红线(不可用这些方式蒙混过验收): 旧 label 必须真改而非注释掉;i18n en/zh 键必须对齐;懒加载不可表面改而别处又全量拉;"折叠"不可只 CSS 隐藏却仍在首屏请求其数据。
不在本任务(留 Phase 2)
#19 审美(配色/留白/知识图谱美观)——本任务不做。
重部署步骤(写进 PR 描述)
- host 上
git fetch && git checkout feat/dashboard-refresh .env/ 数据库不动(配置与数据自动保留)sudo systemctl restart deepgraph-web- 验证
https://deepgraph.sora2.today首屏更快、双语生效、术语清爽
完成定义
六条验收全过 + 死代码清理 + 在 feat/dashboard-refresh 分支(不推 main/master、不自行合并)+ 开 PR,PR 描述含 changed files / 验收命令与结果 / 重部署步骤 / 已知 non-goals(#19 审美)。
Activity
Protocol-zero-0 commentedon Jun 6, 2026
Phase 1 follow-up:全量双语 + 术语修正(同一分支
feat/dashboard-refresh,补到 PR #31)PR #31 已实现 Phase 1 主体,但仍有约 60 个用户可见字符串是写死英文(空状态、统计标签、insight 类型、状态/阶段、服务名、agenda/routing 消息),中文浏览器仍会看到英文;另有 3 处术语未对齐。本补丁在同一分支补齐,让中英双语真正覆盖全站。不改后端 API、不引框架、不删 tab。
术语修正(3 处)
app.js ~1953/index.html ~371"No experiment ideas are active yet…"→ 用 Discovery 措辞(不再用 "ideas")。"Taxonomy Nodes"(app.js ~2254)→ "Research Areas / 研究领域"。PARADIGM/DISCOVERY(app.js ~1577)→ 用已存在的 i18n 键discoveries.tier1/discoveries.tier2。全量 i18n 扫一遍(新增约 40–50 键 × en/zh,键集合必须相等)
按
i18n.js现有约定(命名空间点号键、t(key, vars)、data-i18n)新增,覆盖:empty.*—— "No … yet" 空状态约 15 条(paper-progress / generated / insights / discoveries / auto-research / experiments / search / explore)。paperProgress.*统计标签(Source Papers In Progress / Paper Jobs / Active Manuscripts / Blocked Jobs);generated.*统计标签(Generated Manuscript / Ready / Stale / Drafting)。insights.type.*(6 类:Contradiction / Method Transfer / Assumption Challenge / Ignored Limitation / Paradigm Exhaustion / Cross-Domain Bridge)——app.js的INSIGHT_TYPES与index.html过滤<option>同步。status.stage.*(friendlyAutomationStage)/status.cpu.*/ 实验状态词。experiments.service.*(Paper Pipeline / Auto Research / EvoScientist / PaperOrchestra / GPU Scheduler)+ work-lane 标签。agenda.*(agenda.js 消息)/manuscript.*(manuscript_routing.js 标签)。papers.status.*(index.html 过滤<option>:Extracted / Reasoned / Processing / Fetched / Error)。app.js ~517"What Is Happening In {name}?"、~527"Sub-areas of {name} ({count})" →t(key, {name, count})。替换方式:JS 字面量 →
t('key')/t('key', {vars});静态 HTML →data-i18n/data-i18n-placeholder/data-i18n-title。验收(在 PR #31 上一并验)
i18n.js的 en / zh 键集合相等;上面 3 处旧术语字符串在 4 个前端文件(index.html / app.js / agenda.js / manuscript_routing.js)中不再出现。python -c "import web.app"ok;pytest tests/test_web_app.py -q全绿(测试扩展保持 additive,不弱化现有);Flask 起来后/与/api/stats返回 200。Protocol-zero-0 commentedon Jun 9, 2026
已实现并上线,关闭本 issue。
通过 PR #31 完成,并已部署 deepgraph.joulebeat.com、用真无头浏览器实测通过:
后续相关改进(首屏接口性能、加载后响应性)分别在 #34 及后续修复中处理。