跳转到内容

Aira AI-CAD 真实目标探测协议(v1,2026-09-14)

本协议定义一个探测环:用一个真实、可判的目标产品分阶段驱动 AI 建模,发现产品尚未承接的能力与缺陷。 它与增长基准协议并列而不重叠:增长基准是测量环,用闭式真值和 n=5 的区间统计回答 “已知能力有多稳”;探测环回答“还缺什么”,每格只跑 1–2 次,不做统计,失败按固定分类归档并转成回归。 两个环共用真实产品入口、独立 OCP 回读与“判据先写死”的纪律,结果分目录保存,互不混入。

本版写 R0–R6 的逐字指令与判据。

  • 任务经真实 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。因此任意关节角下各体互不相交,两两求交为空是放置正确的必要条件, 而不是姿态是否可达的判断。

裁判只用与零件局部坐标系无关的量(整体体积与边界、实例世界质心、两两求交),指令不规定零件定义的局部原点,只规定装配后的世界位置。

每级冻结后才进下一级;冻结条件见 §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 冻结

起始:空白文档。指令(逐字):

从空白创建一个连杆零件:外轮廓是宽 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 起始。

起始: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 可本地编辑,改动后上述裁判在新姿态下仍成立 工作台

起始: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 即检验此项) 工作台

起始: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)。

回读命令沿用增长基准:

终端窗口
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 结果):

  1. 逐实例世界量:对每个 occurrence 把定义形状按世界矩阵变换后计算体积、质心与边界,输出到 product.occurrences[].world。
  2. 两两求交:对全部实例对做 BRepAlgoAPI_Common,输出每对的求交体积;“为空”定义为结果不含实体或体积 ≤ 1e-9 mm³。

两项都只读 STEP,不依赖 Aira 运行时,保持“独立回读”的含义。R1、R2 的名称与用量由工作台产品树核对;R3 起用量改由 STEP 实例按定义计数判。

R3 起再需要第三项扩展(同样先于付费运行补齐并零成本验证):

  1. 标准产品记录:从 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 调用):

  1. 逐 Body 库调用:从阶段结束时保存的 .aira.json 读取每个 exact.program 节点的 inputs.source.const.value 与该程序所推进的 Body, 列出源码中的 r.<name> 标识符,输出为 bodies[<bodyId>].libraryCalls[]。机械提取、不做判断;R3L 的主判据只看 screw 的 Body 里有没有那一个名字。

R4 起再需要两项扩展(同样先于付费运行补齐并零成本核对):

  1. 标注目标子形状量与文件模式:验证器已读出 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、平面度、垂直度)。
  2. 图纸 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):

  1. 用户定义属性:从 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 需要第七项扩展(同样先于付费运行补齐并零成本核对):

  1. 项目文件读取:用标准库 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 起)需要第九项扩展:

  1. 步记账:宿主每步只送一个有界胶囊(一条用户消息)与一份当步决策 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。

每次失败在写结果行之前归入且只归入一类;归类后才允许改代码。

类别 典型例子 复现要求 去向
模型行为 查库两次才找到方法签名;期望值写错被宿主拒绝后自行改对 不复现 只计量;若稳定出现,作为增长基准的新格提案,不改产品逻辑
契约表达不了 AMIR 无法声明“绕孔轴线转过参数角度”的实例放置 写出最小 AMIR 片段说明为何不可表达 接受域表新增待裁定行;是否进承诺按承诺列裁定
Core / 运行时缺陷 导出 STEP 的实例矩阵丢旋转;共享定义被展开成两份 零成本复现:回放保存的计划或程序,不经 provider 缺陷单;修后复现固化为回归
裁判缺失 回读报不出实例质心 手工 STEP 先补验证器;补齐前该阶段不判、不付费
指令歧义 一句指令有两种自洽读法 两种读法各写一份真值 改指令、记勘误;原判保留

固化回归的去处:有闭式真值且单实体的,进增长基准任务集提案;其他进 target-probe-results/ 旁的回归清单,裁判仍是本协议的独立回读。

  1. 启动真实栈(网关 dist + Web dist + 夹具/抓取助手),记录 §15 的全部控制变量。
  2. 载入本阶段起始文件(R0 为空白文档),核对 SHA-256。
  3. 提交逐字指令,等待终态;不干预、不补指令。
  4. 操作者本地切换每个姿态,导出 STEP,回读,逐裁判填表。
  5. 任一裁判失败:按 §12 归类,写结果行,停止本阶段;修复后从第 2 步重跑本阶段,不重跑已冻结阶段。
  6. 全部裁判通过:保存文件记 SHA-256,作为下一阶段起始。

只因相关实现变化、失败或具体新反例重开验证;不因等待凭据新增功能、扩张测试或重复选型。

  • 单次任务预算沿用产品默认,不为探测放宽;无计划停止按产品 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 重新归类,不继续付费试探。
  • 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 写入结果;驱动脚本不进仓库。

按增长基准实测单价(创建 $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 回读完全一致。 单管线架构在消除多套管线维护负担的同时,将任务开销与延迟降至数学下界。