diff --git a/examples/conformance/README.md b/examples/conformance/README.md
index 23ac7cbe..83fe762d 100644
--- a/examples/conformance/README.md
+++ b/examples/conformance/README.md
@@ -7,8 +7,12 @@ It also proves that optimistic versions remain isolated when different entity
types use the same numeric ID and their mutation ledgers are merged.
```bash
-make run
+examples/verify-runtime-examples.sh
```
+Run the command from the repository root. It builds against current reactor
+sources and verifies this example together with the School bootstrap example,
+using an isolated temporary SQLite database for each run.
+
The generated Runtime Module is installed at application startup but remains a
passive manifest. Schema reconciliation is invoked separately and explicitly.
diff --git a/examples/school-management/README.md b/examples/school-management/README.md
index ef56460f..e7773bfe 100644
--- a/examples/school-management/README.md
+++ b/examples/school-management/README.md
@@ -19,3 +19,8 @@ related entities as `NotLoaded`.
Before publication, install the repository's local runtime and then run the
generated workspace. The portable SQL runtime test separately changes a constant
and verifies optimistic, single-version reconciliation.
+
+From the repository root, run `examples/verify-runtime-examples.sh`. The gate
+builds both retained examples against the current reactor sources, assigns each
+run an isolated temporary SQLite database, waits for its acceptance marker, and
+exits non-zero if either application fails or times out.
diff --git a/examples/verify-runtime-examples.sh b/examples/verify-runtime-examples.sh
new file mode 100755
index 00000000..9a28d0d9
--- /dev/null
+++ b/examples/verify-runtime-examples.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+run_dir="$(mktemp -d)"
+active_pid=""
+
+cleanup() {
+ if [[ -n "$active_pid" ]] && kill -0 "$active_pid" 2>/dev/null; then
+ kill "$active_pid" 2>/dev/null || true
+ wait "$active_pid" 2>/dev/null || true
+ fi
+ rm -rf "$run_dir"
+}
+trap cleanup EXIT
+
+mvn -q -f "$repo_dir/pom.xml" \
+ -Pruntime-examples \
+ -pl examples/conformance,examples/school-management \
+ -am package -DskipTests
+
+run_example() {
+ local name="$1"
+ local jar="$2"
+ local marker="$3"
+ local log="$run_dir/$name.log"
+ local database="$run_dir/$name.db"
+
+ java -jar "$jar" \
+ "--spring.datasource.url=jdbc:sqlite:$database" \
+ --server.port=0 >"$log" 2>&1 &
+ active_pid=$!
+
+ for _ in $(seq 1 240); do
+ if grep -Fq "$marker" "$log"; then
+ kill "$active_pid" 2>/dev/null || true
+ wait "$active_pid" 2>/dev/null || true
+ active_pid=""
+ printf 'PASS %s\n' "$name"
+ return 0
+ fi
+ if ! kill -0 "$active_pid" 2>/dev/null; then
+ wait "$active_pid" || true
+ active_pid=""
+ printf 'FAIL %s exited before its acceptance marker\n' "$name" >&2
+ sed -n '1,240p' "$log" >&2
+ return 1
+ fi
+ sleep 0.25
+ done
+
+ printf 'FAIL %s did not emit its acceptance marker within 60 seconds\n' "$name" >&2
+ sed -n '1,240p' "$log" >&2
+ return 1
+}
+
+run_example \
+ "conformance" \
+ "$repo_dir/examples/conformance/target/deploy/runtime-example-conformance-service-0.0.1-SNAPSHOT.jar" \
+ "PASS Java minimum runtime conformance: 8/8"
+
+run_example \
+ "school-management" \
+ "$repo_dir/examples/school-management/target/deploy/school-management-service-0.0.1-SNAPSHOT.jar" \
+ "PASS Java School bootstrap, portable Query, and native SQLite Facet parity"
+
+printf 'PASS Java runtime examples: 2/2\n'
diff --git a/pom.xml b/pom.xml
index 768c23a8..559e5a92 100644
--- a/pom.xml
+++ b/pom.xml
@@ -359,6 +359,16 @@
+
+
+ runtime-examples
+
+ examples/school-management/lib
+ examples/school-management
+
+
+
+
TEAQL
diff --git a/teaql-duckdb/README.md b/teaql-duckdb/README.md
index faa7d67d..8ddbc45e 100644
--- a/teaql-duckdb/README.md
+++ b/teaql-duckdb/README.md
@@ -2,5 +2,22 @@
This module provides DuckDB support for TeaQL.
+The executable compatibility gate defaults to DuckDB JDBC `1.5.5.1`:
+
+```bash
+mvn -pl teaql-duckdb test
+```
+
+An older driver can be checked with the same tests, for example:
+
+```bash
+mvn -pl teaql-duckdb clean test -Dduckdb.version=1.0.0
+```
+
+Compatibility claims refer to the Java JDBC driver exercised by this gate,
+not to a separately installed DuckDB CLI.
+
## Test Report
-A complete testing phase was successfully run with our core Vending Machine logic on DuckDB `1.0.0`. Read the full [TEST_REPORT.md](./TEST_REPORT.md) for details.
+The historical Vending Machine report used DuckDB `1.0.0`. The retained Maven
+gate verifies current JDBC compatibility; read [TEST_REPORT.md](./TEST_REPORT.md)
+for the earlier test scope.
diff --git a/teaql-duckdb/pom.xml b/teaql-duckdb/pom.xml
index 7aba3eba..96bef910 100644
--- a/teaql-duckdb/pom.xml
+++ b/teaql-duckdb/pom.xml
@@ -10,6 +10,10 @@
teaql-duckdb
teaql-duckdb
+
+
+ 1.5.5.1
+
io.teaql
@@ -19,5 +23,44 @@
io.teaql
teaql-utils
+
+ org.duckdb
+ duckdb_jdbc
+ ${duckdb.version}
+ test
+
+
+ io.teaql
+ teaql-provider-jdbc
+ ${project.version}
+ test
+
+
+ io.teaql
+ teaql-runtime
+ ${project.version}
+ test
+
+
+ junit
+ junit
+ test
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ --add-reads io.teaql.duck=io.teaql.runtime
+ --add-reads io.teaql.duck=java.sql
+ --add-opens io.teaql.duck/io.teaql.duckdb=io.teaql.utils
+ --add-opens io.teaql.core/io.teaql.core=io.teaql.utils
+
+
+
+
+
diff --git a/teaql-duckdb/src/main/java/io/teaql/core/duck/DuckDataServiceExecutor.java b/teaql-duckdb/src/main/java/io/teaql/core/duck/DuckDataServiceExecutor.java
index 5decc0f1..573f5f55 100644
--- a/teaql-duckdb/src/main/java/io/teaql/core/duck/DuckDataServiceExecutor.java
+++ b/teaql-duckdb/src/main/java/io/teaql/core/duck/DuckDataServiceExecutor.java
@@ -15,6 +15,7 @@ public class DuckDataServiceExecutor extends SqlDataServiceExecutor {
public DuckDataServiceExecutor(String name, SqlExecutionAdapter executionAdapter) {
super(name, executionAdapter);
+ this.debugDatabaseKind = "duckdb";
}
@Override
@@ -50,7 +51,11 @@ public void executeInTransaction(Runnable action) {
@Override
public List