925 outcomes, zero coda
My game rang out its punchlines on detached lines: 58% of the 925 outcome texts ended in a coda. Two days of tooled mass rewriting later: zero. The story of a pass where measurement corrected intuition at every batch, including on my own commit titles.
A writing tic, made countable
EREME's events live in a single data file: at the time of the pass, 86 events, each with its intros (the player reads one per draw), its option labels, and its outcomes, the text that tells what a choice produced. In total, 925 outcome strings.
The corpus's dominant device: a paragraph, then one to three isolated sentences on detached lines, making the ending ring. I call it the coda. What made it attackable was an operational definition: in the data, the coda is everything after the first line break of a text. From there, it can be counted. At the start: 539 outcomes out of 925 carried one, 58.3%. In characters: about 33,000 in the outcomes, 4,000 more in the intros. Thirty-seven thousand characters of ringing endings.
Tooling first, no data touched
The first commit of the pass does not modify a single text. It builds the tool: an extractor that pulls the player-facing strings out of the data files into a corpus with stable keys, and an injector that puts them back by byte-level splicing, without ever re-serializing the JSON. That detail is not gratuitous elegance: the repository was shared, another session was shipping the living map into the same files while I rewrote the texts. The injection only touches its own bytes; the indentation, the key order and the neighboring line another session just edited do not move. The round-trip is proven in four steps, including a mode that rewrites the entire corpus and verifies byte-for-byte identity, and a deliberate sabotage.
Opposite it, an auditor measures read-only: lengths per text type, coda share, and above all the "reading cost of a played event", computed the way the player lives it: one median intro, all the labels, one median outcome. Not the sum of the corpus: the experience.
Measurement corrects intuition
First slice: 366 texts rewritten, the coda falls from 58.3 to 28.2%. And a first surprise, quoting the commit: "The gain is not where I expected it, and the measurement says so. The median only moves from 228 to 208; the P90 falls from 449 to 279." The next commit draws the rule: "The player does not drop off on a median, they drop off on the worst screen of the evening." The worst screen in the game would go from 65 seconds of reading down to 35.
What follows is a measured sprint: twelve commits in 67 minutes on the second morning, a batch rewritten, reinjected, checked and committed roughly every five minutes. The coda steps down, 14.4%, 11%, 7.4%, 3.6%, and the commit at the 11% step notes honestly: "The gain falls to 11%, and that is the information." The vein was running dry, and the measurement said so before boredom did.
The pass also refused a target. The auditor proposed a median outcome length of 130 characters; it was never reached, and the refusal is documented: "below 190, an outcome stops saying what the choice cost, and that is all it has to say." The final median: 192. The targets were annotated "proposed, not ratified" in the auditor's code; that one remained a proposal.
What my own titles overstated
Recounting everything in the data to write these lines, I also measured my own commits. The title of the intro batch announces "half as many words"; the measurement says minus 30% (13,729 words down to 9,608; in characters, 76,480 down to 53,236), and the commit body, more honest than its title, already said minus 30. What really got halved is the maximum: the longest intro drops from 618 to 270 characters. Same caution on the totem number: "the 925 outcomes" of the closing commit is audit coverage, 86 events out of 86 reviewed, plus a coda nowhere; the texts actually rewritten number 688.
Zero is a result
The closing batch leaves the file at zero coda. And the discipline held: since the pass, thirteen events and sixty-one outcomes have entered the game, the file counts 986 of them today, still without a single coda. A comment in the auditor keeps the trace of one last trap: the measurement brought the report down precisely on the day a text type reached zero, because zero was treated as missing data. "Zero coda is a result, not an absence of data."
Not everything fell under the rule. The end-of-voyage epilogues keep their detached lines: they are read once per voyage, at arrival, at the exact moment the player wants to be told what happened. The commit that spares them says it: "cutting there would be applying the target without understanding it."
The lesson
I loved my codas. That is exactly why they had to be counted before being judged: a writing device you love is a device you no longer see. The measurement said what it weighed, thirty-seven thousand characters, the worst screen at a minute of reading; the rewrite gave each ending back to the paragraph that deserved it; and the rule only survives because it stays counted on everything that has entered since.