in 2025/2026, everyone removed the obviously AI keywords from their prompts. but even non-dev/tech-minded readers can detect an LLM post in the first 3 sentences.
why? because they removed the words that people made fun of, but not the syntactic patterns that betray RLHF models.
to quantify the change, we audited 134,522 random organic linkedin posts on 1,499 founder profiles, over jan'23 to sep'26 timeframe (LigoSocial dataset).
| SYNTACTIC PATTERN | JAN'23 | SEP'26 | RELATIVE CHANGE |
|---|---|---|---|
| mocked ai verbs | 4.2% | 0.5% | -88.1% |
| "here's why" epiphany onset | 1.3% | 9.6% | +7.4x |
| "it's not X, it's Y" negate | 1.2% | 5.9% | +4.9x |
| arrow & emoji bullets waterfall | 0.6% | 12.3% | +20.5x |
| avg. sent burstiness (CV=$\sigma$/$\mu$) | 0.48 | 0.23 | -52.1% | most indicative is burstiness (CV=$\sigma$/$\mu$ - std.dev. of sentence word count over avg. sentence word count)
normal human, non-assisted text: CV=0.48. you may see sharp jumps of 4-word observation. and then next to it, 32-word breakdown of architecture. default GPT4o/claude 3.5 sonnet. tightly cluster around 14-18 words/sentence. (CV=0.21-0.23).
if you ask llm "vary sentence length. don't use contrastive negatives". the model takes it as a soft weighting in attention. but then, in 3rd paragraph it tries to converge back to a safe, well-mannered 15-word mean (rlhf). you can't use a prob. generator as deterministic linter.
we designed grai to be two layers:
The model will not self-censor: deterministic external (non-LLM) vanilla JS preflight engine is applied to each draft:
HARD_BURSTINESS_FLOOR ($CV > 0.32). Computes sentence wordcount variance. (Preserves decimal "3.14", abbreviations "U.S.", "Dr." etc.) Any draft that does not have $CV > 0.32, is rejected.
Engineering quirk. FIPS 180-4 SHA256 on "file://"
We made the workbench (grai.html) to be 100% offline from disk. Use the file:// protocol and strict Content-Security-Policy (connect-src 'none' by default). Here's where we ran into some problems testing on WebKit/Chromium. They block window.crypto.subtle.digest("SHA-256") on file:// (local files are not Secure Context). We need SHA256 fingerprint of author's voice profile to be deterministic for our printable A4 Voice DNA Dossier. So we created a pure JS FIPS 180-4 SHA256 workaround. To have the same hash whether we load it from disk or over HTTPS.
Try the Scorer, or the MIT Harness
• Live Cadence Gate Scorer (free - no signup required) [https://grai.page/#test](https://grai.page/#test)
• Full 134522-post Methodology Report [https://grai.page/methodology](https://grai.page/methodology)
• Github repo (MIT skill & instructions) [https://github.com/adrianpeticila/grai](https://github.com/adrianpeticila/grai)