The decision this protects
Whether a piece of long prose ships. Not whether it was written with machine assistance, which is unknowable from the text and not the point, but whether it reads like it was, because the fingerprint costs credibility with exactly the readers worth having. The audit turns “does this feel AI-written” from an argument into six numbers and a candidate list.
Before you start
- The finished draft, in HTML or Markdown, prose complete.
- The audit script published with this sheet, run as
python3 ai_tell_audit.py draft.md. - Ten minutes for the manual half, reading the hollow-reveal candidates the script surfaces.
Stated limits
- The audit measures style, not truth. A piece can pass every threshold and still contain a wrong figure; fact-checking is a separate gate.
- The thresholds are tuned on this site’s own published pieces, and they are opinions with numbers attached, so recalibrate them against prose you consider clean rather than treating them as laws.
- A pass is necessary, never sufficient. The audit cannot detect a piece that says nothing; it can only confirm the nothing is well punctuated.
1. The lexicon count
| Field | What to record | Why it matters |
|---|---|---|
| Hits per 1,000 words | From the script’s word list (delve, tapestry, realm, pivotal, seamless, harness, journey and the rest) |
These words cluster in machine prose at rates human editors do not tolerate |
| The hits themselves | Each word and its count | One hit is a word choice; five are a fingerprint |
| Threshold | 0.5 per 1,000 or lower | A 7,000-word piece earns three misses at most |
Judgment prompt: For each hit, is there a plainer word that says the same thing, and if not, why not?
2. Dash density
| Field | What to record | Why it matters |
|---|---|---|
| Em dashes per 1,000 words | Count of em dashes and en dashes doing em-dash work | Edited human prose runs one to three per 1,000; machine drafts run several times that |
| Threshold | 3 per 1,000; this site’s own rule is zero | The dash is the single loudest tell, which is why the house style bans it outright |
Judgment prompt: Does each dash survive being replaced by a comma, a full stop or nothing?
3. Hollow reveals
| Field | What to record | Why it matters |
|---|---|---|
| Candidates | Short fragment followed by an abstraction, X. That is the opportunity. and its family |
The confident-staccato resolution that asserts significance instead of supplying it |
| Portability test result per candidate | Could the line be pasted into a piece on an unrelated subject | If yes, it says nothing specific and gets cut |
| Threshold | Zero surviving candidates | Each one is replaced with a figure, a date, a named thing or a concrete consequence |
Judgment prompt: What specific fact was the cut line gesturing at, and can that fact take its place?
4. Colon explanations
| Field | What to record | Why it matters |
|---|---|---|
| “Clause: lowercase explanation” per 1,000 words | From the script | The strongest residual pattern in machine prose after the obvious tells are cleaned |
| Threshold | 4 per 1,000 or lower | Two sentences usually carry the same content without the tic |
Judgment prompt: Read three of them aloud; does the rhythm repeat?
5. Fragment share and the long tail
| Field | What to record | Why it matters |
|---|---|---|
| Share of sentences with 5 words or fewer | From the script | Fine alone; combined with the patterns above it produces the staccato tell |
| Sentences of 36 or more words per 1,000 | From the script | A real long tail is a strong human signal; models regress to the mean sentence |
| Thresholds | Fragments under 10 percent; long tail at 2 per 1,000 or more | Both are distribution checks, not bans |
Judgment prompt: Do the long sentences actually need their length, or are they three sentences holding hands?
6. The named constructions
| Field | What to record | Why it matters |
|---|---|---|
not just X but Y count |
From the script | A reflex construction that inflates without adding |
That is not X. That is Y. count |
From the script | The same reflex with a full stop in it |
In today's openers |
From the script | The classic throat-clear |
| Threshold | Zero, zero, zero | Each has a plainer sentence inside it |
Judgment prompt: None needed; these are mechanical cuts.
The defensible output
The script’s one-line verdict per measure, PASS or FIX, attached to the piece’s file, plus the hollow-reveal candidates with a one-word disposition each, cut or kept-because. A piece ships when every measure reads PASS and every kept candidate has its reason written down. The record means that when someone calls a published piece machine-flavoured, the answer is the audit sheet, not a shrug.
Where I could be wrong
The fingerprint moves. These six measures describe machine prose as it reads now, and the lexicon in particular decays; words drop out of fashion in the models and new ones arrive. The sheet is dated and the word list needs re-tuning on that schedule, roughly yearly.
There is also a ceiling to what style measurement buys. Prose that passes can still be hollow in ways no counter catches, and human writing that is merely bad fails several thresholds while being entirely human. The audit reduces false positives for machine flavour; it does not grade writing.
Sources
- The audit script published with this sheet,
ai_tell_audit.py[VERIFY: final public path] - University of Florida / arXiv, research on lexical overuse in LLM text, for the word-list approach [VERIFY: cite the specific study you want to stand behind, or drop this row and let the sheet rest on the site’s own editing record]