Every record in COMPASS — a fact, a rule, a decision, a hypothesis, a
process step — is shaped by the same schema. This page lists its fields;
see Concepts for what the shapes mean in practice.
Subjekt (subject)
| Field |
Type |
Notes |
typ |
betrieb|athlet|klient|mandant |
Required. |
ref_id |
string, integer, or null |
Optional external reference. |
Sache
| Field |
Type |
Notes |
slug |
string, pattern ^[a-z0-9][a-z0-9-]{1,80}$ |
Required. Stable, like a reference number. |
titel |
string |
Required. |
frage |
string |
Required. The question this Sache answers. |
bereich |
string or null |
Area, used for visibility filtering. |
stufe |
string or null |
Slug of a level this tenant defines (GET /sachen-stufen). Lower levels may make a case for an upper level, never the reverse. No fixed vocabulary — empty until the tenant defines its levels. |
eltern_slug |
string or null |
Parent Sache. |
subjekt_typ |
betrieb|athlet|klient|mandant |
|
Aussage (statement)
| Field |
Type |
Notes |
id |
integer or string |
|
sache |
string |
Required. |
subjekt |
Subjekt |
|
art |
fakt|regel|entscheidung|hypothese|prozessschritt |
Required. lehre is not a value here — a lesson is a separate record (compass_lehren), not an Aussage kind; see Concepts. |
text |
string, max 600 chars |
Required. One or two sentences, the claim only. |
gilt_seit |
date-time or null |
Since when it holds. |
gilt_bis |
date-time or null |
Until when — null means still current. |
beobachtet_am |
date-time or null |
When the underlying fact was actually observed. |
erfasst_am |
date-time |
When COMPASS recorded it. |
herkunft |
gemessen|gesagt|abgeleitet|entschieden|evidenz |
Required. How it was obtained: measured, said, derived, decided, or evidence. |
quelle |
string or null |
Episode, click, command, study DOI, PR. |
sicherheit |
number 0–1 or null |
|
ort |
string or null |
Where it takes effect: file, setting, table, code, frame. |
pruefweg |
string or null |
Slug of a check. |
beleg |
array of strings |
|
ersetzt |
integer, string, or null |
Predecessor of the same Sache; required if a currently-held predecessor exists. |
status |
gilt|abgeloest|offen|vorlaeufig|widerlegt |
Required. |
frist |
date-time or null |
Required, hypotheses only. |
prozess_slug / schritt_key |
string or null |
|
frame_ref |
string or null |
e.g. 08-planning/planung#PL·SAISON-LEER. |
angelegt_von |
string |
Required. Actor identifier. |
A hypothesis (art="hypothese") additionally requires frist and
pruefweg, and its sicherheit must be strictly less than 1.
Prüfweg (check)
| Field |
Type |
Notes |
slug |
string |
Required. |
titel |
string |
|
typ |
shell|sql|http|grep|mcp |
Required. |
befehl |
string |
Required. Read-only; checked against an allow-list on creation. |
erwartung |
string |
Required. An expression over the result, e.g. count == 5. |
laufumgebung |
host-ro|wegwerf-container|backend-ro |
Required. |
letzter_lauf |
date-time or null |
|
letztes_ergebnis |
string or null |
|
abweichung |
boolean or null |
|
Prozess (process)
| Field |
Type |
Notes |
slug |
string |
Required. |
titel |
string |
Required. |
subjekt_typ |
betrieb|athlet|klient|mandant |
|
diagramm_md |
string |
Required. Mermaid source. |
version |
integer |
|
gilt_seit / gilt_bis |
date-time or null |
|
ersetzt_slug |
string or null |
|
schritte |
array of Prozessschritt |
Required. |
Prozessschritt (process step)
| Field |
Type |
Notes |
key |
string |
Required. |
titel |
string |
Required. |
ort |
string or null |
|
frame_ref |
string or null |
|
regel_slugs |
array of strings |
|
pruefweg |
string or null |
|
frei |
boolean, default false |
true = deliberately without a rule or an image; otherwise a gap is reported. |
Ereignis (event)
| Field |
Type |
Notes |
typ |
chat|klick|messung|pr|lauf|vorlage |
Required. |
zeitpunkt |
date-time |
Required. |
inhalt_ref |
string |
Required. |
verdichtet_zu |
array of integer or string |
|
Invariants
- At most one statement of kind
regel may have status=gilt per Sache
and subject — a partial unique index in Postgres, not an application
check.
ersetzt is required if a currently-held statement of the same kind
already exists for the Sache; otherwise the write fails with 409 and
the current statement in the body.
- No
DELETE. Superseding sets gilt_bis = neue.gilt_seit and
status = abgeloest on the predecessor.
- A hypothesis without a deadline and a check does not exist.
- A lower level may make a case for an upper level, never the reverse.
Which levels exist, and in what order, is the tenant's call (
GET/PUT
/sachen-stufen, empty by default) — COMPASS ships no vocabulary of its
own. A level the tenant does not define is reported (422 on write,
art=ungepruefte_stufe in GET /konflikte), never silently treated as
fine: a checker that reports "all good" on missing data is worse than no
checker at all.
- A check is read-only. Its result is stored as a fact, timestamped and
tied to a build.