@aglyn/aglyn 1.0.0-beta.222 → 1.0.0-beta.224

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/package.json +11 -11
  2. package/src/lib/app-utils/crm-email-templates.js +6 -4
  3. package/src/lib/app-utils/crm-email-templates.js.map +1 -1
  4. package/src/lib/app-utils/crm.d.ts +1 -1
  5. package/src/lib/app-utils/crm.js.map +1 -1
  6. package/src/lib/app-utils/docs-help.generated.d.ts +3 -3
  7. package/src/lib/app-utils/docs-help.generated.js +6 -0
  8. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  9. package/src/lib/app-utils/docs-index.generated.js +17 -10
  10. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  11. package/src/lib/app-utils/functions.d.ts +10 -0
  12. package/src/lib/app-utils/functions.js +78 -0
  13. package/src/lib/app-utils/functions.js.map +1 -1
  14. package/src/lib/app-utils/health-report.js +12 -0
  15. package/src/lib/app-utils/health-report.js.map +1 -1
  16. package/src/lib/app-utils/host-events.d.ts +14 -0
  17. package/src/lib/app-utils/host-events.js +8 -0
  18. package/src/lib/app-utils/host-events.js.map +1 -1
  19. package/src/lib/app-utils/operator-alerts.js +52 -0
  20. package/src/lib/app-utils/operator-alerts.js.map +1 -1
  21. package/src/lib/app-utils/plugin-host-events.generated.js +14 -5
  22. package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -1
  23. package/src/lib/app-utils/realm-host-surface.generated.js +1 -0
  24. package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
  25. package/src/lib/app-utils/screen-route.d.ts +11 -0
  26. package/src/lib/app-utils/screen-route.js +16 -0
  27. package/src/lib/app-utils/screen-route.js.map +1 -1
  28. package/src/lib/app-utils/server.d.ts +0 -2
  29. package/src/lib/app-utils/server.js +0 -5
  30. package/src/lib/app-utils/server.js.map +1 -1
  31. package/src/lib/app-utils/site-interactions.d.ts +23 -0
  32. package/src/lib/app-utils/site-interactions.js +39 -2
  33. package/src/lib/app-utils/site-interactions.js.map +1 -1
  34. package/src/lib/app-utils/utm-touch.d.ts +109 -4
  35. package/src/lib/app-utils/utm-touch.js +364 -33
  36. package/src/lib/app-utils/utm-touch.js.map +1 -1
  37. package/src/lib/canvas-manager/canvas-manager.js +3 -1
  38. package/src/lib/canvas-manager/canvas-manager.js.map +1 -1
  39. package/src/lib/plugin-manager/first-party-plugins.generated.js +5 -1
  40. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  41. package/src/lib/plugin-manager/interaction-recipes.d.ts +7 -1
  42. package/src/lib/plugin-manager/interaction-recipes.js.map +1 -1
  43. package/src/lib/plugin-manager/plugin-conversion-credit.d.ts +51 -0
  44. package/src/lib/plugin-manager/plugin-conversion-credit.js +39 -0
  45. package/src/lib/plugin-manager/plugin-conversion-credit.js.map +1 -1
  46. package/src/lib/plugin-manager/plugin-record-pages.d.ts +15 -1
  47. package/src/lib/plugin-manager/plugin-record-pages.js +14 -2
  48. package/src/lib/plugin-manager/plugin-record-pages.js.map +1 -1
  49. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +31 -0
  50. package/src/lib/plugin-manager/plugin-record-timeline.js +14 -0
  51. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
  52. package/src/lib/plugin-manager/realm-host-aglyn.generated.js +1 -0
  53. package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
  54. package/src/lib/app-utils/crm-next-activity.d.ts +0 -107
  55. package/src/lib/app-utils/crm-next-activity.js +0 -140
  56. package/src/lib/app-utils/crm-next-activity.js.map +0 -1
  57. package/src/lib/app-utils/crm-task-reminders.d.ts +0 -152
  58. package/src/lib/app-utils/crm-task-reminders.js +0 -161
  59. package/src/lib/app-utils/crm-task-reminders.js.map +0 -1
@@ -287,7 +287,7 @@ export declare const PLUGIN_DOCS: {
287
287
  export type PluginDocsKey = keyof typeof PLUGIN_DOCS;
288
288
  export declare const PLUGIN_DOCS_ANCHORS: {
289
289
  readonly abuseReports: readonly ["#fraud-and-risk-alerts-by-email", "#where-reports-come-from", "#held-outbound-email", "#what-is-screened", "#tiers", "#web-risk", "#deciding-a-held-row", "#security-hold", "#names-and-domains", "#stripe-fraud-signals", "#seller-fraud-pattern", "#card-testing-velocity", "#marketplace", "#risk-notices", "#triage-by-severity", "#csam", "#which-lever", "#statuses", "#disclosure", "#dmca", "#counter-notices", "#counter-notice-clock", "#counter-notice-steps", "#repeat-infringers", "#repeat-infringer-threshold", "#known-gaps", "#related"];
290
- readonly actionsBuilder: readonly ["#create-an-action", "#recipes", "#describe-it", "#triggers", "#crm-events", "#only-run-when-a-field-matches", "#chain-multiple-conditions-andor", "#steps", "#crm-steps", "#step-conditions", "#sequences", "#run-history", "#what-is-and-isnt-recorded", "#interactions-from-the-besigner", "#when-to-use-which", "#related"];
290
+ readonly actionsBuilder: readonly ["#create-an-action", "#recipes", "#describe-it", "#triggers", "#crm-events", "#only-run-when-a-field-matches", "#chain-multiple-conditions-andor", "#steps", "#crm-steps", "#step-conditions", "#sequences", "#transactional-replies", "#merge-tags", "#run-history", "#what-is-and-isnt-recorded", "#interactions-from-the-besigner", "#when-to-use-which", "#related"];
291
291
  readonly aglynAssist: readonly ["#what-it-can-do", "#aglyn-ai", "#answers-for-beginners-and-developers", "#offers-to-open-a-page", "#edits-in-the-besigner", "#where-an-answer-came-from", "#answers-straight-from-the-documentation", "#message-limits", "#feedback", "#privacy"];
292
292
  readonly aiAutomations: readonly ["#draft", "#explain", "#why-a-run-failed", "#what-is-sent", "#who-can-use-it", "#related"];
293
293
  readonly aiCrm: readonly ["#summarize-a-record", "#summaries-are-reused-until-the-record-changes", "#draft-an-email", "#match-columns", "#what-is-sent", "#who-can-use-it", "#related"];
@@ -320,9 +320,9 @@ export declare const PLUGIN_DOCS_ANCHORS: {
320
320
  readonly datasets: readonly ["#model-builder", "#typed-documents", "#filter-records", "#relations", "#query-layer", "#repeatable-components", "#record-pages", "#who-a-dataset-is-shared-with", "#import--export", "#related"];
321
321
  readonly deals: readonly ["#pipelines", "#stages", "#the-board-and-the-table", "#import-from-csv", "#creating-a-deal", "#type-and-lead-source", "#contact-roles", "#line-items", "#moving-winning-and-losing", "#a-won-deal-makes-its-contact-a-customer", "#a-deals-page", "#files", "#related"];
322
322
  readonly designedEmails: readonly ["#create-a-template", "#find-a-template", "#duplicate-a-template", "#styling-email-blocks", "#merge-tokens", "#send-it", "#the-plain-text-version", "#start-from-a-brief-instead"];
323
- readonly emailCampaigns: readonly ["#send-a-campaign", "#campaigns-belong-to-the-organization", "#organization-emails-page", "#campaigns-group-emails", "#filter-the-lists", "#what-belongs-to-a-campaign", "#who-the-email-comes-from", "#sending-domains", "#account-email-always-sends", "#marketing-needs-a-domain", "#two-ways-to-get-a-domain", "#a-domain-we-set-up-is-a-request", "#domain-states", "#senders", "#send-a-test", "#preview-the-email", "#monthly-send-cap", "#personalize-with-merge-tags", "#recipient-count", "#who-a-campaign-is-allowed-to-reach", "#schedule-a-send", "#held-for-review", "#duplicate-an-email", "#email-lists", "#manual-lists", "#list-members", "#add-to-a-list", "#import-a-list", "#export-a-list", "#remove-from-a-list", "#lists-built-from-a-rule", "#experiments", "#experiments-across-sites", "#opens--clicks", "#the-campaign-report", "#per-contact-engagement", "#which-links-were-clicked", "#revenue-from-a-campaign", "#conversions", "#compliance", "#list-unsubscribe", "#topics", "#preference-page", "#consent-groups", "#consent-group-create", "#consent-group-join", "#consent-group-leave", "#consent-group-rename", "#consent-group-progress", "#frequency-opt-down", "#double-opt-in", "#consent-group-confirmation", "#marketing-mail", "#frequency-cap", "#suppressions", "#add-a-suppression", "#import-export-suppressions", "#platform-suppressions", "#related"];
323
+ readonly emailCampaigns: readonly ["#send-a-campaign", "#campaigns-belong-to-the-organization", "#organization-emails-page", "#campaigns-group-emails", "#filter-the-lists", "#what-belongs-to-a-campaign", "#who-the-email-comes-from", "#sending-domains", "#account-email-always-sends", "#marketing-needs-a-domain", "#two-ways-to-get-a-domain", "#a-domain-we-set-up-is-a-request", "#domain-states", "#senders", "#send-a-test", "#preview-the-email", "#monthly-send-cap", "#personalize-with-merge-tags", "#recipient-count", "#who-a-campaign-is-allowed-to-reach", "#schedule-a-send", "#held-for-review", "#duplicate-an-email", "#email-lists", "#manual-lists", "#list-members", "#add-to-a-list", "#import-a-list", "#export-a-list", "#remove-from-a-list", "#lists-built-from-a-rule", "#experiments", "#experiments-across-sites", "#opens--clicks", "#the-campaign-report", "#per-contact-engagement", "#which-links-were-clicked", "#revenue-from-a-campaign", "#how-a-visit-is-credited", "#utm-labels", "#who-it-reached", "#conversions", "#compliance", "#list-unsubscribe", "#topics", "#preference-page", "#consent-groups", "#consent-group-create", "#consent-group-join", "#consent-group-leave", "#consent-group-rename", "#consent-group-progress", "#frequency-opt-down", "#double-opt-in", "#consent-group-confirmation", "#marketing-mail", "#frequency-cap", "#suppressions", "#add-a-suppression", "#import-export-suppressions", "#platform-suppressions", "#related"];
324
324
  readonly events: readonly ["#manage-events", "#import-and-export-events", "#columns", "#how-a-row-finds-an-existing-event", "#conflicts-the-dry-run-and-undo", "#files-from-other-calendars", "#show-events-on-a-screen", "#search-engines", "#related"];
325
- readonly forms: readonly ["#reading-submissions-from-code", "#build-a-form", "#place-a-saved-form", "#monthly-allowance-per-plan", "#spam-and-abuse-protection", "#the-per-site-monthly-ceiling", "#field-types", "#labels-and-placeholders", "#example-a-quick-survey", "#after-submit", "#example-grow-an-email-list-from-a-signup-form", "#consent-group-disclosure", "#where-submissions-go", "#the-inbox", "#filter-the-inbox", "#who-a-submission-is-from", "#where-this-one-went", "#replying-to-a-submission", "#every-sites-inbox-at-once", "#one-forms-own-page", "#export-submissions", "#find-a-form", "#duplicate-a-form", "#switch-forms-off-for-one-site", "#related"];
325
+ readonly forms: readonly ["#reading-submissions-from-code", "#build-a-form", "#place-a-saved-form", "#monthly-allowance-per-plan", "#spam-and-abuse-protection", "#the-per-site-monthly-ceiling", "#field-types", "#labels-and-placeholders", "#example-a-quick-survey", "#after-submit", "#example-grow-an-email-list-from-a-signup-form", "#consent-group-disclosure", "#where-submissions-go", "#the-inbox", "#filter-the-inbox", "#who-a-submission-is-from", "#what-it-links-to", "#where-this-one-went", "#replying-to-a-submission", "#every-sites-inbox-at-once", "#one-forms-own-page", "#export-submissions", "#find-a-form", "#duplicate-a-form", "#switch-forms-off-for-one-site", "#related"];
326
326
  readonly installYourFirstPlugin: readonly ["#before-you-start", "#step-1-open", "#step-2-browse", "#step-3-reviews", "#step-4-targeting", "#step-5-install", "#step-6-use", "#step-7-off", "#what-to-do-next", "#related"];
327
327
  readonly inviteTeammates: readonly ["#invite-someone", "#pending-invites", "#who-gets-told", "#accepting-an-invite", "#declining-an-invite", "#an-ordinary-invitation-never-changes-who-owns-the-workspace", "#owner-handoff", "#aglyn-staff", "#how-team-members-act", "#you-are-a-site-collaborators-support-channel", "#help-a-teammate-who-is-locked-out", "#why-you-cant-always-set-a-password", "#activity-log", "#ai-actions", "#ai-usage", "#ai-allotment", "#tips", "#related"];
328
328
  readonly manifestAndEnvs: readonly ["#plugin-manifest-published-with-every-version", "#contributes--where-the-plugin-loads", "#config--settings-without-writing-a-settings-screen", "#listing--version-documents", "#review--trust-lifecycle", "#environment-variables", "#pluginsconfigjson-first-party-contributors"];
@@ -323,6 +323,8 @@ export const PLUGIN_DOCS_ANCHORS = {
323
323
  '#crm-steps',
324
324
  '#step-conditions',
325
325
  '#sequences',
326
+ '#transactional-replies',
327
+ '#merge-tags',
326
328
  '#run-history',
327
329
  '#what-is-and-isnt-recorded',
328
330
  '#interactions-from-the-besigner',
@@ -808,6 +810,9 @@ export const PLUGIN_DOCS_ANCHORS = {
808
810
  '#per-contact-engagement',
809
811
  '#which-links-were-clicked',
810
812
  '#revenue-from-a-campaign',
813
+ '#how-a-visit-is-credited',
814
+ '#utm-labels',
815
+ '#who-it-reached',
811
816
  '#conversions',
812
817
  '#compliance',
813
818
  '#list-unsubscribe',
@@ -858,6 +863,7 @@ export const PLUGIN_DOCS_ANCHORS = {
858
863
  '#the-inbox',
859
864
  '#filter-the-inbox',
860
865
  '#who-a-submission-is-from',
866
+ '#what-it-links-to',
861
867
  '#where-this-one-went',
862
868
  '#replying-to-a-submission',
863
869
  '#every-sites-inbox-at-once',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/docs-help.generated.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// GENERATED FILE — do not edit. Regenerate with:\n// node tools/scripts/generate-docs-help.mjs\n// Source of truth: apps/docs/docs frontmatter + headings (AGL-602).\n\n// The first-party plugin consoles live in `libs/plugins/*` and cannot import\n// the console's constants, so they carry their own generated subset of the\n// docs help registry — the topics their cards actually link to, and no others.\n\nexport interface PluginDocsTopic {\n /** Docs-site path, e.g. `/commerce-and-bookings/commerce/overview`. */\n path: string\n /** Docs page title. */\n title: string\n /** Verbatim docs frontmatter description — the tooltip excerpt. */\n excerpt: string\n}\n\nexport const PLUGIN_DOCS = {\n abuseReports: {\n path: '/staff-console/abuse-reports',\n title: 'Abuse reports',\n excerpt: 'The public abuse-report queue — where outside reports land, how to triage by severity, which lever answers which report, and the CSAM and DMCA paths that are not takedown buttons.',\n },\n actionsBuilder: {\n path: '/marketing-and-automation/workflows-and-actions/actions-builder',\n title: 'Actions builder',\n excerpt: 'Map a single event to a single action without building a full workflow.',\n },\n aglynAssist: {\n path: '/getting-started/aglyn-assist',\n title: 'Aglyn Assist',\n excerpt: 'Ask the built-in AI helper how to do anything in Aglyn — it answers from these docs and links you straight to the right page.',\n },\n aiAutomations: {\n path: '/ai/automations-with-ai',\n title: 'Explain automations with AI',\n excerpt: 'Aglyn AI can explain an automation you already have and tell you why one of its runs failed. Drafting an automation from a description is not available yet.',\n },\n aiCrm: {\n path: '/ai/crm-by-ai',\n title: 'The AI CRM built into Aglyn',\n excerpt: 'An AI CRM for small business: a short summary and a suggested next step on a contact, company, deal or lead, a one-to-one email drafted into the composer, and an import\\'s columns matched to fields.',\n },\n aiExperiments: {\n path: '/ai/ab-tests-with-ai',\n title: 'A/B tests by AI: write variants, read the result',\n excerpt: 'Have Aglyn AI write two to four variants for a page, section or email experiment, and put a finished test into plain language — with the verdict decided from the counts before the model is asked anything.',\n },\n aiMonitoring: {\n path: '/staff-console/ai-monitoring',\n title: 'AI monitoring',\n excerpt: 'How staff watch one organization\\'s AI usage — the add-on, credit pool, overage, refusals, jobs, tokens and cache hit rate, top spenders and margin — and where those figures appear across the staff console.',\n },\n aiProducts: {\n path: '/ai/products-with-ai',\n title: 'Product copy and catalogs with AI',\n excerpt: 'An AI product description generator for your catalog: write copy for one product or a whole import, propose a first catalog, and propose categories and discounts — all as proposals you review.',\n },\n aiSeo: {\n path: '/building-sites/seo/seo-by-ai',\n title: 'AI SEO for your website',\n excerpt: 'AI SEO for websites, on the pages you already have: have AI write a page or product\\'s search listing, propose a fix for each finding of the SEO check, and draft your structured data and /llms.txt.',\n },\n aiThemes: {\n path: '/ai/theme-assist',\n title: 'Change your site\\'s theme with AI',\n excerpt: 'Describe a change to your site\\'s theme and get a proposal for the theme editor\\'s own controls, previewed before and after, that you save in the editor.',\n },\n assistSignals: {\n path: '/staff-console/assist-signals',\n title: 'Assist Signal',\n excerpt: 'The docs-gap and cost board behind Assist — how the ranking is ordered, why ungrounded questions are counted separately, and what the cache-read rate says about margin.',\n },\n billing: {\n path: '/workspace-and-billing/billing-and-plans/overview',\n title: 'Billing & Plans',\n excerpt: 'How Aglyn\\'s tiers, entitlements, quotas, usage meters, and seat add-ons work.',\n },\n bindings: {\n path: '/building-sites/bindings/overview',\n title: 'Bindings, Variables & Functions',\n excerpt: 'Live values in your content — typed variables, no-code functions, and rename-safe id tokens.',\n },\n bookings: {\n path: '/commerce-and-bookings/bookings/overview',\n title: 'Bookings & Scheduling',\n excerpt: 'Offer services with availability, let visitors book, take payment, and send reminders.',\n },\n buildAWorkflow: {\n path: '/marketing-and-automation/workflows-and-actions/build-a-workflow',\n title: 'Build a workflow',\n excerpt: 'Create a multi-step workflow that runs when a site event fires.',\n },\n catalog: {\n path: '/commerce-and-bookings/commerce/catalog',\n title: 'Product catalog',\n excerpt: 'Products with options and variants, categories, tags, and manual or smart collections.',\n },\n commerce: {\n path: '/commerce-and-bookings/commerce/overview',\n title: 'Commerce',\n excerpt: 'Sell physical, digital, and service products with a full catalog, orders pipeline, shipping, taxes, and your own Stripe account.',\n },\n commerceEndToEnd: {\n path: '/guides/commerce-end-to-end',\n title: 'Commerce end to end',\n excerpt: 'Create products with billing modes, design the storefront with Commerce blocks, take Stripe checkout for one-time and subscription sales, and run orders from the console.',\n },\n companies: {\n path: '/content-and-data/crm/companies',\n title: 'Companies',\n excerpt: 'Group your contacts under the businesses they belong to — one record per company, with its domain, owner, type, industry, addresses, parent company and the people who work there.',\n },\n consoleTour: {\n path: '/getting-started/console-tour',\n title: 'The console tour',\n excerpt: 'Where things live in the Aglyn console app bar and navigation.',\n },\n contactActivities: {\n path: '/content-and-data/crm/activities',\n title: 'Activities & the timeline',\n excerpt: 'Log calls, emails, meetings and notes against a contact, a company, a deal or a lead, email one person from their record, and read it all in one timeline beside everything captured and every campaign sent.',\n },\n contactFields: {\n path: '/content-and-data/crm/custom-fields',\n title: 'Custom fields',\n excerpt: 'Define your own properties on contacts, companies, deals and leads — text, number, date, choice, checkbox or link — show them on every record and its list, and save form answers straight into a contact\\'s.',\n },\n contactRecord: {\n path: '/content-and-data/crm/contact-record',\n title: 'The contact record',\n excerpt: 'Add a contact by hand, keep a profile on them — Salesforce\\'s standard contact fields, from salutation and phones to assistant and reports-to — open their own page in the CRM, and merge two records that are one person.',\n },\n contacts: {\n path: '/content-and-data/crm/overview',\n title: 'CRM',\n excerpt: 'One place for the people who interact with your sites — contacts captured from forms, members, orders and bookings, with leads, companies, a deals pipeline, tasks, a timeline, reports and custom fields.',\n },\n crmEmailTemplates: {\n path: '/content-and-data/crm/email-templates',\n title: 'Email templates',\n excerpt: 'Keep the letters your team sends from a record — templates that fill in the subject and the message, snippets that drop in a paragraph, and merge fields that fill in the person\\'s name, their company, the deal and you.',\n },\n crmLeads: {\n path: '/content-and-data/crm/leads',\n title: 'Leads',\n excerpt: 'Work the people your site has captured — a status, an owner and notes on every lead — and convert one into a contact, a company and a deal.',\n },\n crmReports: {\n path: '/content-and-data/crm/reports',\n title: 'Reports',\n excerpt: 'New contacts, their sources and which convert, the lead funnel and lead sources, the open pipeline and its forecast, won and lost, who logged what, and the task load — counted on the server, all exportable as CSV.',\n },\n crmSettings: {\n path: '/content-and-data/crm/settings',\n title: 'CRM settings',\n excerpt: 'What the CRM does on its own for every site — whether a company is created from a contact\\'s work email domain, who a new contact is assigned to, the address that files replies on a record, and each site\\'s recipes.',\n },\n crmSharing: {\n path: '/content-and-data/crm/sharing',\n title: 'Share records across sites',\n excerpt: 'Let another of your sites see a lead, a contact, a company or a deal — one record by hand, a selection from a list, or every record a sharing rule matches, now and later — without sharing the person\\'s consent.',\n },\n crmTasks: {\n path: '/content-and-data/crm/tasks',\n title: 'Tasks & follow-ups',\n excerpt: 'Calls, emails, meetings and to-dos with a status, a due date, an assignee and a link to the record they are for — overdue and today read off the clock, a snooze, a reminder at its own time, and a morning digest.',\n },\n crmViews: {\n path: '/content-and-data/crm/views',\n title: 'Saved views',\n excerpt: 'Keep a CRM list\\'s filters, columns and sort under a name, open it from the views menu or a link, share it with the team, and use a contacts view as an email audience.',\n },\n datasets: {\n path: '/content-and-data/datasets/overview',\n title: 'Datasets & Dynamic Content',\n excerpt: 'Model structured content with typed fields and relations, then bind it into repeatable components.',\n },\n deals: {\n path: '/content-and-data/crm/deals',\n title: 'Deals pipeline',\n excerpt: 'Every open deal by stage — with an amount, an owner and an expected close — as a board you drag across or a table you page through, and the won and lost history behind it.',\n },\n designedEmails: {\n path: '/marketing-and-automation/email-campaigns/designed-emails',\n title: 'Designed emails',\n excerpt: 'Build campaign emails in the besigner with email-safe blocks and merge tokens — no separate editor.',\n },\n emailCampaigns: {\n path: '/marketing-and-automation/email-campaigns/overview',\n title: 'Email Campaigns',\n excerpt: 'Campaigns to audiences built from your contacts. Campaign email starts at Pro and needs a sending domain of the site\\'s own; receipts and account email send on every plan.',\n },\n events: {\n path: '/content-and-data/events/overview',\n title: 'Events Calendar',\n excerpt: 'Keep a schedule of events in the console and publish the ones you choose to any page, with search-engine event markup.',\n },\n forms: {\n path: '/content-and-data/forms/overview',\n title: 'Forms & Lead Capture',\n excerpt: 'Add forms to your site, collect submissions in an inbox, and write them into datasets.',\n },\n installYourFirstPlugin: {\n path: '/guides/install-your-first-plugin',\n title: 'Install your first marketplace item',\n excerpt: 'A click-by-click walkthrough of the Marketplace — find something, choose which sites get it, install it, and turn it off again.',\n },\n inviteTeammates: {\n path: '/workspace-and-billing/teams-and-roles/invite-teammates',\n title: 'Invite teammates',\n excerpt: 'Add people to your site and understand how team members act within your organization.',\n },\n manifestAndEnvs: {\n path: '/developers/plugins/reference/manifest-and-envs',\n title: 'Manifests, trust lifecycle & environment',\n excerpt: 'The plugin manifest schema, the marketplace listing/version documents, the trust state machine, and every PLUGIN_* environment variable.',\n },\n marketingOverlays: {\n path: '/marketing-and-automation/marketing-overlays/overview',\n title: 'Marketing Overlays',\n excerpt: 'Site-wide announcement bars and promotional popups with triggers, scheduling, and email capture.',\n },\n membersOnly: {\n path: '/workspace-and-billing/teams-and-roles/members-only',\n title: 'Members-only areas',\n excerpt: 'Let visitors sign up as members and gate pages so only members can view them.',\n },\n orgAutomations: {\n path: '/marketing-and-automation/workflows-and-actions/org-automations',\n title: 'Org automations',\n excerpt: 'Write an automation once for the whole organization and run it on the sites you choose, with a pause on each site.',\n },\n plugins: {\n path: '/developers/plugins/overview',\n title: 'Plugins & Marketplace',\n excerpt: 'Extend Aglyn with sandboxed plugins — install from the marketplace, configure them, and publish your own.',\n },\n pos: {\n path: '/commerce-and-bookings/commerce/pos-and-reservations',\n title: 'POS & reservations',\n excerpt: 'Sell in person from the console register and take date-range reservations with deposits.',\n },\n publishAPlugin: {\n path: '/developers/plugins/publish-a-plugin',\n title: 'Publish a plugin',\n excerpt: 'Ship your own plugin to the marketplace with version pinning.',\n },\n publisherHandbook: {\n path: '/developers/plugins/publishing/publisher-handbook',\n title: 'Publisher handbook',\n excerpt: 'Publishing to the Aglyn marketplace — from profile setup through listing authoring, review, updates, and getting paid.',\n },\n redirects: {\n path: '/building-sites/redirects/overview',\n title: 'Redirects',\n excerpt: 'Manage URL redirects with validation, loop detection, and hit metrics.',\n },\n sandboxSecurity: {\n path: '/developers/plugins/reference/sandbox-security',\n title: 'Sandbox security model',\n excerpt: 'How sandboxed marketplace plugins are isolated — separate origin, per-manifest CSP, pinned artifacts — and what that means when you write one.',\n },\n sequences: {\n path: '/content-and-data/crm/sequences',\n title: 'Sequences',\n excerpt: 'One-to-one email sequences a rep sends to a person from their own connected mailbox, kept with the CRM. Rolling out.',\n },\n staffConsole: {\n path: '/staff-console/overview',\n title: 'Staff Console (internal)',\n excerpt: 'Aglyn-staff tools for managing organizations, entitlements, users, and audits.',\n },\n webhooks: {\n path: '/marketing-and-automation/workflows-and-actions/webhooks',\n title: 'Webhooks',\n excerpt: 'Connect Aglyn to other systems with outbound and inbound webhooks.',\n },\n} as const satisfies Record<string, PluginDocsTopic>\n\nexport type PluginDocsKey = keyof typeof PLUGIN_DOCS\n\nexport const PLUGIN_DOCS_ANCHORS = {\n abuseReports: ['#fraud-and-risk-alerts-by-email', '#where-reports-come-from', '#held-outbound-email', '#what-is-screened', '#tiers', '#web-risk', '#deciding-a-held-row', '#security-hold', '#names-and-domains', '#stripe-fraud-signals', '#seller-fraud-pattern', '#card-testing-velocity', '#marketplace', '#risk-notices', '#triage-by-severity', '#csam', '#which-lever', '#statuses', '#disclosure', '#dmca', '#counter-notices', '#counter-notice-clock', '#counter-notice-steps', '#repeat-infringers', '#repeat-infringer-threshold', '#known-gaps', '#related'],\n actionsBuilder: ['#create-an-action', '#recipes', '#describe-it', '#triggers', '#crm-events', '#only-run-when-a-field-matches', '#chain-multiple-conditions-andor', '#steps', '#crm-steps', '#step-conditions', '#sequences', '#run-history', '#what-is-and-isnt-recorded', '#interactions-from-the-besigner', '#when-to-use-which', '#related'],\n aglynAssist: ['#what-it-can-do', '#aglyn-ai', '#answers-for-beginners-and-developers', '#offers-to-open-a-page', '#edits-in-the-besigner', '#where-an-answer-came-from', '#answers-straight-from-the-documentation', '#message-limits', '#feedback', '#privacy'],\n aiAutomations: ['#draft', '#explain', '#why-a-run-failed', '#what-is-sent', '#who-can-use-it', '#related'],\n aiCrm: ['#summarize-a-record', '#summaries-are-reused-until-the-record-changes', '#draft-an-email', '#match-columns', '#what-is-sent', '#who-can-use-it', '#related'],\n aiExperiments: ['#it-proposes-you-write', '#write-variants', '#putting-them-in', '#what-it-will-not-write', '#read-a-result', '#the-verdict', '#the-words', '#undecided', '#what-is-sent', '#who-can-use-it', '#related'],\n aiMonitoring: ['#the-ai-card', '#where-else', '#one-account', '#the-spend-leaderboard', '#alerts', '#related'],\n aiProducts: ['#write-a-products-copy', '#write-copy-for-many-products', '#when-you-import-products', '#propose-a-first-catalog', '#propose-categories-and-discounts', '#what-the-copy-never-says', '#what-is-sent-to-the-ai-provider', '#who-can-use-it', '#related'],\n aiSeo: ['#write-a-pages-listing', '#write-a-products-listing', '#fix-what-the-seo-check-finds', '#apply-all-as-drafts', '#structured-data-and-llmstxt', '#related'],\n aiThemes: ['#change-what-you-describe-or-design-a-new-theme', '#match-your-brand', '#review-the-proposal', '#save-it-or-dont', '#who-can-use-it', '#related'],\n assistSignals: ['#the-workflow-this-board-exists-for', '#fleet', '#the-cache-read-rate-and-what-a-bad-number-looks-like', '#where-the-money-goes', '#tokens-by-kind', '#docs-gaps', '#questions-the-docs-could-not-answer', '#what-people-actually-asked', '#what-assist-costs-by-workspace', '#reading-the-sample-honestly', '#related'],\n billing: ['#tiers--entitlements', '#leaving-notice', '#plan-without-subscription', '#upgrade-proposal', '#enterprise', '#single-sign-on-and-enforcement', '#usage-meters', '#who-is-generating-what', '#ai-allotments', '#storage-overage', '#if-you-would-rather-uploads-stopped', '#assist-overage', '#stop-ai-assist-at-the-included-band', '#ai-overage-ceiling', '#free-ai-credits', '#ai-credit-alerts', '#usage-budget', '#seats', '#crm-records', '#the-crm-suite', '#one-to-one-email', '#organization-data', '#api-access', '#payments', '#outstanding', '#plan-total', '#billing-email', '#payment-methods', '#billing-address', '#tax-ids', '#sales-tax', '#platform-fees', '#related'],\n bindings: ['#binding-tokens', '#rename-safe-id-tokens', '#insert-a-variable', '#token-pills', '#in-the-canvas-text-editor', '#site-details', '#typed-variables', '#no-code-functions', '#parameters-a-visitor-can-answer', '#a-calculator-you-lay-out', '#where-used--safety', '#workflows', '#related'],\n bookings: ['#set-up-bookings', '#price-labels', '#phone-and-address', '#taking-bookings', '#reminders', '#payments-and-fees', '#service-tax', '#manage', '#booking-from-the-crm', '#canceling-and-refunding', '#export-bookings', '#related'],\n buildAWorkflow: ['#1-open-the-workflows-page', '#2-choose-a-trigger', '#3-add-steps', '#waiting', '#4-save-and-test', '#duplicate-a-workflow', '#tips', '#related'],\n catalog: ['#products-options-and-variants', '#billing-modes-and-subscriptions', '#ai', '#categories-and-tags', '#collections', '#slugs', '#merchant-center-feed', '#related'],\n commerce: ['#products-hub', '#inventory', '#reserved-stock', '#stock-movements', '#gift-cards', '#recovery-and-alerts', '#orders', '#orders-screen', '#order-statuses', '#order-money-tiles', '#a-lost-dispute', '#shipping--taxes', '#lodging-tax-on-reservations', '#storefront-sales-tax', '#destination-coverage', '#dropshipping', '#related'],\n commerceEndToEnd: ['#1-connect-payments', '#2-create-products', '#3-design-the-storefront', '#catalog-search-filters-and-sort', '#category-pages', '#the-product-page-template', '#4-what-checkout-does', '#paying-without-leaving-your-site', '#5-run-orders-from-the-console', '#6-subscriptions--the-stripe-portal', '#related'],\n companies: ['#the-companies-list', '#create-a-company', '#the-lists-behind-the-choices', '#a-companys-page', '#contacts-at-a-company', '#linked-on-capture', '#import', '#export', '#deleting-a-company', '#who-can-see-a-company', '#files', '#related'],\n consoleTour: ['#the-app-bar', '#in-context-help', '#filter-and-search', '#primary-navigation', '#editing-vs-managing', '#the-sites-list', '#the-status-pill', '#how-the-pill-is-decided', '#your-site-allowance', '#a-sites-dashboard', '#next', '#workspace-settings--notifications', '#the-notifications-feed', '#notification-levels', '#notification-settings', '#one-kind-at-a-time', '#workspace-and-site-overrides', '#daily-digests', '#alerts-on-this-device'],\n contactActivities: ['#four-kinds-of-history', '#reading-the-timeline', '#campaign-email', '#logging-an-activity', '#meeting-from-a-booking', '#click-to-call', '#sending-an-email', '#delivery-states', '#captured-email', '#where-an-activity-is-visible', '#the-recent-activity-feed', '#related'],\n contactFields: ['#define-a-field', '#fields-per-record', '#where-values-show', '#save-a-form-field', '#picklist-values', '#task-picklists', '#over-the-api', '#retire-restore-delete', '#export-fields', '#recompute-next-activity', '#related'],\n contactRecord: ['#adding-a-contact-by-hand', '#the-record-page', '#the-standard-fields', '#do-not-call', '#deleting-and-erasing', '#what-each-site-keeps-to-itself', '#when-sites-join-or-leave-a-group', '#merging-two-records', '#likely-duplicates', '#owner', '#last-engaged', '#lifecycle-stages', '#where-the-persons-lead-is', '#finding-a-contact', '#files', '#related'],\n contacts: ['#whats-in-the-crm-area', '#unified-ingestion', '#what-each-plan-includes', '#the-contacts-page', '#import-and-export', '#segments', '#everywhere-the-crm-shows-up', '#capture-replies', '#at-the-organization-level', '#who-can-open-the-crm', '#one-sender-one-crm', '#related'],\n crmEmailTemplates: ['#templates-and-snippets', '#merge-fields', '#saving', '#managing-templates', '#duplicate-a-template', '#shared-or-personal', '#over-the-rest-api', '#related'],\n crmLeads: ['#what-makes-a-lead', '#what-a-lead-holds', '#lead-source-filled-in', '#adding-a-lead-by-hand', '#the-leads-list', '#lead-statuses', '#filter-the-leads', '#working-a-lead-from-the-row', '#several-leads-at-once', '#import-from-csv', '#who-owns-a-lead', '#a-leads-page', '#email-state', '#converting-a-lead', '#unqualifying-a-lead', '#erasing-the-person', '#who-can-do-this', '#related'],\n crmReports: ['#choosing-a-period', '#contacts', '#sources-and-lifecycle', '#conversion-by-source', '#lead-funnel', '#lead-sources', '#pipeline', '#forecast-by-close-month', '#by-forecast-category', '#won-and-lost', '#won-and-lost-by-owner', '#activity-by-teammate', '#tasks', '#exporting-a-table', '#crm-at-a-glance', '#how-the-numbers-are-counted', '#related'],\n crmSettings: ['#companies', '#create-companies-from-work-email-domains', '#default-owner', '#assignment-rules', '#round-robin', '#email-templates', '#email-capture', '#your-sending-addresses', '#recipes', '#related'],\n crmSharing: ['#what-a-shared-record-looks-like', '#share-a-record-by-hand', '#several-records-at-once', '#sharing-rules', '#access-read-only-or-read-and-edit', '#sharing-is-not-consent', '#who-can-do-this', '#related'],\n crmTasks: ['#task-picklists', '#the-tasks-page', '#the-calendar-view', '#snoozing-a-task', '#selecting-exporting-and-acting-on-many', '#import-from-csv', '#creating-a-task', '#assigning-a-task-to-someone-else', '#completing-and-reopening', '#organization-tasks', '#tasks-on-a-contact-company-or-deal', '#reminders', '#turning-reminders-off', '#next-activity', '#the-daily-digest', '#turning-it-off', '#the-dashboard-card', '#who-can-do-what', '#related'],\n crmViews: ['#the-views-control', '#a-view-is-a-link', '#filters', '#filters-on-the-contacts-list', '#filters-on-the-other-lists', '#columns-and-sort', '#segments-and-views', '#who-sees-what', '#related'],\n datasets: ['#model-builder', '#typed-documents', '#filter-records', '#relations', '#query-layer', '#repeatable-components', '#record-pages', '#who-a-dataset-is-shared-with', '#import--export', '#related'],\n deals: ['#pipelines', '#stages', '#the-board-and-the-table', '#import-from-csv', '#creating-a-deal', '#type-and-lead-source', '#contact-roles', '#line-items', '#moving-winning-and-losing', '#a-won-deal-makes-its-contact-a-customer', '#a-deals-page', '#files', '#related'],\n designedEmails: ['#create-a-template', '#find-a-template', '#duplicate-a-template', '#styling-email-blocks', '#merge-tokens', '#send-it', '#the-plain-text-version', '#start-from-a-brief-instead'],\n emailCampaigns: ['#send-a-campaign', '#campaigns-belong-to-the-organization', '#organization-emails-page', '#campaigns-group-emails', '#filter-the-lists', '#what-belongs-to-a-campaign', '#who-the-email-comes-from', '#sending-domains', '#account-email-always-sends', '#marketing-needs-a-domain', '#two-ways-to-get-a-domain', '#a-domain-we-set-up-is-a-request', '#domain-states', '#senders', '#send-a-test', '#preview-the-email', '#monthly-send-cap', '#personalize-with-merge-tags', '#recipient-count', '#who-a-campaign-is-allowed-to-reach', '#schedule-a-send', '#held-for-review', '#duplicate-an-email', '#email-lists', '#manual-lists', '#list-members', '#add-to-a-list', '#import-a-list', '#export-a-list', '#remove-from-a-list', '#lists-built-from-a-rule', '#experiments', '#experiments-across-sites', '#opens--clicks', '#the-campaign-report', '#per-contact-engagement', '#which-links-were-clicked', '#revenue-from-a-campaign', '#conversions', '#compliance', '#list-unsubscribe', '#topics', '#preference-page', '#consent-groups', '#consent-group-create', '#consent-group-join', '#consent-group-leave', '#consent-group-rename', '#consent-group-progress', '#frequency-opt-down', '#double-opt-in', '#consent-group-confirmation', '#marketing-mail', '#frequency-cap', '#suppressions', '#add-a-suppression', '#import-export-suppressions', '#platform-suppressions', '#related'],\n events: ['#manage-events', '#import-and-export-events', '#columns', '#how-a-row-finds-an-existing-event', '#conflicts-the-dry-run-and-undo', '#files-from-other-calendars', '#show-events-on-a-screen', '#search-engines', '#related'],\n forms: ['#reading-submissions-from-code', '#build-a-form', '#place-a-saved-form', '#monthly-allowance-per-plan', '#spam-and-abuse-protection', '#the-per-site-monthly-ceiling', '#field-types', '#labels-and-placeholders', '#example-a-quick-survey', '#after-submit', '#example-grow-an-email-list-from-a-signup-form', '#consent-group-disclosure', '#where-submissions-go', '#the-inbox', '#filter-the-inbox', '#who-a-submission-is-from', '#where-this-one-went', '#replying-to-a-submission', '#every-sites-inbox-at-once', '#one-forms-own-page', '#export-submissions', '#find-a-form', '#duplicate-a-form', '#switch-forms-off-for-one-site', '#related'],\n installYourFirstPlugin: ['#before-you-start', '#step-1-open', '#step-2-browse', '#step-3-reviews', '#step-4-targeting', '#step-5-install', '#step-6-use', '#step-7-off', '#what-to-do-next', '#related'],\n inviteTeammates: ['#invite-someone', '#pending-invites', '#who-gets-told', '#accepting-an-invite', '#declining-an-invite', '#an-ordinary-invitation-never-changes-who-owns-the-workspace', '#owner-handoff', '#aglyn-staff', '#how-team-members-act', '#you-are-a-site-collaborators-support-channel', '#help-a-teammate-who-is-locked-out', '#why-you-cant-always-set-a-password', '#activity-log', '#ai-actions', '#ai-usage', '#ai-allotment', '#tips', '#related'],\n manifestAndEnvs: ['#plugin-manifest-published-with-every-version', '#contributes--where-the-plugin-loads', '#config--settings-without-writing-a-settings-screen', '#listing--version-documents', '#review--trust-lifecycle', '#environment-variables', '#pluginsconfigjson-first-party-contributors'],\n marketingOverlays: ['#announcement-bar', '#promotional-popups', '#frequency', '#popup-v2', '#multiple-overlays-scheduling--page-targeting', '#variables-in-copy', '#engagement-stats', '#across-your-sites', '#related'],\n membersOnly: ['#let-visitors-sign-up', '#sign-in-sign-up-and-recovery-pages', '#forgotten-passwords', '#gate-a-screen', '#manage-your-members', '#suspend-or-reactivate-a-member', '#tips', '#related'],\n orgAutomations: ['#what-an-org-automation-is', '#create-one', '#triggers', '#steps', '#pause-it-on-one-site', '#waiting-switching-off-and-deleting', '#every-sites-own-automations', '#related'],\n plugins: ['#install--upgrade', '#browse-card', '#whats-included', '#what-the-badges-on-a-listing-mean', '#how-plugins-run', '#when-one-plugin-depends-on-another', '#a-dependency-that-is-off-for-one-site', '#configure', '#configure-site', '#publish-your-own', '#related'],\n pos: ['#registers', '#the-register', '#platform-fees-at-the-register', '#selling-past-the-count', '#when-something-disconnects', '#reservations', '#related'],\n publishAPlugin: ['#the-publish-pipeline', '#private-plugins', '#paid-listings', '#your-publisher-profile', '#tips', '#related'],\n publisherHandbook: ['#before-your-first-publish', '#the-publisher-agreement', '#where-to-publish-from', '#what-installing-each-type-does', '#rules-an-email-starter-has-to-meet', '#publishing-a-version', '#before-you-publish', '#review-what-happens-after-you-publish', '#the-two-badges-and-what-each-one-promises', '#asking-to-be-verified', '#testing-a-version-before-it-is-approved', '#watching-your-own-submission', '#disabled-versions', '#private-plugins', '#authoring-your-listing', '#what-your-listing-can-say-about-aglyn', '#versioning--updates', '#shipping-a-new-version', '#how-installs-work-the-buyer-side', '#getting-paid', '#low-prices-and-processing'],\n redirects: ['#manage-redirects', '#sending-visitors-to-another-site', '#import-and-export', '#columns', '#how-a-row-finds-an-existing-rule', '#conflicts-the-dry-run-and-undo', '#metrics', '#match-modes-v2', '#related'],\n sandboxSecurity: ['#a-separate-origin', '#per-manifest-network-policy', '#when-you-cant-declare-the-origin', '#pinned-immutable-artifacts', '#what-this-means-when-you-build', '#related'],\n sequences: ['#what-it-is-for', '#sent-from-your-own-mailbox', '#where-it-lives', '#self-hosted', '#connect-a-mailbox', '#send-as', '#daily-cap', '#mailbox-status', '#auto-pause', '#mailbox-actions', '#link-domains', '#compliance-settings', '#allowed-countries', '#do-not-contact-domains', '#import-export-do-not-contact', '#sequences', '#build-a-sequence', '#count-opens', '#send-a-test', '#sequence-status', '#enroll', '#start-at-step', '#mail-gateways', '#cold-contacts', '#enrollments', '#person-history', '#curate', '#sending', '#what-stops-a-sequence', '#unsubscribe', '#related'],\n staffConsole: ['#runbooks', '#whats-there', '#staff-overview', '#support-queue', '#plugin-reviews', '#organizations-admin', '#filter-the-directory', '#organization-detail', '#staff-org-email', '#free-workspace-limit', '#first-party-hosts', '#entitlement-editor', '#plan-comps', '#build-for-a-client', '#sites-admin', '#filter-the-site-list', '#site-detail', '#site-ownership', '#site-transfer', '#site-content', '#staff-automations', '#emails-sent', '#users-admin', '#acquisition', '#password-help', '#sign-one-device-out', '#email-delivery', '#import-delivery-history', '#staff-notes', '#broadcast-announcements', '#billing-insight', '#refunds', '#impersonation', '#system-emails', '#platform-send-rate', '#platform-suppressions', '#feature-flags', '#multi-tenant-architecture', '#audit-archival', '#organization-suspension', '#operator-alerts', '#ai-monitoring', '#sales-tax-return', '#audit-log', '#coupons', '#discount-floors', '#existing-coupons', '#contact-suppressions', '#access', '#which-identity-holds-staff', '#staff-inside-a-customers-tenant--a-property-worth-knowing', '#offboarding', '#break-glass-access', '#requiring-sso-for-a-company-domain', '#why-am-i-getting-a-404', '#related'],\n webhooks: ['#outbound-webhooks', '#inbound-webhooks', '#tips', '#related'],\n} as const satisfies Partial<Record<PluginDocsKey, readonly `#${string}`[]>>\n\ntype PluginAnchorMap = typeof PLUGIN_DOCS_ANCHORS\n\n/** Valid heading anchors for a plugin docs page (`never` when none). */\nexport type PluginDocsAnchor<K extends PluginDocsKey> =\n K extends keyof PluginAnchorMap ? PluginAnchorMap[K][number] : never\n"],"names":["PLUGIN_DOCS","abuseReports","path","title","excerpt","actionsBuilder","aglynAssist","aiAutomations","aiCrm","aiExperiments","aiMonitoring","aiProducts","aiSeo","aiThemes","assistSignals","billing","bindings","bookings","buildAWorkflow","catalog","commerce","commerceEndToEnd","companies","consoleTour","contactActivities","contactFields","contactRecord","contacts","crmEmailTemplates","crmLeads","crmReports","crmSettings","crmSharing","crmTasks","crmViews","datasets","deals","designedEmails","emailCampaigns","events","forms","installYourFirstPlugin","inviteTeammates","manifestAndEnvs","marketingOverlays","membersOnly","orgAutomations","plugins","pos","publishAPlugin","publisherHandbook","redirects","sandboxSecurity","sequences","staffConsole","webhooks","PLUGIN_DOCS_ANCHORS"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD,iDAAiD;AACjD,8CAA8C;AAC9C,oEAAoE;AAEpE,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAW/E,OAAO,MAAMA,cAAc;IACzBC,cAAc;QACZC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAC,gBAAgB;QACdH,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAE,aAAa;QACXJ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAG,eAAe;QACbL,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAI,OAAO;QACLN,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAK,eAAe;QACbP,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAM,cAAc;QACZR,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAO,YAAY;QACVT,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAQ,OAAO;QACLV,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAS,UAAU;QACRX,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAU,eAAe;QACbZ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAW,SAAS;QACPb,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAY,UAAU;QACRd,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAa,UAAU;QACRf,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAc,gBAAgB;QACdhB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAe,SAAS;QACPjB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgB,UAAU;QACRlB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiB,kBAAkB;QAChBnB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkB,WAAW;QACTpB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmB,aAAa;QACXrB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoB,mBAAmB;QACjBtB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqB,eAAe;QACbvB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsB,eAAe;QACbxB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuB,UAAU;QACRzB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwB,mBAAmB;QACjB1B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyB,UAAU;QACR3B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0B,YAAY;QACV5B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2B,aAAa;QACX7B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4B,YAAY;QACV9B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA6B,UAAU;QACR/B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA8B,UAAU;QACRhC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA+B,UAAU;QACRjC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgC,OAAO;QACLlC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiC,gBAAgB;QACdnC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkC,gBAAgB;QACdpC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmC,QAAQ;QACNrC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoC,OAAO;QACLtC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqC,wBAAwB;QACtBvC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsC,iBAAiB;QACfxC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuC,iBAAiB;QACfzC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwC,mBAAmB;QACjB1C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyC,aAAa;QACX3C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0C,gBAAgB;QACd5C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2C,SAAS;QACP7C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4C,KAAK;QACH9C,MAAM;QACNC,OAA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"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/docs-help.generated.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// GENERATED FILE — do not edit. Regenerate with:\n// node tools/scripts/generate-docs-help.mjs\n// Source of truth: apps/docs/docs frontmatter + headings (AGL-602).\n\n// The first-party plugin consoles live in `libs/plugins/*` and cannot import\n// the console's constants, so they carry their own generated subset of the\n// docs help registry — the topics their cards actually link to, and no others.\n\nexport interface PluginDocsTopic {\n /** Docs-site path, e.g. `/commerce-and-bookings/commerce/overview`. */\n path: string\n /** Docs page title. */\n title: string\n /** Verbatim docs frontmatter description — the tooltip excerpt. */\n excerpt: string\n}\n\nexport const PLUGIN_DOCS = {\n abuseReports: {\n path: '/staff-console/abuse-reports',\n title: 'Abuse reports',\n excerpt: 'The public abuse-report queue — where outside reports land, how to triage by severity, which lever answers which report, and the CSAM and DMCA paths that are not takedown buttons.',\n },\n actionsBuilder: {\n path: '/marketing-and-automation/workflows-and-actions/actions-builder',\n title: 'Actions builder',\n excerpt: 'Map a single event to a single action without building a full workflow.',\n },\n aglynAssist: {\n path: '/getting-started/aglyn-assist',\n title: 'Aglyn Assist',\n excerpt: 'Ask the built-in AI helper how to do anything in Aglyn — it answers from these docs and links you straight to the right page.',\n },\n aiAutomations: {\n path: '/ai/automations-with-ai',\n title: 'Explain automations with AI',\n excerpt: 'Aglyn AI can explain an automation you already have and tell you why one of its runs failed. Drafting an automation from a description is not available yet.',\n },\n aiCrm: {\n path: '/ai/crm-by-ai',\n title: 'The AI CRM built into Aglyn',\n excerpt: 'An AI CRM for small business: a short summary and a suggested next step on a contact, company, deal or lead, a one-to-one email drafted into the composer, and an import\\'s columns matched to fields.',\n },\n aiExperiments: {\n path: '/ai/ab-tests-with-ai',\n title: 'A/B tests by AI: write variants, read the result',\n excerpt: 'Have Aglyn AI write two to four variants for a page, section or email experiment, and put a finished test into plain language — with the verdict decided from the counts before the model is asked anything.',\n },\n aiMonitoring: {\n path: '/staff-console/ai-monitoring',\n title: 'AI monitoring',\n excerpt: 'How staff watch one organization\\'s AI usage — the add-on, credit pool, overage, refusals, jobs, tokens and cache hit rate, top spenders and margin — and where those figures appear across the staff console.',\n },\n aiProducts: {\n path: '/ai/products-with-ai',\n title: 'Product copy and catalogs with AI',\n excerpt: 'An AI product description generator for your catalog: write copy for one product or a whole import, propose a first catalog, and propose categories and discounts — all as proposals you review.',\n },\n aiSeo: {\n path: '/building-sites/seo/seo-by-ai',\n title: 'AI SEO for your website',\n excerpt: 'AI SEO for websites, on the pages you already have: have AI write a page or product\\'s search listing, propose a fix for each finding of the SEO check, and draft your structured data and /llms.txt.',\n },\n aiThemes: {\n path: '/ai/theme-assist',\n title: 'Change your site\\'s theme with AI',\n excerpt: 'Describe a change to your site\\'s theme and get a proposal for the theme editor\\'s own controls, previewed before and after, that you save in the editor.',\n },\n assistSignals: {\n path: '/staff-console/assist-signals',\n title: 'Assist Signal',\n excerpt: 'The docs-gap and cost board behind Assist — how the ranking is ordered, why ungrounded questions are counted separately, and what the cache-read rate says about margin.',\n },\n billing: {\n path: '/workspace-and-billing/billing-and-plans/overview',\n title: 'Billing & Plans',\n excerpt: 'How Aglyn\\'s tiers, entitlements, quotas, usage meters, and seat add-ons work.',\n },\n bindings: {\n path: '/building-sites/bindings/overview',\n title: 'Bindings, Variables & Functions',\n excerpt: 'Live values in your content — typed variables, no-code functions, and rename-safe id tokens.',\n },\n bookings: {\n path: '/commerce-and-bookings/bookings/overview',\n title: 'Bookings & Scheduling',\n excerpt: 'Offer services with availability, let visitors book, take payment, and send reminders.',\n },\n buildAWorkflow: {\n path: '/marketing-and-automation/workflows-and-actions/build-a-workflow',\n title: 'Build a workflow',\n excerpt: 'Create a multi-step workflow that runs when a site event fires.',\n },\n catalog: {\n path: '/commerce-and-bookings/commerce/catalog',\n title: 'Product catalog',\n excerpt: 'Products with options and variants, categories, tags, and manual or smart collections.',\n },\n commerce: {\n path: '/commerce-and-bookings/commerce/overview',\n title: 'Commerce',\n excerpt: 'Sell physical, digital, and service products with a full catalog, orders pipeline, shipping, taxes, and your own Stripe account.',\n },\n commerceEndToEnd: {\n path: '/guides/commerce-end-to-end',\n title: 'Commerce end to end',\n excerpt: 'Create products with billing modes, design the storefront with Commerce blocks, take Stripe checkout for one-time and subscription sales, and run orders from the console.',\n },\n companies: {\n path: '/content-and-data/crm/companies',\n title: 'Companies',\n excerpt: 'Group your contacts under the businesses they belong to — one record per company, with its domain, owner, type, industry, addresses, parent company and the people who work there.',\n },\n consoleTour: {\n path: '/getting-started/console-tour',\n title: 'The console tour',\n excerpt: 'Where things live in the Aglyn console app bar and navigation.',\n },\n contactActivities: {\n path: '/content-and-data/crm/activities',\n title: 'Activities & the timeline',\n excerpt: 'Log calls, emails, meetings and notes against a contact, a company, a deal or a lead, email one person from their record, and read it all in one timeline beside everything captured and every campaign sent.',\n },\n contactFields: {\n path: '/content-and-data/crm/custom-fields',\n title: 'Custom fields',\n excerpt: 'Define your own properties on contacts, companies, deals and leads — text, number, date, choice, checkbox or link — show them on every record and its list, and save form answers straight into a contact\\'s.',\n },\n contactRecord: {\n path: '/content-and-data/crm/contact-record',\n title: 'The contact record',\n excerpt: 'Add a contact by hand, keep a profile on them — Salesforce\\'s standard contact fields, from salutation and phones to assistant and reports-to — open their own page in the CRM, and merge two records that are one person.',\n },\n contacts: {\n path: '/content-and-data/crm/overview',\n title: 'CRM',\n excerpt: 'One place for the people who interact with your sites — contacts captured from forms, members, orders and bookings, with leads, companies, a deals pipeline, tasks, a timeline, reports and custom fields.',\n },\n crmEmailTemplates: {\n path: '/content-and-data/crm/email-templates',\n title: 'Email templates',\n excerpt: 'Keep the letters your team sends from a record — templates that fill in the subject and the message, snippets that drop in a paragraph, and merge fields that fill in the person\\'s name, their company, the deal and you.',\n },\n crmLeads: {\n path: '/content-and-data/crm/leads',\n title: 'Leads',\n excerpt: 'Work the people your site has captured — a status, an owner and notes on every lead — and convert one into a contact, a company and a deal.',\n },\n crmReports: {\n path: '/content-and-data/crm/reports',\n title: 'Reports',\n excerpt: 'New contacts, their sources and which convert, the lead funnel and lead sources, the open pipeline and its forecast, won and lost, who logged what, and the task load — counted on the server, all exportable as CSV.',\n },\n crmSettings: {\n path: '/content-and-data/crm/settings',\n title: 'CRM settings',\n excerpt: 'What the CRM does on its own for every site — whether a company is created from a contact\\'s work email domain, who a new contact is assigned to, the address that files replies on a record, and each site\\'s recipes.',\n },\n crmSharing: {\n path: '/content-and-data/crm/sharing',\n title: 'Share records across sites',\n excerpt: 'Let another of your sites see a lead, a contact, a company or a deal — one record by hand, a selection from a list, or every record a sharing rule matches, now and later — without sharing the person\\'s consent.',\n },\n crmTasks: {\n path: '/content-and-data/crm/tasks',\n title: 'Tasks & follow-ups',\n excerpt: 'Calls, emails, meetings and to-dos with a status, a due date, an assignee and a link to the record they are for — overdue and today read off the clock, a snooze, a reminder at its own time, and a morning digest.',\n },\n crmViews: {\n path: '/content-and-data/crm/views',\n title: 'Saved views',\n excerpt: 'Keep a CRM list\\'s filters, columns and sort under a name, open it from the views menu or a link, share it with the team, and use a contacts view as an email audience.',\n },\n datasets: {\n path: '/content-and-data/datasets/overview',\n title: 'Datasets & Dynamic Content',\n excerpt: 'Model structured content with typed fields and relations, then bind it into repeatable components.',\n },\n deals: {\n path: '/content-and-data/crm/deals',\n title: 'Deals pipeline',\n excerpt: 'Every open deal by stage — with an amount, an owner and an expected close — as a board you drag across or a table you page through, and the won and lost history behind it.',\n },\n designedEmails: {\n path: '/marketing-and-automation/email-campaigns/designed-emails',\n title: 'Designed emails',\n excerpt: 'Build campaign emails in the besigner with email-safe blocks and merge tokens — no separate editor.',\n },\n emailCampaigns: {\n path: '/marketing-and-automation/email-campaigns/overview',\n title: 'Email Campaigns',\n excerpt: 'Campaigns to audiences built from your contacts. Campaign email starts at Pro and needs a sending domain of the site\\'s own; receipts and account email send on every plan.',\n },\n events: {\n path: '/content-and-data/events/overview',\n title: 'Events Calendar',\n excerpt: 'Keep a schedule of events in the console and publish the ones you choose to any page, with search-engine event markup.',\n },\n forms: {\n path: '/content-and-data/forms/overview',\n title: 'Forms & Lead Capture',\n excerpt: 'Add forms to your site, collect submissions in an inbox, and write them into datasets.',\n },\n installYourFirstPlugin: {\n path: '/guides/install-your-first-plugin',\n title: 'Install your first marketplace item',\n excerpt: 'A click-by-click walkthrough of the Marketplace — find something, choose which sites get it, install it, and turn it off again.',\n },\n inviteTeammates: {\n path: '/workspace-and-billing/teams-and-roles/invite-teammates',\n title: 'Invite teammates',\n excerpt: 'Add people to your site and understand how team members act within your organization.',\n },\n manifestAndEnvs: {\n path: '/developers/plugins/reference/manifest-and-envs',\n title: 'Manifests, trust lifecycle & environment',\n excerpt: 'The plugin manifest schema, the marketplace listing/version documents, the trust state machine, and every PLUGIN_* environment variable.',\n },\n marketingOverlays: {\n path: '/marketing-and-automation/marketing-overlays/overview',\n title: 'Marketing Overlays',\n excerpt: 'Site-wide announcement bars and promotional popups with triggers, scheduling, and email capture.',\n },\n membersOnly: {\n path: '/workspace-and-billing/teams-and-roles/members-only',\n title: 'Members-only areas',\n excerpt: 'Let visitors sign up as members and gate pages so only members can view them.',\n },\n orgAutomations: {\n path: '/marketing-and-automation/workflows-and-actions/org-automations',\n title: 'Org automations',\n excerpt: 'Write an automation once for the whole organization and run it on the sites you choose, with a pause on each site.',\n },\n plugins: {\n path: '/developers/plugins/overview',\n title: 'Plugins & Marketplace',\n excerpt: 'Extend Aglyn with sandboxed plugins — install from the marketplace, configure them, and publish your own.',\n },\n pos: {\n path: '/commerce-and-bookings/commerce/pos-and-reservations',\n title: 'POS & reservations',\n excerpt: 'Sell in person from the console register and take date-range reservations with deposits.',\n },\n publishAPlugin: {\n path: '/developers/plugins/publish-a-plugin',\n title: 'Publish a plugin',\n excerpt: 'Ship your own plugin to the marketplace with version pinning.',\n },\n publisherHandbook: {\n path: '/developers/plugins/publishing/publisher-handbook',\n title: 'Publisher handbook',\n excerpt: 'Publishing to the Aglyn marketplace — from profile setup through listing authoring, review, updates, and getting paid.',\n },\n redirects: {\n path: '/building-sites/redirects/overview',\n title: 'Redirects',\n excerpt: 'Manage URL redirects with validation, loop detection, and hit metrics.',\n },\n sandboxSecurity: {\n path: '/developers/plugins/reference/sandbox-security',\n title: 'Sandbox security model',\n excerpt: 'How sandboxed marketplace plugins are isolated — separate origin, per-manifest CSP, pinned artifacts — and what that means when you write one.',\n },\n sequences: {\n path: '/content-and-data/crm/sequences',\n title: 'Sequences',\n excerpt: 'One-to-one email sequences a rep sends to a person from their own connected mailbox, kept with the CRM. Rolling out.',\n },\n staffConsole: {\n path: '/staff-console/overview',\n title: 'Staff Console (internal)',\n excerpt: 'Aglyn-staff tools for managing organizations, entitlements, users, and audits.',\n },\n webhooks: {\n path: '/marketing-and-automation/workflows-and-actions/webhooks',\n title: 'Webhooks',\n excerpt: 'Connect Aglyn to other systems with outbound and inbound webhooks.',\n },\n} as const satisfies Record<string, PluginDocsTopic>\n\nexport type PluginDocsKey = keyof typeof PLUGIN_DOCS\n\nexport const PLUGIN_DOCS_ANCHORS = {\n abuseReports: ['#fraud-and-risk-alerts-by-email', '#where-reports-come-from', '#held-outbound-email', '#what-is-screened', '#tiers', '#web-risk', '#deciding-a-held-row', '#security-hold', '#names-and-domains', '#stripe-fraud-signals', '#seller-fraud-pattern', '#card-testing-velocity', '#marketplace', '#risk-notices', '#triage-by-severity', '#csam', '#which-lever', '#statuses', '#disclosure', '#dmca', '#counter-notices', '#counter-notice-clock', '#counter-notice-steps', '#repeat-infringers', '#repeat-infringer-threshold', '#known-gaps', '#related'],\n actionsBuilder: ['#create-an-action', '#recipes', '#describe-it', '#triggers', '#crm-events', '#only-run-when-a-field-matches', '#chain-multiple-conditions-andor', '#steps', '#crm-steps', '#step-conditions', '#sequences', '#transactional-replies', '#merge-tags', '#run-history', '#what-is-and-isnt-recorded', '#interactions-from-the-besigner', '#when-to-use-which', '#related'],\n aglynAssist: ['#what-it-can-do', '#aglyn-ai', '#answers-for-beginners-and-developers', '#offers-to-open-a-page', '#edits-in-the-besigner', '#where-an-answer-came-from', '#answers-straight-from-the-documentation', '#message-limits', '#feedback', '#privacy'],\n aiAutomations: ['#draft', '#explain', '#why-a-run-failed', '#what-is-sent', '#who-can-use-it', '#related'],\n aiCrm: ['#summarize-a-record', '#summaries-are-reused-until-the-record-changes', '#draft-an-email', '#match-columns', '#what-is-sent', '#who-can-use-it', '#related'],\n aiExperiments: ['#it-proposes-you-write', '#write-variants', '#putting-them-in', '#what-it-will-not-write', '#read-a-result', '#the-verdict', '#the-words', '#undecided', '#what-is-sent', '#who-can-use-it', '#related'],\n aiMonitoring: ['#the-ai-card', '#where-else', '#one-account', '#the-spend-leaderboard', '#alerts', '#related'],\n aiProducts: ['#write-a-products-copy', '#write-copy-for-many-products', '#when-you-import-products', '#propose-a-first-catalog', '#propose-categories-and-discounts', '#what-the-copy-never-says', '#what-is-sent-to-the-ai-provider', '#who-can-use-it', '#related'],\n aiSeo: ['#write-a-pages-listing', '#write-a-products-listing', '#fix-what-the-seo-check-finds', '#apply-all-as-drafts', '#structured-data-and-llmstxt', '#related'],\n aiThemes: ['#change-what-you-describe-or-design-a-new-theme', '#match-your-brand', '#review-the-proposal', '#save-it-or-dont', '#who-can-use-it', '#related'],\n assistSignals: ['#the-workflow-this-board-exists-for', '#fleet', '#the-cache-read-rate-and-what-a-bad-number-looks-like', '#where-the-money-goes', '#tokens-by-kind', '#docs-gaps', '#questions-the-docs-could-not-answer', '#what-people-actually-asked', '#what-assist-costs-by-workspace', '#reading-the-sample-honestly', '#related'],\n billing: ['#tiers--entitlements', '#leaving-notice', '#plan-without-subscription', '#upgrade-proposal', '#enterprise', '#single-sign-on-and-enforcement', '#usage-meters', '#who-is-generating-what', '#ai-allotments', '#storage-overage', '#if-you-would-rather-uploads-stopped', '#assist-overage', '#stop-ai-assist-at-the-included-band', '#ai-overage-ceiling', '#free-ai-credits', '#ai-credit-alerts', '#usage-budget', '#seats', '#crm-records', '#the-crm-suite', '#one-to-one-email', '#organization-data', '#api-access', '#payments', '#outstanding', '#plan-total', '#billing-email', '#payment-methods', '#billing-address', '#tax-ids', '#sales-tax', '#platform-fees', '#related'],\n bindings: ['#binding-tokens', '#rename-safe-id-tokens', '#insert-a-variable', '#token-pills', '#in-the-canvas-text-editor', '#site-details', '#typed-variables', '#no-code-functions', '#parameters-a-visitor-can-answer', '#a-calculator-you-lay-out', '#where-used--safety', '#workflows', '#related'],\n bookings: ['#set-up-bookings', '#price-labels', '#phone-and-address', '#taking-bookings', '#reminders', '#payments-and-fees', '#service-tax', '#manage', '#booking-from-the-crm', '#canceling-and-refunding', '#export-bookings', '#related'],\n buildAWorkflow: ['#1-open-the-workflows-page', '#2-choose-a-trigger', '#3-add-steps', '#waiting', '#4-save-and-test', '#duplicate-a-workflow', '#tips', '#related'],\n catalog: ['#products-options-and-variants', '#billing-modes-and-subscriptions', '#ai', '#categories-and-tags', '#collections', '#slugs', '#merchant-center-feed', '#related'],\n commerce: ['#products-hub', '#inventory', '#reserved-stock', '#stock-movements', '#gift-cards', '#recovery-and-alerts', '#orders', '#orders-screen', '#order-statuses', '#order-money-tiles', '#a-lost-dispute', '#shipping--taxes', '#lodging-tax-on-reservations', '#storefront-sales-tax', '#destination-coverage', '#dropshipping', '#related'],\n commerceEndToEnd: ['#1-connect-payments', '#2-create-products', '#3-design-the-storefront', '#catalog-search-filters-and-sort', '#category-pages', '#the-product-page-template', '#4-what-checkout-does', '#paying-without-leaving-your-site', '#5-run-orders-from-the-console', '#6-subscriptions--the-stripe-portal', '#related'],\n companies: ['#the-companies-list', '#create-a-company', '#the-lists-behind-the-choices', '#a-companys-page', '#contacts-at-a-company', '#linked-on-capture', '#import', '#export', '#deleting-a-company', '#who-can-see-a-company', '#files', '#related'],\n consoleTour: ['#the-app-bar', '#in-context-help', '#filter-and-search', '#primary-navigation', '#editing-vs-managing', '#the-sites-list', '#the-status-pill', '#how-the-pill-is-decided', '#your-site-allowance', '#a-sites-dashboard', '#next', '#workspace-settings--notifications', '#the-notifications-feed', '#notification-levels', '#notification-settings', '#one-kind-at-a-time', '#workspace-and-site-overrides', '#daily-digests', '#alerts-on-this-device'],\n contactActivities: ['#four-kinds-of-history', '#reading-the-timeline', '#campaign-email', '#logging-an-activity', '#meeting-from-a-booking', '#click-to-call', '#sending-an-email', '#delivery-states', '#captured-email', '#where-an-activity-is-visible', '#the-recent-activity-feed', '#related'],\n contactFields: ['#define-a-field', '#fields-per-record', '#where-values-show', '#save-a-form-field', '#picklist-values', '#task-picklists', '#over-the-api', '#retire-restore-delete', '#export-fields', '#recompute-next-activity', '#related'],\n contactRecord: ['#adding-a-contact-by-hand', '#the-record-page', '#the-standard-fields', '#do-not-call', '#deleting-and-erasing', '#what-each-site-keeps-to-itself', '#when-sites-join-or-leave-a-group', '#merging-two-records', '#likely-duplicates', '#owner', '#last-engaged', '#lifecycle-stages', '#where-the-persons-lead-is', '#finding-a-contact', '#files', '#related'],\n contacts: ['#whats-in-the-crm-area', '#unified-ingestion', '#what-each-plan-includes', '#the-contacts-page', '#import-and-export', '#segments', '#everywhere-the-crm-shows-up', '#capture-replies', '#at-the-organization-level', '#who-can-open-the-crm', '#one-sender-one-crm', '#related'],\n crmEmailTemplates: ['#templates-and-snippets', '#merge-fields', '#saving', '#managing-templates', '#duplicate-a-template', '#shared-or-personal', '#over-the-rest-api', '#related'],\n crmLeads: ['#what-makes-a-lead', '#what-a-lead-holds', '#lead-source-filled-in', '#adding-a-lead-by-hand', '#the-leads-list', '#lead-statuses', '#filter-the-leads', '#working-a-lead-from-the-row', '#several-leads-at-once', '#import-from-csv', '#who-owns-a-lead', '#a-leads-page', '#email-state', '#converting-a-lead', '#unqualifying-a-lead', '#erasing-the-person', '#who-can-do-this', '#related'],\n crmReports: ['#choosing-a-period', '#contacts', '#sources-and-lifecycle', '#conversion-by-source', '#lead-funnel', '#lead-sources', '#pipeline', '#forecast-by-close-month', '#by-forecast-category', '#won-and-lost', '#won-and-lost-by-owner', '#activity-by-teammate', '#tasks', '#exporting-a-table', '#crm-at-a-glance', '#how-the-numbers-are-counted', '#related'],\n crmSettings: ['#companies', '#create-companies-from-work-email-domains', '#default-owner', '#assignment-rules', '#round-robin', '#email-templates', '#email-capture', '#your-sending-addresses', '#recipes', '#related'],\n crmSharing: ['#what-a-shared-record-looks-like', '#share-a-record-by-hand', '#several-records-at-once', '#sharing-rules', '#access-read-only-or-read-and-edit', '#sharing-is-not-consent', '#who-can-do-this', '#related'],\n crmTasks: ['#task-picklists', '#the-tasks-page', '#the-calendar-view', '#snoozing-a-task', '#selecting-exporting-and-acting-on-many', '#import-from-csv', '#creating-a-task', '#assigning-a-task-to-someone-else', '#completing-and-reopening', '#organization-tasks', '#tasks-on-a-contact-company-or-deal', '#reminders', '#turning-reminders-off', '#next-activity', '#the-daily-digest', '#turning-it-off', '#the-dashboard-card', '#who-can-do-what', '#related'],\n crmViews: ['#the-views-control', '#a-view-is-a-link', '#filters', '#filters-on-the-contacts-list', '#filters-on-the-other-lists', '#columns-and-sort', '#segments-and-views', '#who-sees-what', '#related'],\n datasets: ['#model-builder', '#typed-documents', '#filter-records', '#relations', '#query-layer', '#repeatable-components', '#record-pages', '#who-a-dataset-is-shared-with', '#import--export', '#related'],\n deals: ['#pipelines', '#stages', '#the-board-and-the-table', '#import-from-csv', '#creating-a-deal', '#type-and-lead-source', '#contact-roles', '#line-items', '#moving-winning-and-losing', '#a-won-deal-makes-its-contact-a-customer', '#a-deals-page', '#files', '#related'],\n designedEmails: ['#create-a-template', '#find-a-template', '#duplicate-a-template', '#styling-email-blocks', '#merge-tokens', '#send-it', '#the-plain-text-version', '#start-from-a-brief-instead'],\n emailCampaigns: ['#send-a-campaign', '#campaigns-belong-to-the-organization', '#organization-emails-page', '#campaigns-group-emails', '#filter-the-lists', '#what-belongs-to-a-campaign', '#who-the-email-comes-from', '#sending-domains', '#account-email-always-sends', '#marketing-needs-a-domain', '#two-ways-to-get-a-domain', '#a-domain-we-set-up-is-a-request', '#domain-states', '#senders', '#send-a-test', '#preview-the-email', '#monthly-send-cap', '#personalize-with-merge-tags', '#recipient-count', '#who-a-campaign-is-allowed-to-reach', '#schedule-a-send', '#held-for-review', '#duplicate-an-email', '#email-lists', '#manual-lists', '#list-members', '#add-to-a-list', '#import-a-list', '#export-a-list', '#remove-from-a-list', '#lists-built-from-a-rule', '#experiments', '#experiments-across-sites', '#opens--clicks', '#the-campaign-report', '#per-contact-engagement', '#which-links-were-clicked', '#revenue-from-a-campaign', '#how-a-visit-is-credited', '#utm-labels', '#who-it-reached', '#conversions', '#compliance', '#list-unsubscribe', '#topics', '#preference-page', '#consent-groups', '#consent-group-create', '#consent-group-join', '#consent-group-leave', '#consent-group-rename', '#consent-group-progress', '#frequency-opt-down', '#double-opt-in', '#consent-group-confirmation', '#marketing-mail', '#frequency-cap', '#suppressions', '#add-a-suppression', '#import-export-suppressions', '#platform-suppressions', '#related'],\n events: ['#manage-events', '#import-and-export-events', '#columns', '#how-a-row-finds-an-existing-event', '#conflicts-the-dry-run-and-undo', '#files-from-other-calendars', '#show-events-on-a-screen', '#search-engines', '#related'],\n forms: ['#reading-submissions-from-code', '#build-a-form', '#place-a-saved-form', '#monthly-allowance-per-plan', '#spam-and-abuse-protection', '#the-per-site-monthly-ceiling', '#field-types', '#labels-and-placeholders', '#example-a-quick-survey', '#after-submit', '#example-grow-an-email-list-from-a-signup-form', '#consent-group-disclosure', '#where-submissions-go', '#the-inbox', '#filter-the-inbox', '#who-a-submission-is-from', '#what-it-links-to', '#where-this-one-went', '#replying-to-a-submission', '#every-sites-inbox-at-once', '#one-forms-own-page', '#export-submissions', '#find-a-form', '#duplicate-a-form', '#switch-forms-off-for-one-site', '#related'],\n installYourFirstPlugin: ['#before-you-start', '#step-1-open', '#step-2-browse', '#step-3-reviews', '#step-4-targeting', '#step-5-install', '#step-6-use', '#step-7-off', '#what-to-do-next', '#related'],\n inviteTeammates: ['#invite-someone', '#pending-invites', '#who-gets-told', '#accepting-an-invite', '#declining-an-invite', '#an-ordinary-invitation-never-changes-who-owns-the-workspace', '#owner-handoff', '#aglyn-staff', '#how-team-members-act', '#you-are-a-site-collaborators-support-channel', '#help-a-teammate-who-is-locked-out', '#why-you-cant-always-set-a-password', '#activity-log', '#ai-actions', '#ai-usage', '#ai-allotment', '#tips', '#related'],\n manifestAndEnvs: ['#plugin-manifest-published-with-every-version', '#contributes--where-the-plugin-loads', '#config--settings-without-writing-a-settings-screen', '#listing--version-documents', '#review--trust-lifecycle', '#environment-variables', '#pluginsconfigjson-first-party-contributors'],\n marketingOverlays: ['#announcement-bar', '#promotional-popups', '#frequency', '#popup-v2', '#multiple-overlays-scheduling--page-targeting', '#variables-in-copy', '#engagement-stats', '#across-your-sites', '#related'],\n membersOnly: ['#let-visitors-sign-up', '#sign-in-sign-up-and-recovery-pages', '#forgotten-passwords', '#gate-a-screen', '#manage-your-members', '#suspend-or-reactivate-a-member', '#tips', '#related'],\n orgAutomations: ['#what-an-org-automation-is', '#create-one', '#triggers', '#steps', '#pause-it-on-one-site', '#waiting-switching-off-and-deleting', '#every-sites-own-automations', '#related'],\n plugins: ['#install--upgrade', '#browse-card', '#whats-included', '#what-the-badges-on-a-listing-mean', '#how-plugins-run', '#when-one-plugin-depends-on-another', '#a-dependency-that-is-off-for-one-site', '#configure', '#configure-site', '#publish-your-own', '#related'],\n pos: ['#registers', '#the-register', '#platform-fees-at-the-register', '#selling-past-the-count', '#when-something-disconnects', '#reservations', '#related'],\n publishAPlugin: ['#the-publish-pipeline', '#private-plugins', '#paid-listings', '#your-publisher-profile', '#tips', '#related'],\n publisherHandbook: ['#before-your-first-publish', '#the-publisher-agreement', '#where-to-publish-from', '#what-installing-each-type-does', '#rules-an-email-starter-has-to-meet', '#publishing-a-version', '#before-you-publish', '#review-what-happens-after-you-publish', '#the-two-badges-and-what-each-one-promises', '#asking-to-be-verified', '#testing-a-version-before-it-is-approved', '#watching-your-own-submission', '#disabled-versions', '#private-plugins', '#authoring-your-listing', '#what-your-listing-can-say-about-aglyn', '#versioning--updates', '#shipping-a-new-version', '#how-installs-work-the-buyer-side', '#getting-paid', '#low-prices-and-processing'],\n redirects: ['#manage-redirects', '#sending-visitors-to-another-site', '#import-and-export', '#columns', '#how-a-row-finds-an-existing-rule', '#conflicts-the-dry-run-and-undo', '#metrics', '#match-modes-v2', '#related'],\n sandboxSecurity: ['#a-separate-origin', '#per-manifest-network-policy', '#when-you-cant-declare-the-origin', '#pinned-immutable-artifacts', '#what-this-means-when-you-build', '#related'],\n sequences: ['#what-it-is-for', '#sent-from-your-own-mailbox', '#where-it-lives', '#self-hosted', '#connect-a-mailbox', '#send-as', '#daily-cap', '#mailbox-status', '#auto-pause', '#mailbox-actions', '#link-domains', '#compliance-settings', '#allowed-countries', '#do-not-contact-domains', '#import-export-do-not-contact', '#sequences', '#build-a-sequence', '#count-opens', '#send-a-test', '#sequence-status', '#enroll', '#start-at-step', '#mail-gateways', '#cold-contacts', '#enrollments', '#person-history', '#curate', '#sending', '#what-stops-a-sequence', '#unsubscribe', '#related'],\n staffConsole: ['#runbooks', '#whats-there', '#staff-overview', '#support-queue', '#plugin-reviews', '#organizations-admin', '#filter-the-directory', '#organization-detail', '#staff-org-email', '#free-workspace-limit', '#first-party-hosts', '#entitlement-editor', '#plan-comps', '#build-for-a-client', '#sites-admin', '#filter-the-site-list', '#site-detail', '#site-ownership', '#site-transfer', '#site-content', '#staff-automations', '#emails-sent', '#users-admin', '#acquisition', '#password-help', '#sign-one-device-out', '#email-delivery', '#import-delivery-history', '#staff-notes', '#broadcast-announcements', '#billing-insight', '#refunds', '#impersonation', '#system-emails', '#platform-send-rate', '#platform-suppressions', '#feature-flags', '#multi-tenant-architecture', '#audit-archival', '#organization-suspension', '#operator-alerts', '#ai-monitoring', '#sales-tax-return', '#audit-log', '#coupons', '#discount-floors', '#existing-coupons', '#contact-suppressions', '#access', '#which-identity-holds-staff', '#staff-inside-a-customers-tenant--a-property-worth-knowing', '#offboarding', '#break-glass-access', '#requiring-sso-for-a-company-domain', '#why-am-i-getting-a-404', '#related'],\n webhooks: ['#outbound-webhooks', '#inbound-webhooks', '#tips', '#related'],\n} as const satisfies Partial<Record<PluginDocsKey, readonly `#${string}`[]>>\n\ntype PluginAnchorMap = typeof PLUGIN_DOCS_ANCHORS\n\n/** Valid heading anchors for a plugin docs page (`never` when none). */\nexport type PluginDocsAnchor<K extends PluginDocsKey> =\n K extends keyof PluginAnchorMap ? PluginAnchorMap[K][number] : never\n"],"names":["PLUGIN_DOCS","abuseReports","path","title","excerpt","actionsBuilder","aglynAssist","aiAutomations","aiCrm","aiExperiments","aiMonitoring","aiProducts","aiSeo","aiThemes","assistSignals","billing","bindings","bookings","buildAWorkflow","catalog","commerce","commerceEndToEnd","companies","consoleTour","contactActivities","contactFields","contactRecord","contacts","crmEmailTemplates","crmLeads","crmReports","crmSettings","crmSharing","crmTasks","crmViews","datasets","deals","designedEmails","emailCampaigns","events","forms","installYourFirstPlugin","inviteTeammates","manifestAndEnvs","marketingOverlays","membersOnly","orgAutomations","plugins","pos","publishAPlugin","publisherHandbook","redirects","sandboxSecurity","sequences","staffConsole","webhooks","PLUGIN_DOCS_ANCHORS"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD,iDAAiD;AACjD,8CAA8C;AAC9C,oEAAoE;AAEpE,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAW/E,OAAO,MAAMA,cAAc;IACzBC,cAAc;QACZC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAC,gBAAgB;QACdH,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAE,aAAa;QACXJ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAG,eAAe;QACbL,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAI,OAAO;QACLN,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAK,eAAe;QACbP,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAM,cAAc;QACZR,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAO,YAAY;QACVT,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAQ,OAAO;QACLV,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAS,UAAU;QACRX,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAU,eAAe;QACbZ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAW,SAAS;QACPb,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAY,UAAU;QACRd,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAa,UAAU;QACRf,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAc,gBAAgB;QACdhB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAe,SAAS;QACPjB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgB,UAAU;QACRlB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiB,kBAAkB;QAChBnB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkB,WAAW;QACTpB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmB,aAAa;QACXrB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoB,mBAAmB;QACjBtB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqB,eAAe;QACbvB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsB,eAAe;QACbxB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuB,UAAU;QACRzB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwB,mBAAmB;QACjB1B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyB,UAAU;QACR3B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0B,YAAY;QACV5B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2B,aAAa;QACX7B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4B,YAAY;QACV9B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA6B,UAAU;QACR/B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA8B,UAAU;QACRhC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA+B,UAAU;QACRjC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgC,OAAO;QACLlC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiC,gBAAgB;QACdnC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkC,gBAAgB;QACdpC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmC,QAAQ;QACNrC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoC,OAAO;QACLtC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqC,wBAAwB;QACtBvC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsC,iBAAiB;QACfxC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuC,iBAAiB;QACfzC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwC,mBAAmB;QACjB1C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyC,aAAa;QACX3C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0C,gBAAgB;QACd5C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2C,SAAS;QACP7C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4C,KAAK;QACH9C,MAAM;QACNC,OAA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"}
@@ -3586,14 +3586,14 @@ export const DOCS_SECTION_INDEX = [
3586
3586
  title: 'Automations for the CRM',
3587
3587
  heading: 'The events',
3588
3588
  anchor: '#the-events',
3589
- text: '| In the trigger picker | Fires when | Read more |\n| Contact created | A capture on your site made a new contact. A repeat visit by somebody already on the list is an interaction, not a new contact. The event carries the lifecycleStage the capture set — lead for a form or a booking request, subscriber for a sign-up or a newsletter opt-in, customer for an order — so a filter can pick the form captures out of the sign-ups — and formId when the capture came through a form, so a condition can pick one form\'s people out of every other door\'s. | CRM events |\n| Contact changed stage | A contact\'s lifecycle stage was moved — from the contact\'s page, from Set stage on the contacts table, or by another automation. Setting the stage a contact already has fires nothing. | Lifecycle stages |\n| Deal moved | A deal moved between open stages, or was reopened. | Moving, winning and losing |\n| Deal won | A deal was marked won. | Moving, winning and losing |\n| Deal lost | A deal was marked lost; the reason given travels with the event. | Moving, winning and losing |\n| CRM task completed | A task was ticked done. Reopening a task fires nothing. | Completing and reopening |\nPick one and the Filter field\'s helper text lists the keys the event puts in scope, so a filter such as lifecycleStage == "customer" or a condition such as stageId equals negotiation can be written without leaving the editor.'
3589
+ text: '| In the trigger picker | Fires when | Read more |\n| Contact created | A capture on your site made a new contact. A repeat visit by somebody already on the list is an interaction, not a new contact. The event carries the lifecycleStage the capture set — lead for a form or a booking request, subscriber for a sign-up or a newsletter opt-in, customer for an order — so a filter can pick the form captures out of the sign-ups — and formId when the capture came through a form, so a condition can pick one form\'s people out of every other door\'s. | CRM events |\n| Contact changed stage | A contact\'s lifecycle stage was moved — from the contact\'s page, from Set stage on the contacts table, or by another automation. Setting the stage a contact already has fires nothing. | Lifecycle stages |\n| Deal moved | A deal moved between open stages, or was reopened. | Moving, winning and losing |\n| Deal won | A deal was marked won. | Moving, winning and losing |\n| Deal lost | A deal was marked lost; the reason given travels with the event. | Moving, winning and losing |\n| CRM task completed | A task was ticked done. Reopening a task fires nothing. | Completing and reopening |\n| New lead | A capture filed a new lead — a form with lead routing on, or a booking request. Such a form makes a lead and no contact, so Contact created does not fire for it. The event carries formId when a form filed the lead, and the form\'s campaignIds when it is filed under a campaign. | Leads |\nPick one and the Filter field\'s helper text lists the keys the event puts in scope, so a condition such as lifecycleStage equals customer or stageId equals negotiation can be written without leaving the editor. A filter can\'t compare values; see Only run when a field matches.'
3590
3590
  },
3591
3591
  {
3592
3592
  path: '/content-and-data/crm/automations',
3593
3593
  title: 'Automations for the CRM',
3594
3594
  heading: 'The steps',
3595
3595
  anchor: '#the-steps',
3596
- text: 'Plan availability The five CRM steps are part of the CRM, included from Starter. On a workspace whose plan does not include it, a step that reaches the CRM does nothing and the run history records why — the plan that carries the steps is named — the same way a webhook step reports the plan it needs. See The CRM.\nFive server steps act on the CRM: Set the contact\'s lifecycle stage, Tag the contact, Assign the contact an owner, Create a CRM task and Log a CRM activity. Each acts on the contact the triggering event names — by contactId when the event carries one, otherwise by the email in the event\'s data — and does nothing, with the reason in the run history, when the event names nobody this site can see. Fields and behavior are in CRM steps.\nAssigning an owner, or rotating one\nAssign the contact an owner has two modes. A team member names one person by email address, matched against the workspace roster when the automation runs. Round robin hands the contact to the next member of the pool kept under CRM → Settings, moving the rotation on — the same pool an assignment rule\'s round robin draws from, so a rule and an automation share one rotation.\nEither mode reassigns: an automation that assigns an owner means to, so a contact that already has one is handed over, and the site\'s lead for the same person follows. Naming the owner the contact already has changes nothing. The new owner gets a console notification, Contact assigned to you, linking to the contact.\nThis is the deliberate counterpart of the assignment rules, which run on capture and only for a contact with no owner. Use a rule to decide who gets a new contact; use this step to move a contact when something happens to them — a stage change, a won deal.'
3596
+ text: 'Plan availability The five CRM steps are part of the CRM, included from Starter. On a workspace whose plan does not include it, a step that reaches the CRM does nothing and the run history records why — the plan that carries the steps is named — the same way a webhook step reports the plan it needs. See The CRM.\nFive server steps act on the CRM: Set the contact\'s lifecycle stage, Tag the contact, Assign the contact an owner, Create a CRM task and Log a CRM activity. Each acts on the contact the triggering event names — by contactId when the event carries one, otherwise by the email in the event\'s data — or, when the workspace holds that person only as a lead, on the lead: its owner, its tags, a task or an activity filed under it. A lead has no lifecycle stage, so a stage step on one fails and says so. Each does nothing, with the reason in the run history, when the event names nobody this site can see. Fields and behavior are in CRM steps.\nAssigning an owner, or rotating one\nAssign the contact an owner has two modes. A team member names one person by email address, matched against the workspace roster when the automation runs. Round robin hands the contact to the next member of the pool kept under CRM → Settings, moving the rotation on — the same pool an assignment rule\'s round robin draws from, so a rule and an automation share one rotation.\nEither mode reassigns: an automation that assigns an owner means to, so a contact that already has one is handed over, and the site\'s lead for the same person follows. Naming the owner the contact already has changes nothing. The new owner gets a console notification, Contact assigned to you, linking to the contact.\nThis is the deliberate counterpart of the assignment rules, which run on capture and only for a contact with no owner.'
3597
3597
  },
3598
3598
  {
3599
3599
  path: '/content-and-data/crm/automations',
@@ -3607,7 +3607,7 @@ export const DOCS_SECTION_INDEX = [
3607
3607
  title: 'Automations for the CRM',
3608
3608
  heading: 'Recipes',
3609
3609
  anchor: '#recipes',
3610
- text: 'The common CRM automations do not have to be built from scratch. Beside Add action on Automation → Actions, the Recipes menu lists four ready-to-edit actions. Choosing one opens the action editor already filled in — name, trigger, conditions and steps — with a line saying which recipe it started from. Change anything, then save; nothing is saved until you do, and a recipe closed without saving leaves no trace.\n| Recipe | Starts on | What it builds |\n| Welcome a new lead | Contact created, with the condition source equals form | Assign the contact an owner on Round robin (the pool under CRM → Settings; with no pool the step fails, the run carries on, and the run history says so), then Create a CRM task — a call, due in 1 day, assignee blank so it goes to the owner just chosen — then Send an email thanking them (sent from your workspace\'s identity to the address the event carries, as an immediate reply rather than marketing, and logged on the contact\'s timeline), then Tag the contact website. |\n| Follow up a won deal | Deal won | Create a CRM task — a call, due in 7 days, to the contact\'s owner. No stage step: a won deal makes its contact a customer on its own before the event fires, and a step that set the stage here would move an evangelist back. |\n| Re-engage a stale lead | Contact changed stage, with the condition lifecycleStage equals lead | Wait for something to happen — the next Contact changed stage for this person, giving up after a week — then Create a CRM task (a call, due in 1 day) with the step condition waitTimedOut is not empty, so the call is booked only when the week ran out. A lead whose stage moved on in the meantime skips it. |\n| Tag by form | Contact created, with the condition formId equals the form you pick | Tag the contact with the form\'s name. Th'
3610
+ text: 'The common CRM automations do not have to be built from scratch. Beside Add action on Automation → Actions, the Recipes menu lists four ready-to-edit actions. Choosing one opens the action editor already filled in — name, trigger, conditions and steps — with a line saying which recipe it started from. Change anything, then save; nothing is saved until you do, and a recipe closed without saving leaves no trace.\n| Recipe | Starts on | What it builds |\n| Welcome a new lead | New lead, with the condition formId is not empty — a lead a form filed | Assign the contact an owner on Round robin (the pool under CRM → Settings; with no pool the step fails, the run carries on, and the run history says so), then Create a CRM task — a call, due in 1 day, assignee blank so it goes to the owner just chosen — then Send an email thanking them by first name (sent from your workspace\'s identity to the address the event carries, as a transactional reply with no unsubscribe, and logged on the lead\'s timeline), then Tag the contact website. Each step acts on the lead the form filed. |\n| Follow up a won deal | Deal won | Create a CRM task — a call, due in 7 days, to the contact\'s owner. No stage step: a won deal makes its contact a customer on its own before the event fires, and a step that set the stage here would move an evangelist back. |\n| Re-engage a stale lead | Contact changed stage, with the condition lifecycleStage equals lead | Wait for something to happen — the next Contact changed stage for this person, giving up after a week — then Create a CRM task (a call, due in 1 day) with the step condition waitTimedOut is not empty, so the call is booked only when the week ran out. A lead whose stage moved on in the meantime skips it. |\n| Tag by form | Contact created — or New lead for a for'
3611
3611
  },
3612
3612
  {
3613
3613
  path: '/content-and-data/crm/automations',
@@ -5140,7 +5140,7 @@ export const DOCS_SECTION_INDEX = [
5140
5140
  title: 'Forms & Lead Capture',
5141
5141
  heading: 'Where submissions go',
5142
5142
  anchor: '#where-submissions-go',
5143
- text: '- Inbox — every submission is captured; open it in the console\'s mail reader dialog.\n- Datasets — bind a form to a dataset (Write to dataset on the Form element) and each submission is also appended as a record. The inbox always gets its copy, and each submission\'s own detail dialog carries chips saying where it went — including saying nothing about a dataset when the record wasn\'t created.\n- Contacts — every submission that carries an email address updates the person in the CRM at stage Lead: a new contact when the address is new, an interaction on their timeline when it is not, and a customer stays a customer. A field can also save its answer into one of your custom contact fields — pick the field under Saves to contact fields on the form\'s own page.\n- Leads — only when the form\'s CRM routing card has the lead switch on. See What makes a lead.\nThe inbox\nThe site\'s Inbox page collects everything visitors send, in three tabs — Submissions, Members & leads, and Campaigns. The Form Submissions table reads as a list of people, not of forms: From, Message, Received, and the row actions.\n- From shows the sender — a colored initials avatar and their name, with the form name as a caption underneath (the Form element\'s Form name attribute, so name your forms distinctly: "Contact", "Newsletter", "Survey"). The avatar\'s color is derived from the name, so one sender keeps one color on every machine.\n- Unread submissions are bold with a dot at the left of the row. There is no "New" chip — bold text and a chip saying New are the same fact twice. Site managers also get an in-app notification per submission.\n- The row\'s ⋮ menu holds Open contact in CRM — the person this submission updated, found by the address they gave — beside Mark read and Delete. A submission that carried no email'
5143
+ text: '- Inbox — every submission is captured; open it in the console\'s mail reader dialog.\n- Datasets — bind a form to a dataset (Write to dataset on the Form element) and each submission is also appended as a record. The inbox always gets its copy, and each submission\'s own detail dialog carries chips saying where it went — including saying nothing about a dataset when the record wasn\'t created.\n- Contacts — every submission that carries an email address updates the person in the CRM at stage Lead: a new contact when the address is new, an interaction on their timeline when it is not, and a customer stays a customer. A field can also save its answer into one of your custom contact fields — pick the field under Saves to contact fields on the form\'s own page.\n- Leads — only when the form\'s CRM routing card has the lead switch on. See What makes a lead.\nThe inbox\nThe site\'s Inbox page collects everything visitors send, in three tabs — Submissions, Members & leads, and Campaigns. The Form Submissions table reads as a list of people, not of forms: From, Message, Received, and the row actions.\n- From shows the sender — a colored initials avatar and their name, with the form name as a caption underneath (the Form element\'s Form name attribute, so name your forms distinctly: "Contact", "Newsletter", "Survey"). The avatar\'s color is derived from the name, so one sender keeps one color on every machine.\n- Unread submissions are bold with a dot at the left of the row. There is no "New" chip — bold text and a chip saying New are the same fact twice. Site managers also get an in-app notification per submission, and an email too for anyone who switched that on. It names the form, the page and the campaign, and opens that submission rather than the list — see What an open submission links '
5144
5144
  },
5145
5145
  {
5146
5146
  path: '/content-and-data/forms/overview',
@@ -6309,7 +6309,7 @@ export const DOCS_SECTION_INDEX = [
6309
6309
  title: 'Plugin-manager API reference',
6310
6310
  heading: 'Conversion credit — `plugin-conversion-credit` (`/server`)',
6311
6311
  anchor: '#conversion-credit--plugin-conversion-credit-server',
6312
- text: 'A door that produces an outcome somebody may be credited with — a form submission, a booking, a member sign-up, an order, what a plugin\'s own mail led to — asks whichever plugin credits outcomes, instead of importing its join. One plugin registers the creditor (a slot); every door calls the functions below, and each answers its empty value when nobody credits.\n| API | Semantics |\n| resolveConversionTouch({ hostId, wire?, email?, atMs? }) | The arrival to credit, or null (direct traffic, or nobody credits). Opaque: a door hands it back unread. |\n| creditConversion({ hostId, kind, refId, touch?, click?, convertedAtMs? }) | Credits one identify moment, in the door\'s word (form, lead, contact, booking). click credits a link the door\'s own mail carried, in place of a touch. |\n| creditOrderConversion / reverseOrderConversion | An order\'s money, and a refund\'s or a lost dispute\'s reversal of it, keyed by the order. |\n| recordConversionClick({ email, hostId, creditTo, atMs, via? }) | A person followed a link in mail a plugin sent them; via is the sender\'s own facts (its sequence, its enrollment). |\n| creditConversionOutcome({ hostId, orgId?, containerIds, outcome, atMs? }) | What a plugin\'s own record produced, counted under the containers it is filed in (plugin-containers). |\n| eraseConversionCredits(key) | Everything the creditor holds about a person, by personKey, on every site — called by the platform\'s address erasure beside the delivery log. |\nNothing here throws: every door has already done the thing being credited. The first call that finds no creditor runs the app\'s boot step once and asks again, as a person capture does. A door that hands its touch to the person capture puts it under CONVERSIONTOUCHDETAIL in detail, and the plugin that keeps people passes it on to the'
6312
+ text: 'A door that produces an outcome somebody may be credited with — a form submission, a booking, a member sign-up, an order, what a plugin\'s own mail led to — asks whichever plugin credits outcomes, instead of importing its join. One plugin registers the creditor (a slot); every door calls the functions below, and each answers its empty value when nobody credits.\n| API | Semantics |\n| resolveConversionTouch({ hostId, wire?, email?, atMs? }) | The arrival to credit, or null (direct traffic, or nobody credits). Opaque: a door hands it back unread. |\n| creditConversion({ hostId, kind, refId, touch?, click?, convertedAtMs? }) | Credits one identify moment, in the door\'s word (form, lead, contact, booking). click credits a link the door\'s own mail carried, in place of a touch. |\n| creditOrderConversion / reverseOrderConversion | An order\'s money, and a refund\'s or a lost dispute\'s reversal of it, keyed by the order. |\n| recordConversionClick({ email, hostId, creditTo, atMs, via? }) | A person followed a link in mail a plugin sent them; via is the sender\'s own facts (its sequence, its enrollment). |\n| creditConversionOutcome({ hostId, orgId?, containerIds, outcome, atMs? }) | What a plugin\'s own record produced, counted under the containers it is filed in (plugin-containers). |\n| eraseConversionCredits(key) | Everything the creditor holds about a person, by personKey, on every site — called by the platform\'s address erasure beside the delivery log. |\n| describeConversion({ hostId, touch?, containerIds? }) | The touch a door resolved and the containers its record is filed under, in words: credited (label, how, containerId?) and filedUnder (id, label, in the order asked, deleted ones left out) — what a door\'s alert says about where an outcome came from. null when nobody credits, o'
6313
6313
  },
6314
6314
  {
6315
6315
  path: '/developers/plugins/reference/plugin-manager-api',
@@ -6400,7 +6400,7 @@ export const DOCS_SECTION_INDEX = [
6400
6400
  title: 'Plugin-manager API reference',
6401
6401
  heading: 'Interaction recipes — `interaction-recipes`',
6402
6402
  anchor: '#interaction-recipes--interaction-recipes',
6403
- text: 'A recipe is a ready-to-edit interaction: a trigger, its conditions and an ordered step list, handed to an editor as a draft that nothing writes until a person saves. The plugin that knows what a recipe is FOR writes it, and the plugin that edits and stores interactions offers it in its Recipes menu; neither imports the other. A recipe builds its interaction in code, so it is registered from the plugin\'s declarations entry, which both apps and the console\'s loader run at boot:\nA stored interaction remembers the recipe it began as by the recipe\'s id, its recipe stamp, so an id never changes once it has shipped. A first-party plugin also declares its ids, so a validator knows a stamp in a process where the plugin\'s declarations never ran:\nA recipe that needs a record picked first — "Tag by form" needs the form — names it in picks: the record kind, listed through the kind\'s plugin-record-lists source, and the words the picker asks in (label, plural, prompt, none). It receives the pick as build({ picked: { id, name } }).\n| API | Semantics |\n| registerInteractionRecipes(recipes, { pluginId? }) | Owner = the loader\'s marker, else pluginId; no owner throws. An id another plugin declares or registered throws, and nothing is registered unless every recipe is accepted. Registering again replaces the plugin\'s own. |\n| interactionRecipes() / interactionRecipe(id) | Every registered recipe, each plugin\'s in its own order — what a Recipes menu lists — and one by id, or null. |\n| isKnownInteractionRecipe(id) | Whether a stamp names a recipe a plugin declares or registered. A validator refuses any other stamp; null and absent pass. |\n| declaredInteractionRecipes() | The compiled interactionRecipes rows. |'
6403
+ text: 'A recipe is a ready-to-edit interaction: a trigger, its conditions and an ordered step list, handed to an editor as a draft that nothing writes until a person saves. The plugin that knows what a recipe is FOR writes it, and the plugin that edits and stores interactions offers it in its Recipes menu; neither imports the other. A recipe builds its interaction in code, so it is registered from the plugin\'s declarations entry, which both apps and the console\'s loader run at boot:\nA stored interaction remembers the recipe it began as by the recipe\'s id, its recipe stamp, so an id never changes once it has shipped. A first-party plugin also declares its ids, so a validator knows a stamp in a process where the plugin\'s declarations never ran:\nA recipe that needs a record picked first — "Tag by form" needs the form — names it in picks: the record kind, listed through the kind\'s plugin-record-lists source, and the words the picker asks in (label, plural, prompt, none). It receives the pick as build({ picked: { id, name, facts } }), where facts are what the kind\'s owner shares about the record through its list source — the Forms plugin shares routesLeads, so "Tag by form" listens for a new lead on a form that files leads.\n| API | Semantics |\n| registerInteractionRecipes(recipes, { pluginId? }) | Owner = the loader\'s marker, else pluginId; no owner throws. An id another plugin declares or registered throws, and nothing is registered unless every recipe is accepted. Registering again replaces the plugin\'s own. |\n| interactionRecipes() / interactionRecipe(id) | Every registered recipe, each plugin\'s in its own order — what a Recipes menu lists — and one by id, or null. |\n| isKnownInteractionRecipe(id) | Whether a stamp names a recipe a plugin declares or registered. A validator refu'
6404
6404
  },
6405
6405
  {
6406
6406
  path: '/developers/plugins/reference/plugin-manager-api',
@@ -7926,7 +7926,14 @@ export const DOCS_SECTION_INDEX = [
7926
7926
  title: 'Cookie consent',
7927
7927
  heading: 'What needs consent',
7928
7928
  anchor: '#what-needs-consent',
7929
- text: 'Consent-gated — held back unless the visitor\'s recorded state grants analytics:\n- Google Analytics (your configured measurement ID) and every event Aglyn sends to it — see Google Analytics events.\n- Google Tag Manager (your configured container ID). The container is gated the same way and never more loosely, so it cannot be used to install a tag that runs before consent.\n- Core Web Vitals reporting. Page-speed metrics reach your property only through the same tag, and are discarded rather than held if consent is refused while a page is open.\n- Cross-visit A/B test identity: without an analytics grant, experiment variant assignment is remembered only for the visit (sessionStorage) instead of across visits.\n- Remembering the campaign a visitor first arrived from. Reading the campaign on the click itself needs no grant; keeping it across visits does.\n- A Wistia player loaded with the page — see Videos that load with the page.\n- Advertising storage (adstorage, aduserdata, adpersonalization), on sites that have turned the advertising question on. Where it starts depends on the visitor\'s region, and it is the same split analytics uses:\n- Prior-consent regions. The EU/EEA, the UK, and any visitor whose region cannot be determined see the banner first, and advertising storage is denied until they tick that specific box. Not objecting is never a yes here.\n- Everywhere else. Advertising runs from their first visit, alongside analytics, on the same implied basis — these visitors see no banner, and Your Privacy Choices is where they turn it off. That is the opt-out posture the Privacy Policy and the Cookie Policy both describe.\n- A visitor who declines, opts out, or arrives with a Global Privacy Control signal gets no advertising storage anywhere in the world. A refusal outranks th'
7929
+ text: 'Consent-gated — held back unless the visitor\'s recorded state grants analytics:\n- Google Analytics (your configured measurement ID) and every event Aglyn sends to it — see Google Analytics events.\n- Google Tag Manager (your configured container ID). The container is gated the same way and never more loosely, so it cannot be used to install a tag that runs before consent.\n- Core Web Vitals reporting. Page-speed metrics reach your property only through the same tag, and are discarded rather than held if consent is refused while a page is open.\n- Cross-visit A/B test identity: without an analytics grant, experiment variant assignment is remembered only for the visit (sessionStorage) instead of across visits.\n- Remembering the campaign that last touched a visitor. Reading it on the page they are on needs no grant; keeping it across visits does. See The campaign a visitor came from.\n- A Wistia player loaded with the page — see Videos that load with the page.\n- Advertising storage (adstorage, aduserdata, adpersonalization), on sites that have turned the advertising question on. Where it starts depends on the visitor\'s region, and it is the same split analytics uses:\n- Prior-consent regions. The EU/EEA, the UK, and any visitor whose region cannot be determined see the banner first, and advertising storage is denied until they tick that specific box. Not objecting is never a yes here.\n- Everywhere else. Advertising runs from their first visit, alongside analytics, on the same implied basis — these visitors see no banner, and Your Privacy Choices is where they turn it off. That is the opt-out posture the Privacy Policy and the Cookie Policy both describe.\n- A visitor who declines, opts out, or arrives with a Global Privacy Control signal gets no advertising storage anywhere in t'
7930
+ },
7931
+ {
7932
+ path: '/marketing-and-automation/analytics/cookie-consent',
7933
+ title: 'Cookie consent',
7934
+ heading: 'The campaign a visitor came from',
7935
+ anchor: '#campaign-touch',
7936
+ text: 'Your site remembers the campaign that last touched a visitor for up to seven days, so a form, sign-up or booking on a later page or visit can be credited to it:\n- the utm labels on the link they arrived from, and\n- the last page they read that you filed under a campaign — its campaign and page ids, its path and when.\nBoth are kept in one entry in the browser\'s local storage, and it holds no name, address or identifier. Reading the campaign on the page the visitor is on needs no grant; keeping it across pages and visits waits for analytics consent, and withdrawing consent deletes it. The same entry is what tells a campaign\'s First visits figure that a visitor is new to it, so a visitor who declined is never counted there — see Who it reached.'
7930
7937
  },
7931
7938
  {
7932
7939
  path: '/marketing-and-automation/analytics/cookie-consent',
@@ -8458,7 +8465,7 @@ export const DOCS_SECTION_INDEX = [
8458
8465
  title: 'Actions builder',
8459
8466
  heading: 'Triggers',
8460
8467
  anchor: '#triggers',
8461
- text: 'Beyond server events (form submissions, page views, sign-ins, leads, bookings), actions can fire on visitor behavior in the page:\n- Scroll depth — the visitor scrolls past a percentage.\n- Scroll to / element visible — a CSS-selected element enters the viewport.\n- Element click — a CSS-selected element is clicked.\n- Exit intent — the pointer leaves toward the top of the window.\n- Time on page — a dwell-time threshold passes.\n- Page visit — the page loads.\nPage triggers can be limited to certain paths (/pricing, /blog/), and a Frequency setting controls re-fires: every matching pageview, once per session, once per visitor, or with a cooldown (a minimum number of minutes between fires for the same browser).\nCRM events {#crm-events}\nSix server events come from the CRM — two about contacts, three about deals and one about tasks. Pick one and the Filter field\'s helper text lists the keys below, so a filter such as lifecycleStage == "customer" or a condition such as source equals booking can be written without leaving the editor.\n| Event | Fires when | Keys in scope for filters and conditions |\n| Contact created (contactCreated) | A capture on your site makes a new contact: a form submission, a member sign-up, a newsletter subscription, an order or a booking from an address your workspace did not already hold. A repeat visit by somebody already on the list is recorded as an interaction and does not fire it. | contactId · email · name (empty when the capture had none) · source (form, member, newsletter, order or booking) · hostId · lifecycleStage (the stage the capture set — lead, subscriber or customer; empty when it set none) · campaignIds (comma-joined; present only when the capture came through a campaign) · formId (present only when the capture came through a form — the ke'
8468
+ text: 'Beyond server events (form submissions, page views, sign-ins, leads, bookings), actions can fire on visitor behavior in the page:\n- Scroll depth — the visitor scrolls past a percentage.\n- Scroll to / element visible — a CSS-selected element enters the viewport.\n- Element click — a CSS-selected element is clicked.\n- Exit intent — the pointer leaves toward the top of the window.\n- Time on page — a dwell-time threshold passes.\n- Page visit — the page loads.\nPage triggers can be limited to certain paths (/pricing, /blog/), and a Frequency setting controls re-fires: every matching pageview, once per session, once per visitor, or with a cooldown (a minimum number of minutes between fires for the same browser).\nEvery switched-on automation listening for an event runs when it fires, however many the site has — a site with an auto-reply for each of a dozen forms runs every one whose conditions match.\nCRM events {#crm-events}\nSix server events come from the CRM — two about contacts, three about deals and one about tasks — and a seventh, New lead, from its leads. Pick one and the Filter field\'s helper text lists the keys below, so a condition such as lifecycleStage equals customer or source equals booking can be written without leaving the editor.\n| Event | Fires when | Keys in scope for filters and conditions |\n| Contact created (contactCreated) | A capture on your site makes a new contact: a form submission, a member sign-up, a newsletter subscription, an order or a booking from an address your workspace did not already hold. A repeat visit by somebody already on the list is recorded as an interaction and does not fire it. | contactId · email · name (empty when the capture had none) · source (form, member, newsletter, order or booking) · hostId · lifecycleStage (the stage the ca'
8462
8469
  },
8463
8470
  {
8464
8471
  path: '/marketing-and-automation/workflows-and-actions/actions-builder',
@@ -8472,7 +8479,7 @@ export const DOCS_SECTION_INDEX = [
8472
8479
  title: 'Actions builder',
8473
8480
  heading: 'Sequences',
8474
8481
  anchor: '#sequences',
8475
- text: 'A Wait step splits an automation in two. Everything before it runs immediately, and everything after it runs later, on its own — so a welcome series, a win-back, or a "three days after they sign up, ask how it\'s going" is one automation rather than several.\n- Wait holds for anything from a minute to 90 days.\n- Wait for something to happen continues as soon as the event you pick happens for that person, or when the time you set runs out — whichever comes first. Put an Only if condition of waitTimedOut is not empty on the next step to make it the "they never did it" path.\n- End the flow here stops the rest. With an Only if condition it is the exit — "stop if they have ordered."\nA few things worth knowing before you build one:\n- A waiting automation needs to know who it is waiting for. The trigger\'s information has to include an email address; a wait step reports an error without one.\n- One at a time per person. Somebody already partway through an automation is not enrolled in it a second time until they finish.\n- Editing an automation does not change it for people already waiting inside it. They finish the version they started. Your edit applies to everybody who enters afterwards.\n- Turning an automation off, or deleting it, stops it for everyone — including people mid-wait.\n- In-page steps after a wait do not run. By the time the wait ends the visitor\'s browser has long since moved on, so put popups, alerts and element effects before the first wait.\nEmails sent from a step after a wait are treated as marketing: they carry an unsubscribe link and header, skip anyone who has unsubscribed or bounced, respect the topic the step is set to, count toward how much mail one person receives from your site in a day, and go only to people with a marketing consent record. An email se'
8482
+ text: 'A Wait step splits an automation in two. Everything before it runs immediately, and everything after it runs later, on its own — so a welcome series, a win-back, or a "three days after they sign up, ask how it\'s going" is one automation rather than several.\n- Wait holds for anything from a minute to 90 days.\n- Wait for something to happen continues as soon as the event you pick happens for that person, or when the time you set runs out — whichever comes first. Put an Only if condition of waitTimedOut is not empty on the next step to make it the "they never did it" path.\n- End the flow here stops the rest. With an Only if condition it is the exit — "stop if they have ordered."\nA few things worth knowing before you build one:\n- A waiting automation needs to know who it is waiting for. The trigger\'s information has to include an email address; a wait step reports an error without one.\n- One at a time per person. Somebody already partway through an automation is not enrolled in it a second time until they finish.\n- Editing an automation does not change it for people already waiting inside it. They finish the version they started. Your edit applies to everybody who enters afterwards.\n- Turning an automation off, or deleting it, stops it for everyone — including people mid-wait.\n- In-page steps after a wait do not run. By the time the wait ends the visitor\'s browser has long since moved on, so put popups, alerts and element effects before the first wait.\nEmails sent from a step after a wait are treated as marketing: they carry an unsubscribe link and header, skip anyone who has unsubscribed or bounced, respect the topic the step is set to, count toward how much mail one person receives from your site in a day, and go only to people with a marketing consent record.\nTransaction'
8476
8483
  },
8477
8484
  {
8478
8485
  path: '/marketing-and-automation/workflows-and-actions/actions-builder',
@@ -8521,7 +8528,7 @@ export const DOCS_SECTION_INDEX = [
8521
8528
  title: 'Build a workflow',
8522
8529
  heading: '2. Choose a trigger',
8523
8530
  anchor: '#2-choose-a-trigger',
8524
- text: 'Pick the site event that starts the workflow — for example a form submission, a new member, a booking, or a CRM event such as Contact created. The event\'s data is available to every step that follows, and the Filter field\'s helper text names the keys the chosen event puts in scope.'
8531
+ text: 'Pick the site event that starts the workflow — for example a form submission, a new member, a booking, or a CRM event such as Contact created. The event\'s data is available to every step that follows, and the Filter field\'s helper text names the keys the chosen event puts in scope. A filter runs the workflow when it is truthy — a field name such as subscribe, or arithmetic — and can\'t compare values, so the editor refuses path == "/pricing" and its like. To start a workflow only when a field matches, start it from an action with a condition and a Run a workflow step.'
8525
8532
  },
8526
8533
  {
8527
8534
  path: '/marketing-and-automation/workflows-and-actions/build-a-workflow',