Sidecar-Integration

Ein Verweis wird Teil eines Dossiers, mit Beleg

Worum es geht

Ein Lebenslauf, den eine Person selbst geschrieben hat, liegt als Seite im Nachlass (http://127.0.0.1:5725/?doc=1-2_ackeret_jacob_1935_1958&p=2: Jakob Ackeret, geboren 17. März 1898, Diplom ETH 1920, Assistent bei Stodola, Göttingen bei Prandtl, Habilitation 1928, o. Prof. seit 1934, ausgewählte Arbeiten nach Gebieten). Was so eine Quelle über die Person sagt, gehört in ihr Dossier, und zwar so, dass jede Aussage nachweist, auf welcher Seite, in welchem Absatz und mit welchem Wortlaut sie steht, wer dafür bürgt und wer sie bestätigt hat. Dann kann jede spätere Begründung, die eine Person betrifft, auf diese Evidenz zeigen.

Die Integration ist eine Funktion mit vier Stufen, als Partitur famulus-integration registriert, und so geschrieben, dass sie für andere Sidecars (Chronologie, Terminologie, LWgrammar-Regeln) dieselbe ist: was sich je Sidecar unterscheidet, steht in einer Karte (integration/karten/<sidecar>.yaml), nicht im Code.

flowchart LR
  V[Verweis: URL, doc:page, Satz-ID, Phrase] --> K[kontext]
  K --> U[untersuchung: DTD-Auszeichnung]
  U --> I[identitaet: Register, Bestand]
  I --> G[integration: Fakten, Prüfungen, Widersprüche]
  G --> D[(Dossier XML + Projektion)]
  D --> E[Explikation · Erkundung · Probe-Labor]
  O[Owner-Verdikt] --> D
  O --> L[(Lernspeicher: Episoden, Diagnosen)]

Die vier Stufen

Hinweiskontext

Der Verweis wird zur Seite einer Sammlung: der Ordner, der die doc_id hält, wird gesucht, nie geraten. Dazu der Rahmen aus den Registern der Sammlung: die Ordnerzeile (documents), die Briefregistersätze, die die Seiten decken (letters: Art, Datum, Parteien, Regest), die Nachbarn, die Fortsetzung (Seiten desselben Satzes, die nicht übergeben wurden, laufen als fortsetzung mit), die Kandidaten für das Subjekt (Korrespondent des Ordners, Parteien und Personen der Sätze), die Datierung (Datum des Satzes; sonst das späteste genannte Jahr als terminus post quem; sonst die Ordnerjahre) und offene Verweise („s. Beilage“). Jeder Posten nennt Tabelle und Schlüssel.

Hinweisuntersuchung

Das Dokument wird gegen die Dokument-DTD des Sidecars ausgezeichnet, für einen Lebenslauf lebenslauf.dtd: Stationen (Geburt, Ausbildung, Stellung, Erfindung …), Werklisten nach Gebiet, Bemerkungen (Beziehungen, Verweise). Das Modell (gemini-3.8-flash, Instruktion pdai/skills/integration/untersuchung-lebenslauf) schlägt die Auszeichnung als JSON vor; gebaut, DTD-validiert und geprüft wird hier: jedes Element ist an einem Absatz verankert (pidx, p) und zitiert ihn wörtlich, jede Zeit ist EDTF. Was die Prüfung nicht besteht, wird verworfen und genannt; nicht erfasste Absätze stehen als rest. Eine Karte ohne Dokument-DTD für die erklärte Art bricht hier mit nicht_pruefbar ab.

Hinweisidentitaet

Das Subjekt: die vom Owner genannte Person (im Register geprüft), sonst der Korrespondent des Ordners. Jeder Name des Dokuments wird gebunden: zuerst über die Personen, die das Briefregister für diese Seite schon aufgelöst hat (gleicher Nachname, verträgliche Initialen), sonst über das Verfahren des Registers (ai_lemma_index.register.binden). Was nicht bindet, bleibt unaufgeloest mit seinen Kandidaten. Keine ID wird erfunden. Dann wird der Bestand geladen: Registerkarte, Briefe des Subjekts in der Sammlung, das Dossier, wie es steht.

Hinweisintegration

Ein Fakt je Station, Werk und Beziehung: eine Aussage, ihr typisierter Inhalt, ihre Zeit, ihr Beleg (P:<doc>#<pidx>/p<n>, die Satz-IDs des Stanza-Korpus in diesem Absatz, die Passage) und ihre Quelle (Art, Zeugnis selbst|fremd|amtlich, Urheber, Seiten, URL des Viewers, Datierung, Instruktionsstempel, offene Verweise). Status vorgeschlagen. Dann die Prüfungen der Karte; jeder Befund ist ein widerspruch mit Status offen, seiner Regel und beiden Adressen. Das Dossier wird gegen dossier.dtd validiert, atomar mit neuer Version geschrieben und nach dossier.duckdb projiziert; der Lauf ist eine Episode des Lernspeichers.

Die Prüfungen

Regel Befund
innerer_widerspruch ein Fakt vor der Geburt oder nach dem Tod; eine vom Modell als unklar markierte Zahl (etwa „No. 101946“)
bestand_widerspruch Geburt oder Tod mit anderem Datum als im Dossier; Stellung oder Abschluss bei derselben Institution mit anderen Jahren
register_widerspruch Briefe des Subjekts vor der Geburt oder nach dem Tod
rahmen_widerspruch das Dokument nennt ein Jahr jenseits der Ordnerjahre
verweis_offen Beilagen und Folgeseiten, die das Dokument nennt und die Übergabe nicht enthält (als offen an der Quelle)

Lebenszyklus und Lernen

Ein Fakt ist vorgeschlagen, bestaetigt, verworfen oder revidiert; eine Korrektur schreibt einen neuen Fakt mit ersetzt. Ein Owner-Verdikt (bestaetigen, verwerfen, korrigieren, widerspruch) steht über dem Modell, wird am Element vermerkt und von keinem Neuaufbau rückgängig gemacht (die Projektion spiegelt die XML, sie entscheidet nichts). Jedes Verdikt ist eine Episode des Lernspeichers (lernen/store.py); ein Verdikt gegen das Modell ist eine Diagnose der Untersuchungsinstruktion, die eine Lektion patchen kann. Gemessen wird eine Lektion durch Replay (famulus-integration replay): die Stufen 2 bis 4 laufen auf den gespeicherten Seiten noch einmal, ohne zu schreiben, und die Fakten werden verglichen, nie zwei Live-Läufe.

Wo das Dossier gelesen wird

  • Das Evidenzpaket der Explikation (Packs.dossier) führt die Fakten mit table: dossier und dem Schlüssel <ind_id>/<fakt_id>; die Instruktion explicate (v1.2) zitiert einen Fakt nur mit diesem Schlüssel und nennt einen vorgeschlagenen als vorgeschlagen.
  • Die Erkundung (satzrecord/ausdruck/erkundung.py) hat die Quelle dossier: ein stützender Treffer ist ein tragender Grund der Art beleg mit der Seite, auf der der Fakt steht.
  • Das Probe-Labor (scripts/satz_viewer.py, /api/dossier) und der Kármán-Viewer (/api/dossier/{ind_id}, Knopf „Ins Dossier“) zeigen Fakten, Status und Widersprüche mit Sprung auf die Seite.

Aufruf

uv run famulus-integration aufnehmen 'http://127.0.0.1:5725/?doc=1-2_ackeret_jacob_1935_1958&p=2' \
    --sidecar dossier --person P002043 --art lebenslauf --zeugnis selbst [--dry]
uv run famulus-integration zeigen dossier P002043
uv run famulus-integration bestaetigen P002043 f001
uv run famulus-integration pruefen P002043

Ablage, in der PDAI-Sammlung selbst: <collections_root>/<collection>/dossier/<ind_id>.xml (universelle DTD dossier.dtd, Kopie neben den Daten, sha-verglichen), die ausgezeichnete Quelle unter dossier/quellen/<quelle_id>.xml, die Projektion <collection>_dossier.duckdb neben den anderen DuckDBs der Sammlung (in der Schemakarte als datenbanken.dossier). Der Schlüssel ist die globale Register-ID, deshalb trägt eine Person je Sammlung ein Dossier, und fakten(ind_id) ohne Sammlung liest sie alle zusammen (jeder Fakt nennt seine Sammlung) — so konsultiert eine andere Sammlung dasselbe Dossier. Ein Verdikt geht an die Sammlung, die das Element hält. Andere Sidecars: karten/terminologie.yaml (Bindung über lwgrammar_reference.dictionary.lookup_term, Adapter über submit_senses), karten/chronologie.yaml, karten/lwgrammar.yaml — deklariert; ihre Lücken (Dokument-DTD, Ablage) meldet jeder Lauf, bis sie gefüllt sind.