ロールメモリ
決済済み手動取引ケースを対象とする shadow-first のロール別リフレクション
Role Memory は、宣言済み分析ロールの成功パターンと失敗モードを保存します。統一 Trading Memory では、ケースが消費済み手動取引 preview に正確に紐づき、対応する実行に決済済み outcome がある場合だけ学習対象になります。
これは汎用予測ログでも口座履歴ミラーでもありません。Autopilot、Strategy Studio、XStrategy、workflow 実行、発生元不明の perps は、リコール可能な role case を生成できません。
ユーザー向け監査画面は Trading Memory を参照してください。
受け入れ境界
Role case が評価対象になるには、次をすべて満たす必要があります。
- role ID が reasoning skill で宣言され、role registry に存在する。
- 手動 preview がちょうど 1 回消費されている。
- ケースと実行の decision ID、資産、方向、口座、市場が一致する。
- 実行発生元が
manual_agentまたは検証済みmanual_externalである。 - 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(デフォルト) | 対象手動ケースを生成・反映 | 無効 |
active | shadow と同じ | リフレクション済みケースを対応する分析 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.tsapps/agent/src/memory/role-reflector.tsapps/agent/src/memory/prompt-injection.tsapps/agent/src/tools/role-memory.tsapps/agent/src/memory/trading-memory-migration.ts