RFC-6: full words for clause keywords, and the effect row on the arrow - #128
Open
maxinelevesque wants to merge 1 commit into
Open
RFC-6: full words for clause keywords, and the effect row on the arrow#128maxinelevesque wants to merge 1 commit into
maxinelevesque wants to merge 1 commit into
Conversation
A rename and a reorder. req/ens/inv/dec become requires/ensures/keeps/measures, fx E becomes ! E at the head of the contract, and three things follow: a fixed clause order, conjunct blocks as a clause body, and `requires nothing`. No expressive power, no obligation, no type, no metatheory. The argument is that Thermite is written principally by language models, which makes semantic overlap with pretraining worth more than token economy. Abbreviations misdirect rather than merely failing to help: fx reads as audio/visual effects, dec as declare/decimal/decrement, inv as inverse. In a language where a misread clause yields a vacuous proof rather than a compile error, that is a safety property. The guar/ens collision that consumed several design cycles happened because both were abbreviated. Scope, counted by the pinned lexer rather than by a regex: 547 clause sites across the 67 .th files at 84d276e, and 1,527 more inside Rust string literals across 111 test files, which is three quarters of the migration. The spike measured the compiler change at 63 insertions and 62 deletions across five files in thermite-syntax. The migrated corpus certifies identically against Verus 0.2026.05.24.ecee80a: 18 items at L3 over six conformance files, with the same exit status on each, including map_kv.th exiting 1 in both directions for an ens true that 7.1(a) rejects as EnsIsTrivial. Six requirements join the registry, all not_started, since this is proposed rather than accepted. The generated status view is regenerated and .design/tooling/req-registry.md is re-pinned for the governed-file change. Written from outside the project, while porting a kernel subsystem, where the clause vocabulary was a repeated source of misreading. The counts come from measuring this repository rather than reading its documentation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A rename and a reorder, proposed as a draft RFC. It adds no expressive power, no
obligation, no type, and no metatheory. Every existing program keeps its meaning,
and every one of them changes.
req Prequires Pens Pensures Pinv Pkeeps Pdec Emeasures Efx E! E, moved to the head of the contractPlus a fixed clause order, conjunct blocks as a clause body, and
requires nothing.The argument
Thermite is designed to be written principally by language models, which makes
semantic overlap with pretraining worth more than token economy. Abbreviations
misdirect rather than merely failing to help:
fxreads as audio/visual effects,decas declare/decimal/decrement,invas inverse or inventory. In a languagewhere a misread clause yields a vacuous proof rather than a compile error, that
is a safety property rather than an ergonomic one.
The evidence is already paid here: the
guar/enscollision that consumedseveral design cycles happened because both were abbreviated.
Evidence attached
Counted by the pinned lexer rather than by a regex, on a
git archiveexport of84d276e7, so a word in a comment cannot be mistaken for a keyword:.thfiles, and 1,527 more inside Ruststring literals across 111 test files. Three quarters of the migration is in
the test suite.
thermite-syntax, built as a spike rather than estimated.0.2026.05.24.ecee80a: 18 items at L3 over six conformance files, with thesame exit status on each.
map_kv.thexits 1 in both directions, for anens truethat §7.1(a) rejects asEnsIsTrivial.parsegives item boundaries,tokenizegives every offset, and the rewrite splices at spans. It reaches 66of 67
.thfiles with no clause keyword surviving, plus 450 embedded fragments.Depends on #127
This targets
rfc/process-and-migrationrather thanmain, because RFC-6 needs.design/rfcs/to exist. GitHub will retarget it tomainwhen #127 merges.Six requirements join the registry, all
not_started, since this is proposedrather than accepted.
.design/tooling/req-registry.mdis re-pinned for thegoverned-file change.
Gates run locally under Python 3.11:
rfc-check,req-registry --check,doc-drift,spec-disciplineandanti-pattern-gateall exit 0.What this asks
A review and a CI run. The judgement that matters is on
keepsandmeasures,which are not Verus's words and so carry the weight of the clause-grammar rule
that chose them.
This comes from outside the project, written while porting a kernel subsystem to
Thermite, where the clause vocabulary was a repeated source of misreading. That
buys evidence rather than standing.
Per RFC-5's own convention, this PR should not be squash-merged, or the review
history collapses and the RFC's revision count stops deriving.
🤖 Generated with Claude Code