Files
DCTS/docs/failed81_cno_seed_popzer_dpsilg_2026_08_18.md
fmq f2700031ce feat(all): seed_step_stab 稳定化种子链与同族种子轮换、ladder/自适应 Teff/丰度轴延拓三级回退与梯级种子入库复用、热启动首末比豁免、workflow 完成翻转回退链阻塞修复、大气收敛权威统计与 M14 回填
收敛攻坚(81/400 失败点根因与实测,见 docs/failed81_cno_seed_popzer_dpsilg_2026_08_18.md):
- runner: 新增 seed_step_stab 策略链——同物理族(同 Teff/logg/logHe)CNO 邻居种子
  + DPSILG=3.0 λ 算子欠松弛 + POPZER=1E-10 微布居置零(联动 POPZR2/RADZER 同值
  + NITZER=1),针对 20kK He 富大气 He I/II 电离前沿布居极限环
- runner: 三级链内延拓回退(主链与 nl_direct 全败后自动触发):
  · 固定 ladder 步进——plan_ladder_steps 按归一化间隔选轴,Δlogg≤0.25/ΔTeff≤2.5kK,≤4 步
  · 自适应 Teff 延拓——步长 1250K 起、成功 ×1.5 恢复、失败二分至 25K 折叠墙,≤48 步
  · C/N 丰度轴延拓——高温域(Teff>30kK)专用,严格同族种子沿 C(优先)/N 轴 0.2 dex 起步
  延拓阶段 NITER 下限提至 300(慢收敛 waypoint 迭代饥饿误判修复)
- runner: 稳定化多档回退(DPSILG/POPZER 三档互补,联合回收 41/65);
  域门控 Teff≤30kK——高温高金属域实测旋钮致散(17 拍爆至 4e16),域外跳过
- 梯级种子持久化: 收敛中间模型登记 ladder_seeds 随上报落 server seeds 表
  (任务失败也上传,合成名 _ladder 与真实网格点零冲突),簇内相邻失败点自动复用

调度与执行:
- scheduler: 策略解析新增 seed_step_stab 臂——find_exact_family_seed_from_db 严格
  同物理族判定(不做 global 退化,防 ladder 中间种子 ΔTeff≤5000K 误命中),
  排除本点历史已用种子实现重试轮换;链在 stab 耗尽时轮换未试过同族邻居重派
- executor: seed_step_stab 补种子下载(漏列曾致 78 任务假失败,seed_nc 无 fort.8 崩溃);
  Teff>30kK 域外自动降级普通种子链

收敛判据:
- conv_check: 热启动豁免——首拍 max_relc<1(种子已近解)时首末比 1e3 判据数学上
  不可达,豁免后交五重物理硬门槛裁决(修复 nl_ladder 0.038→6e-4 物理全过被误杀);
  冷启动仍受判据门控

workflow 生命周期:
- workflows/tasks: 完成 flip 增加「未消费回退链」阻塞子句——failed 点策略链未耗尽
  或链尾 seed_step_stab 尚有未试过同族种子时不得置 completed(修复最后活跃点 cold
  失败上报抢先 flip、still_running 守卫拦截后续策略永不派发);按 failed_stage 归因
  (synspec 失败行只看 synspec 链,防 stale 审计副本永久卡死)+ json_valid 脏行防护

统计与前端:
- 统计新增权威口径 tlusty_converged(不按策略拆)与 seed_step_stab_converged 分项,
  前端详情页色带/概览卡消费权威总数并新增稳定化青色段(修复 stab 收敛点漏计,
  生产 9137/9216 差额);M14 迁移回填历史 completed 点的 tlusty_status

文档:
- 新增 failed81 POPZER/DPSILG 制胜配方根因分析、Windows 节点经跳板 RDP 运维手册;
  failed400 增补 ladder 生产化实现与第二轮 121 残点实测矩阵
2026-09-02 19:37:25 +08:00

29 KiB
Raw Permalink Blame History

81 点未收敛根因分析与稳定化种子步进修复(2026-08-18)

数据库快照:/home/fmq/下载/dcts.db9135 completed / 81 failed)。 测试目录:dcts/test/20260818_failed81/

一、81 点分类

点数 特征
20kK / he2logg 5.5/6.0/6.5 66 全链(seed_nc→nl→nl_direct→Teff 轴 ladder)发散;ladder 中间步(22.5kK)收敛但最终步 20kK 发散
5560kK / g5.0he-4 / he-2 15 同样全链发散;57.5k 中间步部分收敛但 60k 最终步发散
假收敛否决误杀 2(含在上面) nl_ladder 实际收敛且物理硬门全过,被"首末 max_relc 比 < 1e3"否决

二、逐项排除的假设(20k 群代表点 t20000_g6.5_he2_c-4_n-3_o-4

基线复现:用生产的 22.5k ladder 种子热启动 20k 最终步,轨迹与生产逐拍一致 iter1=18.2 → KANTOROVICH 加速介入 → iter10 雪崩 1.13e19STOP@10)。

变体 结果 结论
ORELAX 0.5→0.3→0.2 雪崩轨迹几乎不变 欠松弛无效
IACC=0(试图禁加速) 与基线逐字节相同 源码 IF(IACC.LE.4) IACC=7tlusty208.f:1928)——IACC=0 被重置,无效
IACC=100(真禁加速) STOP@7,更快爆 加速不是根因
logg 轴 ladderg6.0→6.25→6.5 6.25 收敛,6.5 雪崩 换轴无效
更细 logg 步(Δ0.125 极限环 0.22 该区存在真实电离前沿不稳定性
CNO 邻居种子(同 T/g 雪崩 1.7e4 光换种子不够
POPZER=1E-20(官方默认值) 雪崩不变 太保守
POPZER=1E-10 雪崩消失,极限环 0.41 微布居置零是关键稳定器
POPZER=1E-8 雪崩 过度置零破坏解
CNO 邻居种子 + POPZER=1E-10 + DPSILG=3.0 收敛 2e-4 制胜配方

制胜模型全过五重物理硬门:温度结构三项 、emflux=1.0013 、 首末 max_relc 比 4.5e5(不触发假收敛排查)

三、物理根因

  • 20k 群:fort.9 列语义(ITER ID TEMP NE POP RAD MAXIMUM ilev ifr)显示 雪崩在布居列,振荡能级为碳(ilev 38=C I 基态、103=C III)与氦 ilev 20=He I,深度 49 外层 |ΔPOP|≈0.2 极限环)。He 富(He/H=100)大气 在 20kK 的 He I/II 电离前沿 + 微量碳(logC=-4)的电离平衡处于牛顿迭代 临界点:微布居在深度间振荡放大成雪崩。POPZER 把可忽略微布居剔除出方程 (官方标准输入恒设此机制,我们生产 nst 此前完全未设)、DPSILG 限制 λ 算子 单步变化幅度,两者组合把迭代拉回收敛域。
  • 60k/g5.0 群(15 点):同 CNO 的 g5.5 收敛模型、仅 Δ0.25 logg 的步进也在 3 拍内雪崩(3.3e23)——目标解在牛顿域之外,与第三轮结论一致。工程层 (种子/步进/阻尼/置零)全部无效,属求解器级问题或应接受为不收敛角落。

四、假收敛否决误杀(2 点)

t55000_g5.0_he-4_c-3_n-4_o-1nl_ladder 末次 max_relc=6.03e-4 < chmax 能量/温度/emflux/b 因子四项校验全过,却被"首末比 63 < 1000"硬否决。 热启动时种子已接近解,首拍 max_relc 被钳在低位,首末比数学上不可能达到 1e3 量级——判据对热启动系统性误判。

修复(conv_check.rs check_convergence_trace):首拍 max_relc < 1.0 时豁免 首末比判据(valid=true + 豁免说明),真伪收敛交由五重物理硬门槛裁决。

五、生产集成:seed_step_stab 策略

  • ChainStep 新增 dpsilg / popzer 字段(nst_writer 写出 DPSILG 及 POPZER/POPZR2/RADZER 同值联动组 + NITZER=1,行宽自动保护 ≤75 字符)。
  • runner::default_seed_stab_chain():种子链(seed_nc→nl)全步带 DPSILG=3.0 + POPZER=1E-10。
  • 调度:seed_step_stab 顺位仅在 exact_family(同 Teff/logg/logHe、仅 CNO 不同)内找种子(新 db API find_exact_family_seed_from_db,排除自身名), 排除跨 Teff/logg 种子(不在配方适用域)。
  • executor:该策略恒用稳定化链(用户自定义链不带旋钮,不采纳)。
  • 工作流 YAMLstrategies: [cold_run, seed_step, seed_step_stab]

六、验证

  • 单测:热启动豁免 ×2、nst 稳定化旋钮写出、stab 链形状/旋钮,全绿 (10 个测试套件全过,clippy 仅 2 个预存在 div_ceil 警告)。
  • 全 20k 群 65/66 点批量实测(test/20260818_failed81/full20k*,最近同物理族 干净种子):稳定化配方对 (DPSILG, POPZER) 组合逐点敏感,四档互补——
    • 一档 DPSILG=3.0/POPZER=1E-1017 点(全 g6.5
    • 二档 DPSILG=2.0/POPZER=3E-11+14 点(g6.0/g6.5
    • 三档 DPSILG=2.0/POPZER=1E-11+10 点(含全部 4 个 g5.5
    • 四档 DPSILG=2.5/POPZER=1E-11+1 点
    • 联合覆盖 42/65,全部通过温度结构物理判据;剩余 23 点对四档均不收敛 (需逐点参数搜索或求解器级工作,后续迭代) 生产接线:seed_step_stab 策略链携带一档;runner 内稳定化多档回退 nl_stab2/3/4(全链失败后逐档自原始种子重跑,任一档收敛即采纳)。
  • 60k/g5.0 群 15 点:本轮再次确认工程层不可解,保持"求解器级/接受不收敛"结论。

七、部署要求

重新部署 server + node(双方都有改动:scheduler/db 与 runner/nst_writer)。 重跑策略链后预期:20k 群 42 点由 seed_step_stab(一档)+ nl_stab2/3/4(二至 四档)回收;2 个假收敛误杀点修复后重试即收敛;其余(20k 群 ~23 点 + 60k/g5.0 群 15 点)预计仍失败(如实归因)——20k 残余点需逐点参数搜索 (后续迭代),60k/g5.0 群属求解器级/接受不收敛。

八、2026-08-19 部署后 79 点复盘(两个接线 bug)

重新部署后失败数 81→79(仅回收 2 个假收敛误杀点;42 个验证点全部未回收)。 DB 239 个新任务分析定位两个 bug:

  1. Bug A(主力,78 个任务 rc=2executor 的 needs_seed_download 只认 seed_step 策略,不认 seed_step_stab → 种子未下载,seed_nc 阶段无 fort.8 TLUSTY 读种子直接 EOF 崩溃(tlusty rc=2 or missing fort.70.2s 内失败)。 修复:matches!(current_strategy, "seed_step" | "seed_step_stab")
  2. Bug B(种子选错)find_exact_family_seed_from_db 复用了 calculate_seed_distance 的 is_exact 判定,其容忍 ΔTeff≤5000K——把 ladder 中间种子(如 t22500_g6.5_...CNO 距离 0)当成同族且排最前。稳定化配方的 验证前提是同温同重力仅差丰度,必须严格 Teff/logg/logHe 逐值相同。 修复:改为严格判定 + 回归测试 test_find_exact_family_seed_strict_same_family

60k/g5.0 群(15 点)与 20k 残余 23 点的失败为真实物理失败(如期),不受这两个 bug 影响。修复后需再次重新部署 server + node。

九、2026-08-20 部署后 44 点复盘(种子逐点敏感 → 种子轮换修复)

Bug A/B 修复部署后失败 79→44(回收 35 点,链路全部按设计执行: seed_nc→nl→nl_direct→nl_stab2/3/4,种子均为严格同族 CNO 邻居,无 rc=2)。

归因

44 点分布:20k/he2 群 31 点(g5.5×4 / g6.0×8 / g6.5×19+ 5560k/g5.0 群 13 点。

与 08-18 直接测试的四档矩阵结果交叉比对(union 收敛 45/65,物理收敛判据 末拍 max_relc<1e-3 且 fort.7 无 NaN):

  • 17 个 20k 点在测试中收敛、生产却失败。逐一比对种子:测试制胜种子与 生产选中种子全部不同(同为 CNO 距离 1–2 的邻居,但换的元素方向不同, 如测试用 ΔO=1 而生产用 ΔN=1)。配方不仅对 (DPSILG,POPZER) 逐点敏感, 对种子本身也逐点敏感
  • 其中 11 点的制胜组合就是 tier1DPSILG=3.0/POPZER=1E-10+ 特定距离 1 邻居——即生产首轮就会用到的档位,只差换对种子。
  • 其余 14 个 20k 点在测试四档下也全部失败(真残余,需逐点参数搜索或接受)。
  • 13 个 60k/g5.0 点维持求解器级失败的既有结论;但它们在 seeds 表中有同族 候选(40–295 个),轮换机制会一并尝试,或有少量意外回收。

根因(工程层)

生产每次重试 find_exact_family_seed_from_db 按 CNO 距离排序稳定选中同一 个种子,重试只是重复同一组合(种子×四档)白跑;且 seed_step_stab 是链上 最后一项,失败弹出后链空 → 直接终态 failed,从未轮换过种子。

修复:种子轮换

  1. find_exact_family_seed_from_dbexclude: Option<&str> 改为 &[String] 排除列表。
  2. 新增 db.list_used_seed_names(point, workflow):本点历史任务用过的全部 种子名(DISTINCT)。
  3. 调度两处接入排除:
    • resolve_dispatchable_chain 的 seed_step_stab 分支注入已用种子 → 每次重派自然轮换;
    • trigger_strategy_fallbackseed_step_stab 失败且链耗尽时,若还有 未试过的同族邻居则以单顺位 ["seed_step_stab"] 重链重派(wave=0 优先); 邻居全部试过后落入 failed 终态——轮换次数受同族邻居数(45–60 个)天然 约束,无死循环风险。实际预期在前几次轮换(距离 1 邻居圈)内命中制胜组合。
  4. 回归测试:test_find_exact_family_seed_rotation(轮换到第二个邻居、 全排除后 None)。全套 10 个测试套件通过。

部署与预期

重新部署 server(node 无改动)+ 重启工作流(skip_converged)。预期 20k 群 再回收 ~17 点(测试已验证的组合),残余约 14(20k 真残余)+ 0–1360k)。

十、2026-08-20 残余 27 点直接测试:20k 全可回收、60k 求解器级定论(60k 结论后被 §十三 翻案)

针对 §九 后仍失败的 14 个 20k 真残余点与 13 个 60k/g5.0 点,批次 dcts/test/20260820_residual27/(249 个单阶段热启动运行,判据 = 末拍 max_relc<1e-3 + fort.7 无 NaN + check_temperature 三项):

  1. 20k14/14 全部物理收敛。制胜组合均为 t1/t2(生产链内建档位)× 特定 CNO 邻居种子(距离 2-3,非最近邻);g6.5 存在「种子星」 t20000_g6.5_he2_c-2_n-3_o-2(对 9 点有效)。§九 的种子轮换按距离 升序枚举即可命中,无需新增生产代码——部署轮换修复后 20k 群 31 个 失败点预期全部回收。
  2. 60k/g5.0:13/13 仍不可收敛,定论为求解器级。在近邻种子基础上 穷尽五族输入层旋钮——tier1 配方、DPSILT/DPSILN/DPSILD 热分量钳制、 ORELAX=0.3/0.2 强松弛、极端钳制(DPSILG=2/DPSILT=1.2/DPSILN=1.2)—— 全部在 iter 4-10 内 **** STOP in SOLVE(牛顿矩阵奇异、线性解失败, 阻尼类旋钮作用于更新步、到不了 SOLVE 内部)。与 §一/§三「Newton 排除域」结论一致:除非修改 TLUSTY 求解器本体,建议接受这 13 点为 不收敛角落。

十一、2026-08-20 60k/g5.0 群 13 点攻坚:10 点物理收敛,3 点折叠排除("折叠排除"已被 §十三 翻案为 13/13)

继 §十 后针对 60k 群的专项测试(test/20260820_residual27/,累计 500+ 次运行)。过程中修正两个方法论错误:① fort.9 每拍 max_relc 应取该拍 全深度最大值(非末行);② salvage 种子库存在跨尝试工件混叠,种子 必须配对同阶段 .9 末拍收敛(真验证池 259 个)。另发现 DPSILG/POPZER 稳定化旋钮在高 CNO 60k 上致散(自复现实验证实),§五/§九 配方仅在 20k He-rich 域有效。

制胜配方(10/13 点物理收敛,三项判据全过):同 CNO 跨 Teff(Δ5k 冷端)真收敛种子 → 纯档自适应 Teff 延拓plain nst,步长 1250K 起、 失败二分、最小 25K、成功×1.5 恢复)。本地无跨温种子时级联(50k→55k 收敛后再 55k→60k)。

折叠排除 3 点he-2 c-4_n-4、he-4 c-4_n-3、he-4 c-4_n-4):Teff (二分至 25K)、logg(5.125 以下全爆)、O 丰度(二分至 0.025 dex)三条 独立延拓轴全部在目标前折叠,IACC=100/ORELAX=0.3/NITER=500 亦无效—— 判定为静力解不存在的物理角落(60k/g5.0 最大金属组合,辐射加速度逼近 引力),建议接受为不收敛终态。

对 15-80k 网格扩展的工程要求:① runner 需新增自适应 Teff 延拓 (替换固定 2500K 阶梯);② 种子搜索需纳入同 CNO 跨 Teff 方向(冷端 优先);③ 稳定化旋钮按温度域门控(仅 20k He-rich);④ 设计「折叠排除」 终态标记避免扩展网格时对此类角落无限重试。

十二、2026-08-21 生产代码落地(§十一 工程要求实现)

  1. 自适应 Teff 延拓runner.rs ladder 回退块):Teff 轴为主且间隔

    2500K 时,替换固定 ≤2500K 均分档为自适应步长控制——初始 1250K、 成功 ×1.5(上限 1250K)、失败二分(下限 25K)、最多 48 步;失败步 产物不传递(沿用上一收敛态),步长低于 25K 判折叠墙中止。收敛梯级 照旧登记 ladder_seeds 供簇内共享;终点由 nl_ladder 收尾。logg 轴与 短间隔维持原固定档(自适应仅 Teff 轴经 60k 验证)。

  2. 稳定化旋钮温度域门控(两处):
    • executor.rs resolve_execution_chainTeff>30kK 时 seed_step_stab 降级为普通种子链(不再恒用 default_seed_stab_chain);
    • runner.rs STAB_TIERS 多档回退:Teff>30kK 跳过全部档位。 依据:60k/g5.0 高金属域实测 DPSILG/POPZER 族旋钮致散(§十一)。 新增回归测试 seed_step_stab_teff_domain_gating
  3. 同 CNO 跨温种子方向:无需改动——calculate_seed_distance 的 exact_family2026-08-14 修复)已含 ΔTeff≤5000K 且同 CNO 距离为 0 (最优排序),55k→60k / 50k→55k 制胜种子方向天然可用。
  4. 折叠排除终态标记:暂缓(需新增 GridPointStatus 变体并波及前端/ 调度语义,属产品决策);当前 3 个折叠点保持 failed 终态,§十一 已 记录三轴证据。

全套 210 测试通过;clippy 仅余 2 个既有 div_ceil 警告。需重新部署 server + node(两 crate 均有改动)。

十三、2026-08-21 独立审查 + C/N 丰度轴翻案:13/13 全部可收敛

独立审查(subagent 全量复核)

  • 证实fort.9 判据(源码级:PRCHAN 恒 9 列、MAXIMUM=第 7 字段、CHM 取全深度最大、LFIN=|CHMX|≤CHMAX);10 个收敛点零假阳性(末拍全深度 最大 4.0e-4~9.9e-4、fort.7 干净、温度结构三项过、种子链 md5 连续); 稳定化致散对照实验公平(selfrepro3 vs smoke 仅 nst 旋钮行不同); §十二 生产代码正确。
  • 证伪两处失败侧证据:① tlad3 的 64 个 stab 步是 nst 行超长解析崩溃 (非物理发散)——出现在脚本修复前的日志里;② glad logg 轴链被失败态 污染(失败步 fort.7 被当种子传递)+ stage.5 logg 截断(5.125→"5.12" ——logg 轴"二分耗尽"证据无效。两点均不改变当时总判决,但提示 he-2_c-4_n-4 的折叠证据实际只剩 Teff+O 两轴。
  • 审查修复已入代码:自适应延拓 label 精度 0.01k(防重名);到达目标后 直接采纳(去冗余 nl_ladder 重跑)。

C/N 丰度轴延拓:折叠结论翻案

针对 3 个"折叠点"补测此前未走通的 C/N 丰度轴(同 T/g/He 的 CNO 邻居 真收敛种子,0.2 dex 起二分至 0.025 dex):

C 轴 N 轴
he-2 c-4_n-4_o-1 13 步 9 步
he-4 c-4_n-3_o-1 13 步 爬升至 -2.41(冗余证据)
he-4 c-4_n-4_o-1 13 步 爬升中(冗余证据)

三点 C 轴全部物理收敛(三项判据过)→ "静力解不存在"结论撤销: 解存在,可达方向在 C/N 丰度轴(Teff/logg/O 三轴确实折叠,但非充分 证据)。13/13 全部可收敛

生产落地(runner 丰度轴延拓回退)

runner.rs 新增丰度轴延拓回退块(与域门控互补,仅 Teff>30kK 启用): 严格同族(同 T/g/He 仅 CNO 不同)种子 → C 轴优先、N 轴兜底,0.2 dex 起、成功 ×1.4(上限 0.25)、失败二分(下限 0.025)、每轴 40 步、 失败步不传递;收敛梯级登记 ladder_seeds。接线单测 unit_axlad_c_axis_fallback_wiring 通过;全套 211 测试通过。

生产路径闭环:seed_step_stab(高温降级普通链)注入 exact-family CNO 邻居种子 → seed_nc/nl 失败 → Teff 延拓(种子同温无步)→ stab 跳过 (域门控)→ 丰度轴延拓收敛。§九 种子轮换在失败时自动换下一邻居。

十四、2026-08-22 最后 1 点收编:axlad 迭代饥饿修复(LADDER_STAGE_NITER+ server 部署不一致发现

§十二/§十三 代码部署后 44 点中 43 点恢复,唯一残余 t60000_g5.0_he-4_c-4_n-4_o-160k/g5.0/氢主导、高氧 o-1 角,24 次尝试)。 详见 test/20260822_last1/RESULT.md

根因 A:延拓阶段迭代饥饿(物理层,已修复)

8-21 12:11 生产任务(种子 n-2axlad_n 已从 -2 收敛到 -3.490,随后 -3.568/-3.529 两步 best=0.002/0.005 卡满 100 迭代且仍在单调下降——不是 发散,是 NITER=100 迭代饥饿;二分触底 0.025 dex 后被误判"轴折叠"。

离线复现(NITER=300,种子=生产 n-3 收敛大气):n=-3.52373 于第 103 迭代收敛(恰好超旧上限 3 次);全程 5 个 waypoint 需 >100 迭代 103/111/111/127/147),16 步走通 -3.0→-4.0,目标点 4.1e-04、三项温度 检查过、无 NaN。9216/9216 全网格物理可解。

修复:runner.rs 新增 LADDER_STAGE_NITER=300,自适应 Teff 延拓/固定梯/ 丰度轴延拓三站点统一 niter.max(300)(TLUSTY 收敛即停,快阶段与真发散 步均不受损)。全套工作区测试通过。

根因 B:server 部署二进制与工作区不一致(部署层,需重建)

12:11 任务给 n-4 挂了 8-19 已用过的 n-2 种子——违反当前代码的 list_used_seed_names 排除;且按 directed_cno_distance 排除后应选 c-2_n-4_o-1。与"无排除 + 种子表序"旧行为吻合 → 部署的 server 二进制 构建自中间状态(至少缺 resolve 路径种子轮换排除)。node 端为新 (axlad 已运行)。需以当前工作区重建重部署两端。

有利条件与预期恢复

  • n-3 点 8-21 12:05 任务已用同款 axlad 从 -2 走到 -3.000 收敛(24 步), 种子已注册;
  • n-4 失败任务已注册 waypoint 种子最深至 ..._n-3.489798_o-1_ladder (距目标 0.51 dex、从未用过)——重部署后首个 seed_step_stab 派发自然 选中它,axlad_n 以 300 迭代走完剩余 0.51 dex 即收敛。

十五、2026-08-22 二次重试仍失败:完成翻转 × 回退触发顺序竞态(flip 阻塞修复)

§十四 修复部署后(8-22 03:46)重试仍失败,且只派发了 1 个 cold_run 任务 (14 分钟发散)后整链静默终止——无 seed_step/seed_step_stab 后续任务。

根因(server 顺序竞态,非物理)

失败上报处理链(api/task.rs → record_task_report 事务 → trigger_strategy_fallback):

  1. 事务内:任务行 failed + 网格点 failed + workflow 完成 flip(条件仅 「无 pending/queued/running 点」);
  2. 事务后:trigger_strategy_fallback 派发下一策略——但其 still_running 守卫发现 workflow 已是 completed → 直接跳过

该点为最后一个活跃点(9215 completed + 1 failed),失败上报的同一事务内 flip 条件即满足(workflows.updated_at=04:00:50 = 上报时刻,实证)→ cold_run 之后的策略链永不派发。此前从未暴露:只有当失败点不是最后一个 活跃点时,flip 条件不满足、回退正常(8-21 的 09:45→10:04→12:11 三连回退 正是因为当时还有其它点在跑)。

修复:完成 flip 增加「未消费回退链」阻塞子句

db/workflows.rs 新增共享子句 UNCONSUMED_FALLBACK_BLOCKER_SQL,两条 flip SQLrecord_task_report 事务内 + 后台 30s 对账)统一追加:

存在 failed 点、其最新 failed/timeout 任务行(镜像 pop 的 ORDER BY created_at DESC, rowid DESC 口径)的 tlusty 或 synspec 策略链 json_array_length > 1(弹掉刚失败首项后仍有顺位)→ 不翻转 completed。

  • 链随每次失败上报严格变短,终会耗尽(长度 1)→ 不永久阻塞完成;
  • JSON 异常 → json_array_length=NULLNULL>1 不为真)→ 保守放行;
  • 修复后顺序:失败上报 → flip 被阻塞 → 回退正常派发 → 点回 queued → 链耗尽后 flip 恢复。

回归测试 test_workflow_flip_blocked_by_unconsumed_fallback_chain (3 顺位链阻塞 → 单顺位链放行)通过;全套 212 测试通过。

部署要求

本轮仅改 serverdb/tasks.rs、db/workflows.rs、db/mod.rs 测试); node 无需重新部署。server 需用当前工作区再次重建重部署,然后按既有 流程重试 failed 点。预期链路:cold 失败(flip 不再提前杀链)→ seed_step 55k ladder 种子,失败)→ seed_step_stab 排除已用种子后选中 ..._n-3.489798_o-1_ladder0.51 dex)→ axlad_n 300 迭代走完 → 收敛。

审查驱动补强(2026-08-22 subagent 复审,4 项修复)

复审确认主路径有效(SQL 口径与 pop 严格镜像、快照实证同一行、恢复链路 seed_step→waypoint 逐步核实、无永久卡 running、全测通过),另发现 4 项:

  1. 【高】链尾 rotation 仍会被吞(同构 bug 后退一环):最后一个活跃点以 [seed_step_stab](长度 1)失败时,blocker 放行 flip → rotation 臂 (换种子重派,§九机制)被 still_running 守卫拦截 → waypoint 只有 一次机会。修复:blocker 增加「种子轮换待执行」子句——链尾 seed_step_stab 失败且存在未试过的同物理族干净种子(teff/logg/loghe 逐值相等、is_clean=1、不在本点已用种子集)→ 阻塞翻转。快照实测该点 有 96 个未用同族候选(waypoint 阶梯 -3.4898/-3.4337/…),轮换 每次消耗一个种子、单调收敛,不会永久阻塞。
  2. 【中】synspec 双链 OR 永久卡死隐患:synspec 回退任务行刻意保留完整 tlusty 审计链(scheduler.rs synspec 臂 clone),len≥2 恒真 → synspec 启用的工作流 flip 永久阻塞。修复:按行 failed_stage 阶段归因(镜像 pop 的 stage→列映射,NULL→tlusty)只看对应链。
  3. 【低】固定梯末步 nl_ladder 漏提升:中间梯级 300、最难的目标逼近末步 反而 100(越近目标越慢收敛)。修复:final_step.niter.max(300)
  4. 【低】json 防护json_array_length/json_extract 对非法 JSON 抛 malformed JSON 错误而非返回 NULL——一条脏行会让 record_task_report 整个结算事务失败。修复:json_valid 守卫(脏行按长度 0 放行)+ 注释更正。

回归测试新增 test_workflow_flip_blocked_by_seed_rotation_pending (无候选放行 → 注入候选阻塞 → 消耗候选后放行)与 test_workflow_flip_stage_attribution_ignores_tlusty_audit_copy synspec 耗尽行 + tlusty 审计副本 len3 不阻塞);全套 214 测试通过。

运维附注(审查 #5/#6):

  • NITER=300 拉长任务墙钟(55k→60k 重走 + axlad 可能 >6h),而 stale 重投 阈值 21600sclaimed_at 不随心跳刷新)——攻坚期间建议调大 DCTS_STALE_SEC(如 43200),避免任务被重投双跑。
  • seed_step 臂将在 35 个 d=0.0 并列种子中选中最早插入的 55k 真实点 (exact 族内距离不含 Teff 项),节点需重走 55→57.7k 折叠墙(预期失败、 耗时数小时)后才轮到 seed_step_stab→waypoint;属效率问题非正确性, 后续可考虑并列时按 Teff 邻近决胜(暂不动 seed_finder 语义)。

十六、2026-08-25 全网格收官核验 + 前端「9137/9216 大气收敛」显示口径修复

收敛核验(快照 dcts.db

  • 9216/9216 网格点 status=completedtlusty 收敛 9207 + 9 个历史空状态点 (M14 回填后 9216)——全网格物理收敛达成。
  • 末点 t60000_g5.0_he-4_c-4_n-4_o-1 制胜链(8-24):55k 种子任务重走折叠墙 失败(23417s)→ waypoint -3.4898 种子任务失败(axlad 爬至 -3.825 后 中断)→ rotation 换 -3.6248 waypoint 种子 → axlad 以 107/107/175 迭代三连收敛(-3.725/-3.865/-4.000final 9.46e-04)——三个 waypoint 全部超过旧 NITER=100 上限,LADDER_STAGE_NITER=300 与 rotation/flip 修复 均为必要条件;五重物理门全过(energy 7.7e-4 / temp / emflux 1.00056 / bfac 0.0077 / result_valid)。

「9137 大气收敛」差额解剖

前端口径 大气收敛 = cold_run_converged + seed_step_converged(按 tlusty_success_method 分类),漏掉两类:

差额 数量 成因
seed_step_stab 收敛点 70 统计口径写于 2026-08-18 引入 stab 策略之前,未跟进
tlusty_status 空的历史点 9 Phase 5b 阶段列上线前完成的点,列值为 NULL

9207 70 − 9 = 9137,与前端显示精确吻合。)

修复(server 端 + 前端,均随 server 二进制打包)

  • 后端统计get_grid_summary_statsgrid.rs 双分支)与 list_workflows 聚合新增 tlusty_converged(不按 method 拆的权威总数) 与 seed_step_stab_convergedWorkflowStats/WorkflowListStats 同步 serde default 兼容旧 JSON)。
  • 前端:详情页计数行与指标卡改用 tlusty_converged(旧 server 回退 三桶和);TLUSTY 分段进度条与 parSets 新增「稳定化种子」档(teal 色, psSlot 按 method 三分)。
  • M14 迁移completed + method 非空 + tlusty_status 空 → 回填 'converged'method 仅在整管线成功时写入,回填安全;detect 幂等)。 快照实测回填 9 行,修复后前端显示 9216 大气收敛 (100%) (冷启动 5573 · 种子 3573 · 稳定化 70)。
  • 回归:M14 迁移测试 + stats 断言扩展;全套 215 测试过、clippy 0 错。

光谱侧现状(非本轮问题,仅记录)

工作流配置 synspec_stage.enabled: false(本攻坚期 TLUSTY-only)。快照 synspec_status7452 converged / 459 failed / 1305 空——459 个 failed 均 为 8-7 之前旧时代残留(无成功方法标记,synspec_success_method 全空), 1305 个空多为 TLUSTY-only 重跑后 clear_synspec 置空。若后续需要光谱全覆盖, 需另开一轮(重新启用 synspec_stage + skip_converged)。

附录(2026-08-26):9 个 tlusty_status 空历史点的逐点审查

是否真收敛——三重独立证据,结论:是。

  1. 任务链:9 点各有且仅有一个 completed 完整管线任务(tlusty_enabled=1、 synspec_enabled=1、cold_run/seed_step),max_relc 0.0001140.000933 全部 < 1e-3elapsed 15007500s 为真实完整计算;
  2. 种子库9/9 在 seeds 表注册 is_clean=1 且服务端 .7 在档——种子注册 仅发生在「收敛 + 大气无 NaN」的成功上报/导入路径;
  3. 功能验证(最硬):6/9 的大气被后续任务用作种子,5/9 有制胜案例—— 如 t55000_g5.0_he0_c-4_n-2_o-4 的大气 8-15 作为种子把 t60000_g5.0_he0_c-4_n-2_o-4 带到收敛(9.77e-04); t45000_g5.0_he-4_c-4_n-4_o-2 的大气 8-18 带收敛 t50000_g5.0_he-4_c-4_n-4_o-2(2.77e-04)。发散/垃圾大气做种子只会 立即爆炸,不可能制胜。 (注:Aug-1 时代产物未进 salvage、tasks.summary_json 早于 M1 列,故无法 做配对 .9 复核;以上为可得的最强证据。)

为什么恰好 9 个空(机制清楚)

  • 9 点的 TLUSTY 制胜上报全部发生在 8-1~8-2(重复派发混沌期,每点恰好 一次成功、前后皆失败重复派发;completed 终态被守卫保护未被翻黑);
  • tlusty_status 阶段列 8-6d16b3d3/M8)才存在M8 只 ADD COLUMN 不回填;此后 9 点再无任何任务(attempt_count 冻结),无上报可补写;
  • 同期(8-2 前制胜)606 点中 597 个的列已被一次中期批量修复补齐(该 修复同时写了全队列的 synspec_success_method='standard'——git 中无此 语句,应为当时手工修复 SQL),但它漏掉了这 9 个(8/9 的最后任务行是 failed,疑被其筛选条件排除;3 个例外说明条件并非单纯按最后任务状态)。 精确 SQL 已不可考,不影响收敛性判定。

补全M14 迁移(status='completed' AND method 非空 AND tlusty_status 空 → 'converged')即为此而设;method 的三个写入方(成功上报/mark_grid_ point_imported/upsert_point_summary)全部以收敛为前提,判定安全。快照实测 恰回填 9 行。若需绝对 belt-and-braces,可对这 9 点单独 force 重跑(各 ~30min),让列经由真实计算路径写入。