slopless 0.2.8 → 0.2.10

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 (126) hide show
  1. package/dist/adapters/textlint/report.js +1 -4
  2. package/dist/adapters/textlint/report.js.map +1 -1
  3. package/dist/adapters/textlint/rule.js +1 -1
  4. package/dist/adapters/textlint/rule.js.map +1 -1
  5. package/dist/adapters/textlint/units.js +16 -0
  6. package/dist/adapters/textlint/units.js.map +1 -1
  7. package/dist/cli.js +25 -8
  8. package/dist/cli.js.map +1 -1
  9. package/dist/presets/everything.js +6 -0
  10. package/dist/presets/everything.js.map +1 -1
  11. package/dist/registries/narrative-slop.js +2 -0
  12. package/dist/registries/narrative-slop.js.map +1 -1
  13. package/dist/registries/syntactic-patterns/authority.js +3 -1
  14. package/dist/registries/syntactic-patterns/authority.js.map +1 -1
  15. package/dist/registries/syntactic-patterns/lead-ins.js +2 -0
  16. package/dist/registries/syntactic-patterns/lead-ins.js.map +1 -1
  17. package/dist/registries/syntactic-patterns/repetition.js +4 -0
  18. package/dist/registries/syntactic-patterns/repetition.js.map +1 -1
  19. package/dist/registries/words.js +2 -0
  20. package/dist/registries/words.js.map +1 -1
  21. package/dist/rules/metrics/avg-sentence-length.js +6 -0
  22. package/dist/rules/metrics/avg-sentence-length.js.map +1 -1
  23. package/dist/rules/narrative-slop/body-action-density.js +44 -1
  24. package/dist/rules/narrative-slop/body-action-density.js.map +1 -1
  25. package/dist/rules/narrative-slop/data/narrative-cliches.json +49 -0
  26. package/dist/rules/narrative-slop/flat-action-cadence.js +97 -149
  27. package/dist/rules/narrative-slop/flat-action-cadence.js.map +1 -1
  28. package/dist/rules/narrative-slop/low-information-beat-density.js +79 -0
  29. package/dist/rules/narrative-slop/low-information-beat-density.js.map +1 -0
  30. package/dist/rules/narrative-slop/perception-verb-density.js +25 -1
  31. package/dist/rules/narrative-slop/perception-verb-density.js.map +1 -1
  32. package/dist/rules/orthography/em-dashes.js.map +1 -1
  33. package/dist/rules/orthography/hidden-unicode-controls.js.map +1 -1
  34. package/dist/rules/orthography/sentence-case.js +4 -2
  35. package/dist/rules/orthography/sentence-case.js.map +1 -1
  36. package/dist/rules/private/textlint-rule-builders.js +3 -1
  37. package/dist/rules/private/textlint-rule-builders.js.map +1 -1
  38. package/dist/rules/semantic-thinness/patterns/abstract-metaphor-claim.json +91 -2
  39. package/dist/rules/semantic-thinness/patterns/abstract-personification-line.json +34 -3
  40. package/dist/rules/semantic-thinness/patterns/body-emotion-shorthand.json +23 -0
  41. package/dist/rules/semantic-thinness/patterns/deictic-summary.json +118 -6
  42. package/dist/rules/semantic-thinness/patterns/different-job-summary.json +30 -0
  43. package/dist/rules/semantic-thinness/patterns/emotion-as-substance.json +14 -4
  44. package/dist/rules/semantic-thinness/patterns/empty-atmosphere-shift.json +2 -0
  45. package/dist/rules/semantic-thinness/patterns/empty-scene-state.json +1 -0
  46. package/dist/rules/semantic-thinness/patterns/empty-scene-transition.json +1 -0
  47. package/dist/rules/semantic-thinness/patterns/gaze-choreography.json +2 -0
  48. package/dist/rules/semantic-thinness/patterns/generic-pressure-or-stakes.json +1 -0
  49. package/dist/rules/semantic-thinness/patterns/generic-realization.json +1 -0
  50. package/dist/rules/semantic-thinness/patterns/hollow-significance.json +94 -2
  51. package/dist/rules/semantic-thinness/patterns/missing-conversation-plan.json +44 -0
  52. package/dist/rules/semantic-thinness/patterns/puffery-evaluative-claim.json +70 -4
  53. package/dist/rules/semantic-thinness/patterns/real-work-begins.json +3 -1
  54. package/dist/rules/semantic-thinness/patterns/silence-as-actor.json +4 -0
  55. package/dist/rules/semantic-thinness/patterns/solution-boring-frame.json +72 -0
  56. package/dist/rules/semantic-thinness/patterns/truth-answer-moves.json +2 -0
  57. package/dist/rules/semantic-thinness/patterns/vague-connective-payoff.json +31 -4
  58. package/dist/rules/semantic-thinness/patterns/vague-summary-cost.json +34 -0
  59. package/dist/rules/semantic-thinness/patterns/vague-threshold-change.json +40 -4
  60. package/dist/rules/semantic-thinness/private/concrete-guards.js +119 -0
  61. package/dist/rules/semantic-thinness/private/concrete-guards.js.map +1 -0
  62. package/dist/rules/semantic-thinness/private/pattern-data-b.js +6 -0
  63. package/dist/rules/semantic-thinness/private/pattern-data-b.js.map +1 -1
  64. package/dist/rules/semantic-thinness/private/pattern-data-d.js +2 -0
  65. package/dist/rules/semantic-thinness/private/pattern-data-d.js.map +1 -1
  66. package/dist/rules/semantic-thinness/private/pattern-matcher.js +26 -14
  67. package/dist/rules/semantic-thinness/private/pattern-matcher.js.map +1 -1
  68. package/dist/rules/syntactic-patterns/authority/authority-padding.js +75 -7
  69. package/dist/rules/syntactic-patterns/authority/authority-padding.js.map +1 -1
  70. package/dist/rules/syntactic-patterns/authority/uncited-authority.js +124 -0
  71. package/dist/rules/syntactic-patterns/authority/uncited-authority.js.map +1 -0
  72. package/dist/rules/syntactic-patterns/closers/affirmation-closers.js +11 -1
  73. package/dist/rules/syntactic-patterns/closers/affirmation-closers.js.map +1 -1
  74. package/dist/rules/syntactic-patterns/closers/boilerplate-conclusion.js +51 -4
  75. package/dist/rules/syntactic-patterns/closers/boilerplate-conclusion.js.map +1 -1
  76. package/dist/rules/syntactic-patterns/closers/summative-closer.js +52 -4
  77. package/dist/rules/syntactic-patterns/closers/summative-closer.js.map +1 -1
  78. package/dist/rules/syntactic-patterns/contrast/contrastive-aphorism.js +68 -5
  79. package/dist/rules/syntactic-patterns/contrast/contrastive-aphorism.js.map +1 -1
  80. package/dist/rules/syntactic-patterns/contrast/negation-reframe.js +26 -9
  81. package/dist/rules/syntactic-patterns/contrast/negation-reframe.js.map +1 -1
  82. package/dist/rules/syntactic-patterns/contrast/private/abstract-pair-gates.js +63 -0
  83. package/dist/rules/syntactic-patterns/contrast/private/abstract-pair-gates.js.map +1 -0
  84. package/dist/rules/syntactic-patterns/contrast/private/block-negation-reframe.js +194 -0
  85. package/dist/rules/syntactic-patterns/contrast/private/block-negation-reframe.js.map +1 -0
  86. package/dist/rules/syntactic-patterns/contrast/private/meaning-reframe.js +42 -0
  87. package/dist/rules/syntactic-patterns/contrast/private/meaning-reframe.js.map +1 -0
  88. package/dist/rules/syntactic-patterns/contrast/private/negation-reframe-matcher.js +34 -41
  89. package/dist/rules/syntactic-patterns/contrast/private/negation-reframe-matcher.js.map +1 -1
  90. package/dist/rules/syntactic-patterns/contrast/private/negative-slop-frames.js +6 -0
  91. package/dist/rules/syntactic-patterns/contrast/private/negative-slop-frames.js.map +1 -1
  92. package/dist/rules/syntactic-patterns/contrast/private/same-sentence-contrast.js +47 -0
  93. package/dist/rules/syntactic-patterns/contrast/private/same-sentence-contrast.js.map +1 -0
  94. package/dist/rules/syntactic-patterns/generalization/universalizing-claims.js +84 -1
  95. package/dist/rules/syntactic-patterns/generalization/universalizing-claims.js.map +1 -1
  96. package/dist/rules/syntactic-patterns/lead-ins/formal-transition-density.js +92 -0
  97. package/dist/rules/syntactic-patterns/lead-ins/formal-transition-density.js.map +1 -0
  98. package/dist/rules/syntactic-patterns/lead-ins/generic-signposting.js +53 -3
  99. package/dist/rules/syntactic-patterns/lead-ins/generic-signposting.js.map +1 -1
  100. package/dist/rules/syntactic-patterns/lead-ins/lesson-framing.js +9 -0
  101. package/dist/rules/syntactic-patterns/lead-ins/lesson-framing.js.map +1 -1
  102. package/dist/rules/syntactic-patterns/lead-ins/llm-openers.js +38 -3
  103. package/dist/rules/syntactic-patterns/lead-ins/llm-openers.js.map +1 -1
  104. package/dist/rules/syntactic-patterns/lead-ins/observer-guidance.js +17 -0
  105. package/dist/rules/syntactic-patterns/lead-ins/observer-guidance.js.map +1 -1
  106. package/dist/rules/syntactic-patterns/lead-ins/private/discourse-evaluation.js +91 -0
  107. package/dist/rules/syntactic-patterns/lead-ins/private/discourse-evaluation.js.map +1 -0
  108. package/dist/rules/syntactic-patterns/repetition/demonstrative-emphasis.js +4 -0
  109. package/dist/rules/syntactic-patterns/repetition/demonstrative-emphasis.js.map +1 -1
  110. package/dist/rules/syntactic-patterns/repetition/fragment-stacking.js +4 -1
  111. package/dist/rules/syntactic-patterns/repetition/fragment-stacking.js.map +1 -1
  112. package/dist/rules/syntactic-patterns/repetition/repeated-predicate-end.js +110 -0
  113. package/dist/rules/syntactic-patterns/repetition/repeated-predicate-end.js.map +1 -0
  114. package/dist/rules/syntactic-patterns/repetition/repeated-sentence-starts.js +91 -0
  115. package/dist/rules/syntactic-patterns/repetition/repeated-sentence-starts.js.map +1 -0
  116. package/dist/rules/syntactic-patterns/repetition/triple-repeat.js +6 -1
  117. package/dist/rules/syntactic-patterns/repetition/triple-repeat.js.map +1 -1
  118. package/dist/rules/term-policy/recommended-terms.js +3 -3
  119. package/dist/rules/term-policy/recommended-terms.js.map +1 -1
  120. package/dist/rules/term-policy/required-terms.js +1 -1
  121. package/dist/rules/term-policy/required-terms.js.map +1 -1
  122. package/dist/rules/words/llm-vocabulary-density.js +78 -0
  123. package/dist/rules/words/llm-vocabulary-density.js.map +1 -0
  124. package/dist/shared/matchers/concrete-evidence.js +161 -0
  125. package/dist/shared/matchers/concrete-evidence.js.map +1 -0
  126. package/package.json +10 -4
@@ -1 +1 @@
1
- {"version":3,"file":"recommended-terms.js","sourceRoot":"","sources":["../../../src/rules/term-policy/recommended-terms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recommended-terms.js","sourceRoot":"","sources":["../../../src/rules/term-policy/recommended-terms.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ function presentTerms(text) {
5
5
  return new Set(wordTokens(text).map((token) => token.normalized));
6
6
  }
7
7
  function configuredTerms(options) {
8
- return (options.terms?.map(normalizeForMatch).filter((term) => term.length > 0) ??
8
+ return (options?.terms?.map(normalizeForMatch).filter((term) => term.length > 0) ??
9
9
  []);
10
10
  }
11
11
  const rule = oneToOneRule({
@@ -1 +1 @@
1
- {"version":3,"file":"required-terms.js","sourceRoot":"","sources":["../../../src/rules/term-policy/required-terms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAMpE,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CACtB,OAAuC;IAEvC,OAAO,CACL,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,EAAE,CACH,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,YAAY,CAAuB;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,aAAa;aACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SAC5B,CAAC,CAAC,CAAC;IACR,CAAC;IACD,MAAM,EAAE,aAAa;IACrB,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CACxB,2BAA2B,MAAM,CAAC,QAAQ,uCAAuC;IACnF,MAAM,EAAE,4BAA4B;IACpC,QAAQ,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"required-terms.js","sourceRoot":"","sources":["../../../src/rules/term-policy/required-terms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAMpE,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CACtB,OAAmD;IAEnD,OAAO,CACL,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxE,EAAE,CACH,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,YAAY,CAAuB;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,aAAa;aACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SAC5B,CAAC,CAAC,CAAC;IACR,CAAC;IACD,MAAM,EAAE,aAAa;IACrB,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CACxB,2BAA2B,MAAM,CAAC,QAAQ,uCAAuC;IACnF,MAAM,EAAE,4BAA4B;IACpC,QAAQ,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,eAAe,IAAI,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { defineTextlintRule } from "../../adapters/textlint/rule.js";
2
+ import { paragraphUnits } from "../../adapters/textlint/units.js";
3
+ import { wordTokens } from "../../shared/text/tokens.js";
4
+ const RULE_ID = "words:llm-vocabulary-density";
5
+ const GROUP = "llm vocabulary";
6
+ const MAX_PARAGRAPH_TOKENS = 90;
7
+ const MAX_WINDOW_TOKENS = 65;
8
+ const MIN_HITS = 4;
9
+ const WINDOW_SENTENCES = 4;
10
+ const LLM_DENSITY_WORDS = new Set([
11
+ "approach",
12
+ "approaches",
13
+ "ecosystem",
14
+ "ecosystems",
15
+ "elevate",
16
+ "elevates",
17
+ "elevating",
18
+ "elevated",
19
+ "impact",
20
+ "impacts",
21
+ "insight",
22
+ "insights",
23
+ "nuance",
24
+ "nuanced",
25
+ "robust",
26
+ "scale",
27
+ "scales",
28
+ "scalable",
29
+ "seamless",
30
+ "strategy",
31
+ "strategies",
32
+ "strategic",
33
+ "touchpoint",
34
+ "touchpoints",
35
+ "transform",
36
+ "transformation",
37
+ "transformative",
38
+ "unlock",
39
+ "unlocks",
40
+ "unlocking",
41
+ "workflow",
42
+ "workflows"
43
+ ]);
44
+ function vocabularyDetections(unit) {
45
+ return wordTokens(unit.text)
46
+ .filter((token) => LLM_DENSITY_WORDS.has(token.normalized))
47
+ .map((token) => ({
48
+ evidence: unit.text.slice(token.start, token.end),
49
+ group: GROUP,
50
+ label: token.normalized,
51
+ range: { end: token.end, start: token.start },
52
+ ruleId: RULE_ID,
53
+ unitId: unit.id
54
+ }));
55
+ }
56
+ const rule = defineTextlintRule({
57
+ detector: {
58
+ detect: ({ units }) => units.flatMap((unit) => vocabularyDetections(unit)),
59
+ family: "words",
60
+ id: RULE_ID
61
+ },
62
+ formatMessage: (report) => {
63
+ const labels = [...new Set(report.detections.map((hit) => hit.label))];
64
+ return `LLM vocabulary density: ${report.detections.length} stock abstraction words in a short span (${labels.join(", ")}).`;
65
+ },
66
+ reportPolicy: {
67
+ groups: [GROUP],
68
+ kind: "density",
69
+ maxParagraphTokens: MAX_PARAGRAPH_TOKENS,
70
+ maxWindowTokens: MAX_WINDOW_TOKENS,
71
+ paragraphMinimumHits: MIN_HITS,
72
+ windowMinimumHits: MIN_HITS,
73
+ windowSentences: WINDOW_SENTENCES
74
+ },
75
+ units: (document) => paragraphUnits(document)
76
+ });
77
+ export default rule;
78
+ //# sourceMappingURL=llm-vocabulary-density.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-vocabulary-density.js","sourceRoot":"","sources":["../../../src/rules/words/llm-vocabulary-density.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,MAAM,OAAO,GAAG,8BAA+C,CAAC;AAChE,MAAM,KAAK,GAAG,gBAAgB,CAAC;AAC/B,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,UAAU;IACV,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,SAAS;IACT,UAAU;IACV,WAAW;IACX,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,QAAQ;IACR,SAAS;IACT,WAAW;IACX,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAIH,SAAS,oBAAoB,CAC3B,IAAc;IAEd,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;SACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;SAC1D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;QACjD,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,KAAK,CAAC,UAAU;QACvB,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QAC7C,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,IAAI,CAAC,EAAE;KAChB,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,IAAI,GAAG,kBAAkB,CAAC;IAC9B,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,EAAE,OAAO;QACf,EAAE,EAAE,OAAO;KACZ;IACD,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,2BAA2B,MAAM,CAAC,UAAU,CAAC,MAAM,6CAA6C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/H,CAAC;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,IAAI,EAAE,SAAS;QACf,kBAAkB,EAAE,oBAAoB;QACxC,eAAe,EAAE,iBAAiB;QAClC,oBAAoB,EAAE,QAAQ;QAC9B,iBAAiB,EAAE,QAAQ;QAC3B,eAAe,EAAE,gBAAgB;KAClC;IACD,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;CAC9C,CAAC,CAAC;AAEH,eAAe,IAAI,CAAC"}
@@ -0,0 +1,161 @@
1
+ import { tokens } from "./prose-patterns.js";
2
+ const TECHNICAL_REVERSAL_TOKENS = new Set([
3
+ "api",
4
+ "cache",
5
+ "canonical",
6
+ "endpoint",
7
+ "export",
8
+ "html",
9
+ "invoice",
10
+ "job",
11
+ "key",
12
+ "list",
13
+ "locale",
14
+ "log",
15
+ "logs",
16
+ "offset",
17
+ "parser",
18
+ "request",
19
+ "response",
20
+ "server",
21
+ "socket",
22
+ "systemd",
23
+ "token",
24
+ "utc",
25
+ "worker"
26
+ ]);
27
+ const CORRECTION_TOKENS = new Set([
28
+ "actuator",
29
+ "amber",
30
+ "audit",
31
+ "api",
32
+ "cancelled",
33
+ "closed",
34
+ "code",
35
+ "delayed",
36
+ "diabetic",
37
+ "endpoint",
38
+ "exit",
39
+ "export",
40
+ "hypertensive",
41
+ "invoice",
42
+ "package",
43
+ "patient",
44
+ "red",
45
+ "sensor",
46
+ "server",
47
+ "systemd",
48
+ "valve"
49
+ ]);
50
+ const AUTHORITY_CONCRETE_TOKENS = new Set([
51
+ "assigned",
52
+ "cancel",
53
+ "cancels",
54
+ "crawler",
55
+ "falls",
56
+ "february",
57
+ "improved",
58
+ "load",
59
+ "ownership",
60
+ "pricing",
61
+ "recurring",
62
+ "saw",
63
+ "status"
64
+ ]);
65
+ const IMPLEMENTATION_SUMMARY_TOKENS = new Set([
66
+ "api",
67
+ "authentication",
68
+ "audit",
69
+ "body",
70
+ "cache",
71
+ "checklist",
72
+ "commands",
73
+ "adjustment",
74
+ "export",
75
+ "flags",
76
+ "inhaler",
77
+ "invoice",
78
+ "key",
79
+ "fuse",
80
+ "motor",
81
+ "numbers",
82
+ "locale",
83
+ "microscope",
84
+ "nurse",
85
+ "offsets",
86
+ "page",
87
+ "parser",
88
+ "rotate",
89
+ "rpm",
90
+ "repayment",
91
+ "returned",
92
+ "signing",
93
+ "slide",
94
+ "source",
95
+ "staging",
96
+ "table",
97
+ "tokens",
98
+ "voltage"
99
+ ]);
100
+ const MEDICAL_PLACE_TOKENS = new Set(["inhaler", "nurse"]);
101
+ const CONCRETE_INVENTORY_HEADS = new Set(["dose", "patch", "rule", "test"]);
102
+ const DETERMINERS = new Set(["a", "an", "the", "this", "that"]);
103
+ const SUMMARY_CONNECTORS = new Set(["because", "that", "when", "where", "why"]);
104
+ function hasDigit(text) {
105
+ for (const character of text) {
106
+ if (character >= "0" && character <= "9") {
107
+ return true;
108
+ }
109
+ }
110
+ return false;
111
+ }
112
+ function containsToken(source, candidates) {
113
+ return source.some((token) => candidates.has(token));
114
+ }
115
+ export function hasConcreteTechnicalToken(text) {
116
+ const words = tokens(text);
117
+ return containsToken(words, TECHNICAL_REVERSAL_TOKENS);
118
+ }
119
+ export function hasConcreteCorrectionEvidence(text) {
120
+ const words = tokens(text);
121
+ return containsToken(words, CORRECTION_TOKENS);
122
+ }
123
+ export function hasConcreteAuthorityEvidence(text) {
124
+ const words = tokens(text);
125
+ return containsToken(words, AUTHORITY_CONCRETE_TOKENS);
126
+ }
127
+ export function hasConcreteImplementationSummary(text) {
128
+ const words = tokens(text);
129
+ return (hasDigit(text) ||
130
+ containsToken(words, MEDICAL_PLACE_TOKENS) ||
131
+ containsToken(words, IMPLEMENTATION_SUMMARY_TOKENS) ||
132
+ (containsToken(words, AUTHORITY_CONCRETE_TOKENS) &&
133
+ words.some((word) => SUMMARY_CONNECTORS.has(word))));
134
+ }
135
+ export function hasConcreteCausalSummary(text) {
136
+ const words = tokens(text);
137
+ return (text.includes(":") &&
138
+ (hasDigit(text) ||
139
+ containsToken(words, IMPLEMENTATION_SUMMARY_TOKENS) ||
140
+ containsToken(words, AUTHORITY_CONCRETE_TOKENS)));
141
+ }
142
+ function subjectHead(sentence) {
143
+ const words = tokens(sentence);
144
+ const end = words.findIndex((word) => ["changes", "does", "gets", "is", "matters", "still", "works"].includes(word));
145
+ const subject = end < 0 ? words : words.slice(0, end);
146
+ for (let index = subject.length - 1; index >= 0; index -= 1) {
147
+ const word = subject[index];
148
+ if (word !== undefined && !DETERMINERS.has(word)) {
149
+ return word;
150
+ }
151
+ }
152
+ return undefined;
153
+ }
154
+ export function hasConcreteInventorySubjects(sentences) {
155
+ const heads = sentences
156
+ .map((sentence) => subjectHead(sentence))
157
+ .filter((head) => head !== undefined);
158
+ return (heads.length >= 3 &&
159
+ heads.every((head) => CONCRETE_INVENTORY_HEADS.has(head)));
160
+ }
161
+ //# sourceMappingURL=concrete-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concrete-evidence.js","sourceRoot":"","sources":["../../../src/shared/matchers/concrete-evidence.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slopless",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "Deterministic textlint rules for detecting slop in prose.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -17,14 +17,14 @@
17
17
  "node": ">=20.0.0"
18
18
  },
19
19
  "scripts": {
20
- "build": "rm -rf dist && tsc -p tsconfig.json",
20
+ "build": "rm -rf dist && tsc -p tsconfig.json && chmod +x dist/cli.js",
21
21
  "format": "prettier --write .",
22
22
  "format:check": "prettier --check .",
23
23
  "lint": "eslint --max-warnings 0 .",
24
24
  "lint:css": "stylelint --max-warnings 0 \"styles/**/*.css\"",
25
25
  "spellcheck": "cspell .",
26
- "typecov": "type-coverage --at-least 100",
27
- "validate": "npm run build && npm run lint && npm run lint:css && npm run format:check && npm run spellcheck && npm run typecov && scripts/validate-g3ts.sh"
26
+ "typecov": "type-coverage --strict --at-least 100",
27
+ "validate": "npm run build && scripts/verify-cli-version.py && npm run lint && npm run lint:css && prettier --check . && cspell . && type-coverage --strict --at-least 100 && scripts/validate-g3ts.sh"
28
28
  },
29
29
  "files": [
30
30
  "dist",
@@ -46,6 +46,7 @@
46
46
  "./rules/metrics/word-repetition": "./dist/rules/metrics/word-repetition.js",
47
47
  "./rules/narrative-slop/body-action-density": "./dist/rules/narrative-slop/body-action-density.js",
48
48
  "./rules/narrative-slop/flat-action-cadence": "./dist/rules/narrative-slop/flat-action-cadence.js",
49
+ "./rules/narrative-slop/low-information-beat-density": "./dist/rules/narrative-slop/low-information-beat-density.js",
49
50
  "./rules/narrative-slop/narrative-cliches": "./dist/rules/narrative-slop/narrative-cliches.js",
50
51
  "./rules/narrative-slop/perception-verb-density": "./dist/rules/narrative-slop/perception-verb-density.js",
51
52
  "./rules/orthography/artifact-placeholders": "./dist/rules/orthography/artifact-placeholders.js",
@@ -70,6 +71,7 @@
70
71
  "./rules/term-policy/recommended-terms": "./dist/rules/term-policy/recommended-terms.js",
71
72
  "./rules/term-policy/required-terms": "./dist/rules/term-policy/required-terms.js",
72
73
  "./rules/syntactic-patterns/authority/authority-padding": "./dist/rules/syntactic-patterns/authority/authority-padding.js",
74
+ "./rules/syntactic-patterns/authority/uncited-authority": "./dist/rules/syntactic-patterns/authority/uncited-authority.js",
73
75
  "./rules/syntactic-patterns/closers/affirmation-closers": "./dist/rules/syntactic-patterns/closers/affirmation-closers.js",
74
76
  "./rules/syntactic-patterns/closers/boilerplate-conclusion": "./dist/rules/syntactic-patterns/closers/boilerplate-conclusion.js",
75
77
  "./rules/syntactic-patterns/closers/false-question": "./dist/rules/syntactic-patterns/closers/false-question.js",
@@ -81,6 +83,7 @@
81
83
  "./rules/syntactic-patterns/generalization/universalizing-claims": "./dist/rules/syntactic-patterns/generalization/universalizing-claims.js",
82
84
  "./rules/syntactic-patterns/llm-artifacts/response-wrapper": "./dist/rules/syntactic-patterns/llm-artifacts/response-wrapper.js",
83
85
  "./rules/syntactic-patterns/lead-ins/boilerplate-framing": "./dist/rules/syntactic-patterns/lead-ins/boilerplate-framing.js",
86
+ "./rules/syntactic-patterns/lead-ins/formal-transition-density": "./dist/rules/syntactic-patterns/lead-ins/formal-transition-density.js",
84
87
  "./rules/syntactic-patterns/lead-ins/generic-signposting": "./dist/rules/syntactic-patterns/lead-ins/generic-signposting.js",
85
88
  "./rules/syntactic-patterns/lead-ins/lesson-framing": "./dist/rules/syntactic-patterns/lead-ins/lesson-framing.js",
86
89
  "./rules/syntactic-patterns/lead-ins/llm-openers": "./dist/rules/syntactic-patterns/lead-ins/llm-openers.js",
@@ -88,8 +91,11 @@
88
91
  "./rules/syntactic-patterns/repetition/demonstrative-emphasis": "./dist/rules/syntactic-patterns/repetition/demonstrative-emphasis.js",
89
92
  "./rules/syntactic-patterns/repetition/empty-emphasis": "./dist/rules/syntactic-patterns/repetition/empty-emphasis.js",
90
93
  "./rules/syntactic-patterns/repetition/fragment-stacking": "./dist/rules/syntactic-patterns/repetition/fragment-stacking.js",
94
+ "./rules/syntactic-patterns/repetition/repeated-predicate-end": "./dist/rules/syntactic-patterns/repetition/repeated-predicate-end.js",
95
+ "./rules/syntactic-patterns/repetition/repeated-sentence-starts": "./dist/rules/syntactic-patterns/repetition/repeated-sentence-starts.js",
91
96
  "./rules/syntactic-patterns/repetition/triple-repeat": "./dist/rules/syntactic-patterns/repetition/triple-repeat.js",
92
97
  "./rules/words/hedge-stacking": "./dist/rules/words/hedge-stacking.js",
98
+ "./rules/words/llm-vocabulary-density": "./dist/rules/words/llm-vocabulary-density.js",
93
99
  "./rules/words/llm-vocabulary": "./dist/rules/words/llm-vocabulary.js",
94
100
  "./rules/words/simplicity": "./dist/rules/words/simplicity.js",
95
101
  "./rules/words/prohibited-words": "./dist/rules/words/prohibited-words.js"