0.4.0 工商全景验收手册

September 1, 2026 · View on GitHub

1. 目的与边界

scripts/phase2-acceptance.mjs 是 0.4.0 源码仓库的本地验收 Runner(不进 npm 运行时包)。 它只读取从真实 DSH/QCC 工具轨迹整理出的 JSON 证据,不主动联网、不发起付费调用、不读取 OAuth token。

Runner 验证:

  • 不少于 20 条企业记录;
  • 每条的主体消歧已完成,不允许多候选或未解析;
  • resolveEntityregistration 必须是含非空原值对照的 resolved,不能以 no_data 充数;
  • 每条不少于 15 个当前工商维度已交付;
  • 维度使用的 sourceTool 必须与 lib/qcc-phase2.js 中的已验证契约一致;
  • resolved 字段的 valuesourceValue 必须深度全等,防止金额、比例、计数或股权链被二次计算;
  • 启用历史域门时,必须标记企业认证账号,且每条 4 个历史工商维度都已交付。

Runner 是「证据结构和结果契约」的自动检查,不是 QCC 调用器。真实性还需与同次 DSH session/tool transcript 的时间和调用记录对应;Mock 或人工编造的数据不能作为发布证据。

sourceTool 同时接受规范名 mcp__qcc-company__* / mcp__qcc-history__*qcc-dsh-mcp-oauth@0.1.7 实测 legacy 名 mcp__company__* / mcp__history__*; 除此之外的别名仍会以 SOURCE_TOOL_MISMATCH 拒绝。

1.1 真实调用前的只读预检

在隔离 DSH Host 完成 OAuth 后,先请求:

curl -fsS -H 'sec-fetch-site: same-origin' \
  http://127.0.0.1:<隔离端>/data-cleaning/api/phase2/capabilities

该端点只读取 ToolRuntime 注册表,不调用 QCC,返回 paidCalls:falseexecutesTools:false。进入当前工商 E2E 前应有 companyRegistered:16 / companyReady:true; 历史域应有 historyRegistered:4 / historyToolsReady:true

historyAuthorizationVerified:false 在预检中始终为 false:工具已注册不等于企业认证账号已获权, 账号权限只能在用户明确同意后通过真实历史工具调用验证。

2. 证据文件契约

真实证据不进 Git,建议放在已忽略的 .phase2-e2e/。企业名及信用代码不写入 reference,只使用 row-001 这类不透明行号。

{
  "schemaVersion": 1,
  "evidenceKind": "qcc-phase2-real-tool-transcript",
  "synthetic": false,
  "historyAccess": "enterprise-certified",
  "records": [
    {
      "reference": "row-001",
      "entityStatus": "resolved",
      "dimensions": [
        {
          "domain": "company",
          "id": "registration",
          "status": "resolved",
          "sourceTool": "mcp__qcc-company__get_company_registration_info",
          "fields": [
            {
              "key": "reg_capital",
              "value": "<实际输出值>",
              "sourceValue": "<同次工具返回原值>"
            }
          ]
        },
        {
          "domain": "company",
          "id": "listing",
          "status": "no_data",
          "sourceTool": "mcp__qcc-company__get_listing_info",
          "fields": []
        }
      ]
    }
  ]
}

维度状态:

  • resolved:工具成功返回数据;必须至少有一个非空 fields 条目,且输出值与源值完全一致。
  • no_data:工具调用成功但该主体无此数据;fields 必须为空。该维度计入覆盖。
  • permission_required / not_available / error:显式降级,不计入覆盖数。

公司域 id 和历史域 id 必须使用 qcc-phase2.js 的对象键。

3. 执行命令

只验收当前工商全景:

QCC_PHASE2_ACCEPTANCE=1 \
QCC_PHASE2_EVIDENCE="$PWD/.phase2-e2e/evidence.json" \
QCC_PHASE2_REPORT="$PWD/.phase2-e2e/report.json" \
npm run e2e:phase2

同时强制验收企业认证历史域:

QCC_PHASE2_ACCEPTANCE=1 \
QCC_PHASE2_REQUIRE_HISTORY=YES \
QCC_PHASE2_EVIDENCE="$PWD/.phase2-e2e/evidence.json" \
QCC_PHASE2_REPORT="$PWD/.phase2-e2e/report-history.json" \
npm run e2e:phase2

退出码:

  • 0:全部验收门通过;
  • 1:证据可读,但记录数、维度、消歧、来源或原值一致性未达标;
  • 2:Runner 未显式启用、文件缺失或 JSON 无法读取。

4. 安全要求

  • 报告文件以 0600 权限写入,只包含计数、失败代码和 row-xxx 引用。
  • 不将 evidence、session transcript、OAuth 参数、token、企业名单或信用代码提交到 Git。
  • synthetic:true 的证据会被 Runner 显式拒绝,不能用单元测试夹具代替真实 E2E。
  • 若需付费调用,必须先在隔离 DSH Profile 内由用户明确确认额度和企业名单。

5. 2026-09-01 真实验收记录

  • 环境:隔离 DSH 0.1.1-rc.2,未触碰生产 43120
  • 授权:OAuth PKCE 成功,6 个 Server 挂载,授权跨多次 Host 重启恢复成功。
  • 样本:20 家公开知名企业;顺序执行 400 次工具调用。
  • 结果:20/20 主体解析;每企业当前工商最低 15 维、历史工商 4 维;严格历史门通过。
  • verifyIdentity 因输入只含企业名而统一不交付,符合 Skill 的按需调用规则,15 维门不受影响。
  • 原始证据与报告位于 Git 忽略的 .phase2-e2e/ 且为 0600;不进入 npm 包、Git、Issue 或日志。