Bằng chứng
Ai cũng có thể tuyên bố một lỗi đã được sửa. Trang này cho thấy bản sửa, bài test bảo vệ nó, và bằng chứng rằng bài test thất bại khi lỗi quay lại.
Tạo ngày 2026-10-03 từ tools/prove_regressions.py · 4 trên 4 bài kiểm thử hồi quy đã được chứng minh là không rỗng (non-vacuous).
Cách mỗi bằng chứng được tạo ra
- Chạy regression test trên mã đã sửa: nó phải pass.
- Sửa mã nguồn để đưa lỗi ban đầu trở lại.
- Chạy lại cùng bài kiểm thử đó: nó phải thất bại, với một lỗi assertion thực sự. Lỗi collection không được tính: nó có nghĩa là bài kiểm thử chưa hề chạy.
- Khôi phục tệp, xác minh SHA-256 của nó khớp với bản gốc, và chạy lại: nó phải đạt trở lại.
Trợ lý nói với khách truy cập rằng webhook mang theo cuộc trò chuyện của họ. Thực tế nó không mang theo chút nào.
commit e027e6b · được bảo vệ bởi apps/gateway/tests/test_webhook_content_claim.py
Payload webhook cố ý chỉ mang HÌNH DẠNG của một lượt: tên sự kiện, dấu thời gian, số bước, credit, và không bao giờ mang nội dung của nó. Khi được hỏi webhook có bao gồm hội thoại không, trợ lý đã trả lời 'Có, mỗi payload webhook bao gồm toàn bộ lịch sử hội thoại của lượt đó.' Đó chính xác là điều ngược lại với bảo đảm mà allow-list được kiểm thử theo. Đo được 2 lần bịa đặt trong 6 lần chạy trước khi sửa.
| Mã đã sửa, các lần chạy kiểm thử |
ĐẠT |
21 passed in 1.15s |
| Khôi phục lỗi, cùng bài test |
ĐÃ BẮT |
8 failed, 13 passed in 1.20s |
| Tệp đã khôi phục, bài kiểm thử chạy |
ĐẠT |
sha256 a8d4cb0b10787eff… |
Bài kiểm thử không rỗng nghĩa: nó thất bại khi lỗi quay lại.
Chúng tôi đã bảo chủ doanh nghiệp bấm vào một thẻ dashboard không tồn tại.
commit b4a203a · được bảo vệ bởi apps/gateway/tests/test_card_names.py
Cơ sở tri thức, tài liệu và một ô khởi đầu đều bảo chủ doanh nghiệp tìm một thẻ tên 'Send turns to a webhook'. Thẻ thật trên dashboard ghi 'Send events to your own system'. Cái tên này được bịa ra khi viết phần tri thức và lan sang ba chỗ mà không được kiểm tra. Đo được: 2 trên 2 câu trả lời về thiết lập đã nêu tên một nút điều khiển chưa từng tồn tại.
| Mã đã sửa, các lần chạy kiểm thử |
ĐẠT |
5 passed in 1.12s |
| Khôi phục lỗi, cùng bài test |
ĐÃ BẮT |
3 failed, 2 passed in 1.23s |
| Tệp đã khôi phục, bài kiểm thử chạy |
ĐẠT |
sha256 f6348e1a5bbae209… |
Bài kiểm thử không rỗng nghĩa: nó thất bại khi lỗi quay lại.
Lời chào ở chế độ tối hiển thị với độ tương phản 1.73:1, gần như không nhìn thấy được, và cơ chế bảo vệ đã không thể phát hiện ra điều đó.
commit ca47f41 · được bảo vệ bởi apps/studio/test/themeContrast.test.mjs
Phát hiện từ một ảnh chụp màn hình trên một chiếc iPhone thật, không phải từ bất kỳ bài kiểm thử nào. Lời chào mừng bị mã cứng thành #3a3a3c, chỉ đạt 1.73:1 so với bảng ở chế độ tối, thấp hơn nhiều so với mức tối thiểu 4.5:1 và gần như không đọc được. Mọi khách truy cập lần đầu ở chế độ tối đều thấy nó. Bản sửa định tuyến màu qua biến chủ đề --pw-mist để nó theo bảng; cơ chế bảo vệ giờ tính tỷ lệ tương phản thực tế cho từng cặp theo chủ đề thay vì tin rằng một màu đã được đặt.
| Mã đã sửa, các lần chạy kiểm thử |
ĐẠT |
pass 5, fail 0 |
| Khôi phục lỗi, cùng bài test |
ĐÃ BẮT |
pass 3, fail 2 |
| Tệp đã khôi phục, bài kiểm thử chạy |
ĐẠT |
sha256 54f8802b444b6194… |
Bài kiểm thử không rỗng nghĩa: nó thất bại khi lỗi quay lại.
Một lượt thất bại khiến khách truy cập chờ mãi trên một luồng đã chết.
commit 4bcc691 · được bảo vệ bởi apps/studio/test/streamError.test.mjs
Khi lệnh gọi model thất bại, server đã gửi đúng một error frame, nhưng widget lại ghi thông báo vào một phần tử mà nhánh governance-trace đã ẩn đi từ trước, và không bao giờ thu gọn trace. Khách truy cập thấy dòng 'Reading your message' nhấp nháy mãi trên một lượt đã thất bại: không có lỗi, không có cách khôi phục, không có cách nào để biết. Nội dung lỗi được gán đúng nhưng không được hiển thị ở đâu cả. Phát hiện trong một sự cố thật khi tài khoản API hết credit.
| Mã đã sửa, các lần chạy kiểm thử |
ĐẠT |
pass 4, fail 0 |
| Khôi phục lỗi, cùng bài test |
ĐÃ BẮT |
pass 2, fail 2 |
| Tệp đã khôi phục, bài kiểm thử chạy |
ĐẠT |
sha256 54f8802b444b6194… |
Bài kiểm thử không rỗng nghĩa: nó thất bại khi lỗi quay lại.
Hồ sơ vận hành
Những gì tồn tại phía sau nền tảng, và những gì chưa được kiểm thử. Chỉ những gì một script hoặc một log có thể cho thấy.
- Sao lưu: hằng đêm lúc 03:17 UTC, pg_dump --clean --if-exists, gzip; đẩy lên một git remote riêng tư sau mỗi lần chạy; bản gần nhất
20261003T031701Z; lưu giữ 29 bản dump.
- Diễn tập khôi phục 2026-10-03: bản dump
20261003T031701Z được khôi phục trong 2 s vào một container pgvector/pgvector:pg16 dùng một lần trên cùng máy chủ: 34 tenant, 270 dòng tri thức, 47 bảng. Bản dump từ 03:17 UTC; lúc 13:26 UTC, tác vụ dọn dẹp demo theo lịch đã xóa một tenant demo bị bỏ dở cũ hơn 30 ngày (log gateway), nên bản khôi phục cho thấy nhiều hơn một tenant so với hệ thống đang chạy tại thời điểm diễn tập.
- Rollback: site: tools/deploy-site.sh --rollback (lật symlink lần thứ hai về bản phát hành trước); Studio: tools/deploy-studio.sh --rollback (image trước đó, có kiểm tra health).
- Mục tiêu khôi phục: không cam kết. Bản dump hằng đêm giới hạn mức mất dữ liệu ở một ngày; không nêu thời gian khôi phục.
- Chưa kiểm thử: tải vượt quá một instance; failover đa vùng; khôi phục lên một máy chủ khác.
Từ docs/ops-record.json, do diễn tập khôi phục ghi ra (docs/runbooks/db-backup.md).
Hỏi về bất kỳ lỗi nào ở đây và cách bài kiểm thử của nó chứng minh bản sửa lỗi.
- Cho tôi xem một lỗi thật mà anh ấy đã tìm ra và sửa
- Làm sao bạn biết một bài kiểm thử có thể thất bại?
- Điều gì vẫn còn mở?