MINARA

ロールメモリ

決済済み手動取引ケースを対象とする shadow-first のロール別リフレクション

Role Memory は、宣言済み分析ロールの成功パターンと失敗モードを保存します。統一 Trading Memory では、ケースが消費済み手動取引 preview に正確に紐づき、対応する実行に決済済み outcome がある場合だけ学習対象になります。

これは汎用予測ログでも口座履歴ミラーでもありません。Autopilot、Strategy Studio、XStrategy、workflow 実行、発生元不明の perps は、リコール可能な role case を生成できません。

ユーザー向け監査画面は Trading Memory を参照してください。

受け入れ境界

Role case が評価対象になるには、次をすべて満たす必要があります。

  1. role ID が reasoning skill で宣言され、role registry に存在する。
  2. 手動 preview がちょうど 1 回消費されている。
  3. ケースと実行の decision ID、資産、方向、口座、市場が一致する。
  4. 実行発生元が manual_agent または検証済み manual_external である。
  5. outcome が決済済みで、十分な評価データがある。

自動マーカーは手動らしい証拠より優先されます。不明な role や取引発生元は generic role へ fallback せず隔離されます。この fail-closed 境界により、自動戦略の挙動を人間の嗜好や分析ロールの学びとして再解釈できません。

データモデル

role_cases は role、関連する判断と evaluation run、状況、判断文、outcome state、reflection、provenance、評価資格、timestamp を保存します。FTS と任意の vector index は検索用であり、関係データの判断/評価リンクが source of truth です。

統一チェーンは次のとおりです。

trading_decisions
  → trade_executions / trade_fills
  → position_lifecycles
  → evaluation_runs / evaluation_components
  → methodology_observations and role_cases

ケース単独で取引発生を主張することはできず、リンクされた実行チェーンから事実を継承します。

ロール宣言

分析系 skill は安定した role ID と reflection policy を宣言します。Role registry が起動時に検証し、重複・不明 ID を generic role へ黙って対応付けることはありません。ロール定義は failure mode、成熟期間、outcome probe、reflection prompt を制御します。

Skill は能力 bundle、role はその中の判断コンテキストです。この分離により valuation、momentum、cycle analysis の学びが混ざりません。

リフレクション

対象ケースが成熟すると、reflector はまず outcome を分類します。

  • logic_error:推論が当時利用可能な証拠と矛盾。学習可能。
  • missing_data:取得すべき証拠が不足。学習可能。
  • exogenous:予見不能なイベントに依存。監査用に保持するが guidance は作らない。
  • variance:ノイズと区別不能。guidance は作らない。

学習可能な分類だけが簡潔なロール固有 lesson を受け取ります。処理は role ごとに直列化され、budget gate を通り、fund-moving tool を呼べません。

Runtime モード

ROLE_MEMORY_MODE は起動時に読み込まれ、その process で固定されます。

モード書き込み/評価リコール/注入
off新規ケースなし。既存データは監査用に保持無効
shadow(デフォルト)対象手動ケースを生成・反映無効
activeshadow と同じリフレクション済みケースを対応する分析 role と Institution Trader / PM prompt に提供可能

不正値は警告を記録し shadow に戻ります。Active でも execution tool にケース文を注入しません。SOUL、静的安全ルール、permission gate、明示的なユーザー制約は常に取得ケースより優先されます。

Recall と手動 reflect tool は active のときだけ登録され、shadow は候補ケース生成に必要な store path だけを公開します。Shadow は「モデルがケースを無視できる」という意味ではなく、正式な判断 prompt からケースを取得も受信もできない状態です。

検索制約

Active 検索は role を完全一致で絞り、指定時は symbol と scenario でも絞ります。リフレクション済み、非隔離、評価対象の手動ケースだけが候補です。FTS や embedding で順位付けしても、発生元・role・判断リンク制約は緩和されません。

評価との関係

Role Memory はバージョン付き evaluation run を利用します。同じ判断を複数 benchmark profile で評価でき、replay は新しい run を追加します。明示的に promoted された primary run だけが下流統計を更新できます。因子詳細と欠損品質は evaluation_components に残り、1 つの固定 score へ潰しません。

移行

role_memory 行は role_cases へ移行します。既知 role は原文と provenance を保持し、不明 role は隔離されます。旧 score は監査専用で、新しいメソドロジー/role 統計を更新できません。Trading Memory 全体と同じ checksum 付き backup と保存件数レポートで検証します。

運用確認

  • 正式注入前は ROLE_MEMORY_MODE=shadow で生成・評価を検証する。
  • モード変更後は再起動する。hot switch はしない。
  • doctor/audit 出力で長期 pending、failed、隔離ケースを確認する。
  • ケース欠損時は reflection scheduler より先に、消費済み手動 preview と実行の正確なリンクを確認する。
  • 自動または不明取引の評価資格を手動で反転して「修復」しない。

関連実装:

  • apps/agent/src/memory/role-memory-mode.ts
  • apps/agent/src/memory/role-reflector.ts
  • apps/agent/src/memory/prompt-injection.ts
  • apps/agent/src/tools/role-memory.ts
  • apps/agent/src/memory/trading-memory-migration.ts

目次