v1.2.0rc1
Pre-release
Pre-release
·
7 commits
to develop
since this release
- Storage moves from YAML to SQLite. Every declaration — the app, the
parties, data overrides and reviews, touchpoint declarations, stores,
activities, threat stamps, the findings register, custom vocabularies
and actors — lives in onecompliance.dbat the repository root; the
compliance/folders are gone andsnow.yml'scompliance:block only
names the discovery engine (diris dropped). The database is tuned to
diff well (WAL, no auto-vacuum, a checkpoint on close) andinitadds
its transient files to.gitignore. Cross-references (hosts, data refs,
transfers, recipients, stamps, locks) are normalised tables queried with
SQL rather than loaded and joined in Python. No migration from the YAML
layout: it is a new system. - The
CODEOWNERSstep ofinit(and itscheckdiagnostic and flags)
is removed. - Marker subjects are
<record>#<field>(parties/acme#address,
activities/ordering#retention,app#description) instead of file
names. - The library takes the repository from a process-wide container set
once per command (--root); noroot=/shared=arguments. - Duplicate parties are refused.
party_add(andinit) compare the
new party with every declared one — normalised name (case, accents,
punctuation, legal forms and a typo or an extra word ignored), shared
registrable domain or setting name of the website /hosts, respelled
id — and fail with the matching id when one looks the same. A party
that names a store of the project (Sentry, "SMTP mail server", a
host ofEMAIL_HOST) is refused too: that is a store write. The
refusal is final for agents;distinct_fromis set by a human only.
checkreports coexisting lookalikes as aparty-duplicateerror. - Duplicate stores are refused the same way:
store_addcompares the
new store with the unit's visible ones (shared host / settings name,
alike name, slug or config backend) and fails with the slug to reuse;
checkreports coexisting lookalikes asstore-duplicate. partiesCLI:list,show,add,set,remove [--force],
merge ... --into,to-store <id> <unit:slug>(a party that was
infrastructure becomes store writes),to-flow <id>(a party that was
the project itself: its transfers go, the derived call stays),
distinct,duplicates.auto-reviewnarrates each write once: the line comes from the activity
log the MCP server appends to, no longer also from the tool-call stream
(activities, parties and declarations were printed twice). Stores,
undeclared-flow reports and challenges get a line too.- A reported sink that names a store the way the party guard sees it
(sdk-sentry-sdk, "Sentry error tracker", "the mail server") resolves
to that store, so declaring the store write closes the report. Before,
the sink stayed an unresolvable transfer:party_addrefused the party
(it IS the store) and the touchpoint could never leave pending. - A relative
fetch("/api/x")in a SvelteKit route is linked to the
route of the project that serves it (acallsedge, like a generated
client call) and leaves the outboundfetches: the project's own
endpoints never show up as an unknown host to declare a party for.
storesgainsadd,set,remove,merge,distinct. - Outgoing email and error monitoring are built-in stores. Every
Django unit has amail-defaultstore (typemail) claiming
EMAIL_BACKEND/EMAIL_HOST, and anerrors-sentrystore (type
monitoring) claimingsentry_sdk/SENTRY_DSNwherever the SDK is
installed; asend_mail/EmailMessage/email_usercall, or a
capture_exception, is a write to them. How mail is sent and where
events land (cloud, self-hosted) is infrastructure, so no distinction is
made between backends: no moresmtp-*stores or Sentry / mail provider
parties declared by agents. load_declarationsreads the parties even when theapprow is
missing, soparties listworks beforeinit.- Fix: the unit's introspection no longer inherits
VIRTUAL_ENV/
PYTHONPATH/ uv and poetry variables from the process running
model-wtf. Underuv run model-wtf,poetry runin the unit honoured
ourVIRTUAL_ENVand imported the project in model-wtf's venv
(No module named 'celery'), anduv runcreated a stray.venvand
uv.lockin the unit. - Schema migrations:
compliance.dbcarries its schema version and is
upgraded step by step (model_wtf.compliance.migrations) when a newer
release opens it; a file from a newer release is refused.