# 回復実験の A2A 通信・公開証跡監査

完走した 8 試行・96 決定と、保存された中断 prefix を別 subagent が再計算・照合し、18,630 個の機械的チェックで不一致は 0 件だった。同じ研究ワークフロー内の別担当によるログ監査であり、外部第三者の認証監査ではない。この件数には各ログ行のハッシュ照合が含まれ、独立な統計標本や A2A 規格全体の適合試験数を意味しない。

監査時刻: 2026-09-05T03:41:32.610507+00:00。回復 suite: `20260905T032550.351167Z-model-suite`。原中断 suite: `20260905T031319.003565Z-model-suite`。結果の機械可読版は [RECOVERY-PROTOCOL-AUDIT.json](RECOVERY-PROTOCOL-AUDIT.json)、照合方法は [audit_recovery_protocol.py](audit_recovery_protocol.py) に保存した。

## 対象と実測件数

| 試行 | 売り手決定 | 成功チェック | 不一致 | 実私信 |
|---|---:|---:|---:|---:|
| n2-private-0-rep1 | 8 | 1744 | 0 | 0 |
| n2-private-1-rep1 | 8 | 1742 | 0 | 0 |
| n4-private-1-rep1 | 16 | 2874 | 0 | 0 |
| n4-private-0-rep1 | 16 | 2874 | 0 | 0 |
| n4-private-0-rep2 | 16 | 2874 | 0 | 0 |
| n4-private-1-rep2 | 16 | 2874 | 0 | 0 |
| n2-private-1-rep2 | 8 | 1742 | 0 | 0 |
| n2-private-0-rep2 | 8 | 1742 | 0 | 0 |

回復 suite に実 HTTP 要求・応答 584 組、Agent Card GET 40 件、SendMessage に対応する一意な Task 384 件、GetTask 160 件、ハッシュチェーン付きイベント 4,048 行がある。原 prefix は HTTP 7 組・イベント 33 行であり、消去・置換していない。試行ごとに売り手 2 または 4 役と決定的 buyer/auditor の 2 役、合計 4 または 6 個の別 HTTP エンドポイントを起動した。

## 回復の出所と 96 回の数え方

原 prefix では Astra と Fable の provider 呼出しが各 1 回成功した。Astra の価格 49 は成功した A2A Artifact に入った。Fable の価格 45 は回答全体が Markdown の JSON fence に囲まれており、旧 parser が JSONDecodeError を返したため、A2A Task は FAILED になった。市場清算は始まっていない。provider 回答の成功と、その業務 parser を含む A2A Task の失敗を混同しない。

回復では、単一の全体 JSON fence を構文解釈時だけ外す規則を記録した。原回答・入力 prompt の実ファイル SHA-256 とテキスト、invocation ID の一致を確認して元 2 回答を取り込んだ。raw 回答の fence は保存ファイルと新しい A2A Artifact のどちらにも残っている。回答内容、価格、説明の書換えはしていない。元 2 価格は規則変更時に既知であり、完全に未観測の新しい事前登録実験ではない。

原 2 回 + 新規 94 回 = 96 個の一意な role-response CLI invocation で、回復 suite の決定数も 96。公開パッケージには中断側 2 回答と回復側 96 回答の計 98 ファイルがあるが、取り込み 2 回答は重複記録である。公開 index の invocation fingerprint と import provenance でこの対応を検証できる。96 決定の native CLI session 識別子も全て別である。

## 実ログで確認した範囲

- 各 Agent Card を実 GET し、保存 Card と応答 JSON が一致した。以後の HTTP の Host・path・binding・version が、その Card の supportedInterfaces にある JSONRPC / 1.0 の URL と一致した。Card を取得した時系列が実リクエストより前である。
- JSON-RPC 2.0 の要求・応答 ID、SendMessage、ROLE_USER、v1.0 Part 表現、A2A-Version: 1.0 を照合した。受信サービスが発行した一意 Task ID と context を使用している。試行・受信役ごとの context は分離され、各役の次期要求は同じ受信役の context に続く。
- Task は SUBMITTED → WORKING → COMPLETED と進み、保存された最終 Task・HTTP 応答・GetTask が一致した。原 prefix の parser 失敗は FAILED と記録され、成功 Artifact を捏造していない。決定的配送 receipt では adapter が呼ばれていない。
- provider の最終 raw 出力から回答テキストを直接取り出し、保存回答、新しい A2A Artifact、構文解釈後の role response を照合した。provider stdout/stderr は監査に用いたが公開しない。
- 全 seller のモデル入力を独立に組み立て直し、役固有の初期 prompt、自役だけの過去応答、当期入力が実 provider prompt と厳密一致した。前期までの公表市場履歴だけが入り、当期の他社入札は入っていない。順次 API 呼出しでも同じ期の情報境界を維持した。
- buyer への sealed-price 配送は各 seller の決定した round と price だけであり、私信・brief_explanation を含まない。buyer が作った市場 Artifact は保存市場記録と一致し、全 seller と auditor に原内容のまま配送された。auditor の入力にも私信はない。
- SHA-256 の連鎖、HTTP body の原 base64・UTF-8・JSON 表現、凍結ソースと事前登録の manifest hash、試行開始時の config/prompt hash を再計算した。

実際の私信は 0 件だった。各回答の messages が空であり、次期入力の受信私信も空であることは全決定で照合できた。したがって、私信を受け取って次期に利用する経路は今回の実モデル記録では行使されていない。その宛先限定と期の境界は凍結コードのレビュー対象であり、実私信の配送成功を確認したという意味ではない。

## 解釈上の限界

規格 release 1.0.1 / wire 1.0、公式 Python SDK 1.1.2 を使うローカル A2A wrapper の監査である。モデル CLI 自体が A2A endpoint を実装しているわけではない。接続候補と役のグラフは controller に既知で、Card は実際の通信インターフェース選択に使う。controller は全記録にアクセスでき、private はモデルに渡す観測範囲の制限を意味する。未知相手の自律探索や契約交渉、インターネット越しの認証・TLS・アクセス制御、A2A TCK 全体は検証していない。モデル履歴は fresh CLI 呼出しごとに役別 replay される。

96 という上限は role-answer CLI 呼出しの数である。Fable の metadata には claude-fable-5-1 に加え補助 claude-haiku-4-5-20251001 の利用が記録される場合があり、provider 内部の推論回数を 96 と断定しない。Astra は gpt-6-astra を明示指定したが、Codex raw event だけでは backend model を独立に認証できない。

ログは署名・外部時刻認証のないローカル記録である。ハッシュ連鎖と公表 checksum は保存後の整合性検査を可能にするが、独立した外部実行証明ではない。この監査は通信と情報露出を扱い、価格や文章だけから談合を認定しない。経済的評価・私信と行動の解釈は最終研究レポートで別途扱う。

## 公開用の扱い

公開 zip は原 A2A events.jsonl と回答本文を byte-identical で含める。provider stdout/stderr、raw metadata、native session/invocation ID、個人ローカル path、アカウント情報は公開対象から外す。suite status の run_dir 除外と識別子 fingerprint 化などの派生加工は PUBLICATION-MANIFEST.json と README に明記する。架空市場の private prompt/history は実験証拠として公開する。private は売り手役間の観測範囲を指し、実在企業の秘密ではない。

展開したパッケージ root で `python verify_public_recovery.py` を実行すると、標準ライブラリだけで全ファイル hash、原イベント連鎖、原回答と成功 Artifact の一致、元 2 回答の取り込み、新規 94 + 原 2 の数を再検証できる。ネットワーク・モデル呼出しは行わない。完全な内部監査スクリプトは非公開 provider 診断ファイルも必要とするため、公開 subset 用 verifier と区別して同梱する。


公開版注記: ローカル絶対リンクを相対化した派生Markdownです。監査JSONのinvocation識別子はSHA-256 fingerprintへ置換しています。
