Admin 测试环境 HTTP 模块
样品采购履约每次聚合回查均核对原客户、原采购单号和有效版本;创建重放及客户最终详情同样校验身份,串单立即停止后续写入。procurement-sample-fulfillment-contract.test.mjs 离线走完整个分次收货、双箱打包、两段交寄及 1 元货款、2 元运费冻结、1.5 元实际运费结算链,另以串单和重放重复扣款验证失败路径;这不代表真实钱包或部署已验收。
货物废弃在同一申请上传照片后,先重复提交同一照片 ID,要求 409/A0409、诊断标识齐全,且申请与库存快照不变,才继续正常 PDA 确认。实际废弃总账必须具有有效流水 ID,匹配原客户、仓库、托盘、SKU 和入仓码,扣减前后数量差为一箱;独立箱级流水仍不能用公共库存总账替代。对应离线反例位于 cargo-discard-fulfillment-contract.test.mjs,不额外创建客户、申请或照片。
本土卡车履约每次请求前后保存检查点:总编排提供 checkpoint 时沿用其证据持久化,否则独占创建 reports/us-truck-checkpoints/<marker>.json。同批次文件已存在即拒绝重跑,不覆盖旧证据;落盘失败不发送请求,发送后未知结果停止后续命令。记录原请求体、拒绝预期、诊断和最终状态,不记录会话凭据。对应磁盘失败、未知响应及新执行覆盖拒绝均有离线合同。
本土卡车默认履约在正式实收和分配前,各用原单增加一条无效命令:逐托箱数超过请求总箱数、重复选同一托盘。必须明确返回参数错误并带诊断标识,随后回查原单数量、状态、历史和版本完全不变,才继续正常链。两托原单仅分配首托时,还尝试进入待派车,必须返回 409/A0409 状态冲突并保留诊断标识,整个原单回查不变后才继续分配第二托;未知结果、无关拒绝或意外接受均停止。此边界不增加客户或业务单据,不替代超托审核。
客户原贴标签收并释放车次资源后,默认 phase5 的 verifyClientRelabelSettlement 有限轮询原申请,核对来源单、仓库、原测试费用、客户确认及 SETTLED;串单、金额变化、错误状态或超时均失败,证据随原 relabelFulfillment.settlement 进入 phase5 检查点,不发送补结算命令。合同位于 phase5-overseas-fulfillment-contract.test.mjs。转运链存在源码待回归风险:PDA 完工调用 settlePdaCompletion,而 completeWarehouseTransferFulfillment 当前只接受 FROZEN/NOT_REQUIRED;脚本保留正式收货及结算断言,不能将离线替身通过视为此服务端时序已通过真实验收。
warehouse-transfer-receipt.mjs 在默认原转运出库后复用异仓既有公共空闲托盘,要求目的 FBA 一致、主档启用及库位可预留;不足时失败,不创建或修改公共资源。按原出库仓位正式收货,核对完成命令的权威目标、目标库存位置、唯一新 SKU 入库一箱流水、原键重放及客户详情,再有限轮询关联换标 COMPLETED/SETTLED。逐请求保存 reports/warehouse-transfer-receipt-checkpoints/<marker>.json;未知结果停写,不覆盖同批次,不直接修改资金状态。离线合同为 warehouse-transfer-receipt-contract.test.mjs;只补正常已有库存转运链,在途、多来源、部分收货与异常矩阵仍未全覆盖,真实 HTTP 待运行。
warehouse-transfer-outbound.mjs 由默认客户业务链在原转运关联换标确认后调用,仅接受登记的新 SKU 实托预留。出库前核对原单和零 SHIP 流水;出库后独立核对同客户、同仓、原入仓码、新 SKU、实际托盘号的唯一扣一箱流水,原键重放后单据及流水均不变,客户回查一致且关联换标同步 OUTBOUNDED。不另建转运单或客户;未知结果停写,证据保存于 reports/warehouse-transfer-outbound-checkpoints/<marker>.json,同批次禁止覆盖重跑。离线合同为 warehouse-transfer-outbound-contract.test.mjs;收货及关联换标结算由 warehouse-transfer-receipt.mjs 继续核验,尚未运行真实 HTTP。
已有库存转运的关联换标已复用 client-relabel-fulfillment.mjs 接入默认客户业务链:只接受原分配登记的申请、客户和仓位,复用同仓 PDA,审核、冻结、扫码、组托、完工及客户确认后,要求换标为 WAIT_TRANSFER_OUTBOUND,原转运为 ALLOCATED,唯一有效预留属于实际新托盘、新 SKU 和原入仓码。检查点独立保存 reports/transfer-relabel-checkpoints/<marker>.json,包含原转运及关联换标证据。普通贴标按 TAIL_ORDER 从尾程订单审核,关联换标按 RELABEL_ORDER 从换标单审核;错渠道停止。转运出库已由下述助手衔接;收货和关联换标结算已由收货助手衔接,真实 HTTP 未执行。
warehouse-transfer-allocation.mjs 由默认 phase4-overseas-client-services.mjs 在本轮已有库存转运审核通过后调用。仅分配原入仓单、同 SKU、同客户同仓的真实可用仓位,核对关联换标申请唯一、同键重放及客户详情一致,达到 WAIT_RELABEL。不另建客户或替代转运单;请求前后保存 reports/warehouse-transfer-checkpoints/<marker>.json,未知结果停写,同批次禁止覆盖重跑。离线合同为 warehouse-transfer-allocation-contract.test.mjs;关联换标完工与转运出库已衔接,收货已由后续助手衔接,尚未运行真实 HTTP。
客户首页贴标原申请已接入默认 phase4-overseas-dispatch.mjs 的 createClientRelabelDispatch:总入口显式展开 phase4-overseas-client-services,从其 relabelFulfillment 读取本轮已确认申请;按 RELABEL 来源、申请号、客户、仓库及全部目标托盘精确选货,创建独立原生排车并核验幂等与逐行明细。不能复用 phase4OverseasRelabel 另一份样本的通过结果。检查点同时保存客户贴标来源和排车请求;创建后交由默认 phase5-overseas-fulfillment 串行执行装车、同单新箱唛出库核验、正式签收及车次资源释放;先释放主车,再分别履约旧样本和客户原申请,避免固定资源池重叠占用。deliveryExecution 保存独立终态且随 phase5 检查点落盘;签收后由 verifyClientRelabelSettlement 独立只读轮询原申请资金结算;必须同来源、同仓、原测试费用0.01且 SETTLED,真实 HTTP 未运行。合同复用 phase4-overseas-dispatch-contract.test.mjs。
looseboard-fulfillment.mjs 已由默认 phase5-overseas-fulfillment 调用;总入口将 phase4-overseas-business 展开为前置,保留同一张待接车散板单。串接余位发布、原单绑定、PDA 实收、独立 STOCK_IN 数量及唯一性核验、原车加货和重新两级审核,再由原有主链核验全部客户库存、SHIP、装车发车和签收,最后回查原散板的 booking、来货、车次、派送和签收箱数达到 COMPLETED。使用同一固定客户、车队资源池及 PDA;测试约定单价25/托,逐托测量明确为合成 TEST 样本。检查点沿用 reports/phase5-checkpoints/<marker>.json 并包含散板证据,未知结果停写。离线合同为 looseboard-fulfillment-contract.test.mjs;当前只补脚本,真实 HTTP、异常履约及页面仍未验收。
looseboard-pool-dispatch.mjs 接受散板原单已运营确认的实收证据,原车零扫码时显式退回审核,经需求池 arrange-dispatch 正式排入本车唯一主单,重放核对唯一性并逐行核对原货不丢失、新增实托与箱数一致。保留原容量计划,仅追加本次实收托盘及测量;使用共享排车写入边界,未知结果全批停写。终态为 BOUND_AWAITING_REVIEW,由默认 looseboard-fulfillment.mjs 继续重新审核、装车、签收与流水核验。离线合同为 looseboard-pool-dispatch-contract.test.mjs。
looseboard-pool-receipt.mjs 衔接散板原单的已确认 booking,登记唯一来货,按调用方明确提供的逐托测量经 PDA 草稿、生成、绑定、合成测试照片和完成打托,最后运营确认实收并核验重放不变。检查同客户、同仓、同目的地、原托身份及逐托箱数;请求前后写总入口 checkpoint,未知结果停止,不创建客户或主档,不取消现场。此助手仅达到 RECEIVED_READY_FOR_DISPATCH,默认 looseboard-fulfillment.mjs 已衔接独立入库流水核验、原车加货及后续共享履约。离线合同为 looseboard-pool-receipt-contract.test.mjs,不代表真实 HTTP 通过。
looseboard-pool-preparation.mjs 是 looseboard-pool-binding.mjs 的车次前置编排:仅接受本轮已核验、同仓同车同司机、原排车尚未扫码发运的车次;已有有效容量计划直接复用,缺计划才依据本轮真实实托生成明确标记为非实测的受控预计计划。随后创建/发布余位,分别同键重放核验,调用原散板单绑定助手。过程经总入口 checkpoint 保存原请求和诊断,未知结果停止,不创建车辆、司机或客户。离线合同为 looseboard-pool-preparation-contract.test.mjs。此编排由默认 looseboard-fulfillment.mjs 调用;脚本接入不代表真实 HTTP 已通过。
looseboard-pool-binding.mjs 由默认 looseboard-fulfillment.mjs 经余位准备调用,负责原散板单接车。输入必须是本轮登记的待接单原单、本轮车次及其 looseboardOffer 发布证据;核对客户、版本、同仓目的地和容量后,携带 sourceOrderNo/sourceOrderVersion 创建询价及确认承运,重放核对唯一性,再回查原单进入待入仓且关联同一 booking/trip。约定单价由调用方明确提供,不使用历史订单或自动创建客户。逐请求通过总入口 checkpoint 保存诊断,未知结果停止,不自动取消。离线用例位于 looseboard-pool-binding-contract.test.mjs;完整编排和运行限制见 looseboard-fulfillment.mjs 条目;此助手单独不代表签收。
us-truck-fulfillment.mjs 由默认 phase4-overseas-business.mjs 衔接本轮已审核的独立本土卡车原单,调用正式实收、分配、待派车、派车、运输和完成接口。原单至少两箱时分为两托(1箱与余量),依次验证部分分配及全部分配;单箱仅实收一托并明确未覆盖部分分配。逐托箱数取自原订单;每步核对客户、版本、托盘身份、数量及历史,并执行同键重放和详情回查。不再在 finally 取消这张卡车单,失败保留现场,未知写入不重发;请求诊断与结果放在总入口报告的 phase4OverseasBusiness.truck.fulfillment。不创建客户、车辆或司机;订单实收托盘属于业务数据。当前只补脚本,尚未真实 HTTP 运行;该独立订单完成不代表车队 POD 签收,超托审核仍待补;部分分配已在两托原单默认链覆盖。离线合同位于 phase4-overseas-business-contract.test.mjs。
client-relabel-fulfillment.mjs 由默认 phase4-overseas-client-services.mjs 衔接客户刚创建的同一张单箱贴标申请:审核与资金冻结、PDA箱标/SKU核验、原箱换标组托、合成完工图片、正常完工和客户确认,达到 READY_FOR_OUTBOUND/WAIT_PRE_DISPATCH。来源严格匹配本轮入仓码、仓库、余额和实际托盘;固定客户先核验既有余额,不补款。新目标托盘属于本轮换标业务产物。逐请求写入 reports/client-relabel-checkpoints/<marker>.json,未知结果停写,同批次不覆盖重跑,完成后保存 relabelFulfillment.targetPalletIds 等供同单后续排车使用。此助手只到待排车;默认排车及 phase5 后续已衔接同一申请到签收和资源释放,资金结算仍单独核验。离线合同不代表真实HTTP通过。
cargo-discard-fulfillment.mjs 为默认 phase4-overseas-client-services.mjs 的内部后续:仅衔接本批已批准的单箱一件代发废弃申请,复用同仓 PDA,扫码解析、上传合成测试图片、确认实际废弃、核对公共余额减一箱及唯一 DISCARD 总账,再由客户确认完成,重放两端完成命令核对库存、历史和时间不变。每次请求前保存 reports/cargo-discard-checkpoints/<marker>.json,未知结果停写,不自动重跑或清理;不创建客户或公共资源。多来源/多箱边界及独立箱、SKU、箱级流水底层取证仍保留缺口,不能用公共总账替代底层证据。真实 HTTP 以后执行;离线合同只验证编排与断言。
固定客户模式下 phase4-overseas-wallet-and-pallet-cost.mjs 不再整模块跳过:默认链调用既有 procurement-sample-fulfillment.mjs 完成样品采购、分次海外收货、装箱与面单、预估冻结、国际交寄、国内收货、实际核费及寄客户。使用本轮已核验固定客户,再次核对会话归属,收货仓从正式采购候选复用;既有可用现金须至少 3 元,正常样本实扣 2.50 元,不充值、不修改授信、不创建客户或仓库。仍按原依赖展开;定向入口为 --modules phase4-overseas-wallet-and-pallet-cost。凭据来自显式环境文件,失败保留报告及 reports/procurement-wallet-checkpoints/<marker>.json,未知结果停写,同批次不自动重跑。合成图片仅作测试凭证,客户会话在 finally 退出。授信充值、贴标资金、托盘汇总及拆柜成本综合场景继续列为覆盖缺口;该分支不代表采购异常、退款与全部类型已验收。离线检查不代表已实际执行 TEST HTTP。
固定客户模式下 suppliers 执行既有供应商四类启用筛选、分页、统计、详情身份与平台作用域拒绝的只读检查,不再整模块跳过;缺少某类样本时保留详情覆盖缺口。新增、编辑、停用生命周期仍明确未验收,不创建或修改供应商。acceptance-overview.mjs 从执行入口直接输出 fixedResourceSkippedModules,区分默认注册与固定资源模式实际跳过的模块。
客户端首页八大业务的脚本覆盖审计统一通过 node scripts/acceptance-overview.mjs 的 homepageBusinesses 查看,逐项对应首页实际标题及路由,并由离线测试检查八个入口无遗漏。输出区分默认模块、补充模块、固定资源跳过项、已写场景与剩余闭环;这是源码覆盖审计,不是当前 HTTP 或页面通过证明。审核通过、其他样本的 PDA 作业和独立专项通过均不能替代同一业务单的后续履约闭环。
固定客户车队履约通过显式环境文件的 ADMIN_TEST_FLEET_RESOURCES JSON 数组配置已有资源,每项为 vehicleId、driverId(十进制字符串)。助手只读核验海外自有在役车辆、已审核启用司机及截至预期任务结束的派车资格,不创建车辆/司机、不上传或重审证照。当前 runner 中尚未完成资源释放的组合不得重复分配;全部占用或缺配置直接阻断,失败资源保持占用待排查。复用车辆按审核后真实车牌查询,并以本轮排车号核对唯一 Fleet 绑定,不能把历史同车次记录当作当前证据。跨 runner 仍须串行,真实占用、仓与容量由正式分配接口最终校验。本规则不减少必要的业务排车与履约证据,也不覆盖车辆或司机主档生命周期。
国内整柜权限拒绝探针通过显式环境文件的 ADMIN_TEST_DOMESTIC_DENY_ACTOR JSON 对象配置 membershipId、username、password。固定客户模式在业务写入前核对既有 ACTIVE 平台账号及实际 A0403 拒绝响应,结束退出本轮会话;缺配置或权限不符直接阻断,不创建角色、账号或重置密码。实际凭据不得写入仓库或报告。
固定 PDA 账号取得会话后即占用;权限核验失败也检查退出结果。退出被拒绝或请求异常会记录失败并保留占用,禁止本轮再次分配该账号,同时继续尝试退出其他账号。不将退出未知结果视为清理成功。
固定海外 PDA 账号池通过显式环境文件的 ADMIN_TEST_OVERSEAS_PDA_ACTORS JSON 数组配置,每项为 membershipId、warehouseId、username、password,不得将实际值写入仓库或报告。同仓双操作员场景需要两个不同账号;当前 runner 按 membershipId 占用并在退出会话成功后释放。使用前核对 ACTIVE、平台身份、PDA 角色及仓绑定;缺失或不匹配直接阻断,不创建或修复账号。复用账号只注销本轮会话,不停用、不改绑、不清空角色;仓绑定撤销生命周期明确列为未验收。该占用只在当前 runner 内有效,仍须遵守共享环境造数串行规则。
固定客户下,报关、装柜、订舱级拖车和车队报价复用启用供应商;按 CUSTOMS/BOOKING/TRUCKING 类别、MATSON 船司及国内/海外拖车范围核验列表和详情。缺少匹配供应商时阻断,不自动创建或重新启用;车队报价结束只停用本轮报价,不停用复用供应商。
固定客户模式下,PDA 换标只核验现有可用余额至少 0.01 元(本场景换标费用),不自动补款;采购样本专项要求现有可用余额至少 3 元(货款 1 元加运费冻结 2 元),不自动充值。海外采购合作仓从正式候选复用,退出时不得停用复用仓。固定客户及本轮入仓计划查询覆盖后续分页;混托专项缺第二固定客户时,在首次下单和测量前阻断。以上前置检查不替代服务端执行时的实时余额、资格与版本校验。
固定客户编排也将 customers、supplemental-boundaries 明确记为跳过,不运行建客或边界仓库/库位生命周期。Finance 供应商按启用状态与费用类别查询复用,详情变化或无候选时阻断,不补建;海外入仓费用只允许关联本轮 PDA generatedPlanIds 内且客户、批次均匹配的计划,禁止回退历史计划。混合报关柜缺第二固定客户时在准备订单和装柜前阻断。
固定客户模式下,默认编排排除 system、master-data、notifications、pricing、phase4-overseas-master-data 的生命周期写入,报告使用 skipped 和 coverage gap,不计模块通过。海外仓模块复用现有仓及只读资源,缺仓直接阻断;不自动创建库位/托盘。业务订单与履约证据仍按批次创建,不能将历史已完成单据当作本轮新证据。其他业务模块内嵌的权限探针账号及专用业务资源仍可能创建,当前模式不代表零新增数据。
Admin TEST 入口必须通过显式环境文件配置 ADMIN_TEST_FIXED_CUSTOMER_ID(TEN 编号或数字 ID)及该客户的 MERCHANT_TEST_USERNAME、MERCHANT_TEST_PASSWORD。每次先核验账号归属、ACTIVE 状态和尺寸初始化,再复用客户造业务数据;校验失败停止后续模块,不自动建客、重提资质或重置密码。客户创建/归档生命周期明确排除,海外仓储费模块只读核验既有规则,不覆盖固定客户配置。需要第二客户的隔离用例在单客户模式下阻断,不用同一客户替代跨客户验证。该限制不代表这些生命周期或跨客户场景验收通过,也不清理历史客户。
fleet-return-redispatch-acceptance.mjs 的原出发证明读取本轮 LOADING_COMPLETE 回执与 departureDeliveries;重派在 PDA 装车完成后回查自动生成的出库/派送及两箱已发运事实,不再调用手工安排派送或确认发车。原键重放和跨操作员拒绝仍由共享装车验证覆盖,原签收不漂移、源订单完成事件审计及资源分别释放仍须独立核对。离线模拟不能代替匹配部署的真实 HTTP。
固定托盘造数中,inbound-measurement.mjs 只复用 TP-001、YW-TP-002 指定池中的现有托盘;一只可复用,不要求两只同时存在,两只均缺失才阻断,不自动选择池外托盘。仅明确设置内部 allowAnyExistingPallet 的通用场景可读取当前仓库已有资源;两者均不创建托盘。
OCR模块必须通过ADMIN_TEST_OCR_IMAGE显式指定本轮图片,不依赖个人桌面路径;定向运行自动展开客户资质及订单前置。识别失败的空字段允许省略,但识别成功必须有有效重量与单位;人工修正和确认分别增加版本。合成称重测试图只证明上传、识别响应及人工确认协议,不代表现场称重照片或设备验收。费用项目模块按受控编码验证112条正式基线,合法扩展项目保留并单独核对分页和筛选。散板普通状态接口仅验证取消及非法派车拒绝,原单须出现在待匹配需求池;需求池接车到签收另列覆盖缺口,不以手工跳状态冒充履约。
预约工作查询在本轮业务写入后,仅对服务端明确返回的 A0409“预约批次或运输关联已变化,服务端正在协调完整工作清单”或“已开船工作范围变化,请先完成服务端同步”每 5 秒重读,最多等待 240 秒;超时保留失败,其他错误不重试。这是后台完整扫描的就绪等待,不是页面响应性能验收,也不触发同步写接口。
先运行 node scripts/acceptance-overview.mjs(后端根目录,无网络)查看当前默认与可选模块。范围来自真实注册表;本文件描述各模块用途与依赖,不代表所有模块默认执行或已通过。报告解读及跨端/专项边界见 总索引,最新运行状态只查外层部署契约。
dispatch-workflow-extension-acceptance.mjs 由 ../dispatch-workflow-extensions-test-env.mjs 显式调用,不是独立CLI。双客户双目的仓扩展先从正式目录核验两FBA仓,复用本轮独立来货和PDA实收;装车完成自动生成派送并发车,完整正常链后核对逐客户目的仓、实际费用、单据和交叉读取拒绝。fleet-cross-customer-fixture.mjs 可接收两个明确 destinationWarehouseIds,在任何造数写前核验全部目的仓;原单目的仓调用不变。所有写经过既有逐请求持久化和未知结果停写边界,不修改共享runner;中途故障注入无工具时明确NOT_TESTED。直接合同 dispatch-workflow-extension-contract.test.mjs 不证明环境通过。
其 competition 扩展只并发两个已经成功装车命令的跨端原键重放,并回查完整库存、主单、货物和车次;不是首次执行竞争。占用资源与未安排派送发车分别串行验证拒绝后快照不变。签收成功后的自动完结只做有界只读等待,保持真实写回执,等待失败阻断下一请求而不伪报已知写为未知结果。
其BOL扩展通过可选shipmentReferences和prepareBatchAllocations为本轮实收来源提供显式TEST货件参考及正式预约份额;分配准备后重新读取候选当前版本,默认夹具不创建预约。bol-empty/same/different 核验真实PDF页数、约号、逐托唯一出现及箱数守恒,打印前后原始库存和主单快照完全不变;实际二进制请求另存只读账本。
其 relabel 扩展新建独立第三客户,以三箱正式转运来货和PDA实收准备真实换标来源,逐箱换标/物理移绑/完工/客户确认后分别验证PICKUP零扫码出库取消和两TRUCK申请同实托的原生建车、撤销与再次安排。它不调用要求历史五箱DS来源的旧生产入口,只复用其完整原生selectionGroup建单检查;非TRUCK再次安排缺入口时保留实际缺口。
procurement-sample-fulfillment.mjs 是采购样品完整正常路径的内部验收助手,钱包综合模块也调用同一流程,并将采购请求证据独占保存于 reports/procurement-wallet-checkpoints/<marker>.json;客户会话在 finally 退出。由 ../procurement-sample-test-env.mjs 注入本轮独立已充值客户、客户会话、有效收货仓、受控上传及权威钱包读取。创建新样本,执行正额货款、两次海外收货、两箱装箱、预估冻结、国际交寄、逐箱国内收货、实际核费及寄客户,逐阶段核对钱包现金/冻结和费用来源,关键请求原键重放。每次请求前必须 checkpoint;未知结果停写保留样本,不自动新键重试或清理。已接入显式 TEST 入口;未执行时不计作真实 HTTP 通过,也不覆盖异常、退款或权限全部矩阵。离线合同 procurement-sample-fulfillment-contract.test.mjs 验证前置缺失、余额不足、请求前持久化及未知结果停写。
phase5-root-fulfillment 可由总入口显式 --prepare-domestic-pda-h5 true 仅准备本轮国内H5待拣任务。调用 phase3-order-splitting.loadOneFragment 到正式计划确认、待拣任务及箱唛就绪即返回,不领取、不拣货、不继续海外;结果固定 PREPARED_NOT_VERIFIED,不算全链验收。默认完整链不变,范围及授权见根脚本README。
fleet-capacity-pool-schema-contract.test.mjs 是离线数据库合同:验证发布与持久命令唯一约束、唯一商业履约来源、可空实际数量、服务与统一基线一致、非破坏性结构补齐及独立销售/调度权限;不访问环境、不证明真实履约已通过。
当前新增脚本的执行边界
dispatch-repair-acceptance.mjs 是本批排车修复的内部增量验收助手,不是独立 CLI。verifyDispatchRepair 默认只返回计划,显式执行要求 TEST、Lastleg/Admin 健康及 Schema 就绪、请求前后持久化检查点。context.producerEvidence 指定本轮生产回执 JSON 的路径及 SHA-256;文件须含 environment=TEST、marker、已部署 Lastleg 的 sourceCommit 和 requests。请求条目保留实际 method/path/body/actor、status=RESPONDED、http/code/requestId/traceId/result,不得保存登录凭据或 Token。助手从正式创建响应及父来源回执提取业务号、客户和仓库,形成资源白名单;所有 fixture 关联身份在首个请求前核对,不能仅声明“本轮新建”。缺样本标记 NOT_RUN,不借旧业务样本。
该助手将已撤销的装车后取消/人工重排场景标为 NOT_APPLICABLE,仍核对实际出库门禁、换标全托、混托两种展示来源、拆合托后重核、原箱回仓及只读权限。两种混托须使用独立排车/托盘/预订,普通与外接来源的箱数由生产实收回执确定,并回查实物仓位组成及报价数量/单价/金额。原箱限本轮单箱出库,按原始 SKU、客户、仓分页精确筛选库存及流水,以排车号匹配 OUTBOUND;先取完成前 S、首次完成后 R,再同键重放取 R′,核对本轮唯一 SKU 的完成前零库存基线及首次总量、可用展示数量、箱数恢复、receiptNo 的 EXCEPTION_RETURN_IN 精确集合、目标托盘库位及重放零增量。HTTP availableQuantity 是受实箱可用量限制的展示值,不冒称裸余额证明。不运行移托 DELETE 负向分支,不物理删除、SQL 造数或清理。未知结果保存原命令并停写;证据明确标为合成测试资料,不冒充真实外部预约/POD。保留 sourceEventsVerified=false,来源事件、人工页面及 PDA 真机仍单列。相邻 dispatch-repair-acceptance-contract.test.mjs 只做离线验证,未实际执行不得表述为环境通过。
-
人工状态矩阵的
FEE_CONFIRMING使用独立新订单,在测量提交成功后暂停审核,经正式fees/calculate生成费用;回查同一费用版本、入库客户身份、测量仍待审核及入仓码精确筛选结果。该状态是必验项,不再列入不可造数缺口;不发送费用、不推进该样本、不借历史数据。入口仍为--modules manual-state-matrix,对应order-inbound-status-fixtures-contract.test.mjs和manual-state-matrix-contract.test.mjs。 -
WAIT_PRICING另建保留原始APPROVED的订单,先形成未发布的FEE_CONFIRMING,再通过客户实时渠道目录与报价选择同仓、同目的仓、同税制的不同渠道,以正式申报更新触发费用失效;回查WAIT_PRICING/UNPRICED、新渠道及精确筛选。缺少可计价替换渠道、客户漂移或状态未收敛均失败;不写业务SQL,退出专用目录查询会话。该状态同样为必验项,原先借历史WAIT_SPLIT样本的兜底已移除。 -
grouped-dispatch-acceptance.mjs由默认phase4-overseas-dispatch在主链预排前调用。使用本轮独立未拣托盘,通过/drafts/pre-arrange验证错组拒绝、原草稿不变、每组独立排车、同命令重放及数量/来源;成功响应明确的本轮未拣明细通过正式 API 移除并释放锁,保留空对照单据。写请求超时或 5xx 保留资源,不自动重试或清理未知结果。对应grouped-dispatch-acceptance-contract.test.mjs。 -
fleet-trip-finance-acceptance.mjs由默认phase5-overseas-fulfillment结案后调用。只读本轮实际发车车次及已冻结派送来源,核对 AVAILABLE/BILLED/SETTLED 来源、原币应收、明确归属实收与单据,未分配实收保持未知(null 或 NON_NULL 响应省略);前后车次、资源、审核不得变化。失败保留 CHECKING 证据,不创建账单、收款或财务分配。对应fleet-trip-finance-acceptance-contract.test.mjs的部分/全额付款和受限权限反例不代替真实样本;默认链没有独立实付样本,不能据此宣称付款生命周期或真实权限边界已经验收。
两者都是内部模块,没有独立 CLI;沿 Admin 原入口的 TEST 配置、统一会话、JSON 报告与权限执行。依赖缺失、版本未部署或前置链失败时明确失败,不借历史样本或生成模拟成功。源码准备与实际执行分开记录;离线合同不能代替真实 HTTP。开始验收后,先跑新增合同及脚本文档门禁,再跑相应依赖链和全量;当前执行结果仅维护在测试环境部署主契约及其原始报告中。
fleet-handover-acceptance.mjs 是车辆专项实际DEPART后的内部交接助手,由../fleet-test-env-acceptance.mjs调用;仅接受本轮已验证车次/派送及自有PDA会话,核对原DEPART/费用不变、真实剩余货物和接替资源、同键重放及旧资源分别释放。调用方必须注入发送前持久化检查点,落盘失败不发送HTTP;仅保存脱敏原命令及附件摘要。签收前导出本轮handover-fixture.json供页面/运营统计检查,成本验证与账号清理由同一入口编排;失败保留证据,不借旧车次或自动续跑。对应fleet-handover-acceptance-contract.test.mjs为离线合同。
fleet-quotes-operations.mjs 的runQuoteSession使用独立TEST登录及本轮客户准备,run只验证报价增改/状态/历史及原子CSV;verifyOperations另需当前轮DEPART的独立托位/货量/原币成本期望,报价通过不代表运营统计通过。后者默认只读,实测更正必须显式传入写入开关和独立幂等命名空间;不推算财务实付。由专项编排器提供持久化检查点和独占报告目录,原请求未知时不自动重造样本,结束退出自身会话。对应fleet-quotes-operations-contract.test.mjs不访问真实环境。
fleet-trip-cost-acceptance.mjs 是同轮实际发车后的车次直接成本内部验收助手,由车辆专项入口显式调用 verifyFleetTripCosts(context, module, tripProof, inputs),不独立造车次、不修改IAM。调用方须提供真实DEPART、独立确认的自有/外接逐票托盘及托位预期、仅列表权限和无车次权限两个独立会话,并负责退出;缺前置在成本写入前停止。写入本车次两条成本并更正,最终CNY100.03、USD13.07分别按整数分和真实托位核验分摊,检查重放、历史、权限拒绝后事实不变;公司维修成本不并入。请求意图和响应通过调用方checkpoint脱敏落盘,失败保留原样本/键,不自动重跑、删除或清理。fleet-trip-cost-acceptance-contract.test.mjs 为离线合同,不证明真实HTTP已通过。
fleet-company-cost-acceptance.mjs 是公司车辆成本内部验收模块,由 ../fleet-company-cost-test-env.mjs 使用独立 marker 和 TEST 会话调用,不依赖或借用 financeFullFixtures。自行创建专用供应商、车辆及维修/救援记录,覆盖 CNY/USD 来源匹配、未付款作废重建、凭证字节、部分/全额付款重放、超付与已付改写拒绝;客户隔离只读检索本 marker 费用未进入客户费用池,不借用其他客户查询明细或账户,避免将其他并行任务的正常变化误判为污染。要求当月已有启用 USD 汇率,缺失则停止,不修改共享汇率。报告和清理边界见脚本根索引;fleet-company-cost-acceptance-contract.test.mjs 为离线替身测试,不调用 TEST。
fleet-driver-qualification.mjs 是司机证照专项可选模块,从 admin-test-env-acceptance.mjs --modules fleet-driver-qualification --output <报告路径> 执行,凭据由调用者显式 node --env-file=<授权TEST环境文件> 提供。经正式API创建两名本轮受控司机、上传非真实证照PNG,验证缺件/审核/打回/重提、30天内提醒、任务结束跨到期日禁止、非必需资质不阻断、关键资料及附件变化重审、旧版本拒绝、附件跨司机归属和历史下载。仅操作本轮司机及文件,不改排车/库存/财务、不执行SQL或部署;成功失败均按最新版本停用本轮司机,保留样本和报告 createdResources.fleetDriverQualification。失败重跑使用新样本,原失败证据不改写;该专项不代替整车实际发车链和浏览器验收。
fleet-vehicle-care.mjs 是可选车辆运维专项,通过正式入口 admin-test-env-acceptance.mjs --modules fleet-vehicle-care --output <报告路径> 执行,不单独运行。仅用于获授权 TEST,凭据由调用者显式 node --env-file=<指定环境文件> 提供;复用总入口 gateway/username/password 参数。经正式 API 创建本轮专用车辆,再复用 vehicle-care.mjs 验证六类记录、版本、更正历史、照片幂等及跨车隔离;不依赖订单、库存、报价或历史样本。写入仅涉及测试车辆、运维记录和图片;成功/失败均保留报告 createdResources.fleetVehicleCare 和样本,finally 读取最新版本停用本轮主车辆,内部助手停用隔离车辆,不删除记录或文件。失败重跑创建新样本,不修改原失败证据;不执行 SQL 或部署。该场景不证明费用已经入账或付款。
fleet-cross-customer-fixture.mjs 导出 createFleetCrossCustomerFixture,由上述专用 TEST 入口显式调用。默认只返回准备契约;执行时重新核对指定实际收货仓和FBA目的仓,通过正式客户资质、普通转运来货、PDA一托一箱测量/绑定/实收及客户确认生成两套独立本轮货物,再以真实来源一次 Create 建立同一原生排车主单、自动唯一 Fleet 资源记录并完成两级审核,停在 LOADING、零扫码、未生成出库和派送单。每条明细保留其真实客户、来货码、物理托盘和库位,主单不挂客户。客户上下文独立且不覆盖外层客户环境,退出本函数创建的客户会话,PDA启停归外层入口;无外接预订循环依赖、业务SQL、部署或自动恢复。fleet-cross-customer-fixture-contract.test.mjs 只证明生成编排及拒绝边界,真实运行另行留证。
fleet-cross-customer-acceptance.mjs 是跨客户同一原生排车主单的内部后半链验收函数,不是独立入口。默认只返回 fixture 契约、零网络;显式 execute:true 需要同批次两个独立客户、同仓各一托一箱已实收、同一主单已通过两级审核且未拣货,以及调用方提供的完整库存只读取证器。按各明细实际客户扫码,验证一个客户未核平时整车装车/发车拒绝及全部快照不变;全部实拣核平后按实际测量确认装车,在同一次命令自动生成客户目的地单据并发车;按详情 documents 核对真实单据,原键重放和分别签收。实托测量缺失明确阻断,不以计费/计划常量替代。前置门禁与事务中途回滚分别记录;默认后者为 NOT_TESTED,只有显式注入verifyDepartureRollback且返回精确本轮验证、完整一致性快照恢复相同后才记VERIFIED。专用../fleet-trip-rollback-test-env.mjs负责租约/脏读观察与持久化,普通入口不注入故障;钩子异常、未验证或快照漂移必须停止在正常发车前。失败保留当前样本与原请求,不自动续跑、补造或清理。对应合同 fleet-cross-customer-acceptance-contract.test.mjs 仅证明编排与反例断言,不能代替真实运行。临时账号生命周期、最小来货生成及报告保存由外层显式编排负责。
TERMINAL_READONLY 用于全部业务写入和结案助手均完成、仅专项入口汇总状态断言错误的已复核报告。结案助手成功状态为 CARGO_COMPLETED_AND_RESOURCES_RELEASED。该检查点登录后仅 GET 原车次、每张排车/派送、资源占用测试计划与精确财务来源版本,不重放任何业务写入,不覆盖原失败报告;真实状态、数量、签收或费用不符仍失败。它不补充生产者 ACK 或页面验收证据。
EXTERNAL_RECEIPT_CONFIRMED 仅接受原运营实收确认明确成功、后续只读/重放断言失败且尚未开始排车关联的样本。先核对原来货已可排车、实际容量及单一库存流水,再原键原载荷重放实收确认;不重新入库。重放比较以数据库持久化后的完整预订为基准,避免直接拿命令返回的纳秒 updatedAt 与数据库毫秒精度比较;货量、报价、版本及全部业务字段仍精确核对。实收总箱数字段为正式 receivedPackages。
EXTERNAL_PALLETIZED 仅用于原 PDA 入库命令明确成功、库存只读核对失败且尚未运营确认的原样本。要求保存原请求键、实托和本轮临时 PDA 账号,回查原容量预留、来货状态及账号仓绑定后,只重放原入库命令,不重新创建或收货;再继续运营核量。库存列表是分组汇总,来源归属须读取该组引用的余额详情及实物位置,并与本票不可变流水核对;不能假定汇总行包含来货码。每次显式续跑保存独立报告和原报告哈希,保留首次失败证据。
EXTERNAL_RECEIPT_READY 是另一处显式复核检查点:仅全/部分费用覆盖与占位均已验证、PDA账号创建明确因手机号冲突被拒绝、尚未创建外接来货时允许继续。继续前回查原车次分配、客户排车及未拣/未发事实;新测试PDA使用独立标识,不复用恢复前的联系电话生成序号。已有外接实收/关联或账号写入结果未知时不得使用此检查点。
若全覆盖命令已经返回成功、但后续只读核对失败,可在核对原出库/派送确实已保存且未执行后,显式使用 --resume-stage FULL_COVERAGE_PERSISTED。此模式要求原成功命令、出库号和完整派送集合,先查正式详情,再仅重放原键原载荷;不重新运行创建前的负向写用例,不更换请求键或重造业务单据。目的地以当前 destinationWarehouseCode 优先、fbaWarehouseCode 兜底,与车次及派送服务一致,不能用原始 FBA 快照否定已经变更的实际目的地。
车辆专项修复后可显式选择已复核的只读检查点:--resume-report reports/<原批次>/report.json --resume-stage FULL_COVERAGE,仍须新的 --run-id。只接受全覆盖阶段仅执行过 GET、尚无出库且无任何 POST 的失败记录;复核同一车次资源、排车货物及未拣/未发事实后继续原样本,原失败报告不覆盖,保留其哈希与旧检查记录。其他阶段及写入结果未知均拒绝自动续跑,须先按原命令核对实际结果。出库列表仅使用正式客户范围分页,再逐行匹配排车号;不假定该列表支持 dispatchNo 查询过滤。
车辆专项入口为 ../fleet-test-env-acceptance.mjs,先使用原 phase4-overseas-dispatch 依赖链创建本轮客户、头程费用和海外库存,再执行专用车辆编排;不改变已通过的 F40 默认调用顺序。默认 --plan 无网络,实际运行须显式 --execute --environment TEST --run-id <新批次>。仅串行运行,会创建当前批次资源及执行正式未执行单据取消重排,不执行部署、配置修改或业务 SQL 写入;原收货取证沿用现有只读读取器。失败保留原样本、请求与报告,不自动重造或续跑。
四个内部助手及各自 *-contract.test.mjs:fleet-booking-reservation-acceptance.mjs 验证询价/确认/超卖/取消的逐段占位与重放;fleet-fee-coverage-acceptance.mjs 复用两组独立排车样本,核对装车完成自动生成单据的客户、目的地、箱数和实际费用;已撤销的人工费用覆盖选择不计作通过;fleet-external-receipt-acceptance.mjs 通过正式来货与 PDA 测量、生成托盘、扫码绑定、照片和完成接口入库,按客户/仓/来货码查询余额与流水,验证重放不再入库、运营核量改价和预留替换;fleet-external-dispatch-acceptance.mjs 将该实收货物预排并绑定原车次,重核容量并逐客户审核,验证约定运费来源与重放。后两者会产生新外接货,必须走专用编排,不能直接加入只拣一张排车的 F40 默认流程。专项入口继续逐单 PDA 拣货、整车发车、逐目的地签收及资源释放;报告将 Finance 消费入池与生产者 ACK 分别记录,消费行存在不能冒充生产者已收到 ACK。以上助手不能独立当作全链入口,离线合同通过不代表真实 HTTP 或页面验收通过。
头程提交、平台编辑与取消按首次原始详情版本冻结请求。原键原载荷重放成功;同键异载荷、旧版本及新键重复操作分别核验拒绝后事实不变。Platform 编辑使用平台权限与显式客户范围,客户 Token 不得调用。
fleet-trip-fulfillment.mjs 是内部整车验收助手,不是独立入口。一张原生排车单对应一趟车;通过正式 API 准备资源与两级审核,读取唯一自动生成的 Fleet 记录。固定主档只读复用,送审前经本车证据接口上传标明TEST的车辆、司机及驾驶证三类合成图片并绑定,任何上传失败停止送审,不修改司机主档证照。PDA 拣货及来源核验通过后,读取本车五个装车照片框,复用已保存文件,仅为缺失框上传标明 TEST 的合成 PNG,再绑定、原键重放并回读;上传前保存检查点与文件摘要,未知结果停写,不自动重新上传。照片在 LOADING 保存不得提前发车;AFTER_LOADING 最后一个缺失框保存后须进入 DELIVERING。资料齐全后重新读取主单资格与实载清单,再确认装车并核对自动生成的派送,不再调用手工安排派送或发车。实载数据由服务端返回,重量和体积缺失保持未知,不以请求中的测量值或计费量替代。PDA 上传及绑定始终保留原账号会话;ID 和版本无损保留,资源及文件留在报告。直接调用者须消费当前 DTO;离线合同通过不代表真实 HTTP、实物照片或 PDA 硬件验收。
prepareFleetTrip 对零扫码的装车中排车,须先显式退回装车前再维护资源并重走两级审核;已扫码时不能重排。confirmFleetLoading 验证已扫码编辑被拒绝且主单与实际货物零漂移,然后按真实装载预览/实测回执发送装车完成命令;PDA成功后,平台使用同一原键原载荷重放,必须保持原结果和版本。报告createdResources.fleetTrips[].reassignment保留原请求、前后快照及拒绝证据;未知写结果停止,不自动换键重造。装车返回版本不替代发车前重新读取的公共版本。
五期和F40签收后继续调用finishFleetTrip:货物结案、车辆任务结束、司机任务结束分别执行并重放,按真实资源占用所有者核对“结案仍占用车辆、只结束车辆仍占用司机”。两项结束后,通过原生Create创建本轮空排车取得下一趟资源占用,再重放旧结束请求,证明不能清除新占用;不调用退役Fleet空计划创建接口。只有当前空排车无来源/无箱/无扫码且创建结果明确时,才能按最新版本取消探针;结果未知不清理。地点、时间、原请求及业务号留在createdResources.fleetTrips[].closure,不含返程任务,离线模拟不能替代真实环境验收。
phase5-overseas-fulfillment.mjs 的 pickAll、saveReceiptAndComplete 也供显式授权的 ../mixed-container-outbound-test-env.mjs 留存混柜续跑入口复用;仍使用正式 PDA 拣货和签收文件绑定接口,不代替全模块验收。
总入口是 ../admin-test-env-acceptance.mjs。每个业务模块使用独立的同名 .mjs 文件,避免多个对话同时修改总入口。
phase3-loading.mjs 的 PDA 原子证据上传在未取得 HTTP 响应时最多尝试三次,冻结原 URL、作业员身份、幂等键、文件名/内容、证据版本和封签号;不重试 HTTP/业务拒绝或已收到响应后的读取失败。createdResources.loadingEvidenceTransport 保存各次结果及白名单网络错误码,不保存凭据或原始错误对象。phase3-evidence-transport-contract.test.mjs 用持久幂等模型验证响应丢失重放仅一条证据、持续传输失败有界终止及拒绝不重试;离线模型不替代真实 HTTP。
装柜模块每次执行时读取当前客户凭据,依次选本轮 merchantQualificationFixture、显式客户参数、显式加载的环境变量;选中的身份缺用户名或密码时在业务请求前停止,不能借另一客户补齐。不得在模块导入时缓存客户账号;phase3-loading-credentials.test.mjs 覆盖同进程切换客户、显式配置、当前环境读取及缺凭据写前拒绝。
orders.mjs 每次运行优先使用当前 merchantQualificationFixture 的完整账号对,其次为明确配置;不在模块 import 时缓存客户凭据。当前 fixture 不完整时停止,不与上一轮或环境账号拼接。orders-session-contract.test.mjs 在同进程重复调用真实订单登录入口,覆盖连续客户隔离,防止多模式串行时沿用前一轮身份。
phase4-overseas-pda.mjs 的收货入口对本轮 containerBookingId + containerNo 做有界候选收敛等待(最多 30 次、间隔 1 秒),只有唯一且可操作的原柜才继续;鉴权失败、畸形响应和重复候选立即阻断。它用于等待异步船节点投影,不构成事件重放证据。F40 在成功和失败时均保留 receivingCandidateEvidence 的逐次查询身份、结果和诊断信息,不覆盖已有收货会话,不借其他柜或历史柜继续。
多目的地排车C52:phase4-overseas-dispatch.mjs在本轮实际收货产生的同仓同客户托盘上验证多FBA目的地及重复目的地托盘的增加、移除、原键重放和拒绝后零漂移。路线期望从真实Detail、Items、Route与冻结候选独立推导,记录routeLifecycle;缺少两个目的地及同目的地双托时明确阻断。使用版本化服务器草稿/容器/来源占用、drafts/pre-arrange转换、原生Create、POST /{dispatchNo}/items/{dispatchItemId}/remove和PUT /{dispatchNo}/route,不使用旧独立pre-arrange或DELETE items。正式交接保留原生三个读取对象及实际sourceKeys,停在ACTIVE/BEFORE_LOADING,未装车不得标记完成;实测缺失另行记录。写前原子落盘,未知结果停写,同marker不能重新创建。定向入口仍为--modules phase4-overseas-dispatch;真实运行会写指定TEST,仍须环境授权,失败保留原样本。两份对应合同验证脚本编排,不能证明服务端路线已正确同步或真实HTTP生命周期通过。
船节点异常 C66:phase3-carrier-schedule-queries.mjs 的 captureCarrierExceptionEvidence 与 verifyCarrierExceptionTransition 对本轮原船任务采集只读 checkpoint,核对 CUSTOMS_HOLD/TERMINAL_HOLD/DOCUMENT_HOLD/UNKNOWN_HOLD 的追加、解除、重放及冲突前后正常实际/预计节点守恒。phase3-carrier-exceptions-contract.test.mjs 只验证离线比对逻辑;真实生命周期还需要 Integration 供应商结果经调度器消费的独立投递证据。默认 HTTP 链只采基线并保留该覆盖缺口;空异常数组、重复 GET、报关异常和合成快照均不能计为供应商异常生命周期通过。
对应本地数据库事务测试为 Firstleg CarrierScheduleExceptionPersistenceTest,使用真实 Service/Repository/MyBatis 和 H2,验证四类异常及解除的同事件重放、异摘要冲突、正常实际/预计节点整行不变,以及异常历史写入失败时事务回滚。它属于本地持久化验证,不代替 TEST MySQL 或真实供应商调度链验收。
phase5-root-fulfillment.mjs 是 F40 两箱根/余量专项,通过总入口 --modules phase5-root-fulfillment 准备本轮资质客户;TEST 与显式 --environment gray 的环境参数、授权和排除范围见脚本根 README。模块用正式下单、测量、国内 PDA 拆分装柜、船节点、海外 PDA 收货、拣货发车及文件签收链创建两柜真实来源。海外 PDA 必须按本轮客户、柜次、来源入仓 ID 和入仓码确定实际唯一接柜仓,再核对 Warehouse 主档;不得按仓列表顺序选择另一仓。默认根先签,编程调用 AcceptanceRun.context.f40SignatureOrder='CHILD_FIRST' 切换子先签;分别核对第一片签收不得根完成、最后一片签收才根完成、真实签收时间、状态历史和重放零新增。
默认税制为 BUY_DECLARATION;编程调用显式设置 AcceptanceRun.context.f40TaxMode='TAX_REFUND' 可执行退税链。内部模块 phase5-root-tax-customs.mjs 在每个实装柜走客户上传、平台回执、客户确认、发送执行、人工正式申报与放行、完成文件,再进入尾程;订单最终完成后回查本客户资料并校验原件、回执、完成文件的实际下载字节和 SHA-256。该模块不能独立执行,不用 SQL 修改状态,不借历史资料;依赖相同 TEST 授权、当轮客户与只读取证器,失败及重跑保留各轮原始报告。直接合同为 phase5-root-tax-customs-contract.test.mjs,离线通过不代替实际 HTTP 或页面验收。
AcceptanceRun.context.f40SignatureOrder='ROOT_SIGNED_REMAINDER_CANCELLED' 单独验证合法末票余量取消:本轮新根通过 orderStopAtApproved=true 停在原始 APPROVED,只装运签收首箱;回查真实履约树及未装子单原始 APPROVED、入仓 WAIT_SPLIT 和一箱余量后,调用公开取消接口。PROCESSING 子单不得作为取消样本。根完成事件必须唯一发布,取消子单完成事件显式为零;原键原版本原载荷取消重放成功;同键异载荷及新键重复取消返回 A0409,根子版本、历史、摘要、履约树及完成 Outbox 均不漂移。两种双签模式仍须两片实际签收,不能用取消替代第二签。
会写已授权测试环境,保留新客户、单据、文件及报告,临时海外 PDA 在 finally 停用;失败保留样本,不自动删除或重复执行部分已完成链。签收资料使用新 key 保存同文件时,按正式保存命令递增一次资料版本、新增一条版本历史及 SAVE_DOCUMENTS 审计;签收时间、状态、原完成记录、文件绑定和根子完成事件不得变化。同一新命令再用原 key、原请求重放,必须明确 replayed=true 且完整资料、派送事实、版本和审计历史零漂移。资料保存前后及原 key 重放响应保存在 phase5RootFulfillment.receiptReplayProofs,失败也保留已取得的快照。
配置仅来自显式指定的目标环境文件,报告由总入口 --output 指定。完整验收还须向 AcceptanceRun.context.f40ReadOnlyOutboxEvidence 提供本轮客户/根/实际来源的只读完成 Outbox 计数(取消模式必须返回零事件子行);缺少该证据明确为 HTTP_VERIFIED_OUTBOX_PENDING 和阻断,不能报告全部通过。海外收货同时需要 AcceptanceRun.context.phase4ReceivingEvidenceReader 捕获首次完成和重放前后的完整库存证据,缺失明确阻断;四阶段原始库存快照通过 phase5RootFulfillment.receivingCompletionEvidence 原样保存,部分捕获与失败也保留,不用终态补造历史。离线合同为 phase5-root-fulfillment-contract.test.mjs;不能代替真实环境验收。
单票串行验收可显式传 --modules phase4-overseas-return-followups --return-main-chain-only true:仍由总入口准备本轮客户并完成退货签收、合箱、换标和出库;不执行第二客户、跨仓和并发扩展,报告 excludedScope 记录排除范围,不代表完整退货边界回归。目标由显式网关与账号参数指定;仅在已授权环境执行,保留业务单据及 --output 报告,失败先核对报告再重跑,不自动清理。
普通库存换标回归由 phase4-overseas-pda-operations 验证:正常箱先完成混合换标的箱标与 SKU 阶段,另两箱保留跳过/异常;首次显式异常完工后经平台 /rework 退回并验证幂等,返工重新完成全部箱标/SKU 事实,再生成本轮目标托盘、绑定及核对库存流水,最后正常完工和客户确认。PDA 不自行批准复核,不在客户确认后才首次组托;异常首次完工会创建关联异常记录,属于测试数据副作用,保留为验收证据。
尾程暂扣按真实入库阶段验收:phase4-tail-order-controls 在 PDA 入库前验证暂扣返回冲突并回查订单零漂移,继续人工节点及整柜计划转换;phase4-overseas-pda-operations 接收本轮完成库存后调用同模块的 verifyReceivedOrderHold,重新核对本轮客户、订单和 INBOUND_COMPLETED 状态,再执行暂扣、同键重放/异参冲突、解除。第一轮暂扣和解除分别同时发送两条相同幂等键、相同载荷的命令,全部返回后核对响应相同、版本只增加一次和原始库存桶;第二轮继续验证可重复周期与独立冻结保留。并发限制为两条同命令,不并发创建资源;响应不明时等待两请求结束并保留样本,不盲目释放。该证据不替代暂扣与 PDA 拣货竞争同一库存的测试。正向暂扣未执行或前置不足仍是失败,不以入库前拒绝代替正向通过。
pda-loading-link-regression.mjs 通过总入口 --modules pda-loading-link-regression 运行,复用 dropship-pallet-matrix.mjs 的国内正式订单、测量、封托、订舱、证据和完成生产链,仅执行国内关联回归。覆盖单票加入后全移除换柜完成、多票共托反复换三个旧柜后完成、逐托即时提交及同键重放,以及一单多柜中仍有实际分配的未开始柜导致 OWNER_READY/A0409。每次重新创建带 marker 的业务数据,通过公开 HTTP 回查旧柜有效分配数、PDA 终态和入仓状态;不写业务数据库伪造前置。零分配残留由真实整托移除链观察,报告保存 createdResources.pdaLoadingLinkRegression。负向柜保留为 COMPLETION_FAILED,成功柜保留为 COMPLETED,不自动清理;失败报告保留且不得算通过。使用显式测试环境文件及 --output reports/<本轮名称>.json,须有真实 HTTP 写入授权;不启动海外收货或出库。
退货专项核验退货单、退货主单、签收单、批次和合箱生成箱唛的完整业务编号:RT/RR/RB/RC/RETU- 加 25 位大写 Base36 UUID 编码;托盘签收生成的实物箱唛采用当前 RC 前缀及箱数/序号标签协议,必须从签收响应 cartonMark 读取,不能用 palletCode 替代。不再截取内部 ID 六位尾号。幂等重放仍核对同一已保存编号,手工指定箱唛不受系统生成格式约束。编号生成器另有完整 128 位编码往返、原截断碰撞和本地并行生成单测;本地生成压测不增加 HTTP 并发。
退货专项只运行 --modules phase4-overseas-return-receipt,自动准备本轮客户;覆盖非法/重复预报、退货单号和 SKU 查询、非法/未知 SKU 实收、超收及失败不落账、分批签收完成、部分签收禁止合箱、合箱非法箱规/数量/来源、幂等重放前后库存快照一致、逐箱分页无重复遗漏、客户 SKU 数量守恒及标签。通过显式测试环境文件运行总入口,JSON 路径由 --output 指定;会创建隔离测试数据,finally 停用临时 PDA,不删除业务记录。失败保留报告,先核对记录再决定是否新批次重跑。
退货预报创建后为 PENDING_REVIEW。签收前必须通过客户详情确认归属,再经平台 /return-orders/{returnNo}/review 携带 X-Customer-Id 审核,客户回查 PENDING_RECEIPT 且实收为零;审核失败立即停止签收。return-review-contract.test.mjs 覆盖归属拒绝、审核权限失败和回查未收敛。主签收场景按单 SKU 分甲3件、乙2件两批,使用正式 PDA 退货托盘生成接口返回的 palletCode,不复用国内基础托盘;每批对应一个计费批次。按 PALLET 提交每 SKU 箱数和托盘长宽高、重量,总箱数由服务端汇总;主场景验证不上传可选照片仍能完成。边界场景继续验证合成 PNG 上传及合法多 SKU 同托签收,不把图片称为真实现场照片。边界扩展与换标后续仍需按新协议独立验证,主签收通过不能证明全部退货链通过。主链合箱前通过PDA箱内清点接口确认本轮两只实收箱的SKU数量和箱规;签收及部分合箱成功后,换新键提交旧数量快照必须被拒绝,且立即回查订单、批次、箱和SKU均未变化。
return-boundary-scenarios.mjs 是退货专项自动调用的内部扩展,不单独注册入口:本轮新建第二隔离客户,复用两个有效海外仓,覆盖跨客户单据/箱/标签/列表隔离、跨仓 PDA 隔离、两人争抢最后一件的签收及合箱、同键并发签收与成功后重试、多单同 SKU 全量合箱和实际来源追溯、耗尽箱清零、多单 SKU 候选和输入边界。异常写入逐次前后回查订单、签收批次、箱及 SKU;同键重试只模拟响应丢失后的客户端行为,不代表网络故障注入。每组并发严格为两个请求,不启动批量 worker;缺少第二仓或操作员属于失败,不能跳过后宣称通过。finally 停用新增 PDA,保留测试客户和业务记录;不触发部署、SQL、换标、出库或二次合箱。真实运行须明确授权目标环境及此小规模并发边界。merchant-qualification-fixture.mjs 的内部参数 publishEnvironment: false 只将第二客户凭据留在独立内存上下文,不覆盖主客户环境凭据,默认主 fixture 行为不变。
扩展离线检查:node --test scripts/admin-test-env-modules/return-boundary-scenarios-contract.test.mjs scripts/admin-test-env-modules/phase4-overseas-return-receipt-contract.test.mjs scripts/admin-test-env-modules/merchant-qualification-fixture-contract.test.mjs scripts/script-documentation-contract.test.mjs。这些校验验证脚本编排和断言,不代替真实 HTTP 验收;运行报告中的每个失败均保留阻断。
边界扩展创建的每张退货单也必须先审核,再由绑定仓 PDA 按 PARCEL 实收、上传可选合成照片;客户身份由本轮登录会话映射。散件签收使用独立包裹 unitCode,库存定位读取响应 cartonMark,所有箱码路径必须编码。合法多 SKU 同包裹生成独立散件库存,并经散件合箱接口核对并发、回滚和流水;主场景的 PALLET 实物箱通过 merge-boxes 和逐箱 sourceDeductions 核对合并、重放及数量守恒。三轮双请求并发范围保持不变。
同一退货扩展还覆盖五组完整性检查:混合明细中前项合法、后项超量/不存在时签收与合箱整笔回滚;同一操作员同键并发合箱及后续重试只生成一个目标箱;不同客户及仓库使用同一 SKU 时的候选、列表和库存隔离;客户/平台/PDA/无登录身份不得进入未授权退货入口;两批签收流水逐行核对客户、仓库、SKU、签收业务号及增量,并在重放和超收失败后回查不变。流水由现有接口从签收明细重建,不代表独立持久审计账本,也不验证后续换标或出库。并发合箱固定三轮、每轮两个请求,其余造数和校验顺序执行。
phase4-overseas-return-followups.mjs 已接入默认全量,在退货签收合箱后执行换标、客户确认及普通/换标后出库;显式只选签收模块仍不运行后续。前置必须是同批次、同客户、主链断言通过的退货资源,仓库严格沿用实际退货收货仓并核对当前启用状态,不回退其他仓。固定客户模式保留跨客户、跨仓和并发边界缺口,不创建第二客户;后续复用既有 PDA 池,两个模块均退出本轮客户会话。写请求网络结果未知不自动重试。合同检查复用 phase4-overseas-return-receipt-contract.test.mjs;当前只补脚本,真实 HTTP 及页面仍待执行。
退货后续模块对普通退货出库及换标后退货出库统一核对最新 PDA 扫描位置、逐 SKU 总量/可用量/箱数扣减、唯一负 OUTBOUND 流水及历史箱明细保留,并在拣货重放、错误载荷与重复拣货拒绝、完成及完成重放后回查事实不变;库存及流水按本轮客户和仓库完整分页,缺失或截断直接失败。作用域内串行执行,公开 API 流水按行数、类型、出库号、SKU 和增量判唯一;该证据不代替底层数据库并发验证。仅状态推进或离线合同通过不能宣称真实出库记账通过。
退货转换标请求按当前契约传 items[{skuCode, quantity}]、fileScope 和真实 FBA 目的仓 ID/编码,返回 PENDING_REVIEW 与 skuCodes。分页查找启用的 SCK8,缺失则阻断;总箱标文件回查 cartonTotalFileId。独立退货出库候选使用查询参数 warehouseId。同模块的 completeReturnRelabel 在独立出库之后继续审核本轮换标申请、PDA 认领与数量完成、来源托盘解析、正式生成目标托盘、组托及原键重放、上传合成完工图片、提交完工、客户确认及原键重放,最终回查原退货单仍为签收完成且换标关联一致。它不执行其他客户库存操作;目标托盘是本轮换标业务资源,不是国内基础托盘。客户确认后 outboundRelabelledReturn 逐箱核对本轮换标号、客户、仓库、来源单与数量,只为已完成换标的一件库存创建出库,检查创建原键重放、PDA 拣货/完成与平台、客户库存 OUTBOUNDED 终态;另存 relabelOutboundNo,不能用此前未冻结库存的独立出库结果替代。
退货专项复跑命令(在后端根目录执行,每次使用新的报告名;不要与其他环境混用):
node --test scripts/admin-test-env-modules/phase4-overseas-return-receipt-contract.test.mjs scripts/script-documentation-contract.test.mjs
node --env-file="$env:USERPROFILE/.codex/chongchong-global-test-acceptance.env" scripts/admin-test-env-acceptance.mjs --modules phase4-overseas-return-receipt --output reports/return-<本轮批次>.json
PC/PDA 页面交互验收与 HTTP 独立取证,不用接口提交替代点击:PC 固定 1920×1080、缩放100%,验证空预报拦截后新建独立双SKU单(甲3乙2,不执行换标);PDA 固定390×848,验证不存在单号空态、按单号签收甲2、按SKU候选确认2/3与整单2/5、全部填入剩余甲1乙2并确认5/5;再合箱甲2乙1及30×20×10cm/1.2kg。PC 查询三箱3+1+1、两批真实来源、新箱明细、SKU汇总甲3乙2,并检查无结果查询后恢复正常列表。记录本轮业务单号、实际视口、截图与控制台信息;H5点击不代表真机扫码,标签HTTP不代表PDF分页或实体打印。人工重点确认布局、长字段换行、滚动、反馈和操作便利性。
需要为人工联调批量准备同一客户、同一国内仓和同一渠道的 WAIT_SPLIT 数据时,使用《批量待分柜数据生成指南》。该入口通过正式下单、入库、称重和测量接口生成数据,支持 FBA、海外仓、私人地址及一件代发等稳定随机组合;不得直接写库或用于生产环境。
固定“IT测试”客户与“义乌仓”、其余线路随机并尽力生成最多 8,000 票时,独立编排入口是 ../it-test-wait-split-bulk.mjs。它仍复用本目录的 orders.mjs 与 inbound-measurement.mjs,但逐票保存日志且单票失败后继续。测量前置只随机复用既有 TP-001、YW-TP-002,不得调用托盘新增接口;库位由正式仓储接口分配,普通位不足时使用公共位 A0,不得调用库位新增接口。
订单造数中的 GET /api/merchant/v1/partners/candidates?type=SHIPPER 属于 Warehouse 正式客户候选能力。失败时订单脚本仍可使用 sender 快照继续收集后续链路证据,但 HTTP 503/S0503 必须保留为 deployment blocker,不能因订单、测量、分柜或装柜后续通过而降级为 coverage gap。
人工分柜采用两个可选模块,不进入默认全量入口:manual-order-splitting-fixture.mjs 基于本轮至少四票 WAIT_SPLIT 数据生成部分分配、整票拼柜和未分配对照清单;人工在 Admin 完成计划分配后,manual-order-splitting-verify.mjs 读取准备报告和 loadingPlanId,只读核对柜次范围、计划箱数及候选余量。完整命令见同一指南的“人工分柜验收”章节。
人工分柜通过后可继续执行 manual-preload-push-fixture.mjs:它读取分柜核验报告并冻结推送前计划版本、明细及无号模拟柜状态;人工点击“推送预装”后,再由 manual-preload-push-verify.mjs 只读核对 EDITING 预装清单、PENDING bridge、版本递增、明细零漂移和 PDA A0404。两个模块同样不进入默认全量入口。
预装推送通过后,manual-pda-ready-fixture.mjs 冻结无号、未关联订舱、不可确认且无 PDA 的基线;人工依次完成订舱 DRAFT、RELEASED 放舱、原模拟柜关联真实柜号和整份计划确认,再由 manual-pda-ready-verify.mjs 只读核对 RELEASED、allocation、稳定柜次/计划身份、CONFIRMED readiness 和唯一 UNASSIGNED PDA task。两个模块不领取任务,也不进入默认全量入口。
PDA 待领取通过后,manual-pda-batch-fixture.mjs 冻结任务明细、稳定箱码和库存快照基线;目标 PDA 作业员人工领取、逐箱扫码并一次提交原子 batch 后,manual-pda-batch-verify.mjs 只读核对作业员绑定、全量 PICKED、AWAITING_REVIEW、一次 CLAIM、一次 BATCH、pending/detail 一致和入库级数量收敛。HTTP 不记录逐次扫码轨迹,真机扫码仍需人工证据。
PDA 待复核通过后,manual-loading-complete-fixture.mjs 冻结无证据、未完成、RELEASED 订舱和 LOADING 计划基线;人工现场上传五类证据并执行一次最终完成后,manual-loading-complete-verify.mjs 只读核对五类真实图片、唯一 COMPLETE_LOADING、任务/计划 COMPLETED、来源入库单和统一订单 LOADED、实装分片数量守恒及货柜总览终态。
例如 --modules system,inbound-weight-ocr 会依次加载:
system.mjsinbound-weight-ocr.mjs
fee-items 需要同一 marker 的客户订单和入库单。执行 --modules fee-items 时,入口自动扩展为 merchant-qualification-fixture,orders,fee-items,无需手工补齐前置模块。
固定客户模式下 fee-items 只查询现有费用目录、核对112条正式基线及客户权限,不新增、编辑或删除费用主档,增删改生命周期单独记录为未覆盖。所有模式均不自动删除历史 ACPT_ 项目;非固定模式的隔离写入仅清理本轮返回的项目和明细 ID。
finance-full-fixtures 在固定客户模式下只复用已有不包税计费规则:唯一规则或唯一默认规则必须属于当前客户并匹配所需计费方式;缺失、不匹配或默认规则有歧义即停止,不自动创建规则版本或切换默认规则。供应商同样复用既有启用记录;下述创建隔离供应商的说明仅适用于非固定客户模式。
模块只需导出:
export async function run(context) {
const response = await context.request('GET', '/api/platform/v1/example')
const data = context.apiSuccess('example', '查询示例', response)
context.assert('example', '示例结构正确', response, Array.isArray(data), `count=${data?.length ?? 'n/a'}`)
}
可用上下文
混柜收货的每一步均区分同键同载荷重放、同键异载荷冲突和同货物新键再次扫码:普通海外仓重复箱返回冲突,FBA 相同累计数和代发同托新键返回零增量;随后回查完整会话,确保三票事实均不变。
mixed-container-receiving.mjs 通过总入口 --modules mixed-container-receiving 执行,依赖客户资质准备。新建一票双托一件代发、一票普通 FBA、一票普通海外仓订单,固定同一起运仓和渠道,经正式接口混装同柜、完成国内装柜和船节点、按柜生成海外计划。使用本轮 PDA 身份交替执行 FBA 累计收货、代发整托收货、普通海外仓逐箱收货;每步核对全部票进度、同键重放和未齐正常完成拒绝。终点为 MIXED_CONTAINER_INBOUND_COMPLETED,不创建后续出库或派送,不代表仓储转运单混装。报告复用 createdResources.dropshipPalletMatrix;失败保留阻断,成功数据保留,finally 停用本轮 PDA 操作员。真实运行须环境授权,离线合同 mixed-container-receiving-contract.test.mjs 不能代替真实 HTTP。
一件代发矩阵出库前运行 dropship-outbound-edge-cases.mjs 的候选查询探针:先模拟平台首次打开页面只传海外仓,再传客户筛选,要求本轮每票全部托盘、箱数、仓位及 SKU 事实一致,并核对仓库与指定客户隔离。缺托、错误客户/仓库、A0400 或筛选后仓位漂移均阻断;候选达到服务端上限导致本轮数据不可见也不能按空场景通过。该探针不证明跨客户混柜造数已覆盖。
一件代发矩阵在每个剩余实物托盘收货前核对待收箱数,并以 allowDifference=false 尝试正常完成:必须返回 A0409,回查会话事实不变后才继续收货。这不覆盖显式差异完成,不得把正常完成门禁解读成系统禁止一切差异结案。
每托首次收货及重复扫描后,矩阵按本轮已提交的来源托盘、箱唛和入仓码独立计算期望进度,回查柜级及每票的总箱数、实收、待收三项。柜级总数正确但串票、重复行、缺票或逐票待收未刷新仍判失败。离线验证器包含三票交替进度样本,但该样本不等于三类混柜真实 HTTP 验收。
dropship-browser-fixture.mjs 通过总入口 --modules dropship-browser-fixture 执行,自动依赖客户资质准备;复用矩阵生产者创建一票四箱两托,完成国内装柜、船节点和按柜生成海外入库计划,明确停在 READY_FOR_BROWSER_RECEIVING。只准备新测试数据,不调用海外 PDA 收货或出库、不创建海外操作员;后续由浏览器页面验收。报告仍保存于 createdResources.dropshipPalletMatrix,准备通过不代表全流程通过,不自动删除数据。
dropship-mixed-palletization.mjs 通过总入口 --modules dropship-mixed-palletization 执行,自动依赖客户资质准备。经正式 HTTP 创建两客户三票一件代发(2/3/1 个物理箱,每箱两个 SKU),完成下单审核和测量,交替调用跨客户箱码预览、领取、清点、先箱后托批绑、移回/归回、六箱混托封托、解封和重新封托。核对客户/入仓单/SKU/数量守恒、只读识别无写入、同键重放、未知码/跨仓拒绝及逐票待分柜;结果保存在 createdResources.dropshipMixedPalletization。另外保留四票已测量、未领取未组托样本:同客户两票(2/1 箱)和跨客户两票(2/3 箱),逐票核对 Admin WAIT_PALLETIZE 列表可见,保存 manualRecords 和 manualStage=WAIT_PALLETIZE_VISIBLE。显式启用 orders 的 orderFixtureOnly 来源生产范围,保留审核收敛、重放与受理启动,默认订单全量验收仍覆盖申报修改;称重复用当前仓已有托盘,不要求固定编号。使用显式目标环境文件,开发机获授权时 Gateway 必须显式指向本机。会创建并保留客户、订单、测量与托盘数据,不自动清理;失败必须检查报告,重跑创建新批次。终点为 MIXED_PALLET_SEALED_VERIFIED,不代表装柜、海外履约或 Android 真机验收通过。离线合同为 dropship-mixed-palletization-contract.test.mjs。
dropship-pallet-matrix.mjs 验证下述四场景整托手工加入、整托移除、智能推荐、独立订舱与文件放舱、真实柜号关联、预装确认、PDA 整托拣货和五类证据上传;异步装柜完成必须等到任务 COMPLETED 并逐票回查 LOADED。智能装柜的托盘汇总与装柜详情逐票组成分别核对,不能把共托汇总行的首票编号当作全托归属。随后经正式报关、国内离仓及人工船节点接口推进至 PICKUP_READY,再按柜生成逐票海外入库计划,检查来源托盘完整绑定、共享托盘身份一致和同键重放。海外收货使用本轮创建并绑定接柜仓的 PDA 操作员,上传三类照片、签收、逐实物托盘收货、逐票箱数核平和完成入库,同键重放及同托新键扫码均不得重复入账。随后从本轮逐票库存候选创建一件代发专用出库,携带原始箱唛由 PDA 拣货、完成,核对终态、幂等和可用库存扣减;finally 停用本轮操作员。出库重放按业务身份和数据库毫秒时间精度核对。离线合同为 dropship-pallet-matrix-contract.test.mjs;脚本覆盖不等于真实 HTTP 已通过,须检查当轮报告和库存审计。
dropship-physical-carton-chain.mjs 复用同一条正式链路,专门覆盖多 SKU 共用物理箱:20 箱×2 SKU/2 托、5 箱×3 SKU/1 托、7 箱×2 SKU/预计 2 托后合为 1 托。每个场景从新订单、测量、箱唛冻结和 PDA 清点开始,按去重箱唛核对预装、装柜、尾程计划、海外整托收货、库存候选和一件代发出库;每箱必须保留全部 SKU 明细,但任何汇总不得按 SKU 行重复累计箱数。使用 --modules dropship-physical-carton-chain,会保留本轮业务数据和 JSON 报告,不自动清理。
-
dropship-pallet-matrix通过总入口--modules dropship-pallet-matrix执行,自动依赖客户资质准备。通过正式 HTTP 创建五票订单,覆盖单票多托、单票单托、单票移箱合托、多票共享开放托盘;会创建并保留测试数据,不自动清理。报告createdResources.dropshipPalletMatrix保存逐票箱唛、托盘及各阶段证据,失败即停止并保留阻断;重跑创建新批次,不借用历史资源。fullFlowVerified=false,不能代替海外收货及一件代发专用出库的完整验收。 -
一件代发任务
Task.pallets只列实际参与绑箱的托盘;未使用的预生成托盘通过/api/platform/v1/first-leg/pda-dropship/inbound-orders/{inboundId}/pallets?accountId=...读取,客户范围取本轮任务。脚本同时核对generatedPalletCount/palletSetupReady,不因空的任务托盘列表新增资源。 -
orders.mjs创建草稿前读取正式inbound-code-policy:自动模式不传入仓码,手工模式按本轮 marker 生成短且稳定的测试入仓码,确保箱唛二维码长度有效;策略读取失败或矛盾立即停止,不修改系统全局配置、不重用历史订单。 -
dropship-outbound-edge-cases.mjs是dropship-pallet-matrix内部探针,不单独运行:使用本轮库存验证超量、错误 SKU、不存在/重复箱唛、箱数不符、同键异载荷、未拣齐完成、并发同键创建、未拣取消和重放。单票单托额外先拣一箱再拣剩余箱;部分拣货被拒时仍保留失败及部署阻断,只有回查冻结事实无变化才继续整条明细拣货以采集后续证据,不能将此计为分批通过。多票共托使用同一 SKU,来源区分必须依赖入仓码。成功数据保留,未拣并发探针出库单正常取消。本扩展不代表跨客户、跨仓、多 SKU 混箱、逐箱不等件数、跨区故障注入均已覆盖,结论以当轮真实报告为准。 -
phase3-container-documents从本轮货柜详情读取渠道:海铁验证 DO 上传被明确拒绝且聚合中没有 DO,其他渠道继续验证 DO 上传、重放及零漂移;缺渠道不猜测适用性。 -
phase4-overseas-pda-operations用三个独立逐箱任务分别验证正常换标、跳过和异常,异常不得重复使用前两箱。前一步失败时保留失败并停止该链,不继续使用空响应版本。 -
海外 PDA 生产矩阵为实际作业准备
FBA-STANDARD、FBA-SECOND两个通过真实出仓和船节点达到PICKUP_READY的标准 FBA 柜,同时保留SECONDARY未放行柜用于负向门禁;不得将负向柜当作第二个收货柜。 -
海外 PDA 按真实柜号去重执行签收,缺少一件代发生产者不得用 FBA 生产者替代;原生产矩阵失败仍保留。P4 解绑样本保留为
UNBOUND,P5 只从本轮已完成同柜、同目的仓的入仓码中选择三箱实物托盘库存,排除UNBOUND和重复仓位,不借用历史订单。 -
排车详情按
DispatchResponse.Item核对托盘与箱数,不读取 DTO 未提供的箱唛字段;phase5-overseas-fulfillment将同一换标排车转为待出库单,通过OutboundDetail.pallets.cartonMarks验证全部新箱唛、排除原箱唛和重复箱。该测试生成的待出库单及派送单保留为本轮证据,不推进人工退货样本。 -
出库前同操作员、同草稿允许重复预排并更新原排车;脚本核对排车身份与业务数量不漂移,不要求重新生成的明细行 ID 不变。其他草稿抢锁仍必须冲突,生成出库单后仍验证托盘编辑被拒绝。
货柜查询使用 /api/platform/v1/containers/domestic 列表和 /domestic/{id} 详情,响应为 WorkbenchItem(container、workbenchStage、statusSummary、allowedActions),不接受旧扁平实体。默认 phase3-container-loading 同时验证页面的 ACTIVE、状态、关键字组合查询及详情结构;container-detail-route-contract.test.mjs 离线核对 Admin、Controller 和人工分段/同柜脚本读路径,并反证旧 DTO。定向真实 HTTP 使用总入口 --modules phase3-container-loading,仍自动展开本轮前置并创建测试资源;不借历史柜。
一件代发的 inbound-measurement 前置在测量草稿录入预计托数;审核通过时系统一次性预生成全部 DP 托盘码,允许空托先打印。PDA 既支持先清点箱再扫预生成托盘码批量归托,也支持先扫托盘后逐箱直接归托;预计托数不得超过实测箱数。验收逐托封托并确认全部箱数已绑定、全部预生成托盘已封托后任务才完成,默认一件代发后续链复用该前置。人工验收造数可传 --prepare-dropship-manual-count true,脚本会停在任务未领取、箱未清点、托盘未绑定的状态。
该前置保存成功解析且清点的原始 boxCode,随装柜完成生产 fixture 传入默认 phase4-overseas-pda。默认矩阵同时创建 FBA 和 OVERSEAS 两种一件代发,其中主生产者固定为 4 箱 2 个已封 DP 托盘:先逐托人工分配并确认首托加入后次托仍可选,再反证单条删除受阻、整托移除成功,随后执行真实智能推荐并核对两托完整加入,最终恢复精确两托继续装柜。海外侧必须先将全部原箱码经 current/cartons/resolve 精确解析到同一入仓码及冻结目的类型,再进入逐来源托盘实收及库存验证;OVERSEAS 逐箱实收,A0404、错误箱码/归属或数量缺失均阻断,不扩展推算箱号或排除失败候选。现行 V2 托盘 SKU 分组必须携带 sourceInboundDetailId,离线合同同时锁定两个生产分支来源明细和上述真实 HTTP 调用链。
request(method, path, body?, token?, extraHeaders?):JSON HTTP 请求,自动使用平台 Token;幂等写操作通过extraHeaders传Idempotency-Key。requestBinary(method, path):文件下载,不把二进制写入报告。apiSuccess(module, name, response, evidence?, options?):断言 HTTP 200 + body code200,成功时返回 data。assert(module, name, response, condition, evidence, options?):业务断言。expectConflict(module, name, response, scenario):断言并发冲突。addStep(...):写入统一步骤报告。marker:本轮唯一测试标记。createdResources:登记测试资源 ID。context:模块间共享少量 ID;模块应尽量独立。
约束
unified-pda-session-revocation.mjs 是海外库内作业模块的内部安全检查;在本轮操作员完成库存作业后修改其作业仓,分别验证旧 Access/Refresh 失效、新登录只绑定新仓、角色及仓绑定清空后旧会话失效且不能继续 PDA 作业。只更新本轮临时账号并由原 finally 停用,凭据保持在私有上下文;不改仓库主档或业务库存。合同为 unified-pda-session-revocation-contract.test.mjs。
direct-delivery-replay-proof.mjs 是事件模块的内部证据校验器,不是独立执行入口。要求本轮原装柜事件的 ID/hash、12 次失败至 DEAD、人工恢复审计、持久 Inbox 及 DUPLICATE、恢复前后业务订单身份集合零新增和环境恢复同时成立;单纯重复 GET 或历史故障报告不能满足条件。离线合同为 direct-delivery-replay-proof-contract.test.mjs。
- 不记录密码、Token、图片二进制或 OCR 原文全文。
- 测试数据必须带
context.marker;可删除的清理,不能删除的最终停用。 - 缺少已确认契约时记录失败或
deploymentBlocker,不得模拟成功。 - 一个模块只修改自己的
.mjs,不要修改其他模块文件。
近期业务模块与静态合同快速索引
合并后的海外增量覆盖
本节核对 d4fec829 首父至 fb66d920 的海外后端差异及当前 Admin 调用端。
复用已注册默认模块,不新增独立造数入口;定向执行仍由总入口展开本轮客户、国内履约和海外 PDA 前置。
离线合同 merged-overseas-coverage-contract.test.mjs 锁定默认注册、定向依赖、陈旧 fixture 拒绝及新增断言。
离线通过只证明脚本合同,不证明部署环境已通过。
| 新增功能 | 全量模块 | 本轮 fixture / 依赖 | 正常与失败断言 |
|---|---|---|---|
| 仓储转运审核 | phase4-overseas-client-services 调用内部 warehouse-transfer-review.mjs |
本轮资质客户 Token、PDA 完成柜来源订单;另通过客户 API 创建独立新到仓转运对照票 | 平台显式 customerId;客户 Token 无审核权限;缺作用域/非法决定拒绝且状态不漂移;已有库存 APPROVED/PENDING_ASSIGNMENT;新到仓 APPROVE→WAIT_PDA_RECEIVING/WAIT_DELIVERY,REJECT→REJECTED/CANCELLED;同决定重放、反向审核冲突、客户详情回查;空驳回原因应 A0400 并保持待审核 |
| 智能预排真实草稿柜 | phase4-overseas-dispatch |
phase4-overseas-pda-operations 后本轮实际收货托盘 |
草稿柜创建、明确 draftContainerId 绑定、结构回查、unlock 恢复候选、删除柜释放锁、重建柜预排;保留同草稿重锁、其他草稿冲突、旧载荷预排冲突与 release 合同 |
| 排车托盘移除 | phase4-overseas-dispatch |
同一本轮托盘先创建独立移除对照排车,移除后才进入主链预排 | DELETE 明细后箱数/托数/明细归零;重复删除 A0404;正式锁释放后候选恢复。空对照排车保留,不借历史排车 |
| 排车编辑、BOL、自动派送 | phase5-overseas-fulfillment |
本轮主链排车 | 核对车辆编辑、BOL 文件、PDA 拣货、五框资料及装车自动生成出库/派送;双端回读阶段版本、客户归属和数量,库存与 SHIP 零重复扣减;继续逐单签收、异常和回访 |
| 退货签收与合箱 | phase4-overseas-return-receipt |
本轮退货预报及临时 PDA,不使用历史100单 | 已有分批签收、超收、幂等、数量守恒、库存与计费批次、合箱;不重复编排 |
| PDA 收货、换标托盘及采购资金 | phase4-overseas-pda、phase4-overseas-pda-operations、phase4-overseas-wallet-and-pallet-cost |
原本轮收货与钱包前置 | 复用已有收货、换标拆托、出库衔接和采购冻结/结算/释放,不新增旁路写库 fixture |
明确缺口及待验收(不能计作已覆盖通过):
- 转运
Review.remark仅有长度限制,WarehouseTransferService.review未校验空驳回原因,也未将审核原因保存到详情或历史。新增空原因负向 HTTP 断言会在当前实现失败,须业务实现专项修复;原Detail.remark是申请备注,不能冒充审核原因。 - 已核对专用
WAREHOUSE_TRANSFER_APPROVEController 注解;本轮 HTTP 增量覆盖客户 Token 拒绝,但“平台仅列表/仅管理无审核权限”的独立角色矩阵仍缺 fixture。不能用管理员成功替代最小权限验证。 - 新到仓转运本轮只验证审核落到 PDA 前置状态;
PdaWarehouseTransferController托盘化、客户确认、可选换标与后续预排完整新链尚未编排。不得声称 WAIT_PDA_RECEIVING 就是 PDA 已收货。 - 合并新增退货单换标候选及创建换标接口、换标申请编辑能力,尚需各自独立回归。退货出库需另补当前退货箱 fixture 到 RETURN_OUTBOUND 的完整链,不由普通派送退回覆盖。退货模块本轮已将旧
sourceBatchNo=MERGED断言改为实际扣减来源批次去重、真实来源退货单,并补客户箱号分页与标签 SVG 条码;条码实际扫码可读性仍由人工验收。 - 智能预排跨客户/跨仓候选混选、不同平台操作员锁隔离与容量边界尚缺独立反向 fixture;本次同操作员不同草稿锁冲突不能替代它们。
- UI 专项由人工验收:审核弹窗驳回原因必填、按钮权限、列表状态刷新;排车编辑和移除交互、智能预排拖放/草稿恢复、BOL 排版与打印、请求数量。PDF 签名验证不证明打印样式正确。
所有真实 HTTP 场景待当前轮另行授权后运行;不读取真实客户 Excel、不造历史样本、不执行 SQL 或部署。
| 业务链路 | HTTP 模块/共享前置 | 离线静态合同 |
|---|---|---|
| 商户资质与下单身份 | merchant-qualification-fixture.mjs |
merchant-qualification-fixture-contract.test.mjs |
| 公共主数据与往来单位 | master-data.mjs |
master-data-partner-contract.test.mjs |
| 平台基础、客户、海外仓储费与下载 | system.mjs、customers.mjs、overseas-storage-fees.mjs、downloads.mjs |
由 Admin 总入口默认编排;分别覆盖系统能力、客户管理、海外仓阶梯费和下载中心基础能力 |
| 订单创建、可计价主数据、幂等零漂移与审核异步收敛 | orders.mjs |
orders-pricing-fixture-contract.test.mjs、orders-lifecycle-idempotency-contract.test.mjs、orders-approval-convergence-contract.test.mjs |
| 入库单手工扣货与解除 | inbound-hold.mjs(客户隔离、乐观锁、幂等重放/冲突、不可变历史、统一订单投影、智能装柜候选拦截与恢复) |
inbound-hold-contract.test.mjs;默认全量已启用,定向入口自动展开已审核订单与入库单造数 |
| 费用项目、价格配置与基础 Finance | fee-items.mjs、pricing.mjs、finance.mjs |
fee-items-contract.test.mjs、pricing-contract.test.mjs、finance-contract.test.mjs |
| 入库测量、首次打印冻结箱码与墨家扫码 | inbound-measurement.mjs |
inbound-measurement-box-code-contract.test.mjs |
| 入仓自动头程费用、派生详情、人工发布与 MANUAL 其他费用版本 | inbound-fees.mjs(前置:merchant-qualification-fixture,orders,inbound-measurement) |
inbound-fees-contract.test.mjs |
| 国内货柜履约模拟柜关联、柜次概览、渠道隔离、装柜模型桥接、PDA、动态增量、国内报关证据、出仓及离仓后目的港资料 | phase3-container-loading.mjs、ocean-booking-fixture.mjs、phase3-container-overview.mjs、phase3-loading.mjs、phase3-loading-model-bridge.mjs、phase3-pda-convergence.mjs、phase3-evidence-gate.mjs、phase3-loading-finalize.mjs、phase3-customs.mjs、phase3-outbound-dispatch.mjs、phase3-container-documents.mjs |
container-simulation-association-contract.test.mjs、container-specification-fixture-contract.test.mjs、ocean-booking-channel-contract.test.mjs、phase3-container-regression-contract.test.mjs、phase3-loading-model-bridge-contract.test.mjs、phase3-loading-dynamic-final-contract.test.mjs、phase3-container-documents-contract.test.mjs、phase3-phase4-departure-pickup-chain-contract.test.mjs、phase3-producer-chain-contract.test.mjs、manual-state-loading-pda-contract.test.mjs |
| 头程整柜报关 | phase3-container-customs-fixture.mjs、phase3-container-customs.mjs;定向入口通过正式客户资格、订单、测量、同柜装载和最终完成 API 生成平台公共订舱下的买单与两客户退税混合柜。第二客户独立登录,凭据只在内存;验证确认/打回隔离、正式申报各类人工异常及剩余 OPEN 门禁、每客户完成文件、自动出仓和唯一船期任务。客户资料只覆盖退税票,买单行由下载中心 XLSX 验证;不复用历史柜、不执行 SQL |
container-customs-acceptance-contract.test.mjs、container-customs-acceptance-matrix.mjs |
| 国内装柜验收作业员选择 | domestic-pda-operator.mjs;按本次 PDA 登录 Token 的字符串 subject 匹配目标仓库候选 userId,缺少匹配即停止,不使用首位候选或成员编号 |
domestic-pda-operator-contract.test.mjs |
| 分柜与父子入库单数量守恒 | phase3-order-splitting.mjs |
phase3-order-splitting-contract.test.mjs |
| 同柜且不可拆组 | coload-groups.mjs(可选;前置正式生成至少7票同线路 WAIT_SPLIT,另造不同线路反向票;覆盖创建/取消幂等、原子分配/移除、目标组隔离超容拒绝与零漂移、推送防绕过、PDA短拣完成拒绝且无余量子单、足量整组消费、普通单拆分不回归及已有父子单建组拒绝) |
coload-groups-contract.test.mjs |
| 人工计划分柜准备与只读核验 | manual-order-splitting-fixture.mjs、manual-order-splitting-verify.mjs(可选,不进入默认全量) |
manual-order-splitting-contract.test.mjs |
| 人工推送预装前置与推送后只读核验 | manual-preload-push-fixture.mjs、manual-preload-push-verify.mjs(可选,不进入默认全量) |
manual-preload-push-contract.test.mjs |
| 人工订舱关联、预装确认与 PDA 待领取核验 | manual-pda-ready-fixture.mjs、manual-pda-ready-verify.mjs(可选,不进入默认全量) |
manual-pda-ready-contract.test.mjs |
| PDA 人工领取、逐箱扫码、原子批量提交与待复核核验 | manual-pda-batch-fixture.mjs、manual-pda-batch-verify.mjs(可选,不进入默认全量) |
manual-pda-batch-contract.test.mjs |
| 五类装柜证据、PDA 最终完成与 LOADED 终态核验 | manual-loading-complete-fixture.mjs、manual-loading-complete-verify.mjs(可选,不进入默认全量) |
manual-loading-complete-contract.test.mjs |
| 订舱共享主数据前置与订舱验收 | ocean-booking-fixture.mjs、ocean-bookings.mjs、phase3-port-schedules.mjs、phase3-carrier-schedule-queries.mjs(DRAFT 可编辑;RELEASED 冻结;船司查询只创建并写当前 marker 登记任务) |
ocean-booking-prototype-contract.test.mjs、ocean-booking-fixture-contract.test.mjs、phase3-carrier-schedule-queries.test.mjs |
| 订舱级拖车预约完整生命周期 | truck-appointments.mjs(自包含创建并放舱,不创建或关联柜次;已有有效或已完成拖车单的订舱不可重复创建;覆盖候选、附件、人民币费用、幂等及 SUBMIT → DISPATCH → PICKUP → ARRIVE → LOAD,拒绝手工离仓/完成;自动完成与应付由真实国内离仓链路验证) |
truck-appointments-contract.test.mjs |
| 订舱与拖车服务中心跨链路 | service-center-flow.mjs(依赖 ocean-bookings,truck-appointments;复用本轮 RELEASED 订舱创建订舱级拖车,验证派车单、离仓前状态链、历史、审计和关联零漂移) |
由入口依赖合同和拖车直接合同共同覆盖;真实 HTTP 缺本轮订舱或承运商时 fail-closed |
| Admin 补充能力与保护边界 | supplemental.mjs、supplemental-boundaries.mjs |
supplemental-boundaries-contract.test.mjs;只按本轮资源验证补充能力、负向和保护边界 |
| 装柜清单三备注 | orders.mjs、phase3-loading.mjs(客户备注、最新内部备注、仓库备注;仓库备注 PATCH/清空/精确重放/旧版本零写) |
loading-list-remarks-contract.test.mjs |
| 预约工作日历与工作事项 | appointment-work.mjs |
appointment-work-contract.test.mjs;默认只读核对月历、汇总、分页、详情与不存在事项拒绝,正向命令待本轮可编辑工作项接入 |
| PDA 版本发布 | pda-releases.mjs |
pda-audit-sailing-contract.test.mjs;只读双端发布列表与空上传/不存在版本拒绝,真实 APK/WGT 发布需人工准备安装包 |
| 平台操作审计 | audit.mjs |
pda-audit-sailing-contract.test.mjs;分页查询、列表不返回快照、详情与不存在日志拒绝 |
| 船期日历 | sailing-calendar.mjs |
pda-audit-sailing-contract.test.mjs;月历、渠道、模板与异常分配只读核对 |
| 首页实时指标 | dashboard.mjs |
dashboard-contract.test.mjs;默认只读核对实时柜量/清关指标、今日新运单及启用客户的服务端分页总数 |
| 自营经营分析 | self-operated-analytics.mjs |
fleet-analytics-contract.test.mjs;空参探测看板/货主目录,缺采集账号上下文时记录非阻断缺口,不虚构指标 |
| 车队车次与出车记录 | fleet-management.mjs |
fleet-analytics-contract.test.mjs;只读核对车次列表/详情、出车记录、车队报价与拼车需求,车次写命令待本轮排车资源接入 |
| 消息中心管理 | notifications.mjs |
notifications-contract.test.mjs |
| Finance 真实前置、对账、结算与下载中心 | finance-full-fixtures.mjs、finance-reconciliation-full.mjs、finance-settlement-full.mjs、finance-downloads.mjs |
finance-full-fixtures-contract.test.mjs、finance-reconciliation-full-contract.test.mjs、finance-settlement-full-contract.test.mjs、finance-downloads-contract.test.mjs |
| Finance 扩展隔离与跨区费用 | firstleg-container-fee-allocation.mjs(柜次跨客户分摊)、finance-direct-paid-isolation.mjs(海外仓服务直接已付)、phase4-overseas-finance-cross-region.mjs(五类海外费用跨区进入 Finance) |
对应同名 *-contract.test.mjs;跨区事件持久化链在本轮获授权时另以只读数据库证据核对 |
| 客户钱包与拆柜打托费自动闭环 | phase4-overseas-wallet-and-pallet-cost.mjs(授信初始化、平台充值、采购两箱完整履约、货款实扣/预估冻结/实际核费、换标冻结结算/释放、Client 余额账本、国内/海外托盘汇总、按体积分摊及跨区金额守恒) |
phase4-overseas-wallet-and-pallet-cost-contract.test.mjs;默认全量已启用,定向入口自动展开已审核客户与海外 PDA 实收链 |
| 海外仓 HTTP 生命周期 | phase4-overseas-warehouse.mjs |
phase4-overseas-warehouse-contract.test.mjs |
| 海外 PDA 柜号收货与库内操作 HTTP 生命周期 | phase4-overseas-pda.mjs(按柜完成签收和实收,成功后仅以内存上下文交接操作员会话和已完成库存事实)、phase4-overseas-pda-operations.mjs(紧随收货执行盘点、公共位核对、托盘拆装换绑和换标复核;只复用本轮入仓计划已有空托盘及公共位,不新增托盘或库位;finally 停用双操作员并清空临时 Token;任何真实 fixture 缺失均 fail-closed) |
phase4-overseas-pda-contract.test.mjs、phase4-overseas-pda-operations-contract.test.mjs、pda-picker-fixture-contract.test.mjs(长场景名保留完整运行标识,避免造数账号跨轮重复) |
| 海外 PDA 退货入库、计费批次与退货合箱 | phase4-overseas-return-receipt.mjs(自包含创建本轮客户退货预报和绑定仓临时 PDA 操作员;覆盖退货单号/SKU 查询、正常空结果、分批签收、核平、超收、幂等、退货箱/SKU 库存、每次成功签收唯一仓储计费批次及合箱;finally 停用操作员) |
phase4-overseas-return-receipt-contract.test.mjs;ReturnReceiptServiceTest 精确核对计费批次客户、仓库、签收单、起算时间和 PENDING_PRICING 初态 |
| 尾程单公网控制与人工计划 | phase4-tail-order-controls.mjs(PDA 收货前对本轮柜执行整柜接柜仓变更/恢复与幂等冲突、单/批 FBA 目的仓变更、单/批合托标记并取消、CSV 导出、订单费用回查、单票暂扣/解除、八个人工节点和逐票人工计划) |
phase4-tail-order-controls-contract.test.mjs;只复用现有公共接柜仓/FBA 主档,不新增仓库、托盘或库位;为目标柜全部入仓码创建 MANUAL 计划后交给 PDA 继续消费,不借历史订单 |
| 海外入仓扩展、客户服务与排车 | phase4-overseas-inbound-operations.mjs、phase4-overseas-client-services.mjs、phase4-overseas-dispatch.mjs |
对应同名 *-contract.test.mjs;只消费本轮前置资源,缺失时 fail-closed。入仓扩展模块选择本轮未完成 PDA 收货的第二个 FBA 柜,按真实来源版本独立核实箱数,验证核实变化不覆盖原订单;通过 DELETE 取消及原版本重放核对唯一取消历史和释放数量,再建立有效批次并执行拆分、合并、数量守恒、陈旧版本拒绝、同键重放与异载荷拒绝,保留稳定批次及替代链。该模块同时对已收货首柜执行库存冻结、释放与正反盘点,不能视为只读或仅预约写入。最小运行由 Admin 总入口选择 --modules phase4-overseas-inbound-operations --wait-split-count 1 --wait-split-package-count 4,使用明确 TEST 环境文件、既有 Admin/PDA 配置及依赖展开;还需预约列表/编辑/取消、入仓预约和尾程订单读取权限。任何请求失败或来源、数量证明失败即停止后续步骤,保留本轮有效、取消和替代批次,不自动删除或重跑;结果写入总入口报告的 phase4OverseasInboundAdmin,取消行为须有对应本轮授权 |
| 海外仓业务跨区事件与安全门禁 | phase4-cross-region-events.mjs(统一平台会话、匿名拒绝、canonical 权限 403、国内装柜完成到 Lastleg 建单、海外柜完成到 Firstleg 回写、轮询与诊断证据;重复 GET 仅验证读取稳定,缺真实投递重放证据仍阻断;缺本轮 marker 前置时阻断) |
phase4-cross-region-events-contract.test.mjs |
| 国内离仓至海外 PDA 可见人工验收节点 | phase3-customs.mjs(国内报关资料与整柜照片)、phase3-outbound-dispatch.mjs(柜级离仓)、phase3-container-documents.mjs(离仓后目的港清关、DO;PU 使用柜级数字码)、phase3-carrier-schedule-queries.mjs、phase4-carrier-pickup-ready.mjs、phase4-overseas-pda.mjs(同柜候选) |
phase3-phase4-departure-pickup-chain-contract.test.mjs |
| 国内出仓聚合、门禁、待装柜与仓库权限 | phase3-outbound-aggregate.mjs、phase3-dispatch-gate.mjs、phase3-waiting-for-loading.mjs、phase3-warehouse-rbac.mjs |
由容器回归、生产者链和出仓相关合同覆盖;只消费本轮主链资源 |
| 人工状态矩阵 | manual-state-matrix.mjs |
manual-state-matrix-contract.test.mjs;依赖本轮海外签收,保留有有效余量根订单的 DELIVERED;完成订单样本经 phase5-root-fulfillment.mjs 两票真实签收和只读完成 Outbox 核验产生,不调用已移除的人工 /complete,并继续验证装柜完成、报关和订舱状态组合 |
| 海外业务 HTTP:采购创建/备注/审核边界,独立卡车原单履约完成,保留散板原单供默认主链接车 | phase4-overseas-business.mjs |
phase4-overseas-business-contract.test.mjs |
| 海外主数据 HTTP 生命周期 | phase4-overseas-master-data.mjs;车辆新建、详情、修改及列表均核对实际托位/载重/容积,修改使用不同容量值,CSV 同时核对修改后的值与业务车牌号;缺失或猜测容量形成阻断,finally 停用本轮资源。内部助手 vehicle-care.mjs 验证保养/加油创建重放、版本冲突、历史、单位、照片重放和字节下载,并逐类验证维修/故障/救援/异常项目地点回显、处理人、完成处理及费用/付款独立;另建本轮车辆验证跨车读取/修改/照片拒绝,结束停用隔离车辆并保留记录。报告在 phase4OverseasMasterData.vehicle.care,错误地以处理完成推定付款必须阻断;无SQL或旧数据修复,不作独立入口 |
phase4-overseas-master-data-contract.test.mjs |
| 目的港码头拖车与船节点终态 | phase5-terminal-drayage.mjs(PDA 卸柜前复用 ACTIVE + TRUCKING + truckingScope=OVERSEAS 主数据完成选车队、预约和实际提柜,卸柜后完成实际还柜,并覆盖四命令幂等/历史)、phase4-carrier-nodes.mjs(PDA 前补录至 PICKUP_READY;拖车完成后只读核验 PICKED_UP/EMPTY_RETURNED 和停止语义) |
phase5-terminal-drayage-contract.test.mjs、phase4-carrier-nodes-contract.test.mjs;不再由船节点脚本直接伪造提柜和还柜 |
| 海外排车、出库、派送、异常与回访 HTTP 生命周期 | phase5-overseas-fulfillment.mjs(本轮已收货托盘和排车,PDA 拣货、资料齐全后装车自动发车、只读单据守恒、签收与回推;固定 PDA 账号退出会话) |
phase5-overseas-fulfillment-contract.test.mjs |
| 初始化基线(仅离线) | — | initialization-baseline-contract.test.mjs |
phase4-overseas-inbound-operations.mjs 的内部 prepareAppointmentFixture 可由已核对的本轮最小正式 API 流程复用:必须传入真实转换所得的入仓计划和同仓明细,至少两箱才执行拆分合并;两箱验证 2 → 1 + 1 → 2,不补造货量。完整 Admin 模块仍按上表四箱参数及统一依赖运行,不能为缩减造数而伪造生产者矩阵或跳过前置事实。
表中的 *-fixture.mjs 是被业务模块复用的测试数据前置,不是新增的独立全量入口。执行 HTTP 时仍从 ../admin-test-env-acceptance.mjs 进入;*contract.test.mjs 只做离线脚本结构和数据归属回归。
海外仓业务 HTTP 验收使用 Auth 统一会话,仅通过 --gateway 访问 TEST Gateway;拒绝旧 --overseas-gateway、ADMIN_OVERSEAS_GATEWAY 和非 test 环境参数。平台、客户与 PDA 各用自己的账号访问令牌,权限、客户隔离及仓绑定仍须验证。海外仓、海外业务和海外主数据模块只对带本轮 marker 的资源执行已确认的新增、编辑、状态与导出,并在结束前按契约停用;PDA 收货模块使用本轮临时 OVERSEAS_WAREHOUSE_PDA_OPERATOR 访问令牌,只调用 /api/pda/v1/last-leg/receiving-containers/** 柜号收货入口,不接受 customerId、planNo 或分配 ID。收货成功后由相邻的 phase4-overseas-pda-operations 消费仅存在于进程内存、不会进入 JSON 报告的 Token 与库存事实,执行盘点、公共位核对、托盘操作和换标;库内操作只复用收货计划产生的已有空托盘及当前仓 VIRTUAL + ACTIVE 公共位,不调用托盘或库位新增接口。新模块无论成功失败都在 finally 停用两个 picker 并清空临时凭据。两模块均不调用出库、退货出库、派送或内部接口;任何真实柜、箱唛、托盘、库存或换标前置缺失都必须形成 deployment blocker,不能按空场景通过;船节点禁止手工创建任务。
节点全链定向入口为 --modules phase4-overseas-pda。依赖展开固定先为本轮 LOADED 柜次完成国内 CUSTOMS_DECLARATION 与 PDA 装柜证据,再确认国内出仓;离仓后才维护 DESTINATION_CLEARANCE、DELIVERY_ORDER 两类目的港文件,PU 使用柜级数字码而不是文件,随后核对自动创建的 OUTBOUND_CONFIRM 船节点任务、人工补录至实际 PICKUP_READY,最后验证海外 PDA 候选可见。资料模块只写本轮 marker 柜次,覆盖上传/完成重放、同键异载荷 A0409、冲突后零漂移和聚合回读;任一 fixture 或 Trace 缺失均为 deployment blocker。
尾程单公网控制与目的港码头拖车定向入口为 --modules phase4-carrier-nodes。依赖会在海外 PDA 前插入 phase4-tail-order-controls,先对本轮柜验证接柜仓变更/恢复、目的仓变更、合托标记、下载中心 XLSX 导出、订单费用、暂扣阻断、解除和八个人工节点,再通过柜级预览与确认自动生成逐票计划和实体托盘;PDA 必须消费这些计划托盘,不得临时另建脱离计划的托盘。货柜到达 PICKUP_READY 后先复用公共 ACTIVE + TRUCKING + truckingScope=OVERSEAS 供应商完成选车队、预约和实际提柜;PDA 卸柜完成后,有界等待跨区卸柜事件回写国内聚合为 UNLOADED,再确认实际还柜。最后的船节点模块仅回读两次业务动作同步生成的 PICKED_UP/EMPTY_RETURNED,不得直接补录这两个节点。
node --env-file="$env:USERPROFILE\.codex\chongchong-global-test-acceptance.env" scripts/admin-test-env-acceptance.mjs --modules phase4-carrier-nodes
海外 PDA 收货统一扫描冻结箱码:FBA 与 OVERSEAS 都必须由 POST /api/pda/v1/last-leg/receiving-containers/current/cartons/resolve 返回 HTTP 200、业务码 200 和当前柜唯一 inboundCode,不展示、扫描或提交 SKU。仅实收阶段分流:FBA 使用不含 skuCode 的 /current/receipts/bulk,逐箱接口必须精确返回 A0409 FBA destination must use bulk count;OVERSEAS 使用 /current/receipts/carton,bulk 必须精确返回 A0409 OVERSEAS destination must use carton-by-carton scanning; bulk count is forbidden。实机旧行为反证为 requestId 5e925a3d-8184-41e1-b0d2-f4e1aae86639、traceId 62fdf603b65fd7f43ec452bb8a6ca185。跨区广播消费只保留观察证据,不再单独形成 deployment blocker;实际 PICKUP_READY 候选门禁仍必须通过。
FBA 无 ll_inbound_plan_carton manifest 时,服务端只取完整扫描值的第一个 # 前缀,并在当前锁定柜中精确匹配唯一 inboundCode;不校验 SKU、# 后缀或箱序号,也不能要求前端拆分或自行决定归属。无 #、空前缀、未命中、跨柜或同柜多匹配必须拒绝。OVERSEAS 仍按完整箱码精确匹配真实 manifest 行。HTTP 合同使用任意 FBA 后缀验证前缀解析,覆盖上述负向与 OVERSEAS 缺 manifest,并在正负向 resolve 后回查 current 的状态、版本与收货数量零漂移。2026-08-26 最新已部署实机尚返回 A0404 Carton mark was not found,requestId a716e2c2-dc10-4d07-8014-7438afb63090、traceId 6ab8fcfcd812056ad6570d3b1652157b;该证据保留为后端 FBA 入仓码前缀解析落盘及重新部署后的回归反证,不据此放宽成功合同。
node scripts/admin-test-env-acceptance.mjs --gateway <test-gateway> --modules phase4-overseas-warehouse,phase4-overseas-pda,phase4-overseas-pda-operations,phase4-cross-region-events,phase4-overseas-business,phase4-overseas-master-data,phase4-carrier-nodes,phase4-overseas-wallet-and-pallet-cost
只有已登记在 ../admin-test-env-acceptance.mjs 的 CONFIGURED_MODULES 中的名称才能用于 --modules;目录中存在同名 .mjs 不代表总入口已注册。新增或改名 HTTP 模块时必须同步总入口、依赖展开、离线入口合同和本表;尚未注册的实验脚本不得写成可执行验收入口。
海外仓出库与派送履约链定向入口为 --modules phase5-overseas-fulfillment,只消费本轮国内装柜、海外接柜与 PDA 实收形成的排车和库存。正式资源及两级审核就绪后,由绑定同仓的 PDA 逐来源拣货,补齐五框装车资料,再确认装车;服务端自动生成客户出库与派送并发车。五期、F40、运力池和保留样本专项统一使用 readAutomaticDispatchDelivery、verifyAutomaticDeparture 只读核对单据、双端阶段/版本及客户数量,禁止重复调用手工转派送或发车。装车重放由共享助手核验,之后独立回查库存和 SHIP 不重复扣减,再逐单签收并验证头程回推。固定账号只退出本轮会话;非固定专项账号按原生命周期清理。前置不足明确失败,不能借历史单据冒充本轮自动发车。
该模块同时核对拣货、发车和重放期间库存及 SHIP 流水只扣一次;同一派送退回异常经接收、证据上传、处理完成后必须生成真实恢复库存及 RETURN_STOCK_IN 流水,原键重放不重复入账。PROCESSING 续跑必须保留原异常、原目标托盘、原证据和幂等键,缺失即阻断,不另建异常替代。客户签收文件验证下载真实字节,并通过本轮独立 SIGNED-B 客户验证隔离,凭据不入报告。分片完成门禁只接受同一订单的多个有效入仓分片;不同订单、多目的仓或已经完成的分片不能代替此条件,缺少生产者时仍报告覆盖阻断。
node --env-file="$env:USERPROFILE\.codex\chongchong-global-dev-acceptance.env" scripts/admin-test-env-acceptance.mjs --modules phase5-overseas-fulfillment
WAIT_SPLIT 到 LOADED 冻结链
默认 Admin 全量入口已注册并按同一 context.marker 串行执行货柜主链。冻结时序为:
WAIT_SPLIT -> SIMULATION/ACTIVE 内部模拟柜 -> 智能排货 -> 无集装箱号 push-preload -> exact replay/冲突零漂移 -> 订舱 DRAFT 完整登记 containerRequirements -> RELEASED -> 港口取得真实 containerNo -> 按 oceanBookingId + requirementId + containerNo + expectedVersion 原地关联并创建 allocation -> 计划级原子确认 -> 唯一 PDA task -> claim 后 LOADING -> 原子批量拣货 -> AWAITING_REVIEW -> 五类证据 -> LOADING 阶段增量入库单/旧 inventory token A0409/刷新后续拣 -> PDA task complete 先完成 task/plan/inbound -> LOADED -> 提交后独立尝试同步唯一同柜有效拖车。
其中,无号 push 只冻结装柜计划、建立 bridge 并使预装可见,不得创建 PDA task;订舱放舱也不创建真实货柜或 allocation。港口取得真实柜号后,四字段 link 直接补全原模拟柜并创建 allocation,原 containerBookingId/cabinetNo/loadingPlan/items 不变;未关联、订舱未 RELEASED 或整份计划未确认时,PDA 查询必须返回业务码 A0404。唯一确认入口为 POST /api/platform/v1/first-leg/loading-plans/{loadingPlanId}/confirm,请求体只含当前计划 expectedVersion 并携带 Idempotency-Key;成功必须返回 confirmationStatus=CONFIRMED、readiness.readyForPda=true 和唯一 readiness.pdaTaskId。验收脚本禁止调用旧入库单级 /preload/confirming、/preload/confirm。
计划在 EDITING/LOADING 可通过正式 assignments/PATCH/DELETE 端点增量;计划、任务和明细版本必须递增,PDA 四元身份不变,旧 inventorySnapshotToken 必须返回 A0409 库存已变化,请刷新后重试。完整国内货柜履约装柜 fixture 与批量待分柜入口都只随机复用初始化的 TP-001/YW-TP-002,任一缺失即报告部署阻断,不调用托盘新增接口;当普通位不足时由 Warehouse 自然分配到 A0,随后仅使用公开 A0 换绑接口制造库存版本变化,不直连数据库、创建库位或调用内部 Warehouse 接口。模拟柜的 channelGroupCode 统一由 smart-loading-channel-group.mjs 根据订单渠道映射。主国内货柜履约链强制完成该专项,海外仓业务生产矩阵的附加柜只负责跨区生产,不重复要求 A0;附加柜若自然落入 A0 仍执行同一验证。已拣项不可删或减量,未拣项可删;增量会把全拣的 AWAITING_REVIEW 撤回为 IN_PROGRESS,刷新 task detail 与 inventory 后续拣才可再次等待最终确认。最终唯一完成入口仍为 POST /api/platform/v1/first-leg/pda-loading/tasks/{taskId}/complete:保留同柜 RELEASED 订舱、bridge 与五类 ACTIVE 证据门禁;拖车状态和数量不是前置门禁。主事务提交后,零条有效拖车直接跳过,恰有一条时在独立事务尝试推进 COMPLETED,多条或并发冲突只记录拖车同步失败,不回滚已完成的 task/plan/inbound。PDA 结算可能先递增来源入库单版本或创建实装分片,完成动作必须在结算后重新锁定实际完成行并使用当前版本;HTTP finalizer 会回查 full/partial 履约分片,失败时保存 requestId/traceId 并断言 task/plan/inbound/operation 零漂移。后续模块必须复用 phase3Loading 发布的本轮 taskId + inboundId + loadingPlanId + containerBookingId,不得回退历史资源。
动态增量还会读取计划明细中的服务端 totalPackageCount/remainingPackageCount,断言
remaining = total - assigned;随后尝试把箱数调整为权威总数加一,必须得到 A0400,并回查
plan/item 版本、分配箱数及总数投影全部零漂移。脚本不从当前已分配数量反推订单总箱数。
phase3-loading 复用本轮双托一件代发 fixture,逐托核对 task items 与 inventory units 的 unitType=SEALED_PALLET/palletId/palletNo/indivisible,两托统一通过同一次 /batch 提交各自的 PICK_PALLET + palletNo。合法整托行混入非法普通行必须整批零写;普通 PICK/PARTIAL/SKIP 不得绕过整托限制。同参同键重放不得增加版本或审计,同键更换托盘码必须冲突。以上接入现有全量链,不建立独立 HTTP 入口。
phase3-pda-convergence 同时回查 /tasks/pending 与稳定 task detail:两者的 workflowStatus、itemCount、pendingItemCount 必须来自同一任务明细事实。全拣任务必须在两处均为 AWAITING_REVIEW,可执行证据 GET,但派生 actions=[],不得重复发送 batch;操作历史必须恰有一次有效 BATCH。若 pending 仍按 assignment 返回 IN_PROGRESS,该轮以真实 HTTP 失败阻断,不由脚本或前端改写状态。
部署后需要定向验证该完整链时,模块顺序固定为:
node scripts/admin-test-env-acceptance.mjs --modules merchant-qualification-fixture,orders,inbound-measurement,phase3-container-loading,phase3-loading,phase3-container-overview,phase3-pda-convergence,phase3-evidence-gate,phase3-customs,phase3-loading-finalize
整票库位块专项可在只跑 orders,inbound-measurement 时追加
--verify-pallet-location-guide true。它在测量仍可编辑、正式提交前核对
palletLocationGuide 计数、每槽 blockId/slotNo/reservationId/locationCode/slotStatus、
称重结果按 weightResultId 显式绑定槽位;每确认一张称重图片都会回查一次,后续扩容只能追加槽位,
既有 blockId/slotNo/reservationId/locationId/sharedOverflow 不得漂移。脚本还会真实验证删除图片后原 reservation/location
保留且转为 RESERVED_EMPTY,再上传替代图片并确认复用原槽后继续提交与审核。脚本只观测自然出现的共享 A0;
不会为制造普通位不足批量停用库位。
只验证真实集装箱号晚补门禁时,使用正式可选参数 LATE_CONTAINER_GATE_ONLY=1 并仍从总入口执行 phase3-loading。该模式使用本轮 marker 独立造数,固定验证无号 push、订舱关联、整份预装确认、PDA claim/batch、无号 complete A0409、LOADING 阶段首次补号和补号后 complete 受理;随后允许后台命令停在 CABINET_EVIDENCE/A0409,以证明柜号门禁已经消失且下一门禁来自未上传的五类柜级证据。该模式不继续完整报关或 LOADED 链,也不得与完整链同时解释为同一终态验收。
$env:LATE_CONTAINER_GATE_ONLY='1'
node --env-file="$env:USERPROFILE\.codex\chongchong-global-test-acceptance.env" scripts/admin-test-env-acceptance.mjs --modules phase3-loading
Remove-Item Env:LATE_CONTAINER_GATE_ONLY
该命令会写测试环境,必须另行获得当前对话授权。离线入口合同为 ../full-regression-entry-contract.test.mjs,生产者与状态合同为 phase3-producer-chain-contract.test.mjs。
消息中心模块
notifications.mjs 覆盖平台消息模板的查询、新增、编辑、版本冲突、激活与最终停用,以及未来定时消息任务的创建、幂等重放、列表查询、取消和非法重试。模块只创建未来定时任务并在结束前取消,不实际投递验收消息。定向 HTTP 验收需要当前对话明确授权:
node scripts/admin-test-env-acceptance.mjs --modules notifications
离线静态合同可安全执行:
node --test scripts/admin-test-env-modules/notifications-contract.test.mjs
供应商模块
suppliers.mjs 覆盖平台公共供应商的列表、统计、新增、详情、编辑、启停及主要错误边界。执行:
node scripts/admin-test-env-acceptance.mjs --modules suppliers
该命令会调用测试环境写 API,只有当前对话明确授权后才允许执行。验收供应商最终停用但不删除;静态合同可安全离线运行:
node --test scripts/admin-test-env-modules/suppliers-contract.test.mjs
Finance 全链前置
finance-full-fixtures 会通过正式供应商 API 创建本轮隔离的 ACTIVE 供应商,并按费用项目类别校验后再生成 PAYABLE;不会使用历史供应商 ID。只请求 finance-full-fixtures,finance-reconciliation-full,finance-settlement-full,finance-downloads 时,总入口会自动补齐 merchant-qualification-fixture -> orders -> inbound-measurement -> phase3-container-loading,确保 Finance 能消费本轮真实已完成柜次,并在结算链完成后验证八类 XLSX 下载任务。若这些前置仍未产出同 marker 的完成柜次,Finance 会 fail-closed,不能把 finance-only 前置不足计为 Finance 业务成功。单独请求 finance-downloads 只执行最小部署能力探测,不借历史 Finance 数据。
国内整柜与客户运营统计
domestic-container.mjs:整柜入库、出库、库存列表和详情,并覆盖字段边界、组合筛选与分页汇总、柜号标准化、同柜追加入库、货名冲突、完成出库强制库存版本、并发版本竞争和幂等重放;静态契约为domestic-container-contract.test.mjs。customer-operating-statistics.mjs:客户详情在途柜量/TEU 运营指标,复用platform:firstleg:container:list权限。- 两者由总入口
admin-test-env-acceptance.mjs的默认模块列表编排;接口验收会写入测试数据,静态合同可离线执行。
node --test scripts/admin-test-env-modules/domestic-container-contract.test.mjs
货柜履约列表字段合同
fulfillment-list-field-contract.mjs 统一校验货柜、预装/装柜清单、订舱、船期、拖车、报关协同和国内出仓正式响应中的稳定 ID、非空展示字段、非负数量/重量/体积及 ISO 时间格式。各生产模块在已取得的本轮 marker 响应上执行断言,不额外借用历史数据;未冻结的原型字段只登记在 docs/国内货柜履约/货柜履约原型字段验收矩阵-2026-08-17.md 的 UNKNOWN,不得由 fixture 伪造。
离线合同:
node --test scripts/admin-test-env-modules/fulfillment-prototype-field-matrix-contract.test.mjs
清库后的商户下单前置
merchant-qualification-fixture.mjs 是默认全量验收的首个模块。它通过平台正式接口创建本轮隔离客户,经 File 上传真实营业执照和法人身份证文件,再走 IAM 提交审核和平台审核通过;审核完成后把本轮动态加载模块使用的商户账号切换到该客户。
依赖商户下单资格的模块不要单独运行。定向排查时至少保留前置模块,例如:
node scripts/admin-test-env-acceptance.mjs --modules merchant-qualification-fixture,orders
该前置不会向初始化 SQL 写入伪造资质,也不会绕过订单服务的企业资格校验。静态契约可离线执行:
node --test scripts/admin-test-env-modules/merchant-qualification-fixture-contract.test.mjs
国内拖车自动完成与应付回归由 phase3-outbound-dispatch.mjs 在真实离仓后只读核验:订舱全部柜数、逐柜离仓、唯一 AUTO_COMPLETE、按拖车编号追溯柜次应付、金额守恒及 Finance 来源入池(有界等待 Outbox)。该模块的原有确认/撤销边界操作仍会写目标环境,执行须获得对应环境授权。manual-state-ocean-trucking.mjs 只构造可人工操作的状态,不伪造已完成拖车;自动终态由上述离仓链路覆盖。
event-bridge-pending-recovery.mjs 为纯离线证据校验器,文件名保留为索引入口;无事件桥调用或历史事件常量。合同覆盖 Compose DNS、三服务内部凭据版本一致、有限重试/DEAD、原事件摘要、ACK 丢失后 DUPLICATE 与单次业务效果。合成合同通过不代表环境故障演练通过;phase4-cross-region-events 保留真实重放证据阻断项。环境验收需本轮 marker 事件逐次投递记录、Inbox 与业务计数;仅使用受保护 event-outbox-operations.mjs 对 DEAD 原事件执行另行授权重试,不重放 SENT,不改表或伪造新事件。
下载中心导出共用内部助手:download-center.mjs 的 verifyDownloadCenterExport 由尾程订单、海外库存及主数据模块调用,创建 File XLSX 任务、等待终态、下载并核对字段及本轮业务数据;环境和写入授权沿所属模块。离线 download-center-fixture.mjs 仅生成合同测试使用的 XLSX 字节;download-center-contract.test.mjs 校验失败不继续下载及文件内容验证,不访问环境。
新增模块的授权后定向运行清单
以下模块已注册 CONFIGURED_MODULES,离线合同通过;真实 HTTP 仍需当前轮测试环境授权和对应业务前置。默认全量已包含它们,定向排查时按模块名运行,依赖仍由总入口展开。
| 模块 | 定向命令 | 关键前置 | 报告校验点 |
|---|---|---|---|
appointment-work |
--modules phase4-carrier-pickup-ready,appointment-work |
本轮柜、船节点或排车产生工作事项 | 日历/汇总/分页/详情结构;不存在事项命令拒绝 |
pda-releases |
--modules pda-releases |
平台 platform:pda-release:list |
双端发布列表结构;空上传与不存在版本拒绝 |
audit |
--modules audit |
平台 platform:audit:list,且本轮已有业务写入 |
分页、列表不返回快照、详情与不存在日志拒绝 |
sailing-calendar |
--modules sailing-calendar |
当月已有订舱或模板生成的船期 | 月历、渠道、模板、异常分配;无船期时记录非阻断缺口 |
self-operated-analytics |
--modules self-operated-analytics |
采集账号与仓库上下文 | 空参不可用时记录非阻断缺口,不虚构指标 |
fleet-management |
--modules phase4-overseas-master-data,fleet-management |
本轮车次或排车样本 | 车次、出车记录、报价、拼车需求只读;无车次时记录缺口 |
Client 全量为单文件,新增的客户账单、海外仓自助、跨境采购/卡车/散板、入库与派送订单、船期价格和报关待办随默认全量执行,不能按模块定向。
上述模块与 Client 新增端点已按当前 Controller 静态核对存在,包括 /api/merchant/v1/customs/pending-summary、/orders/{orderId}、/first-leg/pricing/channels、/api/merchant/v1/warehouses、/inbound-plans、/delivery-orders、/api/platform/v1/files/pda-releases 和 fleet/operations|quotes|capacity-offers;真实响应结构仍以 HTTP 验收为准。所需平台权限(platform:appointment:list、platform:pda-release:list、platform:audit:list、platform:firstleg:sailing-calendar:list、platform:self-operated-analytics:list、platform:fleet:*:list)已在 IAM 与服务权限种子中定义并授予 PLATFORM_ADMIN,HTTP 403 不应被误判为脚本失败。
已知待验收缺口(不计作已覆盖通过):
phase4-overseas-dispatch:主链已内置FBA-SECOND(destinationIndex=1)强制第二 FBA 目的地;真实 HTTP 仍需 PDA 作业员凭据才能展开该变体。未验证前按notRun阻断并标记dispatchStatus=NOT_RUN,连带phase5-overseas-fulfillment。appointment-work写命令(SAVE_FOLLOWUP、CONFIRM_ROUTE、SAVE_REQUIREMENT)需要本轮可编辑工作项与操作人 ID;真实 HTTP 依赖 PDA 链产生工作事项。self-operated-analytics数据采集任务与重试需要领星账号和真实采集批次;2026-10-20 空参 HTTP 返回B0001,已按非阻断缺口记录。fleet-management只读(车次、出车记录、车队报价、拼车需求)已通过真实 HTTP;车次写命令仍需要本轮排车、车辆与司机资源。- Client 海外仓只读列表与退货预报写链路已通过真实 HTTP(2026-10-20 Client 全量 406 项通过、2 项跳过)。P5 换标创建仍失败:普通入仓候选
cartonMark服务端返回 null,而创建接口强制要求cartonMark等于来源入仓单箱号(cartonBelongsToInbound),候选未提供来源箱号,属后端契约缺口;需补候选箱号或在普通入仓场景取消该校验后再验收。仓储转运、货物废弃与退货换标创建同样需要真实库存与箱号前置。 pda-releases真实 APK/WGT 上传、发布和停发需人工准备有效安装包。- Client 入库计划与派送单详情在新建客户无数据时跳过,需先由平台海外链产出单据后定向复核。
本地离线合同运行边界
- 必须在
baiyue-firstleg根运行批量合同:auth-login-payload等合同按scripts/...相对路径读取,从工作区根运行会产生ENOENT假失败。 appointment-work-test-env、agents-index-registry、ci-maven-resource、deploy-built-service-rollback会spawn子进程;受限沙箱下EPERM属于运行环境限制,不是合同失败。database-schema-diff、prod-release-*、fleet-*-test-env等需要数据库或测试环境的合同不进入本地批量扫描;按各自 README 单独授权执行。- 合同数量与失败清单以同一源码快照的实际报告为准,不在模块索引维护固定失败数量;当前已验/未验范围统一查外层部署契约,历史报告不覆盖最新源码。
采购费用不再使用通用费用草稿、审核和发布链。phase4-overseas-finance-cross-region.mjs 对采购改为验证通用创建被拒绝,其他四类费用继续验证既有投递链;采购成功来源由完整样品流程核对实扣与来源关联。