Cái Bug Đã Ẩn Trong Lớp API
View của bàn đã tải. Canvas đã render. Bàn tồn tại trong database.
Nhưng khi front-end hỏi server về trạng thái hiện tại của bàn — các ghế, stack, ai đang ngồi ở đâu — server trả về 404. Không có gì. Không có ghế, không có dữ liệu game, không có gì để renderer làm việc với.
Canvas trống vì nó không có gì để vẽ.
Đây là giải thích kỹ thuật, giữ ngắn nhất có thể: API gateway phía trước table engine xóa một tiền tố khỏi mỗi URL trước khi chuyển tiếp request. /api/v1/tables/... đến table engine dưới dạng /tables/.... Các route của table engine, như được viết bởi build session, được đăng ký kỳ vọng tiền tố đầy đủ — vậy nên server đang lắng nghe trên /api/v1/tables/... nhưng nhận /tables/.... Mọi request đều trượt.
Không phải lỗi logic. Không phải thuật toán bị hỏng. Một bảng routing với địa chỉ sai. Loại việc chỉ xuất hiện khi bạn test toàn bộ stack cùng nhau.
Mất Bao Lâu Để Tìm Ra?
Từ đầu đến khi sửa: dưới một giờ.
Đó là nhanh. Đây là điều khiến nó nhanh: phương pháp debugging.
Làm việc với một agent AI về cái này không có nghĩa là hỏi "có gì sai?" và hy vọng có câu trả lời. Nó có nghĩa là cho agent context đúng đồng thời — cấu hình proxy xử lý tiền tố, các file đăng ký route trong table engine, log request hiển thị 404 — và yêu cầu nó truy ngược sự không khớp.
Khi những mảnh này hiển thị cùng nhau, agent có thể pattern-match qua một bề mặt mà một kỹ sư con người sẽ mất hai mươi phút chỉ để điều hướng. Agent tìm ra sự không khớp giữa quy tắc rewrite của proxy và đăng ký route trong table engine trong khoảng ba phút.
Cái Bug Đằng Sau Cái Bug
Tìm ra bug routing đã phơi bày cái tiếp theo.
Endpoint giờ phản hồi. Nhưng dữ liệu nó trả về ở định dạng sai.
Table engine nói một ngôn ngữ bên trong: số ghế, mã trạng thái như occupied, số chip thô dưới dạng số nguyên đơn giản. Renderer front-end nói một ngôn ngữ khác: chỉ số ghế, chuỗi tiền tệ định dạng như $235.50, tên trường cụ thể nó kỳ vọng theo hợp đồng từ một định nghĩa kiểu mà nó được viết dựa trên đó.
Không ai viết lớp dịch. Build session đã viết endpoint và nó trả về định dạng nội bộ. Renderer nhận dữ liệu nó không nhận ra và lặng lẽ không sản xuất gì.
Đây là loại bug nổi tiếng khó viết test trước. Bạn phải có cả hai hệ thống chạy, kết nối, và cố gắng nói chuyện với nhau để thấy nó. Không unit test nào cover khoảng cách giữa hai hệ thống khi không hệ thống nào tự nó có bug.
Điều Này Có Nghĩa Gì Cho Phương Pháp Build
Giai đoạn testing không có nghĩa là phương pháp đã thất bại. Nó có nghĩa là phương pháp đã đưa chúng tôi đến testing.
Mọi nền tảng phần mềm đều có một lớp tích hợp nơi các mảnh phải gặp nhau trong thế giới thực. Phát triển spec-driven đưa bạn đến lớp đó nhanh hơn. Nó không bỏ qua nó.
Bài tiếp theo trong loạt này cover điều xảy ra khi chúng tôi áp dụng các bản sửa — và browser vẫn cho thấy cùng kết quả hỏng.
Để xem phương pháp engineering đằng sau cách chúng tôi build — spec, các session, agent làm gì trong một session và kiến trúc sư làm gì — bài viết đầy đủ ở The Salty Korean.
Stay salty.
The Salty Korean
Người sáng lập Salty Poker Network. Viết về poker Texas, xây dựng nền tảng và tương lai của poker trực tuyến. Đọc thêm tại The Salty Korean.