内容
taffy 0.12.2 → 0.14.0 升级。原始 bug(列方向 flex-wrap 容器内子项高度逐帧动画时某一帧误判超高换列)根因已定位为 taffy 0.12 内部缺陷,0.14.0 含对症修复 ,本票转为升级票作为修复载体。根因取证全文见 2026-08-27 调研 comment(机制链 + 源码锚点 + 触发条件二分实录)。
升级范围(编译实测的成本清单)
compute_layout_with_measure 闭包改 (LayoutInput, NodeId, ctx, &Style) -> LayoutOutput(#1091)——crates/core/src/layout/mod.rs measure 闭包区重写(~30 处错误集中于此)。
Style::min_size/max_size → LengthPercentageAuto(#1099);tagged-pointer 类型 expand()(#1129,lp() 的 into_raw hack 可换正规 API)。
Layout::content_size → scrollable_overflow_rect(#1118)——scroll overlap 计算面排查。
LayoutOutput::first_baselines → baselines: Baselines(#1107);numeric helper Into<f64>(0.13 #974)。
serde/pkg 连锁 :taffy Style 序列化格式变化 → ResolvedStyle.taffy_style 进 pkg.bin 格式变 → pkg format_version bump + headless fixtures 重打。
flexbox_balance 成为 default feature——围栏未放 flex-wrap:balance 值集(CSS IFC 换行控制全集(white-space / overflow-wrap / word-break / text-wrap) #73 已拒),不受影响;升级时核对 default features 面。
验收判据
HTML=<改版前 layout-anim 页> cargo run -p loomgui_core --example dump_layout_anim_jitter 逐帧 0 异常帧 ;
复现升格 core 守卫单测(逐帧断言列宽/子项 x 恒定)——0.12 期可先落 #[ignore] 版,升级后转绿防回归;
布局差分守卫(rect-diff 十页/worktree 对拍)不回归;
cargo bench -p loomgui_core(solve 每帧重建 taffy 树(坑 186) #29 基准)增量 solve 稳态无明显劣化(0.14 changelog 自述缓存更正确但有性能代价,须实测);
cargo test 全绿 + showcase PlayMode 逐项过(布局面全球性变化,showcase 是肉眼回归网)。
排期
2026-08-27 用户裁决:本票转为升级票;排在 #74 (<a> Link)之后 开工。showcase layout-anim 页保持纯 div(语义修正,不回退)。
内容
taffy 0.12.2 → 0.14.0 升级。原始 bug(列方向 flex-wrap 容器内子项高度逐帧动画时某一帧误判超高换列)根因已定位为 taffy 0.12 内部缺陷,0.14.0 含对症修复,本票转为升级票作为修复载体。根因取证全文见 2026-08-27 调研 comment(机制链 + 源码锚点 + 触发条件二分实录)。
升级范围(编译实测的成本清单)
compute_layout_with_measure闭包改(LayoutInput, NodeId, ctx, &Style) -> LayoutOutput(#1091)——crates/core/src/layout/mod.rsmeasure 闭包区重写(~30 处错误集中于此)。Style::min_size/max_size→LengthPercentageAuto(#1099);tagged-pointer 类型expand()(#1129,lp()的 into_raw hack 可换正规 API)。Layout::content_size→scrollable_overflow_rect(#1118)——scroll overlap 计算面排查。LayoutOutput::first_baselines→baselines: Baselines(#1107);numeric helperInto<f64>(0.13 #974)。ResolvedStyle.taffy_style进 pkg.bin 格式变 → pkg format_version bump + headless fixtures 重打。flexbox_balance成为 default feature——围栏未放flex-wrap:balance值集(CSS IFC 换行控制全集(white-space / overflow-wrap / word-break / text-wrap) #73 已拒),不受影响;升级时核对 default features 面。验收判据
HTML=<改版前 layout-anim 页> cargo run -p loomgui_core --example dump_layout_anim_jitter逐帧 0 异常帧;#[ignore]版,升级后转绿防回归;cargo bench -p loomgui_core(solve 每帧重建 taffy 树(坑 186) #29 基准)增量 solve 稳态无明显劣化(0.14 changelog 自述缓存更正确但有性能代价,须实测);cargo test全绿 + showcase PlayMode 逐项过(布局面全球性变化,showcase 是肉眼回归网)。排期
2026-08-27 用户裁决:本票转为升级票;排在 #74(
<a>Link)之后开工。showcase layout-anim 页保持纯 div(语义修正,不回退)。