6.0 KiB
DB-Beziehungsanalyse v1
Die Operation project.query akzeptiert bei konfigurierten Analyseprofilen:
{"kind":"database.relations","profile":"creature_spawn_context","value":23487}
Die LLM bestimmt nur Profil und Startwert. Tabellen, Spalten, Gleichheitsbeziehungen und Projektionen kommen aus der vertrauenswürdigen Projektkonfiguration. Es gibt keine freie SQL-Eingabe, keine automatische Fremdschlüsselvermutung und keine eingebaute Diagnose. Grundwerkzeuge bleiben für weitere Fragen verfügbar.
Konfiguration und Systemgrenze
relations_file = "project-relations.vcore.toml" steht auf der obersten Ebene
der Projekt-TOML. Alternativ können Profile direkt unter [relations] definiert
werden; beide Varianten zugleich sind unzulässig. Das Vcore-Beispiel ist getrennte
Adapterkonfiguration. Der Kern kennt keine Kreaturen, Quests oder Gebietsnummern.
Ein Profil hat eine Beschreibung und eine geordnete Liste benannter Knoten:
- Der erste Knoten filtert
table.match_columnauf den Startwert. - Folgeknoten filtern ihre
match_columnauf die eindeutigen, nichtleeren Werte vonparent_columnin den zurückgegebenen Zeilen eines früheren Knotens. columnsbestimmt die zurückzugebenden Spalten.group_bykann eine Verteilung über höchstens fünf dieser Spalten ergänzen.
Verzweigungen sind möglich, Zyklen nicht. Unterstützt sind direkte Gleichheitsbeziehungen; zusammengesetzte Schlüssel, rekursive Traversierung und Transformationen wie der Betrag negativer Event-IDs werden nicht automatisch interpretiert. Zusätzliche Profile können unabhängig von der Kernlogik ergänzt werden. Eine ausbleibende Zuordnung ist noch keine Feststellung eines DB-Fehlers.
Das Vcore-Profil untersucht creature_template → creature →
game_event_creature → game_event. Es prüft weder dynamische Spawnpfade im
Sourcecode noch den aktuellen Zustand eines laufenden Servers. Koordinaten werden
in diesem Profil nicht übertragen; sie sind bei Bedarf mit Grundwerkzeugen lesbar.
Grenzen, Vollständigkeit und Provenienz
Pro Profil sind höchstens zwölf Knoten und dreißig projizierte Spalten je Knoten
erlaubt. ProjectLimits.max_rows begrenzt jede Ergebnismenge, timeout_seconds
die gesamte Analyse und einzelne SQL-Statements, max_result_bytes das Ergebnis.
Dies sind Sicherheitsvorgaben, keine Grenzen des Case-Paketformats. Ein Profilaufruf
ist eine budgetierte project.query-Aktion mit begrenzter interner Arbeit, keine
Folge zusätzlicher LLM-Aufrufe. Die vorhandene Aktionskostenkonfiguration bleibt
maßgeblich; dieses Werkzeug ändert keine Budgetwerte.
Alle Abfragen eines Aufrufs erfolgen in einer gemeinsamen Read-only-Transaktion
mit Repeatable Read und konsistentem Snapshot. Nur InnoDB/XtraDB-Tabellen sind
dafür zugelassen; andere Engines erzeugen kontrolliert
PROJECT_RELATIONS_SNAPSHOT_UNSUPPORTED. Die Transaktion wird zurückgerollt und
geschlossen. Angefragte Identifikatoren und Spalten werden geprüft, Werte gebunden.
Ganzzahlige Startspalten verlangen einen echten Integer, damit MySQL keine
beliebigen Texte implizit zu IDs konvertiert.
Jeder Knoten liefert genaue Filter, projizierte Zeilen, benötigte Spaltenmetadaten, Anzahl der zurückgegebenen Zeilen und getrennte Angaben zu lokaler Begrenzung und vollständiger Elternmenge. Verteilungen beziehen sich ausdrücklich nur auf die zurückgegebenen Zeilen. Eine begrenzte Elternmenge macht alle abhängigen Ergebnisse unvollständig, auch wenn deren eigene Seite nicht begrenzt wurde. Die tatsächliche Gesamtzahl außerhalb einer begrenzten Seite wird nicht behauptet.
Ohne Elternschlüssel wird eine Folgeabfrage übersprungen und als solche markiert.
Ein fehlender Startdatensatz schließt insbesondere verwaiste Zeilen in anderen
Tabellen nicht aus. complete_configured_relations bedeutet ausschließlich:
Die konkret konfigurierten Verbindungen wurden ohne Seitenbegrenzung verarbeitet.
Es bedeutet weder vollständige Datenbankanalyse noch Ausschluss anderer Ursachen.
Für größere Mengen stehen die bisherigen paginierbaren Grundwerkzeuge bereit.
Der Capture enthält Snapshot-Bindung, vollständigen Profilplan und dessen Hash. Er wird wie bisher unveränderlich als Evidenz gespeichert und ist ohne erneute DB-Abfrage transportierbar. Änderungen am Profil ändern die Capture-Bindung; Änderungen gegenüber einem bereits begonnenen Untersuchungskontext werden abgelehnt. Abfragen werden während des Controller-Zyklus eingefroren. Die konkrete DB-Momentaufnahme hängt weiterhin von der ehrlich konfigurierten Snapshot-ID ab.
LLM-Anbindung und Kompatibilität
Neue Kontexte mit Profilen erhalten Katalog, Argumentvertrag und die Empfehlung, passende größere Werkzeuge zuerst zu verwenden. Sie müssen diese nicht verwenden. Der bestehende Cache kann den Werkzeugkatalog wie andere stabile Kontextbestandteile wiederverwenden. Eine zusätzliche Zusammenfassungs-LLM gibt es nicht.
Ohne Profile bleibt die bisherige Promptstruktur bestehen. Gespeicherte Kontexte behalten ihren damaligen Vertrag. Die portablen Request-, State- und Capture-Schemas akzeptieren die zusätzliche Operation. Die Prüfung numerischer Codingangaben berücksichtigt auch die hier gewonnenen Zeilen.
Lokale Prüfung
Tests decken parametrisierte Abfragen, Allowlist, Konfigurationsfehler, begrenzte Elternmengen, leere Ergebnisse, Zeit-/Bytegrenzen, Snapshot-Engine-Prüfung, Paketvalidierung, Budgetierung und Wiederaufnahme ab. Ein simulierter LLM-Durchlauf prüft die Werkzeugauswahl in der hybriden Schleife.
Der opt-in Test an der lokalen Vcore-Testdatenbank prüft für Entry 23487 eine Vorlage, achtzehn Spawns ausschließlich auf Map 1, achtzehn dazugehörige Event-Verknüpfungen und Event 24. Der projizierte Capture umfasst beim geprüften Backup ungefähr 8,3 KB. Das ist ein Funktionsnachweis, keine Kostenprognose und noch kein Nachweis der Werkzeugwahl durch eine echte LLM. Es wurden dafür keine kostenpflichtigen API-Aufrufe ausgeführt.
$env:VBA_TEST_PROJECT_CONFIG = "config/project.local.toml"
.\.venv\Scripts\python.exe -m pytest tests/test_database_relations.py -q