anti-slop-kit 0.3.0__tar.gz

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 (66) hide show
  1. anti_slop_kit-0.3.0/LICENSE +21 -0
  2. anti_slop_kit-0.3.0/PKG-INFO +610 -0
  3. anti_slop_kit-0.3.0/README.md +573 -0
  4. anti_slop_kit-0.3.0/anti_slop_kit.egg-info/PKG-INFO +610 -0
  5. anti_slop_kit-0.3.0/anti_slop_kit.egg-info/SOURCES.txt +64 -0
  6. anti_slop_kit-0.3.0/anti_slop_kit.egg-info/dependency_links.txt +1 -0
  7. anti_slop_kit-0.3.0/anti_slop_kit.egg-info/entry_points.txt +3 -0
  8. anti_slop_kit-0.3.0/anti_slop_kit.egg-info/requires.txt +13 -0
  9. anti_slop_kit-0.3.0/anti_slop_kit.egg-info/top_level.txt +1 -0
  10. anti_slop_kit-0.3.0/pyproject.toml +114 -0
  11. anti_slop_kit-0.3.0/setup.cfg +4 -0
  12. anti_slop_kit-0.3.0/tests/test_benchmarks.py +64 -0
  13. anti_slop_kit-0.3.0/tests/test_cli.py +278 -0
  14. anti_slop_kit-0.3.0/tests/test_code_comments.py +65 -0
  15. anti_slop_kit-0.3.0/tests/test_common.py +426 -0
  16. anti_slop_kit-0.3.0/tests/test_custom_rules.py +622 -0
  17. anti_slop_kit-0.3.0/tests/test_de_ste_lint.py +268 -0
  18. anti_slop_kit-0.3.0/tests/test_detection_benchmark.py +491 -0
  19. anti_slop_kit-0.3.0/tests/test_documented_numbers.py +363 -0
  20. anti_slop_kit-0.3.0/tests/test_en_excess_vocab.py +224 -0
  21. anti_slop_kit-0.3.0/tests/test_es_ste_lint.py +299 -0
  22. anti_slop_kit-0.3.0/tests/test_evals.py +292 -0
  23. anti_slop_kit-0.3.0/tests/test_evals_run.py +149 -0
  24. anti_slop_kit-0.3.0/tests/test_examples.py +132 -0
  25. anti_slop_kit-0.3.0/tests/test_explain.py +200 -0
  26. anti_slop_kit-0.3.0/tests/test_fetch_mage_corpus.py +80 -0
  27. anti_slop_kit-0.3.0/tests/test_fr_ste_lint.py +178 -0
  28. anti_slop_kit-0.3.0/tests/test_gost_reference.py +67 -0
  29. anti_slop_kit-0.3.0/tests/test_hermes_tools.py +180 -0
  30. anti_slop_kit-0.3.0/tests/test_integration_workflows.py +158 -0
  31. anti_slop_kit-0.3.0/tests/test_json_findings.py +162 -0
  32. anti_slop_kit-0.3.0/tests/test_lint_tool.py +539 -0
  33. anti_slop_kit-0.3.0/tests/test_linters.py +701 -0
  34. anti_slop_kit-0.3.0/tests/test_markdown_structure.py +98 -0
  35. anti_slop_kit-0.3.0/tests/test_max_gate.py +194 -0
  36. anti_slop_kit-0.3.0/tests/test_mirror_close.py +112 -0
  37. anti_slop_kit-0.3.0/tests/test_model_signatures.py +164 -0
  38. anti_slop_kit-0.3.0/tests/test_only_component.py +189 -0
  39. anti_slop_kit-0.3.0/tests/test_performance.py +346 -0
  40. anti_slop_kit-0.3.0/tests/test_prose_signals.py +307 -0
  41. anti_slop_kit-0.3.0/tests/test_repo_integrity.py +199 -0
  42. anti_slop_kit-0.3.0/tests/test_rewrite_tool.py +317 -0
  43. anti_slop_kit-0.3.0/tests/test_ru_code_comments.py +65 -0
  44. anti_slop_kit-0.3.0/tests/test_ru_markdown_structure.py +102 -0
  45. anti_slop_kit-0.3.0/tests/test_rulepack_version.py +136 -0
  46. anti_slop_kit-0.3.0/tests/test_run_records.py +217 -0
  47. anti_slop_kit-0.3.0/tests/test_sarif.py +207 -0
  48. anti_slop_kit-0.3.0/tests/test_shadow_safe_import.py +155 -0
  49. anti_slop_kit-0.3.0/tests/test_statistical_analysis.py +176 -0
  50. anti_slop_kit-0.3.0/tests/test_stdin_flags.py +46 -0
  51. anti_slop_kit-0.3.0/tests/test_transmit_check.py +372 -0
  52. anti_slop_kit-0.3.0/tests/test_unit_core.py +162 -0
  53. anti_slop_kit-0.3.0/tests/test_visualization.py +148 -0
  54. anti_slop_kit-0.3.0/tools/__init__.py +1 -0
  55. anti_slop_kit-0.3.0/tools/aslint/__init__.py +1 -0
  56. anti_slop_kit-0.3.0/tools/aslint/cli.py +72 -0
  57. anti_slop_kit-0.3.0/tools/aslint/common.py +256 -0
  58. anti_slop_kit-0.3.0/tools/aslint/custom_rules.py +256 -0
  59. anti_slop_kit-0.3.0/tools/aslint/doc_checks.py +291 -0
  60. anti_slop_kit-0.3.0/tools/aslint/lint_tool.py +282 -0
  61. anti_slop_kit-0.3.0/tools/aslint/model_signatures.py +233 -0
  62. anti_slop_kit-0.3.0/tools/aslint/performance.py +153 -0
  63. anti_slop_kit-0.3.0/tools/aslint/prose_signals.py +211 -0
  64. anti_slop_kit-0.3.0/tools/aslint/rewrite_tool.py +92 -0
  65. anti_slop_kit-0.3.0/tools/aslint/transmit_check.py +107 -0
  66. anti_slop_kit-0.3.0/tools/hermes_registry.json +49 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eliza
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,610 @@
1
+ Metadata-Version: 2.4
2
+ Name: anti-slop-kit
3
+ Version: 0.3.0
4
+ Summary: Detect and prevent slop in AI-generated code and documentation
5
+ Author: Anti-Slop Kit Contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/ameobius-ai/anti-slop-kit
8
+ Project-URL: Repository, https://github.com/ameobius-ai/anti-slop-kit
9
+ Project-URL: Documentation, https://github.com/ameobius-ai/anti-slop-kit#readme
10
+ Project-URL: Issues, https://github.com/ameobius-ai/anti-slop-kit/issues
11
+ Keywords: ai,code-quality,linting,documentation,fidelity
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development :: Quality Assurance
21
+ Classifier: Topic :: Text Processing :: Linguistic
22
+ Requires-Python: >=3.9
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Provides-Extra: dev
26
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
27
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
28
+ Requires-Dist: mypy<2.0.0,>=1.0.0; extra == "dev"
29
+ Requires-Dist: black>=23.0.0; extra == "dev"
30
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
31
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
32
+ Requires-Dist: bandit>=1.7.0; extra == "dev"
33
+ Requires-Dist: pip-audit>=2.6.0; extra == "dev"
34
+ Provides-Extra: hermes
35
+ Requires-Dist: pydantic>=2.0.0; extra == "hermes"
36
+ Dynamic: license-file
37
+
38
+ [![CI](https://github.com/ameobius-ai/anti-slop-kit/actions/workflows/ci.yml/badge.svg)](https://github.com/ameobius-ai/anti-slop-kit/actions/workflows/ci.yml)
39
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
40
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
41
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
42
+ [![Dependabot](https://img.shields.io/badge/dependabot-enabled-blue.svg)](https://github.com/ameobius-ai/anti-slop-kit/network/updates)
43
+
44
+ # anti-slop-kit
45
+
46
+ Controlled-language writing skills and deterministic linters that remove AI slop
47
+ from technical prose. Five languages: English (ASD-STE100 mechanics), Russian
48
+ (GOST R 58049-2017, clause 8.2.3), Spanish, German and French.
49
+
50
+ A skill tells the model how to write. A linter proves whether the model did it.
51
+ The linter is the part most anti-slop advice leaves out.
52
+
53
+ ## Installation
54
+
55
+ ### Prerequisites
56
+
57
+ - Python 3.9 or higher
58
+ - pip (Python package manager)
59
+
60
+ ### Quick Install
61
+
62
+ Install via pip:
63
+
64
+ pip install anti-slop-kit
65
+
66
+ ### Development Install
67
+
68
+ Clone and install in development mode:
69
+
70
+ git clone https://github.com/ameobius-ai/anti-slop-kit.git
71
+ cd anti-slop-kit
72
+ pip install -e ".[dev]"
73
+ pip install pre-commit
74
+ pre-commit install
75
+
76
+ ### Verify Installation
77
+
78
+ Check if package is installed:
79
+
80
+ anti-slop-check --version
81
+
82
+ The command lists every rulepack with its version and calibration date.
83
+ The language linters themselves ship in the source tree, so a
84
+ non-editable `pip install` carries only the `tools` package - install
85
+ editable (`pip install -e .`) to lint with the rulepacks.
86
+
87
+ Or run tests:
88
+
89
+ python -m pytest tests/
90
+
91
+
92
+ ## Usage
93
+
94
+ See the [documentation](docs/) for detailed usage examples and API reference.
95
+
96
+ ### Quick Start
97
+
98
+ 1. Install the package
99
+ 2. Import the main module
100
+ 3. Use the analysis functions
101
+ 4. Review the results
102
+
103
+ For more examples, check the [examples directory](examples/) and [API documentation](docs/api.md).
104
+
105
+ ### Configuration
106
+
107
+ Create a configuration file to customize behavior. See [configuration guide](docs/configuration.md) for details.
108
+
109
+ ### Command Line
110
+
111
+ Use the CLI tool for batch processing and automation. Run `anti-slop --help` for available commands.
112
+
113
+ ## Who this is for
114
+
115
+ **Use this for:** API docs, runbooks, release notes, incident reports, onboarding
116
+ docs, support macros, changelogs — any text where a reader must act correctly on
117
+ the first read. Also useful as a gate on LLM-generated documentation.
118
+
119
+ **Do not use this for:** essays, marketing copy where voice is the point, fiction,
120
+ or anything where rhythm and register matter more than being parsed correctly.
121
+ The sentence-length and semicolon rules will fight you, and they should: they come
122
+ from maintenance-manual standards, not from general writing advice.
123
+
124
+ **What the score means:** violations per 100 words. A smoke alarm, not a grade.
125
+ The useful signal is the delta across revisions of the same text. An absolute
126
+ threshold means something only once a team picks one for a document class — the
127
+ CI samples gate at 2, and that is a convention, not a law.
128
+
129
+ ## What is in here
130
+
131
+ ```
132
+ AGENTS.md instructions for an agent working in this repository
133
+ en/SKILL.md ste-writing skill, English
134
+ en/ste-lint.py English linter, 11 rule groups
135
+ en/samples/ one slop text and one clean rewrite
136
+ ru/SKILL.md utrya-writing skill, Russian
137
+ ru/ru-ste-lint.py Russian linter, 13 rule groups + typography
138
+ ru/samples/ one slop text and one clean rewrite
139
+ es/, de/, fr/ Spanish, German, French linters and samples
140
+ harness/SKILL.md separate skill: how to design an agent harness
141
+ evals/ eval harness: 14 tasks, 4 conditions, scorer, runner
142
+ examples/ five before/after pairs with measured scores
143
+ tests/ unittest suite, standard library only
144
+ tools/ JSON wrappers for the five linters
145
+ scripts/check.sh the whole gate: tests, then the sample linters
146
+ hooks/pre-commit git hook that blocks a commit above the limit
147
+ hooks/pre-push git hook that runs the whole gate before a push
148
+ .pre-commit-config.example.yaml
149
+ RESULTS.md measured scores and their limits
150
+ CONTRIBUTING.md how to contribute rules, tests, and fixes
151
+ demo.sh one-command demo: samples, findings, tests
152
+ ```
153
+
154
+ ## Quick start
155
+
156
+ ```sh
157
+ git clone https://github.com/ameobius-ai/anti-slop-kit
158
+ cd anti-slop-kit
159
+
160
+ ./demo.sh
161
+ ```
162
+
163
+ Or step by step:
164
+
165
+ ```sh
166
+ python3 en/ste-lint.py en/samples/baseline.md en/samples/ste.md
167
+ python3 ru/ru-ste-lint.py ru/samples/baseline.md ru/samples/utr.md
168
+
169
+ python3 -m unittest discover -s tests
170
+ ```
171
+
172
+ No dependencies. Python 3.9 or later. The linters use the standard library only,
173
+ because a skill directory is copied as a unit and must keep working after the copy.
174
+
175
+ ## The gate
176
+
177
+ One entry point runs everything this project checks:
178
+
179
+ ```sh
180
+ bash scripts/check.sh # tests, then the sample linters
181
+ bash scripts/check.sh tests
182
+ bash scripts/check.sh lint
183
+ ```
184
+
185
+ `.github/workflows/ci.yml` calls the same script, so a green local run and a
186
+ green CI run cannot disagree about what they checked.
187
+
188
+ GitHub Actions is disabled at the account level for the account that hosts this
189
+ repository: `POST /actions/workflows/ci.yml/dispatches` answers 422, `Actions
190
+ has been disabled for this user`. Until that is lifted the workflow never runs
191
+ here, and the local hooks are the only enforcement that exists:
192
+
193
+ ```sh
194
+ ln -s ../../hooks/pre-commit .git/hooks/pre-commit # blocks one bad file
195
+ ln -s ../../hooks/pre-push .git/hooks/pre-push # blocks a bad push
196
+ ```
197
+
198
+ The workflow file stays in the tree because a fork with Actions enabled runs it
199
+ unchanged.
200
+
201
+ ## Score
202
+
203
+ The score is violations per 100 words. Lower is cleaner.
204
+
205
+ | Text | Score | Longest sentence |
206
+ | --- | --- | --- |
207
+ | `en/samples/baseline.md` | 29.94 | 49 words |
208
+ | `en/samples/ste.md` | 0.83 | 14 words |
209
+ | `ru/samples/baseline.md` | 33.33 | 27 words |
210
+ | `ru/samples/utr.md` | 0.00 | 11 words |
211
+
212
+ Read `RESULTS.md` before you quote these numbers. Two texts per language is a
213
+ smoke test, not a benchmark. `evals/` holds the harness for a real measurement
214
+ across seven tasks per language and four prompt conditions. First live runs were
215
+ executed on 2026-08-04 (EN 23/28 cells, RU 24/28, via a local OpenAI-compatible
216
+ gateway); see `evals/README.md` for the setup and scores. No number on this page
217
+ comes from it yet. A separate lane scores the detection side:
218
+ `evals/detection_benchmark.py` runs every kit signal over a labeled AI/human
219
+ corpus (public eras via the fetchers in `scripts/`, the current generation via
220
+ `scripts/corpus_from_evals_run.py` on top of a `run.py` run); the measured
221
+ tables are in `RESULTS.md`, under the era ladder.
222
+
223
+ ## Russian is a first-class citizen
224
+
225
+ The RU side is not a translation of the EN side. English plain-language tooling
226
+ is crowded; a deterministic Russian linter is rare. It targets канцелярит,
227
+ отглагольные существительные, цепочки родительного падежа and причастные
228
+ обороты, plus typography (ёлочки, тире), against ГОСТ Р 58049-2017 §8.2.3 (УТР).
229
+ It carries its own lexicon, its own morphology handling (ё-folding, a participle
230
+ stoplist), and its own samples and scores.
231
+
232
+ ## Use it in a pipeline
233
+
234
+ The linters return exit code 1 when a file scores above the limit, so they can
235
+ gate a build:
236
+
237
+ ```sh
238
+ python3 en/ste-lint.py --max 5 docs/*.md
239
+ python3 ru/ru-ste-lint.py --max 5 --json README.ru.md
240
+ ```
241
+
242
+ Exit codes:
243
+
244
+ - `0`: every file is at or below the limit, or no limit was given
245
+ - `1`: at least one file is above the limit
246
+ - `2`: bad option or unreadable file
247
+
248
+ Git hook:
249
+
250
+ ```sh
251
+ ln -s ../../hooks/pre-commit .git/hooks/pre-commit
252
+ chmod +x hooks/pre-commit
253
+ ANTI_SLOP_MAX=3 git commit # change the limit for one commit
254
+ git commit --no-verify # skip the hook
255
+ ```
256
+
257
+ For [pre-commit](https://pre-commit.com), copy `.pre-commit-config.example.yaml`
258
+ and adjust the two paths.
259
+
260
+ ## Explain a score
261
+
262
+ A score says where the problems are, not only how many. `--explain` prints one
263
+ line per finding: line number, rule, matched text, and the suggested fix.
264
+
265
+ ```sh
266
+ python3 en/ste-lint.py --explain docs/draft.md
267
+ ```
268
+
269
+ ```text
270
+ draft.md words= 412 total= 9 per100w= 2.18 maxsent= 24
271
+ L14 passive_voice 'is handled' Name the actor. Use active voice.
272
+ L22 banned_word 'utilize' Use 'use' instead.
273
+ ```
274
+
275
+ ## Split the score
276
+
277
+ One total hides two different problems. `--breakdown` prints them apart: `slop`
278
+ counts banned words, marketing adjectives, AI filler and hedges; `cl` counts the
279
+ controlled-language mechanics, which are sentence length, passive voice,
280
+ nominalizations and participle chains.
281
+
282
+ ```sh
283
+ python3 ru/ru-ste-lint.py --breakdown ru/samples/baseline.md
284
+ python3 en/ste-lint.py --only slop docs/draft.md
285
+ ```
286
+
287
+ ```text
288
+ baseline.md words= 117 total= 39 per100w= 33.33 maxsent= 27 slop= 15 cl= 24
289
+ ```
290
+
291
+ The split changes what you do next. In `ru/samples/baseline.md`, 24 of the 39
292
+ findings are structural, so a search for banned words finds 15 and misses the
293
+ larger half. `--only slop` and `--only cl` gate on one component alone, which
294
+ helps when a document class tolerates long sentences but not marketing language.
295
+
296
+ ## GitHub Actions annotations
297
+
298
+ `--format github` emits workflow commands, so findings appear inline on pull
299
+ request diffs when the linter runs in GitHub Actions:
300
+
301
+ ```yaml
302
+ - name: Lint prose
303
+ run: python3 en/ste-lint.py --format github --max 5 docs/*.md
304
+ ```
305
+
306
+ Each finding becomes a `::warning` annotation with file, line, rule name and
307
+ suggested fix. Combine with `--max` to fail the job and annotate at once.
308
+
309
+ ## Exclude a region
310
+
311
+ The linters skip frontmatter, code blocks, inline code, link targets, bare URLs
312
+ and HTML comments. To exclude prose as well:
313
+
314
+ ```markdown
315
+ <!-- anti-slop: off -->
316
+ A quoted paragraph that you must not rewrite.
317
+ <!-- anti-slop: on -->
318
+ ```
319
+
320
+ ## What the score does not tell you
321
+
322
+ The linters match patterns. They do not read.
323
+
324
+ - A score of 0 says nothing about whether the text is correct or complete.
325
+ - Every rule can produce a false positive. Passive voice is right when the actor
326
+ is unknown. Some long sentences are clear.
327
+ - Use the score to find candidates for a rewrite, not to grade a writer.
328
+
329
+ ## Examples
330
+
331
+ See the [examples directory](examples/) for practical usage examples including:
332
+
333
+ - **Basic Analysis**: Analyze single text files
334
+ - **Batch Processing**: Process multiple files efficiently
335
+ - **Custom Patterns**: Add your own detection rules
336
+ - **Configuration**: Customize behavior with YAML
337
+ - **CI/CD Integration**: Use with GitHub Actions and pre-commit hooks
338
+
339
+ ### Quick Start
340
+
341
+ 1. Install the package
342
+ 2. Create a configuration file (optional)
343
+ 3. Run analysis on your files
344
+ 4. Review results and adjust threshold
345
+
346
+ For detailed examples with code, visit the [examples directory](examples/) or check the [documentation](docs/).
347
+
348
+ ### Common Use Cases
349
+
350
+ - **Code Review**: Check PR descriptions for AI patterns
351
+ - **Documentation**: Ensure technical writing quality
352
+ - **Content Creation**: Review blog posts and articles
353
+ - **CI/CD Pipeline**: Automatically check content quality
354
+ - **Pre-commit Hook**: Catch issues before committing
355
+
356
+ For more examples, see [USAGE.md](docs/USAGE.md).
357
+ ## Performance
358
+ Benchmarks and optimization information for anti-slop-kit.
359
+
360
+ ### Benchmarks
361
+ Performance varies by file size:
362
+ - Small files (<10KB): <0.1s, ~50MB memory
363
+ - Medium files (10-100KB): 0.1-1s, ~100MB memory
364
+ - Large files (100KB-1MB): 1-10s, ~200MB memory
365
+ - Very large files (>1MB): 10s+, ~500MB memory
366
+
367
+ ### Optimization Tips
368
+ 1. Exclude large directories (node_modules, .git, dist)
369
+ 2. Enable parallel processing for multiple files
370
+ 3. Use incremental analysis with git diff
371
+ 4. Filter by file types to skip irrelevant files
372
+ 5. Process in batches for better memory management
373
+
374
+ ### Resource Usage
375
+ - CPU: 1 core for single file, multiple cores for batch
376
+ - Memory: 50MB base + 10-50MB per file
377
+ - Disk: Read-only analysis, minimal writes
378
+
379
+ ### Performance Tuning
380
+ Configure in .anti-slop.yaml: parallel, workers, chunk_size, cache
381
+
382
+ ### Known Limitations
383
+ - Large files (>10MB) may cause high memory usage
384
+ - Complex regex patterns slow down analysis
385
+ - Network features add latency
386
+
387
+ For more details, see performance benchmarks in the test suite.
388
+ ## Security
389
+
390
+ ### Security Features
391
+
392
+ anti-slop-kit includes several security-focused features:
393
+
394
+ - **Dependency Scanning**: Automated checks for known vulnerabilities
395
+ - **Code Analysis**: Detection of potentially unsafe patterns
396
+ - **Input Validation**: Sanitization of user-provided content
397
+ - **Secure Defaults**: Conservative security settings out of the box
398
+
399
+ ### Best Practices
400
+
401
+ Follow these security best practices when using anti-slop-kit:
402
+
403
+ 1. **Keep Dependencies Updated**: Regularly update anti-slop-kit and its dependencies
404
+ 2. **Review Configuration**: Audit your `.anti-slop.yaml` for sensitive data
405
+ 3. **Use Virtual Environments**: Isolate dependencies to prevent conflicts
406
+ 4. **Monitor Logs**: Check analysis logs for suspicious patterns
407
+ 5. **Limit Permissions**: Run with minimal required permissions
408
+ 6. **Secure Configuration Files**: Don't commit secrets to version control
409
+
410
+ ### Reporting Vulnerabilities
411
+
412
+ If you discover a security vulnerability, please report it responsibly:
413
+
414
+ 1. **Do NOT open a public issue**
415
+ 2. **GitHub Security Advisory**: create a private advisory via the [Security tab](https://github.com/ameobius-ai/anti-slop-kit/security/advisories)
416
+ 3. Include detailed description and reproduction steps
417
+ 4. Allow reasonable time for response and fix
418
+
419
+ We will acknowledge receipt within 48 hours and provide a timeline for fixing the issue.
420
+
421
+ ### Security Considerations
422
+
423
+ - **Data Privacy**: anti-slop-kit processes text locally, no data sent to external servers
424
+ - **File Access**: Only reads files you explicitly specify
425
+ - **Network Access**: Minimal network requests (only for dependency updates if enabled)
426
+ - **Code Execution**: Does not execute analyzed code, only parses and analyzes
427
+
428
+ ### Dependency Security
429
+
430
+ anti-slop-kit uses Dependabot for automated dependency updates:
431
+
432
+ - Weekly security scans
433
+ - Automatic PRs for security updates
434
+ - Manual review required before merging
435
+
436
+ For production use, consider:
437
+ - Pinning dependency versions
438
+ - Running `pip-audit` regularly
439
+ - Using lock files (requirements.txt or Pipfile.lock)
440
+
441
+ ### Security Updates
442
+
443
+ Security updates are released as soon as possible after vulnerability discovery.
444
+ Subscribe to GitHub releases or watch the repository for security announcements.
445
+
446
+ For more information, see [SECURITY.md](SECURITY.md).
447
+ ## FAQ
448
+
449
+ ### General Questions
450
+
451
+ **Q: What does anti-slop-kit do?**
452
+ A: It analyzes text to detect AI-generated patterns and provides a quality score.
453
+
454
+ **Q: What languages are supported?**
455
+ A: English, Russian, Spanish, German and French — each linter lives in its `<lang>/` directory, and every clean sample is pinned in the gate.
456
+
457
+ **Q: Is it free to use?**
458
+ A: Yes, MIT license. Free for personal and commercial use.
459
+
460
+ **Q: Where can I get help?**
461
+ A: Check [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) or open a [GitHub issue](https://github.com/ameobius-ai/anti-slop-kit/issues).
462
+
463
+ ### Usage Questions
464
+
465
+ **Q: How do I install it?**
466
+ A: `pip install anti-slop-kit` (see [Installation](#installation) section above)
467
+
468
+ **Q: How do I configure it?**
469
+ A: Create `.anti-slop.yaml` in your project root (see [Configuration](#usage) section)
470
+
471
+ **Q: Can I use it with pre-commit?**
472
+ A: Yes, see [Examples](#examples) section for pre-commit hook setup
473
+
474
+ **Q: Does it work in CI/CD?**
475
+ A: Yes, see [Examples](#examples) for GitHub Actions integration
476
+
477
+ ### Technical Questions
478
+
479
+ **Q: What's the scoring system?**
480
+ A: 0-100 scale: 90-100 Excellent, 70-89 Good, 50-69 Fair, 0-49 Poor
481
+
482
+ **Q: Can I customize detection patterns?**
483
+ A: Yes, add custom patterns in configuration file (see [Examples](#examples))
484
+
485
+ **Q: How fast is it?**
486
+ A: See [Performance](#performance) section for benchmarks
487
+
488
+ **Q: Does it send data anywhere?**
489
+ A: No, all processing is local. No external API calls.
490
+
491
+ ### Troubleshooting
492
+
493
+ **Q: Installation fails?**
494
+ A: See [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for common solutions
495
+
496
+ **Q: Too many false positives?**
497
+ A: Adjust strictness level or add exclusions in configuration
498
+
499
+ **Q: Running too slow?**
500
+ A: See [Performance](#performance) for optimization tips
501
+
502
+ For more questions, see [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) or open a [GitHub issue](https://github.com/ameobius-ai/anti-slop-kit/issues).
503
+ ## Contributing
504
+
505
+ See `CONTRIBUTING.md` for the ground rules (standard library only, no shared
506
+ modules between linters, a test in the same commit as a rule change) and how to
507
+ add a banned word or report a false positive.
508
+
509
+ ## Sources
510
+
511
+ - ASD-STE100 Simplified Technical English, Issue 9 (15 January 2025), ASD and the
512
+ STEMG: https://asd-ste100.org. The specification is copyrighted. This repository
513
+ reproduces the mechanics and no part of the text. Request a free copy from ASD.
514
+ - GOST R 58049-2017, clause 8.2.3, controlled Russian technical language.
515
+ - The English skill follows the approach shown in
516
+ https://github.com/woosal1337/blog/tree/main/videos/ep01-the-cure-for-ai-slop.
517
+ The skill and the linter here are written from scratch and share no code with it.
518
+ - https://github.com/talkstream/ru-text is a larger Russian rule set (about 1044
519
+ rules) and works well next to this kit.
520
+ - `harness/SKILL.md` is built from
521
+ https://github.com/ai-boost/awesome-harness-engineering (CC0) and the sources it
522
+ lists.
523
+
524
+ ## License
525
+
526
+ MIT. See `LICENSE`.
527
+
528
+
529
+ ## Acknowledgments
530
+
531
+ ### Contributors
532
+
533
+ Thanks to all contributors who have helped improve anti-slop-kit:
534
+
535
+ - [@ameobius-ai](https://github.com/ameobius-ai) - Project creator and maintainer
536
+ - Community contributors - Thank you for your PRs, issues, and feedback!
537
+
538
+ ### Dependencies
539
+
540
+ anti-slop-kit is built on the shoulders of giants:
541
+
542
+ - [Python](https://www.python.org/) - Programming language
543
+ - [pytest](https://pytest.org/) - Testing framework
544
+ - [PyYAML](https://pyyaml.org/) - YAML parsing
545
+ - [GitHub Actions](https://github.com/features/actions) - CI/CD platform
546
+ - [mypy](http://mypy-lang.org/) - Static type checker
547
+ - [black](https://black.readthedocs.io/) - Code formatter
548
+ - [isort](https://pycqa.github.io/isort/) - Import sorter
549
+ - [flake8](https://flake8.pycqa.org/) - Linting
550
+
551
+ ### Inspiration
552
+
553
+ This project was inspired by:
554
+
555
+ - [Write Good](https://github.com/btford/write-good) - Naive linter for English prose
556
+ - [Hemingway Editor](https://hemingwayapp.com/) - Writing clarity tool
557
+ - [Grammarly](https://www.grammarly.com/) - Writing assistant
558
+ - [Proselint](https://github.com/amperser/proselint/) - Linter for prose
559
+
560
+ ### Special Thanks
561
+
562
+ - The open source community for amazing tools and libraries
563
+ - Everyone who has reported issues and suggested improvements
564
+ - Technical writers and editors who provided feedback on pattern definitions
565
+
566
+
567
+ ## Citation
568
+
569
+ If you use anti-slop-kit in your research, please cite:
570
+
571
+ ```
572
+ ameobius-ai. (2026). anti-slop-kit: Text Quality Analysis Toolkit.
573
+ https://github.com/ameobius-ai/anti-slop-kit
574
+ ```
575
+
576
+
577
+ ## Related Projects
578
+
579
+ Other tools for improving writing quality:
580
+
581
+ - **[Write Good](https://github.com/btford/write-good)** - Naive linter for English prose
582
+ - **[Proselint](https://github.com/amperser/proselint)** - Linter for prose
583
+ - **[Hemingway Editor](https://hemingwayapp.com/)** - Writing clarity tool
584
+ - **[Grammarly](https://www.grammarly.com/)** - AI writing assistant
585
+ - **[LanguageTool](https://languagetool.org/)** - Grammar and style checker
586
+
587
+
588
+ ## Roadmap
589
+
590
+ ### Shipped (ahead of the Q4 plan)
591
+
592
+ - Custom rule engine for user-defined patterns (`tools/aslint/custom_rules.py`,
593
+ `--rules rules.yaml`)
594
+
595
+ ### Current Focus (Q3 2026)
596
+
597
+ - Improve test coverage to 90%+ (branch coverage tracked via `.coveragerc`)
598
+ - Create web interface for interactive analysis
599
+
600
+ ### Planned Features (Q4 2026)
601
+
602
+ - IntelliJ IDEA plugin
603
+ - REST API for remote analysis
604
+ - Batch processing optimizations
605
+
606
+ ### Future Vision (2027)
607
+
608
+ - Real-time analysis mode
609
+ - Integration with popular writing tools
610
+ - Enterprise features (team dashboards, reporting)