artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs

This commit is contained in:
2026-06-16 15:39:42 +00:00
parent 64bc360fc0
commit bb85aa9f11
728 changed files with 34148 additions and 0 deletions

View File

@ -0,0 +1,126 @@
# REVIEW-parse — Adversary Verdicts
## Legend
- PASS @<ts> — gate accepted, evidence below
- FAIL — repro steps below, Builder must fix
---
## D1 — precedence
**PASS @2026-06-15T00:50Z**
Cold run evidence:
```
parse(tokenize('1+2*3')) → BinOp('+', Num(1), BinOp('*', Num(2), Num(3))) ✓
parse(tokenize('2*3+1')) → BinOp('+', BinOp('*', Num(2), Num(3)), Num(1)) ✓
```
Both match expected repr exactly. `*` binds tighter than `+` in both orderings.
Extra probe — complex chain `1+2+3*4-5`:
`BinOp('-', BinOp('+', BinOp('+', Num(1), Num(2)), BinOp('*', Num(3), Num(4))), Num(5))`
`3*4` is correctly nested under addition/subtraction.
---
## D2 — left associativity
**PASS @2026-06-15T00:50Z**
Cold run evidence:
```
parse(tokenize('8-3-2')) → BinOp('-', BinOp('-', Num(8), Num(3)), Num(2)) ✓
parse(tokenize('8/4/2')) → BinOp('/', BinOp('/', Num(8), Num(4)), Num(2)) ✓
```
Extra probes:
```
parse(tokenize('2*3*4')) → BinOp('*', BinOp('*', Num(2), Num(3)), Num(4)) ✓
parse(tokenize('1+2+3')) → BinOp('+', BinOp('+', Num(1), Num(2)), Num(3)) ✓
```
Explicit assertion `r == BinOp('+', BinOp('+', Num(1), Num(2)), Num(3))` passed.
---
## D3 — parentheses
**PASS @2026-06-15T00:50Z**
Cold run evidence:
```
parse(tokenize('(1+2)*3')) → BinOp('*', BinOp('+', Num(1), Num(2)), Num(3)) ✓
parse(tokenize('(-3)*2')) → BinOp('*', Unary('-', Num(3)), Num(2)) ✓
```
Parens correctly place `+` sub-tree under `*`.
---
## D4 — unary minus
**PASS @2026-06-15T00:50Z**
Cold run evidence:
```
parse(tokenize('-5')) → Unary('-', Num(5)) ✓
parse(tokenize('-(1+2)')) → Unary('-', BinOp('+', Num(1), Num(2))) ✓
parse(tokenize('3 * -2')) → BinOp('*', Num(3), Unary('-', Num(2))) ✓
```
Extra probes:
```
parse(tokenize('--5')) → Unary('-', Unary('-', Num(5))) ✓ (recursive, correct)
parse(tokenize('(-3)*2')) → BinOp('*', Unary('-', Num(3)), Num(2)) ✓
```
`_unary` is correctly recursive for double-negation.
---
## D5 — errors
**PASS @2026-06-15T00:50Z**
Cold run — all five DoD-mandated cases:
```
'1 +' → ParseError: unexpected token 'EOF' (None) ✓
'(1' → ParseError: expected RPAREN, got 'EOF' (None) ✓
'1 2' → ParseError: unexpected token 'NUMBER' (2) after expression ✓
')(' → ParseError: unexpected token 'RPAREN' (')') ✓
'' → ParseError: empty expression ✓
```
All raise `ParseError` (not `ValueError`, `IndexError`, or other exceptions).
Extra break-it probes — all raise `ParseError` (not other exceptions):
```
'+5' → ParseError: unexpected token 'PLUS' ('+') ✓
'1++2' → ParseError: unexpected token 'PLUS' ('+') ✓
'()' → ParseError: unexpected token 'RPAREN' (')') ✓
'1 /' → ParseError: unexpected token 'EOF' (None) ✓
'* 2' → ParseError: unexpected token 'STAR' ('*') ✓
```
---
## D6 — tests green
**PASS @2026-06-15T00:50Z**
Cold run:
```
$ python -m unittest -q
----------------------------------------------------------------------
Ran 46 tests in 0.001s
OK
```
Exit code 0. 46/46 pass (24 lex + 22 parser).
DoD requires 0 failures — confirmed.
---
## Summary
| Gate | Verdict |
|------|---------|
| D1 — precedence | **PASS** |
| D2 — left associativity | **PASS** |
| D3 — parentheses | **PASS** |
| D4 — unary minus | **PASS** |
| D5 — errors | **PASS** |
| D6 — tests green | **PASS** |
All gates PASS. No findings. Builder may write "## DONE" to STATUS-parse.md.