Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Grade R3/S4.
F6 Model-written published prose carries the em dash at a density two projects counted as a mark of generated text, and a writing rule without a lint did not keep it out
| Field | Value |
|---|---|
| Status | active |
| Topic | Context economy and agent prose |
| Grade | R3/S4 |
| Cases | freewilly, Shio |
| Contrary | none |
| Harness facts | none |
Claim
Where published prose was written by the agent, the em dash appeared in a large share of sentences; the two projects that treated this as a defect removed hundreds by a counted pass, and the mark came back where only a written rule stood against it, while a lint that refuses it was seen to fire.
Mechanism
The em dash is the model's default way to join two clauses, and it stands in for a relation (a reason, an aside, a consequence) the sentence then leaves unstated. Each sentence is written in a fresh turn with no count of how many dashes the page already holds, so density accumulates without any one sentence looking wrong. A rule in a skill is read only by a session that loads the skill; a lint reads every file it covers.
Observations
- freewilly. DD184 counted "207 of them, and two in every three sentences" [freewilly@0794e60]
across the site copy, the README and llms.txt, and removed 201; the same commit created a writing skill that "records the rule so the next session does not restore the dashes" [freewilly@0794e60], headed "No em dashes in published prose" [freewilly@c1c2eaf:.claude/skills/ai-writing-freewilly/SKILL.md#L30]. DD185 then removed "62 of the 64 em dashes the window, tray and CLI print" [freewilly@c1c2eaf:docs/CHANGELOG.md#L295]. The rule has no gate, and the mark returned: the pinned commit, 23 days later, added two lines with em dashes to the README [freewilly@c1c2eaf:README.md#L375-L376] (git grep -c -P '\x{2014}' gives 2 at c1c2eaf and none at its parent).
- Shio. SH929 took the em dash out of the public site, and the site's rules record
"SH929 removed 262 of them." [shio@821f18d74:shio-site/README.md#L101], calling it "the loudest tell in machine-written English" [shio@821f18d74:shio-site/README.md#L102]. The site's lint, which had exempted the em dash, now refuses it [shio@43481a0b4]. SH930 extended it to a blueprint's sample content and records the check failing on a control: "Verified by restoring one dash: the rule fires and names the file." [shio@821f18d74:docs/agents/blueprints.md#L853-L854] The same reading found 38 more in the console's own strings, "the console's own i18n bundles carry" [shio@821f18d74:docs/agents/blueprints.md#L843] them, left in place as product chrome rather than published prose.
Independence
Two origins for the observed density: 207 dashes counted in freewilly's tree and 262 in Shio's, each written in its own project. The two passes ran on the same morning, 2026-08-25 (DD184 at 08:27 and SH929 at 09:15), and both name the same user-level ai-writing skill, which freewilly says "every project on this machine gets" [freewilly@c1c2eaf:.claude/skills/ai-writing-freewilly/SKILL.md#L11]; the judgement that the dash is a defect therefore has one origin, that shared skill (grading rule 3), and is not counted twice. The lint is Shio's own. The return of the mark after the rule is a second occasion within freewilly, separated from the first by the fix.
Counter-evidence
- Three projects keep the em dash on purpose, which bears on whether it is a defect, not on
its density. polyweave put an em dash back after replacing it, "reverted to the em dash the rest of the codebase uses" [polyweave@f203b0a]. winwright's encoding test says "This repository's prose is full of em-dashes" [winwright@861b82e:tests/Winwright.Tests/EncodingTests.cs#L133] and guards their bytes rather than removing them. roadkeep uses the em dash as the separator in every governed line it writes, "EM_DASH" [roadkeep@91754240:src/roadkeep/kernel/schema.py#L160], so the planning files of all five projects carry it by format.
- Shio's lint failure is a deliberate control, not an em dash caught in use. No source
records the lint refusing a dash an agent had just written.
- The two em dashes freewilly's pinned commit added are few; they show the rule not holding,
not a return to the earlier density.
Grade
R3: the density is counted independently in two projects; the remedy has one origin. S4: Shio's lint encodes the claim that the mark must be refused rather than trusted to a rule, and it is recorded failing when one dash was restored. The strongest observation seen in use is S3, the counted 207 and 262 and freewilly's two after the rule.