ワンクリックで
fix-github-issue
// Full workflow for fixing a GitHub issue - understand the problem, reproduce, diagnose root cause, fix, test on iOS/Android simulators, review, and raise a PR
// Full workflow for fixing a GitHub issue - understand the problem, reproduce, diagnose root cause, fix, test on iOS/Android simulators, review, and raise a PR
| name | fix-github-issue |
| description | Full workflow for fixing a GitHub issue - understand the problem, reproduce, diagnose root cause, fix, test on iOS/Android simulators, review, and raise a PR |
Load agent-device skill. DO NOT SKIP
These are hard rules. Violating any of them is a failure.
mcp__mobile-mcp__* tool. No exceptions.agent-device only — All simulator/emulator interaction (screenshots, taps, typing, scrolling, app launch/kill) MUST go through agent-device CLI commands. Read the agent-device skill for allowed commands. Exception: adb is allowed for Android emulator setup (devices, install, reverse, shell getprop, screenrecord).agent-device skillStart from fixture/react-native/:
cd fixture/react-native && yarn start
Verify: curl -s http://localhost:8081/status
Only build the native app if it's not already installed. Check first:
xcrun simctl get_app_container booted org.reactjs.native.example.FlatListPro 2>/dev/null
yarn build (TS) and relaunch.cd fixture/react-native && yarn react-native run-ios
Run E2E tests before raising a PR if any of these changed:
*.e2e.*)fixture/react-native/src/yarn e2e:ios
This runs detox build -c ios.sim.release followed by detox test -c ios.sim.release. E2E test files live in fixture/react-native/e2e/tests/.
Warning: E2E builds a release app that replaces the debug app on the simulator. After running E2E, rebuild debug to continue interactive testing:
cd fixture/react-native && yarn react-native run-ios
Before raising a PR or finishing, kill all background processes you started. On CI, leftover processes (especially Metro) prevent the GitHub Actions job from exiting, causing it to run until the timeout.
# Kill Metro bundler
lsof -ti:8081 | xargs kill -9 2>/dev/null || true
# Kill any other background processes you started
kill %1 2>/dev/null || true
Always do this before the raise-pr step.
estimatedItemSize does not exist in this FlashList — it is not a prop. Do not add it to repro screens.
Repro only triggers after scroll — add onEndReached or prepend items to force the scroll path
Android and iOS behave differently — always test both; Android uses a native RecyclerView bridge
Stale layout cache — if sizes look wrong after a fix, call ref.current?.clearLayoutCacheOnUpdate()
Prop not forwarded — check FlashListProps.ts and RecyclerView.tsx to confirm the prop reaches the layout manager
Grid row detection with spans — never use Math.floor(index / numColumns) to determine which row an item is in when overrideItemLayout spans are possible. Instead, compare layout.y values from the layout manager — items in the same row always share the same y.
Metro port conflict — kill anything on port 8081, then restart Metro from fixture/react-native/. See the Metro section above.
App can't connect to Metro — if the app shows a red/yellow error about connecting to the bundler, configure the port: iOS simulator Cmd+D → "Configure Bundler" → set host localhost and port 8081. Then reload.
React Native version mismatch — the native build (0.84.x) must connect to the fixture's own Metro, not another project's bundler running a different RN version.
dist/ is NOT rebuilt on branch switch — you MUST yarn build after every git checkout. Verify with grep in dist/ that the expected code change is present. Without this, you test stale code and get false results.
Always reproduce the bug on main BEFORE testing the fix — without confirming the bug exists on the base branch, you can't prove the fix works. See review-and-test skill → "Review Methodology".
Code-only diagnosis is acceptable on CI — layout/scroll bugs, Android-only issues (no emulator on macOS CI), and web/SSR issues (no browser on CI) can be diagnosed from code analysis + unit tests when simulator reproduction isn't feasible.
For more testing/debugging pitfalls (console.log, RTL setup, agent-device swipe, observable callbacks), see the review-and-test skill.
When running interactively (not on CI), update this file AND the review-and-test skill after each fix session:
review-and-test edge case checklistsOn CI, only update skill files if the learning is critical (e.g., a new pitfall that would cause repeated failures). Minor improvements should wait for interactive sessions.
Review a FlashList PR or branch, run unit tests, test on iOS simulator, and verify RTL/LTR behavior. Shared context with fix-github-issue skill.
Interact with iOS simulator or Android emulator/device using snapshot-based coordinates. Uses accessibility tree snapshots for precise element targeting, with screenshot verification as fallback. Use when navigating the app on a simulator/emulator.
Analyze agent feedback artifacts from GitHub Actions workflow runs, extract actionable learnings, and incorporate them into skill files and CLAUDE.md. Tracks scan progress to avoid re-processing.
Create a GitHub PR for FlashList. Ensures no AI/Claude attribution in commits or PR body, follows repo conventions for title, description, and test plan.
Triage a GitHub issue — classify priority (P0/P1/P2), search for duplicates, and apply labels.
Upgrade the React Native fixture app to a new version. Covers JS deps, Android (Gradle, Kotlin, SDK), iOS (Podfile, pbxproj), Metro config, and third-party libraries.