generating-changelog

Menghasilkan catatan rilis situs web yang rapi antara dua tag git untuk docs.streamlit.io. Gunakan saat mempersiapkan rilis Streamlit baru atau meninjau perubahan antaraโ€ฆ

npx skills add https://github.com/streamlit/streamlit --skill generating-changelog

Generating changelog

Generate publish-ready website changelog (docs.streamlit.io format) between two git tags. Uses PR labels (impact:users, impact:internal, change:*) for categorization and rewrites PR titles into user-friendly descriptions.

The GitHub release changelog is auto-generated from .github/release.yml โ€” this skill only produces the website format.

Usage: /generating-changelog <previous-tag> <new-tag> (e.g., /generating-changelog 1.44.1 1.45.0)

If only one tag is given, treat it as the new release tag and fetch the previous tag automatically.

Step 1: Validate input

  • Parse the two tags from user args. First = previous release, second = new release.
  • If only one tag is given, fetch the previous tag:
    gh api repos/streamlit/streamlit/releases/latest --jq '.tag_name'
    
  • Validate both tags exist using exact references (no pattern matching):
    git rev-parse -q --verify "refs/tags/<tag>" > /dev/null
    
    This command must succeed (exit code 0) for each tag.
  • Get the release date from the newer tag:
    git log -1 --format=%ai <new-tag>
    

Step 2: Fetch PR data

Run the fetch script to extract PR numbers from git log and batch-fetch metadata via GitHub GraphQL:

uv run python scripts/changelog_fetch_prs.py <prev-tag> <new-tag>

This produces work-tmp/pr-data.json โ€” a JSON array of {number, title, body, labels, author, related_issues, related_issues_truncated} objects sorted by PR number. The body field contains the first 2500 characters of the PR description.

related_issues is sourced from the same batched GraphQL query (no per-PR N+1 requests) and includes linked issue numbers plus ๐Ÿ‘ counts:

"related_issues": [{"number": 9836, "thumbs_up": 42}]

Step 3 & 4: Filter and categorize

Run the categorization script to exclude noise and categorize PRs by labels:

uv run python scripts/changelog_categorize_prs.py

This reads work-tmp/pr-data.json, applies the following rules, and writes work-tmp/pr-categorized.json:

Excluded: bot authors, release/version/docstring PRs, internal-only PRs (impact:internal without impact:users โ€” this includes internal features with change:* labels).

External contributors: Each non-excluded PR includes an is_external boolean field. Authors matching sfc-gh-* or a known internal set are marked is_external: false; all others are is_external: true. The summary output lists external contributors separately โ€” use this to attribute contributions without needing to look up GitHub profiles.

Script categories (by label priority: breaking > feature > bugfix > other):

LabelScript Category
change:breakingBreaking Changes
change:featureNew Features
change:bugfixBug Fixes
impact:users or unrecognized change:* labelsOther Changes

PRs with no impact:* or change:* labels are flagged as unlabeled for user review.

Note: change:* labels are typically required by release labeling conventions. The "Other Changes" fallback is a defensive catch-all for impact:users PRs and non-standard change:* values not covered by breaking/feature/bugfix.

Important: These script categories are intermediate groupings for triage. The website changelog does not have a "Breaking Changes" or "New Features" section. All entries are mapped into the three website tiers below. Breaking changes, deprecations, and removals fold into Notable Changes or Other Changes with appropriate emojis (see Step 6).

Map into three website tiers:

  • Highlights (optional โ€” omit entirely when no PRs qualify): Only 0โ€“4 items per release. Reserve for truly major user-facing additions: entirely new capabilities (e.g., a new widget-to-URL-params system, dynamic container control), significant new API parameters that unlock new workflows, or major breaking changes. Incremental improvements, new config options, and additional parameters on existing commands belong in Notable Changes, not Highlights. Some releases (e.g., patch releases) have no Highlights section at all.
  • Notable Changes: Remaining features, impactful improvements, new parameters, breaking changes not promoted to Highlights
  • Other Changes: Bug fixes, docs, chores, minor improvements

Step 5: Present classification for review

Before generating final output, present a summary to the user:

  1. Total PR count and count per category
  2. List of PRs proposed for "Highlights" tier โ€” allow user to promote/demote
  3. Any unlabeled PRs flagged in Step 3, with suggested classifications
  4. For borderline Highlights candidates, consider linked issue ๐Ÿ‘ counts from related_issues as one prioritization signal (not the only signal)
  5. External contributors identified by the script (from the is_external field) โ€” verify any edge cases but no need to look up GitHub profiles for sfc-gh-* or known internal authors
  6. Ask the user to confirm or adjust before proceeding

Note: Internal-only feature PRs (e.g., e2e infra, CI workflows, agent skills) are already excluded by the categorize script. You should not need to manually filter these.

Do NOT proceed to Step 6 until the user confirms.

Step 6: Read PR descriptions and generate output

For each user-facing PR in work-tmp/pr-categorized.json, read its body field before writing the changelog entry. Use the PR description as the primary source of truth for what actually changed โ€” the title alone can be imprecise. Focus on the opening summary paragraph(s) of the body; ignore checklists, reviewer notes, and screenshot sections.

Entry length: Keep every entry to one sentence, two at most. Capture the high-level idea only โ€” what changed and why it matters to the user. Do not enumerate sub-features, implementation details, parameter lists, or edge-case behaviors. Those details live in the API docs.

Generate the file in the work-tmp/ directory: work-tmp/changelog-website-<new-tag>.md

Entry writing style by category

  • Highlights: Announcing tone โ€” "Introducing...", "Announcing...". PR links may be included or omitted at your discretion.
  • Features / new parameters (Notable Changes): User-perspective voice โ€” "You can now...", "st.foo has a new bar parameter to...", "st.foo supports..."
  • Bug fixes: Always prefixed with "Bug fix:" โ€” "Bug fix: st.spinner avoids a race condition..."
  • Deprecations/removals: Plain description with specific emojis (see emoji list below).
  • Other non-bug entries: Plain present-tense descriptions, no prefix.

Formatting rules

  • Remove [fix]/[feat]/[chore]/[docs] prefixes from PR titles before rewriting
  • Emojis:
    • Bug fixes rotate through these insect/bug emojis: ๐Ÿ›, ๐Ÿฆ‹, ๐Ÿชฒ, ๐Ÿœ, ๐Ÿ, ๐Ÿž, ๐Ÿ•ท๏ธ, ๐Ÿชณ, ๐Ÿชฐ, ๐Ÿฆ , ๐ŸฆŸ, ๐Ÿฆ‚, ๐Ÿฆ—, ๐Ÿ•ธ๏ธ, ๐ŸŒ, ๐ŸฆŽ, ๐Ÿฆ€, ๐Ÿ‘ฝ, ๐Ÿ‘ป
    • Removals use ๐Ÿ‘ป, deprecations use โ˜ ๏ธ, under-consideration removals use ๐Ÿ’ฉ
    • Non-bug entries use emojis from this approved palette only (vary them, do not repeat consecutively).
      • UI/layout/design: ๐ŸŽจ, ๐Ÿ“, ๐Ÿ–ผ, ๐Ÿงฉ, ๐Ÿ“, ๐Ÿ’…, ๐Ÿ–Œ, ๐ŸŽ›, ๐ŸŽš, ๐Ÿ”ฒ, ๐ŸŒˆ, ๐Ÿช„
      • Data/charts/tables: ๐Ÿ“Š, ๐Ÿ“ˆ, ๐Ÿ“‹, ๐Ÿ”ข, ๐Ÿ”ฃ, ๐Ÿ“’, ๐Ÿ“ƒ, ๐Ÿ“„
      • Performance/speed: โšก, ๐Ÿš€, โฑ, โฉ, โณ, ๐ŸŽ
      • Security/auth: ๐Ÿ”’, ๐Ÿ”, ๐Ÿ”, ๐Ÿ›ก, ๐Ÿ”‘, ๐Ÿ‘ฎ, ๐Ÿฅท
      • Config/settings: โš™, ๐Ÿ”ง, ๐Ÿ› , โš’, ๐Ÿงฐ, โ›, ๐Ÿ”ฉ
      • Links/navigation: ๐Ÿ”—, ๐Ÿงญ, โžก, โฌ†, โฌ‡, ๐Ÿ”, ๐Ÿšช, ๐Ÿ›ฃ, โ†ฉ
      • Search/visibility: ๐Ÿ”, ๐Ÿ”Ž, ๐Ÿ‘€, ๐Ÿ•ต
      • Packages/dependencies: ๐Ÿ“ฆ, ๐Ÿ”ค, ๐Ÿ“ฅ, ๐Ÿ“ค, ๐Ÿ’ฟ, ๐Ÿ’พ, ๐Ÿ’ฝ
      • New features/highlights: โœจ, ๐ŸŽฏ, ๐Ÿ†•, ๐Ÿฟ, ๐ŸŽ, ๐ŸŽˆ, ๐ŸŽŠ, โญ, ๐ŸŒŸ, ๐Ÿ†™
      • Text/content/docs: โœ, ๐Ÿ“, ๐Ÿ“œ, ๐Ÿ“–, ๐Ÿ“˜, ๐Ÿ“š, โœ, โœ’, ๐Ÿ–Š, ๐Ÿ–‹
      • Notifications/messaging: ๐Ÿ””, ๐Ÿ“ฃ, ๐Ÿ’ฌ, ๐Ÿ“จ, ๐Ÿ“ฉ, ๐Ÿ“ฌ, ๐Ÿ›Ž
      • State/connection/sync: ๐Ÿ’“, ๐Ÿ”€, ๐Ÿ”„, ๐Ÿ”, ๐Ÿ“ถ, ๐Ÿ”Œ, โ›“
      • Media/display: ๐Ÿ“ท, ๐Ÿ“ธ, ๐Ÿ“น, ๐Ÿ“บ, ๐ŸŽฅ, ๐ŸŽค, ๐ŸŽต, ๐ŸŽถ, ๐ŸŽน, ๐Ÿ–ฅ
      • Files/storage: ๐Ÿ“, ๐Ÿ“‚, ๐Ÿ—‚, ๐Ÿ—ƒ, ๐Ÿ—‘, ๐Ÿ“Œ, ๐Ÿ“, ๐Ÿท, ๐Ÿ—œ
      • Users/identity: ๐Ÿ‘ค, ๐Ÿ‘ฅ, ๐Ÿง‘, ๐Ÿ‘‹, ๐Ÿค, ๐Ÿ‘‘
      • Errors/warnings: ๐Ÿšจ, ๐Ÿšฉ, โš , ๐Ÿ›‘, โŒ, โ“, ๐Ÿšง
      • Testing/science: ๐Ÿงช, โš—, ๐Ÿ”ญ, ๐Ÿง 
      • Misc objects: ๐Ÿ’ก, ๐Ÿ’Ž, ๐Ÿ’ช, ๐Ÿ’ฏ, ๐Ÿ’ฐ, ๐Ÿ’ป, ๐Ÿ’ผ, โŒจ, ๐Ÿ“ฑ, ๐Ÿ“ฒ, ๐Ÿ–จ, ๐Ÿ–ฑ, ๐Ÿ“ž, ๐Ÿ—, ๐Ÿ–‡, โœ‚, โž•, ๐Ÿชœ, ๐Ÿชง, ๐Ÿ—, ๐Ÿ , ๐Ÿข, ๐Ÿงฑ, ๐Ÿชต
      • Fun/creative: ๐Ÿ”, ๐Ÿž, ๐Ÿช, ๐Ÿฐ, ๐ŸŽฉ, ๐ŸŽซ, ๐Ÿ, ๐Ÿƒ, ๐Ÿ„, ๐Ÿ‹, ๐Ÿ“, ๐Ÿน, ๐Ÿ, ๐Ÿ™, ๐ŸฆŠ, ๐Ÿฆ, ๐Ÿค–, ๐Ÿคน, ๐Ÿฅธ, ๐Ÿงž, ๐Ÿ›ธ, ๐Ÿ›น, ๐Ÿช—, ๐Ÿช†, ๐Ÿš‡, ๐Ÿš’, ๐Ÿšฃ, ๐ŸŒฑ, ๐ŸŒ, ๐Ÿ—บ, ๐Ÿ—ป
    • When no palette emoji fits, default to โœจ
  • st.* command references: Use backtick formatting and link to the specific API doc subcategory path: st.image, st.dataframe. Only link the first/primary mention of a command. Links are more common in Notable Changes than Other Changes.
  • PR and issue links: Include both PR links and related issue links when applicable. Format: ([#14139](https://github.com/streamlit/streamlit/pull/14139), [#9836](https://github.com/streamlit/streamlit/issues/9836)). Use /pull/ for PRs and /issues/ for issues.
  • Punctuation: Every entry ends with a period after the closing parenthesis of PR/issue links.
  • Contributor attribution: Attribute external (non-Snowflake) contributors. Use [username] (no @ prefix) in link text, placed after the closing paren and period: ([#NNNNN](https://github.com/streamlit/streamlit/pull/NNNNN)). Thanks, [username](https://github.com/username)!
  • Multi-PR grouped entries: For complex multi-PR features, use a parent bullet with a colon, then indented sub-bullets:
    - ๐ŸŽจ Main feature description:
        - Sub-detail or sub-command ([#NNNNN](https://github.com/streamlit/streamlit/pull/NNNNN)).
        - Another sub-detail ([#MMMMM](https://github.com/streamlit/streamlit/pull/MMMMM)).
    

Output structure

## **Version <new-tag>**

_Release date: <Month Day, Year>_

**Highlights**

- ๐Ÿฟ Introducing [`st.new_thing`](/develop/api-reference/widgets/st.new_thing) โ€” a widget that lets you do something amazing ([#14200](https://github.com/streamlit/streamlit/pull/14200)).

**Notable Changes**

- ๐Ÿ“Š [`st.dataframe`](/develop/api-reference/data/st.dataframe) has a new `selection_mode` parameter that lets you configure row and column selection behavior ([#14139](https://github.com/streamlit/streamlit/pull/14139), [#9836](https://github.com/streamlit/streamlit/issues/9836)).
- โ˜ ๏ธ `st.legacy_thing` is deprecated and will be removed in a future version. Use `st.new_thing` instead ([#14050](https://github.com/streamlit/streamlit/pull/14050)).
- ๐Ÿ”‘ App menu redesign:
  - New "Settings" option in the app menu ([#14100](https://github.com/streamlit/streamlit/pull/14100)).
  - Reorganized menu items for better discoverability ([#14101](https://github.com/streamlit/streamlit/pull/14101)).

**Other Changes**

- ๐Ÿ› Bug fix: `st.spinner` avoids a race condition when used right before a cache miss ([#13849](https://github.com/streamlit/streamlit/pull/13849), [#13634](https://github.com/streamlit/streamlit/issues/13634)).
- ๐Ÿฆ‹ Bug fix: `st.number_input` no longer resets to default when the step value changes ([#14125](https://github.com/streamlit/streamlit/pull/14125)). Thanks, [contributor](https://github.com/contributor)!
- ๐Ÿชฒ Bug fix: Fixed a layout shift in `st.columns` when using `gap="small"` ([#14080](https://github.com/streamlit/streamlit/pull/14080)).

When the release has no Highlights, omit that section entirely (do not include an empty Highlights header).

Step 7: Final summary

After writing the file, print:

  • File path for the generated changelog
  • PR counts per category
  • Reminder to review the file before publishing

Key references

  • .github/release.yml โ€” canonical label-to-category mapping (also used for auto-generated GitHub release notes)
  • Website changelog format reference: https://docs.streamlit.io/develop/quick-reference/release-notes
  • Example docs markdown file (style inspiration): https://raw.githubusercontent.com/streamlit/docs/997b19a5eda68b72ce091d69be9d6921a37e3da0/content/develop/quick-references/release-notes/2026.md

Lebih banyak skill dari streamlit

developing-with-streamlit
streamlit
**[WAJIB]** Gunakan untuk SEMUA tugas Streamlit: membuat, mengedit, men-debug, mempercantik, menata gaya, membuat tema, atau mengoptimalkan aplikasi Streamlit. Juga wajibโ€ฆ
official
addressing-pr-review-comments
streamlit
Tanggapi semua komentar tinjauan yang valid pada PR untuk cabang saat ini di repositori streamlit/streamlit. Mencakup komentar tinjauan inline dan PR umum (masalah)โ€ฆ
official
checking-changes
streamlit
Memvalidasi semua perubahan kode sebelum melakukan commit dengan menjalankan pemeriksaan format, lint, tipe, dan unit test. Gunakan setelah membuat backend (Python) atau frontend (TypeScript)โ€ฆ
official
discovering-make-commands
streamlit
Mencantumkan perintah make yang tersedia untuk pengembangan Streamlit. Gunakan untuk tugas build, test, lint, atau format.
official
finalizing-pr
streamlit
Menyelesaikan perubahan cabang untuk penggabungan dengan menyederhanakan kode, menjalankan pemeriksaan, meninjau perubahan, dan membuat PR jika diperlukan. Gunakan saat siap menggabungkan perubahan keโ€ฆ
official
fixing-flaky-e2e-tests
streamlit
Mendiagnosis dan memperbaiki tes e2e Playwright yang tidak stabil. Gunakan ketika tes gagal secara intermiten, menunjukkan kesalahan waktu habis, memiliki ketidakcocokan snapshot, atau menunjukkan perilaku spesifik perambanโ€ฆ
official
fixing-streamlit-ci
streamlit
Menganalisis dan memperbaiki pekerjaan CI GitHub Actions yang gagal untuk cabang/PR saat ini. Gunakan saat pemeriksaan CI gagal, pemeriksaan PR menunjukkan kegagalan, atau Anda perlu mendiagnosisโ€ฆ
official
improving-frontend-coverage
streamlit
Menjalankan pengujian unit frontend dengan cakupan, menganalisis laporan cakupan, dan menerapkan pengujian yang bermakna untuk meningkatkan cakupan sekitar 0,2%. Gunakan saat Anda inginโ€ฆ
official