AskaEth
60607ae7b3
feat(core): 未登记占位符不再静默(M244 PLACEHOLDERWARN)
`PlaceholderMap::render` 一直把未登记的 `${key}` 原样写回 argv,运行期零校验零告警:
第三方 version JSON 里一个拼错的占位符会原样进 `cmd_built.argv` / `--dry-run`,
用户只看到一个 `${xxx}` 和零解释(M239 REDACTAUDIT §5.2 的机制风险)。
- `render_tracked` 返回 `RenderOutcome { text, unknown_keys }`,未登记键去重保序;
`unknown_keys()` 交表级全量清单,供后续接 `AssemblyWarning` / `--dry-run`。
- `render` 在此之上把每个**新**见到的键写一行 `launcher.log`(进程级去重,一个键一次启动
只报一次);未登记键仍原样保留,argv 逐字节不变(第三方清单兼容性优先)。
- 大小写/首尾空白变体按**不同的键**处理(替换本来就是精确匹配),日志行对近似已登记键的
附「疑似 ${known} 的笔误」提示。
- 测试构建里 `emit` 是空实现:`launcher_log` 是进程级单例,lib 用例并行跑时会把它自己的
`buffer_is_bounded_before_the_dir_is_known` 顶红(实测 205 行);行文本与「哪些键该记」
分别由 `unknown_log_line` / `collect_fresh` 的用例覆盖,落盘用一次性探针手工验过。
变异自证:把 `note_unknown` 改成空实现 ⇒ 5 条新用例红(exit 101),还原后绿。
门禁:fmt / check -p unlucky-core --all-targets / test -p unlucky-core -p unlucky-cli /
clippy --workspace --all-targets -- -D warnings 全绿。
2026-11-11 11:12:23 +08:00
..
2026-11-08 16:20:34 +08:00
2026-11-05 14:08:37 +08:00
2026-11-11 08:28:06 +08:00
2026-11-11 10:34:18 +08:00
2026-11-11 11:12:23 +08:00
2026-11-10 22:34:05 +08:00
2026-11-11 06:00:27 +08:00
2026-11-07 18:56:01 +08:00
2026-11-11 10:48:16 +08:00