Repository navigation
Conversation
…query builder Replace the condition rows in the custom inbound filter modal with SearchQueryBuilder. Each filter token maps to one API condition with an operator: a negated key is does_not_match, release comparisons map to gt/gte/lt/lte, and contains/starts with/ends with fold into glob values and back. The table shows the operator and joins negated values with and. Co-Authored-By: Claude <noreply@anthropic.com>
…und-filter-query-builder
Contributor
📊 Type Coverage Diff
🔍 3 new type safety issues introducedNon-null assertions (
Type assertions (
This is informational only and does not block the PR. |
shellmayr
marked this pull request as ready for review
October 15, 2026 07:36
A legacy newline list of the project settings moves into the custom filters table as one row with one condition, marked by legacyFilter. Its lines must round-trip exactly, comments included, and the legacy API maps the list onto that one condition, so the row cannot take the query builder. Edit such a row with the plain line list the settings use, one pattern per line, with its data type fixed. A filter made here keeps the query builder. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ery-builder' into shellmayr/feat/inbound-filter-query-builder
Contributor
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit a26774f. Configure here.
…legacy id A row that holds a legacy list reports its outcomes under the id of that list, not under custom-inbound-filter:<id>, so the table looked up an empty trend for it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Replaces the condition rows in the custom inbound filter modal with
SearchQueryBuilder. Free text,OR, and parentheses are disallowed, and the key menu only offers the condition types of the selected data type.Each filter token maps to one API condition, and conditions gain an
operatorfield (matches,does_not_match,gt,gte,lt,lte). Saved conditions map back to tokens when editing.error_message:spammatchesspamerror_message:[a,b]matchesaorb!release:1.*does_not_match1.*timeoutmatches*timeout*release:>=2.0.0gte2.0.0Stored globs fold back into the matching wildcard operator:
*x*shows as "contains",x*as "starts with",*xas "ends with".releaseoffers the comparison operators,ip_addressonly "is" and "is not".Changing the data type remounts the builder. A condition the new data type does not offer turns invalid and blocks the save, as do unknown condition types.
The filters table shows the operator next to the value and joins negated values with "and" instead of "or".
A row that holds a legacy list (
legacyFilterset, once a list reaches thev2stage) keeps the plain line list: one pattern per line, trimmed and blank lines dropped, with its condition and data type fixed. The query builder only edits filters made in the table.The backend ignores
operatortoday, so negations and comparisons save as plain matches until the backend accepts the field. This PR should land after that backend change.Example:
Screen.Recording.2026-10-09.at.22.31.25.mov