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

2.3 KiB

Known retained-version reconciliation

DocumentGenerationService.reconcile(requestId) resumes a request only when its generation record already contains an exact retained version, hash and length. The current user must be the initiating actor, hold generation/view permissions (or print for a reprint), and still access the source record. The method refuses ambient transactions.

The retained-output adapter's inspect method reauthorizes the exact immutable version and reports current availability. The Record Files bridge implements this through its public get service; a quarantined receipt is visible without granting byte access or printing. A missing, failed, mismatched or unknown result is refused. Existing adapters remain compatible because the default inspect delegates to their stricter authorize method.

Recovery never rerenders or reuploads. It restores the known durable receipt, durably records the appropriate retained/reprint audit outcome, and either completes the generated result, reports QUARANTINED, or submits the original print intent using the original operation ID. The print adapter must implement that ID's idempotency contract and recheck current destination/source/version rights. If a queue ID was already persisted, a different returned queue ID is rejected. Queue acceptance remains distinct from physical printing.

Earlier audit stage meanings do not acquire later queue IDs during retries. Only PRINT_QUEUED and GENERATION_INCOMPLETE carry the observed queue identifier. The audit ledger deduplicates unchanged stage meanings while preserving the original observation timestamp.

A request without a persisted retained version remains explicitly uncertain. Absence of a retained file row is not proof that no original was written: owner storage intents/reservations may still require recovery. Automatic unknown-intake reconciliation awaits a typed Record Files intake-status/journal facade. No current API silently restarts such an operation.

This service method is an explicit recovery operation, not a background scheduler. Durable batch-item cursors, bounded leasing/claiming, restart recovery and per-record progress remain separate work. Current synchronous generateBatch pins a batch revision and records per-call outcomes but does not claim a durable worker queue.