Release notes
What shipped in AdPix, generated from the product changelog.
0.9.322#
Added
- docsAdPix Docs Center — bilingual static docs system + publish pipeline
Changed
- i18n(fa): rewrite the Persian catalog in native web/marketing register
0.9.312#
Added
- realtimeRealtime visitors — live visits feed + per-visitor snapshot (bID-scoped PII)
Fixed
- realtimeresolve visitor identity via the identify override, not a session's raw global
- realtimehide date picker on realtime pages; visitors feed polish (source, search, blink)
- permsbusiness admins/owners see their own tenant's user PII (ADR-0013)
- realtimevisitors feed — alias session_key (CH String/UUID shadow)
0.9.307#
Added
- engagementEvents sub-page — events-over-time chart + table (GA4 parity)
0.9.306#
Fixed
- whmcsauto-derive the CDN host for t.js when Tracker URL is unset (no-config 404 fix)
- whmcsload t.js from the CDN/tracker host, not the collector endpoint (404 fix)
- conversionskeep once_per=event (per-load), not session — session under-counts multi-order sessions (ADR-0072)
- conversionsflip URL-keyed create rules once_per event->session + retro tooling (ADR-0072)
- trackingpage_view once per load — kill snippet double-fire (~3.3x over-count)
0.9.301#
Added
- i18nmore Persian cities, localized /geo + device names, AdPix Captcha in waffle
- realtimePersian place names on the fa map (countries via Intl, curated cities)
- realtimeGA4-style hover tooltip on per-minute bars, fully localized
- realtimeGA4-style axes on the map's per-minute chart (minute + user labels)
- realtimeGA4-style map — active-users overlay, visible+sticky zoom, city labels
Fixed
- realtimefa map shows distinct city names, not a repeated country
- realtimefa map never shows English city names — normalize + country fallback
- realtimezoom keeps bubbles locked to the map + de-clutter city labels
- realtimeguard the geo setOption until the world map is registered
- integrityauto-scoring never freezes + dead mobile guard + per-network drill-down
0.9.291#
Added
- tag-gatewaypersist the bundle, lock+edit subdomain, tabbed configs, dual install
- funnelsingle persistent funnel + period-over-period, redesigned (Claude Design 2b)
Fixed
- uiloader-not-empty on load, searchable dropdowns, configurable Tag-Gateway subdomain
- authplatform-console suspend/disable now actually enforce (org lockout + durable user disable)
0.9.287#
Fixed
- authask login-or-signup at the door + humane SSO error journeys (onboarding UX)
- webtraffic chart follows the table row search + fa annotation markers at the true axis position
0.9.285#
Added
- integrityClickCease-class signals — click flooding, IP rotation, interaction rate (ADR-0071)
Fixed
- integrityIP-rotation signature requires device DOMINANCE — a common fingerprint is not a rotator
- webshow the previous-period comparison only when Compare is selected in the date picker
0.9.282#
Fixed
- integritystop flagging real channels — package-aware classification, evidence-based decision ladder, volume floors (ADR-0070)
0.9.281#
Added
- annotationsthree visibility layers — global (super admin), property-shared, private
- webchart annotations on Traffic acquisition — right-click to add, hover to read, click to edit
- webTraffic acquisition adopts the design-system Report Table
Fixed
- webJalali annotation calendar, Vazirmatn numerals in fa tables, design-language tables everywhere
- webTraffic acquisition no longer pans horizontally on mobile (grid min-content trap)
- webReport Table — settings survive the date picker, totals follow the search, dim2 header parity, loading bar
- webReport Table — column widths share surplus space, sticky mobile rails, and settings that survive a re-fetch
- conversionsonce_per='user' silently deleted every repeat purchase (ADR-0067 correction)
- channelsdemoted traffic was reported as "Unassigned" — 40% of production sessions
- webcollapsed 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
- accuracyinvariant checks must not race live traffic
- accuracysort-key cutover must never leave ingest stopped, and must survive schema drift
- accuracyretro mutations must opt in to allow_nondeterministic_mutations (prod)
- accuracybot filter no longer deletes real devices; align tracker budget with ADR-0055
- accuracysessions 18.5x fragmentation, duplicate rows, sort-key data loss, timezone, attribution (ADR-0069)
0.9.265#
Added
- reportsGA4-style per-column event pickers on Traffic acquisition + toolbar dimension selectors
- versionautomatic versioning + changelog from git — zero manual bumps (ADR-0068)
- i18nruntime translation overrides — platform-admin-editable, no redeploy (ADR-0066)
Fixed
- accuracyconversion 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#
Fixed
- webonboarding steps advance on Enter, not just a Next click
0.9.258#
Added
- authself-serve signup — SSO signup → onboarding, super-admin toggle (ADR-0065)
Fixed
- authconsistent signup hand-off — existing accounts → IdP login, not signup (ADR-0065)
0.9.256#
Added
- webredesign onboarding + invite-accept to the imported "Analytics Onboarding" design
- authmigrate OAuth login to the standalone AdPix Account IdP (ADR-0063)
Fixed
- webrealtime map crash — never re-apply chart options before the world map registers
- webmobile header + actually ship the Persian font for charts
- ingestconversion identity dedup — once_per rule scopes + purchase transaction_id (ADR-0064)
- integritylow-volume gates + self-referral allowlist + why-flagged transparency (ADR-0062)
0.9.249#
Added
- websuper-admin seasonality calendar management page (ADR-0061 WS1)
- liftseasonality-event exog for the ITS engines (ADR-0061 WS1, incrementality)
Fixed
- webzero out the standalone tsc error set
0.9.246#
Added
- mmmposterior optimal-mix uncertainty + ADR-0061 (WS3)
- mmmLift -> MMM calibration bridge (ADR-0061 WS2)
- mmmmarket-correct seasonality calendar + spend-weighted mROI (ADR-0061 WS1+WS4)
0.9.243#
Added
- webreplace native confirm() delete dialogs with branded ConfirmDialog
- integrityself-scheduling nightly + manual "Run scoring now" so Fraud Protection actually runs
- integrityseed default builtin detection rules so Fraud Protection works out of the box (ADR-0026)
Fixed
- integritypayment-gateway referral exclusion + Direct precision-first shield (ADR-0060)
- integrityhome-country sanctioned exemption + conversion-is-not-fraud (ADR-0059)
- liftcalibrate the ensemble cumulative CI — stop low-count false positives (ADR-0058)
- liftguard report chartOption memo against null detail (PDF export crash)
- liftscheduling off-by-one — score once the inclusive window elapses (ADR-0057)
- heatmapinline web fonts + capture on unload — font fidelity + snapshot coverage
- heatmapstop rendering/counting GTM iframe + script bodies; clean click labels
- exploremake Path exploration readable — URL grouping + top-N + sankey UX (ADR-0056)
0.9.231#
Fixed
- trackerpage_view counting accuracy — fire only on real URL change (ADR-0055)
- authread ANALYTICS_API_SECRET for the SSO bridge (decouple from email config)
- authbridge analytics role grants to the IdP so SSO users can sign in
- whmcsshow order attribution via client-level fallback + backfill paid orders
- identityshow phone in Identified Users + link phone-only clients in WHMCS (+ backfill)
0.9.226#
Added
- whmcsphone-signup linking fix + collapsible AdPix summary card (design v2)
- realtimeGA4-style city-bubble map with pan/zoom + auto-fit
Fixed
- whmcscollapse + relocation never fired — <script> in footer hook doesn't run
- heatmapblank backdrop on real pages — raise the 8MB DOM-snapshot cap + force re-capture
Changed
- whmcsadmin reports froze the server — add indexes + statement timeout + cache
0.9.221#
Added
- webRaw events — global_user_id links to the user detail page
- identitycross-browser / incognito device fingerprint stitch (ADR-0054)
- geobake the DB-IP GeoIP db into the ingest image (country/city on any deploy)
Fixed
- trackeridentity broken — identify gated on marketing consent + missed form fields
- ingestreal visitor IP behind ArvanCloud — read the ar-real-ip header
- ingeststop per-beacon session_start + first_visit inflation on the cookieless path
- explorepath exploration — collapse consecutive duplicate pages (arrayCompact)
- identityWHMCS/S2S phone matching — append phone to user_phones (ADR-0031 parity)
- heatmapempty backdrop — derive the snapshot url_group from the same inputs as events
- webPersian chart fonts + keep explore report on date change + group overlap
- geohot-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#
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.