AMIR 现状审计:规范声称什么、实现承担什么、差在哪
状态:Research Note 版本:
0.1.0日期:2026-09-08 研究问题:AMIR v0.1 规范逐节声称的能力,在当前实现里有多少真在承担?落差在哪?每一项该保留、该补、该在规范里降级,还是该合并删除? 起因:标准件 MVP 暴露出参数系统缺可变符号类型(整合基底 §11),追问之下需要一份对全规范的实证核对。 证据来源:packages/aira-contracts/schema、fixtures、crates/aira-core/src、third_party/maintained/replicad/src/aira、apps/web/src;全部为当前工作树实测,不依赖文档自述。 后续处置(2026-09-08):0.1–0.3 兼容线、0.1/0.2 接口线与 13 版目录历史已全部删除,0.4 schema 不再由 0.2 派生; 详见提交be4a15c、9106b3a、c50735e、7501281。§7 表中合并或删一项已完成。 处置:§7 的判定已于 2026-09-08 写入规范(定位 §0、状态标记、§5.1.1、§6.1 计划、§10.3、§18–§20),README 与宪法定义同步。本文保留为证据,不再是待办。 后续收敛:表中的 Field 两版实现已合并至field-ir.ts与field-artifact-graph.ts,旧 Lane F 样例目录已删除;表内路径保留为审计时证据,当前实现及验收见工作进度 §7.1。 后续收敛:当前事务内核已删除RevisionMigrationRecord、迁移 actor、单实现版本泛型与测试提交通道;修订身份仅由七项当前字段生成,旧修订格式明确拒绝。§4.5 的迁移槽位是历史发现,不是当前能力或待实现目标;规范 §14–§16 已同步当前边界。 后续收敛:§5.1 的兼容占位保留建议已被用户明确否决;文档级三个恒空字段及其 modelHash 槽、无人调用的旧版 model hash 入口已删除。约束和语义引用继续由现行节点负责;本文原判断仅保留为历史证据。
1. 结论摘要
Section titled “1. 结论摘要”- AMIR 的核心职责在工作,而且是实打实的:身份(canonical hash)、事务(10 态状态机 + 幂等 + CAS)、
选择稳定性(SemanticRef 选择器)、编辑守恒(
affects声明 + 实测拒绝)。这四件事 Replicad 与 AI 都给不了, 也是“连续编辑”能成立的全部前提。[实测] - 规范与实现版本已脱节三个 minor:规范停在
0.1.4(2026-08-30,Draft),实现amirVersion常量是0.4.0, exact 能力目录已迭代到0.4.12。docs/specs下五份规范全部还是 v0.1。[实测] - 规范 §18 的 39 个 operation 里,产品路径真正执行的是 10 个(exact 8 + sketch 2)。Mesh 5 个只存在于 休眠目录与夹具;Field 3 个 + 转换 1 个只有契约与验证器,没有执行器;Assembly 2 个连 schema 都没有。[实测]
- 文档级
expressions/constraints/semanticRefs三个槽是必填的空对象(additionalProperties: false), 永远装不进东西。§6.2 表达式整体未实现;约束与语义引用实际活在节点内部与独立读 schema 里。[实测] 存在两套算子目录→ 已处置(2026-09-08):0.4 目录的 13 个历史版本收敛为当前的0.4.12一个, 八个目录常量、三个语义引用 schema 与 Rust 注册表全部指向它;amir.ops-v0.3.0.json作为 Lane F 的休眠目录保留, 不再与 live 目录并列为当前支持什么的第二权威。- 参数系统是唯一真正卡住当前目标的硬缺口:
Parameter.type只有 7 种数值/布尔类型,range只能表达连续区间; 而ConstAtom已有 13 种含 3 个符号枚举。缺的是“可变 × 符号”这一格。[实测] - §14.2 的确定性等级(bitwise / topologyStable / geometricWithinTolerance)零实现,只在规范里。 这直接影响 §11.3 内容寻址缓存能否安全命中。[实测]
- 判定:职责保留,规范瘦身,缺口只补一个。 规范应升版到 0.4 并把 Field / Mesh / Assembly / 表达式 / Source Map / 确定性等级 / 迁移 明确标为“未实现或休眠”,把两套目录合并或归档,然后集中补参数系统的符号类型。
2. 方法与证据边界
Section titled “2. 方法与证据边界”- 规范侧以
AMIR-v0.1.md§3–§20 的条目为准,§18 按表格行计数(39 行)。 - 实现侧以 schema 的
$defs、fixtures 目录、Rust 模块与 TS 解释器的switch (node.operation)分支为准。 - “实现”分四档:执行(产品路径会跑)、验证(Rust 校验器认识但不执行)、契约(只有 schema/类型)、无。
- [待验证] 本文未逐条验证
extensionsenvelope 的运行时执行、kernelHints的消费、以及 amir-query 30 个查询定义的实际接线程度。
3. 版本落差
Section titled “3. 版本落差”| 工件 | 版本 | 备注 |
|---|---|---|
docs/specs/AMIR-v0.1.md |
0.1.4,Draft,2026-08-30 |
另四份规范(ArtifactGraph、Field IR、Representation Translation、SemanticRef)同为 v0.1 |
amir-core-v0.4.schema.json |
amirVersion: 0.4.0 |
同时保留 v0.2、v0.3 schema 与生成类型 |
| exact 能力目录 | exact-phase1-v0.4.0 → v0.4.12,13 个版本 |
目录版本化是活的,每版带 lock |
| 休眠算子目录 | amir.ops-v0.3.0.json |
origin: retained-0.1 / phase1-exact / lane-f-field |
规范从未跟上实现。任何人按规范读 AMIR,读到的是一个不存在的系统;按实现读,又找不到对应的规范条目。
4. 逐条审计
Section titled “4. 逐条审计”实现档次:执行 / 验证 / 契约 / 无。判定:保留 / 补 / 降级(规范标未实现)/ 合并或删。
4.1 数据模型(§3–§6)
Section titled “4.1 数据模型(§3–§6)”| 规范条目 | 规范声称 | 实现现状 | 落差 | 判定 |
|---|---|---|---|---|
| §3 Document / Revision / 标识符 | Document、Revision、StableId、RevisionId、Evaluation identity | 执行:AmirDocument、RevisionManifest、RevisionId、StableId、CommitReceipt 齐全;canonical.rs 883 行 |
无 | 保留 |
| §4.1 类型系统 | 标量含 String、BytesHash;量纲 7 种;空间值 13 种;集合与 EntitySet |
执行:ConstAtom 13 种类型(7 数值 + Anchor3D/Axis3D/Transform3D + 3 个符号枚举);ListValue、Value |
Parameter.type 仅 7 种,无 String、无枚举;EntitySet 以选择器形式存在于节点输入 |
补(参数符号类型) |
| §4.2–4.3 单位与 decimal grammar | 数值字面量为规范字符串,禁止 JSON number | 执行:ConstAtom 描述原文即“JSON numbers are never canonical AMIR scalars” |
无 | 保留 |
| §5.1–5.3 Node / Port / Feature DAG | 节点带 op、opVersion、contractHash、inputs/outputs;DAG 无环 | 执行:ModuleNode 必填 operationContractHash;validate.rs 环检测 |
无 | 保留 |
| §5.5 Body registry | 权威表示登记 | 执行:Body、BodyPut/Remove、roots 至少一个 |
无 | 保留 |
| §5.6 Operation descriptor | 每个 op 独立 descriptor 与 schema | 执行:exact 每个 op 一个 *-node-v*.schema.json + 目录模块(moduleHash、capabilityId、evaluatorProfile) |
与 §18 的“最小能力建议”脱节 | 保留 |
| §6.1 Parameter | 类型化、带 range、可变 | 执行:Parameter{type,value,range,mutable};parameter.put/setValue/remove |
range 只有 {min,max} 连续区间,无有限论域 |
补 |
| §6.2 Expression | 参数表达式与依赖 | 无:schema 无 Expression 定义;文档级 expressions 为强制空对象 |
整节未实现 | 降级 |
4.2 约束、引用、断言(§7–§8、§18.4)
Section titled “4.2 约束、引用、断言(§7–§8、§18.4)”| 规范条目 | 规范声称 | 实现现状 | 落差 | 判定 |
|---|---|---|---|---|
| §7.1 Sketch Constraint | 14 种约束,文档级 constraints 映射,sketch.solve 报告 DOF/ConflictSet |
执行(节点内):sketch.constrainedProfile@1.0.0 模块 + sketch_constrained_profile.rs(519 行)+ PlaneGCS 适配器;支持 9 种:coincident、horizontal、vertical、parallel、perpendicular、tangent、distance、angle、radius;文档级 constraints 为强制空对象 |
缺 equalLength、equalRadius、distanceX/Y、diameter、midpoint、fix;无独立 sketch.solve |
保留,规范改为节点内约束 |
| §8 SemanticRef 与 cardinality | 文档级 semanticRefs,基数断言 |
执行(节点内):exact-face-selector / exact-edge-selector schema + Rust 选择器;semantic-ref.schema.json 与 semantic-ref-read 独立读 schema;文档级 semanticRefs 为强制空对象 |
位置与规范不同,能力在 | 保留,规范改为节点内引用 |
| §7.2 / §18.4 Assertion | 9 种断言,severity 与 onUnknown 可配 |
执行:3 种(validSolid、watertight、manifold),severity 常量 error,onUnknown 常量 fail |
缺 6 种;volumeBetween、boundingBoxWithin 是家族级证书要用的 |
补(按需) |
4.3 表示、转换与执行(§9、§18.1–18.3)
Section titled “4.3 表示、转换与执行(§9、§18.1–18.3)”| 规范条目 | 规范声称 | 实现现状 | 落差 | 判定 |
|---|---|---|---|---|
| §18.1 Sketch(8 op) | empty/line/circle/arc/rectangle/solve/profile/boolean | 执行 2:sketch.rectangle、sketch.constrainedProfile |
6 个缺;constrainedProfile 覆盖了 solve+profile 的职责 |
降级其余 |
| §18.2 Exact(10 op) | box/cylinder/extrude/revolve/union/intersection/difference/transform/fillet/chamfer | 执行 6:extrude、revolve、difference、fillet、chamfer + shell(规范列为 v0.2);另有规范未列的 exact.program@4.0.0、exact.importedBRep@2.0.0 |
box/cylinder/union/intersection/transform 缺;exact.program 是实际主节点却不在规范里 |
规范补 program/importedBRep,降级其余 |
| §18.3 Mesh(8 op) | box/cylinder/import/validateSolid/union/intersection/difference/transform | 验证 + 契约:amir.ops-v0.3.0 登记 5 个(origin: retained-0.1),validate.rs 认识;产品代码只在 m2-fixture.ts 与 legacy-*-evidence.ts |
无产品执行器 | 降级为休眠 |
| §18.3 Field(8 op) | sphere/box/union/intersection/difference/smoothUnion/gyroid/rigidTransform | 契约 + 验证:目录登记 gyroid、beamLattice、smoothUnion(origin: lane-f-field);field-ir-v0.2.ts、lane-f-catalog.ts、field-artifact-graph-v0.2.ts;validate.rs 认识 |
无执行器;docs/plans 下无 Lane F 计划或进度文档 |
降级,标 Lane F 待启动 |
| §18.3 转换(3 op) | exactToMesh / fieldToMesh / meshToField | 执行 1:exact-to-mesh-translation.ts 带证书;契约 1:convert.fieldToMesh 在目录 |
meshToField 无 | 保留 exactToMesh,降级其余 |
| §18.3 Assembly(2 op) | compose / transformInstance | 无:schema 0 命中,代码 0 命中 | 整节未实现 | 降级 |
| §9.2 误差合同 | 转换必须带显式误差预算 | 执行:representation-translation.schema.json、field-to-mesh-translation.schema.json |
仅 exact→mesh 真跑 | 保留 |
| §9.3 kernelRequirements / hints | 内核要求进 hash,hints 不进 | [待验证] schema 有字段,消费未核 | — | 待验证 |
4.4 事务、诊断、证据(§10–§14)
Section titled “4.4 事务、诊断、证据(§10–§14)”| 规范条目 | 规范声称 | 实现现状 | 落差 | 判定 |
|---|---|---|---|---|
| §10 Transaction Patch 与状态机 | Patch envelope、10 态状态机、preview/validation token、CAS、幂等 | 执行:PatchEnvelope、TransactionState 10 态与规范一致;transaction.rs 1550 行,幂等 16 处、revision.equals CAS;Preview/Validation/CommitReceipt |
无 | 保留 |
| §11 Diagnostics | code/severity/phase/location | 执行:Diagnostic schema 6 个 phase 与规范一致;Rust 42 个诊断码 |
无 | 保留 |
| §12 ArtifactGraph | 每次求值产出工件图 | 执行:artifact-graph.schema.json、exact-artifact-graph.ts、field-artifact-graph-v0.2.ts |
无 | 保留 |
| §12 Source Map | 工件回溯到 Node/Port/源 | 无:TS/Rust 产品代码 0 命中 | 未实现 | 降级 |
| §13 Geometry Certificate | 每个 Artifact 的不可变检查记录 | 执行(部分):exact→mesh 转换证书;exact 会话的 geometry evidence / receipts;Lane R 的 smooth-implicit 证书只有契约 | 证书未带确定性等级 | 保留,补等级字段 |
| §14.1 Canonical JSON 与 hash | JCS + SHA-256,跨语言 fixtures,需第三个独立实现 | 执行:canonical.rs;fixtures/model-hash 16 个、revision-hash 2 个;Rust + TS oracle |
规范自述第三实现未闭合 | 保留 |
| §14.2 执行确定性 | ExecutionManifest;四级确定性等级 | 执行 ExecutionManifest(amir-transaction-adapter.ts 等);无 确定性等级(determinismClass/bitwise/topologyStable 0 命中) |
等级整套缺 | 补(缓存安全前置) |
| §14.3 Provenance | Revision 保留 PatchId/actor/intent/authoringLockHash | 执行:RevisionManifest 字段齐全 |
无 | 保留 |
4.5 版本、迁移、符合性(§15、§20)
Section titled “4.5 版本、迁移、符合性(§15、§20)”| 规范条目 | 规范声称 | 实现现状 | 落差 | 判定 |
|---|---|---|---|---|
| §15 SemVer 与拒绝策略 | 不认识的 major 拒绝;minor 只增不改 | [待验证] amirVersion 为 const,v0.2/0.3/0.4 并存说明有读多版本的能力 |
— | 待验证 |
| §15 extensions envelope | {version, semantic, payload} 固定信封 |
契约:ModuleNode.extensions 必填 |
运行时是否拒绝未知 semantic 扩展未核 | 待验证 |
| §15 Migration | 纯确定性转换、migration record、dry-run | 契约:RevisionMigrationRecord schema 完整;patch.rs:343 永远写 "migrationRecords": [];无迁移工具 |
只有槽位 | 降级 |
| §20 符合性级别 1–4 | Reader / Structural / Semantic / Transaction Store | 执行:全部在 Rust core(8181 行,无几何) | 无 | 保留 |
| §20 级别 5 Representation Executor | 列出支持的 Exact/Mesh/Field/Sketch/Assembly | 执行:仅 Exact + Sketch,在 TS(exact-feature-graph.ts)+ 浏览器 OCCT |
Mesh/Field/Assembly 无 | 规范按实改 |
| §20 级别 6 Observatory | ArtifactGraph、Source Map、Diagnostics、Certificate | 执行 3/4,Source Map 缺 | — | 规范按实改 |
5. 两个结构性发现
Section titled “5. 两个结构性发现”5.1 三个必填空槽
Section titled “5.1 三个必填空槽”AmirDocument 要求 expressions、constraints、semanticRefs 三个键必填,而它们的 schema 都是
{"type": "object", "additionalProperties": false}——只能是空对象。它们同时进入 modelHash 的语义投影。
这意味着:规范 §6.2、§7.1、§8 描述的文档级机制从未落地,而实现把约束与语义引用放进了节点内部
(sketch.constrainedProfile 的输入、exact-*-selector 的输入)。能力在,但位置和规范写的不一样。
不能直接删这三个键:它们在 canonical JSON 里,删掉会改变所有既有文档的 modelHash,属于 major 变更。
正确做法是规范按实改——写明约束与引用是节点内构造,文档级三个槽保留为兼容占位。
5.2 两套算子目录
Section titled “5.2 两套算子目录”| 目录 | 内容 | 状态 |
|---|---|---|
amir.ops-v0.3.0.json |
11 个:mesh 5、sketch.rectangle、exact.linearExtrude、field 3、convert.fieldToMesh | 休眠;mesh 无执行器,field 无执行器 |
exact-phase1-v0.4.12.catalog.json |
10 个模块:exact 8 + sketch 2,每个带 moduleHash、capabilityId、nodeSchema、evaluatorProfile |
live,与 exact-feature-graph.ts 的 8 个 case 逐一对应 |
两套目录只在两个 op 上重叠,结构也不同(前者 operations[],后者 modules[])。这是一处真实冗余:
同一个概念(“当前运行时支持哪些 operation”)有两个权威。RFC-0002 的能力发现应该只有一个答案。
判定:合并或归档。若 mesh/field 确定休眠,v0.3.0 目录应归档到 fixtures 并从发现路径移除;
若要保留为“已登记未执行”,也应并入 v0.4 目录并带 evaluatorProfile: none 之类的显式状态,而不是另存一份。
6. 公开接口(RFC-0002)的实际面
Section titled “6. 公开接口(RFC-0002)的实际面”- AI SDK 工具 2 个:
aira_compile_exact_plan、aira_library_reference。 - amir-query 原 30 个定义中,
artifact.lineage / metrics / topology、impact.downstream、model.parameters五种 QueryKind 在全仓没有任何处理器,已于 2026-09-08 连同各自的 Query/Selector 定义删除(30 → 20 个定义); 剩余的semantic-ref.resolve(-across)与 Request/Plan/Receipt 线由semantic-ref-read与边选择器实际消费。 - 能力目录
exact-phase1-v0.4.x13 个版本,每版带 lock——目录版本化是活的。
7. 判定汇总
Section titled “7. 判定汇总”| 判定 | 条目 |
|---|---|
| 保留(在工作) | Document/Revision/Id、类型与 decimal grammar、Node/Port/DAG、Body registry、Operation descriptor、Transaction 状态机、Diagnostics、ArtifactGraph、canonical hash、ExecutionManifest、Provenance、exact→mesh 证书、符合性级别 1–4 |
| 补(卡当前目标) | ① Parameter 增符号类型与有限论域(choices),程序沙箱 p 放宽为带类型值;② 确定性等级(§11.3 缓存安全前置);③ 断言 volumeBetween/boundingBoxWithin(按需) |
| 降级(规范标未实现/休眠) | 表达式 §6.2、Mesh §18.3、Field §18.3、Assembly §18.3、meshToField、Source Map §12、Migration §15、§18.1 其余 6 个 sketch op、§18.2 其余 5 个 exact op |
| 规范按实改 | 版本升到 0.4;exact.program 与 exact.importedBRep 写入规范;约束与语义引用改为节点内构造;文档级三个空槽标为兼容占位;§20 级别 5/6 按实际范围重写 |
| 合并或删 | 两套算子目录合一 |
补的顺序:①是唯一卡标准件与“可编辑”主张的硬缺口;②在做内容寻址缓存之前必须有;③按家族级证书需求触发。
8. 待验证
Section titled “8. 待验证”- [待验证]
kernelRequirements/kernelHints是否被任何执行器消费。 - [待验证] 未知
semantic: true扩展是否真的被 authoritative evaluation 拒绝。 amir-query 30 个定义中有多少已接到接口→ 已核:五种 QueryKind 零处理器,已删除(见 §6)。多版本读取→ 已处置:软件未发布、无需打开的旧文档,0.1–0.3 读取线(Rust 引擎/解码/校验、TS 生成类型、legacy 证据读取器、旧 fixture 语料)已于 2026-09-08 删除;旧 schema 文件因 0.4 schema 仍由其派生而暂留,接口上下文仍钉 0.2 目录,两者是下一轮的重构对象。- 本文计数可复现:schema
$defs47 个、§18 表格行 39、live 目录模块 10、解释器分支 8、Rust 8181 行、诊断码 42、hash fixtures 16 + 2。