ai-text-check 1.0.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.
Files changed (150) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +36 -0
  3. package/README.md +174 -0
  4. package/SOURCES.md +34 -0
  5. package/dist/cli.js +13834 -0
  6. package/dist/index.cjs +13366 -0
  7. package/dist/index.d.cts +36 -0
  8. package/dist/index.d.ts +36 -0
  9. package/dist/index.js +13351 -0
  10. package/dist/node.cjs +13581 -0
  11. package/dist/node.d.cts +41 -0
  12. package/dist/node.d.ts +41 -0
  13. package/dist/node.js +13564 -0
  14. package/dist/types-BlvvRFG5.d.cts +153 -0
  15. package/dist/types-BlvvRFG5.d.ts +153 -0
  16. package/package.json +115 -0
  17. package/slop-gate.config.json +3 -0
  18. package/vale/styles/AiTextCheck/DiveDeep.yml +5 -0
  19. package/vale/styles/AiTextCheck/Furthermore.yml +5 -0
  20. package/vale/styles/AiTextCheck/ImportantToNote.yml +5 -0
  21. package/vale/styles/AiTextCheck/InTodaysWorld.yml +5 -0
  22. package/vale/styles/AiTextCheck/LeverageUtilize.yml +5 -0
  23. package/vale/styles/AiTextCheck/meta.json +3 -0
  24. package/vale/styles/Google/AMPM.yml +9 -0
  25. package/vale/styles/Google/Acronyms.yml +64 -0
  26. package/vale/styles/Google/Colons.yml +8 -0
  27. package/vale/styles/Google/Contractions.yml +30 -0
  28. package/vale/styles/Google/DateFormat.yml +9 -0
  29. package/vale/styles/Google/Ellipses.yml +9 -0
  30. package/vale/styles/Google/EmDash.yml +12 -0
  31. package/vale/styles/Google/Exclamation.yml +12 -0
  32. package/vale/styles/Google/FirstPerson.yml +13 -0
  33. package/vale/styles/Google/Gender.yml +9 -0
  34. package/vale/styles/Google/GenderBias.yml +43 -0
  35. package/vale/styles/Google/HeadingPunctuation.yml +13 -0
  36. package/vale/styles/Google/Headings.yml +29 -0
  37. package/vale/styles/Google/LICENSE +21 -0
  38. package/vale/styles/Google/Latin.yml +11 -0
  39. package/vale/styles/Google/LyHyphens.yml +14 -0
  40. package/vale/styles/Google/OptionalPlurals.yml +12 -0
  41. package/vale/styles/Google/Ordinal.yml +7 -0
  42. package/vale/styles/Google/OxfordComma.yml +7 -0
  43. package/vale/styles/Google/Parens.yml +7 -0
  44. package/vale/styles/Google/Passive.yml +184 -0
  45. package/vale/styles/Google/Periods.yml +7 -0
  46. package/vale/styles/Google/Quotes.yml +7 -0
  47. package/vale/styles/Google/Ranges.yml +7 -0
  48. package/vale/styles/Google/Semicolons.yml +8 -0
  49. package/vale/styles/Google/Slang.yml +11 -0
  50. package/vale/styles/Google/Spacing.yml +10 -0
  51. package/vale/styles/Google/Spelling.yml +10 -0
  52. package/vale/styles/Google/Units.yml +8 -0
  53. package/vale/styles/Google/We.yml +11 -0
  54. package/vale/styles/Google/Will.yml +7 -0
  55. package/vale/styles/Google/WordList.yml +80 -0
  56. package/vale/styles/Google/meta.json +4 -0
  57. package/vale/styles/Google/vocab.txt +0 -0
  58. package/vale/styles/ai-tells/AIAdjectiveNounPairs.yml +8 -0
  59. package/vale/styles/ai-tells/AICompoundPhrases.yml +139 -0
  60. package/vale/styles/ai-tells/AbsoluteAssertions.yml +21 -0
  61. package/vale/styles/ai-tells/AffirmativeFormulas.yml +101 -0
  62. package/vale/styles/ai-tells/AnnouncementHeadings.yml +16 -0
  63. package/vale/styles/ai-tells/AnthropomorphicJustification.yml +115 -0
  64. package/vale/styles/ai-tells/ClosingPleasantries.yml +120 -0
  65. package/vale/styles/ai-tells/ColloquialAssessments.yml +47 -0
  66. package/vale/styles/ai-tells/ColonUsage.yml +18 -0
  67. package/vale/styles/ai-tells/ConclusionMarkers.yml +23 -0
  68. package/vale/styles/ai-tells/ContrastiveFormulas.yml +188 -0
  69. package/vale/styles/ai-tells/ContrastiveNegation.yml +22 -0
  70. package/vale/styles/ai-tells/DefensiveHedges.yml +63 -0
  71. package/vale/styles/ai-tells/DespiteChallenges.yml +32 -0
  72. package/vale/styles/ai-tells/EmDashUsage.yml +9 -0
  73. package/vale/styles/ai-tells/EmphaticCopula.yml +30 -0
  74. package/vale/styles/ai-tells/EmptyPadding.yml +10 -0
  75. package/vale/styles/ai-tells/EmptyPaddingStacked.yml +11 -0
  76. package/vale/styles/ai-tells/ExplainerHeadings.yml +20 -0
  77. package/vale/styles/ai-tells/FalseBalance.yml +31 -0
  78. package/vale/styles/ai-tells/FalseExclusivity.yml +41 -0
  79. package/vale/styles/ai-tells/FigurativeLands.yml +79 -0
  80. package/vale/styles/ai-tells/FillerPhrases.yml +78 -0
  81. package/vale/styles/ai-tells/FormalRegister.yml +58 -0
  82. package/vale/styles/ai-tells/FormalTransitions.yml +74 -0
  83. package/vale/styles/ai-tells/GrowthMetaphors.yml +28 -0
  84. package/vale/styles/ai-tells/HedgingPhrases.yml +85 -0
  85. package/vale/styles/ai-tells/LICENSE +21 -0
  86. package/vale/styles/ai-tells/ListIntroductions.yml +22 -0
  87. package/vale/styles/ai-tells/MarketingHeadings.yml +19 -0
  88. package/vale/styles/ai-tells/Metacommentary.yml +113 -0
  89. package/vale/styles/ai-tells/MicDrop.yml +205 -0
  90. package/vale/styles/ai-tells/MicDropHeadings.yml +20 -0
  91. package/vale/styles/ai-tells/NarrativePivots.yml +59 -0
  92. package/vale/styles/ai-tells/OpeningCliches.yml +98 -0
  93. package/vale/styles/ai-tells/OrganicConsequence.yml +38 -0
  94. package/vale/styles/ai-tells/OverusedVocabulary.yml +185 -0
  95. package/vale/styles/ai-tells/OverusedVocabularyVerbs.yml +7 -0
  96. package/vale/styles/ai-tells/ParallelStaccato.yml +34 -0
  97. package/vale/styles/ai-tells/ParticipialPadding.yml +74 -0
  98. package/vale/styles/ai-tells/PromotionalPuffery.yml +63 -0
  99. package/vale/styles/ai-tells/RedundantPrecaution.yml +8 -0
  100. package/vale/styles/ai-tells/ResonateOveruse.yml +13 -0
  101. package/vale/styles/ai-tells/RestatementMarkers.yml +36 -0
  102. package/vale/styles/ai-tells/RhetoricalDevices.yml +53 -0
  103. package/vale/styles/ai-tells/RhetoricalSelfAnswer.yml +51 -0
  104. package/vale/styles/ai-tells/SelfReference.yml +52 -0
  105. package/vale/styles/ai-tells/SemicolonUsage.yml +31 -0
  106. package/vale/styles/ai-tells/SequencingMarkers.yml +41 -0
  107. package/vale/styles/ai-tells/ServesAsDodge.yml +66 -0
  108. package/vale/styles/ai-tells/ShipOveruse.yml +16 -0
  109. package/vale/styles/ai-tells/StackedAnaphora.yml +185 -0
  110. package/vale/styles/ai-tells/StrategyBuzzwords.yml +32 -0
  111. package/vale/styles/ai-tells/StructureAnnouncements.yml +22 -0
  112. package/vale/styles/ai-tells/SycophancyMarkers.yml +26 -0
  113. package/vale/styles/ai-tells/UnpackExplore.yml +21 -0
  114. package/vale/styles/ai-tells/UrgencyInflation.yml +70 -0
  115. package/vale/styles/ai-tells/VagueAttributions.yml +67 -0
  116. package/vale/styles/ai-tells/VerbTricolon.yml +78 -0
  117. package/vale/styles/ai-tells/VerbTricolonDensity.yml +7 -0
  118. package/vale/styles/ai-tells/WrapUpHeadings.yml +22 -0
  119. package/vale/styles/signs-of-ai-writing/AspectOveruse.yml +13 -0
  120. package/vale/styles/signs-of-ai-writing/ChatGPTArtifacts.yml +12 -0
  121. package/vale/styles/signs-of-ai-writing/ChatbotCommunication.yml +21 -0
  122. package/vale/styles/signs-of-ai-writing/CitationArtifacts.yml +10 -0
  123. package/vale/styles/signs-of-ai-writing/ColonOveruse.yml +11 -0
  124. package/vale/styles/signs-of-ai-writing/Enumeration.yml +11 -0
  125. package/vale/styles/signs-of-ai-writing/Hedging.yml +6 -0
  126. package/vale/styles/signs-of-ai-writing/Intensifiers.yml +17 -0
  127. package/vale/styles/signs-of-ai-writing/KnowledgeCutoff.yml +14 -0
  128. package/vale/styles/signs-of-ai-writing/LICENSE +12 -0
  129. package/vale/styles/signs-of-ai-writing/Lists.yml +8 -0
  130. package/vale/styles/signs-of-ai-writing/Narrative.yml +15 -0
  131. package/vale/styles/signs-of-ai-writing/Passive.yml +16 -0
  132. package/vale/styles/signs-of-ai-writing/Placeholders.yml +17 -0
  133. package/vale/styles/signs-of-ai-writing/ScareQuotes.yml +6 -0
  134. package/vale/styles/signs-of-ai-writing/Symbolism.yml +23 -0
  135. package/vale/styles/signs-of-ai-writing/Transitions.yml +17 -0
  136. package/vale/styles/signs-of-ai-writing/UTMParameters.yml +10 -0
  137. package/vale/styles/signs-of-ai-writing/Vocabulary.yml +27 -0
  138. package/vale/styles/signs-of-ai-writing/meta.json +4 -0
  139. package/vale/styles/write-good/Cliches.yml +702 -0
  140. package/vale/styles/write-good/E-Prime.yml +32 -0
  141. package/vale/styles/write-good/Illusions.yml +11 -0
  142. package/vale/styles/write-good/LICENSE +21 -0
  143. package/vale/styles/write-good/Passive.yml +183 -0
  144. package/vale/styles/write-good/README.md +27 -0
  145. package/vale/styles/write-good/So.yml +5 -0
  146. package/vale/styles/write-good/ThereIs.yml +6 -0
  147. package/vale/styles/write-good/TooWordy.yml +221 -0
  148. package/vale/styles/write-good/Weasel.yml +29 -0
  149. package/vale/styles/write-good/meta.json +4 -0
  150. package/vale/vale.ini +38 -0
@@ -0,0 +1,52 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI cross-reference: '%s'. Rewrite the passage to work without the cross-reference."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - as mentioned above
8
+ - as mentioned earlier
9
+ - as mentioned before
10
+ - as noted above
11
+ - as noted earlier
12
+ - as noted before
13
+ - as discussed above
14
+ - as discussed earlier
15
+ - as discussed before
16
+ - as stated above
17
+ - as stated earlier
18
+ - as stated before
19
+ - as outlined above
20
+ - as outlined earlier
21
+ - as described above
22
+ - as described earlier
23
+ - as referenced above
24
+ - as referenced earlier
25
+ - as we saw
26
+ - as we saw above
27
+ - as we saw earlier
28
+ - as we'll see
29
+ - as we'll explore
30
+ - as we'll discuss
31
+ - as we discussed
32
+ - as we explored
33
+ - as we covered
34
+ - as covered above
35
+ - as covered earlier
36
+ - as shown above
37
+ - as shown earlier
38
+ - as explained above
39
+ - as explained earlier
40
+ - as we noted
41
+ - recall that
42
+ - remember that
43
+ - as previously mentioned
44
+ - as previously noted
45
+ - as previously discussed
46
+ - as previously stated
47
+ - as previously described
48
+ - as I mentioned
49
+ - as I noted
50
+ - as I discussed
51
+ - as I said
52
+ - as I explained
@@ -0,0 +1,31 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI punctuation: '%s'. Replace the semicolon with a period or two sentences."
4
+ level: error
5
+ nonword: true
6
+ # Semicolons are an em-dash workaround: once the em-dash gets flagged, the agent
7
+ # swaps in a semicolon to tack a punchy clause onto a sentence. Per Google's
8
+ # guidance the legitimate uses nearly always carry a comma (a series of items
9
+ # with their own punctuation, a "; however," join, a complex clause), so the
10
+ # token flags only a comma-free clause-final continuation and exempts the
11
+ # conjunctive adverbs that join clauses without one. Google.Semicolons still
12
+ # warns on the rest.
13
+ exceptions:
14
+ - "(?i)however"
15
+ - "(?i)therefore"
16
+ - "(?i)thus"
17
+ - "(?i)hence"
18
+ - "(?i)moreover"
19
+ - "(?i)furthermore"
20
+ - "(?i)consequently"
21
+ - "(?i)nevertheless"
22
+ - "(?i)nonetheless"
23
+ - "(?i)otherwise"
24
+ - "(?i)meanwhile"
25
+ - "(?i)accordingly"
26
+ - "(?i)besides"
27
+ - "(?i)indeed"
28
+ - "(?i)namely"
29
+ - "(?i)instead"
30
+ tokens:
31
+ - "; [^,;\\n]*[.!?]"
@@ -0,0 +1,41 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI sequencing: '%s'. Use natural transitions or write an actual list."
4
+ level: error
5
+ tokens:
6
+ - Firstly
7
+ - Secondly
8
+ - Thirdly
9
+ - Fourthly
10
+ - Fifthly
11
+ - Lastly
12
+ - The first takeaway
13
+ - The second takeaway
14
+ - The third takeaway
15
+ - The fourth takeaway
16
+ - The first lesson
17
+ - The second lesson
18
+ - The third lesson
19
+ - The first key
20
+ - The second key
21
+ - The third key
22
+ - The first thing to note
23
+ - The second thing to note
24
+ - The first point
25
+ - The second point
26
+ - The third point
27
+ - The first reason
28
+ - The second reason
29
+ - The third reason
30
+ - The first challenge
31
+ - The second challenge
32
+ - The third challenge
33
+ - The first step is
34
+ - The second step is
35
+ - The third step is
36
+ - The first benefit
37
+ - The second benefit
38
+ - The third benefit
39
+ - The first advantage
40
+ - The second advantage
41
+ - The third advantage
@@ -0,0 +1,66 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI copula dodge: '%s'. Use 'is' or 'are' instead of this inflated construction."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - serves as a
8
+ - serves as an
9
+ - serves as the
10
+ - served as a
11
+ - served as an
12
+ - served as the
13
+ - serving as a
14
+ - serving as an
15
+ - serving as the
16
+ - stands as a
17
+ - stands as an
18
+ - stands as the
19
+ - stood as a
20
+ - stood as an
21
+ - stood as the
22
+ - standing as a
23
+ - standing as an
24
+ - standing as the
25
+ - marks a pivotal
26
+ - marks a significant
27
+ - marks a crucial
28
+ - marks a key
29
+ - marks a turning
30
+ - marks a critical
31
+ - marks a major
32
+ - marks a defining
33
+ - marks a new
34
+ - represents a significant
35
+ - represents a pivotal
36
+ - represents a crucial
37
+ - represents a key
38
+ - represents a major
39
+ - represents a fundamental
40
+ - represents a paradigm
41
+ - boasts a vibrant
42
+ - boasts a rich
43
+ - boasts a diverse
44
+ - boasts a wide
45
+ - boasts a unique
46
+ - boasts a thriving
47
+ - boasts an impressive
48
+ - features a wide
49
+ - features a rich
50
+ - features a diverse
51
+ - features a unique
52
+ - features a vibrant
53
+ - offers a unique
54
+ - offers a wide
55
+ - offers a comprehensive
56
+ - offers a diverse
57
+
58
+ # === Colon-cheat: copula-replacement remediation ===
59
+ # AI evades weak-verb / passive-voice lints by replacing "is" or
60
+ # "are" with a colon — same appositive shape, no verb.
61
+ # "The candidate mechanism is a hook." -->
62
+ # "The candidate mechanism: a hook on Bash that..."
63
+ # Triggered by a 4+ word definite-NP subject, indefinite article
64
+ # after the colon, and 6+ token descriptive content (filters
65
+ # short pedagogical "X is: Y" answers).
66
+ - "The [^,.:!?\\s]+(?: [^,.:!?\\s]+){2,}: an? [^,.:!?\\s]+(?: [^,.:!?\\s]+){4,}"
@@ -0,0 +1,16 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI overused word: '%s'. Name the specific action or object. Disable this rule for maritime or logistics writing."
4
+ level: error
5
+ nonword: true
6
+ ignorecase: true
7
+ # "Ship" is an AI and startup overuse fingerprint. It covers the release verb
8
+ # ("ship it," "ship fast," "ship the feature") and the maritime clichés ("run a
9
+ # tight ship," "the ship has sailed"). The match stays deliberately broad and
10
+ # carries no exemptions: the logistics verb ("ship the order") and the vessel
11
+ # noun ("a cargo ship") look identical to a regex, so a writer in those domains
12
+ # turns the whole rule off rather than chase a carve-out list. Word boundaries
13
+ # keep the -ship suffixes (relationship, leadership) and the compounds
14
+ # (spaceship, flagship, worship, shipment) clean.
15
+ tokens:
16
+ - "\\bship(?:s|ped|ping)?\\b"
@@ -0,0 +1,185 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI anaphora: '%s'. Vary the sentence openings or combine into a single statement."
4
+ level: error
5
+ nonword: true
6
+ tokens:
7
+ # "No X. No Y. No Z." pattern (3+ consecutive)
8
+ - "No [^.]+\\. No [^.]+\\. No [^.]+"
9
+
10
+ # "No X. No Y." pattern (2 consecutive)
11
+ - "No \\w[^.]+\\. No \\w[^.]+"
12
+
13
+ # "No X, no Y, no Z." pattern (3+ comma-separated)
14
+ - "No [^,]+, no [^,]+, no [^.!?]+"
15
+
16
+ # "No X, no Y." pattern (2 comma-separated)
17
+ - "No [^,]+, no [^.!?]+"
18
+
19
+ # "Not X. Not Y. Not Z." pattern
20
+ - "Not [^.]+\\. Not [^.]+\\. Not [^.]+"
21
+
22
+ # "Not X. Not Y." pattern (2 consecutive)
23
+ - "Not \\w[^.]+\\. Not \\w[^.]+"
24
+
25
+ # "No more X. No more Y. No more Z." pattern
26
+ - "No more [^.]+\\. No more [^.]+\\. No more [^.]+"
27
+
28
+ # "No more X. No more Y." pattern (2 consecutive)
29
+ - "No more \\w[^.]+\\. No more \\w[^.]+"
30
+
31
+ # "It's X. It's Y. It's Z." pattern
32
+ - "[Ii]t'?s [^.]+\\. [Ii]t'?s [^.]+\\. [Ii]t'?s [^.]+"
33
+
34
+ # "This is X. This is Y. This is Z." pattern
35
+ - "[Tt]his is [^.]+\\. [Tt]his is [^.]+\\. [Tt]his is [^.]+"
36
+
37
+ # Three consecutive rhetorical questions
38
+ - "(?:What|Why|How|Where|When|Who|Which|Is|Are|Can|Could|Should|Would|Do|Does) [^?]+\\? (?:What|Why|How|Where|When|Who|Which|Is|Are|Can|Could|Should|Would|Do|Does) [^?]+\\? (?:What|Why|How|Where|When|Who|Which|Is|Are|Can|Could|Should|Would|Do|Does) [^?]+\\?"
39
+
40
+ # "X works because Y. Z works because W." parallel justifications
41
+ - "[A-Z][^.]+works because [^.]+\\. [A-Z][^.]+works because [^.]+\\. [A-Z][^.]+works because [^.]+"
42
+
43
+ # "One X. One Y. One Z." pattern (3+ consecutive)
44
+ - "One [^.]+\\. One [^.]+\\. One [^.]+"
45
+
46
+ # "One X, one Y, one Z." pattern (3+ comma-separated)
47
+ - "One [^,]+, one [^,]+, one [^.!?]+"
48
+
49
+ # "One X, one Y." pattern (2 comma-separated)
50
+ - "One [^,]+, one [^.!?]+"
51
+
52
+ # "Every X. Every Y. Every Z." pattern (3+ consecutive)
53
+ - "Every [^.]+\\. Every [^.]+\\. Every [^.]+"
54
+
55
+ # "Every X, every Y, every Z." pattern (3+ comma-separated)
56
+ - "Every [^,]+, every [^,]+, every [^.!?]+"
57
+
58
+ # "Every X, every Y." pattern (2 comma-separated)
59
+ - "Every [^,]+, every [^.!?]+"
60
+
61
+ # "Each X. Each Y. Each Z." pattern (3+ consecutive)
62
+ - "Each [^.]+\\. Each [^.]+\\. Each [^.]+"
63
+
64
+ # "Each X, each Y, each Z." pattern (3+ comma-separated)
65
+ - "Each [^,]+, each [^,]+, each [^.!?]+"
66
+
67
+ # "Each X, each Y." pattern (2 comma-separated)
68
+ - "Each [^,]+, each [^.!?]+"
69
+
70
+ # "Zero X. Zero Y. Zero Z." pattern (3+ consecutive)
71
+ - "Zero [^.]+\\. Zero [^.]+\\. Zero [^.]+"
72
+
73
+ # "Zero X, zero Y, zero Z." pattern (3+ comma-separated)
74
+ - "Zero [^,]+, zero [^,]+, zero [^.!?]+"
75
+
76
+ # "Zero X, zero Y." pattern (2 comma-separated)
77
+ - "Zero [^,]+, zero [^.!?]+"
78
+
79
+ # "A single X. A single Y." pattern (2+ consecutive)
80
+ - "A single [^.]+\\. A single [^.]+"
81
+
82
+ # "A single X, a single Y." pattern (2+ comma-separated)
83
+ - "A single [^,]+, a single [^.!?]+"
84
+
85
+ # "Many X. Many Y." pattern (2+ consecutive)
86
+ - "Many [^.]+\\. Many [^.]+\\."
87
+
88
+ # "Few X. Few Y." pattern (2+ consecutive)
89
+ - "Few [^.]+\\. Few [^.]+\\."
90
+
91
+ # "All X. All Y. All Z." pattern (3+ consecutive)
92
+ - "All [^.]+\\. All [^.]+\\. All [^.]+"
93
+
94
+ # Three prepositional phrase chains: "with X, through Y, and for Z" style
95
+ - "(?:with|through|by|for|via|within) [^,]+, (?:with|through|by|for|via|within) [^,]+, (?:and )?(?:with|through|by|for|via|within) [^.!?]+"
96
+
97
+ # === Adverb anaphora ===
98
+
99
+ # "Always X. Always Y." pattern (2+ consecutive)
100
+ - "Always [^.]+\\. Always [^.]+\\."
101
+
102
+ # "always X, always Y." pattern (2+ comma-separated)
103
+ - "[Aa]lways [^,]+, always [^.!?]+"
104
+
105
+ # "Never X. Never Y." pattern (2+ consecutive)
106
+ - "Never [^.]+\\. Never [^.]+\\."
107
+
108
+ # "never X, never Y." pattern (2+ comma-separated)
109
+ - "[Nn]ever [^,]+, never [^.!?]+"
110
+
111
+ # "Fully X. Fully Y." pattern (2+ consecutive)
112
+ - "Fully [^.]+\\. Fully [^.]+\\."
113
+
114
+ # "fully X, fully Y." pattern (2+ comma-separated)
115
+ - "[Ff]ully [^,]+, fully [^.!?]+"
116
+
117
+ # "Completely X. Completely Y." pattern (2+ consecutive)
118
+ - "Completely [^.]+\\. Completely [^.]+\\."
119
+
120
+ # "completely X, completely Y." pattern (2+ comma-separated)
121
+ - "[Cc]ompletely [^,]+, completely [^.!?]+"
122
+
123
+ # "Entirely X. Entirely Y." pattern (2+ consecutive)
124
+ - "Entirely [^.]+\\. Entirely [^.]+\\."
125
+
126
+ # "entirely X, entirely Y." pattern (2+ comma-separated)
127
+ - "[Ee]ntirely [^,]+, entirely [^.!?]+"
128
+
129
+ # "Truly X. Truly Y." pattern (2+ consecutive)
130
+ - "Truly [^.]+\\. Truly [^.]+\\."
131
+
132
+ # "truly X, truly Y." pattern (2+ comma-separated)
133
+ - "[Tt]ruly [^,]+, truly [^.!?]+"
134
+
135
+ # "Purely X. Purely Y." pattern (2+ consecutive)
136
+ - "Purely [^.]+\\. Purely [^.]+\\."
137
+
138
+ # "purely X, purely Y." pattern (2+ comma-separated)
139
+ - "[Pp]urely [^,]+, purely [^.!?]+"
140
+
141
+ # "Only X. Only Y." pattern (2+ consecutive)
142
+ - "Only [^.]+\\. Only [^.]+\\."
143
+
144
+ # "only X, only Y." pattern (2+ comma-separated)
145
+ - "[Oo]nly [^,]+, only [^.!?]+"
146
+
147
+ # "Just X. Just Y." pattern (2+ consecutive)
148
+ - "Just [^.]+\\. Just [^.]+\\."
149
+
150
+ # "just X, just Y." pattern (2+ comma-separated)
151
+ - "[Jj]ust [^,]+, just [^.!?]+"
152
+
153
+ # === Indefinite-article exemplification stack ===
154
+ # AI loves stacking hypothetical scenarios as parallel sentences:
155
+ # "A hook wants to count failures. A subagent wants to record a
156
+ # result. A skill wants to stash a value." The shape — A/An +
157
+ # noun (1-3 words) + present-tense verb — paired across 3
158
+ # sentences is distinctive enough to flag even when verbs differ.
159
+ - "(?:A|An) \\w+(?: \\w+){0,2} \\w+s [^.]+\\. (?:A|An) \\w+(?: \\w+){0,2} \\w+s [^.]+\\. (?:A|An) \\w+(?: \\w+){0,2} \\w+s [^.!?]+"
160
+
161
+ # 2-sentence parallel-mirror pair: "An unset X counts as Y.
162
+ # A set-but-wrong value belongs to Z." Same A/An + NP + verb-s
163
+ # shape but paired instead of tripled. Common in technical prose
164
+ # written by humans too, but the dramatic shared-verb framing
165
+ # reads as an AI tell in practice.
166
+ - "(?:A|An) \\w+(?: \\w+){0,2} \\w+s [^.]+\\. (?:A|An) \\w+(?: \\w+){0,2} \\w+s [^.!?]+"
167
+
168
+ # === Definite-article noun-list fragment ===
169
+ # "The X, the Y, the Z." — three or more comma-separated
170
+ # definite noun phrases as a verbless sentence. AI uses this
171
+ # as a faux-summary closer. Subjects are up to 5 words to
172
+ # tolerate parenthetical glosses like "Time-To-Live (TTL)".
173
+ # Sentence-initial capital "The" reduces mid-sentence
174
+ # false positives.
175
+ - "The [\\w-]+(?: [\\w-]+){0,4}(?:, the [\\w-]+(?: [\\w-]+){0,4}){2,}\\."
176
+
177
+ # === "Whether X, or whether Y." subordinate-clause fragment ===
178
+ # AI promotes a "whether... or whether..." subordinate-clause
179
+ # pair to a standalone sentence with no main clause. The
180
+ # paired "whether" markers carry the rhetorical weight a real
181
+ # verb would carry.
182
+ - "Whether [^.]+, or whether [^.!?]+\\."
183
+
184
+ # Two consecutive "Whether X." sentences — same shape, paired.
185
+ - "Whether [^.]+\\. Whether [^.]+\\."
@@ -0,0 +1,32 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI strategy buzzword: '%s'. Describe the actual mechanism or advantage plainly."
4
+ level: error
5
+ nonword: true
6
+ ignorecase: true
7
+ # Strategy-deck buzzword metaphors: the flywheel, the moat, the north star. Each
8
+ # term is scoped to its figurative shape so the literal homograph stays clean
9
+ # without a domain toggle (the engine's flywheel, a castle's moat, the actual
10
+ # North Star). Network effects and first-mover advantage are the most legitimate
11
+ # as analytical terms; they are here because the deck-speak form is overused, but
12
+ # they are the first to drop if they fire on genuine analysis.
13
+ tokens:
14
+ # flywheel (self-reinforcing loop), not the mechanical part
15
+ - "\\bflywheel effect\\b"
16
+ - "\\b(?:growth|data|content|engagement|customer|revenue|sales|marketing|business|virtuous|self-?reinforcing) flywheels?\\b"
17
+ - "\\b(?:build|building|built|create|creates|created|creating|spin|spins|spinning|start|starts|started|starting) (?:a |the |our |its |their )?flywheels?\\b"
18
+ # moat (competitive advantage), not the castle
19
+ - "\\b(?:competitive|economic|defensible|durable|structural|wide|deep|business|data|regulatory|technological|distribution) moats?\\b"
20
+ - "\\b(?:build|building|built|widen|widens|widening|widened|deepen|deepens|deepening|deepened|create|creates|created|creating) (?:a |the |our |its |their |wider |deeper )?moats?\\b"
21
+ - "\\bmoats? (?:around|against)\\b"
22
+ # north star (guiding metric), not Polaris
23
+ - "\\bnorth[- ]star metric\\b"
24
+ - "\\bnorth-star\\b"
25
+ - "\\b(?:our|your|their|its) north star\\b"
26
+ # network effects (econ deck-speak)
27
+ - "\\bnetwork effects?\\b"
28
+ # first-mover advantage (cliche form, not bare "first mover")
29
+ - "\\bfirst[- ]mover advantage\\b"
30
+ # land grab (figurative), not the historical kind
31
+ - "\\b(?:market|customer|data|talent|competitive|global|massive|enterprise) land[- ]grab\\b"
32
+ - "\\bland[- ]grab for\\b"
@@ -0,0 +1,22 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI structure announcement: '%s'. Present the content instead of narrating that you're about to."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - key takeaway
8
+ - key takeaways
9
+ - the takeaway is
10
+ - the takeaway here is
11
+ - main takeaway
12
+ - main takeaways
13
+ - quick recap
14
+ - a quick recap
15
+ - to recap
16
+ - to recap briefly
17
+ - quick summary
18
+ - a quick summary
19
+ - quick overview
20
+ - a quick overview
21
+ - to put it plainly
22
+ - to put this in perspective
@@ -0,0 +1,26 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI sycophancy: '%s'. Delete this. It sounds robotic and insincere."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - Great question
8
+ - Excellent question
9
+ - That's a great question
10
+ - That's an excellent question
11
+ - What a great question
12
+ - Fantastic question
13
+ - Wonderful question
14
+ - I'm glad you asked
15
+ - I'm happy to help
16
+ - I'd be happy to help
17
+ - I'd be glad to help
18
+ - Absolutely
19
+ - Certainly
20
+ - Of course
21
+ - Without a doubt
22
+ - You're absolutely right
23
+ - You make an excellent point
24
+ - That's a wonderful idea
25
+ - That's a fantastic point
26
+ - I couldn't agree more
@@ -0,0 +1,21 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI explainer prompt: '%s'. Explain it directly instead of announcing it."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - Let's unpack
8
+ - Let me unpack
9
+ - Let's break this down
10
+ - Let me break this down
11
+ - Let's take a closer look at
12
+ - Let me take a closer look at
13
+ - Let's dive into
14
+ - Let me dive into
15
+ - Let's walk through
16
+ - Let me walk through
17
+ - Let's dig into
18
+ - Let me dig into
19
+ - Let's examine
20
+ - Let me examine
21
+ - Let's explore
@@ -0,0 +1,70 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI urgency: '%s'. Delete it or show the stakes concretely."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ # "Cannot be overstated" variants
8
+ - cannot be overstated
9
+ - can't be overstated
10
+ - cannot be understated
11
+ - can't be understated
12
+ - cannot be emphasized enough
13
+ - can't be emphasized enough
14
+
15
+ # "More important/critical/relevant than ever" variants
16
+ - more important than ever
17
+ - more critical than ever
18
+ - more relevant than ever
19
+ - more urgent than ever
20
+ - more necessary than ever
21
+ - more essential than ever
22
+ - more vital than ever
23
+ - more pressing than ever
24
+ - more significant than ever
25
+
26
+ # "Has never been more X" variants
27
+ - has never been more important
28
+ - has never been more critical
29
+ - has never been more urgent
30
+ - has never been more relevant
31
+ - has never been more necessary
32
+ - has never been more essential
33
+ - has never been more vital
34
+ - has never been more pressing
35
+ - has never been more significant
36
+ - have never been more important
37
+ - have never been more critical
38
+ - have never been more urgent
39
+ - have never been more relevant
40
+
41
+ # "The stakes have never been higher" variants
42
+ - the stakes have never been higher
43
+ - the stakes are higher than ever
44
+ - the stakes couldn't be higher
45
+ - the stakes are enormous
46
+ - the stakes are immense
47
+
48
+ # "At a crossroads" variants
49
+ - at a crossroads
50
+ - at an inflection point
51
+ - at a pivotal moment
52
+ - at a critical juncture
53
+ - at a defining moment
54
+ - at a turning point in history
55
+ - at a critical moment in history
56
+ - at a pivotal moment in history
57
+
58
+ # "Increasingly [adjective] world" variants
59
+ - in an increasingly complex world
60
+ - in an increasingly digital world
61
+ - in an increasingly connected world
62
+ - in an increasingly competitive world
63
+ - in an increasingly polarized world
64
+ - in an increasingly uncertain world
65
+ - in an increasingly fast-paced world
66
+ - in an increasingly globalized world
67
+ - in an increasingly data-driven world
68
+ - in an increasingly automated world
69
+ - in an ever more complex world
70
+ - in an ever more connected world
@@ -0,0 +1,67 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI vague attribution: '%s'. Name the specific source or delete the claim."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - experts argue
8
+ - experts suggest
9
+ - experts believe
10
+ - experts say
11
+ - experts agree
12
+ - experts warn
13
+ - experts note
14
+ - experts predict
15
+ - experts contend
16
+ - experts recommend
17
+ - experts have noted
18
+ - experts have argued
19
+ - experts have suggested
20
+ - experts have warned
21
+ - industry reports suggest
22
+ - industry reports indicate
23
+ - industry reports show
24
+ - industry experts
25
+ - industry observers
26
+ - industry analysts
27
+ - observers have cited
28
+ - observers have noted
29
+ - observers note
30
+ - critics argue
31
+ - critics suggest
32
+ - critics contend
33
+ - critics have noted
34
+ - critics have argued
35
+ - some critics argue
36
+ - some experts argue
37
+ - some experts suggest
38
+ - some experts believe
39
+ - some analysts
40
+ - some observers
41
+ - some researchers
42
+ - many experts
43
+ - many analysts
44
+ - many observers
45
+ - many researchers
46
+ - studies show that
47
+ - studies suggest that
48
+ - studies indicate that
49
+ - studies have shown that
50
+ - studies have found that
51
+ - research shows that
52
+ - research suggests that
53
+ - research indicates that
54
+ - research has shown that
55
+ - research has found that
56
+ - several studies
57
+ - several experts
58
+ - several analysts
59
+ - several observers
60
+ - numerous studies
61
+ - numerous experts
62
+ - a growing body of research
63
+ - a growing body of evidence
64
+ - a growing number of experts
65
+ - the evidence suggests
66
+ - the data suggests
67
+ - the research suggests