know-how vertraulich owner: matus
CLAUDE.md — tuxametrics
CLAUDE.md — tuxametrics
Ablauf-Prototyp einer klinischen Entscheidungsunterstützung für die orthomolekulare Medizin
(Labor-Interpretation → Therapieempfehlung → ärztliche Freigabe). Fachliche Herkunft: Repo tuxamed,
Verzeichnis Bearbeitet/ — Umfang ist der dort in 00-bericht.md §9 vorgeschlagene Schnitt
„Gold Path E1/E3".
WICHTIG — was dieses Produkt ist und was nicht
Dieser Absatz gehört in jede Zusammenfassung dieses Repos, in jedes Angebot und auf jede
Demo-Folie. Er ist wörtlich aus tuxamed Bearbeitet/00-bericht.md §10 übernommen:
| Was der Prototyp beantworten kann | Was er nicht beantworten kann |
|---|---|
| Ist der Ablauf Patient → Befund → Prüfung → Empfehlung → Freigabe → Report richtig geschnitten? | Sind die klinischen Regeln richtig? |
| Sind die richtigen Dinge Pflicht und die richtigen optional? | Stimmen die nationalen Höchstmengen und die Eisen-Zielwerte? (OF-10, OF-67) |
Ist die Trennung „System schlägt vor / Therapeut entscheidet" (GM-7) in der Oberfläche erkennbar? |
Ist die Verhältnislogik tragfähig? (E-7 — gar nicht enthalten, auch nach v1.2 nicht) |
| Versteht ein Therapeut, warum eine Empfehlung nicht erzeugt wurde? | Ist die Dosisempfehlung fachlich korrekt? |
| Ist der Bericht in der Praxis verwendbar? | Ist der Pilot rechtlich zulässig? (E-1, E-20 — extern vergeben, nicht beantwortet) |
Geändert nach Backlog v1.2 (2026-08-09): In Zeile 2 stand rechts bis v1.1 „Stimmen die kritischen
Schwellen? (E-8)". E-8 ist entschieden (FACH-045 Z. 1137–1165) — die Schwellen sind freigegeben
und damit prüfbar statt bloß illustrativ. An ihre Stelle tritt die verbliebene echte Zahlenlücke: die
nationalen Höchstmengenempfehlungen sind im Material selbst leer (OF-10, Z. 1599), die
Eisen-Zielwerte unbeziffert (OF-67).
Keine klinisch validierten Regeln. Keine Aussage zur regulatorischen Zulässigkeit.
WICHTIG — fünf nicht verhandelbare Leitplanken
Alle fünf sind Architekturentscheidungen, keine Nice-to-haves. Wer daran rührt, braucht ein neues ADR, keinen Commit.
-
GM-7ist strukturell, nicht kosmetisch. Eine Empfehlung ist immer „vorgeschlagen"; final wird sie ausschließlich durch die Freigabe einer Person mit benannter Qualifikation. Es gibt keine technische Sperre, die eine Therapeutenentscheidung verhindert — außer den zwei Fällen vonGM-7.5(Zielpopulationsausschluss, nicht unterstützte Analyt-Matrix-Kombination), wo gar kein Ergebnis entsteht. Alles andere ist Hinweis plus Pflichtbestätigung. Wer eine Sicherheitsregel als harte Validierung implementiert, widersprichtGM-7frontal.Nicht verwechseln mit Zugriffskontrolle (seit ADR-0005): wer das System benutzen darf ist eine andere Frage als was ein Therapeut entscheiden darf — und sie wird seit 2026-08-10 hart durchgesetzt. Die drei Capabilities der GM-7-Kette (
txm.empfehlung.decide,txm.uebersteuerung.create,txm.freigabe.grant) sind im Capability-Katalog dauerhaftallowedActors=[USER]und nie an einenAGENTgrantbar (tuxametrics-platform-service/util/Gm7Schutz, belegt inGm7SchutzTestinklusive der Gegenprobe „ein Therapeut mit Grant darf freigeben"). Das sperrt keine klinische Entscheidung — es sagt nur, dass sie von einem Menschen kommt. Genau das behauptetGM-7ohnehin; neu ist, dass es jetzt ein Mechanismus ist statt einer Zusage.Seit 2026-08-17 auch: nie über ein Profil (ADR-0008). Das ist keine Wiederholung der Zeile darüber, sondern eine eigene Aussage — die
allowedActors=[USER]-Prüfung hätte einen Profil-Grant bestanden, weil ein Profil immer von einem Menschen ausgeübt wird.GM-7verlangt aber eine Person mit benannter Qualifikation, und ein Profil ist eine Rolle mit einem Namen, den niemand validiert. Die drei Schlüssel bleiben Einzelgrants an namentlich bekannte Menschen — der eine Ort, an dem dieses Produkt bewusst nicht bündelt, obwohl es das Werkzeug dafür jetzt hat. -
Die vier „unbequemen" Elemente bleiben sichtbar: gesperrte Empfehlung mit Grund, Stufenkappung (
GM-1.1), Konfundierung (GM-1.3), informierte Übersteuerung (GM-7.2). Sie sind Zustände im Datenmodell, keine UI-Details — siehe ADR-0004. -
Ebene
E2kommt in diesem Repo nirgends vor — kein Enum-Wert, kein Feld, kein Konzept, keine Referenz. Nicht belegbar: zu keinem der sieben Verhältnisse liegt ein Auffälligkeitsbereich vor (OF-01/E-7). DasEbene-Enum hatE1undE3; die Lücke ist Absicht. Backlog v1.2 hat daran nichts geändert —E-7blieb offen — einer von zwei Punkten, die v1.2 nicht abgeraeumt hat (der andere istE-18, die Ausarbeitung der Referenzfaelle);FACH-040,FACH-050undFACH-051sind dort wörtlich unverändert. Wer „16 von 20 Entscheidungen getroffen" liest, schließt sonst das Gegenteil. -
Medikamenten-Interaktionen werden erfasst und angezeigt, aber NICHT regelbasiert geprüft.
Medikationseintrag.interaktionspruefungist ein Enum mit genau einem Wert (nicht-automatisiert-geprueft) — unbequemer als ein weggelassenes Feld, und genau das ist der Zweck. Grund: die Auflösung Handelsname → Wirkstoff hat im Material keine Quelle (OF-07).Seit 2026-08-26 gibt es die Auflösung trotzdem — und die Leitplanke gilt unverändert (ADR-0012).
tuxametrics-substanzstammdaten-serviceführt einen eigenen, extern belegten Katalog (Wirkstoff als zentrale Entität, Handelsname referenziert genau einen). Das schließt die Lücke ausOF-07als Fähigkeit, nicht als Freigabe: eine Interaktionsprüfung bräuchte zusätzlich einen Interaktionskatalog (Wirkstoff × Mikronährstoff), und der ist eine völlig andere Quelle, die es weder im Fachmaterial noch in jenem Service gibt.FACH-021(„nur der aufgelöste Wirkstoff ist Grundlage der Interaktionsprüfung") nennt eine notwendige, keine hinreichende Bedingung — wer sie für hinreichend hält, liest den Satz rückwärts. Die Auflösung ist damit vorhanden und ungenutzt; sie in die Auswertungslogik zu verdrahten ist eine eigene, spätere Entscheidung mit eigenem ADR. -
Zwei externe Fragen bleiben sichtbar unentschieden.
tuxametrics.regulatorik.einstufungundtuxametrics.pilot.betriebsmodusmüssen aufUNGEKLAERTstehen;RegulatorikGuardbricht den Start sonst ab. Siehe ADR-0002 und ADR-0003. Von ADR-0005 unberührt: dass IdP und Autorisierung jetzt entschieden sind, sagt über die regulatorische Einstufung und den Pilot-Betriebsmodus nichts — das sind Fragen an Dritte (Regulatory/Recht), keine Infrastrukturfragen. Wer die eine für die andere hält, löst einen Guard auf, der genau dafür gebaut wurde.
BEFORE touching any file — dieser Working Tree hat mehrere parallele Schreiber
Dieser Abschnitt steht vor der fachlichen Leseliste, weil er auch für die dreizeilige
UI-Korrektur gilt, für die niemand die Leseliste durchgeht. Genau daran ist es am 2026-08-26
gescheitert (agentic-engineering/CLAIMS.md § Historie).
agentic-engineering/CLAIMS.mdprüfen — ist das benötigte Modul (Zeile ausguidelines/project/service-landscape.md) schon beansprucht? Falls ja: User fragen statt loszulegen. Falls frei: eigene Zeile eintragen, nach Abschluss entfernen.GG-AGENTIC-ENGINEERING-0002- Im selben Zug
agentic-engineering/STATE.mdlesen — was gilt gerade über das laufende System auftuxametrics-vm(Grant fehlt, Realm neu importiert, Tenant existiert schon). Erneut vor jeder Aktion gegen die laufende Umgebung, nicht nur beim Sessionstart.GG-AGENTIC-ENGINEERING-0007 - Kein pauschaler Agent-Log-Read. Ist das Modul frei, direkt loslegen. Gezielt greppen nur bei
Claim-Konflikt (ab
LastChanged) oder unklarem Zustand.GG-AGENTIC-ENGINEERING-0003 - Nach jedem Write/Edit eine Zeile an
agentic-engineering/agent-log/YYYY-MM-DD.mdanhängen —[YYYY-MM-DD HH:MM] | AKTION | pfad | Begründung, plus die Prosa-Abschnitte (FUNDe, Entscheidungen samt verworfener Alternative). Konvention:agentic-engineering/agent-log/README.md. - Committen nur pfadgenau:
git add -- <pfade>+git commit -- <pfade>in einem Aufruf, Pfade exakt aus den eigenen heutigen Log-Einträgen. Niegit add -A/-a/git add .— so ist am 2026-08-26 eine fremde, gestagte Datei in einen fremden Commit geraten. Bei einer.git/index.lock-Kollision warten und erneut versuchen, die Lock-Datei nie löschen. Push aufmasterund jeder Force-Push bleiben rückfragepflichtig.
Alle vier Regeln sind in guidelines/INDEX.md §
GG-AGENTIC-ENGINEERING gelistet, jeweils mit der Begründung, warum sie für dieses Produkt zählt —
inklusive der ehrlichen Einordnung von GG-AGENTIC-ENGINEERING-0005 (Worktree-Isolation), die den
Fall zweier unabhängiger Sessions im selben Checkout gerade nicht löst.
Die Punkte 1 und 4 sind seit 2026-08-26 keine Zusage mehr, sondern ein Mechanismus. Drei
projektlokale Hooks setzen sie durch (.claude/hooks/README.md,
verdrahtet in .claude/settings.json): ein PreToolUse-Guard blockiert
Schreibzugriffe auf fremd beanspruchte Module, ein PostToolUse-Hook schreibt das Zeilenprotokoll
selbst, ein SessionStart-Hook meldet ungefragt laufende Fremdsessions, offene Claims und bereits
gestagte fremde Dateien. Kein anderes Projekt dieser Werkstatt hat so etwas — dort ist es überall
reine Konvention (DOTs ADR-0012 sagt das wörtlich). Wer allein arbeitet, merkt von den Hooks nichts:
sie hängen an einer nachweisbaren Fremdsession, nicht an einer Vermutung.
Was sie nicht können, steht vollständig im README und ist beim Arbeiten mitzudenken. Vor allem:
sie greifen nur bei Edit/Write, nicht bei Bash — der git add -A-Fall vom 2026-08-26 ist
mechanisch weiterhin ungeschützt (Punkt 5 oben bleibt Handarbeit) — und sie sind fail-open: dass
keine Blockade kam, beweist nicht, dass geprüft wurde. Nach jeder Hook-Änderung
node .claude/hooks/selftest.mjs laufen lassen.
BEFORE implementing anything
- Globale Regeln (
GG-*) liegen im Zwirn-Repo (dev.zwirn), lokal unter../zwirn/guidelines/— dort zuerst lesen (Master-Index:../zwirn/guidelines/INDEX.md). Ist Zwirn nicht als Geschwister-Checkout vorhanden → klonen (git clone <zwirn-repo-url> ../zwirn). Nie hierher kopieren. - Dieses Repo hält nur produktspezifische Regeln (
PG-*) unterguidelines/(sieheguidelines/INDEX.md). - Reihenfolge:
guidelines/INDEX.md→guidelines/project/gold-path-scope.md→guidelines/project/domain-map.md→documentation/domain/laborauswertung.md→agentic-engineering/BACKLOG.md→ dann Code. - Standard-Framework: Quarkus (Zwirn-ADR-0007), Muster aus
../zwirn/samples/sample-data-service-quarkus. Frontend-Slices nach../zwirn/samples/sample-frontend-react. Wer eine Liste oder Tabelle baut, liest vorherGG-ARCH-FRONTEND-0003(../zwirn/guidelines/architecture/web-frontend/frontend-tables-pagination.md): Pagination mitstart/limit, Seitengrößen-Auswahl, 400 ms Debounce,DataTable/SearchInput/EmptyStateaus@zwirn/web— auch bei drei Demo-Zeilen. Bis 2026-08-26 stand hier nur das Beispielprojekt, und ein Beispiel zum Abschauen ist keine Regel: wer sich die nächstgelegene Seite als Vorlage nimmt, erwischt mitKatalogeRegelwerkPageausgerechnet die dokumentierte Ausnahme. Alle sieben Frontend-Regeln und die Begründung, warum sie hier zählen:guidelines/INDEX.md§GG-ARCH-FRONTEND. - Docker-Build braucht
ZWIRN_M2in.env— siehe.env.exampleund../zwirn/guidelines/project/devops/docker-zwirn-m2-build-context.md. - Autorisierungs-relevante Reviews: zusätzlich
../zwirn/policies-opa/capability/*.regolesen — das ist die tatsächliche Enforcement-Logik und taucht in keinem Diff dieses Repos auf (Zwirn-ADR-0005).
BEFORE changing fachliches Verhalten
Die fachliche Quelle ist ein anderes Repo. Alle Zahlen, Kataloge und Regeln stammen aus tuxamed
Bearbeitet/ (anonymisiertes Extraktionsergebnis nach GG-META-0005). Die Arbeitszone raw/ dort
ist versiegelt und wurde nie geöffnet — sie darf auch künftig nicht geöffnet werden.
Maßgeblich ist seit 2026-08-09 die Kundenfassung quelle-01-v1.2.md; quelle-01.md (v1.1) bleibt
nur als Referenz für „was vorher dastand".
Jede Zahl im Code trägt ihre Fundstelle (FACH-NNN, Zeilennummer). Wo das Material keine Zahl hat,
hat der Code auch keine:
- Keine Auffälligkeitsbereiche für Verhältnisse (
OF-01), keine Wirkstoffauflösung (OF-07), keine nationalen Höchstmengenempfehlungen (OF-10— die Spalte ist im Material selbst leer und ausdrücklich „nicht zu schätzen"), keine Eisen-Zielwerte (OF-67), keine Calcium-Verschärfung (OF-69), keine Wirkung der eGFR-Stufe 45–59 (OF-75). Geändert nach v1.2: Hier standen bis v1.1 auch „keine eGFR-Schwellen (OF-06)" und „keine klinische Tragweite je Analyt (OF-05)". Beide sind entschieden (FACH-007Z. 333–348,FACH-031Z. 851–863) — sie fehlen im Code jetzt aus einem Scope-Grund, nicht mehr aus einem Belegmangel. - Wo ein Platzhalter zum Laufen unvermeidbar war, ist er bewusst implausibel gewählt
(
GG-META-0005§9). Von sechs sind seit v1.2 vier hinfällig (A2, A3, A4, A6). Bei der Freigabe blockieren weiterhin alle Punkte — das ist seit v1.2 aber kein Platzhalter mehr, sondern eine bewusst aufgeschobene Änderung:E-14ist entschieden (FACH-079Z. 1741–1757,OF-04bbehoben). Siehe den Nachtrag in ADR-0004.
Leitregel für jeden weiteren Nachzug auf v1.2:
Korrigiert wird, was v1.2 widerlegt. Nicht gebaut wird, was v1.2 neu ermöglicht.
Was v1.2 erstmals belegbar macht (eGFR-Modifikator, klinische Tragweite, Aktualitätsgrenzen,
E-14-Blockadekriterien, Eisen-Sonderregel, X-3a/X-3b, Patientenversion), ist eine
Scope-Erweiterung und braucht eine eigene Entscheidung — nicht einen Commit:
agentic-engineering/backlog/v12-nachzug-scope.md.
Alle Zahlen und Kataloge liegen an einer Stelle:
tuxametrics-laborauswertung-service/.../regelwerk/Regelkatalog.java. Neue Fachzahlen gehören dorthin
oder in die Fragenliste — nie „klingt plausibel".
Seit 2026-08-24 mit genau einer Ausnahme, und sie ist keine Aufweichung
(ADR-0011): eine
Praxis kann ein R-Global-Feld praxiseigen überschreiben — das Reevaluationsintervall
(FACH-074), und auch das nur verkürzend. Das ist keine neue Zahlenquelle, sondern die Umsetzung
von FACH-063/E-11, das in v1.2 entschieden wurde und genau festlegt, welche Regelarten eine Praxis
ändern darf. Von den fünf dort freigegebenen führt Regelkatalog.java nur diese eine; die vier
gesperrten Kataloge dieses Repos (Dosisobergrenzen/FACH-072, kritische Schwellen, Kontraindikationen,
Sicherheitshinweise) bleiben unveränderbar und lehnen jeden Versuch mit Grund ab. Wer eine wirksame
Zahl sucht, liest deshalb Regelkatalog.java plus die Momentaufnahme des jeweiligen Falls
(auswertung_regelbindung) — und jede Aussage weist ihre Herkunft aus (GM-6.2). Das Mockup zeigt an
dieser Stelle eine editierbare Dosisobergrenze; die ist nach E-11 gerade nicht änderbar.
Struktur
guidelines/— nurPG-*+INDEX.md(verlinkt auf Zwirns GG). Kein GG-Markdown hier.guidelines/adr/— eigene ADR-Kette ab0001, mit Rück-Verlinkung zu Zwirn-ADRs.documentation/— Domänenmodell, Prozess, gefilterter Testfallkatalog.agentic-engineering/—BACKLOG.md(Index) +backlog/{thema}.md,agent-log/, sowie die beiden live BoardsCLAIMS.md(wer arbeitet woran) undSTATE.md(was gilt über das laufende System) — siehe den Abschnitt „BEFORE touching any file" oben.tuxametrics-platform-service/— die Capability-Authority (GG-ARCH-SERVICES-0005, Form „eigen", seit 2026-08-10): Tenant (= Praxis), Capability-Katalog mitallowedActors, CapabilityGrant. Port 8125. Hier sitztutil/Gm7Schutz— der Ort, an dem „Freigabe nur durch Menschen" deklariert und erzwungen wird. Wire-Vertrag:CAPABILITY_CHECK_CONTRACT.md. Seit 2026-08-17 zusätzlich Capability-Profile (UserProfileAssignment,actorType=PROFILEauf dem bestehenden Grant) — der Mechanismus hinterplatform-ownerundproduct-owner(ADR-0008). Zuerst in Zwirn gebaut (Zwirn-ADR-0043), hier nachgezogen.PROFILEist keinActorType, sondern ein eigenermodel/GrantHolderType:ActorTypekommt aus dem Token-Claim, und was ein Aufrufer über sich selbst behaupten kann, darf kein Rechtebündel sein.tuxametrics-virtual-identity-service/— Identity je Praxis (vid), Port 8126: Personen, Funktionspostfächer und agentische Identitäten. Kein Pflichtbaustein — fachlich begründet überOF-12(„ist der Mandant die Praxis oder der Therapeut?"). Capability-Konsument, nicht Authority.keycloak/— Realm-Exportdigital-labs(Port 8180). Beantwortet ausschließlich wer bist du; was darfst du beantwortet der platform-service (GG-GOV-SECURITY-0003, AuthN/AuthZ getrennt).tuxametrics-substanzstammdaten-service/— Referenzkatalog Wirkstoff ← Handelsname (sub), Port 8128, eigene DB. Der einzige Fachdatenbestand ohne Patientenbezug und ohne Mandanten (alle Zeilen tragen den Sentinelplatform; die API ist trotzdem tenant-skopiert, weil ein Pfad ohne/tenants/{…}die Tenant-Prüfung vonzwirn-securityüberspringt). Meldet viersubstanzstammdaten.*-Capabilities an, hat einen eigenen Keycloak-Client. Löst Handelsname → Wirkstoff auf und schaltet damit keine Interaktionsprüfung frei — siehe Leitplanke 4 und ADR-0012.tuxametrics-laborauswertung-service/— Quarkus Data Service (txm), REST/api/txm/v1, MCP/mcp(nur lesend, siehe Javadoc vonAuswertungMcpTools). Meldet seine 23txm.*-Capabilities beim Start bei der Authority an (capability/CapabilityRegistrar) — die Zahl wird nicht von Hand gepflegt, sondern vonCapabilityRegistrarTestgegen diecapabilityGuard.require(...)-Aufrufe abgeglichen.tuxametrics-process-hub-cockpit/— dünner Spring-Boot-Wrapper, kein Fachcode. Die eine dokumentierte Ausnahme vom Quarkus-Standard (Zwirn-ADR-0007, Flowable). Die Engine trägt seit 2026-08-12 eine Definition und keine Instanz — der Gold Path ist kein ausgeführter BPMN-Prozess. Seit 2026-08-15 in zwei Rollen: Prozessmodul (zwirn-process-api+zwirn-process-flowable,/api/v1/...) und Hub (zwirn-process-hub-router-spring,/api/process-hub/v1/tenants/{t}/..., die Gegenstelle von@zwirn/bpmn). Es meldet dafür vier rein lesendetxm.process.*-Capabilities an. Der abgelöstezwirn-process-hub-flowable-springbrachte Flowables rohe REST-Fassade/process-api/**mit — schreibfähig und nicht tenant-geprüft; sie ist ersatzlos entfallen. Der Aufgaben-Lebenszyklus (claim/complete/unclaim) ist bewusst nicht angeschlossen: dafür gibt es inzwirn-process-apikeinen Vertrag (backlog/process-hub-task-lifecycle.md).tuxametrics-ui/— React/TS Domain-Slices + App-Gerüst auf@zwirn/web,tsc --noEmit.brainversum/— Konfiguration einer eigenständigen brainversum-Instanz mit genau einer Quelle: der Doku dieses Repos. Drei Container auftuxametrics-vm(Web 8135, MCP 8136). Kein Fachbaustein: sie sprechen mit keinem anderen Service, haben keine DB, keinen Keycloak-Client und keine Capability — sie lesen Markdown.GM-7ist unberührt. Zwei Verwechslungen, die hier teuer wären: es ist nicht die zentrale Second-Brain-Instanz des Nutzers (kein Zugriff aufC:\brain, keine Föderation — das ist ein eigener, noch nicht gegangener Schritt), und es beantwortet nichtOF-13— dort geht es um die Ablage klinischer Evidenz, hier um Engineering-Dokumentation.
Dazu betrieben, nicht importiert (Zwirn-ADR-0006, fertige Docker-Images): zwirn-audit-service
und seit 2026-08-14 zwirn-autoimprove-service, je mit eigener DB, plus ein eigenes Redis als
Ingest-Weg des Audit-Streams. Umfang und Begründung:
agentic-engineering/backlog/audit-feedback-processhub-integration.md.
Audit-Events blockieren nichts (GM-7) und tragen keine Gesundheitsdaten — nur Schlüssel und
Zählungen.
zwirn-feedback-service wird nicht mehr betrieben (ADR-0007).
Zwirn bietet beide Bausteine unverändert an — den leichtgewichtigen Rückkanal (zwirn-feedback-service)
und die claim-basierte Karten-Pipeline (zwirn-autoimprove-service); für ein Produkt ist die Wahl ein
Entweder-oder, und tuxametrics hat sich für die Pipeline entschieden. Das ist eine Produktentscheidung
und sagt über Zwirn nichts. Dieselbe ADR hat das kurzlebige Eigenbau-Modul
tuxametrics-feedback-process (ADR-0006,
angenommen und abgelöst binnen eines Tages) ersatzlos entfernt.
Mit dem Autoimprove-Service hat dieses Produkt seinen ersten AGENT-Actor: ein Keycloak-Client
tuxametrics-autoimprove-agent, eine AGENT-Identity in tuxametrics-virtual-identity-service
(boot/AgentIdentitySeeder) und drei autoimprove.*-Grants. Er handelt nicht — es gibt keinen
Scheduler und keinen Bot, der ihn bedient; das wäre eine eigene Entscheidung. GM-7 ist davon
unberührt: die drei geschützten Capabilities bleiben [USER] und sind an einen AGENT nicht grantbar.
Dieselbe Adoption bringt zwei Dinge mit, die nicht nach ihr aussehen und deshalb hier stehen: der
Autoimprove-Service bekommt einen eigenen Keycloak-Client (tuxametrics-autoimprove-service)
statt des geteilten tuxametrics-services — der erste Schritt weg von der benannten
DEV-Vereinfachung, mit DOT als Präzedenzfall (C:\dev\dl-controlling\dot, ADR-0071) — und die
Authority bekommt GET /me/capabilities (web/MeResource), weil jede handelnde Schaltfläche der
Zwirn-Frontend-Pakete daran hängt. Beides ist in ADR-0007 begründet.
Seit 2026-08-12 ebenfalls betrieben, nicht importiert: zwirn-testmanagement-service — der
produktneutrale Katalog (TestGroup→TestSubgroup→TestCase, plus TestRun-Protokoll) hinter der
Nav-Sektion „Testfälle" in tuxametrics-ui (src/domains/testfaelle, kein fertiges Frontend-Paket,
weil Zwirn keins mitbringt). „Ausführen" ruft den bestehenden POST /demo/referenzfall erneut auf —
kein zweiter Mechanismus. Umfang, Begründung und was noch offen ist (62 von 63 Fällen ohne
Mock-Szenario):
agentic-engineering/backlog/testmanagement-integration.md.
Bauen
mvn -f pom.xml test # Reactor: alle fünf Module + ArchUnit-Regeln
cd tuxametrics-ui && npm run typecheck
Der Reactor aggregiert seit 2026-08-26 fünf Module (Authority, VID, Substanzstammdaten,
Laborauswertung, Process-Hub-Cockpit). Am 2026-08-13 waren es schon einmal fünf; jenes fünfte
(tuxametrics-feedback-process) ist am 2026-08-14 mit ADR-0007 entfallen — das heutige fünfte ist ein
anderer Fall (ADR-0012, echte Datenhoheitsgrenze statt zweiter Schnitt derselben Domäne).
Jedes Quarkus-Modul ist auch einzeln baubar
(mvn -f <modul>/pom.xml test) und hat bewusst keinen <parent> — Aggregation ist in Maven
unabhängig von Vererbung.
Nativer Bau (GG-DEVOPS-0003, Pflicht für jeden nicht-lokalen Einsatz):
mvn -f <modul>/pom.xml package -DskipTests -Pnative \
-Dquarkus.native.container-build=true \
-Dquarkus.native.builder-image=quay.io/quarkus/ubi9-quarkus-mandrel-builder-image:jdk-25
Der Heap-Deckel native-image-xmx=6g steht in allen vier native-Profilen und ist nicht optional:
ohne ihn bemisst native-image seinen Heap an der sichtbaren Maschine statt am freien Speicher.
Bei Exit 137 den Deckel senken, nicht erhöhen — 137 ist SIGKILL von außen, ein größerer -Xmx
verschlimmert es (Quarkus' eigene Meldung rät hier falsch herum). Am 2026-08-10 liefen zwei Module erst
mit -Dquarkus.native.native-image-xmx=4g durch. Alle drei Module sind nativ gebaut; gestartet wurde
keines — das ist eine andere Aussage.
tuxametrics-process-hub-cockpit bleibt bewusst JVM (Flowable/Spring, Reflection) — eine benannte
Ausnahme von GG-DEVOPS-0003, kein Versehen.