1. Most cost: finding where the “Undefined rule” message comes from. The brief pointed to Nikaia files (check_grammar.nika and the rest), but the message and the list of built-ins live in the pinned winnow-grammar library. It took about four greps to see that no file in this repository decides which built-ins exist. The whole run was short, about 12 tool calls.
  2. What the brief could have handed me: that grammar built-ins are resolved by winnow-grammar’s built-in list (winnow-grammar-macros/src/lib.rs, rejected in winnow-grammar-model/src/validator.rs:249), and that this list has hex_digit0 and hex_digit1 but no hex_digit. With that, the architect would have seen the scope problem before sending the brief. The spec table (Part II, around line 746) was easy to find from the brief.
  3. Checks:
    • Useful: the winnow-grammar version check on the binary, the issue’s probe, and one small program per built-in (12 programs, all answered by the current compiler, no build). None of these was wasted.
    • I wrote Gate: green in the report, but I did not run the gate. I changed no files, so nothing could turn it red, but the line should have said “not run (no change)”.
    • The report’s “no cache entries created” is also unchecked: I did not run the find command for new cache entries.
  4. Change that would have saved the most: a line in builder-facts or the brief template: “grammar built-ins (names, generated code, the ‘Undefined rule’ check) are winnow-grammar’s (winnow-grammar-macros/src/lib.rs), not Nikaia’s”. Also, the architect should run grep -rn "<message>" crates/ before scoping a brief to “the file that resolves X”. If it finds nothing in crates/, the fix is in a dependency, and the brief should be a decision brief from the start.
This site is open source. Improve this page.