zizi 0260bcd8e2 设计文档:SoT 同步与生成物重出
- 新版设计各域 SoT 按本轮实现同步:总体架构、模块设计、接口契约、数据模型、功能规格、文件设计与决策记录。
- 接口契约生成物重新导出(openapi 与前端客户端随契约一致)。
- 实现回顾与专项检查台账保留历史结论;本轮收尾发现另见 .agents.local 下的收尾报告与审查处置。
2026-09-18 01:15:18 +08:00

5.2 KiB
Raw Permalink Blame History

元数据投影与版本

新实例可由业务owner在作者创建事务中建立初始结构绑定,使用已发布的固定结构与表单投影;初次绑定不伪造审阅记录,也不能覆盖已有绑定。已有实例的结构升级仍按S01审阅、版本和影响处理合同执行。绑定创建与实例写入使用同一事务,任一校验失败共同回滚。

当前实例的编辑表单读取当前生效绑定;上次保存值时记录的结构快照用于解释历史,不能替代当前绑定。兼容结构升级可以先保留原值版本,后续编辑仍使用新绑定及当前用途投影;业务owner负责这两个版本的区分。

动态内容的字段变更使用内容内部的路径数组(对象键或数组索引)、set/remove动作及明确值。同一命令的路径不得重叠或借别名重复;索引由命令的数据基线保护。remove只删除可选对象字段,数组增删重排使用整数组set;含受限子字段的数组仅允许就地编辑其可编位置。整个对象替换也须保留不可编辑子值,不能因界面没有展示就删去。兼容的content字典按顶层字段set解释;逐叶编辑通过changes表达。

旧完整值由业务owner在受保护事务中读取,S04仅按结构和投影校验变更并产生规范值,最后仍由owner解析真实引用并写入实例。字段操作不含实例表名、物理列、SQL或作者身份,不成为跨业务的动态写入服务。

读取合同

结构查询指定 type_id、content_purpose、run_purpose 和明确结构绑定,返回 schema_id、schema_version、base_version、extension_version、effective_schema_hash 及规范化字段结构。显示名为中文,稳定技术身份与显示名分离。

业务对象的表单投影由所属模块组装结构和值,返回 target_ref、data_revision、effective_schema_hash、projection_version、允许字段、允许动作及 omitted_fields。S04 只提供结构和策略计算,不读取其他模块实例表。

projection_version 必须反映结构、字段策略、作者或任务授权、用途和影响字段集合的来源状态。不能只哈希 JSON Schema 后称为权限投影版本。

字段合同

字段结构包含稳定身份、类型、说明、必填、枚举、数组或对象结构、引用目标和用途声明。首批支持文本、数值、布尔、枚举、日期或时间、列表、嵌套对象和具名引用。日期值与故事内部纪年可以采用不同内容类型,不能强制把虚构纪年解析成现实日期。

uiVisible、userEditable、userSearchable、exportable 与 aiContext 分别表达,不互相蕴含。aiContext 接受布尔或 planning/generation/detection/extraction 的集合;它不替代 production/evaluation/maintenance 的运行隔离,未知用途拒绝。computed 只映射已登记计算,不允许作品上传执行表达式。

修改与启用

结构编辑产生候选版本。发布和启用分开;启用必须携带 command_id、候选版本及哈希、预期当前结构或绑定版本、作者审阅身份和明确变更范围。影响检查列出不兼容实例、待转换字段、任务和失效投影。

作品扩展只能增加允许的内容字段,不能改基础字段定义和系统保护属性。类型登记的实例维护者只能从代码登记的业务模块与生命周期族选择;不接受模块导入路径或表名。

实例写入

实例保存调用其所属模块的业务命令,携带 expected_data_revision、expected_effective_schema_hash、expected_projection_version 及类型化值。后端按当前身份、结构、投影和来源检查字段及真实引用,再交 S01 执行版本与事务保护。

固定 HTTP 外壳由静态代码合同生成客户端;作品动态字段由后端返回的运行时结构解释。不为每个作品生成另一份手写 Python 类或 TypeScript 类型,也不把全部实例声明为不校验的自由字典。

并发与失败

结构或投影在作者编辑期间变化时返回 SCHEMA_STALE 或 PROJECTION_STALE;数据变化返回 REVISION_CONFLICT。非法字段返回 FIELD_NOT_ALLOWED,停用字段返回 FIELD_DEPRECATED,类型或枚举错误返回 FIELD_INVALID,目标引用不符合范围返回 REFERENCE_INVALID 或 SCOPE_DENIED。

客户端保留仍允许的未提交内容,清理不再允许显示的缓存,不把失去权限的值反复重发。只有作者通过所属业务动作复核后才能形成新命令。

当前绑定和策略变化必须参与 S01 的提交点保护。读取旧结构用于历史解释,不意味着旧权限仍然有效。

贯通验收

使用全新作品新增人物属性,再登记一种沿用实体生命周期的新类型,依次执行表单编辑、抽取候选、检查、确认、时点查询、上下文裁剪、检索、导出和备份恢复;中途切换结构与撤回字段用途,验证旧请求拒绝且历史值仍可解释。M01—M08 的定义以元数据与结构演进为准。