Result: done
Files: crates/nikaia-std/src/tools/project_lower.nika crates/nikaia-std/src/tools/lowered/project_lower.rs docs/briefs/b949.md.step1.report.md docs/briefs/b949.md.report.md
Commit: project_lower_published takes the ledger’s pairs out of the entry instead of copying them (ADR-views-1)
Fixes: #949
Tests: step 1 (2dd2e6d6): 9 new tests/compiler programs, all failed on the unfixed compiler; this step: lower-std lowers it to get_mut + std::mem::take of contract.ensures and contract.from, kept.drain() pushes with no copy; nikaia test –both-settings –project tests/compiler 326 ok, 1 environmental (commit_dry_run: run with a binary copy not named nikaia); no test names project_lower (grep tests/compiler/tests, crates/nikaia/tests/it); it touched modules 277 ok; guard set 23 ok; clippy clean; pre-push-check ok
Gate: green
Deviation: steps 1-5 are one commit (2dd2e6d6, Part of #949), as the issue’s step 5 says; step 6 this commit; for (e, f) in kept.drain() instead of in kept (a for over a list lends, Part I 6.5, so the pushes would need a copy); the rule also covers a field of a mut parameter handed to a keeper (Part I 6.5 specified it, it was unbuilt: no NK2108, a rustc move error), not ref mut self
Found: lowered/check_core_call_on.rs re-lowers to bound.entry(..).or_insert(ty) on this tree (not from my change, left unstaged); nikaia check tests/X.nika run inside tests/compiler prints another file’s refusal (a_bang_after_a_name…) instead of X’s
Needs: none
Changelog: A part of a let mut view of a place (let mut c = m[k] ?? continue, a for mut element) or of a mut parameter handed to something that keeps it is taken out with no copy (std::mem::take, or mem::replace with a stand-in) and must be given back by assignment before the view’s block is left (NK2108, naming the view and its place); the whole view handed over is NK1131 (ADR-views-1, #949)
Rs2nika: none (not a move)
Model: Opus 5.5
Disk freed: none (target/nikaia-project-tests 3.5G; / 8.3G free; no new cache entry over 100 MB)