19 KiB
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.weekly 和 product.weekly_aggregate.documented_missing 继续仅保留历史证据。
验收覆盖工作流注册、LangGraph 编排、业务日期、浏览器状态、数据采集、云端 PostgreSQL、文件落盘、Hermes、飞书隔离和副作用账本。真实外部链路只在安全门禁允许时执行;失败、超时、权限阻塞和安全跳过必须如实保留,不能用 dry-run 冒充业务通过。
2. 强制隔离与数据标准
- PostgreSQL 只允许使用运行时注入的云端 DSN;回环数据库立即失败,源码、报告和示例文件不得保存真实凭据。
- 开始供应链工作流前,先验证云端目标库的连接、schema、读写权限和事务回滚能力;测试数据必须使用唯一 run_id,避免覆盖既有业务记录。
- 飞书 Base、Bitable、Sheets 的新增、更新、删除全部物理跳过并留证;飞书读取可以执行。
- 通知收件人只允许王云龙;不得向原业务群、原收件人或其他用户发送。通用
production_sink只能证明进入副作用边界,不能据此推断消息正文或投递回执。 - 每个浏览器入口保留独立 CDP、Profile、Cookie 和 storage state。登录策略固定为“本项目状态 → 已复制的来源状态 → 受支持的账号密码回退 → 安全跳过”;不弹出二维码、不人工通过验证码。
- 本机 Hermes 分析端和采集端只通过回环地址访问,不得回退到远程 AI。
- JSON、Markdown、CSV、Excel、图片、日志和 journal 必须按模块、工作流、业务日期落入
GYXX_DATA_ROOT;来源目录只读且不得成为运行时依赖。 - 凭据只允许运行时注入。历史遗留
db.env、analyze.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 个定时工作流中,业务通过仅包括 PASS 和 PASS_WITH_SKIPS;PENDING_RETEST_AFTER_MERGE 不计业务通过或规则完成。SKIPPED_COOKIE 和 NOT_EXECUTABLE 在本文仍可用于历史证据,但当前结果表没有这两类状态。
4. 执行计划与验收方法
- 冻结来源与验收范围:核对工作流清单、调度、入口、业务日期和源文件基线,来源目录保持只读。
- 建立数据基线:确认云端目标库、schema、表数量和读权限,并使用可回滚事务验证写权限。
- 建立安全门禁:统一云端 PG、本地 Hermes、唯一浏览器绑定、Cookie 复用、飞书写隔离、收件人白名单和 effect ledger。
- 按“供应链 → 店铺 → 商品 → 内容”逐项执行;为每项保存
run_id、节点结果、退出码、产物、数据库变化和副作用证据。 - 对超时任务执行有界观察;已经成功的独立下游只作为局部证据,不把部分成功升级为整体通过。
- 汇总分类时分别核对“21 个定时工作流”“7 个手动命令场景”“2 个已删除/废弃历史证据”和“2 条合并前主图子链实跑证据”;最后一类只作非加总追溯,不进入任何当前状态分母。
5. 供应链工作流
supply.purchase_confirmation.daily:采购确认采集、分析和通知。PASS;run_idsupply.purchase_confirmation.daily__20260729__20260801T092309Z__5daace,ERP 采集、原始 Excel、汇总 CSV 和本地 PGworkflow_runs=completed均成功。journal 仅记录通用production_sink,不扩展解释其消息内容或回执。supply.replenishment.weekly:按销量、库存和在途生成补货建议。BLOCKED_EXTERNAL_PERMISSION;run_idsupply.replenishment.weekly__20260728__20260801T094413Z__743f4a,账号登录成功后 ERP 明确拒绝“普通商品资料”权限,exit 1,阻断前外部写入为空。supply.replenishment_alert.daily:指定 SKU 库存阈值预警。BLOCKED_EXTERNAL_PERMISSION;主要 run_idsupply.replenishment_alert.daily__20260727__20260801T094546Z__500e91,复现 run_idsupply.replenishment_alert.daily__20260728__20260801T094100Z__4b2da2;均在登录后被同一菜单权限阻断,外部写入为空。
6. 店铺工作流
shop.metrics.weekly:并行采集京东、抖音、天猫店铺经营指标。PASS;run_idshop.metrics.weekly__20260804__20260804T065204Z__bb3b69,京东、抖音、天猫 3/3 节点成功,产物落盘并写入云端 PostgreSQL;京东和抖音按原逻辑真实更新飞书 Base,天猫按原逻辑不写店铺表。抖音销售额采用确认后的净销售额294,892.98,毛销售额保留在原始产物和 PostgreSQL。shop.competitor.weekly:并行采集京东、抖音竞店指标;当前没有天猫竞店采集任务。PASS;run_idshop.competitor.weekly__20260804__20260804T075530Z__4fd7c1,京东和抖音 2/2 节点成功,分别 upsert 49/24 行;飞书 Base 分别更新 7/9 条品牌记录,无法排名的类目只在页面明确显示“暂无数据”时记为未上榜。shop.jd_self_operated.daily:按前一业务日依次采集京东自营品牌和商品。PASS;run_idshop.jd_self_operated.daily__20260801__20260804T082226Z__255cfc,品牌和商品 2/2 节点成功,分别采集 1/50 行,收入合计均为19,974.27。Cookie 复用时从京东pin识别账号gyxx2022,云端 PostgreSQL 按account + data_date + brand/product_codeUPSERT;同日真实重跑shop.jd_self_operated.daily__20260801__20260804T082722Z__0ced7e再次 2/2 成功且产物仍为 1/50 行,CDP 22132/22133 均已关闭。
7. 商品工作流
product.persona.daily:并行采集天猫、抖音、京东商品人群画像。PARTIAL_FAILED;run_idproduct.persona.daily__20260815__20260801T103908Z__2d6028。天猫缺少 DMP 入口,抖音缺少搜索控件,京东完成 19/30 后浏览器崩溃,部分结果不能代表三平台完成。product.daily:ERP 与三平台采集、分析、导出和入库。PARTIAL_TIMEOUT;run_idproduct.daily__20260731__20260801T113513Z__b59304。ERP、京东、天猫完成,抖音超时;保留 257 个 raw 文件。独立下游验证完成分析、32 条导出、本地 PG upsert 和 32 次飞书写跳过,但不把下游成功升级为整体通过。product.alert.daily:读取商品数据并检测销量异常、按条件通知。PASS;实际入口 run_idscript.product_commerce.955b1dfb0cdf__20260801__20260801T085614Z__4fefb3。本地库读取成功,当次无符合阈值的异常,因此没有告警新增或通知。product.import.daily:把三平台商品日报幂等导入本地 PG。PASS;实际入口 run_idscript.product_commerce.9137239938d5__20260727__20260801T085541Z__59c16c。抖音、京东、天猫分别处理 163、90、173 行,无重复。product.style_analysis.interval:使用本地 Hermes 分析到期款式。PASS_WITH_SKIPS;workflow run_idproduct.style_analysis.interval__20260801__20260801T084137Z__952204。数据库表/权限与 Hermes 健康检查通过,单款实现入口内部 dry-run 成功,未写外部副作用目标。product.main_image.weekly:周日 08:30 并行启动 JD、Tmall 两个无依赖且资源隔离的主图分支,两个子链均独立执行本地 PG 入库与飞书插入逻辑。PENDING_RETEST_AFTER_MERGE;当前没有可归属于合并后新图的业务 run_id。工程结构要求为:任一分支受控失败时,另一分支仍完成自己的采集和双 sink 写入;全部结束后整体聚合为失败,并在错误摘要中标明具体平台和错误。下一轮需在现有飞书零写门禁下完成受控业务复测。product.market_rank:并行采集天猫、京东、抖音三平台周市场排行。FAIL_AUTH_OR_UI;run_idproduct.market_rank__20260814__20260801T103628Z__5a9024。天猫认证失败、京东缺配置类目、抖音目标控件缺失;目标脚本与来源哈希一致,当前证据不支持判定为迁移改坏。
8. 内容工作流
content.metrics.daily:采集合作达人、自营 B 站、蝉妈妈数据并同步指标。PARTIAL_FAILED;run_idcontent.metrics.daily__20260813__20260801T101312Z__28d505,运行 71 分 05 秒后完整度检查失败;已完成子链和飞书写跳过证据保留,但必要采集链未全部完成。content.marketing_report.daily:从本地数据生成营销日报并按条件通知。PASS_WITH_SKIPS;实际入口 run_idscript.content_marketing.62b3b647254f__20260804__20260801T091245Z__f20319。真实读取本地 PG、调用本地 Hermes,生成 Markdown/PNG;未启用发送参数。content.relogin.weekly:并行刷新内容平台登录态。PASS_WITH_SKIPS;run_idcontent.relogin.weekly__20260811__20260801T100706Z__45a8db。LangGraph 和验收门禁按设计阻止二维码/交互登录并安全记录跳过;没有扫码、没有覆盖 Cookie 或来源状态。content.creator_report.monthly:生成达人月报。PASS_WITH_SKIPS;workflow run_idcontent.creator_report.monthly__20260801__20260801T084140Z__bd9fdd。本地数据库检查和实现入口 dry-run 成功,飞书表写入关闭。content.summary.monthly:生成内容月度汇总。PASS_WITH_SKIPS;workflow run_idcontent.summary.monthly__20260801__20260801T084142Z__9d73c1。本地数据库检查和实现入口 dry-run 成功,外部写入关闭。content.cooperations.daily:刷新映射并同步合作记录。PASS_WITH_SKIPS;workflow run_idcontent.cooperations.daily__20260801__20260801T084143Z__02b89a。真实完成飞书读取和本地数据库读取,内部 dry-run 阻止数据库/飞书写入。content.comments.weekly:并行补采 B 站、小红书、抖音评论并汇总。PARTIAL_TIMEOUT;run_idcontent.comments.weekly__20260812__20260801T100904Z__530989,运行 60 分 56 秒。B 站完成,小红书/抖音有界停止;保留 229 个 CSV、229 个 JSON,合计约 5.45 MB。content.summary.weekly:生成内容周度汇总。PASS_WITH_SKIPS;workflow run_idcontent.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} 自动渲染起止日期 |
PASS;shop.jd_self_operated.history__20260728__20260801T103803Z__22f456;约 43 秒,生成 533 B 品牌 JSON,本地库新增 1 条 |
product.backfill |
product.backfill.run;--date 经 {business_date} 自动渲染 --from/--to |
PARTIAL_TIMEOUT;product.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 |
PASS;content.mapping.refresh__20260818__20260801T112822Z__917ed7;约 25 秒,35 张表、117,505 B 本地映射文件,飞书只读 |
content.retry_failed |
content.failed.retry;按失败清单重试采集并汇总 |
PARTIAL_TIMEOUT;content.retry_failed__20260820__20260801T113412Z__e0c8af;20 分 56 秒,B 站 4/4、蒲公英 14/22、星图 0 |
content.metrics.backfill |
gyxx backfill content.metrics.daily;合并到标准日报图并按日期范围重跑 |
PARTIAL_TIMEOUT;content.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_SKIPS,run_idcontent.self_operated.weekly__20260819__20260801T113119Z__b71197,仅作追溯。product.weekly_aggregate.documented_missing:历史文档中的商品周聚合说明项。NOT_EXECUTABLE;无 run_id;已确认来源和目标均不存在脚本、注册项或调度入口。该项不进入当前工作流或手动命令分母。
合并前主图子链实跑证据
| 合并前工作流/版本 | 历史状态、run_id 与关键证据 |
|---|---|
product.main_image.jd.weekly |
PASS;product.main_image.jd.weekly__20260812__20260801T102149Z__b2d3b7;京东旧独立工作流生成 120 个文件、约 15.5 MB,本地 PG 记录 288,82 个飞书写动作由验收门禁跳过 |
product.main_image.weekly(合并前单平台版本) |
SKIPPED_COOKIE;product.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.history、product.backfill、product.review_collection使用命令层default_args与{business_date}渲染日期;supply.purchase_order_update使用固定默认子命令,调用者无需重复传日期范围或固定子命令。content.metrics.backfill合并为标准日报工作流的gyxx backfill入口,其余内容项为显式维护/补偿命令。content.self_operated.weekly和product.weekly_aggregate.documented_missing仅作为历史审计证据保存,不再出现在工作流注册、调度或当前数量统计中。
12. 最终验收标准与完成度
- 21/21 个定时工作流均有用途和状态;20 项保留既有 dated 业务证据,合并后的主图工作流尚无新图 run_id,明确列为待受控业务复测。当前调度全部启用。
- 当前工作流结果分类:
PASS4、PASS_WITH_SKIPS9、FAIL_AUTH_OR_UI1、PARTIAL_FAILED2、PARTIAL_TIMEOUT2、BLOCKED_EXTERNAL_PERMISSION2、PENDING_RETEST_AFTER_MERGE1,合计 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 项用户排除。主图项是由拓扑合并产生的明确复测要求,不沿用旧的模糊“待浏览器复测”表述。