Result: done
Files: crates/nikaia-std/src/tools/check_core_call_on.nika crates/nikaia-std/src/tools/lowered/check_core_call_on.rs docs/briefs/b950c.md.report.md
Commit: check_core_call_on: the two receiver/argument binding merges use BTreeMap::entry
Part: #950
Tests: nikaia test –both-settings –project tests/compiler 318 ok (copy of the binary built from this tree); guard set 23 ok; clippy clean; pre-push-check ok; lower-std fixpoint (second run unchanged)
Gate: green
Deviation: no new test (a rewrite of tools code, no compiler change). lowered.rs not staged: its diff is only another session’s comptime_tree names, this change adds no name. First guard-set build failed on another agent’s in-progress #949 work (CheckState has no field view_places, check_state/check_takes/check/core.rs); a second build minutes later was green.
Found: check_core_call_on sites (now ~1033 and ~1176, were 834/976): for (name, ty) in <owned map> { if !bound.contains_key(name) { bound.insert(name.clone(), ty.clone()) } } becomes bound.entry(name).or_insert(ty); the source map is an owned temporary (receiver/argument_bindings, arguments_of), so the key is given away and the two clones go. Lowered as bound.entry(String::from(name)).or_insert(ty) (String::from of a String, allowed by clippy::useless_conversion in the tools list). Parser files (parse_errors, parse_notes, parse_numbers, parsed_tree, parsed_view, parser_leaves): no insert loop and no contains_key site; their one-statement loops are Vec push loops (out of scope, issue step 6). Left as loops, by the brief: check_core_stmt 1350,1354 and view_changes 191,251,254 (#949 builder); comptime_tree not scanned (foreign work). Scan of all tools/*.nika for the exact step-6 shape finds no other site. Still open for step 7 (not in this round): check_program, comptime_driver, emit_needs, fold_bound, ledger, modules, prover_passes, sharing, surface, text_tiers, throws, ty entry sites.
Needs: none
Changelog: none (no version change)
Owner: none
Disk freed: none (target/nikaia-project-tests 3.5G, over the 2G limit; / 8.3G free; the cleanup one-liner was refused by the permission classifier, not needed at 8.3G free)
Rs2nika: none (no move)
Pushed: dc57b8416fcb1ab2785c2afd1b5639ee3b5d9dce