# R10-Abnahme der Linear-XLSX-Anbindung Stand: 30.09.2026. R10 schließt Phase 14 mit synthetischen, reproduzierbaren Integrations- und Lasttests ab. Die reale Musterdatei wird dafür nicht benötigt und bleibt unversioniert. ## Ende-zu-Ende-Nachweis `tests/revit-xlsx-end-to-end.test.ts` verwendet eine dateibasierte SQLite- Datenbank und prüft in einer Kette: ```text Erstimport → Objektplanung → Row-Zuordnung → Rückgabe-XLSX → Folgeimport → Snapshot/Restore → Projektduplikat → Datenbankneustart → Undo → Redo ``` Der Test bestätigt insbesondere die materialisierte Row-Menge, die Reduktion des älteren Importbatches auf Metadaten, das Remapping aller internen UUIDs im Duplikat und parserfreies Undo/Redo nach dem Neustart. ## Last- und Größenmessung `tests/revit-xlsx-scale.test.ts` erzeugt 5.000 synthetische Objekte in einer Linear-kompatiblen XLSX. Der Test misst Erst- und Folgeimport, Command- und Snapshotgröße, Heap-Wachstum sowie clientseitiges Filtern, Sortieren und das virtuelle Fenster. Er führt außerdem Snapshot-Restore und Projektduplikat mit dem vollständigen Zustand aus. Messung auf der Entwicklungsumgebung am 30.09.2026: | Messwert | Ergebnis | | --- | ---: | | Objekte | 5.000 | | XLSX-Datei | 191.019 Bytes | | Erstimport-Command | 15.598.253 Bytes | | logischer Projektsnapshot | 15.598.071 Bytes | | XLSX-Erstplanung | 6.831 ms | | atomare Erstimporttransaktion | 672 ms | | XLSX-Folgeplanung | 6.303 ms | | atomare Folgeimporttransaktion | 887 ms | | Clientfilter, Sortierung und Fenster | 37 ms | | Heap-Zuwachs des erfolgreichen Gesamtlaufs | 154.125.568 Bytes | Der Heap-Wert ist wegen Garbage Collection und der absichtlich verwendeten In-Memory-Datenbank nicht deterministisch. Wiederholte Auditläufe lagen unter der Testobergrenze von 768 MiB. Das virtuelle Fenster enthält bei 520 px Höhe maximal 22 statt 5.000 Zeilen. ## Gefundene und behobene Grenze Der erste 5.000-Objekte-Lauf scheiterte an einem ungebatchten SQLite- Mehrfach-Insert. `insertManyInBatches` begrenzt nun die Insertblöcke für Erstimport, Folgeimport, Snapshot-Restore und Projektduplikat. Alle Blöcke bleiben Teil der jeweiligen bestehenden Transaktion; ein Fehler rollt weiterhin die gesamte Operation zurück. Die vorhandenen Tests decken außerdem die deutschen Ablehnungen alter CSV-Snapshots und CSV-History, Löschwarnungen, atomare Link-Inversen und den Schutz referenzierter Räume und Verteiler ab.