mcpField
T
typing-exclusion-worker

typing-exclusion-worker

github.com/getsentry開発1.1k1.6k 回インストール5 日前に更新
リポジトリ

typing-exclusion-worker について

指定されたバッチの Python 型チェック作業を進めるスキルです。指定モジュールを mypy の除外設定から外し、対象内の問題を修正して検査を実行します。変更範囲を限定し、所定の形式で結果を報告します。

主な機能

  1. 01指定モジュールを mypy 除外設定から削除
  2. 02対象範囲内の型問題を修正
  3. 03対象を絞った mypy と pytest の実行
  4. 04変更ファイルへの pre-commit 実行
  5. 05所定形式での結果報告

活用シーン

  1. 01指定モジュール群を mypy 検査に移行
  2. 02作業引き渡し前の型変更の検証
  3. 03自動型修正作業をチームの担当範囲内に維持

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/getsentry/skills --skill typing-exclusion-worker

インストール後、Claude Code で/typing-exclusion-workerを入力して読み込まれたか確認します。

詳細

型付け除外ワーカー

目的

割り当てられた型付けバッチを安全かつ予測可能な方法で実行します。

  • 割り当てられたモジュールのみを mypy の除外設定から削除します。
  • 対象範囲で検出された型付けの問題を修正します。
  • 必要なチェックを実行します。
  • マネージャー/オーケストレーター向けに一貫したサマリーを返します。

必須入力

作業を開始する前に、タスクのプロンプトに次の入力があることを確認してください。

  • worktree/ブランチ名
  • 除外設定から削除するモジュールの正確なリスト
  • 担当範囲/ドメインの境界
  • 期待される検証コマンド(カスタマイズされている場合)

いずれかが欠けている場合は、編集を始める前に確認してください。

スコープのルール(厳守事項)

  1. pyproject.toml の mypy 除外リストから、割り当てられたモジュールのエントリーのみを削除してください。
  2. 型付けやテストの通過に直接の依存関係が必要な場合を除き、コードの変更は割り当てられた範囲内に収めてください。
  3. マネージャーから明示的な承認がない限り、チーム横断のモジュールには範囲を広げないでください。
  4. 一律の # type: ignore は避けてください。避けられない場合は、短い理由を添えて限定的な ignore[code] を使用してください。

実行ワークフロー

  1. 除外設定を変更する

    • pyproject.toml の除外オーバーライドから割り当てられたモジュールを削除します。
  2. 割り当て範囲で mypy を実行する

    • 迅速にフィードバックを得るため、まず対象を絞ったパスを優先します。
    • 明示的な型付けパターン(isinstance による絞り込み、正確な戻り値の型、型付けされたクラス属性、リレーションで安全なモデルアクセス)を使用してエラーを修正します。
  3. 変更した範囲のテストを実行する

    • 変更したモジュール/テストに対して、対象を絞った pytest を実行します。
    • 続行する前に回帰を修正します。
  4. 変更したファイルに対して pre-commit を実行する

    • pre-commit run --files <changed files> を実行します。
    • フックがファイルを自動修正した場合は、クリーンになるまで再実行します。
  5. 最終確認

    • 最終編集後に、対象を絞った mypy とテストを再実行します。
    • 無関係なファイルが変更されていないことを確認します。

Python の型付けに関するベストプラクティス

  • Any よりも正確な型を優先します。
  • 属性にアクセスする前に、ユニオン型を型の絞り込みで処理します。
  • メソッドのオーバーライドは、基底クラスと互換性のあるシグネチャにします。
  • 推論が不十分な場合は、テストやヘルパーのクラス属性に型注釈を付けます。
  • スタブで生の *_id 属性が公開されていない場合は、リレーションオブジェクト(obj.related)を使用します。

必須の出力テンプレート

各バッチの最後に、次の構造をそのまま返してください。

## Batch Summary

- Branch/worktree: `<name>`
- Ownership/domain: `<team-or-domain>`

### Modules Removed From Exclusion

- `<module.path.one>`
- `<module.path.two>`

### Files Changed

- `<path>`
- `<path>`

### Key Typing Fixes

- `<short rationale + fix>`
- `<short rationale + fix>`

### Validation

- `mypy`: `<pass/fail + scope>`
- `pre-commit --files`: `<pass/fail>`
- `pytest`: `<pass/fail + scope>`

### Notes

- Remaining blockers: `<none or details>`
- Any new ignore entries: `<none or file + ignore code + reason>`

停止条件(マネージャーにエスカレーション)

スコープを広げるのではなく、作業を停止して報告してください。次の場合が該当します。

  • 修正に別のチーム/ドメインへの変更が必要な場合
  • pyproject.toml の除外設定の競合を安全に解決できない場合
  • エラーの量から、バッチが大きすぎるため分割すべきと判断される場合

コメント