> ## Documentation Index
> Fetch the complete documentation index at: https://docs.socialglass.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Product updates, release notes, and announcements from Social Glass.

Track product updates and release notes from Social Glass.

Subscribe via [RSS](/changelog/rss.xml).

<Update label="2026-08-18" description="Safer Structured Agent Reads">
  * Exact Insight reads now keep each client's analysis separate and clearly attributed.
  * Agent search and exact records now return reliable structured data without duplicate text payloads.
  * Admin agents can use a bounded, privacy-safe user search without a separate rollout setting.
</Update>

<Update label="2026-08-17" description="Simpler Admin Web Addresses">
  * Admin pages now live at simple addresses like `/admin/users` instead of being tucked under a client's own address.
  * Old admin links keep working and send you straight to the new address, so saved bookmarks are safe.
  * Admin pages that cover every client now let you pick a client from the page itself, and that choice stays in the link you share.
</Update>

<Update label="2026-08-14" description="Faster, Clearer Agent Search">
  * Split agent search into dedicated tools for Posts, Creators, Insights, and the Persona catalog.
  * Search now returns compact structured results, while full records come from the exact detail tool.
  * Agents can load one organization's context without reloading their full operating instructions.
</Update>

<Update label="2026-08-13" description="Live Organization Members">
  * The organization members list in admin now stays in sync automatically, so members added or removed anywhere show up within seconds.
  * Members can invite teammates to their organization directly from the sidebar.
  * Adding, inviting, and removing organization members is faster and more reliable from start to finish.
</Update>

<Update label="2026-08-13" description="Clearer Organization Insights">
  * Organization dashboards now open to Relevant Insights by default, with separate views for all available Insights and private organization Insights.
  * Global Insights can be linked to one or more organizations without requiring organization-specific analysis.
  * Renamed Insight access controls to Visibility and added clearer confirmation before replacing existing visibility.
</Update>

<Update label="2026-08-12" description="Clearer Post Submission Views">
  * Added clear Posts views for general submissions, team posts, all submissions, and submissions to a specific Prompt.
  * Prompt filtering now uses one Prompt at a time and shows its guidance directly in the selector.
  * Kept these submission views focused on All Posts, while Relevant and Interesting stay simple curated Post lists.
</Update>

<Update label="2026-07-28" description="Sign-In Fix for Two-Factor Accounts">
  * Fixed a sign-in bug where accounts with two-factor authentication could get stuck at the verification-code step after signing in with Google, seeing a "not ready for factor two verification" error.
  * Sign-in with Google plus an authenticator code now completes reliably across all browsers.
</Update>

<Update label="2026-07-22" description="Social Glass Agent Plugin">
  * Added a branded Social Glass plugin for Codex and Claude Code with customer-facing marketplace details.
  * Added shared Social Glass workflow skills to the plugin package.
  * Added a skills.sh installation option for agents that already have the Social Glass MCP configured separately.
  * Split and streamlined the plugin, direct MCP, and skills setup guides.
</Update>

<Update label="2026-07-13" description="Safer and Broader MCP Access">
  * Connected agents can now read signals and reports over MCP, matching the existing project and dashboard read tools.
  * MCP write tools now ask for the target organization's name alongside its ID and refuse mismatches, preventing edits from landing in the wrong client workspace.
  * Agents switching between organizations can fetch a lighter organization-only context instead of re-downloading full instructions.
</Update>

<Update label="2026-07-12" description="Dashboard-Aware Chat">
  * Chat can now read the current dashboard and its insight, creator, post, persona, and brand-monitor sections directly.
  * Dashboard questions can include computed Consistent insight and creator groups without asking users to copy and paste the visible list.
</Update>

<Update label="2026-07-03" description="Unified Detail Pages">
  * Persona and report pages now share the insight detail layout, with a cleaner header, larger title, and consistent summary placement.
  * Persona avatars, related creators, and creator page sections now use the same collapsible section treatment as insights.
  * Related insights on persona pages moved from a fixed side panel into an on-demand "See related" panel, giving the content the full width of the page.
</Update>

<Update label="2026-06-10" description="Project Tags">
  * Added project tags for organizing and filtering projects by category, campaign, or custom groupings.
  * Tags support both organization-scoped and global scopes, with admins able to create global tags visible across all clients.
  * Projects can be filtered by tags in the projects tab, and tag assignments can be managed from the project detail view.
</Update>

<Update label="2026-06-05" description="Post Media Downloads">
  * Organization members can now download the photos and videos attached to posts directly from post cards.
  * Video downloads prepare a downloadable MP4 when needed while keeping normal dashboard playback optimized for streaming.
  * Selected posts can now be packaged into a media ZIP from the bulk ActionBar, with a `download-contents.csv` file that records downloaded and skipped files.
  * Projects and insights now offer the same linked post media package download from their action menus.
  * Download feedback now appears immediately after starting a media download, and downloaded files use readable names based on platform, creator, and post.
</Update>

<Update label="2026-06-05" description="Client Survey Response Exports">
  * Added a dashboard survey responses page where organization members can download responses for surveys owned by their organization.
  * Client exports include answers, submission dates, and non-contact demographic context while excluding names, emails, phone numbers, user IDs, and social handles.
</Update>

<Update label="2026-06-03" description="Shared Review Workspace">
  * Added a shared Review page for team members to review AI-created drafts and staged changes in one place.
  * Moved insight review into the shared review workspace while keeping the existing update, merge, delete, and link-level review tools.
  * Added draft project review actions so teams can edit, approve, reject, or archive AI-created projects before clients see them.
</Update>

<Update label="2026-06-03" description="Project Review Statuses">
  * Added project review statuses so AI-created projects can stay in draft until reviewed.
  * Public project pages now show approved projects by default, keeping archived, rejected, deleted, and draft project records out of normal client views.
  * Changed project cleanup to archive stale or duplicate projects instead of renaming them as deprecated.
</Update>

<Update label="2026-06-01" description="Easier Survey Sharing and Replies">
  * Survey broadcasts can now send signed Social Glass links so recipients can answer without signing in.
  * Native Social Glass survey texts now tell recipients they can reply directly by text, making quick screeners easier to complete from a phone.
  * Improved survey selection in admin send flows so teams can find the right screener or survey more confidently before sending.
</Update>

<Update label="2026-05-30" description="Unified MCP Endpoint">
  * Moved Social Glass MCP setup to one canonical endpoint: `https://mcp.socialglass.ai/mcp`.
  * Consolidated read and write tools into the same MCP server, with write tools shown only for Social Glass admins.
  * Removed the older `/api/mcp` and `/api/mcp-write` routes so all MCP setup goes through the canonical MCP subdomain.
</Update>

<Update label="2026-05-29" description="MCP API Key Access">
  * Added support for Clerk user API keys as a durable Social Glass MCP authentication option for clients where OAuth refresh is unreliable.
  * Kept OAuth as the preferred self-serve setup, while allowing long-lived bearer-token access tied to an individual Social Glass user account.
  * Write-capable MCP access still requires a Social Glass admin account.
</Update>

<Update label="2026-04-22" description="Prompt Assignment Source-of-Truth Cleanup">
  * Prompt membership now uses one canonical relation table instead of duplicating assignment state on prompt documents.
  * Bulk prompt assignment from `/admin/users` now avoids the slow prompt-level rebuild path that had been making larger assignments drag.
  * Cleaned up the remaining legacy prompt membership fields in both dev and production so the new assignment model is the only live storage path.
</Update>

<Update label="2026-04-21" description="MCP Self-Serve Login + Admin-Gated Writes">
  * Enabled self-serve MCP login through dynamic client registration, so compatible MCP clients can connect to Social Glass without a manually preapproved OAuth client.
  * Simplified write-capable MCP access so it now follows the same app-side admin rule as our internal tooling instead of relying on a separate client allowlist.
  * Kept read access scoped to eligible Social Glass users and org access, while keeping write access restricted to Social Glass admins.
</Update>

<Update label="2026-04-18" description="2026-04-18">
  * Split Social Glass MCP into a safer public read-only endpoint and a separate write-capable endpoint for approved clients.
  * Added a dedicated write MCP route and metadata endpoint so external tools can connect without exposing write operations by default.
  * Added OAuth client allowlisting for the write-capable MCP surface to keep dynamic client registration compatible with safer defaults.
</Update>

<Update label="2026-04-07" description="2026-04-07">
  * Updated `/submit` survey behavior so org-required screeners only force completion for submitters assigned to that organization's active prompts.
  * Added a browseable opportunities list on `/submit` that shows org screeners to all submitters, even when they are not currently blocked by one.
  * Expanded submitter survey access so browseable opportunity surveys can still be opened and completed from the submit flow.
</Update>

<Update label="2026-04-03" description="Admin Payout Controls">
  **Admin Payout Controls (04/03/2026)**

  * Added an admin payouts page for sending one-off payouts manually and reviewing recent payout history in one place.
  * Added a prompt-level payout panel so admins can preview which submitters met a prompt's submission target for a selected window and send base payouts directly from the prompt screen.
  * Added duplicate protection for prompt-window base payouts so rerunning the same prompt payout window skips people who were already paid.
  * Added PayPal webhook reconciliation so payout statuses can update from PayPal processing events after the initial send request.
  * Added an explicit payout platform field on users so PayPal vs Venmo no longer depends on guessing from the payment identifier format.
</Update>

<Update label="2026-04-01" description="Agent Registry Foundation">
  **Agent Registry Foundation (04/01/2026)**

  * Reworked the existing instruction registry so rows can now act as first-class agent configs without migrating the stored prompt content into a new table.
  * Added agent-specific row metadata for scope, enabled state, tool access, and attached skills, while keeping global prompts, legacy prompt artifacts, revision history, and automations in the same storage layer.
  * Updated the admin surface so the registry can create and edit agent rows directly, including tool and skill assignment, while still supporting legacy instruction and automation rows during the transition.
</Update>

<Update label="2026-03-31" description="Prompt Payout Foundations">
  **Prompt Payout Foundations (03/31/2026)**

  * Added a base payout amount on prompts so admins can store how much a completed prompt should pay without keeping that logic in spreadsheets.
  * Expanded payout records to capture the reason for payment, including whether it is a base payout or a bonus, which prompt it relates to, and the payout window it covers.
  * Started storing payout amounts in cents for cleaner money handling while keeping the current PayPal sending flow in place.
  * Fixed the prompt payout export so submitters who exactly hit the submission target are marked as payable instead of being skipped.
</Update>

<Update label="2026-03-30" description="Admin Chat Streaming Simplification">
  **Admin Chat Streaming Simplification (03/30/2026)**

  * Swapped the admin agent chat over to OpenAI's official AI SDK UI stream bridge, which cuts out a custom stream translation layer that had been causing drift and flaky behavior.
  * Removed the old in-memory "resume the same live stream" path and replaced it with saved in-progress assistant drafts, so reloading still brings back the answer-in-progress without depending on a fragile reconnect buffer.
  * Kept stop/cancel behavior for active runs, while making finished assistant replies and failure states persist more cleanly in conversation history.
</Update>

<Update label="2026-03-26" description="Social Glass MCP">
  **Social Glass MCP (03/26/2026)**

  * Added a first MCP server for Social Glass so external MCP-capable agents can search zeitlets, inspect exact posts/creators/insights/personas, and make the same core insight/persona/project/dashboard updates our in-app chat agent already supports.
  * Protected the MCP route with Clerk OAuth metadata endpoints, then enforced Social Glass org access in-app so non-admin users stay scoped to their assigned organization while admins can opt into a specific org.
  * Kept the MCP tool contracts aligned with the existing chat-agent schemas and persistence adapters, so we now have one shared source of truth instead of a separate external-agent API surface.
</Update>

<Update label="2026-03-24" description="Dashboard Revision Restore From History">
  **Dashboard Revision Restore From History (03/24/2026)**

  * Added an in-product restore action to dashboard revision history, so admins can roll a dashboard draft back to any saved publish or restore snapshot without leaving the report view.
  * Restoring exits read-only revision mode and returns the dashboard to draft, making it easy to review changes before publishing again.

  **Agent Zeitlet Retrieval Upgrade (03/24/2026)**

  * Added a dedicated `get_zeitlet` tool so the agent can pull one exact post, creator, insight, or persona with its direct linked evidence instead of guessing from search snippets.
  * Updated `search_zeitlets` so it defaults to lightweight scan-friendly cards, while the richer mode now previews real entity fields instead of relying on the internal search corpus.
</Update>

<Update label="2026-03-23" description="Safer Insight and Persona Linking">
  * Insight and persona relationships now use ordered `entityLinks` rows as the backend source of truth, which makes saves less fragile when old linked data is imperfect.
  * We removed the unused insight `children` relationship from the product and backend contracts.
  * A new backfill + verification path preserves the existing order of linked posts, creators, personas, and related insights while we migrate older records safely in stages.
</Update>

<Update label="2026-03-22" description="Clearer Agent Write Results">
  * Agent write tools now return structured save summaries instead of bare success strings, so chat workflows can see exactly what changed.
  * New insights created through chat default to draft without silently re-drafting existing insights when they are edited.
  * Recent post search now excludes posts missing descriptions and reports how many low-signal posts were skipped.
</Update>

<Update label="2026-03-20" description="Project Slugs for Agent Workflows">
  * Added readable slugs for projects so agent workflows can target projects by slug instead of only full internal IDs.
  * New and renamed projects now keep their slug in sync automatically, and existing projects were migrated onto the same persisted slug field.
  * Updated the agent project tools and write path so `project_<slug>` and bare project slugs work the same way as other agent-friendly references.
</Update>

<Update label="2026-03-19" description="SMS Intake Reliability">
  * Tightened inbound SMS handling so split Twilio text parts are reconstructed into one logical message instead of being treated as unrelated submissions.
  * Preserved more inbound Twilio metadata and attachments so debugging and follow-up handling are more reliable when messages include links, media, or multipart delivery details.
  * Added a safer rollout path for the SMS routing agent behind a feature flag, including clearer replies when we can auto-route a text and when we need the sender to clarify the prompt.
  * Simplified insight editing for agents so long-form insight content is rewritten as a whole instead of patched via special append/prepend/replace operations.
</Update>

<Update label="2026-03-14" description="Zeitlet ID Migration">
  * Cleaned up zeitlet references so the system now relies on each item's canonical slug for agent lookups instead of storing a separate short ID on the record.
  * Kept saved markdown links stable by continuing to store durable internal IDs in `sg://...` references, while still letting agents and tools use readable refs like `post_<slug>`.
  * Ran the migration on both dev and prod, including mention normalization and legacy `shortId` cleanup.
</Update>

<Update label="2026-03-11" description="Public Page Monitoring">
  * Added an automated monitor that checks key public pages on a schedule instead of waiting for someone to notice a broken link.
  * Public dashboard views and major public site pages now have recurring browser-based health checks.
  * When those checks fail, the team gets an alert with a direct link to the failing run so issues can be triaged quickly.
</Update>

<Update label="2026-03-09" description="2026-03-09">
  * Fixed admin user edits reverting after save by making Clerk the source of truth for logged-in identity fields like names, phone, and org membership.
  * Updated submitter profile editing so phone still uses Clerk verification, while contact email now saves directly to the app profile without the broken Clerk email verification step.
  * Removed stale local table state in the admin users screen so prompt and survey edits follow live Convex data more reliably.
  * Hardened background profile generation and user merges to avoid writing older profile data back over newer admin edits.
  * Reworked the signed-out `/submit` flow so phone sign-in now falls straight into account creation for brand-new submitters instead of dead-ending on the sign-in screen.
  * Simplified submitter auth back onto Clerk's built-in sign-in screen, so signed-out `/submit` now redirects to `/signin` and we no longer maintain a custom phone auth flow there.
</Update>

<Update label="2026-03-05" description="2026-03-05">
  * Added signed-in dashboard revision history so teams can open older publish and restore snapshots directly from the dashboard.
  * Hardened dashboard saves and restores so partial updates no longer wipe sibling sections and restores behave like real point-in-time snapshots.
</Update>

<Update label="2026-03-04" description="Safer Admin Access Repair Flow">
  **What changed**

  * Removed automatic admin promotion during dev database sync.
  * Added a dedicated, secret-gated Convex ops command to safely set or clear a user’s admin role.
  * Standardized operator email configuration to `ian@ambassco.com`.
  * Added a clear internal runbook and agent instructions for future authorization-related maintenance.

  **Why this matters**

  * Prevents accidental admin access from being re-applied by default.
  * Gives us one predictable, auditable way to repair access when auth/account mappings drift.
  * Reduces repeated debugging and confusion for future agent-driven operations.
</Update>

<Update label="2026-03-03" description="Experimental PayPal/Venmo Payouts (MVP)">
  **What changed**

  * Added a new `payouts` table to track each payout request and response in one place.
  * Added a minimal PayPal Payouts integration that can send a single payout and store the result.
  * Added admin and CLI payout actions so we can run a live end-to-end payout test immediately.

  **Why this matters**

  * We can now verify real payout connectivity before finalizing broader payout business rules.
  * Every payout attempt has a persistent record with status, provider IDs, and error details for debugging.
</Update>

<Update label="2026-03-02" description="Submission Log Simplification + Latest Processing State">
  **What changed**

  * Simplified `submissions` to a lightweight audit log (who submitted what URL, where it links, and prompt/user context).
  * Removed processing status history from `submissions` and track only latest processing state on `posts.processing` using timestamps (`startedAt`, `completedAt`, `failedAt`).
  * Updated submit/scrape/orchestrator flows to patch `posts.processing` directly.
  * Updated admin metrics and sender/client rollups to derive processing state from linked `posts`.
  * Added migration support to backfill latest post processing state from legacy submission fields and remove deprecated submission fields.

  **Why this matters**

  * Keeps submissions clean and purpose-built as an immutable record of user submissions.
  * Removes run-history table complexity while preserving the only state needed for product operations (latest run outcome).
  * Keeps deep debug history in Sentry/PostHog rather than the primary relational model.
</Update>

<Update label="2026-03-01" description="Telemetry Ownership Cleanup (Sentry + PostHog)">
  **What changed**

  * Clarified telemetry ownership so runtime errors and incidents are handled in Sentry, while product behavior and funnel analytics remain in PostHog.
  * Stopped duplicate client-side exception ingestion in PostHog to reduce overlap and alert noise.
  * Standardized failure telemetry to consistently include a short failure reason and Sentry event IDs when available.

  **Why this matters**

  * Faster debugging with one clear source of truth for production failures.
  * Cleaner analytics and less duplication between tools.
  * More reliable cross-tool triage by linking product failure events to Sentry incidents.
</Update>

<Update label="2026-02-27" description="Unified Social Account Identity Across Entities">
  **Unified Social Account Identity Across Entities (02/27/2026)**

  * Migrated social account identity to a shared `accounts` table as the source of truth across creators, users, brands, and organizations.
  * Added owner-linked account rows (`ownerType` + `ownerId`) for consistent cross-entity identity mapping.
  * Updated creator/user/brand/organization write paths to sync account data through the `accounts` table.
  * Added and ran backfills to populate canonical account rows from existing records.
</Update>

<Update label="2026-02-25" description="Dashboard Foundation + Publish Revisions">
  **Dashboard Foundation + Publish Revisions (02/25/2026)**

  * Added a new first-class `dashboard` backend model that supports a single live dashboard per organization.
  * Added `dashboardRevisions` as immutable publish snapshots, so edits can stay in draft until an admin publishes.
  * Publishing now records a revision history entry and marks that snapshot as the live version for read flows.
  * Added a migration utility to seed each organization’s new dashboard from its most recent legacy report.
</Update>

<Update label="2026-02-21" description="PostHog Identity Cleanup and Historical Merge">
  **Analytics Quality**

  * Standardized PostHog user identity to Clerk IDs so user activity is no longer fragmented across multiple profile IDs.
  * Updated messaging and vector-search telemetry paths to stop creating extra People records from internal/system identifiers.
  * Switched client tracking to identified-only person profiles, which keeps anonymous funnel event tracking while reducing People-page noise.

  **Data Cleanup**

  * Added a PostHog identity backfill tool that aliases legacy Convex-based IDs to canonical Clerk-based IDs and refreshes user profile traits.
  * Added dry-run and execution commands so the cleanup can be run safely and repeatedly.
</Update>

<Update label="2026-02-20" description="Analytics Funnel + Reliability Reporting Refresh">
  **Analytics**

  * Fixed signup tracking so funnel events are captured reliably from redirect through onboarding completion.
  * Added clearer organization-signup telemetry to show view and continue actions during activation.
  * Improved AI telemetry identity quality so background embedding jobs no longer pollute user-level analytics.

  **Reporting**

  * Replaced placeholder PostHog reporting assets with production-ready dashboards for core product health and agent reliability.
  * Added an idempotent provisioning script so reporting dashboards/insights can be reconciled quickly in both dev and prod.

  **Platform Reliability**

  * Improved public routing so invalid organization links now go to the landing page instead of forcing users into a single fallback org.
  * Simplified public dashboard search reliability fixes and removed unused dev-only `react-grab` hooks from the app.
  * Standardized optional end-to-end test URL configuration so dashboard and chat smoke tests skip cleanly when target URLs are not set.
</Update>

<Update label="2026-02-18" description="Insight Consistency Formula Controls">
  **Reports**

  * Dashboard v2 can now auto-populate the **Insights → Consistent** list when a new report is created.
  * Admins can now re-run the **Insights Consistent** formula from the Insights tab and tune all formula settings directly in the UI.
  * The consistency controls now include full formulas, detailed plain-language explanations, and per-setting tooltips so non-technical teammates can understand exactly how scoring works.
  * Removed the max-insights cap from insight consistency seeding; qualifying insights are now controlled by eligibility + threshold instead of a hard count limit.
  * Added the same full formula controls and explanations to the **Creators → Consistent** view, including all backend tuning knobs.
  * Insight consistency reseeding now runs through an action flow to avoid mutation timeout failures on larger datasets.
  * Added PostHog tracking for consistency formula runs (`started`, `completed`, `failed`) across both creators and insights.
</Update>

<Update label="2026-02-17" description="Search Zeitlets Contract Simplification">
  **Insights**

  * Standardized `search_zeitlets` to a single tool contract that returns only the existing agent-facing formatted string output.
  * Removed the extra side metadata channel (`results` / `idMapDelta` merge path) from runtime handling to reduce moving parts and failure points.
  * Removed request-scoped `idMap` lookups entirely; typed short IDs now resolve authoritatively by slug in Convex (or pass through as full IDs), and writes/searches use that same path end-to-end.
</Update>

<Update label="2026-02-15" description="Lighter Message Storage and Stronger SMS Telemetry">
  **Insights**

  * Reduced stored chat metadata to the fields we actively use in the product, which lowers message document size and keeps chat history lighter.
  * Removed bulky Twilio raw payload storage from message records while preserving key delivery/error fields.
  * Added dedicated PostHog events for SMS ingest/send/failure paths so Twilio transport visibility is tracked in analytics instead of overloading core message records.
</Update>

<Update label="2026-02-12" description="Cleaner Dashboard Report Editing Logic">
  **Insights**

  * Simplified how dashboard report list updates are processed so all list edits now follow one consistent path.
  * Reduced duplicate update logic in agent and backend layers, which should make report edits more reliable and easier to maintain.
  * Added targeted regression tests for report list update behavior to help prevent this area from drifting again.
</Update>

<Update label="2026-02-11" description="More Precise Insight Editing for Agent Workflows">
  **Insights**

  * Agent-driven insight edits can now target specific parts of long insight writeups instead of rewriting the whole content block.
  * Insight updates now support both relationship-list changes and focused field edits in one operation.
  * Added safer text-edit behavior that fails clearly when edit anchors are missing or ambiguous, reducing accidental overwrites.
</Update>

<Update label="2026-02-10" description="Smarter Consistent Creator Suggestions in Dashboard Reports">
  **Reports**

  * Dashboard v2 now auto-populates the **Creators → Consistent** list when a new report is created.
  * The default formula prioritizes creators who show up repeatedly across the report window, with extra weight for recent activity.
  * Added a **Re-run Formula** button in the Creators tab so admins can refresh the Consistent list after changing report dates or formula settings.
  * Suggested creators are still fully editable after generation, so teams can manually tune the final list.
</Update>

<Update label="2026-02-06" description="Faster Insight Curation from Similar Zeitlets">
  **Insights**

  * Added `+ Add` actions inside the insight detail "similar zeitlets" rail for posts, insights, creators, and personas.
  * New add actions use incremental `insights.updateInsightOps` updates so linked lists append safely without replacing existing links.
  * Similar insight adds now map to the current insight's `related` list; post/creator/persona adds map to their matching linked fields.

  **Zeitlet Views**

  * Insights are now compact-only across views; removed the old default card path and preview toggles.
  * Added shared Zeitlet layout constants (`grid/list` columns, gap, estimated row heights) in `components/schema/view-layout.ts`.
  * `CreatorView` and `PersonasView` now use shared layout SSOT and support `layoutVariant` (with `variant` kept as a compatibility alias).
  * Removed unused `CreatorView.organizationId` and dropped unused `roundedContainer` plumbing in `ZeitletView`.

  **Authentication**

  * Fixed recurring submitter/org profile loops where required email kept reappearing: Clerk identity sync now omits blank email values instead of sending `null`.
  * Hardened `users.upsertUser` so empty/invalid synced contact identifiers no longer wipe an existing Convex email/phone on re-login.
  * Added retry/backoff for transient `Unauthorized Clerk sync` races during initial client-side identity sync.
</Update>

<Update label="2026-02-05" description="Evolution Agent + DB-Only System Prompts">
  **Agents**

  * Added `EvolutionAgent` handoff from `/chat` for updating agent instruction templates and notifying the operator via SMS.
  * Added `instructionTemplates.patchTemplate` mutation for safe, partial updates to system prompt templates.
  * Removed seed-defaults UI and hardcoded template remnants; instructions are DB-only.

  **Data Model**

  * Began `users` contact flattening rollout: added top-level `users.email` and `users.phone`, dual-write from user upsert/update paths, and dual-read helpers used by admin + submitter flows.
  * Backfilled top-level contact fields for existing users via `migrations:runBackfillUserTopLevelContactFields` (processed 1,704 users; migration state `success`).
  * Cut over indexed lookups from `by_contact_email`/`by_contact_phone` to `by_email`/`by_phone` across users, messaging, surveys, migrations, and related tests.
  * Completed legacy cleanup: removed nested `users.contact.email` and `users.contact.phone` writes/read paths, added and ran `migrations:runStripUserLegacyContactEmailPhone`, and removed those nested fields from the Convex schema.
</Update>

<Update label="2026-02-04" description="Ops Metrics Dashboard">
  **Admin**

  * Added Ops Metrics dashboard for submission pipeline health (throughput, success/failure, latency, backlog).
  * Added org/prompt filters, quick time presets, and daily trend view for ops monitoring.
  * Added admin editor for agent/system instruction templates stored in Convex, with previews and revision history.
</Update>

<Update label="2026-02-03" description="Insight Updates Field">
  **Insights**

  * Added `updates` to insights for timestamped update entries.
  * Added `description` (1–3 sentence summary) to insights and agent tools.

  **Mentions**

  * Type `@` to insert linked zeitlets in chat and report textareas.
  * Mentions render as chips with hover previews and deep links to detail views.
  * Markdown mentions now render consistently across chat, reports, and zeitlet narratives.
</Update>

<Update label="2026-02-02" description="Dashboard V2 Insight Signals + Sidebar Lists">
  **Reports v2**

  * Insights now support `signals` (`crossCohort` + `resonance`) for report generation + UI.
  * Dashboard v2 report Insights sidebar now sources Creators/Posts from their respective tab data sources (same filters + sort), not derived from insights.
</Update>

<Update label="2026-01-30" description="2026-01-30">
  * SMS contact-card acknowledgements are now consolidated under `contactCardAcknowledgedAt` (emoji tapbacks supported); run `migrations:runBackfillContactCardAcknowledgedAt` to backfill legacy `contactCardLikedAt` data.
</Update>

<Update label="2026-01-29" description="Agent Report Ops + Report Agent">
  **Dashboard Report Ops**
  Added list-ops support for dashboard v2 report updates, enabling insert/move/patch/remove without sending full lists.

  **Report Agent**
  Added a dedicated dashboard report agent config and chat handoff for first-pass report generation.

  **Chat history**
  Chat now supports multiple conversations with a collapsible history panel and quick new-chat actions.

  **Prompt reminder SMS**
  Reminder texts now show the organization name and a clearer deadline format (e.g., "Thu, Jan 22 at 11am PST") instead of the prompt name and bare date.

  **SMS submission confirmations**
  If a submission takes more than a few seconds to process, we now send a quick “processing” reply before the final confirmation count.
</Update>

<Update label="2026-01-28" description="Chat polish and fixes">
  **Chat navigation + layout**
  Chat now lives in the main sidebar under Dashboard, and insight results render in a horizontal scroller for easier browsing.

  **Chat actions**
  Right-click actions (find similar, delete, etc.) and approve/deny controls are now available for insights/personas created in chat.

  **Chat reliability**
  Message input clears immediately on send, and agent responses no longer fail due to unsupported usage metadata.

  **Chat filters**
  Filter selections in chat now persist in the URL (search, semantic, platforms, prompts, date range, ours).
</Update>

<Update label="2026-01-26" description="Admin Agent Chat">
  **Agent Chat (Admin)**
  Admins can now chat with an AI agent to create or update insights and personas directly from selected posts, creators, insights, or personas.

  **Select All + Filters**
  “Select All” now resolves across posts, creators, insights, and personas using the current FilterBar settings (prompts, platforms, time range, search, semantic).
</Update>

<Update label="2026-01-24" description="Prompt Reminders">
  **Automated Prompt Reminders**
  Submitters on active prompts now receive SMS reminders every 2 days until they hit the submission target, sent before 6 PM PT and respecting SMS opt-out/consent.

  **Bulk SMS Preview**
  Admins can preview the exact outbound SMS body (including auto-appended survey links and phone-prefill URLs) before scheduling or sending a broadcast.
</Update>

<Update label="2026-01-23" description="Signup Referral Links">
  **Referral Attribution**
  Signup links can now carry a referral user id (`/signup?ref=<userId>`) that gets stored on new user records.
  Submitter links at `/submit` accept the same `ref` param.

  **Admin Referral Dashboard**
  Admins can view referral counts per user and copy referral links from the new Referrals page.

  **Prompt Signup Links**
  `/submit` links can include `prompt=<promptId>` to auto-assign the viewer to that prompt as a submitter.

  **Signup SMS Welcome**
  New submitters who opt into texting now receive an automated welcome SMS, with prompt-aware instructions when assigned via a prompt link. The first outbound message also sends the Social Glass contact card.
</Update>

<Update label="2026-01-22" description="Clerk Contact Sync + Duplicate Submitter Linking">
  **Duplicate Submitter Linking**
  Submitter logins now reconcile duplicate accounts using verified contact info, so prompts remain attached when someone signs up by phone after previously using email.

  **Clerk Contact Backfill Tooling**
  Added a batch backfill action to push known phone numbers/emails into Clerk, preventing future duplicate accounts.
</Update>

<Update label="2026-01-20" description="Unified Interactions + Survey Prompt Linking">
  **Unified Activity Timeline**

  We now keep a single “interactions” timeline that brings together messages, submissions, and survey responses for easier review and analytics.

  **Survey Prompt Linking (In Progress)**

  Surveys are now linked to prompt records to start consolidating how we model questions and outreach. This is the first step toward a single prompts + surveys system.
</Update>

<Update label="2024-12-04" description="Slack Notifications & UI Polish">
  **Daily Slack Updates**

  You can now receive daily morning updates in Slack with a summary of new submissions and activity. Connect your workspace in organization settings.

  **Improved Autosave**

  Forms across the platform now save automatically as you type, with immediate save when you click away. No more lost work.

  **Mobile-Friendly Adjustments**

  Dashboard pages now display a prompt to use desktop for the best experience on mobile devices.
</Update>

<Update label="2024-11-27" description="Public Sharing & Context Menus">
  **Share Zeitgeists Publicly**

  Generate shareable links to your zeitgeist views (creators, personas, insights) that work without login. Perfect for sharing with stakeholders who don't need full platform access.

  **Right-Click Context Menus**

  All cards (posts, creators, personas, insights) now have context menus with quick actions. Right-click to duplicate, export, or manage items without opening the full editor.

  **Dataset Export**

  Export your insights and reports in the full zeitlet dataset format for easy sharing and AI-assisted analysis.
</Update>

<Update label="2024-11-20" description="Creator Intelligence & Enhanced Filtering">
  **Creator Intelligence**

  Look up any creator by their social handle or post URL to get detailed analytics and insights about their content and audience.

  **Improved Filter Bar**

  The filter bar across all pages now supports more options and remembers your preferences. Quickly narrow down posts, creators, and insights.

  **Enhanced Video Player**

  Videos now load faster and stream more smoothly with our new media pipeline.
</Update>

<Update label="2024-11-13" description="SMS Submissions & Bulk Messaging">
  **Submit Posts via SMS**

  Submitters can now text post links directly to receive and process submissions. No app needed.

  **Bulk Messaging**

  Send messages to multiple submitters at once with template support. Great for announcements and prompt updates.

  **Error Monitoring**

  We've added comprehensive error tracking to catch and fix issues faster.
</Update>

<Update label="2024-11-01" description="Zeitgeist Launch">
  **Introducing Zeitgeist**

  Your new home for understanding cultural moments. Zeitgeist brings together posts, creators, personas, and insights in one unified view.

  **Persona Cards**

  See your audience segments visualized as persona cards with key traits, behaviors, and representative content.

  **Insights with Media**

  Insights now support embedded videos and images in carousels, making it easier to tell the story behind the data.
</Update>
