# Release notes

What shipped in AdPix, generated from the product changelog.

## 0.9.322 — 2026-08-03

### Added

- docs: AdPix Docs Center — bilingual static docs system + publish pipeline

### Changed

- i18n(fa): rewrite the Persian catalog in native web/marketing register

## 0.9.312 — 2026-08-01

### Added

- realtime: Realtime visitors — live visits feed + per-visitor snapshot (bID-scoped PII)

### Fixed

- realtime: resolve visitor identity via the identify override, not a session's raw global
- realtime: hide date picker on realtime pages; visitors feed polish (source, search, blink)
- perms: business admins/owners see their own tenant's user PII (ADR-0013)
- realtime: visitors feed — alias session_key (CH String/UUID shadow)

## 0.9.307 — 2026-07-28

### Added

- engagement: Events sub-page — events-over-time chart + table (GA4 parity)

## 0.9.306 — 2026-07-27

### Fixed

- whmcs: auto-derive the CDN host for t.js when Tracker URL is unset (no-config 404 fix)
- whmcs: load t.js from the CDN/tracker host, not the collector endpoint (404 fix)
- conversions: keep once_per=event (per-load), not session — session under-counts multi-order sessions (ADR-0072)
- conversions: flip URL-keyed create rules once_per event->session + retro tooling (ADR-0072)
- tracking: page_view once per load — kill snippet double-fire (~3.3x over-count)

## 0.9.301 — 2026-07-26

### Added

- i18n: more Persian cities, localized /geo + device names, AdPix Captcha in waffle
- realtime: Persian place names on the fa map (countries via Intl, curated cities)
- realtime: GA4-style hover tooltip on per-minute bars, fully localized
- realtime: GA4-style axes on the map's per-minute chart (minute + user labels)
- realtime: GA4-style map — active-users overlay, visible+sticky zoom, city labels

### Fixed

- realtime: fa map shows distinct city names, not a repeated country
- realtime: fa map never shows English city names — normalize + country fallback
- realtime: zoom keeps bubbles locked to the map + de-clutter city labels
- realtime: guard the geo setOption until the world map is registered
- integrity: auto-scoring never freezes + dead mobile guard + per-network drill-down

## 0.9.291 — 2026-07-19

### Added

- tag-gateway: persist the bundle, lock+edit subdomain, tabbed configs, dual install
- funnel: single persistent funnel + period-over-period, redesigned (Claude Design 2b)

### Fixed

- ui: loader-not-empty on load, searchable dropdowns, configurable Tag-Gateway subdomain
- auth: platform-console suspend/disable now actually enforce (org lockout + durable user disable)

## 0.9.287 — 2026-07-18

### Fixed

- auth: ask login-or-signup at the door + humane SSO error journeys (onboarding UX)
- web: traffic chart follows the table row search + fa annotation markers at the true axis position

## 0.9.285 — 2026-07-17

### Added

- integrity: ClickCease-class signals — click flooding, IP rotation, interaction rate (ADR-0071)

### Fixed

- integrity: IP-rotation signature requires device DOMINANCE — a common fingerprint is not a rotator
- web: show the previous-period comparison only when Compare is selected in the date picker

## 0.9.282 — 2026-07-16

### Fixed

- integrity: stop flagging real channels — package-aware classification, evidence-based decision ladder, volume floors (ADR-0070)

## 0.9.281 — 2026-07-12

### Added

- annotations: three visibility layers — global (super admin), property-shared, private
- web: chart annotations on Traffic acquisition — right-click to add, hover to read, click to edit
- web: Traffic acquisition adopts the design-system Report Table

### Fixed

- web: Jalali annotation calendar, Vazirmatn numerals in fa tables, design-language tables everywhere
- web: Traffic acquisition no longer pans horizontally on mobile (grid min-content trap)
- web: Report Table — settings survive the date picker, totals follow the search, dim2 header parity, loading bar
- web: Report Table — column widths share surplus space, sticky mobile rails, and settings that survive a re-fetch
- conversions: once_per='user' silently deleted every repeat purchase (ADR-0067 correction)
- channels: demoted traffic was reported as "Unassigned" — 40% of production sessions
- web: collapsed sidebar rendered blank rows — the icons were being squeezed to zero width
- reports: "When do your users visit?" was blank — toDayOfWeek's 2nd arg is the week mode, not the timezone
- accuracy: invariant checks must not race live traffic
- accuracy: sort-key cutover must never leave ingest stopped, and must survive schema drift
- accuracy: retro mutations must opt in to allow_nondeterministic_mutations (prod)
- accuracy: bot filter no longer deletes real devices; align tracker budget with ADR-0055
- accuracy: sessions 18.5x fragmentation, duplicate rows, sort-key data loss, timezone, attribution (ADR-0069)

## 0.9.265 — 2026-07-11

### Added

- reports: GA4-style per-column event pickers on Traffic acquisition + toolbar dimension selectors
- version: automatic versioning + changelog from git — zero manual bumps (ADR-0068)
- i18n: runtime translation overrides — platform-admin-editable, no redeploy (ADR-0066)

### Fixed

- accuracy: conversion multi-count end-to-end + fa digits/fonts + real avg session (ADR-0067)
- web: /login auto-continues to the IdP when bounced from a protected page

## 0.9.260 — 2026-07-10

### Fixed

- web: onboarding steps advance on Enter, not just a Next click

## 0.9.258 — 2026-07-07

### Added

- auth: self-serve signup — SSO signup → onboarding, super-admin toggle (ADR-0065)

### Fixed

- auth: consistent signup hand-off — existing accounts → IdP login, not signup (ADR-0065)

## 0.9.256 — 2026-07-06

### Added

- web: redesign onboarding + invite-accept to the imported "Analytics Onboarding" design
- auth: migrate OAuth login to the standalone AdPix Account IdP (ADR-0063)

### Fixed

- web: realtime map crash — never re-apply chart options before the world map registers
- web: mobile header + actually ship the Persian font for charts
- ingest: conversion identity dedup — once_per rule scopes + purchase transaction_id (ADR-0064)
- integrity: low-volume gates + self-referral allowlist + why-flagged transparency (ADR-0062)

## 0.9.249 — 2026-07-02

### Added

- web: super-admin seasonality calendar management page (ADR-0061 WS1)
- lift: seasonality-event exog for the ITS engines (ADR-0061 WS1, incrementality)

### Fixed

- web: zero out the standalone tsc error set

## 0.9.246 — 2026-07-01

### Added

- mmm: posterior optimal-mix uncertainty + ADR-0061 (WS3)
- mmm: Lift -> MMM calibration bridge (ADR-0061 WS2)
- mmm: market-correct seasonality calendar + spend-weighted mROI (ADR-0061 WS1+WS4)

## 0.9.243 — 2026-06-29

### Added

- web: replace native confirm() delete dialogs with branded ConfirmDialog
- integrity: self-scheduling nightly + manual "Run scoring now" so Fraud Protection actually runs
- integrity: seed default builtin detection rules so Fraud Protection works out of the box (ADR-0026)

### Fixed

- integrity: payment-gateway referral exclusion + Direct precision-first shield (ADR-0060)
- integrity: home-country sanctioned exemption + conversion-is-not-fraud (ADR-0059)
- lift: calibrate the ensemble cumulative CI — stop low-count false positives (ADR-0058)
- lift: guard report chartOption memo against null detail (PDF export crash)
- lift: scheduling off-by-one — score once the inclusive window elapses (ADR-0057)
- heatmap: inline web fonts + capture on unload — font fidelity + snapshot coverage
- heatmap: stop rendering/counting GTM iframe + script bodies; clean click labels
- explore: make Path exploration readable — URL grouping + top-N + sankey UX (ADR-0056)

## 0.9.231 — 2026-06-28

### Fixed

- tracker: page_view counting accuracy — fire only on real URL change (ADR-0055)
- auth: read ANALYTICS_API_SECRET for the SSO bridge (decouple from email config)
- auth: bridge analytics role grants to the IdP so SSO users can sign in
- whmcs: show order attribution via client-level fallback + backfill paid orders
- identity: show phone in Identified Users + link phone-only clients in WHMCS (+ backfill)

## 0.9.226 — 2026-06-27

### Added

- whmcs: phone-signup linking fix + collapsible AdPix summary card (design v2)
- realtime: GA4-style city-bubble map with pan/zoom + auto-fit

### Fixed

- whmcs: collapse + relocation never fired — <script> in footer hook doesn't run
- heatmap: blank backdrop on real pages — raise the 8MB DOM-snapshot cap + force re-capture

### Changed

- whmcs: admin reports froze the server — add indexes + statement timeout + cache

## 0.9.221 — 2026-06-26

### Added

- web: Raw events — global_user_id links to the user detail page
- identity: cross-browser / incognito device fingerprint stitch (ADR-0054)
- geo: bake the DB-IP GeoIP db into the ingest image (country/city on any deploy)

### Fixed

- tracker: identity broken — identify gated on marketing consent + missed form fields
- ingest: real visitor IP behind ArvanCloud — read the ar-real-ip header
- ingest: stop per-beacon session_start + first_visit inflation on the cookieless path
- explore: path exploration — collapse consecutive duplicate pages (arrayCompact)
- identity: WHMCS/S2S phone matching — append phone to user_phones (ADR-0031 parity)
- heatmap: empty backdrop — derive the snapshot url_group from the same inputs as events
- web: Persian chart fonts + keep explore report on date change + group overlap
- geo: hot-reload the GeoIP mmdb + make deploy fetch reliable (empty country/city)
- bound ingest aid cache + ClickHouse server memory limits (stop OOM crashes)

## 0.9.0 — 2026-06-07

### Added

- Layered, query-time **channel groups** — add a channel (e.g. Yektanet) and all matching history reclassifies instantly, no re-ingest.
- **Paid vs Organic** rollup and a channel-management screen.
- **Traffic-source quality** report — flags broken UTM tagging (orphan UTMs, malformed mediums, click-id/source mismatches).
- **Advanced export** (CSV/JSON with metadata, human headers, totals).
- **Beta** version surface: version badge, What's-new, and feature maturity labels.
- Three-tier **RBAC** (System/Account/Property) with cascade + data restrictions.
- GA-style **Measurement IDs** for multi-tenant/multi-site tags; **session_start/first_visit** + engagement events.

### Changed

- Tracker reliability: batching, retry, page-hide flush; ≤4KB.
- Property switcher defaults to your own org.

### Fixed

- Unknown Measurement IDs no longer mis-attribute to the default property.

---

[Docs](https://docs.adpix.io/en/release-notes/) · AdPix
