SpectraRust/.claude/skills/codegraph-guide/SKILL.md
fmq e2c1a4580a feat: F2R 重构全部完成 + 自动化脚本改进
Phase 1 翻译 (完成):
- TLUSTY 350 函数 100% 翻译
- SYNSPEC 168 函数 100% 翻译
- ~495 Rust 模块

Phase 2 集成 (完成):
- TLUSTY RESOLV 7 个 TODO 全部清除
- TLUSTY Runner IJALI 频率选择实现
- OPFRAC ioniz.dat 解析完整实现
- SYNSPEC Runner 编排流程连接完成
- SYNSPEC RESOLV OPAC→RTE→OUTPRI 调用链完整

Phase 3 验证 (完成, 修复 8 处 bug):
- INITIA: compute_hydrogen_level_bounds 索引混合修复
- INILIN: GAMR0/GS0/GW0 展宽公式修复, 经典 VdW 公式修复
- INIBL0: CNM 常数 2.997925e18→e17 修复
- OPAC: Lyman IJ=2 修正缺失修复
- RTE: minv3 矩阵求逆符号错误修复

自动化脚本改进:
- specf2r.sh: 添加 429 限流退避、完成检测、同步等待
- SKILL.md: 三阶段工作流 + 状态文件系统
- references/: Phase 1/2/3 独立参考文档

新增:
- src/bin/synspec.rs: SYNSPEC 可执行文件入口
- .f2r_phase/.f2r_tasks/.f2r_complete: 状态管理文件

编译: 0 错误 | Clippy: 0 错误 | 测试: voigt 28 + eldens 5 通过

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:54:53 +08:00

6.4 KiB
Raw Blame History

name description
codegraph-guide CodeGraph 辅助 Fortran→Rust 重构。触发条件: (1) 开始翻译新的 Fortran 函数前,需要了解其调用关系 (2) 检查某个函数是否已翻译、翻译是否完整 (3) 查找 Fortran 有但 Rust 没有的函数(翻译遗漏) (4) 对比 Fortran 和 Rust 的调用链是否一致 (5) 用户提及 "codegraph"、"调用图"、"谁调用了"、"依赖关系"

CodeGraph 辅助 F2R 重构

本项目已配置 CodeGraph MCP 服务器(.mcp.jsonClaude 启动时自动加载。 不要进行全量测试,系统内存会被占满。

MCP 工具

工具 用途 示例
codegraph_explore 主力——自然语言或符号名查询,一次返回相关源码+调用关系 codegraph_explore "initia 如何初始化频率网格"
codegraph_search 按名称模糊搜索符号 codegraph_search "eldens"
codegraph_node 查看符号详情(完整源码、签名、调用者/被调用者) codegraph_node "steqeq"
codegraph_callers 谁调用了该符号 codegraph_callers "initia"
codegraph_callees 该符号调用了谁 codegraph_callees "steqeq"
codegraph_impact 修改某符号会级联影响哪些符号 codegraph_impact "steqeq" depth=2
codegraph_files 浏览目录结构和文件符号数 codegraph_files "src/tlusty/math/hydrogen"
codegraph_status 索引健康检查(文件数、节点数、边数) codegraph_status

所有查询直接使用 MCP 工具,不需要手写 SQL。

命名约定

函数命名Fortran 与 Rust 完全对应

所有 TLUSTY Fortran 函数在 Rust 中都有同名小写版本。

Fortran:  RECHECK   ACCEL2   INITIA   STEKEQ   ELDENS
Rust:     rechck    accel2   initia   steqeq   eldens

_pure 后缀(仅 9 个函数)

_pure 版本 非-pure 版本 关系
steqeq_pure steqeq 纯计算内核 → 回调串联完整版本
resolv_pure resolv 纯线性化求解 → 28 子程序编排
start_pure start 纯启动计算 → 带 I/O 版本
solve_pure solve 纯矩阵求解 → 完整求解器
inkul_pure inkul 纯 Kurucz 谱线 → 带文件 I/O
lemini_pure lemini 纯 Lemke 插值 → 带表查询
radtot_pure radtot 纯辐射通量 → 完整辐射传输
rayini_pure rayini 纯瑞利散射 → 带文件读取
iroset_pure iroset 纯铁族设置 → 带回调完整版本

规则_pure = 纯计算内核(可独立测试),非-pure = 完整编排包装器(匹配 Fortran 行为)。

状态文件系统

文件 用途
.f2r_phase 当前阶段:translate / integrate / verify / done
.f2r_tasks 当前阶段待办列表(每行一个,完成后加 前缀)
.f2r_complete 存在 = 全部完成,脚本自动停止
.f2r_rate_limit API 限流重置时间,脚本自动管理

读取状态的规则

  1. 启动时读取 .f2r_phase 确定阶段
  2. 读取 .f2r_tasks 取第一个未完成任务
  3. 完成后在 .f2r_tasks 中该任务行首加
  4. 全部完成后更新 .f2r_phase 并生成新 tasks

参考文档(按需查阅)

阶段 文件 使用时机
Phase 1 翻译 references/phase1-translate.md 发现翻译遗漏时
Phase 3 验证 references/phase3-verify.md Phase 2 完成后

当前阶段Phase 2 集成integrate

目标:将已翻译的纯计算函数连接为可运行的编排流程。

任务和工作流详见 references/phase2-integrate.md


自动化模式(定时任务触发)

定时任务 scripts/specf2r.sh 通过 --print 触发本 skill。 触发后必须立即按以下流程执行。

执行流程

Step 0: 读取状态
  → 读取 .f2r_phase 确定阶段
  → 读取 .f2r_tasks 取第一个未完成任务
  → 没有未完成任务 → 更新阶段,生成新 tasks
  → 没有更多阶段 → 创建 .f2r_complete

Step 1: 检查索引(仅确认健康,不扫描)
  → codegraph_status

Step 2: 执行当前任务
  → 分析目标函数/模块
  → 实现修改
  → 编译验证

Step 3: 更新状态
  → 标记任务完成 ✅
  → 取下一个任务继续

规则

┌─────────────────────────────────────────────────────────────────┐
│  ❌ 禁止询问用户"是否继续"                                       │
│  ❌ 禁止生成总结报告后停下                                       │
│  ❌ 禁止重复验证"所有函数已翻译"                                  │
│  ❌ 禁止做无目标的全面扫描                                       │
│                                                                   │
│  ✅ 读取 .f2r_tasks → 执行第一项 → 验证 → 标记 → 下一项           │
│  ✅ 只输出:做了什么 + 结果                                       │
└─────────────────────────────────────────────────────────────────┘

当前翻译状态2026-06-08

指标 数值
TLUSTY Fortran 函数 350 (100% 翻译)
SYNSPEC Fortran 函数 168 (100% 翻译)
Rust 总模块数 ~495
编译 0 错误
当前阶段 Phase 2: 集成

故障排查

问题 解决方案
MCP 工具无响应 /reload-plugins
索引返回 0 文件 重建索引:rm -rf .codegraph && node .../codegraph.js init -i
查询结果为空 codegraph_search 模糊搜索
重复结果 优先信任 tlusty/tlusty208.f 原始文件

文件路径

内容 路径
CodeGraph 索引 .codegraph/
CodeGraph 二进制 /home/dckj/program/codegraph/dist/bin/codegraph.js
MCP 配置 .mcp.json
Fortran 源码(原始) tlusty/tlusty208.fsynspec/synspec54.f
Fortran 源码(提取) tlusty/extracted/*.fsynspec/extracted/*.f
Rust 源码 src/tlusty/src/synspec/
定时任务脚本 scripts/specf2r.sh
阶段状态 .f2r_phase.f2r_tasks.f2r_complete