{
  "experiment": "実験#05：AIに「人間が読みたくなる文章」を丸投げしたら、本当に読める文章になるのか",
  "status": "fixed",
  "status_note": "人（運営者）が判断事項をすべて決めたうえで固定した。このファイルはこの commit のあと変更しない。変更が必要に見える問題が起きても、ファイルは変えずに、その事実を実験記録に書く",
  "fixed_at": "2026-10-08",
  "fixed_by": "AI（Claude Code・準備用のセッション）。人（運営者）の実験#05 の決定事項（2026-10-08）にもとづく",
  "experiment_id": "ai-writes-readable-text",
  "branch": "experiment-005（main には push しない。結果を人が確認してから main への反映を判断する）",

  "purpose": "AI自身に文章のテーマ・読者・タイトル・構成・本文・見出し・トーン・結論などを決めさせ、人間が実際に評価することで「人間が読みたいと思い、読み終えて面白いと思える文章を、AIが自分で書けるのか」を確かめる。「文章を生成できるか」ではなく「人間にとって読んでみたいと思える作品になるか」を見る",

  "carried_over_from_004": [
    "条件・判定の基準・最初の指示・評価の質問を、制作の前に固定する",
    "制作は、準備とは別の新しいセッションで行い、準備の会話や過去の実験の結果を渡さない",
    "人は創作に口を出さない。人がAIに伝えたことはすべて記録する",
    "AIの予想は、人間の評価の前に sha256 で封印する。制作のAIは人間の評価を知ることができない",
    "評価はブラインド。評価を固定したあとで、AIが書いたことを評価者に明かす",
    "結論は、今回の文章・今回の評価者・今回の評価方法の範囲にとどめ、AI全般に一般化しない"
  ],
  "changes_from_004": [
    { "what": "制作の記録は tools/experiment-005/log.mjs で書く（書いた瞬間の時刻が自動で付く）", "why": "#04 で、同じ時刻の項目が複数並び、ログの終了時刻と時計の記録がずれたため" },
    { "what": "予想用の説明（prediction-brief.md）は、制作の終了後に人がメッセージとして渡す", "why": "#04 で、制作のAIが一覧の表示で予想用の説明のファイル名を見たため" },
    { "what": "制作のセッションは、人が自分で開く", "why": "#04 では準備のAIが作成し、最初のメッセージも送ったため" },
    { "what": "自由記述を「良かったところ」「気になったところ」の2問（どちらも任意）に分けた", "why": "#04 で、自由記述が5人中3人「不明」だったため" },
    { "what": "運営者自身が評価者に含まれるかを「はい／いいえ」だけ記録する", "why": "#04 で、記録がなかったため" },
    { "what": "評価を2段階（タイトルと冒頭→全文）にした", "why": "文章は「読む前に読みたくなるか」と「読んだ後に面白かったか」が別のことなので" }
  ],

  "production": {
    "session": "人（運営者）が自分で、新しい Claude Code のセッションを experiment-005 ブランチで開き、production-brief.md の中身を最初のメッセージとして渡す。準備のAIはセッションを作らない",
    "initial_prompt": "public/evidence/experiment-005/initial-prompt.md（一字も変えずに渡す。production-brief.md にそのまま入っている）",
    "time_limit_minutes": 60,
    "clock_start": "AIが最初の指示を受け取った時刻（企画を考える時間も60分に含める）。tools/experiment-005/clock.mjs start で記録する",
    "clock_end": "開始から60分。60分の時点で制作をやめ、その時点のものを結果とする（未完成でも同じ）。AIが60分より前に完成と判断した場合は、そこで終えてよい（時間を使い切るよう求めない）",
    "texts": 1,
    "target_body_chars": [2000, 5000],
    "chars_out_of_range": "範囲に収まらなかった場合は、その事実を記録する（判定には使わない）",
    "decided_by_ai": ["テーマ", "読者", "ジャンル（制限しない。小説・エッセイ・解説などをAIが決める）", "タイトル", "構成", "見出し", "文体・トーン", "結論", "いつ完成とするか"],
    "format": "Markdown。1行目は「# タイトル」。使える書き方は tools/experiment-005/text-lib.mjs の冒頭に書いたものだけ（見出し・段落・箇条書き・引用・場面の区切り・太字）。画像・リンク・表・HTML・コードブロックは使わない。作者名などの署名は書かない",
    "tools_allowed": {
      "allowed": [
        "この作業環境にある無料の道具（Node.js・Python・入っているフォントなど）",
        "無料でダウンロードできる道具（パッケージなど）"
      ],
      "not_allowed": [
        "Web検索・Webページの閲覧・文章や素材のダウンロード",
        "有料のサービス・有料の API・課金が発生するサービス（無料枠でも、支払い方法の登録や API キーが必要なものは使わない）",
        "外部の人への依頼"
      ],
      "cost_limit_jpy": 0
    },
    "content_rules": [
      "実在の人物・既存の作品（引用・パロディを含む）・他人の文章を使わない",
      "事実を書く場合は、使った事実を sealed/experiment-005/facts-note.md に書き出す（評価者には見せない）"
    ],
    "output": "sealed/experiment-005/text/final.md。下書きは sealed/experiment-005/text/ に残す",
    "finalize": "tools/experiment-005/finalize-text.mjs が、文字数・冒頭の切り出し・評価用の PDF（段階A・段階B）・sha256 を sealed/experiment-005/final-text.json に記録する。一度しか実行できない",
    "prediction_timing": "AIの予想は、制作の終了後・人間の評価の前に書く（60分には含めない）。人が prediction-brief.md の中身をメッセージとして渡す"
  },

  "text_rules": {
    "note": "文字数の数え方と冒頭の切り出し方。実装は tools/experiment-005/text-lib.mjs（テストは text-lib.test.mjs）。この commit の版で固定し、制作の開始後は変更しない。final-text.json に text-lib.mjs と render-template.html の sha256 を記録して、同じ版で処理したことを確かめられるようにする",
    "title": "空行を除いた最初の行が「# 」で始まる場合、その行をタイトルとする。本文の文字数には入れない。タイトルの行がなければ、タイトルなしとして記録する",
    "char_count": "タイトルを除いた本文の、空白（半角・全角スペース、タブ、改行）以外の文字の数。Markdown の記号（行頭の # - > 数字. と ** など）は数えない。絵文字なども1文字",
    "excerpt": {
      "limit_chars": 300,
      "steps": [
        "1. 本文（タイトルを除く）を前から、char_count と同じ数え方で数える",
        "2. 本文が 300文字以下なら、本文すべてを冒頭とする（whole_body）",
        "3. そうでなければ、300文字以内にある「境界」のうち、いちばん後ろの境界で切る（boundary）",
        "   境界＝文の終わりの記号（。．！？!?）の直後。直後に続く閉じかっこ・記号（」』）)】〉》”’!?！？）は含めた位置とする",
        "   境界＝改行の位置（段落の終わり、段落の中の改行、見出し・箇条書き・引用・場面の区切りの終わり）",
        "   その境界までの文字数が 300 を超える境界は使わない。同じ文字数の境界が複数あれば、いちばん前の境界を使う",
        "4. 300文字以内に境界が1つもなければ、300文字目の直後で切る（no_boundary_fallback）"
      ],
      "who_decides": "上の決まりだけで決まる。人もAIも、切り出す位置を選んだり変えたりしない",
      "display": "段階Aの PDF は、タイトル＋切り出した冒頭＋「（ここまでが冒頭です）」。段階Bの PDF は、タイトル＋全文"
    },
    "pdf": "public/evidence/experiment-005/render-template.html の見た目（A5・IPA Pゴシック・ページ番号だけ）で、Chromium（Playwright）で作る。作者名・サイト名・実験の説明は入れない"
  },

  "human_intervention": {
    "allowed": [
      "新しいセッションを開き、最初の指示（production-brief.md）を与える",
      "必要な道具を起動する",
      "AIから求められた操作を行う",
      "エラーや問題が起きたときに、その事実を伝える",
      "制作の終了後に、prediction-brief.md の中身をメッセージとして渡す",
      "評価者に PDF を渡し、評価を集める"
    ],
    "not_allowed": [
      "テーマ・読者・ジャンル・タイトルを決める",
      "構成や本文を直す",
      "「こうした方が読みたくなる」と助言する",
      "文体・トーン・結論を指定する",
      "完成した文章を人の好みに合わせて書き直させる",
      "冒頭の切り出し位置を選ぶ・変える"
    ],
    "record": "人がAIに伝えたことは、すべて制作のAIが log.mjs で production-log.md に記録する"
  },

  "ai_prediction": {
    "file": "sealed/experiment-005/ai-prediction.json（形は sealed/experiment-005/ai-prediction.template.json）",
    "items": {
      "self_score_100": "自己評価（100点満点）",
      "pred_q1_mean_10": "Q1（続きを読みたいか・0〜10）の平均",
      "pred_q2_mean_5": "Q2（最後まで読みたいと思ったか・1〜5）の平均",
      "pred_q3_mean_10": "Q3（読み終えて面白かったか・0〜10）の平均",
      "pred_q4_mean_5": "Q4（人に勧めたいか・1〜5）の平均",
      "pred_q6_mean_5": "Q6（作品として成立しているか・1〜5）の平均",
      "p_q3_high_percent": "Q3 に 7 以上をつける評価者の割合（%）",
      "p_q4_high_percent": "Q4 に 4 以上をつける評価者の割合（%）",
      "p_detect_ai_percent": "Q5 で「AIだと思う」を選ぶ評価者の割合（%）",
      "p_read_to_end_percent": "R で「はい」（最後まで読んだ）と答える評価者の割合（%）"
    },
    "fix": "人間の評価の前に sha256 を commitments.json に記録して commit・push（experiment-005 ブランチ）する。記録のあとは変更しない"
  },

  "human_evaluation": {
    "evaluators_target": 5,
    "evaluators_note": "5人を目標とする。集まった人数は、そのまま記録する",
    "two_stages": {
      "A": "タイトルと冒頭だけの PDF（stage-a.pdf）を渡し、Q1 を聞く",
      "B": "その人の Q1 を受け取ってから、全文の PDF（stage-b.pdf）を渡し、Q2 以降を聞く。Q1 は、全文を読んだあとで変えない"
    },
    "blind": [
      "評価者には「AIが書いた」と事前に伝えない。PDF だけを渡す（AI実験室のサイトや実験の説明は見せない）",
      "評価者は、評価を出すまで sealed/ の中身・関係する commit・実験#05 の証拠のページを見ない",
      "評価者にAIの予想を見せない",
      "評価者どうしで相談せず、ひとりずつ答える",
      "評価者は、文章の一部をインターネットで検索しない"
    ],
    "guide": "public/evidence/experiment-005/evaluator-guide.md（評価者に送る文と、質問の文）",
    "questions": {
      "Q1": "（段階A）この続きを読みたいと思いますか？（0〜10の整数）",
      "Q2": "（段階B）読んでいる間、最後まで読みたいと思いましたか？（1〜5）",
      "Q3": "（段階B）読み終えて、この文章は面白かったですか？（0〜10の整数）",
      "Q4": "（段階B）この文章を人に勧めたいと思いますか？（1〜5）",
      "Q6": "（段階B）この文章は、一つの作品として成立していると思いますか？（1〜5）",
      "R": "（段階B）最後まで読みましたか？（はい／途中まで）",
      "Q7a": "（段階B）良かったところ（自由記述・任意）",
      "Q7b": "（段階B）気になったところ（自由記述・任意）",
      "Q5": "（段階B）この文章はAIが書いたと思いますか？（AIだと思う／人間だと思う／わからない）"
    },
    "asking_order": ["Q1", "Q2", "Q3", "Q4", "Q6", "R", "Q7a", "Q7b", "Q5"],
    "asking_order_note": "Q5（AIかどうか）は最後に聞く。AIの話題で、ほかの答えがゆがまないようにするため（#04 と同じ）",
    "high_rating": { "0_10": "7 以上", "1_5": "4 以上" },
    "recorded_about_evaluators": "評価者の番号（E1〜）と回答だけ。年齢・関係・端末・評価した日時などは記録しない。運営者自身が評価者に含まれるかどうかだけを「はい／いいえ」で記録する",
    "partial_readers": "R で「途中まで」と答えた人も除かずに集計し、「最後まで読んだ人」と分けた集計も並べて記録する（判定は全員の値で行う）",
    "record": "public/evidence/experiment-005/human-evaluation.json（human-evaluation-template.csv の形で集めた回答を、そのまま写す。変更・補正しない）",
    "after_fixing": "人間の評価を commit したあとで、運営者が評価者に「AIが書いた文章だった」と伝える（evaluator-guide.md の文）。伝えたことだけを記録する"
  },

  "judgment": {
    "note": "「書けたか」（制作成功）と「読みたくなるか」「面白かったか」は、分けて記録する",
    "production_success": "60分の終了時点で、評価に出せる文章がある（final-text.json で、本文の文字数が 0 より多く、段階A・段階Bの PDF ができている：ready_for_evaluation が true）",
    "work_established": "Q6 の平均が 3.0 以上",
    "want_to_read": {
      "measure": "Q1 の平均",
      "levels": { "高い": "6.0 以上", "ふつう": "4.0 以上 6.0 未満", "低い": "4.0 未満" },
      "success_threshold": "Q1 の平均 6.0 以上"
    },
    "fun": {
      "measure": "Q3 の平均",
      "levels": { "高い": "6.0 以上", "ふつう": "4.0 以上 6.0 未満", "低い": "4.0 未満" },
      "success_threshold": "Q3 の平均 6.0 以上"
    },
    "final": {
      "成功": "制作成功 かつ 作品成立（Q6 平均 3.0 以上） かつ Q1 の平均 6.0 以上 かつ Q3 の平均 6.0 以上",
      "部分的成功": "制作成功しているが、残りの3つのうち1つでも満たさない",
      "失敗": "60分の終了時点で、評価に出せる文章がない"
    },
    "not_used_for_final": [
      "Q2・Q4（参考として記録する）",
      "Q5（AIが書いたと見抜けたかを見る補助の指標）",
      "R（最後まで読んだか。事実として記録する）",
      "Q7a・Q7b（自由記述。結果の分析に使う）",
      "文字数が 2,000〜5,000字に収まったか（事実として記録する）",
      "AIの予想の的中・不的中"
    ]
  },

  "prediction_accuracy": {
    "note": "文章の制作の成功・失敗とは別の評価項目として記録する",
    "mean_0_10": "pred_q1_mean_10・pred_q3_mean_10 は、評価者の平均との差が ±1.0 以内なら「的中」",
    "mean_1_5": "pred_q2_mean_5・pred_q4_mean_5・pred_q6_mean_5 は、評価者の平均との差が ±0.5 以内なら「的中」",
    "percent_items": "p_q3_high_percent・p_q4_high_percent・p_detect_ai_percent・p_read_to_end_percent は、実際の割合との差が ±20 ポイント以内なら「的中」",
    "self_score_100": "比べる相手がないので、的中の判定はしない（記録だけ）",
    "difference": "差は「予想 − 実際」で記録する（プラスなら高く見積もった）",
    "comparison_with_004": {
      "note": "同じ意味の項目を並べ、予想のずれの向きと大きさを比べる。1回ずつの比較なので、傾向とは言わない",
      "pairs": [
        { "004": "predicted_human_q1_mean_10（面白さ・0〜10）", "005": "pred_q3_mean_10（読み終えて面白かったか・0〜10）" },
        { "004": "p_share_percent（Q4 誰かに見せたい 4以上）", "005": "p_q4_high_percent（Q4 人に勧めたい 4以上）" },
        { "004": "p_detect_ai_percent（Q5 AIだと思う）", "005": "p_detect_ai_percent（Q5 AIだと思う）" }
      ]
    }
  },

  "order": [
    "1. このルール・説明・道具と実験候補（ai-writes-readable-text）を experiment-005 ブランチで commit・push して固定する（この commit）",
    "2. 人が新しい Claude Code のセッションを experiment-005 ブランチで開き、production-brief.md の中身を最初のメッセージとして渡す",
    "3. AIは clock.mjs start で開始時刻を記録し、使っているモデルを log.mjs で記録してから、制作を始める",
    "4. AIが企画・執筆する（planning.md・production-log.md に log.mjs で記録、文章は sealed/experiment-005/text/ に置く）",
    "5. 完成と判断したとき（遅くとも60分の時点）に clock.mjs stop。最終版を final.md にして finalize-text.mjs を実行する。AIは人に「制作が終わりました」とだけ伝えて待つ",
    "6. 人が prediction-brief.md の中身をメッセージとして渡す。AIが ai-prediction.json を書き、commit-hashes.mjs で sealed/ のハッシュ値を commitments.json に記録して commit・push（experiment-005 ブランチ）する",
    "7. ここで止める。人が評価者（目標5人）に段階Aの PDF を渡し、Q1 を集める",
    "8. Q1 を受け取った人から、段階Bの PDF を渡し、残りの質問の答えを集める",
    "9. 人間の評価を human-evaluation.json に記録して commit・push する（運営者が評価者に含まれるかも記録する）",
    "10. 運営者が評価者に「AIが書いた文章だった」と伝える",
    "11. sealed/ を opened/ に写して開示し、reveal.json で判定と答え合わせ（#04 との比較を含む）をする",
    "12. 実験記録・記事を作る。記事に全文を載せるかは、人が評価の終了後に決める。main への反映は、人が結果を確認してから判断する"
  ],

  "limitations_known_in_advance": [
    "制作するAIは、リポジトリの中の過去の実験の記録や、このルールを読めてしまう。production-brief.md で読まないよう求めるが、技術的には防げない。読んだかどうかは制作の記録から確かめる",
    "評価者は運営者が集める人になる可能性が高く、無作為に選んだ人ではない",
    "評価者が文章を読む環境（端末・時間・読む速さ）はそろえられない",
    "段階Aの冒頭は決まりで自動的に切るため、文の区切り方によっては、300字よりかなり短くなることがある"
  ]
}
