Files
ee782b7d6e
QRun-IO/ci-policy: ci / fork-guard (push) Skipped
QRun-IO/ci-policy: ci / head-profile (push) Skipped
QRun-IO/ci-policy: ci / application-template-0 (push) Skipped
QRun-IO/ci-policy: ci / gradle-1 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (push) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (push) Skipped
QRun-IO/ci-policy: ci / node-8 (push) Skipped
QRun-IO/ci-policy: ci / node-9 (push) Skipped
QRun-IO/ci-policy: ci / node-10 (push) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (push) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (push) Skipped
QRun-IO/ci-policy: ci / source-config-13 (push) Skipped
QRun-IO/ci-policy: ci / source-config-14 (push) Skipped
QRun-IO/ci-policy: ci / android-0 (push) Skipped
QRun-IO/ci-policy: ci / original-business (push) Skipped
QRun-IO/ci-policy: ci / original-mcp (push) Skipped
QRun-IO/ci-policy: ci / original-voyage (push) Skipped
QRun-IO/ci-policy: ci / original-cli (push) Skipped
QRun-IO/ci-policy: ci / not-enrolled (push) Failing after 7s
QRun-IO/ci-policy: native / fork-deny (push) Skipped
QRun-IO/ci-policy: native / dotnet-0 (push) Skipped
QRun-IO/ci-policy: ci / repository-policy (push) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (push) Skipped
QRun-IO/ci-policy: ci / ci-result (push) Failing after 5s
QRun-IO/ci-policy: native / native-result (push) Successful in 6s
chore: preserve unfinished document generation source and status
Checkpoint implementation at user-requested stop; document known failures and incomplete release qualification.

Co-Authored-By: Claude <noreply@anthropic.com>

Co-Authored-By: GPT-6 Codex <noreply@openai.com>
2026-11-04 10:45:09 -06:00

3.2 KiB

Strict generation audit

Wire config.withAudit(new GenerationAudit()) with the native generation QBit and its optional qqq-backend-module-rdbms dependency. The adapter writes only document_generation_event, a visible immutable QQQ table owned by generation. It does not use Record Files privileges, tables or audit callbacks. Normal QQQ writes/deletes are denied; reads apply current source-record access, and aggregate/count shortcuts are refused.

append opens a fresh independent JDBC connection, checks its database identity/writability/autocommit state, starts its own transaction, inserts the event and commits before returning. It never joins or replaces the caller's QContext transaction. A caller rollback cannot undo an acknowledged event. Database failure propagates; no log-only or in-memory fallback exists. Supported strategies are file-backed H2 with WRITE_DELAY=0 and native MySQL 8.4 under the current physical engine/settings/mapping checks in MYSQL.md. Unsupported strategies remain disabled; this QQQ backend does not support PostgreSQL. Owned statements have five-second JDBC deadlines.

Each event binds the current initiating actor, selected source, committed generation request, revision, format and exact retained/print receipt fields. Outcome checks distinguish STARTED, RETAINED, DISPATCHED and INCOMPLETE facts; PRINT_QUEUED requires an actual persisted queue receipt and does not claim physical output. The operation ID and outcome form a database unique key. A length-prefixed SHA-256 fingerprint includes every event meaning except retry timestamp. An exact retry returns the existing committed event; changed meaning conflicts. A concurrent duplicate or ambiguous commit is reconciled through a fresh connection and acknowledged only if that exact event is durable.

Apply the generated schema through the host migration process. Existing installations need the new event table/index and unique operation-ID constraint on requests. QBit registration does not execute DDL. Database service-account policy, filesystem/volume durability, backup/restore, retention and external administrative tamper controls remain deployment responsibilities. Application-level append-only behavior does not make a database administrator unable to alter a table.

This is a synchronous audit ledger, not an asynchronous dispatch queue. Generation requests retain uncertain state after external failures. Worker scheduling, bounded batch progress, request reconciliation and retrying print dispatch are separate generation-owned workflows; the audit table must not be presented as implementing those workflows merely because it stores events.

Current verification: full 109-test clean install passed 2026-10-31 00:45:47 CDT, including nine actual MySQL audit cases plus the H2 cases. Separate connections verify commit-before-return, ambient rollback independence, exact concurrent dedupe, failed inserts, request/stage conflicts, actual durability configuration and retained/queued recovery audit identity. Evidence: mysql-full-verification.log. Physical database/volume disaster recovery remains deployment work. The older 33-test reconciliation result is historical evidence, not the current test count.