失败与副作用矩阵¶
本页逐公共入口列出读写、spawn、Git、网络、残余状态与稳定错误码。它服务于调用方在接入前判断风险,并作为 capability-catalog.json 中 sideEffects 与 failureSemantics 字段的人类可读投影。所有事实以真实实现与负例测试为准。
符号约定:读=读取文件系统;写=写入文件系统;spawn=启动子进程;Git=读写 Git;网络=访问远端;残余=调用结束后仍留在磁盘/进程中的状态。
Contracts(纯函数层)¶
| 入口 | 读 | 写 | spawn | Git | 网络 | 残余状态 | 稳定错误码 |
|---|---|---|---|---|---|---|---|
validateDocument |
否 | 否 | 否 | 否 | 否 | 无(编译缓存仅驻留内存) | SFC1001/SFC1002/SFC1006 |
compileSchema / detectDialect |
否 | 否 | 否 | 否 | 否 | 无 | SFC1006/SFC1012 |
loadRegistry / findSchemaByObject / findProtocol |
否 | 否 | 否 | 否 | 否 | 无 | SFC1003/SFC1004 |
runChecks / collectUnresolvedRefs |
否 | 否 | 否 | 否 | 否 | 无 | SFC1002–SFC1010 |
verifyAllFixtures / verifyFixture |
否 | 否 | 否? 否 | 否 | 否 | 无 | SFC1010 |
ERROR_CODES / stableError |
否 | 否 | 否 | 否 | 否 | 无 | 冻结登记表,不新增 |
Contracts 全部为纯函数,无文件/Git/网络/进程副作用;错误对象含 stableError 与 details.kind,便于调用方分类。
Harness(机制层,受收容)¶
| 入口 | 读 | 写 | spawn | Git | 网络 | 残余状态 | 稳定错误码 |
|---|---|---|---|---|---|---|---|
validateContractDocument |
否 | 否 | 否 | 否 | 否 | 无(校验器缓存内存) | SFC 校验失败 |
resolveContained / readFileContained |
是(只读) | 否 | 否 | 否 | 否 | 无 | SFC2004(path-traversal/symlink-escape/realpath-escape) |
writeFileAtomic |
否 | 是(受收容) | 否 | 否 | 否 | 失败回滚临时文件 | SFC2004(atomic-write-failed) |
TemporaryWorkspace / withTemporaryWorkspace |
否 | 是(临时目录) | 否 | 否 | 否 | 退出时清理临时目录 | SFC2004(workspace-disposed) |
computeResourceClosure / digestBytes |
否 | 否 | 否 | 否 | 否 | 无 | SFC(声明/内容违规) |
parseRequest / processRequest |
否 | 否 | 否 | 否 | 否 | 无(纯函数管线) | SFC2004 |
validateReportModel / renderReportMarkdown / buildBinding / checkReport |
否 | 否 | 否 | 否 | 否 | 无(纯函数) | SFC3001/SFC3002/SFC3003 |
buildAdapterClosure / verifyAdapterBuildManifest |
否 | 否 | 否 | 否 | 否 | 无 | SFC2004(missing-resource) |
materializeAdapterBuild |
否 | 是(受收容,sibling + rename) | 否 | 否 | 否 | 无(原子 rename) | SFC2004 |
probeVersionVector |
否 | 否 | 默认否(需显式 --allow-host-spawn) |
否 | 否 | 无 | SFC2004 |
openStateStore / appendEvent / readEvents / writeSnapshot |
是 | 是(事件/快照/锁文件) | 否 | 否 | 否 | 事件日志 + 锁文件 | SFC2004(store-locked/链断裂) |
inspectStateStoreLock / recoverStateStoreLock |
是 | 是(仅恢复写锁) | 否 | 否 | 否 | 锁文件(单调 fencing) | SFC2004 |
Harness 的 HARNESS_EXCLUSIONS 明确排除 release-state、remote-network-access、business-semantics、workflow-orchestration、model-calls、git-writes。
Engineering Kit(工程命令层)¶
| 入口 | 读 | 写 | spawn | Git | 网络 | 残余状态 | 稳定错误码 / 退出码 |
|---|---|---|---|---|---|---|---|
scaffoldTarget |
否 | 是(受收容骨架,原子 + 收容) | 否 | 否 | 否 | 无(失败不留半成品) | SFC2004(target-not-empty) |
planAdoption / buildProfileDraft |
是 | 否 | 否 | 只读探测 | 否 | 无(stdout 输出) | SFC 完成判定 false |
runProjection |
是(读 manifest) | 是(受管路径,两阶段) | 否 | 否 | 否 | 无(失败零写/回滚) | SFC2004(unauthorized-path/handwritten-overwrite/conflict-drift) |
runChecks(check) |
是 | 否 | 否 | 只读白名单 | 否 | 无 | 退出码 1(发现)/ 2(机制) |
renderReportAction / checkReportAction |
是 | 仅 --out/--binding |
否 | 否 | 否 | 默认只写 stdout | SFC3001/SFC3002/SFC3003 |
probeGitState / probeGitFacts |
是 | 否 | 否 | 只读白名单 | 否 | 无 | SFC(越权参数拒绝) |
describeHost / resolveHostId / probeHost / buildHostAdapter / planHost / applyHostPlan |
是 | build/install/update 写(受收容;uninstall 不写) | probe 默认否 | 否 | 否 | 仅显式 authorizationRef |
SFC2004;远端 apply 与删除式 uninstall 稳定拒绝 |
loadLicensingProfile / generateLicenseContent 等 |
否 | 否(纯函数生成) | 否 | 否 | 否 | 无 | SFC(非法 Profile) |
checkIdentityDrift / validateIdentityAgainstProfile |
是 | 否 | 否 | 否 | 否 | 无 | findings |
cliMain / runCommand |
依命令 | 依命令 | 依命令 | 依命令 | 否 | 依命令 | 退出码 0/1/2 |
Kit 的 FORBIDDEN_SIDE_EFFECTS 含 git-init/commit/push/tag、publish、remote-write;REFUSED_MUTATION_FLAGS(含 --apply)在 CLI 入口即拒。
残余状态合集¶
- 原子写:失败时回滚临时文件,目标目录不留半成品。
- 临时工作区:退出(含异常路径)时清理。
- 状态存储:事件日志是唯一权威,snapshot 为派生缓存;崩溃遗留锁需调用方在 Foundation 外确认旧写者终止后显式恢复,不自动偷锁。
- 投影:任一校验失败整体拒绝、零写入;覆盖既有文件需声明
expect.sha256前置状态。 - adopt-plan / check:结构性只读,运行前后字节级零变化。
失败后调用方该做什么¶
- 校验失败(
SFC1001/SFC2002/SFC2003):检查输入是否满足目标 Schema 或参数合同,不重试已被冻结拒绝的登记。 - 收容失败(
SFC2004+path-traversal等):确认根目录与路径是否越界,不要把业务选择规则塞进 Foundation。 - 状态锁冲突(
store-locked):在 Foundation 之外确认旧写者已终止,再用精确匹配的 owner/fencing 调用恢复。 - check 发现(退出码 1):处置发现项,Kit 不自动修复。