model-wtf
Compliance as code for Model W projects.
Why
A GDPR register, a rights matrix and a threat model are descriptions of what the code does. Written by hand they are wrong the week after; written once, they never meet the pull request that breaks them.
model-wtf derives them from the repository instead. It introspects the
application (Django models and URL confs, task registries, SvelteKit
routes) into inventories — data items, the touchpoints that handle them,
where the data flows, the stores it lives in — and lets humans or agents
record the judgements the code cannot carry (is this field personal? does
this endpoint serve the subject or the staff? is that threat mitigated?)
in a SQLite database committed next to the code. Everything downstream — the Art. 30
register, rights coverage, the weighed findings — is computed from that.
A gate runs on every pull request and fails the change that introduces
a gap; a challenger agent reads the diff and re-opens the reviews it
undermines. The to-do list is, at all times, exactly the distance between
the code and its declarations.
How
In the root of a Model W repository (a snow.yml, or a .model-wtf.yml),
with an OpenRouter key in OPENROUTER_API_KEY — or
a Scaleway IAM key in SCALEWAY_SECRET_KEY, plus SCALEWAY_INFERENCE_ENDPOINT
for a dedicated inference
deployment of your own:
uvx model-wtf compliance init # compliance.db, snow.yml blocks, CI workflow
uvx model-wtf compliance data auto-review # agents classify every field, model by model
uvx model-wtf compliance touchpoints auto-review # and declare what each route / task / screen does
uvx model-wtf compliance activities list # the register of processing activities, from the code
uvx model-wtf compliance check # what is still open — and the gate on your next PR
Nothing is overwritten, what the agents cannot know is left as !todo
for a human, and every row they wrote is queryable and diffable. Without
an API key the same commands work by hand (data review, touchpoints set-data, threats stamp).
Learn more
- The cycle — the model in one page: data, touchpoints, flows, activities, threats, the gate.
- Add model-wtf to a project · My PR failed the gate · Answer a threat finding · Add a third-party service · Run the reviewer swarm · Read the register
- Reference: CLI · MCP tools · file schemas · threat catalogue
Misc
- Install for good:
uv add --dev model-wtf, thenuv run model-wtf …. - The gate in CI:
uses: ModelW/wtf@v1(see action.yml;initwrites the workflow). - Contributing and releasing: docs/contributing.md.
- Changes: CHANGELOG.md. License: MIT.
Metadata
Release files for model-wtf 1.2.2
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 |
|---|---|---|---|---|
| model_wtf-1.2.2.tar.gz | 374.4 kB | With provenance | Details for model_wtf-1.2.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| model_wtf-1.2.2-py3-none-any.whl | Python 3 | none | any | Details for model_wtf-1.2.2-py3-none-any.whl |
Total release size: 891.2 kB
Release files / model_wtf-1.2.2.tar.gz
| Download URL | model_wtf-1.2.2.tar.gz |
|---|---|
| Size | 374.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b911dd1cc122480dc7b6f639a285aa04a7b86c130f61393d10860c2f8b2c15f6
|
|
BLAKE2b-256 checksum How to use checksums |
fbcdc0eaa8a441f37efc0bbd6dfe60a521de35fd6d917bd91bb079985172c857
|
| 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 17, 2026.
Transparency logRelease files / model_wtf-1.2.2-py3-none-any.whl
| Download URL | model_wtf-1.2.2-py3-none-any.whl |
|---|---|
| Size | 516.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fe4ab9b6f2a68ea13864925d276503062abb7686c65cd29026cc9e93bcacfb4b
|
|
BLAKE2b-256 checksum How to use checksums |
b1edde0212eabfeaf9b268e1588b695730a45e9a439492a9b68f02b103c83e09
|
| 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 17, 2026.
Transparency logSecurity for model-wtf 1.2.2
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
All 2 files in this release have been uploaded with provenance metadata.
Attestation for model_wtf-1.2.2.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 17, 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.