What cost the most. Wall time went to the gate in the background (about 10+ minutes) and the second build that the lower-std fixpoint needed. The fixpoint rebuild came from my fix changing check_defaults.rs. That side effect also cost two turns: I had to probe whether the change was a regression or matched existing behaviour (it matched). The fix itself took about 4 turns, because the four probe shapes (with/without if, with/without mut) showed at once that the if was not the cause.
Stmt::Assign arm of the tier walk in text_tiers.nika, where local.literal = -1 runs on any non-compound assignment, and the kept_literal/literal_lets → lets path to the String declaration.why = "b" to String::from when the let is typed String (one probe; it does).String parameter already makes the let String. That would have told me the check_defaults diff was expected.match arm body needs braces. I wrote it without them and lost one turn to a refused test.let, to see the emitter’s lowering); p8 (the side-effect probe); the test run against the unfixed compiler; fmt on a scratch copy; the lower-std/build cycle twice for the fixpoint; the gate with the 44 tests named tier/literal/let_mut.gate.nika -- --help: it has no help and printed Gate: green, which is ambiguous.Stmt::Assign arm, local.literal = -1 unless compound). Add one line warning that a fix there may change lowered tools files, such as a reassigned literal lent to a String parameter becoming String, and that this matches ADR-282 D17. Together those would have removed the search and the side-effect probe.