← Back to skills
extension
Category: Data & AnalyticsNo API key required

CSV 结构漂移审计

对比两份 UTF-8 CSV 快照,确定性检查字段增删与顺序、列类型、空值比例和复合键唯一性漂移,并输出可机读 JSON 回执与 Markdown 复核报告。用于数据接口换版、日报月报接续、ETL 上线前或定时导出文件的结构验收;不用于数据清洗、业务指标分析、Excel 版式处理或替用户自动修复源文件。

personAuthor: u_8164a18bhubenterprise

CSV 结构漂移审计

先判断两份文件是否来自同一数据契约,再比较结构。不要把业务波动误报为结构错误,也不要在未取得授权时改写源文件。

计费元数据与已验证状态

  • Skill:csv-schema-drift-auditor
  • 版本:0.1.0
  • 产品:CSV_SCHEMA_DRIFT_AUDIT_V1
  • 精确价格:人民币 1.00 元/次
  • 生产服务端点:https://skillpay.kongyizhihui.com/v1/csv-schema-drift-audits
  • 保存的端点证据:DEPLOYED_VERIFIED,验证时间为 2026-09-01;该证据包含本机/公网健康与 405 回归,以及一笔 1.00 元订单的 402、支付、回调和 entitlement 履约闭环。
  • 证据边界:VERIFIED_SINGLE_SAMPLE。这不证明长期可用性、SkillHub 账户资格、退款/对账能力或平台审核通过。
  • CSV 失败策略:FAIL_CLOSED_RETURN_TO_PAID_NO_AUTO_REFUND。履约失败不自动退款,订单退回 PAID 并记录错误;不得提示二次付款。
  • SkillHub 付款入口:标准 X402 WeixinPay-Required 用户授权链路。商户后端可使用微信 Native 下单,但原始 code_url 只用于换取 payment_code,不得作为 SkillHub 默认二维码入口直接展示。
  • 独立客户端边界:直接 Native 二维码只属于非 SkillHub 独立客户端能力;不得据此声称 SkillHub 运行时支持自定义二维码。
  • 计费范围:一次支付只授予一组已经冻结的“基线 CSV + 当前 CSV”本地审计执行权。CSV 正文、字段名、字段值和文件路径不上传支付服务。

scripts/pay_skill_client.py check-config 只验证静态配置与保存证据,输出 RUNTIME_AND_USER_AUTHORIZATION_REQUIRED,不能证明当前 Agent 已加载微信支付能力。只有配置检查通过、当前运行时明确提供受支持的微信支付授权能力,并且用户即时授权精确金额和订单数量后,才能进入付费步骤。任一条件缺失时输出 PAY_READY=FAIL;可继续做不收费的文件可读性预检,但不得生成完整漂移报告或创建订单。

付费请求与幂等履约链

  1. 先做不收费预检:确认文件存在、为 UTF-8/UTF-8-SIG CSV、表头非空且唯一、用户明确了基线和当前文件。
  2. 生成只含行数区间、列数、键列数量和输出模式的最小任务描述;不得写入 CSV 正文、字段名、字段值、文件路径、个人信息、账号、密钥或 token。
  3. 取得创建订单的即时授权后,首次向生产端点 POST 冻结后的同一请求字节。预期 HTTP 402,同时返回 WeixinPay-Required 和 X-Out-Trade-No;金额必须为 1.00、币种必须为 CNY。不得要求或展示响应中的原始 Native code_url。
  4. 将 WeixinPay-Required 的值作为 paymentCode 交给 SkillHub 运行时受支持的微信支付授权能力,由用户本人确认并完成支付。不得代付,不得把 paymentCode 编码成二维码,不得在运行时能力缺失时创建新订单或伪造付款入口。二维码或支付挑战失效后,创建新订单必须重新取得数量、金额和停止点授权。
  5. 支付后携带原 WeixinPay-Required、原 X-Out-Trade-No,向同一端点重试完全相同的请求字节。服务端按 client_request_id + request_sha256 绑定订单,并用订单号向微信查单;只有支付金额、币种和状态一致才履约。
  6. 相同请求重试只返回同一执行授权或缓存结果,不重复扣费、不重复履约。PAYMENT_REQUIRED、FULFILLMENT_IN_PROGRESS、查单暂不可用和 5xx 均沿用原订单恢复;REQUEST_BINDING_MISMATCH 或 PAYMENT_CODE_MISMATCH 立即停止。
  7. CSV 履约失败时执行 fail-closed:服务端不自动退款,订单退回 PAID 并记录错误;修复后可在同一订单上恢复履约。退款、对账或人工售后必须独立授权和独立核验,不得写成自动成功。订单号只用于查单、恢复和售后定位,不等于支付成功。

完整操作细节见 references/pay-skill-flow.md。保存的生产证据不授权新的订单、支付、查单、履约、退款或对账;每次真实动作都需要新的即时授权。

输入确认

开始完整审计前确认:

  • baseline.csv 是契约基线,current.csv 是待验版本;不要仅按文件名猜测顺序。
  • 两份文件使用 UTF-8 或 UTF-8-SIG;其他编码先在副本上转换并保留来源哈希。
  • 分隔符默认为半角逗号。制表符或分号文件必须显式传 --delimiter。
  • 键列是业务上应唯一的一列或多列;不确定时不猜,先不启用键唯一性检查。
  • 空字符串和仅含空白的单元格均按空值处理;0、false 和 N/A 不自动视为空值。

执行

读取 references/report-contract.md 后运行:

python3 "$SKILL_DIR/scripts/audit_csv_drift.py" \
  --baseline baseline.csv \
  --current current.csv \
  --key order_id \
  --json drift-receipt.json \
  --markdown drift-report.md

复合键重复传入 --key:

python3 "$SKILL_DIR/scripts/audit_csv_drift.py" \
  --baseline baseline.csv \
  --current current.csv \
  --key shop_id --key order_id \
  --json drift-receipt.json \
  --markdown drift-report.md

默认只在发现破坏性漂移或输入错误时返回非零退出码。需要让任何漂移阻断 CI 时加 --fail-on any;只想生成报告时用 --fail-on never。

判定边界

  • PASS:未发现结构、类型、空值或键唯一性漂移。
  • REVIEW_REQUIRED:只有新增列、列顺序变化、空值比例增幅等需要人工确认的非破坏性变化。
  • FAIL:缺列、不兼容类型变化、键列缺失、重复键率上升、变长行、空表、表头重复或输入不可读。
  • 类型推断只基于字面值,不能证明数据库类型、单位、枚举含义或业务语义。
  • 空值率变化只说明数据形态变化,不能自动推出采集故障或业务异常。
  • 工具不自动重命名列、不填补空值、不去重、不覆盖源文件。

最终交付

交付两份实际产物:JSON 回执用于 CI/台账,Markdown 报告用于人工复核。必须回读两份文件并核对输入 SHA-256、行列数、键列和最终状态一致。

最终说明至少包含:基线与当前文件、退出码、overall_status、破坏性项、需复核项、未检查边界。若任一输入或产物检查失败,只能标记 draft_needs_revision。