Result: done Files: crates/nikaia-std/src/tools/sharing.nika crates/nikaia-std/src/tools/text_tiers.nika crates/nikaia-std/src/tools/lowered/sharing.rs crates/nikaia-std/src/tools/lowered/text_tiers.rs docs/briefs/b974.md.report.md Commit: sharing, text_tiers: sites_by_slot, put_in_class and the ties of a stored value use BTreeMap::entry Part: #950 Model: Opus 5.5 Tests: a_let_mut_of_an_entry_takes_no_rust_mut and a_mut_view_handed_to_a_mut_parameter_is_lent_on (both failed on the unfixed compiler, scratch project); nikaia test –both-settings –project tests/compiler 329 ok (own binary copy); it map_entries mut_bindings mut_parameter_parts lending element_views map_reads text_tiers sharing + guard set 184 ok; clippy clean; pre-push-check ok; lower-std fixpoint (rebuild a no-op) Gate: green Deviation: three commits: 8f9838ca (#974: check_flow std_entry_views, check_core_method marks Entry::or_insert/or_insert_with, check_core_stmt puts a let mut of one in mut_view_reads so emit_stmt drops mut; check_flow/check_core_stmt also carry the inert mut_view_bindings record of #975, not split by hunk), 59f73a36 (#975: check_references takes a let mut view name to a mut parameter, unviewed type fitting, as mut_args + reborrowed_args, so &mut *x), this one (sharing 677 sites_by_slot, 687 put_in_class nested entry, text_tiers 2765 tie_add on an entry). Test edits: or_insert_with(fn() { [“z”] }) and a list of literals avoided, see Found. lowered.rs not staged (foreign comptime_tree names). No nikaia-std –lib run (only .nika and lowered files changed). Found: DEFECT (new, file it): or_insert_with(fn() { [“z”] }) into a BTreeMap[String, Vec[String]] lowers vec![“z”] of &str, rustc Mismatched types. Probe: let mut m: collections::BTreeMap[String, Vec[String]] = collections::BTreeMap(); let mut late = m.entry(“b”).or_insert_with(fn() { [“z”] }); late.push(“w”) Found: DEFECT (new, file it): an entry view of a number changed by an operator: let mut n: collections::BTreeMap[String, i64] = collections::BTreeMap(); let mut c = n.entry(“q”).or_insert(0); c += 1 lowers c += 1 on &mut i64 (rustc E0368), needs *c += 1 Found: (note) let mut lists: Vec[Vec[String]] = [[], [“q”]]; let mut e = lists[1]; add(e, “r”) with add(mut all: Vec[String], ..) is NK1102 (passing Vec[ref String]): the literal list is typed as views; unclear if by design (ADR-353 text tiers), not probed further Needs: none Changelog: none here; for the version raise (supervisor): #974 a let mut of m.entry(k).or_insert(v) / or_insert_with binds the &mut Rust hands back and lowers without Rust mut (was unused_mut); #975 a let mut view (entry or_insert, m[k] ?? jump, m.get(k) ?? jump, v[i]) handed to a mut parameter is accepted and lent on as &mut *x (was NK1102 for the entry, rustc E0596 for the others) Owner: issue comment for #950: sharing 677/687 and text_tiers 2765 now use entry; left: sharing 510 (gap NK2105 in or_insert_with) and the #949 files Disk freed: none (target/nikaia-project-tests 3.5G; / 8.2G free; new entry over 100 MB: run-bundle/194302eb3b5f1d47 339 MB) Rs2nika: none (no move) Attribution: Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01GFeMqxRbtUMiGVyDMxsvEq Pushed: 8ac44edd05ab6eddaa5ff34f0c36e5646762826f