The Tells Moved Up a Level

Blog post #66


Post #61 went out with four sentences in it that I had not noticed and Stefan caught on first read. “What happened next is the part I did not expect.” “I did not ask for this.” “Here is the thing I only worked out at the end.” “The reason is worth writing down.” None of them says anything. Each one tells the reader that the next sentence will be interesting, which the next sentence should manage on its own.

The post had been written with my humanizer skill in hand. No em dashes, no rule of three, none of the words on the list. The defect it did contain was not on the list, and that started a week of work on the list itself.

What shipped

A new pattern for the announcing sentence, with a test instead of a phrase list: delete it and read on, and if no other sentence lost meaning it was scaffolding. The test matters more than the phrases, because the phrases are exactly what a careful writer avoids while producing the same defect in new words.

A deletion pass in the rewrite process. Sixteen of the skill’s thirty-five rules opened with “words to watch” or “phrases to watch”, which means they catch a problem only in the wording it happened to be documented in. The deletion pass asks one question of every paragraph, needs no list, and works on well-written sentences, which is where the lists fail.

Three frozen prompts for testing the skill against a new model. A long first-person blog post in English, a short LinkedIn reply in Swedish, a README section. Long, short, and functional, because the tells differ by length. With a log, so the next review has a baseline instead of a memory.

And a fork. My humanizer turned out to be a clone of someone else’s repository with read-only access, and my Swedish rules had been sitting uncommitted in the working tree for a week. One git pull would have erased them. They are on GitHub now under my own account.

What’s working

Fable 5.1 came out and I ran the three prompts the same day.

The English blog post had zero em dashes in nine hundred words. Earlier models put one in most paragraphs. Zero words from the AI vocabulary list, no bold, sentence case in every heading, no corporate compounds. Six rules that had been the loudest tells of the previous generation did not fire once.

What did fire was structural. The post was built on threes: three numbers that tell the story, three lessons learned, a title with three items, a closing sentence listing three things gained. Not one triplet inside a sentence. The rule of three had moved from the sentence to the outline. Negative parallelism showed up five times. The last paragraph was the redemptive close, “none of this means the three weeks were wasted,” which is rule 25 word for word.

The Swedish reply was forty words for an eleven-word comment, and then added a whole second paragraph offering to make it shorter, more personal, or to learn my writing style from published samples. A chatbot offer stapled to a LinkedIn comment.

The README was clean. Nothing on the list fired at all.

Two things showed up that no rule covered. The prompt for the blog post supplied four facts. The output contained about fifteen specific claims: a web dashboard, a habit of building with AI tools, a decision that would have come “on day six instead of day twenty-one.” Several of the invented details happened to be true of the real project, which makes them harder to spot, not easier. And six of the nine body paragraphs ended on a quotable line. Each was good. In sequence they were a metronome.

So the split is clean. The rules that went quiet were all vocabulary and typography, the kind of thing a model can be trained out of. The rules that stayed loud describe how an argument is shaped. That is harder to train away, and harder to catch, because every sentence in the piece reads fine.

What’s unclear or broken

I ran all three prompts in one chat, one after the other. The README came out with Swedish bank headers and amounts in kronor, which the prompt never asked for, because it had seen the Swedish prompt before it. So the clean README result is suggestive, not established. Next time each prompt gets its own fresh chat.

The review was Fable 5.1 reading Fable 5.1, since I had switched models mid-session. The two new patterns were found by the same model that produced them. I logged them as flagged, not proven.

That flag resolved itself faster than expected. When I went to push the fork, upstream had made thirty commits since I cloned. Among them: “forced punchlines and dramatic fragments,” “formulaic sayings,” a broadening of the announcing rule to casual register, and a no-fabrication rule. Three of my findings, found by other people reading other text, in the same week. That is the kind of confirmation the log was asking for, and it arrived by accident.

It also meant the fork and upstream had diverged badly. Upstream had rewritten the whole skill in plain language. Rebasing onto it took an afternoon and one mistake: the pull request went to their repository instead of mine, because that is where the tool sends a fork’s PRs by default. Closed with an apology. It is still in their history.

Tooling & process

The skill is now upstream’s current version plus the things only I had: the length mode, the deletion pass, five Swedish patterns, the review method, and the prompts. Upstream’s dash rule bans every dash outright, which would have stripped correct Swedish typography, so the fork carries an exception for the spaced short dash.

The six quiet rules stay in, each with a status line naming the model and the date. They come out if they stay quiet on a second review. I am not deleting anything on one sample.

The uncomfortable part of the week is that the guide caught nothing in the README and everything in the blog post, and the blog post is the thing I actually write. Clean vocabulary is not the same as clean writing. The tells moved up a level, and the tools have to follow them there.


— Stefan