One ID-keyed message ledger now handles sends and polls.
Messages are always sorted by server ID, latest at bottom.
Duplicate DOM rows and voice players are removed.
Poll cursors advance only from validated received messages.
Voice autoplay queues each received clip once.
Added exact user_id ownership tracking.
Cache-busted client to 20260609.4.
Groups is fully removed:
No homepage navigation, Account feature, tier setting, API, or client
code.
Legacy group tables, entitlements, messages, voice files, and config are
purged automatically.
New cache-busted client: cyberchat-app.js?v=20260609.3.
Browser and SQLite migration tests passed with no console errors.
Replaced polling with a single queued cursor worker, timeout recovery,
backoff, deduplication, chronological insertion, and capped DOM history
in cyberchat-v4.js.
Removed Groups UI, API, configuration, tier features, admin controls,
and archive exposure.
Legacy group records remain stored but inaccessible.
Added configurable polling limits in config.json.
Fixed polling after voice/text sends.
Changes include:
Stalled polls abort and retry automatically.
Polling now schedules after each completed request.
Local sends no longer advance the server cursor and skip interleaved
messages.
Sends trigger immediate reconciliation.
API requests bypass browser caches.
Plans & Platform > Plans, Prices & Entitlements > Groups Available for
each tier.
Config > Feature Availability > Groups Enabled as the global master
switch.
When disabled:
Group navigation and channel selector are hidden.
Group API operations are blocked.
Active sessions update automatically.
Existing groups and messages remain preserved.
Static and browser tests passed with no console errors.
Admin tier assignment without payment via Users > Edit > Tier Override.
Fixed live group membership refresh, polling, unread indicators, and
incoming voice clip population.
Added asset cache busting so clients receive the fixes immediately.