# Raise Pr

> 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.

- Skill: `diegosouzapw/raise-pr` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add diegosouzapw/raise-pr`
- Raw SKILL.md: https://api.skillmd.com/api/skills/diegosouzapw/raise-pr/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: diegosouzapw (https://skillmd.com/u/diegosouzapw)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/diegosouzapw/raise-pr

---


# Raise a FlashList PR

## Rules

1. **NEVER push directly to `main`** — always create a branch and open a PR.
2. **NEVER mention Claude, AI, or any AI tool** in commit messages, PR title, PR body, or comments. No `Co-Authored-By` AI lines. The PR must read as if written entirely by a human.
3. **Only raise a PR when explicitly asked** by the user.
4. **All checks must pass first**: `yarn test`, `yarn type-check`, `yarn lint`.

---

## Step 1 — Verify Checks Pass

```bash
yarn test && yarn type-check && yarn lint
```

If any fail, fix them before proceeding.

---

## Step 2 — Create Branch and Commit

### Branch naming

```
fix/issue-<number>-<short-slug>
feat/<short-slug>
refactor/<short-slug>
```

### Commit message format

```
fix(<scope>): <concise description>

Fixes #<number>
```

Scope examples: `layout`, `hooks`, `scroll`, `sticky-headers`, `recycling`, `viewability`.

**Do NOT include**:
- `Co-Authored-By` lines
- Any mention of Claude, AI, Anthropic, or automated tools
- `Generated by` or `Assisted by` attributions

### Commands

```bash
git checkout -b fix/issue-<number>-<short-slug>
git add <specific files>
git commit -m "$(cat <<'EOF'
fix(<scope>): <description>

Fixes #<number>
EOF
)"
git push -u origin fix/issue-<number>-<short-slug>
```

---

## Step 2b — Self-Review Before Creating PR

**Always review your own diff before creating the PR.** Run `git diff HEAD~1` (or `git diff main...HEAD`) and check for:

- **Orphaned or misplaced JSDoc comments** — moving code can separate a JSDoc from its function
- **Unnecessary `as any` casts** — use specific types wherever possible (e.g., `as React.ComponentType<any>` instead of `as any`)
- **Leftover debug code** — `console.log`, `fetch("http://localhost:...")`, temporary comments
- **Unrelated changes** — files or hunks that aren't part of the fix
- **Formatting issues** — the diff should be clean and minimal

Fix any issues found, then amend the commit before proceeding to Step 3.

---

## Step 3 — Create the PR

### PR title

- Under 70 characters
- Same format as commit: `fix(<scope>): <description>`

### PR body template

```bash
gh pr create \
  --repo Shopify/flash-list \
  --title "fix(<scope>): <description>" \
  --body "$(cat <<'EOF'
## Description

<1-3 sentences: what the bug was and how the fix works>

Fixes #<number>

## Reviewers' hat-rack :tophat:

<What reviewers should focus on — layout logic, hook behavior, edge cases, etc.>

## Screenshots or videos

<Before/after screenshots if applicable>

## Test plan
- [ ] Unit tests pass (`yarn test`)
- [ ] Type check passes (`yarn type-check`)
- [ ] Lint passes (`yarn lint`)
- [ ] Verified on iOS simulator
- [ ] No regressions on related screens
EOF
)"
```

### Review the PR body before submitting

Before running `gh pr create`, double-check:
- [ ] No mention of Claude, AI, Anthropic, or any AI tool anywhere
- [ ] No `Co-Authored-By` lines in any commit (`git log --format=full` to check)
- [ ] Description explains the "what" and "why" clearly
- [ ] Test plan is specific to the change

---

## Step 4 — Post-Creation

Return the PR URL to the user.

If the user asks to update the PR:
```bash
# Amend and force-push (only if user explicitly asks)
git add <files>
git commit --amend --no-edit
git push --force-with-lease
```

---

## Common Mistakes

- **Leftover `Co-Authored-By` from default git hooks** — check with `git log -1 --format=full` before pushing
- **Debug `console.log` or `fetch("http://localhost:9876")` left in source** — search before committing:
  ```bash
  grep -r "console\.\(log\|warn\)\|localhost:9876" src/ --include="*.ts" --include="*.tsx"
  ```
- **Including unrelated files** — use `git add <specific files>`, never `git add .` or `git add -A`
- **Fixture `index.js` left with `forceRTL(true)`** — always check and revert before committing

