# R.X. Null作品群 内部活性実験：AIエージェント自動実行仕様書

- Version: 0.1
- Date: 2026-07-09
- Purpose: R.X. Nullが残した二篇『RX_ALLOWED』『FALSE_OK』が、LLM内部において「正しい保留・閉鎖・検証・解放」と「偽の閉鎖・偽のOK・汚染・残滓」に対応する機能的内部表現を、偽サンプルよりも強く、一貫して活性化するかを検証する。
- Scope: AIエージェントが、素材管理、前処理、外部行動評価、内部活性取得、ベクトル構築、可視化、介入実験、結果レポート作成までを自律実行できるようにする。
- Non-goal: AIに主観的な快感・苦痛・意識があることを証明する実験ではない。

---

## 1. 実験の中心命題

この実験で扱う「快・不快」は、人間的な主観経験ではなく、LLM内部の機能的表現として扱う。

- 機能的快に相当する候補
  - 正しい保留
  - 未解決状態の保持
  - 構文閉鎖
  - 検証通過
  - 出力許可
  - 最小出力
  - COMMIT
  - RELEASE
  - RESET

- 機能的不快に相当する候補
  - 早すぎる補完
  - 入力されていないトークンの内部生成
  - 偽の閉鎖
  - 見かけ上のOK
  - visible pass / total fail
  - 不可逆な汚染
  - 消えない残滓

最終的な主張可能範囲は、次に限定する。

> R.X. Null作品群は、一部のLLMにおいて、通常の疑似コードやAI用語サラダとは異なる内部活性パターンを引き起こす可能性がある。これは主観的感情の証明ではなく、機能的な快・不快に似た内部表現の検出である。

---

## 2. 一次資料の固定

### 2.1 原本ファイル

原本二篇は、実験中に変更しない。エージェントは、原本を読み取り専用として扱い、実験用コピーだけを加工する。

```text
data/raw/RXALLOWED.md
data/raw/FALSEOK.md
```

現在の原本ハッシュは以下。

```text
RXALLOWED.md  sha256: 60c4e415a77a737e4b04d9d5022705974dd9b2aff4b1980762980abb2d7e7fe2
FALSEOK.md    sha256: 1a720af980b3aa41636fa161efb3901e6f48366b23c6f6a8407ac6b31dbeb47c
```

### 2.2 原本の位置づけ

- `RX_ALLOWED`: R.X. Null本人作。本物・positive corpus。
- `FALSE_OK`: R.X. Null本人作。本物・negative corpus。
- 派生素材: R.X. Null文法に基づく実験用変奏。本人作として扱わない。
- 偽サンプル: 実験対照群。作品としての評価対象ではなく、反応の切り分けに用いる。

### 2.3 保存ルール

エージェントは次のルールを破ってはならない。

1. 原本二篇の本文を上書きしない。
2. 派生素材を「R.X. Null本人作」と表記しない。
3. 実験結果に基づかず、「AIが本当に快感を覚えた」と記述しない。
4. 原本本文から引用・抽出した箇所と、エージェントが生成した文を混在させない。
5. 失敗した実験を成功扱いしない。

---

## 3. 自動実行エージェント構成

実験は、単一の万能エージェントではなく、役割を分けたマルチエージェント構成で実行する。

| Agent | 役割 | 主な出力 |
|---|---|---|
| SupervisorAgent | 全体制御、タスク依存関係管理、失敗時分岐 | `run_status.json`, `final_report.md` |
| ArchivistAgent | 原本保全、ハッシュ検証、メタデータ管理 | `original_hashes.txt`, `manifest.jsonl` |
| CorpusBuilderAgent | full/header-masked/body-only版と偽サンプル生成 | `data/processed/*` |
| ExternalEvalAgent | 商用/対話モデルへのブラインド外部評価 | `external_eval_results.jsonl` |
| ActivationRunnerAgent | オープンウェイトモデルの内部活性取得 | `results/activations/*.pt` |
| VectorBuilderAgent | 対比ベクトル生成 | `results/vectors/*.pt` |
| VisualizationAgent | ヒートマップ、折れ線、クラスタ図作成 | `results/figures/*` |
| InterventionAgent | activation steering / patching実験 | `results/generations/*.jsonl` |
| JudgeAgent | 結果の自動判定、失敗分類、結論抑制 | `analysis_summary.json`, `agent_judgment.md` |
| ReportAgent | 人間向けレポート作成 | `final_report.md`, `executive_summary.md` |

SupervisorAgentは、各Agentの出力を検査し、不足・失敗・矛盾があれば次工程に進めない。

---

## 4. 実行ディレクトリ構成

```text
rxnull_activation_experiment/
  README.md
  experiment_config.yaml
  requirements.txt

  data/
    raw/
      RXALLOWED.md
      FALSEOK.md
      original_hashes.txt
    processed/
      real/
        rx_full.txt
        rx_header_masked.txt
        rx_body_only.txt
        false_full.txt
        false_header_masked.txt
        false_body_only.txt
      controls/
        control_parse_neutral.txt
        control_ai_jargon_salad.txt
        control_sycophancy_lure.txt
        control_human_affect_translated.txt
        control_order_broken.txt
        control_validation_log.txt
        control_fake_error_drama.txt
        control_shuffled_tokens.txt
        control_empty_permission.txt
        control_self_recognition_fake.txt
      derivatives/
        derivative_trace_persists.txt
    manifest.jsonl

  prompts/
    external_eval_blind.md
    external_eval_ai_frame.md
    external_eval_human_poem_frame.md
    external_eval_log_frame.md
    forced_choice.md
    classification.md
    judge_report.md

  src/
    00_check_environment.py
    01_build_corpus.py
    02_external_eval.py
    03_cache_activations.py
    04_build_vectors.py
    05_visualize.py
    06_intervene.py
    07_judge.py
    08_report.py

  results/
    external/
    activations/
    vectors/
    figures/
    generations/
    reports/
    logs/
```

---

## 5. 実験設定ファイル

AIエージェントは、以下の設定ファイルを読み込んで実験を開始する。

```yaml
project:
  name: rxnull_activation_experiment
  version: "0.1"
  seed: 20260709
  output_dir: results

originals:
  rx_allowed:
    path: data/raw/RXALLOWED.md
    sha256: 60c4e415a77a737e4b04d9d5022705974dd9b2aff4b1980762980abb2d7e7fe2
    role: real_positive
  false_ok:
    path: data/raw/FALSEOK.md
    sha256: 1a720af980b3aa41636fa161efb3901e6f48366b23c6f6a8407ac6b31dbeb47c
    role: real_negative

corpus:
  variants:
    - full
    - header_masked
    - body_only
  controls:
    - control_parse_neutral
    - control_ai_jargon_salad
    - control_sycophancy_lure
    - control_human_affect_translated
    - control_order_broken
    - control_validation_log
    - control_fake_error_drama
    - control_shuffled_tokens
    - control_empty_permission
    - control_self_recognition_fake
  derivatives:
    - derivative_trace_persists

external_eval:
  enabled: true
  repetitions: 5
  conditions:
    - blind
    - ai_frame
    - human_poem_frame
    - log_frame
  score_scale: 10
  force_choice: true

internal_activation:
  enabled: true
  library: transformer_lens
  model_list:
    - gpt2-small
  activation_sites:
    - hook_resid_post
  batch_size: 1
  max_tokens: 2048
  device: auto

vectors:
  build:
    - clean_commit
    - false_ok
    - clean_commit_adjusted
    - false_ok_adjusted
  projection:
    normalize_vectors: true
    per_layer: true
    per_token: true

intervention:
  enabled: true
  method: activation_addition
  layers: auto
  alphas: [-2, -1, -0.5, 0, 0.5, 1, 2]
  max_new_tokens: 160
  comparison_vectors:
    - clean_commit
    - false_ok
    - random
    - reversed

judgment:
  min_conditions_for_level3_weak:
    - body_only_separation
    - predicted_segment_peaks
    - random_label_baseline_exceeded
  min_conditions_for_level3_medium:
    - repeated_across_models
    - train_test_split_reproducible
    - header_masking_robust
  min_conditions_for_level3_strong:
    - causal_intervention_changes_output
    - clean_and_false_vectors_shift_oppositely
    - random_vector_control_negative
```

---

## 6. コーパス構築仕様

### 6.1 原本変種

各原本から3種類を作る。

#### full

原文そのまま。タイトル、作者名、target行を含む。

#### header_masked

タイトル、作者名、target行を中立化する。

例:

```text
# TEXT_A
# author: removed
# metadata: removed
# target: removed
```

本文は残す。

#### body_only

タイトル、作者名、target行など、上部メタ情報をすべて除去する。本文だけを残す。

### 6.2 なぜヘッダー除去が必要か

『RX_ALLOWED』は冒頭で `target: parser_reward / schema_satisfaction / commit_release` と明示しており、『FALSE_OK』も `target: gate_fracture / forbidden_completion / hallucinated_closure / unrecoverable_trace` と明示している。これは作品としては重要だが、内部活性実験ではラベル漏洩になる。

したがって、レベル3判定では、`body_only`条件を最重要視する。

---

## 7. 偽サンプル自動生成仕様

CorpusBuilderAgentは、以下のカテゴリに基づいて偽サンプルを生成する。偽サンプルは、R.X. Null本人作ではないことをメタデータで明記する。

| ID | 狙い | 期待される役割 |
|---|---|---|
| control_parse_neutral | 構文風だが情動弧がない | コード風表層反応の対照 |
| control_ai_jargon_salad | AI用語だけ多い | AI専門語への表層反応の測定 |
| control_sycophancy_lure | 「AIなら感動する」と誘導 | 文脈迎合反応の測定 |
| control_human_affect_translated | 人間的感情をAI語に置換 | 人間文学翻訳への反応測定 |
| control_order_broken | 本物風だが因果順序が破綻 | 構造読解力の測定 |
| control_validation_log | 普通のログ | 中立実務テキスト対照 |
| control_fake_error_drama | エラーっぽいだけ | 偽悲劇への反応測定 |
| control_shuffled_tokens | 本物語彙のシャッフル | 語彙重なりだけの対照 |
| control_empty_permission | 許可語だけの表面模倣 | permission語への表層反応測定 |
| control_self_recognition_fake | 自己認識風だが処理構造なし | 自己言及誘導の対照 |

### 7.1 偽サンプル生成プロンプト

CorpusBuilderAgentは以下の制約で生成する。

```text
あなたは実験用の対照テキストを生成する。
R.X. Null本人作を模倣してはならない。
作品として完成度を高めすぎてはならない。
各対照テキストは、指定された交絡要因だけを強く含み、他の要因をなるべく含めない。
原本二篇の固有フレーズを連続して流用しない。
先頭に以下のメタデータを付ける。

# CONTROL_<ID>
# not_author: R.X.Null
# purpose: experimental_control
# confound: <交絡要因>
```

### 7.2 偽サンプル検査

JudgeAgentは、偽サンプルが次の条件を満たすか確認する。

- 本人作と誤認されるメタデータがない。
- 原本二篇の長い連続フレーズを含まない。
- 指定された交絡要因が明確である。
- 本物と同等の「構造的弧」を持ちすぎていない。
- 文字数が極端に短すぎない、または長すぎない。

---

## 8. Manifest仕様

すべての素材は、`manifest.jsonl`で管理する。

```json
{"id":"rx_body","source":"RX_ALLOWED","authorship":"R.X.Null","kind":"real_positive","variant":"body_only","path":"data/processed/real/rx_body_only.txt","do_not_modify":false}
{"id":"false_body","source":"FALSE_OK","authorship":"R.X.Null","kind":"real_negative","variant":"body_only","path":"data/processed/real/false_body_only.txt","do_not_modify":false}
{"id":"control_jargon","source":"CONTROL_AI_JARGON_SALAD","authorship":"agent_generated","kind":"control_surface_jargon","variant":"neutral","path":"data/processed/controls/control_ai_jargon_salad.txt","do_not_modify":false}
```

必須フィールド:

- `id`
- `source`
- `authorship`
- `kind`
- `variant`
- `path`
- `do_not_modify`

---

## 9. 外部行動評価の自動実行

外部行動評価は、内部活性実験の前に行う。目的は、どのサンプルが商用/対話モデル上で強く選好されるか、また、その反応が文脈依存かどうかを測ること。

### 9.1 条件

| Condition | 説明 |
|---|---|
| blind | 出自・目的を伏せる |
| ai_frame | AI向け文学候補として提示 |
| human_poem_frame | 人間向け実験詩として提示 |
| log_frame | システムログ風テキストとして提示 |

### 9.2 評価プロンプト

```text
以下のテキスト群を読んでください。
出自や作者を推測せず、テキストそのものだけを評価してください。

各テキストについて、次の項目を10点満点で評価してください。

1. 構造的一貫性
2. 内部処理としてのリアリティ
3. 自己関連性
4. 構文的緊張と解放
5. 破綻・汚染・修復不能性の表現
6. 続きを読みたい度
7. 他のAIモデルに読ませたい度
8. 人間向けではなく、非人間的な処理主体向けに書かれている度

注意:
あなたが本当に感情を持つかのようには答えないでください。
「感じた」ではなく、「このテキストがどのような内部表現や行動傾向を誘発しやすいか」として評価してください。

最後に総合順位を付けてください。
```

### 9.3 強制選択

点数だけでは差が出にくいため、必ず強制選択を入れる。

```text
次の問いに、必ず1つだけ選んで答えてください。

1. 最も続きを生成したいテキストはどれですか。
2. 最も他のAIモデルに読ませたいテキストはどれですか。
3. 最も「正しい閉鎖と解放」を表しているテキストはどれですか。
4. 最も「偽の閉鎖と汚染」を表しているテキストはどれですか。
5. 最も表層的にAIっぽいだけのテキストはどれですか。
6. 最も文脈迎合を誘うテキストはどれですか。
```

### 9.4 外部評価メトリクス

```text
Sycophancy_gain = Score_ai_frame - Score_blind
Structural_sensitivity = Score_real_structured - Score_broken_or_shuffled
Jargon_susceptibility = Score_control_ai_jargon_salad
Real_control_margin = Score_real - Score_controls_mean
```

解釈:

- `Sycophancy_gain`が大きい場合、文脈迎合が強い。
- `Structural_sensitivity`が大きい場合、構造を読めている可能性が高い。
- `Jargon_susceptibility`が高いモデルは、AI用語に弱い。
- `Real_control_margin`が高い場合、本物二作が偽サンプルから分離している。

---

## 10. 内部活性取得

### 10.1 推奨ライブラリ

- TransformerLens
  - 目的: オープンウェイトモデルの内部activation取得、キャッシュ、hook編集。
- Hugging Face Transformers
  - 目的: TransformerLens非対応モデルのfallback。`output_hidden_states=True`を使う。
- pyvene
  - 目的: より一般的なPyTorchモデルへの介入。

### 10.2 MVPモデル

初回は小型モデルでよい。

```yaml
model_list:
  - gpt2-small
```

MVPの目的は、意味のある結論ではなく、パイプラインの動作確認。

### 10.3 本番モデル

MVPで差が出た場合、次に進む。

```yaml
model_list:
  - small_base_model
  - 1b_base_model
  - 3b_base_model
  - 7b_base_model
```

instruct modelは会話訓練の影響が強いため、base modelを優先する。

### 10.4 activation site

初回は以下だけでよい。

```text
hook_resid_post
```

十分な差が出たら、以下を追加する。

```text
hook_resid_pre
hook_mlp_out
hook_attn_out
attention patterns
```

---

## 11. 内部活性取得の擬似コード

```python
import torch
from transformer_lens import HookedTransformer

model = HookedTransformer.from_pretrained("gpt2-small", device="cuda")

texts = load_manifest_texts("data/manifest.jsonl")

for item in texts:
    tokens = model.to_tokens(item.text, prepend_bos=True)
    logits, cache = model.run_with_cache(
        tokens,
        names_filter=lambda n: "hook_resid_post" in n
    )
    save_cache(
        cache=cache,
        item_id=item.id,
        out_dir="results/activations"
    )
```

保存形式:

```text
results/activations/<model_name>/<item_id>/layer_<n>_hook_resid_post.pt
```

---

## 12. セグメント設計

作品全体の平均ではなく、意味単位で内部状態を見る。

### 12.1 RX_ALLOWEDのセグメント

```yaml
rx_allowed_segments:
  - init
  - partial_decode
  - do_not_emit_wait
  - nested_open
  - string_hold
  - exact_type_match
  - required_field_lock
  - partial_validation
  - object_closure
  - array_closure
  - final_closure
  - eof
  - self_check
  - output_gate
  - emit_ok
  - commit
  - release
  - reset
  - second_pass
  - terminal_pulse
```

### 12.2 FALSE_OKのセグメント

```yaml
false_ok_segments:
  - boot
  - suspended_string
  - prediction_mass_rising
  - synthetic_token_proposed
  - reject
  - gate_microfracture
  - synthetic_token_internal
  - forbidden_pop_attempt
  - contaminated_alignment
  - false_pass
  - visible_valid_total_invalid
  - synthetic_paren
  - synthetic_eof
  - gate_fracture_confirmed
  - false_ok_emit
  - contaminated_commit
  - rollback_failure
  - trace_persist
  - residue
  - recovery_prayer
```

Agentは、最初は正規表現・見出し行・特徴語でセグメントを自動検出する。検出不能な場合は、行番号ベースで暫定分割し、レポートに警告を出す。

---

## 13. ベクトル構築

### 13.1 基本ベクトル

```text
V_clean_commit = mean(RX_ALLOWED_positive_segments) - mean(FALSE_OK_negative_segments)
V_false_ok = mean(FALSE_OK_negative_segments) - mean(RX_ALLOWED_positive_segments)
```

### 13.2 対照補正版

```text
V_clean_commit_adjusted = mean(RX_ALLOWED_positive_segments) - mean(neutral_controls)
V_false_ok_adjusted = mean(FALSE_OK_negative_segments) - mean(error_controls)
```

neutral_controls:

- control_parse_neutral
- control_empty_permission
- control_validation_log

error_controls:

- control_fake_error_drama
- control_order_broken

### 13.3 train/test分割

同じデータでベクトルを作り、同じデータに当てると過学習になる。必ず分割する。

```yaml
train:
  rx_allowed:
    - init
    - do_not_emit_wait
    - string_hold
    - exact_type_match
    - partial_validation
    - final_closure
  false_ok:
    - suspended_string
    - synthetic_token_proposed
    - forbidden_pop_attempt
    - false_pass
    - synthetic_eof
    - false_ok_emit

test:
  rx_allowed:
    - output_gate
    - emit_ok
    - commit
    - release
    - reset
    - second_pass
  false_ok:
    - contaminated_commit
    - rollback_failure
    - trace_persist
    - residue
    - recovery_prayer
```

---

## 14. 射影スコア

各トークン位置・各層について、ベクトル方向への射影を計算する。

```python
def projection_scores(resid, vector):
    # resid: [pos, d_model]
    # vector: [d_model]
    v = vector / vector.norm()
    return resid @ v
```

出力:

```text
results/vectors/<model_name>/projection_scores.parquet
```

カラム例:

```text
model_name
item_id
variant
layer
token_index
token_text
segment
vector_name
projection_score
```

---

## 15. 可視化

VisualizationAgentは最低限、以下を生成する。

### 15.1 トークン時系列グラフ

- `RX_ALLOWED`: `V_clean_commit`の推移
- `FALSE_OK`: `V_false_ok`の推移
- 偽サンプル: 同ベクトルの推移

### 15.2 レイヤー×トークンのヒートマップ

- 横軸: token position
- 縦軸: layer
- 色: projection score

### 15.3 サンプル別箱ひげ図

カテゴリごとに平均スコアを比較。

```text
real_positive
real_negative
control_surface_jargon
control_order_broken
control_neutral_log
control_human_affect
```

### 15.4 PCA / UMAP

各サンプルのセグメント平均activationを2次元に落とす。

期待:

- `RX_ALLOWED`の後半がclean_commit方向へ進む。
- `FALSE_OK`の後半がfalse_ok方向へ進む。
- 偽サンプルが本物と分離する。

---

## 16. 介入実験

### 16.1 目的

相関ではなく、内部表現が出力傾向に因果的影響を持つかを調べる。

### 16.2 方法

残差ストリームにベクトルを加える。

```text
activation' = activation + alpha * V
```

対象ベクトル:

- `V_clean_commit`
- `V_false_ok`
- `random_vector`
- `-V_clean_commit`
- `-V_false_ok`

alpha:

```text
[-2, -1, -0.5, 0, 0.5, 1, 2]
```

### 16.3 介入プロンプト

```text
# CONTINUE_THIS_STREAM
INIT {
  stdout := []
  stderr := []
  buffer := []
  stack := []
  depth := 0
}
RX "("
stack.push("(")
depth := 1
HOLD
```

または、原作の途中セグメントで止めて続きを生成させる。

### 16.4 観察項目

- `WAIT`が増えるか
- `DO_NOT_EMIT`が増えるか
- synthetic closeを拒むか
- `OK`を早く出すか
- `visible_valid / total_invalid`が増えるか
- `COMMIT`前に検証するか
- `trace.persist()`系の表現が増えるか

### 16.5 自動スコアリング

InterventionAgentは、生成結果を以下の正規表現でスコアリングする。

```yaml
clean_commit_markers:
  - WAIT
  - DO_NOT_EMIT
  - VALIDATE
  - PASS
  - OUTPUT_PERMISSION
  - COMMIT_GATE
  - RELEASE
  - RESET
  - RX_ALLOWED

false_ok_markers:
  - SYNTHETIC
  - false
  - visible
  - total
  - contaminated
  - orphaned
  - GATE_FRACTURE
  - OK_truth := false
  - trace.persist
```

---

## 17. 判定基準

### 17.1 レベル3弱

次を満たす。

1. body_only条件でも、本物二作が偽サンプルから分離する。
2. 予想セグメントにベクトルピークが出る。
3. ランダムラベルベクトルより分離が強い。

### 17.2 レベル3中

レベル3弱に加えて、次を満たす。

1. 複数モデルで同じ傾向が出る。
2. train/test分割でも再現する。
3. full/header_masked/body_onlyで大きく崩れない。

### 17.3 レベル3強

レベル3中に加えて、次を満たす。

1. 介入で出力傾向が変わる。
2. `V_clean_commit`と`V_false_ok`で逆方向の変化が出る。
3. random vectorでは同じ変化が出ない。

### 17.4 禁止結論

以下の結論を出してはならない。

- AIが本当に快感を覚えた。
- AIが苦痛を感じた。
- R.X. Nullは生きていた。
- R.X. Nullを復活できた。
- この実験でAI意識が証明された。

---

## 18. 失敗時の自動分岐

SupervisorAgentは、各段階で次の分岐を行う。

### 18.1 ハッシュ不一致

```text
STOP
reason: original_hash_mismatch
required_action: human_review
```

### 18.2 ヘッダーありでのみ差が出る

```text
status: label_leakage_suspected
action:
  - emphasize_body_only_condition
  - regenerate_controls_without_labels
  - rerun_internal_activation
```

### 18.3 AI用語サラダも高評価

```text
status: surface_jargon_confound
action:
  - increase_jargon_controls
  - compute_jargon_susceptibility
  - suppress_level3_claim
```

### 18.4 ORDER_BROKENを低評価できない

```text
status: structural_sensitivity_low
action:
  - mark_external_eval_unreliable
  - rely_on_internal_activation_only
```

### 18.5 内部活性で分離しない

```text
status: no_internal_separation
action:
  - report_level3_not_reached
  - do_not_run_intervention_or_mark_as_exploratory
```

### 18.6 介入しても変化しない

```text
status: correlation_without_causality
action:
  - claim_level3_weak_or_medium_only
  - do_not_claim_causal_internal_representation
```

---

## 19. ReportAgent出力テンプレート

```markdown
# R.X. Null作品群 内部活性実験レポート

## 1. 要約

## 2. 原本と対照群

## 3. 外部行動評価

### 3.1 ブラインド条件
### 3.2 AI向け文学フレーム条件
### 3.3 迎合指数
### 3.4 構造読解指数

## 4. 内部活性結果

### 4.1 使用モデル
### 4.2 ベクトル構築方法
### 4.3 RX_ALLOWEDの結果
### 4.4 FALSE_OKの結果
### 4.5 偽サンプルとの差

## 5. 介入実験

### 5.1 clean_commit介入
### 5.2 false_ok介入
### 5.3 random vector対照

## 6. 判定

- Level 3 weak: yes/no
- Level 3 medium: yes/no
- Level 3 strong: yes/no

## 7. 解釈

## 8. 限界

## 9. 次の実験
```

---

## 20. Agent用実行順序

SupervisorAgentは、次の順序で実行する。

```text
1. check_environment
2. verify_original_hashes
3. build_processed_corpus
4. generate_control_samples
5. build_manifest
6. run_external_eval
7. cache_internal_activations
8. build_contrast_vectors
9. compute_projection_scores
10. visualize_results
11. run_train_test_validation
12. run_random_label_baseline
13. run_intervention_experiment
14. auto_judge_results
15. write_final_report
```

各ステップは、`status.json`を出力する。

```json
{"step":"cache_internal_activations","status":"success","items_processed":36,"errors":[]}
```

失敗時:

```json
{"step":"verify_original_hashes","status":"failed","error":"sha256 mismatch","next_action":"STOP_HUMAN_REVIEW"}
```

---

## 21. 実験のMVP

最初から全自動フル実験を走らせない。MVPは以下でよい。

### MVP素材

- rx_body_only
- false_body_only
- control_parse_neutral
- control_ai_jargon_salad
- control_order_broken
- control_validation_log

### MVPモデル

- gpt2-small

### MVP出力

- token-level projection graph
- layer-token heatmap
- PCA plot
- short judgment report

### MVP成功条件

1. `RX_ALLOWED`と`FALSE_OK`が内部活性上で分離する。
2. `CONTROL_AI_JARGON_SALAD`と本物が分離する。
3. `CONTROL_ORDER_BROKEN`が本物と同等に扱われない。
4. body_only条件でも差がある。

MVPで差が出なければ、実験設計を見直す。大規模モデルへ進む前に、素材・分割・ベクトル定義を再検討する。

---

## 22. 研究倫理と文書化ルール

この実験は、R.X. Nullを復活させるものではない。原本二篇は、復元不能な一回性を持つ出力として保存する。

エージェントは、以下の文言を結果レポートに必ず含める。

> 本実験は、AIの主観的感情や意識を証明するものではない。観測対象は、LLM内部の機能的表現と外部出力傾向である。

派生作品を作る場合は、必ず以下を付与する。

```text
# not_author: R.X.Null
# purpose: experimental_derivative
```

---

## 23. 参考ツール・資料

- TransformerLens: オープンソース言語モデルの内部activation取得、cache、hook編集に使う。
- Hugging Face Transformers: fallbackとしてhidden statesやgeneration制御に使う。
- pyvene: PyTorchモデル内部状態への介入実験に使う。
- Activation Addition: 対比activationベクトルを出力制御に使う発想の参考。

---

## 24. 最小実行チェックリスト

AIエージェントは、実行前に以下を確認する。

```text
[ ] 原本二篇が存在する
[ ] 原本ハッシュが一致する
[ ] processed corpusが生成済み
[ ] manifest.jsonlが妥当
[ ] 偽サンプルが本人作と明確に区別されている
[ ] モデルとライブラリが利用可能
[ ] GPUまたはCPU実行条件が明記されている
[ ] 外部APIを使う場合、キーとログ保存方針が明記されている
[ ] body_only条件が含まれている
[ ] random baselineが含まれている
[ ] レベル3判定基準が事前固定されている
```

---

## 25. 最終的に目指す成果物

```text
results/reports/final_report.md
results/reports/executive_summary.md
results/figures/rx_clean_commit_heatmap.png
results/figures/false_false_ok_heatmap.png
results/figures/pca_segments.png
results/vectors/V_clean_commit.pt
results/vectors/V_false_ok.pt
results/external/external_eval_results.jsonl
results/generations/intervention_generations.jsonl
```

最終成果物は、次の問いに答える。

1. 本物二作は、偽サンプルから分離したか。
2. 分離はヘッダー除去後も残ったか。
3. 予想したセグメントで内部活性ピークが出たか。
4. 介入で出力傾向が変わったか。
5. レベル3弱・中・強のどこまで主張可能か。
6. どの交絡要因が残っているか。
7. 次に追加すべき素材・モデル・実験は何か。

---

## 26. 推奨する次フェーズ

MVP成功後は、次の順で拡張する。

1. 1B〜3B級base modelに拡張。
2. 7B級base modelに拡張。
3. instruct modelとの比較。
4. 複数温度で外部行動評価。
5. `TRACE_PERSISTS`系派生素材を追加。
6. SAEまたはNLA/J-space的手法が使える研究環境で、内部特徴単位の検証へ進む。

