Commit Graph
80 Commits
Author SHA1 Message Date
dependabot[bot] 2f861143c3 build(deps): Bump the github-actions group with 2 updates
Bumps the github-actions group with 2 updates: [QRun-IO/qqq-orb/.github/workflows/qbit-codeql.yml](https://github.com/qrun-io/qqq-orb) and [QRun-IO/qqq-orb/.github/workflows/qbit-release-rc.yml](https://github.com/qrun-io/qqq-orb).


Updates `QRun-IO/qqq-orb/.github/workflows/qbit-codeql.yml` from c288a8864fe9054f68410e1d78f5863aea4c4d22 to 9b48a14bce9d409d4b2e26654486f219e9bbe3af
- [Release notes](https://github.com/qrun-io/qqq-orb/releases)
- [Changelog](https://github.com/QRun-IO/qqq-orb/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/qrun-io/qqq-orb/compare/c288a8864fe9054f68410e1d78f5863aea4c4d22...9b48a14bce9d409d4b2e26654486f219e9bbe3af)

Updates `QRun-IO/qqq-orb/.github/workflows/qbit-release-rc.yml` from cc30f599e63c8e41629c99d23395bac1adb8bc44 to 9b48a14bce9d409d4b2e26654486f219e9bbe3af
- [Release notes](https://github.com/qrun-io/qqq-orb/releases)
- [Changelog](https://github.com/QRun-IO/qqq-orb/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/qrun-io/qqq-orb/compare/cc30f599e63c8e41629c99d23395bac1adb8bc44...9b48a14bce9d409d4b2e26654486f219e9bbe3af)

---
updated-dependencies:
- dependency-name: QRun-IO/qqq-orb/.github/workflows/qbit-codeql.yml
  dependency-version: 9b48a14bce9d409d4b2e26654486f219e9bbe3af
  dependency-type: direct:production
  dependency-group: github-actions
- dependency-name: QRun-IO/qqq-orb/.github/workflows/qbit-release-rc.yml
  dependency-version: 9b48a14bce9d409d4b2e26654486f219e9bbe3af
  dependency-type: direct:production
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 00:25:28 +00:00
james.maesandCodex a182076722 ci: adopt managed orb 0.8 patch track (#41)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 15:27:52 -05:00
james.maesandCodex 7f0e9b38dc ci: adopt shared orb 0.7.18 (#40)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 14:42:53 -05:00
james.maesandCodex d3327cd4f3 ci: adopt shared orb 0.7.17 (#39)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 14:14:48 -05:00
james.maesandCodex af7510efc0 ci: use central source scanning (#36)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 11:50:10 -05:00
james.maesandCodex 2e535d5037 ci: adopt central orb 0.7.12 and stable gates (#35)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 08:56:03 -05:00
james.maesandCodex f47c40ffbf ci: centralize rc release completion in qqq orb (#34)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 02:25:19 -05:00
james.maesandCodex 15844af91e ci: adopt shared orb 0.7.11 (#33)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 00:56:30 -05:00
james.maes 2b7edc25a5 Merge pull request #32 from QRun-IO/feature/central-ci
ci: adopt shared QQQ orb standard
2026-10-20 19:07:11 -05:00
james.maesandCodex f98d8124f4 ci: adopt verified central QQQ orb 0.7.3
Co-Authored-By: Codex <noreply@openai.com>
2026-10-20 19:03:06 -05:00
james.maes 677f800015 Merge pull request #29 from QRun-IO/ci/release-rc-secrets-inherit
ci(release-rc): pass secrets so the shared workflow can sign the RC tag
2026-10-16 08:05:28 -05:00
james.maesandClaude Opus 5.5 56b17b5768 ci(release-rc): pass secrets to the shared workflow so it can sign the RC tag
QRun-IO/.github#2 adds a tag-and-release job that signs vX with the
QRUN_TAG_SIGNING_KEY secret after Maven Central confirms the artifact.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:19:05 -05:00
james.maes ad4a492c31 Merge pull request #28 from QRun-IO/feature/ui-api-1.6
feat(ui-api): extension for QQQ UI API 1.6.0 (operationIds, BasicErrorResponseV1, QQQ 4.1.0-RC.15)
2026-10-15 16:13:14 -05: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.maes 3fcff49d4f Merge pull request #27 from QRun-IO/fix/help-bundle-version
fix(help): help bundle version comes from the build, not a hardcoded SNAPSHOT
2026-10-14 22:02:58 -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.maes 7304aaf5dd Merge pull request #26 from QRun-IO/feature/help-bundle
feat(help): qbit-sql-workbench help bundle via QQQ help bundles, with coverage gate
2026-10-14 20:45:31 -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.maes ee2fd12aa1 Merge pull request #24 from QRun-IO/feature/foreign-keys
test(ddl): guardrail that every table reference has a foreign key
2026-10-14 17:36:48 -05:00
james.maes 60d8776564 Merge pull request #23 from QRun-IO/feature/schema-notebook-indexes
fix(ddl): index result_snapshot.notebook_id and execution.notebook_id
2026-10-14 17:36:42 -05:00
james.maes b281741d2e Merge pull request #25 from QRun-IO/feature/tables-populated-defaults
SQL Workbench: table help, guardrail test, audit retention
2026-10-14 17:19:50 -05:00
james.maesandClaude Sonnet 5.5 47a3e62a45 fix(audit): prune in bounded background batches, spare RUNNING rows, delay first pass
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 17:16:05 -05:00
james.maesandClaude Opus 5.5 7e9017c376 feat(help): table help, guardrail test and audit retention
Adds help/sql-workbench.yaml (empty-state help for all six tables) applied by
SqlWorkbenchHelp, a tables guardrail test, and the auditRetentionDays config
that DESIGN.md described but did not exist (default null keeps everything).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:58:04 -05:00
james.maesandClaude Opus 5.5 6da4fb400d test(ddl): guardrail that every table reference has a foreign key
PostgresIntegrationTest applies docs/ddl/postgres.sql on PostgreSQL and
checks that every join and every table possible-value reference between
the workbench's tables has a foreign key, or an exemption with a reason.

The only exemption is sql_workbench_execution.notebook_id, by design: the
execution audit is append-only and outlives its notebook. CASCADE would
delete audit rows, RESTRICT would block deleting any notebook that ever ran
(NotebookTableCustomizer deletes cells, versions, pinned results and shares,
not the audit), SET NULL would rewrite audit rows, and the engine records the
client's notebook id even when that notebook was deleted meanwhile, so the
audit insert must never fail on it.

The existing notebook foreign keys stay NO ACTION: NotebookTableCustomizer
deletes the children through QQQ (audits, locks) before the notebook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:22:48 -05:00
james.maesandClaude Opus 5.5 7c2d0610a5 fix(ddl): index result_snapshot.notebook_id and execution.notebook_id
The foreign key sql_workbench_result_snapshot.notebook_id had no index.
NotebookService lists a notebook's snapshots by it, the notebook delete
cascade and the child record lock use it, and the notebook page's Runs
list joins executions on notebook_id. The reference DDL and the H2 test
schema add both indexes. The Postgres integration test now fails if any
sql_workbench_ foreign-key column lacks a leading index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:28:18 -05:00
james.maes 268499aa74 Merge pull request #22 from QRun-IO/feature/orb-0.6.9
ci: qqq-orb 0.6.9 (refresh SNAPSHOT dependencies)
2026-10-14 10:46:39 -05:00
james.maesandClaude Opus 5.5 d864eb996d ci: qqq-orb 0.6.9 (refresh SNAPSHOT dependencies)
Moves qqq-orb@0.6.8 to qqq-orb@0.6.9, which passes --update-snapshots so cached SNAPSHOT dependencies are re-checked on every build (QRun-IO/qqq-orb#22).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:07:53 -05:00
james.maes c59b2ae72f Merge pull request #21 from QRun-IO/feature/arch-ui-api-specs
feat(api): sql-workbench routes as spec'd UI API extension endpoints (#20)
2026-10-14 07:21:36 -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.maes 316a5d6f71 Merge pull request #19 from QRun-IO/feature/release-rc-automation
ci: automate RC releases; hotfix/* pushes no longer publish
2026-10-13 14:43:23 -05:00
james.maesandClaude Opus 5.5 236fa901cf ci: automate RC releases; hotfix/* pushes no longer publish
Removes publish_hotfix_release: a hotfix/* branch push published a GA
release to Maven Central with no tag or review (QRun-IO/qbit-cdn#12,
QRun-IO/qqq#1121). hotfix/* branches now run test_only; a hotfix
release publishes from a reviewed vX.Y.Z tag through publish_release.
Adds .github/workflows/release-rc.yml (reusable QRun-IO/.github
qbit-release-rc): a manual dispatch, or merging a develop PR labelled
release:rc, merges develop into the release line and the release/* push
runs the existing CircleCI RC publish.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:31:10 -05:00
james.maes 5600496cce Merge pull request #18 from QRun-IO/feature/fix-rename-version-labels
docs: name 1.0.0-RC.4 as the snake_case rename release
2026-10-12 17:07:41 -05:00
james.maesandClaude Opus 5.5 b0b027a9aa docs: name 1.0.0-RC.4 as the snake_case rename release
1.0.0-RC.3 on Maven Central is an accidental republish of RC.2, so the
rename shipped in 1.0.0-RC.4. Point UPGRADE.md, the @Deprecated(since)
annotations, their javadoc, the RC.4 changelog wording, the README
upgrade row and the naming test comment at RC.4, and note that upgrading
from RC.3 is the same as upgrading from RC.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:05:36 -05:00
james.maes 4d5139cab6 Merge pull request #16 from QRun-IO/feature/snapshot-insert-permission
fix(permissions): grant result_snapshot.insert to users (pinning under core enforcement)
2026-10-12 16:25:08 -05:00
james.maes 3ca94f7da5 Merge branch 'develop' into feature/snapshot-insert-permission 2026-10-12 16:23:04 -05:00
james.maes cfb176e3ac Merge pull request #17 from QRun-IO/feature/note-burned-rc
docs: note that 1.0.0-RC.3 is a burned republish of RC.2
2026-10-12 16:17:20 -05:00
james.maesandClaude Opus 5.5 c858bcb720 docs: note that 1.0.0-RC.3 is a burned republish of RC.2
A tag build of v1.0.0-RC.2 published 1.0.0-RC.3 with the RC.2 code
(QRun-IO/qqq-orb#20). Add a dated do-not-use entry for RC.3 and move
the unreleased work to 1.0.0-RC.4, the next real candidate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:13:36 -05:00
james.maesandClaude Opus 5.5 e156a710e3 fix(permissions): grant result_snapshot.insert to users (pinning under core enforcement)
Pinning a result inserts a sql_workbench_result_snapshot row as a top-level
action. With QQQ core permission enforcement on, that insert is checked
against the session's permissions, and getUserPermissionNames() granted
only read/edit/delete on snapshots, so every user's pin was denied and
hosts had to grant the insert by hand. Record locks still limit snapshots
to the user's own notebooks.

New test: with enforcement on, the user permission set covers create,
update, run, pin, unpin and delete.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:12:25 -05:00
james.maes 9ca854e59a Merge pull request #14 from QRun-IO/feature/record-screen-polish
fix(screens): plain child-list labels, backend and cell-type pickers, read-only keys and JSON
2026-10-12 16:08:17 -05:00
james.maes 6029174344 Merge branch 'develop' into feature/record-screen-polish 2026-10-12 16:06:11 -05:00
james.maes 1ffc663ba5 Merge pull request #6 from QRun-IO/feature/developer-panel
feat: SQL Workbench record developer panel
2026-10-12 16:05:24 -05:00
james.maes 777eb3b95b Merge branch 'develop' into feature/developer-panel 2026-10-12 16:03:18 -05:00
james.maes 7f21e46a2f Merge pull request #15 from QRun-IO/feature/ga-only-release-tags
ci: publish only GA tags (vX.Y.Z), never RC tags
2026-10-12 16:01:09 -05:00
james.maesandClaude Opus 5.5 dbdb5eb113 ci: publish only GA tags (vX.Y.Z), never RC tags
An RC tag matched /v.*/ and the orb republished it as the next RC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:58:14 -05:00
james.maesandClaude Opus 5.5 dd4bd63b2b fix(screens): plain child-list labels, backend and cell-type pickers, read-only keys and JSON
From the kof22 record-screen audit:
- notebook child lists are labelled Cells, Shares, Snapshots and Versions
  instead of raw join names
- notebook defaultBackendName and cell backendName use a possible-value source
  of the backends the workbench can target (invalid values are rejected)
- cell cellType uses a SQL/MARKDOWN enum possible-value source
- cell cellKey is read-only
- execution parametersJson shows as read-only JSON

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:53:17 -05:00
james.maesandClaude Opus 5.5 c36a0e8c94 Merge develop into feature/developer-panel; open SQL in the Runner
Brings the snake_case rename (#7) and the app home and Runner (#9).
The developer panel's "open as a new cell" links now target the Runner
app (SqlWorkbenchRunnerAppMetaDataProducer.APP_NAME, prefixed), since
/app/sqlWorkbench is the home dashboard. Tests and README updated; the
changelog entry moves under 1.0.0-RC.3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:31:22 -05:00
james.maes 72647623fa Merge pull request #9 from QRun-IO/feature/app-home-runner-nav
feat: app home dashboard, Runner nav entry, main tables only (1.0.0-RC.3)
2026-10-12 15:14:21 -05:00
james.maes f7b5ffd569 Merge branch 'develop' into feature/app-home-runner-nav 2026-10-12 15:12:19 -05:00