Konzepte
COMPASS speichert eine Form: Eine Sache (eine verfolgte Frage) trägt Aussagen (datierte Behauptungen, die sie beantworten). Alles andere — Regeln, Hypothesen, Lehren, Personas — ist dieselbe Form, angewendet auf eine bestimmte Aufgabe.
| Konzept | Was es ist |
|---|---|
| Sache | Eine stabile Frage, deren aktuelle Antwort COMPASS verfolgt, z. B. „welches Test-Framework benutzen wir". Kenntlich am kebab-case slug; optional einem bereich und einer stufe zugeordnet. |
| Aussage | Eine datierte Behauptung, die eine Sache beantwortet. Jede Aussage hat eine art (siehe unten), eine herkunft (wie sie entstand: gemessen, gesagt, abgeleitet, entschieden, evidenz) und einen status. |
Fakt (art=fakt) |
Eine gemessene oder beobachtete Aussage — typischerweise von einem Prüfweg nach dessen Lauf geschrieben. |
Regel (art=regel) |
Die Aussage-Art mit Biss: für eine Sache und ein Subjekt darf höchstens eine regel gelten (status=gilt) — von der Datenbank erzwungen, nicht von Anwendungscode. |
Entscheidung (art=entscheidung) |
Ein Klick eines Menschen, mit seiner Quelle festgehalten (eine beantwortete Frage, ein importierter Log-Eintrag, …). |
Hypothese (art=hypothese) |
Eine vorläufige Aussage, die zwingend eine frist (Frist) und einen pruefweg_slug (welcher Prüfweg sie bestätigt oder widerlegt) trägt — der Vertrag weist eine Hypothese ohne beides zurück. |
| Lehre | Ein eigener Datensatz (compass_lehren, die „Hall of Lessons") für Fehler, Gelungenes oder einen Hinweis eines Agenten an einen Menschen. Eine Lehre kann zur Regel werden, aber nur über einen ausdrücklichen menschlichen Klick — nie automatisch. |
| gilt_seit / gilt_bis | Das Gültigkeitsintervall: seit wann eine Aussage gilt und bis wann (null = gilt noch). Die Zeitachse, die die Fachlichkeit interessiert. |
| beobachtet_am / erfasst_am | Das bi-temporale Paar: wann der zugrunde liegende Sachverhalt tatsächlich beobachtet wurde, gegenüber wann COMPASS ihn erfasst hat. Beide können auseinanderfallen — ein Prüfweg kann über etwas berichten, das früher geschah. |
| Ablösen statt löschen | Es gibt kein DELETE auf Aussagen. Eine neue Aussage löst die alte ab (ersetzt zeigt auf die Vorgängerin, die status=abgeloest und gilt_bis = gilt_seit der Nachfolgerin bekommt), oder eine Aussage wird ausdrücklich beendet (POST /aussagen/{id}/beenden), wenn nichts sie ersetzt. Geschichte wird nie gelöscht. Warum, steht in Regel setzen und ablösen. |
| Genau eine geltende Regel je Sache | Ein partieller Unique-Index (uq_aussagen_eine_geltende_regel, auf (kunde_slug, sache, subjekt_id) WHERE art='regel' AND status='gilt') macht eine zweite gleichzeitig geltende Regel für dasselbe Subjekt uneinfügbar — die Datenbank verweigert es, nicht nur die API-Schicht. |
| warum, Prüfweg, Abweichung | GET /warum/{sache} beantwortet „warum gilt diese Regel" mit Entscheidungstext und Historie. Ein Prüfweg ist ein lesender, erlaubte-Befehle-geprüfter Befehl, der eine Regel gegen die Wirklichkeit prüft; ein Lauf, der nicht zur Erwartung der Regel passt, ist eine Abweichung mit bestimmter Ursache (Verstoß, Werkzeug fehlt, oder unklar). |
| Mandant + Schlüssel | Jede Zeile trägt einen kunde_slug (Mandant), von Postgres-Zeilenschutz (Row-Level Security) erzwungen. Ein vorgelegter X-Compass-Key löst genau einen Mandanten und einen Umfang auf: ro (lesen), rw (lesen und schreiben) oder bruecke (nur drei schmale Schreibpfade). |
| Persona + Brief | Eine Persona ist eine Agenten-Identität mit Aufgabe, Grenzen, Stil und einem sichtfeld (Sichtbarkeit — welche Bereiche sie lesen darf). Ihr Brief ist ein deterministisches Markdown-Dokument (kein LLM beteiligt), aus ihren Regeln, ihrem Gedächtnis und ihren Lehren zusammengesetzt, auf ein Zeichen-Budget zugeschnitten. |
Wie die Lebenszeit einer Aussage funktioniert
Eine Sache trägt nie selbst Text — sie trägt eine Kette von Aussagen. Eine
Regel abzulösen behält die alte Zeile (jetzt abgeloest) und fügt eine
neue ein, über ersetzt verknüpft. Das Diagramm zeigt eine Sache mit zwei
Regel-Aussagen: die erste wurde abgelöst, als die zweite geschrieben wurde.
GET /gilt/{sache} liefert zu jedem Zeitpunkt genau die eine Zeile mit
status=gilt — die Abfrage muss nie konkurrierende Antworten abgleichen,
weil die Datenbank ohnehin nur eine gleichzeitig erlaubt.
Ledger unabhängig prüfen
Das einzelne Python-Programm core/scripts/ledger_pruefen.py rechnet eine
vollständige exportierte Kundenkette offline nach, ohne COMPASS oder zusätzliche
Pakete. Mit python3 ledger_pruefen.py kette.json --kopf kopf.json vergleicht ihr
sie mit einem separat aufbewahrten Kopf; so fällt auch ein abgeschnittenes Ende
auf. Ein Bruch nennt die erste betroffene Nummer. Eine leere Kette oder ein
fehlender Kopf liefert keine Erfolgsmeldung. Der Ledger-Export selbst ist noch
nicht Teil des Export-Endpunkts; das Eingabeformat ist für dessen spätere
Erweiterung festgelegt. Der Prüfer bestätigt den Abgleich mit eurem aufbewahrten
Kopf, nicht dessen Herkunft oder die Wahrheit der gespeicherten Aussagen.
Weiter
- Neu bei COMPASS? Starte mit dem Schnellstart.
- Eine Regel ändern? Siehe Regel setzen und ablösen.
- Einen bestimmten Endpunkt oder ein Werkzeug suchen? Direkt zur Referenz.