# 流程定义精确表单版本契约(2026-10-23,R2 / R1) 流程关联表单时必须同时绑定 `formUuid` 与正整数 `formVersion`。保存显式关联、发布、启用统一调用 `GET /oapi/form/schema?schId=&uuid=&version=`,核对返回 UUID 和版本;不回落到当前版本。 未关联表单的独立流程(Mode C)仍可使用;孤立版本号不是未关联流程,必须拒绝。 UUID-only 存量定义不能发布或启用,必须重新选择明确版本。当前开发阶段不做存量迁移。 本轮不修改任何数据库;部署前核查 `def68` 的现有绑定即可。 FC 精确 schema 只返回 `publish_time != null` 的版本行。草稿不能作为发布契约。 已发布历史版本仍可按坐标读取,不要求它是头表当前版本;停用/软删的历史读取与原授权边界保持。 FC 将不存在、不可读、未发布版本统一为 `PARAM_ERROR(2)`,FL 不通过文案猜测资源存在性。 ## 稳定错误码与恢复动作 API 信封 `code` 使用下列数值;`msg` 仅用于展示,消费方不得解析文案判断重试。 | code / 名称 | 含义 | 恢复动作 | |---|---|---| | 46101 `VERSION_REQUIRED` | 已指定 UUID,未指定版本 | 重新绑定;发布/启用均阻断,不调用 FC | | 46102 `INVALID_COORDINATE` | 半个坐标、版本非正整数/非整数/溢出 | 修正请求;不盲目重试 | | 46103 `SCHEMA_UNAVAILABLE` | 网络、空响应、服务端故障等拉取失败 | 可重试;客户端每次最多请求 2 次 | | 46104 `SCHEMA_CONTRACT_VIOLATION` | 返回 UUID/版本缺失、不合法或不匹配 | 阻断;检查契约或重新选择坐标,不盲目重试 | | 46105 `RESOURCE_UNAVAILABLE` | FC 业务码 2 或 HTTP 404,指定发布资源不存在或不可读 | 检查资源/发布版本/读授权,不盲目重试 | | 46106 `ACCESS_DENIED` | SDK 身份/授权业务码 3、4 | 修复身份/授权后重试,不自动重放 | 坐标核验失败、资源不可用与身份拒绝均不在客户端重试循环内重复请求。 `SchemaUnavailableException` 与 `SchemaContractViolationException` 在公共边界分别翻译成错误码, 保留 cause;不存在被公共包装吞掉后无法命中的分类 catch。 启用只核验绑定,不覆盖此前发布的 `formContract` 快照;运行期继续使用流程版本里的原快照。 ## 验证与边界 `FlFormBindingTest` 覆盖发布/启用缺版本、非法版本、孤立版本、四类失败码和不落库、启用保留快照。 `FlowDefAdminServicePublishContractTest` 全部关联夹具带 v3,原表达式键查、类型桶查、域查红牌继续验证。 `FormCenterSchemaClientTest` 覆盖不合法返回版本、UUID 不符、按业务码分类及重试次数。 FC `OapiSchemaPublishedVersionTest` 验证真实服务层的草稿阻断和历史已发布版可读;其中仓储是桩, 不是数据库或 160 验收。