Repository navigation
Say what things are, not what they are not - #3
Merged
Merged
Conversation
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 de-AI prose pass over the site's rendered copy, judged against the writing rules in my own
ai-tellsand voice skills rather than against general taste.I scanned every rendered surface first: 8 MDX lessons, 17 pages, 10 components, the layout shell, and the human-written strings in the 23 build generators. 86 findings, grouped into classes. This fixes the ones where the rule is unambiguous and leaves the ones that are a judgement call, listed below.
Net effect is 9 lines shorter and every page slightly lighter.
What this changes
Negation-identity, the largest class. The site argued by denial. Nine headings were defined by what something is not, and three of them were literally the same heading:
## What this does not do yet(errors-are-values)## Limits## What this does not do yet(traits-and-impl)## Limits## What it does not reach yet(typed-at-definition)## Limits## It is a gate, not a slogan## The roundtrip gate## The clause the deletion did not use## Acyclic imports## Why the dictionary is not a free afternoon## What the dictionary requires## Ask for the clause that is not there## Forced monomorphization## forall, and why it is not noise## Binding parameters with forall<h2>Measured, not promised</h2><h2>Measured</h2>The "this site does not" cluster. Four places defined the site by what it withholds: the digests, the changelog, SPEC.md, CHANGELOG.md. Each was defensible alone; together they read as a site with a grievance. Each now leads with where the thing actually is. The reason clauses survive, because "a hash copied by hand is exactly the thing a hash exists to catch" is the real content of that paragraph.
Performed honesty. Six sentences announced the site's own candour: "Said plainly", "said here", "said out loud rather than passed over", "Both are said here rather than left to be found", "the README says so rather than publishing the flattering column". Five were on
/why/. The page still publishes the losing benchmark row and the list of young parts. It just no longer congratulates itself for it.<h3>Where it loses</h3>over a genuine loss is stronger thanWhere it loses, said here.Hedged measurements. Four "about {N}x" where N is read straight from a recorded benchmark, plus "starts in a fraction of the time" sitting next to an exact ratio. A site whose argument is that it measures should not hedge its own measurements.
Blanket claims. "Most languages were designed for one audience", "Most projects say supports the platform", "Nobody uses a language through full builds", "Most languages give it neither". Four unsourced claims about everyone else. Replaced with the narrower true statement.
Banned phrases and filler. Five "worth noting / worth knowing / worth understanding", two "quietly" as a mood word, two "Read the premise again", two robotic tricolons.
American English. 26 British spellings in rendered copy:
colour,behaviour,honour,licence,summarise,specialise,monomorphise,initialise,optimise,serialise,the other way round. The tree was inconsistent rather than British, which is the worse state.monomorphizationandspecializedare also the standard spellings in this domain.This is a separate commit on each branch, so it can be dropped on its own if you would rather keep British spellings and make them consistent the other way.
What this deliberately does not change
Two British spellings inside recorded artifacts.
scripts/record-diagnostics.mjs:66("does not honour its written return type") andscripts/record-agent.mjs:363("an optimisation that might be wrong") are mirrored intorecords/diagnostics.jsonandrecords/agent.json. Fixing the recorder without the record makes them disagree, and hand-editing a record is exactly what this repository is built to prevent. They need anpm run recordagainst 0.12.0 with the compiler and wasi-sdk present. Left alone and flagged rather than smuggled in.In-prose negations that carry information. Roughly 15 kept, each because the contrast corrects a specific wrong assumption a reader would otherwise hold. Examples: "never their bodies" (the literal statement of R-1), "Two modules exporting one name is not a mistake" (the collision is only an error at the bare name), "no agent mode, no forked behaviour", "not iyi's win: tied N and lost M". Denial that stands in front of an assertion was cut; denial that is the point was kept.
Verification
The gates are the proof, and they all pass:
The
linksline is the one that matters most here: renaming nine headings changes nine auto-generated anchors, and all 154 fragment references still resolve. Nothing in the tree hardcoded them.Also checked by hand: zero em-dashes or en-dashes added, no
{" "}separator removed, no number, identifier, rule name or sample path altered.CI will be red, and it is not this branch
iyilang/iyihas released 0.13.0 and reworded the README sentencescripts/install-targets.mjsreads the platform names out of. Since CI checks iyi out at its default branch, the build now fails there before it reaches anything I touched:I reproduced this on a pristine
upstream/mainwith no changes at all, and on this branch, and the failure is byte-identical at the same generator. The delta from this PR is zero. The site's records also still pin 0.12.0 whilereleases.mjsnow reads 0.13.0 as latest.That is a real staleness problem worth its own fix, and it is not a prose change, so it is not in here.