← Alle Präsentationen

Plattformkarte · Orientierung · gemessen am 2026-09-03

samfrons/messai.ai · feat/corpus-derived-recommendations

Ein Repository, vier Vercel-Zonen, neun Open-Source-Pakete, ein Postgres.

Jede Oberfläche, die MESSAI ausliefert, was sie speist und was noch nicht in Betrieb ist. Anfragen kommen über apps/web herein und werden nach URL-Pfad an site, lab und api umgeschrieben. Nur apps/api schreibt in Postgres. Alles links der Zonen ist eine Person oder ein Skript; alles rechts davon ist Zustand oder ein Modell.

SystemkarteDatenpipelineOpen SourceSchema · 117 Modellebekannte Lücken · 13
Branches
Erstellt aus feat/corpus-derived-recommendations, 11 Commits vor development. Jede Zählung ist auf development identisch, außer dem Modell GapSearchRun und dem Schritt für den Effekt-Refit. main (Produktion) liegt 63 Commits hinter development, Prod hinkt diesem Bild also um denselben Betrag hinterher.
Verifiziert vs. zitiert
Die Zahlen zu Routen, Seiten, Modellen, Libs und Workflows sowie der BullMQ-Mock wurden am 2026-09-03 am Arbeitsbaum gemessen. Zeilenzahlen des Korpus, Größen von R2 und HF Hub sowie der Fit-Status von GP-SCM stammen aus datierten Dokumenten und wurden nicht erneut gegen eine Datenbank gemessen.
4
Vercel-Zonen
ein Repository
224
API-Routen
apps/api · gemessen am 2026-09-03
100
Seiten
web 84 · lab 16
14
gemeinsame @messai/*-Libs
libs/

Batch-Arbeit hat keinen Worker-Host: Skripte laufen auf einem Operator-Rechner oder in der wöchentlichen Claude-Routine. Die BullMQ-Box ist ruhendes Gerüst. Blaue Karten sind Vercel-Zonen, grüne gemeinsame Bibliotheken oder Live-Dienste, bernsteinfarbene Skripte, gestrichelte ruhen.

Clients
Browser der Forschenden
Client
messai.io
HTTPS

Jede Anfrage kommt über das Vercel-Projekt messai-ai (apps/web) herein, dem / gehört und das alles andere an die drei anderen Zonen umschreibt.

Einstieg
apps/web/next.config.js
Rewrite-Map
apps/web/multi-zone-rewrites.json
Blöcke
api 36 · lab 10 · site 17 Einträge
KI-Chat & Agenten
Client
/api/chat · Tool-Registry

Ein kanonischer RAG-Chat-Endpunkt mit der vollständigen Tool-Registry (Chat-Aufspaltung am 2026-05-12 behoben). Die Tools lesen die DB und die berechneten JSON-Artefakte.

Bibliothek
@messai/ai-chat
Embeddings
HF Inference Router, live
Lokaler Dev-Stack
Entwicklungsrechner
supabase start · :54322/:54323
pnpm dev:zones · 3000/3002/3003/4321

Lokaler Supabase-CLI-Stack (Postgres 17 + Studio + Auth + Realtime + Storage) seit 2026-05-07. Docker Compose für die ML-Engine auf :8001. Der PDF-Speicher auf der Festplatte ist seit 2026-08-14 ein Cache von R2 (pnpm papers:hydrate).

Vercel · 4 Projekte, ein Repository
apps/site · messai-site
Vercel-Zone · Marketing
Astro 5 + Vite · 25 Seiten
/about /learn /solutions /manual …
live · Build ~8 s

Oberfläche für Marketing und Dokumentation. Kein DB-Zugriff, keine API-Routen.

Seiten
25 .astro (gemessen am 2026-09-03)
Dev-Port
4321
Rewrite-Block
site · 17 Einträge
apps/web · messai-ai
Vercel-Zone · Produkt
Next.js 16.3.0-canary.70 · webpack
84 page.tsx · 0 route.ts
live · Eingangszone

Besitzt /, /research, /papers, /parameters, /protocols, /admin, /dashboard, /hunter, /insights, /datasets, /experiments, /runs, /survey. Die einzige Zone mit Rewrites. Liest die DB in Server-Komponenten; jeder Schreibzugriff ist ein fetch an /api.

Seiten
84 (gemessen am 2026-09-03; Doku nennt 81 @ 2026-07-07)
Bundler
webpack – Turbopack hängt sich an diesem Modulgraphen auf
Build
~5 min
Dev-Port
3000
apps/lab · messai-lab
Vercel-Zone · Laborsimulator
Next.js 16.3.0-canary.70 · --webpack
16 page.tsx · R3F + Three.js
live · 3D

/lab/*, /lab/dac (elektrochemischer DAC-Arbeitsbereich, 2026-08-25), /models/*, /predictions/*, /methodology, /parameters/sweep. Besitzt den schweren 3D-Baum.

Seiten
16 (Doku nannte 10 @ 2026-07-06)
Dev-Port
3002
Rewrite-Block
lab · 10 Einträge
apps/api · messai-api
Vercel-Zone · API
Next.js 16.3.0-canary.70 · Turbopack
224 route.ts · einziger DB-Schreiber
live · schreibt

Alle /api/*-Handler. Schwere Server-Abhängigkeiten liegen hier: Sentry, AI SDK, bullmq, ioredis, AWS SDK (R2), pdf-parse. Einzige Zone, die in Postgres schreibt.

Routen
224 (gemessen am 2026-09-03; 206 @ 2026-05-20)
Caching
force-dynamic als Standard; 12 ISR-Routen mit revalidate=60
Build
~3,2 min
Dev-Port
3003
Neuestes
Admin-Lückensuche über OpenAlex + GapSearchRun (2026-09-03, nur im Feature-Branch – noch nicht auf development)
next-auth
Authentifizierung
GitHub · Google OAuth

NextAuth v4 mit dem Prisma-Adapter (zwei Adapter installiert – ein bekannter P1-Aufräumpunkt). Sitzungen, Konten und Verifizierungstokens sind Prisma-Modelle.

Gemeinsamer Code · libs/
Gemeinsame @messai/*-Libs · 14
Nx-Bibliotheken
ui · database · ml · ai-chat
electrochemistry · electrode-3d · mes-3d
component-catalog · dac · polymer-kinetics
platform-health · testing · lab-cad · research-agents

Alles, was mehr als eine Zone nutzt, liegt hier; Apps importieren nie aus dem src/ einer anderen App. Angebunden über tsconfig-Pfade, transpilePackages und workspace:*-Abhängigkeiten.

  • libs/shared/ui @messai/ui – Designsystem + Tailwind-Preset, nur scharfe Ecken
  • libs/shared/ml @messai/ml – runFullPrediction, Routing pro Klasse, Leser für Priors v2
  • libs/shared/ai-chat – Chat-Tools, Live-Embedding über den HF-Router
  • libs/shared/electrochemistry – analytisches predictForSystem, 5 Physikfamilien
  • libs/shared/dac – elektrochemisches DAC-Modell (2026-08-25)
  • libs/shared/electrode-3d, mes-3d, component-catalog – 3D-Rezepte + Katalogdaten
  • libs/feature/lab-cad, libs/feature/research-agents
@messai/database
Datenzugriffs-Lib
libs/data-access/database
Prisma 6.11 · reiner Server-Einstiegspunkt

Ein einziger Prisma-Client. Server-Kontexte importieren @messai/database/server; einen db-Export gibt es nicht. Außerhalb von Server-Modulen nur client-sichere Zod-Schemas.

Modelle
117 · 85 Enums · 51 Migrationen
Schema
prisma/schema.prisma
Berechnete JSON-Artefakte
Artefakte zur Build-Zeit
apps/web/public/data/computed/*
Priors v1+v2 · Kalibrierung · dag-snapshot

Vorab gebaute Ausgaben der Qualitäts- und ML-Skripte, in git committet und statisch ausgeliefert. API-Routen unter research/* und parameters/[slug]/* lesen zuerst aus der DB und nutzen diese als Fallback (ISR 60 s).

  • hierarchical-priors-v2.json – ausgeliefert von /api/ml/predict
  • hierarchical-priors-v1.json – Parameterseiten, Abwasser-Overlay
  • research/calibration.json (npe-health.json wird hier erwartet, fehlt aber)
  • protocols/protocol-snapshot.json – 53 Schritte / 68 Kanten
Batch-Betrieb · kein Worker-Host
Operator-Skripte
Client · Batch
pnpm tsx scripts/* · python scripts/*.py
standardmäßig Dry-Run · --apply --target

Die gesamte Korpusbeschaffung, Extraktion, Qualitätsaktualisierung und alle Modell-Refits sind eigenständige Skripte, die von Hand oder von der wöchentlichen Claude-Routine gestartet werden. Es gibt keinen Worker-Host.

Schreibsperre
resolveDbTarget() · scripts/lib/db-target.ts
Ziele
local | staging | prod (--expect-ref)
Wöchentliche Claude-Routine
geplanter Job · kein Laufnachweis im Baum
scripts/routines/weekly-ml-audit.sh
6 Schritte · montags · committet npe-health.json
Batch · wöchentlich

Hat zwei Cron-Jobs in GitHub Actions abgelöst (npe-nightly, ml-retrain), die ~1.350 min/Monat verbrauchten. Läuft in einer Claude-Remote-Umgebung; committet nur npe-health.json, wenn sich die Datei geändert hat. Im Repository existiert keine npe-health.json, es ist also noch kein committeter Lauf gelandet; der Commit vom 2026-09-03, der Schritt 5b ergänzte, war ein Dry-Run.

  • 1 Bayes-Abhängigkeiten installieren (PyMC, sbi, torch)
  • 2 Simulator-Hürde Liu-Logan ±25 % – harter Abbruch
  • 3 SBC-Audit N=500
  • 4 npe-health.json zusammenstellen
  • 5 Qualitäts-Refresh + Kalibrierung + GP-SCM-Fit; 5b zweistufiger Effekt-Refit + Dry-Run der OpenAlex-Lückensuche (ergänzt 2026-09-03)
  • 6 Sammler für platform-health
Spezifikation
docs/routines/weekly-ml-audit.md
GitHub Actions
CI · manuell
nur workflow_dispatch · 0 $ Ausgaben
changesets · sync-public-mirrors · fit-priors-v2

Keine CI für Lint, Test oder Build. Validiert wird lokal über husky pre-commit/pre-push und pnpm pre-deploy. Drei Workflows bleiben, alle von Hand ausgelöst.

  • changesets.yml – Versions-PRs
  • sync-public-mirrors.yml – open-source/* nach Messai-io/MESS-* pushen, npm/PyPI über OIDC veröffentlichen
  • fit-priors-v2.yml – OOM-sicherer Priors-Refit
Zustand · Speicher & Warteschlangen
Supabase Postgres 17 + pgvector
primärer Speicher
Prod-Ref ytgmbbwtawldnunndcnd
Staging-Ref tzyxbgewzgpangsbhoar
live · Prod

Ein Schema, drei Umgebungen (lokal :54322, Staging, Prod). Gepoolte DATABASE_URL :6543 für die App, DIRECT_URL :5432 für Migrationen und Massenoperationen. Staging und Prod teilen sich den Pooler-Host – Schreibzugriffe sind über die Projekt-Ref abgesichert.

Publikationen
23.568 lokal · 23.569 Prod (2026-07-06/07)
EPD-Zeilen
196.522 · 25.988 modellierbar (2026-07-07)
Vektorspalte
ResearchPaper.abstract_embedding · bge-large 1024d
tote URLs
STAGING_DATABASE_URL, PRODUCTION_DATABASE_URL (db.prisma.io)
Cloudflare R2 · messai-papers
Objektspeicher
pdfs/ · 7.784 PDFs (2026-08-14)
maßgebliche Quelle für PDF-Bytes
live · seit 2026-08-14

Das lokale papers/pdf-storage/objects/ ist nur ein Cache. Vor jedem Job, der PDFs von der Festplatte liest, den Cache füllen.

Cache füllen
scripts/papers/hydrate-pdfs-from-r2.ts
Prüfen
scripts/storage/r2-verify-backups.ts
Spalte
ResearchPaper.r2Key
Upstash Redis + BullMQ
Warteschlange · nicht deployt
apps/api/src/lib/jobs/ · Mock-Prozessoren
inaktiv · ruhend

Nur ein Gerüst. Die Prozessoren sind TODOs (Embeddings schreiben Math.random(), extract_parameters liefert 1250). Es gibt keinen Worker-Host, und Vercel kann keinen dauerhaften Worker betreiben. Der Entwurf vom 2026-05-30 löst es zugunsten von GitHub-Job-DAG + after() ab.

Inferenz & Modelle
AI Gateway + Modellanbieter
externe LLM-APIs
Anthropic Haiku 4.5 (Standard)
Gemini 2.5 Flash · Groq Llama 3.3 70B · Ollama

Chat und Extraktion laufen über das Vercel AI Gateway mit Anbieter-Fallback gateway → gemini → groq → ollama (lokal). Die Extraktion kostet ~0,05–0,10 $ pro Publikation.

Extraktor
scripts/extraction/simple_value_extractor.ts
Umgebung
AI_GATEWAY_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, GROQ_API_KEY
HF Inference Router
externe Inferenz
BAAI/bge-large-en-v1.5 · 1024d
Live-Embedding der Anfrage
live · pro Anfrage

Die semantische Suche bettet die Anfrage live über router.huggingface.co ein, dann folgt pgvector-Kosinus auf abstract_embedding. Das Batch-Backfill nutzt stattdessen den Docker-TEI-Dienst.

Aufrufstelle
libs/shared/ai-chat/src/lib/embed.ts
Umgebung
HUGGINGFACE_API_KEY
GP-SCM auf Fly.io · messai-gp-scm
Inferenzdienst · Deployment nicht verifiziert
services/ml-engine/Dockerfile.gpscm · :8002
12/27 MFC-Knoten gefittet (2026-07-31)
Batch · per Env freigeschaltetlive · ?hybrid=true

Strukturelles kausales Modell auf Basis von Gauß-Prozessen über dem benannten Parameter-DAG. Erreichbar aus /api/ml/predict hinter dem hybrid-Opt-in über GP_SCM_SERVICE_URL. Ein leerer Wert hat es im Juli 2026 für ~7 Wochen lahmgelegt; der Client nennt diesen Fall jetzt in seinem Fallback-Grund. Ob die Fly-App läuft und die Prod-Umgebung nicht leer ist, wurde von diesem Rechner aus nicht geprüft. Trainiert mit scikit-learn, nicht torch. Das ausgelieferte Pickle enthält keinen einzigen von null verschiedenen Physik-Mittelwert, daher war nach dem Fit vom 2026-07-31 kein Redeploy nötig.

ausgeliefertes pkl
gp-scm-fitted-named-db-2026-06-07.pkl
Trainer
services/ml-engine/train_gp_scm.py
ML-Engine (Docker, lokal/Batch)
Batch-Dienste
services/ml-engine · :8001
embed · nougat · pgmpy · npe · training/
Batch · pnpm ml:dev

FastAPI + Python: Batch-Embeddings (HF TEI), Nougat-OCR, gefittete pgmpy-Posteriors (gecachtes JSON, kein Live-Server), NPE-Simulator, Trainer für hierarchische Priors, Conformal-Kalibrierung. Läuft aus docker-compose.ml.yml mit eigenem postgres/redis/mlflow für Experimente.

Dockerfiles
Dockerfile · .gpscm · .nougat · .npe
Anfrage- und Batch-Pfade · 26 Kanten
VonNachPfadArt
Browser der Forschendenapps/webHTTPS messai.ioLive-Anfragepfad
apps/webapps/siteRewrite /about /learn …Live-Anfragepfad
apps/webapps/labRewrite /lab /models …Live-Anfragepfad
apps/webapps/apiRewrite /api/* · alle SchreibzugriffeLive-Anfragepfad
KI-Chat & Agentenapps/apiPOST /api/chatLive-Anfragepfad
apps/web@messai/databaseLesezugriffe im ServerLesen in Server-Komponente / zur Build-Zeit
apps/lab@messai/databaseLesezugriffe im ServerLesen in Server-Komponente / zur Build-Zeit
apps/api@messai/databaseLesen + SchreibenLive-Anfragepfad
@messai/databaseSupabase PostgresPrisma · gepoolt :6543Live-Anfragepfad
apps/apiCloudflare R2PDF-BytesLive-Anfragepfad
apps/apiUpstash Redis + BullMQeinreihen (Mock)ruhend
apps/apiAI GatewayChat + ToolsLive-Anfragepfad
apps/apiHF Inference RouterAnfrage einbettenLive-Anfragepfad
apps/apiGP-SCM auf Fly.io?hybrid=trueLive-Anfragepfad
apps/apiBerechnete JSON-ArtefakteJSON-Fallback · ISR 60 sLesen in Server-Komponente / zur Build-Zeit
apps/web · lab · apigemeinsame @messai/*-Libsimportiert @messai/*Lesen in Server-Komponente / zur Build-Zeit
apps/apinext-authSitzungenLive-Anfragepfad
Operator-SkripteSupabase PostgresSync-Skripte · DIRECT_URL :5432Batch oder Skript
Operator-SkripteCloudflare R2Cache füllen / migrierenBatch oder Skript
Operator-SkripteAI GatewayLLM-Aufrufe der ExtraktionBatch oder Skript
Wöchentliche Claude-RoutineBerechnete JSON-ArtefakteRefits → committet JSONBatch oder Skript
Wöchentliche Claude-RoutineGP-SCM auf Fly.ioGP-SCM-FitBatch oder Skript
GitHub ActionsBerechnete JSON-Artefaktefit-priors-v2Batch oder Skript
GitHub ActionsML-Engineworkflow_dispatchBatch oder Skript
ML-EngineSupabase PostgresBatch-Embedding → pgvectorBatch oder Skript
Berechnete JSON-Artefakteapps/webstatisch /data/*Lesen in Server-Komponente / zur Build-Zeit
23.568
Publikationen
lokal 2026-07-06
7.784
PDFs auf R2
2026-08-14
196.522
extrahierte Werte
2026-07-07
25.988
modellierbar
2026-07-07

Vier Bahnen, von oben nach unten zu lesen. Jedes Skript läuft standardmäßig als Dry-Run und braucht --apply --target, um zu schreiben. Geplant laufen die Bahnen 3 und 4: Die wöchentliche Claude-Routine fittet Priors, Effekte, Kalibrierung und GP-SCM neu. Recherche, Download und LLM-Extraktion werden noch von Hand gestartet; der GitHub-Job-DAG, der sie automatisieren würde, ist ein Entwurf, kein Code.

1 · Beschaffung – scripts/acquisition/weekly_pipeline.sh (7 Schritte, standardmäßig Dry-Run)
OpenAlex
externe API · Entdeckung
Cursor from_updated_date
papers/staging/last-sync.json

Die einzige Stufe, bei der nichts von selbst ankommt – daher Polling. Der wöchentliche Schritt 2 findet neue DOIs seit dem Cursor; search-gaps-openalex.ts (2026-09-03) schreibt Lückenabfragen nach papers/acquisition/gaps-<date>.json, und die Admin-Route protokolliert einen GapSearchRun.

Skripte
search_openalex_underrepresented.py · search-gaps-openalex.ts
Quell-Tag
ResearchPaper.source = openalex-weekly
PDFs beschaffen
Skripte · Beschaffung
paperscraper · curl_cffi
Unpaywall · PMC XML → PDF
Batch · manuell

Begrenzt auf 2.000 pro Stufe und Lauf. curl_cffi gibt sich als Chrome aus, um an 403-Antworten von MDPI/Wiley/ACS/Elsevier vorbeizukommen. 2.075 Publikationen ohne DOI bleiben auf diesem Weg unerreichbar.

Skripte
download_paperscraper.py · download_curl_cffi.py · download_unpaywall.py · xml_to_pmc_pdf.py
In den kanonischen Speicher überführen
Skript
promote_to_canonical.py
papers/pdf-storage/objects/ (Cache)
Batch · manuell

Inhaltsadressiert über pdfHash. Seit 2026-08-14 liegen die Bytes auf R2, und der lokale Speicher ist ein Cache; migrate-local-to-r2.ts / backfill-r2-keys.ts halten ResearchPaper.r2Key befüllt.

R2 · messai-papers
Objektspeicher
7.784 PDFs · 2026-08-14

Maßgebliche Quelle für PDF-Bytes.

Publikationen → DB synchronisieren
Skript · schreibt in die DB
sync-papers-to-db.ts
pdfHash-Verknüpfung · Taxonomie · abgesichert
Batch · abgesichert

Legt ResearchPaper-Zeilen an oder verknüpft sie. Die Schreibsperre gilt wie in der ganzen Pipeline: Dry-Run, außer mit --apply --target {local|staging|prod}; Prod verlangt --expect-ref.

ResearchPaper
Tabelle
23.568 Zeilen (lokal 2026-07-06)
82 Relationskanten im Schema

Knotenpunkt des Schemas. Enthält pdfStoragePath, r2Key, aiSummary, Taxonomiespalten (primarySystemType TEXT), Demo-Inhalte und die pgvector-Spalte abstract_embedding.

2 · Parsen & Extrahieren – scripts/extraction, scripts/overnight
PDFs in den Cache laden
Skript
pnpm papers:hydrate
Batch · vor dem Job

Holt die benötigten PDFs aus R2 in den lokalen Cache, bevor eine Extraktionskohorte läuft.

Parsen
OCR / Parsen
Nougat OCR (Docker) → .mmd
PMC XML → Text (pmc-xml-to-text.ts)
Batch · manuell

Nougat läuft als nächtlicher Batch über pnpm nougat-batch. 1.444 BioC-PMC-XML-Dateien werden von einem vorhandenen Parser geparst, aber noch nicht neu extrahiert (kostengebunden, ~70–150 $).

Server
services/ml-engine/nougat_server.py
Ausgabe
papers/nougat/<doi>.mmd
v2-Wertextraktor
LLM-Extraktion
simple_value_extractor.ts → values_v2
Haiku → gemini → groq → ollama
Batch · 0,05–0,10 $/Publikation

Der aktive Extraktor (v1.6-Orchestrator seit 2026-05-08 veraltet). Schreibt JSON unter papers/extracted/<aa>/<sha>/; jeder Lauf muss damit enden, dass sein Sync mit 0 endet (Regel §7). 9.511 Publikationen erledigt, Stand letzter Volllauf.

Fallback
docs/extraction/provider-fallback-2026-05-09.md
Smoke-Test
scripts/extraction/phase6-smoke-test.ts
Nachtjobs A–E
Orchestrator
pnpm overnight:run
XML→v2 · Gleichungen · Abbildungen · Übersicht
Batch · manuell

Fünf aufeinanderfolgende Jobs auf dem lokalen Korpus, abschließend Job E, der alle vier Artefakttypen in die DB synchronisiert. Ollama-gestützt mit Anbieter-Fallback; das Manifest übersteht SIGTERM.

Runbook
docs/runbooks/overnight-pipeline.md
Legacy-Skripte für Claude/Gemini
ältere Extraktoren
extract-tables-claude.py
digitize_figures_gemini.py · …
inaktiv · ad hoc

Noch vorhanden und lauffähig; fest codiert auf claude-sonnet-4-6 (P1-Aufräumpunkt). Befüllen ExtractedTableData / ExtractedFigureData / ExperimentalContext.

Extraktionen → DB synchronisieren
Skript · schreibt in die DB
sync-values-v2-to-db.ts · sync-*-to-db.ts
mit extractorVersion · snippet · confidence
Batch · abgesichert

Schreibt Zeilen mit vollständiger Herkunft. audit-disk-vs-db.ts lässt pre-deploy bei Drift, die nur auf der Festplatte besteht, fehlschlagen. Launch-Blocker-Felder (derivationMethod, uncertainty±, catholyteBuffer) sind echte Spalten, kein JSONB.

ExtractedParameterData
Tabelle
196.522 Zeilen · 25.988 modellierbar
80,7 % NULL canonical_slug

Extrahierte Werte pro Publikation mit Bedingungen, kanonischem Slug, SI-normalisiertem numericValue, verifierPassed. Der begrenzende Faktor für die Modellierbarkeit ist die Abdeckung der Kanonisierung, nicht die Extraktion.

Extracted{Table,Figure,Paper}Data
Tabellen
ResearchPaperEquation · ConditionSet
ExperimentalContext · ReactorGeometry

Typisierte Nebentabellen, über paperId verknüpft. ConditionSet führt phAnolyte/phCatholyte/Referenzelektroden als Spalten; ReactorGeometry hat ~47 typisierte Spalten.

3 · Qualität, Embeddings & Modell-Refits – scripts/quality/refresh-all.sh (11 Schritte) + services/ml-engine/training
refresh-all.sh
Qualitätspipeline
1 ConditionSet · 2 kanonische Slugs · 3 SI-Normalisierung
4 Physik · 5 Ausreißer · 5b Verifier · 10 Festplatte vs. DB
Batch · nach jedem Batch

Idempotent, standardmäßig Dry-Run. Volumenbezogene Dichten werden eigenen Arten zugeordnet, damit sie in den Priors nie mit flächenbezogenen Werten gepoolt werden. Die Weitergabe läuft lokal → Staging → Prod, additiv und mit Ref-Prüfung.

Normalisierer
scripts/quality/normalize-to-si.py
Kanonisierung
canonicalize-name.ts
Refit von Priors & Kalibrierung
ML-Training
hierarchical_priors_v2.py (ausgeliefert) + v1 (Seiten)
Split-Conformal-Kalibrierung · PPC auf Holdout-Daten
Batch · Wochenroutine

Schritte 6–9 von refresh-all. v2 ist Student-t, pro Klasse stratifiziert, nutpie-Sampler; der vollständige Fit muss den OOM-sicheren Batch-Runner nutzen. Niemals ein Artefakt aus dem FAST-Modus ausliefern. v1 und v2 müssen gemeinsam neu gefittet werden.

Batch-Lauf
training/run_priors_v2_batched.py
Benchmark
bes-benchmark-v1 (publikationsdisjunkt, 2026-09-02)
Effekte innerhalb von Publikationen + Wissensgraph
abgeleitete Forschung
zweistufiger Effekt-Fit, aus der DB gespeist (2026-09-03)
build-correlations-db.ts · LearnedDagEdge
Batch · Feature-BranchBatch · Routine 5b

Effekte werden jetzt aus der DB gefittet, nicht nur aus der Tabellen-CSV, und Lückeneinträge speisen die OpenAlex-Lückensuche. Die Korrelationsmatrix des Wissensgraphen ist nach Slug indiziert, Pearson + Spearman.

embed_papers.py
Embedding-Backfill
bge-large-en-v1.5 → abstract_embedding
HF TEI Docker :8001
Batch · manuell

Batch-Backfill der pgvector-Spalte. Ist der Dienst nicht erreichbar, wird das Embedding stillschweigend übersprungen, und nichts versucht es erneut.

GP-SCM-Fit
ML-Training
train_gp_scm.py → .pkl → Fly-Image
Batch · wöchentlich

12/27 MFC-Knoten nach dem Present-Parent-Fix gefittet; der begrenzende Faktor ist die Abdeckung mit gemeinsamen Daten.

4 · Auslieferung
Berechnete Artefakte (git)
statisches JSON
apps/web/public/data/computed/*
Priors v1/v2 · Kalibrierung · npe-health · dag-snapshot

Von der Routine nur bei inhaltlicher Änderung nach main committet; ein Commit deployt alle vier Vercel-Projekte.

Routen in apps/api
Auslieferung
/api/ml/predict · /api/research/* · /api/parameters/*
DB zuerst, JSON als Fallback, ISR 60 s auf 12 Routen
live · 224 Routen

runFullPrediction liest Priors v2, Conformal-Kalibrierung, OOD-Erkennung und die Physikvalidierung zur Laufzeit. Nicht-MFC-Klassen gehen an das analytische Vorhersagemodell; MFC behält den datengestützten Pfad.

UI · apps/web · apps/lab
Oberflächen
/research · /parameters · /protocols · /lab
live · Browser

Semantische Suche: Live-Embedding der Anfrage → pgvector-Kosinus → Zeilen laden. Neue Extraktionen erscheinen sofort; vorab gebaute Artefakte brauchen ein Redeploy oder pnpm regenerate.

corpus-refresh.yml (vorgeschlagen, nicht umgesetzt)
vorgeschlagene Automatisierung
GitHub-Job-DAG · cron 0 2 * * 1
discover→acquire→extract→sync→embed
inaktiv · Entwurf 2026-05-30

Der Entwurf in docs/corpus-refresh-architecture.md. Nicht umgesetzt: Das Workflows-Verzeichnis enthält nur changesets, sync-public-mirrors und fit-priors-v2. Beschaffung und Extraktion bleiben manuell; geplant laufen nur Refits (wöchentliche Claude-Routine).

Pipeline-Kanten · 26 Kanten
VonNachPfadArt
OpenAlexPDFs beschaffenneue DOIsBatch oder Skript
PDFs beschaffenIn den kanonischen Speicher überführendownloaded/Batch oder Skript
In den kanonischen Speicher überführenR2Upload · r2KeyBatch oder Skript
R2Publikationen → DB synchronisierenManifestBatch oder Skript
Publikationen → DB synchronisierenResearchPapereinfügen / verknüpfenBatch oder Skript
R2PDFs in den Cache ladenin den Cache ladenBatch oder Skript
PDFs in den Cache ladenParsenPDFsBatch oder Skript
Parsenv2-Wertextraktor · Nachtjobs.mmd / TextBatch oder Skript
ParsenLegacy-Skripte für Claude/Geminiad hocruhend
v2-WertextraktorExtraktionen → DB synchronisierenvalues_v2.jsonBatch oder Skript
Nachtjobs A–EExtraktionen → DB synchronisierenJob EBatch oder Skript
Legacy-SkripteExtracted{Table,Figure,Paper}DataTabellen · Abbildungen · Kontextruhend
Extraktionen → DB synchronisierenExtractedParameterData · NebentabellenZeilen + HerkunftBatch oder Skript
ExtractedParameterDatarefresh-all.shliest EPD · schreibt Slug, SI-Wert, verifierPassedBatch oder Skript
refresh-all.shRefit von Priors & KalibrierungSchritte 6–9Batch oder Skript
Refit von Priors & KalibrierungEffekte innerhalb von Publikationen + WissensgraphdanachBatch oder Skript
Effekte innerhalb von Publikationen + WissensgraphGP-SCM-FitdanachBatch oder Skript
ResearchPaperembed_papers.pyAbstractsBatch oder Skript
Refit von Priors & KalibrierungBerechnete Artefakte (git)Priors · KalibrierungBatch oder Skript
Effekte innerhalb von Publikationen + WissensgraphBerechnete Artefakte (git)Effekte · dagBatch oder Skript
GP-SCM-FitRouten in apps/apipkl → FlyBatch oder Skript
Berechnete Artefakte (git)Routen in apps/apiJSON-FallbackLesen in Server-Komponente / zur Build-Zeit
ExtractedParameterDataRouten in apps/apiLesen zuerst aus der DBLive-Anfragepfad
Routen in apps/apiUI · apps/web · apps/labfetch /api/*Live-Anfragepfad
embed_papers.pyUI · apps/web · apps/labpgvector-KosinusLive-Anfragepfad
Effekte innerhalb von Publikationen + WissensgraphOpenAlexLückeneinträge → Lückensuche (5b)Batch oder Skript
9
Pakete in open-source/
workspace:*
835
Parameter · 15 Kategorien
mess-parameters v0.3.0
349
Verweise auf mess-parameters
apps/libs/scripts
0 $
Ausgaben für Actions
nur manuell ausgelöst

Seit der Konsolidierung am 2026-04-25 liegt jedes Paket in diesem Repository; die öffentlichen Messai-io-Repositorys sind schreibgeschützte Spiegel, die beim Release von Hand gepusht werden. mess-parameters ist das Schwergewicht: Das Produkt liest seine Ontologie zur Build-Zeit, und die DB synchronisiert extrahierte Werte dorthin zurück. Dataset-Blobs gelangen nie in git oder npm: Der Katalog liefert Manifeste aus, die Bytes liegen auf dem Hugging Face Hub.

open-source/ · 9 Pakete · workspace:*

PaketVersion · Lizenz · DateienWas es istSpiegel · Verweise
mess-parametersv0.3.0 · CC-BY-4.0 · 1.444
Standardisierte Parameter-Ontologie und Analysewerkzeuge: 835 Parameter in 15 Kategorien. data/parameter-definitions-rich.json (für Fixtures auf v0.2.0 fixiert) plus SCIENTIFIC_INTEGRITY.md (VK der Leistungsdichte ≈ 1.285 %).
  • Ontologie in parameters/*.md
  • data/paper-parameter-values.csv – Spiegel der DB-Extraktionen
  • Snakefile-Pipeline in scripts/papers/ (beachtet PAPERS_ROOT)
@messai-io/mess-parameters
github.com/Messai-io/MESS-Parameters
349 Verweise im Haupt-Repository
mess-materialsv0.2.0 · CC-BY-4.0 · 104
DFT-berechnete Materialeigenschaften für Elektroden, Membranen und Katalysatoren mit Herkunft aus dem Materials Project, Pourbaix-Stabilität, Elastizität.
  • befüllt durch scripts/sync-materials-to-db.ts, seed-materials-bootstrap.ts
@messai-io/mess-materials
github.com/Messai-io/MESS-Materials
69 Verweise im Haupt-Repository
mess-microbesv0.1.0 · MIT · 41
Kuratierte, für MES relevante Mikroorganismen: Elektrogene, Elektrotrophe, Gemeinschaftspartner und bewusste Negativkontrollen. Katalog = 28 Mikroben (korrigiert 2026-06-30).
  • export-microbes-to-json.ts · audit-microbe-field-coverage.ts
@messai-io/mess-microbes
github.com/Messai-io/MESS-Microbes
34 Verweise im Haupt-Repository
mess-datasets-catalogv0.1.0 · CC-BY-4.0 · 612
Katalog und Klassifikationen offener MES-Datensätze (Zenodo, Figshare), per Slug mit Parametern und Materialien verknüpft. Nur Metadaten; Blobs auf dem HF Hub.
  • 23 Datensätze · 108 Dateien · 27 MB auf HF (2026-04-25)
  • manifest.json pro Datensatz mit download_url + Prüfsumme
@messai-io/mess-datasets-catalog
github.com/Messai-io/MESS-datasets
6 Verweise im Haupt-Repository
mess-simulationsv0.1.0 · MIT · 31
Physikbasierte Simulations- und Modellierungswerkzeuge für MES.
@messai-io/mess-simulations
github.com/Messai-io/MESS-Simulations
4 Verweise im Haupt-Repository
mess-agentsv0.1.0 · MIT · 27
Framework zur Orchestrierung von Multi-Agenten-Forschung.
@messai-io/mess-agents
github.com/Messai-io/MESS-Agents
1 Verweis im Haupt-Repository
mess-hypothesesv0.1.0 · MIT · 28
Identifikation von Forschungslücken und Hypothesengenerierung. Noch bindet kein Chat-Tool es ein (P2-Lücke).
@messai-io/mess-hypotheses
github.com/Messai-io/MESS-Hypotheses
1 Verweis im Haupt-Repository
mess-learningv0.1.0 · CC-BY-4.0 · 22
Lerninhalte und Rechner.
@messai-io/mess-learning
github.com/Messai-io/MESS-Learning
1 Verweis im Haupt-Repository
mess-methodspython · pyproject · 32
Python-Paket mit MES-Methoden (tests/, src/). Wird vom Spiegel-Workflow auf PyPI veröffentlicht.
PyPI mess-methods
github.com/Messai-io/MESS-Methods
1 Verweis im Haupt-Repository
Monorepo messai-ai · github.com/samfrons/messai.ai · open-source/ ist die maßgebliche Quelle
apps/* + libs/*
Konsumenten
4 Zonen · 14 gemeinsame Libs
generate-parameter-fixtures.ts → /data/parameters/<slug>.json

Das Produkt liest Pakete zur Build-Zeit (Fixtures), beim Seeding (Materialien, Mikroben) und zur Laufzeit (Dataset-Manifeste → HF Hub).

Supabase Postgres
Speicher
ParameterDefinition · Material · Microbe
ExtractedParameterData

ParameterDefinition wird in der DB bearbeitet und nach mess-parameters zurücksynchronisiert; Materialien und Mikroben werden aus ihren Paketen befüllt.

Releases · pnpm changeset
Release-Mechanismus
.github/workflows/changesets.yml
tools/lint-package-shape.ts
Batch · manuell ausgelöst

Versions-PRs über Changesets; die kanonische Paketform erzwingt der Linter. Rollback = git revert in open-source/*, dann den Spiegel erneut ausführen.

sync-public-mirrors.yml
GitHub Action
workflow_dispatch · Paket als Eingabe
pnpm publish + PyPI über OIDC
Batch · manuell, 0 $

Pusht open-source/<pkg> mit einem Tag in sein Messai-io-Repository und veröffentlicht dann. Bleibt auf GitHub, weil OIDC-Trusted-Publishing nur dort funktioniert. Automatische Auslöser wurden entfernt, um die Actions-Ausgaben bei 0 $ zu halten.

Öffentlich · nachgelagert, schreibgeschützt
github.com/Messai-io/MESS-*
öffentliche GitHub-Organisation
9 öffentliche Spiegel-Repositorys
schreibgeschützt, nachgelagert

MESS-Parameters, MESS-Materials, MESS-datasets, MESS-Agents, MESS-Hypotheses, MESS-Learning, MESS-Microbes, MESS-Methods, MESS-Simulations. Beiträge aus der Öffentlichkeit fließen über docs/contributing-from-public.md zurück.

npm · @messai-io/*
Registry
8 Pakete · pnpm publish
PyPI · mess-methods
Registry
OIDC-Trusted-Publishing
Hugging Face Hub
Blob-Host
datasets/messai-io/mess-datasets
108 Dateien · 27 MB · 23 Datensätze (2026-04-25)

Große Dataset-Blobs (PDFs, CSVs, Bilder), referenziert über download_url in jedem Manifest; Konsumenten prüfen nach dem Download die md5-Prüfsumme.

Externe Forschende
Zielgruppe
Pakete installieren · Issues eröffnen · PRs auf Spiegeln
Pfade für Sync, Veröffentlichung und Nutzung · 13 Kanten
VonNachPfadArt
mess-parametersapps/* + libs/*Fixtures beim BuildLesen in Server-Komponente / zur Build-Zeit
Supabase Postgresmess-parametersSync von Definitionen + WertenBatch oder Skript
mess-materialsSupabase PostgresSeed von MaterialLesen in Server-Komponente / zur Build-Zeit
mess-microbesSupabase PostgresSeed von MicrobeLesen in Server-Komponente / zur Build-Zeit
mess-datasets-catalogapps/* + libs/*/datasets-ManifesteLesen in Server-Komponente / zur Build-Zeit
Releases · pnpm changesetsync-public-mirrors.ymlVersions-PR gemergtBatch oder Skript
sync-public-mirrors.ymlgithub.com/Messai-io/MESS-*git push + tagBatch oder Skript
sync-public-mirrors.ymlnpm · @messai-io/*pnpm publishBatch oder Skript
sync-public-mirrors.ymlPyPI · mess-methodsnur mess-methodsBatch oder Skript
mess-datasets-catalogHugging Face HubBlobs · download_urlBatch oder Skript
apps/* + libs/*Hugging Face HubAbruf + PrüfsummeLive-Anfragepfad
github.com/Messai-io/MESS-*Externe ForschendeKlonen / IssuesLesen in Server-Komponente / zur Build-Zeit
npm · @messai-io/*Externe ForschendeinstallierenLesen in Server-Komponente / zur Build-Zeit
117
Modelle
116 auf development
85
Enums
prisma/schema.prisma
146
verknüpfte Modellpaare
aus der Relationsliste des Schemas
51
Migrationen
2025-08-07 → 2026-09

ResearchPaper (82 Relationsfelder) ist der Knotenpunkt; es folgen User (38), Experiment (34), Microbe (26), ParameterDefinition und ConditionSet (je 22). Nur ResearchPaper hat eine pgvector-Spalte. Schema-Regel §8: Jedes Feld, das ein UI-Filter, ein ML-Merkmal oder eine WHERE-Klausel berührt, ist eine typisierte Spalte, nie JSONB.

DomäneModelleNamen
Publikationen & Korpus12ResearchPaper · PaperRelationship · PaperMergeAudit · ResearchCluster · ResearchTrend · AnomalousPaper · ResearchPaperEquation · PaperParameter · PaperMaterial · PaperMicrobe · MetagenomicPaperLink · GapSearchRun
Extraktion14ExtractedParameterData · ExtractedTableData · ExtractedFigureData · ExtractedPaperData · ExtractionJob · ExtractionProvenance · ExperimentalContext · ConditionSet · ParameterConditionLink · ParameterObservation · ParameterProvenance · ReactorGeometry · OperatingCondition · MFCDesign
Parameter & Wissen19ParameterDefinition · ParameterEdge · ParameterPrior · PriorStratumAxis · ParameterTemplate · ParameterClassification · CustomField · ElectrochemicalParameter · BiologicalParameter · EnvironmentalParameter · OperationalParameter · MaterialParameter · KnowledgeNode · KnowledgeEdge · LearnedDagEdge · SymbolicLaw · SubstrateClassification · DataClassificationRule · BufferChemistryProfile
Materialien7Material · MaterialClassification · MaterialMicrobeAffinity · MaterialPaperCrossref · ElectrodeFormulation · AiMaterialDefinition · AiGeometryRecipe
Mikroben & Biofilm15Microbe · MicrobeCytochrome · MicrobeShuttle · MicrobePerformanceMeasurement · MicrobeEngineeringEvent · MicrobeOmicsStudy · MicrobeReference · MicrobeSubstrateProductPair · MicrobeKineticConstant · EETPathwayAssignment · MetagenomicAnalysis · AiMicrobeDefinition · BiofilmSample · BiofilmCreepCurve · MicroelectrodeProfile
Experimente & Labor21Experiment · ExperimentCollaborator · ExperimentEvent · ExperimentPaper · Run · Measurement · LabConfiguration · LabConfigurationSnapshot · LabWastewaterQueryLog · MethodologyPreset · Workflow · WorkstreamArtifact · SimulationReplay · SimulationResult · Model · KineticCurve · PolarizationPoint · EISPoint · ElectrochemicalKinetic · MESProduct · MESProductYield
ML & Agenten9Prediction · CrossSystemPrediction · CalibrationResult · TrainedModelLineage · EvalGateRun · EvalResult · AgentRun · Hypothesis · IntegrationMapping
Datensätze5Dataset · DatasetMeasurement · DatasetCurvePoint · DatasetParameter · DatasetMaterial
Nutzende & Admin11User · Account · Session · VerificationToken · Permission · Team · Project · BetaSignup · SurveyResponse · SharedView · AuditLog
Feedback4Feedback · FeedbackAnalytics · FeedbackNotification · WastewaterFeedback

Was die Diagramme gepunktet oder rot zeichnen. Der Schweregrad folgt den Plattformdokumenten; der Stand wurde am 2026-09-03 gegen CLAUDE.local.md und den Arbeitsbaum erneut geprüft. Erledigte Punkte (Chat-Aufspaltung, force-dynamic-Audit, Gültigkeit der Priors-JSON) sind separat aufgeführt.

PrioLückeAktueller StandWas sie auflöst
P0Extraktion & Beschaffung laufen nicht geplantweekly_pipeline.sh, simple_value_extractor.ts laufen von Hand; corpus-refresh.yml ist ein Entwurf (2026-05-30) ohne Code. Nur Refits laufen wöchentlich (Claude-Routine).Den GitHub-Job-DAG oder einen geplanten Routine-Schritt für Recherche → Beschaffung → Extraktion mit Budgetdeckel umsetzen.
P0BullMQ-Schicht ist ein MockDie Prozessoren in apps/api/src/lib/jobs sind TODOs; kein Worker-Host; Vercel kann keinen dauerhaften Worker hosten.Das Gerüst archivieren; after() / Vercel Queues für die Echtzeit-Erfassungsebene nutzen.
P1Die Abdeckung der Kanonisierung, nicht die Extraktion, begrenzt die Modellierbarkeit80,7 % der EPD-Zeilen haben NULL als canonical_slug (84.243 numerische Zeilen wiederherstellbar). Modellierbar 25.988 vs. Obergrenze ≈ 40.000–50.000.Alias-Tabellen / canonicalize-name.ts erweitern; Schritte 2–3 von refresh-all erneut ausführen.
P1Unvollständige Fremdschlüssel in Prod~33.000 ExtractedParameterData-Zeilen in Prod fehlt die parameterDefinitionId (betrifft FK-/DAG-Lesepfade, nicht die modellierbare Anzahl).Backfill mit Ref-Sperre, zuerst auf Staging.
P1Publikationen ↔ Materialien / Mikroben verwaistanodeMaterials / cathodeMaterials sind Strings; die Verknüpfungstabellen PaperMaterial / PaperMicrobe sind größtenteils leer.Verknüpfungen aus der Extraktion nachfüllen; /api/materials/[id]/papers ergänzen.
P1Ungelesener Korpus1.444 BioC-PMC-XML-Dateien geparst, aber nicht neu extrahiert (~70–150 $); 2.075 Publikationen ohne DOI unerreichbar; 403-Antworten von MDPI/Wiley/ACS/Elsevier.Kostengebundener v2-Lauf über das XML; curl_cffi-Pfad für URLs ohne DOI.
P1Vorbehalte zu Konfidenz und Integrität nicht sichtbarconfidence-Spalten existieren; die Oberfläche zeigt Punktschätzungen. SCIENTIFIC_INTEGRITY.md (VK der Leistungsdichte ≈ 1.285 %) hat kein Banner in der Oberfläche.confidence in die Antworten von /api/parameters/* aufnehmen; einklappbarer Hinweis auf /parameters/*.
P1GP-SCM-Fits sind datenbegrenzt12/27 MFC-Knoten gefittet; neue Fits sind Interpolationsartefakte (energy_efficiency flach bei 43,02 %). toc_removal hat 1 gemeinsame Beobachtung.Gezielte bezahlte Neuextraktion für Biofilm-/Biomasse-Knoten; --min-samples nicht senken.
P2Keine Feedback- / Retraining-SchleifeDie Prediction-Tabelle existiert; kein /lab-Widget erfasst {predicted, actual}; kein durch Drift ausgelöster Refit.Feedback-Widget → POST /api/predictions; wöchentlich neu generieren, wenn Drift > 5 %.
P2Chat-Tools fehlen für 4 Paketequery-methods, query-hypotheses, query-datasets, query-learning nicht eingebunden.Ein Tool pro Paket in @messai/ai-chat.
P1GP-SCM kann in Prod unbemerkt ausfallenEine leere GP_SCM_SERVICE_URL auf Vercel hat die Säule im Juli 2026 für ~7 Wochen deaktiviert, während sie angebunden aussah (libs/shared/ml/src/gp-scm-client.ts). Ob Prod heute einen nicht leeren Wert hat, wurde von diesem Rechner aus nicht verifiziert.Die Vercel-Umgebung von messai-api prüfen; der Client meldet einen leeren Wert jetzt als Fallback-Grund.
P1Ausgabe der Wochenroutine nie gelandetNirgends im Baum existiert eine npe-health.json – entweder lief die Routine nie mit --commit, oder ihr Commit-Schritt hat nie ausgelöst. Das Routine-Skript selbst ist vorhanden und hat am 2026-09-03 Schritt 5b erhalten.bash scripts/routines/weekly-ml-audit.sh --commit einmal von Hand ausführen; bestätigen, dass die geplante Sitzung in Claude Code im Web existiert.
P2EntwicklungshygieneZwei NextAuth-Prisma-Adapter installiert; react-query in devDependencies. (Legacy-Extraktoren lesen ANTHROPIC_MODEL bereits mit claude-sonnet-4-6 als Standard – dieser Punkt aus der Doku von 2026-05 ist erledigt.)@auth/prisma-adapter wählen; Abhängigkeit verschieben.
Erledigt, seit die Dokumente geschrieben wurden (vor erneutem Markieren prüfen)
  • Chat-Aufspaltung – ein kanonisches /api/chat (2026-05-12).
  • Gültigkeit der Priors-JSON – v1 und v2 parsen fehlerfrei (Commit 715b63e96).
  • ML-Routing pro Klasse – 6 Nicht-MFC-Klassen gehen an das analytische Vorhersagemodell (Commits 4778f8589, bef7acedd); die Lab-Oberfläche übergibt weiterhin Proxy-Eingaben.
  • Schnelle Harmonisierungsgewinne gemergt (PR #501): +434 modellierbar; am 2026-07-06/07 auf Staging und Prod übertragen.
  • GP-SCM-dropna über alle Eltern – der Present-Parent-Fit ergab gemessen 9 → 12 Knoten (2026-07-31, Branch fix/gpscm-present-parent-fit, nicht gemergt).
Quellen: docs/platform/00-architecture.md (verifiziert 2026-07-06) · 05-data-flow.md (2026-05-06) · 06-infrastructure-gaps.md · docs/corpus-refresh-architecture.md (2026-05-30) · docs/routines/weekly-ml-audit.md · CLAUDE.md · CLAUDE.local.md · prisma/schema.prisma. Routen-, Modell- und Lib-Zahlen am 2026-09-03 am Arbeitsbaum gemessen; Korpuszahlen tragen ihr eigenes Datum – vor dem Zitieren neu messen (scripts/check-actual-database-stats.ts). Die Zahl von 146 verknüpften Paaren ist aus der eingebetteten Relationsliste des Schemas im Artefakt abgeleitet.