Skip to content

Conversation

@ucswift
Copy link
Member

@ucswift ucswift commented Nov 14, 2025

Summary by CodeRabbit

  • New Features

    • Enhanced onboarding experience with Skip button, animated transitions, and improved navigation on the final slide.
  • Documentation

    • Added accessibility text scaling validation guide for component behavior under different font scale settings.
  • Tests

    • Introduced comprehensive test suite validating text scaling across UI components and system font scale scenarios.
  • Chores

    • Implemented external service integration for automated release notes management and deployment tracking.

@coderabbitai
Copy link

coderabbitai bot commented Nov 14, 2025

Walkthrough

The pull request integrates Changerawr API for release notes posting, adds comprehensive accessibility text scaling validation documentation and test suite, and refactors the onboarding flow with button animations and improved navigation controls including skip functionality.

Changes

Cohort / File(s) Summary
CI/CD Release Automation
.github/workflows/react-native-cicd.yml
Adds Changerawr API integration for posting release notes; extracts PR information and release notes from PR body or git commits; constructs release payload with version, date, notes, repository, commit, author, and build URL; sends via HTTP POST to external API.
Accessibility Documentation
docs/accessibility-text-scaling-validation.md
New documentation file covering accessibility text scaling validation findings, prioritized recommendations for converting to Gluestack components, dynamic font sizing approaches, test results, implementation checklist, and best practices.
Accessibility Tests
src/__tests__/accessibility-text-scaling.test.tsx
Comprehensive test suite validating text scaling behavior across Text, Heading, and Button components; mocks window dimensions for multiple fontScale scenarios; verifies allowFontScaling respect and layout resilience.
Onboarding Component Refactor
src/app/onboarding.tsx
Restructures onboarding with ScrollView layout, FlashList for slides, Pagination component, Skip button in top-right; adds button opacity animation on final slide; introduces handleGetStarted and handleSkip handlers; preserves and extends analytics tracking.

Sequence Diagram(s)

sequenceDiagram
    participant CI as GitHub Actions
    participant GH as GitHub API
    participant RN as Release Notes<br/>Generator
    participant CR as Changerawr API
    participant GHR as GitHub Releases

    Note over CI: Android Build Triggered
    
    CI->>GH: Fetch PR Info (if PR event)
    GH-->>CI: PR Number, Title, Body, URL
    
    CI->>RN: Extract Release Notes
    Note over RN: Check for Release Notes section<br/>in PR body or use git commits
    RN-->>CI: RELEASE_NOTES.md content
    
    CI->>GHR: Create Release<br/>(with release notes)
    GHR-->>CI: Release created
    
    CI->>CR: POST Release Data<br/>(version, date, notes, repo, commit, etc.)
    Note over CR: version, date, notes, repository,<br/>commit, author, build URL
    CR-->>CI: HTTP Response Status
    
    Note over CI: Workflow Complete
Loading
sequenceDiagram
    participant User
    participant App as Onboarding Screen
    participant State as State Management
    participant Analytics

    User->>App: View Onboarding
    App->>Analytics: Track view
    
    loop Scrolling Through Slides
        User->>App: Scroll to slide
        App->>State: Update currentIndex
        App->>Analytics: Track slide change
    end
    
    alt Final Slide
        App->>App: Animate buttonOpacity to 1
        User->>App: Tap "Let's Get Started"
        App->>Analytics: Track completion
    else Earlier Slide
        User->>App: Tap Skip Button
        App->>Analytics: Track skip event
    end
    
    App->>State: Mark first-time as false
    App->>App: Navigate to /login
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Areas requiring extra attention:

  • CI/CD workflow changes involving Changerawr API integration: verify payload construction, error handling, and environment variable usage
  • Onboarding component refactor: review animation logic, state updates during scroll events, and analytics tracking consistency across all navigation paths
  • Accessibility test suite: confirm mock setup covers all fontScale edge cases and assertions validate expected behavior

Possibly related PRs

Poem

🐰 Release notes now flutter to Changerawr's door,
While onboarding slides glide with grace and décor,
Accessibility checks ensure fonts scale just right,
A sprint of new features, polished and bright! ✨

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Title check ⚠️ Warning The pull request title partially addresses the changes but omits the most significant additions: ChangeraWR integration, release notes management, and accessibility text scaling documentation and tests. While it mentions the skip button and scroll functionality from onboarding.tsx, it ignores the majority of the changeset's scope. Revise the title to reflect the primary changes across all modified files, such as: 'Integrate ChangeraWR, add accessibility text scaling validation, enhance onboarding with skip button' or focus on the most impactful change if prioritizing a single change.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch develop

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 and usage tips.

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: 0

🧹 Nitpick comments (7)
.github/workflows/react-native-cicd.yml (2)

301-325: PR metadata + release notes extraction are robust, with a couple of edge cases to keep in mind

  • The actions/github-script step correctly looks up PRs associated with the commit and exposes pr_number, pr_title, pr_body, and pr_url. For commits associated with multiple PRs, you currently just take prs[0]; if ordering ever matters (e.g., closed vs. open PRs), consider explicitly sorting/filtering by state or merged_at.
  • The PR_BODY env expression nicely prefers github.event.pull_request.body on PR events and falls back to steps.pr_info.outputs.pr_body for pushes. On workflow_dispatch without a PR, steps.pr_info is empty so you correctly fall back to recent git log entries.
  • The AWK-based extraction of the ## Release Notes section is neat and the fallback to the full PR body avoids empty notes. Just be aware this relies on the heading being exactly ## Release Notes; other heading levels or variants (“### Release notes”) won’t be picked up.
  • Storing the computed RELEASE_NOTES into $GITHUB_ENV gives later steps a clean hook; this is fine as long as release notes remain reasonably small (well below env size limits).

No blocking issues here; these are mostly future-proofing considerations.

Also applies to: 331-344, 360-363


377-428: Consider soft‑failing the ChangeraWR POST to avoid blocking releases on external outages

The ChangeraWR POST step is well-structured: it JSON-escapes RELEASE_NOTES.md, sends a clear payload, and checks HTTP_STATUS for 2xx before proceeding. Right now, any non‑2xx response causes the entire job to fail (exit 1), which means a temporary outage or config issue in ChangeraWR will block otherwise-healthy Android releases.

If you’d rather treat this as “nice to have” telemetry instead of a hard dependency, you could downgrade failures to a warning while keeping the logs:

-        if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ]; then
-          echo "✅ Successfully sent release notes to Changerawr (HTTP $HTTP_STATUS)"
-          cat /tmp/changerawr_response.json
-        else
-          echo "⚠️ Failed to send release notes to Changerawr (HTTP $HTTP_STATUS)"
-          cat /tmp/changerawr_response.json
-          exit 1
-        fi
+        if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ]; then
+          echo "✅ Successfully sent release notes to Changerawr (HTTP $HTTP_STATUS)"
+          cat /tmp/changerawr_response.json
+        else
+          echo "⚠️ Failed to send release notes to Changerawr (HTTP $HTTP_STATUS)"
+          cat /tmp/changerawr_response.json
+          # Optional: don't block the release on a telemetry failure
+          # exit 1
+        fi

Also, this step currently relies on jq being installed earlier in the job; if that earlier step is ever refactored or made conditional, it might be worth adding a lightweight jq check/install here as well.

docs/accessibility-text-scaling-validation.md (1)

284-291: Add a language to the final fenced code block to satisfy markdownlint

The summary block of passing checks is fenced without a language, which triggers MD040. You can mark it as plain text:

-```
+```text
 ✅ Text Component - scales properly
 ✅ Heading Component - scales properly
 ✅ Button Component - scales properly
 ✅ No allowFontScaling={false} detected
 ✅ Handles font scale changes (0.8x to 3.0x)
 ✅ Layout integrity maintained at large scales
-```
+```

This keeps the formatting identical while resolving the lint warning.

src/__tests__/accessibility-text-scaling.test.tsx (1)

1-327: Solid, focused coverage for text scaling behavior

  • The explicit jest.mock('react-native', …) for useWindowDimensions plus the beforeEach reset pattern is clean and keeps fontScale control local to this suite.
  • You cover a good range of fontScale values (0.8–3.0) for Text, Heading, and ButtonText, plus a “large scale layout integrity” scenario, which aligns nicely with the new documentation.
  • The “Components with Fixed Font Sizes” test acts as living documentation of a known limitation without asserting behavior beyond existence, which is appropriate.

If you ever want to tighten these tests further, you could add a couple of assertions on style props (e.g., checking maxFontSizeMultiplier or verifying that isTruncated maps to the expected props on the underlying component), but the current suite is already valuable and readable.

src/app/onboarding.tsx (3)

35-62: Fixed font sizes in onboarding text work but undermine text‑scaling accessibility

styles.title and styles.description (Lines [47-57]) use fixed fontSize values (28 and 16), and the onboarding.tsx section is explicitly called out in your new accessibility report as needing attention. On devices with large accessibility text settings, these fixed sizes won’t scale, which can conflict with your WCAG/text-scaling goals.

Consider migrating these to Gluestack UI Text variants or a scalable approach:

-  title: {
-    fontSize: 28,
-    fontWeight: 'bold',
-    textAlign: 'center',
-    marginBottom: 16,
-  },
-  description: {
-    fontSize: 16,
-    textAlign: 'center',
-    lineHeight: 24,
-  },
+  title: {
+    fontWeight: 'bold',
+    textAlign: 'center',
+    marginBottom: 16,
+  },
+  description: {
+    textAlign: 'center',
+    lineHeight: 24,
+  },

and then rely on Gluestack sizing:

<Text size="2xl" style={[styles.title, { color: textColors.title }]}>{title}</Text>
<Text size="md" style={[styles.description, { color: textColors.description }]}>{description}</Text>

Alternatively, use a normalize helper based on PixelRatio.getFontScale() as suggested in your accessibility report. This aligns the implementation with the documented recommendations.

Also applies to: 121-131


165-185: Clamp computed slide index in handleScroll to avoid transient negative indices

handleScroll (Lines [165-185]) derives the slide index from contentOffset.x / width and then updates currentIndex and analytics. During iOS/Android bounce effects, contentOffset.x can go slightly negative, which would give you a negative index. That can temporarily leave no pagination dot highlighted and send fromSlide/toSlide values that don’t map to real slides.

You can cheaply guard against this by clamping:

-  const handleScroll = (event: { nativeEvent: { contentOffset: { x: number } } }) => {
-    const index = Math.round(event.nativeEvent.contentOffset.x / width);
+  const handleScroll = (event: { nativeEvent: { contentOffset: { x: number } } }) => {
+    const rawIndex = Math.round(event.nativeEvent.contentOffset.x / width);
+    const index = Math.min(Math.max(rawIndex, 0), onboardingData.length - 1);

The auto–handleGetStarted path for swiping past the last slide still won’t really trigger with pagingEnabled in practice, but the clamp keeps state and analytics consistent in all scroll edge cases.

Also applies to: 203-208


7-8: Unify skip behavior and align with image/i18n guidelines

A few small points in this block:

  1. Use the project’s fast-image wrapper instead of RN Image

You already have src/components/ui/image.tsx wrapping react-native-fast-image. To follow the “use react-native-fast-image where appropriate” guideline, you can switch:

-import { Dimensions, Image, ScrollView, StyleSheet } from 'react-native';
+import { Dimensions, ScrollView, StyleSheet } from 'react-native';
+import { Image } from '@/components/ui/image';

The rest of the <Image> usage (Line [228]) should work unchanged, while benefiting from caching/placeholders.

  1. Deduplicate skip logic and avoid inline handler

The top-right Skip uses handleSkip (Lines [210-221]), but the bottom Skip (Lines [259-270]) inlines nearly identical analytics + navigation logic. This duplicates behavior and also introduces an inline function where your guidelines suggest using named callbacks.

One option is to parameterize the skip location:

-  const handleSkip = useCallback(() => {
+  const handleSkip = useCallback((skipLocation: 'top_right' | 'bottom_cta' = 'top_right') => {
     trackEvent('onboarding_skip_clicked', {
       timestamp: new Date().toISOString(),
       currentSlide: currentIndex,
       slideTitle: onboardingData[currentIndex]?.title || 'Unknown',
-      skipLocation: 'top_right',
+      skipLocation,
     });
     setIsFirstTime(false);
     router.replace('/login');
-  }, [trackEvent, currentIndex, setIsFirstTime, router]);
+  }, [trackEvent, currentIndex, setIsFirstTime, router]);

Then:

-  <Pressable onPress={handleSkip} className="absolute right-8 top-4" testID="skip-button-top">
+  <Pressable onPress={() => handleSkip('top_right')} className="absolute right-8 top-4" testID="skip-button-top">
-              <Pressable
-                onPress={() => {
-                  // Analytics: Track skip button clicks
-                  trackEvent('onboarding_skip_clicked', {
-                    timestamp: new Date().toISOString(),
-                    currentSlide: currentIndex,
-                    slideTitle: onboardingData[currentIndex]?.title || 'Unknown',
-                  });
-
-                  setIsFirstTime(false);
-                  router.replace('/login');
-                }}
-              >
+              <Pressable onPress={() => handleSkip('bottom_cta')} testID="skip-button-bottom">

This keeps analytics consistent and makes future changes easier.

  1. User-facing copy and i18n

Strings like 'Skip', 'Next', and "Let's Get Started" are user-facing and currently hard-coded. When convenient, consider wrapping them with t() keys (e.g., t('onboarding.skip')) to align with your react-i18next guideline and make localization straightforward.

None of these are blockers, but together they tighten the onboarding implementation and keep it aligned with your project conventions.

Also applies to: 223-287

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7962403 and cafc7a9.

📒 Files selected for processing (4)
  • .github/workflows/react-native-cicd.yml (4 hunks)
  • docs/accessibility-text-scaling-validation.md (1 hunks)
  • src/__tests__/accessibility-text-scaling.test.tsx (1 hunks)
  • src/app/onboarding.tsx (5 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx}: Write concise, type-safe TypeScript code
Use camelCase for variable and function names
Use TypeScript for all components and favor interfaces for props and state
Avoid using any; use precise types
Use React Navigation for navigation and deep linking following best practices
Handle errors gracefully and provide user feedback
Implement proper offline support (caching, queueing, retries)
Use Expo SecureStore for sensitive data storage
Use zustand for state management
Use react-hook-form for form handling
Use react-query for data fetching and caching
Use react-native-mmkv for local storage
Use axios for API requests

**/*.{ts,tsx}: Write concise, type-safe TypeScript code
Use camelCase for variable and function names
Use TypeScript for all components, favoring interfaces for props and state
Avoid using any; strive for precise types
Ensure support for dark mode and light mode
Handle errors gracefully and provide user feedback
Use react-query for data fetching
Use react-i18next for internationalization
Use react-native-mmkv for local storage
Use axios for API requests

Files:

  • src/__tests__/accessibility-text-scaling.test.tsx
  • src/app/onboarding.tsx
**/*.tsx

📄 CodeRabbit inference engine (.cursorrules)

**/*.tsx: Use functional components and React hooks instead of class components
Use PascalCase for React component names
Use React.FC for defining functional components with props
Minimize useEffect/useState usage and avoid heavy computations during render
Use React.memo for components with static props to prevent unnecessary re-renders
Optimize FlatList with removeClippedSubviews, maxToRenderPerBatch, and windowSize
Provide getItemLayout to FlatList when items have consistent size
Avoid anonymous functions in renderItem or event handlers; define callbacks with useCallback or outside render
Use gluestack-ui for styling where available from components/ui; otherwise, style via StyleSheet.create or styled-components
Ensure responsive design across screen sizes and orientations
Use react-native-fast-image for image handling instead of the default Image where appropriate
Wrap all user-facing text in t() from react-i18next for translations
Support dark mode and light mode in UI components
Use @rnmapbox/maps for maps or navigation features
Use lucide-react-native for icons directly; do not use the gluestack-ui icon component
Use conditional rendering with the ternary operator (?:) instead of &&

**/*.tsx: Use functional components and hooks over class components
Ensure components are modular, reusable, and maintainable
Ensure all components are mobile-friendly, responsive, and support both iOS and Android
Use PascalCase for component names
Utilize React.FC for defining functional components with props
Minimize useEffect, useState, and heavy computations inside render
Use React.memo for components with static props to prevent unnecessary re-renders
Optimize FlatList with removeClippedSubviews, maxToRenderPerBatch, and windowSize
Use getItemLayout for FlatList when items have consistent size
Avoid anonymous functions in renderItem or event handlers to prevent re-renders
Ensure responsive design for different screen sizes and orientations
Optimize image handling using rea...

Files:

  • src/__tests__/accessibility-text-scaling.test.tsx
  • src/app/onboarding.tsx
src/**

📄 CodeRabbit inference engine (.cursorrules)

src/**: Organize files by feature, grouping related components, hooks, and styles
Directory and file names should be lowercase and hyphenated (e.g., user-profile)

Files:

  • src/__tests__/accessibility-text-scaling.test.tsx
  • src/app/onboarding.tsx
**/*.{test,spec}.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{test,spec}.{ts,tsx}: Create Jest tests for all generated components, services, and logic
Ensure tests run without errors and fix failing tests

Files:

  • src/__tests__/accessibility-text-scaling.test.tsx
src/**/*.test.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

src/**/*.test.{ts,tsx}: Create and use Jest tests to validate all generated components
Generate tests for all components, services, and logic; ensure tests run without errors

Files:

  • src/__tests__/accessibility-text-scaling.test.tsx
🧠 Learnings (22)
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure the app is accessible following WCAG guidelines for mobile

Applied to files:

  • docs/accessibility-text-scaling-validation.md
  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Ensure app accessibility following WCAG for mobile (labels, roles, focus, contrast)

Applied to files:

  • docs/accessibility-text-scaling-validation.md
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure UI is intuitive, user-friendly, and works across different devices and screen sizes

Applied to files:

  • docs/accessibility-text-scaling-validation.md
  • src/__tests__/accessibility-text-scaling.test.tsx
  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure all components are mobile-friendly, responsive, and support both iOS and Android

Applied to files:

  • docs/accessibility-text-scaling-validation.md
  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Ensure responsive design across screen sizes and orientations

Applied to files:

  • docs/accessibility-text-scaling-validation.md
  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Ensure mobile-friendly, responsive components optimized for both iOS and Android

Applied to files:

  • docs/accessibility-text-scaling-validation.md
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure responsive design for different screen sizes and orientations

Applied to files:

  • docs/accessibility-text-scaling-validation.md
  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to src/**/*.test.{ts,tsx} : Create and use Jest tests to validate all generated components

Applied to files:

  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.{test,spec}.{ts,tsx} : Create Jest tests for all generated components, services, and logic

Applied to files:

  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to src/**/*.test.{ts,tsx} : Generate tests for all components, services, and logic; ensure tests run without errors

Applied to files:

  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.{test,spec}.{ts,tsx} : Ensure tests run without errors and fix failing tests

Applied to files:

  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Wrap all user-facing text in t() from react-i18next for translations

Applied to files:

  • src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.{ts,tsx} : Use React Navigation for navigation and deep linking following best practices

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use lucide-react-native for icons directly; do not use the gluestack-ui icon component

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Use lucide-react-native for icons directly in markup; do not use gluestack-ui icon component

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to src/components/ui/**/*.tsx : Use gluestack-ui components from components/ui; if unavailable, style via StyleSheet.create or styled-components

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Use rnmapbox/maps for maps, mapping, or vehicle navigation

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use rnmapbox/maps for maps or navigation features

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use gluestack-ui for styling where available from components/ui; otherwise, style via StyleSheet.create or styled-components

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Optimize image handling using react-native-fast-image

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Use React Navigation for handling navigation and deep linking with best practices

Applied to files:

  • src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use react-native-fast-image for image handling instead of the default Image where appropriate

Applied to files:

  • src/app/onboarding.tsx
🧬 Code graph analysis (2)
src/__tests__/accessibility-text-scaling.test.tsx (2)
__mocks__/react-native.ts (1)
  • useWindowDimensions (39-42)
__mocks__/@/components/ui/button.tsx (2)
  • Button (4-6)
  • ButtonText (8-10)
src/app/onboarding.tsx (5)
src/services/analytics.service.ts (1)
  • trackEvent (97-134)
src/components/ui/index.tsx (3)
  • SafeAreaView (20-20)
  • ScrollView (19-19)
  • View (19-19)
src/components/ui/focus-aware-status-bar.tsx (1)
  • FocusAwareStatusBar (9-63)
src/components/ui/image.tsx (1)
  • Image (12-14)
src/components/ui/flat-list/index.tsx (1)
  • FlashList (2-2)
🪛 LanguageTool
docs/accessibility-text-scaling-validation.md

[style] ~3-~3: Some style guides suggest that commas should set off the year in a month-day-year date.
Context: ...lidation Report Date: November 13, 2025 Component: Resgrid Responder Mobi...

(MISSING_COMMA_AFTER_YEAR)

🪛 markdownlint-cli2 (0.18.1)
docs/accessibility-text-scaling-validation.md

284-284: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

⏰ 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: test
🔇 Additional comments (1)
.github/workflows/react-native-cicd.yml (1)

75-76: CHANGERAWR secrets wiring looks correct

The new CHANGERAWR_API_KEY and CHANGERAWR_API_URL env entries are correctly sourced from GitHub Secrets and made available to downstream steps. No issues from a CI/CD perspective; just ensure the secrets are actually configured in the repo/environment before merging.

@ucswift
Copy link
Member Author

ucswift commented Nov 14, 2025

Approve

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

This PR is approved.

@ucswift ucswift merged commit de5be5e into master Nov 14, 2025
11 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants