From 9dedeeaa4269b5d4e0b56b3bcce678edaae92e79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Sat, 2 May 2026 19:31:53 +0400 Subject: [PATCH] Skip draft version for uncategorised-only merges MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pattern merges and adoptions that stay entirely within the uncategorised category never change the visitor-facing snapshot. Only trigger ensureDraftVersionForBanner when a merge group belongs to a consent category. Signed-off-by: Émile Ré --- pkg/cookiebanner/worker.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/pkg/cookiebanner/worker.go b/pkg/cookiebanner/worker.go index 00538afc7..89b63e75c 100644 --- a/pkg/cookiebanner/worker.go +++ b/pkg/cookiebanner/worker.go @@ -85,6 +85,15 @@ func (h *patternAnalysisHandler) Process(ctx context.Context, banner coredata.Co func(ctx context.Context, tx pg.Tx) error { scope := coredata.NewScopeFromObjectID(banner.ID) + var uncategorised coredata.CookieCategory + hasUncategorised := true + if err := uncategorised.LoadUncategorisedByCookieBannerID(ctx, tx, scope, banner.ID); err != nil { + if !errors.Is(err, coredata.ErrResourceNotFound) { + return fmt.Errorf("cannot load uncategorised category: %w", err) + } + hasUncategorised = false + } + var exactPatterns coredata.CookiePatterns if err := exactPatterns.LoadAllByCookieBannerID( ctx, @@ -98,7 +107,7 @@ func (h *patternAnalysisHandler) Process(ctx context.Context, banner coredata.Co mergeGroups := findMergeGroups(exactPatterns, patternMergeThreshold) - merged := false + consentChanged := false for key, group := range mergeGroups { maxAge := mostCommonMaxAge(group) @@ -144,7 +153,10 @@ func (h *patternAnalysisHandler) Process(ctx context.Context, banner coredata.Co } } - merged = true + if !hasUncategorised || key.categoryID != uncategorised.ID { + consentChanged = true + } + h.logger.InfoCtx( ctx, "merged exact patterns into prefix pattern", @@ -154,15 +166,11 @@ func (h *patternAnalysisHandler) Process(ctx context.Context, banner coredata.Co ) } - adopted, err := h.adoptUncategorisedPatterns(ctx, tx, scope, banner) - if err != nil { + if _, err := h.adoptUncategorisedPatterns(ctx, tx, scope, banner); err != nil { return fmt.Errorf("cannot adopt uncategorised patterns: %w", err) } - if adopted { - merged = true - } - if merged { + if consentChanged { if _, err := h.svc.ensureDraftVersionForBanner(ctx, tx, scope, banner.ID); err != nil { return fmt.Errorf("cannot ensure draft version: %w", err) }