SOP ファンイン: Git
Git の forge イベントは SOP の実行を開始できます。チャネルのイベントテーブルでイベントタイプが sop にルーティングされると、Git チャネルは正規化された forge イベントを SOP イベントに昇格させ(トピックは git.<alias>:<event_type>、構造化された JSON ペイロードには repo/issue/PR のフィールドが含まれます)、エンジンにディスパッチします。sop-routed のライフサイクルイベントでは メンションゲート のみが緩和されます: トリアージ SOP にルーティングされた pull_request.opened は、作成者がアプリをメンションしたかどうかにかかわらず発火します。SOP でも会話でも、すべての配信に対して 作成者チェックは引き続き適用されます: アプリ自身のアカウントまたは他のボットからのイベントはドロップされます(listen_to_bots が設定されている場合を除く)、またアクターのログインに対してピアグループの許可リストが適用されます。つまり、sop ルートは mention_only をバイパスしますが、自身/ボットのフィルタリングや作成者の許可リストはバイパスしません。
トランスポート側(プロバイダー、フォージ認証、ポーリング、リポジトリスコープ、イベントルート)は Git チャンネル で構成します。このページではトリガーについて説明します。どのイベントタイプが SOP イングレスに到達するかは、チャンネルのイベントごとの
eventsルートテーブルによって決定されます。
トリガー
設定済みチャネル (telegram、discord、slack、git、…) 上のインバウンドメッセージまたは forge/プラットフォームイベント。Live: チャネルの SOP ディスパッチが有効なときに、チャネルオーケストレーターによって配信されます。Git forge プロデューサーは <channel>.<alias>:<event_type> 形式のイベントトピックを設定し、ペイロードに event_type を格納するため、作成された condition は 2 つ目のトリガー形状なしで forge イベントをタイプでフィルタリングします。
| フィールド | 型 | default | 意味 |
|---|---|---|---|
alias | string? | null | オプションの設定済みインスタンスのエイリアス。未設定の場合はすべてのインスタンスに一致します。 |
channel* | string | — | チャネルの種類を表す ChannelKind の snake_case 値。 |
condition | string? | null | メッセージペイロードに対して評価されるオプションの式。 |
SOP を読み込んで検証する:
定義
Syntax の説明に従い、channel トリガー付きで SOP を作成してください。上記のトリガーフィールドがサポートされているキーです。ページはファイル全体を走査します。
検証
zeroclaw sop validate
検査
zeroclaw sop list
zeroclaw sop show <name>
マッチング
channel トリガーは、channel(チャネル種別である git)と、任意の alias(設定されたインスタンス、例: default)で照合されます。トリガー自体には topic フィールドはありません。SOP イングレスに到達するイベントタイプは、チャネルのイベントごとの events ルートテーブルだけで決まるため、トリガーがソースを選択し、ルートテーブルがイベントを選択します。ログに表示される git.<alias>:<event_type> 文字列は、チャネルが生成したイベントトピックです。トリガーを 1 つのイベントタイプに制限するには、$.event_type == "pull_request.opened" のような condition でペイロードをテストします。イベントの構造化された JSON ペイロードは SOP イベントに転送され、オプションのトリガー condition で利用できます。ステップコンテキストには、上限が適用され、サニタイズされ、フレーム化された形式が渡されます。$.repo == "octo/repo" のような JSON パスの condition により、SOP を 1 つのリポジトリに絞り込めます。既知のイベントタイプは、issue_comment.created、issues.opened、pull_request.opened、pull_request.closed、pull_request.merged、pull_request_review_comment.created、workflow_run.completed、workflow_run.failed、release.published です。
実行する
イベント種別をチャネル上のSOPにルーティングし(events エントリに sop = "<name>" を指定)、channel トリガーでそのチャネルを指定するSOP(channel = "git"、alias は任意)を読み込んだら、issue/PRを開くかコメントする、リリースを公開する、またはワークフローの実行を完了させることでForgeイベントを発生させます。チャネルはイベントを正規化し、安全性のためにペイロードを検査したうえで、channel トリガーが一致し、condition(指定されている場合)が満たされる、読み込み済みのすべてのSOPにディスパッチします。イベント種別のルーティングは、そのForgeエンドポイントへのチャネルのサブスクライブも行うため、ポーリングされるのはルーティングされたイベント種別だけです。
何も開始されない場合は、イベントタイプがsopにルーティングされていること(会話のデフォルトのままになっていないこと)、SOPのchannelトリガーでchannel = "git"(および正しいalias)が指定されていること、そしてペイロードに対してconditionが成立していることを確認してください。詳細はfan-in overviewのトラブルシューティング表を参照してください。
承認して観察する
チェックポイントに到達した実行は WaitingApproval として一時停止します。CLI(zeroclaw sop list、zeroclaw sop approve)またはゲートウェイAPIの承認エンドポイント(GET /admin/sop/pending、POST /admin/sop/approve、POST /admin/sop/deny)を介した帯域外操作で、これらをクリアまたは確認できます。