Added
- Versioned analytics event contract:
ExposureEvent,ConversionEvent,
DecisionReason,AssignmentSourceandAssignmentReceipt. EventSerializerwithCanonicalEventSerializer— one wire format shared by
every delivery path, with the row shapes published as importable Psalm types.EventIdGeneratorwith three implementations:Uuid7EventIdGenerator
(default, no dependencies),SymfonyUidEventIdGeneratorand
RamseyUuidEventIdGenerator.AttributionWindowandRepeatedConversionPolicy— the reporting rules that
decide what conversion numbers mean.SystemClock, andclock/eventIds/contextPolicyarguments on
AbTesting.AbTesting::trackConversionForReceipt()for a conversion in a later request.fixtures/golden-event-v2.json, shipped so adapters can assert the same rows.ConfigurationAwareAssignmentStore, moved here fromyii3-ab-testing-webso
the cookie store and the database store can share it without depending on
each other.
Changed
- Breaking.
ExposureTrackerandConversionTrackertake an event instead
of anAssignmentand a goal. - Breaking.
AssignmentreplacesisForced,isFallback,isStickyand
isTargetingMismatchproperties with areason/sourcepair and
same-named methods. - Breaking.
AnalyticsContextPolicy(was
AnalyticsContextPolicyInterfaceinyii3-ab-testing-outbox) moved into the
core, so every delivery path applies one allow-list. - Breaking. Logger sinks emit the canonical row under an
eventkey,
making them the log-shipping delivery path. - Breaking. An empty conversion goal now reports
Event field "goal" must not be empty. trackExposure()andtrackConversion()return the recorded event.
See UPGRADE.md for the migration steps.