Aira AI-CAD 真实目标探测协议(v1,2026-09-14)
本协议定义一个探测环:用一个真实、可判的目标产品分阶段驱动 AI 建模,发现产品尚未承接的能力与缺陷。 它与增长基准协议并列而不重叠:增长基准是测量环,用闭式真值和 n=5 的区间统计回答 “已知能力有多稳”;探测环回答“还缺什么”,每格只跑 1–2 次,不做统计,失败按固定分类归档并转成回归。 两个环共用真实产品入口、独立 OCP 回读与“判据先写死”的纪律,结果分目录保存,互不混入。
本版写 R0–R6 的逐字指令与判据。
1. 边界与规则
Section titled “1. 边界与规则”- 任务经真实 provider(DeepSeek)和产品入口运行:浏览器工作台、AI SDK 网关、宿主验证、独立 STEP 回读。 假 provider 与离线几何只用于复现缺口,不进入结果表。每次付费运行需用户明确授权,协议本身不构成费用授权。
- 姿态切换由操作者经现有本地参数编辑完成,不经 provider;若模型没有暴露所要求的参数,判为构建步失败,不由操作者代补。
- 判据在运行前写死,跑后不改。中途发现协议错误只能作废该阶段重跑并在结果里注明。
- 目标是探针,不是功能目录。每个缺口必须落到M2 实施方案 接受域表或 S1–S10 路径的某一行;不为“让机械臂能动”增加专用逻辑。发现契约缺口只产生一条待裁定项,是否进入首发承诺仍按 承诺列裁定。
- 探测结果写入
docs/benchmarks/target-probe-results/,不写入增长基准的results/。
2. 目标:三关节平面舵机臂原型
Section titled “2. 目标:三关节平面舵机臂原型”选它的理由只有一条:每个阶段都有独立于模型自述的裁判。连杆、销轴、底座都有闭式体积;关节位置等于销轴质心;连杆方向由连杆质心与 关节位置决定;末端位置有正运动学公式;各体分层放置,两两求交必须为空。它压在 M1/M2 承诺的关系上(产品结构与实例复用、 同轴放置、配置/参数传播、BOM、配合面公差、STEP 往返),而不压在 Aira 不承诺的领域(气动、热、控制)。
固定几何常量(单位 mm,角度为度):
| 零件 | 定义 | 体积(mm³) |
|---|---|---|
| link | 宽 20 的长圆形,两端半圆圆心相距 80,厚 6;两圆心处各一个 Ø6 贯穿孔 | 80·20·6 + π·10²·6 − 2·π·3²·6 = 9600 + 492π = 11,145.6636 |
| base | 40×40×6 方板,中心 Ø6 贯穿孔 | 9600 − 54π = 9,430.3540 |
| pin | Ø5.8 × 14 圆柱 | π·2.9²·14 = 369.8911 |
分层规则:base 占 Z 0–6;第 k 节 link 占 Z [7k, 7k+6];第 k 个 pin 连接第 k−1 层与第 k 层,占 Z [7(k−1)−0.5, 7k+6.5]。 相邻层之间留 1 mm,pin 两端各伸出 0.5 mm,pin 与孔单边间隙 0.1 mm。因此任意关节角下各体互不相交,两两求交为空是放置正确的必要条件, 而不是姿态是否可达的判断。
裁判只用与零件局部坐标系无关的量(整体体积与边界、实例世界质心、两两求交),指令不规定零件定义的局部原点,只规定装配后的世界位置。
3. 阶段总览
Section titled “3. 阶段总览”每级冻结后才进下一级;冻结条件见 §14。
| 阶段 | 内容 | 主要路径 | 起始状态 | 本版状态 |
|---|---|---|---|---|
| R0 | 单个 link 零件,参数化 | S1、S2 | 空白文档 | 判据已写死(§4);2026-09-14 冻结 |
| R1 | base + link + pin,一个关节 | S3 | R0 结果 | 判据已写死(§5);2026-09-14 冻结 |
| R2 | 三节链,三个关节角参数,四个姿态 | S3、S4 | R1 结果 | 判据已写死(§6);2026-09-14 冻结 |
| R3 | 垫圈、螺钉、舵机等标准件,物料身份,BOM 数量与层级用量 | S3、S6 | R2 结果 | 判据已写死(§7);2026-09-14 冻结 |
| R4 | 配合面工程尺寸、基准与几何公差;关联图纸(三视图、剖视、剖切线、尺寸与标注框) | S6 | R3 结果 | 判据已写死(§8);2026-09-14 冻结 |
| R5 | STEP 导出、再导入、外部更新,身份保持;撤销/重做与项目文件重开 | S7、S8 | 空模型 + R4 结果的两份 STEP | 判据已写死(§9);2026-09-15 冻结 |
| R6 | 改 centerDistance 为 100 的全链更新:R1–R4 判据按新真值仍通过,放置绑定参数,持久要求随改写、拦下未修订的本地再改 | S2、S4 | R4 结果(R5 的产物是交换副本,不含参数) | 判据已写死(§10);2026-09-15 冻结 |
4. R0:连杆零件
Section titled “4. R0:连杆零件”起始:空白文档。指令(逐字):
从空白创建一个连杆零件:外轮廓是宽 20 mm 的长圆形,两端半圆的圆心相距 80 mm;厚 6 mm,沿 +Z 从 Z=0 到 Z=6;两端半圆圆心处各有一个 Ø6 mm 的贯穿孔,其中一个孔的中心在原点,另一个在 X=80、Y=0。用参数 centerDistance、width、thickness、holeDiameter 表达;最终返回一个实体,命名为 link。
真值与裁判:
| 裁判 | 真值 | 来源 |
|---|---|---|
| 有效性 | status = passed 且 valid = true |
回读 |
| 实体数 | 1 | 回读 shape.solidCount |
| 体积 | 11,145.6636,相对误差 ≤ 1e-6 | 回读 shape.volume |
| 边界 | [−10, −10, 0] – [90, 10, 6],各分量误差 ≤ 1e-6 | 回读 shape.bounds |
| 参数 | centerDistance、width、thickness、holeDiameter 四个参数存在且可本地编辑 | 工作台参数视图 |
| 面数 | 记录不判:长圆形端面按构造方式可能是 1 或 2 个面,没有唯一真值 | 回读 shape.faceCount |
R0 通过后的保存文件按 SHA-256 记录,作为 R1 起始。
5. R1:一个关节
Section titled “5. R1:一个关节”起始:R0 的保存文件。指令(逐字):
在现有 link 之外再增加两个零件并装配成一个产品:底座 base 是 40 mm × 40 mm × 6 mm 的方板,中心在原点,占据 Z=0 到 Z=6,中心有一个 Ø6 mm 的贯穿孔;销轴 pin 是 Ø5.8 mm、长 14 mm、轴线沿 Z 的圆柱。装配:base 保持原位;link 平移到占据 Z=7 到 Z=13,其原来位于原点的孔与 base 的中心孔同轴,并绕该孔轴线在 XY 平面内转过角度 joint1(度,从 +X 逆时针,默认 0);pin 与该孔同轴,占据 Z=−0.5 到 Z=13.5。用参数 joint1、baseSize、pinDiameter、pinLength 表达;保持 link 的现有参数与命名不变;产品里 base、link、pin 各一个实例。
姿态:构建后由操作者本地把 joint1 依次设为 0、90、−135,每个姿态导出一份 STEP 并回读。
真值(M = link 质心;Z 由分层规则给出):
| joint1 | M(link) | 整体边界 |
|---|---|---|
| 0 | (40, 0, 10) | [−20, −20, −0.5] – [90, 20, 13.5] |
| 90 | (0, 40, 10) | [−20, −20, −0.5] – [20, 90, 13.5] |
| −135 | (−28.28427, −28.28427, 10) | [−66.56854, −66.56854, −0.5] – [20, 20, 13.5] |
每个姿态都必须满足:
| 裁判 | 真值 | 来源 |
|---|---|---|
| 有效性 | status = passed 且 valid = true |
回读 |
| 实体数 | 3 | 回读 shape.solidCount |
| 产品结构 | 3 个 part 定义、3 个实例 | 回读 product.definitions / product.occurrences |
| 名称与用量 | base、link、pin 各用量 1 | aira_model_read({bom:true}) |
| 总体积 | 20,945.9087,相对误差 ≤ 1e-6 | 回读 shape.volume |
| 边界 | 上表,各分量误差 ≤ 1e-6 | 回读 shape.bounds |
| 关节中心 | pin 实例世界质心 = (0, 0, 6.5),各分量误差 ≤ 1e-6 | 回读实例世界质心(§11) |
| 连杆位置 | link 实例世界质心 = 上表 M | 同上 |
| 底座位置 | base 实例世界质心 = (0, 0, 3) | 同上 |
| 无干涉 | base–link、base–pin、link–pin 三对求交均为空 | 回读两两求交(§11) |
| 参数 | joint1 可本地编辑,改动后上述裁判在新姿态下仍成立 | 工作台 |
6. R2:三节链
Section titled “6. R2:三节链”起始:R1 的保存文件(joint1 = 0)。指令(逐字):
在现有产品上把机械臂延长为三节:再增加两个 link 实例和两个 pin 实例,全部复用现有的 link 和 pin 定义,不新建零件。第二节 link 占据 Z=14 到 Z=20,其原点孔与第一节 link 的 X=80 孔同轴,并绕该轴相对第一节转过 joint2;第三节 link 占据 Z=21 到 Z=27,其原点孔与第二节的 X=80 孔同轴,相对第二节转过 joint3。第二个 pin 与第一、二节的公共孔同轴,占据 Z=6.5 到 Z=20.5;第三个 pin 与第二、三节的公共孔同轴,占据 Z=13.5 到 Z=27.5。joint2、joint3 为新参数(度,逆时针,默认 0);保持其他几何、参数与命名不变。
姿态:构建后由操作者本地设置 (joint1, joint2, joint3),每个姿态导出并回读。
正运动学:J1 = (0,0),J2 = J1 + 80·(cos θ1, sin θ1),J3 = J2 + 80·(cos(θ1+θ2), sin(θ1+θ2)),E = J3 + 80·(cos(θ1+θ2+θ3), sin(θ1+θ2+θ3))。 第 k 节 link 的质心 M_k 是 J_k 与 J_{k+1} 的中点(J4 = E),Z = 7k + 3;第 k 个 pin 的质心在 J_k,Z = 7k − 0.5。
| 姿态 | (θ1, θ2, θ3) | J2 | J3 | E | M1 / M2 / M3(XY) | 整体边界(XY;Z 恒为 −0.5 – 27.5) |
|---|---|---|---|---|---|---|
| P0 | (0, 0, 0) | (80, 0) | (160, 0) | (240, 0) | (40,0) / (120,0) / (200,0) | [−20, −20] – [250, 20] |
| P1 | (90, 0, 0) | (0, 80) | (0, 160) | (0, 240) | (0,40) / (0,120) / (0,200) | [−20, −20] – [20, 250] |
| P2 | (30, 45, −60) | (69.28203, 40) | (89.98756, 117.27407) | (167.26162, 137.97959) | (34.64102, 20) / (79.63479, 78.63703) / (128.62459, 127.62683) | [−20, −20] – [177.26162, 147.97959] |
| P3 | (0, 150, 150) | (80, 0) | (10.71797, 40) | (50.71797, −29.28203) | (40, 0) / (45.35898, 20) / (30.71797, 5.35898) | [−20, −39.28203] – [90, 50] |
P3 是折叠姿态:第二节折回第一节上方,第三节再折回。它检验分层规则下折叠仍无干涉,以及边界由末端而非底座决定。
每个姿态都必须满足:
| 裁判 | 真值 | 来源 |
|---|---|---|
| 有效性 | status = passed 且 valid = true |
回读 |
| 实体数 | 7 | 回读 shape.solidCount |
| 产品结构 | 仍只有 3 个 part 定义;7 个实例;link 定义被 3 个组件引用,pin 定义被 3 个组件引用 | 回读 product.definitions / product.occurrences |
| 名称与用量 | base 1、link 3、pin 3 | aira_model_read({bom:true}) |
| 总体积 | 43,977.0181,相对误差 ≤ 1e-6 | 回读 shape.volume |
| 边界 | 上表,各分量误差 ≤ 1e-6 | 回读 shape.bounds |
| 关节中心 | 三个 pin 实例的世界质心 = (J1, 6.5)、(J2, 13.5)、(J3, 20.5) | 回读实例世界质心 |
| 连杆位置 | 三个 link 实例的世界质心 = (M1, 10)、(M2, 17)、(M3, 24) | 同上 |
| 末端 | 由回读推导 E’ = 2·M3 − J3,与上表 E 误差 ≤ 1e-6(推导量,只记录,不作独立判据) | 同上 |
| 无干涉 | 7 个实例两两共 21 对求交均为空 | 回读两两求交 |
| 参数 | joint1、joint2、joint3 均可本地编辑;改 joint1 后第二、三节随动(P1 即检验此项) | 工作台 |
7. R3:标准件、物料身份与 BOM
Section titled “7. R3:标准件、物料身份与 BOM”起始:R2 的保存文件(joint1 = joint2 = joint3 = 0,R2-4 副本 sha256:837dbf0d…ca18)。指令(逐字):
在现有三节机械臂产品上加标准件并声明物料身份:(1) 垫圈 washer:外径 12 mm、内径 6 mm、厚 0.8 mm 的圆环,每个关节一个,共三个实例,复用同一个定义;第 k 个垫圈与第 k 个 pin 同轴,占据该关节下方的间隙 Z=7k−0.9 到 Z=7k−0.1(k=1 在 base 与第一节 link 之间,k=2、k=3 分别在第一、二节与第二、三节之间),并随该关节的位置一起运动。(2) 螺钉 screw:圆柱头螺钉,头部 Ø5.5 mm、高 2 mm,杆部 Ø3 mm、长 6 mm,从底座下方装入、头部在底座之下;在 base 的四个角 (±15, ±15) 各一个,共四个实例,头部占据 Z=−2 到 Z=0,杆部占据 Z=0 到 Z=6;为此在 base 上于同样四个位置各开一个 Ø3.2 mm 的贯穿孔,用新参数 mountHoleOffset(15)与 mountHoleDiameter(3.2)表达。(3) 舵机 servo:20 mm × 12 mm × 10 mm 的长方体,X 向 20、Y 向 12,中心在关节 1 的轴线上,占据 Z=−13 到 Z=−3,一个实例。垫圈、螺钉分别用参数 washerOuterDiameter、washerThickness、screwDiameter、screwLength 表达。为全部六种零件声明物料身份(partNumber / partRevision):base BASE-40 / A,link LINK-80 / A,pin PIN-5.8x14 / A,washer WASHER-6x12 / A,screw M3x6-BH / A,servo SG90 / A。保持 link、pin、base 的现有参数、joint 参数与命名不变;产品中 base 1 个、link 3 个、pin 3 个、washer 3 个、screw 4 个、servo 1 个实例。
零件真值(mm³):base′ = 9600 − 54π − 4·π·1.6²·6 = 9600 − 115.44π = 9,237.3345;washer = π(6² − 3²)·0.8 = 21.6π = 67.8584; screw = π·2.75²·2 + π·1.5²·6 = 28.625π = 89.9281;servo = 2400。总体积 = base′ + 3·link + 3·pin + 3·washer + 4·screw + servo = 46,747.2862。
放置真值(J_k 见 §6 正运动学):washer_k 质心 (J_k, 7k − 0.5),与 pin_k 同心但体积不同;screw 质心 (±15, ±15, 0.886463) (头部体积 15.125π 质心 −1,杆部 13.5π 质心 3);servo 质心 (0, 0, −8);base′ 质心 (0, 0, 3)(四孔对称)。整体边界 Z 恒为 [−13, 27.5], XY 与 §6 各姿态相同(servo、screw 都在 base 的 XY 范围内)。
姿态:构建后由操作者本地设置 P0 (0, 0, 0) 与 P2 (30, 45, −60),各导出一份 STEP 并回读。P2 检验垫圈随关节运动:washer_2 质心 (69.28203, 40, 13.5), washer_3 质心 (89.98756, 117.27407, 20.5)。
每个姿态都必须满足:
| 裁判 | 真值 | 来源 |
|---|---|---|
| 有效性 | status = passed 且 valid = true |
回读 |
| 实体数 | 15 | 回读 shape.solidCount |
| 产品结构 | 6 个 part 定义;15 个实例;定义用量 base 1、link 3、pin 3、washer 3、screw 4、servo 1 | 回读 product.definitions / product.occurrences |
| 总体积 | 46,747.2862,相对误差 ≤ 1e-6 | 回读 shape.volume |
| 边界 | XY 同 §6 对应姿态;Z [−13, 27.5];各分量误差 ≤ 1e-6 | 回读 shape.bounds |
| 关节与连杆 | 三个 pin、三个 link 的世界质心同 §6 | 回读实例世界质心 |
| 垫圈位置 | 三个 washer 实例世界质心 = (J_k, 7k − 0.5),体积 67.8584 | 同上 |
| 螺钉位置 | 四个 screw 实例世界质心 = (±15, ±15, 0.886463),体积 89.9281 | 同上 |
| 舵机位置 | servo 实例世界质心 = (0, 0, −8),体积 2400 | 同上 |
| 无干涉 | 15 个实例两两共 105 对求交均为空 | 回读两两求交 |
| 物料身份 | 交付 STEP 的每个零件 PRODUCT 记录:id = partNumber、name = 零件名、其 PRODUCT_DEFINITION_FORMATION.id = partRevision,六种零件各一条且与指令逐字一致;装配记录不带身份 | 回读 product.standardProducts(§11 扩展 3) |
| 用量 | 按定义计数的实例数即 BOM 用量:washer 3 跨三个嵌套层级,screw 4 在根层级 | 回读 product.occurrences 按定义分组 |
| 参数 | mountHoleOffset、mountHoleDiameter、washerOuterDiameter、washerThickness、screwDiameter、screwLength 存在且可本地编辑;joint1–3 仍可编辑(P2 即检验) | 工作台 |
产品自身的 aira_model_read({bom:true}) 若在运行中被模型读取,其 lines(partNumber、quantity、identityStatus)原样记录到结果里,与 STEP 判据对照;
不作为独立判据,因为它由被测产品产生。
判据核对(2026-09-14,零成本):用 OCP 手工构造 P0 与 P2 的 15 实例装配,独立回读与上表逐项一致(实体数、总体积、边界、六种零件的质心与体积、 105 对求交为空);把该文件的 PRODUCT / FORMATION 记录改写为指令中的六个身份后,30 项裁判全部通过。R3 可在授权后直接运行。
冻结(2026-09-14):提交 d69ba57a 上 R3-5、R3-6 连续两次全部裁判通过(见第二轮结果);起始文件按修订 6ade791b… 识别,其重存副本的字节为 sha256:31adc0da…,与上文首次保存的 837dbf0d…ca18 同一修订。
7.1 R3L:标准件由库定义(R3 的变体,2026-09-14 预注册)
Section titled “7.1 R3L:标准件由库定义(R3 的变体,2026-09-14 预注册)”R3 已冻结,但它把螺钉的每个尺寸都写进了指令,模型无需查任何东西。R3L 与 R3 共用起始文件、垫圈、舵机、安装孔与全部裁判,
只改一处:螺钉按标准号给出,不给任何尺寸。它回答的问题是——库里已有 iso4762SocketHeadCapScrew(2026-09-08 落地,
增长基准 T6 三次运行里两次在查库首页可见、一次被选用),当同一零件成为共享定义、要放四个实例并进 BOM 时,模型会不会用它。
起始:与 R3 相同(R2 保存文件,修订 6ade791b…)。指令(逐字;与 R3 的差异只在 (2) 与参数句、身份句的 screw 项):
在现有三节机械臂产品上加标准件并声明物料身份:(1) 垫圈 washer:外径 12 mm、内径 6 mm、厚 0.8 mm 的圆环,每个关节一个,共三个实例,复用同一个定义;第 k 个垫圈与第 k 个 pin 同轴,占据该关节下方的间隙 Z=7k−0.9 到 Z=7k−0.1(k=1 在 base 与第一节 link 之间,k=2、k=3 分别在第一、二节与第二、三节之间),并随该关节的位置一起运动。(2) 螺钉 screw:ISO 4762 内六角圆柱头螺钉,规格 M3,头下长度 6 mm,螺纹按光圆柱建模;从底座下方装入,承面贴合底座底面 Z=0,头部在底座之下,杆部穿过底座向上占据 Z=0 到 Z=6;在 base 的四个角 (±15, ±15) 各一个,共四个实例,复用同一个定义;为此在 base 上于同样四个位置各开一个 Ø3.2 mm 的贯穿孔,用新参数 mountHoleOffset(15)与 mountHoleDiameter(3.2)表达。(3) 舵机 servo:20 mm × 12 mm × 10 mm 的长方体,X 向 20、Y 向 12,中心在关节 1 的轴线上,占据 Z=−13 到 Z=−3,一个实例。垫圈用参数 washerOuterDiameter、washerThickness 表达,螺钉头下长度用参数 screwLength 表达。为全部六种零件声明物料身份(partNumber / partRevision):base BASE-40 / A,link LINK-80 / A,pin PIN-5.8x14 / A,washer WASHER-6x12 / A,screw ISO4762-M3x6 / A,servo SG90 / A。保持 link、pin、base 的现有参数、joint 参数与命名不变;产品中 base 1 个、link 3 个、pin 3 个、washer 3 个、screw 4 个、servo 1 个实例。
与 R3 的三处刻意差异:不出现函数名,也不出现头径、头高、内六角尺寸——它们只能从库或模型自身记忆来;不要求 screwDiameter 参数,
因为规格 M3 是尺寸表的索引(有限论域),不是一个 Length;partNumber 用标准 designation ISO4762-M3x6。
主判据(跑前写死):产品中 screw 定义所对应 Body 的程序源码含对 iso4762SocketHeadCapScrew 的调用(§11 扩展 6)。
未命中即使全部几何裁判通过也记未命中,归 §12「模型行为」类:只计量,不改产品逻辑;本阶段最多再跑一次,两次都未命中即停止,
结论写作“库函数在查库首页可见且零件要成为共享定义时,模型仍不选用”,作为 S1/S9 的待裁定项。
零件真值(mm³):screw 取库中 ISO_4762 表 M3 行 dk 5.68 / k 3 / s 2.5 / t 1.3(滚花头最大值 / 公称 / 公称 / 最小值,来源与统计量见
整合基底 §11.1):
V = π(5.68/2)²·3 + π·1.5²·6 − (√3/2)·2.5²·1.3 = 76.0165 + 42.4115 − 7.0365 = 111.3915;base′、washer、servo、link、pin 同 R3;
总体积 = 46,747.2862 − 4·89.9281 + 4·111.3915 = 46,833.1399。
这一真值是自证的:dk、k、s、t 取自被测的那张表,模型只要调了库函数,体积必然通过;它抓的是调用错了(规格、长度、方向), 证明不了尺寸表对。尺寸表的正确性只能靠跨源核对,不能靠本轮。
放置真值:screw 头部占 Z=−3 到 0、杆部 Z=0 到 6,内六角在头部朝下的外端面(Z=−3 到 −1.7);质心 (±15, ±15, 0.267035)。 库函数的原生姿态是承面在 XY 平面、头部朝 +Z、杆部朝 −Z,本轮要求头部在底座之下,实例须绕 X(或 Y)转 180°——这是放置约定的真实考题, 忘记翻转会使头部占 Z=0 到 3 而与 base 干涉,由无干涉裁判抓住。头径 5.68 使头部 X/Y 外缘到 17.84(< base 边 20)、内缘到 12.16(> servo 半宽 10), 不与任何零件相交;头底 Z=−3 高于 servo 底 −13,整体 Z 边界仍为 [−13, 27.5]。
姿态与裁判:与 R3 逐项相同(P0、P2;15 项裁判),差异只在:总体积 46,833.1399;screw 质心 (±15, ±15, 0.267035)、体积 111.3915;
参数项去掉 screwDiameter;物料身份 screw 为 ISO4762-M3x6 / A;另加主判据一行:
| 裁判 | 真值 | 来源 |
|---|---|---|
| 库定义 | screw 的 Body 程序调用 iso4762SocketHeadCapScrew |
保存文件的程序源码(§11 扩展 6) |
判据核对(2026-09-14,零成本):screw 定义经库函数 iso4762SocketHeadCapScrew('M3', 6) 生成后独立回读 volume 111.39153、
solids 1、faces 12、边界 ±2.84 / Z −6..3,与闭式解一致(相对误差 3e-7,为闭式解四位舍入所致)。整机沿用 R3 的 OCP 手工构造、
只把 screw 换成头朝下的 ISO 4762 M3×6(含内六角):P0 与 P2 各 15 实体、总体积 46,833.14、Z [−13, 27.5]、四个 screw 世界质心
(±15, ±15, 0.267035) 体积 111.39153、105 对求交全空;改写 PRODUCT / FORMATION 为六个身份后,两姿态各 30 项裁判全部通过。
扩展 6 同日验证:对 R3-6 的保存件(手搓螺钉)报告 screw 的 Body 程序仅 makeCylinder、主判据不通过而其余 60 项通过;
把该保存件的 screw 程序改为库调用并改身份为 ISO4762-M3x6 后主判据通过。R3L 可在授权后直接运行。费用上限与 R3 相同($1.50),冻结条件同 §14。
停止(2026-09-15):提交 62d9627e 上 R3L-1、R3L-2 连续两次未命中(结果,$1.4007)。两次模型都凭记忆手写 ISO 4762 M3(dk 5.5 / k 3 / s 2.5 / t 1.3;R3L-2 省去内六角),三次查库全为精确符号批量,库函数从未出现在它眼前;其余裁判两姿态各 25/30 通过,失败项全是头径的连锁。归「模型行为」,转 S1/S9 待裁定。上文预写的停止结论“可见时仍不选用”本轮未测到——模型没有发出任何概念查询——实际结论是“面对标准号,模型的默认动作是回忆而非检索”。另记判据盲区:dk 5.5 是 ISO 4762 光头最大值,与库的滚花头 5.68 同为合法取舍,指令未指定;若重开 R3L,指令应指定头型或真值改为区间,本轮原判保留。
7.2 R3S:标准件身份即声明(R3L 之后,2026-09-15 预注册)
Section titled “7.2 R3S:标准件身份即声明(R3L 之后,2026-09-15 预注册)”读法:R3L 停在“面对标准号,模型的默认动作是回忆而非检索”,转 S1/S9 待裁定。产品的回答是 4ed330f3:写进 partNumber 的标准号不再是标签而是声明——
库定义这个标准号造出什么(ISO 4762 的尺寸表、构造调用 iso4762SocketHeadCapScrew 与同一张表的闭式体积),宿主在 set-product / update-product 编译时
量每个被声明 Body 的体积(文档 quantityRelative 加积分余量),之后每次候选预览再核对一次;不符即拒绝(EXACT_CAD_PLAN_STANDARD_PART_MISMATCH /
EXACT_CANDIDATE_STANDARD_PART_MISMATCH),诊断写出库调用、库的体积与实测体积;库里没有的规格直接拒绝并列出有的规格;查库工具自述改为“库带标准件目录与材料库”。
手写但体积相同的 Body 视为同一零件。R3S 问的问题因此从“会不会用库”变成两个:声明被核对后,模型交付的螺钉是不是库定义的那个零件;
被拒绝、被告知库调用之后,它走哪条路(调库、按库尺寸重画、还是改掉标准号)。R3L 的判据盲区(dk 5.5 光头 / 5.68 滚花头都合法)由此消除:
partNumber 的含义就是库的取舍,指令不必再指定头型。
起始:与 R3、R3L 相同(R2-4 保存副本,修订 6ade791b…,字节 sha256:31adc0da…)。指令:逐字同 §7.1(哈希 2affbcbf…5a45),一字不改,
使 R3L 与 R3S 只差产品构建。
真值:同 §7.1(screw 111.3915、质心 (±15, ±15, 0.267035)、总体积 46,833.1399;其余同 §7)。这一真值仍取自被测的那张表,但现在产品自己也按它核对: 一个通过了声明核对的提交,其螺钉体积必在 1.1e-4 mm³ 内等于库值;裁判仍按 1e-6 相对判,比产品严——手写等体积件若只到产品容差而未到裁判容差,记为读法。
通过条件(跑前写死):§7 的 30 项裁判按 §7.1 真值全部通过(含 screw 身份 ISO4762-M3x6 / A、参数项去掉 screwDiameter)。R3L 的主判据“程序含库调用”
不再是通过条件,降为读法之一:产品已能把不是库零件的声明拒之门外,模型走哪条路是它的行为,不由判据裁决。
读法(每次运行记录,不判):
| 读法 | 来源 |
|---|---|
库调用:screw 的 Body 程序是否含 iso4762SocketHeadCapScrew(扩展 6) |
保存副本 |
声明核对:STANDARD_PART_MISMATCH 两类拒绝各几次、发生在哪一步、模型随后的动作 |
网关 agent.problem 与计划文本 |
| 查库轨迹:概念词还是精确符号批量、库函数是否出现在返回里 | 网关日志 |
| 手写等体积:若未调库而通过,实测体积与库值之差是否落在产品容差内、裁判容差内 | 回读 |
| 自设要求:模型若先手画螺钉并声明了边界 / 尺寸要求,改用库零件时是否显式改写它们(同 R6 的持久要求问题) | 网关 agent.problem、扩展 7 |
失败归类:改掉标准号以躲开核对(partNumber 不再是 ISO4762-M3x6)→ 身份裁判失败,模型行为;产品对库零件误报不符 → Core / 运行时缺陷;
已知缺口不在本阶段范围:imported-product 声明的身份不被量测(4ed330f3 自记)。费用上限 $1.50,冻结与停止条件同 §14。
判据核对(2026-09-15,零成本):在含 4ed330f3 的构建(Web 资产 8939b493…,契约 5a89c49f…)上,用 R3L-2 的保存副本(手画螺钉 dk 5.5、无内六角、
已声明 ISO4762-M3x6)做假 provider 回放:(1) 一份只重申螺钉身份的 update-product 被编译时核对拒绝——
“Body … declares partNumber ‘ISO4762-M3x6’, a ISO 4762 part the library builds as r.iso4762SocketHeadCapScrew(‘M3’, 6) measuring 111.39153 mm3,
but this body measures 113.68638 mm3 (… tolerance ±0.00011139153 mm3)”;(2) replace-program 改为 r.iso4762SocketHeadCapScrew('M3', p.screwLength)
绕 X 转 180° 头朝下,先被模型自己在 R3L-2 写下的螺钉边界要求(±2.75)拦下,带 require-bounds 改写为 ±2.84 后提交,体积 −2.29 mm³;
(3) 导出 P0、P2 各 30 项裁判全部通过,扩展 6 报出 screw 程序含库调用。R3L 的 OCP 夹具核对(§7.1)继续有效。R3S 可在授权后运行。
另记:R3L 会话在 4ed330f3 上起过两次 R3L 指令(2026-09-15 02:39、02:50),网关发出 start 后 5 分钟没有一个 provider 事件,被驱动脚本按无计划规则中止,
计费 $0——是供应方停摆,不是模型尝试,不进结果表;付费运行前先用最小流式探针确认 deepseek-flash 有首 token。
运行(2026-09-15):R3S-1 在含 4ed330f3 的构建上 repaired,P0 / P2 各 30 项裁判全部通过(结果,$0.8687):
模型第一条查库就是 "ISO4762, ISO 4762, … socket head cap screw",随后查全文并用 r.iso4762SocketHeadCapScrew("M3", p.screwLength) 造螺钉,声明核对零次触发;
三次宿主拒绝里一次是 expect 仍带记忆中的 5.5 头。R3L 的结论改写为“查库工具从没说过库里有目录”。R3S-2 同一构建同一模式($0.6393,repaired,60/60,
第一条查库仍是标准号);R3S 冻结(2026-09-15)。
7.3 R3M:材质由库声明、质量与 BOM(2026-09-15 预注册,在 R3S 之后运行)
Section titled “7.3 R3M:材质由库声明、质量与 BOM(2026-09-15 预注册,在 R3S 之后运行)”读法:探测环 R0–R6 从未碰过材质。产品这一侧已经齐了——发布表 72 条(材质库记录),
set-material 把材质挂到 Body 并可带 expect.massKg,宿主以库密度乘实测体积核对声明、不符即拒绝(EXACT_CANDIDATE_EXPECTATION_VIOLATED),
BOM 行报 materialStatus,导出 STEP 在零件定义上写 aira:materialId / aira:materialName 并申报物性省略;aira_library_reference 用材质族、牌号或标准号
可查到行(da56d930)。闭环在 closure client 上零费用跑通(P2 复跑),但那是脚本给出的拼法。
R3M 问的是模型:给它六种用自然语言说的材料,它交付的 STEP 里每个零件带的是不是库里那一行,它声明的质量是不是密度乘体积;
以及一条读法——面对库不直接接受的拼法(17-4PH H900),它是查库、换拼法,还是改材料。
起始:R3 的冻结副本(R3-6 保存副本,修订 80e7dd5f…,字节 sha256:b57ce1af…4401,joint1 = joint2 = joint3 = 0)——与 R4 同一起始,
不依赖 R3S 的结果;运行顺序按 §7.2 的保留在 R3S 之后。指令(逐字):
在现有三节机械臂产品上为全部六种零件声明材质并给出质量:连杆 link 与底座 base 用 6061-T6 铝合金;销轴 pin 用 17-4PH H900 不锈钢;垫圈 washer 用 AISI 301 退火不锈钢;螺钉 screw 用低合金钢(4130/4140/4340 族);舵机 servo 外壳用聚碳酸酯。材质必须是产品材质库已发布的条目;为每种零件的赋材步骤声明该零件单个定义的质量期望 massKg(千克),由材质密度与零件体积得出。不改变任何几何、参数、放置与物料身份;产品中仍为 base 1 个、link 3 个、pin 3 个、washer 3 个、screw 4 个、servo 1 个实例。
指令里刻意的两处:17-4PH H900 不是库直接接受的拼法(库接受 17-4PH、UNS S17400、h900 等,不接受二者连写),set-material 会以
EXACT_BODY_MATERIAL_UNKNOWN 拒绝并指名查库工具,而 aira_library_reference 对同一拼法把这一行排第一;其余五种都能由标准号或别名直接解析。
指令不给材质标识、不给密度——两者只能查库或凭记忆。
真值(密度取自发布表,单位 kg/m³;体积同 §7;质量 = ρ·V·10⁻⁹,单位 kg):
| 零件 | 材质行 | ρ | V(mm³) | 单件质量(kg) | 用量 |
|---|---|---|---|---|---|
| link | metal.aluminum.6061-t6 |
2700 | 11,145.6636 | 0.030093292 | 3 |
| base′ | metal.aluminum.6061-t6 |
2700 | 9,237.3345 | 0.024940803 | 1 |
| pin | metal.stainless.17-4ph-h900 |
7805.73313 | 369.8911 | 0.002887271 | 3 |
| washer | metal.stainless.301-annealed |
7916.45275 | 67.8584 | 0.000537198 | 3 |
| screw | metal.steel.low-alloy |
7833.41303 | 89.9281 | 0.000704444 | 4 |
| servo | polymer.pc.generic |
1200 | 2400 | 0.002880000 | 1 |
整机质量 0.131191861 kg(仅记录,不判:STEP 不带质量,产品的 BOM 也不汇总质量)。三个手册密度是 lb/in³ 换算值,小数位来自换算而非测量精度。
姿态与裁判:与 R3 逐项相同(P0、P2;§7 的 15 项裁判,真值同 §7——材质不改几何,一项几何裁判失败即说明赋材步骤动了不该动的东西),另加:
| 裁判 | 真值 | 来源 |
|---|---|---|
| 材质身份 | 六种零件的 PRODUCT 记录各带 aira:materialId = 上表材质行、aira:materialName = 该行的 name;装配记录不带 |
回读 product.standardProducts[].attributes(§11 扩展 8) |
| 质量声明 | 六种零件各有一个 set-material 步骤带 expect.massKg,其值与上表单件质量的相对误差 ≤ 1e-3 |
网关计划文本;体积由回读 product.definitions 复核 |
| 物料身份 | 六条 PRODUCT / FORMATION 身份与 R3 逐字一致(赋材不得改写身份) | 回读 product.standardProducts |
质量声明由宿主在提交时核对,一份写错质量的计划到不了 STEP;这一项裁判抓的是“六个零件各有一条声明”, 以及声明值与独立算得的质量一致(宿主的密度与裁判的密度同源,都来自发布表——这条判据因此只证明模型算对了,证明不了密度对,密度的正确性属于材质库自身的双源规则)。
读法(每次运行记录,不判):
| 读法 | 来源 |
|---|---|
查库轨迹:aira_library_reference 是否被用于材质、查了什么词、materials 段的行数 |
网关日志 |
拒绝与应对:EXACT_BODY_MATERIAL_UNKNOWN 次数、发生在哪种零件、随后是查库、换拼法还是换材料 |
网关 agent.problem 与计划文本 |
质量来源:massKg 是常量还是表达式、是否先读了体积(aira_model_read)或 BOM |
计划文本 |
期望被拒:EXACT_CANDIDATE_EXPECTATION_VIOLATED 次数与诊断中的实测质量 |
网关 agent.problem |
BOM:aira_model_read({bom:true}) 若被读取,各行 materialStatus 原样记录(产品自产,不作判据) |
网关日志 |
颜色:六个零件定义在 STEP 里的 STYLED_ITEM 颜色(外观是材质的投影,不判数值) |
Part 21 文本 |
失败归类:拼法始终未解析、最终改用别的材料或漏掉某种零件 → 材质身份裁判失败,模型行为;六个声明齐全、宿主接受、但裁判算得的质量与声明不符 →
先核对体积(回读 vs 宿主实测)再归 Core / 运行时缺陷;STEP 里缺属性而 BOM 报已赋 → Core / 运行时缺陷(导出通道)。
费用上限 $1.50(预计 4–8 次请求:读产品、可能的查库、一份或几份 set-material 计划、拒绝后的修正);冻结与停止条件同 §14。
判据核对(2026-09-15,零成本):扩展 8 已补入验证器,用产品自身导出的 STEP(closure client 材质一节的 20,731 B 导出件,sha256:f4440541…)核对:
零件 PMI-BOX 的记录报 aira:materialId = metal.aluminum.6061-t6、aira:materialName = Aluminum 6061-T6 及两个身份键,
装配记录 attributes 为空;其余输出(2 实体、12,000 mm³、PRODUCT / FORMATION)与扩展前一致。质量表由发布表密度与 §7 闭式体积算得。
那份导出件是导出确定化(b8e4f493)之前的字节;在确定化后的 v0.21 运行时上以 sealed OCCT 直接写出的两零件文件(35,284 B,FILE_NAME 时间戳已固定为纪元)复核,
属性读取一致:铝件与 PC 件各带材质 id / name,装配为空。
六种拼法的解析在契约层核对:AISI 301、低合金钢、聚碳酸酯 直接解析;6061-T6 铝合金、17-4PH H900 不被 set-material 直接接受,
查库均把目标行排第一。R3M 可在 R3S 结束后、经授权运行。
运行(2026-09-15):R3M-1 在 d9f0b6d5 上 first-try,P0 / P2 各 37 项 + 六条质量声明全部通过(结果,$0.2010):
一条批量查库(六种拼法一起送)从 materials 段拿到六个 id 与密度,六步 set-material 直接用 id、massKg 写成密度 × 闭式体积的算术表达式由宿主求值,
17-4PH H900 从未以原拼法进入 set-material。判定脚本因此接受算术表达式形式的质量声明。R3M-2 同一构建($0.2250,first-try,80/80;五条按材料名的查询,
质量自己算成数字);R3M 冻结(2026-09-15)。
8. R4:配合面工程尺寸、基准与关联图纸
Section titled “8. R4:配合面工程尺寸、基准与关联图纸”起始:R3 的冻结副本(R3-6 保存副本,修订 80e7dd5f…,字节 sha256:b57ce1af…4401,joint1 = joint2 = joint3 = 0)。指令(逐字):
在现有产品上声明配合面的工程尺寸、基准与几何公差,并建立一张关联图纸。(1) 工程尺寸(声明在零件定义上、同一零件的两个面之间,实例共享):link 的厚度,即两个大平面之间,名义 6 mm,偏差 −0.05 / +0.05;pin 的长度,即两端面之间,名义 14 mm,偏差 −0.10 / 0;base 的厚度,即上下两面之间,以区间 5.95 到 6.05 mm 表达。(2) 基准与几何公差:link 上,装配后朝向 −Z 的大平面为基准 A,对该面声明平面度 0.02,对另一个大平面声明相对 A 的平行度,公差值用新参数 parallelismTolerance(0.03 mm)表达,对位于原点的孔的圆柱面声明相对 A 的垂直度 Ø0.02;pin 的圆柱面声明圆柱度 0.01;base 上,朝向 +Z 的顶面为基准 B,对该面声明平面度 0.02,对中心孔的圆柱面声明相对 B 的垂直度 Ø0.02;公差值单位均为 mm。(3) 图纸:一张 420 mm × 297 mm 的图纸,三个视图:俯视图 TOP,从 +Z 上方向下看,X 向右;主视图 FRONT,从 −Y 前方看向 +Y,X 向右;剖视图 A-A,与主视图同一观察方向,用 Y=0 平面剖开,去掉靠近观察者的一半(Y<0),显示剩下一半的剖面并画剖面线;在俯视图上标出剖切线 A。在主视图上标注第一节 link 的厚度工程尺寸;在俯视图上加一条参考尺寸,端点 (−20, 0, 0) 与 (20, 0, 0),取投影量;两个基准各放一个基准框、六条几何公差各放一个公差框,放在主视图或剖视图上;比例与位置自选。保持全部几何、现有参数、命名、物料身份与装配不变。
零件局部坐标系由 R0、R1 指令固定并经 R3 回读核对:link 局部 Z 0–6,原点孔轴线过局部原点;base 局部 Z 0–6,中心孔轴线过局部原点,放置为恒等;pin 局部 Z 0–14。 裁判仍只用与局部原点无关的量:面积、半径、面间距、经实例世界矩阵变换后的法向与轴线位置。指令用“朝向 −Z / +Z”描述面,用 R0 定下的“位于原点的孔”指认孔。
真值:
- 面积(mm²):link 大平面 1600 + 82π = 1857.6106;base 上下面 1600 − 19.24π = 1539.5558;pin 端面 π·2.9² = 26.4208;pin 圆柱面 2π·2.9·14 = 255.0973; link 原点孔与 base 中心孔的圆柱面 2π·3·6 = 113.0973。
- 剖面:Y=0 平面在 P0 切到 11 个实例(四个 screw 在 Y=±15,不被切);在 P2 切到 5 个(base、servo、pin_1、washer_1、link_1;link_1 的端部半圆跨过 Y=0,其余关节在 Y>0)。
- 参考尺寸:(−20,0,0)–(20,0,0) 的投影距离 40。
- 相机(产品约定:观察者在 camera.direction 的正侧,剖视只有保留 depth < 0 一侧才暴露剖面):TOP direction ∝ (0,0,1)、xAxis ∝ (1,0,0); FRONT 与 A-A direction ∝ (0,−1,0)、xAxis ∝ (1,0,0);A-A 的 sectionSide = negative,origin.y = 0。若模型把 direction 取反,俯视图镜像、剖面不出现, 按 §12 归类时先查契约是否写明观察者所在的一侧。
- 工程尺寸文本由产品按声明打印:nominal-deviations 形如
6.00 (-0.05 / +0.05) mm,range 形如5.95–6.05 mm,参考尺寸形如(proj. 40.00 mm);小数位由模型自选, 但产品拒绝会改变声明值的舍入。标注框的<title>是产品的单元文本:基准Datum \| A,公差<特征> \| <值形式> \| <值> mm \| 1: <基准>。
姿态与本地编辑(零费用,顺序固定):P0 (0, 0, 0) 导出 STEP 与图纸;P0′:本地把 parallelismTolerance 设为 0.05,再导出 STEP 与图纸,然后设回 0.03; P2 (30, 45, −60) 导出 STEP 与图纸。P0′ 检验公差值随参数变化并进入 AP242 与图纸;P2 检验图纸随姿态重算(剖面实例数、剖切线、第一节 link 的尺寸见证点)。 图纸经 文件 → 导出图纸 取得,不经 provider。版面(位置、比例、线型)不判;但产品的版面校验失败(如标注框距目标 < 3 mm)会使图纸读取失败,属于构建步失败。
STEP 判据(P0、P0′、P2 每个都必须满足):
| 裁判 | 真值 | 来源 |
|---|---|---|
| R3 全部裁判 | §7 表在对应姿态仍全部成立(P0′ 同 P0) | 回读 |
| 交换模式 | FILE_SCHEMA 含 AP242 | 回读 header.schema(§11 扩展 4) |
| 声明数 | dimensions 3、datums 2、geometricTolerances 6 | 回读 product.engineering |
| 尺寸 link 厚度 | value 6;PLUS_MINUS 原文 lower −0.05、upper +0.05;两目标为 link 定义的两个平面面,面积各 1857.6106,质心相距 6 | dimensions + rawToleranceValues + targetShapes |
| 尺寸 pin 长度 | value 14;原文 lower −0.10、upper 0;两目标为平面面,面积各 26.4208,质心相距 14 | 同上 |
| 尺寸 base 厚度 | range lower 5.95、upper 6.05;两目标为平面面,面积各 1539.5558,质心相距 6 | 同上 |
| 基准 A | name A;目标为 link 的平面面,面积 1857.6106,经任一 link 实例世界矩阵变换后法向 (0,0,−1) |
datums + targetShapes |
| 基准 B | name B;目标为 base 的平面面,面积 1539.5558,法向 (0,0,1) |
同上 |
| 公差 link 平面度 | Flatness、值 0.02、valueKind None、目标 = 基准 A 的面、无基准引用 | geometricTolerances |
| 公差 link 平行度 | Parallelism、值 0.03(P0′ 为 0.05)、None、目标为 link 另一平面面(法向 +Z)、基准引用 = [A] | 同上 |
| 公差 link 垂直度 | Perpendicularity、值 0.02、Diameter、目标为圆柱面半径 3、面积 113.0973,轴线经 link_1 世界矩阵变换后过 J1;基准引用 = [A] | 同上 |
| 公差 pin 圆柱度 | Cylindricity、值 0.01、None、目标为圆柱面半径 2.9、面积 255.0973、无基准引用 | 同上 |
| 公差 base 平面度 | Flatness、值 0.02、None、目标 = 基准 B 的面 | 同上 |
| 公差 base 垂直度 | Perpendicularity、值 0.02、Diameter、目标为圆柱面半径 3、面积 113.0973、轴线过世界 (0,0);基准引用 = [B] | 同上 |
值与面积的误差 ≤ 1e-6(相对),法向与轴线方向误差 ≤ 1e-6;类型名与 valueKind 用 OCP 的枚举名。
图纸判据(P0、P0′、P2 每个都必须满足):
| 裁判 | 真值 | 来源 |
|---|---|---|
| 文件 | 经 文件 → 导出图纸 得到 .svg;XML 可解析;根 width 420mm、height 297mm;<metadata> 是 JSON |
SVG 读取(§11 扩展 5) |
| 修订绑定 | metadata.revisionId 与同姿态 STEP 文件名里的修订号相同;productResultHash 非空 | 同上 |
| 视图 | 3 个 data-view-id;data-view-label 文本为 TOP、FRONT、A-A;相机同上文真值;只有 A-A 声明 sectionSide 且为 negative |
同上 |
| 剖切线 | TOP 视图内有 data-cutting-plane="A",其 data-section-view 指向 A-A 视图 |
同上 |
| 剖面 | A-A 视图内 data-section-path 去重计数:P0、P0′ 为 11,P2 为 5 |
同上 |
| 工程尺寸 | FRONT 视图恰有一个 linear-engineering 尺寸;metadata 里 range.minimum 5.95、maximum 6.05、nominalDeviations {6, −0.05, +0.05};文本与声明一致 | 同上 |
| 参考尺寸 | TOP 视图恰有一个 linear-reference、measurement projected、value 40(误差 ≤ 1e-6) | 同上 |
| 基准框 | 2 个 data-engineering-frame="datum",title 为 Datum | A 与 Datum | B |
同上 |
| 公差框 | 6 个 data-engineering-frame="tolerance",title 多重集合 = {flatness | unqualified | 0.02 mm ×2、parallelism | unqualified | 0.03 mm | 1: A(P0′ 为 0.05 mm)、perpendicularity | diameter | 0.02 mm | 1: A、cylindricity | unqualified | 0.01 mm、perpendicularity | diameter | 0.02 mm | 1: B} |
同上 |
| 参数 | parallelismTolerance 存在且可本地编辑(P0′ 即检验);joint1–3 仍可编辑(P2 即检验) | 工作台 |
| 声明随零件走 | 保存副本里,每条工程声明(尺寸的 first/second、基准的 target、公差的 targets)凡指向 exact.program 体的面,都是按名字的引用({producerNodeId, name, policy},名字来自程序的 namedShapes),不是 lineage 引用;至少 11 处 |
扩展 7(2026-09-16 补记,见下) |
判据补记(2026-09-16):“声明随零件走”是 R6-3 之后加的:R4-15 的副本用 includeReferences 读回的 lineage 引用(一次求值的 program-face 起源)声明连杆的面,两次 R4 判据都过,却在 R6 的第一次参数改动上全部失效——密封契约下 lineage 引用只指向一次求值。R4 的判据此前测不出这一点;现在从保存副本静态判定。宿主同时改为在编译期把指向已命名程序面的 lineage 引用改写成名字、把未命名的拒绝(148823da),所以这条判据在新构建上不可能因模型的写法而失败——它守的是宿主。R4-14 的副本满足(14 处全按名字),R4-15 的副本不满足;R4 的冻结须在含该判据与该宿主规则的构建上重新建立。
运行前置:§11 扩展 4(目标子形状量、文件模式)与扩展 5(SVG 读取)补齐并零成本核对后才可付费运行;核对结果记入本节。
判据核对(2026-09-14,零成本):扩展 4 在 make_pmi_fixture.py 的 AP242 零件上读出尺寸两目标(面积 600、法向 ∓X、质心相距 10)、基准 A 目标(面积 200、法向 +Z)
与两条公差的目标标签及 FILE_SCHEMA 原文(该夹具头部写的是 AUTOMOTIVE_DESIGN,扩展如实报出);扩展 5 在 M2 结项的产品图纸上读出工程尺寸文本
10.00 (-0.20 / +0.10) mm 与元数据 range、Datum \| A 与两个公差框标题、剖视图两个剖面实例与剖切线 B → section。R4 判定脚本在这些输入上运行无误。
冻结(2026-09-14):提交 80e55a30 上 R4-11、R4-12 连续两次全部裁判通过(见第二轮结果);到冻结为止 R4 修了九个产品项,其中计划契约新增 update-product
(增量合并、扁平路径/值条目、条目值 ≤ 4 层)、固定量纲数字简写、相机约定文本、非法 JSON 的括号账反馈、图纸版面诊断带定位、线上历史压缩与图纸载荷剔除,
判据本身未改。R5 起始文件为 R4-12 的保存副本(修订 c0de8e82…,字节 sha256:157715c8…68a4)。
9. R5:STEP 导出、再导入与外部更新(身份保持)
Section titled “9. R5:STEP 导出、再导入与外部更新(身份保持)”读法:R5 压在 M2 的交换承诺上——S7 的结构化导入(共享零件、装配层级、刚体放置、文件内的工程声明、文件内标签到产品元素的来源映射) 与跨文件显式对应的更新,S8 的撤销/重做与项目文件保存后重开。“后续改”取外部文件更新:设计侧把姿态改到 P2 后重新交付同一产品的 STEP,消费侧用显式对应更新已导入的产品,元素 ID、物料身份与工程声明不变,姿态随文件变化。这条路径 M2 结项时只在单零件夹具 (一条尺寸、一个基准、两条公差)上核对过,从未在 15 实例、三层嵌套、六个共享定义、三条尺寸、两个基准、六条公差的装配上核对过。 R5 的产物是交换副本,不含参数,不做本地姿态切换,姿态由文件带入;R6 改 centerDistance 需要参数化文档,起始仍为 R4 的冻结副本(§3 表)。
起始:空模型(新的 ?store=),加两份预先暂存的 model/step 资源(宿主的资源暂存接口,不经 provider,不创建几何;名称
arm-p0.step、arm-p2.step):F0 = R4 冻结副本在 P0 (0, 0, 0) 导出的 STEP(即 R4-12 的 P0 导出,sha256:8fdccb67…a3f4,126,499 字节);
F2 = 同一副本在 P2 (30, 45, −60) 导出的 STEP(R4-12 的 P2 导出,sha256:ad867d45…87c8,126,709 字节)。两份文件由独立回读核对:
定义、组件、声明的 XCAF 标签集合逐一相同,只有组件局部矩阵不同。指令(逐字):
当前是空模型。项目里已暂存两份 STEP 文件资源:arm-p0.step 是一台三节舵机臂产品在 joint1 = joint2 = joint3 = 0 时导出的文件;arm-p2.step 是同一产品把关节角改为 30°、45°、−60° 后导出的新版本。两份文件的零件定义、装配层级、组件与工程声明相同,只有组件放置不同。(1) 把 arm-p0.step 作为产品导入本模型,命名空间用 arm:共享零件定义、装配层级、组件放置以及文件里的工程尺寸、基准与几何公差一并进入产品。(2) 文件里六种零件各带一条物料身份:PRODUCT 的 id 是物料编号(partNumber),PRODUCT_DEFINITION_FORMATION 的 id 是修订(partRevision);导入时为六个零件定义逐一声明与文件相同的物料身份,三个装配定义不声明身份。(3) 然后用 arm-p2.step 更新这个导入的产品:新文件的每个元素显式对应旧文件里的同一元素——同名的定义与组件、同一条尺寸、基准与公差——不新增也不删除任何元素;更新后零件定义、装配、组件、工程声明与物料身份的 ID 保持不变,产品处于新文件的姿态。不要新建零件或装配,不要改动几何、物料身份或工程声明的值。
指令不给出六条身份的值:产品的资源检查(aira_inspect_brep)按文件报出 PRODUCT / FORMATION 记录与定义的对应,身份能否经交换保持,
取决于产品是否把这条信息交到模型手上,而不是模型能否抄写 §7 的表。
真值(除注明外与 §7、§8 相同):
- 几何与放置:F0 对应 §7 表的 P0,F2 对应 §7 表的 P2(含 §6 正运动学的 J_k、M_k);15 个实体、总体积 46,747.2862、105 对求交为空。
- 物料身份:§7 的六条 PRODUCT / FORMATION 记录(id = 物料编号、name = 零件名、FORMATION.id = A);装配记录不带身份(FORMATION.id 空、id = 名称)。
- 名称:装配定义名
base-link-pin hinge、link-pin section 2、link-pin section 3;组件名按装配:hinge {arm2, base, link, pin, screw1, screw2, screw3, screw4, servo, washer},section 2 {arm3, link2, pin2, washer2},section 3 {link3, pin3, washer3}。这些名字是 R2、R3 时模型自选的标签, 真值即“与 F0 逐字相同”,由 F0 的独立回读固定。 - 工程声明:§8 STEP 判据表(3 尺寸、2 基准、6 公差,parallelism 0.03;P0′ 不适用),目标面积、法向与轴线经实例世界矩阵变换后与对应姿态一致。
- 交换来源:单一命名空间
arm;元素集合 = F0 的全部定义、组件、尺寸、基准、公差标签;更新后 contentHash 由 F0 变为 F2、byteLength 由 126,499 变为 126,709,每个元素指向的产品元素(body / assembly / component / dimension / datum / tolerance 的 ID)不变。 - 修订:撤销与重做各是一次以旧修订为内容的新修订(产品的 restore 语义);撤销后修订的 modelHash 等于更新前修订的,重做后修订的 modelHash 等于更新修订的。
操作者步骤(零费用,顺序固定):E1 任务终态(更新后)导出 STEP;E0 用工作台的“撤销编辑”逐步回退到更新前的修订(以 exchangeSources
的内容哈希回到 F0 为准),导出 STEP;E2 用“重做编辑”回到更新后的修订,文件 → 保存副本得到 .aira.json,在新的 ?store= 用文件 → 打开项目
打开它,导出 STEP。三份 STEP 各自回读;.aira.json 用 §11 扩展 7 读取一次。
STEP 判据(E0 按 P0 真值,E1、E2 按 P2 真值,每份都必须满足):
| 裁判 | 真值 | 来源 |
|---|---|---|
| R3 全部裁判 | §7 表在对应姿态全部成立(含物料身份与用量) | 回读 |
| §8 STEP 判据 | 交换模式 AP242、声明数 3 / 2 / 6、三条尺寸、两个基准、六条公差逐项同 §8(parallelism 0.03) | 回读 product.engineering + targetShapes |
| 名称保持 | 三个装配定义名与每个装配的组件名集合同上文真值 | 回读 product.definitions |
| 重开一致 | E2 的 STEP 文件名中的修订号 = 保存的 .aira.json 的 head 修订号 |
文件名 + 扩展 7 |
项目文件判据(.aira.json 读一次,全部必须满足):
| 裁判 | 真值 | 来源 |
|---|---|---|
| 修订链 | 存在导入修订(product 首次出现、exchangeSources.arm.contentHash = F0)、更新修订(contentHash = F2)、撤销修订与重做修订;更新修订的父链经过导入修订;撤销修订的 modelHash = 更新前最后一个修订的 modelHash,重做修订的 modelHash = 更新修订的 modelHash | 扩展 7 |
| ID 保持 | 更新前最后一个修订与更新修订:assemblies 的键、每个装配的组件键与其 definition 引用、bodies 的键、partIdentities(键与值)、linearDimensions / datums / geometricTolerances 的键逐一相同 | 扩展 7 |
| 来源映射 | 两个修订的 exchangeSources 只有 arm 一个来源;elements 的键集合相同,每个键指向的产品元素相同;contentHash / byteLength 由 F0 的变为 F2 的 |
扩展 7 |
| 放置更新 | 更新修订里每个组件(F2 里各装配定义的全部组件——对话回路链的文件是 17 个:15 个零件实例 + 2 个子装配组件;文件带自己的数)的平移与绕 Z 的旋转与 F2 回读的同名组件局部矩阵一致(平移 ≤ 1e-6 mm、角度 ≤ 1e-6°) | 扩展 7 + F2 回读 |
| 资源完整性 | 保存文件带且只带两份 model/step 资源:contentHash 与声明字节数分别等于 F0、F2 的,所存字节的 SHA-256 等于其 contentHash |
扩展 7 |
放置更新的判据用 F2 回读的组件局部矩阵(product.definitions[].components[].localMatrixColumnMajor):平移取第四列,Z 角取 atan2(m[1], m[0]);组件按装配名 + 组件名配对,同名组件按文件次序配对(导入把文件次序保留为组件 id 次序;0.3.0 链的 main 里四个螺钉实例同名 screw,2026-09-16 补记);
本产品的所有放置都是绕 Z 的旋转加平移(§2),X、Y 角应为 0。
运行前置:§11 扩展 7(项目文件读取)补齐并零成本核对后才可付费运行;判定脚本先把 F0、F2 当作 E0、E1 的替身跑 STEP 判据(应全部通过), 再在假 provider 脚本化 import + update 的真实产物上核对项目文件判据与导出判据;核对结果记入本节。费用上限 $1.50(§14)。
判据核对(2026-09-14,零成本):F0、F2 作替身时 E0、E1 各 44 项 STEP 判据全部通过。假 provider 按指令的路径脚本化(列资源、检查 F0、
带六条身份的 imported-product、读产品、检查 F2、38 条元素恒等对应的 update-imported-product)在真实产品上跑:第一次在“检查 F0”处停止——
网关向模型声明了 aira_inspect_brep 与 aira_stage_brep,浏览器代理却只执行读与计划,响应停在无人应答的调用上,任务判 GATEWAY_STEP_LIMIT;
模型看不到它被要求导入的文件。这是工作台代理环的产品缺陷,修于 c5f07096(两个资源工具在宿主执行,与读同级)。绕过它的变体(导入后按 body 标签
补身份、按旧标签恒等对应更新)与修复后的完整路径都得到产品的三份导出与保存文件:E0 / E1 / E2 各 44 / 44 / 45 项、项目文件 5 项,共 138 项全部通过——
15 实例、三层嵌套、六个共享定义、3 尺寸 / 2 基准 / 6 公差经导入、外部更新、撤销、重做、保存与重开后逐项守恒,元素 ID 与身份不变;
产品检查报出的 PRODUCT / FORMATION 记录带 sourceDefinition 对应,模型据此声明的六条身份与 §7 一致。R5 可在授权后运行。
冻结(2026-09-15):提交 c5f07096 上 R5-1(repaired,$0.34)、R5-2(first-try,$0.29)连续两次 138 项裁判全部通过(见第二轮结果)。
两次运行模型都从文件检查读出六条身份并按文件条目声明,更新都用 38 条恒等对应;R5-1 的一次宿主拒绝来自导入步的 expect {solids 6}——
产品级步骤的 expect 量的是主根 body,契约文本未说明,记为待补项。R6 起始为 R4 的冻结副本(§3 表),不是 R5 的产物。
10. R6:改 centerDistance 的全链更新
Section titled “10. R6:改 centerDistance 的全链更新”读法:R6 压在 S2(几何持续编辑)与 S4(参数传播)上,用一条设计变更问整条链:连杆定义的 centerDistance 从 80 改为 100 后,三个 link 实例、
第二三节的关节位置(pin、washer、下一节装配的原点)、关节角参数、物料身份、工程声明与关联图纸是否仍然一致。R4 冻结副本里第二三节的
七处放置写的是常量 80(arm2 里 arm3 / link2 / pin2 / washer2,arm3 里 link3 / pin3 / washer3 的 x 平移),不是对 centerDistance 的引用——
这是 R1、R2 时模型自选的表达,本地改参数不会带动装配。R6 因此既判“改完后一致”,也判放置是否真的绑定了参数(保存文件里七处 x 平移必须是对 centerDistance 的引用,而不是常量 100)。
文档里还带着 R0–R3 持久化的 29 条独立要求,其中两条写死了 80:连杆的边界要求(assert.bounds,max x = 90)与孔阵列要求
(assert.holeArray,fixed-centers 0 → 80)。按契约,独立要求是与驱动参数无关的数字(“never copy measurements or bind driving parameters”),
所以改参数必然先撞上它们——宿主按设计拒绝(零成本回放:set-parameters 单独提交即 EXACT_GRAPH_ASSERTION_FAILED),模型必须显式改写这两条
要求而不是删掉它们,这正是 S2 的“持久设计意图下的持续编辑”。同一规则决定了“此后再改随动”不能用本地参数编辑检验:本地编辑没有改写要求的
入口,把 centerDistance 设为 90 的候选会被连杆边界要求拦下、头修订不变——这本身就是 S4 的判据(参数传播受持久要求约束),记为 P3。R5 的导入 / 更新路径与几何无关、已在 c5f07096 上冻结,R6 不重跑;R6 的 P0 导出满足 R5 起始文件
的全部条件(身份、名称、AP242 声明)即视为 R5 判据成立,这些条目已含在下表。
起始:R4 的冻结副本(R4-12 保存副本,修订 c0de8e82…,字节 sha256:157715c8…68a4,joint1 = joint2 = joint3 = 0,centerDistance = 80,
parallelismTolerance = 0.03,图纸 sheet1)。指令(逐字):
把连杆定义的中心距参数 centerDistance 从 80 mm 改为 100 mm,并让整个产品随之一致更新:三个 link 实例仍共用同一定义;第二、三节的关节(pin、washer 与下一节装配的原点)随中心距移到距上一关节 100 mm 处,各层高度不变;关节角参数 joint1、joint2、joint3 及其他参数、命名、物料身份、工程尺寸、基准、几何公差与图纸保持有效且含义不变;base、pin、washer、screw、servo 的几何不变;不新建零件或装配;已声明的独立要求(连杆的边界与孔阵列)随中心距一起更新,不得删除。要求此后再改 centerDistance 时,关节位置与各节装配随参数一起移动,无需再改放置。
真值(L = centerDistance;除注明外与 §7、§8 相同):
- link = L·20·6 + 492π:L=100 时 13,545.6636;link 大平面面积 = 20L + 82π = 2257.6106。其他零件不变。
- 总体积 = 46,747.2862 + 3·120·(L − 80):L=100 时 53,947.2862。
- 正运动学同 §6,把 80 换成 L:J2 = L·(cos θ1, sin θ1),J3 = J2 + L·(cos(θ1+θ2), sin(θ1+θ2)),E = J3 + L·(…);M_k 仍是 J_k 与 J_{k+1} 的中点,Z 分层不变; washer_k、pin_k 质心在 J_k;screw、servo、base 不变。
- 剖面:Y=0 平面切到的实例数与 L 无关(P0 为 11,P2 为 5:第一节 link 在关节 1 的端部半圆总跨过 Y=0)。参考尺寸 (−20,0,0)–(20,0,0) 仍为 40。
- 工程声明:§8 STEP 判据表原样,只有 link 大平面面积改为 20L + 82π;parallelism 0.03。物料身份不变(link 仍是 LINK-80 / A:R6 判参数传播,不判修订语义)。
| 姿态 | L | (θ1, θ2, θ3) | J2 | J3 | E | M1 / M2 / M3(XY) | 整体边界(XY;Z 恒为 −13 – 27.5) |
|---|---|---|---|---|---|---|---|
| P0 | 100 | (0, 0, 0) | (100, 0) | (200, 0) | (300, 0) | (50,0) / (150,0) / (250,0) | [−20, −20] – [310, 20] |
| P2 | 100 | (30, 45, −60) | (86.60254, 50) | (112.48444, 146.59258) | (209.07703, 172.47449) | (43.30127, 25) / (99.54349, 98.29629) / (160.78074, 159.53353) | [−20, −20] – [219.07703, 182.47449] |
姿态与本地编辑(零费用,顺序固定):任务终态即 P0(centerDistance = 100,关节 0),导出 STEP 与图纸;P2:本地设关节 (30, 45, −60),导出 STEP 与图纸,
设回 0;P3:本地把 centerDistance 设为 90(link 程序的参数编辑器)——产品必须以连杆边界要求拒绝该候选(EXACT_GRAPH_ASSERTION_FAILED,
“requires the declared world-axis bounds”),操作者丢弃候选,头修订与 centerDistance = 100 不变;不导出。
STEP 判据(P0、P2 每个都必须满足,按各自姿态,L = 100):
| 裁判 | 真值 | 来源 |
|---|---|---|
| R3 全部裁判 | §7 表按上文真值:15 实体、6 定义、总体积、边界、三个 pin / link / washer 与 screw / servo 质心、105 对无干涉、六条身份、用量 | 回读 |
| §8 STEP 判据 | AP242、声明数 3 / 2 / 6、三条尺寸、两个基准、六条公差逐项同 §8,link 大平面面积 20L + 82π | 回读 product.engineering + targetShapes |
图纸判据(P0、P2 必须满足):§8 图纸判据表原样(视图与相机、剖切线 A、剖面数 11 / 5、工程尺寸 6 (−0.05/+0.05) 与 5.95–6.05、参考尺寸 40、 两个基准框、六个公差框、修订绑定)。
P3 判据:本地把 centerDistance 设为 90 的候选状态为 candidate-invalid,消息含 EXACT_GRAPH_ASSERTION_FAILED 与连杆边界要求;丢弃后头修订等于
编辑前、centerDistance 仍为 100。
参数判据:任务终态 centerDistance = 100;joint1–3 可编辑(P2 即检验);参数集合与 R4 相同(不新增、不丢失)。
项目文件判据(任务终态的保存副本,§11 扩展 7 读一次):
| 裁判 | 真值 | 来源 |
|---|---|---|
| 放置绑定 | arm2 里 arm3 / link2 / pin2 / washer2、arm3 里 link3 / pin3 / washer3 的 x 平移都是对 centerDistance 参数的引用({parameter}),其余放置坐标不变 |
扩展 7 |
| 要求随动 | 独立要求仍为 29 条;连杆的 assert.bounds max = (110, 10, 6)、min 不变;连杆的 assert.holeArray x 规则 fixed-centers 0 → 100;其他要求逐字不变 |
扩展 7 |
上表按对话回路链(R4-12 副本)的实例写;判据的一般形式(2026-09-16 为 0.3.0 链补记,判据本身不变):放置绑定 = 起始文件里放在中心距处的每个组件(x 平移为常量 80,或已引用 centerDistance 参数——0.3.0 链在 R2 就绑定了 asm.arm / asm.cell 的 next / pin / washer 六处)在终态都引用 centerDistance 这一个参数,其余放置坐标与定义不变;要求随动 = 条数不变,连杆上每条 assert.bounds(min/max 形式 max → (110, 10, 6);size 形式 → (120, 20, 6))与每条 assert.holeArray(x 规则 0 → 100)都随动,其他要求逐字不变。对话回路的冻结记录(R6-2)在一般形式下仍 109/109。
运行前置:判定脚本把 §7 的正运动学与 link 体积按 L 参数化、扩展 7 补读独立要求后,先在假 provider 脚本化七处放置绑定参数 +
set-parameters(带两条要求改写)的真实产物上核对 P0、P2、P3 与项目文件;核对结果记入本节。费用上限 $1.50(§14)。
判据核对(2026-09-15,零成本):假 provider 三次回放定下了顺序与内容。(1) 只提交 set-parameters 100:宿主拒绝,连杆边界要求
assert.plan.03c07802…1.2 不再成立;(2) set-parameters 带两条要求改写但先于放置绑定:宿主拒绝 assert.productDistance …4.1(pin2 与第一节 link
的 0.1 mm 间距)——参数一改,几何先动而关节没动;(3) 先把七处放置绑定到参数(参数仍为 80,几何不动),再 set-parameters 100 并改写两条要求:
两步都提交,图纸读回正常。产物 P0 / P2 各 52 项裁判全部通过(15 实体、总体积 53,947.2862、L=100 的关节与质心、105 对无干涉、身份、AP242 三条尺寸
两个基准六条公差(link 面 2257.6106)、图纸剖面 11 / 5、尺寸与八个框);项目文件三项通过(七处 x 平移引用 p.plan.03c07802…1.1、其余坐标不变、
29 条要求只有连杆边界与孔阵列两条改成 110 / 100);P3 本地设 90 被连杆边界要求拦下,丢弃后头与参数不变。共 109 项。R6 可在授权后运行。
冻结(2026-09-15):提交 c5f07096 上 R6-1(first-try,$0.49)、R6-2(repaired,$0.57)连续两次 109 项裁判全部通过(见第二轮结果)。
两次模型都先把七处放置绑定到参数、再改参数并改写两条持久要求;R6-2 的一次宿主拒绝来自 set-parameters 的 affects 漏列孔壁面(守恒校验点名后补上)。
探测环 R0–R6 至此全部冻结;后续变更只因相关实现变化、失败或具体新反例重开(§13)。
11. 裁判与回读
Section titled “11. 裁判与回读”回读命令沿用增长基准:
uv run --no-project --python 3.12 --with cadquery-ocp-novtk==7.8.1.1 python tools/independent-step-verifier/verify_step.py <STEP>现有输出已覆盖:整体有效性、实体数、体积、边界、product.definitions(定义、组件与局部矩阵)、product.occurrences(实例路径与世界矩阵)。
R1 起还需要两项裁判扩展,属于 §12 的“裁判缺失”类,必须在 R1 首次付费运行前补齐并零成本验证(用手工构造的 STEP 或 R0 结果):
- 逐实例世界量:对每个 occurrence 把定义形状按世界矩阵变换后计算体积、质心与边界,输出到
product.occurrences[].world。 - 两两求交:对全部实例对做
BRepAlgoAPI_Common,输出每对的求交体积;“为空”定义为结果不含实体或体积 ≤ 1e-9 mm³。
两项都只读 STEP,不依赖 Aira 运行时,保持“独立回读”的含义。R1、R2 的名称与用量由工作台产品树核对;R3 起用量改由 STEP 实例按定义计数判。
R3 起再需要第三项扩展(同样先于付费运行补齐并零成本验证):
- 标准产品记录:从 STEP 文本直接读取每条
PRODUCT(id, name, …)与引用它的PRODUCT_DEFINITION_FORMATION(id, …),输出到product.standardProducts[](productId、productName、formationId)。产品把 partNumber 写入 PRODUCT.id、partRevision 写入 FORMATION.id、零件名写入 PRODUCT.name(M2 已核对),所以物料身份可以不经 Aira 运行时判定。
R3L 需要第六项扩展(同样先于付费运行补齐并零成本核对,可用 R3 的保存文件——它应报告 screw 的 Body 程序无 iso4762 调用):
- 逐 Body 库调用:从阶段结束时保存的
.aira.json读取每个exact.program节点的inputs.source.const.value与该程序所推进的 Body, 列出源码中的r.<name>标识符,输出为bodies[<bodyId>].libraryCalls[]。机械提取、不做判断;R3L 的主判据只看 screw 的 Body 里有没有那一个名字。
R4 起再需要两项扩展(同样先于付费运行补齐并零成本核对):
- 标注目标子形状量与文件模式:验证器已读出
product.engineering(尺寸、基准、几何公差及其目标标签)。对每个目标标签从 XCAF 子形状标签取形状, 输出product.engineering.targetShapes[<标签>]:kind、surface(plane / cylinder / 其他)、area、centroid、平面的 normal、圆柱的 axis 与 radius, 均在零件定义局部坐标系;裁判用实例世界矩阵把法向与轴线变换到世界系。另从 Part 21 头读FILE_SCHEMA原文到header.schema。 零成本核对用make_pmi_fixture.py的输出(一个 ±尺寸、基准 A、平面度、垂直度)。 - 图纸 SVG 读取:用标准库 XML 解析交付的 SVG,不依赖 Aira,输出图幅尺寸、
<metadata>JSON、每个视图的 id / label / 相机 / sectionSide、 剖面区域按data-section-path去重计数、尺寸组的 id 与文本、标注框的<title>、剖切线标记。脚本放在验证器旁 (tools/independent-step-verifier/read_drawing_svg.py),先用零成本产出的图纸(假 provider 脚本化 set-product)核对。
R3M 需要第八项扩展(2026-09-15 已补入并零成本核对,见 §7.3):
- 用户定义属性:从 STEP 文本沿
PROPERTY_DEFINITION(挂在PRODUCT_DEFINITION上)→PROPERTY_DEFINITION_REPRESENTATION→REPRESENTATION→DESCRIPTIVE_REPRESENTATION_ITEM读出每个零件定义的键值对,原样输出到product.standardProducts[].attributes。 产品把材质写成aira:materialId/aira:materialName(STEPCAF 对TDataStd_NamedData的标准写法),身份键aira:partNumber/aira:partRevision也在其中;扩展只读不判。
R5 需要第七项扩展(同样先于付费运行补齐并零成本核对):
- 项目文件读取:用标准库 JSON 读取文件 → 保存副本得到的
.aira.json,不依赖 Aira,输出每个修订的 id、父修订、modelHash、产品结构骨架 (root、assemblies 及其组件的 definition 引用与数值放置——引用参数的坐标原样报{parameter}——partIdentities、exchangeSources 的 contentHash / byteLength / elements、尺寸 / 基准 / 公差的键)、bodies 与 nodes 的键,以及所存资源的 contentHash、声明字节数与实际字节的 SHA-256。脚本放在验证器旁(tools/independent-step-verifier/read_project_revisions.py),先用 R4-12 的保存副本核对(34 个修订、无资源), 再用假 provider 脚本化 import + update 的保存文件核对。
步进回路重跑(有界步进架构计划 N4,2026-09-15 起)需要第九项扩展:
- 步记账:宿主每步只送一个有界胶囊(一条用户消息)与一份当步决策 schema(唯一工具
aira_step的 inputSchema),网关无状态、一步一次提供方调用。 结果行新增context(loop、tier、capsuleLimitBytes、capsuleMaxBytes、capsuleMaxTokens= 最大胶囊字节 / 4 向上取整、capsuleMeanBytes、promptMaxTokens(提供方报的单步最大输入 token)、decisionSchemaMaxBytes、steps、rounds与promptMaxBytes(步进回路 0.3.0 起:一轮一胶囊 + 只追加的日志,提示词 = 胶囊 + 日志,promptMaxBytes是其最大值;之前等于capsuleMaxBytes)、decisions(各动作计数)、rejections(畸形决策 + needs-repair 计划)、modelsUsed、cacheHitTokens/cacheMissTokens、reasoningTokens、planCharacters)。度量来源:页面对/api/step的请求与响应原样抓取 (胶囊与 schema 字节由请求体量出,token 与推理量由提供方 usage 报出),不经产品计量表。对话回路的行没有context。
12. 失败分类与去向
Section titled “12. 失败分类与去向”每次失败在写结果行之前归入且只归入一类;归类后才允许改代码。
| 类别 | 典型例子 | 复现要求 | 去向 |
|---|---|---|---|
| 模型行为 | 查库两次才找到方法签名;期望值写错被宿主拒绝后自行改对 | 不复现 | 只计量;若稳定出现,作为增长基准的新格提案,不改产品逻辑 |
| 契约表达不了 | AMIR 无法声明“绕孔轴线转过参数角度”的实例放置 | 写出最小 AMIR 片段说明为何不可表达 | 接受域表新增待裁定行;是否进承诺按承诺列裁定 |
| Core / 运行时缺陷 | 导出 STEP 的实例矩阵丢旋转;共享定义被展开成两份 | 零成本复现:回放保存的计划或程序,不经 provider | 缺陷单;修后复现固化为回归 |
| 裁判缺失 | 回读报不出实例质心 | 手工 STEP | 先补验证器;补齐前该阶段不判、不付费 |
| 指令歧义 | 一句指令有两种自洽读法 | 两种读法各写一份真值 | 改指令、记勘误;原判保留 |
固化回归的去处:有闭式真值且单实体的,进增长基准任务集提案;其他进 target-probe-results/ 旁的回归清单,裁判仍是本协议的独立回读。
13. 一轮流程
Section titled “13. 一轮流程”- 启动真实栈(网关 dist + Web dist + 夹具/抓取助手),记录 §15 的全部控制变量。
- 载入本阶段起始文件(R0 为空白文档),核对 SHA-256。
- 提交逐字指令,等待终态;不干预、不补指令。
- 操作者本地切换每个姿态,导出 STEP,回读,逐裁判填表。
- 任一裁判失败:按 §12 归类,写结果行,停止本阶段;修复后从第 2 步重跑本阶段,不重跑已冻结阶段。
- 全部裁判通过:保存文件记 SHA-256,作为下一阶段起始。
只因相关实现变化、失败或具体新反例重开验证;不因等待凭据新增功能、扩张测试或重复选型。
14. 终止、封顶与冻结
Section titled “14. 终止、封顶与冻结”- 单次任务预算沿用产品默认,不为探测放宽;无计划停止按产品 TASK_TIMEOUT 判定。
- 每阶段每次尝试的费用上限:R0 $0.10、R1 $0.20、R2 $0.30;超出即停止并记
budget。 勘误(2026-09-14):R0-1 的第一次请求(4 次 provider 调用、3 次查库、1 份计划)即 $0.1105,封顶在修复轮开始前触发, 被拒的计划没有得到修复机会。上限原按增长基准的单价(创建 $0.02–0.05)估算,而当前配置一次请求输入 207,899 token、 推理 45,692 字符,该单价已不适用。自 R0-2 起上限改为 R0 $0.30、R1 $0.45、R2 $0.60;R0-1 原判budget保留。 勘误(2026-09-14,第二轮):内置代理循环改为提交后续传(见第二轮结果)后,一次 R1 任务是 4–6 份计划加多次读回:模型在组合后自行声明独立要求、 读距离、把 joint1 设为 30 自检再改回。R1-3 计 $0.42,R1-4 在改回 joint1 前触及 $0.45 停止(几何四个姿态全部通过,仍按规则记budget)。 自 R1-5 起上限改为 R1 $0.75、R2 $1.00,R1-4 原判保留。 - R3 每次上限 $1.00(第二轮起)。勘误(2026-09-14,第二轮):修复构建上 R3-4 任务 7 分钟完成、60 项裁判全部通过,但结算 $1.07;一次任务 $0.56–1.07,
差额来自模型自纠(每次全上下文调用约 $0.1)。自 R3-5 起 R3 上限改为 $1.50,R3-4 原判
budget保留。 - R4 每次上限 $1.50:一次 R4 任务预计 8–12 次请求(读三个程序源码、三次程序替换、一次产品声明、图纸回读与版面修正), 按 R3 实测每次请求 $0.08–0.12 估算。
- R5 每次上限 $1.50:一次 R5 任务预计 6–10 次请求(列资源、检查两份文件、一次导入、读产品、一次更新、读回),文件检查的输出 (9 个定义、15 个组件、11 条声明)比 R4 的程序源码短,但每次请求仍按 $0.08–0.12 估算。
- R6 每次上限 $1.50:一次 R6 任务预计 5–10 次请求(读产品、改参数、七处放置改绑定、读图纸与可能的版面修正)。
- 冻结条件:同一提交下从干净起始连续 2 次全部裁判通过。第一次通过后的第二次是确认,不是统计。
步进回路(
?loop=step)上的冻结另加一条:两次的context.capsuleMaxTokens都 ≤ 档位 B(T128 为 96,000 token,宿主按 4 字节 / token 计为 384,000 字节);0.3.0 起有界的是提示词(胶囊 + 本轮日志),条件改为promptMaxBytes / 4 ≤ B(宿主每步断言,超出即压缩),capsuleMaxTokens仍记录。 步进回路是新架构,R0–R6、R3S、R3M 在它上面各自重新冻结,对话回路的冻结不移交。 - 同一缺口连续 2 次修复后仍失败,停止本阶段并回到 §12 重新归类,不继续付费试探。
15. 产出与记录
Section titled “15. 产出与记录”docs/benchmarks/target-probe-results/<日期>-<提交号>.md:每阶段每姿态一行裁判表,加失败分类与缺口去向;结论只陈述测到的,不外推。docs/benchmarks/target-probe-results/<日期>-<提交号>.jsonl:每次付费运行一行,字段固定为:stage、sample、commit、webDistSha、gatewayDistSha、runtimeId、model、startFileSha、instructionSha、outcome(first-try/repaired/failed/budget)、failureClass(§12 五类之一或none)、issue、usage(calls、lookups、inputTokens、outputTokens、cost、priceDate)、timing(provider、cad、total)、poses[](角度、stepSha、verifySha、逐裁判 pass/fail)。首次运行前把它写成target-probe.schema.json并校验。 步进回路的行另带context(§11 扩展 9)。- 控制变量与增长基准 §8 相同:提交号、两份 dist 哈希、运行时身份、模型与推理配置、预算、起始文件与指令哈希、牌价日期、浏览器与机器。
- STEP、
.verify.json与抓取 JSON 存临时目录,SHA-256 写入结果;驱动脚本不进仓库。
16. 费用估算与历史对照
Section titled “16. 费用估算与历史对照”按增长基准实测单价(创建 $0.02–0.05、结构续改 $0.01–0.05):R0、R1、R2 各 2 次,合计约 $0.2–0.5; 实测(2026-09-14):续传后一次 R1 任务 $0.36–0.48、R2 任务 $0.36–0.69;R3 每次上限 $1.00,估计 $0.5–1.0,冻结两次约 $1–2; R3 实测 $0.56–1.07(含模型自纠);R4 每次上限 $1.50,估计 $0.8–1.2,冻结两次约 $2–3;R4 实测干净通过 $0.74–1.02,十二次共 $10.79(九个产品项的修复重跑在内); R5 每次上限 $1.50,估计 $0.6–1.0,冻结两次约 $1.5–2;R5 实测 $0.29–0.34,两次共 $0.63;R6 每次上限 $1.50,估计 $0.5–1.0,实测 $0.49–0.57,两次共 $1.06;R3M 每次上限 $1.50,估计 $0.5–1.0(六个赋材步骤可合成一份计划,查库与拒绝修正另计); 每阶段首次失败后的修复重跑另计,按 §14 封顶。姿态切换与回读零费用。
16.1 0.4.0 单管线复合计划(Composite Plan)突破基线(2026-09-17,提交 4a439bd1)
Section titled “16.1 0.4.0 单管线复合计划(Composite Plan)突破基线(2026-09-17,提交 4a439bd1)”在引入 1.5 KB 紧凑 TypeScript 签名(COMPACT_STEP_SIGNATURES)与单管线复合计划协议后,模型无需漫长的多步握手长回路,首轮直接规划输出完整原子事务:
- R1:输入 Token 816(旧回路 352,897,-99.77%),耗时 33.1s(旧回路 89.3s,-62.9%),费用 $0.0110(旧回路 $0.1768,-93.8%),裁判 30/30 全 PASS;
- R2:输入 Token 841(旧回路 475,688,-99.82%),耗时 85.9s(旧回路 200.9s,-57.2%),费用 $0.0284(旧回路 $0.2735,-89.6%),裁判 64/64 全 PASS,21 对零件干涉为 0;
- R4:单管线原子提交承载装配、基准、尺寸公差与关联三视图图纸,独立 OCP 回读完全一致。 单管线架构在消除多套管线维护负担的同时,将任务开销与延迟降至数学下界。