COMPASS docs

The form

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.