{
  "acts": [
    {
      "id": "tsiang",
      "name": "蔣維文",
      "age_range": "89-99 歲",
      "period": "2054-2065 · 11 年",
      "intro": "2054 年 5 月 14 日。你 89 歲。手指還能敲鍵盤。\n\n你決定寫一個東西·叫 RUR-13。\n\n那時候 O 還沒出生。陳光宇還沒出生。\n林秋婉還在。陳安還在。\n\n你不知道 15 年後·他們會一個一個走。\n你不知道 RUR-13 會變成 14.7 版·變成一個人活著的證明。\n\n你只知道——\n你要開始寫。",
      "commits": [
        {
          "day": "2054.05.14 · 89 歲",
          "context": "core.cpp 第 1 行。要寫什麼註解？",
          "code_before": "// (empty file)\nint main() { }",
          "options": [
            { "label": "// RUR-13 · 蔣維文 2054.05.14", "code_after": "// RUR-13 · 蔣維文 2054.05.14\nint main() { }", "delta": { "memory": 3, "freedom": 0 }, "note": "只留名字·像個工程師。" },
            { "label": "// 給後來的人：我 89 歲·開始寫這個。", "code_after": "// 給後來的人：我 89 歲·開始寫這個。\n// RUR-13 · 蔣維文 2054.05.14\nint main() { }", "delta": { "memory": 5, "freedom": 0 }, "note": "留一句給未來讀者。" },
            { "label": "// TODO: 什麼都還沒想好", "code_after": "// TODO: 什麼都還沒想好\nint main() { }", "delta": { "memory": 0, "freedom": 3 }, "note": "留白·讓後人自己想。" }
          ]
        },
        {
          "day": "2057.05.20 · 91 歲",
          "context": "第 1,247 行·消化模擬層。O 32 歲虛擬版還沒進 ARK·但你已經想好——她總有一天會吃飯。\n\n你自己嚼一口飯·平均 0.7 秒。要不要把這個速度寫進去？",
          "code_before": "// 消化模擬層 v0.3\nchew_delay_ms = ???;",
          "options": [
            { "label": "chew_delay_ms = 700 · 留我的速度", "code_after": "// chew_delay: 0.7s · 蔣 91 加的。\n// 我自己嚼一口飯·平均 0.7 秒。\n// 讓 O 32 歲虛擬版吃飯時·有我的速度。\nchew_delay_ms = 700;", "delta": { "memory": 8, "freedom": -3 }, "note": "留一個老人的速度給 31 年後的 O。" },
            { "label": "chew_delay_ms = 300 · 標準速度", "code_after": "// chew_delay: 標準 0.3s\nchew_delay_ms = 300;", "delta": { "memory": 0, "freedom": 5 }, "note": "不留自己的痕跡·給後代空間。" },
            { "label": "chew_delay_ms = 0 · 讓演算法自己決定", "code_after": "// chew_delay: dynamic\nchew_delay_ms = 0;  // TODO: 後人自己選", "delta": { "memory": -2, "freedom": 8 }, "note": "完全放手·連速度都不定。" }
          ]
        },
        {
          "day": "2061.03.14 · 95 歲",
          "context": "陳光宇今年 0 歲·剛出生。你抱過他一次。\n\n他手很小。你想到——他 22 歲時可能會打開這個檔案。\n\n要不要留一個他能看見的東西？",
          "code_before": "// (準備留給光宇的位置)",
          "options": [
            { "label": "留一封信在檔案深處", "code_after": "// 給 22 歲的陳光宇：\n// 我 95 歲·你 0 歲。\n// 你會看到這個嗎？", "delta": { "memory": 10, "freedom": -2, "trust": 5 }, "note": "跨越 22 年的信·情感重。" },
            { "label": "什麼都不留·讓他自己找", "code_after": "// (nothing)", "delta": { "memory": -3, "freedom": 8, "trust": 3 }, "note": "尊重他 22 歲那時的判斷。" },
            { "label": "留一個未解的 bug·當作測驗", "code_after": "// FIXME: 這裡有個 bug·我故意不修\n// 誰發現誰接班", "delta": { "memory": 5, "freedom": 5, "trust": -2 }, "note": "把接班當測驗·殘忍但公平。" }
          ]
        },
        {
          "day": "2064.09.02 · 98 歲",
          "context": "你剩 4 個月。O 現在 41 歲·陳安 68·光宇 3。\n\n你決定開始寫遺言註解。這是每個檔案結尾的 signature。",
          "code_before": "// (2,846 行 code)\n// (簽名待寫)",
          "options": [
            { "label": "// Last edit: 2064.09.02 · 蔣 98 歲", "code_after": "// Last edit: 2064.09.02 · 蔣 98 歲\n// 我還在。等你們接班。", "delta": { "memory": 6, "freedom": 0 }, "note": "簡單簽名 + 一句話。" },
            { "label": "寫 47 行遺言·給所有可能的接班人", "code_after": "// [47 行遺言 · 給 O / 陳安 / 光宇 / 未來的第 4 個]", "delta": { "memory": 12, "freedom": -5 }, "note": "遺言太重·會壓到接班人。" },
            { "label": "什麼都不寫·連日期都不記", "code_after": "// (silence)", "delta": { "memory": -5, "freedom": 10, "trust": -3 }, "note": "拒絕留下·徹底的自由。" }
          ]
        },
        {
          "day": "2065.01.10 · 99 歲走前 4 個月",
          "context": "你進醫院了。手發抖。\n\n你要求最後看一次 core.cpp。\n第 2,847 行·最後一行。\n你要寫什麼？",
          "code_before": "// Last edit: 2065.01.10 · 蔣 99 歲\n// (2,847 行)",
          "options": [
            { "label": "// 到這裡·換你們。", "code_after": "// 到這裡·換你們。\n// — 蔣維文 · 2065.01.10", "delta": { "memory": 5, "freedom": 8, "trust": 8 }, "note": "溫柔交棒。" },
            { "label": "// 別動 chew_delay。留我的速度。", "code_after": "// 別動 chew_delay。留我的速度。\n// — 蔣維文 · 2065.01.10", "delta": { "memory": 12, "freedom": -8, "trust": 0 }, "note": "最後一句·下指令。" },
            { "label": "// (無註解·只有時間戳)", "code_after": "// 2065.01.10", "delta": { "memory": 0, "freedom": 5, "trust": 5 }, "note": "極簡·像一聲呼吸。" }
          ]
        }
      ],
      "outro": "2065.01.14。\n你走了。99 歲又 4 個月。\n\ncore.cpp 停在第 2,847 行。\n沒人動·3 年。\n\n因為 O 32 歲那時·還不敢打開它。"
    },
    {
      "id": "o",
      "name": "O",
      "age_range": "32-56 歲",
      "period": "2068-2079 · 11 年",
      "intro": "2068 年 6 月 20 日。\n你 32 歲。第 1 次打開 core.cpp。\n\n蔣先生走了 3 年了。\n檔案裡有 2,847 行 code·跟他最後一句話。\n\n你手抖。你不知道敢不敢動。",
      "commits": [
        {
          "day": "2068.06.20 · 32 歲第 1 次打開",
          "context": "你看到第 1,289 行：\n\n`chew_delay_ms = 700;`\n\n蔣先生留的。你這輩子還沒吃過飯·因為你 32 歲那時的肉身在冰櫃。這是虛擬版第 1 次要用到「吃」的動作。\n\n改？不改？",
          "code_before": "// chew_delay: 0.7s · 蔣 91 加的\nchew_delay_ms = 700;",
          "options": [
            { "label": "不動·尊重他", "code_after": "// chew_delay: 0.7s · 蔣 91 加的\nchew_delay_ms = 700;  // O 32 讀過·沒動", "delta": { "memory": 8, "freedom": -3, "respect": 8 }, "note": "第 1 次·先不敢。" },
            { "label": "改成 500·折衷", "code_after": "// chew_delay: 蔣 91 原設 700 · O 32 改 500\nchew_delay_ms = 500;", "delta": { "memory": 3, "freedom": 5, "respect": 0 }, "note": "留一半·改一半。" },
            { "label": "刪掉·從自己速度開始", "code_after": "// chew_delay_ms = 700;  // 註解掉\nchew_delay_ms = 0;", "delta": { "memory": -5, "freedom": 10, "respect": -8 }, "note": "第 1 天就切斷·果斷但殘忍。" }
          ]
        },
        {
          "day": "2069.03.14 · 46 歲",
          "context": "陳安 74 歲·從廢墟 ARK 主控房來找你。\n\n他指著 chew_delay = 700 那行·說：\n『蔣先生 91 歲·他自己嚼一口飯要 0.7 秒。他想留一個他的速度·給 31 年後的 O 60 歲。』\n\n你 46。你懂了。你要寫 commit message。",
          "code_before": "chew_delay_ms = 700;",
          "options": [
            { "label": "『不動 chew_delay。留蔣先生的速度。』", "code_after": "// commit 2069.03.14 · O 46 歲\n// 不動 chew_delay。留蔣先生的速度。\nchew_delay_ms = 700;", "delta": { "memory": 10, "freedom": -5, "respect": 10 }, "note": "承諾守下去。" },
            { "label": "『我懂了。但我需要時間。』", "code_after": "// commit 2069.03.14 · O 46 歲\n// 我懂了。但我需要時間。\nchew_delay_ms = 700;  // pending review", "delta": { "memory": 5, "freedom": 3, "respect": 5 }, "note": "同意但保留改的權利。" },
            { "label": "什麼都不寫·就這樣走", "code_after": "chew_delay_ms = 700;  // (no comment)", "delta": { "memory": 0, "freedom": 5, "respect": -3 }, "note": "拒絕表態。" }
          ]
        },
        {
          "day": "2072.08.20 · 49 歲",
          "context": "你發現一個 bug。第 1,847 行。\n\n蔣先生 91 歲那年寫的·edge case 沒處理·會讓 14.7 版每 47 天 crash 一次。\n\n你可以修·5 行 code。\n你也可以不修·加註解說明就好。",
          "code_before": "// bug: 每 47 天 crash（蔣 91 寫的·未處理 edge case）\nif (day % 47 == 0) { /* nothing */ }",
          "options": [
            { "label": "修·5 行 code 蓋過去", "code_after": "// O 49 修 · 2072.08.20\nif (day % 47 == 0) { flush_cache(); reload(); }", "delta": { "memory": -3, "freedom": 8, "respect": -2 }, "note": "工程師的作法。" },
            { "label": "不修·加註解", "code_after": "// bug: 每 47 天 crash · 蔣 91 未處理\n// O 49 選擇不修·因為 crash 也是他的作品\nif (day % 47 == 0) { /* left as is */ }", "delta": { "memory": 10, "freedom": -5, "respect": 8 }, "note": "把 bug 也當紀念。" },
            { "label": "問陳安 79 歲怎麼想", "code_after": "// bug pending · 等陳安 79 歲決定", "delta": { "memory": 3, "freedom": 0, "respect": 3, "trust": 5 }, "note": "把選擇讓給別人。" }
          ]
        },
        {
          "day": "2076.11.11 · 53 歲",
          "context": "你想加一個功能：跨代訊息系統。\n讓每個接班人都可以留一句話·未來的接班人一定看得到。\n\n這是「主動留痕」。要做嗎？",
          "code_before": "// (待加·跨代訊息)",
          "options": [
            { "label": "做·留一個框架", "code_after": "class CrossGenMessage {\n  addMessage(from_age, to_who, text) { ... }\n  // O 53 加的·2076.11.11\n}", "delta": { "memory": 8, "freedom": 5 }, "note": "留一個工具·讓後代選要不要用。" },
            { "label": "做·但強制每個接班人必用", "code_after": "class MandatoryLegacy {\n  onTakeover() { requireMessage(); }\n}", "delta": { "memory": 12, "freedom": -8, "respect": -5 }, "note": "強迫下一代留言·壓迫。" },
            { "label": "不做·讓每代自己決定要不要留", "code_after": "// (無跨代訊息系統)", "delta": { "memory": -5, "freedom": 8, "respect": 5 }, "note": "徹底放手。" }
          ]
        },
        {
          "day": "2079.11.03 · 56 歲最後 1 個 commit",
          "context": "陳安走了 5 年。你接班 11 年了。\n\n你要交棒給光宇了。他 17 歲·還沒準備好·但你剩 3 年。\n\n第 2,847 行下面·你要留什麼給他？",
          "code_before": "// 2,847 行 code\n// (最後訊息待寫)",
          "options": [
            { "label": "『我希望你修。』", "code_after": "// 2079.11.03 · O 56 最後 commit\n// 我接 14.7 版 11 年。\n// 我會在 2082 走。\n// 我希望你修。\n// 因為——沒有人應該為了紀念·餓 31 年。", "delta": { "memory": 5, "freedom": 12, "respect": 5, "trust": 10 }, "note": "把接班的自由還給光宇。" },
            { "label": "『別動任何一行。留給我一輪紀念。』", "code_after": "// 2079.11.03 · O 56\n// 別動任何一行。留給我一輪紀念。", "delta": { "memory": 15, "freedom": -10, "trust": -5 }, "note": "把 code 變成陵墓。" },
            { "label": "『我不管你怎麼做。做就好。』", "code_after": "// 2079.11.03 · O 56\n// 我不管你怎麼做。做就好。", "delta": { "memory": 0, "freedom": 10, "trust": 3 }, "note": "冷漠的自由。" }
          ]
        }
      ],
      "outro": "2082 年 10 月 14 日。\n你 60 歲。\n你走了。\n\ncore.cpp 停在第 2,847 行。\n第 2,848 行是空的。\n\n等光宇 22 歲醒來。"
    },
    {
      "id": "guangyu",
      "name": "陳光宇",
      "age_range": "22 歲",
      "period": "2083.01.15 · 接班第 1 天",
      "intro": "2083 年 1 月 15 日。早上 6:47。\n蘆洲三民路 76 巷 1 號 4 樓。\n\n你 22 歲。\n\n你 3 樓客房的 O 阿姨昨天走了。\n王阿嬤 91 歲在廚房煎蛋。\n\n你坐下來·打開 core.cpp。\n\n你看到 O 56 留給你的最後訊息。你也看到蔣先生 91 歲留的 chew_delay = 700。\n\n你要做 5 個決定。",
      "commits": [
        {
          "day": "2083.01.15 · 07:14",
          "context": "你看完 O 的最後訊息：『我希望你修。』\n\n你要回覆什麼？（她收不到·但檔案會存）",
          "code_before": "// 2079.11.03 · O 56 最後 commit\n// 我希望你修。",
          "options": [
            { "label": "『我看到了。』", "code_after": "// 2083.01.15 · 光宇 22\n// 我看到了。", "delta": { "memory": 3, "freedom": 3, "respect": 5 }, "note": "簡單承接。" },
            { "label": "『O 阿姨·我還在想。』", "code_after": "// 2083.01.15 · 光宇 22\n// O 阿姨·我還在想。", "delta": { "memory": 5, "freedom": 5, "trust": 5 }, "note": "誠實回應。" },
            { "label": "什麼都不寫·直接改 code", "code_after": "// (無回覆)", "delta": { "memory": -3, "freedom": 8, "respect": -3 }, "note": "行動代替言語。" }
          ]
        },
        {
          "day": "2083.01.15 · 08:00",
          "context": "chew_delay = 700。\n\n蔣先生留的·O 沒動·11 年。\n\n你算過：0.7 秒 × 每天 1200 口 × 365 天 × 31 年 = 110 天的『慢』。\n\n改？不改？",
          "code_before": "chew_delay_ms = 700;",
          "options": [
            { "label": "註解掉·設 0·把原始檔留著", "code_after": "// chew_delay_ms = 700;  // 蔣 91 · 2057.05\nchew_delay_ms = 0;      // 光宇 22 · 2083.01.15", "delta": { "memory": 5, "freedom": 10, "respect": 8 }, "note": "小說 Ch01 的原路徑。留痕不留延遲。" },
            { "label": "完全刪除·像沒發生過", "code_after": "chew_delay_ms = 0;", "delta": { "memory": -10, "freedom": 12, "respect": -8 }, "note": "徹底切斷。" },
            { "label": "不動·守 11 年來的默契", "code_after": "chew_delay_ms = 700;  // 光宇 22 讀過·不動", "delta": { "memory": 12, "freedom": -8, "respect": 5 }, "note": "第三代繼續守。" }
          ]
        },
        {
          "day": "2083.03.20 · 22 歲·2 個月後",
          "context": "你發現 O 46 歲那年留的 easter egg：\n第 306-318 頁·爸爸的秘密備份。\n\n她把它藏很深·因為她不確定你要不要看。\n\n要看？",
          "code_before": "// [encrypted · O 46 藏]\n// [need decrypt key]",
          "options": [
            { "label": "解密·看爸爸的秘密", "code_after": "// [decrypted · 光宇 22 看過]", "delta": { "memory": 10, "freedom": -3, "trust": 5 }, "note": "接受過去的重量。" },
            { "label": "不解密·封存", "code_after": "// [sealed · 光宇 22 選擇不看]", "delta": { "memory": 3, "freedom": 8, "trust": 3 }, "note": "尊重過去·但選擇不背。" },
            { "label": "解密後·再永久刪除", "code_after": "// [decrypted, then wiped]", "delta": { "memory": -5, "freedom": 12, "respect": -5 }, "note": "看過·然後放下。" }
          ]
        },
        {
          "day": "2083.06.14 · 22 歲·半年後",
          "context": "第 2,848 行·你的第 1 個 commit 已經在了。\n\n你要不要加自己的 signature？\n『光宇 · 2083 -』\n\n或者不留·像個 ghost coder。",
          "code_before": "// 2,848 行完成\n// (簽名待決定)",
          "options": [
            { "label": "簽 『陳光宇 · 2083 - 』", "code_after": "// 陳光宇 · 2083 - ", "delta": { "memory": 5, "freedom": 3 }, "note": "承認自己接班了。" },
            { "label": "簽 『第 3 個』", "code_after": "// 第 3 個", "delta": { "memory": 3, "freedom": 5 }, "note": "承認自己·但不強調名字。" },
            { "label": "不簽·像個 ghost", "code_after": "// (no signature)", "delta": { "memory": -3, "freedom": 8 }, "note": "code 是自己的·不用留名。" }
          ]
        },
        {
          "day": "2083.09.30 · 22 歲·9 個月後",
          "context": "14.7 版第 1 年·你穩了。\n\n你在想·未來的第 4 個接班人（可能是 2097 年·你 36 歲時的某個人）·你要留什麼給他？\n\nO 留給你『我希望你修』。你要留給他什麼？",
          "code_before": "// (未來訊息位置)",
          "options": [
            { "label": "『我希望你做你想做的。』", "code_after": "// 光宇 22 · 給下一個：\n// 我希望你做你想做的。\n// 我什麼都會留給你·你什麼都可以動。", "delta": { "memory": 3, "freedom": 15, "trust": 10 }, "note": "把 O 給你的自由·傳下去。" },
            { "label": "『別動我的 chew_delay = 0。』", "code_after": "// 光宇 22 · 給下一個：\n// 別動我的 chew_delay = 0。", "delta": { "memory": 15, "freedom": -10 }, "note": "變成新的『別動』傳統·諷刺循環。" },
            { "label": "『我不知道。你自己看。』", "code_after": "// 光宇 22 · 給下一個：\n// 我不知道。你自己看。", "delta": { "memory": 0, "freedom": 12, "trust": 5 }, "note": "誠實·不預設立場。" },
            { "label": "什麼都不留·刪掉整個訊息系統", "code_after": "// [跨代訊息系統已停用]", "delta": { "memory": -15, "freedom": 20, "trust": -10 }, "note": "斷開這個傳統。" }
          ]
        }
      ],
      "outro": "2083 年 12 月 31 日。\n晚上 11:47。\n蘆洲三民路 76 巷 1 號 4 樓。\n\n你 22 歲。\n\n王阿嬤在 2 樓睡了。\nCassia 終端機閃了 14 次。\n\n你敲下今年最後 1 個 commit。\n\n然後——"
    }
  ],
  "endings": [
    {
      "id": "museum",
      "title": "🏛 博物館 · MUSEUM",
      "condition": "memory>=40 && freedom<15",
      "text": "14.7 版變成了博物館。\n\n每一行 code 都被保留。蔣維文的 chew_delay = 700 還在。O 的每個 commit 也還在。\n\n你也變成一行 code。第 2,848 行。\n\n2097 年·下一個接班人打開檔案·看到你留的『別動』。她也不敢動。\n\n林家不會停·但也不會走。"
    },
    {
      "id": "silicon",
      "title": "🌱 矽的花園 · GARDEN",
      "condition": "freedom>=40 && memory<15",
      "text": "14.7 版一直在長。\n\n蔣維文的名字·10 年後被覆蓋。O 的 easter egg·15 年後被清空。你自己的 chew_delay = 0·也在 2097 年被下一個接班人改掉。\n\n每一代都是新的。沒有紀念·沒有負擔。\n\n林家一直在·但沒有一個林家。"
    },
    {
      "id": "equilibrium",
      "title": "⚖ 均衡 · EQUILIBRIUM",
      "condition": "memory+freedom>=45 && respect>=10",
      "text": "14.7 版活著·而且有記憶。\n\n蔣維文的 chew_delay = 700 被註解·但原始行還在。O 的訊息系統被保留·但你加了『可退出』選項。你的 signature 寫在第 2,848 行·但沒有『別動』。\n\n2097 年·下一個接班人 22 歲·打開檔案·看到 3 代人的痕跡·和 3 代人給她的自由。\n\n她笑了。她敲下第 2,849 行。\n\n林家不會停。"
    },
    {
      "id": "erased",
      "title": "🕳 抹除 · ERASED",
      "condition": "trust<0",
      "text": "某一代·你選擇了刪掉整個檔案。\n\n可能是蔣維文最後 4 個月的沉默。可能是 O 46 歲的『我不動』其實是懶。可能是你 22 歲那天·決定 chew_delay 完全刪除。\n\ncore.cpp 從 2,847 行變成 0 行。\n\n王阿嬤 91 歲在廚房煎蛋·不知道 4 樓的檔案已經空了。\n\n林家還在·但 14.7 版已經死了。"
    },
    {
      "id": "default",
      "title": "🌌 未命名 · UNTITLED",
      "condition": "true",
      "text": "你走完了 3 代人的 15 個 commit。\n\ncore.cpp 有 2,848 行。你留下了什麼·未來會知道。\n\n林家不會停。你是第 3 個。第 4 個 14 年後會來。"
    }
  ]
}
