chore(release): prepare the first published release candidate 0.1.0-RC.1 #3

Merged
james.maes merged 1 commits from release/first-release-20261106 into develop 2026-11-06 15:31:42 +00:00
Owner

Prepares (does not cut) the first published release of Record Files, so GG Forge can replace its development pin com.kingsrook.qbits:qbit-record-files:0.1.0-forge.162af9a7b8cd-archive1 with an artifact from the Gitea Maven registry.

Version

0.1.0-RC.1, published by the shared KofTwentyTwo/ci-workflows Maven workflow (PR 2) from a release/0.1 branch; pom.xml keeps <revision>0.1.0-SNAPSHOT</revision> on develop because the workflow computes the RC number and commits the bump back. Nothing is tagged, released or published by this PR.

What changed

  • ArchiveSecurity.digest: tolerate host customizers that run only on insert/update/delete (MUTATION_ROLES); query/get/personalization customizers still refuse the capture. This is the source form of the delta that Forge carried as the -archive1 suffix: the only difference between its 0.1.0-forge.162af9a7b8cd and -archive1 JARs is this class (recovered from the bytecode in C:\Users\james\.cache\gg-forge-authentik-qualification\m2; no source or patch for it existed in the Forge handoff). Covered by the new ArchiveTest.mutationCustomizersAreToleratedWhileVisibilityCustomizersRefuseCapture.
  • Test-only Forge patches record-files-postgres-diagnostics.patch and record-files-linux-fixture.patch applied verbatim (FixtureEndpoint, FixtureEndpointTest, fixture health reporting); the resulting files are byte-identical to Forge's record-files-linux qualification tree. These let the PostgreSQL suite run on the shared container-build runners (TESTCONTAINERS_HOST_OVERRIDE).
  • CHANGELOG.md (new), docs/RELEASE-STATUS.md (publication path, step-by-step first RC, relationship to the Forge pin), README status banner and Maven-publication section, docs/KNOWN-ISSUES.md.
  • .gitignore no longer ignores .gitea/, so PR 2's caller is tracked normally; docs/release/qrun-release.reference.yaml marked superseded.

Verification (Java 21, Maven wrapper, Docker 29.9.2)

  • ./mvnw verify against develop's qbit-collaboration:0.1.0-SNAPSHOT fails to compile: the local/public Collaboration lacks the attachment lifecycle SPI. Built instead against Collaboration commit 53bd8f00 (the commit PR 1 was verified against; Collaboration PR 59) installed locally as 0.1.0-rf53bd8f00-SNAPSHOT:
    ./mvnw -Dqbit-collaboration.version=0.1.0-rf53bd8f00-SNAPSHOT verify -> 284 tests, 0 failures, 0 errors, 58 skipped (the opt-in PostgreSQL/MySQL suites), Checkstyle 0 violations, BUILD SUCCESS.
  • Opt-in database suites (-DpostgresRecordFilesTests=true -DmysqlRecordFilesTests=true): 64 tests, 1 failure, 1 error. MySQL 15/15, PostgresTrackedDownload 3/3, PostgresRetainedUploadRecovery 5/5 and FixtureEndpoint 5/5 pass; POSTGRES_FIXTURE_HEALTH reports running=true oom=false restarting=false endpointMatches=true after all 22 intake cases. The two failures pre-date this branch: PostgresIntakeAndRetentionTest.unmanagedTablesKeepOrdinaryAttachmentBehavior dies in Collaboration's AttachmentsService.storeUpload with NoSuchMethodError QBackendTransaction.supportsRollbackCallbacks() (the documented QQQ core after-rollback-callback gap: public 4.1.0-RC.21 lacks it, Forge builds against 4.1.0-forge.33464d37e815-echo1), and PostgresRecordFilesTest.refusesLabelsAndPhysicalDrift fails its isDurableBackend re-check after ALTER COLUMN at TYPE TIMESTAMPTZ (line 258), a physical-drift probe untouched by this change.

Merge order and dependencies

  1. Collaboration PR 59 merged and published as an RC (registry must hold a Collaboration with the SPI).
  2. PR 2 (shared CI caller), then this PR, into develop.
  3. PR 1 (quarantineCapturedFiles) into develop; no overlap with this branch.
  4. Pin qbit-collaboration.version to the published Collaboration RC on develop, then git push origin develop:release/0.1 -> 0.1.0-RC.1.

See docs/RELEASE-STATUS.md for the full steps and the drop-in analysis.

🤖 Generated with Claude Code

Prepares (does not cut) the first published release of Record Files, so GG Forge can replace its development pin `com.kingsrook.qbits:qbit-record-files:0.1.0-forge.162af9a7b8cd-archive1` with an artifact from the Gitea Maven registry. ## Version `0.1.0-RC.1`, published by the shared `KofTwentyTwo/ci-workflows` Maven workflow (PR 2) from a `release/0.1` branch; `pom.xml` keeps `<revision>0.1.0-SNAPSHOT</revision>` on `develop` because the workflow computes the RC number and commits the bump back. Nothing is tagged, released or published by this PR. ## What changed - **`ArchiveSecurity.digest`**: tolerate host customizers that run only on insert/update/delete (`MUTATION_ROLES`); query/get/personalization customizers still refuse the capture. This is the source form of the delta that Forge carried as the `-archive1` suffix: the only difference between its `0.1.0-forge.162af9a7b8cd` and `-archive1` JARs is this class (recovered from the bytecode in `C:\Users\james\.cache\gg-forge-authentik-qualification\m2`; no source or patch for it existed in the Forge handoff). Covered by the new `ArchiveTest.mutationCustomizersAreToleratedWhileVisibilityCustomizersRefuseCapture`. - **Test-only Forge patches** `record-files-postgres-diagnostics.patch` and `record-files-linux-fixture.patch` applied verbatim (`FixtureEndpoint`, `FixtureEndpointTest`, fixture health reporting); the resulting files are byte-identical to Forge's `record-files-linux` qualification tree. These let the PostgreSQL suite run on the shared `container-build` runners (`TESTCONTAINERS_HOST_OVERRIDE`). - `CHANGELOG.md` (new), `docs/RELEASE-STATUS.md` (publication path, step-by-step first RC, relationship to the Forge pin), README status banner and Maven-publication section, `docs/KNOWN-ISSUES.md`. - `.gitignore` no longer ignores `.gitea/`, so PR 2's caller is tracked normally; `docs/release/qrun-release.reference.yaml` marked superseded. ## Verification (Java 21, Maven wrapper, Docker 29.9.2) - `./mvnw verify` against `develop`'s `qbit-collaboration:0.1.0-SNAPSHOT` fails to compile: the local/public Collaboration lacks the attachment lifecycle SPI. Built instead against Collaboration commit `53bd8f00` (the commit PR 1 was verified against; Collaboration PR 59) installed locally as `0.1.0-rf53bd8f00-SNAPSHOT`: `./mvnw -Dqbit-collaboration.version=0.1.0-rf53bd8f00-SNAPSHOT verify` -> **284 tests, 0 failures, 0 errors, 58 skipped** (the opt-in PostgreSQL/MySQL suites), Checkstyle 0 violations, BUILD SUCCESS. - Opt-in database suites (`-DpostgresRecordFilesTests=true -DmysqlRecordFilesTests=true`): 64 tests, 1 failure, 1 error. MySQL 15/15, PostgresTrackedDownload 3/3, PostgresRetainedUploadRecovery 5/5 and FixtureEndpoint 5/5 pass; `POSTGRES_FIXTURE_HEALTH` reports `running=true oom=false restarting=false endpointMatches=true` after all 22 intake cases. The two failures pre-date this branch: `PostgresIntakeAndRetentionTest.unmanagedTablesKeepOrdinaryAttachmentBehavior` dies in Collaboration's `AttachmentsService.storeUpload` with `NoSuchMethodError QBackendTransaction.supportsRollbackCallbacks()` (the documented QQQ core after-rollback-callback gap: public 4.1.0-RC.21 lacks it, Forge builds against `4.1.0-forge.33464d37e815-echo1`), and `PostgresRecordFilesTest.refusesLabelsAndPhysicalDrift` fails its `isDurableBackend` re-check after `ALTER COLUMN at TYPE TIMESTAMPTZ` (line 258), a physical-drift probe untouched by this change. ## Merge order and dependencies 1. Collaboration PR 59 merged and published as an RC (registry must hold a Collaboration with the SPI). 2. PR 2 (shared CI caller), then this PR, into `develop`. 3. PR 1 (`quarantineCapturedFiles`) into `develop`; no overlap with this branch. 4. Pin `qbit-collaboration.version` to the published Collaboration RC on `develop`, then `git push origin develop:release/0.1` -> `0.1.0-RC.1`. See `docs/RELEASE-STATUS.md` for the full steps and the drop-in analysis. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
james.maes added 1 commit 2026-11-06 15:08:27 +00:00
chore(release): prepare the first published release candidate 0.1.0-RC.1
QRun-IO/ci-policy: ci / fork-guard (push) Skipped
QRun-IO/ci-policy: ci / fork-guard (pull_request) Skipped
QRun-IO/ci-policy: native / fork-deny (push) Skipped
QRun-IO/ci-policy: native / dotnet-0 (push) Skipped
QRun-IO/ci-policy: native / fork-deny (pull_request) Skipped
QRun-IO/ci-policy: native / dotnet-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / Scoped workflow [workflow 1e25bb5a243dfdcd95d4b9a4f780200ff8c8778a] (pull_request) Successful in 10s
QRun-IO/ci-policy: ci / Scoped workflow [workflow 1e25bb5a243dfdcd95d4b9a4f780200ff8c8778a] (push) Successful in 11s
QRun-IO/ci-policy: native / native-result (push) Successful in 8s
QRun-IO/ci-policy: ci / head-profile (pull_request) Skipped
QRun-IO/ci-policy: native / native-result (pull_request) Successful in 9s
QRun-IO/ci-policy: ci / repository-policy (pull_request) Skipped
QRun-IO/ci-policy: ci / head-profile (push) Skipped
QRun-IO/ci-policy: ci / application-template-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / repository-policy (push) Skipped
QRun-IO/ci-policy: ci / gradle-1 (pull_request) Skipped
QRun-IO/ci-policy: ci / application-template-0 (push) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (pull_request) Skipped
QRun-IO/ci-policy: ci / gradle-1 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (push) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (push) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (push) Skipped
QRun-IO/ci-policy: ci / node-8 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-8 (push) Skipped
QRun-IO/ci-policy: ci / node-9 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-9 (push) Skipped
QRun-IO/ci-policy: ci / node-10 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-10 (push) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (push) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (pull_request) 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-13 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-14 (push) Skipped
QRun-IO/ci-policy: ci / source-config-14 (pull_request) Skipped
QRun-IO/ci-policy: ci / android-0 (push) Skipped
QRun-IO/ci-policy: ci / android-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / original-business (push) Skipped
QRun-IO/ci-policy: ci / original-business (pull_request) Skipped
QRun-IO/ci-policy: ci / original-mcp (push) Skipped
QRun-IO/ci-policy: ci / original-mcp (pull_request) Skipped
QRun-IO/ci-policy: ci / original-voyage (push) Skipped
QRun-IO/ci-policy: ci / original-cli (push) Skipped
QRun-IO/ci-policy: ci / original-voyage (pull_request) Skipped
QRun-IO/ci-policy: ci / original-cli (pull_request) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (push) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (pull_request) Skipped
QRun-IO/ci-policy: ci / not-enrolled (push) Failing after 6s
QRun-IO/ci-policy: ci / not-enrolled (pull_request) Failing after 8s
QRun-IO/ci-policy: ci / ci-result (push) Failing after 7s
QRun-IO/ci-policy: ci / ci-result (pull_request) Failing after 7s
1cdd06098d
Prepare, without cutting, the first artifact to be published from this
repository through the shared ci-workflows Maven workflow (push of
develop to release/0.1 publishes 0.1.0-RC.N to the Gitea Maven registry).
Add CHANGELOG.md, rewrite docs/RELEASE-STATUS.md with the publication
path, the first-RC steps, the dependency cohort and the relationship to
the GG Forge development pin 0.1.0-forge.162af9a7b8cd-archive1, and
update the README banner, Maven-publication section and known issues.

Carry the two Forge test-only PostgreSQL fixture patches verbatim
(FixtureEndpoint resolves the reachable container endpoint instead of
127.0.0.1; fixture health is reported after each intake case).

Recover the "-archive1" delta: the only class that differs between
Forge's 162af9a7b8 and 162af9a7b8cd-archive1 JARs is
ArchiveSecurity, whose digest guard now tolerates insert/update/delete
customizers and still refuses query/get/personalization customizers.
Express that in source with a focused ArchiveTest case.

Stop ignoring .gitea/ so the shared CI caller is tracked normally and
mark the retired platform-ci caller reference as superseded.

Verification: ./mvnw verify against Collaboration 53bd8f00 installed as
0.1.0-rf53bd8f00-SNAPSHOT: 284 tests, 0 failures, 0 errors, 58 skipped,
Checkstyle clean. Opt-in PostgreSQL/MySQL suites: 64 run, two
pre-existing failures (public QQQ 4.1.0-RC.21 lacks
QBackendTransaction.supportsRollbackCallbacks; the physical-drift probe
in PostgresRecordFilesTest), neither introduced here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
james.maes merged commit 4e6a2ae365 into develop 2026-11-06 15:31:42 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: QRun-IO/qbit-record-files#3