Jarred Sumner đã vận hành một quy trình đánh giá đối kháng (adversarial-review) được hỗ trợ bởi Claude để viết lại runtime Bun từ Zig sang Rust. Anh ấy đã đẩy hơn một triệu dòng mã qua 6.778 commit và giải quyết 16.000 lỗi trình biên dịch. Nỗ lực này đã chạy 50 quy trình Claude Code, đạt đỉnh với 64 tác nhân Claude chạy đồng thời, và để lại một bộ quy tắc (playbook) có thể tái lập cho các cuộc di chuyển ngôn ngữ quy mô lớn.

Tại sao việc viết lại này lại quan trọng

Đối với bất kỳ dự án nào đang phải vật lộn với mã nguồn cũ (legacy code) hoặc thực hiện một bước chuyển đổi ngôn ngữ chiến lược, "Phương pháp Sumner" cung cấp một khuôn mẫu cụ thể thay vì một lời hứa mơ hồ.

Quy trình biến AI thành một cộng sự, thay vì một sự thay thế

Quy trình của Sumner lặp lại một cách chặt chẽ:

  1. Giao nhiệm vụ – một tác nhân nhận một nhiệm vụ di chuyển cụ thể.
  2. Triển khai – tác nhân thứ hai viết mã Rust.
  3. Đánh giá đối kháng – tác nhân thứ ba giả định rằng mã đó sai, rà soát các thay đổi (diff), và cố gắng chứng minh mọi khẳng định là sai bằng cách sử dụng các tệp nguồn và các bài kiểm tra (tests).
  4. Sửa lỗi – tác nhân triển khai kết hợp các phát hiện của người đánh giá.
  5. Các chốt kiểm soát tự động – trình biên dịch, bộ kiểm thử (test suite) và các kiểm tra phân tích tĩnh (static-analysis) để xác minh các thay đổi.

Quy tắc quan trọng nhất là sự tách biệt. Người viết không bao giờ thấy lập luận của người đánh giá, và người đánh giá không bao giờ thấy ý định của người viết. Bằng cách loại bỏ sự thiên kiến, hệ thống buộc người đánh giá phải săn tìm các lỗi ẩn thay vì chỉ đưa ra một xác nhận "trông có vẻ ổn" (looks good) một cách hời hợt.

Phản hồi có thể kiểm tra được bằng máy của Rust biến hàng ngàn lỗi tiềm ẩn mà con người có thể đọc được thành một hàng đợi có thể quản lý được. Mỗi lỗi trình biên dịch, lỗi borrow-checker, hoặc cảnh báo Clippy đều trở thành một hạng mục công việc mà người đánh giá đối kháng có thể nhắm mục tiêu trực tiếp.

Bộ quy tắc tám giai đoạn

Sumner đã đúc kết quy trình thành tám giai đoạn tuần tự, mỗi giai đoạn có hàng đợi nhiệm vụ, định nghĩa hoàn thành (definition of done), các câu lệnh đánh giá (review prompts) và các chốt kiểm soát tự động riêng:

  • Giai đoạn A – Trích xuất dữ kiện & soạn thảo hướng dẫn – Thu thập các dữ kiện kiến trúc và tạo hướng dẫn di chuyển.
  • Giai đoạn B – Dịch tệp cơ học – Chuyển đổi các tệp Zig thành khung (skeleton) Rust.
  • Giai đoạn C – Khắc phục lỗi trình biên dịch – Giải quyết 16.000 lỗi trình biên dịch được ghi lại trong quá trình dịch.
  • Giai đoạn D – Khớp hành vi runtime – Xác minh rằng đầu ra của Rust phản ánh chính xác hành vi của Zig.
  • Giai đoạn E – Hoàn thiện bộ kiểm thử – Vượt qua mọi bài kiểm tra hiện có.
  • Giai đoạn F – Khôi phục hiệu năng – Loại bỏ bất kỳ sự chậm trễ nào phát sinh do việc viết lại.
  • Giai đoạn G – Trau chuốt chất lượng mã – Áp dụng các mẫu Rust chuẩn (idiomatic Rust patterns) và tái cấu trúc (refactor) để dễ đọc hơn.
  • Giai đoạn H – Củng cố bảo mật – Chạy các đợt kiểm tra mã unsafe (unsafe audits) và xử lý bất kỳ lỗ hổng nào được phát hiện.

Mỗi giai đoạn sẽ dẫn dắt đến giai đoạn tiếp theo, đảm bảo không có bước nào bị bỏ qua và các lỗi hồi quy (regressions) được phát hiện sớm.

Tìm bộ quy tắc ở đâu

Sumner đã mã nguồn mở toàn bộ các mẫu, câu lệnh (prompts) và định nghĩa giai đoạn tại https://github.com/Lumafy/sumner-method. Một bài viết đi kèm sẽ hướng dẫn chi tiết về việc di chuyển Bun: https://dev.to/lumafy/the-sumner-method-what-buns-ai-assisted-zig-rust-rewrite-teaches-about-large-migrations-2gpo. Một cộng đồng Telegram để thảo luận liên tục có tại https://t.me/GyaanSetuAi.