第 8 章
第八章:git merge --no-fast-forward
他是被光叫醒的。
花蓮的陽光不懂分寸。窗簾只拉了一半,白光從縫隙裡擠進來,不是照在臉上——是整片牆都亮了,房間變成一個過度曝光的相框。
不是家的味道。旅館的冷氣在頭頂嗡嗡地轉,吹出一股洗衣粉和消毒水混合的風。
他的身體先反應。手指碰到床單的觸感——偏滑、偏涼,不是棉的。背脊下面的床墊太軟了,不像漁村側屋那張凹了一個人形的彈簧床,也不像——
像什麼?
像那張他睡了八年的雙人床。靠窗那一側。冬天棉被會被她整個捲走,他只剩一條毯子邊角。他從來沒有抱怨過。不是因為他大方,是因為她捲被子的時候會往他那邊滾半圈,頭髮蹭到他下巴,那個重量比任何被子都暖。
記憶像一條被解開的壓縮檔——不是慢慢展開的那種,是一次性解壓,資料夾套資料夾套資料夾,每一層打開都是他的人生。五歲搬家那天紙箱裡的味道。大學宿舍上鋪床板的嘎吱聲。第一次幫她修電腦時她遞過來的那杯太甜的紅茶。凌晨三點醫院走廊的日光燈,靖晞被推進產房,他在外面走了一百二十七步。然後第二個出來的那個更小、更皺、哭聲更大,他剪臍帶的手在抖。
全部。一次全到。
他閉著眼睛,看著天花板在眼皮內側投下的橘紅色暗影。
旁邊有人在呼吸。
很輕。比冷氣的風聲還輕。但他的耳朵在兩年的漁村裡學會了辨認海浪和風的差別,它現在同樣精準地鎖定了那個頻率——活的、溫的、有節奏的。
他不敢轉頭。
不敢,不是不想。是他不知道轉過去之後要用什麼表情。工程師面對一個崩潰的系統,第一步是看 log。但這個系統的 log 有兩年的空白,而他是造成空白的那個 bug。
他慢慢坐起來。頭暈了一下,房間歪了半秒,然後矯正。身體很虛——像跑完馬拉松的第二天,每一條肌肉都在低聲抗議。
床頭櫃上並排放著兩支手機。她的是新的,螢幕很大,裝了透明軟殼。他的是漁村那支——螢幕裂了一角,沒有殼,機身被魚腥和鹽風養出一層包漿。
旁邊有一杯水。涼的。杯緣沒有水漬,代表放了一段時間。
她倒的。
他伸手拿了那杯水,喝了一口。涼的水經過喉嚨的時候,一個念頭像 error message 一樣彈了出來:這兩年她一個人倒水、一個人關燈、一個人處理所有他不在場的事。而他在一個漁村裡修發電機,連她的名字都不記得。
他把杯子放回去。手沒有抖。
門被推開的時候沒有敲門聲。
是那種只有小孩才會做的開門方式——門把往下壓、整個人的重量掛上去、門砰地彈開撞到牆壁。
晏秋站在門口。七歲。膝蓋上的兩塊 OK 繃還在,其中一塊翹了一角。他的頭髮像鳥窩——昨晚大概在枕頭上轉了十幾圈。他穿著一件太大的 T 恤,下擺蓋過短褲,看起來像一顆穿了帳篷的蘑菇。
他看到床上的人。
零點三秒。
他的身體不需要更多時間。不需要辨認、不需要確認、不需要大人那種「先處理情緒再決定行動」的迴路。他的身體記得那個摸他頭的手,記得那個高度、那個力道、那個掌心的溫度。
他直接衝過來。
跑了四步,第三步被自己的拖鞋絆了一下,沒有減速。第四步膝蓋撞上床沿,整個人撲進那個坐在床上的男人懷裡。力道之大,程諳遠的背撞上了床頭板。
「你欠我兩年的生日禮物。」
這是他說的第一句話。聲音悶在程諳遠的胸口,有點糊,但每個字都聽得見。先算帳。這是晏秋。五歲會對暴龍提出賠償要求的那個孩子,七歲對著失蹤兩年的父親第一句話是清算債務。
然後他哭了。
不是安靜的那種。是七歲男孩不加修飾的哭法——嘴張得很大、聲音很尖、眼淚鼻涕一起來、整件太大的 T 恤都在抖。他的手抓著程諳遠的衣服,抓得很緊,像抓住一個他放手就會消失的東西。
程諳遠的手往下落。
九十公分。
兩年了。在雜貨店門口,手指張開往下伸,什麼都沒碰到。在小學圍牆外面,手指張開往下伸,什麼都沒碰到。在漁村的每一條路上,那隻手一直在找的東西——
碰到了。
他的手落在一顆溫熱的、亂糟糟的頭頂上。掌心貼上去的瞬間,手指自動順著後腦勺的弧度往下滑,在脖子和頭髮的交界處停住。這個動作他在夜市做過一次——那時候他不知道為什麼。現在他知道了。
七歲了。比他記得的重了好多。
門口站著另一個人。
晏禾。他站在門框旁邊,一隻手扶著門框的邊緣,指節發白。他沒有進來。他的臉上什麼表情都沒有——那種只有花了很大力氣才能維持的、什麼都沒有。
他看著弟弟撲進那個男人懷裡。看著那隻手落在弟弟頭上。看著弟弟的肩膀在抖。
他的嘴唇抿成一條線。
程諳遠抬起頭。他看見了門口的晏禾。兩年前他最後一次看到這張臉的時候,它是圓的、軟的、五歲的、會在睡前把玩偶塞進他懷裡說「兔兔要跟你睡」的。
現在這張臉瘦了。下巴的弧度削出了一點稜角,不像七歲的孩子,像一個提前收到帳單的人。
「晏禾。」
他叫了這個名字。聲音低低的,啞的。
晏禾的手指在門框上繃得更緊了。他的腳沒有動。他的下巴微微抬起來,像在扛一個很重的東西不肯放下。
嘴唇的那條線開始顫。
弟弟的哭聲在房間裡迴盪。冷氣嗡嗡地轉。窗簾被風吹得微微飄動。花蓮的陽光仍然不懂分寸地照進來。
晏禾鬆開了門框。
他走進來。一步,兩步,第三步開始跑。不是晏秋那種彈射式的衝刺——腳步聲從一步一拍變成連續的急促踏地,鞋底擦過地板的聲音越來越密,呼吸亂了,停不下來。
他撞進程諳遠的胸口。
拳頭砸下來。
不重。七歲的拳頭能有多重?但每一下都砸在同一個位置,砸在程諳遠的左胸,砸在心臟上方。一下。一下。一下。
「你去哪裡了。」
不是問句。沒有問號。是一個被壓了兩年的句子終於被砸開了出口,帶著所有他從來沒有說過的——每一個「我沒事」、每一個遞給媽媽的衛生紙、每一雙排好的拖鞋、每一次在晏秋面前保持的冷靜。全部碎了。
他的額頭砸進程諳遠的肩窩裡。拳頭停了。肩膀在抖。聲音從喉嚨最底部的地方爬出來,像被石頭壓了很久的水,找到縫了,一股一股地往外湧。
程諳遠的兩隻手臂收緊。左手抱著晏秋,右手抱著晏禾。他的胸口被兩個七歲的重量壓著,背抵著床頭板,頭暈得厲害,眼前的房間在緩慢旋轉。
他什麼都沒有說。
他的下巴壓在晏禾的頭頂上,眼睛閉著。他能感覺到晏禾的心跳——很快,像一隻慌了的小動物。晏秋的哭聲慢慢從嚎啕變成抽噎,濕掉的 T 恤貼在他胸口上。
他張開嘴,想說對不起。但這三個字太輕了,輕到可笑。用三個字去抵兩年的缺席,就像用一行註解去修一個系統性的 bug。修不了。他知道修不了。
所以他只是收得更緊。
孩子被帶出去以後,房間忽然空了很多。
沈靖晞坐在加出來的那張單人床邊。兩張床之間隔了一個床頭櫃。她的手放在膝蓋上,指甲掐進掌心裡——她自己沒注意到。
程諳遠坐在雙人床上。被孩子壓過的衣服皺成一團,胸口有一片濕。他的手擺在兩側,姿勢像一個等待系統診斷的人。
「你⋯⋯」他開口。停住了。「等一下,我想一下。」
她沒有催。兩年前她會催。會說「想什麼想,講就講啊」。現在她不催了。不是因為她變得有耐心,是因為她學會了一件事——有些沉默比話更重。
他想了很久。
「你瘦了。」
她差點笑出來。不是好笑。是荒謬。失蹤兩年的丈夫,恢復記憶後說的第一句完整的話,是一個觀察報告。
她沒有接話。走廊上有人拖行李箱經過,輪子碾過磁磚的聲音很長。冷氣繼續轉。他等著。她也等著。兩個人都在等一個誰都不知道長什麼樣子的東西。
「你的鬍子我沒見過。」她終於說。聲音比她預期的還輕。
「嗯。」他摸了一下下巴。「沒有刮鬍刀。」
沉默。
「你的頭⋯⋯」她的眼睛移到他後腦勺的方向。「那道疤。」
他的手下意識摸了上去,指尖碰到那條凸起的線。「海生伯撿到我的時候就有了。可能是被礁石撞的。我不確定。」
海生伯。撿到。她把這兩個詞在腦子裡翻了一遍,每一個字都在割她。但她的臉上只是微微動了一下,像一扇被風推了又關上的窗。
「你知道你的 Agent 救了我們嗎?」
她說這句話的時候聲音很平。不是感謝、不是控訴、不是撒嬌。是陳述。就像說「今天天氣不錯」。
但她的眼睛不平。眼睛裡面有兩年份的東西——保險公司、評議中心、API 帳單、凌晨三點的對話框、一個人帶兩個孩子搭公車去辦事、一個人學會看 email 裡的英文帳單、一個人決定打電話給一個不熟的人求助。全部裝在「你知道嗎」這三個字後面。
程諳遠安靜了很久。
窗外有車經過。喇叭聲。花蓮的街道在白天很吵。
「⋯⋯但它不是我。」
他的聲音很低。這句話不是在否定 Agent,不是在說「AI 不夠好」。她聽得出來。這是一個工程師把所有的愧疚塞進一個邏輯框架裡——「程式在運行,但寫程式的人不在場」。他在把問題拆解,因為拆解問題是他唯一會的事。
她看了他三秒。
「它當然不是你。」她說。聲音輕了,但硬了。「你不會在我問完問題之後說『你還有其他問題嗎?』你會說『等一下,我查一下』然後查了兩個小時忘記回來。」
他的嘴角動了一下。不算笑。
「但那兩年,」她的聲音又回到那種平,「它在。」
這兩個字之間隔了一個停頓。「它」和「在」之間的空白裡,裝著另一句她沒有說的話——「你不在。」
他聽見了。
他沒有反駁。沒有解釋。沒有說「我也不想的」或「我什麼都不記得」。那些都是對的,但在這個房間裡,對的和有用的是兩回事。
「我想修好這個。」他說。
她的手指鬆開了掌心。指甲在皮膚上留了四道月牙。
「這不是修電腦。」她說。
晚上。孩子們在加出來的那張單人床上擠成一團睡著了。晏秋的腿壓在晏禾身上,晏禾的手搭在弟弟的背上——清醒的時候他不太碰弟弟,睡著了身體倒是誠實。
程諳遠拿起床頭櫃上她的手機。螢幕大、透明軟殼、拿在手裡的重量跟他那支裂螢幕的完全不同。他按下電源鍵,螢幕亮了,滑開鎖屏——她沒有設密碼,跟以前一樣。
主畫面上 App 排得整整齊齊。她以前的手機桌面是一場災難——圖示堆在同一頁,找什麼都要滑半天。現在分了資料夾:「學校」「錢」「生活」「醫院」。兩年教會她的事情都收在這幾個字裡。
他看到了那個圖示。對話框。
他點開。
兩年份的對話紀錄,排列在螢幕上。時間戳從最早排到最近,每一筆都有日期。
最頂端,第一條訊息。
「你在嗎?」
他盯著這三個字。他知道這是對 Agent 說的。他知道 Agent 回了什麼——它回了「在喔」,因為他就是這樣設計的。啟動語設定為任何問候語觸發簡短回應。技術上來說,這是一個正常的使用者行為,Agent 的回覆也在預設範圍內。
但。
她不是在問 Agent 在不在。
她坐在他的椅子上,腳搆不到地面,用不熟悉的機械鍵盤打下這三個字的時候——她在問的是他。
他的拇指往上滑。對話紀錄在螢幕上流過,像一條被壓縮的時間線。
早期的訊息很短。「保險那個要怎麼處理」「帳單上寫的什麼意思」「兩個小孩的學費要繳了」。措辭生硬,像在跟一台機器說話。Agent 的回覆規規矩矩的,帶著他設定的口語化風格,但她沒有接那個風格,每次都直接問下一個問題。
三個月後開始變了。
「它說備註裡有一句話,什麼意思?」——她在問別人這件事,但紀錄裡沒有別人的回覆,只有她自己後來打的:「算了我知道了。」
半年後。訊息的語氣不一樣了。「Agent,晏禾今天在學校被老師叫去,說他都不跟同學講話。你覺得我要怎麼辦?」Agent 回了一段建議。她回:「嗯,試試看。」隔了兩天:「他願意跟我講了。謝謝。」
她在對 Agent 說謝謝。
一年後。訊息變得更自然了。偶爾有碎念。「今天超市週年慶差點被推著走,幸好我長了手肘。」Agent 回了一句「採買辛苦了」。她回:「辛苦什麼,這是戰場。」
他繼續往上滑。
速度越來越快。拇指划過一個月、兩個月、半年。她從生硬到熟練,從只問事務性問題到偶爾聊兩句,從不接 Agent 的語氣到回嘴「你講重點好不好,跟你本人一樣囉唆」。她在學會使用這個工具。不——她在學會跟它相處。就像她當年學會跟他相處一樣,從「蛤你講什麼」到接住他偶爾冒出來的冷笑話。
然後他看到了那一條。
凌晨三點零七分。
「他還會回來嗎?」
Agent 的回覆在下面,隔了一秒鐘的時間戳。
「我沒有這方面的資訊。但你可以隨時問我其他問題。」
他的拇指停在螢幕上。
她在凌晨三點問一個 AI 她的丈夫會不會回來。AI 誠實地回答了它唯一能回答的東西。不是安慰,不是謊言,不是「一定會的」——是「我不知道」。
這就是他的極限。
不是 Agent 的極限。是他的。他能把所有的保單條款灌進去,能設定口語化回覆風格,能寫延時訊息,能在備註裡埋一句「她比我想的還勇敢」。但他不能讓它在凌晨三點說「我會回來」。因為那不是資訊。那是承諾。而承諾這種東西,不能被寫成程式碼。
他按下電源鍵。
螢幕暗下去的瞬間,他在黑色的玻璃面上看到自己的臉——黑的、瘦的、陌生的。他把臉埋進手裡。掌心壓住眼睛,指尖插進頭髮裡,指腹碰到後腦勺那道疤。
房間裡很安靜。孩子的呼吸聲,兩份,節奏不一樣,交錯著。這個聲音他在夢裡聽過——兩年份的夢,追不上、看不清、醒來時枕頭是濕的。
現在他們在三公尺外。呼吸是真的。重量是真的。
他坐在暗下來的房間裡,把臉埋在手裡,很久。
窗邊的光已經從白天的亮白轉成傍晚前的那種淡金色。
沈靖晞站在窗邊。窗戶開了一條縫,花蓮的風帶著山和海之間才有的溫度灌進來。遠處的街道上有摩托車的引擎聲,有人在樓下用台語喊了一句什麼,聽不太清楚。
她看著窗外。不是看什麼具體的東西。就是看著。
身後有腳步聲。很輕。步伐的節奏她認得——偏慢、落腳穩、重心略偏左。兩年不夠改掉一個人走路的方式。
他走到她旁邊。
兩個人之間隔了一個拳頭的距離。窗外的光照在他們臉上,把兩個各自被兩年改變了的人照成同一個顏色。
他的手慢慢伸出去。
她沒有轉頭。
她的手指接住了他的。
不是十指交扣。只是指尖碰著指尖,像兩條斷掉的線,剛剛碰上接點,還沒有焊好。
風從窗縫裡灌進來,吹動了窗簾。遠處的山在傍晚的光裡藍得不太真實。
很安靜。