The eclipse-temurin:21-jre-jammy base ships apt 2.4.14 (HIGH
CVE-2026-109518, fixed in 2.4.15ubuntu0.1), which the CI Trivy gate
blocks. Upgrade installed packages when building the image.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CI-contract test now checks the Gitea workflow smokes the Maven
final jar (the orb .qqq-ci.yml is gone). The release-bundle test renders
compose.yaml with docker compose config, so CI installs a checksum-pinned
Compose binary behind a docker compose-only shim.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the retired CircleCI qqq-orb pipeline and the GitHub release
workflow (qqq-orb caller) with KofTwentyTwo/ci-workflows container.yaml@v1.
Every push runs the script unit tests, mvn verify and the packaged core
HTTP smoke check, then builds and Trivy-scans the image; develop pushes
git.kof22.com/qrun-io/qqq-all (ci-<sha>-run-<n> and develop).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Shared QQQ all CI (original verify-and-smoke and develop image capture) / Develop Container (build and retain the OCI image for the trusted publisher) (push) Successful in 2m34s
QRun-IO/ci-policy: Shared QQQ all CI (original verify-and-smoke and develop image capture) / Develop Container (build and retain the OCI image for the trusted publisher) (push) Successful in 3m19s
QRun-IO/ci-policy: Shared QQQ all CI (original verify-and-smoke and develop image capture) / Develop Container (build and retain the OCI image for the trusted publisher) (pull_request) Skipped
QRun-IO/qqq#1367 is fixed in core (2ac4fda45): ColumnStatsStep always
refuses statistics for a field the caller cannot read in full and tags
its result records with the analysed table. The host's guarded subclass
and the code swap in EnterpriseFeatures are gone; the enterprise profile
keeps registering the plain columnStats process.
GuardedColumnStatsStepTest becomes EnterpriseColumnStatsAccessTest and
now proves the same through core's step: a field behind a field security
lock is refused without the key, returns statistics (tagged with the
table) with it, and an unrestricted field is allowed.
The same core sweep made filesystem tables without backend details fail
validation (qqq#1364), which broke the full profile: its reportStorage on
the SFTP backend had none. It now gets one-file-per-record SFTP details
(reportStorage/, reference + contents), as the enterprise profile's local
files backend already did.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Fixes#47. The enterprise session gets the collaboration permissions that FieldSecurity checks by name, and keeps the frontend user value on customized sessions. 37 tests green.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
39c28a4 moved the enterprise grants into DemoUsers.grantEnterpriseAccess
and dropped the session.withValueForFrontend("user", …) line between
the two enterprise blocks, so manageSession answered {} and clients
showed no signed-in user name. Restored, with a test that a customized
session still carries the user for the frontend.
Refs #47
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The Custom Fields table (collaboration_field_definition) answered 403
"This needs collaboration.view." to the all-access admin. Its permission
rules are NOT_PROTECTED with qbit-collaboration's FieldSecurity checker,
which tests collaboration.view / collaboration.admin (and
collaboration.fields.manage for writes and processes) by literal name, so
PermissionsHelper.getAllAvailablePermissionNames never lists them; the
same pattern as the jobs and assistant names the profile already grants.
The enterprise session now also holds collaboration.view, .admin,
.fields.manage and .tags.manage. The grants moved into
DemoUsers.grantEnterpriseAccess so EnterpriseAccessTest can run the real
FieldSecurity checker against them: refused without, read and insert
allowed with.
GuardedColumnStatsStep gets a TODO to delete it once QRun-IO/qqq#1367
lands in core.
Fixes#47
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Only the OAuth2 module wrote to the session store; mock sign-in built a fresh session per request and stored nothing, so the terminal clients' Online count could not see signed-in terminals. The profile's mock session customizer now records each session uuid once through qbit-session-store (identity only, expiry) and touches it at most once a minute.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
EnterpriseAssistant registers both provider types and keeps two provider rows, Anthropic (Claude) when ANTHROPIC_API_KEY is set (referenced by env-var name, never stored) else Local Ollama when it answers on 127.0.0.1:11434, else NOT_CONFIGURED; enterprise sessions hold assistant.hasAccess and assistant.admin; timeouts allow a local 70B model.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Registers every demo table and every visible sample table with a record label through qbit-quick-search 1.1's own registration and self-priming (STRING fields only: label fields plus the obvious text fields), labels unlabelled tables by name, and shortens the index sync to 60 s so new tables build at startup. 17 tables, 57 documents on the enterprise profile; 'Illinois' and 'ada' both resolve.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Turns QUERY_STATS on for backends that can aggregate (H2, SQLite, the sample's in-memory H2, memory), registers the columnStats process behind a GuardedColumnStatsStep that refuses fields the caller cannot read in full and tags results with the analysed table so field-access rules apply (core follow-up: QRun-IO/qqq#1367), adds field-level audits to orderLine and the sample tables, and installs the Object Storage QBit on MinIO when S3_ENDPOINT is set so collaboration attachments work.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Adds QQQ_ALL_PROFILE=enterprise composing the QBit set an enterprise rollout would run (jobs, collaboration, alerts, data-analysis, db-performance, sql-workbench, help, release-notes, qa-capture, secured-data, email, slack, cluster, cdn, backups, file-gateway, session-store, worm-audit, assistant, quick-search 1.1.0, redis realtime, the core profile's seven QBits, the sample app, core audits/scripts/saved views/reports/bulk-load/sharing/query stats/durable jobs/health) with MOCK auth and an in-memory Quartz scheduler. Fixes found by the sweep: health advertised, calculateOrderTotal input form, record labels, mutable health indicators, quoted H2 reserved words, webhook test-event ordering workaround, jobs-permission workaround, quick-search admin permission for the full profile's smoke.
Closes#44, closes#45, closes#46. Refs #47, QRun-IO/qqq#1361, QRun-IO/qqq#1362.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* ci: centralize All builds smoke checks and releases
Use orb 0.7.9 and its immutable shared release worker. Build once, preserve core/full verification and conditional public GHCR delivery, and consume public Circle provenance without exporting a token.
Co-Authored-By: Codex <noreply@openai.com>
* fix: use shared SDK v2 S3 support for MinIO
Replace obsolete SDK v1 client overrides with upstream endpoint and path-style metadata. Preserve endpoint coverage for every filesystem action and local HTTP listing/write assertions.
Co-Authored-By: Codex <noreply@openai.com>
* test: verify the HttpOnly OIDC session contract
Current QQQ omits the session UUID from JSON for HttpOnly cookies. Require the nonempty HttpOnly cookie and reject exposed UUIDs, retaining authenticated backend and permission checks.
Co-Authored-By: Codex <noreply@openai.com>
* fix: accept leading-dash Mongo credentials in Compose
Use explicit username/password option assignments in health and replica-set initialization. Reproduced the original failure and verified authenticated ping with the corrected arguments against mongo:7 and a leading-dash fixture password.
Co-Authored-By: Codex <noreply@openai.com>
---------
Co-authored-by: Codex <noreply@openai.com>
* ci(smoke): add core CI and prepare full conformance harness (#8)
* fix(smoke): query SFTP qbit and isolate Compose ports (#8)
* fix(smoke): require order-correlated Artemis trace and full CI job (#8)
* fix(smoke): exercise private full Compose services over HTTP (#8)
* fix(smoke): require explicit standalone full search endpoint (#8)
* fix(smoke): use Maven final jar in core CI (#8)
* test(smoke): verify Rabbit completion through ESB API
Grant full-profile admin ESB access and keep the exact process-run assertion. Part of #8.
* feat(esb): expose service observability in core profile
* feat(#21): complete runtime demos and backend modules (#22)
* feat(GH-21): complete runtime backend and JavaScript demos
* fix(GH-21): follow listener address for the API catalog
* ci(#8): pin settings-safe QQQ orb 0.6.8