@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.
@@ -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 licence to invent" },
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
  }
@@ -563,6 +563,8 @@
563
563
  {
564
564
  "id": "cratis/content",
565
565
  "availableTargets": [
566
+ "cratis-content-length",
567
+ "cratis-developer-marketing",
566
568
  "cratis-release-notes",
567
569
  "cratis-social-feed-post",
568
570
  "cratis-technical-examples",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/pi",
3
- "version": "6.3.2",
3
+ "version": "6.5.0",
4
4
  "description": "Configuration-aware Cratis AI integration for Pi",
5
5
  "type": "module",
6
6
  "files": [