# CLAIMS — cycle 14, keywords that reserve nothing Source doc: `docs/v1/experiments/cycles/14-keywords-that-reserve-nothing.md` ## Pinned commits | role | sha | subject | |---|---|---| | parent / before-state | `15d4352ba` | make the capability table match its own status note | | experiment (system under test) | `0143cc458ac158e808e074acab417d4f706d89d8` | ANSWER: is a grammar a convention, or a region? | | land (merge) | `067dd40317bd880781b6035dd5bfba8c2f1b371d` | answer the parsing question: a grammar is a basis, and five keywords reserved nothing | | current HEAD at re-run time | `a0cc95e3db7b04b6e221f89e89352b0e6b15d5b7` | instrument build log | ## Verdicts | # | claim | artifact | commit | verdict | |---|---|---|---|---| | A1 | the keyword set is **46** spellings | `0001-keyword-count-at-15d4352.out` | `15d4352` | REPRODUCED (exact) | | A2 | **five** of them are consumed by no parser or codegen path: `sealed`, `activate`, `seed`, `protocol`, `impl` | `0001`, `0010-five-tokens-consumed-nowhere.out` | `15d4352` | REPRODUCED (exact) | | A3 | using one did not fail to parse: `let seed = 42 / let impl = seed + 1` compiled **CLEAN — zero cc errors** | `0004`, `0006-pre-cc-zero-errors.out` | `15d4352` | REPRODUCED (exact) | | A4 | …and **printed 0** | `0007-pre-program-run.out` | `15d4352` | REPRODUCED (exact) | | A5 | …"instead of **44**" | `0009-post-program-run.out` | `0143cc4` | **DIVERGED** | | A6 | fixed by removing the five | `0005-post-emit-c-inert-keywords.out`, `0009` | `0143cc4` | REPRODUCED | | A7 | measurement defect: `test` looked inert by the same measure and is not — codegen consumes it at **4135** for `--test` mode | `0011-test-keyword-consumed-at-codegen-4135.out` | `0143cc4` | REPRODUCED (exact, to the line) | | A8 | …and the tree has **408** uses | `0014-test-word-count-at-pre.out` | `15d4352` | REPRODUCED (exact) | | A9 | 100/100 native + 2 new | `0013-post-native-suite.out` | `0143cc4` | REPRODUCED | | A10 | 31/31 integration | `0015-post-integration-harnesses.out` | `0143cc4` | REPRODUCED (exact) | | A11 | fixpoint ok | `0012-post-fixpoint.out` | `0143cc4` | REPRODUCED | | A12 | the SHOULD gate says no: the keyword set stays code because it is closed by the language definition and the lexer runs before the program is understood | — | — | **NOT-CAPTURED** (design argument) | | A13 | the lexeme→token / shape-recognition / transduction / byte-traversal layering | — | — | **NOT-CAPTURED** (design argument) | | A14 | the defect at current HEAD | `0016-head-inert-keyword-TODAY.out` | `a0cc95e3` | fixed — prints `43`, exit 0 | ## The second silent miscompilation of the day, reproduced exactly Fixture `fixtures/inert_keyword.el`: ```el fn main() { let seed = 42 let impl = seed + 1 println(int_to_str(impl)) } ``` Emitted C at `15d4352` (`0004`): ```c el_val_t seed = 42; el_val_t impl = (EL_NULL + 1); println(int_to_str(EL_NULL)); ``` The binding is emitted, but every *use* of `seed` and `impl` is swallowed — the lexer classified the identifier as a keyword, so the expression parser never saw an identifier and emitted `EL_NULL`. `cc` reports **0 errors** (`0006`), the program exits **0**, and prints **`0`** (`0007`). At `0143cc4` (`0005`, `0009`): ```c el_val_t seed = 42; el_val_t impl = (seed + 1); println(int_to_str(impl)); ``` prints **`43`**, exit 0. ### A5 — the expected value is 43, not 44 The record says the program "printed 0 instead of **44**". For `let seed = 42` followed by `let impl = seed + 1` the correct result is **43**, and the repaired compiler prints 43 (`0009`, and again at HEAD, `0016`). The `44` is an arithmetic slip in the prose. Nothing else in the claim is affected: the defect, the clean compile, the printed `0`, and the repair all reproduce exactly. ## The measurement defect the record catches on itself — confirmed `0010`, run against `15d4352`, counts each token name across all four consumers: ``` Sealed lexer=1 parser=0 codegen=0 compiler=0 Activate lexer=1 parser=0 codegen=0 compiler=0 Seed lexer=1 parser=0 codegen=0 compiler=0 Protocol lexer=1 parser=0 codegen=0 compiler=0 Impl lexer=1 parser=0 codegen=0 compiler=0 Test lexer=1 parser=0 codegen=1 compiler=0 ``` The five are minted by the lexer and consumed by nothing. `Test` is minted by the lexer, ignored by the parser — which is why a parser-only search reported it inert — and consumed by codegen. `0011` locates that single consumer at **`codegen.el:4135`**, the exact line the record names, and `0014` counts **408** occurrences of the bare word `test` in `.el` files at `15d4352`, the exact figure the record names. Removing it would indeed have broken the suite. ## Integration count — exact ``` arity_query.sh exit=0 assertions=5 capability_query.sh exit=0 assertions=5 prohibition_query.sh exit=0 assertions=4 seam_binding.sh exit=0 assertions=7 temporal_query.sh exit=0 assertions=6 temporal_signatures.sh exit=0 assertions=4 TOTAL assertions: 31 ``` ## Provenance notes All captures are from dedicated worktrees `/tmp/rerun-v1b-14-pre` (`15d4352`), `/tmp/rerun-v1b-14-post` (`0143cc4`) and `/tmp/rerun-v1b-head` (`a0cc95e3`), with `capture.sh` invoked by absolute path from inside each, so the recorded commit is the system under test's. No DIRTY-TREE flags in this cycle.