[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-posthog-suppressing-noisy-errors":3,"mdc--rq7kfp-key":46,"related-repo-posthog-suppressing-noisy-errors":3320,"related-org-posthog-suppressing-noisy-errors":3420},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":41,"sourceUrl":44,"mdContent":45},"suppressing-noisy-errors","suppress noisy PostHog error tracking","Create PostHog error tracking suppression rules to drop high-volume, low-value errors at ingestion. Use when the user asks \"stop capturing this error\", \"drop browser extension errors\", \"ignore ResizeObserver loops\", \"suppress bot-driven errors\", or wants to reduce ingestion cost from noisy unactionable errors. Identifies suppression candidates, scopes the filter tightly, decides between full suppression and sampling, and confirms the rule before creating it. Suppressed errors are dropped permanently — this skill defaults to caution.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"posthog","PostHog","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fposthog.png",[12,16,17],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Debugging","debugging",35568,"https:\u002F\u002Fgithub.com\u002FPostHog\u002Fposthog","2026-07-31T05:51:57.566271",null,2977,[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"ab-testing","ai-analytics","analytics","cdp","data-warehouse","experiments","feature-flags","javascript","product-analytics","python","react","session-replay","surveys","typescript","web-analytics",{"repoUrl":21,"stars":20,"forks":24,"topics":42,"description":43},[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"🦔 PostHog is an all-in-one developer platform for building successful products. We offer product analytics, web analytics, session replay, error tracking, feature flags, experimentation, surveys, data warehouse, a CDP, and an AI product assistant to help debug your code, ship features faster, and keep all your usage and customer data in one stack.","https:\u002F\u002Fgithub.com\u002FPostHog\u002Fposthog\u002Ftree\u002FHEAD\u002Fproducts\u002Ferror_tracking\u002Fskills\u002Fsuppressing-noisy-errors","---\nname: suppressing-noisy-errors\ndescription: >\n  Create PostHog error tracking suppression rules to drop high-volume,\n  low-value errors at ingestion. Use when the user asks \"stop capturing\n  this error\", \"drop browser extension errors\", \"ignore ResizeObserver\n  loops\", \"suppress bot-driven errors\", or wants to reduce ingestion\n  cost from noisy unactionable errors. Identifies suppression\n  candidates, scopes the filter tightly, decides between full\n  suppression and sampling, and confirms the rule before creating it.\n  Suppressed errors are dropped permanently — this skill defaults to\n  caution.\n---\n\n# Suppressing noisy errors\n\nSuppression is destructive in spirit: matching events are dropped at ingestion and\nnever become issues. The wrong rule silently throws away real bugs. This skill\nexists to make sure suppression is applied only to patterns that are genuinely\nunactionable, with filters narrow enough to avoid swallowing unrelated errors.\n\n## When suppression is the right tool\n\nSuppression is the right tool when an error is:\n\n- **Unactionable from your code** — browser extensions, third-party scripts, ad\n  blockers, network beacons firing after navigation. You can't fix it because you\n  didn't write it.\n- **Browser engine quirks** — `ResizeObserver loop limit exceeded`,\n  `Script error.`, `Non-Error promise rejection captured` with empty payloads.\n- **Bot or crawler traffic** — errors firing only from headless browsers or known\n  crawler user agents.\n- **Sampling already enough** — for high-volume but real errors, dampen with\n  `sampling_rate` instead of full suppression so you keep visibility without\n  paying full cost.\n\nSuppression is **not** the right tool when:\n\n- The error is unactionable _today_ but might become actionable after a fix —\n  use issue status `archived` or `resolved` instead so it surfaces if it returns.\n- You only want to mute notifications — assign the issue to a user, change its\n  status, or use notification rules.\n- The error is a duplicate of another — merge or create a grouping rule\n  (`grouping-noisy-errors`).\n\n## Available tools\n\n| Tool                                              | Purpose                                                                                              |\n| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| `posthog:query-error-tracking-issues-list`        | Find suppression candidates by volume and impact; dry-run a candidate filter via `filterGroup`       |\n| `posthog:query-error-tracking-issue-events`       | Inspect sampled `$exception` events to confirm the pattern                                           |\n| `posthog:execute-sql`                             | Fallback dry-run for filters that need OR groups or operators outside the `filterGroup` allowed list |\n| `posthog:error-tracking-suppression-rules-list`   | Check existing suppression rules                                                                     |\n| `posthog:error-tracking-suppression-rules-create` | Create the suppression rule                                                                          |\n| `posthog:error-tracking-issues-partial-update`    | Hide past data via issue status without dropping events at ingestion                                 |\n\n## Workflow\n\n### Step 1 — Identify candidates\n\nHigh occurrences with low distinct users is the strongest noise signal — one\nuser (or one bot) producing many events.\n\n```json\nposthog:query-error-tracking-issues-list\n{\n  \"status\": \"active\",\n  \"orderBy\": \"occurrences\",\n  \"orderDirection\": \"DESC\",\n  \"dateRange\": { \"date_from\": \"-7d\" },\n  \"limit\": 30,\n  \"volumeResolution\": 0\n}\n```\n\nLook for:\n\n- High `occurrences`, low `users` ratio (e.g., 50,000 occurrences, 3 users → likely\n  bot or extension loop)\n- Exception messages matching known noise patterns: `ResizeObserver loop`,\n  `Script error.`, extension namespaces (`chrome-extension:\u002F\u002F`,\n  `moz-extension:\u002F\u002F`, `safari-extension:\u002F\u002F`)\n- Stack traces dominated by third-party domains the user doesn't control\n\n### Step 2 — Confirm the pattern\n\nFor each candidate, pull a sample of `$exception` events and check that the\npattern matches what you intend to suppress:\n\n```json\nposthog:query-error-tracking-issue-events\n{\n  \"issueId\": \"\u003Ccandidate_issue_id>\",\n  \"limit\": 10,\n  \"include\": [\"exception\", \"stacktrace\", \"environment\", \"navigation\"]\n}\n```\n\n`onlyAppFrames` defaults to `true`, but for noise investigation you usually\nwant the third-party frames visible — pass `onlyAppFrames: false` so extension\nURLs and vendor domains show up in the stack.\n\nConfirm:\n\n- The exception type or message text is consistent across the sample\n- The URLs \u002F user agents \u002F browsers don't include real user traffic mixed in with\n  the noise\n- Suppressing this pattern won't hide a future real bug that happens to share\n  the type\n\nIf any sample doesn't match, narrow the filter or skip the candidate.\n\n### Step 3 — Scope the filter tightly\n\nSuppression rules are configured with the same filter shape as grouping rules.\nThe `error-tracking-suppression-rules-create` tool description warns explicitly:\ndo **not** create match-all rules and do **not** create overly broad rules.\nMatch on the most specific property combination you can:\n\n| Noise pattern                       | Recommended filter                                                                                                                          |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |\n| Chrome extension errors             | `$exception_sources icontains \"chrome-extension:\u002F\u002F\"`                                                                                        |\n| Firefox extension errors            | `$exception_sources icontains \"moz-extension:\u002F\u002F\"`                                                                                           |\n| Safari extension errors             | `$exception_sources icontains \"safari-extension:\u002F\u002F\"`                                                                                        |\n| ResizeObserver loop                 | `$exception_values icontains \"ResizeObserver loop\"` (the message is specific; a type filter is optional)                                    |\n| Cross-origin \"Script error.\"        | `$exception_values icontains \"Script error.\"` AND `$exception_types exact \"Error\"`                                                          |\n| Bot user agents                     | `$raw_user_agent regex \"(?i)bot\"` for a single term; see the alternation pattern below for matching several bot\u002Fcrawler markers in one rule |\n| Third-party network beacon failures | `$exception_sources icontains \"\u003Cvendor-domain>\"` AND a type filter (e.g. `$exception_types exact \"TypeError\"`)                              |\n\nThe canonical exception properties (`$exception_types`, `$exception_values`,\n`$exception_sources`, `$exception_functions`) are arrays at capture time.\nPostHog's property filters special-case them — each filter matches against\nthe individual array elements, so all the standard operators (`exact`,\n`is_not`, `icontains`, `not_icontains`, `regex`, `not_regex`) work with the\nbare value: `exact \"TypeError\"`, not `exact '[\"TypeError\"]'` or\n`regex '\"TypeError\"'`.\n\nThe singular forms (`$exception_type`, `$exception_message`) and\n`$exception_stack_trace_raw` are emitted on a fraction of a percent of events;\nfiltering on them produces a rule that silently never matches.\n\nNote that the `regex` operator on suppression and grouping rules compiles to\nthe HogVM `Operation::Regex`, which is **case-sensitive**. Use the `(?i)`\ninline flag for case-insensitive matching (e.g. `(?i)headlesschrome`).\n\nFor matching multiple bot or crawler terms, use bare pipes for alternation.\nPass this as the `value` field of the regex filter when calling the API\n(`$raw_user_agent` is more reliable than the parsed `$user_agent`, which some\nparsers normalize away from crawler markers):\n\n```text\n(?i)(HeadlessChrome|bot|crawler|spider)\n```\n\nWhenever possible, AND together two or more conditions — type plus message, or\nmessage plus URL pattern — so the rule is specific to the real noise.\n\n### Step 4 — Decide: suppress or sample\n\nIf you want to keep some visibility, use `sampling_rate` between 0 and 1:\n\n- `sampling_rate: 1` — drop everything matching (full suppression)\n- `sampling_rate: 0.95` — drop 95% of matching events, keep 5% as sentinel data\n- `sampling_rate: 0.5` — half-rate, useful for high-volume but real errors\n\nDefault to a non-1.0 sampling rate when there's any doubt that the pattern is\npurely noise. You can tighten to 1.0 later once the data shows the rule isn't\ncatching real issues.\n\n### Step 5 — Dry-run the filter against live data\n\nBefore asking for confirmation, run the candidate filter against the issues\nlist so you (and the user) can see exactly which issues the rule would have\ncaught over the last 7 days. `query-error-tracking-issues-list` accepts the\nsame property-filter shape suppression rules use via its `filterGroup`\nparameter, so for a typical AND-only rule you can pass the rule's leaf\nfilters directly — no HogQL translation needed:\n\n```json\nposthog:query-error-tracking-issues-list\n{\n  \"filterGroup\": [\n    { \"type\": \"event\", \"key\": \"$exception_types\", \"operator\": \"exact\", \"value\": \"Error\" },\n    { \"type\": \"event\", \"key\": \"$exception_values\", \"operator\": \"icontains\", \"value\": \"ResizeObserver loop\" }\n  ],\n  \"dateRange\": { \"date_from\": \"-7d\" },\n  \"status\": \"all\",\n  \"filterTestAccounts\": false,\n  \"orderBy\": \"occurrences\",\n  \"limit\": 25\n}\n```\n\nImportant defaults to override for suppression preview:\n\n- `status: \"all\"` — suppression applies regardless of issue status, so don't\n  let the default `active` filter hide already-archived noise.\n- `filterTestAccounts: false` — the rule will not respect the test-account\n  toggle at ingestion. The preview should match production reality.\n\nEach row is one issue the rule would catch: `name` (exception type),\n`description` (sample message), `source`, `library`, plus\n`aggregations.occurrences` and `aggregations.users`. The issue list **is**\nthe per-issue breakdown — read every row.\n\n**The single most important safety check**: scan the result for any issue\nwhose `name` \u002F `description` \u002F `source` looks like a real bug the team\nwould want to fix, not noise. A filter that looks tight by message text\nwill routinely match unrelated issues that happen to share a phrase, and\nthis is the failure mode that silently destroys real data once the rule is\nlive. If you see anything suspicious, narrow the filter (step 3) and rerun\nthis step until only the genuine noise pattern is in the list.\n\nAdd up `aggregations.occurrences` and `aggregations.users` across rows for\nthe blast-radius totals you'll surface to the user in step 6. If you need\nexact totals across more than `limit` issues, paginate with `offset` or\nfall back to the HogQL aggregate at the end of this step.\n\nFor one or two concrete sample events with full stack traces, follow up on\nthe most suspicious-looking issue with `query-error-tracking-issue-events`:\n\n```json\nposthog:query-error-tracking-issue-events\n{\n  \"issueId\": \"\u003Cid from the list>\",\n  \"limit\": 3,\n  \"include\": [\"exception\", \"stacktrace\", \"environment\", \"navigation\"],\n  \"onlyAppFrames\": false\n}\n```\n\n#### When you must fall back to execute-sql\n\n`filterGroup` is **flat AND only**. Drop into HogQL when:\n\n- The rule uses `type: \"OR\"` at the outer group or any nested OR.\n- The rule uses operators not supported by `filterGroup` (e.g. `between`,\n  `in`, `semver_*`).\n- You want a precise event-level count rather than per-issue aggregates.\n\nThe HogQL shape mirrors what the suppression rule bytecode compiles to.\nThe materialized property column is nullable, so the `coalesce(..., '[]')`\nwrapper is required — without it ClickHouse rejects the query with\n\"Nested type Array(String) cannot be inside Nullable type\":\n\n```sql\nSELECT\n  count() AS matched,\n  count(DISTINCT distinct_id) AS users,\n  count(DISTINCT properties.$exception_issue_id) AS issues\nFROM events\nWHERE event = '$exception'\n  AND timestamp > now() - INTERVAL 7 DAY\n  AND arrayExists(\n    v -> ifNull(ilike(v, '\u003Cpattern>'), 0),\n    JSONExtract(coalesce(properties.$exception_values, '[]'), 'Array(String)')\n  )\n```\n\nUse `ilike` for `icontains`, plain equality for `exact`, `match(v,\n'\u003Cpattern>')` for `regex`. The rule's `regex` is case-sensitive — add\n`(?i)` inline if needed.\n\n### Step 6 — Confirm with the user before creating\n\nSuppression is destructive in spirit even though the API marks it\n`destructive: false`. Show the user before creating:\n\n1. The exact filter you plan to send\n2. The list of issues from step 5 with their `occurrences` and `users`,\n   plus the aggregate totals — call out any rows that look like real bugs\n3. Whether it overlaps any existing suppression rules\n   (`posthog:error-tracking-suppression-rules-list` first)\n\nWait for explicit confirmation. Then create:\n\n```json\nposthog:error-tracking-suppression-rules-create\n{\n  \"filters\": {\n    \"type\": \"AND\",\n    \"values\": [\n      {\n        \"type\": \"event\",\n        \"key\": \"$exception_types\",\n        \"operator\": \"exact\",\n        \"value\": \"Error\"\n      },\n      {\n        \"type\": \"event\",\n        \"key\": \"$exception_values\",\n        \"operator\": \"icontains\",\n        \"value\": \"ResizeObserver loop\"\n      }\n    ]\n  },\n  \"sampling_rate\": 0.95\n}\n```\n\nStart at `0.95` (drop 95%, keep 5% as sentinel data) so you can confirm the\nrule isn't catching real errors before tightening to `1.0`.\n\n### Step 7 — Watch the rule for 24-48h\n\nAfter creating the rule:\n\n- Confirm matching events are no longer being captured by running the same\n  filter against a short window scoped to **after** the rule was created\n  (e.g. `WHERE timestamp > now() - INTERVAL 1 HOUR` once an hour has passed).\n  Don't re-run the 7-day estimate from step 5 — suppression only applies to\n  new events, so historical events in the window will still be there and the\n  count won't drop.\n- Watch related active issues over the post-creation window — if their volume\n  drops while non-related issues hold steady, the rule was scoped correctly\n- If a related real issue's volume drops too (false-positive), ask the user to\n  disable the rule via **Project settings → Error tracking → Suppression rules**\n  immediately and tighten the filter before re-creating it. The MCP tools to\n  edit or delete a rule (`error-tracking-suppression-rules-partial-update`,\n  `-destroy`) are not enabled — the agent has no way to recover programmatically.\n\nIf you see signs of false positives (a real issue going quiet at the same time\nthe rule was created), prefer disabling the rule over deleting it — that\npreserves the rule's configuration for forensic review.\n\n## Tips\n\n- Project settings → Error tracking → Suppression rules shows the same data;\n  mention this when the user asks where rules live in the UI.\n- Suppression applies at ingestion. Existing issues from past events keep their\n  data; only new events are dropped.\n- For a status-only change (don't drop the data, just hide it from the active\n  list), prefer `error-tracking-issues-partial-update` with `status: \"suppressed\"`\n  over a suppression rule.\n- The schema explicitly warns the model not to create match-all rules. If the\n  user asks \"suppress everything from extensions\", still scope by stack trace or\n  URL — never leave `filters` empty.\n- A suppression rule that turns out to be too narrow is harmless (some noise\n  leaks through). A rule that's too broad silently destroys real data — bias\n  toward narrow.\n",{"data":47,"body":48},{"name":4,"description":6},{"type":49,"children":50},"root",[51,59,65,72,77,156,168,218,224,375,381,388,393,674,679,748,754,766,955,982,987,1005,1010,1016,1041,1202,1303,1331,1373,1402,1412,1417,1423,1435,1471,1476,1482,1502,2017,2022,2054,2113,2143,2176,2188,2392,2399,2416,2470,2483,2580,2634,2640,2653,2692,2697,3166,3186,3192,3197,3252,3257,3263,3314],{"type":52,"tag":53,"props":54,"children":55},"element","h1",{"id":4},[56],{"type":57,"value":58},"text","Suppressing noisy errors",{"type":52,"tag":60,"props":61,"children":62},"p",{},[63],{"type":57,"value":64},"Suppression is destructive in spirit: matching events are dropped at ingestion and\nnever become issues. The wrong rule silently throws away real bugs. This skill\nexists to make sure suppression is applied only to patterns that are genuinely\nunactionable, with filters narrow enough to avoid swallowing unrelated errors.",{"type":52,"tag":66,"props":67,"children":69},"h2",{"id":68},"when-suppression-is-the-right-tool",[70],{"type":57,"value":71},"When suppression is the right tool",{"type":52,"tag":60,"props":73,"children":74},{},[75],{"type":57,"value":76},"Suppression is the right tool when an error is:",{"type":52,"tag":78,"props":79,"children":80},"ul",{},[81,93,128,138],{"type":52,"tag":82,"props":83,"children":84},"li",{},[85,91],{"type":52,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":57,"value":90},"Unactionable from your code",{"type":57,"value":92}," — browser extensions, third-party scripts, ad\nblockers, network beacons firing after navigation. You can't fix it because you\ndidn't write it.",{"type":52,"tag":82,"props":94,"children":95},{},[96,101,103,110,112,118,120,126],{"type":52,"tag":86,"props":97,"children":98},{},[99],{"type":57,"value":100},"Browser engine quirks",{"type":57,"value":102}," — ",{"type":52,"tag":104,"props":105,"children":107},"code",{"className":106},[],[108],{"type":57,"value":109},"ResizeObserver loop limit exceeded",{"type":57,"value":111},",\n",{"type":52,"tag":104,"props":113,"children":115},{"className":114},[],[116],{"type":57,"value":117},"Script error.",{"type":57,"value":119},", ",{"type":52,"tag":104,"props":121,"children":123},{"className":122},[],[124],{"type":57,"value":125},"Non-Error promise rejection captured",{"type":57,"value":127}," with empty payloads.",{"type":52,"tag":82,"props":129,"children":130},{},[131,136],{"type":52,"tag":86,"props":132,"children":133},{},[134],{"type":57,"value":135},"Bot or crawler traffic",{"type":57,"value":137}," — errors firing only from headless browsers or known\ncrawler user agents.",{"type":52,"tag":82,"props":139,"children":140},{},[141,146,148,154],{"type":52,"tag":86,"props":142,"children":143},{},[144],{"type":57,"value":145},"Sampling already enough",{"type":57,"value":147}," — for high-volume but real errors, dampen with\n",{"type":52,"tag":104,"props":149,"children":151},{"className":150},[],[152],{"type":57,"value":153},"sampling_rate",{"type":57,"value":155}," instead of full suppression so you keep visibility without\npaying full cost.",{"type":52,"tag":60,"props":157,"children":158},{},[159,161,166],{"type":57,"value":160},"Suppression is ",{"type":52,"tag":86,"props":162,"children":163},{},[164],{"type":57,"value":165},"not",{"type":57,"value":167}," the right tool when:",{"type":52,"tag":78,"props":169,"children":170},{},[171,200,205],{"type":52,"tag":82,"props":172,"children":173},{},[174,176,182,184,190,192,198],{"type":57,"value":175},"The error is unactionable ",{"type":52,"tag":177,"props":178,"children":179},"em",{},[180],{"type":57,"value":181},"today",{"type":57,"value":183}," but might become actionable after a fix —\nuse issue status ",{"type":52,"tag":104,"props":185,"children":187},{"className":186},[],[188],{"type":57,"value":189},"archived",{"type":57,"value":191}," or ",{"type":52,"tag":104,"props":193,"children":195},{"className":194},[],[196],{"type":57,"value":197},"resolved",{"type":57,"value":199}," instead so it surfaces if it returns.",{"type":52,"tag":82,"props":201,"children":202},{},[203],{"type":57,"value":204},"You only want to mute notifications — assign the issue to a user, change its\nstatus, or use notification rules.",{"type":52,"tag":82,"props":206,"children":207},{},[208,210,216],{"type":57,"value":209},"The error is a duplicate of another — merge or create a grouping rule\n(",{"type":52,"tag":104,"props":211,"children":213},{"className":212},[],[214],{"type":57,"value":215},"grouping-noisy-errors",{"type":57,"value":217},").",{"type":52,"tag":66,"props":219,"children":221},{"id":220},"available-tools",[222],{"type":57,"value":223},"Available tools",{"type":52,"tag":225,"props":226,"children":227},"table",{},[228,247],{"type":52,"tag":229,"props":230,"children":231},"thead",{},[232],{"type":52,"tag":233,"props":234,"children":235},"tr",{},[236,242],{"type":52,"tag":237,"props":238,"children":239},"th",{},[240],{"type":57,"value":241},"Tool",{"type":52,"tag":237,"props":243,"children":244},{},[245],{"type":57,"value":246},"Purpose",{"type":52,"tag":248,"props":249,"children":250},"tbody",{},[251,275,300,324,341,358],{"type":52,"tag":233,"props":252,"children":253},{},[254,264],{"type":52,"tag":255,"props":256,"children":257},"td",{},[258],{"type":52,"tag":104,"props":259,"children":261},{"className":260},[],[262],{"type":57,"value":263},"posthog:query-error-tracking-issues-list",{"type":52,"tag":255,"props":265,"children":266},{},[267,269],{"type":57,"value":268},"Find suppression candidates by volume and impact; dry-run a candidate filter via ",{"type":52,"tag":104,"props":270,"children":272},{"className":271},[],[273],{"type":57,"value":274},"filterGroup",{"type":52,"tag":233,"props":276,"children":277},{},[278,287],{"type":52,"tag":255,"props":279,"children":280},{},[281],{"type":52,"tag":104,"props":282,"children":284},{"className":283},[],[285],{"type":57,"value":286},"posthog:query-error-tracking-issue-events",{"type":52,"tag":255,"props":288,"children":289},{},[290,292,298],{"type":57,"value":291},"Inspect sampled ",{"type":52,"tag":104,"props":293,"children":295},{"className":294},[],[296],{"type":57,"value":297},"$exception",{"type":57,"value":299}," events to confirm the pattern",{"type":52,"tag":233,"props":301,"children":302},{},[303,312],{"type":52,"tag":255,"props":304,"children":305},{},[306],{"type":52,"tag":104,"props":307,"children":309},{"className":308},[],[310],{"type":57,"value":311},"posthog:execute-sql",{"type":52,"tag":255,"props":313,"children":314},{},[315,317,322],{"type":57,"value":316},"Fallback dry-run for filters that need OR groups or operators outside the ",{"type":52,"tag":104,"props":318,"children":320},{"className":319},[],[321],{"type":57,"value":274},{"type":57,"value":323}," allowed list",{"type":52,"tag":233,"props":325,"children":326},{},[327,336],{"type":52,"tag":255,"props":328,"children":329},{},[330],{"type":52,"tag":104,"props":331,"children":333},{"className":332},[],[334],{"type":57,"value":335},"posthog:error-tracking-suppression-rules-list",{"type":52,"tag":255,"props":337,"children":338},{},[339],{"type":57,"value":340},"Check existing suppression rules",{"type":52,"tag":233,"props":342,"children":343},{},[344,353],{"type":52,"tag":255,"props":345,"children":346},{},[347],{"type":52,"tag":104,"props":348,"children":350},{"className":349},[],[351],{"type":57,"value":352},"posthog:error-tracking-suppression-rules-create",{"type":52,"tag":255,"props":354,"children":355},{},[356],{"type":57,"value":357},"Create the suppression rule",{"type":52,"tag":233,"props":359,"children":360},{},[361,370],{"type":52,"tag":255,"props":362,"children":363},{},[364],{"type":52,"tag":104,"props":365,"children":367},{"className":366},[],[368],{"type":57,"value":369},"posthog:error-tracking-issues-partial-update",{"type":52,"tag":255,"props":371,"children":372},{},[373],{"type":57,"value":374},"Hide past data via issue status without dropping events at ingestion",{"type":52,"tag":66,"props":376,"children":378},{"id":377},"workflow",[379],{"type":57,"value":380},"Workflow",{"type":52,"tag":382,"props":383,"children":385},"h3",{"id":384},"step-1-identify-candidates",[386],{"type":57,"value":387},"Step 1 — Identify candidates",{"type":52,"tag":60,"props":389,"children":390},{},[391],{"type":57,"value":392},"High occurrences with low distinct users is the strongest noise signal — one\nuser (or one bot) producing many events.",{"type":52,"tag":394,"props":395,"children":400},"pre",{"className":396,"code":397,"language":398,"meta":399,"style":399},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","posthog:query-error-tracking-issues-list\n{\n  \"status\": \"active\",\n  \"orderBy\": \"occurrences\",\n  \"orderDirection\": \"DESC\",\n  \"dateRange\": { \"date_from\": \"-7d\" },\n  \"limit\": 30,\n  \"volumeResolution\": 0\n}\n","json","",[401],{"type":52,"tag":104,"props":402,"children":403},{"__ignoreMap":399},[404,416,426,470,508,546,608,639,665],{"type":52,"tag":405,"props":406,"children":409},"span",{"class":407,"line":408},"line",1,[410],{"type":52,"tag":405,"props":411,"children":413},{"style":412},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[414],{"type":57,"value":415},"posthog:query-error-tracking-issues-list\n",{"type":52,"tag":405,"props":417,"children":419},{"class":407,"line":418},2,[420],{"type":52,"tag":405,"props":421,"children":423},{"style":422},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[424],{"type":57,"value":425},"{\n",{"type":52,"tag":405,"props":427,"children":429},{"class":407,"line":428},3,[430,435,441,446,451,456,462,466],{"type":52,"tag":405,"props":431,"children":432},{"style":422},[433],{"type":57,"value":434},"  \"",{"type":52,"tag":405,"props":436,"children":438},{"style":437},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[439],{"type":57,"value":440},"status",{"type":52,"tag":405,"props":442,"children":443},{"style":422},[444],{"type":57,"value":445},"\"",{"type":52,"tag":405,"props":447,"children":448},{"style":422},[449],{"type":57,"value":450},":",{"type":52,"tag":405,"props":452,"children":453},{"style":422},[454],{"type":57,"value":455}," \"",{"type":52,"tag":405,"props":457,"children":459},{"style":458},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[460],{"type":57,"value":461},"active",{"type":52,"tag":405,"props":463,"children":464},{"style":422},[465],{"type":57,"value":445},{"type":52,"tag":405,"props":467,"children":468},{"style":422},[469],{"type":57,"value":111},{"type":52,"tag":405,"props":471,"children":473},{"class":407,"line":472},4,[474,478,483,487,491,495,500,504],{"type":52,"tag":405,"props":475,"children":476},{"style":422},[477],{"type":57,"value":434},{"type":52,"tag":405,"props":479,"children":480},{"style":437},[481],{"type":57,"value":482},"orderBy",{"type":52,"tag":405,"props":484,"children":485},{"style":422},[486],{"type":57,"value":445},{"type":52,"tag":405,"props":488,"children":489},{"style":422},[490],{"type":57,"value":450},{"type":52,"tag":405,"props":492,"children":493},{"style":422},[494],{"type":57,"value":455},{"type":52,"tag":405,"props":496,"children":497},{"style":458},[498],{"type":57,"value":499},"occurrences",{"type":52,"tag":405,"props":501,"children":502},{"style":422},[503],{"type":57,"value":445},{"type":52,"tag":405,"props":505,"children":506},{"style":422},[507],{"type":57,"value":111},{"type":52,"tag":405,"props":509,"children":511},{"class":407,"line":510},5,[512,516,521,525,529,533,538,542],{"type":52,"tag":405,"props":513,"children":514},{"style":422},[515],{"type":57,"value":434},{"type":52,"tag":405,"props":517,"children":518},{"style":437},[519],{"type":57,"value":520},"orderDirection",{"type":52,"tag":405,"props":522,"children":523},{"style":422},[524],{"type":57,"value":445},{"type":52,"tag":405,"props":526,"children":527},{"style":422},[528],{"type":57,"value":450},{"type":52,"tag":405,"props":530,"children":531},{"style":422},[532],{"type":57,"value":455},{"type":52,"tag":405,"props":534,"children":535},{"style":458},[536],{"type":57,"value":537},"DESC",{"type":52,"tag":405,"props":539,"children":540},{"style":422},[541],{"type":57,"value":445},{"type":52,"tag":405,"props":543,"children":544},{"style":422},[545],{"type":57,"value":111},{"type":52,"tag":405,"props":547,"children":549},{"class":407,"line":548},6,[550,554,559,563,567,572,576,582,586,590,594,599,603],{"type":52,"tag":405,"props":551,"children":552},{"style":422},[553],{"type":57,"value":434},{"type":52,"tag":405,"props":555,"children":556},{"style":437},[557],{"type":57,"value":558},"dateRange",{"type":52,"tag":405,"props":560,"children":561},{"style":422},[562],{"type":57,"value":445},{"type":52,"tag":405,"props":564,"children":565},{"style":422},[566],{"type":57,"value":450},{"type":52,"tag":405,"props":568,"children":569},{"style":422},[570],{"type":57,"value":571}," {",{"type":52,"tag":405,"props":573,"children":574},{"style":422},[575],{"type":57,"value":455},{"type":52,"tag":405,"props":577,"children":579},{"style":578},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[580],{"type":57,"value":581},"date_from",{"type":52,"tag":405,"props":583,"children":584},{"style":422},[585],{"type":57,"value":445},{"type":52,"tag":405,"props":587,"children":588},{"style":422},[589],{"type":57,"value":450},{"type":52,"tag":405,"props":591,"children":592},{"style":422},[593],{"type":57,"value":455},{"type":52,"tag":405,"props":595,"children":596},{"style":458},[597],{"type":57,"value":598},"-7d",{"type":52,"tag":405,"props":600,"children":601},{"style":422},[602],{"type":57,"value":445},{"type":52,"tag":405,"props":604,"children":605},{"style":422},[606],{"type":57,"value":607}," },\n",{"type":52,"tag":405,"props":609,"children":611},{"class":407,"line":610},7,[612,616,621,625,629,635],{"type":52,"tag":405,"props":613,"children":614},{"style":422},[615],{"type":57,"value":434},{"type":52,"tag":405,"props":617,"children":618},{"style":437},[619],{"type":57,"value":620},"limit",{"type":52,"tag":405,"props":622,"children":623},{"style":422},[624],{"type":57,"value":445},{"type":52,"tag":405,"props":626,"children":627},{"style":422},[628],{"type":57,"value":450},{"type":52,"tag":405,"props":630,"children":632},{"style":631},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[633],{"type":57,"value":634}," 30",{"type":52,"tag":405,"props":636,"children":637},{"style":422},[638],{"type":57,"value":111},{"type":52,"tag":405,"props":640,"children":642},{"class":407,"line":641},8,[643,647,652,656,660],{"type":52,"tag":405,"props":644,"children":645},{"style":422},[646],{"type":57,"value":434},{"type":52,"tag":405,"props":648,"children":649},{"style":437},[650],{"type":57,"value":651},"volumeResolution",{"type":52,"tag":405,"props":653,"children":654},{"style":422},[655],{"type":57,"value":445},{"type":52,"tag":405,"props":657,"children":658},{"style":422},[659],{"type":57,"value":450},{"type":52,"tag":405,"props":661,"children":662},{"style":631},[663],{"type":57,"value":664}," 0\n",{"type":52,"tag":405,"props":666,"children":668},{"class":407,"line":667},9,[669],{"type":52,"tag":405,"props":670,"children":671},{"style":422},[672],{"type":57,"value":673},"}\n",{"type":52,"tag":60,"props":675,"children":676},{},[677],{"type":57,"value":678},"Look for:",{"type":52,"tag":78,"props":680,"children":681},{},[682,702,743],{"type":52,"tag":82,"props":683,"children":684},{},[685,687,692,694,700],{"type":57,"value":686},"High ",{"type":52,"tag":104,"props":688,"children":690},{"className":689},[],[691],{"type":57,"value":499},{"type":57,"value":693},", low ",{"type":52,"tag":104,"props":695,"children":697},{"className":696},[],[698],{"type":57,"value":699},"users",{"type":57,"value":701}," ratio (e.g., 50,000 occurrences, 3 users → likely\nbot or extension loop)",{"type":52,"tag":82,"props":703,"children":704},{},[705,707,713,714,719,721,727,728,734,735,741],{"type":57,"value":706},"Exception messages matching known noise patterns: ",{"type":52,"tag":104,"props":708,"children":710},{"className":709},[],[711],{"type":57,"value":712},"ResizeObserver loop",{"type":57,"value":111},{"type":52,"tag":104,"props":715,"children":717},{"className":716},[],[718],{"type":57,"value":117},{"type":57,"value":720},", extension namespaces (",{"type":52,"tag":104,"props":722,"children":724},{"className":723},[],[725],{"type":57,"value":726},"chrome-extension:\u002F\u002F",{"type":57,"value":111},{"type":52,"tag":104,"props":729,"children":731},{"className":730},[],[732],{"type":57,"value":733},"moz-extension:\u002F\u002F",{"type":57,"value":119},{"type":52,"tag":104,"props":736,"children":738},{"className":737},[],[739],{"type":57,"value":740},"safari-extension:\u002F\u002F",{"type":57,"value":742},")",{"type":52,"tag":82,"props":744,"children":745},{},[746],{"type":57,"value":747},"Stack traces dominated by third-party domains the user doesn't control",{"type":52,"tag":382,"props":749,"children":751},{"id":750},"step-2-confirm-the-pattern",[752],{"type":57,"value":753},"Step 2 — Confirm the pattern",{"type":52,"tag":60,"props":755,"children":756},{},[757,759,764],{"type":57,"value":758},"For each candidate, pull a sample of ",{"type":52,"tag":104,"props":760,"children":762},{"className":761},[],[763],{"type":57,"value":297},{"type":57,"value":765}," events and check that the\npattern matches what you intend to suppress:",{"type":52,"tag":394,"props":767,"children":769},{"className":396,"code":768,"language":398,"meta":399,"style":399},"posthog:query-error-tracking-issue-events\n{\n  \"issueId\": \"\u003Ccandidate_issue_id>\",\n  \"limit\": 10,\n  \"include\": [\"exception\", \"stacktrace\", \"environment\", \"navigation\"]\n}\n",[770],{"type":52,"tag":104,"props":771,"children":772},{"__ignoreMap":399},[773,781,788,825,853,948],{"type":52,"tag":405,"props":774,"children":775},{"class":407,"line":408},[776],{"type":52,"tag":405,"props":777,"children":778},{"style":412},[779],{"type":57,"value":780},"posthog:query-error-tracking-issue-events\n",{"type":52,"tag":405,"props":782,"children":783},{"class":407,"line":418},[784],{"type":52,"tag":405,"props":785,"children":786},{"style":422},[787],{"type":57,"value":425},{"type":52,"tag":405,"props":789,"children":790},{"class":407,"line":428},[791,795,800,804,808,812,817,821],{"type":52,"tag":405,"props":792,"children":793},{"style":422},[794],{"type":57,"value":434},{"type":52,"tag":405,"props":796,"children":797},{"style":437},[798],{"type":57,"value":799},"issueId",{"type":52,"tag":405,"props":801,"children":802},{"style":422},[803],{"type":57,"value":445},{"type":52,"tag":405,"props":805,"children":806},{"style":422},[807],{"type":57,"value":450},{"type":52,"tag":405,"props":809,"children":810},{"style":422},[811],{"type":57,"value":455},{"type":52,"tag":405,"props":813,"children":814},{"style":458},[815],{"type":57,"value":816},"\u003Ccandidate_issue_id>",{"type":52,"tag":405,"props":818,"children":819},{"style":422},[820],{"type":57,"value":445},{"type":52,"tag":405,"props":822,"children":823},{"style":422},[824],{"type":57,"value":111},{"type":52,"tag":405,"props":826,"children":827},{"class":407,"line":472},[828,832,836,840,844,849],{"type":52,"tag":405,"props":829,"children":830},{"style":422},[831],{"type":57,"value":434},{"type":52,"tag":405,"props":833,"children":834},{"style":437},[835],{"type":57,"value":620},{"type":52,"tag":405,"props":837,"children":838},{"style":422},[839],{"type":57,"value":445},{"type":52,"tag":405,"props":841,"children":842},{"style":422},[843],{"type":57,"value":450},{"type":52,"tag":405,"props":845,"children":846},{"style":631},[847],{"type":57,"value":848}," 10",{"type":52,"tag":405,"props":850,"children":851},{"style":422},[852],{"type":57,"value":111},{"type":52,"tag":405,"props":854,"children":855},{"class":407,"line":510},[856,860,865,869,873,878,882,887,891,896,900,905,909,913,917,922,926,930,934,939,943],{"type":52,"tag":405,"props":857,"children":858},{"style":422},[859],{"type":57,"value":434},{"type":52,"tag":405,"props":861,"children":862},{"style":437},[863],{"type":57,"value":864},"include",{"type":52,"tag":405,"props":866,"children":867},{"style":422},[868],{"type":57,"value":445},{"type":52,"tag":405,"props":870,"children":871},{"style":422},[872],{"type":57,"value":450},{"type":52,"tag":405,"props":874,"children":875},{"style":422},[876],{"type":57,"value":877}," [",{"type":52,"tag":405,"props":879,"children":880},{"style":422},[881],{"type":57,"value":445},{"type":52,"tag":405,"props":883,"children":884},{"style":458},[885],{"type":57,"value":886},"exception",{"type":52,"tag":405,"props":888,"children":889},{"style":422},[890],{"type":57,"value":445},{"type":52,"tag":405,"props":892,"children":893},{"style":422},[894],{"type":57,"value":895},",",{"type":52,"tag":405,"props":897,"children":898},{"style":422},[899],{"type":57,"value":455},{"type":52,"tag":405,"props":901,"children":902},{"style":458},[903],{"type":57,"value":904},"stacktrace",{"type":52,"tag":405,"props":906,"children":907},{"style":422},[908],{"type":57,"value":445},{"type":52,"tag":405,"props":910,"children":911},{"style":422},[912],{"type":57,"value":895},{"type":52,"tag":405,"props":914,"children":915},{"style":422},[916],{"type":57,"value":455},{"type":52,"tag":405,"props":918,"children":919},{"style":458},[920],{"type":57,"value":921},"environment",{"type":52,"tag":405,"props":923,"children":924},{"style":422},[925],{"type":57,"value":445},{"type":52,"tag":405,"props":927,"children":928},{"style":422},[929],{"type":57,"value":895},{"type":52,"tag":405,"props":931,"children":932},{"style":422},[933],{"type":57,"value":455},{"type":52,"tag":405,"props":935,"children":936},{"style":458},[937],{"type":57,"value":938},"navigation",{"type":52,"tag":405,"props":940,"children":941},{"style":422},[942],{"type":57,"value":445},{"type":52,"tag":405,"props":944,"children":945},{"style":422},[946],{"type":57,"value":947},"]\n",{"type":52,"tag":405,"props":949,"children":950},{"class":407,"line":548},[951],{"type":52,"tag":405,"props":952,"children":953},{"style":422},[954],{"type":57,"value":673},{"type":52,"tag":60,"props":956,"children":957},{},[958,964,966,972,974,980],{"type":52,"tag":104,"props":959,"children":961},{"className":960},[],[962],{"type":57,"value":963},"onlyAppFrames",{"type":57,"value":965}," defaults to ",{"type":52,"tag":104,"props":967,"children":969},{"className":968},[],[970],{"type":57,"value":971},"true",{"type":57,"value":973},", but for noise investigation you usually\nwant the third-party frames visible — pass ",{"type":52,"tag":104,"props":975,"children":977},{"className":976},[],[978],{"type":57,"value":979},"onlyAppFrames: false",{"type":57,"value":981}," so extension\nURLs and vendor domains show up in the stack.",{"type":52,"tag":60,"props":983,"children":984},{},[985],{"type":57,"value":986},"Confirm:",{"type":52,"tag":78,"props":988,"children":989},{},[990,995,1000],{"type":52,"tag":82,"props":991,"children":992},{},[993],{"type":57,"value":994},"The exception type or message text is consistent across the sample",{"type":52,"tag":82,"props":996,"children":997},{},[998],{"type":57,"value":999},"The URLs \u002F user agents \u002F browsers don't include real user traffic mixed in with\nthe noise",{"type":52,"tag":82,"props":1001,"children":1002},{},[1003],{"type":57,"value":1004},"Suppressing this pattern won't hide a future real bug that happens to share\nthe type",{"type":52,"tag":60,"props":1006,"children":1007},{},[1008],{"type":57,"value":1009},"If any sample doesn't match, narrow the filter or skip the candidate.",{"type":52,"tag":382,"props":1011,"children":1013},{"id":1012},"step-3-scope-the-filter-tightly",[1014],{"type":57,"value":1015},"Step 3 — Scope the filter tightly",{"type":52,"tag":60,"props":1017,"children":1018},{},[1019,1021,1027,1029,1033,1035,1039],{"type":57,"value":1020},"Suppression rules are configured with the same filter shape as grouping rules.\nThe ",{"type":52,"tag":104,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":57,"value":1026},"error-tracking-suppression-rules-create",{"type":57,"value":1028}," tool description warns explicitly:\ndo ",{"type":52,"tag":86,"props":1030,"children":1031},{},[1032],{"type":57,"value":165},{"type":57,"value":1034}," create match-all rules and do ",{"type":52,"tag":86,"props":1036,"children":1037},{},[1038],{"type":57,"value":165},{"type":57,"value":1040}," create overly broad rules.\nMatch on the most specific property combination you can:",{"type":52,"tag":225,"props":1042,"children":1043},{},[1044,1060],{"type":52,"tag":229,"props":1045,"children":1046},{},[1047],{"type":52,"tag":233,"props":1048,"children":1049},{},[1050,1055],{"type":52,"tag":237,"props":1051,"children":1052},{},[1053],{"type":57,"value":1054},"Noise pattern",{"type":52,"tag":237,"props":1056,"children":1057},{},[1058],{"type":57,"value":1059},"Recommended filter",{"type":52,"tag":248,"props":1061,"children":1062},{},[1063,1080,1097,1114,1132,1157,1176],{"type":52,"tag":233,"props":1064,"children":1065},{},[1066,1071],{"type":52,"tag":255,"props":1067,"children":1068},{},[1069],{"type":57,"value":1070},"Chrome extension errors",{"type":52,"tag":255,"props":1072,"children":1073},{},[1074],{"type":52,"tag":104,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":57,"value":1079},"$exception_sources icontains \"chrome-extension:\u002F\u002F\"",{"type":52,"tag":233,"props":1081,"children":1082},{},[1083,1088],{"type":52,"tag":255,"props":1084,"children":1085},{},[1086],{"type":57,"value":1087},"Firefox extension errors",{"type":52,"tag":255,"props":1089,"children":1090},{},[1091],{"type":52,"tag":104,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":57,"value":1096},"$exception_sources icontains \"moz-extension:\u002F\u002F\"",{"type":52,"tag":233,"props":1098,"children":1099},{},[1100,1105],{"type":52,"tag":255,"props":1101,"children":1102},{},[1103],{"type":57,"value":1104},"Safari extension errors",{"type":52,"tag":255,"props":1106,"children":1107},{},[1108],{"type":52,"tag":104,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":57,"value":1113},"$exception_sources icontains \"safari-extension:\u002F\u002F\"",{"type":52,"tag":233,"props":1115,"children":1116},{},[1117,1121],{"type":52,"tag":255,"props":1118,"children":1119},{},[1120],{"type":57,"value":712},{"type":52,"tag":255,"props":1122,"children":1123},{},[1124,1130],{"type":52,"tag":104,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":57,"value":1129},"$exception_values icontains \"ResizeObserver loop\"",{"type":57,"value":1131}," (the message is specific; a type filter is optional)",{"type":52,"tag":233,"props":1133,"children":1134},{},[1135,1140],{"type":52,"tag":255,"props":1136,"children":1137},{},[1138],{"type":57,"value":1139},"Cross-origin \"Script error.\"",{"type":52,"tag":255,"props":1141,"children":1142},{},[1143,1149,1151],{"type":52,"tag":104,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":57,"value":1148},"$exception_values icontains \"Script error.\"",{"type":57,"value":1150}," AND ",{"type":52,"tag":104,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":57,"value":1156},"$exception_types exact \"Error\"",{"type":52,"tag":233,"props":1158,"children":1159},{},[1160,1165],{"type":52,"tag":255,"props":1161,"children":1162},{},[1163],{"type":57,"value":1164},"Bot user agents",{"type":52,"tag":255,"props":1166,"children":1167},{},[1168,1174],{"type":52,"tag":104,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":57,"value":1173},"$raw_user_agent regex \"(?i)bot\"",{"type":57,"value":1175}," for a single term; see the alternation pattern below for matching several bot\u002Fcrawler markers in one rule",{"type":52,"tag":233,"props":1177,"children":1178},{},[1179,1184],{"type":52,"tag":255,"props":1180,"children":1181},{},[1182],{"type":57,"value":1183},"Third-party network beacon failures",{"type":52,"tag":255,"props":1185,"children":1186},{},[1187,1193,1195,1201],{"type":52,"tag":104,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":57,"value":1192},"$exception_sources icontains \"\u003Cvendor-domain>\"",{"type":57,"value":1194}," AND a type filter (e.g. ",{"type":52,"tag":104,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":57,"value":1200},"$exception_types exact \"TypeError\"",{"type":57,"value":742},{"type":52,"tag":60,"props":1203,"children":1204},{},[1205,1207,1213,1214,1220,1221,1227,1228,1234,1236,1242,1243,1249,1250,1256,1257,1263,1264,1270,1271,1277,1279,1285,1287,1293,1295,1301],{"type":57,"value":1206},"The canonical exception properties (",{"type":52,"tag":104,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":57,"value":1212},"$exception_types",{"type":57,"value":119},{"type":52,"tag":104,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":57,"value":1219},"$exception_values",{"type":57,"value":111},{"type":52,"tag":104,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":57,"value":1226},"$exception_sources",{"type":57,"value":119},{"type":52,"tag":104,"props":1229,"children":1231},{"className":1230},[],[1232],{"type":57,"value":1233},"$exception_functions",{"type":57,"value":1235},") are arrays at capture time.\nPostHog's property filters special-case them — each filter matches against\nthe individual array elements, so all the standard operators (",{"type":52,"tag":104,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":57,"value":1241},"exact",{"type":57,"value":111},{"type":52,"tag":104,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":57,"value":1248},"is_not",{"type":57,"value":119},{"type":52,"tag":104,"props":1251,"children":1253},{"className":1252},[],[1254],{"type":57,"value":1255},"icontains",{"type":57,"value":119},{"type":52,"tag":104,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":57,"value":1262},"not_icontains",{"type":57,"value":119},{"type":52,"tag":104,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":57,"value":1269},"regex",{"type":57,"value":119},{"type":52,"tag":104,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":57,"value":1276},"not_regex",{"type":57,"value":1278},") work with the\nbare value: ",{"type":52,"tag":104,"props":1280,"children":1282},{"className":1281},[],[1283],{"type":57,"value":1284},"exact \"TypeError\"",{"type":57,"value":1286},", not ",{"type":52,"tag":104,"props":1288,"children":1290},{"className":1289},[],[1291],{"type":57,"value":1292},"exact '[\"TypeError\"]'",{"type":57,"value":1294}," or\n",{"type":52,"tag":104,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":57,"value":1300},"regex '\"TypeError\"'",{"type":57,"value":1302},".",{"type":52,"tag":60,"props":1304,"children":1305},{},[1306,1308,1314,1315,1321,1323,1329],{"type":57,"value":1307},"The singular forms (",{"type":52,"tag":104,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":57,"value":1313},"$exception_type",{"type":57,"value":119},{"type":52,"tag":104,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":57,"value":1320},"$exception_message",{"type":57,"value":1322},") and\n",{"type":52,"tag":104,"props":1324,"children":1326},{"className":1325},[],[1327],{"type":57,"value":1328},"$exception_stack_trace_raw",{"type":57,"value":1330}," are emitted on a fraction of a percent of events;\nfiltering on them produces a rule that silently never matches.",{"type":52,"tag":60,"props":1332,"children":1333},{},[1334,1336,1341,1343,1349,1351,1356,1358,1364,1366,1372],{"type":57,"value":1335},"Note that the ",{"type":52,"tag":104,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":57,"value":1269},{"type":57,"value":1342}," operator on suppression and grouping rules compiles to\nthe HogVM ",{"type":52,"tag":104,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":57,"value":1348},"Operation::Regex",{"type":57,"value":1350},", which is ",{"type":52,"tag":86,"props":1352,"children":1353},{},[1354],{"type":57,"value":1355},"case-sensitive",{"type":57,"value":1357},". Use the ",{"type":52,"tag":104,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":57,"value":1363},"(?i)",{"type":57,"value":1365},"\ninline flag for case-insensitive matching (e.g. ",{"type":52,"tag":104,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":57,"value":1371},"(?i)headlesschrome",{"type":57,"value":217},{"type":52,"tag":60,"props":1374,"children":1375},{},[1376,1378,1384,1386,1392,1394,1400],{"type":57,"value":1377},"For matching multiple bot or crawler terms, use bare pipes for alternation.\nPass this as the ",{"type":52,"tag":104,"props":1379,"children":1381},{"className":1380},[],[1382],{"type":57,"value":1383},"value",{"type":57,"value":1385}," field of the regex filter when calling the API\n(",{"type":52,"tag":104,"props":1387,"children":1389},{"className":1388},[],[1390],{"type":57,"value":1391},"$raw_user_agent",{"type":57,"value":1393}," is more reliable than the parsed ",{"type":52,"tag":104,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":57,"value":1399},"$user_agent",{"type":57,"value":1401},", which some\nparsers normalize away from crawler markers):",{"type":52,"tag":394,"props":1403,"children":1407},{"className":1404,"code":1406,"language":57,"meta":399},[1405],"language-text","(?i)(HeadlessChrome|bot|crawler|spider)\n",[1408],{"type":52,"tag":104,"props":1409,"children":1410},{"__ignoreMap":399},[1411],{"type":57,"value":1406},{"type":52,"tag":60,"props":1413,"children":1414},{},[1415],{"type":57,"value":1416},"Whenever possible, AND together two or more conditions — type plus message, or\nmessage plus URL pattern — so the rule is specific to the real noise.",{"type":52,"tag":382,"props":1418,"children":1420},{"id":1419},"step-4-decide-suppress-or-sample",[1421],{"type":57,"value":1422},"Step 4 — Decide: suppress or sample",{"type":52,"tag":60,"props":1424,"children":1425},{},[1426,1428,1433],{"type":57,"value":1427},"If you want to keep some visibility, use ",{"type":52,"tag":104,"props":1429,"children":1431},{"className":1430},[],[1432],{"type":57,"value":153},{"type":57,"value":1434}," between 0 and 1:",{"type":52,"tag":78,"props":1436,"children":1437},{},[1438,1449,1460],{"type":52,"tag":82,"props":1439,"children":1440},{},[1441,1447],{"type":52,"tag":104,"props":1442,"children":1444},{"className":1443},[],[1445],{"type":57,"value":1446},"sampling_rate: 1",{"type":57,"value":1448}," — drop everything matching (full suppression)",{"type":52,"tag":82,"props":1450,"children":1451},{},[1452,1458],{"type":52,"tag":104,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":57,"value":1457},"sampling_rate: 0.95",{"type":57,"value":1459}," — drop 95% of matching events, keep 5% as sentinel data",{"type":52,"tag":82,"props":1461,"children":1462},{},[1463,1469],{"type":52,"tag":104,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":57,"value":1468},"sampling_rate: 0.5",{"type":57,"value":1470}," — half-rate, useful for high-volume but real errors",{"type":52,"tag":60,"props":1472,"children":1473},{},[1474],{"type":57,"value":1475},"Default to a non-1.0 sampling rate when there's any doubt that the pattern is\npurely noise. You can tighten to 1.0 later once the data shows the rule isn't\ncatching real issues.",{"type":52,"tag":382,"props":1477,"children":1479},{"id":1478},"step-5-dry-run-the-filter-against-live-data",[1480],{"type":57,"value":1481},"Step 5 — Dry-run the filter against live data",{"type":52,"tag":60,"props":1483,"children":1484},{},[1485,1487,1493,1495,1500],{"type":57,"value":1486},"Before asking for confirmation, run the candidate filter against the issues\nlist so you (and the user) can see exactly which issues the rule would have\ncaught over the last 7 days. ",{"type":52,"tag":104,"props":1488,"children":1490},{"className":1489},[],[1491],{"type":57,"value":1492},"query-error-tracking-issues-list",{"type":57,"value":1494}," accepts the\nsame property-filter shape suppression rules use via its ",{"type":52,"tag":104,"props":1496,"children":1498},{"className":1497},[],[1499],{"type":57,"value":274},{"type":57,"value":1501},"\nparameter, so for a typical AND-only rule you can pass the rule's leaf\nfilters directly — no HogQL translation needed:",{"type":52,"tag":394,"props":1503,"children":1505},{"className":396,"code":1504,"language":398,"meta":399,"style":399},"posthog:query-error-tracking-issues-list\n{\n  \"filterGroup\": [\n    { \"type\": \"event\", \"key\": \"$exception_types\", \"operator\": \"exact\", \"value\": \"Error\" },\n    { \"type\": \"event\", \"key\": \"$exception_values\", \"operator\": \"icontains\", \"value\": \"ResizeObserver loop\" }\n  ],\n  \"dateRange\": { \"date_from\": \"-7d\" },\n  \"status\": \"all\",\n  \"filterTestAccounts\": false,\n  \"orderBy\": \"occurrences\",\n  \"limit\": 25\n}\n",[1506],{"type":52,"tag":104,"props":1507,"children":1508},{"__ignoreMap":399},[1509,1516,1523,1547,1688,1824,1832,1887,1923,1948,1984,2009],{"type":52,"tag":405,"props":1510,"children":1511},{"class":407,"line":408},[1512],{"type":52,"tag":405,"props":1513,"children":1514},{"style":412},[1515],{"type":57,"value":415},{"type":52,"tag":405,"props":1517,"children":1518},{"class":407,"line":418},[1519],{"type":52,"tag":405,"props":1520,"children":1521},{"style":422},[1522],{"type":57,"value":425},{"type":52,"tag":405,"props":1524,"children":1525},{"class":407,"line":428},[1526,1530,1534,1538,1542],{"type":52,"tag":405,"props":1527,"children":1528},{"style":422},[1529],{"type":57,"value":434},{"type":52,"tag":405,"props":1531,"children":1532},{"style":437},[1533],{"type":57,"value":274},{"type":52,"tag":405,"props":1535,"children":1536},{"style":422},[1537],{"type":57,"value":445},{"type":52,"tag":405,"props":1539,"children":1540},{"style":422},[1541],{"type":57,"value":450},{"type":52,"tag":405,"props":1543,"children":1544},{"style":422},[1545],{"type":57,"value":1546}," [\n",{"type":52,"tag":405,"props":1548,"children":1549},{"class":407,"line":472},[1550,1555,1559,1564,1568,1572,1576,1581,1585,1589,1593,1598,1602,1606,1610,1614,1618,1622,1626,1631,1635,1639,1643,1647,1651,1655,1659,1663,1667,1671,1675,1680,1684],{"type":52,"tag":405,"props":1551,"children":1552},{"style":422},[1553],{"type":57,"value":1554},"    {",{"type":52,"tag":405,"props":1556,"children":1557},{"style":422},[1558],{"type":57,"value":455},{"type":52,"tag":405,"props":1560,"children":1561},{"style":578},[1562],{"type":57,"value":1563},"type",{"type":52,"tag":405,"props":1565,"children":1566},{"style":422},[1567],{"type":57,"value":445},{"type":52,"tag":405,"props":1569,"children":1570},{"style":422},[1571],{"type":57,"value":450},{"type":52,"tag":405,"props":1573,"children":1574},{"style":422},[1575],{"type":57,"value":455},{"type":52,"tag":405,"props":1577,"children":1578},{"style":458},[1579],{"type":57,"value":1580},"event",{"type":52,"tag":405,"props":1582,"children":1583},{"style":422},[1584],{"type":57,"value":445},{"type":52,"tag":405,"props":1586,"children":1587},{"style":422},[1588],{"type":57,"value":895},{"type":52,"tag":405,"props":1590,"children":1591},{"style":422},[1592],{"type":57,"value":455},{"type":52,"tag":405,"props":1594,"children":1595},{"style":578},[1596],{"type":57,"value":1597},"key",{"type":52,"tag":405,"props":1599,"children":1600},{"style":422},[1601],{"type":57,"value":445},{"type":52,"tag":405,"props":1603,"children":1604},{"style":422},[1605],{"type":57,"value":450},{"type":52,"tag":405,"props":1607,"children":1608},{"style":422},[1609],{"type":57,"value":455},{"type":52,"tag":405,"props":1611,"children":1612},{"style":458},[1613],{"type":57,"value":1212},{"type":52,"tag":405,"props":1615,"children":1616},{"style":422},[1617],{"type":57,"value":445},{"type":52,"tag":405,"props":1619,"children":1620},{"style":422},[1621],{"type":57,"value":895},{"type":52,"tag":405,"props":1623,"children":1624},{"style":422},[1625],{"type":57,"value":455},{"type":52,"tag":405,"props":1627,"children":1628},{"style":578},[1629],{"type":57,"value":1630},"operator",{"type":52,"tag":405,"props":1632,"children":1633},{"style":422},[1634],{"type":57,"value":445},{"type":52,"tag":405,"props":1636,"children":1637},{"style":422},[1638],{"type":57,"value":450},{"type":52,"tag":405,"props":1640,"children":1641},{"style":422},[1642],{"type":57,"value":455},{"type":52,"tag":405,"props":1644,"children":1645},{"style":458},[1646],{"type":57,"value":1241},{"type":52,"tag":405,"props":1648,"children":1649},{"style":422},[1650],{"type":57,"value":445},{"type":52,"tag":405,"props":1652,"children":1653},{"style":422},[1654],{"type":57,"value":895},{"type":52,"tag":405,"props":1656,"children":1657},{"style":422},[1658],{"type":57,"value":455},{"type":52,"tag":405,"props":1660,"children":1661},{"style":578},[1662],{"type":57,"value":1383},{"type":52,"tag":405,"props":1664,"children":1665},{"style":422},[1666],{"type":57,"value":445},{"type":52,"tag":405,"props":1668,"children":1669},{"style":422},[1670],{"type":57,"value":450},{"type":52,"tag":405,"props":1672,"children":1673},{"style":422},[1674],{"type":57,"value":455},{"type":52,"tag":405,"props":1676,"children":1677},{"style":458},[1678],{"type":57,"value":1679},"Error",{"type":52,"tag":405,"props":1681,"children":1682},{"style":422},[1683],{"type":57,"value":445},{"type":52,"tag":405,"props":1685,"children":1686},{"style":422},[1687],{"type":57,"value":607},{"type":52,"tag":405,"props":1689,"children":1690},{"class":407,"line":510},[1691,1695,1699,1703,1707,1711,1715,1719,1723,1727,1731,1735,1739,1743,1747,1751,1755,1759,1763,1767,1771,1775,1779,1783,1787,1791,1795,1799,1803,1807,1811,1815,1819],{"type":52,"tag":405,"props":1692,"children":1693},{"style":422},[1694],{"type":57,"value":1554},{"type":52,"tag":405,"props":1696,"children":1697},{"style":422},[1698],{"type":57,"value":455},{"type":52,"tag":405,"props":1700,"children":1701},{"style":578},[1702],{"type":57,"value":1563},{"type":52,"tag":405,"props":1704,"children":1705},{"style":422},[1706],{"type":57,"value":445},{"type":52,"tag":405,"props":1708,"children":1709},{"style":422},[1710],{"type":57,"value":450},{"type":52,"tag":405,"props":1712,"children":1713},{"style":422},[1714],{"type":57,"value":455},{"type":52,"tag":405,"props":1716,"children":1717},{"style":458},[1718],{"type":57,"value":1580},{"type":52,"tag":405,"props":1720,"children":1721},{"style":422},[1722],{"type":57,"value":445},{"type":52,"tag":405,"props":1724,"children":1725},{"style":422},[1726],{"type":57,"value":895},{"type":52,"tag":405,"props":1728,"children":1729},{"style":422},[1730],{"type":57,"value":455},{"type":52,"tag":405,"props":1732,"children":1733},{"style":578},[1734],{"type":57,"value":1597},{"type":52,"tag":405,"props":1736,"children":1737},{"style":422},[1738],{"type":57,"value":445},{"type":52,"tag":405,"props":1740,"children":1741},{"style":422},[1742],{"type":57,"value":450},{"type":52,"tag":405,"props":1744,"children":1745},{"style":422},[1746],{"type":57,"value":455},{"type":52,"tag":405,"props":1748,"children":1749},{"style":458},[1750],{"type":57,"value":1219},{"type":52,"tag":405,"props":1752,"children":1753},{"style":422},[1754],{"type":57,"value":445},{"type":52,"tag":405,"props":1756,"children":1757},{"style":422},[1758],{"type":57,"value":895},{"type":52,"tag":405,"props":1760,"children":1761},{"style":422},[1762],{"type":57,"value":455},{"type":52,"tag":405,"props":1764,"children":1765},{"style":578},[1766],{"type":57,"value":1630},{"type":52,"tag":405,"props":1768,"children":1769},{"style":422},[1770],{"type":57,"value":445},{"type":52,"tag":405,"props":1772,"children":1773},{"style":422},[1774],{"type":57,"value":450},{"type":52,"tag":405,"props":1776,"children":1777},{"style":422},[1778],{"type":57,"value":455},{"type":52,"tag":405,"props":1780,"children":1781},{"style":458},[1782],{"type":57,"value":1255},{"type":52,"tag":405,"props":1784,"children":1785},{"style":422},[1786],{"type":57,"value":445},{"type":52,"tag":405,"props":1788,"children":1789},{"style":422},[1790],{"type":57,"value":895},{"type":52,"tag":405,"props":1792,"children":1793},{"style":422},[1794],{"type":57,"value":455},{"type":52,"tag":405,"props":1796,"children":1797},{"style":578},[1798],{"type":57,"value":1383},{"type":52,"tag":405,"props":1800,"children":1801},{"style":422},[1802],{"type":57,"value":445},{"type":52,"tag":405,"props":1804,"children":1805},{"style":422},[1806],{"type":57,"value":450},{"type":52,"tag":405,"props":1808,"children":1809},{"style":422},[1810],{"type":57,"value":455},{"type":52,"tag":405,"props":1812,"children":1813},{"style":458},[1814],{"type":57,"value":712},{"type":52,"tag":405,"props":1816,"children":1817},{"style":422},[1818],{"type":57,"value":445},{"type":52,"tag":405,"props":1820,"children":1821},{"style":422},[1822],{"type":57,"value":1823}," }\n",{"type":52,"tag":405,"props":1825,"children":1826},{"class":407,"line":548},[1827],{"type":52,"tag":405,"props":1828,"children":1829},{"style":422},[1830],{"type":57,"value":1831},"  ],\n",{"type":52,"tag":405,"props":1833,"children":1834},{"class":407,"line":610},[1835,1839,1843,1847,1851,1855,1859,1863,1867,1871,1875,1879,1883],{"type":52,"tag":405,"props":1836,"children":1837},{"style":422},[1838],{"type":57,"value":434},{"type":52,"tag":405,"props":1840,"children":1841},{"style":437},[1842],{"type":57,"value":558},{"type":52,"tag":405,"props":1844,"children":1845},{"style":422},[1846],{"type":57,"value":445},{"type":52,"tag":405,"props":1848,"children":1849},{"style":422},[1850],{"type":57,"value":450},{"type":52,"tag":405,"props":1852,"children":1853},{"style":422},[1854],{"type":57,"value":571},{"type":52,"tag":405,"props":1856,"children":1857},{"style":422},[1858],{"type":57,"value":455},{"type":52,"tag":405,"props":1860,"children":1861},{"style":578},[1862],{"type":57,"value":581},{"type":52,"tag":405,"props":1864,"children":1865},{"style":422},[1866],{"type":57,"value":445},{"type":52,"tag":405,"props":1868,"children":1869},{"style":422},[1870],{"type":57,"value":450},{"type":52,"tag":405,"props":1872,"children":1873},{"style":422},[1874],{"type":57,"value":455},{"type":52,"tag":405,"props":1876,"children":1877},{"style":458},[1878],{"type":57,"value":598},{"type":52,"tag":405,"props":1880,"children":1881},{"style":422},[1882],{"type":57,"value":445},{"type":52,"tag":405,"props":1884,"children":1885},{"style":422},[1886],{"type":57,"value":607},{"type":52,"tag":405,"props":1888,"children":1889},{"class":407,"line":641},[1890,1894,1898,1902,1906,1910,1915,1919],{"type":52,"tag":405,"props":1891,"children":1892},{"style":422},[1893],{"type":57,"value":434},{"type":52,"tag":405,"props":1895,"children":1896},{"style":437},[1897],{"type":57,"value":440},{"type":52,"tag":405,"props":1899,"children":1900},{"style":422},[1901],{"type":57,"value":445},{"type":52,"tag":405,"props":1903,"children":1904},{"style":422},[1905],{"type":57,"value":450},{"type":52,"tag":405,"props":1907,"children":1908},{"style":422},[1909],{"type":57,"value":455},{"type":52,"tag":405,"props":1911,"children":1912},{"style":458},[1913],{"type":57,"value":1914},"all",{"type":52,"tag":405,"props":1916,"children":1917},{"style":422},[1918],{"type":57,"value":445},{"type":52,"tag":405,"props":1920,"children":1921},{"style":422},[1922],{"type":57,"value":111},{"type":52,"tag":405,"props":1924,"children":1925},{"class":407,"line":667},[1926,1930,1935,1939,1943],{"type":52,"tag":405,"props":1927,"children":1928},{"style":422},[1929],{"type":57,"value":434},{"type":52,"tag":405,"props":1931,"children":1932},{"style":437},[1933],{"type":57,"value":1934},"filterTestAccounts",{"type":52,"tag":405,"props":1936,"children":1937},{"style":422},[1938],{"type":57,"value":445},{"type":52,"tag":405,"props":1940,"children":1941},{"style":422},[1942],{"type":57,"value":450},{"type":52,"tag":405,"props":1944,"children":1945},{"style":422},[1946],{"type":57,"value":1947}," false,\n",{"type":52,"tag":405,"props":1949,"children":1951},{"class":407,"line":1950},10,[1952,1956,1960,1964,1968,1972,1976,1980],{"type":52,"tag":405,"props":1953,"children":1954},{"style":422},[1955],{"type":57,"value":434},{"type":52,"tag":405,"props":1957,"children":1958},{"style":437},[1959],{"type":57,"value":482},{"type":52,"tag":405,"props":1961,"children":1962},{"style":422},[1963],{"type":57,"value":445},{"type":52,"tag":405,"props":1965,"children":1966},{"style":422},[1967],{"type":57,"value":450},{"type":52,"tag":405,"props":1969,"children":1970},{"style":422},[1971],{"type":57,"value":455},{"type":52,"tag":405,"props":1973,"children":1974},{"style":458},[1975],{"type":57,"value":499},{"type":52,"tag":405,"props":1977,"children":1978},{"style":422},[1979],{"type":57,"value":445},{"type":52,"tag":405,"props":1981,"children":1982},{"style":422},[1983],{"type":57,"value":111},{"type":52,"tag":405,"props":1985,"children":1987},{"class":407,"line":1986},11,[1988,1992,1996,2000,2004],{"type":52,"tag":405,"props":1989,"children":1990},{"style":422},[1991],{"type":57,"value":434},{"type":52,"tag":405,"props":1993,"children":1994},{"style":437},[1995],{"type":57,"value":620},{"type":52,"tag":405,"props":1997,"children":1998},{"style":422},[1999],{"type":57,"value":445},{"type":52,"tag":405,"props":2001,"children":2002},{"style":422},[2003],{"type":57,"value":450},{"type":52,"tag":405,"props":2005,"children":2006},{"style":631},[2007],{"type":57,"value":2008}," 25\n",{"type":52,"tag":405,"props":2010,"children":2012},{"class":407,"line":2011},12,[2013],{"type":52,"tag":405,"props":2014,"children":2015},{"style":422},[2016],{"type":57,"value":673},{"type":52,"tag":60,"props":2018,"children":2019},{},[2020],{"type":57,"value":2021},"Important defaults to override for suppression preview:",{"type":52,"tag":78,"props":2023,"children":2024},{},[2025,2043],{"type":52,"tag":82,"props":2026,"children":2027},{},[2028,2034,2036,2041],{"type":52,"tag":104,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":57,"value":2033},"status: \"all\"",{"type":57,"value":2035}," — suppression applies regardless of issue status, so don't\nlet the default ",{"type":52,"tag":104,"props":2037,"children":2039},{"className":2038},[],[2040],{"type":57,"value":461},{"type":57,"value":2042}," filter hide already-archived noise.",{"type":52,"tag":82,"props":2044,"children":2045},{},[2046,2052],{"type":52,"tag":104,"props":2047,"children":2049},{"className":2048},[],[2050],{"type":57,"value":2051},"filterTestAccounts: false",{"type":57,"value":2053}," — the rule will not respect the test-account\ntoggle at ingestion. The preview should match production reality.",{"type":52,"tag":60,"props":2055,"children":2056},{},[2057,2059,2065,2067,2073,2075,2081,2082,2088,2090,2096,2098,2104,2106,2111],{"type":57,"value":2058},"Each row is one issue the rule would catch: ",{"type":52,"tag":104,"props":2060,"children":2062},{"className":2061},[],[2063],{"type":57,"value":2064},"name",{"type":57,"value":2066}," (exception type),\n",{"type":52,"tag":104,"props":2068,"children":2070},{"className":2069},[],[2071],{"type":57,"value":2072},"description",{"type":57,"value":2074}," (sample message), ",{"type":52,"tag":104,"props":2076,"children":2078},{"className":2077},[],[2079],{"type":57,"value":2080},"source",{"type":57,"value":119},{"type":52,"tag":104,"props":2083,"children":2085},{"className":2084},[],[2086],{"type":57,"value":2087},"library",{"type":57,"value":2089},", plus\n",{"type":52,"tag":104,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":57,"value":2095},"aggregations.occurrences",{"type":57,"value":2097}," and ",{"type":52,"tag":104,"props":2099,"children":2101},{"className":2100},[],[2102],{"type":57,"value":2103},"aggregations.users",{"type":57,"value":2105},". The issue list ",{"type":52,"tag":86,"props":2107,"children":2108},{},[2109],{"type":57,"value":2110},"is",{"type":57,"value":2112},"\nthe per-issue breakdown — read every row.",{"type":52,"tag":60,"props":2114,"children":2115},{},[2116,2121,2123,2128,2130,2135,2136,2141],{"type":52,"tag":86,"props":2117,"children":2118},{},[2119],{"type":57,"value":2120},"The single most important safety check",{"type":57,"value":2122},": scan the result for any issue\nwhose ",{"type":52,"tag":104,"props":2124,"children":2126},{"className":2125},[],[2127],{"type":57,"value":2064},{"type":57,"value":2129}," \u002F ",{"type":52,"tag":104,"props":2131,"children":2133},{"className":2132},[],[2134],{"type":57,"value":2072},{"type":57,"value":2129},{"type":52,"tag":104,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":57,"value":2080},{"type":57,"value":2142}," looks like a real bug the team\nwould want to fix, not noise. A filter that looks tight by message text\nwill routinely match unrelated issues that happen to share a phrase, and\nthis is the failure mode that silently destroys real data once the rule is\nlive. If you see anything suspicious, narrow the filter (step 3) and rerun\nthis step until only the genuine noise pattern is in the list.",{"type":52,"tag":60,"props":2144,"children":2145},{},[2146,2148,2153,2154,2159,2161,2166,2168,2174],{"type":57,"value":2147},"Add up ",{"type":52,"tag":104,"props":2149,"children":2151},{"className":2150},[],[2152],{"type":57,"value":2095},{"type":57,"value":2097},{"type":52,"tag":104,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":57,"value":2103},{"type":57,"value":2160}," across rows for\nthe blast-radius totals you'll surface to the user in step 6. If you need\nexact totals across more than ",{"type":52,"tag":104,"props":2162,"children":2164},{"className":2163},[],[2165],{"type":57,"value":620},{"type":57,"value":2167}," issues, paginate with ",{"type":52,"tag":104,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":57,"value":2173},"offset",{"type":57,"value":2175}," or\nfall back to the HogQL aggregate at the end of this step.",{"type":52,"tag":60,"props":2177,"children":2178},{},[2179,2181,2187],{"type":57,"value":2180},"For one or two concrete sample events with full stack traces, follow up on\nthe most suspicious-looking issue with ",{"type":52,"tag":104,"props":2182,"children":2184},{"className":2183},[],[2185],{"type":57,"value":2186},"query-error-tracking-issue-events",{"type":57,"value":450},{"type":52,"tag":394,"props":2189,"children":2191},{"className":396,"code":2190,"language":398,"meta":399,"style":399},"posthog:query-error-tracking-issue-events\n{\n  \"issueId\": \"\u003Cid from the list>\",\n  \"limit\": 3,\n  \"include\": [\"exception\", \"stacktrace\", \"environment\", \"navigation\"],\n  \"onlyAppFrames\": false\n}\n",[2192],{"type":52,"tag":104,"props":2193,"children":2194},{"__ignoreMap":399},[2195,2202,2209,2245,2273,2361,2385],{"type":52,"tag":405,"props":2196,"children":2197},{"class":407,"line":408},[2198],{"type":52,"tag":405,"props":2199,"children":2200},{"style":412},[2201],{"type":57,"value":780},{"type":52,"tag":405,"props":2203,"children":2204},{"class":407,"line":418},[2205],{"type":52,"tag":405,"props":2206,"children":2207},{"style":422},[2208],{"type":57,"value":425},{"type":52,"tag":405,"props":2210,"children":2211},{"class":407,"line":428},[2212,2216,2220,2224,2228,2232,2237,2241],{"type":52,"tag":405,"props":2213,"children":2214},{"style":422},[2215],{"type":57,"value":434},{"type":52,"tag":405,"props":2217,"children":2218},{"style":437},[2219],{"type":57,"value":799},{"type":52,"tag":405,"props":2221,"children":2222},{"style":422},[2223],{"type":57,"value":445},{"type":52,"tag":405,"props":2225,"children":2226},{"style":422},[2227],{"type":57,"value":450},{"type":52,"tag":405,"props":2229,"children":2230},{"style":422},[2231],{"type":57,"value":455},{"type":52,"tag":405,"props":2233,"children":2234},{"style":458},[2235],{"type":57,"value":2236},"\u003Cid from the list>",{"type":52,"tag":405,"props":2238,"children":2239},{"style":422},[2240],{"type":57,"value":445},{"type":52,"tag":405,"props":2242,"children":2243},{"style":422},[2244],{"type":57,"value":111},{"type":52,"tag":405,"props":2246,"children":2247},{"class":407,"line":472},[2248,2252,2256,2260,2264,2269],{"type":52,"tag":405,"props":2249,"children":2250},{"style":422},[2251],{"type":57,"value":434},{"type":52,"tag":405,"props":2253,"children":2254},{"style":437},[2255],{"type":57,"value":620},{"type":52,"tag":405,"props":2257,"children":2258},{"style":422},[2259],{"type":57,"value":445},{"type":52,"tag":405,"props":2261,"children":2262},{"style":422},[2263],{"type":57,"value":450},{"type":52,"tag":405,"props":2265,"children":2266},{"style":631},[2267],{"type":57,"value":2268}," 3",{"type":52,"tag":405,"props":2270,"children":2271},{"style":422},[2272],{"type":57,"value":111},{"type":52,"tag":405,"props":2274,"children":2275},{"class":407,"line":510},[2276,2280,2284,2288,2292,2296,2300,2304,2308,2312,2316,2320,2324,2328,2332,2336,2340,2344,2348,2352,2356],{"type":52,"tag":405,"props":2277,"children":2278},{"style":422},[2279],{"type":57,"value":434},{"type":52,"tag":405,"props":2281,"children":2282},{"style":437},[2283],{"type":57,"value":864},{"type":52,"tag":405,"props":2285,"children":2286},{"style":422},[2287],{"type":57,"value":445},{"type":52,"tag":405,"props":2289,"children":2290},{"style":422},[2291],{"type":57,"value":450},{"type":52,"tag":405,"props":2293,"children":2294},{"style":422},[2295],{"type":57,"value":877},{"type":52,"tag":405,"props":2297,"children":2298},{"style":422},[2299],{"type":57,"value":445},{"type":52,"tag":405,"props":2301,"children":2302},{"style":458},[2303],{"type":57,"value":886},{"type":52,"tag":405,"props":2305,"children":2306},{"style":422},[2307],{"type":57,"value":445},{"type":52,"tag":405,"props":2309,"children":2310},{"style":422},[2311],{"type":57,"value":895},{"type":52,"tag":405,"props":2313,"children":2314},{"style":422},[2315],{"type":57,"value":455},{"type":52,"tag":405,"props":2317,"children":2318},{"style":458},[2319],{"type":57,"value":904},{"type":52,"tag":405,"props":2321,"children":2322},{"style":422},[2323],{"type":57,"value":445},{"type":52,"tag":405,"props":2325,"children":2326},{"style":422},[2327],{"type":57,"value":895},{"type":52,"tag":405,"props":2329,"children":2330},{"style":422},[2331],{"type":57,"value":455},{"type":52,"tag":405,"props":2333,"children":2334},{"style":458},[2335],{"type":57,"value":921},{"type":52,"tag":405,"props":2337,"children":2338},{"style":422},[2339],{"type":57,"value":445},{"type":52,"tag":405,"props":2341,"children":2342},{"style":422},[2343],{"type":57,"value":895},{"type":52,"tag":405,"props":2345,"children":2346},{"style":422},[2347],{"type":57,"value":455},{"type":52,"tag":405,"props":2349,"children":2350},{"style":458},[2351],{"type":57,"value":938},{"type":52,"tag":405,"props":2353,"children":2354},{"style":422},[2355],{"type":57,"value":445},{"type":52,"tag":405,"props":2357,"children":2358},{"style":422},[2359],{"type":57,"value":2360},"],\n",{"type":52,"tag":405,"props":2362,"children":2363},{"class":407,"line":548},[2364,2368,2372,2376,2380],{"type":52,"tag":405,"props":2365,"children":2366},{"style":422},[2367],{"type":57,"value":434},{"type":52,"tag":405,"props":2369,"children":2370},{"style":437},[2371],{"type":57,"value":963},{"type":52,"tag":405,"props":2373,"children":2374},{"style":422},[2375],{"type":57,"value":445},{"type":52,"tag":405,"props":2377,"children":2378},{"style":422},[2379],{"type":57,"value":450},{"type":52,"tag":405,"props":2381,"children":2382},{"style":422},[2383],{"type":57,"value":2384}," false\n",{"type":52,"tag":405,"props":2386,"children":2387},{"class":407,"line":610},[2388],{"type":52,"tag":405,"props":2389,"children":2390},{"style":422},[2391],{"type":57,"value":673},{"type":52,"tag":2393,"props":2394,"children":2396},"h4",{"id":2395},"when-you-must-fall-back-to-execute-sql",[2397],{"type":57,"value":2398},"When you must fall back to execute-sql",{"type":52,"tag":60,"props":2400,"children":2401},{},[2402,2407,2409,2414],{"type":52,"tag":104,"props":2403,"children":2405},{"className":2404},[],[2406],{"type":57,"value":274},{"type":57,"value":2408}," is ",{"type":52,"tag":86,"props":2410,"children":2411},{},[2412],{"type":57,"value":2413},"flat AND only",{"type":57,"value":2415},". Drop into HogQL when:",{"type":52,"tag":78,"props":2417,"children":2418},{},[2419,2432,2465],{"type":52,"tag":82,"props":2420,"children":2421},{},[2422,2424,2430],{"type":57,"value":2423},"The rule uses ",{"type":52,"tag":104,"props":2425,"children":2427},{"className":2426},[],[2428],{"type":57,"value":2429},"type: \"OR\"",{"type":57,"value":2431}," at the outer group or any nested OR.",{"type":52,"tag":82,"props":2433,"children":2434},{},[2435,2437,2442,2444,2450,2451,2457,2458,2464],{"type":57,"value":2436},"The rule uses operators not supported by ",{"type":52,"tag":104,"props":2438,"children":2440},{"className":2439},[],[2441],{"type":57,"value":274},{"type":57,"value":2443}," (e.g. ",{"type":52,"tag":104,"props":2445,"children":2447},{"className":2446},[],[2448],{"type":57,"value":2449},"between",{"type":57,"value":111},{"type":52,"tag":104,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":57,"value":2456},"in",{"type":57,"value":119},{"type":52,"tag":104,"props":2459,"children":2461},{"className":2460},[],[2462],{"type":57,"value":2463},"semver_*",{"type":57,"value":217},{"type":52,"tag":82,"props":2466,"children":2467},{},[2468],{"type":57,"value":2469},"You want a precise event-level count rather than per-issue aggregates.",{"type":52,"tag":60,"props":2471,"children":2472},{},[2473,2475,2481],{"type":57,"value":2474},"The HogQL shape mirrors what the suppression rule bytecode compiles to.\nThe materialized property column is nullable, so the ",{"type":52,"tag":104,"props":2476,"children":2478},{"className":2477},[],[2479],{"type":57,"value":2480},"coalesce(..., '[]')",{"type":57,"value":2482},"\nwrapper is required — without it ClickHouse rejects the query with\n\"Nested type Array(String) cannot be inside Nullable type\":",{"type":52,"tag":394,"props":2484,"children":2488},{"className":2485,"code":2486,"language":2487,"meta":399,"style":399},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT\n  count() AS matched,\n  count(DISTINCT distinct_id) AS users,\n  count(DISTINCT properties.$exception_issue_id) AS issues\nFROM events\nWHERE event = '$exception'\n  AND timestamp > now() - INTERVAL 7 DAY\n  AND arrayExists(\n    v -> ifNull(ilike(v, '\u003Cpattern>'), 0),\n    JSONExtract(coalesce(properties.$exception_values, '[]'), 'Array(String)')\n  )\n","sql",[2489],{"type":52,"tag":104,"props":2490,"children":2491},{"__ignoreMap":399},[2492,2500,2508,2516,2524,2532,2540,2548,2556,2564,2572],{"type":52,"tag":405,"props":2493,"children":2494},{"class":407,"line":408},[2495],{"type":52,"tag":405,"props":2496,"children":2497},{},[2498],{"type":57,"value":2499},"SELECT\n",{"type":52,"tag":405,"props":2501,"children":2502},{"class":407,"line":418},[2503],{"type":52,"tag":405,"props":2504,"children":2505},{},[2506],{"type":57,"value":2507},"  count() AS matched,\n",{"type":52,"tag":405,"props":2509,"children":2510},{"class":407,"line":428},[2511],{"type":52,"tag":405,"props":2512,"children":2513},{},[2514],{"type":57,"value":2515},"  count(DISTINCT distinct_id) AS users,\n",{"type":52,"tag":405,"props":2517,"children":2518},{"class":407,"line":472},[2519],{"type":52,"tag":405,"props":2520,"children":2521},{},[2522],{"type":57,"value":2523},"  count(DISTINCT properties.$exception_issue_id) AS issues\n",{"type":52,"tag":405,"props":2525,"children":2526},{"class":407,"line":510},[2527],{"type":52,"tag":405,"props":2528,"children":2529},{},[2530],{"type":57,"value":2531},"FROM events\n",{"type":52,"tag":405,"props":2533,"children":2534},{"class":407,"line":548},[2535],{"type":52,"tag":405,"props":2536,"children":2537},{},[2538],{"type":57,"value":2539},"WHERE event = '$exception'\n",{"type":52,"tag":405,"props":2541,"children":2542},{"class":407,"line":610},[2543],{"type":52,"tag":405,"props":2544,"children":2545},{},[2546],{"type":57,"value":2547},"  AND timestamp > now() - INTERVAL 7 DAY\n",{"type":52,"tag":405,"props":2549,"children":2550},{"class":407,"line":641},[2551],{"type":52,"tag":405,"props":2552,"children":2553},{},[2554],{"type":57,"value":2555},"  AND arrayExists(\n",{"type":52,"tag":405,"props":2557,"children":2558},{"class":407,"line":667},[2559],{"type":52,"tag":405,"props":2560,"children":2561},{},[2562],{"type":57,"value":2563},"    v -> ifNull(ilike(v, '\u003Cpattern>'), 0),\n",{"type":52,"tag":405,"props":2565,"children":2566},{"class":407,"line":1950},[2567],{"type":52,"tag":405,"props":2568,"children":2569},{},[2570],{"type":57,"value":2571},"    JSONExtract(coalesce(properties.$exception_values, '[]'), 'Array(String)')\n",{"type":52,"tag":405,"props":2573,"children":2574},{"class":407,"line":1986},[2575],{"type":52,"tag":405,"props":2576,"children":2577},{},[2578],{"type":57,"value":2579},"  )\n",{"type":52,"tag":60,"props":2581,"children":2582},{},[2583,2585,2591,2593,2598,2600,2605,2606,2612,2613,2618,2620,2625,2627,2632],{"type":57,"value":2584},"Use ",{"type":52,"tag":104,"props":2586,"children":2588},{"className":2587},[],[2589],{"type":57,"value":2590},"ilike",{"type":57,"value":2592}," for ",{"type":52,"tag":104,"props":2594,"children":2596},{"className":2595},[],[2597],{"type":57,"value":1255},{"type":57,"value":2599},", plain equality for ",{"type":52,"tag":104,"props":2601,"children":2603},{"className":2602},[],[2604],{"type":57,"value":1241},{"type":57,"value":119},{"type":52,"tag":104,"props":2607,"children":2609},{"className":2608},[],[2610],{"type":57,"value":2611},"match(v, '\u003Cpattern>')",{"type":57,"value":2592},{"type":52,"tag":104,"props":2614,"children":2616},{"className":2615},[],[2617],{"type":57,"value":1269},{"type":57,"value":2619},". The rule's ",{"type":52,"tag":104,"props":2621,"children":2623},{"className":2622},[],[2624],{"type":57,"value":1269},{"type":57,"value":2626}," is case-sensitive — add\n",{"type":52,"tag":104,"props":2628,"children":2630},{"className":2629},[],[2631],{"type":57,"value":1363},{"type":57,"value":2633}," inline if needed.",{"type":52,"tag":382,"props":2635,"children":2637},{"id":2636},"step-6-confirm-with-the-user-before-creating",[2638],{"type":57,"value":2639},"Step 6 — Confirm with the user before creating",{"type":52,"tag":60,"props":2641,"children":2642},{},[2643,2645,2651],{"type":57,"value":2644},"Suppression is destructive in spirit even though the API marks it\n",{"type":52,"tag":104,"props":2646,"children":2648},{"className":2647},[],[2649],{"type":57,"value":2650},"destructive: false",{"type":57,"value":2652},". Show the user before creating:",{"type":52,"tag":2654,"props":2655,"children":2656},"ol",{},[2657,2662,2680],{"type":52,"tag":82,"props":2658,"children":2659},{},[2660],{"type":57,"value":2661},"The exact filter you plan to send",{"type":52,"tag":82,"props":2663,"children":2664},{},[2665,2667,2672,2673,2678],{"type":57,"value":2666},"The list of issues from step 5 with their ",{"type":52,"tag":104,"props":2668,"children":2670},{"className":2669},[],[2671],{"type":57,"value":499},{"type":57,"value":2097},{"type":52,"tag":104,"props":2674,"children":2676},{"className":2675},[],[2677],{"type":57,"value":699},{"type":57,"value":2679},",\nplus the aggregate totals — call out any rows that look like real bugs",{"type":52,"tag":82,"props":2681,"children":2682},{},[2683,2685,2690],{"type":57,"value":2684},"Whether it overlaps any existing suppression rules\n(",{"type":52,"tag":104,"props":2686,"children":2688},{"className":2687},[],[2689],{"type":57,"value":335},{"type":57,"value":2691}," first)",{"type":52,"tag":60,"props":2693,"children":2694},{},[2695],{"type":57,"value":2696},"Wait for explicit confirmation. Then create:",{"type":52,"tag":394,"props":2698,"children":2700},{"className":396,"code":2699,"language":398,"meta":399,"style":399},"posthog:error-tracking-suppression-rules-create\n{\n  \"filters\": {\n    \"type\": \"AND\",\n    \"values\": [\n      {\n        \"type\": \"event\",\n        \"key\": \"$exception_types\",\n        \"operator\": \"exact\",\n        \"value\": \"Error\"\n      },\n      {\n        \"type\": \"event\",\n        \"key\": \"$exception_values\",\n        \"operator\": \"icontains\",\n        \"value\": \"ResizeObserver loop\"\n      }\n    ]\n  },\n  \"sampling_rate\": 0.95\n}\n",[2701],{"type":52,"tag":104,"props":2702,"children":2703},{"__ignoreMap":399},[2704,2712,2719,2744,2781,2805,2813,2849,2884,2919,2951,2959,2966,3002,3038,3074,3106,3115,3124,3133,3158],{"type":52,"tag":405,"props":2705,"children":2706},{"class":407,"line":408},[2707],{"type":52,"tag":405,"props":2708,"children":2709},{"style":412},[2710],{"type":57,"value":2711},"posthog:error-tracking-suppression-rules-create\n",{"type":52,"tag":405,"props":2713,"children":2714},{"class":407,"line":418},[2715],{"type":52,"tag":405,"props":2716,"children":2717},{"style":422},[2718],{"type":57,"value":425},{"type":52,"tag":405,"props":2720,"children":2721},{"class":407,"line":428},[2722,2726,2731,2735,2739],{"type":52,"tag":405,"props":2723,"children":2724},{"style":422},[2725],{"type":57,"value":434},{"type":52,"tag":405,"props":2727,"children":2728},{"style":437},[2729],{"type":57,"value":2730},"filters",{"type":52,"tag":405,"props":2732,"children":2733},{"style":422},[2734],{"type":57,"value":445},{"type":52,"tag":405,"props":2736,"children":2737},{"style":422},[2738],{"type":57,"value":450},{"type":52,"tag":405,"props":2740,"children":2741},{"style":422},[2742],{"type":57,"value":2743}," {\n",{"type":52,"tag":405,"props":2745,"children":2746},{"class":407,"line":472},[2747,2752,2756,2760,2764,2768,2773,2777],{"type":52,"tag":405,"props":2748,"children":2749},{"style":422},[2750],{"type":57,"value":2751},"    \"",{"type":52,"tag":405,"props":2753,"children":2754},{"style":578},[2755],{"type":57,"value":1563},{"type":52,"tag":405,"props":2757,"children":2758},{"style":422},[2759],{"type":57,"value":445},{"type":52,"tag":405,"props":2761,"children":2762},{"style":422},[2763],{"type":57,"value":450},{"type":52,"tag":405,"props":2765,"children":2766},{"style":422},[2767],{"type":57,"value":455},{"type":52,"tag":405,"props":2769,"children":2770},{"style":458},[2771],{"type":57,"value":2772},"AND",{"type":52,"tag":405,"props":2774,"children":2775},{"style":422},[2776],{"type":57,"value":445},{"type":52,"tag":405,"props":2778,"children":2779},{"style":422},[2780],{"type":57,"value":111},{"type":52,"tag":405,"props":2782,"children":2783},{"class":407,"line":510},[2784,2788,2793,2797,2801],{"type":52,"tag":405,"props":2785,"children":2786},{"style":422},[2787],{"type":57,"value":2751},{"type":52,"tag":405,"props":2789,"children":2790},{"style":578},[2791],{"type":57,"value":2792},"values",{"type":52,"tag":405,"props":2794,"children":2795},{"style":422},[2796],{"type":57,"value":445},{"type":52,"tag":405,"props":2798,"children":2799},{"style":422},[2800],{"type":57,"value":450},{"type":52,"tag":405,"props":2802,"children":2803},{"style":422},[2804],{"type":57,"value":1546},{"type":52,"tag":405,"props":2806,"children":2807},{"class":407,"line":548},[2808],{"type":52,"tag":405,"props":2809,"children":2810},{"style":422},[2811],{"type":57,"value":2812},"      {\n",{"type":52,"tag":405,"props":2814,"children":2815},{"class":407,"line":610},[2816,2821,2825,2829,2833,2837,2841,2845],{"type":52,"tag":405,"props":2817,"children":2818},{"style":422},[2819],{"type":57,"value":2820},"        \"",{"type":52,"tag":405,"props":2822,"children":2823},{"style":631},[2824],{"type":57,"value":1563},{"type":52,"tag":405,"props":2826,"children":2827},{"style":422},[2828],{"type":57,"value":445},{"type":52,"tag":405,"props":2830,"children":2831},{"style":422},[2832],{"type":57,"value":450},{"type":52,"tag":405,"props":2834,"children":2835},{"style":422},[2836],{"type":57,"value":455},{"type":52,"tag":405,"props":2838,"children":2839},{"style":458},[2840],{"type":57,"value":1580},{"type":52,"tag":405,"props":2842,"children":2843},{"style":422},[2844],{"type":57,"value":445},{"type":52,"tag":405,"props":2846,"children":2847},{"style":422},[2848],{"type":57,"value":111},{"type":52,"tag":405,"props":2850,"children":2851},{"class":407,"line":641},[2852,2856,2860,2864,2868,2872,2876,2880],{"type":52,"tag":405,"props":2853,"children":2854},{"style":422},[2855],{"type":57,"value":2820},{"type":52,"tag":405,"props":2857,"children":2858},{"style":631},[2859],{"type":57,"value":1597},{"type":52,"tag":405,"props":2861,"children":2862},{"style":422},[2863],{"type":57,"value":445},{"type":52,"tag":405,"props":2865,"children":2866},{"style":422},[2867],{"type":57,"value":450},{"type":52,"tag":405,"props":2869,"children":2870},{"style":422},[2871],{"type":57,"value":455},{"type":52,"tag":405,"props":2873,"children":2874},{"style":458},[2875],{"type":57,"value":1212},{"type":52,"tag":405,"props":2877,"children":2878},{"style":422},[2879],{"type":57,"value":445},{"type":52,"tag":405,"props":2881,"children":2882},{"style":422},[2883],{"type":57,"value":111},{"type":52,"tag":405,"props":2885,"children":2886},{"class":407,"line":667},[2887,2891,2895,2899,2903,2907,2911,2915],{"type":52,"tag":405,"props":2888,"children":2889},{"style":422},[2890],{"type":57,"value":2820},{"type":52,"tag":405,"props":2892,"children":2893},{"style":631},[2894],{"type":57,"value":1630},{"type":52,"tag":405,"props":2896,"children":2897},{"style":422},[2898],{"type":57,"value":445},{"type":52,"tag":405,"props":2900,"children":2901},{"style":422},[2902],{"type":57,"value":450},{"type":52,"tag":405,"props":2904,"children":2905},{"style":422},[2906],{"type":57,"value":455},{"type":52,"tag":405,"props":2908,"children":2909},{"style":458},[2910],{"type":57,"value":1241},{"type":52,"tag":405,"props":2912,"children":2913},{"style":422},[2914],{"type":57,"value":445},{"type":52,"tag":405,"props":2916,"children":2917},{"style":422},[2918],{"type":57,"value":111},{"type":52,"tag":405,"props":2920,"children":2921},{"class":407,"line":1950},[2922,2926,2930,2934,2938,2942,2946],{"type":52,"tag":405,"props":2923,"children":2924},{"style":422},[2925],{"type":57,"value":2820},{"type":52,"tag":405,"props":2927,"children":2928},{"style":631},[2929],{"type":57,"value":1383},{"type":52,"tag":405,"props":2931,"children":2932},{"style":422},[2933],{"type":57,"value":445},{"type":52,"tag":405,"props":2935,"children":2936},{"style":422},[2937],{"type":57,"value":450},{"type":52,"tag":405,"props":2939,"children":2940},{"style":422},[2941],{"type":57,"value":455},{"type":52,"tag":405,"props":2943,"children":2944},{"style":458},[2945],{"type":57,"value":1679},{"type":52,"tag":405,"props":2947,"children":2948},{"style":422},[2949],{"type":57,"value":2950},"\"\n",{"type":52,"tag":405,"props":2952,"children":2953},{"class":407,"line":1986},[2954],{"type":52,"tag":405,"props":2955,"children":2956},{"style":422},[2957],{"type":57,"value":2958},"      },\n",{"type":52,"tag":405,"props":2960,"children":2961},{"class":407,"line":2011},[2962],{"type":52,"tag":405,"props":2963,"children":2964},{"style":422},[2965],{"type":57,"value":2812},{"type":52,"tag":405,"props":2967,"children":2969},{"class":407,"line":2968},13,[2970,2974,2978,2982,2986,2990,2994,2998],{"type":52,"tag":405,"props":2971,"children":2972},{"style":422},[2973],{"type":57,"value":2820},{"type":52,"tag":405,"props":2975,"children":2976},{"style":631},[2977],{"type":57,"value":1563},{"type":52,"tag":405,"props":2979,"children":2980},{"style":422},[2981],{"type":57,"value":445},{"type":52,"tag":405,"props":2983,"children":2984},{"style":422},[2985],{"type":57,"value":450},{"type":52,"tag":405,"props":2987,"children":2988},{"style":422},[2989],{"type":57,"value":455},{"type":52,"tag":405,"props":2991,"children":2992},{"style":458},[2993],{"type":57,"value":1580},{"type":52,"tag":405,"props":2995,"children":2996},{"style":422},[2997],{"type":57,"value":445},{"type":52,"tag":405,"props":2999,"children":3000},{"style":422},[3001],{"type":57,"value":111},{"type":52,"tag":405,"props":3003,"children":3005},{"class":407,"line":3004},14,[3006,3010,3014,3018,3022,3026,3030,3034],{"type":52,"tag":405,"props":3007,"children":3008},{"style":422},[3009],{"type":57,"value":2820},{"type":52,"tag":405,"props":3011,"children":3012},{"style":631},[3013],{"type":57,"value":1597},{"type":52,"tag":405,"props":3015,"children":3016},{"style":422},[3017],{"type":57,"value":445},{"type":52,"tag":405,"props":3019,"children":3020},{"style":422},[3021],{"type":57,"value":450},{"type":52,"tag":405,"props":3023,"children":3024},{"style":422},[3025],{"type":57,"value":455},{"type":52,"tag":405,"props":3027,"children":3028},{"style":458},[3029],{"type":57,"value":1219},{"type":52,"tag":405,"props":3031,"children":3032},{"style":422},[3033],{"type":57,"value":445},{"type":52,"tag":405,"props":3035,"children":3036},{"style":422},[3037],{"type":57,"value":111},{"type":52,"tag":405,"props":3039,"children":3041},{"class":407,"line":3040},15,[3042,3046,3050,3054,3058,3062,3066,3070],{"type":52,"tag":405,"props":3043,"children":3044},{"style":422},[3045],{"type":57,"value":2820},{"type":52,"tag":405,"props":3047,"children":3048},{"style":631},[3049],{"type":57,"value":1630},{"type":52,"tag":405,"props":3051,"children":3052},{"style":422},[3053],{"type":57,"value":445},{"type":52,"tag":405,"props":3055,"children":3056},{"style":422},[3057],{"type":57,"value":450},{"type":52,"tag":405,"props":3059,"children":3060},{"style":422},[3061],{"type":57,"value":455},{"type":52,"tag":405,"props":3063,"children":3064},{"style":458},[3065],{"type":57,"value":1255},{"type":52,"tag":405,"props":3067,"children":3068},{"style":422},[3069],{"type":57,"value":445},{"type":52,"tag":405,"props":3071,"children":3072},{"style":422},[3073],{"type":57,"value":111},{"type":52,"tag":405,"props":3075,"children":3077},{"class":407,"line":3076},16,[3078,3082,3086,3090,3094,3098,3102],{"type":52,"tag":405,"props":3079,"children":3080},{"style":422},[3081],{"type":57,"value":2820},{"type":52,"tag":405,"props":3083,"children":3084},{"style":631},[3085],{"type":57,"value":1383},{"type":52,"tag":405,"props":3087,"children":3088},{"style":422},[3089],{"type":57,"value":445},{"type":52,"tag":405,"props":3091,"children":3092},{"style":422},[3093],{"type":57,"value":450},{"type":52,"tag":405,"props":3095,"children":3096},{"style":422},[3097],{"type":57,"value":455},{"type":52,"tag":405,"props":3099,"children":3100},{"style":458},[3101],{"type":57,"value":712},{"type":52,"tag":405,"props":3103,"children":3104},{"style":422},[3105],{"type":57,"value":2950},{"type":52,"tag":405,"props":3107,"children":3109},{"class":407,"line":3108},17,[3110],{"type":52,"tag":405,"props":3111,"children":3112},{"style":422},[3113],{"type":57,"value":3114},"      }\n",{"type":52,"tag":405,"props":3116,"children":3118},{"class":407,"line":3117},18,[3119],{"type":52,"tag":405,"props":3120,"children":3121},{"style":422},[3122],{"type":57,"value":3123},"    ]\n",{"type":52,"tag":405,"props":3125,"children":3127},{"class":407,"line":3126},19,[3128],{"type":52,"tag":405,"props":3129,"children":3130},{"style":422},[3131],{"type":57,"value":3132},"  },\n",{"type":52,"tag":405,"props":3134,"children":3136},{"class":407,"line":3135},20,[3137,3141,3145,3149,3153],{"type":52,"tag":405,"props":3138,"children":3139},{"style":422},[3140],{"type":57,"value":434},{"type":52,"tag":405,"props":3142,"children":3143},{"style":437},[3144],{"type":57,"value":153},{"type":52,"tag":405,"props":3146,"children":3147},{"style":422},[3148],{"type":57,"value":445},{"type":52,"tag":405,"props":3150,"children":3151},{"style":422},[3152],{"type":57,"value":450},{"type":52,"tag":405,"props":3154,"children":3155},{"style":631},[3156],{"type":57,"value":3157}," 0.95\n",{"type":52,"tag":405,"props":3159,"children":3161},{"class":407,"line":3160},21,[3162],{"type":52,"tag":405,"props":3163,"children":3164},{"style":422},[3165],{"type":57,"value":673},{"type":52,"tag":60,"props":3167,"children":3168},{},[3169,3171,3177,3179,3185],{"type":57,"value":3170},"Start at ",{"type":52,"tag":104,"props":3172,"children":3174},{"className":3173},[],[3175],{"type":57,"value":3176},"0.95",{"type":57,"value":3178}," (drop 95%, keep 5% as sentinel data) so you can confirm the\nrule isn't catching real errors before tightening to ",{"type":52,"tag":104,"props":3180,"children":3182},{"className":3181},[],[3183],{"type":57,"value":3184},"1.0",{"type":57,"value":1302},{"type":52,"tag":382,"props":3187,"children":3189},{"id":3188},"step-7-watch-the-rule-for-24-48h",[3190],{"type":57,"value":3191},"Step 7 — Watch the rule for 24-48h",{"type":52,"tag":60,"props":3193,"children":3194},{},[3195],{"type":57,"value":3196},"After creating the rule:",{"type":52,"tag":78,"props":3198,"children":3199},{},[3200,3220,3225],{"type":52,"tag":82,"props":3201,"children":3202},{},[3203,3205,3210,3212,3218],{"type":57,"value":3204},"Confirm matching events are no longer being captured by running the same\nfilter against a short window scoped to ",{"type":52,"tag":86,"props":3206,"children":3207},{},[3208],{"type":57,"value":3209},"after",{"type":57,"value":3211}," the rule was created\n(e.g. ",{"type":52,"tag":104,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":57,"value":3217},"WHERE timestamp > now() - INTERVAL 1 HOUR",{"type":57,"value":3219}," once an hour has passed).\nDon't re-run the 7-day estimate from step 5 — suppression only applies to\nnew events, so historical events in the window will still be there and the\ncount won't drop.",{"type":52,"tag":82,"props":3221,"children":3222},{},[3223],{"type":57,"value":3224},"Watch related active issues over the post-creation window — if their volume\ndrops while non-related issues hold steady, the rule was scoped correctly",{"type":52,"tag":82,"props":3226,"children":3227},{},[3228,3230,3235,3237,3243,3244,3250],{"type":57,"value":3229},"If a related real issue's volume drops too (false-positive), ask the user to\ndisable the rule via ",{"type":52,"tag":86,"props":3231,"children":3232},{},[3233],{"type":57,"value":3234},"Project settings → Error tracking → Suppression rules",{"type":57,"value":3236},"\nimmediately and tighten the filter before re-creating it. The MCP tools to\nedit or delete a rule (",{"type":52,"tag":104,"props":3238,"children":3240},{"className":3239},[],[3241],{"type":57,"value":3242},"error-tracking-suppression-rules-partial-update",{"type":57,"value":111},{"type":52,"tag":104,"props":3245,"children":3247},{"className":3246},[],[3248],{"type":57,"value":3249},"-destroy",{"type":57,"value":3251},") are not enabled — the agent has no way to recover programmatically.",{"type":52,"tag":60,"props":3253,"children":3254},{},[3255],{"type":57,"value":3256},"If you see signs of false positives (a real issue going quiet at the same time\nthe rule was created), prefer disabling the rule over deleting it — that\npreserves the rule's configuration for forensic review.",{"type":52,"tag":66,"props":3258,"children":3260},{"id":3259},"tips",[3261],{"type":57,"value":3262},"Tips",{"type":52,"tag":78,"props":3264,"children":3265},{},[3266,3271,3276,3297,3309],{"type":52,"tag":82,"props":3267,"children":3268},{},[3269],{"type":57,"value":3270},"Project settings → Error tracking → Suppression rules shows the same data;\nmention this when the user asks where rules live in the UI.",{"type":52,"tag":82,"props":3272,"children":3273},{},[3274],{"type":57,"value":3275},"Suppression applies at ingestion. Existing issues from past events keep their\ndata; only new events are dropped.",{"type":52,"tag":82,"props":3277,"children":3278},{},[3279,3281,3287,3289,3295],{"type":57,"value":3280},"For a status-only change (don't drop the data, just hide it from the active\nlist), prefer ",{"type":52,"tag":104,"props":3282,"children":3284},{"className":3283},[],[3285],{"type":57,"value":3286},"error-tracking-issues-partial-update",{"type":57,"value":3288}," with ",{"type":52,"tag":104,"props":3290,"children":3292},{"className":3291},[],[3293],{"type":57,"value":3294},"status: \"suppressed\"",{"type":57,"value":3296},"\nover a suppression rule.",{"type":52,"tag":82,"props":3298,"children":3299},{},[3300,3302,3307],{"type":57,"value":3301},"The schema explicitly warns the model not to create match-all rules. If the\nuser asks \"suppress everything from extensions\", still scope by stack trace or\nURL — never leave ",{"type":52,"tag":104,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":57,"value":2730},{"type":57,"value":3308}," empty.",{"type":52,"tag":82,"props":3310,"children":3311},{},[3312],{"type":57,"value":3313},"A suppression rule that turns out to be too narrow is harmless (some noise\nleaks through). A rule that's too broad silently destroys real data — bias\ntoward narrow.",{"type":52,"tag":3315,"props":3316,"children":3317},"style",{},[3318],{"type":57,"value":3319},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3321,"total":3419},[3322,3336,3348,3360,3373,3386,3402],{"slug":3323,"name":3323,"fn":3324,"description":3325,"org":3326,"tags":3327,"stars":20,"repoUrl":21,"updatedAt":3335},"analyzing-expensive-users","analyze expensive users in AI observability","Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top spenders, expensive users, per-user LLM cost, user-level cost drivers, or patterns behind high AI observability spend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3328,3330,3333,3334],{"name":3329,"slug":28,"type":15},"Analytics",{"name":3331,"slug":3332,"type":15},"Cost Optimization","cost-optimization",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-07-28T05:34:11.117757",{"slug":3337,"name":3337,"fn":3338,"description":3339,"org":3340,"tags":3341,"stars":20,"repoUrl":21,"updatedAt":3347},"auditing-endpoints","audit PostHog project endpoints","Audit every endpoint in a PostHog project for staleness, failed materialisations, and unused materialised versions. Use when the user asks \"what endpoints can I clean up?\", \"are any of my endpoints broken?\", \"which materialised versions are still being called?\", or wants a one-shot cleanup pass over the Endpoints product. Produces a prioritised report grouped by issue type, with recommended actions but does not modify anything without explicit confirmation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3342,3343,3346],{"name":3329,"slug":28,"type":15},{"name":3344,"slug":3345,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},"2026-06-08T08:08:33.693989",{"slug":3349,"name":3349,"fn":3350,"description":3351,"org":3352,"tags":3353,"stars":20,"repoUrl":21,"updatedAt":3359},"auditing-warehouse-source-health","audit PostHog data warehouse source health","Audit the health of a PostHog project's data warehouse sources and syncs — find every broken or degraded source connection, sync schema, and webhook channel. Use when the user asks \"why are my imports failing?\", \"what's broken with my sources?\", \"why is my warehouse data stale?\", or wants a one-shot triage of source\u002Fsync health before deciding where to dig in. Produces a prioritized report grouped by severity, with recommended next steps. For materialized-view health use `auditing-warehouse-view-health`; for a single failing sync use `diagnosing-failed-warehouse-syncs`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3354,3355,3357,3358],{"name":3344,"slug":3345,"type":15},{"name":3356,"slug":30,"type":15},"Data Warehouse",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-06-18T08:22:57.67984",{"slug":3361,"name":3361,"fn":3362,"description":3363,"org":3364,"tags":3365,"stars":20,"repoUrl":21,"updatedAt":3372},"auditing-warehouse-view-health","audit PostHog materialized view health","Audit the health of a PostHog project's materialized views (saved queries) — find every failed materialization and flag unused or stale materialized views that cost storage and compute. Use when the user asks \"which of my views are broken?\", \"why is this materialized view failing?\", \"are any of my views wasting compute?\", or wants a one-shot triage of view health. For source\u002Fsync health use `auditing-warehouse-source-health`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3366,3367,3368,3371],{"name":3344,"slug":3345,"type":15},{"name":3356,"slug":30,"type":15},{"name":3369,"slug":3370,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-06-18T08:25:10.936787",{"slug":3374,"name":3374,"fn":3375,"description":3376,"org":3377,"tags":3378,"stars":20,"repoUrl":21,"updatedAt":3385},"authoring-error-tracking-alerts","author PostHog error tracking alerts","Author error tracking alerts that fire when an issue is created, reopened, or starts spiking. Use when the user asks to set up error notifications, route exceptions to Slack\u002Fwebhook\u002FLinear, or evaluate which error events are worth alerting on. Covers trigger-event selection, integration choice, dedup against existing alerts, and shipping with the canonical message body shape.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3379,3382,3383,3384],{"name":3380,"slug":3381,"type":15},"Alerting","alerting",{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-06-18T08:24:40.318583",{"slug":3387,"name":3387,"fn":3388,"description":3389,"org":3390,"tags":3391,"stars":20,"repoUrl":21,"updatedAt":3401},"authoring-log-alerts","author log alerts in PostHog","Author useful, low-noise log alerts on services in a PostHog project. Use when the user asks to set up alerts for their logs, suggest alerts they should add, or evaluate whether a service is worth monitoring. Covers service triage, baseline characterisation, threshold drafting, back-testing via simulate, and shipping with a notification destination.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3392,3393,3396,3397,3400],{"name":3329,"slug":28,"type":15},{"name":3394,"slug":3395,"type":15},"Monitoring","monitoring",{"name":13,"slug":14,"type":15},{"name":3398,"slug":3399,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},"2026-07-18T05:10:54.430898",{"slug":3403,"name":3403,"fn":3404,"description":3405,"org":3406,"tags":3407,"stars":20,"repoUrl":21,"updatedAt":3418},"building-workflows","build and edit PostHog workflows","Build, edit, test, enable, and monitor PostHog workflows over MCP. Author the action\u002Fedge graph so it runs and opens cleanly in the visual editor, then change drafts surgically with patch operations. Use when asked to build, set up, automate, change, fix, or debug a workflow, campaign, broadcast, drip sequence, or event-triggered automation in the workflows product.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3408,3411,3414,3415],{"name":3409,"slug":3410,"type":15},"Automation","automation",{"name":3412,"slug":3413,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},{"name":3416,"slug":3417,"type":15},"Workflow Automation","workflow-automation","2026-07-28T05:34:12.167015",61,{"items":3421,"total":3538},[3422,3429,3435,3442,3449,3456,3464,3471,3485,3500,3510,3528],{"slug":3323,"name":3323,"fn":3324,"description":3325,"org":3423,"tags":3424,"stars":20,"repoUrl":21,"updatedAt":3335},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3425,3426,3427,3428],{"name":3329,"slug":28,"type":15},{"name":3331,"slug":3332,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":3337,"name":3337,"fn":3338,"description":3339,"org":3430,"tags":3431,"stars":20,"repoUrl":21,"updatedAt":3347},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3432,3433,3434],{"name":3329,"slug":28,"type":15},{"name":3344,"slug":3345,"type":15},{"name":9,"slug":8,"type":15},{"slug":3349,"name":3349,"fn":3350,"description":3351,"org":3436,"tags":3437,"stars":20,"repoUrl":21,"updatedAt":3359},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3438,3439,3440,3441],{"name":3344,"slug":3345,"type":15},{"name":3356,"slug":30,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":3361,"name":3361,"fn":3362,"description":3363,"org":3443,"tags":3444,"stars":20,"repoUrl":21,"updatedAt":3372},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3445,3446,3447,3448],{"name":3344,"slug":3345,"type":15},{"name":3356,"slug":30,"type":15},{"name":3369,"slug":3370,"type":15},{"name":9,"slug":8,"type":15},{"slug":3374,"name":3374,"fn":3375,"description":3376,"org":3450,"tags":3451,"stars":20,"repoUrl":21,"updatedAt":3385},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3452,3453,3454,3455],{"name":3380,"slug":3381,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":3387,"name":3387,"fn":3388,"description":3389,"org":3457,"tags":3458,"stars":20,"repoUrl":21,"updatedAt":3401},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3459,3460,3461,3462,3463],{"name":3329,"slug":28,"type":15},{"name":3394,"slug":3395,"type":15},{"name":13,"slug":14,"type":15},{"name":3398,"slug":3399,"type":15},{"name":9,"slug":8,"type":15},{"slug":3403,"name":3403,"fn":3404,"description":3405,"org":3465,"tags":3466,"stars":20,"repoUrl":21,"updatedAt":3418},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3467,3468,3469,3470],{"name":3409,"slug":3410,"type":15},{"name":3412,"slug":3413,"type":15},{"name":9,"slug":8,"type":15},{"name":3416,"slug":3417,"type":15},{"slug":3472,"name":3472,"fn":3473,"description":3474,"org":3475,"tags":3476,"stars":20,"repoUrl":21,"updatedAt":3484},"check-posthog-loading","inspect PostHog SDK loading across URLs","Inspect how the PostHog JavaScript SDK is loaded across a list of URLs. Use to confirm consistent installation across pages, find pages missing the snippet, detect mismatched API keys or hosts between pages, and verify the load method (head snippet vs deferred vs array.js).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3477,3478,3479,3482,3483],{"name":3329,"slug":28,"type":15},{"name":18,"slug":19,"type":15},{"name":3480,"slug":3481,"type":15},"Frontend","frontend",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-05-07T05:56:19.828048",{"slug":3486,"name":3486,"fn":3487,"description":3488,"org":3489,"tags":3490,"stars":20,"repoUrl":21,"updatedAt":3499},"consuming-endpoints-from-client-code","integrate PostHog endpoints into client applications","Wire a PostHog endpoint into a client app or SDK. Covers fetching the OpenAPI spec, generating a typed client with openapi-generator or @hey-api\u002Fopenapi-ts, sending the right auth header, shaping the variables payload (HogQL code_name vs insight breakdown property), handling rate-limit and materialised-endpoint error responses. Use when the user says \"how do I call my endpoint\", \"generate a client for this\", or \"what auth header do I use\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3491,3494,3495,3496],{"name":3492,"slug":3493,"type":15},"API Development","api-development",{"name":3480,"slug":3481,"type":15},{"name":9,"slug":8,"type":15},{"name":3497,"slug":3498,"type":15},"SDK","sdk","2026-06-08T08:08:34.929454",{"slug":3501,"name":3501,"fn":3502,"description":3503,"org":3504,"tags":3505,"stars":20,"repoUrl":21,"updatedAt":3509},"copying-endpoints-across-projects","copy PostHog endpoints across projects","Copy a PostHog endpoint (a saved HogQL\u002Finsight query exposed as an API route) to another project in the same organization, or duplicate it under a new name in the same project. Use when the user wants to duplicate an endpoint, promote an endpoint from staging to production, replicate an endpoint's query\u002Fvariables\u002Ffreshness config in another workspace, or clone an endpoint to iterate on it. Unlike feature flags and experiments, endpoints have NO native cross-project copy tool — this skill covers the read-then-recreate flow (endpoint-get then endpoint-create), the active-project switching it requires, name-collision checks, and the safe defaults (land unmaterialised in the target, verify with endpoint-run). Does not cover editing endpoint versions (see managing-endpoint-versions) or authoring a brand-new endpoint from scratch (see creating-an-endpoint).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3506,3507,3508],{"name":3492,"slug":3493,"type":15},{"name":3398,"slug":3399,"type":15},{"name":9,"slug":8,"type":15},"2026-07-15T05:29:58.442727",{"slug":3511,"name":3511,"fn":3512,"description":3513,"org":3514,"tags":3515,"stars":20,"repoUrl":21,"updatedAt":3527},"creating-ai-subscription","schedule recurring AI-generated PostHog reports","Create a recurring AI-generated PostHog report — schedule a free-text prompt to run on a cron, with the LLM-synthesized markdown delivered to email or Slack on each tick. Use when the user wants a recurring AI summary of X on any cadence (daily, weekly, monthly, yearly) rather than a one-off report. (To attach an AI summary to an existing insight\u002Fdashboard subscription instead of a free-text prompt, see `managing-subscriptions` and its `summary_enabled` option.)\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3516,3517,3520,3521,3524],{"name":3409,"slug":3410,"type":15},{"name":3518,"slug":3519,"type":15},"Email","email",{"name":9,"slug":8,"type":15},{"name":3522,"slug":3523,"type":15},"Reporting","reporting",{"name":3525,"slug":3526,"type":15},"Slack","slack","2026-06-09T07:32:27.935712",{"slug":3529,"name":3529,"fn":3530,"description":3531,"org":3532,"tags":3533,"stars":20,"repoUrl":21,"updatedAt":3537},"creating-an-endpoint","create PostHog API endpoints","Create a PostHog endpoint with the right shape on the first try — covers query kind choice, name conventions, what to expose as variables (HogQL code_name vs insight breakdown), data_freshness_seconds, and whether to materialise on day one. Use when the user says \"create an endpoint\", \"expose this query as an API\", \"turn this insight into an endpoint\", or asks for help structuring a new endpoint. Steers away from common mistakes: materialising a query with cohort breakdowns or compare mode, inline-only variables on a materialised endpoint, unbounded date ranges, ambiguous names.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3534,3535,3536],{"name":3329,"slug":28,"type":15},{"name":3492,"slug":3493,"type":15},{"name":9,"slug":8,"type":15},"2026-06-08T08:08:29.624498",231]