audit docs-honesty-lint: milestone close — CLEAN, carry-on, no ratify

Architect clean (one [medium] advisory Sweep-5 self-match wart filed
as P3, not a fix iteration). Bench causally exonerated: HEAD vs
5bb7211/de66eb7 — all 5 firing bench binaries cmp-byte-identical, ail
sha256 identical at all 3 commits; the check.py firings are the two
tracked-P2 environmental classes (*.bump_s anchor staleness; *.max_us
-n5 tail-jitter, 4th on a zero-runtime-change milestone), NOT this
milestone — NO baseline ratify (Iron Law forbids ratifying noise).
compile_check 0/24, cross_lang 0/25 EXIT 0. No fieldtest (zero
authoring-surface change). docs-honesty-lint CLOSED: roadmap [~]->[x],
WhatsNew appended, INDEX line added.
This commit is contained in:
2026-05-18 12:40:57 +02:00
parent e50b400d4b
commit 3fb184417d
4 changed files with 184 additions and 18 deletions
+8
View File
@@ -206,3 +206,11 @@ AILang no longer has the block of mutable local variables (`mut`/`var`/`assign`)
The removal was justified by examining every existing use: in all of them the mutable block was doing nothing a plain binding or a loop accumulator does not already do. It was then field-tested by writing four fresh real-world programs entirely from the documentation — a running sum of squares, a grade-classification cascade, a polynomial evaluation, and a multi-state bracket-balance scanner. All four worked correctly on the first try with no mutable locals. The one thing the old construct did differently — letting a value silently carry from one loop pass to the next without being restated — is exactly the class of hard-to-follow state bug the language is designed to make impossible, so removing it makes programs easier to reason about, not harder.
The milestone is closed and fully verified — built in one atomic change, drift-reviewed (with one documentation-only follow-up fix), benchmarked clean (the one flagged metric is the same pre-existing machine-drift item already on the list, proven unrelated here by byte-identical binaries before and after), and field-tested. The next milestone is a fresh decision — a documentation-honesty sweep so the specification shows only the language as it actually is, with no wishful "we would like" and no "this went wrong" — and that is the natural place to pick up when you are back.
## 2026-05-18 — The specification now describes only what the language actually is
The canonical specification and the prose-roundtrip guide have been swept so they tell the truth about the present, and nothing else. Two kinds of writing were removed wherever they appeared: wishful "we would like / planned / will eventually" statements that described things the language does not yet do as if it already did them, and backward-looking "an earlier draft said / this was changed on such-and-such date / this was retired in that round" narration of how the document itself got to its current wording. Forward hopes now live only in the roadmap; the story of how decisions were reached lives only in the development journals. What remains in the specification is a plain present-tense account of the language as it stands — including the things it deliberately does not do, which are still stated, just honestly labelled as deliberate exclusions rather than dressed up as future promises.
To keep it that way, the specification now carries a short rule, in its own words, stating the honesty standard it holds itself to, and there is an automatic check that fails the build if a removed wishful-or-backward-looking phrasing ever creeps back in. The reviewer that guards the specification against drift was taught the same rule, so new violations get flagged going forward rather than only the ones cleaned up now.
Nothing about how programs are written, type-checked, compiled, or run changed — this milestone touched documentation only. It was reviewed clean and the one flagged benchmark metric is, once again, the same pre-existing machine-drift item already on the list, proven unrelated here by before-and-after binaries that are byte-for-byte identical.