P2-1「与 design 码值一致」的守门此前不存在 - 新增 crates/app-iced/src/platform/mod.rs::palette_source_codes_match_design_level_codes: 三个格子对照 PaletteSource::as_str() 与 unlucky_design::palette::Level::code(), 并覆盖反方向(from_key_value(level.code()) 必须还原同一档)与「码值在允许值表里」 - core 侧那条测试改名为 value_tables_are_self_consistent,注释改成事实: core 不依赖 design,只能钉自己的字面量;一致性由 app-iced 的那条对照断言守 - 实测:把 design 的 Level::Wallpaper 码值改成 "desktop" → 新断言红(design 自己 178 个测试仍全绿) P2-2 unsafe-scope 门禁:行级正则 → 跨行扫描 - 去注释 + 按方括号闭合把续行并成逻辑行,再逐个属性组判断 allow(...unsafe_code) - 抓得住原来两种绕过:多行属性 #![allow(\n unsafe_code\n)]、同行两属性 #[inline] #[allow(unsafe_code)] - 门禁注释补全已知边界(不再声称「依赖 fmt job 兜底」——已不依赖) O-1 α 量化方向:round → ceil - 0.08×255=20.4,round 得 20 → 实际下发 20/255=0.0784,低于 D36 名义下限 - ceil 得 21 → 0.0824;新增 applied_alpha_is_never_below_the_floor 断言 下发字节/255 ≥ 0.08 O-7 契约测试补三个新键 - appearance_keys_are_all_ai_writable_and_registered 的 audited 清单加 window_opacity / titlebar_mode / palette_source
core(D36/D37/D38 的键与范围) - appearance.window_opacity(0.08..=1.0,默认 1.0,越界钳位且不报错;下限 D36 定案) - appearance.titlebar_mode(auto|always|never,默认 auto;判定逻辑不在本 mission) - appearance.palette_source(background-image|wallpaper|preset,与 design 的 Level::code() 同名) - schema 1.3.0 → 1.4.0:纯增量、不加迁移步骤(新键出厂值 = 老文件缺键) - appearance 拆成目录 mod/modes/tests(单文件 ≤400 行),非法枚举由 diagnostics() 给可读回落说明 presenter(只读语义,不破 M89 零 UI 门禁) - AppearanceBase { window_opacity, titlebar_mode, palette_source } + from_document() - 单测:缺键→出厂值、越界→钳位、非法枚举→回落且合法值照读 app-iced(D36 唯一 unsafe 落点) - platform::effective_window_alpha(backend, requested) 纯函数:≤0/非有限 → None(拒绝整窗穿透), 其余夹到 0.08..=1.0;CPU 档同样允许窗口级 α(D36 对 D27 的修订),4 组真值表测试 - platform/win32/transparency.rs:SetLayeredWindowAttributes(LWA_ALPHA) 的 FFI + alpha_byte 量化 + apply_window_alpha;非 Windows 同签名空实现返回 Unsupported CI - guards.yml 新增 unsafe-scope job:全仓 allow(unsafe_code) 文件集合必须恰好等于 crates/app-iced/src/platform/win32/transparency.rs(集合相等,不是黑名单命中) 版本号绊线 - isolation_keys / java_install_keys:字面量 1.3.0 → 1.4.0(绊线保留字面量) - store / document 的两个关系夹具改成相对 launcher_version() 构造(「更高 minor 只读」/ 「同 minor 更高 patch 保留 $schema」),下次 bump 不再假绿或假红
Rust 原生单文件 Minecraft 启动器:CLI 完整可用(install/launch/accounts/java/diagnose/agent), MCP server 接入外部 Agent 工具,GUI 开发中。