Re-pins qbit-geo-data to com.kingsrook:qbit-build-parent:2.0.0 (qqq 4.0.0 GA). Adds an opt-in qqq-snapshot profile that builds and tests against qqq 4.1.0-SNAPSHOT, so qqq-all can include this qbit. The first commit back-merges main into develop.
This PR must be merged with a merge commit (not squash or rebase). A merge commit keeps the three main commits in develop's history. Without it, main and develop stay diverged.
chore: merge main into develop: git merge --no-ff origin/main (details below).
build: re-pin to qbit-build-parent 2.0.0 (qqq 4.0.0): parent 1.5.1 -> 2.0.0. The parent imports qqq-bom-pom 4.0.0, and qqq-backend-core / qqq-backend-module-rdbms now resolve to 4.0.0 (they were on 0.35.0). Still Java 21.
build: add opt-in qqq-snapshot profile: root-pom profile that imports qqq-bom-pom:${qqq.snapshot.version} (default 4.1.0-SNAPSHOT) ahead of the parent's BOM and adds the Central snapshots repository (https://central.sonatype.com/repository/maven-snapshots/). Both modules inherit it. Default builds don't change.
ci: keep apt unattended on CircleCI machine images: adds the configure-package-install command from qbit-quick-search develop and uses it as a pre-steps entry on all five orb jobs. This stops needrestart from stalling install_java (QRun-IO/qqq-orb#11). The orb version (0.5.0) is unchanged.
docs: note qqq 4.0.0 re-pin and Java 21 prerequisite: CHANGELOG entry. The getting-started prerequisites now say Java 21+ / QQQ 4.0.0+ (they said Java 17+ / QQQ 0.23.0+).
Plan steps with nothing to change:
Step 2, shadowing qqq-bom-pom imports: the child poms had none.
Step 4, Docker integration tests: this repo has none (no Testcontainers or Docker usage, and no skipped or assumed tests).
Step 5, explicit qqq module versions: none. The qqq dependencies already had no <version>, so the BOM or the profile controls them.
Back-merge (main -> develop) resolutions
main had 3 commits not in develop. The merge had no conflicts: every file main added is new to develop, and nothing develop changed overlaps with them.
d9f902e chore: migrate license from AGPL-3.0 to Apache-2.0: adds LICENSE (Apache-2.0) and NOTICE. Taken from main as is. develop had no LICENSE file.
f7889fd chore: add CODEOWNERS pointing to sole maintainer: adds .github/CODEOWNERS. Taken from main.
ebb950f: adds the root-level knowledge-base pointer doc (a link to the QQQ knowledge-base dossier). Taken from main.
Kept from develop: its .gitignore addition, the removal of a local editor settings file (e6a2ce7), and the 0.2.0-SNAPSHOT revision.
Licensing: this PR doesn't edit LICENSE files, NOTICE, or source headers. LICENSE/NOTICE arrive from main unchanged. The pom <licenses> block still says AGPL-3.0 and is left alone, because license alignment is a separate owner decision.
Liquibase changelog generator: its 6 unit tests (GeoDataLiquibaseGeneratorTest) pass in both gates. As an extra end-to-end check, I ran GeoDataLiquibaseGenerator.generate(config, path) through jshell on the -Pqqq-snapshot classpath (qqq-backend-core-4.1.0-SNAPSHOT.jar), with prefix shipping and cities disabled. It wrote a changelog that passes xmllint --noout, with 2 createTable changesets (shipping_country, shipping_state_province) and no city section.
CircleCI config: circleci config validate can't resolve kingsrook/qqq-orb from this machine. It fails the same way ("Cannot find kingsrook/qqq-orb@... in the orb registry") on the unmodified develop config and on qbit-quick-search's develop config, which does run on CI. Instead I compared the parsed YAML with yq. The commands block is identical to qbit-quick-search develop, and all 5 jobs carry pre-steps: [configure-package-install].
Unit tests pass (mvn test)
Integration tests pass (mvn verify)
Manual testing performed (generator run end to end on 4.1.0-SNAPSHOT)
Checklist
My code follows the project's style guidelines
I have performed a self-review of my own code
I have commented my code, particularly in hard-to-understand areas
I have made corresponding changes to the documentation
My changes generate no new warnings
I have added tests that prove my fix is effective or that my feature works (build-only change; the profile was checked with the dependency resolution runs above)
New and existing unit tests pass locally with my changes
Screenshots (if applicable)
Not applicable.
Additional Notes
Merge with a merge commit. Squash or rebase would drop the back-merge of main.
The Maven warning Failed to build parent project for com.kingsrook.qbits:qbit-geo-data-parent was already there before this PR. It appears the same way on the baseline build with parent 1.5.1.
Left alone to keep scope tight: the child junit-bom 5.10.0 import still takes precedence over the parent's junit-bom 6.0.1, and the orb stays on kingsrook/qqq-orb@0.5.0.
The move to a 4.1 parent happens at qqq 4.1 GA (plan task C9, QRun-IO/qqq-all#10).
## Summary
Re-pins qbit-geo-data to `com.kingsrook:qbit-build-parent:2.0.0` (qqq 4.0.0 GA). Adds an opt-in `qqq-snapshot` profile that builds and tests against qqq 4.1.0-SNAPSHOT, so qqq-all can include this qbit. The first commit back-merges `main` into `develop`.
**This PR must be merged with a merge commit (not squash or rebase).** A merge commit keeps the three `main` commits in `develop`'s history. Without it, `main` and `develop` stay diverged.
Closes QRun-IO/qqq#769
Part of QRun-IO/qqq-all#1
## Changes
- `chore: merge main into develop`: `git merge --no-ff origin/main` (details below).
- `build: re-pin to qbit-build-parent 2.0.0 (qqq 4.0.0)`: parent 1.5.1 -> 2.0.0. The parent imports `qqq-bom-pom` 4.0.0, and `qqq-backend-core` / `qqq-backend-module-rdbms` now resolve to 4.0.0 (they were on 0.35.0). Still Java 21.
- `build: add opt-in qqq-snapshot profile`: root-pom profile that imports `qqq-bom-pom:${qqq.snapshot.version}` (default `4.1.0-SNAPSHOT`) ahead of the parent's BOM and adds the Central snapshots repository (`https://central.sonatype.com/repository/maven-snapshots/`). Both modules inherit it. Default builds don't change.
- `ci: keep apt unattended on CircleCI machine images`: adds the `configure-package-install` command from qbit-quick-search `develop` and uses it as a `pre-steps` entry on all five orb jobs. This stops needrestart from stalling `install_java` (QRun-IO/qqq-orb#11). The orb version (0.5.0) is unchanged.
- `docs: note qqq 4.0.0 re-pin and Java 21 prerequisite`: CHANGELOG entry. The getting-started prerequisites now say Java 21+ / QQQ 4.0.0+ (they said Java 17+ / QQQ 0.23.0+).
Plan steps with nothing to change:
- Step 2, shadowing `qqq-bom-pom` imports: the child poms had none.
- Step 4, Docker integration tests: this repo has none (no Testcontainers or Docker usage, and no skipped or assumed tests).
- Step 5, explicit qqq module versions: none. The qqq dependencies already had no `<version>`, so the BOM or the profile controls them.
### Back-merge (`main` -> `develop`) resolutions
`main` had 3 commits not in `develop`. The merge had **no conflicts**: every file `main` added is new to `develop`, and nothing `develop` changed overlaps with them.
- `d9f902e chore: migrate license from AGPL-3.0 to Apache-2.0`: adds `LICENSE` (Apache-2.0) and `NOTICE`. Taken from `main` as is. `develop` had no LICENSE file.
- `f7889fd chore: add CODEOWNERS pointing to sole maintainer`: adds `.github/CODEOWNERS`. Taken from `main`.
- `ebb950f`: adds the root-level knowledge-base pointer doc (a link to the QQQ knowledge-base dossier). Taken from `main`.
- Kept from `develop`: its `.gitignore` addition, the removal of a local editor settings file (`e6a2ce7`), and the `0.2.0-SNAPSHOT` revision.
Licensing: this PR doesn't edit LICENSE files, NOTICE, or source headers. `LICENSE`/`NOTICE` arrive from `main` unchanged. The pom `<licenses>` block still says AGPL-3.0 and is left alone, because license alignment is a separate owner decision.
## Related Issues
Closes QRun-IO/qqq#769
Part of QRun-IO/qqq-all#1
Related: QRun-IO/qqq-orb#11 (needrestart workaround)
## Type of Change
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [x] Documentation update
- [ ] Refactoring (no functional changes)
- [x] Dependencies update
## Testing
Commands run from the repo root (no `mvnw` in this repo). All on Maven 3.9.16 and Java 21.0.12.
| Command | Result |
|---|---|
| `mvn -B verify` (baseline, before the re-pin, qqq 0.35.0) | BUILD SUCCESS, 28 tests, 0 failures, 0 errors, 0 skipped |
| `mvn -B -Pqqq-snapshot dependency:list -pl qbit-geo-data-core` (before adding the profile) | warning "profile qqq-snapshot does not exist"; qqq resolved to 4.0.0 (expected red) |
| `mvn -B dependency:list -pl qbit-geo-data-core -DincludeGroupIds=com.kingsrook.qqq` | `qqq-backend-core:4.0.0`, `qqq-backend-module-rdbms:4.0.0` |
| `mvn -B -U -Pqqq-snapshot dependency:list -pl qbit-geo-data-core -DincludeGroupIds=com.kingsrook.qqq` | `qqq-backend-core:4.1.0-SNAPSHOT`, `qqq-backend-module-rdbms:4.1.0-SNAPSHOT` (downloaded from Central snapshots) |
| `mvn -B clean` then `mvn -B verify` (final gate) | BUILD SUCCESS, 28 tests, 0 failures, 0 errors, 0 skipped |
| `mvn -B clean` then `mvn -B -U -Pqqq-snapshot verify` (final gate) | BUILD SUCCESS, 28 tests, 0 failures, 0 errors, 0 skipped |
Liquibase changelog generator: its 6 unit tests (`GeoDataLiquibaseGeneratorTest`) pass in both gates. As an extra end-to-end check, I ran `GeoDataLiquibaseGenerator.generate(config, path)` through `jshell` on the `-Pqqq-snapshot` classpath (`qqq-backend-core-4.1.0-SNAPSHOT.jar`), with prefix `shipping` and cities disabled. It wrote a changelog that passes `xmllint --noout`, with 2 `createTable` changesets (`shipping_country`, `shipping_state_province`) and no city section.
CircleCI config: `circleci config validate` can't resolve `kingsrook/qqq-orb` from this machine. It fails the same way ("Cannot find kingsrook/qqq-orb@... in the orb registry") on the unmodified `develop` config and on qbit-quick-search's `develop` config, which does run on CI. Instead I compared the parsed YAML with `yq`. The `commands` block is identical to qbit-quick-search `develop`, and all 5 jobs carry `pre-steps: [configure-package-install]`.
- [x] Unit tests pass (`mvn test`)
- [x] Integration tests pass (`mvn verify`)
- [x] Manual testing performed (generator run end to end on 4.1.0-SNAPSHOT)
## Checklist
- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works (build-only change; the profile was checked with the dependency resolution runs above)
- [x] New and existing unit tests pass locally with my changes
## Screenshots (if applicable)
Not applicable.
## Additional Notes
- Merge with a **merge commit**. Squash or rebase would drop the back-merge of `main`.
- The Maven warning `Failed to build parent project for com.kingsrook.qbits:qbit-geo-data-parent` was already there before this PR. It appears the same way on the baseline build with parent 1.5.1.
- Left alone to keep scope tight: the child `junit-bom` 5.10.0 import still takes precedence over the parent's `junit-bom` 6.0.1, and the orb stays on `kingsrook/qqq-orb@0.5.0`.
- The move to a 4.1 parent happens at qqq 4.1 GA (plan task C9, QRun-IO/qqq-all#10).
PR #3: build: re-pin to qbit-build-parent 2.0.0, add qqq-snapshot profile
Tier: Deep (2 risk signals)
Sized: 289/3 across 8 files (202 of the additions are LICENSE)
Risk signals: build/release (.circleci/config.yml), dependency/build change (pom.xml parent and repository)
Routing to: pr-review-toolkit:review-pr (code-reviewer and comment-analyzer passes; no test, error-handling or type changes), plus a manual security pass
Verdict: approve. No blocking issues.
B7 requirements
Step
Status
Evidence
1. Back-merge main into develop
Met, but inside this PR (see note 1)
819b3da is a two-parent merge (b9eaa6c + ebb950f). Compared with develop, it adds only CODEOWNERS, CLAUDE.md, LICENSE and NOTICE. Compared with main, it keeps only develop's .gitignore, the .claude/settings.local.json removal and the 0.2.0-SNAPSHOT revision. Nothing was lost.
Parent is qbit-build-parent:2.0.0. The child poms have no qqq-bom-pom import. Compiler level is 21. LICENSE, NOTICE, CODEOWNERS and CLAUDE.md are byte-identical to origin/main.
3. Green on 4.0.0, plus a green qqq-snapshot profile
Met
I re-ran both locally (results below). The profile matches B1 and B3: it imports qqq-bom-pom:${qqq.snapshot.version} (default 4.1.0-SNAPSHOT) and adds the Central snapshots repository.
4. Docker ITs fail (not skip) when CI=true
N/A
Neither module has Testcontainers, Docker, Assumptions, @Disabled or @EnabledIf.
5. No explicit qqq module versions
Met
qqq-backend-core and qqq-backend-module-rdbms have no <version>.
dependency:list -pl qbit-geo-data-core: resolves qqq modules to 4.0.0 by default and to 4.1.0-SNAPSHOT with -Pqqq-snapshot.
CircleCI build 13 at a73162b: success. The "Keep package installation unattended" pre-step ran before "Install Java 21 and build tools". The commands block is identical to qbit-quick-search develop (checked with yq and diff), and all 5 jobs carry the pre-step. qbit-quick-search develop has already run mvn_publish with the same pre-step and it passed.
Checkstyle and coverage: the repo and the parent configure no checkstyle, and JaCoCo only generates a report (no check goal or thresholds). So neither can fail the build.
Global Constraints: the branch comes from develop and targets develop. No mvn install is listed. No secrets: I grepped the diff for password, secret, token, key and private-key patterns and found nothing. No release or publish actions.
Non-blocking notes
Merge method matters. Plan step 1 asks for a separate back-merge PR first. This PR carries the back-merge as its first commit instead, the same way B2 and B4 do. The repo allows squash and rebase merges, and develop has no branch protection. So whoever merges must pick "Create a merge commit". Otherwise main's three commits never become ancestors of develop, and the branches stay diverged. The PR body already says this. It is repeated here so it isn't missed at merge time.
Duplicate snapshot repository.qbit-build-parent:2.0.0 already declares central-portal-snapshots with the same URL (https://central.sonatype.com/repository/maven-snapshots/, snapshots only) for every build. The profile adds that URL a second time under a different id (sonatype-snapshots), so Maven may check the same repository twice, and a settings.xml mirror or server entry keyed on the parent's id won't apply to it. Reusing the id central-portal-snapshots would override the parent's entry instead of duplicating it. B1 and B3 use sonatype-snapshots too, so either leave it alone for consistency or fix it across all the qbits in one pass.
How the profile takes precedence. Maven keys managed dependencies by groupId:artifactId:type. The profile's qqq-bom-pom import therefore replaces the parent's 4.0.0 import during inheritance, rather than being "ahead of" it. Only the snapshot BOM is imported, which is the intended result. This affects only the wording in the PR body. The pom comment is accurate.
CLAUDE.md (from main) is stale after this merge. It says "main and develop have diverged", and its vault links use Windows R:/ paths. It came in unchanged from main, which is correct for a back-merge, so any update belongs in a follow-up.
Pre-existing, out of scope (already noted in the PR): the pom <licenses> block still says AGPL-3.0 while the incoming LICENSE is Apache-2.0 (an owner decision under the plan's licensing rule). The child junit-bom 5.10.0 import still overrides the parent's 6.0.1. JaCoCo is 0.8.10.
The built-in security-review skill couldn't run from the orchestrator's working directory, which is not a git repo. I did the manual pass above instead. The only security-relevant changes are an opt-in, HTTPS, snapshots-only repository and a CI step that writes a needrestart config file.
## Review, round 1 (plan task B7, QRun-IO/qqq#769)
```
PR #3: build: re-pin to qbit-build-parent 2.0.0, add qqq-snapshot profile
Tier: Deep (2 risk signals)
Sized: 289/3 across 8 files (202 of the additions are LICENSE)
Risk signals: build/release (.circleci/config.yml), dependency/build change (pom.xml parent and repository)
Routing to: pr-review-toolkit:review-pr (code-reviewer and comment-analyzer passes; no test, error-handling or type changes), plus a manual security pass
```
**Verdict: approve. No blocking issues.**
### B7 requirements
| Step | Status | Evidence |
|---|---|---|
| 1. Back-merge `main` into `develop` | Met, but inside this PR (see note 1) | `819b3da` is a two-parent merge (`b9eaa6c` + `ebb950f`). Compared with `develop`, it adds only CODEOWNERS, CLAUDE.md, LICENSE and NOTICE. Compared with `main`, it keeps only develop's `.gitignore`, the `.claude/settings.local.json` removal and the `0.2.0-SNAPSHOT` revision. Nothing was lost. |
| 2. Parent 2.0.0, Java 21, no shadowing qqq BOM, licenses untouched | Met | Parent is `qbit-build-parent:2.0.0`. The child poms have no `qqq-bom-pom` import. Compiler level is 21. LICENSE, NOTICE, CODEOWNERS and CLAUDE.md are byte-identical to `origin/main`. |
| 3. Green on 4.0.0, plus a green `qqq-snapshot` profile | Met | I re-ran both locally (results below). The profile matches B1 and B3: it imports `qqq-bom-pom:${qqq.snapshot.version}` (default `4.1.0-SNAPSHOT`) and adds the Central snapshots repository. |
| 4. Docker ITs fail (not skip) when `CI=true` | N/A | Neither module has Testcontainers, Docker, `Assumptions`, `@Disabled` or `@EnabledIf`. |
| 5. No explicit qqq module versions | Met | `qqq-backend-core` and `qqq-backend-module-rdbms` have no `<version>`. |
### Verification I ran (worktree at `a73162b`)
- `mvn -B clean verify`: BUILD SUCCESS.
- `mvn -B -U -Pqqq-snapshot clean verify`: BUILD SUCCESS, 28 tests, 0 failures, 0 errors, 0 skipped.
- `dependency:list -pl qbit-geo-data-core`: resolves qqq modules to `4.0.0` by default and to `4.1.0-SNAPSHOT` with `-Pqqq-snapshot`.
- CircleCI build 13 at `a73162b`: success. The "Keep package installation unattended" pre-step ran before "Install Java 21 and build tools". The `commands` block is identical to qbit-quick-search `develop` (checked with `yq` and `diff`), and all 5 jobs carry the pre-step. qbit-quick-search `develop` has already run `mvn_publish` with the same pre-step and it passed.
- Checkstyle and coverage: the repo and the parent configure no checkstyle, and JaCoCo only generates a report (no `check` goal or thresholds). So neither can fail the build.
- Global Constraints: the branch comes from `develop` and targets `develop`. No `mvn install` is listed. No secrets: I grepped the diff for password, secret, token, key and private-key patterns and found nothing. No release or publish actions.
### Non-blocking notes
1. **Merge method matters.** Plan step 1 asks for a separate back-merge PR first. This PR carries the back-merge as its first commit instead, the same way B2 and B4 do. The repo allows squash and rebase merges, and `develop` has no branch protection. So whoever merges must pick **"Create a merge commit"**. Otherwise `main`'s three commits never become ancestors of `develop`, and the branches stay diverged. The PR body already says this. It is repeated here so it isn't missed at merge time.
2. **Duplicate snapshot repository.** `qbit-build-parent:2.0.0` already declares `central-portal-snapshots` with the same URL (`https://central.sonatype.com/repository/maven-snapshots/`, snapshots only) for every build. The profile adds that URL a second time under a different id (`sonatype-snapshots`), so Maven may check the same repository twice, and a `settings.xml` mirror or server entry keyed on the parent's id won't apply to it. Reusing the id `central-portal-snapshots` would override the parent's entry instead of duplicating it. B1 and B3 use `sonatype-snapshots` too, so either leave it alone for consistency or fix it across all the qbits in one pass.
3. **How the profile takes precedence.** Maven keys managed dependencies by groupId:artifactId:type. The profile's `qqq-bom-pom` import therefore *replaces* the parent's 4.0.0 import during inheritance, rather than being "ahead of" it. Only the snapshot BOM is imported, which is the intended result. This affects only the wording in the PR body. The pom comment is accurate.
4. **CLAUDE.md (from `main`) is stale after this merge.** It says "main and develop have diverged", and its vault links use Windows `R:/` paths. It came in unchanged from `main`, which is correct for a back-merge, so any update belongs in a follow-up.
5. **Pre-existing, out of scope (already noted in the PR):** the pom `<licenses>` block still says AGPL-3.0 while the incoming LICENSE is Apache-2.0 (an owner decision under the plan's licensing rule). The child `junit-bom` 5.10.0 import still overrides the parent's 6.0.1. JaCoCo is 0.8.10.
6. The built-in `security-review` skill couldn't run from the orchestrator's working directory, which is not a git repo. I did the manual pass above instead. The only security-relevant changes are an opt-in, HTTPS, snapshots-only repository and a CI step that writes a needrestart config file.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Re-pins qbit-geo-data to
com.kingsrook:qbit-build-parent:2.0.0(qqq 4.0.0 GA). Adds an opt-inqqq-snapshotprofile that builds and tests against qqq 4.1.0-SNAPSHOT, so qqq-all can include this qbit. The first commit back-mergesmainintodevelop.This PR must be merged with a merge commit (not squash or rebase). A merge commit keeps the three
maincommits indevelop's history. Without it,mainanddevelopstay diverged.Closes QRun-IO/qqq#769
Part of QRun-IO/qqq-all#1
Changes
chore: merge main into develop:git merge --no-ff origin/main(details below).build: re-pin to qbit-build-parent 2.0.0 (qqq 4.0.0): parent 1.5.1 -> 2.0.0. The parent importsqqq-bom-pom4.0.0, andqqq-backend-core/qqq-backend-module-rdbmsnow resolve to 4.0.0 (they were on 0.35.0). Still Java 21.build: add opt-in qqq-snapshot profile: root-pom profile that importsqqq-bom-pom:${qqq.snapshot.version}(default4.1.0-SNAPSHOT) ahead of the parent's BOM and adds the Central snapshots repository (https://central.sonatype.com/repository/maven-snapshots/). Both modules inherit it. Default builds don't change.ci: keep apt unattended on CircleCI machine images: adds theconfigure-package-installcommand from qbit-quick-searchdevelopand uses it as apre-stepsentry on all five orb jobs. This stops needrestart from stallinginstall_java(QRun-IO/qqq-orb#11). The orb version (0.5.0) is unchanged.docs: note qqq 4.0.0 re-pin and Java 21 prerequisite: CHANGELOG entry. The getting-started prerequisites now say Java 21+ / QQQ 4.0.0+ (they said Java 17+ / QQQ 0.23.0+).Plan steps with nothing to change:
qqq-bom-pomimports: the child poms had none.<version>, so the BOM or the profile controls them.Back-merge (
main->develop) resolutionsmainhad 3 commits not indevelop. The merge had no conflicts: every filemainadded is new todevelop, and nothingdevelopchanged overlaps with them.d9f902e chore: migrate license from AGPL-3.0 to Apache-2.0: addsLICENSE(Apache-2.0) andNOTICE. Taken frommainas is.develophad no LICENSE file.f7889fd chore: add CODEOWNERS pointing to sole maintainer: adds.github/CODEOWNERS. Taken frommain.ebb950f: adds the root-level knowledge-base pointer doc (a link to the QQQ knowledge-base dossier). Taken frommain.develop: its.gitignoreaddition, the removal of a local editor settings file (e6a2ce7), and the0.2.0-SNAPSHOTrevision.Licensing: this PR doesn't edit LICENSE files, NOTICE, or source headers.
LICENSE/NOTICEarrive frommainunchanged. The pom<licenses>block still says AGPL-3.0 and is left alone, because license alignment is a separate owner decision.Related Issues
Closes QRun-IO/qqq#769
Part of QRun-IO/qqq-all#1
Related: QRun-IO/qqq-orb#11 (needrestart workaround)
Type of Change
Testing
Commands run from the repo root (no
mvnwin this repo). All on Maven 3.9.16 and Java 21.0.12.mvn -B verify(baseline, before the re-pin, qqq 0.35.0)mvn -B -Pqqq-snapshot dependency:list -pl qbit-geo-data-core(before adding the profile)mvn -B dependency:list -pl qbit-geo-data-core -DincludeGroupIds=com.kingsrook.qqqqqq-backend-core:4.0.0,qqq-backend-module-rdbms:4.0.0mvn -B -U -Pqqq-snapshot dependency:list -pl qbit-geo-data-core -DincludeGroupIds=com.kingsrook.qqqqqq-backend-core:4.1.0-SNAPSHOT,qqq-backend-module-rdbms:4.1.0-SNAPSHOT(downloaded from Central snapshots)mvn -B cleanthenmvn -B verify(final gate)mvn -B cleanthenmvn -B -U -Pqqq-snapshot verify(final gate)Liquibase changelog generator: its 6 unit tests (
GeoDataLiquibaseGeneratorTest) pass in both gates. As an extra end-to-end check, I ranGeoDataLiquibaseGenerator.generate(config, path)throughjshellon the-Pqqq-snapshotclasspath (qqq-backend-core-4.1.0-SNAPSHOT.jar), with prefixshippingand cities disabled. It wrote a changelog that passesxmllint --noout, with 2createTablechangesets (shipping_country,shipping_state_province) and no city section.CircleCI config:
circleci config validatecan't resolvekingsrook/qqq-orbfrom this machine. It fails the same way ("Cannot find kingsrook/qqq-orb@... in the orb registry") on the unmodifieddevelopconfig and on qbit-quick-search'sdevelopconfig, which does run on CI. Instead I compared the parsed YAML withyq. Thecommandsblock is identical to qbit-quick-searchdevelop, and all 5 jobs carrypre-steps: [configure-package-install].mvn test)mvn verify)Checklist
Screenshots (if applicable)
Not applicable.
Additional Notes
main.Failed to build parent project for com.kingsrook.qbits:qbit-geo-data-parentwas already there before this PR. It appears the same way on the baseline build with parent 1.5.1.junit-bom5.10.0 import still takes precedence over the parent'sjunit-bom6.0.1, and the orb stays onkingsrook/qqq-orb@0.5.0.Review, round 1 (plan task B7, QRun-IO/qqq#769)
Verdict: approve. No blocking issues.
B7 requirements
mainintodevelop819b3dais a two-parent merge (b9eaa6c+ebb950f). Compared withdevelop, it adds only CODEOWNERS, CLAUDE.md, LICENSE and NOTICE. Compared withmain, it keeps only develop's.gitignore, the.claude/settings.local.jsonremoval and the0.2.0-SNAPSHOTrevision. Nothing was lost.qbit-build-parent:2.0.0. The child poms have noqqq-bom-pomimport. Compiler level is 21. LICENSE, NOTICE, CODEOWNERS and CLAUDE.md are byte-identical toorigin/main.qqq-snapshotprofileqqq-bom-pom:${qqq.snapshot.version}(default4.1.0-SNAPSHOT) and adds the Central snapshots repository.CI=trueAssumptions,@Disabledor@EnabledIf.qqq-backend-coreandqqq-backend-module-rdbmshave no<version>.Verification I ran (worktree at
a73162b)mvn -B clean verify: BUILD SUCCESS.mvn -B -U -Pqqq-snapshot clean verify: BUILD SUCCESS, 28 tests, 0 failures, 0 errors, 0 skipped.dependency:list -pl qbit-geo-data-core: resolves qqq modules to4.0.0by default and to4.1.0-SNAPSHOTwith-Pqqq-snapshot.a73162b: success. The "Keep package installation unattended" pre-step ran before "Install Java 21 and build tools". Thecommandsblock is identical to qbit-quick-searchdevelop(checked withyqanddiff), and all 5 jobs carry the pre-step. qbit-quick-searchdevelophas already runmvn_publishwith the same pre-step and it passed.checkgoal or thresholds). So neither can fail the build.developand targetsdevelop. Nomvn installis listed. No secrets: I grepped the diff for password, secret, token, key and private-key patterns and found nothing. No release or publish actions.Non-blocking notes
develophas no branch protection. So whoever merges must pick "Create a merge commit". Otherwisemain's three commits never become ancestors ofdevelop, and the branches stay diverged. The PR body already says this. It is repeated here so it isn't missed at merge time.qbit-build-parent:2.0.0already declarescentral-portal-snapshotswith the same URL (https://central.sonatype.com/repository/maven-snapshots/, snapshots only) for every build. The profile adds that URL a second time under a different id (sonatype-snapshots), so Maven may check the same repository twice, and asettings.xmlmirror or server entry keyed on the parent's id won't apply to it. Reusing the idcentral-portal-snapshotswould override the parent's entry instead of duplicating it. B1 and B3 usesonatype-snapshotstoo, so either leave it alone for consistency or fix it across all the qbits in one pass.qqq-bom-pomimport therefore replaces the parent's 4.0.0 import during inheritance, rather than being "ahead of" it. Only the snapshot BOM is imported, which is the intended result. This affects only the wording in the PR body. The pom comment is accurate.main) is stale after this merge. It says "main and develop have diverged", and its vault links use WindowsR:/paths. It came in unchanged frommain, which is correct for a back-merge, so any update belongs in a follow-up.<licenses>block still says AGPL-3.0 while the incoming LICENSE is Apache-2.0 (an owner decision under the plan's licensing rule). The childjunit-bom5.10.0 import still overrides the parent's 6.0.1. JaCoCo is 0.8.10.security-reviewskill couldn't run from the orchestrator's working directory, which is not a git repo. I did the manual pass above instead. The only security-relevant changes are an opt-in, HTTPS, snapshots-only repository and a CI step that writes a needrestart config file.