Files
probo/pkg
Émile Ré 05cbab7258 Promote glob source and trigger draft on adoption
The pattern-analysis worker dropped two signals on every run. When
InsertIfNotExists hit a pre-existing glob, the computed bestSource
was discarded by the LoadByBannerIDTypeAndPattern fallback, so the
SCRIPT > EXTENSION > PRE_EXISTING precedence advertised on
bestSource was only ever enforced at first insert. Subsequent
batches with stronger sources could not promote the glob, even
though the page-script-wins rule already lives in detected_trackers
at the row level.

Separately, adoptUncategorisedPatterns returned an adopted bool
that the worker discarded; the function moves detected trackers
from uncategorised exact patterns into categorised globs, which is
a real consent transition, but no draft banner version was created
on adoption-only runs.

Add a focused TrackerPattern.PromoteSource that only updates the
source and updated_at columns. Express the precedence as a pure-Go
shouldPromoteSource helper alongside bestSource so the rule is
unit-testable without a database. The worker now calls
InsertIfNotExists, then on conflict loads, skips when the slot is
held by an exact pattern or a user-recategorised glob, and only
calls PromoteSource when the candidate source ranks above the
existing one.

The skip branch is now documented: adoptUncategorisedPatterns is
the safety net that re-homes uncategorised exacts into the existing
glob via globMatch. Capture its adopted return value and use it
(instead of the previous over-eager consentChanged flag) to gate
ensureDraftVersionForBanner. Merging exacts into a glob in their
own category never changes visitor consent, so the prior flag
produced redundant draft versions on every non-uncategorised merge.

Cover the new pieces with three test layers: pure-unit cases for
shouldPromoteSource (precedence matrix including HTTP/nil collapse
and equal-rank no-write), DB-backed tests for PromoteSource (touch
only source + updated_at, ErrResourceNotFound for missing rows),
and end-to-end worker tests for source promotion on an existing
glob, draft-on-adoption, and the merge-only no-draft case.

Signed-off-by: Émile Ré <emile@probo.com>
2026-05-26 18:06:54 +02:00
..
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-04-03 11:56:06 +02:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 15:36:47 -07:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-25 23:04:44 -07:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:53:09 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-26 08:26:49 -07:00
2026-05-20 15:36:47 -07:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 16:51:15 -07:00
2026-05-26 15:49:17 +02:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00
2026-05-20 09:27:28 +04:00