Apply current workspace changes
This commit is contained in:
@@ -0,0 +1,390 @@
|
||||
# PyINT + Gamma 实施清单
|
||||
|
||||
更新日期:2026-04-18
|
||||
|
||||
关联设计文档:
|
||||
|
||||
- [PYINT_GAMMA_INTEGRATION_DESIGN_20260418.md](PYINT_GAMMA_INTEGRATION_DESIGN_20260418.md)
|
||||
|
||||
## 当前落地进度
|
||||
|
||||
- [x] 已完成第一批 `PyINT` 生产引擎接入:配置、引擎注册、任务队列、WSL 包装脚本、生产面板入口。
|
||||
- [x] 已完成 `PyINT` 运行目录规范化输出:生成 `.dinsar_run.json` 与 `pyint_run_summary.json`。
|
||||
- [x] 已完成 `PyINT` 基础环境检查:WSL、Python、`PYINT_HOME`、`pyintApp.py`、Gamma 命令可达性。
|
||||
- [x] 已将 `PyINT` 代码收编到仓库内 `third_party/PyINT`,不再依赖默认外部绝对路径。
|
||||
- [ ] 尚未完成 `PyINT` 结果目录自动发布兼容。当前原生输出已保存,但现有结果 catalog 仍主要面向 ENVI / ISCE2 栅格产物。
|
||||
- [ ] 尚未开始 `Gamma` 精配对后端与前端集成。
|
||||
|
||||
## 1. 文档定位
|
||||
|
||||
这份清单用于把 `PyINT` 生产引擎接入和 `Gamma` 精配对接入拆成可执行任务,作为后续实施顺序、联调顺序和验收顺序的统一依据。
|
||||
|
||||
本清单按以下原则编排:
|
||||
|
||||
- 一期优先打通 `PyINT` 生产引擎
|
||||
- 二期再做 `Gamma` 精配对 MVP
|
||||
- 一期不强制改数据库主结构
|
||||
- 运维自检只加状态,不把主要操作堆回健康页
|
||||
|
||||
## 2. 实施总顺序
|
||||
|
||||
推荐顺序:
|
||||
|
||||
1. 先确认环境基线和配置项
|
||||
2. 先打通 `PyINT` 后端引擎与任务执行
|
||||
3. 再补结果归一化与目录扫描兼容
|
||||
4. 再补前端生产入口
|
||||
5. 然后做 `Gamma` 精配对 MVP
|
||||
6. 最后补健康检查、烟测和治理
|
||||
|
||||
不建议顺序:
|
||||
|
||||
- 先改数据库再写主流程
|
||||
- 先做健康页大改
|
||||
- 先把 `PyINT` 全部高级参数暴露到前端
|
||||
|
||||
## 3. Phase 0:环境基线确认
|
||||
|
||||
目标:
|
||||
|
||||
- 确认当前机器上的 `PyINT + Gamma + WSL` 具备最小可执行条件
|
||||
- 把配置字段定清楚,但不把敏感信息写入仓库文档
|
||||
|
||||
### 任务
|
||||
|
||||
- [ ] 确认 `D:\Code\PyINT` 的实际可执行入口路径
|
||||
- [ ] 确认当前唯一 WSL distro 名称,默认与 `ISCE2_WSL_DISTRO` 对齐
|
||||
- [ ] 确认 WSL 中 `PyINT` 可用 Python 路径
|
||||
- [ ] 确认 `GAMMA_ENV_SCRIPT` 的实际路径
|
||||
- [ ] 确认 `base_calc` 在 WSL 中可执行
|
||||
- [ ] 确认 `pyintApp.py` 在 WSL 中可执行
|
||||
- [ ] 确认 `SCRATCHDIR` / `TEMPLATEDIR` / `DEMDIR` 对应的系统托管目录方案
|
||||
- [ ] 确认 PyINT 一期只支持的业务范围,建议锁定 `LT-1 + Gamma D-InSAR`
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `backend/app/config.py`
|
||||
- [ ] `.env.example`
|
||||
- [ ] 根 `.env` 本机配置对照,不入库敏感值
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 可以给出完整的 PyINT 运行必需配置字段列表
|
||||
- [ ] 可以在 WSL 内成功跑通最小烟测命令
|
||||
- [ ] 不需要把管理员密码、邮箱密码、sudo 密码写入代码或文档
|
||||
|
||||
## 4. Phase 1:PyINT 后端引擎接入
|
||||
|
||||
目标:
|
||||
|
||||
- 把 `PyINT` 作为新的 D-InSAR 引擎正式接入现有多引擎体系
|
||||
|
||||
### 4.1 配置层
|
||||
|
||||
- [ ] 在 `backend/app/config.py` 新增 `PYINT_*` 配置
|
||||
- [ ] 增加默认继承逻辑:`PYINT_WSL_DISTRO` 默认跟随 `ISCE2_WSL_DISTRO`
|
||||
- [ ] 增加默认继承逻辑:`PYINT_WSL_PYTHON` 默认跟随 `ISCE2_PYTHON`
|
||||
- [ ] 增加系统托管目录默认值:
|
||||
- [ ] `PYINT_TEMPLATE_ROOT`
|
||||
- [ ] `PYINT_WORK_ROOT`
|
||||
- [ ] `PYINT_OUTPUT_ROOT`
|
||||
- [ ] 在 `validate_runtime_config()` 中加入 PyINT 基础校验
|
||||
- [ ] 在 `.env.example` 中补齐非敏感 PyINT 配置示例
|
||||
|
||||
### 4.2 服务层
|
||||
|
||||
- [ ] 新增 `backend/app/services/pyint_service.py`
|
||||
- [ ] 封装 WSL 执行逻辑,复用现有 `wsl_service.py`
|
||||
- [ ] 实现 Windows 路径到 WSL 路径转换
|
||||
- [ ] 实现 PyINT 工作区目录初始化
|
||||
- [ ] 实现模板文件生成
|
||||
- [ ] 实现运行参数到模板字段的映射
|
||||
- [ ] 实现运行摘要 JSON 输出
|
||||
- [ ] 实现 PyINT 烟测函数
|
||||
|
||||
### 4.3 引擎层
|
||||
|
||||
- [ ] 新增 `backend/app/dinsar_engines/pyint_engine.py`
|
||||
- [ ] 实现 `DinsarEngine` 接口
|
||||
- [ ] 定义 `engine_code=pyint`
|
||||
- [ ] 定义一期唯一 profile,建议为 `lt1_gamma_dinsar`
|
||||
- [ ] 定义最小参数 schema,避免一开始暴露过多 PyINT 原生参数
|
||||
- [ ] 实现 `check_available()`
|
||||
- [ ] 实现 `run()`
|
||||
|
||||
### 4.4 注册与任务调度
|
||||
|
||||
- [ ] 在 `backend/app/dinsar_engines/registry.py` 注册 `PyINT`
|
||||
- [ ] 在 `backend/app/services/job_handlers.py` 增加 `JOB_TYPE_PYINT_RUN`
|
||||
- [ ] 新增对应 handler
|
||||
- [ ] 在 `backend/app/routers/dinsar_production.py` 允许 `engine_code=pyint`
|
||||
- [ ] 让生产提交逻辑按 `pyint` 分派到新 job type
|
||||
|
||||
### 4.5 WSL 包装脚本
|
||||
|
||||
- [ ] 新增 `backend/app/pyint_pipeline/run_lt1_pyint_pipeline.py`
|
||||
- [ ] 负责把系统任务目录映射为 PyINT 项目目录
|
||||
- [ ] 负责设置 `SCRATCHDIR` / `TEMPLATEDIR` / `DEMDIR`
|
||||
- [ ] 负责调用 `pyintApp.py` 或必要的细粒度 PyINT 脚本
|
||||
- [ ] 负责收集输出路径和运行摘要
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `backend/app/config.py`
|
||||
- [ ] `backend/app/dinsar_engines/registry.py`
|
||||
- [ ] `backend/app/dinsar_engines/pyint_engine.py`
|
||||
- [ ] `backend/app/services/pyint_service.py`
|
||||
- [ ] `backend/app/services/job_handlers.py`
|
||||
- [ ] `backend/app/routers/dinsar_production.py`
|
||||
- [ ] `backend/app/pyint_pipeline/run_lt1_pyint_pipeline.py`
|
||||
- [ ] `.env.example`
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] `/dinsar-production/engines` 能返回 `pyint`
|
||||
- [ ] `PyINT` 引擎可在后端被识别为可用/不可用
|
||||
- [ ] 可以成功提交一个 `pyint` 生产任务到队列
|
||||
- [ ] 任务日志、任务状态、错误信息可通过现有任务体系查看
|
||||
|
||||
## 5. Phase 2:PyINT 结果归一化与结果治理兼容
|
||||
|
||||
目标:
|
||||
|
||||
- 保证 `PyINT` 输出能进入现有结果扫描、发布和 catalog 体系
|
||||
|
||||
### 任务
|
||||
|
||||
- [ ] 定义 PyINT 结果工作区与正式输出区的边界
|
||||
- [ ] 统一输出 bundle 元数据格式
|
||||
- [ ] 输出 engine/profile/run_key/task_name/pair trace 元数据
|
||||
- [ ] 补齐 pair 相关元数据:
|
||||
- [ ] `pair_uid`
|
||||
- [ ] `network_run_id`
|
||||
- [ ] `network_edge_id`
|
||||
- [ ] `policy_version`
|
||||
- [ ] 让现有 `dinsar_scan_service` 可以识别 PyINT 结果
|
||||
- [ ] 验证现有 `result_catalog_service` 可处理 PyINT 产物
|
||||
- [ ] 验证桥接一致性逻辑不会把 PyINT 结果识别坏
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `backend/app/services/pyint_service.py`
|
||||
- [ ] `backend/app/services/dinsar_scan_service.py`
|
||||
- [ ] `backend/app/services/result_catalog_service.py`
|
||||
- [ ] 可能涉及现有结果元数据写入辅助模块
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 跑完 PyINT 后可被系统扫描到
|
||||
- [ ] 可进入结果目录索引
|
||||
- [ ] 不影响现有 SARscape/ISCE2 结果扫描
|
||||
|
||||
## 6. Phase 3:前端生产页接入 PyINT
|
||||
|
||||
目标:
|
||||
|
||||
- 在现有生产页中把 `PyINT` 作为正式引擎展示和提交
|
||||
|
||||
### 任务
|
||||
|
||||
- [ ] 在 `frontend/src/DinsarProductionPanel.jsx` 中显示 `PyINT` 引擎卡片
|
||||
- [ ] 补充 `ENGINE_LABEL` / `TASK_TYPE_LABEL`
|
||||
- [ ] 根据 `PyINT` profile 渲染参数输入项
|
||||
- [ ] 对不可用状态显示明确原因
|
||||
- [ ] 提交成功后沿用现有任务监控
|
||||
- [ ] 验证运行列表中能正确显示 `pyint`
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `frontend/src/DinsarProductionPanel.jsx`
|
||||
- [ ] `frontend/src/api/dinsarProduction.js`
|
||||
- [ ] `frontend/src/utils/dinsarEngines.js` 如需要
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 前端可看到 `PyINT`
|
||||
- [ ] 可提交 `PyINT` 任务
|
||||
- [ ] 可看到任务状态和日志
|
||||
- [ ] 不影响现有 SARscape/ISCE2 提交
|
||||
|
||||
## 7. Phase 4:Gamma 精配对 MVP
|
||||
|
||||
目标:
|
||||
|
||||
- 在现有配对规划体系上实现一版可用的 `Gamma` 精配对
|
||||
|
||||
### 7.1 后端能力
|
||||
|
||||
- [ ] 新增 `backend/app/services/pairing_refinement_service.py`
|
||||
- [ ] 新增 `backend/app/services/gamma_pairing_service.py` 或同等职责模块
|
||||
- [ ] 实现基于现有 `network_run_id` 的场景集提取
|
||||
- [ ] 实现 PyINT/Gamma 配对工作区构建
|
||||
- [ ] 调用 `select_pairs.py` / `base_calc`
|
||||
- [ ] 解析 `ifgram_list.txt` / baseline 输出
|
||||
- [ ] 生成新的 refined `network_run_id`
|
||||
- [ ] 将精配对结果写入:
|
||||
- [ ] `pairing_network_runs`
|
||||
- [ ] `pairing_network_edges`
|
||||
- [ ] `selection_meta_json`
|
||||
|
||||
### 7.2 接口层
|
||||
|
||||
- [ ] 在 `backend/app/routers/pairing.py` 增加 `POST /pairing/refine-gamma`
|
||||
- [ ] 设计请求体和响应体
|
||||
- [ ] 设计运行告警返回字段
|
||||
- [ ] 如需要,增加 refined artifacts 查询接口
|
||||
|
||||
### 7.3 存储策略
|
||||
|
||||
- [ ] 明确一期不改 `pairing_metric_cache` 语义
|
||||
- [ ] 明确只在 run/edge JSON 中落精配对元数据
|
||||
- [ ] 保留粗配对网络和精配对网络双轨并存
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `backend/app/routers/pairing.py`
|
||||
- [ ] `backend/app/services/spatial_service.py` 如需复用
|
||||
- [ ] `backend/app/services/pairing_refinement_service.py`
|
||||
- [ ] `backend/app/services/gamma_pairing_service.py`
|
||||
- [ ] `backend/app/models/schemas.py`
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 可基于一个已有 `network_run_id` 发起精配对
|
||||
- [ ] 返回新的 refined `network_run_id`
|
||||
- [ ] 精配对结果可通过现有 network 查询接口查看
|
||||
- [ ] 不破坏原粗配对结果
|
||||
|
||||
## 8. Phase 5:前端配对规划页接入 Gamma 精配对
|
||||
|
||||
目标:
|
||||
|
||||
- 在配对规划页提供精配对入口和结果摘要
|
||||
|
||||
### 任务
|
||||
|
||||
- [ ] 在 `frontend/src/panels/PairPlanningPanel.jsx` 新增 `Gamma 精配对` 区块
|
||||
- [ ] 展示当前粗配对网络摘要
|
||||
- [ ] 增加发起精配对按钮
|
||||
- [ ] 展示精配对结果摘要
|
||||
- [ ] 展示粗配对与精配对差异提示
|
||||
- [ ] 增加“采用哪一版网络继续生产”的状态表达
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `frontend/src/panels/PairPlanningPanel.jsx`
|
||||
- [ ] `frontend/src/api/pairing.js`
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 管理员可在配对规划页发起精配对
|
||||
- [ ] 能看到 refined 结果摘要
|
||||
- [ ] 不需要进入健康检查页做配对操作
|
||||
|
||||
## 9. Phase 6:运维自检与烟测补齐
|
||||
|
||||
目标:
|
||||
|
||||
- 让 PyINT/Gamma 的环境状态可被健康检查观察
|
||||
|
||||
### 任务
|
||||
|
||||
- [ ] 在 `backend/app/services/health_service.py` 中纳入 PyINT 检查
|
||||
- [ ] 检查项至少包括:
|
||||
- [ ] `PYINT_ENABLED`
|
||||
- [ ] distro 可访问
|
||||
- [ ] WSL Python 可执行
|
||||
- [ ] `pyintApp.py` 存在
|
||||
- [ ] `GAMMA_ENV_SCRIPT` 存在
|
||||
- [ ] `base_calc` 可执行
|
||||
- [ ] 模板目录可读
|
||||
- [ ] 工作目录可写
|
||||
- [ ] 增加管理员烟测接口
|
||||
- [ ] 前端健康页只展示状态摘要,不加复杂操作区
|
||||
|
||||
### 涉及文件
|
||||
|
||||
- [ ] `backend/app/services/health_service.py`
|
||||
- [ ] `backend/app/routers/dinsar_production.py`
|
||||
- [ ] `frontend/src/HealthCheckPanel.jsx`
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 健康页可看到 PyINT 状态
|
||||
- [ ] 可区分“引擎不可用”和“系统整体故障”
|
||||
- [ ] 不把精配对主操作入口放回健康页
|
||||
|
||||
## 10. Phase 7:可选数据库结构化增强
|
||||
|
||||
目标:
|
||||
|
||||
- 只有在业务确认需要更强的历史与运维管理时才进入本阶段
|
||||
|
||||
### 进入条件
|
||||
|
||||
- [ ] 需要独立查询精配对历史
|
||||
- [ ] 需要统计精配对失败率
|
||||
- [ ] 需要管理精配对 artifacts 生命周期
|
||||
- [ ] 需要构建更完整的后台管理页
|
||||
|
||||
### 任务
|
||||
|
||||
- [ ] 设计 `pairing_refinement_runs` 等新表
|
||||
- [ ] 新增迁移文件,例如 `007_pyint_gamma_integration.sql`
|
||||
- [ ] 在 `backend/app/db_maintenance.py` 中加入迁移列表
|
||||
- [ ] 验证 `ensure_database_ready()` 启动自动迁移
|
||||
- [ ] 验证幂等执行
|
||||
|
||||
### 阶段验收
|
||||
|
||||
- [ ] 新表结构不破坏现有 pairing 逻辑
|
||||
- [ ] 启动时可自动应用迁移
|
||||
- [ ] 老数据和老接口保持兼容
|
||||
|
||||
## 11. 联调与验收矩阵
|
||||
|
||||
### 后端
|
||||
|
||||
- [ ] `py_compile` 或等价语法检查通过
|
||||
- [ ] 新增路由可正常注册
|
||||
- [ ] 新增引擎可正常列出
|
||||
- [ ] 任务队列能执行 `PyINT`
|
||||
- [ ] 精配对接口能生成 refined network
|
||||
|
||||
### 前端
|
||||
|
||||
- [ ] `npm run build` 通过
|
||||
- [ ] 生产页能显示 `PyINT`
|
||||
- [ ] 配对规划页能显示 `Gamma 精配对`
|
||||
- [ ] 健康页能显示 PyINT 状态
|
||||
|
||||
### 集成
|
||||
|
||||
- [ ] `PyINT` 单任务最小链路跑通
|
||||
- [ ] 结果能被系统扫描
|
||||
- [ ] 精配对 MVP 跑通
|
||||
- [ ] 现有 SARscape/ISCE2 不回归
|
||||
|
||||
## 12. 当前明确不做
|
||||
|
||||
- [ ] 一期不把 PyINT 的全部模板参数开放到前端
|
||||
- [ ] 一期不接入 GACOS 自动邮箱下载链路
|
||||
- [ ] 一期不接入 POT、phase bias、完整时序 MintPy 流程
|
||||
- [ ] 一期不改写现有 `pairing_metric_cache` 字段语义
|
||||
- [ ] 一期不在健康检查页增加主操作面板
|
||||
- [ ] 一期不做多 WSL distro 管理
|
||||
|
||||
## 13. 当前建议的首批落地包
|
||||
|
||||
建议第一轮直接落以下内容:
|
||||
|
||||
- [ ] `config.py` + `.env.example` 的 `PYINT_*` 配置
|
||||
- [ ] `pyint_service.py`
|
||||
- [ ] `pyint_engine.py`
|
||||
- [ ] `registry.py` 注册
|
||||
- [ ] `job_handlers.py` 的 `JOB_TYPE_PYINT_RUN`
|
||||
- [ ] `dinsar_production.py` 的 `pyint` 提交分派
|
||||
- [ ] `run_lt1_pyint_pipeline.py`
|
||||
- [ ] `DinsarProductionPanel.jsx` 的 `PyINT` 引擎展示与提交
|
||||
|
||||
这批完成后,再进入 `Gamma` 精配对 MVP。
|
||||
Reference in New Issue
Block a user