docs: govern and archive superseded notes

- add documentation governance and cleanup audit documents

- update README and docs index to distinguish current vs historical sources

- move superseded planning, SBAS, Gamma, and experiment notes into docs/archive

- fix remaining archive text garbling in two documents
This commit is contained in:
2026-04-27 08:06:09 +08:00
parent 5a0623fd9b
commit d108b33f80
26 changed files with 487 additions and 27 deletions
@@ -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 1PyINT 后端引擎接入
目标:
-`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 2PyINT 结果归一化与结果治理兼容
目标:
- 保证 `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 4Gamma 精配对 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。