Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion build/interlis/JvmBuildInputs.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
public final class JvmBuildInputs {
public static final List<String> MODULES = List.of("interlis-model", "interlis-compiler",
"interlis-workspace", "interlis-repository", "interlis-projection", "interlis-documentation",
"interlis-wasm-bridge", "interlis-compiler-cli", "interlis-lsp", "interlis-compiler-gui", "interlis-verification");
"interlis-transfer", "interlis-wasm-bridge", "interlis-compiler-cli", "interlis-lsp",
"interlis-compiler-gui", "interlis-verification");

public static void requireProject(Path root) throws Exception {
if (Runtime.version().feature() != 25) throw new IllegalStateException("Java25 required");
Expand Down
10 changes: 9 additions & 1 deletion build/interlis/ModulePathContract.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,14 @@ public static void run(Path root)throws Exception {
var result=JenesisBridge.moduleResult(outcome,project);
if(!result.explicitDescriptor()||!result.moduleName().orElseThrow().equals(name(project)))throw new IllegalStateException("Wrong own module: "+project);
own.add(name(project));
for(var artifact:ModuleArtifacts.runtime(root,project,outcome)) {
var runtime=ModuleArtifacts.runtime(root,project,outcome);
if(project.equals("interlis-transfer")) {
String prefix="maven/guru.interlis/", version="/"+JvmBuildInputs.projectVersion(root);
var expected=Set.of(prefix+"interlis-transfer"+version,prefix+"interlis-model"+version);
var actual=runtime.stream().map(ModuleArtifacts.Artifact::coordinates).collect(java.util.stream.Collectors.toSet());
if(!actual.equals(expected))throw new IllegalStateException("Unexpected transfer runtime closure: "+actual);
}
for(var artifact:runtime) {
Path prior=files.putIfAbsent(artifact.fileName(),artifact.file());
if(prior!=null&&!JvmBuildInputs.sha256(prior).equals(artifact.sha256()))throw new IllegalStateException("Conflicting module-path artifact");
}
Expand Down Expand Up @@ -63,6 +70,7 @@ public static void run(Path root)throws Exception {
"guru.interlis.repository","guru.interlis.repository.RepositoryClient",
"guru.interlis.projection","guru.interlis.projection.DiagramProjector",
"guru.interlis.documentation","guru.interlis.documentation.DocumentationProjector",
"guru.interlis.transfer","guru.interlis.transfer.TransferPlanner",
"guru.interlis.wasm.bridge","guru.interlis.bridge.BridgeDispatcher");
String extra=String.join("\n",own.stream().filter(entrypoints::containsKey).map(name->
"if (named && !"+entrypoints.get(name)+".class.getModule().getName().equals(\""+name+"\")) throw new AssertionError(\"Wrong public entrypoint module\");").toList());
Expand Down
3 changes: 2 additions & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ Die zugehörigen POMs beschreiben die konkreten Abhängigkeiten und Scopes.
| `interlis-repository` | workspace, model | Datei-/HTTP-Host, Indexe, Beschaffung, Cache und Lock |
| `interlis-projection` | compiler, model | Diagramm-DTOs und reine Projektion |
| `interlis-documentation` | model, projection | Lesende Dokumentationsprojektion und Rendering |
| `interlis-transfer` | model | Formatunabhängige Transferpläne, Objektwerte und Streaming-Protokoll |
| `interlis-compiler-cli` | compiler, model, repository, workspace, projection | CLI, Prozessgrenzen, Präsentation und Ausgabe |
| `interlis-compiler-gui` | model, compiler, workspace, repository | Desktop-Modellprüfung, Diagnosen, Abhängigkeiten und Repositoryexplorer |
| `interlis-lsp` | workspace, compiler, projection, model, repository, documentation | LSP-/Editorhost, Scheduling und Ausgaben |
| `interlis-wasm-bridge` | workspace, compiler, projection, model | Gemeinsames JSON-Protokoll und Sitzungen |
| `interlis-verification` | compiler, model, workspace, repository, wasm-bridge | Prüfwerkzeuge ausserhalb der SDK-Auslieferung |

Alle elf JVM-Module werden über denselben Builder erzeugt. Die
Alle zwölf JVM-Module werden über denselben Builder erzeugt. Die
jeweils ausgewählten JPMS-Closures stehen im
[Buildvertrag](development/build.md). TeaVM und Web Image konsumieren
denselben expliziten JVM-Snapshot. Browser und Editor teilen den neutralen
Expand Down
4 changes: 2 additions & 2 deletions docs/contracts/requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Der [Compilerkatalog](../../testdata/verification/compiler-contracts.json) binde
| <a id="nfr-008"></a>`NFR-008` | Öffentliche Resultate MÜSSEN Nullfreiheit, Reihenfolge und Lebensdauer dokumentieren. | Geltend | [Vertrag](../architecture.md) | API-Vertragstests und Register. |
| <a id="nfr-009"></a>`NFR-009` | Der Build MUSS mit gepinnten Werkzeugen reproduzierbar ausführbar sein. Jenesis baut die JVM-Produkte. Der Gradle-Wrapper baut die beiden portablen Backends. | Geltend | [Vertrag](../development/build.md) | Frischer Checkout, gepinnte Toolchain und dokumentierte Kommandos. |
| <a id="nfr-010"></a>`NFR-010` | Der Kern MUSS unabhängig von einer laufenden Serverinfrastruktur verwendbar sein. | Geltend | [Vertrag](../architecture.md) | Lokale Bibliotheks-/CLI-Ausführung ohne Spring, Datenbank oder Container. |
| <a id="nfr-011"></a>`NFR-011` | Produktionsgeometrievalidierung MUSS später begrenzte Caches, Streaming und explizite Ressourcenbudgets anbieten. | Geplant | [Vertrag](../design/transfer-validation-database.md) | Grössenkorpus und definierte Reaktion auf Budgeterschöpfung; 64 GB nicht überschritten im festgelegten Profil. |
| <a id="nfr-011"></a>`NFR-011` | Produktionsgeometrievalidierung MUSS später begrenzte Caches, Streaming und explizite Ressourcenbudgets anbieten. Ziel für repräsentative produktive Datenprüfungen, auch grösserer Datensätze, ist das Standardprofil `-Xmx2g` (2'147'483'648 Byte Java-Heap). | Geplant | [Vertrag](../design/transfer-validation-database.md#geometrie-und-speicherbudget) | Grössenkorpus und kontrollierte Reaktion auf Budgeterschöpfung gemäss `STACK-013`. |
| <a id="nfr-012"></a>`NFR-012` | Abhängigkeiten und technische Neuerungen MÜSSEN einen tatsächlichen aktuellen Nutzen haben. | Geltend | [Vertrag](../architecture.md) | Kurzer Zweck je Dependency; kein Framework nur für künftige Eventualitäten. |

## ARCH
Expand Down Expand Up @@ -321,7 +321,7 @@ Der [Compilerkatalog](../../testdata/verification/compiler-contracts.json) binde
| <a id="stack-010"></a>`STACK-010` | Datenvalidierung MUSS lokale und transferweite Regeln unterscheiden; ein lokaler Modus darf keine vollständige Validität behaupten. | Geplant | [Vertrag](../design/transfer-validation-database.md) | Bericht mit geprüften und ausgelassenen Regelklassen. |
| <a id="stack-011"></a>`STACK-011` | Ausdrucksauswertung MUSS die getypte Compilersemantik und exakte INTERLIS-Zahlendarstellung verwenden. | Geplant | [Vertrag](../design/transfer-validation-database.md) | Ausdrücke werden nicht erneut aus Rohtext interpretiert; exakte Grenzfalltests. |
| <a id="stack-012"></a>`STACK-012` | Geometrieprüfungen MÜSSEN wiederholte Arbeit vermeiden, fachlich relevante Rundungs-/Bogenregeln aber erhalten. | Geplant | [Vertrag](../design/transfer-validation-database.md) | Geometrieadapter- und Cachetests mit Bögen, Präzision und geänderten Optionen. |
| <a id="stack-013"></a>`STACK-013` | Validierung MUSS ein explizites Ressourcenbudget unterstützen; für die vorgesehene grosse Betriebsvariante ist ein Gesamtbudget von höchstens 64 GB planbar. | Geplant | [Vertrag](../design/transfer-validation-database.md#geometrie-und-speicherbudget) | Lasttest berücksichtigt Heap, Native Memory, Caches und Puffer; Überschreitung wird kontrolliert behandelt. |
| <a id="stack-013"></a>`STACK-013` | Validierung MUSS ein explizites Ressourcenbudget unterstützen. Das Standardprofil strebt repräsentative produktive Datenprüfungen, auch grösserer Datensätze, unter `-Xmx2g` (2'147'483'648 Byte Java-Heap) an. Fachlich extrem komplexe Eingaben dürfen nach Begründung höhere Budgets benötigen. | Geplant | [Vertrag](../design/transfer-validation-database.md#geometrie-und-speicherbudget) | Lasttest erfasst Heap, Gesamtprozessspeicher (RSS), native Allokationen, Cache, temporären Spitzenplatz, I/O und Laufzeit getrennt. Budgeterschöpfung wird kontrolliert behandelt. |
| <a id="stack-014"></a>`STACK-014` | Laufzeitabhängige GENERIC-/DEFERRED-Konkretisierung MUSS als gültiger Modellzustand erhalten und über passenden Kontext geprüft werden. | Geltend | [Vertrag](../design/transfer-validation-database.md#basketabhängige-domänenkonkretisierung) | Gültige abstrakte Domäne kompiliert; fehlende oder ungültige Transferkonkretisierung wird separat diagnostiziert. |
| <a id="stack-015"></a>`STACK-015` | Konfigurations- und CRS-/Übersetzungs-Overlays MÜSSEN explizit, unveränderlich und Teil des Plan-Fingerprints sein. | Geltend | [Vertrag](../design/transfer-validation-database.md) | Verschiedene Overlays teilen keine inkorrekten Pläne oder Caches. |

Expand Down
Loading
Loading