1. What cost the most: the brief’s expected outputs were wrong. It said m == 1 << 3 in a guard should print eight and m >> 1 == 4 should print yes. But a let already refuses both with NK1197, because ADR-285 D9 counts shifts as bit operations. I only found this after the first build, so I rewrote both tests. Then I needed a second rebuild of the unfixed parser to run the new tests against it. The fixed build had already replaced target/fast/nikaia, and I had kept no copy of the old binary. That was two extra builds.
  2. What I had to look up: where NK1197 is raised (check_exprs.nika, on the parsed tree via grouped) and that D9 covers shifts. Also that the match, while and if heads all go through head_expr, and how the project’s .stderr paths look (tests/NAME.nika). The brief had all the parser lines but stated the wrong outcome.
  3. Checks run: each probe on both binaries, the whole it binary (758 s, required for a parser change), clippy, the gate guards, pre-push-check and one tests/compiler run. Wasted: the parser --lib filter (0 tests match) and a rustfmt check with the wrong edition. I also spent several turns on a tests/compiler failure that turned out to be unrelated. Running check on a test file inside the project directory printed another test’s error, so I made a scratch project.
  4. One change: a rule in builder.md: “copy target/fast/nikaia to your scratchpad as nikaia.unfixed before your first build.” That saves the rebuild of the unfixed parser on every bug fix. For the brief: have the architect check each “Expected” cell against the same expression in a let on the current binary before handing the brief out.
This site is open source. Improve this page.