コンテンツにスキップ

モジュール I — インベントリと発見

モジュール I は、エステートにおける観測済みエンティティのカタログである。 コネクターが実際に名前を挙げたエージェント、セッション、Claude Code インスタンス、MCP サーバー、スキル、ツール、リソース、モデル、プロバイダー、 非人間 ID の、受動的でバス駆動のインベントリである。プローブによってではなく リッスンすることで発見する。ペイロードではなく関係性、識別子、生存性を 記録し、存在するあらゆるもののセンサスではない。本ページは、カタログが 保持するもの、観測来歴と耐久的鮮度の動き、そして 本モジュールが意図的に主張しないものについてのリファレンスである。

観測来歴と耐久的鮮度は 26.10 に含まれる。

コネクターはエンティティではなく観測を発行する。コネクターは正規化された edge.observed と cost.sampled のファクトをイベントバスへ publish するが、それらが含意するエンティティそのものが 送信されることは決してない。モジュール I は、各観測が指し示すコアエンティティを、 その自然な参照から具現化する。すなわち、起点となる session/agent/identity、MCP サーバー、ツール、リソース、スキル、そして コストサンプルからプロバイダーとモデル(価格情報なしで発見される。価格情報は FinOps が所有する)である。インベントリが購読するのはこれら 2 種類のイベントであり、 ライブの finding はモジュール IIに属する。

自然キーに対するコアエンティティの find-or-create は、現行の単一ライターモデル における at-least-once 配信下でカタログエイリアスが重複するのを避ける。2 つの ソースは、そのエイリアスを共有しつつも別々の観測を保持できる。共有は物理的に 同一であることの証明にはならず、オーナー、ワークスペース、grant を移譲もしない。 同じペイロードでも新しいイベント ID は新しいレシートである。それが別の 活動かどうかは不明のままである。カタログの occurrence_count は、同じイベント ID のリプレイを含む配信回数であり、一意の活動数ではない。

カタログエイリアスに加えて、本モジュールは観測がどのように到着したかの、 テナントスコープの加法的な投影を保存する。すなわち、イベント ID をキーとする レシート、具現化されたエンティティごとのメンバー行(ネイティブ参照、および 登録スナップショットが有効なときは安定した観測アイデンティティ)、そして同じ イベント ID が後から異なる投影事実を運んできたときの競合行である。元のレシート は保持され、競合は上書きではなく記録される。欠落したイベント ID は保存用の アイデンティティだけを得て、ペイロードでは決して重複排除されない。同じ ID と 同じ事実のリプレイは、エイリアスを再解決せずにカタログのレガシー配信カウンタを 更新する。コンソールは既存のテナント広域権限 inventory:catalog:read で GET /v1/m/inventory/entities/{kind}/{id}/observations により、カタログ上の 1 エンティティについて保存済みレシートを一覧できる。項目は相異なるレシートごと、 レシート ID の昇順、1 ページ最大 25 件である。各項目は受信時に記録された登録の 歴史的スナップショット(ソースの現在の登録や健全性ではない)、宣言があればソースが 宣言した発生時刻、保持された事実の最初と最後の受信、一致する事実の配信、衝突する 再配信が保持されているかどうかである。空のページは、そのエンティティが観測された ことがない証明にはならない。has_more、空の一覧、カタログ合計は網羅ではない。 エンティティシートのカタログ鮮度は、成功した現行のポイントリードから来る。履歴とは 別の読み取りである。ソース/ファミリ単位の網羅と C4 参照エステートは未完了のまま である。

本モジュールは inventory.catalog_entry を登録する。具現化された各コア エンティティに付随する発見オーバーレイである。それが記録するのは どのように見つかったかであり、何をしたかではない。すなわち、シグナル ソース、既知のホスト、初回観測・最終観測のタイムスタンプ、ソースが宣言した 任意の occurred_at(宣言がなければ省略。このプラットフォームが見た時刻 である last_seen とは別)、発生回数、そして active または stale という 生存性 status である。読み取りサーフェスは小さく読み取り専用である。すなわち、 種別とソース別の件数を示す summary、種別とステータスでフィルタ可能な ページネーション付きの entities 一覧、単一エンティティの詳細ビュー、 および上記のエンティティごとの観測履歴である。すべての読み取りはテナントスコープの名前空間付き読み取りパーミッション を必要とする(最下位の閲覧者ティアで十分)。カタログと来歴の書き込みは高頻度であり、 書き込みごとに監査されることはない。

耐久的鮮度は第二のオーバーレイ inventory.freshness_sweep を保持する。テナント あたり高々 1 行が遅延作成され、開いているサイクルのカットオフ、不透明なカタログ カーソル、サイクルが終端した最後のカットオフを持つ。その最後のカットオフは 終了したスイープを記録するのであり、いずれかのソースが完全に列挙されたこと を意味しない。完全な形状は イベントバスリファレンス および本製品の型付き インターフェイスに存在する。

定期スイープは、このプラットフォームがサイクルのカットオフ以降に見ていない カタログエントリを stale とマークし、再出現した瞬間に active へ戻す。 既定のしきい値は無音 30 分と 5 分間隔である。これはモジュールの既定値であり、 現行バイナリにおけるオペレーター向け YAML 面ではない(コンポジションルートは 空のホスト設定でモジュールを登録する)。

本モジュールはテナントを列挙せず、このプロセスがたまたま観測したテナントへ フォールバックもしない。非公開のコンポジションアダプターが耐久的な組織 ディレクトリを読み、候補だけを返す。すなわち、このインスタンスの レジデンシーが扱うアクティブなビジネステナントであり、システムパーティション、 停止中の org、このインスタンスが扱わないリージョンにピン留めされたテナントは 含まれない。各ターンは通常のテナントスコープのストア書き込みを開くため、 レジデンシー、サービス撤回、リーダーシップはそこで再検査される。スナップショット とターンの間に状態が変わったテナントはそこで拒否される。

権威あるディレクトリがなければ、スイープは明示的に失敗し、何も変更しない。 PostgreSQL では、その権威にはクロステナントのディレクトリ読み取りに既に使われて いる専用の NOSUPERUSER BYPASSRLS 管理読み取りプール(--admin-dsn)が必要 である。その証明済みプールがなければ、スイープはアプリケーションロールが見える 行を完全なディレクトリとしては扱わない。SQLite に同等のプール要件はない。 データハンドルが配線されていれば新しい観測は引き続き永続化される。実行できない スイープが取り込みの購読を解除することはない。

各パスは候補ごとに1 ターンを与える。各ターンはカットオフより古い アクティブなエントリを最大 1,000 件の 1 ページだけ分類し、カーソルを保存する ため、再起動は新しいイベントなしで続行できる。列挙と各テナントターンは 別々の時間予算を持つため、遅いテナントがパスの残りを消費することはない。 局所的な失敗は、生きているプロセス内で後続テナントがターンを得ることを 妨げない。テナント横断の再起動カーソルはなく、繰り返される再起動の下での 公平性も、高可用性の主張もない。

ターンが正常に完了しなければ、そのページはマーク済みとしては数えられない。 ページと進捗は一体のままである。次のターンは最後に保存されたもの — 以前の 境界、あるいは既に進んだ境界 — を再読し、そこから続ける。本製品はメモリから 進捗を再構成しない。

モジュール I はコンシューマーである。edge.observed と cost.sampled を サブスクライブし、自身のカタログオーバーレイ、導出するコアエンティティ、および 上記の加法的な来歴・鮮度の行を書き込む。自身のイベントは一切発行せず、 アクチュエーションサーフェスも公開しない。永続化する参照と選択された観測事実は、受け取ったとおりに保存される。本 モジュールはそれらの値をさらにサニタイズしない。データの最小化はプロデューサー 側の責務であり、観測を公開する前に行う必要がある。本モジュールはすべての プロデューサーについてそれを証明できない。プロデューサーが公開していれば、 永続化された参照にクエリ文字列、資格情報、その他の機微データが残ることが ある。インベントリは活動の完全な生コンテンツを独自に収集せず、自身の生の ペイロード、シークレット、プロンプト、コマンド、SQL は付加しない。