diff --git a/.agents/skills/shipping-misskey-change/SKILL.md b/.agents/skills/shipping-misskey-change/SKILL.md new file mode 100644 index 00000000000..700e6825e12 --- /dev/null +++ b/.agents/skills/shipping-misskey-change/SKILL.md @@ -0,0 +1,10 @@ +--- +name: shipping-misskey-change +description: Use at every finish moment of a Misskey change, before committing, opening a PR, merging, or handing work back, especially when validation, SPDX, locale safety, migrations, misskey-js generation, or CHANGELOG checks may apply. +--- + +# shipping-misskey-change + +This is the Codex entrypoint for the canonical Misskey pre-ship checklist. + +Read and follow [.claude/skills/shipping-misskey-change/SKILL.md](../../../.claude/skills/shipping-misskey-change/SKILL.md). Treat that file and its `references/` directory as the source of truth. diff --git a/.agents/skills/working-on-backend/SKILL.md b/.agents/skills/working-on-backend/SKILL.md new file mode 100644 index 00000000000..491b015185e --- /dev/null +++ b/.agents/skills/working-on-backend/SKILL.md @@ -0,0 +1,10 @@ +--- +name: working-on-backend +description: Use whenever editing or adding code under `packages/backend/`, including REST API endpoints, NestJS services/modules, TypeORM entities, migrations, backend tests, misskey-js generation, or backend validation commands. +--- + +# working-on-backend + +This is the Codex entrypoint for the canonical Misskey backend skill. + +Read and follow [.claude/skills/working-on-backend/SKILL.md](../../../.claude/skills/working-on-backend/SKILL.md). Treat that file and its `references/` directory as the source of truth. diff --git a/.agents/skills/working-on-frontend/SKILL.md b/.agents/skills/working-on-frontend/SKILL.md new file mode 100644 index 00000000000..59be8cfe992 --- /dev/null +++ b/.agents/skills/working-on-frontend/SKILL.md @@ -0,0 +1,10 @@ +--- +name: working-on-frontend +description: Use whenever editing or adding code under `packages/frontend/`, Vue SFCs, SCSS Modules, Storybook stories, or frontend-facing UI text in `locales/ja-JP.yml`. +--- + +# working-on-frontend + +This is the Codex entrypoint for the canonical Misskey frontend skill. + +Read and follow [.claude/skills/working-on-frontend/SKILL.md](../../../.claude/skills/working-on-frontend/SKILL.md). Treat that file and its `references/` directory as the source of truth. diff --git a/.claude/THIRD_PARTY_LICENSES.md b/.claude/THIRD_PARTY_LICENSES.md index 77b00507a25..0fc5df629c6 100644 --- a/.claude/THIRD_PARTY_LICENSES.md +++ b/.claude/THIRD_PARTY_LICENSES.md @@ -15,7 +15,7 @@ ### 取り込んだファイル -| `.claude/` 内のパス | 上流パス | 上流 frontmatter `origin` | Misskey での改変 | +| `.claude/` 内のパス | 上流パス | 上流由来 | Misskey での改変 | |---|---|---|---| | `skills/context-budget/SKILL.md` | `skills/context-budget/SKILL.md` | ECC | description を日本語化、Misskey 固有メモを追記 | | `commands/harness-audit.md` | `commands/harness-audit.md` | ECC | scripts 依存の自動採点を、Claude が `pnpm`/`git`/`grep` で手動採点する版に書き換え。Misskey 固有の評価軸 (SPDX / endpoint-list / migration / locales) を組み込み | @@ -61,7 +61,7 @@ Misskey 本体は **AGPL-3.0-only** で配布されているが、`.claude/` 配 - MIT が要求する条件 (copyright notice + license text の保持) を本ファイル + 各ファイル冒頭の SPDX/出典コメントで満たしている - Misskey 全体の配布物としては AGPL-3.0-only で扱われるが、`.claude/` 配下の MIT ファイルは個別に MIT として識別可能 -`.ts` / `.js` / `.vue` / `.scss` の SPDX 義務化 ([AGENTS.md §1](../AGENTS.md#1-spdx-ヘッダー必須)) は Misskey 本体コード向けで、`.claude/` 配下の `.md` / `.sh` には適用されない。 +`.ts` / `.js` / `.vue` / `.scss` の SPDX 義務化 ([AGENTS.md](../AGENTS.md) の「絶対にやってはいけない事」§コード・データ関連) は Misskey 本体コード向けで、`.claude/` 配下の `.md` / `.sh` には適用されない。 --- @@ -73,4 +73,4 @@ Misskey 本体は **AGPL-3.0-only** で配布されているが、`.claude/` 配 2. 各ファイル冒頭に SPDX ヘッダ + 出典コメントを追加 3. 本ファイル §1 のテーブルに 1 行追記 4. 必要なら新しいセクションでライセンス全文を同梱 -5. AGENTS.md からの参照を確認 (現状の [AGENTS.md §ツール固有の補助ファイル](../AGENTS.md) で `THIRD_PARTY_LICENSES.md` を案内済。CLAUDE.md は `@AGENTS.md` 経由で読み込むので個別の追記は不要) +5. 本ファイルへの導線を確認 (`.claude/skills/README.md` / `.claude/commands/README.md` 等の各 README から本ファイルへリンクされている)。なお [CLAUDE.md](../CLAUDE.md) が `.claude/` 配下全体を「Claude Code 固有の補助」として案内しており本ファイルもそこに含まれる。CLAUDE.md は `@AGENTS.md` を取り込むだけなので AGENTS.md への個別追記は不要 diff --git a/.claude/agents/README.md b/.claude/agents/README.md index 92075d23e3a..cf1032d6325 100644 --- a/.claude/agents/README.md +++ b/.claude/agents/README.md @@ -2,22 +2,30 @@ Misskey の特定領域に特化したレビュー / 調査エージェントを `.claude/agents/.md` 形式で配置する。 -frontmatter (`name` + `description` + `tools`) は、Claude が **自動でエージェントを呼び出すか判断する** 唯一の手がかりになる。`description` には用途を具体的かつ網羅的に書くこと (動詞 + 対象 + トリガー条件)。 +frontmatter (`name` + `description` + `tools`) は、Claude が **自動でエージェントを呼び出すか判断する** 唯一の手がかりになる。`description` は **起動判断に効くドメイン・パス・ファイル種別・固有チェックに絞って簡潔に** 書く (動詞 + 対象 + トリガー条件)。本文 checklist 項目を網羅的に列挙するのではなく、他の reviewer と区別できる高シグナル語を選ぶ。 -## 実装済サブエージェント +実装済エージェントの一覧は本ファイルでは管理しない (腐敗するため)。各 `.md` の frontmatter が自己説明として機能する。 -| エージェント名 | 役割 | 優先度 | -|---|---|---| -| [misskey-api-reviewer](misskey-api-reviewer.md) | NestJS DI + meta/paramDef + UUID 重複 + endpoint-list.ts 登録 + ApiError throw + misskey-js 再生成 + e2e + CHANGELOG をチェック | 高 (登録漏れで 404 / autogen CI 落ち頻発) | -| [vue-component-reviewer](vue-component-reviewer.md) | Mk\* 命名 / ` - - -``` - -## 国際化 (i18n) - -- 文字列リテラルを直書きしない。 -- 引数なし: `i18n.ts.` で参照する (例: `i18n.ts.deleted`)。 -- 引数あり: `i18n.tsx.(...)` で関数呼び出しする (例: `i18n.tsx.takeOverConfirm({ name })`)。 -- 新規キーは **`locales/ja-JP.yml` のみ** に追加する (他言語は Crowdin で自動配信)。 -- `i18n` は `packages/frontend/src/i18n.ts` (または共有モジュール) から import する。 - -## モーダル / 通知 - -- `os.ts` (`packages/frontend/src/os.ts`) 経由で呼ぶ。 -- `os.alert(...)` / `os.confirm(...)` / `os.popup(...)` / `os.success(...)` など。 -- ブラウザ標準の `window.alert()` / `window.confirm()` を **直接呼ばない**。 - -## アクセシビリティ (PR レビューで指摘されやすい点) - -- クリックハンドラを付けるなら ` +``` + +- `_button` global class はボタンの装飾を除去するリセット (背景/枠線なし + `cursor: pointer` + disabled cursor)。focus ring や ripple は**付かない** — ripple 付きのボタンが要るなら `MkButton.vue` コンポーネントを使う +- ` +``` + +`aria-label` の値も i18n 経由にする (英語直書きは禁止)。 + +**実情:** 現状コードベースでは `aria-label` の使用例自体が乏しい (アイコンの hover ヒントには `:title="i18n.ts..."` が使われるが、`title` は tooltip でありスクリーンリーダー向けラベルの代替にはならない)。このため aria-label は確立した慣習というより a11y 上の推奨ベストプラクティスとして書いている。新規でアイコンのみのボタンを足すなら付けるのが望ましい。 + +### `:disabled` と `aria-disabled` の整合 + +- 本物の `