Content Gate Kit — free sample
The check no prose linter does: did I already publish this, in different words?
Vale, textlint, proselint and alex all lint one document in isolation. None of them can see that today's draft has the same skeleton as last Tuesday's post. That is the gate people actually need once they publish on a schedule.
This repo ships the substance gate, working and unrestricted, so you can judge the code before paying for the rest. The similarity gate — the one nothing else does — is in the full kit.
git clone https://github.com/zxcv0952290292-lang/content-gate-kit-free
cd content-gate-kit-free
python3 cli.py --demo
=== 01_blocked_no_substance.json -> BLOCKED
- no takeaway: one concrete thing the reader can do or check
- opening is a conclusion, not a hook: 'Everyone should start saving money.'
- nothing checkable in the whole piece (needs >=2 numbers/rules/named things)
=== 04_pass.json -> PASS
No dependencies. No API key. No model call. No network. Python 3.8+. Under a millisecond.
How this relates to Vale
Use both. They do not overlap.
| Vale / textlint / proselint | Content Gate Kit | |
|---|---|---|
| Scope | one document at a time | this draft vs everything you already published |
| Catches "I wrote this last week in other words" | no | yes — the whole point |
| House style, banned words, passive voice | yes, and better than this | no |
| Language | English-centric | English and CJK (character 2-grams, not word tokens) |
| Price | free | free sample here, $29 for all four gates |
If you want a style guide enforced, install Vale — it is free, excellent, and this is not trying to replace it. If your problem is that everything you publish is starting to feel the same, no linter solves that.
The four gates
| Gate | Blocks | In this repo |
|---|---|---|
| Substance | Nothing to take away. A number with no source. An opening that is a slogan instead of a hook. | ✅ yes, fully working |
| Similarity | The post you already published — in different words. Compares wording overlap, skeleton (opening shape, ending shape, line rhythm, filler phrases) and scene. | full kit |
| Tone | Snark, and the "X is more impressive than Y" pattern. A banned-word list never catches that — the next draft writes "more impressive than wagyu". | full kit |
| Style | Punctuation normalised to your house habits. | full kit |
Full kit — four gates, the n8n workflow, and the config presets: $29 on Gumroad
Why these rules and not other rules
Every rule was written after something real went out wrong, and the comment above it says which. That is the part you cannot get from a linter: not "here are some quality heuristics" but "this exact sentence shape shipped nine smug replies, six of which were identical in structure."
A rule without its incident is the first thing someone deletes. So they all kept their incidents.
Usage
from gatekit import check
r = check(
text=draft,
takeaway="one concrete thing the reader can do",
source="where the numbers came from",
)
r["pass"] # bool
r["reasons"] # list of strings, empty when it passes
Shell / CI — exit code 0 passes, 1 blocks:
python3 cli.py --file draft.json && ./publish.sh
Config
{ "takeaway_min": 12, "hard_min": 2, "require_layers": false }
require_layers is strict mode. It additionally demands an operating layer (a verb plus a place the reader can open — "read the Total column") and a numbers layer (the difference converted into a figure — 0.22% vs 0.57%, that is 2.6x).
If a gate blocks the same good draft three times, loosen it. A rule that makes you rewrite good work into compliance is worse than the problem it prevents.
What this is not
- Not a grammar or plagiarism checker
- Not an AI-detector
- It does not call a model, so it cannot judge whether a claim is true. It checks that a claim has a source attached, not that the source is right.
Licence
See LICENSE.txt. Use it in your own and your clients' projects. Do not resell the source as a competing product.
Metadata
Release files for content-gate-lite 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| content_gate_lite-0.1.0.tar.gz | 6.5 kB | With provenance | Details for content_gate_lite-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| content_gate_lite-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for content_gate_lite-0.1.0-py3-none-any.whl |
Total release size: 13.9 kB
Release files / content_gate_lite-0.1.0.tar.gz
| Download URL | content_gate_lite-0.1.0.tar.gz |
|---|---|
| Size | 6.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d3de1417ec7a9460da515393a0210a68864fd07ef20c211537ee676997dae020
|
|
BLAKE2b-256 checksum How to use checksums |
22eeb442b3be104641fe85e8b428fda148f742c811a63e7b663450905b712bf5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / content_gate_lite-0.1.0-py3-none-any.whl
| Download URL | content_gate_lite-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e3cb1561c05a9c6ffd3ca4ce2f94f7ce22ce21e77b1c9edb054836cf5bebe697
|
|
BLAKE2b-256 checksum How to use checksums |
dad0963662f69a12074e64df8ace0f340c46c956d4168c9af5d359b095ee8eff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logSecurity for content-gate-lite 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for content_gate_lite-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.