feat(taxonomic-filter): suggest core events for an events search with no results - #107219
Conversation
… no results When a search in the events list matches no event name, the picker asks the decision model which PostHog core events the search describes, and shows up to three of them as one-click suggestions in the empty state. - Each core event is one yes/no question, sent in parallel requests that stay within the gateway's question limit. - Only events the project has ingested are suggested, so a suggestion never leads to an empty insight. - The same value rules as search intent keep emails, URLs, paths, ids and tokens away from the model, and answers are cached per team as JSON text. - A new match_events action on the core taxonomic_search_intent endpoint serves it, behind the taxonomic-filter-event-match flag and the US-only dark launch. - An eval suite scores recall and precision on invented searches. Generated-By: PostHog Desktop Task-Id: 3ac32b1f-8bd8-4882-972e-bdd994e16755
|
😎 Merged successfully - details. |
🤖 CI report
|
| Function | Location | Complexity | Limit |
|---|---|---|---|
InfiniteListRow |
frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx:432 |
44 | 10 |
renderItemContents |
frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx:198 |
39 | 10 |
InfiniteListEmptyState |
frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx:703 |
24 | 10 |
InfiniteList |
frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx:877 |
16 | 10 |
setSearchQuery |
frontend/src/lib/components/TaxonomicFilter/taxonomicSearchIntentLogic.ts:171 |
12 | 10 |
setIntent |
frontend/src/lib/components/TaxonomicFilter/taxonomicSearchIntentLogic.ts:212 |
12 | 10 |
✅ Duplication (Python) — clean
New Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.
✅ Duplication (TypeScript) — clean
New TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.
⚠️ Comment density — 5% of added code lines are comments (53 of 1110)
This section warns when comments are more than 3% of the code lines a PR adds, and alerts above 6%. Before agent-assisted PRs, the typical share was about 2%. Only full-line comments count. Docstrings, generated files, snapshots, migrations, and workflow files are left out.
Comments that restate the code, record how the change came about, or narrate the next line add noise for the next reader. Keep the comments that explain a reason the code cannot show, and remove the rest. See .agents/skills/writing-code-comments/SKILL.md for the house rules.
Files with the most added comment lines:
| File | Comment lines | Added lines |
|---|---|---|
frontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.ts |
19 | 213 |
posthog/taxonomic_search_intent/event_match.py |
14 | 180 |
posthog/taxonomic_search_intent/classify.py |
5 | 85 |
posthog/taxonomic_search_intent/test_event_match.py |
4 | 129 |
products/posthog_ai/evals/taxonomic_filter/eval_event_match.py |
3 | 86 |
frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx |
2 | 45 |
posthog/api/taxonomic_search_intent.py |
2 | 67 |
products/posthog_ai/evals/taxonomic_filter/scorers.py |
2 | 40 |
This check does not block merging. It updates on every push and clears when the share drops.
⚠️ Bundle size — 🔺 +3.1 KiB (+0.0%)
Uncompressed size of every built .js bundle, compared against the base branch.
Total: 68.87 MiB · 🔺 +3.1 KiB (+0.0%)
| File | Size | Δ vs base |
|---|---|---|
render-query/src/render-query/render-query.js |
20.26 MiB | 🔺 +3.1 KiB (+0.0%) |
Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report
✅ Eager graph — within budget
How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.
| Root | Eager (shipped) | Δ vs base | Budget |
|---|---|---|---|
entry (logged-out pages, app bootstrap)src/index.tsx |
1.57 MiB · 22 files | no change | █████████░ 85.2% of 1.84 MiB |
logged-out boot: index + App + bootApp (preloaded by every page, including /login)src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts |
3.58 MiB · 628 files | 🔺 +263 B (+0.0%) | █████████░ 88.7% of 4.03 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
7.37 MiB · 2,326 files | 🔺 +2.9 KiB (+0.0%) | █████████░ 88.4% of 8.34 MiB |
🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonMarkdown/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/RichContentEditor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/CodeSnippet/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
Largest files eagerly shipped from src/index.tsx
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/index.tsx |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 854 B | src/scenes/ChunkLoadErrorBoundary.tsx |
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
| Size | File |
|---|---|
| 301.8 KiB | ../node_modules/.pnpm/posthog-js@1.434.14_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 267.6 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 100.4 KiB | src/lib/api.ts |
| 85.5 KiB | src/products.tsx |
| 69.1 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 63.9 KiB | src/lib/utils/eventUsageLogic.ts |
| 38.7 KiB | ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js |
| 33.9 KiB | ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js |
| 28.3 KiB | src/scenes/scenes.ts |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 301.8 KiB | ../node_modules/.pnpm/posthog-js@1.434.14_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 271.7 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 267.6 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 100.4 KiB | src/lib/api.ts |
| 98.5 KiB | ../packages/quill/packages/quill/dist/index.js |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js |
| 85.5 KiB | src/products.tsx |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
✅ Toolbar bundle — eager 2.37 MiB within budget
What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.
| Metric | Size | Δ vs base | Budget |
|---|---|---|---|
| Eager (shipped) entry + static imports |
2.37 MiB · 19 files | 🔺 +60 B (+0.0%) | ████░░░░░░ 41.4% of 5.72 MiB |
| Deferred (lazy) | 2.10 MiB · 44 files | no change | n/a — loads on demand |
Loader dist/toolbar.js |
1.2 KiB | no change | █░░░░░░░░░ 6.0% of 19.5 KiB |
Largest eagerly-shipped chunks
| Size | File |
|---|---|
| 791.8 KiB | dist/toolbar/toolbar-app-4HUMWRCI.css |
| 650.8 KiB | dist/toolbar/chunk-chunk-MMB3LZEJ.js |
| 483.6 KiB | dist/toolbar/chunk-chunk-LP5DDLVQ.js |
| 138.3 KiB | dist/toolbar/chunk-chunk-DTMVPA7M.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-FDH2IBXT.js |
| 75.2 KiB | dist/toolbar/toolbar-app-YIFUHPPS.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-TSAL54PB.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-JRAPXGTC.js |
| 21.0 KiB | dist/toolbar/chunk-chunk-W2JESTXP.js |
| 6.8 KiB | dist/toolbar/chunk-chunk-DV7IWQNF.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🔺 +83.6 KiB (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 944.81 MiB · 🔺 +83.6 KiB (+0.0%)
ℹ️ MCP UI apps size — 33 app(s), 17630.1 KB JS
Built size of each MCP UI app (main.js + styles.css).
| App | JS | CSS |
|---|---|---|
| debug | 597.9 KB | 196.2 KB |
| action | 454.1 KB | 196.2 KB |
| action-list | 564.2 KB | 196.2 KB |
| cohort | 453.1 KB | 196.2 KB |
| cohort-list | 563.2 KB | 196.2 KB |
| email-template | 452.9 KB | 196.2 KB |
| error-details | 469.1 KB | 196.2 KB |
| error-issue | 453.8 KB | 196.2 KB |
| error-issue-list | 564.1 KB | 196.2 KB |
| experiment | 561.3 KB | 196.2 KB |
| experiment-list | 564.9 KB | 196.2 KB |
| experiment-results | 566.3 KB | 196.2 KB |
| feature-flag | 566.8 KB | 196.2 KB |
| feature-flag-list | 570.5 KB | 196.2 KB |
| feature-flag-testing | 457.3 KB | 196.2 KB |
| inline-scan | 453.6 KB | 196.2 KB |
| insight-actors | 562.3 KB | 196.2 KB |
| invite-email-preview | 452.3 KB | 196.2 KB |
| llm-costs | 559.3 KB | 196.2 KB |
| session-recording | 455.3 KB | 196.2 KB |
| survey | 454.7 KB | 196.2 KB |
| survey-global-stats | 561.9 KB | 196.2 KB |
| survey-list | 564.9 KB | 196.2 KB |
| survey-stats | 561.9 KB | 196.2 KB |
| trace-span | 453.5 KB | 196.2 KB |
| trace-span-list | 564.1 KB | 196.2 KB |
| vision-observation-list | 563.3 KB | 196.2 KB |
| workflow | 453.4 KB | 196.2 KB |
| workflow-list | 563.5 KB | 196.2 KB |
| loops-review | 457.8 KB | 196.2 KB |
| query-results | 774.1 KB | 196.2 KB |
| render-ui | 857.0 KB | 196.2 KB |
| visual-review-snapshots | 457.9 KB | 196.2 KB |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
👀 Auto-assigned reviewersThese soft owners were skipped because they only have minor changes here. Nothing blocks merge, so self-assign if you'd like a look:
Soft owners come from each directory's |
PR overviewAll previously flagged issues have been addressed. No open security concerns remain on this pull request. Security reviewNo open security issues remain on this pull request. Fixed/addressed: 2 · PR risk: 0/10 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 263cf80cbf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
🤖 Robot, on behalf of the PR author: Note 🤖 Automated comment by QA Swarm — not written by a human Multi-perspective review: router (cheap-first pass) + delegated lenses (qa-team, paul-reviewer, xp-reviewer, security-audit, engineering-systems-thinking as warranted) Verdict: ✅ APPROVE (round 4 @ ad10324)A fresh full-diff pass at HEAD found one LOW observation and nothing that blocks. The redaction, fan-out, caching, team scoping and the API gate held up under a scoped deep read. Key findings
Convergence
Reviewer summaries
Previous rounds (3)round 3 @ b0529cf — ✅ APPROVE: second batch of bot findings fixed; incremental review found nothing that holds. Automated by QA Swarm — not a human review |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe change adds a feature-gated flow that matches qualifying event searches to ingested core events. The API validates requests and returns ranked matches. The taxonomic filter requests and displays suggestions in the Events empty state, and selection adds a suggested event to the Events group when present. The change also adds matching tests, API tests, a Storybook example, MCP API definitions, and an evaluation suite with two scorers. Priority: ⬇️ Low Merge Risk: 🟡 Moderate · up to Resolve the credential exposure before merging. The suggestion limit can also leave an Events search without a visible suggestion despite an eligible match. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to Eligible event searches can now be sent to a decision service. The existing value checks do not exclude every kind of private text, although rollout gates, authentication and request limits constrain exposure. A related search feature already uses the same checks, so the extent of additional exposure is uncertain. Retained concerns
Security review detailsSecurity Blast Radius
Security Findings and Attack Paths
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 1✅ Passed checks (1 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
Note
Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.
🟡 Other comments (1)
frontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.ts-138-146 (1)
138-146: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winClear stale matches when the guard returns early.
If the query becomes too short, too long, or the flag is off, the listener returns before
breakpoint(...). An in-flight request for the previous query is not cancelled. That request can then callsetEventMatchesfor the old query. ThesuggestedEventsselector hides it, because the query differs. However, the listener still fires thetaxonomic filter event match suggestedcapture for a search the user already left. This inflates the flag's success metric. Callbreakpoint()before the early return so an earlier run is cancelled.Proposed fix
) { + breakpoint() return }
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
Review profile: QUIET
Plan: Enterprise
Run ID: 489a3cd8-55c3-4062-a467-664235477955
⛔ Files ignored due to path filters (3)
frontend/src/generated/core/api.schemas.tsis excluded by!**/generated/**frontend/src/generated/core/api.tsis excluded by!**/generated/**frontend/src/generated/core/api.zod.tsis excluded by!**/generated/**
📒 Files selected for processing (16)
frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsxfrontend/src/lib/components/TaxonomicFilter/TaxonomicEventMatchSuggestions.tsxfrontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsxfrontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.test.tsfrontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.tsfrontend/src/lib/constants.tsxposthog/api/taxonomic_search_intent.pyposthog/api/test/test_taxonomic_search_intent.pyposthog/taxonomic_search_intent/classify.pyposthog/taxonomic_search_intent/contracts.pyposthog/taxonomic_search_intent/event_match.pyposthog/taxonomic_search_intent/test_event_match.pyproducts/posthog_ai/evals/taxonomic_filter/eval_event_match.pyproducts/posthog_ai/evals/taxonomic_filter/scorers.pyservices/mcp/definitions/core.yamlservices/mcp/src/api/generated.ts
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.
…t event exclusions - The value rules now skip a search when any word is a URL, a path, or a key=value pair, not only when the search starts with one. This covers both tab classification and event match. - Event match suggestions drop any event the picker excludes from its events list, and a click on an excluded event does nothing. - The match_events action has its own lower throttle, because each cache miss makes several model requests. Generated-By: PostHog Desktop Task-Id: 3ac32b1f-8bd8-4882-972e-bdd994e16755
The candidate map held (label, meaning) tuples of two strings, which a caller can swap without a type error. A frozen CoreEventCandidate dataclass names both fields. Generated-By: PostHog Desktop Task-Id: 3ac32b1f-8bd8-4882-972e-bdd994e16755
There was a problem hiding this comment.
Actionable comments posted: 1
Note
Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.
🟡 Other comments (1)
frontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.ts-136-136 (1)
136-136: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winInvalidate event-match suggestions when the project changes.
When the picker remains mounted across a project change, the unchanged query can pass the selector while
eventMatchesstill contains results fetched for the previous project. Store the project ID with each response, reject mismatched results, and request matches for the new project.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
Review profile: QUIET
Plan: Enterprise
Run ID: c75a3627-275e-4ae3-bcb6-2b23bf4b72ae
📒 Files selected for processing (7)
frontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.test.tsfrontend/src/lib/components/TaxonomicFilter/taxonomicEventMatchLogic.tsposthog/api/taxonomic_search_intent.pyposthog/taxonomic_search_intent/classify.pyposthog/taxonomic_search_intent/event_match.pyposthog/taxonomic_search_intent/test_classify.pyposthog/taxonomic_search_intent/test_event_match.py
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 10 remain after this review.
…om another project - The word-level value rules strip brackets, quotes and trailing punctuation first, so a search such as "visits (https://example.com/reset)" stays away from the model. - Event match answers carry the project they were fetched for, and the suggestions hide an answer from another project. - The inline kea types match what typegen generates, which the frontend schema checks compare against. Generated-By: PostHog Desktop Task-Id: 3ac32b1f-8bd8-4882-972e-bdd994e16755
A new stamphog review started for this PR — the fresh verdict replaces this approval.
|
FLASH MODE - Faster, but stupid, use regular ReviewHog for a heavy review 🦔 PostHog Review reviewed this pull requestFound 2 must fix, 1 should fix, 1 consider. Published 4 findings (view the review). |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lusions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generated-By: PostHog Desktop Task-Id: 66653d8e-edaa-432f-8039-c6933798e7f9
…h_events The picker now limits suggestions after it removes excluded events, so the backend returns all likely ingested events. The test still expected the old limit of three. Generated-By: PostHog Desktop Task-Id: 66653d8e-edaa-432f-8039-c6933798e7f9
…e browser The picker cleared the matches on every request error and reported nothing. The backend reports its own model failures (503), and 404 and 429 are expected. Other failures, such as a network error or a 500, are now sent to error tracking with the project ID and status only, without the search text. Generated-By: PostHog Desktop Task-Id: 66653d8e-edaa-432f-8039-c6933798e7f9
Generated-By: PostHog Desktop Task-Id: 66653d8e-edaa-432f-8039-c6933798e7f9
There was a problem hiding this comment.
Not approved yet — waiting on the conditions below.
Re-add the stamphog label to request another review once you have addressed this.
The size gate refused this pull request: it measures 922 substantive lines across 14 files, above the 800-line ceiling (and 1421 lines/22 files including generated and snapshot changes), so it exceeds the limit for automatic review regardless of the other gates passing. This spans new backend logic (event_match.py, classify.py changes), new frontend logic (taxonomicEventMatchLogic.ts and its tests), generated API schema/types, and a new eval suite—too much surface area for auto-review as a single unit.
To move forward, ask a human reviewer to look at this pull request directly, or split it into smaller, independently reviewable pull requests (for example: the placeholder/redaction change to classify.py and model_query response field, the backend match_events endpoint and event_match.py, the frontend suggestion UI and logic, and the mechanical regenerated files/eval suite as separate changes).
- posthog[bot] reviewed the current head.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✗ | too large for auto-review (922L substantive in global — ceiling is 800L; 922L, 14F total, 1421L/22F incl. docs/generated/snapshots) |
| tier | ✓ | T1-agent / T1d-complex (1421L, 22F, cross-cutting, feat) |
| stamphog 2.2.0 | .stamphog/policy.yml @ unknown · reviewed head ad10324 |
pauldambra
left a comment
There was a problem hiding this comment.
🤖 Robot, on behalf of the PR author:
Note
🤖 Automated comment by QA Swarm — not written by a human
QA Swarm round 4 review complete. See the inline comment.
There was a problem hiding this comment.
Not approved yet — waiting on the conditions below.
Re-add the stamphog label to request another review once you have addressed this.
The size gate refused this pull request: it measures 922 substantive lines across 14 files (ceiling is 800 lines), and 1421 lines across 22 files including generated/docs code, so it exceeds the threshold for automatic review. This spans frontend logic (taxonomicEventMatchLogic.ts and its test), backend changes (event_match.py, classify.py, API endpoint), generated API schemas, an eval suite, and MCP definitions — too much cross-cutting surface for stamphog to evaluate automatically, as confirmed by the T1d-complex tier.
Since this is a hard gate refusal and not a code judgment, please ask a human reviewer to look at this pull request, or consider splitting it — for example separating the mechanical/generated changes (OpenAPI types, MCP definitions, Storybook) from the core event_match feature and its eval suite, so each piece falls under the size ceiling.
- posthog[bot] reviewed the current head.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✗ | too large for auto-review (922L substantive in global — ceiling is 800L; 922L, 14F total, 1421L/22F incl. docs/generated/snapshots) |
| tier | ✓ | T1-agent / T1d-complex (1421L, 22F, cross-cutting, feat) |
| stamphog 2.2.0 | .stamphog/policy.yml @ unknown · reviewed head ad10324 |
Problem
Changes
visits <url>. Before, a search with any value in it got no answer at all.model_query.match_eventsaction on the coretaxonomic_search_intentendpoint serves it.hogli evals eval_event_match, scores recall and precision over invented searches.Note
Scope for v1: core events only, and only in the events tab. Custom events and the "All" tab are left for later, after manual testing.
How did you test this code?
test_event_match.pyalso catches one failed request that hides the other answers, a partial answer that gets cached, and a failure that is not reported.test_event_match.pycatches a value-shaped search that reaches the model, a request above the gateway's question limit, a suggestion for an event the project never sent, and a cache that answers across teams.test_taxonomic_search_intent.pycatches the action running without its own flag.taxonomicEventMatchLogic.test.tscatches a request outside the flag, a suggestion that outlives its search, a click that does not select the event, and repeated requests after a 404.Release status
Automatic notifications
Docs update
None. The flag is internal.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: PostHog Desktop (Claude Code), claude-opus-5-5
/improving-drf-endpoints,/writing-ui-components,/writing-user-facing-copy,/writing-tests,/writing-code-comments,/writing-pr-descriptions.SearchIntentControlKeepsOrderfrom feat(taxonomic-filter): suggest the right tab for a picker search #106531 fail once in three runs, as a flake. This PR does not change that story.Created with PostHog Desktop
🤖 Generated with Claude Code