收敛攻坚(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 残点实测矩阵
29 KiB
81 点未收敛根因分析与稳定化种子步进修复(2026-08-18)
数据库快照:/home/fmq/下载/dcts.db(9135 completed / 81 failed)。
测试目录:dcts/test/20260818_failed81/。
一、81 点分类
| 群 | 点数 | 特征 |
|---|---|---|
| 20kK / he2(logg 5.5/6.0/6.5) | 66 | 全链(seed_nc→nl→nl_direct→Teff 轴 ladder)发散;ladder 中间步(22.5kK)收敛但最终步 20kK 发散 |
| 55–60kK / g5.0(he-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.13e19,STOP@10)。
| 变体 | 结果 | 结论 |
|---|---|---|
| ORELAX 0.5→0.3→0.2 | 雪崩轨迹几乎不变 | 欠松弛无效 |
| IACC=0(试图禁加速) | 与基线逐字节相同 | 源码 IF(IACC.LE.4) IACC=7(tlusty208.f:1928)——IACC=0 被重置,无效 |
| IACC=100(真禁加速) | STOP@7,更快爆 | 加速不是根因 |
| logg 轴 ladder(g6.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,深度 4–9 外层 |Δ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-1:nl_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 APIfind_exact_family_seed_from_db,排除自身名), 排除跨 Teff/logg 种子(不在配方适用域)。 - executor:该策略恒用稳定化链(用户自定义链不带旋钮,不采纳)。
- 工作流 YAML:
strategies: [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-10:17 点(全 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:
- Bug A(主力,78 个任务 rc=2):executor 的
needs_seed_download只认seed_step策略,不认seed_step_stab→ 种子未下载,seed_nc 阶段无 fort.8, TLUSTY 读种子直接 EOF 崩溃(tlusty rc=2 or missing fort.7,0.2s 内失败)。 修复:matches!(current_strategy, "seed_step" | "seed_step_stab")。 - 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)+ 55–60k/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 点的制胜组合就是 tier1(DPSILG=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,从未轮换过种子。
修复:种子轮换
find_exact_family_seed_from_db的exclude: Option<&str>改为&[String]排除列表。- 新增
db.list_used_seed_names(point, workflow):本点历史任务用过的全部 种子名(DISTINCT)。 - 调度两处接入排除:
resolve_dispatchable_chain的 seed_step_stab 分支注入已用种子 → 每次重派自然轮换;trigger_strategy_fallback:seed_step_stab 失败且链耗尽时,若还有 未试过的同族邻居则以单顺位["seed_step_stab"]重链重派(wave=0 优先); 邻居全部试过后落入 failed 终态——轮换次数受同族邻居数(45–60 个)天然 约束,无死循环风险。实际预期在前几次轮换(距离 1 邻居圈)内命中制胜组合。
- 回归测试:
test_find_exact_family_seed_rotation(轮换到第二个邻居、 全排除后 None)。全套 10 个测试套件通过。
部署与预期
重新部署 server(node 无改动)+ 重启工作流(skip_converged)。预期 20k 群 再回收 ~17 点(测试已验证的组合),残余约 14(20k 真残余)+ 0–13(60k)。
十、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 三项):
- 20k:14/14 全部物理收敛。制胜组合均为 t1/t2(生产链内建档位)×
特定 CNO 邻居种子(距离 2-3,非最近邻);g6.5 存在「种子星」
t20000_g6.5_he2_c-2_n-3_o-2(对 9 点有效)。§九 的种子轮换按距离 升序枚举即可命中,无需新增生产代码——部署轮换修复后 20k 群 31 个 失败点预期全部回收。 - 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 生产代码落地(§十一 工程要求实现)
- 自适应 Teff 延拓(
runner.rsladder 回退块):Teff 轴为主且间隔2500K 时,替换固定 ≤2500K 均分档为自适应步长控制——初始 1250K、 成功 ×1.5(上限 1250K)、失败二分(下限 25K)、最多 48 步;失败步 产物不传递(沿用上一收敛态),步长低于 25K 判折叠墙中止。收敛梯级 照旧登记 ladder_seeds 供簇内共享;终点由 nl_ladder 收尾。logg 轴与 短间隔维持原固定档(自适应仅 Teff 轴经 60k 验证)。
- 稳定化旋钮温度域门控(两处):
executor.rs resolve_execution_chain:Teff>30kK 时 seed_step_stab 降级为普通种子链(不再恒用 default_seed_stab_chain);runner.rsSTAB_TIERS 多档回退:Teff>30kK 跳过全部档位。 依据:60k/g5.0 高金属域实测 DPSILG/POPZER 族旋钮致散(§十一)。 新增回归测试seed_step_stab_teff_domain_gating。
- 同 CNO 跨温种子方向:无需改动——
calculate_seed_distance的 exact_family(2026-08-14 修复)已含 ΔTeff≤5000K 且同 CNO 距离为 0 (最优排序),55k→60k / 50k→55k 制胜种子方向天然可用。 - 折叠排除终态标记:暂缓(需新增 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-1(60k/g5.0/氢主导、高氧 o-1 角,24 次尝试)。
详见 test/20260822_last1/RESULT.md。
根因 A:延拓阶段迭代饥饿(物理层,已修复)
8-21 12:11 生产任务(种子 n-2)axlad_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):
- 事务内:任务行 failed + 网格点 failed + workflow 完成 flip(条件仅 「无 pending/queued/running 点」);
- 事务后: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 SQL(record_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=NULL(NULL>1 不为真)→ 保守放行;
- 修复后顺序:失败上报 → flip 被阻塞 → 回退正常派发 → 点回 queued → 链耗尽后 flip 恢复。
回归测试 test_workflow_flip_blocked_by_unconsumed_fallback_chain
(3 顺位链阻塞 → 单顺位链放行)通过;全套 212 测试通过。
部署要求
本轮仅改 server(db/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_ladder(0.51 dex)→ axlad_n 300 迭代走完 → 收敛。
审查驱动补强(2026-08-22 subagent 复审,4 项修复)
复审确认主路径有效(SQL 口径与 pop 严格镜像、快照实证同一行、恢复链路 seed_step→waypoint 逐步核实、无永久卡 running、全测通过),另发现 4 项:
- 【高】链尾 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/…),轮换 每次消耗一个种子、单调收敛,不会永久阻塞。 - 【中】synspec 双链 OR 永久卡死隐患:synspec 回退任务行刻意保留完整 tlusty 审计链(scheduler.rs synspec 臂 clone),len≥2 恒真 → synspec 启用的工作流 flip 永久阻塞。修复:按行 failed_stage 阶段归因(镜像 pop 的 stage→列映射,NULL→tlusty)只看对应链。
- 【低】固定梯末步 nl_ladder 漏提升:中间梯级 300、最难的目标逼近末步
反而 100(越近目标越慢收敛)。修复:
final_step.niter.max(300)。 - 【低】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 重投
阈值 21600s(claimed_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=completed,tlusty 收敛 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.000,final 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_stats(grid.rs 双分支)与list_workflows聚合新增tlusty_converged(不按 method 拆的权威总数) 与seed_step_stab_converged;WorkflowStats/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_status:7452 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 空历史点的逐点审查
是否真收敛——三重独立证据,结论:是。
- 任务链:9 点各有且仅有一个 completed 完整管线任务(tlusty_enabled=1、
synspec_enabled=1、cold_run/seed_step),max_relc 0.000114
0.000933 全部 < 1e-3,elapsed 15007500s 为真实完整计算; - 种子库:9/9 在 seeds 表注册 is_clean=1 且服务端
.7在档——种子注册 仅发生在「收敛 + 大气无 NaN」的成功上报/导入路径; - 功能验证(最硬):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-6(d16b3d3/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),让列经由真实计算路径写入。