1. Most turns and time: the tests/compiler --both-settings run (about 10+ minutes in the background), and one extra build cycle. I first added let aliasing for lambdas, beyond what the brief asked, then removed it once probes showed the lowering failed there anyway. If I had probed the let and caller-side shapes on the old binary before the first build, I would have saved that cycle.
  2. Looked up: almost nothing. The brief gave the line numbers for hand_over, classify and keeps_named_by_a_lambda, and the threading choice. I read about 250 lines of keeps.nika to see the call sites of hand_over and keep_part, and the third hand_over call (the body’s last value in uses_in), which the brief didn’t name. It also didn’t say that row c’s caller side (a let-bound local lambda handed to a kept parameter) fails on its own. A 2-line probe of keep(add) with return f would have shown that.
  3. Checks:
    • Useful: old/new probes of the test, the apply lowering check, the step-1 tests via nikaia run, the guard set plus a keeps filter, clippy and pre-push in parallel.
    • Partly wasted: tests/compiler. Five of its six failures happened because target/fast/nikaia vanished mid-run, so it proved less than it cost. A change to keeps.nika alone may not need the whole run when the named tests can be run singly.
    • Wasted: a sleep 0 while I waited for the background run.
  4. One change: the brief should give a “probe matrix on the old binary” next to the test: each row’s caller and callee as a separate 5-line program, including the bare return f variant. Unverified rows like c would then be split by cause before the first build, not after it. Also: tests that call target/fast/nikaia should use the running binary, so a concurrent rebuild can’t fail them.
This site is open source. Improve this page.