10 Commits
Author SHA1 Message Date
james.maesandClaude Opus 5.5 c42209a009 build(deps): align with Gitea registry (parent 2.2.1, QQQ 4.1.0-RC.26)
maven / build (push) Successful in 4m35s
build / maven (push) Successful in 4m35s
pom.xml: parent -> 2.2.1
pom.xml: qqq.snapshot.version: 4.1.0-RC.15 -> 4.1.0-RC.26
pom.xml: removed Central snapshot repository
pom.xml: added qqq.version=4.1.0-RC.26 (parent BOM import)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 18:09:34 +00:00
james.maesandClaude Opus 5.5 912840a22d chore: target QQQ 4.1.0-RC.15 (UI API 1.6.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:27:08 -05:00
james.maesandClaude Opus 5.5 db4715c906 feat(ui-api): extension for QQQ UI API 1.6.0 (operationIds, BasicErrorResponseV1, QQQ 4.1.0-RC.14)
Regenerated against UI API 1.6.0: every operation has an operationId and
the standard error responses (BasicErrorResponseV1: error, code, message,
fieldErrors, traceId); the extension's own error schema is kept but
deprecated; hand-written error bodies go through QJavalinUtils so they carry
code/message/traceId. Extension MINOR bumped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:48:14 -05:00
james.maesandClaude Opus 5.5 ae54611acf fix(help): the help bundle carries the artifact version (Maven-filtered) instead of a hardcoded SNAPSHOT
On release branches the bundle's version and the producer's differed, so the
bundle test that asserts they match failed, and released bundles recorded
SNAPSHOT as their provenance. help/*.yaml is now filtered:
version: ${project.version}.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:00:10 -05:00
james.maesandClaude Opus 5.5 e783261d2d feat(help): ship the qbit-sql-workbench help bundle through QQQ help bundles, with coverage gate
Host-neutral help (deployment-specific facts removed), registered with
HelpBundles, gated by HelpBundleAssertions. QQQ 4.1.0-RC.7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:37:18 -05:00
james.maesandClaude Opus 5.5 103ef543d1 build: qbit-build-parent 2.1.0 with architecture guardrails enforced
Enforce the qbit-bom#10 guardrails (G1, G3, G4, G7) and run tests in
strict raw-route mode (G2). All pass on the released QQQ 4.1.0-RC.6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 07:15:14 -05:00
james.maesandClaude Opus 5.5 84a7033ae4 feat(api): serve the sql-workbench routes as spec'd UI API extension endpoints
Replace SqlWorkbenchRouteProvider (21 raw /qqq/v1/sql-workbench Javalin
routes) with one MiddlewareSpecExtension "sql-workbench" (prefix
/sql-workbench). JSON operations use AbstractJsonEndpointSpec; the result
export stream extends AbstractEndpointSpec.

Paths, methods and payloads are unchanged, and so are the permission
checks, read-only gates, limits and audit. The generated fragment is
committed at openapi/qqq-v1/sql-workbench.yaml and checked by a contract
test. The server tests run in strict raw-route mode.

The core baseline becomes 4.1.0-RC.6, the first RC with the extension
point (QRun-IO/qqq#1128).

Closes #20 (architecture review QRun-IO/qqq#1150, finding F2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:48:18 -05:00
james.maesandClaude Opus 5.5 e0d9312aff feat: SQL Workbench record developer panel
Add SqlWorkbenchDeveloperPanelProvider (id sqlWorkbench, order 450, icon
terminal), registered by SqlWorkbenchDeveloperPanelsMetaDataProducer via
DeveloperPanelsMetaData. For tables on an allowed RDBMS backend, and users
with the workbench access permission, it shows read-only SELECTs for the
record and its table in the backend's own table/column names (dialect
quoted identifiers, escaped primary-key literal), backend details, and
links that open each query in the workbench (?sql=&backend=, not run).

Build against QQQ 4.1.0-RC.4 (the developer panel contract).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:38:51 -05:00
james.maesandClaude Opus 5.5 ec607016bd build: build against the released QQQ 4.1.0-RC.2
Re-pin the default-active qqq-snapshot profile from qqq-bom-pom
4.1.0-RC.1 to 4.1.0-RC.2 (now on Maven Central) and update the docs.
No SNAPSHOT dependencies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:49:10 -05:00
james.maesandClaude Opus 5.5 b8d33460bf feat: SQL Workbench qbit 1.0 backend
QQQ 4.1 QBit (com.kingsrook.qbits:sql-workbench) for a super-user SQL
notebook over any RDBMS backend of the instance:

- Dialect-aware scanner, statement splitter/classifier (READ,
  EXPLAIN_ANALYZE, WRITE, DDL, FORBIDDEN) and :named parameter binding.
- Execution engine: read-only sessions in a database READ ONLY
  transaction (Postgres, MySQL, SQLite query_only; classifier on H2),
  gated write mode (rolled-back dry run, single-use confirm token,
  row guard, hard cap, drift check), statement timeouts, row/byte caps,
  cancellation, per-user concurrency, clean connection return, and a
  fail-closed execution audit (audit updates deferred until the
  session connection is released).
- Dedicated read-only/write credentials per backend; backend read-only
  replica support.
- EXPLAIN / EXPLAIN ANALYZE (always rolled back) normalized to a plan
  tree; schema introspection with QQQ table/field -> SQL name mapping.
- Notebooks (personal/shared), cells, versions with retention, result
  snapshots.
- REST routes under /qqq/v1/sql-workbench (Javalin 7, JSON-only
  bodies), CSV/XLSX/JSON export.
- Tables, notebook PVS, SQL_WORKBENCH widget and sqlWorkbench app; no
  processes. PostgreSQL DDL in docs/ddl/postgres.sql.
- Tests: 83 unit (H2, SQLite, HTTP) + 6 Testcontainers Postgres
  integration tests; JaCoCo 94% instructions.
- CircleCI qqq-orb 0.6.8 config, Maven wrapper, CLAUDE.md/AGENTS.md,
  CHANGELOG.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 09:47:40 -05:00