feat(i18n): ④ l10n 漂移闸 + codegen 改纯 node 确定性输出

- gen_l10n_dart.mjs 去掉 dart format:其输出依赖包解析状态、跨环境不稳(首次 4 空格、
  重跑 8 空格),会让漂移闸误报。改为确定性终态格式(list 单行 const [])。
  analyze 不校验格式,不影响;gen 现零 dart 依赖、纯 node 确定。
- ci/check-codegen-drift.sh 增 l10n 段:重生成 strings_*.dart → git diff 非空即 fail
  (与 token 段同法,纯 node)。
- 验证:往返无损、重生成零 diff(闸稳定)、flutter analyze 0 issue、244 测试全绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
This commit is contained in:
wangjia
2026-07-27 08:55:21 +08:00
parent f76e3cdffd
commit 13e0ba6d47
8 changed files with 110 additions and 263 deletions
+15
View File
@@ -31,3 +31,18 @@ if ! git diff --quiet -- "$GEN"; then
fi
echo "✅ codegen 无漂移:token 生成物与 CSS 真相源一致。"
# ── l10n 单源:design/i18n/strings.json → client/lib/l10n/strings_*.dart ──
# gen 为纯 node 确定性输出(不跑 dart format),故本段与 token 段一样零 dart 依赖。
L10N_GEN="client/lib/l10n"
echo "→ 重新生成 l10n (design/codegen/gen_l10n_dart.mjs) ..."
node design/codegen/gen_l10n_dart.mjs
if ! git diff --quiet -- "$L10N_GEN"/strings_*.dart; then
echo "❌ l10n 漂移:strings_*.dart 与 design/i18n/strings.json 不一致。" >&2
echo " 原因:改了 strings.json 却没重生成,或手改了生成物(勿手改 strings_*.dart)。" >&2
echo " 修复:node design/codegen/gen_l10n_dart.mjs 后提交生成物。" >&2
echo " ── diff(前 40 行)──" >&2
git --no-pager diff -- "$L10N_GEN"/strings_*.dart | head -40 >&2
exit 1
fi
echo "✅ l10n 无漂移:strings_*.dart 与 strings.json 单源一致。"