Skip to content

Improve feedback form.#3107

Merged
openshift-merge-bot[bot] merged 1 commit intoopenshift-assisted:masterfrom
rawagner:chat_feedback
Aug 13, 2025
Merged

Improve feedback form.#3107
openshift-merge-bot[bot] merged 1 commit intoopenshift-assisted:masterfrom
rawagner:chat_feedback

Conversation

@rawagner
Copy link
Member

@rawagner rawagner commented Aug 12, 2025

Extract remote calls to hook.

Summary by CodeRabbit

  • New Features

    • Dismissible in-app AI privacy alert with persistent dismissal and link to the Privacy Statement.
    • Dedicated feedback card with category selector, comment field, and submit button.
    • New streaming chat flow with externalized message sending and a confirm-new-chat modal.
  • Improvements

    • Feedback submits to the server with streamlined positive/negative actions.
    • Improved autofocus behavior for inputs and confirmation buttons.
    • Prop-driven error alerts, simplified message handling, and copy action disabled when no content.

@openshift-ci openshift-ci bot requested review from ElayAharoni and batzionb August 12, 2025 10:48
@coderabbitai
Copy link

coderabbitai bot commented Aug 12, 2025

Walkthrough

Adds a streaming messages hook (useMessages), moves message sending/streaming into the hook, replaces inline feedback with an API-backed FeedbackForm, introduces an AIAlert component, refactors ChatBot/ChatBotWindow to use the hook and externalize send/error handling, adds modal/input focus tweaks, and removes two helper exports.

Changes

Cohort / File(s) Summary
Streaming hook & integration
libs/chatbot/lib/hooks/use-message.ts, libs/chatbot/lib/components/ChatBot/ChatBot.tsx, libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx
Added useMessages hook to manage streaming /v1/streaming_query including messages, conversationId, announcements, error and streaming state. Exposes sentMessage, startNewConversation, resetError. ChatBot consumes the hook and spreads returned props into ChatBotWindow; ChatBotWindow props updated to accept hook-driven state and external send/reset/start handlers.
Feedback flow & BotMessage changes
libs/chatbot/lib/components/ChatBot/BotMessage.tsx, libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx
BotMessage switched to API-backed feedback: new props onApiCall, conversationId, userMsg; posts feedback to /v1/feedback. Removed local userFeedback UI helpers and messageIndex usage. Added FeedbackForm (default export in FeedbackCard.tsx) for negative feedback with category select, textarea, focused input, submit handling and error UI.
AI privacy alert
libs/chatbot/lib/components/ChatBot/AIAlert.tsx, libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx
New AIAlert component renders an info alert with a link to the Red Hat Privacy Statement; visibility persisted in localStorage under key assisted.hide.chat.alert. ChatBotWindow replaces prior inline alert logic with AIAlert and removes local alert state.
New-chat modal & focus tweaks
libs/chatbot/lib/components/ChatBot/ConfirmNewChatModal.tsx, libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx
ConfirmNewChatModal adds a ref to autofocus the confirm button. ChatBotWindow autofocuses the message input via ref/useLayoutEffect, uses a confirmation modal for starting a new conversation, and delegates new-chat action to startNewConversation prop.
Helpers & API args
libs/chatbot/lib/components/ChatBot/helpers.ts
Removed exported helpers focusSendMessageInput and getUserQuestionForBotAnswer. Extended GetToolActionArgs with optional args?: { [k:string]: string } and updated getToolAction to use args (e.g., args?.file_name for download titles).

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant CBW as ChatBotWindow
  participant Hook as useMessages.sentMessage
  participant API as /v1/streaming_query (Backend)
  participant HookState as useMessages (state)

  User->>CBW: send message
  CBW->>Hook: sentMessage(msg)
  Hook->>API: POST /v1/streaming_query { message, conversationId }
  API-->>Hook: 200 streaming body (SSE/JSON lines)
  loop stream events
    API-->>Hook: start/inference/tool/end events
    Hook->>HookState: append/patch messages, actions, announcement
    HookState-->>CBW: updated messages/state
  end
  Hook->>CBW: finalize (conversationId / error)
Loading
sequenceDiagram
  autonumber
  actor User
  participant BM as BotMessage
  participant API as /v1/feedback
  participant FC as FeedbackForm

  User->>BM: click thumbs-up
  BM->>API: POST /v1/feedback { sentiment:1, llm_response, user_question, conversation_id }
  API-->>BM: response

  User->>BM: click thumbs-down
  BM->>BM: open FeedbackForm
  User->>FC: select category + write feedback + submit
  FC->>API: POST /v1/feedback { sentiment:-1, category, userFeedback, llm_response, user_question, conversation_id }
  API-->>FC: response
  FC-->>BM: onClose()
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

lgtm, size/XXL, jira/valid-reference

Suggested reviewers

  • jgyselov
  • ammont82
  • celdrake

Poem

🥕 I nibble streams and hop on cues,
I guard your privacy with polite news.
Thumbs up zips a simple cheer,
Thumbs down opens a box to hear.
Hooray for chats — I dig the clues!


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a24518f and 3ed5f4f.

📒 Files selected for processing (8)
  • libs/chatbot/lib/components/ChatBot/AIAlert.tsx (1 hunks)
  • libs/chatbot/lib/components/ChatBot/BotMessage.tsx (3 hunks)
  • libs/chatbot/lib/components/ChatBot/ChatBot.tsx (2 hunks)
  • libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (7 hunks)
  • libs/chatbot/lib/components/ChatBot/ConfirmNewChatModal.tsx (2 hunks)
  • libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx (1 hunks)
  • libs/chatbot/lib/components/ChatBot/helpers.ts (0 hunks)
  • libs/chatbot/lib/hooks/use-message.ts (1 hunks)
💤 Files with no reviewable changes (1)
  • libs/chatbot/lib/components/ChatBot/helpers.ts
🚧 Files skipped from review as they are similar to previous changes (6)
  • libs/chatbot/lib/components/ChatBot/ConfirmNewChatModal.tsx
  • libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx
  • libs/chatbot/lib/components/ChatBot/ChatBot.tsx
  • libs/chatbot/lib/components/ChatBot/BotMessage.tsx
  • libs/chatbot/lib/hooks/use-message.ts
  • libs/chatbot/lib/components/ChatBot/AIAlert.tsx
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: celdrake
PR: openshift-assisted/assisted-installer-ui#3051
File: libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx:196-222
Timestamp: 2025-07-18T12:35:50.945Z
Learning: In the assisted-installer-ui chatbot feedback implementation, the onFeedbackSubmit callback requires access to the messages array to retrieve both the bot response content and the associated user question for the API call, making it necessary to include messages in the useCallback dependency array rather than passing message content as props to avoid duplicating potentially long message data.
📚 Learning: 2025-07-18T12:35:50.945Z
Learnt from: celdrake
PR: openshift-assisted/assisted-installer-ui#3051
File: libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx:196-222
Timestamp: 2025-07-18T12:35:50.945Z
Learning: In the assisted-installer-ui chatbot feedback implementation, the onFeedbackSubmit callback requires access to the messages array to retrieve both the bot response content and the associated user question for the API call, making it necessary to include messages in the useCallback dependency array rather than passing message content as props to avoid duplicating potentially long message data.

Applied to files:

  • libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx
🧬 Code Graph Analysis (1)
libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (3)
libs/chatbot/lib/index.ts (1)
  • ChatBotWindowProps (2-2)
libs/chatbot/lib/components/ChatBot/helpers.ts (1)
  • MsgProps (4-7)
libs/ui-lib/lib/ocm/services/UISettingsService.ts (1)
  • fetch (8-11)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: tests
🔇 Additional comments (10)
libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (10)

21-21: LGTM: Clean import change for BotMessage.

The change from named import to default import is consistent with the component's export pattern.


26-38: Well-designed API surface changes.

The prop interface changes effectively separate concerns by:

  • Moving error handling to parent (error, resetError)
  • Externalizing message sending (sentMessage)
  • Removing internal state setters (setConversationId, setMessages)
  • Adding streaming state (isStreaming, announcement)

This improves testability and follows good React patterns.


59-65: Good autofocus implementation.

Using useLayoutEffect ensures the input is focused synchronously after the modal state changes, preventing layout shifts. The conditional focus based on modal state is appropriate.


105-106: Improved UX with disabled state.

Disabling the "New chat" button when there are no messages prevents unnecessary user interactions and provides clear visual feedback.


142-144: Safe message access with proper bounds checking.

The change from messages[index - 1].pfProps.content || '' to index > 0 ? messages[index - 1].pfProps.content || '' : '' properly handles the edge case where a bot message might appear first.


161-161: Typo fix: "occurred" spelling corrected.

The error message spelling has been corrected from "occured" to "occurred".


171-175: Excellent message handling improvements.

The new implementation:

  • Properly delegates to the external sentMessage function
  • Clears the input after sending (setMsg(''))
  • Maintains scroll behavior with triggerScroll

This addresses previous UX issues and follows the new architecture pattern.


191-197: Clean modal interaction handlers.

The confirmation modal handlers properly:

  • Call the external startNewConversation function
  • Manage modal state consistently
  • Provide clear user flow for both confirm and cancel actions

40-52: No breaking changes for external consumers

We inspected all usages of ChatBotWindow and its props:

  • The only component instantiating <ChatBotWindow> is the internal ChatBot wrapper, which has been updated to pass the new required props from useMessages.
  • The public UI app imports and renders <ChatBot> (aliased as AIChatBot) with only onApiCall and username—it never touches ChatBotWindow or its full props directly.
  • The useMessages hook still uses only ChatBotWindowProps['messages'], which remains unchanged.

Since all internal consumers were updated in this PR and there are no direct external imports of the full ChatBotWindowProps, this change does not break any downstream code.


126-126: AIAlert Integration Verified
The AIAlert component is present in libs/chatbot/lib/components/ChatBot/AIAlert.tsx, imported on line 24 of ChatBotWindow.tsx, and rendered at line 126. It uses PatternFly’s inline info alert with a close button and persists dismissal in localStorage.

Please confirm that this new component fully replaces all inline alert scenarios (e.g., warnings, errors, edge cases) previously handled in ChatBotWindow.tsx.

• libs/chatbot/lib/components/ChatBot/AIAlert.tsx
• libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (line 126)

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

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

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@openshift-ci openshift-ci bot added approved Indicates a PR has been approved by an approver from all required OWNERS files. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Aug 12, 2025
@rawagner rawagner force-pushed the chat_feedback branch 3 times, most recently from 81e3bca to 31865ba Compare August 12, 2025 11:06
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 10

🧹 Nitpick comments (5)
libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx (3)

25-32: Consider making categories configurable for better reusability.

The hardcoded categories object limits the component's flexibility. Consider making this configurable through props or a separate configuration file to support different feedback scenarios.

-const categories: { [key: string]: string } = {
-  incorrect: 'Incorrect',
-  not_relevant: 'Not relevant',
-  incomplete: 'Incomplete',
-  outdated_information: 'Outdated information',
-  unsafe: 'Unsafe',
-  other: 'Other',
-};
+const defaultCategories: { [key: string]: string } = {
+  incorrect: 'Incorrect',
+  not_relevant: 'Not relevant',
+  incomplete: 'Incomplete',
+  outdated_information: 'Outdated information',
+  unsafe: 'Unsafe',
+  other: 'Other',
+};

const FeedbackForm = ({
  onFeedbackSubmit,
  onClose,
+  categories = defaultCategories,
}: {
  onFeedbackSubmit: (req: FeedbackRequest) => Promise<void>;
  onClose: VoidFunction;
+  categories?: { [key: string]: string };
}) => {

94-97: Consider improving type safety for category selection.

The category selection uses string conversion which could be error-prone. Consider using proper type guards or ensuring the value is always a valid category key.

-                  onSelect={(_, val) => {
-                    setCategory(`${val || ''}`);
-                    setCategoryOpen(false);
-                  }}
+                  onSelect={(_, val) => {
+                    const categoryKey = val as string;
+                    if (categoryKey && categories[categoryKey]) {
+                      setCategory(categoryKey);
+                    }
+                    setCategoryOpen(false);
+                  }}

146-148: Consider adding form validation before submission.

The submit button doesn't validate if feedback text is provided. Consider adding basic validation to ensure meaningful feedback is collected.

+  const isFormValid = feedback.trim().length > 0;

        <Button
          onClick={() => {
            void submit();
          }}
-          isDisabled={isSubmitting}
+          isDisabled={isSubmitting || !isFormValid}
          isLoading={isSubmitting}
        >
libs/chatbot/lib/components/ChatBot/AIAlert.tsx (1)

29-34: Consider adding aria-label for better accessibility.

The link button should have an aria-label to improve screen reader experience, especially since it opens in a new tab.

Apply this diff to enhance accessibility:

           <Button
             variant="link"
             isInline
             icon={<ExternalLinkAltIcon />}
             component="a"
             href="https://www.redhat.com/en/about/privacy-policy"
             iconPosition="end"
             target="_blank"
             rel="noopener noreferrer"
+            aria-label="Red Hat Privacy Statement (opens in new tab)"
           >
libs/chatbot/lib/hooks/use-message.ts (1)

92-154: Consider extracting SSE parsing logic for better maintainability.

The SSE parsing logic is complex and could benefit from being extracted into a separate helper function for better testability and reusability.

Consider extracting the SSE parsing logic into a separate helper function:

// In a separate helpers file or at the top of this file
const parseSSEMessage = (buffer: string): { events: StreamEvent[], remainder: string } => {
  const parts = buffer.split('\n\n');
  const remainder = parts.pop() || '';
  const events: StreamEvent[] = [];
  
  for (const part of parts) {
    const lines = part.split('\n');
    let data = '';
    for (const line of lines) {
      if (line.startsWith('data:')) {
        data += line.slice(5).trim() + '\n';
      }
    }
    if (data) {
      try {
        events.push(JSON.parse(data) as StreamEvent);
      } catch (e) {
        console.error('Failed to parse SSE event:', e);
      }
    }
  }
  
  return { events, remainder };
};

Then simplify the main loop to use this helper.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f722ebe and 31865ba.

📒 Files selected for processing (8)
  • libs/chatbot/lib/components/ChatBot/AIAlert.tsx (1 hunks)
  • libs/chatbot/lib/components/ChatBot/BotMessage.tsx (3 hunks)
  • libs/chatbot/lib/components/ChatBot/ChatBot.tsx (2 hunks)
  • libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (7 hunks)
  • libs/chatbot/lib/components/ChatBot/ConfirmNewChatModal.tsx (2 hunks)
  • libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx (1 hunks)
  • libs/chatbot/lib/components/ChatBot/helpers.ts (0 hunks)
  • libs/chatbot/lib/hooks/use-message.ts (1 hunks)
💤 Files with no reviewable changes (1)
  • libs/chatbot/lib/components/ChatBot/helpers.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • libs/chatbot/lib/components/ChatBot/ConfirmNewChatModal.tsx
  • libs/chatbot/lib/components/ChatBot/ChatBot.tsx
  • libs/chatbot/lib/components/ChatBot/BotMessage.tsx
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: celdrake
PR: openshift-assisted/assisted-installer-ui#3051
File: libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx:196-222
Timestamp: 2025-07-18T12:35:50.945Z
Learning: In the assisted-installer-ui chatbot feedback implementation, the onFeedbackSubmit callback requires access to the messages array to retrieve both the bot response content and the associated user question for the API call, making it necessary to include messages in the useCallback dependency array rather than passing message content as props to avoid duplicating potentially long message data.
📚 Learning: 2025-07-18T12:35:50.945Z
Learnt from: celdrake
PR: openshift-assisted/assisted-installer-ui#3051
File: libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx:196-222
Timestamp: 2025-07-18T12:35:50.945Z
Learning: In the assisted-installer-ui chatbot feedback implementation, the onFeedbackSubmit callback requires access to the messages array to retrieve both the bot response content and the associated user question for the API call, making it necessary to include messages in the useCallback dependency array rather than passing message content as props to avoid duplicating potentially long message data.

Applied to files:

  • libs/chatbot/lib/hooks/use-message.ts
  • libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx
🧬 Code Graph Analysis (3)
libs/chatbot/lib/components/ChatBot/AIAlert.tsx (1)
libs/ui-lib-tests/cypress/views/reusableComponents/Alert.ts (1)
  • Alert (1-20)
libs/chatbot/lib/hooks/use-message.ts (3)
libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (1)
  • ChatBotWindowProps (26-38)
libs/chatbot/lib/components/ChatBot/helpers.ts (4)
  • userRole (11-11)
  • botRole (10-10)
  • getToolAction (29-76)
  • getErrorMessage (13-21)
libs/chatbot/lib/components/ChatBot/types.ts (6)
  • StreamEvent (21-26)
  • isEndStreamEvent (29-29)
  • isStartStreamEvent (28-28)
  • isInferenceStreamEvent (30-31)
  • isToolArgStreamEvent (33-34)
  • isToolResponseStreamEvent (36-37)
libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx (2)
libs/chatbot/lib/components/ChatBot/BotMessage.tsx (1)
  • FeedbackRequest (14-18)
libs/chatbot/lib/components/ChatBot/helpers.ts (1)
  • getErrorMessage (13-21)
🔇 Additional comments (11)
libs/chatbot/lib/components/ChatBot/FeedbackCard.tsx (10)

1-23: LGTM! Clean imports and dependencies.

The imports are well-organized and all dependencies are properly imported from their respective modules.


34-45: LGTM! Well-structured component props and state management.

The component props are properly typed and the state management using React hooks is appropriate for the feedback form functionality.


47-51: LGTM! Proper focus management for accessibility.

The use of useLayoutEffect with a ref to focus the textarea on mount ensures good user experience and accessibility.


53-67: LGTM! Robust error handling and submission flow.

The submit function properly handles the async operation with appropriate error handling and loading state management. The use of getErrorMessage for consistent error formatting is good practice.


69-84: LGTM! Well-structured card header with proper accessibility.

The card header includes a proper title and close button with appropriate styling and accessibility considerations.


85-133: LGTM! Comprehensive form implementation with proper UX.

The form structure is well-organized with:

  • Proper PatternFly 6 components usage
  • Controlled inputs for category selection and feedback text
  • Appropriate disabled states during submission
  • Good responsive design with full-width select toggle

135-141: LGTM! Appropriate error display with inline alerts.

The error handling UI properly displays validation and submission errors using PatternFly's inline alert pattern.


144-156: LGTM! Proper submit button with loading states.

The footer contains a well-implemented submit button with proper loading and disabled states during form submission.


159-159: LGTM! Proper default export.

The component is properly exported as the default export, following React component conventions.


58-58: Negative feedback correctly uses sentiment = –1
The hardcoded sentiment: -1 in FeedbackCard.tsx aligns with the “thumbs-down” flow (positive feedback uses sentiment: 1 in BotMessage.tsx), matching the FeedbackRequest type and API expectations. No change required.

libs/chatbot/lib/components/ChatBot/ChatBotWindow.tsx (1)

61-65: Good focus management implementation.

The use of useLayoutEffect to focus the message bar when the modal closes ensures a smooth user experience without visual flicker.

Extract remote calls to hook.
@rawagner
Copy link
Member Author

/cherry-pick releases/v0.1-chatbot

@openshift-cherrypick-robot
Copy link
Contributor

@rawagner: once the present PR merges, I will cherry-pick it on top of releases/v0.1-chatbot in a new PR and assign it to you.

Details

In response to this:

/cherry-pick releases/v0.1-chatbot

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 lgtm Indicates that a PR is ready to be merged. label Aug 13, 2025
@openshift-ci
Copy link

openshift-ci bot commented Aug 13, 2025

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ammont82, rawagner

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

The pull request process is described 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

@openshift-merge-bot openshift-merge-bot bot merged commit 3c82686 into openshift-assisted:master Aug 13, 2025
11 checks passed
@openshift-cherrypick-robot
Copy link
Contributor

@rawagner: new pull request created: #3111

Details

In response to this:

/cherry-pick releases/v0.1-chatbot

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.

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. lgtm Indicates that a PR is ready to be merged. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants