AI agent skill · by @crowi
Crowi Release Discord Nits
リリース後、CI が Discord に自動投稿する告知に添える一言コメント(カテゴリ別・ 1 行ずつの簡潔な箇条書き)を、CHANGELOG 差分から生成する skill。投稿はしない (テキスト生成まで — 貼り付けは人間が行う)。 キーワード: discord, リリース告知, 一言コメント, release notes, changelog
Archived 2026-10-23 · Source updated 2026-10-12 · License: MIT. Check the original repository for the latest version.
SKILL.md instructions
# Crowi Release Discord Nits (リリース後の一言コメント生成) CI がリリースごとに Discord へ自動投稿する告知(`Crowi Releases` bot — release notes リンク + `docker pull` コマンド)に対して、人間(sotarok)がスレッド内で返信として 載せる一言コメントを生成する skill。「今回のリリースで特に触れておきたい点」を、 カテゴリ別・1 カテゴリ 1 行の簡潔な箇条書きにまとめる。 **投稿はしない**。生成したテキストを提示するところまでが本 skill の責務で、Discord への貼り付けは人間が行う。理由は 2 つ:このセッションから Discord へ投稿する経路 (webhook・bot トークン等)がそもそも用意されていないことと、たとえ用意されていても 「公開コンテンツの投稿」は常に人間の明示確認を要る行為だから(CLAUDE.md の行動区分)。 ## 起動構文 ``` /crowi-release-discord-nits # 直近リリース(最新の v* tag)を対象 /crowi-release-discord-nits v2.0.0-alpha.10 # 対象 tag を明示指定 ``` ## ワークフロー ### Step 1: 対象リリースと比較起点の解決 - 引数が無ければ対象 tag = `git describe --tags --abbrev=0 --match 'v*'`(最新)。 - 比較起点(1 つ前のリリース)は `git tag --list 'v*' --sort=-creatordate` で対象 tag の 直前の 1 件を取る。 ### Step 2: 実際に出荷された変更点の収集(CHANGELOG 差分が正) `.changeset/*.md` は `pnpm changeset version` の時点で消費されて消えるため、「その回に 何が実際に入ったか」の正本はその version 化コミットが書いた各パッケージの `CHANGELOG.md` — spec や changeset 原文の言い回しではなく、最終的にユーザーに見える 単位でまとまっている。 ```bash git diff <比較起点>..<対象 tag> -- 'packages/*/CHANGELOG.md' 'apps/*/CHANGELOG.md' ``` **フィルタなしの生の diff をそのまま読むこと** — `grep '^+- '` のような 1 行抽出は 使わない。各エントリは `+- <hash>: ...` で始まるが、元の changeset 本文が手動改行を 含んでいると **後続行が `+- ` を伴わず折り返して続く**(実測: `ce69b4a` の BREAKING エントリが `v2 never` で切れて次行に続いていた — 先頭行だけ拾うと文が壊れる)。 1 エントリの終わりは次の `+- <hash>: ` 行・次の `+### ` 見出し・空行のいずれかで判断し、 全文を読んでから要約する。 `+- Updated dependencies [<hash>]` 行(内部の workspace 依存バンプに伴う自動生成 エントリ)はユーザー向けの実質情報を持たないので無視する。 **同一 changeset は複数パッケージの CHANGELOG に重複して現れる**(1 つの changeset が `api` と `api-contract` の両方を bump すれば、ほぼ同じ文面が両方の CHANGELOG.md に 1 エントリずつ載る)。`<hash>:` の値でユニーク化し、同じ hash は 1 件として扱う (実測: 直近リリースで最大 8 回まで重複した changeset があった)。 ### Step 3: カテゴリ分けして 1 行に凝縮 集めたエントリを、その回の内容に応じて動的にカテゴリ分けする(固定 4 分類ではない — 該当が無いカテゴリはそもそも出さない)。よく使うカテゴリ: - **破壊的変更**: 運用者・クライアント側の対応が要るもの - **セキュリティ**: 脆弱性修正・認証境界の変更。主語に注意 — 依存パッケージの脆弱性を「脆弱性 N 件を解消」と書くと Crowi 自体にあったように読める (`crowi-changesets` の「依存パッケージの脆弱性対応の書き方」が正本) - **設計/基盤**: アーキ変更・内部契約の変更(ユーザー影響は薄いが技術的に重要なもの) - **機能**: 新しい挙動・UI 変更 - **修正**: バグ修正(クラッシュ・不整合・データ破損 等) - **docs**: ドキュメントの新規/陳腐化修正(まとまった量があるときだけ独立させる) 各カテゴリ 1 行、項目は読点区切りで詰め込む(改行しない — Discord の返信として読みやすい 密度を優先)。文体は過去ログの実例に合わせる: 体言止め寄り・技術的に具体的・補足は 括弧で短く添える。severity が高いもの(クラッシュ・脆弱性・データ消失)は各カテゴリ内で 先頭に置く。 **CHANGELOG の文章をそのまま並べない** — あの文体は npm パッケージの利用者向けで、 Discord は社内(仲間内)向けの温度感。エンジニアが実際に話す密度まで凝縮し直す。 実装していない・確認していない話を憶測で書き足さない(CHANGELOG に無い事実は書かない)。 ### Step 4: 出力 生成したテキストをそのまま会話に提示する(コピペしてそのまま Discord に貼れる形。 Discord の記法に合わせる — **各カテゴリ行は必ず行頭 `- ` で始める**(Discord は 行頭 `- ` を箇条書きとして認識してレンダリングする。付けないと単なる太字の段落に なり箇条書きにならない)。`**太字**` の見出し + `- ` の行頭 + 項目は `、` 区切り、が 基本形: ``` - **カテゴリ**: 項目1(補足)、項目2、項目3 ``` ## 鉄則 - **投稿はしない**。人間がコピペして貼る前提のテキスト生成に徹する。 - **CHANGELOG 由来の事実だけを書く**。裏取りできない話を書き足さない。 - 1 カテゴリ 1 行を守る。 - 固定カテゴリ数に無理に当てはめない — 該当が無いカテゴリは省く。