Repository navigation
RFC: 从源头收敛 JEV 库与类型化协议 #186
Description
RFC: 从源头收敛 JEV 库与类型化协议
本 RFC 对应 #186。基线为 master 5f06ddd09a2d0540bb64be65cf9e153cbac668b9,实现以一个 PR 完成。首个版本尚未发布,直接采用最终结构;不引入库版本号、兼容层、迁移工具或旧格式恢复流程。
要解决的问题
Typed Claim 已由 #170 收敛。剩余重复来自候选和已发布程序的两套集合、把备份文件当成归档来源、把资格与 manifest 编码为协议里的 JSON 字符串,以及可执行内容和来源元数据混在同一类型中。
最终结构
{"claims":{},"reflexes":{}}- Claim 继续使用 Provider 的统一类型:type、context、有序 options。库记录为
{claim, task},直接组合,不再为扁平字段维护自定义序列化。 Program只包含执行定义与资格。Reflex在其外保存 Claim 归属、依赖摘要、archived和archive_reason。Program 是内容值,不是第三个库集合。- Claim 内容与 Program 各自生成内容 ID。来源任务、成员归属和归档不进入可执行内容摘要,不维护为兼容旧摘要而设的投影。
- 库只保存已发布程序和它们的归档定义。没有持久化 candidate、阻塞原因字段或候选恢复/晋升入口。
- 失败、取消或等待证据的源码与诊断保留在 Generation 记录和审计日志中。新的实际证据可以再次触发编译,不受候选状态门控。
- 替换成功时原定义在同一库内归档;保存失败则内存和原发布结果均不改变。归档不参与执行、编译覆盖或已发布数量限制,也不再扫描/生成备份库。
编译入口与验证
编译器只接收 JSON 产物或 null。源码必须是 js: 同步函数,并由产物声明 when、decide、参数 schema 和效果步骤;去掉裸源码、代码围栏和旧 suite 的读取路径,以及缺失入口描述的补造逻辑。所有效果都要求显式步骤与 occurrence,不再按 API 版本区别处理。
示例 arguments 只供本次回放,发布时去除。现有源码、参数、原生契约、效果身份、完整回放、入口报告与独立语义检查继续执行;缺少真实证据不能发布。原生工具的契约版本代表工具行为,独立于已删除的库存储版本概念。
Loader 严格检查最终结构、内容 ID、Claim 引用与容量。未知字段、损坏内容或无资格草稿直接报错,不重写文件。当前契约已变化的已发布定义在同库归档。限制为 32 个 Claim、16 个已发布程序、2 MiB 总库大小;归档同样受总字节限制。所有写入继续先同步落盘、再原子替换、最后发布内存。
协议与 Web
- 资格统一使用生成的 ReflexQualification,运行、持久化和协议快照共享同一类型。
- ReflexDefinition 直接携带 qualification、steps、parameters_schema、archived、archive_reason。删除 qualification_json、manifest_json、api_version、blocker 以及候选集合。
- UI 直接读取类型化字段,展示已发布程序、归档原因、实际机制检查和未覆盖分支。
- 事件保留发生时的完整定义快照,后续库变化不改变历史执行的解释。
- 测试数据和编译提示词同步采用当前结构,删除版本化测试命名与候选发布分支。
验收
- 编译失败、取消和等待证据不会持久化草稿,诊断仍可查阅。
- 未通过资格的程序不能发布;替换保存失败保留原发布结果与 Claim。
- 归档不改变 Program ID 或源摘要,不参与执行/覆盖,重新发布不能绕过数量上限。
- 旧字段、候选集合、错误 ID 和缺失 Claim 引用被严格拒绝。
- 类型化快照保留资格、步骤、参数和归档事实,快照修改不影响当前库。
- 默认与完整能力构建的 JEV 测试、Provider/Guardrail/Web 服务回归、生产 profile 编译复用链路、前端构建和 JEV 界面测试通过。
真实模型验收使用实际服务及独立业务 oracle;模拟推理测试和 UI 回放不能代替真实执行结论。
进一步收敛
- Claim 生成、事件和界面统一使用完整的
{"claims":[...]}对象;删除数组、围栏及空值的补偿解析。 - 编译与语义评审共享一份实际轨迹,系统及此前用户约束保留一次;报告使用已校验的 evidence/path 引用。验证器直接消费结构化回放结果,完整修复诊断不再逐边界复制给语义评审,也不再序列化后自行反解。
- 原生契约直接使用宿主快照,删除没有独立约束的转发类型与缓存开关。
- 删除 Guardrail off→auto、record 错误策略回退、--init 重写、gogo 输出参数重写、Harness 旧环境变量回退、无实际声明使用的配置字段迁移回调及数据库版本专用迁移建议。外部依赖协议与当前产品配置边界继续按其实际契约处理。
- 真实事件覆盖时间线、类型化资格和库面板;修复手机端库列表溢出导致的详情重叠。
实现与验证状态
实现及补充清理位于 PR #187:#187 。PR 已于 2026-10-25 合并至 master,合并提交 5ab5d6c8d2f646d9137bb9d2c4dfb7f77498adfe;本 issue 保持关闭。
默认与完整能力 JEV 测试、生产 AIScan profile 回归、Guardrail/配置/CLI/gogo/IOA/Web 回归、架构检查、vet、golangci-lint(0 issues)、前端构建通过;JEV Playwright 共 86 项通过,包含两项真实执行证据的界面验收。
使用用户指定网关的 deepseek-flash、真实 TypeSafe JEV 和 Chromium,从空库完成 Shadow DOM 客户保存、两次加购后结算的冷/热 Off/Auto 验证。最新代码重载其真实生成的库后,两场景正式热任务均完整接管,分别执行 6、8 次原生操作,主模型工具调用为 0,源码不变。重载的 Shadow DOM 额外预检有一次参数交接回退,未计为完整接管。
报销及提交后恢复未通过接管验收。已修复实际暴露的评审证据重复问题,同一真实轨迹离线输入降至 57,418 bytes;完整实测轮次业务正确,但普通模型生成复合命令,契约拒绝回放,未发布 Reflex。明确原生等待方式后的最后一轮仍未收敛到记录的原生调用,已主动中止并保留失败证据。没有放宽回放、效果契约或语义验证来制造成功。
生产组件的 Playwright 检查回放真实 AOP 事件与库;没有通过完整生产 Web 界面提交这些任务。尚不声称报销、弹窗、跨源 frame、文件传输、拖放或全程 token/费用节省已通过验证。失败、中断及缺失用量均保留,详细范围与复现命令见 docs/jev.md。
合并前补齐节点重载回归中的已移除 Guardrail off 测试输入,改用当前支持的 auto/safe,提交 99bd1d4e;节点、配置和 Guardrail race 测试通过。合并后的远端 CI 仍在运行。
Activity
[-]RFC: 以 Claim / Reflex 收敛 JEV 库模型与 DTO[/-][+]RFC: 收敛 JEV 库状态与 typed DTO(基于 claim/2)[/+][-]RFC: 收敛 JEV 库状态与 typed DTO(基于 claim/2)[/-][+]RFC: 从源头收敛 JEV 库与类型化协议[/+]M09Ic commentedon Oct 24, 2026
实现已完成,代码与最终 RFC 已统一。PR:#187
已移除持久化 candidate、版本分支、兼容/迁移/备份恢复路径;采用单一库与编译产物结构,资格与协议字段统一类型。
后端回归、生产 profile、架构检查、vet、golangci-lint、前端构建及 84 项 JEV 界面测试通过。缺少凭证,真实模型验收未运行。
按请求关闭 #186,PR #187 保持开放供评审,尚未合并。