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,188 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI contrast: '%s'. State the positive claim directly without the 'not X, but Y' formula."
4
+ level: error
5
+ tokens:
6
+ # "It's not just X; it's Y" patterns
7
+ - "[Ii]t'?s not just [^;,—:]+[;,—:] it'?s [^.!?]+"
8
+ - "[Ii]t isn'?t just [^;,—:]+[;,—:] it'?s [^.!?]+"
9
+ - "[Ii]t'?s not merely [^;,—:]+[;,—:] it'?s [^.!?]+"
10
+ - "[Ii]t'?s not simply [^;,—:]+[;,—:] it'?s [^.!?]+"
11
+ - "[Ii]t'?s not only [^;,—:]+[;,—:] it'?s [^.!?]+"
12
+ - "[Ii]t'?s not purely [^;,—:]+[;,—:] it'?s [^.!?]+"
13
+ - "[Ii]t'?s not solely [^;,—:]+[;,—:] it'?s [^.!?]+"
14
+ - "[Ii]t'?s not entirely [^;,—:]+[;,—:] it'?s [^.!?]+"
15
+
16
+ # "It's not about X; it's about Y" patterns
17
+ - "[Ii]t'?s not about [^;,—:]+[;,—:] it'?s about [^.!?]+"
18
+ - "[Ii]t isn'?t about [^;,—:]+[;,—:] it'?s about [^.!?]+"
19
+ - "[Ii]t'?s not really about [^;,—:]+[;,—:] it'?s about [^.!?]+"
20
+ - "[Ii]t'?s not just about [^;,—:]+[;,—:] it'?s about [^.!?]+"
21
+ - "[Ii]t'?s not merely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
22
+ - "[Ii]t'?s not simply about [^;,—:]+[;,—:] it'?s about [^.!?]+"
23
+ - "[Ii]t'?s not only about [^;,—:]+[;,—:] it'?s about [^.!?]+"
24
+ - "[Ii]t'?s not purely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
25
+ - "[Ii]t'?s not solely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
26
+ - "[Ii]t'?s not entirely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
27
+ # Period-separated versions (two sentences)
28
+ - "[Ii]t'?s not about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
29
+ - "[Ii]t isn'?t about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
30
+ - "[Ii]t'?s not really about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
31
+ - "[Ii]t'?s not just about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
32
+ - "[Ii]t'?s not merely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
33
+ - "[Ii]t'?s not purely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
34
+ - "[Ii]t'?s not solely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
35
+ - "[Ii]t'?s not entirely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
36
+
37
+ # "This isn't X; it's Y" patterns
38
+ - "[Tt]his isn'?t just [^;,—:]+[;,—:] it'?s [^.!?]+"
39
+ - "[Tt]his isn'?t merely [^;,—:]+[;,—:] it'?s [^.!?]+"
40
+ - "[Tt]his isn'?t simply [^;,—:]+[;,—:] it'?s [^.!?]+"
41
+ - "[Tt]his isn'?t only [^;,—:]+[;,—:] it'?s [^.!?]+"
42
+ - "[Tt]his isn'?t purely [^;,—:]+[;,—:] it'?s [^.!?]+"
43
+ - "[Tt]his isn'?t solely [^;,—:]+[;,—:] it'?s [^.!?]+"
44
+ - "[Tt]his isn'?t entirely [^;,—:]+[;,—:] it'?s [^.!?]+"
45
+ - "[Tt]his is not just [^;,—:]+[;,—:] it'?s [^.!?]+"
46
+ - "[Tt]his is not merely [^;,—:]+[;,—:] it'?s [^.!?]+"
47
+ - "[Tt]his is not simply [^;,—:]+[;,—:] it'?s [^.!?]+"
48
+ - "[Tt]his is not only [^;,—:]+[;,—:] it'?s [^.!?]+"
49
+ - "[Tt]his is not purely [^;,—:]+[;,—:] it'?s [^.!?]+"
50
+ - "[Tt]his is not solely [^;,—:]+[;,—:] it'?s [^.!?]+"
51
+ - "[Tt]his is not entirely [^;,—:]+[;,—:] it'?s [^.!?]+"
52
+ - "[Tt]his isn'?t merely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
53
+ - "[Tt]his isn'?t just about [^;,—:]+[;,—:] it'?s about [^.!?]+"
54
+ - "[Tt]his isn'?t simply about [^;,—:]+[;,—:] it'?s about [^.!?]+"
55
+ - "[Tt]his isn'?t only about [^;,—:]+[;,—:] it'?s about [^.!?]+"
56
+ - "[Tt]his isn'?t purely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
57
+ - "[Tt]his isn'?t solely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
58
+ - "[Tt]his isn'?t entirely about [^;,—:]+[;,—:] it'?s about [^.!?]+"
59
+ - "[Tt]his isn'?t about [^;,—:]+[;,—:] it'?s about [^.!?]+"
60
+ # Period-separated versions (two sentences)
61
+ - "[Tt]his isn'?t about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
62
+ - "[Tt]his isn'?t merely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
63
+ - "[Tt]his isn'?t just about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
64
+ - "[Tt]his isn'?t simply about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
65
+ - "[Tt]his isn'?t only about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
66
+ - "[Tt]his isn'?t purely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
67
+ - "[Tt]his isn'?t solely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
68
+ - "[Tt]his isn'?t entirely about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
69
+ - "[Tt]his is not about [^.!?]+\\. [Ii]t'?s about [^.!?]+"
70
+
71
+ # "It's more than X; it's Y" patterns
72
+ - "[Ii]t'?s more than [^;,—:]+[;,—:] it'?s [^.!?]+"
73
+ - "[Ii]t'?s more than just [^;,—:]+[;,—:] it'?s [^.!?]+"
74
+ - "[Tt]his is more than [^;,—:]+[;,—:] it'?s [^.!?]+"
75
+ - "[Tt]his is more than just [^;,—:]+[;,—:] it'?s [^.!?]+"
76
+
77
+ # "It's less about X and more about Y" patterns
78
+ - "[Ii]t'?s less about [^;,—:]+ and more about [^.!?]+"
79
+ - "[Ii]t'?s less about [^;,—:]+, more about [^.!?]+"
80
+ - "[Tt]his is less about [^;,—:]+ and more about [^.!?]+"
81
+
82
+ # "X isn't the point; Y is" patterns
83
+ - "[^.!?]+ isn'?t the point[;,—:] [^.!?]+ is"
84
+ - "[^.!?]+ is not the point[;,—:] [^.!?]+ is"
85
+
86
+ # "The real X isn't Y; it's Z" patterns
87
+ - "[Tt]he real [^;,—:]+ isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
88
+ - "[Tt]he true [^;,—:]+ isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
89
+
90
+ # "What matters isn't X; it's Y" patterns
91
+ - "[Ww]hat matters isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
92
+ - "[Ww]hat matters is not [^;,—:]+[;,—:] it'?s [^.!?]+"
93
+ - "[Ww]hat'?s important isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
94
+
95
+ # "The question isn't X; it's Y" patterns
96
+ - "[Tt]he question isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
97
+ - "[Tt]he question is not [^;,—:]+[;,—:] it'?s [^.!?]+"
98
+ - "[Tt]he issue isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
99
+ - "[Tt]he problem isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
100
+ - "[Tt]he challenge isn'?t [^;,—:]+[;,—:] it'?s [^.!?]+"
101
+
102
+ # "Yes, X, but Y" dismissive acknowledgment
103
+ - "[Yy]es, [^,]+, but the real [^.!?]+"
104
+ - "[Ss]ure, [^,]+, but what really [^.!?]+"
105
+
106
+ # "It's not whether X; it's how/why/when Y"
107
+ - "[Ii]t'?s not whether [^;,—:]+[;,—:] it'?s (?:how|why|when|what) [^.!?]+"
108
+ - "[Ii]t'?s not if [^;,—:]+[;,—:] it'?s (?:how|why|when|what) [^.!?]+"
109
+
110
+ # "[Noun] isn't X. It's Y." pattern (any subject)
111
+ - "[A-Z][a-z]+ isn'?t [^.!?]+\\. [Ii]t'?s [^.!?]+"
112
+ - "[A-Z][a-z]+ is not [^.!?]+\\. [Ii]t'?s [^.!?]+"
113
+
114
+ # "X is a Y, not a Z" categorical assertion with preemptive correction
115
+ - "[A-Z][a-z]+ is an? [^,]+, not an? [^.]+"
116
+ - "[A-Z][a-z]+ are [^,]+, not [^.]+"
117
+
118
+ # "Not only X but also Y" patterns
119
+ - "[Nn]ot only [^,;—:]+,? but (?:also )?[^.!?]+"
120
+
121
+ # "Not because X, but because Y" causal variant
122
+ - "[Nn]ot because [^,;—:]+,? but because [^.!?]+"
123
+
124
+ # === Plural subject negation-correction ===
125
+
126
+ # "These aren't X. They're Y." — period-separated
127
+ - "[Tt]hese aren'?t [^.!?]+\\. [Tt]hey'?re [^.!?]+"
128
+ - "[Tt]hose aren'?t [^.!?]+\\. [Tt]hey'?re [^.!?]+"
129
+ - "[Tt]hese are not [^.!?]+\\. [Tt]hey'?re [^.!?]+"
130
+ - "[Tt]hose are not [^.!?]+\\. [Tt]hey'?re [^.!?]+"
131
+ - "[Tt]hese are not [^.!?]+\\. [Tt]hey are [^.!?]+"
132
+ - "[Tt]hose are not [^.!?]+\\. [Tt]hey are [^.!?]+"
133
+
134
+ # With modifiers
135
+ - "[Tt]hese aren'?t just [^.!?]+\\. [Tt]hey'?re [^.!?]+"
136
+ - "[Tt]hese aren'?t merely [^.!?]+\\. [Tt]hey'?re [^.!?]+"
137
+ - "[Tt]hese aren'?t simply [^.!?]+\\. [Tt]hey'?re [^.!?]+"
138
+
139
+ # Semicolon/em-dash-joined
140
+ - "[Tt]hese aren'?t [^;,—:]+[;,—:] they'?re [^.!?]+"
141
+ - "[Tt]hose aren'?t [^;,—:]+[;,—:] they'?re [^.!?]+"
142
+ - "[Tt]hese are not [^;,—:]+[;,—:] they'?re [^.!?]+"
143
+ - "[Tt]hose are not [^;,—:]+[;,—:] they'?re [^.!?]+"
144
+
145
+ # Generic "[Noun] aren't X. They're Y." catch-all
146
+ - "[A-Z][a-z]+ aren'?t [^.!?]+\\. [Tt]hey'?re [^.!?]+"
147
+ - "[A-Z][a-z]+ are not [^.!?]+\\. [Tt]hey'?re [^.!?]+"
148
+ - "[A-Z][a-z]+ are not [^.!?]+\\. [Tt]hey are [^.!?]+"
149
+
150
+ # === "Doesn't mean X. It means Y." ===
151
+
152
+ # Period-separated
153
+ - "[Tt]his doesn'?t mean [^.!?]+\\. [Ii]t means [^.!?]+"
154
+ - "[Tt]hat doesn'?t mean [^.!?]+\\. [Ii]t means [^.!?]+"
155
+ - "[Tt]his does not mean [^.!?]+\\. [Ii]t means [^.!?]+"
156
+ - "[Tt]hat does not mean [^.!?]+\\. [Ii]t means [^.!?]+"
157
+
158
+ # Semicolon/em-dash-joined
159
+ - "[Tt]his doesn'?t mean [^;,—:]+[;,—:] it means [^.!?]+"
160
+ - "[Tt]hat doesn'?t mean [^;,—:]+[;,—:] it means [^.!?]+"
161
+
162
+ # Generic "[Noun] doesn't mean X. It means Y."
163
+ - "[A-Z][a-z]+ doesn'?t mean [^.!?]+\\. [Ii]t means [^.!?]+"
164
+ - "[A-Z][a-z]+ does not mean [^.!?]+\\. [Ii]t means [^.!?]+"
165
+
166
+ # === Multi-word subject "isn't X. It's Y." ===
167
+ # Catches "The colophon isn't a disclaimer. It's a feature."
168
+ # The single-word "[Noun] isn't X. It's Y." patterns above only match
169
+ # single capitalized-word subjects.
170
+
171
+ # "The [noun] isn't X. It's Y."
172
+ - "[Tt]he [a-z]+ isn'?t [^.!?]+\\. [Ii]t'?s [^.!?]+"
173
+ - "[Tt]he [a-z]+ is not [^.!?]+\\. [Ii]t'?s [^.!?]+"
174
+ - "[Tt]he [a-z]+ isn'?t [^.!?]+\\. [Ii]t is [^.!?]+"
175
+
176
+ # "A/An [noun] isn't X. It's Y."
177
+ - "[Aa]n? [a-z]+ isn'?t [^.!?]+\\. [Ii]t'?s [^.!?]+"
178
+ - "[Aa]n? [a-z]+ is not [^.!?]+\\. [Ii]t'?s [^.!?]+"
179
+
180
+ # "Our/Your/Their [noun] isn't X. It's Y."
181
+ - "(?:Our|Your|Their|Its) [a-z]+ isn'?t [^.!?]+\\. [Ii]t'?s [^.!?]+"
182
+ - "(?:Our|Your|Their|Its) [a-z]+ is not [^.!?]+\\. [Ii]t'?s [^.!?]+"
183
+
184
+ # Multi-word/acronym subjects — catch-all with "isn't...It's" anchor
185
+ # "WCAG 2.1 AA isn't a checkbox. It's a constraint."
186
+ - "[^.!?]+ isn'?t [^.!?]+\\. [Ii]t'?s [^.!?]+"
187
+ - "[^.!?]+ is not [^.!?]+\\. [Ii]t'?s [^.!?]+"
188
+ - "[^.!?]+ isn'?t [^.!?]+\\. [Ii]t is [^.!?]+"
@@ -0,0 +1,22 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI contrast by negation: '%s'. State the positive directly without the trailing negation."
4
+ level: error
5
+ nonword: true
6
+ ignorecase: true
7
+ # Telegraphic negation cadence, often the agent's workaround once the
8
+ # "not X; it's Y" formula gets flagged: a positive spec paired with a negated
9
+ # one. Two shapes. Stacked anaphora ("no setup, no config, no hassle") catches
10
+ # the marketing cadence and its idioms ("no pain, no gain"), which read as tells
11
+ # here. The single clause-final fragment ("cleartext repo names, no k-anonymity
12
+ # gate") is aggressive by design and will also catch a literal "coffee, no
13
+ # sugar," so disable this rule for terse spec lists where that is intended.
14
+ # "No longer" and "no sooner" are temporal adverbs, a different construction.
15
+ exceptions:
16
+ - "no longer"
17
+ - "no sooner"
18
+ tokens:
19
+ # Stacked: "no X, no Y[, no Z]"
20
+ - "\\bno [^,.;:!?]{2,}, no [^.!?]+"
21
+ # Single clause-final fragment: "..., no <noun phrase>."
22
+ - ", no [a-z][^.!?,;:]*[.!?]"
@@ -0,0 +1,63 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI defensive hedge: '%s'. State your point directly without pre-defending it."
4
+ level: error
5
+ nonword: true
6
+ tokens:
7
+ # "This is more of X than Y, but..." pattern
8
+ - "[Tt]his is more of [^,]+ than [^,]+, but [^.!?]+"
9
+ - "[Ii]t'?s more of [^,]+ than [^,]+, but [^.!?]+"
10
+
11
+ # "Not the most X, but..." pattern
12
+ - "[Ii]t'?s not the most [^,]+, but [^.!?]+"
13
+ - "[Tt]his isn'?t the most [^,]+, but [^.!?]+"
14
+
15
+ # "May seem/might seem X, but..." pattern
16
+ - "[Tt]his may seem [^,]+, but [^.!?]+"
17
+ - "[Tt]his might seem [^,]+, but [^.!?]+"
18
+ - "[Ii]t may seem [^,]+, but [^.!?]+"
19
+ - "[Ii]t might seem [^,]+, but [^.!?]+"
20
+
21
+ # "Might sound X, but..." pattern
22
+ - "[Tt]his might sound [^,]+, but [^.!?]+"
23
+ - "[Ii]t might sound [^,]+, but [^.!?]+"
24
+ - "[Tt]hat might sound [^,]+, but [^.!?]+"
25
+
26
+ # "Admittedly/Granted" openers
27
+ - "Admittedly, [^,]+, but [^.!?]+"
28
+ - "Granted, [^,]+, but [^.!?]+"
29
+
30
+ # "To be fair" pattern
31
+ - "To be fair, [^,]+, but [^.!?]+"
32
+ - "To be honest, [^,]+, but [^.!?]+"
33
+
34
+ # "While this might/may appear" pattern
35
+ - "While this might appear [^,]+, [^.!?]+"
36
+ - "While this may appear [^,]+, [^.!?]+"
37
+ - "While it might appear [^,]+, [^.!?]+"
38
+ - "While it may appear [^,]+, [^.!?]+"
39
+
40
+ # "Not meant to be X, but..." pattern
41
+ - "[Tt]his isn'?t meant to be [^,]+, but [^.!?]+"
42
+ - "[Ii]t'?s not meant to be [^,]+, but [^.!?]+"
43
+
44
+ # "On the surface X, but..." pattern
45
+ - "On the surface, [^,]+, but [^.!?]+"
46
+ - "On the surface this [^,]+, but [^.!?]+"
47
+
48
+ # "At first glance" pattern
49
+ - "At first glance, [^,]+, but [^.!?]+"
50
+ - "At first glance this [^,]+, but [^.!?]+"
51
+
52
+ # "I know this seems/sounds" pattern
53
+ - "I know this seems [^,]+, but [^.!?]+"
54
+ - "I know this sounds [^,]+, but [^.!?]+"
55
+ - "I know it seems [^,]+, but [^.!?]+"
56
+ - "I know it sounds [^,]+, but [^.!?]+"
57
+
58
+ # "While X, Y" hedged openers (preemptive concession)
59
+ - "While [^,]+ can [^,]+, [^.!?]+"
60
+ - "While [^,]+ is [^,]+, [^.!?]+"
61
+ - "While [^,]+ are [^,]+, [^.!?]+"
62
+ - "While [^,]+ may [^,]+, [^.!?]+"
63
+ - "Although [^,]+, [^.!?]+"
@@ -0,0 +1,32 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI despite-formula: '%s'. Engage with the challenges substantively or remove the hedge."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - despite its challenges
8
+ - despite these challenges
9
+ - despite the challenges
10
+ - despite this challenge
11
+ - despite these limitations
12
+ - despite its limitations
13
+ - despite the limitations
14
+ - despite these drawbacks
15
+ - despite its drawbacks
16
+ - despite these obstacles
17
+ - despite its obstacles
18
+ - despite these hurdles
19
+ - despite its hurdles
20
+ - despite these setbacks
21
+ - despite its setbacks
22
+ - despite these concerns
23
+ - despite its concerns
24
+ - despite facing challenges
25
+ - despite facing numerous
26
+ - despite facing significant
27
+ - while challenges remain
28
+ - while these challenges
29
+ - while significant challenges
30
+ - challenges notwithstanding
31
+ - obstacles notwithstanding
32
+ - limitations notwithstanding
@@ -0,0 +1,9 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI punctuation: em-dash detected. Use a comma, period, or parentheses instead."
4
+ level: error
5
+ nonword: true
6
+ tokens:
7
+ - '—'
8
+ - '–'
9
+ - '--'
@@ -0,0 +1,30 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI emphasis: '%s'. Remove the italics. Emphasizing a copula rarely adds meaning."
4
+ level: error
5
+ nonword: true
6
+ scope: raw
7
+ tokens:
8
+ # Markdown italicized copula verbs - the "manufactured profundity" pattern
9
+ # Note: underscore patterns require space prefix to avoid matching __dunder__ methods
10
+ - "\\*is\\*"
11
+ - " _is_"
12
+ - "\\*are\\*"
13
+ - " _are_"
14
+ - "\\*was\\*"
15
+ - " _was_"
16
+ - "\\*were\\*"
17
+ - " _were_"
18
+
19
+ # Italicized "the" for false emphasis
20
+ - "\\*the\\*"
21
+ - " _the_"
22
+
23
+ # Italicized single conjunctions/prepositions for false drama
24
+ # Note: underscore patterns require space prefix to avoid matching __dunder__ methods
25
+ - "\\*and\\*"
26
+ - " _and_"
27
+ - "\\*not\\*"
28
+ - " _not_"
29
+ - "\\*or\\*"
30
+ - " _or_"
@@ -0,0 +1,10 @@
1
+ ---
2
+ extends: sequence
3
+ message: "AI empty modifier: '%s %s'. Delete the modifier and keep the noun."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - pattern: named|various|certain|respective|given|particular
8
+ tag: JJ|VBN|DT
9
+ - tag: NN|NNS
10
+ ---
@@ -0,0 +1,11 @@
1
+ ---
2
+ extends: sequence
3
+ message: "AI empty modifier: '%s %s %s'. Delete the modifier and keep the noun."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - pattern: named|various|certain|respective|given|particular
8
+ tag: JJ|VBN|DT
9
+ - tag: JJ|JJR|JJS
10
+ - tag: NN|NNS
11
+ ---
@@ -0,0 +1,20 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI explainer heading: '%s'. Name what you're explaining instead."
4
+ level: error
5
+ ignorecase: true
6
+ scope: heading
7
+ tokens:
8
+ - Deep Dive
9
+ - Under the Hood
10
+ - Demystifying
11
+ - Why It Matters
12
+ - Why This Matters
13
+ - Why It Exists
14
+ - Why This Exists
15
+ - What It Solves
16
+ - What This Solves
17
+ - What It Does
18
+ - What This Does
19
+ - A Closer Look
20
+ - The Inner Workings
@@ -0,0 +1,31 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI evasion: '%s'. Take a clear position or remove the hedge."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - both sides of the argument
8
+ - both sides present valid points
9
+ - there are valid points on both sides
10
+ - each perspective has merit
11
+ - each side has merit
12
+ - it's important to consider all perspectives
13
+ - important to consider the perspectives
14
+ - consider all stakeholders
15
+ - perspectives of all stakeholders
16
+ - a balanced approach
17
+ - strike a balance
18
+ - find a balance
19
+ - nuanced understanding
20
+ - nuanced approach
21
+ - the answer is not straightforward
22
+ - not a simple answer
23
+ - there is no simple answer
24
+ - the issue is complex
25
+ - this is a complex issue
26
+ - depends on various factors
27
+ - depends on many factors
28
+ - varies depending on
29
+ - context-dependent
30
+ - situation-dependent
31
+ - case-by-case basis
@@ -0,0 +1,41 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI false exclusivity: '%s'. State the point directly without claiming insider knowledge."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - nobody talks about
8
+ - no one talks about
9
+ - nobody mentions
10
+ - no one mentions
11
+ - nobody is talking about
12
+ - no one is talking about
13
+ - nobody discusses
14
+ - no one discusses
15
+ - the part nobody mentions
16
+ - the part no one mentions
17
+ - the part nobody talks about
18
+ - the part no one talks about
19
+ - what nobody tells you
20
+ - what no one tells you
21
+ - what nobody mentions
22
+ - what no one mentions
23
+ - what most people miss
24
+ - what most people don't
25
+ - what most people overlook
26
+ - what most people forget
27
+ - the dirty secret
28
+ - the dirty little secret
29
+ - the open secret
30
+ - the uncomfortable truth
31
+ - the inconvenient truth
32
+ - the elephant in the room
33
+ - the unspoken truth
34
+ - the unspoken reality
35
+ - the hidden truth
36
+ - the hidden cost
37
+ - the hidden costs
38
+ - the silent killer
39
+ - here's what most people miss
40
+ - here's what nobody tells you
41
+ - here's what no one tells you
@@ -0,0 +1,79 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI overused verb: '%s'. Name the literal action: is merged or is routed to. Disable this rule for aviation or nature prose."
4
+ level: error
5
+ nonword: true
6
+ ignorecase: true
7
+ # "Lands" is an AI overuse fingerprint: a request "lands on" a node, a PR
8
+ # "lands in" main, an idea "lands in" a sweet spot. Flag the figurative arrival
9
+ # verb and exempt the common things that literally land. The exemption list is
10
+ # deliberately not exhaustive: rare landers (specific species, stray
11
+ # projectiles) fire, so aviation or nature writing disables the whole rule.
12
+ # Exemptions need (?i) because ignorecase covers tokens but not exemptions, so a
13
+ # sentence-initial "Snow lands on the sill" would otherwise leak through. Each
14
+ # exemption matches the subject word inside the captured "<subject> lands on"
15
+ # span.
16
+ exceptions:
17
+ # Common aircraft
18
+ - "(?i)planes?"
19
+ - "(?i)airplanes?"
20
+ - "(?i)jets?"
21
+ - "(?i)aircraft"
22
+ - "(?i)helicopters?"
23
+ - "(?i)drones?"
24
+ - "(?i)gliders?"
25
+ - "(?i)balloons?"
26
+ - "(?i)flights?"
27
+ # Spacecraft
28
+ - "(?i)rockets?"
29
+ - "(?i)spacecraft"
30
+ - "(?i)probes?"
31
+ - "(?i)landers?"
32
+ - "(?i)rovers?"
33
+ - "(?i)capsules?"
34
+ - "(?i)shuttles?"
35
+ - "(?i)satellites?"
36
+ # Birds (generic; rare species fire, so nature writing disables the rule)
37
+ - "(?i)birds?"
38
+ # Common falling or thrown things
39
+ - "(?i)balls?"
40
+ - "(?i)snow"
41
+ - "(?i)snowflakes?"
42
+ - "(?i)leaf"
43
+ - "(?i)leaves"
44
+ - "(?i)meteors?"
45
+ - "(?i)asteroids?"
46
+ # People who land
47
+ - "(?i)skydivers?"
48
+ # "Lands" as a territory noun, not the verb (public lands in the west)
49
+ - "(?i)public"
50
+ - "(?i)federal"
51
+ - "(?i)tribal"
52
+ - "(?i)private"
53
+ - "(?i)ancestral"
54
+ - "(?i)indigenous"
55
+ - "(?i)native"
56
+ - "(?i)grazing"
57
+ - "(?i)crown"
58
+ - "(?i)common"
59
+ # Assessment subjects owned by ColloquialAssessments ("the joke lands")
60
+ - "(?i)joke"
61
+ - "(?i)point"
62
+ - "(?i)argument"
63
+ - "(?i)line"
64
+ - "(?i)metaphor"
65
+ - "(?i)analogy"
66
+ - "(?i)comparison"
67
+ - "(?i)critique"
68
+ - "(?i)distinction"
69
+ - "(?i)observation"
70
+ - "(?i)framing"
71
+ - "(?i)insight"
72
+ - "(?i)takeaway"
73
+ - "(?i)punchline"
74
+ - "(?i)callback"
75
+ - "(?i)bit"
76
+ - "(?i)reference"
77
+ - "(?i)callout"
78
+ tokens:
79
+ - "\\b\\w+ land(?:s|ed)? (?:on|in|into|at|here|there)\\b"
@@ -0,0 +1,78 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI filler: '%s'. Delete this phrase. It adds no meaning."
4
+ level: error
5
+ ignorecase: true
6
+ tokens:
7
+ - a wide range of
8
+ - a broad range of
9
+ - a variety of
10
+ - a myriad of
11
+ - a plethora of
12
+ - a wealth of
13
+ - an abundance of
14
+ - a multitude of
15
+ - countless
16
+ - numerous
17
+ - innumerable
18
+ - in order to
19
+ - for the purpose of
20
+ - with the aim of
21
+ - with a view to
22
+ - so as to
23
+ - serves to
24
+ - tends to
25
+ - has the potential to
26
+ - has the ability to
27
+ - is capable of
28
+ - is able to
29
+ - due to the fact that
30
+ - owing to the fact that
31
+ - in light of the fact that
32
+ - given the fact that
33
+ - despite the fact that
34
+ - regardless of the fact that
35
+ - the fact that
36
+ - it is clear that
37
+ - it is evident that
38
+ - it is apparent that
39
+ - it is obvious that
40
+ - it can be seen that
41
+ - it can be observed that
42
+
43
+ # Performative sincerity markers
44
+ - and honestly
45
+ - and honestly,
46
+ - honestly,
47
+ - honestly?
48
+ - to be honest,
49
+ - to be honest?
50
+ - and frankly
51
+ - and frankly,
52
+ - frankly,
53
+ - frankly?
54
+ - and truthfully
55
+ - truthfully,
56
+ - if i'm being honest
57
+ - if i'm being frank
58
+ - to be frank,
59
+ - to tell you the truth
60
+ - the truth is,
61
+ - in all honesty
62
+ - in all honesty,
63
+ - quite honestly
64
+ - quite frankly
65
+ - i'll be honest
66
+ - i will be honest
67
+ - to be perfectly honest
68
+ - to be completely honest
69
+ - to be totally honest
70
+ - to be brutally honest
71
+ - to be 100% honest
72
+ - the honest truth
73
+ - the honest answer
74
+ - the honest take
75
+ - honest answer
76
+ - honest take
77
+ - my honest take
78
+ - my honest opinion
@@ -0,0 +1,58 @@
1
+ ---
2
+ extends: existence
3
+ message: "AI formalism: '%s'. Use a plainer everyday word (e.g., 'use', 'help', 'start')."
4
+ level: error
5
+ tokens:
6
+ - utilize
7
+ - utilizes
8
+ - utilizing
9
+ - utilized
10
+ - utilization
11
+ - facilitate
12
+ - facilitates
13
+ - facilitating
14
+ - facilitated
15
+ - facilitation
16
+ - implement
17
+ - implements
18
+ - implementing
19
+ - implementation
20
+ - commence
21
+ - commences
22
+ - commencing
23
+ - commenced
24
+ - terminate
25
+ - terminates
26
+ - terminating
27
+ - terminated
28
+ - ascertain
29
+ - ascertains
30
+ - ascertaining
31
+ - endeavour
32
+ - endeavours
33
+ - endeavouring
34
+ - methodology
35
+ - methodologies
36
+ - framework
37
+ - frameworks
38
+ - conceptualize
39
+ - conceptualizes
40
+ - conceptualizing
41
+ - operationalize
42
+ - operationalizes
43
+ - operationalizing
44
+ - prioritize
45
+ - prioritizes
46
+ - prioritizing
47
+ - incentivize
48
+ - incentivizes
49
+ - incentivizing
50
+ - optimize
51
+ - optimizes
52
+ - optimizing
53
+ - maximize
54
+ - maximizes
55
+ - maximizing
56
+ - minimize
57
+ - minimizes
58
+ - minimizing