Skip to content

Releases: rasuvaeff/yii3-ab-testing-outbox

v2.0.0

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:17
936c359

Changed

  • Breaking. Requires rasuvaeff/yii3-ab-testing ^2.0.
  • Breaking. Trackers and the message factory take core events
    (ExposureEvent, ConversionEvent) instead of an Assignment and a goal.
    The tracker's optional $eventId argument is gone: the core already minted
    the identity, and the tracker now always passes $event->eventId to
    Outbox::record(), so the message id and the payload's event_id cannot
    disagree.
  • Breaking. Payload v2 is the canonical schema v2 row, produced by core's
    CanonicalEventSerializer rather 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's AnalyticsSchemaV2. legacyV1Map() returns
    the old routes for draining messages queued before the upgrade.

Removed

  • Breaking. AllowListAnalyticsContextPolicy, AnalyticsContextPolicyInterface
    and SystemClock moved 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 context params key, for the same reason.

See UPGRADE.md for the migration steps.

v1.3.0

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:17
e31e025
  • Make aggregate-id generation injectable and use stable pseudonymous ids by
    default so raw subject_id is not duplicated into top-level outbox metadata.
  • Accept an optional stable domain eventId in 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 v1 context payload field and remains
    outside existing ClickHouse v1 routes.
  • Document the required v1/v2 coexistence and consumer rollout policy.

v1.2.4

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:17
40a4ef0
  • Ship compatible ClickHouse v1 DDL for the outbox routes, using
    ReplacingMergeTree ORDER BY event_id and separate event_at /
    ingested_at timestamps.
  • Change the zero-argument route defaults to distinct ab_outbox_exposures and
    ab_outbox_conversions tables. 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-db and yii3-outbox-clickhouse into the shipped tables.

v1.2.3

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:17
3783442
  • Security docs: state that subject_id lands in the outbox aggregate_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 requires README.ru.md
    alongside README.md, matching the monorepo rule.

v1.2.2

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:17
e682d14
  • Add /benchmarks and /Makefile to .gitattributes export-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

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:18
61eca1b
  • Migrate test suite from PHPUnit to Testo. Internal change, no public API impact.

v1.2.0

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:18
  • DefaultAbTestingOutboxMessageFactory now includes a transport-meta v field (integer 1) as the first key in every payload. The field is NOT listed in AbTestingClickHouseRoutes columns and is never written to ClickHouse; it lets downstream consumers detect payload schema generations without parsing every field. The version is exposed as DefaultAbTestingOutboxMessageFactory::PAYLOAD_VERSION.

v1.1.0

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:18
  • DefaultAbTestingOutboxMessageFactory now stamps event_at (event time, UTC Y-m-d H:i:s) into every payload from an injected Psr\Clock\ClockInterface (default SystemClock) — the moment the event was tracked, not when the worker later exports it. Adds psr/clock as a runtime dependency.
  • AbTestingClickHouseRoutes::map() adds the event_at column (after event_id); both are transport-meta columns excluded from the source-of-truth contract.

v1.0.0

Choose a tag to compare

@rasuvaeff rasuvaeff released this 01 Aug 22:18
  • OutboxExposureTracker / OutboxConversionTrackerExposureTracker / ConversionTracker implementations that record each event as a durable outbox message via Outbox::record(). Deliberately not FlushableTracker (the event is persisted immediately).
  • AbTestingOutboxEventType — stable message types ab.exposure / ab.conversion.
  • AbTestingOutboxMessageFactoryInterface + DefaultAbTestingOutboxMessageFactory — JSON payloads with 0|1 flags and an always-present environment; deterministic aggregate ids.
  • AbTestingClickHouseRoutes::map() — route map for yii3-outbox-clickhouse (analytics columns mirror yii3-ab-testing-clickhouse, with a leading event_id for ReplacingMergeTree dedup; a contract test guards the match).
  • Yii3 config-plugin: binds ExposureTracker and ConversionTracker from config/di.php.