Metadata-Version: 2.4
Name: content-gate-lite
Version: 0.1.0
Summary: The substance gate from Content Gate Kit: block the post that says nothing, before it publishes.
Author: Stanley
License: Content Gate Kit — Single Developer Licence
        
        You may use this code in your own projects and in projects you build for
        clients, commercially, with no limit on the number of projects.
        
        You may modify it freely.
        
        You may not resell or redistribute the source as a competing product, kit,
        template pack or course.
        
        Provided as is, without warranty. The author is not liable for anything
        published or not published as a result of using it.
        
Project-URL: Homepage, https://zxcvortex43.gumroad.com/l/content-gate-kit
Project-URL: Source, https://github.com/zxcv0952290292-lang/content-gate-kit-free
Keywords: content,publishing,linter,quality,automation
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Dynamic: license-file

# 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.

```bash
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](https://zxcvortex43.gumroad.com/l/content-gate-kit)**

---

## 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

```python
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:

```bash
python3 cli.py --file draft.json && ./publish.sh
```

## Config

```json
{ "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.
