Skip to content

TRT-2764: Resolved conflicts from #3721 - Fix search bar not completing search#3818

Open
not-stbenjam wants to merge 10 commits into
openshift:mainfrom
not-stbenjam:trt-2764-resolved
Open

TRT-2764: Resolved conflicts from #3721 - Fix search bar not completing search#3818
not-stbenjam wants to merge 10 commits into
openshift:mainfrom
not-stbenjam:trt-2764-resolved

Conversation

@not-stbenjam

@not-stbenjam not-stbenjam commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Summary

Rebased and resolved merge conflicts from #3721 against the current main branch.

The original PR fixed the search bar on table pages (Tests, Jobs, etc.) not completing searches after pressing Enter. The URL would update with the search terms, but the table stayed in a loading/spinner state indefinitely.

Conflicts resolved

The primary source of conflicts was that main had renamed all .js files to .jsx (e.g., TestTable.jsTestTable.jsx), while #3721 modified the original .js files. Git's rename detection successfully auto-merged all 16 changed files:

  • sippy-ng/src/tests/TestTable.jsx — immutable requestSearch, searchField prop
  • sippy-ng/src/tests/FeatureGates.jsx — immutable requestSearch
  • sippy-ng/src/jobs/JobTable.jsx — immutable requestSearch
  • sippy-ng/src/jobs/JobRunsTable.jsx — immutable requestSearch
  • sippy-ng/src/releases/PayloadStreamTestFailures.jsx — immutable requestSearch
  • sippy-ng/src/releases/PayloadStreamsTable.jsx — immutable requestSearch
  • sippy-ng/src/releases/PayloadTestFailures.jsx — immutable requestSearch
  • sippy-ng/src/releases/ReleasePayloadJobRuns.jsx — immutable requestSearch
  • sippy-ng/src/releases/ReleasePayloadPullRequests.jsx — immutable requestSearch
  • sippy-ng/src/releases/ReleasePayloadTable.jsx — immutable requestSearch
  • sippy-ng/src/repositories/RepositoriesTable.jsx — immutable requestSearch
  • sippy-ng/src/datagrid/GridToolbar.jsxsearchField prop, initializedFromFilter logic
  • sippy-ng/src/component_readiness/RegressedTestsPanel.jsxsearchField prop passthrough
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.jsxsearchField prop passthrough
  • sippy-ng/src/component_readiness/TriagedRegressions.jsxsearchField prop passthrough
  • sippy-ng/src/jobs/JobAnalysis.jsxsearchField prop passthrough

Original PR commits (preserved)

  1. 061b4cb — Fix search bar not completing search until page refresh (immutable requestSearch in 11 components)
  2. 45601e8 — Fix double-search stuck loading and repopulate search bar on refresh
  3. 9ca19dd — Fix double-search stuck loading and search bar repopulation (remove onBlur handler)
  4. db0562a — Only populate quick search from single positive filter

Validation

  • ESLint: 0 errors (12 pre-existing warnings)
  • Vitest: 32/32 tests pass
  • No conflict markers in merged files

Test plan

  • make lint passes in CI
  • make test passes in CI
  • Manual verification of search bar functionality

Supersedes #3721

Jira: https://issues.redhat.com/browse/TRT-2764

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Summary by CodeRabbit

  • New Features

    • Improved toolbar search across tables by targeting the relevant field for each view.
    • Search fields now restore their active query when reopening or refreshing filtered results.
    • Searches are triggered by pressing Enter or selecting Search; leaving the field no longer triggers a search.
  • Bug Fixes

    • Improved filter updates and clearing behavior across jobs, releases, repositories, tests, and feature-gate views.
    • Corrected release-tag search handling.
  • Tests

    • Added coverage for toolbar search initialization, controls, clearing, and filter updates.

openshift-trt and others added 5 commits July 1, 2026 03:24
The requestSearch function in 11 table components mutated the
filterModel object returned by useStableJSONQueryParam in place.
This corrupted the hook's internal ref state: the intermediate
re-render from setSearching(true) would detect the mutation via
the defaultValue fallback, update the serialized cache, and then
when the URL update arrived with the same content, the comparison
found no change, so the useEffect never fired and fetchData was
never called.

Fix by creating a new object with spread syntax instead of mutating
the existing filterModel. This ensures useStableJSONQueryParam sees
a genuinely new reference on re-render, triggering the useEffect
and completing the search.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…n refresh

Fix two issues with the quick search bar:

1. Pressing Enter or clicking the search icon when the same search term
   is already active no longer gets stuck in loading state. The
   requestSearch function in TestTable now checks if the filter would
   actually change before setting the searching state.

2. When refreshing the page, the quick search bar is now repopulated
   from the filterModel URL query parameter. GridToolbar accepts a new
   searchField prop that identifies which filter column corresponds to
   the search bar, and initializes the search text on mount.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two fixes in GridToolbar:

1. Remove onBlur handler from search TextField to prevent double-trigger
   when clicking the search icon (onBlur fires before onClick, causing
   two requestSearch calls that can race with state updates and leave
   isSearching stuck as true).

2. Only set initializedFromFilter ref when a search filter is actually
   found, so the search bar gets repopulated from URL params on page
   refresh even if the filterModel is initially empty on first render.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Only initialize the search bar from the URL filterModel when there is
exactly one filter on the search field and it uses a positive 'contains'
operator. This avoids misleadingly populating the search bar for NOT
matchers or when multiple filters exist on the same column.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: automatic mode

@openshift-ci openshift-ci Bot added the ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review label Jul 24, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 24, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 24, 2026

Copy link
Copy Markdown

@not-stbenjam: This pull request references TRT-2764 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the bug to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

Rebased and resolved merge conflicts from #3721 against the current main branch.

The original PR fixed the search bar on table pages (Tests, Jobs, etc.) not completing searches after pressing Enter. The URL would update with the search terms, but the table stayed in a loading/spinner state indefinitely.

Conflicts resolved

The primary source of conflicts was that main had renamed all .js files to .jsx (e.g., TestTable.jsTestTable.jsx), while #3721 modified the original .js files. Git's rename detection successfully auto-merged all 16 changed files:

  • sippy-ng/src/tests/TestTable.jsx — immutable requestSearch, searchField prop
  • sippy-ng/src/tests/FeatureGates.jsx — immutable requestSearch
  • sippy-ng/src/jobs/JobTable.jsx — immutable requestSearch
  • sippy-ng/src/jobs/JobRunsTable.jsx — immutable requestSearch
  • sippy-ng/src/releases/PayloadStreamTestFailures.jsx — immutable requestSearch
  • sippy-ng/src/releases/PayloadStreamsTable.jsx — immutable requestSearch
  • sippy-ng/src/releases/PayloadTestFailures.jsx — immutable requestSearch
  • sippy-ng/src/releases/ReleasePayloadJobRuns.jsx — immutable requestSearch
  • sippy-ng/src/releases/ReleasePayloadPullRequests.jsx — immutable requestSearch
  • sippy-ng/src/releases/ReleasePayloadTable.jsx — immutable requestSearch
  • sippy-ng/src/repositories/RepositoriesTable.jsx — immutable requestSearch
  • sippy-ng/src/datagrid/GridToolbar.jsxsearchField prop, initializedFromFilter logic
  • sippy-ng/src/component_readiness/RegressedTestsPanel.jsxsearchField prop passthrough
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.jsxsearchField prop passthrough
  • sippy-ng/src/component_readiness/TriagedRegressions.jsxsearchField prop passthrough
  • sippy-ng/src/jobs/JobAnalysis.jsxsearchField prop passthrough

Original PR commits (preserved)

  1. 061b4cb — Fix search bar not completing search until page refresh (immutable requestSearch in 11 components)
  2. 45601e8 — Fix double-search stuck loading and repopulate search bar on refresh
  3. 9ca19dd — Fix double-search stuck loading and search bar repopulation (remove onBlur handler)
  4. db0562a — Only populate quick search from single positive filter

Validation

  • ESLint: 0 errors (12 pre-existing warnings)
  • Vitest: 32/32 tests pass
  • No conflict markers in merged files

Test plan

  • make lint passes in CI
  • make test passes in CI
  • Manual verification of search bar functionality

Supersedes #3721

Jira: https://issues.redhat.com/browse/TRT-2764

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci
openshift-ci Bot requested review from deads2k and stbenjam July 24, 2026 11:25
@openshift-ci

openshift-ci Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: not-stbenjam
Once this PR has been reviewed and has the lgtm label, please assign dgoodwin for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

GridToolbar now initializes from matching filters and avoids blur-triggered searches. DataGrid search handlers update filter models immutably, while toolbar configurations specify the corresponding searchable field across affected views.

Changes

DataGrid search alignment

Layer / File(s) Summary
GridToolbar search behavior
sippy-ng/src/datagrid/GridToolbar.jsx, sippy-ng/src/datagrid/GridToolbar.test.jsx
Toolbar search initialization, submission controls, searchField props, and related tests were added or updated.
Immutable search filter updates
sippy-ng/src/jobs/*, sippy-ng/src/releases/*, sippy-ng/src/repositories/RepositoriesTable.jsx, sippy-ng/src/tests/*
Search handlers now rebuild filter arrays and update filter models without mutating existing state; JobRunsTable behavior gains unit coverage.
Toolbar search field wiring
sippy-ng/src/component_readiness/*, sippy-ng/src/jobs/*, sippy-ng/src/releases/*, sippy-ng/src/repositories/*, sippy-ng/src/tests/*
Affected DataGrid toolbars now specify their corresponding searchable fields.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: stbenjam, deads2k, smg247

🚥 Pre-merge checks | ✅ 19 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 27.27% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Coverage For New Features ⚠️ Warning FAIL — GridToolbar and JobRunsTable are tested, but JobAnalysis’s immutable requestSearch/searchField change has no corresponding test coverage. Add a regression test for JobAnalysis that verifies search replaces the name filter immutably, preserves unrelated filters, and repopulates the toolbar search correctly.
✅ Passed checks (19 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main change: fixing the search bar search completion issue while resolving conflicts.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Go Error Handling ✅ Passed PR changes only JS/JSX files; no changed .go files were found, so Go error-handling rules are not applicable.
Sql Injection Prevention ✅ Passed The PR only changes frontend DataGrid search/filter state; no SQL query construction or user-input concatenated into SQL appears in the modified files.
Excessive Css In React Should Use Styles ✅ Passed PASS — The PR diff only changes search handling/props; no new complex inline style blocks were added.
Single Responsibility And Clear Naming ✅ Passed The PR keeps changes narrowly scoped: descriptive component names, focused requestSearch helpers, and no generic Manager/Util-style abstractions were introduced.
Feature Documentation ✅ Passed No docs/features files were changed, and the only feature doc covers symptoms/labels—not the table-search behavior modified here—so no doc update was needed.
Stable And Deterministic Test Names ✅ Passed The added test titles are plain static strings; no interpolated, generated, date-, or runtime-derived values were found.
Test Structure And Quality ✅ Passed PR doesn’t add or modify any Ginkgo tests; the new tests are JS/Vitest, so this Ginkgo-specific checklist is not applicable.
Microshift Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the PR only changes JSX/JS unit-test files, so MicroShift compatibility is not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the PR only changes frontend JSX plus unit tests, so SNO multi-node assumptions are not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed All modified files are frontend JSX components; no manifests/controllers or topology-dependent scheduling constraints were introduced.
Ote Binary Stdout Contract ✅ Passed PR only changes frontend JSX files; no Go entrypoints/setup code were modified, so no new process-level stdout writes were introduced.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the PR changes React components and unit tests only, with no IPv4 assumptions or external connectivity requirements found.
No-Weak-Crypto ✅ Passed Touched files only alter DataGrid search/filter logic; scans found no MD5/SHA1/DES/RC4/3DES/Blowfish/ECB, custom crypto, or secret comparisons.
Container-Privileges ✅ Passed No changed manifest sets privileged/host* or allowPrivilegeEscalation=true; the PR diff only touches Dockerfiles, generated config, and package files without such fields.
No-Sensitive-Data-In-Logs ✅ Passed Changed files only contain generic logs ('clicked' and label-fetch errors); none expose secrets, PII, hostnames, or customer data.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@openshift-ci

openshift-ci Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Hi @not-stbenjam. Thanks for your PR.

I'm waiting for a openshift member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Tip

We noticed you've done this a few times! Consider joining the org to skip this step and gain /lgtm and other bot rights. We recommend asking approvers on your previous PRs to sponsor you.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@openshift-ci openshift-ci Bot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Jul 24, 2026
@stbenjam

Copy link
Copy Markdown
Member

/ok-to-test

@openshift-ci openshift-ci Bot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Jul 24, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@sippy-ng/src/datagrid/GridToolbar.jsx`:
- Around line 42-64: Add regression tests for GridToolbar covering
initialization from a single contains filter, excluding negated or otherwise
unsupported filters, triggering searches via Enter and the search button, and
confirming blur does not trigger a search. Use the existing toolbar test
patterns and cover both the useEffect synchronization and user interaction
paths.
- Around line 42-64: Update the initialization logic in the useEffect to require
filter.not !== true alongside the existing contains operator and value checks
before calling setSearch, so negated contains filters do not populate the
positive quick-search field.

In `@sippy-ng/src/jobs/JobRunsTable.jsx`:
- Around line 464-474: Add regression coverage for field-specific toolbar
searches and repeated searches. In sippy-ng/src/jobs/JobRunsTable.jsx lines
464-474 and sippy-ng/src/jobs/JobTable.jsx lines 536-546, verify immutable
replacement of only the job/name filter; in
sippy-ng/src/repositories/RepositoriesTable.jsx lines 281-291 and
sippy-ng/src/tests/FeatureGates.jsx lines 213-225, verify repo/feature_gate
replacement. Test toolbar initialization targets the configured contains filter
at sippy-ng/src/jobs/JobRunsTable.jsx line 651, sippy-ng/src/jobs/JobTable.jsx
line 710, sippy-ng/src/repositories/RepositoriesTable.jsx line 330,
sippy-ng/src/tests/FeatureGates.jsx line 413, sippy-ng/src/tests/TestTable.jsx
line 1144, sippy-ng/src/component_readiness/RegressedTestsPanel.jsx line 376,
sippy-ng/src/component_readiness/TriagedRegressionTestList.jsx line 358, and
sippy-ng/src/component_readiness/TriagedRegressions.jsx line 410. In
sippy-ng/src/tests/TestTable.jsx lines 1014-1031, cover unchanged-search no-op,
immutable name-filter replacement, and the repeated-search path clearing
loading.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: e027a149-2b2c-468b-9257-815dcef99809

📥 Commits

Reviewing files that changed from the base of the PR and between b5eeccd and 83afc49.

📒 Files selected for processing (16)
  • sippy-ng/src/component_readiness/RegressedTestsPanel.jsx
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.jsx
  • sippy-ng/src/component_readiness/TriagedRegressions.jsx
  • sippy-ng/src/datagrid/GridToolbar.jsx
  • sippy-ng/src/jobs/JobAnalysis.jsx
  • sippy-ng/src/jobs/JobRunsTable.jsx
  • sippy-ng/src/jobs/JobTable.jsx
  • sippy-ng/src/releases/PayloadStreamTestFailures.jsx
  • sippy-ng/src/releases/PayloadStreamsTable.jsx
  • sippy-ng/src/releases/PayloadTestFailures.jsx
  • sippy-ng/src/releases/ReleasePayloadJobRuns.jsx
  • sippy-ng/src/releases/ReleasePayloadPullRequests.jsx
  • sippy-ng/src/releases/ReleasePayloadTable.jsx
  • sippy-ng/src/repositories/RepositoriesTable.jsx
  • sippy-ng/src/tests/FeatureGates.jsx
  • sippy-ng/src/tests/TestTable.jsx

Comment thread sippy-ng/src/datagrid/GridToolbar.jsx
Comment thread sippy-ng/src/jobs/JobRunsTable.jsx
@not-stbenjam

not-stbenjam commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

🔴 REQUEST_CHANGES

Panel Review — PR #3818: TRT-2764: Resolved conflicts from #3721 - Fix search bar not completing search

Two confirmed functional bugs found that undermine the PR's stated fix. Both were independently identified by 4–5 of 7 specialist reviewers and verified with runtime reproducers.


🐛 Bugs Specialist — 2 BLOCKING
# Severity File Finding
1 🔴 BLOCKING sippy-ng/src/jobs/JobAnalysis.jsx:264 requestSearch not converted to immutable pattern — still mutates state in-place
2 🔴 BLOCKING sippy-ng/src/releases/ReleasePayloadJobRuns.jsx:162 columnField mismatch: filter removes release_tag but pushes releaseTag
⚔️ Adversarial Specialist — 2 BLOCKING, 3 SUGGESTION, 1 NOTE
# Severity File Finding
1 🔴 BLOCKING sippy-ng/src/jobs/JobAnalysis.jsx:263 requestSearch still mutates state — same reference passed to setter
2 🔴 BLOCKING sippy-ng/src/releases/ReleasePayloadJobRuns.jsx:163 Field name mismatch causes filter accumulation on every search
3 🟡 SUGGESTION sippy-ng/src/datagrid/GridToolbar.jsx:46 initializedFromFilter ref permanently latched — search bar never re-syncs
4 🟡 SUGGESTION sippy-ng/src/datagrid/GridToolbar.jsx:60 useEffect doesn't check not flag on filters
5 🟡 SUGGESTION sippy-ng/src/tests/TestTable.jsx:1014 Early-return guard doesn't distinguish negated filters
6 🔵 NOTE sippy-ng/src/datagrid/GridToolbar.jsx:117 onBlur removal is a UX behavior change
🔒 Security Specialist — No findings

Checked XSS via search input, dangerouslySetInnerHTML usage, URL parameter injection, supply chain (no dependency changes). All clear — search values flow through React controlled components (auto-escaped) and are URI-encoded before API transmission.

🏗️ Architecture Specialist — 2 BLOCKING, 2 SUGGESTION, 2 NOTE
# Severity File Finding
1 🔴 BLOCKING sippy-ng/src/jobs/JobAnalysis.jsx:263 requestSearch still mutates state, contradicting the PR's fix
2 🔴 BLOCKING sippy-ng/src/releases/ReleasePayloadJobRuns.jsx:158 columnField mismatch: release_tag vs releaseTag
3 🟡 SUGGESTION sippy-ng/src/datagrid/GridToolbar.jsx:44 useEffect runs on every filterModel change but only acts once
4 🟡 SUGGESTION sippy-ng/src/tests/TestTable.jsx:1014 Early-return guard exists only in TestTable
5 🔵 NOTE sippy-ng/src/tests/TestTable.jsx:1013 Duplicated requestSearch across 15 components — candidate for shared hook
6 🔵 NOTE sippy-ng/src/datagrid/GridToolbar.jsx:117 onBlur removal is a UX behavior change beyond the stated bug fix
🔄 Consistency Specialist — 2 BLOCKING, 1 SUGGESTION, 3 NOTE
# Severity File Finding
1 🔴 BLOCKING sippy-ng/src/releases/ReleasePayloadJobRuns.jsx:163 columnField mismatch: releaseTag vs release_tag
2 🔴 BLOCKING sippy-ng/src/jobs/JobAnalysis.jsx:264 requestSearch still uses state-mutating pattern
3 🟡 SUGGESTION sippy-ng/src/datagrid/GridToolbar.jsx:44 useEffect dependency array vs one-shot ref guard tension
4 🔵 NOTE sippy-ng/src/tests/TestTable.jsx:1013 TestTable has unique early-return optimization
5 🔵 NOTE sippy-ng/src/component_readiness/RegressedTestsPanel.jsx:54 component_readiness uses different requestSearch pattern
6 🔵 NOTE sippy-ng/src/jobs/JobRunsTable.jsx:466 Hardcoded id: 99 across all requestSearch implementations
🧪 QA Specialist — 3 BLOCKING, 3 SUGGESTION, 2 NOTE
# Severity File Finding
1 🔴 BLOCKING sippy-ng/src/datagrid/GridToolbar.jsx:44 No tests for GridToolbar or new useEffect logic
2 🔴 BLOCKING sippy-ng/src/tests/TestTable.jsx:1013 No tests for TestTable requestSearch or early-return guard
3 🔴 BLOCKING sippy-ng/src/releases/ReleasePayloadJobRuns.jsx:163 columnField mismatch (confirmed independently)
4 🟡 SUGGESTION sippy-ng/src/tests/TestTable.jsx:1014 Early-return guard only in TestTable
5 🟡 SUGGESTION sippy-ng/src/datagrid/GridToolbar.jsx:60 useEffect doesn't handle empty string filter values
6 🟡 SUGGESTION sippy-ng/src/datagrid/GridToolbar.jsx:42 useRef one-shot guard prevents re-sync
7 🔵 NOTE sippy-ng/src/datagrid/GridToolbar.jsx:117 Removed onBlur should have regression test
8 🔵 NOTE sippy-ng/src/jobs/JobTable.jsx:533 No test coverage for any table requestSearch
📝 Writer Specialist — 1 NOTE
# Severity File Finding
1 🔵 NOTE sippy-ng/src/datagrid/filterUtils.md:82 Example omits new searchField prop

Panel Synthesis

Confirmed Bugs (reproducer-verified)

Bug 1: JobAnalysis.jsxrequestSearch still mutates state in-place

  • Confirmed by: bugs, adversarial, architecture, consistency (4/7 specialists)
  • Reproducer: ✅ CONFIRMED — React's Object.is bail-out drops the state update because the same object reference is passed to the setter
  • Impact: The Job Analysis page's test search bar remains broken — the exact bug this PR claims to fix
  • Fix: Apply the same immutable pattern used in the other 10 table components:
    const newItems = testFilter.items.filter((f) => f.columnField !== 'name')
    newItems.push({ id: 99, columnField: 'name', operatorValue: 'contains', value: searchValue })
    setTestFilter({ ...testFilter, items: newItems })

Bug 2: ReleasePayloadJobRuns.jsxcolumnField name mismatch

  • Confirmed by: bugs, adversarial, architecture, consistency, QA (5/7 specialists)
  • Reproducer: ✅ CONFIRMED — After 5 searches, 5 filter items accumulate (none removed). GridToolbar initialization returns null.
  • Impact: (1) Search filters accumulate on every search instead of replacing. (2) Search bar never pre-populates from URL filter state because searchField: 'release_tag' can't find columnField: 'releaseTag'.
  • Fix: Change columnField: 'releaseTag' on line 162 to columnField: 'release_tag' to match the column definition, filter removal, and searchField prop.

Required Actions

  1. Fix JobAnalysis.jsx:263-275 — Convert requestSearch to the immutable pattern (spread + new items array)
  2. Fix ReleasePayloadJobRuns.jsx:162 — Change columnField: 'releaseTag' to columnField: 'release_tag'

Optional Follow-ups

  • Consider applying the early-return guard from TestTable to other server-filtered table components
  • Consider extracting a shared useSearchFilter hook to eliminate the 15x duplicated requestSearch pattern
  • Add !filter.not check to GridToolbar's useEffect initialization condition
  • Update filterUtils.md example to include the new searchField prop

Stats

Metric Value
Specialists 7/7 completed
BLOCKING findings (pre-dedup) 13
BLOCKING findings (post-dedup) 2 confirmed bugs + 2 test coverage
Reproducers launched 2
Reproducers confirmed 2/2
SUGGESTION findings 7
NOTE findings 8

Generated by /deep-review

- Fix npm audit failure: use --audit-level=high since react-router
  moderate CVEs have no v6 patch (fix requires v7 + React 18 migration)
- Fix negated filter initialization: check filter.not !== true before
  populating quick-search from a contains filter
- Add GridToolbar tests: initialization from filters, negated filter
  exclusion, Enter/button search triggering, blur not triggering search
- Add JobRunsTable requestSearch tests: immutable filter replacement,
  preservation of unrelated filters

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@not-stbenjam

Copy link
Copy Markdown
Contributor Author

/retest

Another PR is fixing the react-router audit issue directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@sippy-ng/src/jobs/JobRunsTable.test.jsx`:
- Around line 10-23: Replace the duplicated requestSearch helper in
JobRunsTable.test.jsx with coverage of the production JobRunsTable search
implementation. Extract and import the shared helper if appropriate, or render
JobRunsTable and assert the resulting setFilterModel call, while preserving the
existing filtering and replacement behavior under test.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 17ac7834-6dff-455b-b382-5fd311387756

📥 Commits

Reviewing files that changed from the base of the PR and between 83afc49 and f754718.

📒 Files selected for processing (4)
  • Makefile
  • sippy-ng/src/datagrid/GridToolbar.jsx
  • sippy-ng/src/datagrid/GridToolbar.test.jsx
  • sippy-ng/src/jobs/JobRunsTable.test.jsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • sippy-ng/src/datagrid/GridToolbar.jsx

Comment thread sippy-ng/src/jobs/JobRunsTable.test.jsx
Comment thread sippy-ng/src/jobs/JobAnalysis.jsx
Comment thread sippy-ng/src/releases/ReleasePayloadJobRuns.jsx Outdated
not-stbenjam and others added 2 commits July 24, 2026 13:17
- JobAnalysis.jsx: Convert requestSearch to immutable pattern using
  spread operator so React detects the state change
- ReleasePayloadJobRuns.jsx: Fix columnField from 'releaseTag' to
  'release_tag' to match the filter removal and column definition

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@sippy-ng/src/jobs/JobAnalysis.jsx`:
- Around line 264-271: Add regression tests for the search-filter update flow
around the testFilter state update: verify an existing name filter is replaced
with the new search criterion, while unrelated filters remain unchanged. Ensure
the assertions cover immutable state behavior without mutating the original
testFilter items.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c10769c-e0c6-4c67-84df-25e5c9c17dd6

📥 Commits

Reviewing files that changed from the base of the PR and between f754718 and 57228f0.

📒 Files selected for processing (2)
  • sippy-ng/src/jobs/JobAnalysis.jsx
  • sippy-ng/src/releases/ReleasePayloadJobRuns.jsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • sippy-ng/src/releases/ReleasePayloadJobRuns.jsx

Comment thread sippy-ng/src/jobs/JobAnalysis.jsx
@stbenjam

Copy link
Copy Markdown
Member

/test agentic-staging

@openshift-trt-agent

Copy link
Copy Markdown

Sippy Staging Environment

URL: https://quality-pills-surge-def.trycloudflare.com

This environment is built from this PR and will remain available for approximately 60 minutes (until ~21:25 UTC).

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling required tests:
/test e2e

@stbenjam

Copy link
Copy Markdown
Member

/test agentic-staging

@openshift-trt-agent

Copy link
Copy Markdown

Sippy Staging Environment

URL: https://img-favourite-alexander-friendly.trycloudflare.com

This environment is built from this PR and will remain available for approximately 60 minutes (until ~21:57 UTC).

@openshift-ci

openshift-ci Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

@not-stbenjam: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/agentic-staging 412fd3c link false /test agentic-staging

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants