@cratis/pi 6.3.2 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/rules/profiles.md +1 -1
- package/package/corpus/skills/cratis-content-length/LICENSE +2 -0
- package/package/corpus/skills/cratis-content-length/SKILL.md +222 -0
- package/package/corpus/skills/cratis-content-length/references/length-evidence.md +115 -0
- package/package/corpus/skills/cratis-content-length/verification.json +19 -0
- package/package/corpus/skills/cratis-developer-marketing/LICENSE +2 -0
- package/package/corpus/skills/cratis-developer-marketing/SKILL.md +249 -0
- package/package/corpus/skills/cratis-developer-marketing/references/measurement.md +136 -0
- package/package/corpus/skills/cratis-developer-marketing/references/playbook-evidence.md +214 -0
- package/package/corpus/skills/cratis-developer-marketing/verification.json +19 -0
- package/package/corpus/skills/cratis-social-feed-post/SKILL.md +204 -102
- package/package/corpus/skills/cratis-social-feed-post/references/engagement-evidence.md +138 -0
- package/package/corpus/skills/cratis-social-feed-post/verification.json +19 -8
- package/package/corpus/skills/cratis-writing-voice-and-cadence/SKILL.md +211 -57
- package/package/corpus/skills/cratis-writing-voice-and-cadence/references/ai-tells.md +419 -0
- package/package/corpus/skills/cratis-writing-voice-and-cadence/verification.json +14 -2
- package/package/profile-catalog.json +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
# AI-associated writing patterns
|
|
2
|
+
|
|
3
|
+
This is the full catalog behind the **cratis-writing-voice-and-cadence** skill: patterns that
|
|
4
|
+
make writing read as machine-produced, how a script can find each one, and what a person
|
|
5
|
+
would usually write instead. Sources were checked in September 2026. Bracketed IDs such as
|
|
6
|
+
HV-10 point to the [Sources](#sources) table at the end of this file.
|
|
7
|
+
|
|
8
|
+
Read the skill's non-detector policy before using any of this. Every check below finds a
|
|
9
|
+
passage for a person to reread. None of them, alone or combined, tells you who wrote a text.
|
|
10
|
+
Readers do poorly at that task (HV-01, HV-03), the cues they rely on are unreliable (HV-02),
|
|
11
|
+
and the studies that do find differences between human and model text find them in aggregate
|
|
12
|
+
over many texts, within the genres and models they tested (HV-05, HV-06). Detector vendors
|
|
13
|
+
publish prevalence figures, but those are the vendor's own classifications of posts its
|
|
14
|
+
searches found, not verified authorship (HV-21, HV-22).
|
|
15
|
+
|
|
16
|
+
## How much weight each entry carries
|
|
17
|
+
|
|
18
|
+
Most of this catalog is editorial. The "Basis" line on each entry says which of three kinds
|
|
19
|
+
it is.
|
|
20
|
+
|
|
21
|
+
"Study" means a verified study found the pattern elevated in model text, in aggregate, in a
|
|
22
|
+
specific genre. It still can't classify one piece. "Guide" means a published editors' guide
|
|
23
|
+
lists it as a possible sign, and that guide says its signs are context-dependent
|
|
24
|
+
observations that prove nothing on their own (HV-23). "Editorial" means no verified study backs it as an AI
|
|
25
|
+
signal. Those entries are here because they recur in generated copy and usually stand in for
|
|
26
|
+
missing substance, so judge them on that alone.
|
|
27
|
+
|
|
28
|
+
## Running the checks
|
|
29
|
+
|
|
30
|
+
- Keep the original text of each piece, with file, line and character offsets. Match the
|
|
31
|
+
lexical, syntactic and tonal patterns against a prose view that leaves out front matter,
|
|
32
|
+
fenced and inline code, URLs, block quotes and quoted strings, because code and quotations
|
|
33
|
+
aren't prose the writer chose. Map every match back to its original offset.
|
|
34
|
+
- Some checks need what the prose view leaves out, so they read the original. L4 looks for a
|
|
35
|
+
link, citation or named source in the original sentence. T3 classifies the original first
|
|
36
|
+
sentence, backtick spans and calls included. L1, L5 and T5 read the original sentence to
|
|
37
|
+
decide whether it has a number, identifier or code. N5 compares the complete before and
|
|
38
|
+
after versions.
|
|
39
|
+
- Treat straight (`'`) and curly (`’`) apostrophes alike. Patterns that depend on a
|
|
40
|
+
contraction or possessive use `['’]`. A check that normalizes apostrophes does it in a
|
|
41
|
+
comparison copy and keeps the original text and offsets.
|
|
42
|
+
- Patterns are JavaScript regular expressions. Use the `i` flag unless the entry says
|
|
43
|
+
otherwise, `g` to count, `m` for line-anchored patterns, and `u` where noted.
|
|
44
|
+
- Report each match with its sentence, file and line. Don't sum matches into a score, don't
|
|
45
|
+
label a piece "AI", and don't rewrite automatically.
|
|
46
|
+
- The thresholds are starting defaults nobody has calibrated. Before relying on one, run it
|
|
47
|
+
over material you know people wrote and look at what it flags.
|
|
48
|
+
- A batch means ten comparable pieces: same channel, same content type. With fewer than five,
|
|
49
|
+
report per-piece results and skip the batch checks.
|
|
50
|
+
- A material limitation is never a cadence problem. If a check flags a sentence that states a
|
|
51
|
+
real limit, the fix is to move or rephrase it, never to drop it.
|
|
52
|
+
|
|
53
|
+
## Lexical
|
|
54
|
+
|
|
55
|
+
### L1. Inflated significance
|
|
56
|
+
|
|
57
|
+
Words that assert importance without showing any: *pivotal*, *groundbreaking*,
|
|
58
|
+
*transformative*, *game-changing*, *a testament to*, *plays a key role*.
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
\b(?:pivotal|groundbreaking|transformative|revolutioni[sz](?:e|es|ed|ing)|game[- ]chang(?:er|ers|ing)|(?:a |stands as a )?testament to|plays? an? (?:key|vital|crucial|pivotal|central) role)\b
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Flag two or more in one piece, or one in a sentence with no number, identifier or named
|
|
65
|
+
thing nearby. Replace the word with what it was pointing at: the behavior, the measurement,
|
|
66
|
+
the decision, and how far it reaches. Basis: guide (HV-25), with the HV-23 caveat.
|
|
67
|
+
|
|
68
|
+
### L2. Abstract scene-setting
|
|
69
|
+
|
|
70
|
+
Openings that set a stage nobody asked for: *in today's fast-paced world*, *the evolving
|
|
71
|
+
landscape*, *tapestry*, *the realm of*, *paradigm shift*.
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
\b(?:(?:ever-?)?(?:evolving|changing|shifting) landscape|in today['’]?s (?:fast-paced|digital|modern|ever-changing) world|tapestry|(?:in|into) the realm of|paradigm shift)\b
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Flag any match in the first two sentences, or the same phrase in two or more pieces of a
|
|
78
|
+
batch. Start instead with the engineering question or the symptom somebody saw. Basis:
|
|
79
|
+
guide for "evolving landscape" (HV-25); editorial for the rest.
|
|
80
|
+
|
|
81
|
+
Fixtures: the pattern matches "In today's digital world" and "In today’s digital world",
|
|
82
|
+
and does not match "Today’s release fixes the importer".
|
|
83
|
+
|
|
84
|
+
### L3. Polished filler verbs and adjectives
|
|
85
|
+
|
|
86
|
+
*Delve*, *underscore* and *showcase* rose sharply in one large corpus of biomedical abstracts
|
|
87
|
+
after 2023 (HV-10); the same analysis estimated that at least 13.5% of 2024 abstracts were
|
|
88
|
+
processed with a language model (HV-09). Neither result was measured on developer writing or
|
|
89
|
+
social posts. *Robust*, *seamless*, *leverage*, *unlock*, *elevate*, *empower* and
|
|
90
|
+
*streamline* are unvalidated clichés in the same family.
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
\b(?:delv(?:e|es|ed|ing)|underscor(?:e|es|ed|ing)|showcas(?:e|es|ed|ing)|robust(?:ly|ness)?|seamless(?:ly)?|leverag(?:e|es|ed|ing)|unlock(?:s|ed|ing)?|elevat(?:e|es|ed|ing)|empower(?:s|ed|ing)?|streamlin(?:e|es|ed|ing))\b
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Count per 1,000 words and show every match in context. Starting default: flag three or more
|
|
97
|
+
per 1,000 words, or one stem that recurs across three or more pieces in a batch. Use the
|
|
98
|
+
direct verb and its object: "runs this query", "fails on replay". Leave a term alone when it
|
|
99
|
+
carries its technical meaning, as in robust statistics or a lever in a physical system.
|
|
100
|
+
Basis: study for the first three (HV-10); editorial for the rest.
|
|
101
|
+
|
|
102
|
+
### L4. Unattributed consensus
|
|
103
|
+
|
|
104
|
+
*Experts say*, *studies show*, *developers want*, *everyone knows*.
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
\b(?:experts|studies|research|developers|engineers|everyone|many (?:people|teams)|most (?:people|teams|developers))\s+(?:say|says|show|shows|agree|know|want|believe|suggest|suggests)\b
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Flag any match whose sentence has no link, citation or named source. Name the study, the
|
|
111
|
+
survey question and its population, or present the point as the author's opinion. Basis:
|
|
112
|
+
editorial.
|
|
113
|
+
|
|
114
|
+
### L5. Empty assurances
|
|
115
|
+
|
|
116
|
+
*Easy*, *simple*, *secure*, *production-ready*, *best-in-class*, *blazing fast*.
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
\b(?:easy|easily|simple|simply|effortless(?:ly)?|secure|production[- ]ready|best[- ]in[- ]class|enterprise[- ]grade|blazing(?:ly)?[- ]fast)\b
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Flag when the sentence has no prerequisite, version, threat model or comparison. Describe the
|
|
123
|
+
path that was actually verified and where it stops working. Any claim of security or
|
|
124
|
+
readiness also has to clear the owning product's claim review; rewording doesn't. Basis:
|
|
125
|
+
editorial; PostHog's voice guide makes the same argument for specifics and candor about
|
|
126
|
+
limits (DP-05).
|
|
127
|
+
|
|
128
|
+
## Syntactic
|
|
129
|
+
|
|
130
|
+
### S1. Corrective tail and reflexive contrast
|
|
131
|
+
|
|
132
|
+
A sentence that ends by correcting itself ("…, not a fresh count."), the "not only X but Y"
|
|
133
|
+
frame, the "It's not X, it's Y" reflex, and "rather than" doing the same job.
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
,\s+not\s+[^,.;:!?]{1,40}[.!?]
|
|
137
|
+
\bnot\s+(?:only|just|merely)\b[^.!?]{1,80}\bbut\b
|
|
138
|
+
\b(?:it|this|that)(?:'s|’s|\s+is)\s+not\b[^.!?,;:—–]{1,60}[,;:—–.]\s*(?:it|this|that)(?:'s|’s|\s+is)\b
|
|
139
|
+
\brather\s+than\b
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Starting default: flag two or more in a piece under 300 words, four or more per 1,000 words
|
|
143
|
+
in longer ones, or the same construction closing a paragraph in five or more pieces of a
|
|
144
|
+
batch. State what the thing does first. Keep a contrast when the reader would otherwise
|
|
145
|
+
confuse the two things. Basis: editorial.
|
|
146
|
+
|
|
147
|
+
### S2. Balanced semicolon and em-dash pivot
|
|
148
|
+
|
|
149
|
+
Two clauses of equal weight on either side of a semicolon, and a dash that swings into a
|
|
150
|
+
short closing clause.
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
\b\w+;\s+[a-z]
|
|
154
|
+
(?:\s?[—–]\s?|\s--\s)[^—–.!?\n]{1,40}[.!?](?=\s|$)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Presence means nothing; people use both. Compare density and position across the batch.
|
|
158
|
+
Flag three or more in one short piece, or the same construction in the last sentence of a
|
|
159
|
+
paragraph in more than half the batch. Replace it with the connective that says what the
|
|
160
|
+
relationship is: because, so, unless, which means. Basis: editorial.
|
|
161
|
+
|
|
162
|
+
### S3. Participial tails and noun stacks
|
|
163
|
+
|
|
164
|
+
A sentence that trails a ", making it…" clause, and runs of nominalizations: "the
|
|
165
|
+
implementation of the normalization of the configuration".
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
,\s+(?!(?:including|according|during|following|regarding|depending|assuming|using|excluding|starting)\b)\w{3,}ing\b
|
|
169
|
+
\b\w{3,}(?:tion|sion|ment|ity|ance|ence|ness)s?\b
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Flag a piece where more than a third of sentences end in a participial tail. Count the second
|
|
173
|
+
pattern per sentence and flag sentences with four or more. Put the actor and the action in a
|
|
174
|
+
finite verb and keep the technical terms that matter. Basis: a corpus study found aggregate
|
|
175
|
+
grammatical differences between human and model text (HV-05), limited to its genres and
|
|
176
|
+
models; the specific constructions here are an editorial reading.
|
|
177
|
+
|
|
178
|
+
### S4. Reflexive triplets and mirrored clauses
|
|
179
|
+
|
|
180
|
+
Three parallel items where the thought had one or two, and runs of sentences built to the
|
|
181
|
+
same template.
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
\b[\w'-]+(?:\s+[\w'-]+){0,2},\s+[\w'-]+(?:\s+[\w'-]+){0,2},?\s+(?:and|or)\s+[\w'-]+
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
The pattern is noisy by design. Flag three or more triplets in a piece under 500 words, or
|
|
188
|
+
one in each of three adjacent paragraphs. For mirrored clauses, split into sentences and flag
|
|
189
|
+
three consecutive sentences that start with the same word, or whose word counts sit within
|
|
190
|
+
two of each other. Keep every item that is independently useful and cut the ceremonial third.
|
|
191
|
+
Basis: editorial.
|
|
192
|
+
|
|
193
|
+
### S5. Punchline fragment
|
|
194
|
+
|
|
195
|
+
A two- or three-word sentence landing a slogan: "They run." "Every time."
|
|
196
|
+
|
|
197
|
+
No regex. Split paragraphs into sentences on `(?<=[.!?])\s+`, then flag sentences of one to
|
|
198
|
+
three words that end a paragraph or follow a sentence of twelve words or more. Skip headings,
|
|
199
|
+
list items and code. Flag two or more in a piece, or a paragraph-final fragment in three or
|
|
200
|
+
more pieces of a batch. Fold the point into the sentence it punctuates, or cut it if that
|
|
201
|
+
sentence already made it. Basis: editorial.
|
|
202
|
+
|
|
203
|
+
### S6. Self-answered questions, signposts and pointer sentences
|
|
204
|
+
|
|
205
|
+
"Why bother? Because…", "Here's the thing", "That's the X. Here's the Y.", "Let's dive in",
|
|
206
|
+
and "That is what X is for" standing in for an explanation.
|
|
207
|
+
|
|
208
|
+
```text
|
|
209
|
+
\?\s+(?:Because|Simple|Easy|Here(?:'s|’s| is)|The answer|It turns out|Turns out)\b
|
|
210
|
+
\b(?:Here(?:'s|’s| is) (?:the (?:thing|kicker|catch|twist|deal|point)|why|how|what)|Let(?:'s|’s| us) (?:dive|break (?:it|this) down|unpack))\b
|
|
211
|
+
\bThat(?:'s|’s| is) the [\w-]+\.\s+Here(?:'s|’s| is)\b
|
|
212
|
+
\bthat(?:'s|’s| is) (?:exactly )?what [^.!?]{1,40}\b(?:is|are) for\b
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
The third pattern is case-sensitive. One self-answered question can be fine. Flag two or more
|
|
216
|
+
per piece, or the same signpost in three or more pieces of a batch. Ask a question only when
|
|
217
|
+
it is still open; otherwise give the answer. Basis: editorial.
|
|
218
|
+
|
|
219
|
+
## Structural
|
|
220
|
+
|
|
221
|
+
These are mostly batch checks. A single piece can't be a template on its own.
|
|
222
|
+
|
|
223
|
+
### T1. One shape for every piece
|
|
224
|
+
|
|
225
|
+
For each piece, record paragraph count, word or character count, and the word count of each
|
|
226
|
+
paragraph. Compute the coefficient of variation of paragraph length (standard deviation
|
|
227
|
+
divided by mean).
|
|
228
|
+
|
|
229
|
+
Report each piece's figures as a description, not a flag. Don't flag a piece for where it
|
|
230
|
+
falls in a ranking: ranking any batch produces a bottom group, even when the writing is
|
|
231
|
+
varied and suits its purpose.
|
|
232
|
+
|
|
233
|
+
Flag only concentration across comparable pieces, and report it with its denominator, for
|
|
234
|
+
example "7 of 10 pieces have four paragraphs". The starting defaults are uncalibrated:
|
|
235
|
+
|
|
236
|
+
- one paragraph count covers seven or more of ten comparable pieces (70% of the batch);
|
|
237
|
+
- seven or more of ten comparable pieces fall within 10% of the batch's median word count
|
|
238
|
+
while their subjects clearly differ. Flag this one for manual review.
|
|
239
|
+
|
|
240
|
+
With fewer than five comparable pieces, report the figures and draw no batch conclusion. Let
|
|
241
|
+
the argument decide the shape. Don't pick a new target shape. Basis: study for reduced
|
|
242
|
+
stylistic variation in the genres tested (HV-06); the thresholds are editorial.
|
|
243
|
+
|
|
244
|
+
### T2. Flat sentence length
|
|
245
|
+
|
|
246
|
+
Compute the standard deviation of sentence length in words for each piece and report it as a
|
|
247
|
+
description, not a flag. Exclude short reference entries and step lists, which are
|
|
248
|
+
legitimately even. Flag the batch only when flat pieces concentrate. The uncalibrated
|
|
249
|
+
starting default is a standard deviation under five words in seven or more of ten comparable
|
|
250
|
+
pieces, reported with its denominator. There is no correct number. With fewer than five
|
|
251
|
+
comparable pieces, draw no batch conclusion. Basis: as T1.
|
|
252
|
+
|
|
253
|
+
### T3. One opening for every piece
|
|
254
|
+
|
|
255
|
+
Classify each piece's first sentence, in this order:
|
|
256
|
+
|
|
257
|
+
- number: the first token contains a digit
|
|
258
|
+
- question: the sentence ends with `?`
|
|
259
|
+
- identifier: contains a backtick span, a `Name()` call or a CamelCase word
|
|
260
|
+
- direct address: starts with `You`, `Your` or `If you`, or with an imperative verb (manual)
|
|
261
|
+
- abstract assertion: matches `^(?:A|An|The)\s+\w+(?:\s+\w+)?\s+(?:is|are|can|needs?|has|should|will)\b`
|
|
262
|
+
- event or problem: anything else, confirmed by a reader
|
|
263
|
+
|
|
264
|
+
Flag the batch when one class covers six or more of ten pieces, or when three or more pieces
|
|
265
|
+
share their first two words. Open with a documented event, task or decision. A concrete
|
|
266
|
+
opening doesn't mean an invented scene: Dudycz's article on fixing event-sourcing bugs opens
|
|
267
|
+
on bad data every system accumulates, then a support incident (DA-03). Don't overcorrect
|
|
268
|
+
into density either. In historical headline experiments, added concreteness helped headlines
|
|
269
|
+
that were too vague and hurt ones that were already very concrete (HC-03), and linguistic
|
|
270
|
+
features predicted the winning variant only 54% of the time (HC-05). Basis: editorial, with
|
|
271
|
+
the headline studies as a limit on over-tuning.
|
|
272
|
+
|
|
273
|
+
### T4. Bold-label bullets, takeaway blocks and emoji bullets
|
|
274
|
+
|
|
275
|
+
```text
|
|
276
|
+
^\s*(?:[-*+]|\d+\.)\s+\*\*[^*\n]+\*\*
|
|
277
|
+
^\s*(?:#{1,6}\s*|\*\*)?(?:Key takeaways?|Takeaways?|TL;?DR|The bottom line|Why (?:this|it) matters)\b
|
|
278
|
+
^\s*(?:[-*+]\s+)?\p{Extended_Pictographic}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Use `m` for all three and `u` for the third. Flag three or more consecutive bold-label
|
|
282
|
+
bullets where each label is followed by a sentence of prose, any takeaway block in a piece
|
|
283
|
+
under 800 words, and emoji-prefixed bullets as a separate count. Reference lists, glossaries
|
|
284
|
+
and option tables are legitimate uses and are exempt. Use a list for a real procedure or
|
|
285
|
+
comparison and paragraphs for an argument. Basis: editorial.
|
|
286
|
+
|
|
287
|
+
### T5. Summary or maxim close
|
|
288
|
+
|
|
289
|
+
Apply to the first line of the last paragraph:
|
|
290
|
+
|
|
291
|
+
```text
|
|
292
|
+
^(?:In (?:summary|conclusion|short)|To (?:sum up|summarize|conclude)|Overall|Ultimately|All in all|The (?:lesson|takeaway|bottom line)(?: here)? is)\b
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Also flag a last sentence of twelve words or fewer that has no digit, identifier or code and
|
|
296
|
+
shares two or more content words with the first paragraph: that is usually a restatement
|
|
297
|
+
dressed as a maxim. Flag the batch when summary or maxim closes appear in five or more of ten.
|
|
298
|
+
End on a result, a real limit, the next step, or a question the author wants answered.
|
|
299
|
+
Basis: editorial.
|
|
300
|
+
|
|
301
|
+
### T6. Labeled caveat at the end
|
|
302
|
+
|
|
303
|
+
A limitation parked in its own closing paragraph: "One honest limit:".
|
|
304
|
+
|
|
305
|
+
```text
|
|
306
|
+
^(?:(?:One|A|The)\s+(?:(?:honest|important|real|big|key)\s+)?(?:limit|limitation|caveat|note|warning)|Caveat|Limitation|Note)s?\b[^:\n]{0,20}:
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Flag any match in the last paragraph, and the batch when three or more pieces end this way.
|
|
310
|
+
Move the limit into the sentence it qualifies: "On macOS and Linux, the installer…". Never
|
|
311
|
+
delete it to improve the ending. Basis: editorial.
|
|
312
|
+
|
|
313
|
+
## Tonal
|
|
314
|
+
|
|
315
|
+
### N1. Generic optimism and absolute certainty
|
|
316
|
+
|
|
317
|
+
```text
|
|
318
|
+
\b(?:always|never|guaranteed?|every time|zero[- ](?:risk|downtime|config(?:uration)?)|thrilled|excited to|delighted|incredible|amazing|world[- ]class|next[- ]level|cutting[- ]edge|state[- ]of[- ]the[- ]art)\b|100%
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Flag clusters of two or more in a paragraph and every absolute that isn't backed by a source.
|
|
322
|
+
"Never" and "always" are often real limits; check N5 before touching one. State what was
|
|
323
|
+
observed, what is uncertain, and which cases aren't supported. Basis: editorial.
|
|
324
|
+
|
|
325
|
+
### N2. Synthetic first-person experience
|
|
326
|
+
|
|
327
|
+
Confessions, lessons learned the hard way, and customer anecdotes.
|
|
328
|
+
|
|
329
|
+
```text
|
|
330
|
+
\b(?:I|we)\s+(?:was|were)\s+wrong\b|\b(?:I|we)\s+learned\s+(?:this\s+)?the\s+hard\s+way\b|\b(?:a|one of our)\s+(?:customers?|clients?|users?)\s+(?:told|asked|said|called|emailed)\b|\b(?:last|this)\s+(?:week|month|year),?\s+(?:I|we)\b
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
This isn't a language judgment. Every match goes to the named author, who confirms it
|
|
334
|
+
happened and points to something inspectable: the issue, the commit, the message. If they
|
|
335
|
+
can't, the passage is removed or labeled as a hypothetical. Basis: LinkedIn's stated policy
|
|
336
|
+
that posts should represent the member's own voice and perspectives (HV-18). The rest is an
|
|
337
|
+
ethical rule and makes no evidence claim.
|
|
338
|
+
|
|
339
|
+
### N3. Engagement bait
|
|
340
|
+
|
|
341
|
+
```text
|
|
342
|
+
\b(?:comment\s+["“]?\w+["”]?\s+(?:below|if)|agree\?|repost\s+if|tag\s+(?:someone|a\s+(?:friend|colleague))|who\s+else\b[^?\n]*\?|let\s+me\s+know\s+in\s+the\s+comments|thoughts\?)
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Flag every match and review the intent. A closing question can be genuine; a request to
|
|
346
|
+
react isn't. Invite a specific counterexample, or ask something the author needs answered.
|
|
347
|
+
Basis: editorial.
|
|
348
|
+
|
|
349
|
+
### N4. Review language in the copy and writer-protecting hedges
|
|
350
|
+
|
|
351
|
+
Evidence, verification and approval wording that belongs in the review record, and stacked
|
|
352
|
+
qualifiers that protect the writer without informing the reader.
|
|
353
|
+
|
|
354
|
+
```text
|
|
355
|
+
\b(?:verified (?:against|by|in)|as (?:approved|reviewed)|(?:the )?evidence (?:shows|suggests|indicates)|per (?:the )?review|this has been (?:checked|validated))\b
|
|
356
|
+
\b(?:may|might|could|potentially|possibly|arguably|somewhat|in some cases|to some extent|it appears|it seems)\b
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Flag every match of the first pattern. Count the second per sentence and flag two or more in
|
|
360
|
+
one sentence. Move review residue to the review record. Keep a qualifier when it is true and
|
|
361
|
+
would change what the reader does. Basis: editorial.
|
|
362
|
+
|
|
363
|
+
### N5. Meaning lost in the edit
|
|
364
|
+
|
|
365
|
+
This check compares a passage before and after rewriting. Run it on every rewrite, including
|
|
366
|
+
passages nothing flagged.
|
|
367
|
+
|
|
368
|
+
```text
|
|
369
|
+
\b(?:not|no|never|only|unless|until|without|except|may|might|must|cannot|can['’]t|won['’]t|don['’]t|doesn['’]t|isn['’]t|aren['’]t)\b
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Run it on the complete original of both versions, never the prose view: the identifiers and
|
|
373
|
+
quoted values it compares sit in code spans and quotation marks. Extract from each version:
|
|
374
|
+
identifiers (backtick spans, CamelCase words, dotted names, paths), quoted values, numbers
|
|
375
|
+
(`\d[\d.,]*%?`), and the negation, limiter and modal words above. Normalize curly apostrophes
|
|
376
|
+
to straight ones in the extracted words, so a change of apostrophe style alone isn't
|
|
377
|
+
reported. Flag any item present before and missing after, and any number or identifier that
|
|
378
|
+
appears only after. A person then reads each flagged pair for meaning; counts can't show that
|
|
379
|
+
"there is no need to" has become "without needing to". Basis: editorial.
|
|
380
|
+
|
|
381
|
+
Run these fixtures before relying on the check. Each pair must give the result shown.
|
|
382
|
+
|
|
383
|
+
| Before | After | Expected |
|
|
384
|
+
| --- | --- | --- |
|
|
385
|
+
| The installer doesn't support Windows. | The installer supports Windows. | Flag: `doesn't` missing after |
|
|
386
|
+
| The installer doesn’t support Windows. | The installer supports Windows. | Flag: `doesn’t` missing after |
|
|
387
|
+
| The installer doesn’t support Windows. | The installer doesn't support Windows. | No flag |
|
|
388
|
+
| The installer doesn’t support Windows yet. | The installer doesn’t support Windows. | No flag |
|
|
389
|
+
| Retries stop after 3 attempts. | Retries stop after 5 attempts. | Flag: `3` missing, `5` only after |
|
|
390
|
+
|
|
391
|
+
## Sources
|
|
392
|
+
|
|
393
|
+
Only findings that passed verification are listed. The wording in the second column is the
|
|
394
|
+
verified claim, narrowed where the original summary overstated it.
|
|
395
|
+
|
|
396
|
+
| ID | What the source supports | Type | Source |
|
|
397
|
+
| --- | --- | --- | --- |
|
|
398
|
+
| HV-01 | In six experiments with 4,600 participants, people could not reliably detect AI-generated self-presentations in professional, hospitality and dating contexts. | Peer-reviewed, 2023 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC10089155/) |
|
|
399
|
+
| HV-02 | The same study identifies first-person pronouns and contractions as flawed heuristics for judging human authorship. Applies to the studied self-presentations. | Peer-reviewed, 2023 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC10089155/) |
|
|
400
|
+
| HV-03 | In a convenience sample, 140 instructors and 145 students picked the ChatGPT essay from a pair 70% and 60% of the time; experience, subject expertise and confidence did not reliably predict better performance. | Peer-reviewed, 2024 | [Springer](https://link.springer.com/article/10.1007/s40979-024-00158-3) |
|
|
401
|
+
| HV-05 | A study of parallel human and LLM corpora found systematic lexical, grammatical and rhetorical differences, in aggregate. | Peer-reviewed, 2025 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC11874169/) |
|
|
402
|
+
| HV-06 | In the models and genres studied, LLMs struggled to match human stylistic variation. | Peer-reviewed, 2025 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC11874169/) |
|
|
403
|
+
| HV-09 | From excess vocabulary across more than 15 million PubMed abstracts, at least 13.5% of 2024 abstracts were estimated to be processed with LLMs. An inferred lower bound, not a count, and not about social media. | Corpus study, 2025 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC12219543/) |
|
|
404
|
+
| HV-10 | The same study reports strong excess 2024 usage of "delves", "underscores" and "showcasing". An aggregate signal, not an individual verdict. | Corpus study, 2025 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC12219543/) |
|
|
405
|
+
| HV-11 | In an experiment with 680 US participants, some AI assistance increased engagement and content volume while lowering perceived quality and authenticity of discussion. | Preprint, not peer reviewed, 2025 | [arXiv](https://arxiv.org/abs/2506.14295) |
|
|
406
|
+
| HV-12 | A review of 47 journalism studies found no consistent trust penalty from AI provenance cues; effects depended on topic, baseline trust, source cues and signaled human oversight. Not about developer posts. | Systematic review, 2026 | [PMC](https://pmc.ncbi.nlm.nih.gov/articles/PMC13183635/) |
|
|
407
|
+
| HV-18 | LinkedIn: "It's ok to use AI to help you write, but your posts and comments need to represent your voice and your perspectives." | Platform statement, 2026 | [LinkedIn](https://news.linkedin.com/2026/keeping-conversations-real-on-linkedin) |
|
|
408
|
+
| HV-19 | LinkedIn: content that appears AI-generated and lacks clear perspective is less likely to be widely distributed beyond the author's immediate network. LinkedIn's own claim, not independently measured. | Platform statement, 2026 | [LinkedIn](https://news.linkedin.com/2026/keeping-conversations-real-on-linkedin) |
|
|
409
|
+
| HV-21 | A detector vendor classified 4,061 of 5,000 sampled public LinkedIn posts of 100+ words as "Likely AI". A vendor classification, not verified authorship or a platform-wide rate. | Vendor, observational, 2026 | [Originality.ai](https://originality.ai/blog/ai-content-published-linkedin) |
|
|
410
|
+
| HV-22 | The vendor limits that estimate to posts found through its topic-and-date searches. | Vendor, 2026 | [Originality.ai](https://originality.ai/blog/ai-content-published-linkedin) |
|
|
411
|
+
| HV-23 | Wikipedia's editors' guide says its indicators are context-dependent, descriptive and not proof that a text was AI-generated. | Editors' guide, living | [Wikipedia](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) |
|
|
412
|
+
| HV-25 | The same guide lists inflated claims of broad significance, including "evolving landscape", as possible indicators. | Editors' guide, living | [Wikipedia](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) |
|
|
413
|
+
| HC-03 | Across 8,977 historical Upworthy headline experiments, more concreteness raised click-through for too-vague headlines and lowered it for too-concrete ones. Clicks, not reading or trust. | Registered report, 2025 | [Nature](https://www.nature.com/articles/s41598-024-81575-9) |
|
|
414
|
+
| HC-05 | Linguistic features predicted the higher-CTR Upworthy variant 54% of the time across all pairs. | Registered report, 2023 | [PLOS ONE](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0281682) |
|
|
415
|
+
| HC-16 | Hacker News guidelines: "Don't post generated text or AI-edited text. HN is for conversation between humans." The line sits in the comment guidelines. | Platform rule, living | [HN guidelines](https://news.ycombinator.com/newsguidelines.html) |
|
|
416
|
+
| DP-05 | PostHog's voice guidance favors concrete nouns, directness and honesty about limitations over polish. One company's judgment. | Practitioner guide, living | [PostHog handbook](https://posthog.com/handbook/brand/tone) |
|
|
417
|
+
| DA-03 | Dudycz's article on fixing event-sourcing bugs opens with bad data from integrations, users and shipped changes before describing a support incident. | Case example, 2026 | [event-driven.io](https://event-driven.io/en/fixing-bugs-in-event-sourcing-is-hard/) |
|
|
418
|
+
|
|
419
|
+
Platform rules and living guides change. Re-read them before citing them in published work.
|
|
@@ -6,12 +6,24 @@
|
|
|
6
6
|
{ "kind": "skill-contains", "value": "Never trade a claim for a smoother sentence" },
|
|
7
7
|
{ "kind": "skill-contains", "value": "The fix for a template is not a better template" },
|
|
8
8
|
{ "kind": "skill-contains", "value": "every hedging word" },
|
|
9
|
-
{ "kind": "skill-contains", "value": "First person is not a
|
|
9
|
+
{ "kind": "skill-contains", "value": "First person is not a license to invent" },
|
|
10
10
|
{ "kind": "skill-contains", "value": "Structural sameness is the more damaging half" },
|
|
11
11
|
{ "kind": "skill-contains", "value": "Rewrite a tranche, read it, and only then continue" },
|
|
12
12
|
{ "kind": "skill-contains", "value": "Punchline fragment" },
|
|
13
13
|
{ "kind": "skill-contains", "value": "Labeled caveat" },
|
|
14
14
|
{ "kind": "skill-contains", "value": "Hedging that protects the writer" },
|
|
15
|
-
{ "kind": "skill-contains", "value": "A company account is a team talking" }
|
|
15
|
+
{ "kind": "skill-contains", "value": "A company account is a team talking" },
|
|
16
|
+
{ "kind": "skill-contains", "value": "This is an editing aid, not a detector" },
|
|
17
|
+
{ "kind": "skill-contains", "value": "It never means \"AI wrote this\"." },
|
|
18
|
+
{ "kind": "skill-contains", "value": "Never use a flag, a count or a detector score to accuse a person" },
|
|
19
|
+
{ "kind": "skill-contains", "value": "Don't push them toward an arbitrary house style" },
|
|
20
|
+
{ "kind": "skill-contains", "value": "Contractions, \"I\", humor, short sentences and typos prove nothing about who wrote a text" },
|
|
21
|
+
{ "kind": "skill-contains", "value": "Flag concentration in the batch, never one outlier" },
|
|
22
|
+
{ "kind": "skill-contains", "value": "Fix with substance" },
|
|
23
|
+
{ "kind": "skill-contains", "value": "Never fabricate one to make copy read better" },
|
|
24
|
+
{ "kind": "skill-contains", "value": "Copy in the first person needs the named author's own input" },
|
|
25
|
+
{ "kind": "skill-contains", "value": "lacks clear perspective" },
|
|
26
|
+
{ "kind": "skill-contains", "value": "Cratis applies it, as its own stricter policy" },
|
|
27
|
+
{ "kind": "skill-contains", "value": "references/ai-tells.md" }
|
|
16
28
|
]
|
|
17
29
|
}
|