Files
gyxx-flow/docs/workflow-acceptance-test-requirements.md
T

19 KiB
Raw Blame History

GYXX Flow 全工作流验收测试需求

测试日期:2026-08-03 测试时区:Asia/Shanghai 测试顺序:供应链 → 店铺 → 商品 → 内容

1. 验收目标与范围

当前架构的验收分母是 21 个定时工作流并全部启用,按模块分为内容 8、商品 7、店铺 3、供应链 3。原先独立调度的 product.main_image.jd.weekly 已与原单平台 product.main_image.weekly 合并为一个两节点工作流;合并前两个 dated run_id 只作为子链历史证据,不得冒充新图实跑。原目录中的另外 7 个可执行项现归类为手动命令/历史验收场景,不进入当前分母;content.self_operated.weeklyproduct.weekly_aggregate.documented_missing 继续仅保留历史证据。

验收覆盖工作流注册、LangGraph 编排、业务日期、浏览器状态、数据采集、云端 PostgreSQL、文件落盘、Hermes、飞书隔离和副作用账本。真实外部链路只在安全门禁允许时执行;失败、超时、权限阻塞和安全跳过必须如实保留,不能用 dry-run 冒充业务通过。

2. 强制隔离与数据标准

  1. PostgreSQL 只允许使用运行时注入的云端 DSN;回环数据库立即失败,源码、报告和示例文件不得保存真实凭据。
  2. 开始供应链工作流前,先验证云端目标库的连接、schema、读写权限和事务回滚能力;测试数据必须使用唯一 run_id,避免覆盖既有业务记录。
  3. 飞书 Base、Bitable、Sheets 的新增、更新、删除全部物理跳过并留证;飞书读取可以执行。
  4. 通知收件人只允许王云龙;不得向原业务群、原收件人或其他用户发送。通用 production_sink 只能证明进入副作用边界,不能据此推断消息正文或投递回执。
  5. 每个浏览器入口保留独立 CDP、Profile、Cookie 和 storage state。登录策略固定为“本项目状态 → 已复制的来源状态 → 受支持的账号密码回退 → 安全跳过”;不弹出二维码、不人工通过验证码。
  6. 仍使用 Hermes 的工作流,其分析端和采集端只通过回环地址访问,不得静默回退到远程 AI;product.style_analysis.interval 是已登记的例外,显式直连 MiniMax。
  7. JSON、Markdown、CSV、Excel、图片、日志和 journal 必须按模块、工作流、业务日期落入 GYXX_DATA_ROOT;来源目录只读且不得成为运行时依赖。
  8. 凭据只允许运行时注入。历史遗留 db.envanalyze.env 必须删除,仓库和验收报告不得记录账号、密码、Cookie、token 或密钥。

3. 状态与打勾规则

状态 含义 打勾
PASS 原逻辑、采集、处理和本轮允许的本地写入成功;允许出现业务空结果
PASS_WITH_SKIPS 已验证的主链路成功,本轮禁止或无需执行的外部副作用被明确跳过
SKIPPED_COOKIE 状态复用和受支持的非交互登录均不能建立有效登录态,且按规则安全退出 是,但不代表生产采集通过
NOT_EXECUTABLE 确认没有脚本、注册项或调度入口;仅用于已废弃历史证据 是,但不计当前工作流分母
PENDING_RETEST_AFTER_MERGE 合并后的工作流结构、调度和失败传播已完成工程验证,但新拓扑尚无受控业务实跑证据
FAIL_AUTH_OR_UI 登录、授权、配置或目标页面控件不满足,业务链路未完成
PARTIAL_FAILED 部分子链路已有有效结果,但至少一个必要子链路明确失败
PARTIAL_TIMEOUT 部分子链路已有有效结果,但整体在有界等待内未收敛
BLOCKED_EXTERNAL_PERMISSION 登录成功后,外部系统明确拒绝目标菜单或资源权限
EXCLUDED_BY_REQUEST 用户明确排除,本轮没有执行;仅用于手动命令历史场景 否,不计当前工作流分母

打勾表示“本轮验收计划已得到规则允许的确定结论”,不等同于生产链路全部无条件成功。当前 21 个定时工作流中,业务通过仅包括 PASSPASS_WITH_SKIPSPENDING_RETEST_AFTER_MERGE 不计业务通过或规则完成。SKIPPED_COOKIENOT_EXECUTABLE 在本文仍可用于历史证据,但当前结果表没有这两类状态。

4. 执行计划与验收方法

  1. 冻结来源与验收范围:核对工作流清单、调度、入口、业务日期和源文件基线,来源目录保持只读。
  2. 建立数据基线:确认云端目标库、schema、表数量和读权限,并使用可回滚事务验证写权限。
  3. 建立安全门禁:统一云端 PG、本地 Hermes、唯一浏览器绑定、Cookie 复用、飞书写隔离、收件人白名单和 effect ledger。
  4. 按“供应链 → 店铺 → 商品 → 内容”逐项执行;为每项保存 run_id、节点结果、退出码、产物、数据库变化和副作用证据。
  5. 对超时任务执行有界观察;已经成功的独立下游只作为局部证据,不把部分成功升级为整体通过。
  6. 汇总分类时分别核对“21 个定时工作流”“7 个手动命令场景”“2 个已删除/废弃历史证据”和“2 条合并前主图子链实跑证据”;最后一类只作非加总追溯,不进入任何当前状态分母。

5. 供应链工作流

  • supply.purchase_confirmation.daily:采购确认采集、分析和通知。PASSrun_id supply.purchase_confirmation.daily__20260729__20260801T092309Z__5daace,ERP 采集、原始 Excel、汇总 CSV 和本地 PG workflow_runs=completed 均成功。journal 仅记录通用 production_sink,不扩展解释其消息内容或回执。
  • supply.replenishment.weekly:按销量、库存和在途生成补货建议。BLOCKED_EXTERNAL_PERMISSIONrun_id supply.replenishment.weekly__20260728__20260801T094413Z__743f4a,账号登录成功后 ERP 明确拒绝“普通商品资料”权限,exit 1,阻断前外部写入为空。
  • supply.replenishment_alert.daily:指定 SKU 库存阈值预警。BLOCKED_EXTERNAL_PERMISSION;主要 run_id supply.replenishment_alert.daily__20260727__20260801T094546Z__500e91,复现 run_id supply.replenishment_alert.daily__20260728__20260801T094100Z__4b2da2;均在登录后被同一菜单权限阻断,外部写入为空。

6. 店铺工作流

  • shop.metrics.weekly:并行采集京东、抖音、天猫店铺经营指标。PASSrun_id shop.metrics.weekly__20260804__20260804T065204Z__bb3b69,京东、抖音、天猫 3/3 节点成功,产物落盘并写入云端 PostgreSQL;京东和抖音按原逻辑真实更新飞书 Base,天猫按原逻辑不写店铺表。抖音销售额采用确认后的净销售额 294,892.98,毛销售额保留在原始产物和 PostgreSQL。
  • shop.competitor.weekly:并行采集京东、抖音竞店指标;当前没有天猫竞店采集任务。PASSrun_id shop.competitor.weekly__20260804__20260804T075530Z__4fd7c1,京东和抖音 2/2 节点成功,分别 upsert 49/24 行;飞书 Base 分别更新 7/9 条品牌记录,无法排名的类目只在页面明确显示“暂无数据”时记为未上榜。
  • shop.jd_self_operated.daily:按前一业务日依次采集京东自营品牌和商品。PASSrun_id shop.jd_self_operated.daily__20260801__20260804T082226Z__255cfc,品牌和商品 2/2 节点成功,分别采集 1/50 行,收入合计均为 19,974.27。Cookie 复用时从京东 pin 识别账号 gyxx2022,云端 PostgreSQL 按 account + data_date + brand/product_code UPSERT;同日真实重跑 shop.jd_self_operated.daily__20260801__20260804T082722Z__0ced7e 再次 2/2 成功且产物仍为 1/50 行,CDP 22132/22133 均已关闭。

7. 商品工作流

  • product.persona.daily:并行采集天猫、抖音、京东商品人群画像。PARTIAL_FAILEDrun_id product.persona.daily__20260815__20260801T103908Z__2d6028。天猫缺少 DMP 入口,抖音缺少搜索控件,京东完成 19/30 后浏览器崩溃,部分结果不能代表三平台完成。
  • product.daily:ERP 与三平台采集、原始日报入库、分析、导出和飞书写入。PARTIAL_TIMEOUTrun_id product.daily__20260731__20260801T113513Z__b59304。ERP、京东、天猫完成,抖音超时;保留 257 个 raw 文件。独立下游验证完成分析、32 条导出、本地 PG upsert 和 32 次飞书写跳过,但不把下游成功升级为整体通过。原 product.import.daily 定时任务已并入本流程的 import 阶段。
  • product.alert.daily:读取商品数据并检测销量异常、按条件通知。PASS;实际入口 run_id script.product_commerce.955b1dfb0cdf__20260801__20260801T085614Z__4fefb3。本地库读取成功,当次无符合阈值的异常,因此没有告警新增或通知。
  • 商品日报导入阶段:把三平台商品日报幂等导入本地 PG。PASS;历史独立入口 run_id script.product_commerce.9137239938d5__20260727__20260801T085541Z__59c16c。抖音、京东、天猫分别处理 163、90、173 行,无重复;现由 product.dailyimport 阶段承载。
  • product.style_analysis.interval:直连 MiniMax 分析到期款式,不依赖本地 Hermes 分析端。历史验收 run_id product.style_analysis.interval__20260801__20260801T084137Z__952204 保留作迁移基线;本次已用 星云2 的 2026-08-26~2026-08-28 窗口完成真实 MiniMax、飞书、Base 和 PostgreSQL 写入验证。
  • product.main_image.weekly:周日 08:30 并行启动 JD、Tmall 两个无依赖且资源隔离的主图分支,两个子链均独立执行本地 PG 入库与飞书插入逻辑。PENDING_RETEST_AFTER_MERGE;当前没有可归属于合并后新图的业务 run_id。工程结构要求为:任一分支受控失败时,另一分支仍完成自己的采集和双 sink 写入;全部结束后整体聚合为失败,并在错误摘要中标明具体平台和错误。下一轮需在现有飞书零写门禁下完成受控业务复测。
  • product.market_rank:并行采集天猫、京东、抖音三平台周市场排行。FAIL_AUTH_OR_UIrun_id product.market_rank__20260814__20260801T103628Z__5a9024。天猫认证失败、京东缺配置类目、抖音目标控件缺失;目标脚本与来源哈希一致,当前证据不支持判定为迁移改坏。

8. 内容工作流

  • content.metrics.daily:采集合作达人、自营 B 站、蝉妈妈数据并同步指标。PARTIAL_FAILEDrun_id content.metrics.daily__20260813__20260801T101312Z__28d505,运行 71 分 05 秒后完整度检查失败;已完成子链和飞书写跳过证据保留,但必要采集链未全部完成。
  • content.marketing_report.daily:从本地数据生成营销日报并按条件通知。PASS_WITH_SKIPS;实际入口 run_id script.content_marketing.62b3b647254f__20260804__20260801T091245Z__f20319。真实读取本地 PG、调用本地 Hermes,生成 Markdown/PNG;未启用发送参数。
  • content.relogin.weekly:并行刷新内容平台登录态。PASS_WITH_SKIPSrun_id content.relogin.weekly__20260811__20260801T100706Z__45a8db。LangGraph 和验收门禁按设计阻止二维码/交互登录并安全记录跳过;没有扫码、没有覆盖 Cookie 或来源状态。
  • content.creator_report.monthly:生成达人月报。PASS_WITH_SKIPSworkflow run_id content.creator_report.monthly__20260801__20260801T084140Z__bd9fdd。本地数据库检查和实现入口 dry-run 成功,飞书表写入关闭。
  • content.summary.monthly:生成内容月度汇总。PASS_WITH_SKIPSworkflow run_id content.summary.monthly__20260801__20260801T084142Z__9d73c1。本地数据库检查和实现入口 dry-run 成功,外部写入关闭。
  • content.cooperations.daily:刷新映射并同步合作记录。PASS_WITH_SKIPSworkflow run_id content.cooperations.daily__20260801__20260801T084143Z__02b89a。真实完成飞书读取和本地数据库读取,内部 dry-run 阻止数据库/飞书写入。
  • content.comments.weekly:并行补采 B 站、小红书、抖音评论并汇总。PARTIAL_TIMEOUTrun_id content.comments.weekly__20260812__20260801T100904Z__530989,运行 60 分 56 秒。B 站完成,小红书/抖音有界停止;保留 229 个 CSV、229 个 JSON,合计约 5.45 MB。
  • content.summary.weekly:生成内容周度汇总。PASS_WITH_SKIPSworkflow run_id content.summary.weekly__20260801__20260801T084145Z__7e6081。本地数据库检查和实现入口 dry-run 成功,外部写入关闭。

9. 手动命令与历史验收场景

下列 7 项保留手动执行能力和既有验收证据,但不再注册为定时工作流,也不进入 21 个工作流分母。

旧验收标识 合并后的入口与用途 历史状态、run_id 与关键证据
supply.purchase_order_update supply.workflow.run;受保护的 ERP 更新命令,默认参数自动选择 mcp-run purchase-order-update EXCLUDED_BY_REQUEST;无 run_id,按要求未测试、未访问 ERP
shop.jd_self_operated.history shop.jd_self_operated.collect_brand--date{business_date} 自动渲染起止日期 PASSshop.jd_self_operated.history__20260728__20260801T103803Z__22f456;约 43 秒,生成 533 B 品牌 JSON,本地库新增 1 条
product.backfill product.backfill.run--date{business_date} 自动渲染 --from/--to PARTIAL_TIMEOUTproduct.backfill__20260730__20260801T112223Z__af7f00;抖音第二轮等待未收敛,保留已完成平台证据
product.review_collection product.review.orchestrate--date{business_date} 自动渲染目标日期 PASS(空结果);product.review_collection__20260731__20260801T111838Z__e99652;约 92 秒,JSON/Markdown 产物成功,当日数据库新增 0 条
content.mapping.refresh content.mapping.rebuild;读取内容/款式映射并生成本地 JSON PASScontent.mapping.refresh__20260818__20260801T112822Z__917ed7;约 25 秒,35 张表、117,505 B 本地映射文件,飞书只读
content.retry_failed content.failed.retry;按失败清单重试采集并汇总 PARTIAL_TIMEOUTcontent.retry_failed__20260820__20260801T113412Z__e0c8af20 分 56 秒,B 站 4/4、蒲公英 14/22、星图 0
content.metrics.backfill gyxx backfill content.metrics.daily;合并到标准日报图并按日期范围重跑 PARTIAL_TIMEOUTcontent.metrics.backfill__20260821__20260801T115644Z__1cb626;15 分 30 秒,采集有界停止、同步成功,133/133 条验收证据完整

手动场景历史分类为:PASS 3、PARTIAL_TIMEOUT 3、EXCLUDED_BY_REQUEST 1,合计 7。

10. 当前分母外的历史证据

已删除/废弃项

  • content.self_operated.weekly:原禁用兼容工作流与 content.metrics.daily 的自营链重复,现已删除工作流和调度定义;底层自营脚本仍由日报工作流调用。历史结论为 PASS_WITH_SKIPSrun_id content.self_operated.weekly__20260819__20260801T113119Z__b71197,仅作追溯。
  • product.weekly_aggregate.documented_missing:历史文档中的商品周聚合说明项。NOT_EXECUTABLE;无 run_id;已确认来源和目标均不存在脚本、注册项或调度入口。该项不进入当前工作流或手动命令分母。

合并前主图子链实跑证据

合并前工作流/版本 历史状态、run_id 与关键证据
product.main_image.jd.weekly PASSproduct.main_image.jd.weekly__20260812__20260801T102149Z__b2d3b7;京东旧独立工作流生成 120 个文件、约 15.5 MB,本地 PG 记录 288,82 个飞书写动作由验收门禁跳过
product.main_image.weekly(合并前单平台版本) SKIPPED_COOKIEproduct.main_image.weekly__20260813__20260801T103413Z__b48e34;天猫旧独立工作流无法建立有效非交互会话,exit 75 安全退出,未扫码、未覆盖来源状态

这两个 dated run_id 只能说明合并前京东、天猫子链各自的历史表现,不是合并后 JD、Tmall 并行两节点图的实跑结果,也不参与当前 21 项状态统计。

11. 合并口径与旧→新映射

  • 当前 21 条有效调度定义对应 21 个顶层 LangGraph 工作流并全部启用,模块分布为内容 8、商品 7、店铺 3、供应链 3;重复且禁用的 content.self_operated.weekly 已删除,其主要采集链继续由 content.metrics.daily 执行。
  • product.main_image.jd.weekly 与原单平台 product.main_image.weekly 已收敛为当前 product.main_image.weekly:周日 08:30 并行启动 JD、Tmall 两个独立分支,两边均进入各自 PG 与飞书写入边界;受控失败不阻断另一边,末尾聚合失败状态和平台级具体错误。当前仅工程结构验证完成,业务状态保持 PENDING_RETEST_AFTER_MERGE
  • shop.jd_self_operated.historyproduct.backfillproduct.review_collection 使用命令层 default_args{business_date} 渲染日期;supply.purchase_order_update 使用固定默认子命令,调用者无需重复传日期范围或固定子命令。content.metrics.backfill 合并为标准日报工作流的 gyxx backfill 入口,其余内容项为显式维护/补偿命令。
  • content.self_operated.weeklyproduct.weekly_aggregate.documented_missing 仅作为历史审计证据保存,不再出现在工作流注册、调度或当前数量统计中。

12. 最终验收标准与完成度

  • 21/21 个定时工作流均有用途和状态;20 项保留既有 dated 业务证据,合并后的主图工作流尚无新图 run_id,明确列为待受控业务复测。当前调度全部启用。
  • 当前工作流结果分类:PASS 4、PASS_WITH_SKIPS 9、FAIL_AUTH_OR_UI 1、PARTIAL_FAILED 2、PARTIAL_TIMEOUT 2、BLOCKED_EXTERNAL_PERMISSION 2、PENDING_RETEST_AFTER_MERGE 1,合计 21。
  • 当前工作流业务通过和规则完成均为 13/21;未通过或待复测为 8/21。
  • 7 个手动命令历史场景、2 个已删除/废弃历史证据和 2 条合并前主图子链实跑证据均单列保存,不进入当前工作流分母;主图历史证据是非加总 run 记录,不能机械增加目录项数量。
  • 店铺复测中曾因一次命令漏设验收总开关误建 1 条京东周数据记录;已按精确 record id 删除并回读确认不存在,除此之外飞书业务表写入均由门禁跳过。通知策略唯一允许王云龙,但供应链通用 production_sink 没有独立消息正文或投递回执,不作过度结论。
  • 云端快照迁移、旧库/dump 回滚、本地读写、Hermes、浏览器状态复制、来源只读、凭据清理和 secret scan 证据必须在最终报告中单列。
  • 当前工作流未通过或待复测项保留真实边界:2 项外部 ERP 权限、1 项认证/UI、2 项部分失败、2 项部分超时、1 项合并后受控业务复测;手动命令另有 3 项部分超时、1 项用户排除。主图项是由拓扑合并产生的明确复测要求,不沿用旧的模糊“待浏览器复测”表述。