chore: retag stand-ins removeBy=RC.8 #13

Merged
KofTwentyTwo merged 1 commits from chore/standin-rc8 into develop 2026-10-14 12:57:02 +00:00
16 changed files with 18 additions and 18 deletions

No files matched your search

+3 -3
View File
@@ -8,7 +8,7 @@ Java 21, Maven wrapper 3.9.11, **QQQ 4.1.0-RC.6**.
RC.6 supplies core classifications, AI metadata, client channels, table-feature permissions and the UI API extension points. These are used directly; the UI API and its contract test are part of the main build. The installed middleware jar provides `UiApiContract`, but no `UiApiContractAssertions` facade, so the contract test calls that released API directly.
Field access (#1172) and audit-value protection (#1182) are not in RC.6. Field-access stand-ins and `CoreFieldAccessBridge` remain marked for RC.7. RC.6 **does not enforce field tiers**. Integration tests can use `4.1.0-SECUREDATA-SNAPSHOT`.
Field access (#1172) and audit-value protection (#1182) are not in RC.6. Field-access stand-ins and `CoreFieldAccessBridge` remain until the first QQQ RC that ships both #1172 and #1182 (expected RC.8). RC.6 **does not enforce field tiers**. Integration tests can use `4.1.0-SECUREDATA-SNAPSHOT`.
## Install and register
@@ -243,11 +243,11 @@ Each is read from a JVM property or the environment and is never logged. Losing
### Core hooks
Audit-value protection (QRun-IO/qqq#1182) and the wipe audit flag need core classes that are not in RC.6. On RC.6 the qbit uses marked stand-ins (`removeBy=RC.7`), writes value-free wipe audit details itself, and core does not tokenise ordinary audits. Run the build with `-Dqqq.snapshot.version=4.1.0-SECUREDATA-SNAPSHOT` to exercise the real hooks, including the section 15 canary and wipe-proof tests (`RetentionProofTest`), which skip themselves when the hooks are absent.
Audit-value protection (QRun-IO/qqq#1182) and the wipe audit flag need core classes that are not in RC.6. On RC.6 the qbit uses marked stand-ins (`removeBy=RC.8`), writes value-free wipe audit details itself, and core does not tokenise ordinary audits. Run the build with `-Dqqq.snapshot.version=4.1.0-SECUREDATA-SNAPSHOT` to exercise the real hooks, including the section 15 canary and wipe-proof tests (`RetentionProofTest`), which skip themselves when the hooks are absent.
## Remaining phases
RC.6 migration is complete; field-access compatibility types remain until RC.7. Phase (g) remains.
RC.6 migration is complete; field-access and audit-token compatibility types remain until RC.8.
## License
@@ -43,7 +43,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
/*******************************************************************************
** A single reflection boundary for #1182, failing closed for incompatible hooks.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.8)
public final class CoreAuditBridge
{
private static final String TOKENS = "com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.";
@@ -40,7 +40,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
/*******************************************************************************
** The only boundary between the temporary field-access API and unreleased core.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8)
public final class CoreFieldAccessBridge
{
private static final String PACKAGE = "com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.";
@@ -32,7 +32,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
/*******************************************************************************
** Application hook for audit tokens and effective classification. Never return plain values.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.8)
public interface AuditValueProtectorInterface
{
/*******************************************************************************
@@ -28,7 +28,7 @@ import java.util.Optional;
/*******************************************************************************
** Supplies instance keys and optional per-record, per-field shreddable keys.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.8)
public interface ClassifiedValueKeySource
{
/*******************************************************************************
@@ -40,7 +40,7 @@ import com.kingsrook.qqq.backend.core.utils.ValueUtils;
/*******************************************************************************
** Shared, versioned audit/email value tokens. The MAC input is UTF-8.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.8)
public final class ClassifiedValueTokens
{
@@ -23,7 +23,7 @@ package com.kingsrook.qbits.secureddata.standin;
/*******************************************************************************
** RC.6's nested DMLType is package-private; #1182 makes it public.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.8)
public enum DMLType
{
INSERT, UPDATE, DELETE, OTHER
@@ -26,7 +26,7 @@ package com.kingsrook.qbits.secureddata.standin;
/*******************************************************************************
** A resolver decision; the reason must never contain a field value.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessDecision; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessDecision; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public record FieldAccessDecision(FieldAccessTier tier, FieldMaskStyle maskStyle, String reason, boolean exactMatchAllowed)
{
public static final FieldAccessDecision FULL = new FieldAccessDecision(FieldAccessTier.FULL, null, null);
@@ -30,7 +30,7 @@ import java.util.List;
/*******************************************************************************
** Value-free audit notification. Primary key samples contain at most 50 keys.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessEvent; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessEvent; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public class FieldAccessEvent
{
private FieldAccessEventType type;
@@ -26,7 +26,7 @@ package com.kingsrook.qbits.secureddata.standin;
/*******************************************************************************
** Kinds of field access reported to the resolver.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessEventType; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessEventType; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public enum FieldAccessEventType
{
VIEW, EXACT_MATCH_FILTER, DENIED
@@ -26,7 +26,7 @@ package com.kingsrook.qbits.secureddata.standin;
/*******************************************************************************
** Outcome of an exact-match search.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessOutcome; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessOutcome; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public enum FieldAccessOutcome
{
MATCH, NO_MATCH, REFUSED
@@ -30,7 +30,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
/*******************************************************************************
** Session-aware policy, reveal grants and value-free access notifications.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessResolverInterface; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessResolverInterface; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public interface FieldAccessResolverInterface
{
/*******************************************************************************
@@ -27,7 +27,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperat
/*******************************************************************************
** Effective field access, ordered from least to most restrictive.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessTier; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldAccessTier; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public enum FieldAccessTier
{
FULL, REVEALABLE, MASKED, HIDDEN;
@@ -26,7 +26,7 @@ package com.kingsrook.qbits.secureddata.standin;
/*******************************************************************************
** Presentation rules for a restricted value.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.7): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldMaskStyle; delete when the pin moves to RC.7.
// STAND-IN(core=QRun-IO/qqq#1172, removeBy=RC.8): copy of com.kingsrook.qqq.backend.core.actions.permissions.fieldaccess.FieldMaskStyle; delete when the pin moves to the first QQQ RC with #1172 and #1182 (RC.8).
public enum FieldMaskStyle
{
AUTO, EMAIL, LAST_4, FIRST_LAST, FULL
@@ -24,7 +24,7 @@ package com.kingsrook.qbits.secureddata.standin;
/*******************************************************************************
** Tokens and a value-free message supplied before an audit is inserted.
*******************************************************************************/
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.7)
// STAND-IN(core=QRun-IO/qqq#1182, removeBy=RC.8)
public record ProtectedAuditValues(String oldToken, String newToken, String message)
{
}
@@ -78,7 +78,7 @@ class CoreFieldAccessBridgeIT
{
available = false;
}
Assumptions.assumeTrue(available, "QQQ RC.7 field-access core is not on this classpath");
Assumptions.assumeTrue(available, "QQQ field-access core (#1172) is not on this classpath");
}