| name | rfw-contribute |
| description | Collect RFW upstream limitations, file issues to flutter/flutter, and submit PRs to flutter/packages. Use /rfw-contribute collect to record a limitation, /rfw-contribute issue to file an issue, /rfw-contribute pr for PR guidance. Triggers when user mentions RFW upstream issues, wants to contribute to flutter/packages, or discovers RFW package limitations during dogfooding. |
| user_invocable | true |
RFW Contribute Skill
Collect, analyze, and contribute fixes for RFW package limitations upstream.
Argument Parsing
Parse user arguments to determine mode:
/rfw-contribute collect โ Record a new RFW limitation (Section: Collect Mode)
/rfw-contribute issue โ File an issue to flutter/flutter (Section: Issue Mode)
/rfw-contribute pr โ PR guidance for flutter/packages (Section: PR Mode)
/rfw-contribute (no args) โ Show status summary from docs/upstream/README.md
Prerequisites
Before any operation, verify:
- gh auth: Run
gh auth status. If not authenticated, tell user to run ! gh auth login and stop.
- flutter/packages fork:
/Users/byeonghopark-jobis/dev/packages (origin=BottlePumpkin/packages, upstream=flutter/packages). RFW ์์ค ๋ถ์๊ณผ PR ์์
๋ชจ๋ ์ด ๊ฒฝ๋ก์์ ์ํ.
- docs/upstream/: Check directory exists. If not, create it with README.md:
mkdir -p docs/upstream
Then create docs/upstream/README.md with the tracking template.
Collect Mode
Record a new RFW upstream limitation.
Step 1: Gather information from user
Ask the user to describe the limitation:
- What were you trying to do?
- What happened instead?
- Do you have reproduction code?
Step 2: Analyze RFW source
If upstream/rfw/ exists locally, search for the relevant source code to identify the root cause:
grep -r "keyword" upstream/rfw/lib/src/
If upstream/rfw/ does not exist, note in the document that source analysis is pending and suggest:
upstream/rfw/ ๊ฐ ์์ต๋๋ค. RFW ์์ค๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด:
git clone https://github.com/flutter/packages.git /tmp/flutter-packages
mkdir -p upstream
cp -r /tmp/flutter-packages/packages/rfw upstream/rfw
rm -rf /tmp/flutter-packages
Step 3: Create issue document
Generate a kebab-case filename from the issue title and create docs/upstream/{issue-name}.md:
# {์ด์ ์ ๋ชฉ}
## ์ํ
์์ง๋จ
## ์ฆ์
{๋ญ๊ฐ ์ ๋๋์ง, ์ฌ์ฉ์ ๊ด์ }
## ์ฌํ ์ฝ๋
### Flutter ์ฝ๋ (์
๋ ฅ)
\```dart
{RFW๋ก ๋ณํํ๋ ค๋ Flutter ์ฝ๋}
\```
### ๊ธฐ๋ํ๋ rfwtxt ์ถ๋ ฅ
\```rfwtxt
{๋์ด์ผ ํ๋ ๊ฒฐ๊ณผ}
\```
### ์ค์ ๋์
{์๋ฌ ๋ฉ์์ง ๋๋ ์๋ชป๋ ์ถ๋ ฅ}
## RFW ์์ค ์์ธ ๋ถ์
- **ํ์ผ**: `packages/rfw/lib/src/...`
- **์์ธ**: {์ฝ๋ ๋ ๋ฒจ์์ ์ ์ ๋๋์ง}
## ์ ์ ํด๊ฒฐ์ฑ
{์์ผ๋ฉด โ ์์ผ๋ฉด "๋ถ์ ํ์"}
## ๊ด๋ จ ๋งํฌ
- ๋ฐ๊ฒฌ ๊ฒฝ๋ก: {dogfood ์ฌ์ดํด #{N} / 3o3 ํผ๋๋ฐฑ / ์ง์ ๋ฐ๊ฒฌ}
Step 4: Update README.md
Add the new issue under the "์์ง๋จ" section in docs/upstream/README.md:
- [{์ด์ ์ ๋ชฉ}]({issue-name}.md) โ {ํ์ค ์์ฝ}
Step 5: Commit
git add docs/upstream/
git commit -m "docs(upstream): collect {issue-name}"
Step 6: Output summary
โ
Upstream ์ด์ ์์ง ์๋ฃ
๐ docs/upstream/{issue-name}.md
๐ ์์ธ ๋ถ์: {๋ถ์ ์ฌ๋ถ}
๐ ํ์ฌ ์์ง๋จ: {N}๊ฑด | issue ์ ์ถ: {N}๊ฑด | PR ์ ์ถ: {N}๊ฑด
Issue Mode
File an issue to flutter/flutter based on a collected document.
Step 1: List collected issues
Read docs/upstream/README.md and show issues with "์์ง๋จ" status:
์์ง๋จ ์ํ ์ด์:
1. {title} โ docs/upstream/{name}.md
2. {title} โ docs/upstream/{name}.md
If none, tell the user: "์์ง๋ ์ด์๊ฐ ์์ต๋๋ค. /rfw-contribute collect๋ก ๋จผ์ ์์งํ์ธ์."
Step 2: User selects an issue
Let the user pick one, or recommend the most impactful one.
Step 3: Read the issue document
Read the selected docs/upstream/{name}.md to get all details.
Step 4: Draft flutter/flutter issue
Transform into flutter/flutter issue format. Show the draft to the user for review:
**Title:** [rfw] {์ค๋ช
}
**Body:**
## Use case
{์ ์ด ๊ธฐ๋ฅ์ด ํ์ํ์ง โ rfw_gen ํ๋ก์ ํธ์์ RFW ์์ ฏ์ ์ฝ๋ ์์ฑํ ๋ ์ด ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ ์ค์ ๋งฅ๋ฝ}
## Proposal
{์ ์ํ๋ ํด๊ฒฐ ๋ฐฉํฅ}
## Current behavior
{ํ์ฌ ๋์ + ์ฌํ ์ฝ๋}
## Expected behavior
{๊ธฐ๋ํ๋ ๋์}
## Additional context
- RFW version: {ํ์ฌ ์ฌ์ฉ ์ค์ธ rfw ๋ฒ์ โ pubspec.yaml์์ ํ์ธ}
- Source analysis: {์์ค ์ฝ๋ ๋ ๋ฒจ ์์ธ ๋ถ์ ์์ฝ}
Step 5: User confirms, then file
After user approval:
gh issue create --repo flutter/flutter \
--title "[rfw] {title}" \
--body "$(cat <<'EOF'
{formatted body}
EOF
)"
If the command fails, output the formatted issue content and tell the user to create it manually at https://github.com/flutter/flutter/issues/new.
Step 6: Update document status
In docs/upstream/{name}.md, change:
## ์ํ โ issue ์ ์ถ
- Add under
## ๊ด๋ จ ๋งํฌ: - flutter/flutter issue: flutter/flutter#{number}
In docs/upstream/README.md, move the entry from "์์ง๋จ" to "Issue ์ ์ถ" section.
Step 7: Commit
git add docs/upstream/
git commit -m "docs(upstream): file issue for {issue-name} (ref flutter-flutter-{number})"
โ ๏ธ ์ฃผ์: ์ปค๋ฐ ๋ฉ์์ง์ flutter/flutter#N ํ์์ ์ฐ์ง ๋ง ๊ฒ! rfw_gen ๋ ํฌ์์ ๋จธ์ง๋๋ฉด GitHub๊ฐ ํด๋น flutter/flutter issue๋ฅผ ์๋์ผ๋ก closeํฉ๋๋ค. ref flutter-flutter-N ํ์์ ์ฌ์ฉํ์ธ์.
PR Mode
Guide the user through submitting a PR to flutter/packages.
Step 1: List issues ready for PR
Read docs/upstream/README.md and show issues with "issue ์ ์ถ" status.
Step 2: User selects an issue
Let the user pick one.
Step 3: Check prerequisites
Verify the user has:
- CLA signed: "flutter/packages PR์ ์ฌ๋ฆฌ๋ ค๋ฉด Google CLA ์๋ช
์ด ํ์ํฉ๋๋ค. ์๋ช
ํ์
จ๋์? https://cla.developers.google.com/"
- Fork exists:
gh repo view BottlePumpkin/packages --json url 2>/dev/null โ if not, guide to fork.
- Local clone: flutter/packages fork๋
/Users/byeonghopark-jobis/dev/packages์ clone๋์ด ์์.
- RFW ์์ค:
/Users/byeonghopark-jobis/dev/packages/packages/rfw/
- Remote: origin=BottlePumpkin/packages, upstream=flutter/packages
- ์์
์ ๋ฐ๋์:
cd /Users/byeonghopark-jobis/dev/packages && git fetch upstream && git checkout main && git pull upstream main
Step 4: Show contribution checklist
Display the flutter/packages contribution checklist based on PR #9750 experience:
## flutter/packages PR ์ฒดํฌ๋ฆฌ์คํธ
์์
์ :
- [ ] CLA ์๋ช
์๋ฃ
- [ ] ์ต์ upstream/main์ผ๋ก rebase
- [ ] flutter/flutter์ ์ฐ๊ฒฐ๋ issue ์กด์ฌ
์ฝ๋ ๋ณ๊ฒฝ:
- [ ] packages/rfw/lib/src/ ์์ ํด๋น ์ฝ๋ ์์
- [ ] packages/rfw/test/ ์ ํ
์คํธ ์ถ๊ฐ
- [ ] CHANGELOG.md ์ํธ๋ฆฌ ์ถ๊ฐ (๋ค์ ๋ฏธ๋ฐํ ๋ฒ์ ์น์
)
- [ ] pubspec.yaml ๋ฒ์ ๋ฒํ
์ ์ถ ์ :
- [ ] dart fix --apply ์คํ (์์ ์ปค๋ฐ์ ํฌํจ, ๋ณ๋ ์ปค๋ฐ X)
- [ ] dart format์ ๊ฐ์ ์ ์ฉํ์ง ๋ง ๊ฒ (rfw๋ autoformat ์ ์ธ)
- [ ] dart test ํต๊ณผ ํ์ธ
โ ๏ธ ์ฃผ์์ฌํญ (PR #9750์์ ๋ฐฐ์ด ๊ฒ):
- rfw ํจํค์ง๋ autoformat enforcement์์ ์ ์ธ๋จ
- CHANGELOG ์ํธ๋ฆฌ๋ ๋ค์ ๋ฏธ๋ฐํ ๋ฒ์ ์น์
์ ์ถ๊ฐ
- ๋ฆฌ๋ทฐ์ด ๋ฐฐ์ ์ด ๋๋ฆด ์ ์์ (RFW ์ ๋ด ๋ฆฌ๋ทฐ์ด ์ ํ์ )
Step 5: Guide PR creation
After the user completes the fix:
gh pr create --repo flutter/packages \
--title "[rfw] {description}" \
--body "$(cat <<'EOF'
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities.
- [x] I read and followed the [relevant style guides] and ran the auto-formatter.
- [x] I listed at least one issue that this PR fixes in the description above.
- [x] I updated `pubspec.yaml` with an appropriate new version according to the [pub versioning philosophy], or this PR is [exempt from version changes].
- [x] I updated `CHANGELOG.md` to add a description of the change, [or this PR is exempt from CHANGELOG changes].
- [x] I ran `dart fix --apply` to apply any applicable fixes.
## Description
Fixes flutter/flutter#{issue_number}
{๋ณ๊ฒฝ ์ค๋ช
}
## Tests
{์ถ๊ฐ๋ ํ
์คํธ ์ค๋ช
}
EOF
)"
Step 6: Update document status
In docs/upstream/{name}.md, change:
## ์ํ โ PR ์ ์ถ
- Add under
## ๊ด๋ จ ๋งํฌ: - flutter/packages PR: flutter/packages#{pr_number}
In docs/upstream/README.md, move the entry from "Issue ์ ์ถ" to "PR ์ ์ถ" section.
Step 7: Commit
git add docs/upstream/
git commit -m "docs(upstream): submit PR for {issue-name} (ref flutter-packages-{pr_number})"
โ ๏ธ ์ฃผ์: ์ปค๋ฐ ๋ฉ์์ง์ flutter/packages#N ํ์์ ์ฐ์ง ๋ง ๊ฒ! rfw_gen ๋ ํฌ์์ ๋จธ์ง๋๋ฉด GitHub๊ฐ ํด๋น issue/PR์ ์๋์ผ๋ก closeํฉ๋๋ค.