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.
- package/LICENSE +21 -0
- package/NOTICE +36 -0
- package/README.md +174 -0
- package/SOURCES.md +34 -0
- package/dist/cli.js +13834 -0
- package/dist/index.cjs +13366 -0
- package/dist/index.d.cts +36 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +13351 -0
- package/dist/node.cjs +13581 -0
- package/dist/node.d.cts +41 -0
- package/dist/node.d.ts +41 -0
- package/dist/node.js +13564 -0
- package/dist/types-BlvvRFG5.d.cts +153 -0
- package/dist/types-BlvvRFG5.d.ts +153 -0
- package/package.json +115 -0
- package/slop-gate.config.json +3 -0
- package/vale/styles/AiTextCheck/DiveDeep.yml +5 -0
- package/vale/styles/AiTextCheck/Furthermore.yml +5 -0
- package/vale/styles/AiTextCheck/ImportantToNote.yml +5 -0
- package/vale/styles/AiTextCheck/InTodaysWorld.yml +5 -0
- package/vale/styles/AiTextCheck/LeverageUtilize.yml +5 -0
- package/vale/styles/AiTextCheck/meta.json +3 -0
- package/vale/styles/Google/AMPM.yml +9 -0
- package/vale/styles/Google/Acronyms.yml +64 -0
- package/vale/styles/Google/Colons.yml +8 -0
- package/vale/styles/Google/Contractions.yml +30 -0
- package/vale/styles/Google/DateFormat.yml +9 -0
- package/vale/styles/Google/Ellipses.yml +9 -0
- package/vale/styles/Google/EmDash.yml +12 -0
- package/vale/styles/Google/Exclamation.yml +12 -0
- package/vale/styles/Google/FirstPerson.yml +13 -0
- package/vale/styles/Google/Gender.yml +9 -0
- package/vale/styles/Google/GenderBias.yml +43 -0
- package/vale/styles/Google/HeadingPunctuation.yml +13 -0
- package/vale/styles/Google/Headings.yml +29 -0
- package/vale/styles/Google/LICENSE +21 -0
- package/vale/styles/Google/Latin.yml +11 -0
- package/vale/styles/Google/LyHyphens.yml +14 -0
- package/vale/styles/Google/OptionalPlurals.yml +12 -0
- package/vale/styles/Google/Ordinal.yml +7 -0
- package/vale/styles/Google/OxfordComma.yml +7 -0
- package/vale/styles/Google/Parens.yml +7 -0
- package/vale/styles/Google/Passive.yml +184 -0
- package/vale/styles/Google/Periods.yml +7 -0
- package/vale/styles/Google/Quotes.yml +7 -0
- package/vale/styles/Google/Ranges.yml +7 -0
- package/vale/styles/Google/Semicolons.yml +8 -0
- package/vale/styles/Google/Slang.yml +11 -0
- package/vale/styles/Google/Spacing.yml +10 -0
- package/vale/styles/Google/Spelling.yml +10 -0
- package/vale/styles/Google/Units.yml +8 -0
- package/vale/styles/Google/We.yml +11 -0
- package/vale/styles/Google/Will.yml +7 -0
- package/vale/styles/Google/WordList.yml +80 -0
- package/vale/styles/Google/meta.json +4 -0
- package/vale/styles/Google/vocab.txt +0 -0
- package/vale/styles/ai-tells/AIAdjectiveNounPairs.yml +8 -0
- package/vale/styles/ai-tells/AICompoundPhrases.yml +139 -0
- package/vale/styles/ai-tells/AbsoluteAssertions.yml +21 -0
- package/vale/styles/ai-tells/AffirmativeFormulas.yml +101 -0
- package/vale/styles/ai-tells/AnnouncementHeadings.yml +16 -0
- package/vale/styles/ai-tells/AnthropomorphicJustification.yml +115 -0
- package/vale/styles/ai-tells/ClosingPleasantries.yml +120 -0
- package/vale/styles/ai-tells/ColloquialAssessments.yml +47 -0
- package/vale/styles/ai-tells/ColonUsage.yml +18 -0
- package/vale/styles/ai-tells/ConclusionMarkers.yml +23 -0
- package/vale/styles/ai-tells/ContrastiveFormulas.yml +188 -0
- package/vale/styles/ai-tells/ContrastiveNegation.yml +22 -0
- package/vale/styles/ai-tells/DefensiveHedges.yml +63 -0
- package/vale/styles/ai-tells/DespiteChallenges.yml +32 -0
- package/vale/styles/ai-tells/EmDashUsage.yml +9 -0
- package/vale/styles/ai-tells/EmphaticCopula.yml +30 -0
- package/vale/styles/ai-tells/EmptyPadding.yml +10 -0
- package/vale/styles/ai-tells/EmptyPaddingStacked.yml +11 -0
- package/vale/styles/ai-tells/ExplainerHeadings.yml +20 -0
- package/vale/styles/ai-tells/FalseBalance.yml +31 -0
- package/vale/styles/ai-tells/FalseExclusivity.yml +41 -0
- package/vale/styles/ai-tells/FigurativeLands.yml +79 -0
- package/vale/styles/ai-tells/FillerPhrases.yml +78 -0
- package/vale/styles/ai-tells/FormalRegister.yml +58 -0
- package/vale/styles/ai-tells/FormalTransitions.yml +74 -0
- package/vale/styles/ai-tells/GrowthMetaphors.yml +28 -0
- package/vale/styles/ai-tells/HedgingPhrases.yml +85 -0
- package/vale/styles/ai-tells/LICENSE +21 -0
- package/vale/styles/ai-tells/ListIntroductions.yml +22 -0
- package/vale/styles/ai-tells/MarketingHeadings.yml +19 -0
- package/vale/styles/ai-tells/Metacommentary.yml +113 -0
- package/vale/styles/ai-tells/MicDrop.yml +205 -0
- package/vale/styles/ai-tells/MicDropHeadings.yml +20 -0
- package/vale/styles/ai-tells/NarrativePivots.yml +59 -0
- package/vale/styles/ai-tells/OpeningCliches.yml +98 -0
- package/vale/styles/ai-tells/OrganicConsequence.yml +38 -0
- package/vale/styles/ai-tells/OverusedVocabulary.yml +185 -0
- package/vale/styles/ai-tells/OverusedVocabularyVerbs.yml +7 -0
- package/vale/styles/ai-tells/ParallelStaccato.yml +34 -0
- package/vale/styles/ai-tells/ParticipialPadding.yml +74 -0
- package/vale/styles/ai-tells/PromotionalPuffery.yml +63 -0
- package/vale/styles/ai-tells/RedundantPrecaution.yml +8 -0
- package/vale/styles/ai-tells/ResonateOveruse.yml +13 -0
- package/vale/styles/ai-tells/RestatementMarkers.yml +36 -0
- package/vale/styles/ai-tells/RhetoricalDevices.yml +53 -0
- package/vale/styles/ai-tells/RhetoricalSelfAnswer.yml +51 -0
- package/vale/styles/ai-tells/SelfReference.yml +52 -0
- package/vale/styles/ai-tells/SemicolonUsage.yml +31 -0
- package/vale/styles/ai-tells/SequencingMarkers.yml +41 -0
- package/vale/styles/ai-tells/ServesAsDodge.yml +66 -0
- package/vale/styles/ai-tells/ShipOveruse.yml +16 -0
- package/vale/styles/ai-tells/StackedAnaphora.yml +185 -0
- package/vale/styles/ai-tells/StrategyBuzzwords.yml +32 -0
- package/vale/styles/ai-tells/StructureAnnouncements.yml +22 -0
- package/vale/styles/ai-tells/SycophancyMarkers.yml +26 -0
- package/vale/styles/ai-tells/UnpackExplore.yml +21 -0
- package/vale/styles/ai-tells/UrgencyInflation.yml +70 -0
- package/vale/styles/ai-tells/VagueAttributions.yml +67 -0
- package/vale/styles/ai-tells/VerbTricolon.yml +78 -0
- package/vale/styles/ai-tells/VerbTricolonDensity.yml +7 -0
- package/vale/styles/ai-tells/WrapUpHeadings.yml +22 -0
- package/vale/styles/signs-of-ai-writing/AspectOveruse.yml +13 -0
- package/vale/styles/signs-of-ai-writing/ChatGPTArtifacts.yml +12 -0
- package/vale/styles/signs-of-ai-writing/ChatbotCommunication.yml +21 -0
- package/vale/styles/signs-of-ai-writing/CitationArtifacts.yml +10 -0
- package/vale/styles/signs-of-ai-writing/ColonOveruse.yml +11 -0
- package/vale/styles/signs-of-ai-writing/Enumeration.yml +11 -0
- package/vale/styles/signs-of-ai-writing/Hedging.yml +6 -0
- package/vale/styles/signs-of-ai-writing/Intensifiers.yml +17 -0
- package/vale/styles/signs-of-ai-writing/KnowledgeCutoff.yml +14 -0
- package/vale/styles/signs-of-ai-writing/LICENSE +12 -0
- package/vale/styles/signs-of-ai-writing/Lists.yml +8 -0
- package/vale/styles/signs-of-ai-writing/Narrative.yml +15 -0
- package/vale/styles/signs-of-ai-writing/Passive.yml +16 -0
- package/vale/styles/signs-of-ai-writing/Placeholders.yml +17 -0
- package/vale/styles/signs-of-ai-writing/ScareQuotes.yml +6 -0
- package/vale/styles/signs-of-ai-writing/Symbolism.yml +23 -0
- package/vale/styles/signs-of-ai-writing/Transitions.yml +17 -0
- package/vale/styles/signs-of-ai-writing/UTMParameters.yml +10 -0
- package/vale/styles/signs-of-ai-writing/Vocabulary.yml +27 -0
- package/vale/styles/signs-of-ai-writing/meta.json +4 -0
- package/vale/styles/write-good/Cliches.yml +702 -0
- package/vale/styles/write-good/E-Prime.yml +32 -0
- package/vale/styles/write-good/Illusions.yml +11 -0
- package/vale/styles/write-good/LICENSE +21 -0
- package/vale/styles/write-good/Passive.yml +183 -0
- package/vale/styles/write-good/README.md +27 -0
- package/vale/styles/write-good/So.yml +5 -0
- package/vale/styles/write-good/ThereIs.yml +6 -0
- package/vale/styles/write-good/TooWordy.yml +221 -0
- package/vale/styles/write-good/Weasel.yml +29 -0
- package/vale/styles/write-good/meta.json +4 -0
- 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
|