{
 "schemaVersion": 1,
 "kind": "skill-family.documentation-capability-catalog",
 "bundle": "locale-overlay",
 "locale": "zh-CN",
 "generatedFrom": [
  "package.json",
  "packages/skill-family-contracts/package.json",
  "packages/skill-family-harness-node/package.json",
  "packages/skill-family-engineering-kit/package.json",
  "packages/skill-family-contracts/src/index.mjs",
  "packages/skill-family-harness-node/src/index.mjs",
  "packages/skill-family-engineering-kit/src/index.mjs",
  "packages/skill-family-engineering-kit/src/cli.mjs",
  "packages/skill-family-contracts/src/registry.json",
  "profiles/README.md",
  "docs/architecture.md",
  "docs/status/current.md"
 ],
 "capabilities": [
  {
   "id": "foundation.contracts.object-validation",
   "intent": "用 Ajv 8.20.0（精确 pin）在 draft-07 与 2020-12 双方言下编译并校验 Foundation 已登记的全部 42 类顶层契约对象文档",
   "useWhen": [
    "需要校验 project-manifest、profile-descriptor、report-model 等已登记契约对象",
    "需要探测文档方言并选择 strict 或 tolerant 校验策略"
   ],
   "doNotUseWhen": [
    "需要校验消费者自有业务 Schema（消费者应自行持有，Foundation 不取代）",
    "需要把领域语义校验混入通用契约"
   ],
   "prerequisites": [
    "待校验文档带有已登记契约对象的 $id",
    "Node >= 22.22.2"
   ],
   "inputs": [
    "契约文档对象（任意 JSON 值）",
    "目标契约对象 $id 或 schema",
    "校验策略（strict | tolerant，默认 strict）"
   ],
   "outputs": [
    "校验通过：返回 {valid:true}（不含 errorCode 字段）",
    "校验失败：返回 {valid:false, errorCode, errors}，不抛出",
    "首次编译结果写入 Ajv 编译缓存，后续同 (schemaId,dialect,policy) 复用"
   ],
   "sideEffects": [
    "无文件系统、Git、网络或进程副作用（纯函数 + 内存缓存）"
   ],
   "failureSemantics": [
    "SFC1002：未知契约对象 $id 未登记（返回 valid:false，不抛出）",
    "SFC1001：文档不符合已登记 Schema（返回 valid:false，errors 含 Ajv keyword 明细）",
    "调用方以返回值的 valid 字段判断成败，不以 try/catch 捕获——validateDocument 永不抛出",
    "compileSchema 对无法编译的 schema 抛 ContractsError（SFC1012 SCHEMA_COMPILE_FAILED）；detectDialect 对未知方言抛 ContractsError（SFC1006）"
   ],
   "invariants": [
    "同一 (对象, 方言, 策略) 复用编译缓存，重复校验不重新编译",
    "仅接受 Ajv 8.20.0，不接入其他校验器"
   ],
   "ownedByCaller": [
    "具体业务字段的语义解释",
    "领域级校验规则"
   ],
   "routeElsewhere": [
    "消费者业务 Schema 校验：留在调用方",
    "远端发布写入：转 release-skill"
   ]
  },
  {
   "id": "foundation.contracts.registry-protocol",
   "intent": "登记并查询契约对象 Schema $id 与协议名，作为协议名与 Schema 唯一权威",
   "useWhen": [
    "需要按对象名或 $id 查找已登记 Schema",
    "需要按协议名查找 kernel 协议定义"
   ],
   "doNotUseWhen": [
    "需要在没有 ADR 的情况下新增顶层登记对象（42 类对象集已经固定）"
   ],
   "prerequisites": [
    "registry.json 已随包发布",
    "Node >= 22.22.2"
   ],
   "inputs": [
    "对象名、Schema $id 或协议名"
   ],
   "outputs": [
    "已登记的 Schema 元信息或协议定义",
    "查询未命中时返回 undefined 或抛错"
   ],
   "sideEffects": [
    "无文件系统、Git、网络或进程副作用（纯函数）"
   ],
   "failureSemantics": [
    "SFC1003：重复 $id 登记",
    "SFC1004：重复协议登记"
   ],
   "invariants": [
    "registry.json 的 schemaVersion=1、contractsVersion 为唯一权威",
    "42 类顶层对象集合固定，新增需 ADR"
   ],
   "ownedByCaller": [
    "对象业务含义的解释"
   ],
   "routeElsewhere": [
    "发布状态：转 release-skill"
   ]
  },
  {
   "id": "foundation.contracts.kernel-protocol",
   "intent": "加载并校验 skill-family.kernel.operation 协议（stable，Kernel 文档生命周期坐标 1.8.0），定义操作请求/结果结构",
   "useWhen": [
    "需要解析或校验 operation-request / operation-result 结构",
    "需要按操作名查找参数契约"
   ],
   "doNotUseWhen": [
    "需要定义业务操作语义（语义由消费者拥有）"
   ],
   "prerequisites": [
    "kernel-protocol.json 已随包发布"
   ],
   "inputs": [
    "协议名、操作名、操作参数"
   ],
   "outputs": [
    "协议定义或操作参数校验结果"
   ],
   "sideEffects": [
    "无副作用（纯函数）"
   ],
   "failureSemantics": [
    "SFC2002：未知操作",
    "SFC2003：参数违反协议"
   ],
   "invariants": [
    "kernel 协议版本与 Contracts 版本绑定"
   ],
   "ownedByCaller": [
    "操作的具体业务语义"
   ],
   "routeElsewhere": [
    "业务状态机/重试/终态：转 loop-agent"
   ]
  },
  {
   "id": "foundation.contracts.mandatory-checks",
   "intent": "运行 9 类 mandatory rule 的机械检查（预算上限 20，绝对上限 30），对登记表内全部 Schema 统一编译",
   "useWhen": [
    "需要确认契约集满足强制机械规则",
    "需要收集未解析引用（unresolved refs）"
   ],
   "doNotUseWhen": [
    "需要语义级审阅（属外部独立审阅，不在仓内维护第二份门禁）"
   ],
   "prerequisites": [
    "registry 与 rules 已加载"
   ],
   "inputs": [
    "待检查的契约集或合成 registry/fixtures"
   ],
   "outputs": [
    "检查结论与未解析引用清单"
   ],
   "sideEffects": [
    "无副作用（纯函数）"
   ],
   "failureSemantics": [
    "SFC1002/1003/1004/1005/1006/1008/1009/1010：对应规则 violated"
   ],
   "invariants": [
    "CHECK_TYPES 为 9 类闭集",
    "RULE_BUDGET 限制 firstVersionMax 与 absoluteMax"
   ],
   "ownedByCaller": [
    "规则业务理由的解释"
   ],
   "routeElsewhere": [
    "语义接受/拒绝：外部独立审阅"
   ]
  },
  {
   "id": "foundation.contracts.fixture-verification",
   "intent": "枚举并校验公开/虚构 fixture，确认其符合对应契约对象的 expect 声明",
   "useWhen": [
    "需要证明某契约对象被 fixture 覆盖",
    "需要运行 positive/negative/dialect-boundary 类 fixture"
   ],
   "doNotUseWhen": [
    "需要把 fixture 当作业务 oracle（fixture 只证明结构，不证明语义）"
   ],
   "prerequisites": [
    "fixtures 目录为公开或完全虚构数据"
   ],
   "inputs": [
    "fixture 类或单个 fixture 标识"
   ],
   "outputs": [
    "逐 fixture 的校验结果"
   ],
   "sideEffects": [
    "无副作用（只读 fixture）"
   ],
   "failureSemantics": [
    "SFC1010：负例 fixture 未产生预期失败"
   ],
   "invariants": [
    "fixture 与审计器预期结果不共享"
   ],
   "ownedByCaller": [
    "fixture 背后的业务意图"
   ],
   "routeElsewhere": [
    "领域审计语义：转独立审计消费者"
   ]
  },
  {
   "id": "foundation.contracts.error-codes",
   "intent": "定义并登记稳定错误码体系，提供校验与断言入口，保证错误码不漂移",
   "useWhen": [
    "需要抛出或分类带稳定错误码的 ContractsError",
    "需要断言某错误码已登记"
   ],
   "doNotUseWhen": [
    "需要定义在 Foundation 范围外的业务错误语义"
   ],
   "prerequisites": [
    "error-codes.json 已随包发布"
   ],
   "inputs": [
    "错误码字符串、错误上下文"
   ],
   "outputs": [
    "带稳定错误码与 details 的错误对象"
   ],
   "sideEffects": [
    "无副作用（纯函数）"
   ],
   "failureSemantics": [
    "对未登记错误码的断言失败",
    "冻结对象不可变违反"
   ],
   "invariants": [
    "错误码注册表冻结，不可运行时增删"
   ],
   "ownedByCaller": [
    "错误码的业务归因"
   ],
   "routeElsewhere": [
    "语义审阅结论：外部独立审阅"
   ]
  },
  {
   "id": "foundation.contracts.audit-surface",
   "intent": "以确定性方式序列化契约表面（canonical JSON + sha256 摘要），供审计消费者只读投影",
   "useWhen": [
    "需要为契约表面生成可复算摘要",
    "需要描述审计表面结构"
   ],
   "doNotUseWhen": [
    "需要审计领域语义（语义与最终接受/拒绝属外部审阅）"
   ],
   "prerequisites": [
    "AUDIT_SURFACE_VERSION=1、AUDIT_DIGEST_ALGORITHMS=[sha256]"
   ],
   "inputs": [
    "任意 JSON 文档"
   ],
   "outputs": [
    "canonical 字符串与 sha256 摘要"
   ],
   "sideEffects": [
    "无副作用（纯函数）"
   ],
   "failureSemantics": [
    "非 JSON 值、未知算法、冻结违规均抛错"
   ],
   "invariants": [
    "摘要算法仅 sha256，版本号固定"
   ],
   "ownedByCaller": [
    "审计语义结论"
   ],
   "routeElsewhere": [
    "领域审计语义：转独立审计消费者"
   ]
  },
  {
   "id": "foundation.contracts.token-estimate-consumption",
   "intent": "定义 token 估算记录的最小消费合同：哪个字段承载数值估算、退化的裸整数形态与失败关闭的拒绝语义",
   "useWhen": [
    "需要从 token-estimate-record 提取数值估算并校验降级形态",
    "需要拒绝估算器不可混用或目标字段缺失的记录"
   ],
   "doNotUseWhen": [
    "需要生成估算记录（归 harness estimateTokens）",
    "需要解释估算结果的业务含义"
   ],
   "prerequisites": [],
   "inputs": [
    "token-estimate-record 文档或其退化裸整数形态"
   ],
   "outputs": [
    "消费结果（数值估算与来源标识）或失败关闭拒绝"
   ],
   "sideEffects": [
    "纯函数，无文件系统、Git、网络或进程副作用"
   ],
   "failureSemantics": [
    "估算器不匹配或字段缺失时以稳定错误种类失败关闭",
    "拒绝结果携带 closed 枚举原因，不静默降级"
   ],
   "invariants": [
    "不同估算器结果不得静默混用",
    "消费合同不新增顶层对象类"
   ],
   "ownedByCaller": [
    "估算的触发时机与结果的业务解释"
   ],
   "routeElsewhere": [
    "估算记录生成：foundation.harness.token-estimation"
   ]
  },
  {
   "id": "foundation.harness.contract-validation",
   "intent": "在 Node 运行时解析契约上下文并复用 Contracts 校验器，校验契约文档并缓存校验器实例",
   "useWhen": [
    "需要在 Node 内校验 Foundation 契约文档",
    "需要复用以 schema 为键的校验器缓存"
   ],
   "doNotUseWhen": [
    "需要在非 Node 运行时校验（当前只有 Node 实现）"
   ],
   "prerequisites": [
    "已安装 skill-family-contracts"
   ],
   "inputs": [
    "schema 上下文、契约文档"
   ],
   "outputs": [
    "校验结果，复用缓存的 Ajv 实例"
   ],
   "sideEffects": [
    "进程内内存缓存校验器（无文件/Git/网络）"
   ],
   "failureSemantics": [
    "date-time 等反例矩阵触发 SFC 校验失败"
   ],
   "invariants": [
    "校验器以 (schema) 为键缓存，size 可查询"
   ],
   "ownedByCaller": [
    "契约业务字段语义"
   ],
   "routeElsewhere": [
    "契约对象定义：转 Contracts"
   ]
  },
  {
   "id": "foundation.harness.path-containment",
   "intent": "把外部路径输入分类并解析到受收容根目录内，拒绝路径穿越、symlink 逃逸与 realpath 逃逸",
   "useWhen": [
    "需要把用户/调用方提供的路径限制在某个根目录内",
    "需要安全读取受收容文件"
   ],
   "doNotUseWhen": [
    "需要把文件选择的业务规则放入 Foundation（业务规则由调用方拥有）"
   ],
   "prerequisites": [
    "调用方提供明确的根目录（收容边界）"
   ],
   "inputs": [
    "根目录、待解析的相对/绝对路径"
   ],
   "outputs": [
    "受收容的绝对路径或读到的文件内容"
   ],
   "sideEffects": [
    "只读文件系统访问（读取/解析）"
   ],
   "failureSemantics": [
    "SFC2004：path-traversal / symlink-escape / realpath-escape，携带稳定 kind",
    "Windows 盘符/UNC 逃逸同样拒绝"
   ],
   "invariants": [
    "所有解析结果必须落在根目录内"
   ],
   "ownedByCaller": [
    "哪些路径是业务允许的选择规则"
   ],
   "routeElsewhere": [
    "业务文件选择语义：留在调用方"
   ]
  },
  {
   "id": "foundation.harness.atomic-write",
   "intent": "在已收容路径内以临时文件 + fsync + rename 原子写入普通文件，失败时回滚不留残影",
   "useWhen": [
    "需要更新受收容目录内的普通文本/二进制文件",
    "需要保证写入要么完整可见、要么不可见"
   ],
   "doNotUseWhen": [
    "需要写入未受收容路径（越界由 path-containment 拒绝）"
   ],
   "prerequisites": [
    "目标路径经 path-containment 验证在根目录内"
   ],
   "inputs": [
    "已收容目标路径、文件内容（string 或 Buffer）"
   ],
   "outputs": [
    "写入完成的文件，字节与输入一致"
   ],
   "sideEffects": [
    "在根目录内创建临时文件并最终 rename 覆盖目标"
   ],
   "failureSemantics": [
    "越界路径、非法数据类型抛错并回滚临时文件",
    "二进制内容逐字节保留"
   ],
   "invariants": [
    "rename 前先 fsync，保证崩溃一致性"
   ],
   "ownedByCaller": [
    "写入内容的业务正确性"
   ],
   "routeElsewhere": [
    "内容选择业务规则：留在调用方"
   ]
  },
  {
   "id": "foundation.harness.temporary-workspace",
   "intent": "创建并管理临时工作目录，提供 with 语法的安全生命周期，退出时清理",
   "useWhen": [
    "需要在隔离目录内做构建/中间产物",
    "需要保证异常时临时目录被回收"
   ],
   "doNotUseWhen": [
    "需要持久保存产物（应显式 materialize 到受收容路径）"
   ],
   "prerequisites": [
    "宿主提供可写临时目录（如 os.tmpdir）"
   ],
   "inputs": [
    "可选前缀/标签"
   ],
   "outputs": [
    "临时工作目录句柄"
   ],
   "sideEffects": [
    "在系统临时目录创建子目录，退出时删除"
   ],
   "failureSemantics": [
    "创建失败 reject；with 回调抛错时仍清理临时目录"
   ],
   "invariants": [
    "临时目录路径不逃逸出宿主临时根"
   ],
   "ownedByCaller": [
    "临时产物的最终去处"
   ],
   "routeElsewhere": [
    "持久状态：转 state-store"
   ]
  },
  {
   "id": "foundation.harness.resource-closure",
   "intent": "计算确定性、去重、有序的资源闭包并以 sha256 摘要，供 adapter 文本闭包与构建清单使用",
   "useWhen": [
    "需要把一组资源归一成可复算的闭包",
    "需要为构建清单生成摘要"
   ],
   "doNotUseWhen": [
    "需要纳入二进制资源（当前只支持文本闭包）"
   ],
   "prerequisites": [
    "资源为可序列化的文本条目"
   ],
   "inputs": [
    "资源列表（路径 + 内容）"
   ],
   "outputs": [
    "确定性闭包对象与 sha256 摘要"
   ],
   "sideEffects": [
    "无副作用（纯函数）"
   ],
   "failureSemantics": [
    "非法/重复资源声明抛错或 reject"
   ],
   "invariants": [
    "去重与排序固定，相同输入恒得相同摘要"
   ],
   "ownedByCaller": [
    "资源业务含义"
   ],
   "routeElsewhere": [
    "二进制投影：明确 unsupported"
   ]
  },
  {
   "id": "foundation.harness.request-processing",
   "intent": "解析 operation-request 并驱动 operation-result 管线，产出终态 REJECTED / FAILED / SUCCESS",
   "useWhen": [
    "需要把入站请求规整为统一操作请求结构",
    "需要确定性产出操作结果"
   ],
   "doNotUseWhen": [
    "需要模型调用或业务编排（均不在 Foundation 范围）"
   ],
   "prerequisites": [
    "请求符合 kernel 协议结构"
   ],
   "inputs": [
    "原始请求负载"
   ],
   "outputs": [
    "规范化 operation-request 与终态 operation-result"
   ],
   "sideEffects": [
    "无副作用（纯函数管线）"
   ],
   "failureSemantics": [
    "解析失败进入 REJECTED/FAILED 终态并带稳定错误码"
   ],
   "invariants": [
    "终态集合固定为 REJECTED/FAILED/SUCCESS"
   ],
   "ownedByCaller": [
    "操作的具体业务语义"
   ],
   "routeElsewhere": [
    "业务状态机/重试：转 loop-agent"
   ]
  },
  {
   "id": "foundation.harness.report",
   "intent": "以确定性方式校验 report-model、渲染 Markdown、绑定摘要并分级检查，人类报告由机器结果派生而非自由撰写",
   "useWhen": [
    "需要把机器结果渲染成人类可读报告",
    "需要把 model/result/report 三摘要绑定防篡改"
   ],
   "doNotUseWhen": [
    "需要从开放业务 outputs 自由编报告（禁止）"
   ],
   "prerequisites": [
    "REPORT_RENDERER_NAME / VERSION 取自各自 package（当前 0.3.0）",
    "SUPPORTED_REPORT_LOCALES = [zh-CN, en-US]"
   ],
   "inputs": [
    "report-model、渲染选项（locale/audience/style）"
   ],
   "outputs": [
    "Markdown 文本、绑定对象、分级检查发现"
   ],
   "sideEffects": [
    "无文件/Git/网络副作用（纯函数）"
   ],
   "failureSemantics": [
    "SFC3001/3002/3003：模型校验/绑定/检查硬失败"
   ],
   "invariants": [
    "Markdown 确定性转义，双输出成组写入并拒绝路径别名与输入覆盖"
   ],
   "ownedByCaller": [
    "报告业务结论的解读"
   ],
   "routeElsewhere": [
    "报告生成编排：Kit report 子动作"
   ]
  },
  {
   "id": "foundation.harness.host-adapter",
   "intent": "实现宿主接入的通用机制层：归一化 adapter source、计算构建闭包、校验构建清单、验证同级适配器目录、materialize 构建、probe 版本向量（默认禁 spawn）",
   "useWhen": [
    "需要把宿主适配源做成可复算的文本闭包",
    "需要在受收容处 materialize 构建产物",
    "需要探测宿主版本向量（不自动执行宿主二进制）",
    "需要从两个或更多同级适配器的真实字节执行只读目录验证"
   ],
   "doNotUseWhen": [
    "需要 host apply/install/update/uninstall（明确 unsupported）",
    "需要二进制 adapter source（仅支持文本闭包）"
   ],
   "prerequisites": [
    "adapter source 为已声明文本闭包"
   ],
   "inputs": [
    "adapter source、目标路径"
   ],
   "outputs": [
    "构建闭包、校验后的清单、materialize 产物，或带共同闭包与完整 mapping 的同级验证结果"
   ],
   "sideEffects": [
    "在受收容目标创建 sibling staging 并单次 rename",
    "probe 默认不 spawn，不走 PATH",
    "同级目录验证只读，不写入 peer 目录"
   ],
   "failureSemantics": [
    "清单摘要不符、目标已存在、非受信可执行文件、成员漂移或 mapping 漂移均失败关闭"
   ],
   "invariants": [
    "materialize 为原子 sibling + rename；同级验证从调用方提供的真实目录重新计算事实"
   ],
   "ownedByCaller": [
    "宿主具体业务语义"
   ],
   "routeElsewhere": [
    "host apply：明确 unsupported",
    "宿主差异声明：转 Profile + Kit host 子动作"
   ]
  },
  {
   "id": "foundation.harness.state-store",
   "intent": "提供持久状态底座：append-only 事件、hash chain、派生快照，以及锁检查与显式恢复；事件含义与 reducer 转移由调用方拥有",
   "useWhen": [
    "需要持久化事件日志并保证顺序与完整性",
    "需要重建或校验派生快照",
    "需要检查或恢复协作式单写者锁"
   ],
   "doNotUseWhen": [
    "需要在 Foundation 定义 workflow 状态机（禁止）",
    "需要抵御同权限恶意进程（fencing 不承诺该场景）"
   ],
   "prerequisites": [
    "STATE_GENESIS_DIGEST 作为链起点"
   ],
   "inputs": [
    "事件负载、快照、锁令牌"
   ],
   "outputs": [
    "事件、hash chain 校验结果、快照"
   ],
   "sideEffects": [
    "在受收容路径读写事件日志与快照文件",
    "写锁文件用于协作式单写者"
   ],
   "failureSemantics": [
    "hash chain 断裂、锁 fencing 冲突、恢复失败抛错"
   ],
   "invariants": [
    "事件日志是唯一权威，snapshot 为派生缓存",
    "本地协作式单写者使用 fencing 与显式恢复"
   ],
   "ownedByCaller": [
    "事件业务含义、reducer 转移、confirmOwnerTerminated 信任锚"
   ],
   "routeElsewhere": [
    "业务状态机/终态：转 loop-agent"
   ]
  },
  {
   "id": "foundation.harness.baseline-materialization",
   "intent": "把冻结基线物化为字节保真的临时副本，物化前后双向摘要校验，中途变化与守卫检出均失败关闭",
   "useWhen": [
    "需要从已冻结摘要的基线目录得到可写隔离副本",
    "需要证明副本与源基线逐字节一致"
   ],
   "doNotUseWhen": [
    "需要保留产物（应显式持久化到受收容路径）",
    "基线目录含符号链接（机制直接拒绝）"
   ],
   "prerequisites": [
    "调用方持有冻结基线的 64 位 sha256 摘要"
   ],
   "inputs": [
    "基线目录、冻结摘要、可选临时目录前缀"
   ],
   "outputs": [
    "物化后的临时工作区根路径"
   ],
   "sideEffects": [
    "在系统临时目录创建子目录并在失败时清理",
    "物化过程只读源基线"
   ],
   "failureSemantics": [
    "摘要不符、物化中途源或副本变化、守卫拒绝均抛 baseline-mismatch 或 content-guard-rejected，不交付半成品"
   ],
   "invariants": [
    "物化副本与冻结摘要字节一致",
    "基线内符号链接一律拒绝"
   ],
   "ownedByCaller": [
    "残留内容判定（contentGuard 谓词）、副本的最终去处"
   ],
   "routeElsewhere": [
    "持久保存产物：转 state-store 或消费者自身持久化"
   ]
  },
  {
   "id": "foundation.harness.read-chokepoint",
   "intent": "把消费者对受保护区域的全部读取集中到一个准入检查：允许根集合加可选身份谓词，越界与非授权一律稳定拒绝",
   "useWhen": [
    "需要保证受保护区域的读取只落在声明允许的根集合内",
    "需要把身份判定与路径收容集中到单一入口"
   ],
   "doNotUseWhen": [
    "需要机制理解身份或路径的业务含义（由消费者谓词拥有）"
   ],
   "prerequisites": [
    "调用方声明非空允许根集合"
   ],
   "inputs": [
    "绝对路径或 { root, relPath }，可选身份对象"
   ],
   "outputs": [
    "准入后的 { root, relPath, absolute } 或受收容读取结果"
   ],
   "sideEffects": [
    "只读文件系统访问（realpath / 收容读取）"
   ],
   "failureSemantics": [
    "越界、符号链接逃逸、非授权身份均抛 read-chokepoint-rejected；资源缺失抛 missing-resource"
   ],
   "invariants": [
    "字符串输入与 { root, relPath } 输入走同一收容分类",
    "机制不解释任何私有身份或路径语义"
   ],
   "ownedByCaller": [
    "允许根集合、身份谓词与准入后的读取语义"
   ],
   "routeElsewhere": [
    "身份体系与授权策略：留在消费者"
   ]
  },
  {
   "id": "foundation.harness.surface-scan",
   "intent": "按策略契约文档对声明表面做路径与内容模式扫描，首个命中即失败关闭，策略非法同样失败关闭。它是与结构化扫描器同一机制族的执行内核通用化投影，不携带任何私有身份或批准清单解释",
   "useWhen": [
    "需要按可配置策略扫描一组受收容文件的路径或内容模式",
    "需要注入后字节可恢复的自测证明扫描器无状态"
   ],
   "doNotUseWhen": [
    "需要把允许用途豁免交给机制解释（由消费者层实现）"
   ],
   "prerequisites": [
    "一份通过 surface-scan-policy 契约校验的策略文档"
   ],
   "inputs": [
    "扫描根、相对路径清单、策略文档"
   ],
   "outputs": [
    "{ scanned, bytes, policy } 结果对象"
   ],
   "sideEffects": [
    "只读文件系统访问",
    "策略模式以正则编译于进程内，无持久状态"
   ],
   "failureSemantics": [
    "路径或内容命中抛 surface-scan-violation；策略非法或模式不可编译抛 scan-policy-invalid；缺失文件抛 missing-resource"
   ],
   "invariants": [
    "命中即失败关闭，不静默跳过",
    "allowedUses 只携带不解释，命中不被豁免"
   ],
   "ownedByCaller": [
    "策略内容、允许用途语义与命中后的处置"
   ],
   "routeElsewhere": [
    "业务禁词与豁免判定：留在消费者"
   ]
  },
  {
   "id": "foundation.harness.declared-read-surface",
   "intent": "断言声明模块集内的每个 node:fs 具名导入都落在消费者声明的读取表面内；保守的语法面近似同样覆盖注释与字符串中的 fs API 文本，且不执行任何代码",
   "useWhen": [
    "需要在不执行的前提下断言所有文件系统读取来自已声明读取器",
    "需要对未声明 fs 模块与写族 fs API 的失败关闭保证"
   ],
   "doNotUseWhen": [
    "需要超出静态导入语法面的运行时行为分析"
   ],
   "prerequisites": [
    "一份模块到 API 的声明映射；模块仅按语法分析"
   ],
   "inputs": [
    "工作区根与 declaredReaders 映射"
   ],
   "outputs": [
    "declared-read-surface-result 契约对象，违规项来自闭集规则集"
   ],
   "sideEffects": [
    "只读语法扫描，不执行代码"
   ],
   "failureSemantics": [
    "违规在结果中失败关闭；非法输入抛出 declared-read-surface-invalid"
   ],
   "invariants": [
    "仅语法面、保守近似、不执行、无模型调用、无网络访问",
    "guarantees 是闭集枚举，结果不携带时间戳"
   ],
   "ownedByCaller": [
    "声明读取器集合与违规后的处置"
   ],
   "routeElsewhere": [
    "运行时行为、动态导入与写强制：超出本原语范围"
   ]
  },
  {
   "id": "foundation.harness.structured-scan",
   "intent": "按 structured-scan-policy 契约对声明表面做结构化语义扫描：IP 形候选统一进入单一标准解析入口并按 CIDR 批准，坐标、注册表与主机需批准，格式适配器（pnpm-lockfile、tree-json）结构化解析，二进制与符号链接策略失败关闭；首个命中即失败关闭，策略非法同样失败关闭。它与 scanSurface 属同一机制族，是公开、消费者参数化的形态，自身不解释任何私有身份、路径或批准清单",
   "useWhen": [
    "需要按消费者声明的批准项扫描锁文件、JSON 树或文本中的地址、坐标、注册表与主机",
    "需要无位置级豁免的确定性结构化扫描"
   ],
   "doNotUseWhen": [
    "需要机制解释工作区私有事实（托管路径解释留在消费者侧）",
    "需要凭据模式或锁文件完整性形状规则（不在闭集词汇表内）"
   ],
   "prerequisites": [
    "一份 CIDR 合法、模式可编译的 structured-scan-policy 契约文档"
   ],
   "inputs": [
    "扫描根、相对路径清单与 structured-scan-policy 文档"
   ],
   "outputs": [
    "{ scanned, bytes, policy } 结果对象"
   ],
   "sideEffects": [
    "只读；唯一的写入是 OS 临时目录下的一份 pnpm-lock.yaml 临时副本，用后即删"
   ],
   "failureSemantics": [
    "命中抛出 structured-scan-violation，details.rule 来自闭集九规则词汇表；策略非法抛出 structured-scan-invalid"
   ],
   "invariants": [
    "闭集规则词汇表永不静默跳过；不可解析的 IP 形 token 失败关闭",
    "永不跟随符号链接；解析失败失败关闭"
   ],
   "ownedByCaller": [
    "批准清单、适配器选择与命中后的处置"
   ],
   "routeElsewhere": [
    "工作区布局事实、锁文件完整性保证与凭据模式：留在消费者侧"
   ]
  },
  {
   "id": "foundation.harness.token-estimation",
   "intent": "对文本内容给出确定性估算：UTF-8 字节数上界与按 CJK 码位/空白切分的词元数估算；均为无模型、无网络、无 tokenizer 依赖的纯函数，结果携带估算器身份与版本",
   "useWhen": [
    "需要在不调用模型的前提下给文本内容的消耗上界",
    "需要中英混排、纯 CJK 或纯 ASCII 输入下确定性、可重放的词元数估算",
    "需要契约化、可校验、无时间戳的估算结果对象，并要求记录结果出自哪个估算器"
   ],
   "doNotUseWhen": [
    "需要目标模型 tokenizer 的真实 token 计数或语义估算（估算原语不承诺精度）"
   ],
   "prerequisites": [
    "输入为 JavaScript 字符串"
   ],
   "inputs": [
    "文本字符串"
   ],
   "outputs": [
    "token-estimate-result 契约对象（inputBytes 与 upperBound 相等）",
    "词元估算记录（含估算器 id、版本、算法标识与切分统计；tokens 等于 CJK 字符数加 OTHER 段数）"
   ],
   "sideEffects": [
    "无：纯函数，零依赖；CLI 仅读取命令行参数、文件或 stdin，仅写 stdout"
   ],
   "failureSemantics": [
    "非字符串输入抛 TypeError",
    "CLI 参数错误退出码 2，成功退出码 0"
   ],
   "invariants": [
    "同输入同输出，确定性字节计数与确定性切分",
    "每个 CJK 码位计 1 词元并终结其前的 OTHER 段；空白字符不贡献词元",
    "每条估算记录携带估算器 id 与版本（SFA-CONTEXT-028），不同估算器结果不得静默混用",
    "guarantees 为封闭枚举，结果无时间戳"
   ],
   "ownedByCaller": [
    "估算结果的解释与消费侧换算"
   ],
   "routeElsewhere": [
    "模型调用与真实 token 计数：不在 Foundation"
   ]
  },
  {
   "id": "foundation.harness.upper-bound-guard",
   "intent": "以 state-store 事件账加 token-lock 显式占用实现通用上限守卫：事件越限失败关闭且不写入，上限与超限策略全部由消费者配置",
   "useWhen": [
    "需要为可归约的用量事件账设消费侧上限并保证越限事件不落账",
    "需要复用既有事件账与锁机制而非另造状态"
   ],
   "doNotUseWhen": [
    "需要 Foundation 理解用量类别或定价语义（由消费者注入）"
   ],
   "prerequisites": [
    "消费者提供事件 payload schema、纯归约函数与非负上限"
   ],
   "inputs": [
    "状态根、锁根与锁路径、事件、消费者配置"
   ],
   "outputs": [
    "追加结果、当前用量读数、守卫句柄"
   ],
   "sideEffects": [
    "在受收容路径写事件账与锁文件",
    "打开时显式占用锁，关闭时释放"
   ],
   "failureSemantics": [
    "越限抛 upper-bound-exceeded 且事件不写入；锁被占用抛 store-locked；账本断链抛 chain-broken"
   ],
   "invariants": [
    "事件账是唯一权威，越限事件不落账",
    "模块不携带任何固定数额或定价词汇"
   ],
   "ownedByCaller": [
    "事件含义、归约函数、上限数值与超限后的业务处置"
   ],
   "routeElsewhere": [
    "定价与计费语义：留在消费者"
   ]
  },
  {
   "id": "foundation.harness.supervise-process",
   "intent": "监督单个有界子进程的完整生命周期：消费者提供超时策略，SIGTERM 至 SIGKILL 升级、终态进度观察与封闭枚举终止证据",
   "useWhen": [
    "需要让子进程在有硬上限与确定性终止证据的有界生命周期内运行",
    "需要可直接机械映射的封闭枚举 watchdog/termination 原因"
   ],
   "doNotUseWhen": [
    "需要监督器重试或重启进程（workflow-orchestration 排除）"
   ],
   "prerequisites": [
    "消费者提供命令、cwd 与含 maxSeconds 和 killGraceSeconds 的超时策略"
   ],
   "inputs": [
    "命令/参数/cwd、超时策略、可选的进度与终态进度路径、可选的预算与长工具钩子、可选的证据路径",
    "0.13.0 可选 outputByteLimits 分别限制 stdout/stderr 原始字节；等于上限允许，首次超过上限启动既有终止路径。未配置时不追加限额字段，保持旧行为。"
   ],
   "outputs": [
    "每次调用恰好一个冻结的 watchdog-termination-envelope（单写者）"
   ],
   "sideEffects": [
    "生成并终止被监督进程及其进程组",
    "可选地在 evidencePath 持久化监督痕迹与最终信封"
   ],
   "failureSemantics": [
    "策略形状错误抛出 SFC2004 + timeout-policy-invalid；机制失败以 SFC2004 + supervise-process-failed 拒绝并在 details 携带终止证据；外部进程消失按 no_terminal_result 失败关闭"
   ],
   "invariants": [
    "机制不持有任何超时数值、预算阈值或重启策略",
    "存活只由显式事件与进程组探测确认；ps 绝不用于存活猜测"
   ],
   "ownedByCaller": [
    "命令本身、超时数值、预算阈值、终态记录语义与任何重启策略"
   ],
   "routeElsewhere": [
    "重启/重试编排：workflow-orchestration 排除，留在上层编排层"
   ]
  },
  {
   "id": "foundation.harness.strict-read",
   "intent": "以收容、不跟随符号链接、常规文件身份复核与 sha256 摘要回执读取一个已存在的权威文件",
   "useWhen": [
    "需要读取冻结权威文件并绑定其字节摘要",
    "需要在交付前校验权威文件与已冻结摘要一致"
   ],
   "doNotUseWhen": [
    "需要读取目录或符号链接目标",
    "需要写入或替换文件（归严格写入路径）"
   ],
   "prerequisites": [],
   "inputs": [
    "收容根目录与相对路径；可选 expectedSha256 冻结摘要"
   ],
   "outputs": [
    "文件内容与读取字节的 sha256 摘要回执"
   ],
   "sideEffects": [
    "只读文件系统访问（lstat/open/read）"
   ],
   "failureSemantics": [
    "符号链接、非常规文件或摘要不符时失败关闭且不交付内容",
    "路径逃逸在任何读取之前被收容层拒绝"
   ],
   "invariants": [
    "O_NOFOLLOW 打开，身份检查后交换的链接不会被跟随",
    "回执摘要只覆盖实际读到的字节"
   ],
   "ownedByCaller": [
    "冻结摘要的来源与信任锚",
    "读取失败后的处置策略"
   ],
   "routeElsewhere": [
    "写入与发布：foundation.harness.atomic-write"
   ]
  },
  {
   "id": "foundation.harness.url-credential-redaction",
   "intent": "在任何 URL 数值到达磁盘或日志之前剥离其 userinfo 凭证部分",
   "useWhen": [
    "需要持久化或记录可能携带凭证的 URL",
    "需要把不可解析输入安全退化为占位符"
   ],
   "doNotUseWhen": [
    "需要保留或解析凭证本身（凭证不应进入 Foundation）",
    "需要处理非 URL 形态的密钥材料"
   ],
   "prerequisites": [],
   "inputs": [
    "任意字符串输入（URL 或非 URL）"
   ],
   "outputs": [
    "脱敏后的 URL 字符串或 REDACTED_URL_PLACEHOLDER 不透明占位符"
   ],
   "sideEffects": [
    "纯函数，无副作用"
   ],
   "failureSemantics": [
    "不可解析输入退化为不透明占位符，绝不泄漏原文",
    "输出不携带任何 userinfo 字节"
   ],
   "invariants": [
    "脱敏发生在任何落盘或日志写入之前",
    "占位符是封闭常量，不携带输入信息"
   ],
   "ownedByCaller": [
    "哪些输入值按 URL 处理",
    "脱敏后数值的下游用途"
   ],
   "routeElsewhere": [
    "凭据管理与轮换：调用方安全边界"
   ]
  },
  {
   "id": "foundation.harness.errors",
   "intent": "定义 Harness 机制错误类型与稳定错误类，统一错误分类",
   "useWhen": [
    "需要抛出带稳定 kind 的 HarnessError"
   ],
   "doNotUseWhen": [
    "需要定义业务错误语义"
   ],
   "prerequisites": [],
   "inputs": [
    "错误 kind、上下文"
   ],
   "outputs": [
    "带稳定 kind 的错误对象"
   ],
   "sideEffects": [
    "无副作用（纯函数）"
   ],
   "failureSemantics": [
    "非法 kind 调用抛错"
   ],
   "invariants": [
    "HARNESS_EXCLUSIONS 明确排除 release-state / remote-network-access / business-semantics / workflow-orchestration / model-calls / git-writes"
   ],
   "ownedByCaller": [
    "错误业务归因"
   ],
   "routeElsewhere": [
    "业务语义：留在调用方"
   ]
  },
  {
   "id": "foundation.kit.scaffold",
   "intent": "在新项目骨架中生成精确集合的托管文件（原子 + 路径收容），不覆盖非空存量仓",
   "useWhen": [
    "需要为新技能族项目生成最小可验证骨架",
    "目标目录为空或仅含可收容内容"
   ],
   "doNotUseWhen": [
    "需要覆盖已存在的非空存量仓（应改用 adopt-plan）"
   ],
   "prerequisites": [
    "目标为可写空目录",
    "Node >= 22.22.2"
   ],
   "inputs": [
    "目标根、骨架选项（id 等）"
   ],
   "outputs": [
    "精确集合的托管骨架文件"
   ],
   "sideEffects": [
    "在受收容目标创建文件（原子 + 收容）"
   ],
   "failureSemantics": [
    "非空目标、非法 kebab id 抛错"
   ],
   "invariants": [
    "只写空目标、原子 + 收容",
    "骨架集合与 scaffold-conformance fixture 一致"
   ],
   "ownedByCaller": [
    "业务项目内容"
   ],
   "routeElsewhere": [
    "存量采用：转 adopt-plan"
   ]
  },
  {
   "id": "foundation.kit.adopt-plan",
   "intent": "对已存在的存量仓做严格只读盘点（分类、嵌套仓发现、迁移清单、完成判定），不写文件、不自动迁移",
   "useWhen": [
    "需要把存量仓分类为 direct-adoption / compatibility-layer / keep-business / foundation-gap",
    "需要为迁移生成 profile 草稿（采用声明与 overrides）或完成判定"
   ],
   "doNotUseWhen": [
    "需要自动改写存量仓（禁止写文件、禁止自动迁移）"
   ],
   "prerequisites": [
    "目标仓存在且可只读访问"
   ],
   "inputs": [
    "目标根、迁移清单路径"
   ],
   "outputs": [
    "采用分类、完成判定、profile 草稿（仅输出，不落盘）"
   ],
   "sideEffects": [
    "无文件写入（严格只读）",
    "可能触发只读 git 探测"
   ],
   "failureSemantics": [
    "例外缺字段、未退出旧实现则完成判定为 false"
   ],
   "invariants": [
    "不写文件、不自动迁移"
   ],
   "ownedByCaller": [
    "存量业务代码的迁移决策"
   ],
   "routeElsewhere": [
    "真正迁移执行：调用方负责"
   ]
  },
  {
   "id": "foundation.kit.projection",
   "intent": "按投影清单把受管事实机械投影到目标（如 public 镜像），全校验通过后才写，任一失败零写/回滚",
   "useWhen": [
    "需要把权威数据投影到 public 快照或发布镜像",
    "需要保证投影与目标一致"
   ],
   "doNotUseWhen": [
    "需要覆盖 handwritten 文件（禁止）"
   ],
   "prerequisites": [
    "投影清单已登记"
   ],
   "inputs": [
    "投影清单、目标根",
    "计划闭包（previousOwnedClosure / externalCandidateClosure）经公共入口 buildProjectionClosure 构造，不复刻 Kit 私有排序、序列化与摘要算法"
   ],
   "outputs": [
    "投影文件（仅在校验全部通过时）"
   ],
   "sideEffects": [
    "在受收容目标写投影文件",
    "两阶段：全校验后才写，失败回滚"
   ],
   "failureSemantics": [
    "未授权、手写冲突、越界、内容冲突均抛错且不残留"
   ],
   "invariants": [
    "不覆盖 handwritten 文件",
    "任一校验失败零写"
   ],
   "ownedByCaller": [
    "投影内容的业务含义"
   ],
   "routeElsewhere": [
    "远端发布：转 release-skill"
   ]
  },
  {
   "id": "foundation.kit.check",
   "intent": "只诊断不修复：运行 contracts/drift/closure/version/docs/git/identity/boundary/platform 九类检查，输出发现（findings）",
   "useWhen": [
    "需要发现工程不一致但不自动修改",
    "需要按 --only 缩小检查范围"
   ],
   "doNotUseWhen": [
    "需要自动修复（禁止，check 不写修复）"
   ],
   "prerequisites": [],
   "inputs": [
    "--only 取值：contracts|drift|closure|version|docs|git|identity|boundary|platform"
   ],
   "outputs": [
    "发现清单；退出码 findings=1、mechanism=2"
   ],
   "sideEffects": [
    "无文件写入（只读诊断）"
   ],
   "failureSemantics": [
    "findings 退出码 1；mechanism 拒绝退出码 2"
   ],
   "invariants": [
    "CHECK_CLASSES 为九类闭集，不扩张"
   ],
   "ownedByCaller": [
    "发现项的业务处置"
   ],
   "routeElsewhere": [
    "自动修复执行：调用方"
   ]
  },
  {
   "id": "foundation.kit.report",
   "intent": "以 CLI 子动作编排人类报告：projection report 渲染、check report 分级，默认只写 stdout",
   "useWhen": [
    "需要从已渲染 model 产出报告文本",
    "需要对报告做分级检查"
   ],
   "doNotUseWhen": [
    "需要从开放业务输出自由编报告（禁止）"
   ],
   "prerequisites": [
    "已存在 Harness report-model"
   ],
   "inputs": [
    "report-model、--out/--binding 选项"
   ],
   "outputs": [
    "Markdown 文本；--out/--binding 才落盘"
   ],
   "sideEffects": [
    "默认只写 stdout；显式 --out/--binding 才写受收容文件"
   ],
   "failureSemantics": [
    "硬失败计为发现；非法参数 reject"
   ],
   "invariants": [
    "报告由机器结果确定性渲染"
   ],
   "ownedByCaller": [
    "报告结论解读"
   ],
   "routeElsewhere": [
    "报告机制：转 Harness report"
   ]
  },
  {
   "id": "foundation.kit.git-probe",
   "intent": "以只读白名单探测 Git 状态与事实，供诊断与采用盘点使用，不执行任何 Git 写操作",
   "useWhen": [
    "需要只读发现当前 Git 状态（status/ls-files/check-ignore）",
    "需要为采用盘点提供 Git 事实"
   ],
   "doNotUseWhen": [
    "需要 Git 写操作（stage/commit/push/tag，明确禁止）"
   ],
   "prerequisites": [],
   "inputs": [
    "目标根"
   ],
   "outputs": [
    "Git 状态与事实（只读）"
   ],
   "sideEffects": [
    "只读调用 git status/ls-files/check-ignore（参数向量冻结）"
   ],
   "failureSemantics": [
    "不在白名单的参数向量被拒绝"
   ],
   "invariants": [
    "GIT_READ_ONLY_ALLOWLIST 限定可调用子命令"
   ],
   "ownedByCaller": [
    "Git 写操作授权"
   ],
   "routeElsewhere": [
    "Git 写操作：见 Git 生命周期指南，Foundation 不拥有"
   ]
  },
  {
   "id": "foundation.kit.host",
   "intent": "显式选择随包或调用方提供的有限宿主 Profile 集合与受信 driver，提供规范身份解析、describe/build/probe/plan、受限的本地 install/update 以及只读同级适配器验证；uninstall 始终要求人工恢复",
   "useWhen": [
    "需要解析已登记宿主或有限 Profile alias",
    "需要探测、构建、规划或本地 install/update 宿主接入",
    "需要在不写入目录的前提下验证调用方拥有的同级适配器投影根"
   ],
   "doNotUseWhen": [
    "需要远端宿主发布、自动信任或删除式 uninstall",
    "需要用同级验证替代领域语义，或借此获得 install/apply 生命周期能力",
    "需要 Qoder 生命周期 driver（该宿主为 manual，不授予生命周期能力）"
   ],
   "prerequisites": [
    "宿主 Profile 已在 profiles/hosts 登记，alias 也必须来自有限集合；npm 消费者可显式选择 Kit 随包投影根",
    "受信 driver 仅 claude-version-v1 / codex-version-v1"
   ],
   "inputs": [
    "宿主标识、有限 Profile、probe/plan 选项或已验证的本地操作输入"
   ],
   "outputs": [
    "规范宿主身份、独立 probe fact、构建产物、plan、本地操作结果或只读同级验证结果"
   ],
   "sideEffects": [
    "build/materialize 在受收容目标写产物",
    "probe 默认不 spawn",
    "verifyHostPeers 只读取调用方拥有的 peer 根，不写入 peer 目录"
   ],
   "failureSemantics": [
    "未绑定验证 driver 的宿主（如 codebuddy）在 spawn 前拒绝，标记 preflight-rejected",
    "uninstall 返回 manual-recovery-required 且不删除文件",
    "缺 probe facts、未知投影类别、身份伪造或 scope/anchor 冲突均失败关闭"
   ],
   "invariants": [
    "HOST_DRIVER_IDS 仅两个受信 driver",
    "九项能力事实逐项输出，update 必须绑定既有摘要；manual 投影类别不授予 build/plan/apply 生命周期能力"
   ],
   "ownedByCaller": [
    "宿主业务语义"
   ],
   "routeElsewhere": [
    "远端宿主发布和自动信任：明确 unsupported",
    "Qoder 生命周期 driver：unsupported"
   ]
  },
  {
   "id": "foundation.kit.licensing",
   "intent": "加载并校验 Profile 授权数据，生成许可证/声明/身份记录内容",
   "useWhen": [
    "需要按 Profile 生成 LICENSE/NOTICE/身份记录",
    "需要校验授权 Profile 合法性"
   ],
   "doNotUseWhen": [
    "需要执行业务授权决策（语义由调用方）"
   ],
   "prerequisites": [
    "profiles/licensing/registry.json + schema.json 存在"
   ],
   "inputs": [
    "Profile 标识、变体选择"
   ],
   "outputs": [
    "许可证/声明/身份记录文本"
   ],
   "sideEffects": [
    "无副作用（纯函数生成）"
   ],
   "failureSemantics": [
    "多变体未指定、非法 Profile 抛错"
   ],
   "invariants": [
    "默认取 registry 第一变体，多变体须显式选择"
   ],
   "ownedByCaller": [
    "授权业务语义"
   ],
   "routeElsewhere": [
    "授权决策：留在调用方"
   ]
  },
  {
   "id": "foundation.kit.identity-check",
   "intent": "加载身份记录与清单，检查身份漂移并对照 Profile 校验一致性",
   "useWhen": [
    "需要检测 package/identity 漂移",
    "需要对照 Profile 校验身份"
   ],
   "doNotUseWhen": [
    "需要自动修复漂移（check 不修复）"
   ],
   "prerequisites": [],
   "inputs": [
    "目标根、Profile 标识"
   ],
   "outputs": [
    "漂移发现、校验结论"
   ],
   "sideEffects": [
    "只读读取目标文件"
   ],
   "failureSemantics": [
    "漂移或校验失败产出 findings"
   ],
   "invariants": [
    "不修改目标文件"
   ],
   "ownedByCaller": [
    "漂移业务处置"
   ],
   "routeElsewhere": [
    "自动修复：调用方"
   ]
  },
  {
   "id": "foundation.kit.entry-check",
   "intent": "读取入口契约声明，并对每个入口执行物理存在、逻辑名一致、人工入口注册、副作用类别与令牌预算五项检查",
   "useWhen": [
    "需要校验入口契约声明与物理 SKILL.md 的一致性",
    "需要检查入口逻辑名、副作用类别与令牌预算"
   ],
   "doNotUseWhen": [
    "需要修复声明或入口（check 只诊断不修复）"
   ],
   "prerequisites": [],
   "inputs": [
    "项目根（携带 skill-family.entry-contract.json 与 package.json）"
   ],
   "outputs": [
    "入口检查报告（kind skill-family.entry-check-report）与 findings"
   ],
   "sideEffects": [
    "只读读取声明、package.json 与入口文件"
   ],
   "failureSemantics": [
    "声明缺失时作为数据而非发现",
    "各项检查失败产出不同 kind 的 finding"
   ],
   "invariants": [
    "不修改任何文件",
    "不新增第五个顶层命令，落在 check entries 子动作"
   ],
   "ownedByCaller": [
    "声明与入口的整改"
   ],
   "routeElsewhere": [
    "自动整改：调用方"
   ]
  },
  {
   "id": "foundation.kit.relock",
   "intent": "运行受控 relock 事务：将新手写文件登记进 .foundation/file-registry.json，并以当前字节重算 skill-family.managed-file-lock.json，单次 fail-closed 操作",
   "useWhen": [
    "需要把新手写文件纳入闭域而不手改 registry",
    "需要在登记后以当前字节重算受管文件锁"
   ],
   "doNotUseWhen": [
    "需要合法化已漂移的受管字节（relock 拒绝漂移）",
    "需要登记符号链接或非常规文件（拒绝）"
   ],
   "prerequisites": [],
   "inputs": [
    "携带 .foundation/file-registry.json 与 skill-family.managed-file-lock.json 的项目根"
   ],
   "outputs": [
    "relock 报告（kind skill-family.relock-report）"
   ],
   "sideEffects": [
    "只写两个受收容状态文档：registry 与受管文件锁"
   ],
   "failureSemantics": [
    "每次拒绝都零写入，目标不被触碰",
    "半更新状态绝不呈现为成功"
   ],
   "invariants": [
    "不新增第五个顶层命令，落在 check relock 子动作",
    "新锁先绑定新 registry 字节，再提交任一文档"
   ],
   "ownedByCaller": [
    "relock 前对已漂移受管字节的对账"
   ],
   "routeElsewhere": [
    "自动整改：调用方"
   ]
  },
  {
   "id": "foundation.kit.cli",
   "intent": "提供 skill-family-kit CLI 入口，分派四个顶层命令与子动作，并在入口处拒绝变更旗标",
   "useWhen": [
    "需要通过命令行运行 scaffold/adopt-plan/projection/check",
    "需要运行 report/host 子动作"
   ],
   "doNotUseWhen": [
    "需要第五个顶层命令（命令集合固定为 4，不扩张）"
   ],
   "prerequisites": [
    "Node >= 22.22.2"
   ],
   "inputs": [
    "argv"
   ],
   "outputs": [
    "命令结果；退出码 ok=0/findings=1/rejected=2"
   ],
   "sideEffects": [
    "依命令产生受收容文件写入或只读探测"
   ],
   "failureSemantics": [
    "未知命令、拒绝旗标（如 --apply）退出码 2"
   ],
   "invariants": [
    "TOP_LEVEL_COMMANDS 固定 4 个",
    "REFUSED_MUTATION_FLAGS 在 parseOptions 入口即拒"
   ],
   "ownedByCaller": [
    "命令的业务目标"
   ],
   "routeElsewhere": [
    "第 5 个命令：禁止新增"
   ]
  },
  {
   "id": "foundation.profile.extension-spi",
   "intent": "声明宿主与项目形态差异的扩展机制，并消费 skill-family-engineering-kit/profile-spi 公共投影：把 differences（adds/overrides/removes）与开放扩展点（host-projection/artifact-render/surface-scan）作为纯数据 Profile 输入校验",
   "useWhen": [
    "需要声明项目形态差异而不改公共核心",
    "需要把扩展点数据资源注入稳定 SPI",
    "需要从 skill-family-engineering-kit/profile-spi 加载公共 SPI Schema 并调用 verifyProfile"
   ],
   "doNotUseWhen": [
    "需要把业务语义塞进公共核心（coreOwned 目标禁入）",
    "需要把可执行脚本放进 Profile（入口必须为 JSON 数据资源）"
   ],
   "prerequisites": [
    "Profile 为声明式差异，不反向依赖公共核心"
   ],
   "inputs": [
    "profileRoot、descriptorRelPath"
   ],
   "outputs": [
    "SPI 结果码（SPE0000/1001..1007），以及公共 base/extended Schema 加载器"
   ],
   "sideEffects": [
    "无副作用（只读校验 Profile）"
   ],
   "failureSemantics": [
    "SPE1004：带可执行扩展名的 entrypoint 在读取字节前即拒绝",
    "越界目标或非法差异结构报错"
   ],
   "invariants": [
    "coreOwned = packages/commands/namespacePrefixes 为禁入目标",
    "entrypoint 必须为 JSON 数据资源",
    "公共投影中的三个 SPI JSON 资源与 Contracts base Schema 保持逐字节一致"
   ],
   "ownedByCaller": [
    "差异的业务语义"
   ],
   "routeElsewhere": [
    "公共核心变更：须走 Contracts/Harness/Kit"
   ]
  },
  {
   "id": "foundation.profile.public-plugin",
   "intent": "公开样例 Profile：以 public-plugin 声明三个 adds 差异与三个 SPI 数据资源，作为 Profile 形态的可读实例",
   "useWhen": [
    "需要参考一个符合规范的公开 Profile 实例",
    "需要理解 Profile descriptor 与 SPI 资源如何挂接"
   ],
   "doNotUseWhen": [
    "需要把私有 Profile 或真实业务数据写进公开文档（禁止泄漏）"
   ],
   "prerequisites": [
    "base.contractsVersion = 1.10.0"
   ],
   "inputs": [
    "Profile descriptor 与各 SPI 数据资源"
   ],
   "outputs": [
    "可被 verifyProfile 通过的公开 Profile"
   ],
   "sideEffects": [
    "无副作用（声明数据）"
   ],
   "failureSemantics": [
    "descriptor 不符合 schema 时报错"
   ],
   "invariants": [
    "仅使用公开或完全虚构样例"
   ],
   "ownedByCaller": [
    "Profile 业务含义"
   ],
   "routeElsewhere": [
    "私有 Profile：不进入公开文档"
   ]
  },
  {
   "id": "foundation.profile.licensing",
   "intent": "声明授权数据权威（registry + schema），由 Kit licensing 入口经契约校验器执行，默认取第一变体",
   "useWhen": [
    "需要定义授权数据变体",
    "需要为 Kit licensing 提供数据权威"
   ],
   "doNotUseWhen": [
    "需要执行业务授权决策（语义由调用方）"
   ],
   "prerequisites": [
    "registry.json + schema.json 存在"
   ],
   "inputs": [
    "授权变体声明"
   ],
   "outputs": [
    "供 Kit 加载的授权数据"
   ],
   "sideEffects": [
    "无副作用（声明数据）"
   ],
   "failureSemantics": [
    "多变体未指定则加载失败"
   ],
   "invariants": [
    "所有商业载荷当前关闭"
   ],
   "ownedByCaller": [
    "授权业务语义"
   ],
   "routeElsewhere": [
    "授权执行：调用方"
   ]
  },
  {
   "id": "foundation.profile.hosts",
   "intent": "登记有限的跨平台宿主 descriptor 集合，表达受信、手动、developer-preview 与 unsupported 成熟度状态",
   "useWhen": [
    "需要登记 supported、manual、developer-preview 或 unsupported 宿主差异",
    "需要为宿主接入提供声明数据"
   ],
   "doNotUseWhen": [
    "需要登记 Qoder 生命周期 driver（该宿主为 manual，仅登记验证 driver）"
   ],
   "prerequisites": [
    "宿主 descriptor 绑定受信 driverId"
   ],
   "inputs": [
    "宿主标识、descriptor 字段"
   ],
   "outputs": [
    "宿主 registry 与 descriptor"
   ],
   "sideEffects": [
    "无副作用（声明数据）"
   ],
   "failureSemantics": [
    "qoder 标记 manual，手动宿主不隐式获得生命周期 driver"
   ],
   "invariants": [
    "claude/codex support=supported 且绑定 driverId；qoder support=manual 且仅绑定验证 driver（qodercli-print-v1），无生命周期 driver"
   ],
   "ownedByCaller": [
    "宿主业务语义"
   ],
   "routeElsewhere": [
    "Qoder 生命周期 driver：unsupported"
   ]
  },
  {
   "id": "foundation.unsupported.host-apply",
   "intent": "远端或通用宿主 apply 仍稳定拒绝；受限的本地 applyHostPlan 只执行已登记计划",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要远端或通用修改宿主运行环境的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "refuseHostApply 抛错；applyHostPlan 只处理已登记的本地计划边界"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "调用即抛错，CLI 层 host-apply 子动作同样拒绝"
   ],
   "invariants": [
    "通用或远端 apply 稳定拒绝"
   ],
   "ownedByCaller": [
    "宿主接入的最终落地"
   ],
   "routeElsewhere": [
    "宿主应用逻辑：调用方或后续版本"
   ]
  },
  {
   "id": "foundation.unsupported.host-install-update-uninstall",
   "intent": "远端宿主生命周期和删除式 uninstall 仍不支持；本地 install/update 仅限摘要绑定的已登记计划",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要远端生命周期、自动信任或删除式 uninstall 的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "uninstall 要求人工恢复；本地 install/update 仅执行已登记计划"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "uninstall 不删除文件并直接拒绝；远端生命周期没有 Foundation 入口"
   ],
   "invariants": [
    "只有本地 install/update 计划可执行；uninstall 仍拒绝"
   ],
   "ownedByCaller": [
    "宿主生命周期管理"
   ],
   "routeElsewhere": [
    "宿主生命周期：外部工具或后续版本"
   ]
  },
  {
   "id": "foundation.unsupported.binary-adapter-source",
   "intent": "adapter source 的 content 仅支持 string（utf8 文本闭包），二进制投影不在范围",
   "useWhen": [],
   "doNotUseWhen": [
    "需要把二进制资源纳入 adapter 投影"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "无（明确不支持二进制）"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "非 string content 校验失败"
   ],
   "invariants": [
    "adapter source content 类型固定为 string，仅 utf8"
   ],
   "ownedByCaller": [
    "二进制资源处理"
   ],
   "routeElsewhere": [
    "二进制处理：外部工具"
   ]
  },
  {
   "id": "foundation.unsupported.remote-publish",
   "intent": "远端发布与全部远端写入归 release-skill，Foundation 不拥有",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要发布到 npm/GitHub/Registry 或远端写入的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "无（转 release-skill）"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "Foundation 不提供任何远端写入入口"
   ],
   "invariants": [
    "contracts doesNotOwn remote writes；harness HARNESS_EXCLUSIONS 含 remote-network-access；kit FORBIDDEN_SIDE_EFFECTS 含 publish/remote-write"
   ],
   "ownedByCaller": [
    "发布流程"
   ],
   "routeElsewhere": [
    "发布：release-skill"
   ]
  },
  {
   "id": "foundation.unsupported.business-state-machine",
   "intent": "业务状态机、任务节点、重试、终态、记忆等语义不纳入 Foundation，state-store 只提供底座",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要在 Foundation 定义 workflow 状态机或业务终态的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "无（转 loop-agent）"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "不应在 Foundation 内实现业务状态转移"
   ],
   "invariants": [
    "Event meaning and reducer transitions remain consumer-owned"
   ],
   "ownedByCaller": [
    "业务状态机语义"
   ],
   "routeElsewhere": [
    "任务/重试/返工/验收：loop-agent"
   ]
  },
  {
   "id": "foundation.unsupported.model-orchestration",
   "intent": "模型编排与工作流编排不在 Foundation 范围，仅提供业务中立机制",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要模型调用或工作流编排的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "无（转相应编排层）"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "Foundation 不含模型调用或工作流引擎"
   ],
   "invariants": [
    "harness HARNESS_EXCLUSIONS 含 workflow-orchestration / model-calls；contracts doesNotOwn generation"
   ],
   "ownedByCaller": [
    "编排语义"
   ],
   "routeElsewhere": [
    "编排：相应消费者或编排层"
   ]
  },
  {
   "id": "foundation.unsupported.domain-audit-semantics",
   "intent": "领域审计语义与最终接受/拒绝结论属外部独立审阅，Foundation 只提供审计表面（canonical + digest）",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要 Foundation 拥有领域审计 oracle 或语义结论的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "无（转独立审计消费者）"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "Foundation 不承载领域审计语义"
   ],
   "invariants": [
    "audit-surface 仅做确定性序列化，不含语义"
   ],
   "ownedByCaller": [
    "审计语义结论"
   ],
   "routeElsewhere": [
    "领域审计：独立审计消费者"
   ]
  },
  {
   "id": "foundation.unsupported.git-writes",
   "intent": "Git 写操作（stage/commit/push/tag/release）不在 Foundation 范围，仅提供只读探测",
   "useWhen": [],
   "doNotUseWhen": [
    "任何需要 Foundation 执行 Git 写操作的场景"
   ],
   "prerequisites": [
    "无"
   ],
   "inputs": [
    "无"
   ],
   "outputs": [
    "无（转 Git 生命周期指南授权流程）"
   ],
   "sideEffects": [
    "无"
   ],
   "failureSemantics": [
    "Foundation 不提供 Git 写入入口"
   ],
   "invariants": [
    "harness HARNESS_EXCLUSIONS 含 git-writes；kit git-init/commit/push/tag 为禁写"
   ],
   "ownedByCaller": [
    "Git 写操作授权"
   ],
   "routeElsewhere": [
    "Git 写操作：Git 生命周期指南"
   ]
  },
  {
   "id": "foundation.kit.qoder-verification",
   "intent": "Qoder 自 0.12.0 起为 manual 宿主（Descriptor maturity=manual）：通过冻结的 qodercli-print-v1 验证 driver（能力 stability=candidate）在 fresh 工作区执行一次受约束的真实宿主验证",
   "useWhen": [
    "需要为升级消费者请求 Qoder 的 candidate 真实宿主验证"
   ],
   "doNotUseWhen": [
    "需要 Qoder 的 build、plan、apply、通用 install/update/uninstall 或 rollback 生命周期能力"
   ],
   "prerequisites": [
    "qoder 可执行文件存在且已登录；qoder 静态预检与 fresh 工作区布局检查通过"
   ],
   "inputs": [
    "Qoder 宿主 Profile 与验证 driver 绑定"
   ],
   "outputs": [
    "一次受约束真实执行的 observed、failed 或 rejected 结果（额度与错误码详情不进公共结果）"
   ],
   "sideEffects": [
    "在 fresh 工作区执行一次 qoder CLI；写入私有证据与快照"
   ],
   "failureSemantics": [
    "静态预检失败在 spawn 前拒绝并标记 preflight-rejected；额度用尽等执行失败标记 execution-failed"
   ],
   "invariants": [
    "qoder 不获得任何生命周期 driver；九项 probe 事实仍为 unknown/driver-limited"
   ],
   "ownedByCaller": [
    "Qoder 接入与真实发布门"
   ],
   "routeElsewhere": [
    "Qoder 生命周期能力：外部工具或后续版本"
   ]
  },
  {
   "id": "foundation.contracts.quickstart-profile-candidate",
   "intent": "通过 skill-family-contracts/quickstart-profile 公开 Quickstart Profile v2 协议、按规范 $id 索引的 Schema 集合和冻结的八项历史 ID 迁移表，供锁定精确版本的接入试验使用",
   "useWhen": [
    "需要在提议进入冻结登记表前检查或校验候选 Resource、Task、Result 形状",
    "调用方能够锁定 skill-family-contracts 精确版本，并把候选能力隔离在自身稳定 API 之外"
   ],
   "doNotUseWhen": [
    "需要已进入登记表或兼容性已冻结的合同",
    "需要 Foundation 解释领域审计语义"
   ],
   "prerequisites": [
    "安装导出 skill-family-contracts/quickstart-profile 的精确 skill-family-contracts 版本",
    "Node >= 22.22.2"
   ],
   "inputs": [
    "文档种类：resource、task 或 result",
    "待校验的候选文档"
   ],
   "outputs": [
    "候选 Schema 副本、八项旧 ID 到规范 ID 的冻结映射，或包含 valid、errors 与规范化 data 的校验结果"
   ],
   "sideEffects": [
    "不写文件系统、Git、网络或进程状态"
   ],
   "failureSemantics": [
    "未知文档种类抛出 TypeError",
    "候选文档无效时返回 valid:false 与 Ajv 发现"
   ],
   "invariants": [
    "唯一业务中立操作为 execute-method；method 标识与领域 Schema 继续归消费者所有",
    "候选 Schema 不进入 src/registry.json，也不扩张 42 类稳定对象",
    "稳定性为 candidate：主动升级候选版本时须复验合同",
    "历史入口和八个 Schema ID 只迁移一次；晋升 stable 不再要求改合同身份，但取得新发布承诺仍须更新精确 pin"
   ],
   "ownedByCaller": [
    "method、parameters、evidence 与 domainResult 的领域含义",
    "是否采用或封装候选 API 的决定"
   ],
   "routeElsewhere": [
    "冻结的生产合同：使用 skill-family-contracts 稳定包根导出",
    "领域审计结论：转独立审计消费者"
   ]
  },
  {
   "id": "foundation.harness.quickstart-profile-candidate",
   "intent": "通过 skill-family-harness-node/quickstart-profile 构造并复验候选 Task/Result 交换，并通过固定机制桥接调用已登记的通用机制",
   "useWhen": [
    "需要开展早期接入试验，把受收容的 observation 文件绑定到候选 Task 与终态 Result",
    "需要为锁定精确版本的候选交换取得结构化、不抛出的复验结果",
    "宿主不能直接导入多个 Foundation 模块，需要通过 read-file-strict 读取冻结权威文件"
   ],
   "doNotUseWhen": [
    "需要领域审计器、method 选择器、重试编排或生命周期所有者",
    "需要兼容性已冻结的 Quickstart API"
   ],
   "prerequisites": [
    "把 skill-family-contracts、skill-family-harness-node 与 skill-family-engineering-kit 精确锁定到 0.10.0；仅在采用产品字节变化时重建受管 Bundle",
    "observation 路径与 read-file-strict 路径受调用方提供的 root 收容"
   ],
   "inputs": [
    "受收容根与 observation 路径",
    "operation 身份、method、parameters 与 run/stage/attempt correlation",
    "待复验的候选 Task 与 Result 文档",
    "read-file-strict 请求：闭合的 root、path、encoding? 与 expectedSha256? 参数"
   ],
   "outputs": [
    "Observation Resource、候选 Task、终态 Result 或结构化交换复验结果",
    "read-file-strict 回执；UTF-8 内容为字符串，二进制内容为标准 Buffer JSON 形态"
   ],
   "sideEffects": [
    "读取受收容的 observation 或权威文件，以计算或复验 sha256 摘要",
    "不写文件，不访问 Git 或网络"
   ],
   "failureSemantics": [
    "Profile 或绑定无效时，抛出式 API 以 SFC2004 与 details.kind=invalid-result 失败关闭",
    "verifyQuickstartExchange 把失败转成 {valid:false, code, message, details}",
    "read-file-strict 直接调用沿用核心 SFC2004 与 details.kind；JSON CLI 只承诺退出码 0/2 和 name/message 错误形态"
   ],
   "invariants": [
    "Result 必须绑定精确 Task 摘要、真实 Resource 字节、全局唯一 Resource id、operation 身份、correlation 字段与完整 evidence binding 集合",
    "read-file-strict 只转发既有 readFileStrict，不复制路径、读取或摘要算法，也不接受任意函数名",
    "稳定性为 candidate：主动升级候选版本时须复验合同",
    "历史入口和 Schema ID 迁移到规范身份后，晋升 stable 不再要求改合同身份；Bundle 是否重建由既有绑定输入合同决定"
   ],
   "ownedByCaller": [
    "审计 method 语义与 domainResult 解释",
    "重试、调度与生命周期决定"
   ],
   "routeElsewhere": [
    "稳定通用机制：使用 skill-family-harness-node 包根导出",
    "业务编排：转调用方或相应编排层"
   ]
  },
  {
   "id": "foundation.kit.quickstart-profile-candidate",
   "intent": "通过 skill-family-engineering-kit/quickstart-profile 构建确定性的 Quickstart Profile v2 离线 Bundle，并通过 adoption 与 skill-naming 规范入口使用历史候选机制",
   "useWhen": [
    "需要通过稳定投影授权边界，在目标中试用候选 Quickstart Schema 与 runner",
    "需要取得完整的来源、消费者 Schema、payload、工具版本与许可证 provenance"
   ],
   "doNotUseWhen": [
    "需要稳定 Quickstart API 或第五个 Kit 顶层命令",
    "需要绕过目标 manifest 授权或手写文件保护"
   ],
   "prerequisites": [
    "安装精确匹配的三个 Foundation 0.10.0 包版本",
    "targetPrefix 是受收容的 POSIX 相对路径"
   ],
   "inputs": [
    "受收容 targetPrefix、consumerSchemaRoot 与显式消费者 Schema 相对路径集合",
    "冻结的 sourceRepository 与 sourceBaseCommit 身份",
    "已安装 Contracts、Harness 与 Kit 的精确包字节"
   ],
   "outputs": [
    "投影 manifest 与 provenance 记录，包含 Foundation 来源、消费者 Schema、payload 摘要、工具版本与许可证",
    "携带 strict-read 源码和 provenance 的离线 runner，可调用固定 read-file-strict"
   ],
   "sideEffects": [
    "在内存中构建 manifest，并读取已安装包文件与显式消费者 Schema 文件",
    "不执行写入；调用方把 manifest 交给稳定 runProjection 后才发生受权写入"
   ],
   "failureSemantics": [
    "targetPrefix 无效时抛出 TypeError",
    "重复 Schema id、坏引用、混合方言、不支持的 format、路径越界或来源身份缺失时拒绝构建；runProjection 另行报告稳定投影失败"
   ],
   "invariants": [
    "Bundle 不含 node_modules 或运行时 Ajv，不依赖已安装 Foundation 包或网络",
    "受管 Bundle 从精确锁定的已安装包字节重建，不从 Foundation 工作树导入源码",
    "辅助函数不增加 Kit 顶层命令，也不绕过 runProjection",
    "稳定性为 candidate：主动升级候选版本时须复验合同",
    "历史入口和 Schema ID 迁移到规范身份后，晋升 stable 不再要求二次合同迁移；采用新发布仍须更新精确 pin"
   ],
   "ownedByCaller": [
    "返回 manifest 的检查与授权",
    "目标 file-registry 与 managed-file 声明"
   ],
   "routeElsewhere": [
    "普通受管投影：使用 Kit 稳定包根导出的 runProjection",
    "远端发布：转 release-skill"
   ]
  },
  {
   "id": "foundation.harness.filesystem-tree-observation",
   "intent": "从已绑定目录读取同次完整树事实，供消费者自行判断载荷是否可接受",
   "useWhen": [
    "需要读取普通文件、目录、空目录和权限事实",
    "需要在同一根绑定下重新观察实际内容"
   ],
   "doNotUseWhen": [
    "需要安装、恢复或删除目录",
    "需要事务快照或操作期间连续身份保护"
   ],
   "prerequisites": [
    "已规范化真实根目录和 createFilesystemRootBinding 返回的根绑定",
    "包内固定 Darwin/Linux 四平台原生实现可用"
   ],
   "inputs": [
    "{ root, rootBinding }"
   ],
   "outputs": [
    "filesystem-tree-observation 私有对象：排序成员、文件原始字节的 contentBase64、sha256、bytes、statMode 及 membersDigest"
   ],
   "sideEffects": [
    "只读文件系统访问，不写文件、不启动进程、不访问网络"
   ],
   "failureSemantics": [
    "非法参数抛 TypeError；机制失败沿 SFC2004 失败关闭",
    "不返回部分成员作为成功结果"
   ],
   "invariants": [
    "每次调用重新观察，不返回旧缓存",
    "观察成功与消费者接受载荷分离",
    "不接收忽略规则、预期表或回调"
   ],
   "ownedByCaller": [
    "载荷比较政策及其业务含义",
    "保存或公开结果时的敏感数据保护"
   ],
   "routeElsewhere": [
    "安装与调用使用 Kit 的插件验证入口",
    "发布授权由 release-skill 负责"
   ]
  },
  {
   "id": "foundation.kit.plugin-verification",
   "intent": "保留完整插件布局，分别报告输入、安装、发现与受限调用事实",
   "useWhen": [
    "需要验证冻结完整插件的本地载荷或有限公共渠道安装",
    "需要把安装观察与领域接受判断分开"
   ],
   "doNotUseWhen": [
    "需要通用驱动插件、自动重试、恢复或回滚",
    "需要由 Foundation 判定领域通过或发布完成"
   ],
   "prerequisites": [
    "三包精确版本一致，并提供冻结请求、私有路径绑定及 hostsRoot",
    "真实宿主和来源组合须另有资格证据；候选入口存在不等于组合已获资格"
   ],
   "inputs": [
    "runPluginVerification({ request, bindings, hostsRoot })",
    "plugin-verification-request：install-only 或 install-and-invoke；local-staged 或 public-channel"
   ],
   "outputs": [
    "plugin-verification-result：输入、安装、发现及调用事实分别记录",
    "原始输出和完整树观察保留在私有证据根"
   ],
   "sideEffects": [
    "创建新鲜安装树、会话与私有证据；有限渠道命令可能访问网络",
    "调用模式启动受限宿主；install-only 不运行模型"
   ],
   "failureSemantics": [
    "rejected、failed、indeterminate 分别保留拒绝、确定失败与边界不确定",
    "确定输出超限不能恢复为成功；未知终态保持不确定"
   ],
   "invariants": [
    "不覆盖已有安装，不自动重试或清理不确定现场",
    "保留 runHostVerification 和 verifyHostVerificationBindings 的单 Skill 合同",
    "完整树事实不替代消费者接受政策"
   ],
   "ownedByCaller": [
    "冻结源、工作负载、授权、认证与宿主资格",
    "领域判定、发布新鲜度、迁移及机制退出证明"
   ],
   "routeElsewhere": [
    "领域审阅交消费者",
    "发布、重试和任务编排交对应外部技能族"
   ]
  }
 ]
}
