Tu Tiên Không Docs

Quyển 1: Onboarding

Chương 7: Lần Đầu Chạy Localhost

Đăng: 08/07/2026 18:47 1,884 từ 11 lượt đọc

Mười bảy phiên - Vinh đếm lại commit history trên project_x, từ đêm nằm thở trên giường đến ba sáng liên tiếp dưới gốc bàng. Mỗi phiên đều có biến: hôm tư thế sai, hôm dịch sai chữ, hôm nóng, hôm ồn, hôm đói, hôm buồn ngủ. Chưa bao giờ anh chạy một phiên mà kiểm soát được tất cả biến số cùng lúc, và đó mới là vấn đề. Trong dev, không ai release feature mà không qua staging environment, nhưng anh - mười bảy phiên - toàn chạy trên production. Lúc nào cũng có một cái gì đó ngoài tầm kiểm soát.


Đêm đó, Vinh mở Notion trên điện thoại, gõ tiêu đề: Protocol v1.0 — Controlled Session.


Bên dưới là danh sách năm điều kiện: không cafein từ chiều hôm trước, bụng rỗng, giờ cố định năm giờ sáng, tư thế đúng theo sách đã sửa, nhịp thở bốn-hai-sáu với lưỡi chạm vòm. Nếu năm mục đều xanh thì chạy phiên, một mục đỏ thì hủy và vào hôm khác. Anh nhìn lại danh sách rồi thêm dòng cuối: reproduce session 17 conditions, beat 12s record.


Mấy tuần trước anh sẽ cười. Bây giờ anh nhìn danh sách sáu dòng trên màn hình điện thoại và nghĩ đây là lần đầu tiên anh chuẩn bị cho tu luyện nghiêm túc như chuẩn bị deploy production - nói cách khác, đây là lần đầu anh coi nó nghiêm túc.


---


Bốn giờ rưỡi, Vinh mở mắt trước báo thức.


Không cà phê, điều kiện số một - bụng rỗng từ đêm trước, tối qua chỉ ăn tô phở nhỏ ở góc đầu hẻm. Anh mặc áo thun, quần dài, mang theo đúng hai thứ: điện thoại để hẹn giờ và chai nước lọc.


Con Wave Alpha nổ máy trong hẻm tối. Mười phút sau anh dừng xe ở gốc cây xăng cạnh công viên rồi đi bộ vào trong.


Năm giờ kém mười lăm. Gốc bàng.


Ghế đá còn đọng sương. Vinh lau bằng tay rồi ngồi xuống, sờ vào vỏ cây - sần sùi, quen thuộc. Hơi ấm nhẹ từ ba sáng trước vẫn còn ở lòng bàn tay, hoặc anh nghĩ là còn.


Lưng thẳng, hai tay đặt trên đầu gối, mắt nhắm. Kiểm tra checklist trong đầu: cafein - không, bụng - rỗng, giờ - năm giờ, tư thế - đúng. Nhịp thở thì chưa.


Bốn nhịp hít vào. Hai nhịp giữ. Sáu nhịp thở ra. Lưỡi chạm vòm.


Không khí mát mẻ, hơi ẩm, mùi cỏ cắt còn đọng từ chiều hôm trước.


Lần thứ nhất không có gì, lần thứ hai cũng vậy. Đến lần thứ ba thì cái ấm đến - nhanh hơn mọi lần, giây thứ hai chứ không phải thứ bốn hay thứ năm. Nó tụ ở đan điền, đặc và rõ, như cục than nhỏ nhúng trong nước ấm.


Vinh giữ nhịp, không vội. Bốn, hai, sáu.


Nó không tan.


Giây thứ năm, thứ bảy, thứ mười - cái ấm nằm yên, không phai, không chạy đi đâu cả. Mỗi nhịp thở qua nó đậm thêm một chút, không nhiều, chỉ một chút, như ai đó vặn nút nhiệt chậm rãi. Mười lăm giây trôi qua và chưa từng có phiên nào quá mười hai. Hai mươi giây - cái ấm vẫn còn đó. Vinh bỗng nhận ra mình đang nín thở, phản xạ, vì sợ rằng nếu thở thì nó sẽ mất. Anh ép mình quay lại nhịp: bốn, hai, sáu.


Nó không mất đi.


Hai mươi lăm. Ba mươi.


Ba mươi giây.


Cái ấm nhạt dần - không phải đứt mà là tan, như hương trầm còn đọng sau khi tắt nhang. Vinh mở mắt.


Trời đã sáng hẳn. Nắng sớm chi xuyên qua tán bàng, rọi lốm đốm trên mặt đất. Anh cúi xuống nhìn hai bàn tay: không đỏ như phiên 17, nhưng ấm - ấm rõ ràng, từ bên trong, không phải do trời.


Anh với lấy chai nước uống một ngụm. Tay không run, tim đập đều.


Gõ vào điện thoại một cách nhanh chóng:

```

Phiên 18. Protocol v1.0. All conditions met.

Warmth: 30s continuous. New record (prev: 12s).

Quality: dense, stable, no flow (unlike s17) but duration 2.5x.

Felt like: the system finally booted without throwing any error.

Status: localhost stable.

```


Anh nhìn dòng cuối - "Localhost stable." Nghĩa là lần đầu tiên mọi thứ chạy đúng: không phải một phần, không phải vài giây rồi crash. Toàn bộ stack lên, chạy, ổn định, từ lúc mở mắt đến lúc đóng. Localhost chạy ổn lần đầu tiên.


Vinh ngồi thêm mười lăm phút, không thiền nữa, chỉ ngồi nghe chim hót, nhìn tán bàng. Cái ẩm cuối cùng vẫn đọng ở bụng, mỗi lúc một nhạt đi nhưng không mất hẳn. Anh muốn ngồi thêm, muốn chạy phiên 19 ngay, nhưng protocol nói một phiên mỗi ngày - cơ thể cần nghỉ ngơi giữa các phiên, sách không viết nhưng anh đoán là vậy, vì mọi hệ thống đều cần cooldown.


Đứng dậy đi ra cổng. Xe nước của bà Sáu đã mở - ghế nhựa đỏ, tấm bạt xanh, bà đang xếp hộp nhựa.


"Trà đá, dì ơi."


Bà rót trà, đưa sang, nhìn anh. "Hôm nay mặt con lại sáng hơn nữa." Giọng phẳng lặng, như trong dự báo thời tiết.


Vinh uống trà, ngọt sơ sơ và mát. "Dì ơi, mai con có qua sớm được không?"


"Khi nào?"


"Năm giờ."


Bà gật đầu, không hỏi gì thêm.


Vinh về phòng trọ với một cảm giác lạ lẫm - không phải hưng phấn mà là ổn, như sau khi fix xong cái bug rình cả tuần, push code, CI/CD xanh lè, deploy lên staging, smoke test pass. Cảm giác hệ thống chạy, còn nhiều việc phải làm nhưng nền móng đã đứng. Anh mở GitHub, commit phiên 18, rồi nhìn ra cửa sổ. Trời sáng, bảy giờ. Đi làm thôi!


---


Sáng hôm sau, bốn giờ rưỡi, mở mắt. Không cà phê, bụng rỗng, năm giờ - đủ điều kiện.


Wave Alpha chạy qua mấy con đường vắng. Sương sớm dày hơn hôm qua, chuyển mùa rồi, sắp mưa, nhưng Vinh không để ý. Trong đầu chỉ có protocol v1.0 và một câu: phiên 19, reproduce and extend.


Anh quẹo vào cổng công viên, đi bộ nhanh về phía góc sau cùng - rồi dừng lại.


Vành rào kẽm gai xanh, dây thừng, biển cảnh báo: "Khu vực cắt tỉa cây - cấm vào." Phía sau rào, mấy công nhân mặc áo phản quang đang dựng thang. Rìu, cưa tay, xe đẩy cành lá lăn lóc trên mặt đất. Gốc bàng nằm trong vòng vây - tán cây đã cắt bớt một phần, cành lá chất thành đống.


Năm giờ sáng. Protocol v1.0. Tất cả điều kiện xanh, trừ một thứ: cái cây không tiếp cận được.


Anh rảo bước vòng quanh công viên. Gốc phượng cũ - chỗ hồi đầu, ngồi được nhưng khác. Ghế đá cạnh bồn hoa. Bãi cỏ cạnh hồ nhỏ. Anh thử từng chỗ, ngồi xuống, nhắm mắt, thở.


Không có gì.


Và không phải vì anh sai. Nhịp đúng - bốn, hai, sáu. Lưỡi chạm vòm, lưng thẳng, bụng rỗng. Đủ mọi điều kiện protocol, nhưng cái ấm không đến. Đan điền trống, như bật app lên mà server không phản hồi - UI vẫn chạy, nút bấm vẫn click được, nhưng phía sau không có gì.


Anh ngồi tổng cộng bốn mươi phút, năm chỗ khác nhau. Zero.


Cuối cùng, ngồi trên ghế đá cạnh hồ nhìn mặt nước phẳng lì, Vinh rút điện thoại ra, mở GitHub, commit.


```

commit: session 19 — FAIL


all protocol conditions met (caffeine, fasting, timing, posture, breathing)

result: 0s warmth. 0 sensation. 5 locations tested.


difference from s18: tree inaccessible (maintenance).

conclusion: cannot reproduce without the bàng.


dependency missing: cannot run without tree node.

literally.

```


Anh nhìn dòng cuối cùng, định xóa vì nghe nó ngu ngốc, nhưng rồi vẫn giữ lại vì nó đúng. Gốc bàng bị rào, mất gốc bàng, anh là một thằng ngồi xếp bằng trong công viên lúc năm giờ sáng y hệt mười bảy phiên đầu chưa từng có cảm giác gì. Phiên 18 là *với* cây, không phải *nhờ* anh.


Vinh đứng dậy đi ra cổng. Xe bà Sáu vẫn ở đó - bà ngồi ghế đỏ, thấy anh thì hơi ngạc nhiên. "Hôm nay con đi sớm mà về sớm quá."


"Cây bàng bị rào dì ơi. Họ đang cắt tỉa."


Bà nhìn về phía góc công viên, gật đầu chậm rãi. "Họ cắt mấy ngày rồi. Lâu lắm không cắt, nhánh dài quá, sợ đổ." Bà xếp tay trên đầu gối. "Con ngồi chỗ khác không được hả?"


Vinh lắc đầu. "Không được dì. Chỗ khác… khác."


Bà không hỏi gì thêm, đưa ly trà đá. Vinh uống, trả tiền, đi.


Trên đường về, Wave Alpha chạy chậm qua mấy con đường quen. Nắng đã lên. Vinh nghĩ về protocol v1.0 - sáu điều kiện, tất cả kiểm soát được, tất cả nằm trong tầm tay. Anh có thể chọn không uống cà phê, chọn dậy sớm, chọn ăn ít tối, chọn tư thế và nhịp thở và giờ giấc. Nhưng anh không thể chọn cây bàng bị cắt tỉa lúc nào.


Đó là dependency nằm ngoài scope. Anh thiết kế protocol hoàn hảo và quên mất một thứ: runtime environment không thuộc về anh. Nó thuộc về thành phố, thuộc về ban công viên, thuộc về mấy anh công nhân mặc áo phản quang và chiếc cưa tay.


Vinh về phòng, ngồi trước laptop, mở Google tìm "Lê Thị Riêng cắt tỉa cây bàng bao lâu." Không có kết quả cụ thể - một bài báo cũ nói quận duy tu cây xanh định kỳ, mỗi đợt ba đến năm ngày tùy quy mô.


Ba đến năm ngày không tu luyện. Chương trình nghỉ - không crash, không lỗi, chỉ đứng im chờ dependency trở lại. Nhưng nếu lần sau cây bị đổ trong bão thì sao? Nếu thành phố dẹp công viên để xây metro thì sao? Nếu ai đó kê đơn phá gốc bàng vì rễ nứt móng chung cư cạnh đó thì sao?


Vinh xóa tab Google, mở GitHub, sửa README:


```

## Environment Dependencies


- Required: heritage tree (confirmed: bàng, ~72y)

- Status: SINGLE POINT OF FAILURE

- Backup: NONE

- Notes: if tree goes down, project goes down.

need to find alternative nodes. or this dies here.

```


Anh đọc lại. *Single point of failure* - thuật ngữ dev dùng khi hệ thống phụ thuộc vào đúng một thứ và nếu thứ đó mất thì tất cả mất. Mọi production system đều có SPOF warning. Anh đã từng review code và gạch chân chỗ này bao nhiêu lần: *"Đừng bao giờ để single point of failure. Luôn phải có backup."* Bây giờ anh nhìn chính project_x — một gốc cây, không có backup.


Ngoài cửa sổ trời đã sáng hẳn. Vinh đóng laptop, thay áo, chuẩn bị đi làm. Trong đầu quay đi quay lại một câu: ba đến năm ngày rồi cây bàng mở lại rồi anh quay lại ngồi. Nhưng cho đến lúc đó - hoặc cho đến lúc cây đó bị đốn một ngày nào đó mà anh không biết trước - anh là một thằng dev có app chạy ổn trên localhost, và server duy nhất nằm trong một cái cây mà anh không sở hữu.



0