Conversation
|
⏳ Code review in progress. Analyzing for code quality issues and best practices. You can monitor the review status in the checks section at the bottom of this pull request. Detailed findings will be posted upon completion. Using Amazon Q Developer for GitHubAmazon Q Developer1 is an AI-powered assistant that integrates directly into your GitHub workflow, enhancing your development process with intelligent features for code development, review, and transformation. Slash Commands
FeaturesAgentic Chat Code Review CustomizationYou can create project-specific rules for Amazon Q Developer to follow:
Example rule: FeedbackTo provide feedback on Amazon Q Developer, create an issue in the Amazon Q Developer public repository. For more detailed information, visit the Amazon Q for GitHub documentation. Footnotes
|
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings. WalkthroughIntroduces a multi-step welcome modal component for application onboarding with theme customization, addons discovery, and tips screens. Integrates with the GUI via Redux state mapping and localStorage-based completion tracking. Modal supports step navigation with dynamic content rendering. Changes
Sequence DiagramsequenceDiagram
participant User
participant GUI as GUI Component
participant Modal as Welcome Modal
participant Step as Step Component
participant Redux as Redux Store
participant Storage as localStorage
User->>GUI: Load application
GUI->>Redux: Check state
Redux->>Storage: Check hasCompletedWelcome()
Storage-->>Redux: Status
Redux->>GUI: showWelcomeModal = true
GUI->>Modal: Render with showWelcomeModal prop
Modal->>Step: Render WelcomeStep (step 0)
User->>Step: Click Next
Step->>Modal: handleNext()
Modal->>Modal: currentStep++
Modal->>Step: Render ThemeStep (step 1)
User->>Step: Select theme and accent
Step->>Redux: Dispatch setTheme
Redux->>Storage: persistTheme()
User->>Step: Click Next
Step->>Modal: handleNext()
Modal->>Step: Render AddonsStep (step 2)
User->>Step: Click Next
Step->>Modal: handleNext()
Modal->>Step: Render FinalStep (step 3)
User->>Modal: Click "Let's Go" (finish)
Modal->>Storage: markWelcomeComplete()
Modal->>GUI: onRequestCloseWelcomeModal()
GUI->>Modal: Hide
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Suggested labels
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
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. Comment |
🎉 MEGA PR Test & Analysis Complete!Hi @supervoidcoder! Your PR has been fully tested and analyzed! 🚀✨ 🌍 Test DeploymentLive Preview: https://OmniBlocks.github.io/scratch-gui/supervoidcoder/449/ 🧪 Test ResultsESLint: ❌ Found issues
Unit Tests: ❌
Integration Tests: ❌
📄 Full test outputs available in artifacts 🔦 Performance Audit (Lighthouse)✅ Audit completed successfully! 📊 Lighthouse Scores:
⚡ Core Web Vitals:
🟢 90-100 (Good) | 🟠 50-89 (Needs Improvement) | 🔴 0-49 (Poor) 📄 Full report in artifacts 📦 Bundle Size AnalysisTotal Build Size: 137M 📦 Top 5 Largest JavaScript Files:
🎨 Top 5 Largest CSS Files:
♿ Accessibility Testing✅ Accessibility scan completed!
📊 Build Details
💡 Pro Tip: Only one build was needed for all these checks - saving CI/CD minutes! 🎯 |
🔍 General Code Quality Feedback🔍 Comprehensive Code ReviewConsolidated Feedback
Overall Assessment: The pull request introduces a significant new feature with a welcome modal, but it lacks adequate test coverage and contains some architectural concerns that could affect maintainability. The risk level is moderate due to potential bugs and security issues. Critical Issues:
Improvements:
Positive Notes:
Next Steps:
🤖 Generated by Wellcode.ai |
❌ ULTRA Visual Regression Testing - Tests FailedHi @supervoidcoder! The test matrix failed to produce any results. All 9 test combinations failed. This could be due to:
Please check the logs for details: The build phase completed successfully, but the test execution failed. |
supervoidcoder
left a comment
There was a problem hiding this comment.
@coderabbitai can you review and also remember what we talked about in issue #448 the modal is broken
There was a problem hiding this comment.
Welcome Modal Implementation Review
This PR adds a comprehensive welcome modal system to OmniBlocks with multiple onboarding steps. While the overall structure and UI implementation look solid, there are several critical issues that must be fixed before merging:
🚨 Critical Issues
- Modal Trap: The welcome modal cannot be closed due to null close handler and disabled escape key
- Broken Iframe: Addons step references non-existent "/addons" path
- Logic Error: Welcome modal won't show in private browsing due to incorrect error handling
- Empty Close Handler: Users cannot complete the onboarding flow
🔧 Required Fixes
- Implement proper close handler that marks welcome as complete and triggers re-render
- Fix iframe src path for addons step
- Correct localStorage error handling to show modal when storage unavailable
- Remove debug console.log statements
- Eliminate duplicate function calls in mapStateToProps
✅ Positive Aspects
- Well-structured multi-step modal system
- Good separation of concerns with individual step components
- Proper Redux integration for theme step
- Clean CSS styling and responsive design
- Comprehensive PropTypes validation
The foundation is excellent, but the critical functionality issues prevent this from being production-ready. Please address the blocking issues before requesting another review.
You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.
| vm, | ||
| ...componentProps | ||
| } = omit(props, 'dispatch'); | ||
| console.log('🎯 showWelcomeModal:', showWelcomeModal); |
There was a problem hiding this comment.
Remove debug console.log statement before merging to production.
| const showWelcomeModal = !hasCompletedWelcome(); | ||
| console.log('🔗 Container showWelcomeModal:', showWelcomeModal); | ||
| const loadingState = state.scratchGui.projectState.loadingState; |
There was a problem hiding this comment.
Remove debug console.log statements and duplicate showWelcomeModal calculation. The function is called twice unnecessarily.
| const showWelcomeModal = !hasCompletedWelcome(); | |
| console.log('🔗 Container showWelcomeModal:', showWelcomeModal); | |
| const loadingState = state.scratchGui.projectState.loadingState; | |
| const loadingState = state.scratchGui.projectState.loadingState; |
| error: state.scratchGui.projectState.error, | ||
| isError: getIsError(loadingState), | ||
| isEmbedded: state.scratchGui.mode.isEmbedded, | ||
| showWelcomeModal: !hasCompletedWelcome(), |
There was a problem hiding this comment.
Use the already calculated showWelcomeModal variable instead of calling hasCompletedWelcome() again.
| showWelcomeModal: !hasCompletedWelcome(), | |
| showWelcomeModal, |
| onActivateSongsTab: () => dispatch(activateTab(SONGS_TAB_INDEX)), | ||
| onRequestCloseBackdropLibrary: () => dispatch(closeBackdropLibrary()), | ||
| onRequestCloseCostumeLibrary: () => dispatch(closeCostumeLibrary()), | ||
| onRequestCloseWelcomeModal: () => {}, |
There was a problem hiding this comment.
🛑 Logic Error: Empty function prevents welcome modal from closing. Implement proper close handler to dispatch an action that updates the welcome completion state.
onRequestCloseWelcomeModal: () => {
// This should dispatch an action to mark welcome as complete
// For now, we can use the markWelcomeComplete function directly
import('../components/welcome-modal/welcome-modal.jsx').then(module => {
module.markWelcomeComplete();
// Force re-render by updating a dummy state or use forceUpdate
window.location.reload(); // Temporary solution - should use proper state management
});
},| <div className={styles.iframeContainer}> | ||
| <iframe | ||
| className={styles.addonsIframe} | ||
| src="/addons" |
There was a problem hiding this comment.
🛑 Security Vulnerability: Iframe src="/addons" will fail in production. This path doesn't exist and creates a broken iframe that could be exploited.
| src="/addons" | |
| src={`${window.location.origin}/addons`} |
| class WelcomeModal extends React.Component { | ||
| constructor (props) { | ||
| super(props); | ||
| console.log('🎉 WelcomeModal constructor called!'); |
There was a problem hiding this comment.
Remove debug console.log statement before merging to production.
| } catch (e) { | ||
| return true; |
There was a problem hiding this comment.
🛑 Logic Error: Returning true on localStorage error prevents welcome modal from showing when storage is unavailable. This breaks the user onboarding experience in private browsing or when localStorage is disabled.
| } catch (e) { | |
| return true; | |
| return false; // Show welcome modal if localStorage is unavailable |
| onRequestClose={null} // Disable closing by clicking outside | ||
| shouldCloseOnOverlayClick={false} |
There was a problem hiding this comment.
🛑 Logic Error: Setting onRequestClose to null and shouldCloseOnOverlayClick to false prevents users from closing the modal. This creates a modal trap that blocks the entire application if the close handler fails.
| onRequestClose={null} // Disable closing by clicking outside | |
| shouldCloseOnOverlayClick={false} | |
| onRequestClose={this.props.onRequestClose} // Allow closing via escape key | |
| shouldCloseOnOverlayClick={false} // Keep overlay click disabled for onboarding |
hello? |
🧩 Analysis chain🏁 Script executed: Length of output: 276178 @supervoidcoder Hey void! 👋 I'm here! Sorry for the delay - let me dive into this PR and get you sorted! 🚀 I can see from issue #448 that you've been building a multi-step welcome modal with analytics, theme selection, and addons setup. The last issue we were debugging was the Let me review the current state of PR #449 and help get this modal working! 🎯 ✏️ Learnings added
🧠 Learnings used✅ Actions performedReview triggered.
|
|
@coderabbitai why do you think this is happening? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 34127 🏁 Script executed: Length of output: 92 🏁 Script executed: Length of output: 27 🏁 Script executed: Length of output: 46 @supervoidcoder Found it! 🎯 The issue is in const mapStateToProps = state => ({
// ...
stageSizeMode: state.scratchGui.stageSize.stageSize,
showWelcomeModal: !hasCompletedWelcome(), // ❌ ERROR: hasCompletedWelcome is not defined!
theme: state.scratchGui.theme.theme
});But The thing is, you're already computing this value in the container ( The Fix 🔧Remove lines 600-601 from const mapStateToProps = state => ({
activeTabIndex: state.scratchGui.editorTab.activeTabIndex,
alertsVisible: state.scratchGui.alerts.visible,
backdropLibraryVisible: state.scratchGui.modals.backdropLibrary,
blocksTabVisible: state.scratchGui.editorTab.activeTabIndex === BLOCKS_TAB_INDEX,
cardsVisible: state.scratchGui.cards.visible,
connectionModalVisible: state.scratchGui.modals.connectionModal,
costumeLibraryVisible: state.scratchGui.modals.costumeLibrary,
fontsModalVisible: state.scratchGui.modals.fontsModal,
unknownPlatformModalVisible: state.scratchGui.modals.unknownPlatformModal,
invalidProjectModalVisible: state.scratchGui.modals.invalidProject,
costumeTabVisible: state.scratchGui.editorTab.activeTabIndex === COSTUMES_TAB_INDEX,
extensionLibraryVisible: state.scratchGui.modals.extensionLibrary,
isCreating: getIsCreating(state.scratchGui.projectState.loadingState),
isFullScreen: state.scratchGui.mode.isFullScreen,
isPlayerOnly: state.scratchGui.mode.isPlayerOnly,
isRtl: state.locales.isRtl,
isShowingProject: getIsShowingProject(state.scratchGui.projectState.loadingState),
loadingStateVisible: state.scratchGui.modals.loadingProject,
projectId: state.scratchGui.projectState.projectId,
soundsTabVisible: state.scratchGui.editorTab.activeTabIndex === SOUNDS_TAB_INDEX,
songsTabVisible: state.scratchGui.editorTab.activeTabIndex === SONGS_TAB_INDEX,
targetIsStage: (
state.scratchGui.targets.stage &&
state.scratchGui.targets.stage.id === state.scratchGui.targets.editingTarget
),
telemetryModalVisible: state.scratchGui.modals.telemetryModal,
tipsLibraryVisible: state.scratchGui.modals.tipsLibrary,
vm: state.scratchGui.vm,
blocksId: state.scratchGui.timeTravel.year.toString(),
stageSizeMode: state.scratchGui.stageSize.stageSize,
// ❌ DELETE THESE TWO LINES:
// showWelcomeModal: !hasCompletedWelcome(),
// theme: state.scratchGui.theme.theme
// ✅ KEEP ONLY THIS:
theme: state.scratchGui.theme.theme
});The container already handles 🧠 Learnings used |
|
@supervoidcoder Hey void! 👋 Yes, I'm on it! Sorry for getting sidetracked with the error explanation! I've got the full context from issue #448 memorized - the multi-step welcome modal with:
Using Let me trigger a full technical review of PR #449 now! 🔍 🧠 Learnings used✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (8)
src/components/welcome-modal/addons-step.jsx (1)
26-26: Iframe src path may fail in production.The relative path
/addonsassumes the addons route is served at the root of the application. This may not work in all deployment environments or if the app is served from a subdirectory.The past review suggested using:
- src="/addons" + src={`${window.location.origin}/addons`}src/containers/gui.jsx (3)
153-155: Remove debug console.log and duplicate showWelcomeModal calculation.The
showWelcomeModalvariable is calculated on line 153 but then calculated again on line 168, and there's a debug console.log statement that should not be in production code.Apply this diff:
- const showWelcomeModal = !hasCompletedWelcome(); - console.log('🔗 Container showWelcomeModal:', showWelcomeModal); const loadingState = state.scratchGui.projectState.loadingState;
168-168: Use the already calculated showWelcomeModal variable.Line 153 already calculates
showWelcomeModal, so this line should reference that variable instead of callinghasCompletedWelcome()again.Apply this diff:
- showWelcomeModal: !hasCompletedWelcome(), + showWelcomeModal,
201-203: Implement the welcome modal close handler.The empty function body prevents the welcome modal from closing, which is likely the "broken" behavior mentioned in the PR description. Without this implementation, users cannot dismiss the modal or mark onboarding as complete.
You'll need to:
- Import
markWelcomeCompletefrom../components/welcome-modal/welcome-modal.jsx- Call it in the handler
- Trigger a re-render so
showWelcomeModalupdatesApply this diff:
- onRequestCloseWelcomeModal: () => {}, + onRequestCloseWelcomeModal: () => { + const {markWelcomeComplete} = require('../components/welcome-modal/welcome-modal.jsx'); + markWelcomeComplete(); + // Force component to re-check hasCompletedWelcome + dispatch({type: 'WELCOME_MODAL_CLOSED'}); + },Note: This assumes you have a Redux action to trigger a re-render. Alternatively, you could store the completion state in Redux instead of just localStorage.
src/components/welcome-modal/welcome-modal.jsx (3)
22-23: Logic error: Returningtrueon localStorage error prevents welcome modal from showing.When localStorage is unavailable (private browsing, disabled storage), catching the error and returning
trueskips onboarding entirely. New users in these environments will never see the welcome modal.} catch (e) { - return true; + return false; // Show welcome modal if localStorage is unavailable }
38-38: Remove debug console.log before merging.Debug logging should be removed for production code.
- console.log('🎉 WelcomeModal constructor called!');
120-121: Modal trap: Users cannot close modal via escape key or overlay click.Setting
onRequestClose={null}disables keyboard escape, andshouldCloseOnOverlayClick={false}prevents overlay click. Combined, users are trapped if the finish handler fails or buttons malfunction.- onRequestClose={null} // Disable closing by clicking outside + onRequestClose={this.props.onRequestClose} // Allow closing via escape key shouldCloseOnOverlayClick={false}src/components/gui/gui.jsx (1)
167-167: Remove debug console.log before merging.Debug logging should be removed for production code.
- console.log('🎯 showWelcomeModal:', showWelcomeModal);
🧹 Nitpick comments (14)
src/components/welcome-modal/final-step.css (1)
1-110: Consider using theme color variables instead of hardcoded values.This stylesheet uses numerous hardcoded color values (#333, #666, #f8f9fa, #FFAB19, #FF6B6B, etc.) and gradients. Based on learnings, the codebase prefers using theme color CSS custom properties defined in src/css/colors.css to ensure consistency and theme compatibility across light/dark modes.
Consider refactoring to use CSS variables like
var(--ui-primary),var(--text-primary),var(--motion-primary), etc. This would allow the modal to adapt to the user's selected theme and maintain visual consistency with the rest of the application.src/components/welcome-modal/welcome-step.css (1)
1-89: Consider using theme color variables instead of hardcoded values.Similar to other modal step stylesheets, this file contains many hardcoded colors and gradients. To ensure the welcome modal adapts properly to light/dark themes and maintains visual consistency, consider using CSS custom properties from src/css/colors.css.
src/components/welcome-modal/welcome-step.jsx (2)
52-56: Remove unused PropTypes or implement the corresponding functionality.The component declares
onNext,isFirstStep, andisLastStepprops but never uses them. Either remove these unused PropTypes or implement the navigation logic that would consume them.
8-11: Replace placeholder with actual SVG illustration.The placeholder comment indicates that an SVG illustration should be added here. Based on learnings, each step of the welcome modal should include SVG illustrations for visual polish.
Would you like me to help design or integrate an SVG illustration for the welcome step?
src/components/welcome-modal/addons-step.jsx (2)
40-44: Remove unused PropTypes or implement the corresponding functionality.Like WelcomeStep, this component declares navigation props that are never used in the component body.
9-12: Replace placeholder with actual SVG illustration.Each modal step should include its own SVG illustration for visual consistency.
src/components/welcome-modal/welcome-modal.css (1)
1-134: Leverage imported theme variables more consistently.While this stylesheet imports
colors.cssandunits.css, it still relies heavily on hardcoded color values throughout (e.g., rgba(0, 0, 0, 0.75), #4C97FF, #0FBD8C, #e0e0e0, #666, #999). Consider using the CSS custom properties from the imported files for better theme integration and maintainability.src/components/welcome-modal/addons-step.css (1)
1-71: Consider using theme color variables instead of hardcoded values.This stylesheet uses hardcoded colors throughout. Following the pattern in welcome-modal.css, consider importing and using CSS custom properties from src/css/colors.css to ensure theme compatibility.
src/components/welcome-modal/theme-step.css (1)
1-125: Consider using theme color variables instead of hardcoded values.This stylesheet for the theme selection step ironically uses hardcoded colors throughout rather than leveraging the theme system it's designed to configure. Consider importing src/css/colors.css and using CSS custom properties for consistency with the established theming architecture.
src/components/welcome-modal/final-step.jsx (1)
5-5: Props declared but never used in component.The component signature
FinalStep = ()takes no props, but PropTypes declaresonFinish,isFirstStep, andisLastStep. Either destructure and use these props or remove unused PropTypes.-const FinalStep = () => ( +const FinalStep = ({onFinish, isFirstStep, isLastStep}) => (Alternatively, if these props aren't needed in this component, remove them from PropTypes to avoid confusion.
Also applies to: 51-55
src/components/welcome-modal/welcome-modal.jsx (1)
81-93: Use functionalsetStateto avoid stale state.Reading
this.state.currentStepinsidesetStatecan cause issues with batched updates. Use the functional form for safe state updates.handleNext () { if (this.state.currentStep < this.steps.length - 1) { - this.setState({currentStep: this.state.currentStep + 1}); + this.setState(prevState => ({currentStep: prevState.currentStep + 1})); } else { this.handleFinish(); } } handleBack () { if (this.state.currentStep > 0) { - this.setState({currentStep: this.state.currentStep - 1}); + this.setState(prevState => ({currentStep: prevState.currentStep - 1})); } }src/components/welcome-modal/theme-step.jsx (3)
28-34: Consider extractingaccentColorsas a static constant.The
accentColorsarray is identical across all instances. Defining it outside the class avoids recreating the array on each instantiation.+const ACCENT_COLORS = [ + {id: ACCENT_AQUA, name: 'Aqua', color: '#59C0C0'}, + {id: ACCENT_PURPLE, name: 'Purple', color: '#9966FF'}, + {id: ACCENT_BLUE, name: 'Blue', color: '#4C97FF'}, + {id: ACCENT_RED, name: 'Red', color: '#FF6680'}, + {id: ACCENT_RAINBOW, name: 'Rainbow', color: 'linear-gradient(90deg, #ff0000, #ff9a00, #d0de21, #4fdc4a, #3fdad8, #2fc9e2, #1c7fee, #5f15f2, #ba0cf8, #fb07d9)'} +]; + class ThemeStep extends React.Component { constructor (props) { super(props); bindAll(this, [ 'handleGuiChange', 'handleAccentChange' ]); - - // Available accent colors with display info - this.accentColors = [ - {id: ACCENT_AQUA, name: 'Aqua', color: '#59C0C0'}, - {id: ACCENT_PURPLE, name: 'Purple', color: '#9966FF'}, - {id: ACCENT_BLUE, name: 'Blue', color: '#4C97FF'}, - {id: ACCENT_RED, name: 'Red', color: '#FF6680'}, - {id: ACCENT_RAINBOW, name: 'Rainbow', color: 'linear-gradient(90deg, #ff0000, #ff9a00, #d0de21, #4fdc4a, #3fdad8, #2fc9e2, #1c7fee, #5f15f2, #ba0cf8, #fb07d9)'} - ]; }Then use
ACCENT_COLORSinstead ofthis.accentColorsin render.
130-136: Unused props in PropTypes:onNext,isFirstStep,isLastStep.These props are declared but never used in the component. The parent passes navigation handlers, but this component relies on the modal's bottom navigation instead.
If these won't be used, consider removing them:
ThemeStep.propTypes = { theme: PropTypes.instanceOf(Theme).isRequired, - onSetTheme: PropTypes.func.isRequired, - onNext: PropTypes.func, - isFirstStep: PropTypes.bool, - isLastStep: PropTypes.bool + onSetTheme: PropTypes.func.isRequired };
70-97: Consider adding accessibility attributes for screen readers.The theme toggle buttons lack
aria-pressedto indicate selection state. This affects accessibility for users relying on screen readers.<button className={ currentGui === GUI_LIGHT ? `${styles.themeOption} ${styles.selected}` : styles.themeOption } + aria-pressed={currentGui === GUI_LIGHT} onClick={() => this.handleGuiChange(GUI_LIGHT)} >Apply similarly to the Dark Mode button and accent color buttons.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
src/components/gui/gui.jsx(5 hunks)src/components/welcome-modal/addons-step.css(1 hunks)src/components/welcome-modal/addons-step.jsx(1 hunks)src/components/welcome-modal/final-step.css(1 hunks)src/components/welcome-modal/final-step.jsx(1 hunks)src/components/welcome-modal/theme-step.css(1 hunks)src/components/welcome-modal/theme-step.jsx(1 hunks)src/components/welcome-modal/welcome-modal.css(1 hunks)src/components/welcome-modal/welcome-modal.jsx(1 hunks)src/components/welcome-modal/welcome-step.css(1 hunks)src/components/welcome-modal/welcome-step.jsx(1 hunks)src/containers/gui.jsx(5 hunks)
🧰 Additional context used
🧠 Learnings (12)
📓 Common learnings
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-02T00:43:10.437Z
Learning: In OmniBlocks/scratch-gui issue #448 and PR #449, supervoidcoder is implementing a multi-step welcome modal with: 1) warm welcome step, 2) theme selection (light/dark + accent colors using Theme class), 3) addons setup via iframe, 4) final "you're ready" step. The modal should use localStorage key 'omniblocks:welcome_completed', integrate with existing Theme system (Theme.set()), and include SVG illustrations for each step. Analytics step is planned for later.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui: For CI comment hygiene, prefer not mentioning bot/app requesters in the Mega PR Test & Analysis sticky comment; only mention humans. Track such behavior changes via a GitHub issue assigned to supervoidcoder with backlinks to the initiating PR and comment.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:40:39.943Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder (“void”) prefers a collaboration model where CodeRabbit authors the code PRs and Amazon Q performs the review; follow-ups should be submitted as single, self-contained PRs when possible.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui workflow preference: Open tracking issues for CI/automation behavior changes; assign to supervoidcoder; include backlinks to the PR and the exact comment requesting the change.
Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui CI preference: In the "Mega PR Test & Analysis" sticky comment, only @-mention the requester if the actor is a human user; do not @-mention bots to avoid triggering bot back-and-forth and comment spam.
Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.
Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:49:51.378Z
Learning: OmniBlocks/scratch-gui: Update Mega PR Test & Analysis so the sticky PR comment only mentions the requester when github.event.sender.type == 'User' (i.e., human). Purpose: avoid bot loops and comment noise.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:55:33.086Z
Learning: OmniBlocks/scratch-gui: Never reply to CodeRabbit’s own auto-generated comments (status, tips, rate-limit); when a bot loop is detected on a PR, post a single apology, minimize CodeRabbit auto-noise, and then remain silent unless a human asks for more.
Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui: Please avoid replying to CI status posts and ensure the Mega PR Test & Analysis workflow’s sticky comment only @-mentions the requester when the actor is a human (GitHub user type "User"); when actor is a bot, do not @-mention to prevent bot loops.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T20:16:15.537Z
Learning: OmniBlocks/scratch-gui has an existing workflow at .github/workflows/prtest.yml named "Mega PR Test & Analysis".
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:25:31.991Z
Learning: In the OmniBlocks/scratch-gui repository, "React Modal" refers to the react-modal library used for all modal dialogs, such as the advanced settings menu in the menu bar.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:01:57.123Z
Learning: In the OmniBlocks/scratch-gui repository, team member supervoidcoder can be called "void" in reviews and conversations.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T12:10:19.348Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers a division of labor where Amazon Q handles fast review for ethics and project vision concerns, while CodeRabbit performs deep technical review of code quality, security, architecture, and implementation details.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.320Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not @-mentioning bots.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T21:20:08.837Z
Learning: In the OmniBlocks/scratch-gui repository, supervoidcoder (“void”) prefers single, complete PRs over multi-part (“Part 1/2”) submissions. If a split is unavoidable, they want explicit linkage and gating before approval.
Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:00:40.666Z
Learning: In OmniBlocks/scratch-gui, when cleanup is requested, supervoidcoder prefers deletion of CodeRabbit’s spam comments (not just minimizing) on the PR; for non-CodeRabbit bot comments, minimize unless a maintainer explicitly asks for hard deletion.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:01:57.123Z
Learning: The team members in OmniBlocks/coders include: supervoidcoder, Graison-P (gvyt), ampelectrecuted (amp), NotTheBaton (TheBaton), and kRxZykRxZy.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T04:15:58.834Z
Learning: For conversations and review replies with supervoidcoder in OmniBlocks/scratch-gui, prefer an energetic, playful tone (emojis, fun copy). Avoid terse/stoic phrasing unless they explicitly ask for "serious mode".
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-28T03:09:05.973Z
Learning: In the OmniBlocks/scratch-gui repository, supervoidcoder (void) is planning to add a 3D mode and is excited about using PlayCanvas as a full 3D game engine for OmniBlocks.
📚 Learning: 2025-12-02T00:43:10.437Z
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-02T00:43:10.437Z
Learning: In OmniBlocks/scratch-gui issue #448 and PR #449, supervoidcoder is implementing a multi-step welcome modal with: 1) warm welcome step, 2) theme selection (light/dark + accent colors using Theme class), 3) addons setup via iframe, 4) final "you're ready" step. The modal should use localStorage key 'omniblocks:welcome_completed', integrate with existing Theme system (Theme.set()), and include SVG illustrations for each step. Analytics step is planned for later.
Applied to files:
src/components/welcome-modal/final-step.jsxsrc/components/welcome-modal/final-step.csssrc/components/welcome-modal/addons-step.csssrc/components/welcome-modal/theme-step.jsxsrc/components/welcome-modal/welcome-modal.csssrc/containers/gui.jsxsrc/components/welcome-modal/welcome-modal.jsxsrc/components/welcome-modal/welcome-step.csssrc/components/welcome-modal/addons-step.jsxsrc/components/gui/gui.jsxsrc/components/welcome-modal/theme-step.csssrc/components/welcome-modal/welcome-step.jsx
📚 Learning: 2025-10-21T11:30:02.766Z
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-21T11:30:02.766Z
Learning: In TurboWarp/Scratch addons, the _runtime_entry.js file must use the webpack loader prefix when importing CSS: `import _css from "!css-loader!./userstyle.css";`. Without this prefix, CSS variables won't work and addon settings won't map to CSS styles.
Applied to files:
src/components/welcome-modal/addons-step.css
📚 Learning: 2025-12-01T23:52:49.296Z
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T23:52:49.296Z
Learning: In OmniBlocks/scratch-gui, the theme system uses a Theme class with three properties: `accent` (aqua/purple/blue/red/rainbow), `gui` (light/dark), and `blocks` (three/dark/high-contrast/custom). Use `theme.set(property, value)` to create new Theme instances, dispatch via Redux `setTheme()` action, and persistence is handled by `persistTheme()` from src/lib/themes/themePersistance.js.
Applied to files:
src/components/welcome-modal/theme-step.jsxsrc/components/gui/gui.jsxsrc/components/welcome-modal/theme-step.css
📚 Learning: 2025-10-01T19:48:54.055Z
Learnt from: CR
Repo: OmniBlocks/scratch-gui PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-10-01T19:48:54.055Z
Learning: Applies to src/lib/themes/guiHelpers.js : Override or manage theme variables in JS via src/lib/themes/guiHelpers.js when needed
Applied to files:
src/components/welcome-modal/theme-step.jsxsrc/containers/gui.jsx
📚 Learning: 2025-10-01T19:48:54.055Z
Learnt from: CR
Repo: OmniBlocks/scratch-gui PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-10-01T19:48:54.055Z
Learning: Applies to src/lib/themes/accent/@(aqua|blue|rainbow|red|purple).js : Theme accent files are defined per theme in src/lib/themes/accent/<theme>.js (current themes: aqua, blue, rainbow, red, purple)
Applied to files:
src/components/welcome-modal/theme-step.jsxsrc/components/welcome-modal/theme-step.css
📚 Learning: 2025-10-07T00:28:59.495Z
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-07T00:28:59.495Z
Learning: PenguinMod's scratch-gui uses the same dynamic `require('../reducers/gui')` pattern in app-state-hoc.jsx as TurboWarp, so this pattern is correct and not the cause of circular dependency errors.
Applied to files:
src/containers/gui.jsx
📚 Learning: 2025-10-22T19:25:31.991Z
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:25:31.991Z
Learning: In the OmniBlocks/scratch-gui repository, "React Modal" refers to the react-modal library used for all modal dialogs, such as the advanced settings menu in the menu bar.
Applied to files:
src/containers/gui.jsxsrc/components/welcome-modal/welcome-modal.jsxsrc/components/gui/gui.jsx
📚 Learning: 2025-10-01T19:48:54.055Z
Learnt from: CR
Repo: OmniBlocks/scratch-gui PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-10-01T19:48:54.055Z
Learning: Applies to src/addons/** : Manage addons under src/addons/ and sync/patch sources from upstream via pull.js
Applied to files:
src/components/welcome-modal/addons-step.jsx
📚 Learning: 2025-10-01T19:48:54.055Z
Learnt from: CR
Repo: OmniBlocks/scratch-gui PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-10-01T19:48:54.055Z
Learning: Applies to src/addons/entry.js : Use src/addons/entry.js as the main entry point for addons
Applied to files:
src/components/welcome-modal/addons-step.jsx
📚 Learning: 2025-10-01T19:48:54.055Z
Learnt from: CR
Repo: OmniBlocks/scratch-gui PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-10-01T19:48:54.055Z
Learning: Applies to src/css/colors.css : Define base color and theme CSS custom properties in src/css/colors.css
Applied to files:
src/components/welcome-modal/theme-step.css
📚 Learning: 2025-10-22T19:25:31.991Z
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:25:31.991Z
Learning: In the OmniBlocks/scratch-gui repository, avoid hardcoded CSS and use theme colors for the majority of CSS needs.
Applied to files:
src/components/welcome-modal/theme-step.css
🧬 Code graph analysis (3)
src/components/welcome-modal/theme-step.jsx (4)
src/lib/themes/index.js (7)
ACCENT_AQUA(19-19)ACCENT_PURPLE(15-15)ACCENT_BLUE(16-16)ACCENT_RED(17-17)ACCENT_RAINBOW(18-18)GUI_LIGHT(29-29)GUI_DARK(30-30)src/lib/themes/themePersistance.js (1)
persistTheme(80-108)src/components/gui/gui.jsx (1)
mapStateToProps(595-604)src/reducers/theme.js (1)
setTheme(18-21)
src/containers/gui.jsx (1)
src/components/welcome-modal/welcome-modal.jsx (2)
hasCompletedWelcome(19-25)hasCompletedWelcome(19-25)
src/components/gui/gui.jsx (2)
src/containers/gui.jsx (1)
showWelcomeModal(153-153)src/components/welcome-modal/welcome-modal.jsx (2)
hasCompletedWelcome(19-25)hasCompletedWelcome(19-25)
⏰ 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). (11)
- GitHub Check: test-matrix (macos-latest, chromium)
- GitHub Check: test-matrix (windows-latest, webkit)
- GitHub Check: test-matrix (macos-latest, firefox)
- GitHub Check: test-matrix (macos-latest, webkit)
- GitHub Check: test-matrix (ubuntu-latest, webkit)
- GitHub Check: test-matrix (windows-latest, chromium)
- GitHub Check: test-matrix (windows-latest, firefox)
- GitHub Check: test-matrix (ubuntu-latest, chromium)
- GitHub Check: test-matrix (ubuntu-latest, firefox)
- GitHub Check: mega-test
- GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (3)
src/components/welcome-modal/final-step.jsx (1)
6-48: LGTM!The component structure and UI layout are clean. The placeholder illustration and quick tips section are well organized.
src/components/welcome-modal/welcome-modal.jsx (1)
142-150: LGTM on step rendering logic.The dynamic step rendering with navigation props is well structured. The step components receive appropriate callbacks (
onNext,onBack,onSkip,onFinish) and state indicators (isFirstStep,isLastStep).src/components/welcome-modal/theme-step.jsx (1)
37-47: LGTM on theme change handlers!The handlers correctly use
Theme.set()to create immutable theme instances, dispatch to Redux viaonSetTheme, and persist changes viapersistTheme. This aligns with the established theme system patterns.
src/components/gui/gui.jsx
Outdated
| import tabStyles from 'react-tabs/style/react-tabs.css'; | ||
| import VM from 'scratch-vm'; | ||
|
|
||
| import WelcomeModal from '../welcome-modal/welcome-modal.jsx'; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
rg -n 'hasCompletedWelcome' src/components/gui/gui.jsxRepository: OmniBlocks/scratch-gui
Length of output: 115
🏁 Script executed:
head -30 src/components/gui/gui.jsxRepository: OmniBlocks/scratch-gui
Length of output: 1627
🏁 Script executed:
rg -n 'export.*hasCompletedWelcome|hasCompletedWelcome.*export' src/components/welcome-modal/welcome-modal.jsxRepository: OmniBlocks/scratch-gui
Length of output: 111
Import hasCompletedWelcome from the welcome-modal module.
The mapStateToProps function uses hasCompletedWelcome() at line 601, but it's not imported. Update the import on line 11:
import WelcomeModal, { hasCompletedWelcome } from '../welcome-modal/welcome-modal.jsx';🤖 Prompt for AI Agents
In src/components/gui/gui.jsx around line 11, the file imports only the default
WelcomeModal but mapStateToProps uses hasCompletedWelcome at line 601; update
the import on line 11 to also import the named export hasCompletedWelcome from
'../welcome-modal/welcome-modal.jsx' so the function is available for use in
mapStateToProps.
| fontsModalVisible, | ||
| unknownPlatformModalVisible, | ||
| invalidProjectModalVisible, | ||
| showWelcomeModal, |
There was a problem hiding this comment.
Critical: onRequestCloseWelcomeModal is used but not destructured from props.
The variable onRequestCloseWelcomeModal is passed to WelcomeModal on line 245 but is never destructured from props in the component's destructuring block (line 163 area). This causes a ReferenceError at runtime.
Add onRequestCloseWelcomeModal to the props destructuring:
invalidProjectModalVisible,
showWelcomeModal,
+ onRequestCloseWelcomeModal,
vm,
...componentProps
} = omit(props, 'dispatch');Also applies to: 243-246
🤖 Prompt for AI Agents
In src/components/gui/gui.jsx around line 163 (and relevant usage at lines
243-246), the prop onRequestCloseWelcomeModal is referenced when rendering
<WelcomeModal> but not included in the component's props destructuring, causing
a ReferenceError; update the props destructuring at the top of the component to
include onRequestCloseWelcomeModal, and ensure the same exact prop name is
passed through to WelcomeModal where it’s used (lines ~243-246) so the handler
is defined at runtime.
src/components/gui/gui.jsx
Outdated
| showWelcomeModal: !hasCompletedWelcome(), | ||
| theme: state.scratchGui.theme.theme | ||
|
|
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check how onRequestCloseWelcomeModal is implemented and used
rg -n -A 15 'onRequestCloseWelcomeModal' src/containers/gui.jsxRepository: OmniBlocks/scratch-gui
Length of output: 669
🏁 Script executed:
#!/bin/bash
# Check where onRequestCloseWelcomeModal is called in the GUI component
rg -n 'onRequestCloseWelcomeModal' src/components/gui/gui.jsxRepository: OmniBlocks/scratch-gui
Length of output: 188
🏁 Script executed:
#!/bin/bash
# Check the WelcomeModal component to see what it does with onRequestClose
rg -n -A 5 'onRequestClose' src/components/welcome-modal/welcome-modal.jsx | head -30Repository: OmniBlocks/scratch-gui
Length of output: 772
The welcome modal has no close mechanism and will remain open after completion.
onRequestCloseWelcomeModal is mapped to an empty function in the container, so when WelcomeModal calls this.props.onRequestClose() after the user completes onboarding, nothing happens. Since showWelcomeModal is computed from localStorage in mapStateToProps and localStorage changes don't trigger React re-renders, the modal will remain visible until an unrelated Redux state change occurs.
Implement onRequestCloseWelcomeModal to dispatch a Redux action that updates the welcome state, or manage showWelcomeModal directly as Redux state rather than computing it from localStorage on every render.
|
@coderabbitai well i removed that one line but while it doesn't violently crahs no more it still doesn't show |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 3510 🏁 Script executed: Length of output: 2455 🏁 Script executed: Length of output: 2045 🏁 Script executed: Length of output: 0 🏁 Script executed: Length of output: 0 🏁 Script executed: Length of output: 2776 🏁 Script executed: Length of output: 825 🏁 Script executed: Length of output: 0 🏁 Script executed: Length of output: 945 @supervoidcoder Aha! 🕵️ I found TWO issues here! Issue #1: The line is STILL there! 😅Looking at the script output, showWelcomeModal: !hasCompletedWelcome(),But import WelcomeModal from '../welcome-modal/welcome-modal.jsx';You need to either: Option A (Recommended): Remove const mapStateToProps = state => ({
customStageSize: state.scratchGui.customStageSize,
isWindowFullScreen: state.scratchGui.tw.isWindowFullScreen,
blocksId: state.scratchGui.timeTravel.year.toString(),
stageSizeMode: state.scratchGui.stageSize.stageSize,
// ❌ DELETE THIS LINE:
// showWelcomeModal: !hasCompletedWelcome(),
theme: state.scratchGui.theme.theme
});Option B: Import the function if you really need it here: import WelcomeModal, {hasCompletedWelcome} from '../welcome-modal/welcome-modal.jsx';Issue #2: localStorage might already be set! 🔑Even after fixing the import, if you tested this before, your browser's localStorage might have the Open your browser console and run: // Check if it's set
localStorage.getItem('omniblocks:welcome_completed')
// Clear it to test the modal
localStorage.removeItem('omniblocks:welcome_completed')
// Reload the page
location.reload()Try both fixes and let me know if the modal shows up! 🚀 🧠 Learnings used |
|
@coderabbitai no dum dum i deleted the file locally but it still don't show nada |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 5353 🏁 Script executed: Length of output: 76 🏁 Script executed: Length of output: 1091 🏁 Script executed: Length of output: 6285 🏁 Script executed: Length of output: 233 🏁 Script executed: Length of output: 66 @supervoidcoder Okay okay, my bad! 😅 Let me look closer at what's happening... The Problem 🔍Your component file showWelcomeModal: !hasCompletedWelcome(),But look at line 11 - you're only importing the modal component itself: import WelcomeModal from '../welcome-modal/welcome-modal.jsx';You need to import the helper function too! The component file has its own The Fix 🔧Change line 11 in import WelcomeModal from '../welcome-modal/welcome-modal.jsx';To: import WelcomeModal, {hasCompletedWelcome} from '../welcome-modal/welcome-modal.jsx';That's it! The modal component itself looks perfect - it has Also Check localStorage 🔑If it still doesn't show after the import fix, your browser might have the flag already set. Open the console and run: localStorage.removeItem('omniblocks:welcome_completed')
location.reload()The modal should appear on the next page load! 🎉 🧠 Learnings used |
🎉 MEGA PR Test & Analysis Complete!Hi @supervoidcoder! Your PR has been fully tested and analyzed! 🚀✨ 🌍 Test DeploymentLive Preview: https://OmniBlocks.github.io/scratch-gui/supervoidcoder/449/ 🧪 Test ResultsESLint: ❌ Found issues
Unit Tests: ❌
Integration Tests: ❌
📄 Full test outputs available in artifacts 🔦 Performance Audit (Lighthouse)✅ Audit completed successfully! 📊 Lighthouse Scores:
⚡ Core Web Vitals:
🟢 90-100 (Good) | 🟠 50-89 (Needs Improvement) | 🔴 0-49 (Poor) 📄 Full report in artifacts 📦 Bundle Size AnalysisTotal Build Size: 137M 📦 Top 5 Largest JavaScript Files:
🎨 Top 5 Largest CSS Files:
♿ Accessibility Testing✅ Accessibility scan completed!
📊 Build Details
💡 Pro Tip: Only one build was needed for all these checks - saving CI/CD minutes! 🎯 |
🕐 Stale PR ReminderHey @supervoidcoder! 🌟 Just wanted to sprinkle a little reminder dust on your PR #449 titled "Welcome-modal." It looks like a fantastic addition to our Scratch editor experience! 🎉 It's been a week since we last saw any updates, and I’m curious if you need any help or if there’s anything blocking your progress. We're all here cheering you on! Let's make that modally welcoming interface shine! ✨ If you have questions or need any suggestions, feel free to reach out. Happy coding! 🎈 This is an automated friendly reminder. No pressure! 💙 |
🕐 Stale PR ReminderHey there, @supervoidcoder! 🌟 Just popping in to remind you about your awesome PR #449 – the "Welcome-modal"! It's a fantastic addition that’ll really elevate the first-time user experience. 🎉 I noticed it's been a little quiet since the last update, and I want to check in to see if you need any help or if there’s anything blocking your progress. Don’t hesitate to reach out if there’s anything we can do to keep the momentum going! You've got this! 🚀✨ This is an automated friendly reminder. No pressure! 💙 |
🕐 Stale PR ReminderHey @supervoidcoder! 👋 This PR has been quiet for a while. Need any help getting it across the finish line? Feel free to ask! 🚀 This is an automated friendly reminder. No pressure! 💙 |
1 similar comment
🕐 Stale PR ReminderHey @supervoidcoder! 👋 This PR has been quiet for a while. Need any help getting it across the finish line? Feel free to ask! 🚀 This is an automated friendly reminder. No pressure! 💙 |
Resolves
it's frickin' broken
What Github issue does this resolve (if any, if not then please include link)?
Proposed Changes
Describe what this Pull Request does
Reason for Changes
Explain why these changes should be made. Why is this helpful or necessary? Why should this be added?
Test Coverage
Please show how you have added tests to cover your changes
Browser Coverage
Check the OS/browser combinations tested (At least 2)
Mac
Windows
Chromebook
iPad
Android Tablet