From 9a6eca018945c65b93d69739f7657c9b5a109b89 Mon Sep 17 00:00:00 2001 From: CircleCI Date: Fri, 13 Mar 2026 15:05:08 +0000 Subject: [PATCH 01/10] Bump version to 0.4.0 [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 18d62e9..49ea231 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ - 0.4.0-RC.1 + 0.4.0 -- 2.54.0 From 523fd3409510315f5cbb4658deeea29ce71abe2f Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 13 Mar 2026 10:10:36 -0500 Subject: [PATCH 02/10] chore: fix ot use revision property in tag --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 49ea231..00539a5 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ com.kingsrook.qbits qbit-customizable-table-views - 0.4.0-SNAPSHOT + ${revision} jar QBit Customizable Table Views -- 2.54.0 From 795ac7e81ec43279d959995d6093ddf217c98c65 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:24:54 -0500 Subject: [PATCH 03/10] test: cover sparse-update fallback in TableViewFieldCustomizer A sparse update must validate against the fieldName on the old record. Part of QRun-IO/qqq-all#1 --- .../TableViewFieldCustomizerTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizerTest.java b/src/test/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizerTest.java index bb0d21d..4e710a5 100644 --- a/src/test/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizerTest.java +++ b/src/test/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizerTest.java @@ -96,6 +96,32 @@ class TableViewFieldCustomizerTest extends BaseTest + /******************************************************************************* + ** a sparse update (e.g., only accessLevel set) must validate against the + ** fieldName from the old record. + *******************************************************************************/ + @Test + void testSparseUpdateUsesOldRecordValues() throws QException + { + QContext.getQInstance().addTable(new QTableMetaData() + .withName("testTable3") + .withField(new QFieldMetaData("mandatory", QFieldType.STRING).withIsRequired(true)) + .withField(new QFieldMetaData("optional", QFieldType.STRING))); + + Optional> oldRecordList = Optional.of(List.of( + new TableViewField().withId(1).withFieldName("testTable3.mandatory").withAccessLevel(FieldAccessLevel.EDITABLE_REQUIRED).toQRecord(), + new TableViewField().withId(2).withFieldName("testTable3.optional").withAccessLevel(FieldAccessLevel.EDITABLE_OPTIONAL).toQRecord())); + + QRecord mandatoryToReadOnly = new QRecord().withValue("id", 1).withValue("accessLevel", FieldAccessLevel.READ_ONLY.getId()); + QRecord optionalToReadOnly = new QRecord().withValue("id", 2).withValue("accessLevel", FieldAccessLevel.READ_ONLY.getId()); + new TableViewFieldCustomizer().preInsertOrUpdate(null, List.of(mandatoryToReadOnly, optionalToReadOnly), false, oldRecordList); + + assertThat(mandatoryToReadOnly.getErrors()).hasSizeGreaterThan(0); + assertThat(optionalToReadOnly.getErrors()).isNullOrEmpty(); + } + + + /*************************************************************************** * ***************************************************************************/ -- 2.54.0 From 35aa2da4fe383ff57877e73c87f18fc440b8a1a1 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:25:20 -0500 Subject: [PATCH 04/10] build: re-pin to qbit-build-parent 2.0.0 (qqq 4.0.0) Drop the shadowing qqq-bom-pom import (ADR-0007) and move off two APIs removed in qqq 4.0. Part of QRun-IO/qqq-all#1 --- pom.xml | 14 +------------- .../customizers/TableViewFieldCustomizer.java | 5 +++-- .../qbits/customizabletableviews/BaseTest.java | 2 +- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index ed81ebd..757b2a2 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ com.kingsrook qbit-build-parent - 1.5.1 + 2.0.0 com.kingsrook.qbits @@ -68,18 +68,6 @@ 0.5.0-SNAPSHOT - - - - com.kingsrook.qqq - qqq-bom-pom - 0.40.0-SNAPSHOT - pom - import - - - - com.kingsrook.qqq diff --git a/src/main/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizer.java b/src/main/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizer.java index 5e21127..abce184 100644 --- a/src/main/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizer.java +++ b/src/main/java/com/kingsrook/qbits/customizabletableviews/tables/customizers/TableViewFieldCustomizer.java @@ -36,6 +36,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.statusmessages.BadInputStatusMessage; import com.kingsrook.qqq.backend.core.model.statusmessages.SystemErrorStatusMessage; +import com.kingsrook.qqq.backend.core.utils.ValueUtils; /******************************************************************************* @@ -57,8 +58,8 @@ public class TableViewFieldCustomizer implements TableCustomizerInterface try { Integer id = record.getValueInteger("id"); - String fieldName = RecordCustomizerUtilityInterface.getValueFromRecordOrOldRecord("fieldName", record, id, oldRecordMap); - String accessLevelId = RecordCustomizerUtilityInterface.getValueFromRecordOrOldRecord("accessLevel", record, id, oldRecordMap); + String fieldName = ValueUtils.getValueAsString(RecordCustomizerUtilityInterface.getValueFromRecordElseFromOldRecord("fieldName", record, id, oldRecordMap)); + String accessLevelId = ValueUtils.getValueAsString(RecordCustomizerUtilityInterface.getValueFromRecordElseFromOldRecord("accessLevel", record, id, oldRecordMap)); String[] parts = fieldName.split("\\."); String tableName = parts[0]; diff --git a/src/test/java/com/kingsrook/qbits/customizabletableviews/BaseTest.java b/src/test/java/com/kingsrook/qbits/customizabletableviews/BaseTest.java index 155b97c..d7b36c9 100644 --- a/src/test/java/com/kingsrook/qbits/customizabletableviews/BaseTest.java +++ b/src/test/java/com/kingsrook/qbits/customizabletableviews/BaseTest.java @@ -78,7 +78,7 @@ public class BaseTest // basic definition of an instance // ///////////////////////////////////// QInstance qInstance = new QInstance(); - qInstance.setAuthentication(new QAuthenticationMetaData().withType(QAuthenticationType.FULLY_ANONYMOUS)); + qInstance.withInstanceDefaultAuthentication(new QAuthenticationMetaData().withType(QAuthenticationType.FULLY_ANONYMOUS)); qInstance.addBackend(new RDBMSBackendMetaData() .withName(RDBMS_BACKEND_NAME) .withVendor("h2") -- 2.54.0 From 6afce06460a098dbafa5f3c751ee1064546c13af Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:25:26 -0500 Subject: [PATCH 05/10] build: add opt-in qqq.version override profile -Dqqq.version=4.1.0-SNAPSHOT verifies against another qqq line; default builds keep the parent's pin. Part of QRun-IO/qqq-all#1 --- pom.xml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pom.xml b/pom.xml index 757b2a2..7ed56aa 100644 --- a/pom.xml +++ b/pom.xml @@ -105,4 +105,28 @@ + + + + + qqq-version-override + + + qqq.version + + + + + + com.kingsrook.qqq + qqq-bom-pom + ${qqq.version} + pom + import + + + + + + -- 2.54.0 From a181b3bca36fd38c2561e0fb9e98d732ceb529c4 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:25:26 -0500 Subject: [PATCH 06/10] build: declare Apache-2.0 license in pom Part of QRun-IO/qqq-all#1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7ed56aa..6ef69ee 100644 --- a/pom.xml +++ b/pom.xml @@ -41,8 +41,8 @@ - GNU Affero General Public License v3.0 - https://www.gnu.org/licenses/agpl-3.0.html + Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0 repo -- 2.54.0 From 036e8b1cfad7b089a401cc5f525b83b5017d771b Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:25:27 -0500 Subject: [PATCH 07/10] docs: update CLAUDE.md notes for the parent 2.0.0 re-pin Part of QRun-IO/qqq-all#1 --- CLAUDE.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 2ca6bd7..afd9489 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,10 @@ Notes for agents working here: - The README describes a "saved views" API (`QSavedViewMetaData`, `saved_view` tables) that does NOT exist in this code — trust the source, not the README. CHANGELOG.md and CONTRIBUTING.md are copy-pasted from qbit-user-role-permissions. -- Licensing metadata is contradictory (LICENSE/NOTICE = Apache-2.0; pom, file headers, - checkstyle template = AGPL-3.0; README footer says proprietary). Open PR #5 fixes the pom. -- Depends on `qqq-bom-pom:0.40.0-SNAPSHOT` — snapshot resolution may break; see dossier - "v4.0 impact" before bumping qqq versions. +- Licensing metadata is contradictory (LICENSE/NOTICE and pom `` = Apache-2.0; + file headers, pom header comment, checkstyle template = AGPL-3.0; README footer says + proprietary). +- Default builds take the qqq version only from `qbit-build-parent` (2.0.0 = qqq 4.0.0); + do not add an always-on `qqq-bom-pom` import (ADR-0007). To check another qqq line, run + `mvn -B verify -Dqqq.version=4.1.0-SNAPSHOT`, which activates the opt-in + `qqq-version-override` profile. -- 2.54.0 From 0a63b1f013ec1fc7ef7e5183c704ad65c378022a Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:37:24 -0500 Subject: [PATCH 08/10] revert: keep existing pom block Licensing alignment is a separate owner decision (QRun-IO/qqq#765 step 2). Reverts a181b3b. Part of QRun-IO/qqq-all#1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6ef69ee..7ed56aa 100644 --- a/pom.xml +++ b/pom.xml @@ -41,8 +41,8 @@ - Apache License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0 + GNU Affero General Public License v3.0 + https://www.gnu.org/licenses/agpl-3.0.html repo -- 2.54.0 From df03ac582a4aac403df942e5c82db72bfa036685 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:38:26 -0500 Subject: [PATCH 09/10] build: replace qqq.version override with opt-in qqq-snapshot profile -Pqqq-snapshot imports qqq-bom-pom 4.1.0-SNAPSHOT and brings the snapshots repository with it. Part of QRun-IO/qqq-all#1 --- pom.xml | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 7ed56aa..746175f 100644 --- a/pom.xml +++ b/pom.xml @@ -98,34 +98,38 @@ - - - sonatype-snapshots - https://central.sonatype.com/repository/maven-snapshots/ - - - - - + + + - qqq-version-override - - - qqq.version - - + qqq-snapshot + + 4.1.0-SNAPSHOT + com.kingsrook.qqq qqq-bom-pom - ${qqq.version} + ${qqq.snapshot.version} pom import + + + sonatype-snapshots + https://central.sonatype.com/repository/maven-snapshots/ + + false + + + true + + + -- 2.54.0 From 971249bdc497da8fb1984977d55e4c7a14c842f7 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 25 Sep 2026 19:38:27 -0500 Subject: [PATCH 10/10] docs: point CLAUDE.md at the qqq-snapshot profile Part of QRun-IO/qqq-all#1 --- CLAUDE.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index afd9489..0d77ace 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,10 +16,8 @@ Notes for agents working here: - The README describes a "saved views" API (`QSavedViewMetaData`, `saved_view` tables) that does NOT exist in this code — trust the source, not the README. CHANGELOG.md and CONTRIBUTING.md are copy-pasted from qbit-user-role-permissions. -- Licensing metadata is contradictory (LICENSE/NOTICE and pom `` = Apache-2.0; - file headers, pom header comment, checkstyle template = AGPL-3.0; README footer says - proprietary). +- Licensing metadata is contradictory (LICENSE/NOTICE = Apache-2.0; pom, file headers, + checkstyle template = AGPL-3.0; README footer says proprietary). Open PR #5 fixes the pom. - Default builds take the qqq version only from `qbit-build-parent` (2.0.0 = qqq 4.0.0); - do not add an always-on `qqq-bom-pom` import (ADR-0007). To check another qqq line, run - `mvn -B verify -Dqqq.version=4.1.0-SNAPSHOT`, which activates the opt-in - `qqq-version-override` profile. + do not add an always-on `qqq-bom-pom` import (ADR-0007). To check the next qqq line, run + `mvn -B verify -Pqqq-snapshot` (4.1.0-SNAPSHOT; override with `-Dqqq.snapshot.version`). -- 2.54.0