fix(app-iced): 探针补回宽度判据,并订正覆盖面与 12.4 的口径(M248 r1 P2-1/P2-2)

P2-1:`TRACK_MIN_RUN = 200` 把「轨道被宿主裁短」这类几何回归从红变成绿——复审把 after 图里
0% 那条轨道右半截涂回画布色(连续段 160px)之后,那一行直接不成带,check_linear 靠另一条带
照样绿。现在拆成两条判据:成带阈值降到 **100**(实测:确定态行 318~320、不定态行 306~308、
文字行 22,两头都留得住),宽度**单独**判 ≥300(`TRACK_MIN_WIDTH`),不再藏在圆角检查的
find 里。反例复跑:两套主题都红「实测最宽段 160px @ 行 163」。

新增 `feedback/tests/bands.rs`(合成图,不依赖真实截图)两条用例,把两个阈值的取值区间钉住:
窄轨道必须仍成带且过不了宽度判据、22px 的文字段永远不成带。变异自证:调用点换回
`bands(.., 200)` → 两条用例都红(`left: [(12,15)] / right: [(5,8),(12,15)]`);
`TRACK_MIN_WIDTH=150` → 窄轨道用例红。

P2-2:订正两处写反的账——实测 `轨道带 2 条(高 [4, 5])`,**两条带都在**厚度/宽度判据里
(5 行那条含 1 行抗锯齿,near 容 ±1),不是「只剩一条」;12.4 只量主色两段的左右端点,
**不量**轨道厚度。根因(按单条 320 轨道心算 ~88px vs bands_by_run 按整行取 306px)已写进
`TRACK_MIN_RUN` 的文档。

顺带:12.1 的判据从 probe.rs 搬进 `probe/track.rs`——加完这几行 probe.rs 正好 401 行,
撞 400 红线;顺着 circular / panels 的先例一族几何一个文件。
This commit is contained in:
AskaEth committed 2026-11-11 14:32:27 +08:00
1 parent 8f5dac2ed6
commit 31cb109445
5 files changed
+264 -52

No files matched your search

@@ -60,6 +60,29 @@ impl Shot {
pub(super) fn at(&self, x: usize, y: usize) -> [u8; 3] {
self.pixels[y * self.width + x]
}
/// **合成图**(不读盘):按 `(x, y) → RGB` 造一张 `width × height` 的图。
///
/// 只给回归用例用:有些几何错误在真截图上**不会自然出现**(例如「轨道被宿主裁短」——
/// 真实渲染里轨道永远占满宿主,只有把像素涂掉才看得到,那是复审的一次性动作)。
/// 合成图让这类形状变成可复现的夹具,见 `tests/bands.rs`。
pub(super) fn from_rows(
width: usize,
height: usize,
pixel: impl Fn(usize, usize) -> [u8; 3],
) -> Self {
let mut pixels = Vec::with_capacity(width * height);
for y in 0..height {
for x in 0..width {
pixels.push(pixel(x, y));
}
}
Self {
width,
height,
pixels,
}
}
}
/// 一个外接框(闭区间)。