refactor(backups): core TableSchemaFingerprint + KeysetPager on RC.6 (#19 part 2) #21

Merged
KofTwentyTwo merged 2 commits from feature/arch-rc6-keyset into develop 2026-10-14 12:19:52 +00:00
KofTwentyTwo commented 2026-10-14 01:36:51 +00:00 (Migrated from github.com)

Summary

The RC.6 half of #19, which this PR closes (architecture review QRun-IO/qqq#1150, finding F3).

  • TableFingerprints, TableReader and StandardRestoreWriter now use core TableSchemaFingerprint and KeysetPager; the duplicated code is deleted.

  • Fingerprint compatibility. Core's fingerprint differs from the local one:

    • descriptor names and field shapes;
    • unique keys as lists;
    • association joinName;
    • "" for null backend types;
    • Jackson escaping.

    New manifests record fingerprintAlgorithm: "qqq-table-schema-v1" and keep the sha256: prefix. A manifest without the field uses the frozen LegacyTableFingerprint, so existing backups still verify and restore; a regression test with a frozen legacy fixture covers this.

  • Paging keeps ascending primary-key order, exclusive resume cursors, bounded pages and the supplied transaction. JDBC fetch settings are unchanged, and consistency is still reported as BEST_EFFORT.

  • Behaviour change: restore writes now require the explicit backups.restore permission, checked at Review.

  • Notes: docs/RC6-MIGRATION.md.

Draft until QQQ 4.1.0-RC.6 is released

Verified locally against core develop (4.1.0-ARCHRC6-SNAPSHOT): mvn clean verify runs 158 tests with 0 failures, 87.66% instruction and 97.08% class coverage.

🤖 Generated with Claude Code

## Summary The RC.6 half of #19, which this PR closes (architecture review QRun-IO/qqq#1150, finding F3). - `TableFingerprints`, `TableReader` and `StandardRestoreWriter` now use core `TableSchemaFingerprint` and `KeysetPager`; the duplicated code is deleted. - **Fingerprint compatibility.** Core's fingerprint differs from the local one: - descriptor names and field shapes; - unique keys as lists; - association `joinName`; - `""` for null backend types; - Jackson escaping. New manifests record `fingerprintAlgorithm: "qqq-table-schema-v1"` and keep the `sha256:` prefix. **A manifest without the field uses the frozen `LegacyTableFingerprint`**, so existing backups still verify and restore; a regression test with a frozen legacy fixture covers this. - **Paging** keeps ascending primary-key order, exclusive resume cursors, bounded pages and the supplied transaction. JDBC fetch settings are unchanged, and consistency is still reported as BEST_EFFORT. - **Behaviour change:** restore writes now require the explicit `backups.restore` permission, checked at Review. - Notes: `docs/RC6-MIGRATION.md`. ## Draft until QQQ 4.1.0-RC.6 is released Verified locally against core develop (`4.1.0-ARCHRC6-SNAPSHOT`): `mvn clean verify` runs 158 tests with 0 failures, 87.66% instruction and 97.08% class coverage. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
KofTwentyTwo commented 2026-10-14 12:15:31 +00:00 (Migrated from github.com)

QQQ 4.1.0-RC.6 is released. Verified locally against it with ./mvnw -B verify. This PR also adopts qbit-build-parent 2.1.0 with guardrails enforced (qbit.guardrails.enforce=true) and strict raw-route mode; every guardrail passes. Marked ready for review.

QQQ 4.1.0-RC.6 is released. Verified locally against it with `./mvnw -B verify`. This PR also adopts `qbit-build-parent` 2.1.0 with guardrails enforced (`qbit.guardrails.enforce=true`) and strict raw-route mode; every guardrail passes. Marked ready for review.
Sign in to join this conversation.