Files
gyxx-flow/docs/plan.md
T

78 lines
6.0 KiB
Markdown

# GYXX Flow 重构执行计划
验收规则:只有在具备代码、配置或自动化测试证据后才能勾选。本次验收统一使用 dry-run;手动业务入口默认 dry-run,调度预演显式使用 `--dry-run --once`。本轮不启动真实采集,不写飞书、PostgreSQL、Hermes 或业务浏览器会话。
## P0 业务代码同步
- [x] P0.1 只读比较 4 个业务源码目录与项目清单,识别最新更新、目标适配和冲突。
- [x] P0.2 将最新业务源码完整复制到对应模块,不通过导入、挂载或子进程引用外部项目代码。
- [x] P0.3 对需要统一路径、数据库、Hermes 和浏览器状态的文件执行目标项目适配。
- [x] P0.4 更新 233 个来源/目标清单 SHA-256;同步状态为 233 个 `in_sync`
## P1 LangGraph 工作流
- [x] P1.1 建立 4 个高内聚业务模块和统一模块契约,禁止业务模块互相导入内部实现。
- [x] P1.2 将每个定时任务声明为独立工作流,并为每个定时工作流显式声明图节点。
- [x] P1.3 21 个定时工作流全部编译为 LangGraph `StateGraph` 并启用。
- [x] P1.4 工作流目录收敛为 21 个有效调度项;7 个手动能力转为命令,重复或失效历史项不再注册。
- [x] P1.5 京东自营每日工作流按品牌、商品两节点执行;品牌失败后商品仍运行,最终状态保留失败。
- [x] P1.6 统一重试、超时、依赖、fan-in、日志、run_id、资源锁和外部副作用幂等契约。
## P2 Python 调度
- [x] P2.1 使用单一 Python 常驻调度器读取 `config/schedules.json`
- [x] P2.2 支持日、周、月、间隔日、Asia/Shanghai、错过触发补偿和优雅停止。
- [x] P2.3 持久化时间槽并提供单实例锁、同工作流不重叠和重启防重复。
- [x] P2.4 京东自营每日工作流 10:00 运行,业务日期固定为调度日期前一天。
- [x] P2.5 退出 Windows Task Scheduler 执行链;服务器只托管一个 Python 调度进程。
## P3 外部系统与数据目录
- [x] P3.1 PostgreSQL 统一使用运行时注入的云端 DSN,源码不设置地址、数据库、用户或密码默认值,回环地址立即拒绝。
- [x] P3.2 Hermes 保持本机采集端和分析端两个角色,统一配置 2 个 API 和 2 个 gateway。
- [x] P3.3 飞书保持既有身份、应用和调用方式,密钥只从运行时环境注入。
- [x] P3.4 31 个公开命令显式注册;136 个浏览器状态键各自使用唯一 CDP 端口、Profile、Cookie 和 storage state。
- [x] P3.5 JSON、Markdown、CSV、Excel、下载文件和截图按模块及数据阶段分目录保存。
- [x] P3.6 运行状态、日志、临时文件与业务数据分离,整体可随 `GYXX_DATA_ROOT` 迁移。
## P4 可部署性与低耦合
- [x] P4.1 项目运行不依赖外部源码目录、固定盘符或 Windows 定时任务。
- [x] P4.2 生产代码直接位于 `modules/<module>/`,业务模块只依赖共享 workflow、adapters、core 契约。
- [x] P4.3 提供本地 PostgreSQL Compose,初始化 4 个模块 schema 且只监听回环地址。
- [x] P4.4 手动命令保留 dry-run 默认值;调度器提供显式 dry-run 预演。
## P5 自动化验收
- [x] P5.1 工作流目录、模块注册、LangGraph、fan-in、调度日期和失败语义测试通过。
- [x] P5.2 全量项目回归 940 passed、1 skipped。
- [x] P5.3 Ruff、compileall、构建和差异格式检查通过。
- [x] P5.4 `gyxx doctor``gyxx list`、调度 dry-run 和验收状态通过。
- [x] P5.5 敏感信息扫描、本地服务策略、31 个公开命令、136 个浏览器绑定和可迁移性测试通过。
- [x] P5.6 最终验收报告记录完整工作流清单、用途、架构和验证证据。
## P6 目录精简
- [x] P6.1 四个模块生产代码上移到模块根,`runtime/` 只保留单文件历史导入兼容层。
- [x] P6.2 47 个模块内测试统一迁入 `tests/modules/`,生产包不再夹带测试目录。
- [x] P6.3 Windows 启动器和历史技能说明归档到 `docs/history/`,不参与命令发现或服务器调度。
- [x] P6.4 脚本发现改为 `config/commands.json` 显式白名单,不再递归暴露内部工具和历史脚本。
- [x] P6.5 项目文档收口为架构、部署、运维、计划和验收报告,删除重复跳转文档。
- [x] P6.6 四个模块的新路径、命令别名、浏览器状态键和源同步哈希均完成回归校验。
## P7 工作流合并
- [x] P7.1 核对实际调度来源,确认 21 条有效调度定义并全部启用。
- [x] P7.2 从工作流目录移出 7 个手动入口,并删除 1 个不可执行历史目录项。
- [x] P7.3 通过命令注册保留补采、重试、映射刷新和采购单更新能力。
- [x] P7.4 为单日回采、商品补采、评价补采和采购单更新增加业务日期或固定子命令默认参数。
- [x] P7.5 更新项目文档并完成定向、全量、Lint、构建、doctor 和调度 dry-run 验收。
- [x] P7.6 删除重复且禁用的 `content.self_operated.weekly`,保留每日指标工作流仍依赖的底层自营脚本并完成回归。
- [x] P7.7 将京东、天猫主图周任务合并为 `product.main_image.weekly` 单图,周日 08:30 并行启动两个无依赖、资源隔离的分支;任一平台失败都不阻断另一平台采集、PG upsert 和飞书插入,全部结束后汇总失败状态及平台级具体错误。
- [x] P7.8 核对两个主图入口默认均调用飞书插入和本地 PG upsert,并以目录、图依赖、失败语义和入口测试完成双 sink 静态验收;相关 21 项定向测试通过,未将自动化测试表述为真实外部写入。
- [x] P7.9 将本地 `main_image_creatives` 存量主键迁移为日期、款式、平台、图片四列;迁移前后均为 3681 行,并用同键 JD/TM 双行事务探针验证后回滚测试数据。
## 生产启用条件
以下是部署后的运维门禁,不属于本次无副作用代码验收:配置真实凭据、初始化本地数据库、启动两个本机 Hermes 角色、准备浏览器首次登录态,以及逐工作流执行真实数据与外部写入对账。