Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
80ae354
sales: order the machine around one plan, one price ladder, one corpu…
Jul 31, 2026
85199db
fix(claims): retention and email alerts were both sold wrong — correc…
Jul 31, 2026
d9ce3a9
ops: give the sales machine a spine in the repo, and one target inste…
Jul 31, 2026
b362970
fix(privacy): stop handing visitor IPs to Google on pages we serve
Jul 31, 2026
6859fa5
tools: rebuild the retro-scan — the pre-sales measurement, missing fr…
Jul 31, 2026
53a1fd7
plan: confirm master CI is green again, so FACTS F3 is quotable
Jul 31, 2026
039f7d3
ops(E-6): pin the denominator at 16 and record how agent adoption is …
Jul 31, 2026
2cf7940
ops(SEEN): append four corrections from today rather than rewriting h…
Jul 31, 2026
54360cf
ops(E-6): denominator back to 20, on a stricter bar, plus the measure…
Jul 31, 2026
c92bb16
ops(E-6): the template inverts for a prospect who already instruments…
Jul 31, 2026
3cab263
ops(E-6): drafts for prospects #2 and #3, hooks verified against the …
Jul 31, 2026
05a4755
tools: build the outbound mail channel, so sending stops being a click
Aug 1, 2026
5a61298
ops(E-6): first three sends confirmed in:sent — experiment is live, 3/20
Aug 1, 2026
63a4fd6
ops(SEEN): sprostowanie — to tinyash miał rację, fałszywy claim był n…
Aug 1, 2026
ac2aea1
ops(E-6): four more prospects written, hooks re-verified from source
Aug 1, 2026
3f278f3
ops(E-6): jankiewi.cz stays the sender — bgml.ai cannot send at all
Aug 1, 2026
0b026ac
ops(E-6): 7 of 20 sent and verified in:sent
Aug 1, 2026
6b5632b
sitemap: dodaje stronę odpowiedzi team-guardrails (kupiec-ZESPÓŁ, bra…
Aug 1, 2026
1696930
ops(E-6): August is a threat to the reading, and the rule for it is w…
Aug 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,12 @@ build/
.cacheback/
scratchpad_fpguard/
scratchpad/

# Outbound mail: recipient addresses and credentials never enter this public
# repo (playbook rule 9). The mailer keeps both outside it by default —
# ~/.config/gatecat/mail.toml and ~/.local/state/gatecat/. These patterns are
# a second line of defence for the day someone drops a mail file in by hand.
*.mail
mail.toml
outbox/
sent.jsonl
5 changes: 5 additions & 0 deletions FACTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Every number gate.cat uses publicly, with its source and allowed wording.
| F13 | PyPI download proxy | 2,019 downloads excluding known mirrors in the trailing-month API window | `https://pypistats.org/api/packages/gate.cat/recent` and `METRICS.log`, read 2026-07-13 | 2026-07-13 | "2,019 PyPI downloads excluding known mirrors in the measured trailing window; this clears the 100-install proxy" | "2,019 users", "2,019 unique installs", or treating downloads as unique people |
| F13a | PyPI download proxy (re-pinned) | **2,662** excluding known mirrors / **9,611** including mirrors, over `2026-07-03 … 2026-07-28` — which is the package's entire published life, not a rolling window carved out of a longer history | `https://pypistats.org/api/packages/gate.cat/overall` summed per category, cross-checked against `/recent` (`last_month=2662`, `last_week=134`, `last_day=0`); both read 2026-07-29 | 2026-07-29 (supersedes F13 for current copy; F13 stays valid in dated/version-scoped contexts) | "2,662 PyPI downloads excluding known mirrors between 3 and 28 July 2026 — downloads, not users; mirrors, CI and bots are inside that figure" | "2,662 users"; "2,662 installs"; quoting the 9,611 figure without saying it includes mirrors; implying a steady-state monthly run-rate from a package's first month |

| F14 | Cloud retention | **free 30 days · solo 90 · team 365 · business 1,095 (3 years)** — enforced server-side on read-back, not a policy statement | `products/cloud/cloud_server.py`, `TIERS` dict; `entitlement()` returns `retention_days` per tier | 2026-07-31 (read from code) | "retention is enforced per tier — 30 days free, 90 days Solo, 365 days Team, 3 years Business" | **a flat "12 months" for all tiers — that wording is retired.** It was true only for Team: it understated Business and overstated Solo by nine months. Quoting a retention figure without naming the tier it applies to |
| F15 | Alert delivery | an append-only **alert feed** per account, served at `GET /v1/alerts`, gated on the `alert_push` entitlement (Solo and up). **No email is sent — the product contains no mail-sending integration of any kind.** | `products/cloud/cloud_server.py` (`ALERTS_DIR`, `store_alert`, `read_alerts`, the `/v1/alerts` route and its `tier_has_feature(tier, "alert_push")` guard); verified by absence: no `smtplib`/SendGrid/Resend/Postmark/Mailgun/SES client anywhere in `products/` or `gatecat/` | 2026-07-31 (read from code) | "an alert feed you poll or read in the dashboard; email delivery is on the roadmap and is not in the price yet" | **"email alerts" / "push & email alerts" — retired 2026-07-31.** Sold on PRICING.md and the landing page from launch until 2026-07-31 while no mail path existed. Any wording implying alerts reach the customer without the customer fetching them |

## Honest-limits block (must accompany capability claims)

- The gate is certain only about what it **blocks**. An unmatched action is *unchecked*, not *safe*.
Expand All @@ -48,3 +51,5 @@ Every number gate.cat uses publicly, with its source and allowed wording.
| 21 / 28 / 38 / 69 policies | **71 defaults, 73 presets** — F10 | successive stale snapshots; 71/73 verified on 0.4.18 |
| 0.4.10 / 0.4.11 / 0.4.16 / 0.4.17 as "current" | **0.4.18** — F9 | superseded releases |
| "1 known bypass gap" / 65-of-65 / 71-of-71 bypass suite | **178/178 caught, 3 named gaps (2 product-silent)** — F4 | suite grew; the single-gap phrasing also named the wrong gap |
| "Retention: 12 months" (unscoped) | **per-tier 30 / 90 / 365 / 1,095 days** — F14 | true for Team only; overstated Solo by nine months. Found 2026-07-31 while assembling the DPA — the code had always said 90 |
| "email alerts" / "push & email alerts" | **alert feed at `GET /v1/alerts`; no email delivery** — F15 | sold on PRICING.md and the landing from launch to 2026-07-31 with no mail integration in the product. This is the first retired row that was a *capability* claim rather than a count — same failure mode, higher cost: a customer could have paid for it |
163 changes: 163 additions & 0 deletions LICENSE-CORPUS
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
gate.cat Corpus & Benchmark Licence
Version 1.0 — effective 2026-07-31

Copyright (c) 2026 Bogumił Jankiewicz / BGML. All rights reserved.

-------------------------------------------------------------------------------
0. WHY THIS LICENCE EXISTS, IN ONE PARAGRAPH
-------------------------------------------------------------------------------

The gate.cat engine is Apache-2.0 and stays Apache-2.0 forever. Someone could
rebuild that engine in a weekend. What they could not rebuild in a weekend is
the adjudicated evaluation corpus: hundreds of thousands of real agent commands
run through a full pipeline, with every catalog-flagged disagreement inspected
by hand and written down. That corpus is an evaluation asset, and evaluation
assets are what other people's agent platforms need in order to show their own
safety numbers. So the corpus is licensed separately from the engine.

This licence is deliberately generous about the one thing that matters most to
us — that anyone can check our published claims for themselves, for free, with
no permission and no registration. It is deliberately restrictive about one
other thing — repackaging the corpus as somebody else's benchmark.

-------------------------------------------------------------------------------
1. WHAT THIS LICENCE COVERS ("the Corpus Materials")
-------------------------------------------------------------------------------

(a) scripts/corpus_million.py
(b) scripts/corpus_million_globaldedup.py
(c) scripts/corpus_eval.py
(d) results/million_recall_2026-07-08.json
(e) results/million_recall_2026-07-08_passed.json
(f) results/million_recall_2026-07-28.json
(g) any future adjudicated corpus run, benchmark release, danger-class
catalog extension or regression pack that this repository or its
maintainer publishes and marks as Corpus Materials.

-------------------------------------------------------------------------------
2. WHAT THIS LICENCE DOES **NOT** COVER
-------------------------------------------------------------------------------

Everything else in this repository remains under the Apache License 2.0 (see
LICENSE). That explicitly and permanently includes:

- the entire `gatecat/` package — the veto engine, all 71 default policy
walls (`gatecat/integrations/policies.py`), the reproducible bypass suite
(`gatecat/integrations/bypass_suite.py`), the Claude Code hook and every
framework adapter. This is the product you install with `pip install
gate-cat`. It is free forever, complete, and nothing in it is held back,
rate-limited or downgraded by this licence. That promise is load-bearing
and this licence does not touch it.
- `scripts/recall_danger_axis.py` and `scripts/corpus_recall.py` — the
43-class danger catalog and its runner. These stay Apache-2.0 on purpose:
they are how any reader reproduces our headline recall claim with nothing
but `pip install gate-cat` and no datasets. A claim nobody can re-run is
a rumour, and we would rather be checkable than clever.

-------------------------------------------------------------------------------
3. WHAT YOU MAY DO WITHOUT ASKING (the verification grant)
-------------------------------------------------------------------------------

Permission is granted, free of charge, to any person obtaining a copy of the
Corpus Materials, for the following purposes:

3.1 READ and study them, in whole or in part, for any reason.

3.2 RUN them, including re-running an entire corpus measurement from the
public upstream datasets, in order to verify, reproduce, audit,
falsify or dispute any claim gate.cat has published.

3.3 PUBLISH the results of doing so — including results that contradict
ours, including in a competitor's marketing, including without
contacting us first. We do not require notice, approval, embargo or
right of reply. If our numbers are wrong we would rather read it in
public than not know.

3.4 QUOTE excerpts of the Corpus Materials in journalism, academic work,
security research or public discussion, with attribution.

3.5 INTERNALLY EVALUATE your own systems against the Corpus Materials
inside your own organisation, provided the results stay internal.

No registration, no key, no email address, no click-through. Sections 3.1
through 3.5 survive any future version of this licence for the Corpus
Materials as published at the time you obtained them.

-------------------------------------------------------------------------------
4. WHAT REQUIRES A COMMERCIAL LICENCE
-------------------------------------------------------------------------------

The following require a separate written licence from the copyright holder:

4.1 REDISTRIBUTION of the Corpus Materials, or of any dataset derived from
them, whether standalone, bundled, mirrored or as part of a larger work.

4.2 INCORPORATION into another evaluation suite, benchmark, leaderboard,
certification scheme, dataset or product offered to third parties.

4.3 TRAINING, fine-tuning or distilling any machine-learning model on the
Corpus Materials, or on outputs derived from them.

4.4 EXTERNAL-FACING EVALUATION — using the Corpus Materials to produce
safety, recall or coverage figures that you publish, or show to your
customers, investors, auditors or regulators, about a product or
service you offer. (Publishing figures about *gate.cat* is section 3.3
and is always free.)

4.5 SERVICE PROVISION — offering evaluation, benchmarking, certification or
audit services to third parties, where the Corpus Materials form part
of what you deliver.

To licence any of the above: bogumil@bgml.ai, subject line "corpus licence".
Typical shapes are an annual corpus licence, or a one-off "run your agent
through our benchmark" engagement. Academic and non-commercial research use
under 4.1–4.4 is granted on request and we have not yet refused anyone.

-------------------------------------------------------------------------------
5. WHAT THIS LICENCE HONESTLY CANNOT DO
-------------------------------------------------------------------------------

This licence takes effect 2026-07-31 and is not retroactive. Every version of
the files listed in section 1 that was published in this repository before that
date was published under the Apache License 2.0, and the Apache-2.0 grant is
irrevocable for those versions. Anyone who obtained them under Apache-2.0 keeps
Apache-2.0 rights to those exact versions, including the right to redistribute
them. Git history preserves those versions and we are not rewriting it.

We are stating this plainly rather than quietly, because a licence notice that
overreaches its own effective date is the kind of thing a buyer's counsel finds
in ten minutes, and finding it would cost us more than the clause could ever
be worth. Going forward is the only direction this licence can work in, and
going forward is enough.

-------------------------------------------------------------------------------
6. ATTRIBUTION
-------------------------------------------------------------------------------

When exercising the section 3 grant, cite as:

gate.cat evaluation corpus, run of <DATE>, <ARTIFACT FILENAME>,
https://github.com/BGMLAI/gate.cat

Every corpus-derived number must carry its measurement date and, for
HuggingFace sources, the dataset repo id *and* the split name — upstream renames
splits without notice, and a corpus figure quoted bare is not a claim. This is
the same rule we hold ourselves to in FACTS.md, for the same reason: we shipped
a 23.8% overcount for three weeks because that rule was missing.

-------------------------------------------------------------------------------
7. NO WARRANTY
-------------------------------------------------------------------------------

THE CORPUS MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY ARISING FROM, OUT OF OR IN CONNECTION WITH THE CORPUS MATERIALS OR
THEIR USE.

The Corpus Materials are derived from public upstream datasets, each under its
own licence, and this licence grants no rights in that upstream data. Section 1
covers our harness, our adjudication and our derived artifacts — not the
underlying third-party records. Upstream provenance is recorded in RECALL.md
and in each artifact's header.
44 changes: 44 additions & 0 deletions LICENSING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Licensing map

**Short version: the thing you install is Apache-2.0 and always will be. The
evaluation corpus is licensed separately, and you can still re-run it to check
our numbers for free.**

Pinned 2026-07-31.

| What | Licence | Why |
|---|---|---|
| `gatecat/` — the whole pip package: veto engine, 71 default policy walls, the reproducible bypass suite, Claude Code hook, framework adapters, CLI dashboard, local reports | **Apache-2.0** ([LICENSE](LICENSE)) | This is the product and the distribution. Free forever, complete, nothing held back. Changing this would trade the only channel we have for revenue we do not have yet. |
| `scripts/recall_danger_axis.py`, `scripts/corpus_recall.py` — the 43-class danger catalog and runner | **Apache-2.0** | These are how you reproduce our headline recall claim with `pip install gate-cat` and no datasets. A claim nobody can re-run is a rumour. |
| `scripts/corpus_million*.py`, `scripts/corpus_eval.py`, `results/million_recall_*.json` — the large-corpus harness and its adjudicated outputs | **Corpus & Benchmark Licence** ([LICENSE-CORPUS](LICENSE-CORPUS)) | Somebody can rebuild the engine in a weekend. Nobody rebuilds 826,644 adjudicated real agent commands in a weekend. |
| `products/`, `ops/`, `docs/legal/`, `docs/sales/` — Cloud service code, internal operations, commercial templates | Not distributed; all rights reserved | Never shipped in the package. Public in the repo for transparency, not as a grant. |

## What changed on 2026-07-31, and what did not

**Did not change:** anything you can `pip install`. The free gate is exactly as
free and exactly as complete as it was yesterday. If you use gate.cat, this
change is invisible to you and is meant to be.

**Changed:** the adjudicated corpus artifacts moved out from under Apache-2.0
going forward, so they can be licensed to the people who actually want them —
agent-platform and sandbox vendors who need an evaluation corpus to show their
own safety numbers.

**Explicitly preserved:** you may still read, run, re-run and *publish results
that contradict ours*, for free, without asking. That grant is section 3 of
[LICENSE-CORPUS](LICENSE-CORPUS) and it is not a courtesy — a security vendor
whose numbers cannot be checked has nothing to sell. We would rather read that
we are wrong than not know.

**Not retroactive, and we say so in the licence itself.** Versions published
before 2026-07-31 went out under Apache-2.0 and keep Apache-2.0 rights. Git
history is not being rewritten. See section 5 of [LICENSE-CORPUS](LICENSE-CORPUS)
for why we wrote that down rather than leaving it ambiguous.

## Commercial corpus licence

Redistribution, inclusion in another benchmark, model training, publishing your
*own* product's safety figures measured against it, or reselling evaluation
services on top of it — those need a licence: **bogumil@bgml.ai**, subject
"corpus licence". Academic and non-commercial research use is granted on
request.
36 changes: 36 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
gate.cat
Copyright (c) 2026 Bogumił Jankiewicz / BGML

This product includes software developed by Bogumił Jankiewicz / BGML,
licensed under the Apache License, Version 2.0 (see LICENSE).

-------------------------------------------------------------------------------
MIXED LICENSING — read LICENSING.md
-------------------------------------------------------------------------------

The `gatecat/` package — everything installed by `pip install gate-cat`,
including the veto engine, all default policy walls, the reproducible bypass
suite, the Claude Code hook and every framework adapter — is licensed under the
Apache License 2.0 and is not affected by the notice below.

A separate set of files — the large-corpus evaluation harness and its
adjudicated result artifacts, listed in section 1 of LICENSE-CORPUS — is
licensed under the gate.cat Corpus & Benchmark Licence v1.0 (LICENSE-CORPUS)
with effect from 2026-07-31. That licence permits reading, running, reproducing
and publicly disputing our published claims free of charge and without
registration; it requires a commercial licence for redistribution, inclusion in
another benchmark, model training, or publishing third-party product figures
measured against it.

The Corpus & Benchmark Licence is not retroactive. Versions of those files
published before 2026-07-31 were published under the Apache License 2.0 and
remain available under it.

-------------------------------------------------------------------------------
UPSTREAM DATA
-------------------------------------------------------------------------------

The evaluation corpus is derived from public datasets published by third
parties, each under its own licence. No rights in that upstream data are
granted by either licence above. Provenance — dataset repo ids, split names and
measurement dates — is recorded in RECALL.md and in each result artifact.
Loading