nox v0.1.0 release
what ships
v0.1.0 = VM Core.
18-pattern ISA frozen: patterns 0-17 (16 compute + call + look)
canonical instantiation: nox<Goldilocks, Z/2^32, Hemera>
test suite: all patterns covered, test vectors match specs
CLI: reduce noun formulas from file / inline / stdin
quality: all 12 passes clean
out of scope for v0.1.0 (deferred to later releases):
trace generation (reduce() does not yet emit trace rows)
jet dispatch (spec exists, no rs implementation)
binary encoding (spec exists, no rs implementation)
bbg / memo integration (look pattern has NullLooks stub)
TCO / continuation / witness separation specs
current state
done:
rs/: all 18 patterns implemented (patterns/, reduce.rs, call.rs, noun/)
specs/: vm.md, reduction.md, trace.md, encoding.md, patterns/00-17, noun/, jets/, jets.md
cli/: parse + reduce + print, ASCII art banner, file/stdin/-e modes
naming: subject→object, NounRef→NounId, NounInner→Noun, Arena→Order — all done
restructure: no roadmap/, jets in specs/jets/, explanation docs complete
missing:
zero tests in rs/ — biggest release blocker
WHIR references: some specs may still say WHIR instead of Brakedown (search needed)
version: Cargo.toml still at 0.1.0 default (fine, just needs verification)
release checklist
phase 1: audit (parallel agents, read-only)
run all 12 quality passes. launch 4 parallel agents partitioned by scope:
| agent | scope | passes |
|---|---|---|
| A | rs/noun/ + rs/call.rs | 1, 3, 4, 5, 6, 9 |
| B | rs/patterns/ | 1, 3, 4, 5, 6, 7, 9, 10 |
| C | rs/reduce.rs + rs/lib.rs | 2, 5, 6, 8, 10, 11 |
| D | specs/ | 9, consistency vs code |
write findings to .claude/audits/release-2026-05-12/. main session reads, prepares fix plan, user confirms before applying.
phase 2: test suite
write rs/tests.rs (or tests/ module). all test vectors from reduction.md + individual pattern specs.
canonical test vectors (from cost-model-redesign.md, verified):
TV1: reduce([1,2], [5 [[0 2] [0 3]]], 100) = (3, 97) // add(axis 2, axis 3): 1+1+1=3
TV2: reduce(42, [1 7], 10) = (7, 9) // quote(7): cost 1
TV3: reduce([1,2], [3 [[0 2] [0 3]]], 100) = ([1,2], 97) // cons(axis 2, axis 3): 1+1+1=3
TV4: reduce([1,2], [4 [[9 [[0 2] [0 3]]] [[1 100] [1 200]]]], 100) = (200, 95) // branch+eq+axis+axis+quote
per-pattern test vectors to write:
| pattern | test cases |
|---|---|
| 0 axis | axis(1, 2) on [a b] = a; axis(1, 3) = b; depth cost; AxisError on atom |
| 1 quote | quote on atom; quote on cell; cost 1 |
| 2 compose | f(g(x)) correctly; cost 1 |
| 3 cons | builds cell; cost 1 |
| 4 branch | true branch taken; false branch taken; lazy (other not evaluated) |
| 5 add | 3+4=7; p-1+1=0 (wrap); cost 1 |
| 6 sub | 7-4=3; 0-1=p-1; cost 1 |
| 7 mul | 2*3=6; p-1 * 2 (wrap); cost 1 |
| 8 inv | inv(2)*2=1; inv(0) → InvZero; cost 64 |
| 9 eq | eq(5,5)=1; eq(5,6)=0; cost 1 |
| 10 lt | lt(3,5)=1; lt(5,3)=0; lt(5,5)=0; cost 1 |
| 11 xor | 0b1010 xor 0b1100 = 0b0110; cost 1 |
| 12 and | 0b1010 and 0b1100 = 0b1000; cost 1 |
| 13 not | not 0 = 0xFFFF_FFFF; cost 1 |
| 14 shl | 1 << 3 = 8; overflow truncates to 32 bits; cost 1 |
| 15 hash | deterministic; Hemera contract: same input → same output; cost 300 |
| 16 call | NullCalls → CallRejected; cost 1 |
| 17 look | NullLooks → Unavailable; cost 1 |
budget halt tests: ensure reduce() returns Halt (not panic) when budget < cost.
phase 3: fix
apply audit findings as atomic commits. fix in this order:
- correctness issues (passes 3, 4, 5) — soundness holes block release
- error handling (pass 6) — no panics in lib code
- type safety (pass 5) — no unwrap on fallible paths
- architecture (pass 8) — module boundaries
- style/naming (pass 9) — cleanup
- dead code (pass 10) — compactness
phase 4: version and tag
- bump rs/Cargo.toml version to 0.1.0 (confirm it matches workspace)
- update README.md: status badge, build/test instructions
- commit:
chore: release v0.1.0 - tag:
v0.1.0 - push tag to origin
definition of done
[ ] all 12 quality passes clean (audit findings resolved)
[ ] all pattern test vectors pass
[ ] cargo test exits 0
[ ] cargo clippy exits 0 (no warnings)
[ ] CLI smoke test: nox -e '[1 42]' prints 42
[ ] version 0.1.0 in Cargo.toml
[ ] v0.1.0 tag on master
estimation
| phase | pomodoros |
|---|---|
| audit (parallel agents) | 1 |
| test vectors | 2 |
| fixes | 1-2 |
| version + tag | 0.5 |
| total | 4.5-5.5 pomodoros |
one session.