将 TLUSTY/SYNSPEC 拆为各自独立的 enabled/policy/strategies 阶段,
以策略链自动弹栈取代单级 seed_step 布尔回退;定向修复 2026-08-02
僵尸任务涡旋事故;新增节点并发配额热调;前端详情页从 1412 行巨型
视图拆为薄控制器 + detail 子模块,并补齐工具层与单测。
引擎与调度(task_engine_decoupling_design.md)
- models.rs: 新增 StagePolicy / EngineStageConfig / TaskSpec 阶段字段、
normalize_compat() 校正旧版在途消息策略链、failed_stage 归因
- scheduler.rs: resolve_dispatchable_chain 派发门控、
trigger_strategy_fallback 按 failed_stage 精确弹栈;启动期
force_recompute/skip_converged(默认)/skip_failed 三策略
- db.rs: tasks 表 +7 列持久化阶段配置;终态守卫
(mark_grid_point_running 仅 pending/queued→running;
record_task_report 拒绝迟到失败翻黑 converged);策略弹栈快照
僵尸涡旋修复(runbook-20260802-zombie-vortex-fix.md)
- 全链路跨库活性交叉校验:派发/claim/孤儿回收/回退统一查 MQ 队列活性,
活则放行、死则清僵尸,结构性消除"每点重复派发"
- stop/重启卫生:清队列同步 delete_tasks_by_ids,杜绝遗留 pending 行
- report_task: 幂等吸收 + 409 区分迟到冗余结果,仅 state_changed 时回退
- MQ: NULL workflow_name 回填 __legacy__、requeue 后迟到上报被 403 竞态修复
动态 CPU 配额(dynamic_cpu_slots_design.md)
- admin.rs: POST /admin/nodes/:id/quota(Option<Option<i32>> 区分
缺字段/显式 null);nodes 表 +admin_max_slots
- worker.rs: effective_max_slots = min(admin, physical),心跳下发原子生效
科学产物保全(tlusty_result_artifacts.md)
- runner.rs: SYNSPEC 启动前快照 fort.12/fort.14 → .bfac/.emflux 防覆盖
- 半失败点(大气收敛+光谱失败)改判 Failed 并写入 note;仅 SYNSPEC
场景不再恒判失败;撤销归档 LRU 200 上限改为永久保留
- executor.rs: 透传 synspec_params 数值参数(此前固定 None)
前端(dashboard/)
- workflowDetail.js 1412→328 行,拆出 views/detail/{ctx,overview,
pointsTable,parSets,pointPanel}.js,AbortController 治理监听/请求生命周期
- 删除 wfActions.js,新增 wfEnginePanel.js(双阶段三维配置编辑面板)
- 新增 utils/{errors,format,icons,polling,yamlStage}.js 纯函数模块
- 路由级动态 import 代码分割;节点配额三点菜单 + Modal 管理
- 首次引入 node:test 单测(format/polling/yamlStage/psCache,644 行)
- 系统性补齐 a11y:skip-link、ARIA、Tab 键盘漫游、toast 关闭、退出动画
文档与工具
- 新增 6 篇设计/调研:引擎解耦、动态配额、涡旋 runbook、
光谱正确性分析、收敛判断、产物归档
- PIPELINE/design/api/database 等协同重写为分布式 C/S 架构口径
- scripts/fetch_results.sh 跨节点产物备份;import_results 按 cno 升序导入
- workflows/sdB_cno.yaml: 新增 tlusty/synspec_stage 配置块,修正 wstart 笔误
90 lines
3.8 KiB
YAML
90 lines
3.8 KiB
YAML
# 6 维 CNO NLTE 热亚矮星网格的配置文件。
|
||
# 所有丰度均为 log10(nX/nH);.5 文件中的 abn 字段设为 10**logX。
|
||
#
|
||
# 网格各维范围:
|
||
# Teff : 20000 - 80000 K
|
||
# logg : 5.0 - 6.5
|
||
# logHe: -4 - 2 (He/H 数密度比:1e-4 .. 100)
|
||
# logC : -4 - -1 (C/H:1e-4 .. 0.1;太阳 C/H≈-3.6,落在区间内)
|
||
# logN : -4 - -1 (N/H:太阳 N/H≈-4.2)
|
||
# logO : -4 - -1 (O/H:太阳 O/H≈-3.3)
|
||
# CNO 范围已修正为物理上的 sdB 范围,不再是超太阳(旧版 -2..1 会发散)
|
||
|
||
# ---- 网格轴:显式列出各维采样点 ----
|
||
# grid:
|
||
# teff: [20000, 60000]
|
||
# logg: [5.0]
|
||
# loghe: [-2]
|
||
# logc: [-4]
|
||
# logn: [-4]
|
||
# logo: [-4]
|
||
grid:
|
||
teff: [20000, 30000, 40000, 50000, 60000]
|
||
logg: [5.0, 5.5, 6.0, 6.5]
|
||
loghe: [-4, -2, 0, 2]
|
||
logc: [-4, -3, -2, -1]
|
||
logn: [-4, -3, -2, -1]
|
||
logo: [-4, -3, -2, -1]
|
||
# 共 4*2*2*3*3*3 = 432 个点
|
||
|
||
# ---- 收敛链 ----
|
||
# 已验证的三步配方 (tests/sdB_spectra/GUIDE.md 实测, Teff=35000 logg=5.5):
|
||
# LTE grey (T T, NITER=0) -> NLTE 连续谱 (nc, ilvlin=0) -> NLTE 谱线 (nl, ilvlin=100)
|
||
# nc 步是关键:在不考虑谱线扰动下收敛 NLTE 电离平衡,给 nl 一个稳定种子。
|
||
# 跳过 nc(grey -> 完整 NLTE)会发散。
|
||
#
|
||
# 重要:不要在 nst 里设 CHMAX/ITEK,用 tlusty 默认值(CHMAX=0.001, ITEK=4)。
|
||
# 设 CHMAX=0.1 会让 nc 提前停止,给 nl 一个坏种子导致发散。
|
||
#
|
||
# nc 的 NITER=10 是实测最优(tests/sdB_spectra/GUIDE.md NITER 扫描结论):
|
||
# - NITER=10 总耗时 12.4min(35000K CNO 完整模型)
|
||
# - 光谱精度 vs NITER=50 差异仅 6e-6(完全等价)
|
||
# - NITER=50 浪费 2.2× 时间,NITER=200/500 更浪费且无收益
|
||
# 物理上 nc(纯连续谱)缺少谱线约束,外层温度永不真正收敛——追求高 NITER
|
||
# 没意义。nl(含谱线)会自修正到正确解(流量差异 <3e-12)。
|
||
chain:
|
||
- {label: lte, lte: T, ltgray: T, ilvlin: 0, require_converged: false, niter: 0}
|
||
- {label: nc, lte: F, ltgray: F, ilvlin: 0, require_converged: false, niter: 10}
|
||
- {label: nl, lte: F, ltgray: F, ilvlin: 100, require_converged: true, niter: 100}
|
||
|
||
# ---- 种子步进回退(旧字段,保留兼容;新配置见下方 tlusty 块)----
|
||
# 冷启动失败时,自动用已收敛的邻居模型作种子,用 LTGRAY=F 热启动重试。
|
||
# 这是高温 He-poor / 富金属区收敛的关键(见 EXPERIENCE.md §5Y)。
|
||
# 失败的冷启动结果会备份到 <model>.coldfail/ 目录。
|
||
seed_step_fallback: true
|
||
|
||
# ---- 执行参数 ----
|
||
timeout_sec: 7200 # 单模型墙钟时间上限(120分钟)
|
||
|
||
# ---- 光谱合成 SYNSPEC 控制参数(旧字段,数值参数;启用开关见下方 synspec_stage)----
|
||
synspec:
|
||
wstart: 3000.0 # 光谱波长起始点 (Å)
|
||
wend: 7000.0 # 光谱波长终止点 (Å)
|
||
imode: 0
|
||
idrv: 50
|
||
ifreq: 1
|
||
rel_cutoff: 0.0001
|
||
abs_cutoff: 0.01
|
||
|
||
# ====================================================================
|
||
# 阶段独立配置(见 docs/task_engine_decoupling_design.md §2-§3)
|
||
#
|
||
# TLUSTY / SYNSPEC 视为正交独立阶段,每阶段三维:
|
||
# enabled : 是否执行该阶段
|
||
# policy : skip_converged(增量) | force_recompute(强制重算) | skip_failed(忽略失败)
|
||
# strategies : 策略链队列,按回退优先级排序;节点执行 strategies[0],失败后服务端弹出首项
|
||
#
|
||
# 此处显式声明与旧 seed_step_fallback/synspec 块等价的默认配置,便于前端面板编辑。
|
||
# 旧字段(seed_step_fallback / synspec)保留作回退兜底,resolve 方法优先用本块。
|
||
# ====================================================================
|
||
tlusty:
|
||
enabled: true
|
||
policy: skip_converged
|
||
strategies: [cold_run, seed_step]
|
||
|
||
synspec_stage:
|
||
enabled: true
|
||
policy: skip_converged
|
||
strategies: [standard]
|
||
|