Result: partial
Pushed: no
Commits: 3a3089b0 (fixes a-c: an arm’s taken parts and a narrowed mut option change in place); 5a18a962 (fix d: a part handed to a mut parameter is lent)
Tests: tests/compiler –both-settings 539 passed 0 failed; the three new tests each failed on the unfixed compiler
Moved: nothing committed of chunk 2. The whole of it, in Nikaia (tr_expand, tr_check_literals_in, tr_drop_given and their walkers), plus the thin Rust adapter, is on the local branch wip/r3c-type-rules-chunk2 (6465e74c). It lowers cleanly, but its lowered Rust does not compile (12 errors)
Left: all of type_rules.rs chunk 2 (rewrite_fn, check_literals, before_returns, given_after_calls, drop_given_in and the rest) stays Rust until the two defects below are fixed. across_files and read_again stay Rust for good: they need the Rust parser’s read_expression and the &mut [(&mut Parsed, &str)] slice
Found: kind 3, open, blocks the wip: a taking arm over an enum declared in another file (ast Expr/Item) gets no placeholder. CheckState.a_placeholder (check_items.nika) reads only the enums of view.items, and a NodeId field does not count as defaulted. So the arm is not recorded in taking_arms, and the lowering moves the parts out of &mut (E0507, expected Expr, found &mut Expr). Probe: wip tr_leaving / tr_rewrite_item
Found: kind 3, open, blocks the wip: a Copy binding from match open(base) on a mut place is compared as b == *binding, giving E0277 &mut Symbol == Symbol. Probe: wip tr_field_read
Found: kind 3, open: an enum variant with a fn field, built from a lambda or a named fn, lowers to mismatched types (Kept