CJX-008-STABLE
Plugin Version: 0.0.8
Internal DB schema: 0.0.4
Base: ChatJox 0.0.6 (CJX-006-STABLE).
CHATJOX_DB_VERSION stays 0.0.4; the version bump triggers no migration.

Scope:
- Bug fixes: duplicate conversation creation, 1-second message refresh
  interval, richer launcher icon presets, multiple operator avatars,
  per-channel custom icon images.
- Upload button sizing: it no longer forces its own 50/52px box and takes the
  shared .chatjox-icon-btn square instead, so it is pixel-identical to the send
  button (44px desktop, 43px mobile) and the visible button and the tappable
  area are the same rectangle, with no dead margin.
- Mobile file upload hit area fixed. Root cause: .chatjox-launcher-wrap is
  position:fixed at z-index 2147483002, above the panel at 2147483001, and
  visibility:hidden on the launcher preserves its layout box, so over the panel
  the wrapper covered the composer and absorbed taps meant for the attachment
  button. Measured with elementFromPoint on the rendered widget at 390x760:
  8/64 sample points reached the button before, 60/64 after at the final size
  (the remaining 4 are the rounded corners, outside the visible shape). The wrapper is now pointer-events:none and the
  launcher and contact menu opt back in.
- Secondary hardening on the same control: it is now a <label for> over a
  visually hidden, pointer-transparent file input, because the real tap target
  of a file input is the native select button, which sits on the text baseline
  at its intrinsic size. Label activation is a trusted click, so the isTrusted
  guard against synthetic picker opens still applies, and pointer-events:none
  on the input keeps Android from opening a second picker.
- The picker lock now always releases on a timer, so a browser that sends no
  change, cancel or focus event after the picker closes cannot leave the
  button permanently dead.
- Voice messages removed completely: switch, settings, recorder script,
  recording UI, upload path, audio player and styles.
- Redesigned admin feature toggles (larger switch, focus ring, active card
  state, ON/OFF text badge) and the in-widget satisfaction rating UI.
- Five new opt-in modules: customer rating, reports, transcript email, block
  list and anti-spam, duplicate conversation merge. Per-module options live on
  the Advanced Features screen; no extra settings menu is added.
- Granular operator permissions for the new screens.

New tables:
- wp_chatjox_ratings
- wp_chatjox_blocks

New columns:
- sessions: visitor_key, wp_user_id, first_operator_reply_at, closed_at,
  merged_into_session_id (+ indexes on created_at, visitor_key, wp_user_id,
  merged_into_session_id, visitor_email, visitor_phone)
- operators: permissions

Migration:
- dbDelta compatible and idempotent; re-running activate() is safe.
- One-time non-destructive backfill of first_operator_reply_at and closed_at
  from existing message history, guarded by the chatjox_metrics_007_backfilled
  option. Every UPDATE only touches NULL columns.

Upgrade policy:
- Direct 0.0.6 -> 0.0.8 upgrade, no reinstall required. 0.0.7 was never
  published; its changes ship inside 0.0.8.
- Every new module defaults to OFF on upgrade and on fresh installs.
- Existing conversations, contacts, settings, appearance, Telegram
  configuration, operators, departments and notification settings are
  preserved.
- Chat, Telegram, file, cleanup and action-menu behavior is otherwise
  unchanged.

Package cleanup:
- Removed the duplicate full copy of the plugin that shipped inside /assets/.
- Removed superseded assets that were no longer enqueued:
  css/front-actionmenu3.css, css/front-actionmenu3-006.css,
  js/front-actionmenu3.js, js/front-actionmenu3-006.js,
  js/front-actionmenu3-006-r2.js, js/voice-recorder.js
