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