astroidal は何をしますか?
Astroidal は、AI コードレビューマップ、スコアラー、ヘルパーです。ブラスト半径(影響範囲)を描画し、証明できる内容をスコアリングします。変更をマッピングし、実際のバグを検索して、発見事項をランク付けします。チャートとテーブルはファイルに保存されます。チャットへの返信は、人が貼り付け可能な短い散文のサマリーです。
バグカタログはこのファイルの隣の references/review-lenses.md にあります。発見事項を判断する前にこれを読んでください。これは .astroidal/ にはありません。
Astroidal を依存関係として追加しないでください。インストールのために package.json、ロックファイル、pyproject.toml、go.mod、Cargo.toml を編集しないでください。
実行方法
次の順序でコマンドを解決します:
astroidalがすでにPATH上にある場合npx --yes astroidal
パッケージ名がダウンロードできず、ユーザーがローカルチェックアウトを指定した場合は、npx --yes <astroidalパッケージへのパス> または node <パス>/dist/cli.js を実行します。
スキルをリポジトリごとに一度インストールします:
npx --yes astroidal init
このマシン上のすべてのリポジトリに対して一度インストールするには --global を渡します:
npx --yes astroidal init --global
グローバルインストールは、新しいバージョンの Astroidal が graph または rank を実行したときに、そのスキルファイルが Astroidal によって書き込まれたものである限り更新されます。編集されたスキルは init --force が実行されるまでそのまま残ります。プロジェクトインストールを更新するには init を再度実行します。
スコープの選択
graph を一度実行します。出力されるスコープノートを読んでください。そのスコープが間違っている場合は、以下のフラグを付けて一度だけ再実行してください。その後は再実行しないでください。
| 質問 | コマンド |
|---|---|
| 現在の編集(追跡されていないファイルを含む) | npx --yes astroidal graph |
| このブランチまたはそのプルリクエスト(ワークツリーがダーティな場合) | npx --yes astroidal graph --base <デフォルトブランチ> |
| クリーンなフィーチャーブランチ | npx --yes astroidal graph |
| プルリクエスト番号または URL | npx --yes astroidal graph --pr 12,18,24 |
| すべてのオープンプルリクエスト | npx --yes astroidal graph --open |
| 作成者、ラベル、またはベースブランチでフィルタリングしたオープンプルリクエスト | npx --yes astroidal graph --open --author NAME --label NAME --base BRANCH |
| 現在のプルリクエストとその下のスタック | npx --yes astroidal graph --stack |
| 1 つのコミット | npx --yes astroidal graph --commit SHA |
| ステージングされた変更のみ | npx --yes astroidal graph --staged |
| ステージングされていない変更と追跡されていないファイル | npx --yes astroidal graph --unstaged |
バッチは 1 つのマージされたマップです。プルリクエストを個別のレポートとしてレビューしないでください。
GitHub
このレビューにまだ必要なものを取得するために gh を呼び出します。マップはすでにローカルファーストの読み取りを行っているため、同じファイルを再度リストしたり、既に保存されている差分を再取得したり、チェックをポーリングしたりしないでください。タイトル、ベース、または本文が欠落している場合の gh pr view など、限定的な呼び出しは問題ありません。gh を乱用せず、プルリクエストにコメントしたり、承認したり、レビュアーを要求したりしないでください。
GitLab
このレビューにまだ必要なものを取得するために glab を呼び出します。マップはすでにローカルファーストの読み取りを行っているため、同じファイルを再度リストしたり、既に保存されている差分を再取得したり、パイプラインをポーリングしたりしないでください。タイトル、ベース、または本文が欠落している場合の glab mr view など、限定的な呼び出しは問題ありません。glab を乱用せず、マージリクエストにコメントしたり、承認したり、レビュアーを要求したりしないでください。
バグの検索
以下の順で読みます:
.astroidal/packets/bug-map.md.astroidal/packets/architecture.md.astroidal/packets/security.md.astroidal/packets/performance.md.astroidal/packets/ux.md.astroidal/packets/correctness.md- このスキルの隣の
references/review-lenses.md
カタログのゲート、スペックパス、およびスタンダードパスを適用します。次に、Added lines 内のファイルに一致する各言語セクションを適用します。他の言語セクションはスキップします。
バグマップ内のすべての変更パスをカバーします。Added lines セクションから開始します。そのセクションが変更であり、プルリクエストごとに 1 つのブロックです。シンボルの抜粋は、差分がリモートで取得された場合やスタック上の先端のみの場合に空白になることがあります。空白の抜粋は、空の変更ではなく、コンテキストの欠落を示します。
最初の可能性のあるファイルで停止しないでください。Added lines 内のすべての非テストソースブロックに対して:
- ブロック全体を読みます。ブロックが証拠ファイルにさらなる行があると示している場合は、その下の行も含みます。
- そのブロックをカタログに対してチェックします。ファイル名に一致するクラスだけでなく、以下の 5 つのクラスが最低限です。
- 1 つのファイルが複数のプルリクエストをリストしている場合、各ブロックをレビューします。マップされた本文はスタックの先端のみです。
- ブロックだけではバグを確認または否定するのに十分でない場合は、ファイルを開きます。
- 変更された各シンボルについて、変更がそれらを壊す可能性がある場合、マップがリストする 1 ホップの呼び出し元と呼び出し先を検査します。
特に、誤った分岐、偽または空の値が欠落として扱われる場合、オフバイワンまたはタイムゾーンの不一致、障害後の再試行をブロックするロックまたはステータス、連結によって構築された URL またはクエリ、間違った ID を使用する認可チェック、1 ホップの呼び出し元がまだ古い方法で使用しているコントラクトに注目してください。影響度の高いスコアは発見事項ではなく、ブロックをスキップする言い訳にもなりません。
これらすべてのクラスを検索します:
- ロジックとエッジケース: 誤った分岐、オフバイワン、飲み込まれたエラー、null クラッシュ
- データ損失と状態: マイグレーション、レース、部分的な書き込み、古いキャッシュ
- 壊れたコントラクト: API、型、ルート、エクスポートされた動作、スキーマの不一致
- セキュリティバグ: 認可のギャップ、インジェクション、シークレット、安全でない信頼境界
- UX フローバグ: デッドエンド、欠落したエラー、空、またはローディング状態、壊れたナビゲーション
重要な問題を探します。パケット内のヒントは手がかりであり、発見事項ではありません。コードの匂い、長いファイル、テストの欠落、依存関係のバンプは、カタログのゲートが通過した場合にのみ発見事項となります。フォーマット、命名、コメント、賞賛、質問、および具体的な障害を挙げないリファクタリングは無視します。
発見事項の書き出し
.astroidal/findings.json を書き出します:
{
"findings": [
{
"pr": 12,
"severity": "high",
"description": "何が壊れるかを一文または二文で。",
"path": "src/auth.ts",
"line": 12,
"quote": "ファイルからコピーされた正確な行",
"recommendation": "バグを取り除く具体的な変更。",
"category": "security"
}
]
}
severity は critical、high、medium のいずれかで、カタログのゲートを使用します。critical は、ユーザーがアクセスするパスでのクラッシュ、データ損失、認可バイパス、インジェクション、またはシークレットの露出です。high は、現実的な誤った結果、失われた書き込み、レース、または壊れたコントラクトです。medium は、失敗する現実的なエッジケースです。quote は、added-lines ブロック、マップされたファイル、またはその 1 ホップの隣接ファイルからコピーされた正確な 1 行です。pr にはその行を導入したプルリクエストを設定し、ローカル変更の場合は省略します。
何が壊れるかを述べ、シンボルを指定し、バグを取り除く変更を示します。セキュリティとアーキテクチャについては、その変更が成り立つ理由を述べます。推測を避け、引用行を言い換えたり、質問を提出したりしないでください。空の findings 配列は、すべての非テストソースファイルの追加行がカタログに対してチェックされ、そのいずれにも重要なバグが含まれていない場合にのみ有効です。
変更されたファイルが、ディレクトリがまだ示していない理由によって一緒に属している場合、そのグループに名前を付けます。チャートはディレクトリを個別に描画し、インポートを線として描画します。グループは、それらを横断するフロー、機能、または共有コントラクトのためのものです。
{
"findings": [],
"groups": [
{
"name": "支払いリンク",
"paths": ["apps/admin/lib/whatsapp.ts", "apps/admin/lib/proxied-link.ts"]
}
]
}
短い名前と少なくとも 2 つのマップされたパスを使用します。追加で一緒に属するものがない場合は groups を省略します。
次に実行します:
npx --yes astroidal rank
rank が引用行またはパスが間違っているために発見事項を削除した場合、その発見事項を一度修正して再度ランク付けします。数を維持するために代わりのバグを発明しないでください。3 回目のランク付けはしないでください。
返信
チャットに短い散文のサマリーを書きます。ユーザーが貼り付け可能な行で開きます: Astroidal {スコア} · Passed または Astroidal {スコア} · Fix first。次に、最も重大度の高い問題と 2 つの出力パス (.astroidal/review.md と .astroidal/constellation.html) を指定します。発見事項テーブルを貼り付けないでください。チャートを再作成しないでください。マージするかどうかは人間が判断します。