# Local G2 最小必要曲率越界可行性设计 **日期:** 2026-08-01 **状态:** 已批准,独立审核通过,等待实施计划 **范围:** 仅授权一次性隔离可行性探针,不授权生产阈值或生产评价器修改 **停止旧路线:** `2026-08-01-local-g2-split-derivative-scale-recovery-design.md` 的 Task 2–4 不再执行 ## 1. 决策摘要 真实 `SingleTurn` 已证明当前 Local G2 坐标五次 Hermite 候选族无法在硬运动基元边界、严格原始曲率范围和质量门同时生效时生成可接受候选。独立设计审核进一步证明,这不是继续调整导数尺度可以解决的问题,而是当前约束组合在直线到转弯的内部边界上存在解析矛盾。 本设计保留内部运动基元边界的位置和航向硬约束,允许一次性隔离探针在车辆物理曲率上限内探索非单调曲率候选。探针的目标不是立即放宽生产门,而是测量:在现有窗口、固定曲线族和固定求解预算内,通过除严格原始曲率范围外全部既有门槛所需的最小负向反曲率和正向过冲是多少。 探针使用弧长域三次 Bézier 曲率,通过解析消去航向约束,把每个硬锚点区间的闭合问题降为两个变量、两个位置残差的有界确定性求解。共享生产树的 `LocalG2CandidateEvaluator` 和曲率阈值保持不变。若隔离结果为 `STRICT_GREEN`,下一步只能设计不修改原始范围门的生产曲线切换;若结果为 `FEASIBLE_WITH_EXCURSION`,下一步只能提交包含精确生产包络策略的新设计。本设计自身不授权任何生产实现。 ## 2. 根因与约束矛盾 ### 2.1 原候选族的结构性失败 当前 `LocalG2CandidateBuilder` 对每个坐标五次 Hermite 区间固定端点位置、切线方向、端点曲率和一阶导数长度。尺度选定后内部形状自由度为零,构造器无法直接约束整段曲率范围和 `dκ/ds`。 真实 `SingleTurn` 的八个原生产候选全部被 `CurvatureExceeded` 或 `CurvatureOvershoot` 拒绝;代表候选的最大车辆曲率约为 `0.4970`、`0.4471`、`0.4284` 和 `0.5784 1/m`,而对应原始窗口上界约为 `0.416668 1/m`。所有候选的 `dκ/ds` 峰值也没有达到 20% 改善。 以下参数族均已得到 RED: 1. 原全局导数尺度 `1.00 / 0.85 / 1.15`; 2. 内部共享曲率与内部尺度的有界组合扫描; 3. 内部锚点 `±0.05 m` 软位置偏移; 4. 内部节点左右分离导数尺度。 分离尺度探针的硬锚点误差不超过约 `2.22e-16 m`,曲率接缝误差不超过约 `5.59e-15 1/m`,但六个实际构造候选仍全部失败。坐标接缝实现不是当前 RED 的原因。 ### 2.2 严格原始范围与硬 transition 的解析矛盾 `SingleTurn` 的左窗口端点和内部 transition 位于同一原始直线,车辆航向相同。保持两点位置和航向为硬边界时,该子区间必须满足 `Δθ = 0`。 若曲率使用端点为 `c0`、`c3` 的三次 Bézier,则: ```text Δθ = L × ∫0..1 κ(u)du = L/4 × (c0 + c1 + c2 + c3) ``` 该左区间的 `c0 = 0`,内部共享正曲率 `c3 > 0`。若继续要求候选曲率不低于原始最小值零,则 `c1,c2 >= 0`,从而 `Δθ > 0`,与硬航向闭合矛盾。 因此以下三项不能同时保持: - 内部 transition 的原始位置和航向为硬锚点; - 在 transition 取得正共享曲率并保持 G2; - 候选曲率完全位于原始非负曲率范围。 旧 Hermite 候选中出现的小幅负曲率是闭合补偿的几何表现,不应继续当作偶然数值噪声处理。 ## 3. 探针目标与非目标 ### 3.1 目标 - 保持窗口端点和全部内部运动基元边界的位置、车辆航向和共享车辆曲率为硬边界。 - 在车辆物理曲率限制内构造允许反曲率或正向过冲的局部曲率曲线。 - 测得通过其余全部既有门槛的候选所需最小实测曲率越界。 - 区分负向越界和正向过冲,不用单个绝对值掩盖方向差异。 - 验证 20% 峰值改善、2% 变化代价、偏差、完整车体碰撞和净空仍可同时满足。 - 记录固定预算下的确定性和运行时间。 ### 3.2 非目标 - 不修改共享生产构造器、评价器或公开配置。 - 不批准任何生产曲率越界阈值。 - 不把探针候选发布为生产结果。 - 不移动内部运动基元边界或窗口外端点。 - 不降低车辆最大曲率、碰撞、净空、偏差或质量改善门槛。 - 不修改 `SingleTurn` 的生产期望来掩盖功能失败。 - 不声称有限窗口、有限曲线族得到的最小值是数学全局最优值。 - 不引入 SQP、梯度下降、随机搜索或依赖墙钟时间的求解停止。 ## 4. 绑定不变量 - 路径起点、终点、换向点、窗口外端点和内部运动基元边界坐标保持不变。 - 内部边界左右共享同一位置、单位切线方向和几何曲率,保持几何 G2。 - 候选不得跨换向点;前进和倒车保持既有车辆/几何曲率符号规则。 - `κ_geometric = directionSign × κ_vehicle`,前进为 `+1`,倒车为 `-1`。 - 候选必须由积分几何真实闭合,禁止覆盖端点坐标伪造闭合。 - 连续解析曲率和统一分析器得到的离散曲率必须分别记录。 - 车辆最大曲率、完整碰撞、净空、最大偏差、20% 峰值改善和 2% 变化代价门保持原值。 - 相同输入必须得到相同窗口、初值、解、候选和诊断排序。 - 共享生产树在探针结束后必须与探针前保持相同生产源码状态。 ## 5. 非单调曲率模型 ### 5.1 单区间定义 两个相邻硬锚点之间以实际行进弧长 `s = L u`、`u ∈ [0,1]` 表示。几何曲率为三次 Bézier: ```text κ(u) = B0³(u)c0 + B1³(u)c1 + B2³(u)c2 + B3³(u)c3 ``` 其中: - `c0`、`c3` 为硬端点几何曲率; - `L > 0` 为实际区间长度; - `c1`、`c2` 允许非单调,不要求位于原始曲率范围; - 四个控制值都必须位于车辆几何曲率物理范围 `[-Kvehicle,+Kvehicle]`。 三次 Bézier 的凸包性质因此只用于保证连续模型不超过车辆物理曲率控制范围,不再宣称候选处于原始曲率范围。统一分析器重采样后的离散车辆曲率仍必须通过既有车辆最大曲率门。 连续模型的曲率导数为二次多项式: ```text dκ/ds = (3/L) × Σ(i=0..2) Bi²(u)(c[i+1] - c[i]) ``` 解析峰值在端点和内部驻点处确定性计算,只作为诊断;20% 生产质量门继续使用统一分析器的离散值。 ### 5.2 航向约束解析消元 硬端点行进航向差使用无歧义的展开值 `Δθ`。三次 Bézier 曲率满足: ```text Δθ = L/4 × (c0 + c1 + c2 + c3) ``` 因此: ```text c2 = 4Δθ/L - c0 - c1 - c3 ``` 闭合求解变量降为 `z = [L,c1]`,而 `c2` 每次由解析式得到。航向不是可权衡残差;任何合法变量都在解析积分层满足硬航向。 ### 5.3 位置恢复 ```text θ(s) = θ0 + ∫0..s κ(q)dq x(s) = x0 + ∫0..s cos(θ(q))dq y(s) = y0 + ∫0..s sin(θ(q))dq ``` `θ(s)`解析计算,`x(s),y(s)`采用确定性高阶自适应积分。弧长参数化保证连续模型 `|p'(s)| = 1`,不会出现坐标 Hermite 的参数速度零点。 ### 5.4 控制值可行区间 设: ```text S(L) = 4Δθ/L - c0 - c3 c2 = S(L) - c1 ``` 为同时满足 `c1,c2 ∈ [-Kvehicle,+Kvehicle]`,给定 `L` 时: ```text max(-Kvehicle, S(L)-Kvehicle) <= c1 c1 <= min(+Kvehicle, S(L)+Kvehicle) ``` 区间为空时该长度不可行。求解器不得通过截断 `c2` 破坏解析航向闭合,而应拒绝该步或把变量投影到联合可行域。 ## 6. 硬节点与方向语义 每个现有窗口按弧长建立:精确窗口起点、全部内部真实曲率事件、精确窗口终点。内部事件继续使用原运动基元边界坐标、车辆航向和既有距离加权共享车辆曲率,不允许任何位置偏移。 求解器使用行进切向: - 前进:`travelHeading = vehicleHeading`; - 倒车:`travelHeading = vehicleHeading - π`; - `geometricCurvature = directionSign × vehicleCurvature`。 采样输出按相反规则恢复车辆航向。每个相邻节点区间独立闭合;所有区间成功后才能形成窗口候选。左右区间在内部节点共享位置、切向和曲率,但不要求 `dκ/ds` 连续。 ## 7. 两变量有界闭合求解 ### 7.1 残差 求解器只最小化终点位置残差: ```text r(L,c1) = [x(L)-x1, y(L)-y1] ``` 成功必须同时满足: - 覆盖精确锚点前,积分终点与硬终点的欧氏位置误差 `<= 1e-9 m`; - 解析终点航向误差 `<= 1e-8 rad`; - 端点曲率误差 `<= 1e-8 1/m`; - `c0,c1,c2,c3` 全部有限并位于几何曲率物理范围 `[-Kvehicle,+Kvehicle]`; - `c1,c2` 位于联合车辆曲率可行域,解析恢复的车辆曲率也不超过相同绝对上限; - 所有变量和积分值有限。 最终候选样本只有在积分终点先通过闭合门后才可写入精确锚点值,以消除最终舍入。覆盖后必须再次记录输出锚点欧氏位置误差,并用左右解析端状态重新校核行进切向夹角和几何曲率接缝;共享点只输出一次,左右相邻采样点不得与共享点重复或退化。 ### 7.2 长度边界 设硬锚点弦长 `D`、对应原始参考弧长跨度 `R`、既有最大允许偏差 `E`: ```text D <= L <= R + 2E ``` 该有限上界只用于限制探针搜索,不是偏差证明。候选仍必须通过独立的 `MaximumDeviationMeters` 门。 ### 7.3 初值 长度初值为原始参考弧长跨度并投影到合法区间。给定长度后,设联合可行 `c1` 区间为 `[lo,hi]`、中点为 `mid=(lo+hi)/2`,使用三组固定初值: 1. `mid`; 2. `(lo+mid)/2`; 3. `(mid+hi)/2`。 这些初值对应平衡、前载和后载曲率分布。顺序固定;数值等价解必须去重。 ### 7.4 变量尺度、差分和投影顺序 位置残差以 `positionScale=max(R,1e-3 m)` 归一化: ```text rNormalized = r / positionScale ``` 有限差分使用以下绑定步长: ```text hL = max(1e-7 m, 1e-6 × max(R,1e-3 m)) hC = max(1e-8 1/m, 1e-6 × Kvehicle) ``` 优先使用中心差分。某一侧超出联合可行域时使用另一侧单边差分;两侧都无法形成与当前点不同的合法扰动时返回 `JacobianBoundaryDegenerate`。对任意试探点严格采用以下顺序: 1. 把 `L` 投影到 `[D,R+2E]`; 2. 以投影后的 `L` 重新计算 `S(L)` 和联合 `c1` 区间; 3. 联合区间为空则拒绝试探点; 4. 把 `c1` 投影到新联合区间; 5. 解析计算 `c2=S(L)-c1`,不得再次截断 `c2`。 长度扰动导致当前 `c1` 离开新联合区间时同样按上述规则投影,差分使用投影后的实际变量差作为分母。实际变量差为零则该侧不可用。 ### 7.5 LM、收敛和去重常量 投影试探步使用以下无量纲尺度: ```text stepL = abs(Ltrial-Lcurrent) / max(R,1e-3 m) stepC = abs(c1trial-c1current) / max(Kvehicle,1e-8 1/m) normalizedStep = max(stepL,stepC) ``` - 每区间/初值最多 16 次外层迭代; - 每次外层迭代最多 4 次阻尼试探,因此失败回溯同样有界; - 初始阻尼 `lambda=1e-3`; - `J` 是归一化残差对物理变量 `[L,c1]` 的 Jacobian,使用 `(JᵀJ + lambda × diag(max(diag(JᵀJ),1))) delta = -JᵀrNormalized`; - 接受严格降低 `||rNormalized||2` 的有限试探步;接受后 `lambda=max(1e-12,lambda/10)`,拒绝后 `lambda=min(1e12,lambda×10)`; - 四次试探都不下降时返回 `NoDescentStep`; - 带主元 `2×2` 线性求解的绝对主元小于 `1e-14` 时返回 `SingularJacobian`; - 投影后的 `normalizedStep<=1e-12` 且尚未满足硬闭合门时返回 `StalledAtBoundary`; - 达到第 7.1 节全部硬容差时立即成功;其余情况到第 16 次外层迭代返回 `IterationLimit`; - 不使用随机数、墙钟停止条件或跨候选历史调整阻尼。 两个区间解仅在 `|ΔL|<=1e-9 m`、`|Δc1|<=1e-9 1/m`、`|Δc2|<=1e-9 1/m` 且相同固定采样参数处最大坐标差 `<=1e-9 m` 时视为数值等价。窗口候选去重还要求硬节点序列和各区间解数量相同。 ### 7.6 积分预算 坐标积分使用 8/16 阶 Gauss–Legendre 结果差估计误差,绝对误差目标 `1e-12 m`,最多细分 10 层。误差 `<=1e-12 m`(包含相等)时接受;否则在深度小于 10 时二分,深度已经为 10 时返回 `IntegrationDepthLimit`。 每次曲线残差求值最多触发上述完整积分预算。每个初值、外层迭代、阻尼试探和积分细分边界检查取消令牌;取消只能传播为 `OperationCanceledException`,不能映射为几何 RED。 ## 8. 候选采样与预算 每个成功区间按实际长度采样: ```text intervalCount = max(1, ceil(L / outputSpacingMeters)) u[j] = j / intervalCount ``` 相邻区间共享端点只输出一次。参考弧长在两个硬节点的原参考弧长之间按 `u` 单调映射,供既有拼接流程使用;统一分析器仍按坐标重新计算实际弧长。 候选顺序保持:现有窗口顺序优先,其次三组初值顺序。任一区间失败即丢弃整个窗口/初值组合。失败组合必须计入尝试预算,不能只限制成功候选。 单区域绑定上限为: - 最多检查 `min(region.WindowVariants.Count,12)` 个窗口; - 每窗口恰好按顺序检查三组初值,窗口/初值组合最多 36 个; - 单个组合最多包含 8 个硬锚点区间;超过 8 个时本探针输入超出已批准范围,结果为 `PROBE_INVALID`; - 区间求解调用总数最多 96 次,包括失败调用;到达上限后不再启动新组合,并记录 `SolverInvocationBudgetExhausted`; - 成功构造并进入双评价的候选仍不超过 `min(options.MaximumCandidatesPerRegion,12)`。 窗口数、组合尝试数、失败组合数、区间求解调用数、预算耗尽位置和成功候选数必须分别报告。达到有限预算但未找到候选只能支持“本预算内未找到”,不能证明曲线族数学无解。 ## 9. 隔离评价策略 ### 9.1 两次评价 探针使用两个从同一临时基线复制出的隔离构建根: - **严格根:** 包含新探针曲率构造和求解器,但 `LocalG2CandidateEvaluator.cs` 与共享基线逐字节相同; - **测量根:** 曲率构造、求解器、fixture 和测试脚本与严格根一致,评价器只有第 9.2 节允许的行为差异及不改变控制流的探针诊断。 每个闭合候选必须在两个根中以相同固定键重新生成并接受两次评价: 1. **严格基线评价:** 使用未修改的 `LocalG2CandidateEvaluator`,记录当前生产结果; 2. **测量模式评价:** 仅把原始曲率范围的提前返回改为记录,继续执行后续全部门槛。 严格评价预计以 `CurvatureOvershoot` 拒绝;如果因车辆曲率、候选生成或其他更早门失败,该候选不能宣称“只被原始范围门阻挡”。 ### 9.2 测量模式允许的唯一差异 一次性隔离副本中,测量模式只能改变以下语义: ```text ExceedsRawCurvatureRange(...) == true ``` 由“立即返回 `CurvatureOvershoot`”改为“记录原始/候选范围和越界量,然后继续”。以下行为必须与共享生产评价器相同: - 车辆最大曲率检查; - 原始和候选窗口统一几何分析; - 最大偏差; - 完整路径拼接与分析; - 完整车体碰撞、地图边界和净空; - 20% 峰值改善; - 2% 变化代价; - 候选结果指标计算。 测量模式不得进入共享生产 API,不得通过公开开关启用,不得用于最终发布路径。 ### 9.3 完整状态验证 测量根可以运行完整 Local G2 流水线,验证 `SingleTurn` 能否达到 `Complete`。该状态必须明确标记为探针状态,不得报告为当前生产通过。严格根对同一候选的结果必须同时保留在同一审计记录中。 ### 9.4 原子候选审计记录 每个窗口/初值组合建立一个不可拆分的 `CandidateAuditRecord`,至少包含: - 固定候选键:fixture、segment、region、window index、seed index; - 候选内容摘要:窗口弧长、方向、硬节点,以及按顺序全部候选点的 `X/Y/referenceArcLength/heading/unwrappedHeading/source`; - 上述摘要使用 invariant round-trip 数值文本编码后的 SHA-256; - 严格根候选摘要、严格评价结果和实际停止门; - 测量根候选摘要、测量评价结果、每个后续门是否实际执行及其指标; - 共享基线提交、共享评价器 SHA-256、严格根评价器 SHA-256、测量根评价器 SHA-256; - 严格根与测量根的允许差异摘要及完整 diff 文件路径。 严格根和测量根的固定候选键及内容 SHA-256 必须相同;否则该记录无效。严格评价为 `CurvatureExceeded`、`CandidateGenerationFailed` 或其他早于原始范围门的结果时,测量接受也不能支持“只被原始范围门阻挡”。 独立差异校验必须证明:严格评价器与共享基线相同;两个根除评价器测量分支和探针诊断外的曲率/求解/fixture 源相同;测量分支没有跳过、重排或改变任何后续门。任何证据缺失都按第 11 节 fail closed。 ## 10. 越界指标与诊断选择 设统一分析器得到的原始车辆曲率范围为 `[κraw,min,κraw,max]`,候选范围为 `[κcandidate,min,κcandidate,max]`: ```text Eminus = max(0, κraw,min - κcandidate,min) Eplus = max(0, κcandidate,max - κraw,max) ``` 以原始范围宽度和已配置跳变下限的较大值作为归一化分母: ```text denominator = max(κraw,max - κraw,min, AbsoluteCurvatureJumpFloorPerMeter) Rminus = Eminus / denominator Rplus = Eplus / denominator ``` 只有形成有效原子审计记录、严格评价恰为 `CurvatureOvershoot`,并通过第 11.6 节全部测量、安全、质量、确定性和性能条件的候选,才进入“最小必要实测越界”集合。诊断选择按以下字典序: 1. 最小 `max(Eminus,Eplus)`; 2. 最小 `Eminus+Eplus`; 3. 最小最大几何偏差; 4. 最小固定候选编号。 报告必须分别给出绝对越界、相对比例、车辆最大曲率利用率和严格评价结果。“最小”只指既有窗口、三次曲率族、三初值和固定预算内实际找到的候选。 ## 11. 有序且全覆盖的结果状态机 探针严格按以下顺序选择第一个满足条件的状态。后面的状态不能覆盖前面的状态;每次有效运行必须恰好得到一个最终状态。 ### 11.1 `PROBE_INVALID` 下列任一条件成立即 fail closed,不作几何或质量结论: - 基线提交、fixture 或构建根身份不明; - 严格评价器与共享基线不相同; - 两隔离根存在未授权源码差异,或无法证明测量模式只改变第 9.2 节语义; - 固定候选键或候选内容 SHA-256 在严格/测量根之间不一致; - 必需指标、门执行标志、diff、源码摘要或重复运行证据缺失; - 报告值非有限、状态编排失败、测试基础设施失败或用户取消; - 5 次预热后的 30 次测量运行未产生逐次相同的候选键、内容摘要、评价结果和诊断选择。 `PROBE_INVALID` 必须修复探针后重做,不能映射为 RED 或 FEASIBLE。 ### 11.2 `BUDGET_RED` 探针证据有效且重复运行一致,但第 14 节任一强制性能统计超过门槛。报告必须同时给出在忽略性能门时本应得到的几何/质量状态,但 `BUDGET_RED` 不授权任何生产设计。 ### 11.3 `STRICT_GREEN` 至少一个同一内容摘要的候选被严格根未修改评价器直接接受,硬锚点/G2、全部安全质量门和测量模式完整状态也一致通过。该结果证明不需要修改原始曲率范围门;不得把它归类为 excursion feasibility。 ### 11.4 `NO_PHYSICALLY_ADMISSIBLE_CLOSED_CANDIDATE_FOUND_WITHIN_BUDGET` 在既有窗口、三组初值和全部固定尝试/求解预算内,没有任何候选同时满足: - 所有区间硬闭合及端点/G2 容差; - 四个解析曲率控制值处于车辆物理范围; - 统一分析器车辆最大曲率门。 报告必须分别统计联合可行域解析为空、积分/数值失败、未收敛/预算耗尽、硬容差失败和离散车辆曲率超限。该状态只表示“固定搜索合同内未找到”,不能表述为三次曲率族数学无解。 ### 11.5 `QUALITY_RED` 至少一个候选通过第 11.4 节全部硬/物理门,但没有候选形成合格的严格/测量审计对并在测量根完成全部后续门。该状态覆盖所有实际后续失败出口,包括但不限于: - 候选或窗口统一分析失败; - 严格结果不是 `CurvatureOvershoot` 且也未接受; - 偏差、拼接、完整路径分析、碰撞、地图边界或净空失败; - 20% 峰值改善或 2% 变化代价失败; - 测量完整流水线未达到探针 `Complete`; - 候选审计对缺少某项门的实际执行证据。 证据身份或确定性问题仍优先归入 `PROBE_INVALID`,不能用 `QUALITY_RED` 掩盖。 ### 11.6 `FEASIBLE_WITH_EXCURSION` 只有同一个 `CandidateAuditRecord` 同时满足以下全部条件才可进入该状态: - 严格/测量根固定键和候选内容 SHA-256 相同; - 硬锚点、覆盖前后欧氏位置、解析切向、几何曲率接缝和非退化采样门通过; - 解析控制值和统一分析器车辆最大曲率门通过; - 严格评价恰好在原始曲率范围门返回 `CurvatureOvershoot`; - 测量评价记录完全相同的 raw/candidate 分析后继续,并通过偏差、拼接、完整分析、碰撞、边界、净空、20% 峰值改善和 2% 变化代价; - 测量模式完整流水线状态为探针 `Complete`; - 第 9.4 节源码身份和唯一语义差异证据完整; - 第 11.1 节确定性门和第 14 节全部性能门通过; - `Eminus>0` 或 `Eplus>0`,并完整记录两者及相对比例。 `FEASIBLE_WITH_EXCURSION` 只授权形成报告和下一轮生产包络设计,不授权提交生产评价器修改。 ## 12. 强制验收与报告 真实 `SingleTurn` 报告必须包含: - 第 11 节有序状态机的逐项判定轨迹和唯一最终状态; - 基线提交、两个隔离根、fixture 和全部相关源码 SHA-256; - 所有窗口、初值和区间的尝试/闭合统计; - 成功与失败组合均计入的窗口数、组合数、solver invocation 数和预算耗尽位置; - `L,c0,c1,c2,c3`、联合可行域,以及几何/车辆曲率对应值; - 外层迭代次数、每次阻尼试探数、积分次数、最大细分深度和精确失败出口; - 覆盖前后欧氏位置误差、解析航向误差、解析切向接缝、解析曲率接缝、硬锚点欧氏坐标误差和相邻点最小距离; - 解析曲率范围和解析 `dκ/ds` 峰值; - 每个候选完整的第 9.4 节原子审计记录、严格评价结果和实际停止门; - 测量模式离散曲率范围、`Eminus/Eplus`、`Rminus/Rplus`; - 测量模式每个后续门的实际执行标志; - 离散 `dκ/ds` 峰值及改善率、变化代价及回退率; - 最大偏差、最小车体净空、碰撞结果; - 第 14 节每次预热/测量的单求解、全部闭合求解、候选评价、完整区域和完整 fixture 耗时,以及中位数/最坏值; - 最小越界候选的确定性选择证据; - 严格根相对共享基线、测量根相对严格根的完整源码差异。 报告必须明确指出哪些候选在严格评价中被拒绝,以及测量模式改变的唯一语义分支。不得把未执行到的后续指标写成零或成功,必须标记为 `not evaluated`。任何跨根候选摘要不一致、缺失门执行标志或未授权 diff 都必须直接产生 `PROBE_INVALID`。 ## 13. 测试设计 ### 13.1 曲率模型 - 直线和常曲率圆弧; - 需要反曲率的零总航向区间; - 需要正向过冲的区间; - 航向解析消元恒等式; - `c1/c2` 联合车辆曲率边界; - 解析曲率范围和 `dκ/ds` 峰值; - 前进/倒车符号; - 非有限输入与积分深度失败。 ### 13.2 两变量求解器 - 由已知曲率曲线生成硬终点并恢复闭合; - `SingleTurn` 左侧零航向变化区间需要负控制曲率; - 长度和联合曲率投影; - 中心/单边有限差分、边界退化、投影顺序和实际差分分母; - 初始阻尼、四次试探上限、阻尼增减、奇异 Jacobian、无下降步、边界停滞、迭代上限和取消; - 无量纲 `normalizedStep` 两个分量的单位尺度,以及恰好等于/略高于 `1e-12` 的边界停滞行为; - 积分误差等于门槛时接受、深度 10 时 fail closed; - 三初值精确数值、等价解去重容差和重复运行一致性; - 12 窗口、36 组合、8 区间和 96 solver invocation 上限,失败调用同样计数; - 覆盖前位置、航向和曲率硬容差。 ### 13.3 双评价门禁 - 严格评价仍以 `CurvatureOvershoot` 拒绝越界候选; - 测量模式仅跳过该提前返回; - 车辆曲率、偏差、碰撞、净空、20% 改善和 2% 变化代价均实际执行; - 测量模式不能由共享生产入口访问; - 严格/测量候选键和内容摘要匹配,错配时为 `PROBE_INVALID`; - 状态机分别覆盖 `PROBE_INVALID`、`BUDGET_RED`、`STRICT_GREEN`、预算内未找到物理闭合候选、`QUALITY_RED` 和 `FEASIBLE_WITH_EXCURSION`; - 对任意合法模拟观测,第 11 节决策表恰好选择一个状态; - 性能测试固定执行 5 次预热和 30 次测量,并分别校核四个中位数/最坏值门。 ## 14. 性能预算 固定最坏工作量: - 每区域最多 12 个已构造候选; - 最多 12 个窗口、36 个窗口/初值组合和 96 次区间求解调用,失败尝试全部计入; - 每区间/初值最多 16 次外层迭代,每次最多 4 次阻尼试探; - 每次坐标积分最多 10 层细分; - 不使用墙钟生产停止或运行时扩张搜索。 性能协议固定为: - 使用与既有 split-scale 报告相同的机器和 `Debug/netstandard2.0` 构建口径;报告 CPU、逻辑处理器、内存、OS、PowerShell 和构建配置; - 单进程、串行、`CancellationToken.None`,使用同一 `SingleTurn` request; - 先执行 5 次不计时预热,再执行 30 次完整测量; - 使用 `Stopwatch` 记录测量根的全部闭合求解阶段和完整单区域阶段; - 30 次逐次结果必须先通过第 11.1 节确定性门,再计算中位数和最坏值; - 严格根、测量根和双根合计诊断耗时另外报告,但不混入未来单生产模式的门槛统计。 四个强制性能门为: - `SingleTurn` 单区域全部闭合求解中位数 `<= 10 ms`; - `SingleTurn` 单区域全部闭合求解最坏值 `<= 25 ms`; - 测量根完整 Local G2 单区域处理中位数 `<= 25 ms`; - 测量根完整 Local G2 单区域处理最坏值 `<= 50 ms`。 任一门超限则最终状态优先为 `BUDGET_RED`。性能修复只能消除重复积分、缓存同一迭代公共量、去除数值等价候选或增加不会改变门槛的早期淘汰;不得跳过安全或质量检查。 ## 15. 隔离与仓库约束 - 探针在两个一次性隔离根中执行,二者必须来自同一已记录基线提交和同一受控工作树快照。 - 共享生产树只允许提交本设计、后续实施计划和最终报告;探针生产源码不得回写。 - 用户已移出的 `auto_avoidance` 继续从一次性构建副本排除,不得读取、修改、删除或纳入提交。 - 不得清理或覆盖用户的无关脏工作树。 - 测试钩子保持内部或探针专用,不新增生产公开 API。 - 严格根的评价器必须与共享基线逐字节相同;测量根相对严格根只允许原始范围记录/继续分支和不改变控制流的诊断。 - 任一源码差异超出新曲率探针、求解器、探针诊断和原始范围测量分支,或两个根的候选生成源码不相同时,最终状态必须为 `PROBE_INVALID` 并重做。 ## 16. 后续决策边界 若结果为 `PROBE_INVALID`: - 不作曲线可行性结论; - 修复证据、隔离、确定性或测试基础设施后重新执行同一合同。 若结果为 `BUDGET_RED`: - 不修改安全/质量门或扩大运行时搜索; - 只允许按第 14 节列出的等价性能优化后重跑。 若结果为 `STRICT_GREEN`: - 不修改生产原始曲率范围门; - 单独编写只切换候选曲线/求解器的生产设计并再次审核。 若结果为 `NO_PHYSICALLY_ADMISSIBLE_CLOSED_CANDIDATE_FOUND_WITHIN_BUDGET` 或 `QUALITY_RED`: - 不修改生产评价器; - 不继续盲扫相似尺度; - 根据分类失败证据重新选择更高自由度曲率族,或接受固定约束下 `Unchanged`; - 不得把“预算内未找到”表述为数学无解。 若结果为 `FEASIBLE_WITH_EXCURSION`: - 向用户报告 `Eminus/Eplus`、相对比例、车辆曲率利用率和全部质量/安全指标; - 单独决定生产是否允许负向越界、正向过冲或两者; - 单独决定绝对阈值、相对阈值、数值裕量和是否公开配置; - 编写新的生产设计并再次独立审核; - 在生产设计获批前,不得把测量模式或候选曲线回写共享生产树。 ## 17. 实施顺序约束 1. 审核并提交本可行性设计。 2. 编写只包含隔离探针的实施计划。 3. 按 Subagent-Driven 流程由独立实现者在一次性副本执行探针。 4. 独立 reviewer 核对源码差异、严格/测量双评价和全部报告证据。 5. 控制器复跑最终强制门并核对结果分级。 6. 根据结果停止或提交下一轮生产包络设计。 ## 18. 结论 硬 transition 坐标与严格非负原始曲率范围在 `SingleTurn` 上解析不兼容。解决问题的下一步不是选择更强的闭合求解器强行满足矛盾条件,而是在保持车辆物理安全限制和硬坐标的前提下,量化完成闭合和质量改善所需的最小曲率范围越界。 本设计把这一量化限定在隔离、确定、可复核的探针中。任何生产阈值变化都必须等待实测结果和新的明确批准。