Files

5.9 KiB
Raw Permalink Blame History

工程信任系统

Yuxi 把 Agent 或开发者提交的实现视为待证伪候选。完成状态需要明确 Owner、真实系统事实、与风险匹配的 oracle、只读 gate 和可问责语义 Review 共同证明。提交者自述、测试数量和一次手工演示不能单独形成完成证据。

从请求、提案、实现、证据到收敛的日常顺序由 Yuxi Spec Loop 维护;本页只拥有信任闭环与证据等级。

权威模型:主张在语义 Owner 处闭合

Yuxi 不维护可独立编辑的中央 risk/claim inventory,也不要求 claim ID。中央清单会复制源码、数据约束、测试和 workflow 已经拥有的事实,最终形成需要人工同步的第二真相。

一个重要工程主张由最接近行为的语义 Owner 拥有,并在该 Owner 周围形成可追踪闭环:

闭环部分 当前权威
意图与外部结果 owning 用户/协议文档、API 契约或决策记录中的问题与决定
状态与副作用 实际写入代码、repository、数据约束及明确的 commit/publication 边界
独立 oracle 最接近风险、且与实现具有不同失败方式的 unit、integration、E2E、replay 或真实探针
负向案例 恢复目标缺陷或制造非法状态后会因正确原因失败的测试
执行后果 实际选择该 oracle 的阻断 workflow,或对语义取舍负责的 Reviewer
理由与代价 对应的 tracked decision record;当前行为仍以语义 Owner 为准

这些材料可以分布在各自正确的位置,但必须能从一次变更追踪到同一个行为。改变持久状态、信任边界、长生命周期、权限、公开兼容或模型体验时,PR 直接用自然语言列出受影响主张及其 Owner、观察边界、oracle、负向案例和未验证范围;不得用中央登记完成来替代真实闭环。

派生审计投影

scripts/verify_engineering_contracts.py 从当前 Owner-local 材料检查 decision lifecycle、workflow 接线、路径覆盖、分层 AGENTS 指令的链接/标题/预算和可机械判断的架构边界,并可临时输出审计投影:

python3 scripts/verify_engineering_contracts.py --report

该输出由仓库事实重新生成,不提交、不手工编辑,也不反向定义事实。删除投影后应能从同一代码、测试、decision 和 workflow 得到相同结果。Verifier 只证明引用、接线和部分边界检查真实存在;router/web 边界检查只覆盖静态可判部分,service 层事务、锁与 lease 语义仍由真实 PostgreSQL integration 证明。它也不判断目标是否值得、测试断言是否正确、oracle 是否真正独立、远端是否把检查设为 required,或某个 diff 是否被错误归类为 trivial。这些语义仍由 Reviewer 结合真实系统证据裁决。

证据等级

证据 证明什么 不能替代什么
Unit 纯逻辑、边界值、状态转换和失败分支 PostgreSQL、Redis、HTTP、worker 或浏览器真实语义
Integration 真实 API、认证、事务、锁和服务副作用 完整用户/模型 journey 与外部 provider 漂移
E2E Compose 中的 shipping entry、worker、SSE、文件/对象和最终业务结果 每个局部分支与确定性故障注入
Deterministic replay 不依赖真实 provider 的 assembled-path 回归 实时模型/provider 行为
Real probe 外部模型、浏览器或部署实例的现实校准 低噪声、每 PR 都可执行的阻塞 gate
Semantic Review 目标、取舍、oracle 独立性和 expected-output 语义 可机械判断的格式、引用、选择器和构建错误

每个 guard 都要证明目标缺陷会让它变红。Snapshot、fixture 和 expected output 只能显式更新,CI 只读验证。随机/并发测试失败必须保留可重放输入、seed 或数据库事实,不能用重试掩盖。

决策记忆

decisions/ 保存代码和当前文档无法表达的问题、why、替代方案、代价与验证。它不保存 Agent 推理流水账、Review 过程或迁移 checklist。implemented/ 是当前决定,proposed/rejected/ 不构成运行时权威,archived/ 是冻结历史。

普通代码注释和正式文档仍只描述当前行为、Owner、失败、时序和安全用法;不要把 decision rationale 复制到多个位置。

Gate 的运行与维护

python3 scripts/verify_engineering_contracts.py
python3 -m unittest scripts.test_verify_engineering_contracts

Gate 必须只读、失败可诊断、拥有明确 Owner,并保持有限延迟。低成本只读检查(trust.yml)在每个 PR 无条件阻塞;真实 Compose integration/E2Esystem-tests.yml 等按路径触发)只在匹配高风险范围时运行。高风险 Agent 主链路使用无外部密钥的 deterministic assembled-path E2E 阻断,real-provider-probe.yml 手工探针负责外部 provider 校准;两者不能互相冒充。Workflow、selector、skip 或 expected-output 更新都按生产代码审查;长期 flake、误报、绕过或无 consumer 的 gate 应及时修复或退役,禁止用新增规则掩盖既有缺陷。

运行时当前事实属于 ARCHITECTURE.md、对应代码 Owner 与测试;本页不复制 readiness、Run、LITE 或 checkpoint 契约。相关非显然取舍保存在 工程决策记录 的聚焦 implemented records 中,审计时从这些局部 Owner 派生,不维护另一份手工状态表。

事故反馈

只有已经逃逸且达到项目复盘门槛的高影响缺陷才形成正式 postmortem。每个符合门槛的事故有 Owner,说明真实影响、因果链、为什么既有安全网漏过,以及新增或修正的 reproducer、oracle、gate、decision 或 standing order。学习需要主动实现和 Review,不会自动发生;普通缺陷仍保留与风险相称的回归证据,但不强制制造事故文档。