host-contract-verification · git:20260827.f3bcda6 · 2026-08-27 · sha256 1450f3f316c3f537
host-contract-verification git:20260827.f3bcda6A
Immutable. This exact content is served forever at /api/v1/blob/1450f3f316c3f537.
--- name: host-contract-verification description: 宿主契约验证规范 — 为 Hook / CLI / bootstrap / visible envelope / workspace guard / LinkCapabilityDecision / MCP fallback 定义 direct replay、fixture replay、部署同步与证据路线 --- # Host Contract Verification Skill ## 职责 当任务涉及宿主事件契约、Hook 可见回复、workspace 项目识别、bootstrap 护栏、产物链接可点击性、MCP bridge fallback 或部署副本同步时,本 Skill 负责把“怎么证明宿主行为真的成立”收口为可复审的验证路线。 它不替代 `test-router`、`report` 或 runtime tests,而是为这些产物提供统一的宿主证据模型。 ## 触发条件 | 场景 | 是否触发 | |------|:--------:| | Hook runtime / 宿主适配 / Hook 输出契约变更 | 🔴 必须 | | Stop / PreCompact 可见回复验证语义变更 | 🔴 必须 | | sticky `activeProject` / `mode` / workspace guard 变更 | 🔴 必须 | | Bootstrap、部署副本、父链同步口径变更 | 🔴 必须 | | `DevCodexVisibleEnvelopeV2` / V1 只读兼容 / `PostCompletionActionSetV1` / `UserFacingArtifactSetV1` / `LinkCapabilityDecisionV1` / `HostLinkCapabilityDecisionV2` 变更 | 🔴 必须 | | Copilot / Codex MCP bridge 报错、`profile_load` fallback、`invoke undefined` 恢复链变更 | 🔴 必须 | | `ContextReadPlanV2` / `ContextReadReceiptV2`(含 V1 兼容)、Pre/Post 相关性、内容身份/复用、上下文读取 allowlist 或 fallback 语义变更 | 🔴 必须 | | 公开本地 probe、checkpoint 证据语义或 trace show/replay 变更 | 🔴 必须 | | 仅普通业务代码改动 | N/A | ## HostContractRoute | 字段 | 必填 | 说明 | |------|:----:|------| | `hostSurface` | ✅ | Copilot / Claude Code / Codex / instruction-fallback 中本轮实际验证的宿主面 | | `eventScope` | ✅ | `UserPromptSubmit` / `PreToolUse` / `PostToolUse` / `PreCompact` / `Stop` / bootstrap / deploy-sync | | `evidenceMode` | ✅ | direct replay / fixture replay / targeted test / validate probe / manual trace | | `fixtureSource` | 条件 | 使用 fixture replay 时记录脚本、payload 或样例来源 | | `visibleReplyEvidence` | 条件 | `verified-present` / `verified-missing` / `unverified`,以及证据来源 | | `workspaceGuard` | 条件 | 多项目 workspace、sticky project、workspace profile 提示等边界验证 | | `bootstrapScope` | 条件 | 父链部署体、入口检查块、adapter 初始化或 update 部署验证 | | `artifactLinkMatrix` | 条件 | `hostSurface + presentationSurface + rendererId + evidenceState + openMode`、fallbackReason 与 renderer parity;不得按宿主名推测 | | `mcpFallback` | 条件 | MCP bridge 失败时是否降级到同计划有界文件读取 / instruction-fallback;记录错误文本、fallback 路线和是否停止重试 | | `contextAcquisition` | 条件 | plan/epoch/target/source 相关性、Pre attempted、Post success receipt、fallback 与完成状态 | | `turnLiveness` | 条件 | 长任务/无续接场景的 host-native、Hook-event、sidecar 能力边界,以及 lease、ACK、terminal、checkpoint 证据 | | `localProbe` | 条件 | `LocalProbeDescriptorV1/ResultV1` 的 ID、依赖、local-only、同步只读和 zero-write 证据 | | `checkpointValidation` | 条件 | response-time / post-execution 的 evidence、deadline、status 与 incomplete/timeout 处理 | | `localTaskTrace` | 条件 | `LocalTaskTraceV1` 的 sequence、duplicate、terminal、restart 与只读 replay 边界 | | `commands` | ✅ | 本轮实际执行命令或 targeted tests | ## 最小验证矩阵 | 变更类型 | 最小验证 | |----------|----------| | Hook 输出契约 | targeted test + direct replay | | 可见回复三态 | fixture replay 或 direct replay,报告中写明 `visibleReplyEvidence` | | sticky project / workspace guard | multi-project fixture + follow-up replay | | bootstrap / 部署副本 | `node scripts/validate.js` + 部署同步后的落点复核 | | managed deployment manifest | legacy 多 owner + workspace-namespace fixture、规范化 destination 单一 current owner、project current host=0、workspace missing/mismatch/stale/duplicate=0、V8 direct replay | | workspace 宿主作用域 | `HostAdapterScopeV1` owner/activation 一致 + 子项目五类 generated host artifact=0 + Grok workspace plugin/用户登记正向 + uninstall/repeat/reinstall 配置保真 + status/doctor 同 owner + root native kernel + child plain partial + `devcodex grok --rules` full 路线 + `--cwd`/nested workspace/Windows path identity + outside-workspace no-op 负向 | | visible set / 产物打开 | manifest/projection property test + Codex Desktop、VS Code、Zed、WebStorm、Codex CLI、Claude/unknown renderer fixture;若声称当前 presentationSurface 可打开,需 direct replay 或用户实测证据 | | MCP bridge fallback | MCP server no-args direct replay + 非 Full 宿主 fallback 文案探针;若错误来自宿主桥接层,只能声明 fallback 已覆盖,不能声明宿主 bug 已修复 | | 意图驱动上下文获取 | `ContextAcquisitionToolAllowlistProbe` + plan/receipt direct replay + Pre/Post fixture + hidden-full-read 负例 + fallback no-deadlock | | Turn Liveness / orphaned turn | state-machine fault matrix + Hook direct replay + restart rehydrate;事件停止后的 proactive 检测只能由 host-native watchdog 或 gray read-only sidecar 证明 | | 本地 probe | descriptor/dependency/error fixture + CLI JSON/human replay + state hash zero-write;不得联网、启动 watcher 或写 telemetry | | checkpoint / local trace | fixed-clock 双阶段 fixture + Hook terminal replay + sequence/duplicate/restart/terminal 负例;trace replay 必须证明 payload 不执行且源 state hash 不变 | | 仅文档声明变更 | `source-consumer-sync` + validate probe;若声称宿主行为改变则不得只改文档 | ## 证据要求 ### VisibleOutputHostEvidenceGate Stop/PreCompact 对最终回复证据必须使用 `verified-present / verified-missing / unverified`:只有观察到可解析 assistant 内容和 `DevCodexVisibleEnvelopeV2` marker、合法动作标题、语义 item 才能判定 present/missing;一个兼容窗口内可识别 V1 marker,但须记录 `legacy-v1-read-only`,不得把它当作新写入证据。未观察到只能 unverified。记录 `evidenceSource / missingItems / semanticDigest`,不得保存不必要的完整回复正文。 legacy “主要产物 + 绝对路径”最多为 `unverified-legacy`。能力未 direct 验证时保持 portable/plain;Rich clickable 只显示单个语义链接。session、daily、SUMMARY、task/checkpoint 和 raw ledger 默认 internal-only,但宿主验证仍要核对它们已进入 internal manifest 和 ECR。 ### HostPermissionAuthorityInvariant `PreToolUse` 与 `PermissionRequest` 的文件、命令、删除及工具调用权限完全归当前宿主和用户宿主配置。DevCodex 只能记录风险 advisory、telemetry 或 typed workflow-invalid;runtime、输出 builder 和每个宿主 adapter 均不得发出或转译 `allow / deny / ask / block / continue:false` 操作权限载荷。Stop、PreCompact 等非操作生命周期完成门禁不受此条影响。验证必须向 Codex、Claude、Gemini、Copilot、Grok、Cursor 注入遗留允许/拒绝载荷,并证明最终操作事件投影不含任何 permission carrier。 ### ContextAcquisitionHostEvidenceGate - `ContextAcquisitionToolAllowlistProbe` 只允许已注册的只读 Profile / memory 查询工具推进 source state;普通文件搜索、写工具、legacy no-args 全文读取或未知工具不得伪造完成。 - `PreToolUse` 只记录 correlated attempted;只有 `PostToolUse` 中可解析的成功结果,且 invocation planId、planContentId、contextEpoch、activeRoot、tool/source/query 全部匹配时,才生成或推进 `ContextReadReceiptV2`(V1 兼容)。 - `ContextDeliveryReuseHostProbe` 必须分别证明 computation reuse 与 delivery reuse:跨进程只允许复用内容身份绑定的计算元数据;正文省略还必须同 host session、同 epoch、同 source identity 且当前模型已有成功 body observation。宿主无法提供稳定 session 或 Post body 证据时 delivery reuse 必须降级为 false。 - 需覆盖结构化 MCP、path-observable 与 instruction-only 三种宿主能力;后两者缺少可验证结果时必须保持 `unverified`,不能由提示文案升级为 `relevant-complete/completed`。 - MCP bridge 失败只允许一次同计划 bounded fallback 并停止重试;fallback 失败或证据不可观察时输出 warnings / missing sources,但不得形成死循环或跳过后续安全与 CP 门禁。 - Progressive SkillRoute enforcement policy 缺失、损坏或字段非法时必须使用受控 fail-safe:所有宿主的 `PreToolUse/PermissionRequest` 保持 advisory-only;Stop 等非操作生命周期事件可按宿主能力恢复 hard default。bootstrap 与 observe 均保持。 - direct/fixture replay 至少覆盖 success、tool error、mismatched epoch/target/source、duplicate/stale Post、legacy projection 和 hidden full-read mutation;报告区分 server direct success 与 host bridge verified。 1. 报告必须说明证据来自 direct replay、fixture replay、现有 targeted test,还是 validate probe 推断。 2. 无法直接读取最终 assistant 内容时,只能落为 `unverified`,不能伪造 `verified-present`。 3. workspace guard 场景必须写清“唯一项目继续沿用”“真实歧义重新提示”“workspace profile 路径”三类边界是否覆盖。 4. 若宿主不支持某类硬拦,只能记录为能力差异或 fallback,不得把缺失能力写成已验证通过。 5. 产物链接必须区分“Markdown 主链接已生成”“当前宿主可点击已实测”“绝对路径 copy fallback 已提供”三种证据;不得把第一项等同于后两项。 6. `profile_load` / MCP 工具出现 `Cannot read properties of undefined (reading 'invoke')` 时,若 DevCodex MCP server direct replay 通过,应记录为宿主 MCP bridge 失败并启用 `mcpFallback=used`,禁止反复重试同一 MCP 调用。 7. Turn Liveness 声明必须分别标注 `host-native-verified / hook-event-verified / sidecar-observed / unsupported / unverified`;PostToolUse 落盘只能证明工具结果已观察,不能证明模型续接或 turn 已终态。 8. `CheckpointValidationResultV1` 缺失 post-execution evidence 时只能是 `unverified` 或 `incomplete-timeout`;只有实际 Hook terminal evidence 才能通过,禁止把等待或 PreCompact 当完成。 9. `LocalTaskTraceV1` 只保留当前 turn 的 typed data projection;`replay` 不得 dispatch payload、重放 mutation、改 lifecycle state、唤醒宿主或控制进程。 10. workspace-namespace 下项目根存在 generated `.grok/AGENTS.md` 是作用域异常而不是部署成功证据;只有 workspace plugin、用户注册、两 cwd 同 identity 与工作区外 no-op 同时通过,才能升级 Grok workspace 结论。 11. plain host 与显式 launcher fallback 必须分别记录 `commands/evidenceMode/evidenceCeiling`;任何一方通过都不能替另一方升级结论。 12. **Grok HostParity partial 闭环(PF-165)**:`doctor`/`status` 的 `hostParity` 必须能给出 `failedChecks` + 可执行 `repairSteps`(command + detail);宣称已修复 registration/plugin 缺口时,证据须含再次 `doctor --json` 的 checks 回读,不得只写「建议 update」。 13. **GrokTurnChecklist**:声称「Grok 完整工作流已执行」时,报告/回执须覆盖 entry-pc0-pc7、skill-bundle、report-memory 与 honest-ceiling;负向探针见 `classifyGrokTurnOmissionSample`(`scripts/lib/host-parity-scorecard.js`)。 ### NativeCommandExitCodeGate 可执行适配 - 仓库内需要串行执行原生命令并保留证据的维护脚本优先复用 `scripts/lib/checked-command.js` 的 `runChecked` / `runSequenceChecked`,统一记录 command、cwd、exitCode、signal、duration 与 stdout/stderr 摘要。 - 默认 `shell:false`;只有调用方记录 `allowShellReason` 时才允许 shell。positional path 中的字面 glob 必须在 spawn 前拒绝,显式 `--glob/-g` 等 option value 除外。 - 适配器只是实现路径,不替代 direct replay / fixture replay;必须用 nonzero、ENOENT、失败短路和 literal-glob 负向 fixture 证明不会假绿。 ## 与其他 Skill 的关系 - `test-router`:决定宿主验证是否进入 direct replay / fixture replay / targeted test。 - `execution-contract`:记录 `verificationEvidence`,说明本轮要收集哪些宿主证据。 - `source-consumer-sync`:当宿主契约变化会影响 README / website / Profile / 部署副本时,负责同步消费链。 - `report`:把 HostContractRoute 的结果写入实施报告或审查报告。 ## 输出格式 ```markdown ## HostContractRoute | 字段 | 内容 | |------|------| | hostSurface | | | eventScope | | | evidenceMode | | | fixtureSource | | | visibleReplyEvidence | | | workspaceGuard | | | bootstrapScope | | | artifactLinkMatrix | | | mcpFallback | | | contextAcquisition | plan/epoch/target/source、allowlist、Pre/Post、receipt、fallback 与完成状态 | | turnLiveness | capability layer、lease/ACK/terminal/checkpoint、fault matrix 与证据状态 | | localProbe | descriptor/dependency/local-only/zero-write 与 CLI 证据 | | checkpointValidation | response-time/post-execution 结果、deadline 与证据状态 | | localTaskTrace | ordered events、terminal、restart、read-only replay 与 source hash | | commands | | ``` ## 禁止 - 禁止仅凭 README / prompt 文案就断言宿主契约已验证。 - 禁止把 `npm test` 通过等价为 direct replay 已覆盖。 - 禁止在需要 direct replay 的场景下只保留人工口头判断。 - 禁止把 Hook 下一事件到达时的 stale 检测写成无事件时可自唤醒;禁止用 sidecar 观察授权自动进程或宿主状态 mutation。 - 禁止把 trace replay 写成 operation replay,或执行 payload 中的命令、文件动作和工具调用。