P2-1:「抹除能力没有下降」是绝对承诺,已改成准确口径——收窄的就是三类形状 (`=` 边界、填充不计段长、全小写点分串),每条都在 shape 模块文档里写明,并用 `known_narrowings_old_masked_new_keeps` 把「旧行为抹、新行为留」钉住。三条的旧行为 是用 M240 之前的真实代码(`git show 74be510:…` + rustc 探针)实测的,不是推断。 P2-2:「必须含大写」原先没有任何测试钉住(复审实测:删掉它 13 条仍全绿)。 查明原因:DNS 形状的全小写点分串早就被"首段是主机名"那条豁免救下,大写判据 只对**非 DNS 形状**的全小写点分串承担区分作用(标签带 `_`、标签超 63 字符、 `/` 前只有一段主机名)。选择保留(复审的 (b)),并补 `the_uppercase_requirement_is_load_bearing`(`sophisticated_backpacks.upgrades.reference` 等两条)——删掉判据 → 该测试与 `lowercase_dotted_names_are_spared` 红、其余 15 条绿。 同时改正事实错误:不是"第三段必为大写",而是头的 base64url **第三个字符**恒为 `ey` + `I/J/K/L`(`7B 22 xx` 的第三组 6 位 = `b1` 低 4 位 ++ `b2` 高 2 位 → 索引 8..11)。 P2-3:找回重构时丢掉的老负例 `dotted_token_rule_does_not_eat_normal_text` (4 条用例 + 直接断言 `!has_dotted_token(...)`,含 `eyJhbGciOiJIUzI1NiJ9.short.abc`); 语料测试的 doc 注明它**只守一个方向**,不得当"正例仍被抹"的背书。 判据与阈值一个字没动(40 / 3×8 / 64),扫描器代码零改动,纯文档 + 测试。
M239 实测两条形状规则会误杀三类正常文本,被抹掉的正是用户要复制的面 (`--dry-run` 的 argv、`cmd_built.argv`、诊断规则引擎的输入)。修法不是抬阈值 (40 / 3×8 / 64 一个字没动),而是给每条规则加**必要条件**: - `-D<key>=<品牌>` 被当三段式 token:`=` 是赋值边界、退出 dotted 字符集 (JWT 的 `=` 只可能是末尾填充),键里的点号不再把值拖进段数统计。 - CDN/镜像 URL 变成 `https:<redacted:token>`:加"必须含大写"与"首段不是 DNS 主机名"两条必要条件(JWT 头是 JSON,base64url(`{"`) = `eyJ` 必含大写; base64url 不含 `/`)。扫描器先切主机名,路径那半继续判——JWT 放进 URL 路径里照样抹。 - ≥64 无点号长串吞掉整条路径:路径形状(被 `/` 切开且每段是词形名字)整条 保留,但**段本身**≥64 的照抹(`/…/objects/<64 位 hex>` 只抹那一段)。 真凭据的抹除能力不变:登记过明文值的替换路径没碰;正例(本仓 JWT / MSA JWT / `-DaccessToken=` 粘着 / URL 路径里的 JWT / 标准 base64 三段式 / sha256 hex / base64 ≥64 / `A`×64)全部仍被抹。回归语料(M239 的 68 文件 / 243 行)修前被改 1 行 → 修后 0 行。判据与扫描器拆成 redact.rs + redact/{shape,tests}.rs。
Rust 原生单文件 Minecraft 启动器:CLI 完整可用(install/launch/accounts/java/diagnose/agent), MCP server 接入外部 Agent 工具,GUI 开发中。