Releases: rasuvaeff/yii3-ab-testing-outbox
Releases · rasuvaeff/yii3-ab-testing-outbox
Release list
v2.0.0
Changed
- Breaking. Requires
rasuvaeff/yii3-ab-testing^2.0. - Breaking. Trackers and the message factory take core events
(ExposureEvent,ConversionEvent) instead of anAssignmentand a goal.
The tracker's optional$eventIdargument is gone: the core already minted
the identity, and the tracker now always passes$event->eventIdto
Outbox::record(), so the message id and the payload'sevent_idcannot
disagree. - Breaking. Payload v2 is the canonical schema v2 row, produced by core's
CanonicalEventSerializerrather than assembled here. Building it locally is
how the two delivery paths drifted in v1 — each dropped different fields and
nothing noticed. - Breaking.
AbTestingClickHouseRoutes::map()takes no arguments and
targets the tables and column order owned by
yii3-ab-testing-clickhouse'sAnalyticsSchemaV2.legacyV1Map()returns
the old routes for draining messages queued before the upgrade.
Removed
- Breaking.
AllowListAnalyticsContextPolicy,AnalyticsContextPolicyInterface
andSystemClockmoved to the core. The allow-list is applied once, when the
facade builds the event, so every delivery path filters identically; keeping
it here applied it to the durable path only. - The
contextparams key, for the same reason.
See UPGRADE.md for the migration steps.
v1.3.0
- Make aggregate-id generation injectable and use stable pseudonymous ids by
default so rawsubject_idis not duplicated into top-level outbox metadata. - Accept an optional stable domain
eventIdin both trackers and forward it to
the outbox message id for retry/dedup identity. - Add an allow-list context policy with rename and redaction rules. The filtered
object is stored in the extensible v1contextpayload field and remains
outside existing ClickHouse v1 routes. - Document the required v1/v2 coexistence and consumer rollout policy.
v1.2.4
- Ship compatible ClickHouse v1 DDL for the outbox routes, using
ReplacingMergeTree ORDER BY event_idand separateevent_at/
ingested_attimestamps. - Change the zero-argument route defaults to distinct
ab_outbox_exposuresand
ab_outbox_conversionstables. The old defaults collided with the direct
sink's incompatible schema; explicit custom names remain supported. - Add a live clean-install integration path from trackers through SQLite-backed
yii3-outbox-dbandyii3-outbox-clickhouseinto the shipped tables.
v1.2.3
- Security docs: state that
subject_idlands in the outboxaggregate_id
column as well as in the JSON payload (<experiment>:<subject_id>for
exposures, plus:<goal>for conversions). Only the payload was documented,
so a redaction or retention policy written from the README would have missed a
top-level column holding the same identifier — visible to anything that reads
outbox rows without parsing payloads. AGENTS.md: the "When you finish" checklist now requiresREADME.ru.md
alongsideREADME.md, matching the monorepo rule.
v1.2.2
- Add
/benchmarksand/Makefileto.gitattributesexport-ignore.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
v1.2.1
v1.2.0
DefaultAbTestingOutboxMessageFactorynow includes a transport-metavfield (integer1) as the first key in every payload. The field is NOT listed inAbTestingClickHouseRoutescolumns and is never written to ClickHouse; it lets downstream consumers detect payload schema generations without parsing every field. The version is exposed asDefaultAbTestingOutboxMessageFactory::PAYLOAD_VERSION.
v1.1.0
DefaultAbTestingOutboxMessageFactorynow stampsevent_at(event time, UTCY-m-d H:i:s) into every payload from an injectedPsr\Clock\ClockInterface(defaultSystemClock) — the moment the event was tracked, not when the worker later exports it. Addspsr/clockas a runtime dependency.AbTestingClickHouseRoutes::map()adds theevent_atcolumn (afterevent_id); both are transport-meta columns excluded from the source-of-truth contract.
v1.0.0
OutboxExposureTracker/OutboxConversionTracker—ExposureTracker/ConversionTrackerimplementations that record each event as a durable outbox message viaOutbox::record(). Deliberately notFlushableTracker(the event is persisted immediately).AbTestingOutboxEventType— stable message typesab.exposure/ab.conversion.AbTestingOutboxMessageFactoryInterface+DefaultAbTestingOutboxMessageFactory— JSON payloads with0|1flags and an always-presentenvironment; deterministic aggregate ids.AbTestingClickHouseRoutes::map()— route map foryii3-outbox-clickhouse(analytics columns mirroryii3-ab-testing-clickhouse, with a leadingevent_idforReplacingMergeTreededup; a contract test guards the match).- Yii3 config-plugin: binds
ExposureTrackerandConversionTrackerfromconfig/di.php.