Khi việc phải dừng
Skip là khoản vay. Việc security-class không bao giờ được skip một cách im lặng. Auto chia tầng, và Tier-C thì HALT. Trang này là nơi công khai các luật đó.
Trên trang này
Skip là khoản vay, và vay thì phải ghi sổ. Một skip vì lý do security-class không bao giờ được thực hiện trong im lặng, và không bao giờ do planner quyết định. /flow auto chia tầng: việc xanh có thể merge không hỏi, việc security-class thì HALT.
Trang này là nơi operator tra cứu các luật đó. Các file maintainer vẫn là bản chuẩn trong repo; chỉ link ở chân trang.
Security-class halt rules {#security-class-halts}
Các lớp này không bao giờ được liệt kê kiểu “ví dụ …” rồi bỏ lửng phần còn lại. Mỗi lớp dưới đây đều HALT.
- authentication / auth
- authorization
- admin-surface exposure
- tenancy
- payments
- data loss / data migration
- removing or weakening validation
Với bất kỳ lớp nào:
- Operator chấp nhận điểm phơi bày bằng văn bản trong
DEBT.md. Bạn không được quyết thay họ. - Trong
/flow autođây là Tier-C HALT. Dừng và hỏi. Không đi tiếp. - Đóng một run khi còn security debt đang mở cần operator xác nhận một cách tường minh. “Temporary” không được tính là xác nhận.
Skip a gate with debt {#skip-a-gate-with-debt}
Skip là hợp lệ. Skip lặng lẽ thì không.
Ghi lại điểm phơi bày trước, rồi mới skip:
/flow debt add "skip 01-research" "<the exposure, concretely>" "<close before: named condition>"
/flow skip 01-research --reason "…"
Các chốt chặn, theo đúng thứ tự này (chúng trỏ về list các lớp ở trên; không được thay bằng bản rút gọn):
- Stage 05 (contract) không bao giờ được skip. Hãy điều chỉnh contract theo loại dự án thay vì skip. Xem Vì sao contract không bao giờ được skip.
- Lý do security-class thì HALT. Operator chấp nhận điểm phơi bày bằng văn bản trong
DEBT.md. Không bao giờ do planner quyết định. - Một dòng debt không liên quan sẽ không mở stage.
/flow skipchỉ tiến khi có dòng debt đang mở ghi đúng stage đó và lý do không phải security-class.- Sau skip hợp lệ,
planning_completecó thể bỏ qua stage đó để các card không bị kẹt mãi. Dòng debt vẫn mở.
DEBT.md
- Lần skip đầu tiên sẽ tạo
DEBT.md. - Hình thức dòng: thứ bị skip, điểm phơi bày cụ thể, điều kiện đóng có tên, ngày, card.
- [ ] DEBT: <what was skipped> -- <exposure> -- close before: <named condition> -- opened <date> (cards: C-NNN...)
- Đóng run khi còn security debt đang mở cần operator xác nhận một cách tường minh. “Temporary” không được tính là xác nhận.
- Card bị debt chặn thì ở lại
todovới evidence PARTIAL ghi tên debt. Không bao giờ làm dở, không bao giờ làm tròn thành hoàn thành.
Run an auto build {#run-an-auto-build}
/flow auto chạy preflight; đạt thì ghi auto state dùng chung. /flow auto stop trở về chế độ tay. Không có đường tắt ẩn.
Preflight fail-closed:
- mọi card đều có risk đã được phân loại (không
unknown) - card security-class cần xác nhận của một author khác trong
DEBT.md - stage 05 mang bằng chứng
semantic_gatecòn hiệu lực
Rồi với từng card, vòng lặp theo ngôn ngữ của operator là: phân tầng, build trong worktree riêng với subagent scoped, review, bằng chứng, check, merge, deploy, verify live, dán bằng chứng hoàn thành, rồi xong. Dùng các verb /flow workspace để journal không bị thủng. Chạy git worktree add trực tiếp thì không ghi lại gì.
Tầng
| Tầng | Việc | Hành động |
|---|---|---|
| Tier-A | Xanh, không security-class | Auto-merge không hỏi. |
| Tier-B | Sửa được | Một lần sửa bởi subagent mới (two-strikes). Lần đỏ đầu tiên của một card thường không gọi tới engine cross-vendor tính phí. |
| Tier-C | Chạm security-class hoặc skip kèm debt | HALT. Operator chấp nhận bằng văn bản trong DEBT.md. Không bao giờ do planner quyết định. |
Trần cứng (số vòng / token / wall-clock) là bắt buộc. Vượt trần nào → HALT + báo cáo. Vòng không trần là anti-pattern.
Mọi gate đều quyết định dựa trên tín hiệu cơ học (exit code thật, ## Verify chạy thật, check live). Không bao giờ dựa trên tự đánh giá của agent.
Nếu merge song song bị conflict → dừng và lập plan lại. Nghĩa là check overlap đã bị lách.
When the run stops itself {#halts-when-the-run-stops}
Run sẽ HALT và báo cáo. Không bao giờ lặng lẽ đi tiếp. Dừng khi gặp bất kỳ điều nào sau:
- Một trần cứng bị vượt (số vòng / token / wall-clock).
- Tín hiệu ground-truth đỏ mà không sửa được trong two-strikes.
- Chạm vào security-class Tier-C.
- Conflict lúc merge song song (check overlap bị lách: dừng và lập plan lại).
BLOCKED/NEEDS_CONTEXTtừ subagent mà thêm context cũng không gỡ được.
Khi dừng: nêu rõ cái gì đã chặn, cái gì đã xong, debt/blocker đang mở, và 2–4 lựa chọn cụ thể. Đừng vá víu quanh một regression. Để operator quyết định.
Dành cho maintainer (không phải trang công khai): skills/flow/references/debt-and-halts.md, skills/flow/references/auto-run.md, skills/flow/references/attestations.md.