Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Update flutter_rust_bridge CHANGELOG.md for a new release by collecting merged PRs since the previous version tag, mapping them to the target release section, and formatting entries to match the existing changelog style. Use when writing or refreshing a release section in CHANGELOG.md.
.claude/skills/fzyzcjy-frb-write-changelog/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -11% | 0% |
CHANGELOG.mdRead the top of CHANGELOG.md.
git diff -- CHANGELOG.md before editing.* TODO.Find the latest release tag before the target version.
bashgit tag --sort=-creatordate | head -n 20
Use that tag as the lower bound for the new changelog entry.
Use GitHub CLI to collect merged PRs after the previous version.
bashgh pr list --state merged --limit 200 --json number,title,author,mergedAt,baseRefName,url gh pr view <number> --json number,title,author,url
Use the previous version as the lower bound when deciding which merged PRs belong to the target release.
Keep all PRs in merged status that belong to the release range.
docs: add <name> as a contributor for code/doc; do not exclude ordinary documentation PRs whose titles start with docs: add.Normalize titles before writing.
CI, GitHub, Flutter, Rust, DCO, and V1.Match the existing changelog style.
* Summary #1234.(thanks @username) for every third-party human-authored PR in the release range, including docs, CI, chore, tooling, and feature PRs.(thanks @username) before entries without thanks. Within each group, keep merge order from newest to oldest unless the surrounding section clearly uses another order.For a stable release that follows betas of the same version series, use a grouped stable section:
* 2.13.0-beta.6, ordered from the latest beta to the earliest beta.For newly written entries, keep every user-visible feature, fix, behavior change, published-package change, and user-facing documentation PR as its own entry. Do not join such changes with and or fold multiple PRs into a shared summary. Combining multiple PRs is allowed only for user-invisible internal work such as CI, tests, agent or release tooling, and code outside published packages. Order the user-visible entries first, then put all user-invisible internal entries at the end of the post-latest-beta group immediately before the first beta parent entry. Copied beta entries remain exact copies even if they predate this rule.
Edit only CHANGELOG.md. Do not manually edit generated files for this task.
Review the final diff.
Run the changelog verifier after finishing the draft.
bashgh pr list --state merged --limit 200 --json number,title,author,mergedAt,baseRefName,url > /tmp/frb-merged-prs.json uv run --script .claude/skills/frb-write-changelog/verify_changelog.py \ --version <VERSION> \ --previous-release-time <PREVIOUS_RELEASE_TIMESTAMP> \ --release-time <TARGET_RELEASE_TIMESTAMP> \ --merged-prs-json /tmp/frb-merged-prs.json
The verifier checks that:
docs: add <name> as a contributor ... all-contributors PRs are ignored.Use --ignore-pr <NUMBER> only for a documented intentional exclusion. Use --extra-local-pr <NUMBER> for a stacked local maintainer PR that belongs in the changelog but is not present in the merged PR JSON yet. Use --extra-thanks-author <LOGIN> only for a verified co-author or contributor credited by a release-range PR even though their source PR falls outside the release range; record the source PR and reason in the release journal.
Apply any confirmed fixes, then re-run the verifier.
Tell the user the changelog draft is complete and ask for a manual review.
Run the mechanical verifier again after the user finishes manual edits.
If the user explicitly wants an independent review, ask a separate reviewer or subagent to compare the final CHANGELOG.md against the same merged PR list.
Regenerate the published-package changelog copies from the final root CHANGELOG.md:
bash./frb_internal generate-internal-readme
frb_dart/CHANGELOG.md and frb_hooks/CHANGELOG.md match the root CHANGELOG.md../frb_internal generate-internal-readme --set-exit-if-changed as the final drift gate. Do not run this flag while the changelog draft is still dirty because it checks the entire worktree.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 18,327 | 35,648 | +95% | 1 | 1 | 0% | 1,206 | 1,999 | +66% | 0 | 0 | — |
case-02 | fail→fail | 34,893 | 4,268 | -88% | 1 | 1 | 0% | 171 | 1,956 | +1044% | 0 | 0 | — |
case-03 | fail→fail | 34,961 | 34,689 | -1% | 1 | 1 | 0% | 247 | 2,101 | +751% | 0 | 0 | — |
case-04 | pass→pass | 8,467 | 2,799 | -67% | 1 | 1 | 0% | 1,096 | 2,223 | +103% | 0 | 0 | — |
case-05 | pass→pass | 5,512 | 3,067 | -44% | 1 | 1 | 0% | 1,016 | 2,220 | +119% | 0 | 0 | — |
case-06 | pass→pass | 10,881 | 3,823 | -65% | 1 | 1 | 0% | 1,470 | 2,323 | +58% | 0 | 0 | — |
case-07 | fail→pass | 11,311 | 4,160 | -63% | 1 | 1 | 0% | 1,933 | 2,486 | +29% | 0 | 0 | — |
case-08 | fail→pass | 10,644 | 2,952 | -72% | 1 | 1 | 0% | 1,580 | 2,256 | +43% | 0 | 0 | — |
case-09 | pass→pass | 6,154 | 4,495 | -27% | 1 | 1 | 0% | 1,056 | 2,459 | +133% | 0 | 0 | — |
case-10 | fail→pass | 12,357 | 5,785 | -53% | 1 | 1 | 0% | 2,116 | 2,870 | +36% | 0 | 0 | — |
case-11 | pass→pass | 11,647 | 2,462 | -79% | 1 | 1 | 0% | 1,536 | 2,256 | +47% | 0 | 0 | — |
case-17 | pass→pass | 13,632 | 2,363 | -83% | 1 | 1 | 0% | 1,766 | 2,206 | +25% | 0 | 0 | — |
case-12 | fail→pass | 9,646 | 3,031 | -69% | 1 | 1 | 0% | 1,296 | 2,325 | +79% | 0 | 0 | — |
case-13 | fail→pass | 18,595 | 3,323 | -82% | 1 | 1 | 0% | 2,697 | 2,401 | -11% | 0 | 0 | — |
case-14 | fail→pass | 13,630 | 2,777 | -80% | 1 | 1 | 0% | 2,063 | 2,293 | +11% | 0 | 0 | — |
case-15 | fail→pass | 12,974 | 1,759 | -86% | 1 | 1 | 0% | 2,023 | 2,056 | +2% | 0 | 0 | — |
case-16 | fail→pass | 11,400 | 4,031 | -65% | 1 | 1 | 0% | 1,896 | 2,507 | +32% | 0 | 0 | — |
case-18 | pass→pass | 7,422 | 3,358 | -55% | 1 | 1 | 0% | 1,220 | 2,345 | +92% | 0 | 0 | — |
case-19 | fail→pass | 12,916 | 1,935 | -85% | 1 | 1 | 0% | 1,808 | 2,076 | +15% | 0 | 0 | — |
case-20 | pass→pass | 16,422 | 4,990 | -70% | 1 | 1 | 0% | 2,235 | 2,200 | -2% | 0 | 0 | — |
case-21 | fail→pass | 10,773 | 2,621 | -76% | 1 | 1 | 0% | 1,672 | 2,243 | +34% | 0 | 0 | — |
case-22 | fail→pass | 13,831 | 2,148 | -84% | 1 | 1 | 0% | 2,208 | 2,078 | -6% | 0 | 0 | — |
case-23 | fail→pass | 9,202 | 4,200 | -54% | 1 | 1 | 0% | 1,357 | 2,624 | +93% | 0 | 0 | — |
case-24 | fail→pass | 6,978 | 1,960 | -72% | 1 | 1 | 0% | 1,103 | 1,957 | +77% | 0 | 0 | — |
case-25 | fail→pass | 8,169 | 3,757 | -54% | 1 | 1 | 0% | 1,015 | 2,263 | +123% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 22 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +56 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/17/2026 | +38% |
| gemini-3.6-flash | verified | 8/9/2026 | +27% |
Other measured skills in the registry, with their headline benchmark lift.