# 保存契約

## 目的

この文書は、固有域が生涯にわたる人物データベースにならないために、**持ち運び可能な状態として何を最小限残してよいか**を定めます。

公開Webや公開MCPを、個人状態の記録元にはしません。

> **保存は本人が管理し、必要最小限で、後から取り消せ、元の情報源より下位に置く。**

---

# 1. 保存してよいもの

持ち運び用の保存データには、次だけを含められます。

- 本人が残すと選んだ`ConditionalHypothesis`
- その根拠へ戻るために必要な`SourceRef`
- 本人が決めた別名の情報
- 各仮説に付いている本人の解釈上の立場
- 各仮説に付いている再表示方針
- 最小限の保存データ自体の管理情報

この保存データは、本人全体を表すものではありません。

---

# 2. 人物側の持ち運びデータへ入れないもの

次は入れません。

- 会話、日誌、作業ログなどの生データ
- 元の情報源を基準として残せる場合の`Experience`の複製
- 既定では`Clue`の中間データ
- `QueryContext`
- 現在意向
- 実行条件
- 現在の状態による修飾
- 外界情報の選択結果を恒久的な人物データとして残すこと
- `ApplicationNote`
- AIが出した推薦履歴を人物の真実として残すこと
- 表示済みCharacter View / キャラシートを人物データそのものとして残すこと
- 特定のAIサービスやモデルの会話状態

本人が、自分の道具で元の情報源そのものを保存することはできます。それはこの人物側保存契約の対象外です。

---

# 3. 本人が選べる保存操作

## 後で使うために保存する

本人が、どの仮説を残すか明示的に選びます。

生成した候補をすべて自動保存しません。

## 今回だけ使う

正常な終了です。持ち運び用の保存データを作る必要はありません。

## 解釈へ異議を出す / 採用しない

過去の根拠を削除せず、`user_position`として保存します。

## もう通常表示しない

`resurface_policy = do_not_resurface`として保存します。

これは表示や利用の方針であり、過去の根拠削除ではありません。

## 通常利用から引退させる

`resurface_policy = retired`として保存します。

引退させても、その仮説が過去に根拠を持っていたかどうかは書き換えません。

## 保存状態から削除する

本人の保存データから、その仮説と、それだけに依存する別名を取り除きます。

保存データから削除しても、元の外部情報源である会話、GitHub、ファイル、日誌などまで削除したことにはなりません。

---

# 4. 読み込み時の扱い

保存データは、再開を便利にする入力であって、絶対的な真実ではありません。

読み込む時は、次を守ります。

- 仮説ID、出典参照、観測時期、本人の立場、再表示方針をそのまま引き継ぐ
- 保存されていたという理由で根拠を強くしない
- 保存済み仮説から現在意向を推測しない
- `do_not_resurface`や`retired`の項目を自動表示しない
- 別名を正式な人物識別子へ統合しない
- 元の情報源を再び読むのは、今回本人が許可した範囲に含まれる場合だけにする

---

# 5. 出典参照

保存する`SourceRef`は、生データの複製ではなく参照です。

後から元の情報源へアクセスできなくなる場合もあります。その場合は、

- その仮説に出典参照があったこと自体は残す
- 必要なら、現在は出典を開けないことを明示する
- 元の内容を勝手に再現しない

出典を開けなくなったからといって、過去の主張が自動的に偽りになるわけではありません。ただし、後から確認しやすい度合いは下がります。

---

# 6. 別名の保存

別名は任意の表示情報です。

保存する場合の規則:

- 別名を決めるのは常に本人
- 一つ以上の保存済み仮説を参照できる
- 改名、分割、統合、非表示、削除は後から変更できる
- 別名が`hypothesis_id`の代わりになることはない
- 別名を削除しても、元の仮説は削除しない

`固有魔法`は別名の呼び方の一つであって、保存形式の基本単位ではありません。

---

# 7. 持ち運び用の保存データ

正式な保存形式は次で定めます。

- `schemas/retained-state.schema.json`

主な項目:

```text
bundle_version
bundle_id
persistence_owner = user_controlled
contains_raw_sources = false
source_refs[]
hypotheses[]
aliases[]
created_at?
note?
```

項目名は互換性のため英字の識別子を使います。意味はこの文書とschemaで定めます。

---

# 8. 公開面との境界

公開Webや公開MCPは、この保存契約とschemaを配布できます。

ただし、実際に個人データが入った保存ファイルを受け取りません。

個人データが入った保存内容の検証は、次のような本人が管理できる場所で行います。

- 利用者が選んだAI環境
- ローカルツール
- 本人が管理する実行器

公開MCPへ送って検証しません。

---

# 9. 保存の原則

> **本人が選んだ解釈を後から再開できる程度に残す。本人全体を再構成できるほど残そうとしない。**
