Spec-driven development
Spec-driven development

Biến request thành contract, rồi mới thành code đã verify.

CafeKit đưa phần quan trọng ra khỏi chat. Assistant viết contract trước, implement một task packet đã approve, sau đó prove bằng evidence và sync state.

01
Request

Người dùng yêu cầu một thay đổi.

02
Spec

Scope, requirements, design, và tasks thành file bền vững.

03
Develop

Assistant implement một task packet đã approve.

04
Verify

Command thật và runtime proof kiểm tra kết quả.

05
Review

Một pass riêng kiểm tra compliance và risk.

06
Sync

State chỉ được chuyển khi đã có evidence.

Hiểu đơn giản#

Spec-driven development nghĩa là spec là người cầm lái, không phải đoạn chat.

Trong AI coding bình thường, assistant thường làm theo trí nhớ hội thoại. Cách đó mong manh. Request có thể bị tóm tắt sai, scope có thể trôi, và session sau không biết vì sao một quyết định được đưa ra.

CafeKit đổi trọng tâm. Trước khi sửa code, công việc được ghi vào specs/<feature>/. Folder đó trở thành contract chung cho người dùng, assistant, reviewer, và các session sau.

Vòng lặp CafeKit muốn mọi feature đi theo
1. Specify

Viết rõ điều cần xảy ra trước khi sửa code.

2. Build hẹp

Chỉ implement đúng boundary của task đã approve.

3. Prove

Chạy command và ghi lại evidence chính xác.

4. Sync state

Update spec.json và task markdown sau khi có proof.

Assistant được tin vào cái gì#

Assistant nên tin artifact bền vững trong repo trước:

Bên trong specs/<feature>/ có gì
spec.json

Machine state: phase, scope lock, task registry, approvals.

requirements.md

Behavior user nhìn thấy và acceptance criteria.

research.md

Finding và decision có source backing.

design.md

Architecture, contracts, data flow, invariants.

tasks/task-R*.md

Một gói implement gồm files, steps, criteria, evidence.

Điểm quan trọng không phải là CafeKit tạo nhiều file hơn. Điểm quan trọng là mỗi file trả lời một câu hỏi khác nhau:

ArtifactCâu hỏi nó trả lời
requirements.mdProduct cần làm gì?
research.mdFact hoặc decision nào có source backing?
design.mdSystem nên được thiết kế như thế nào?
tasks/task-R*.mdĐơn vị implementation nào đang được approve?
spec.jsonMachine-readable state của feature là gì?

Luật làm việc hằng ngày#

Khi feature đủ quan trọng, dùng luật này:

Dùng /hapo:brainstorm trước chỉ khi request chưa đủ rõ để viết specs. Delivery path chính bắt đầu ở đây:

  1. Chạy /hapo:specs khi goal đã đủ rõ để thành contract.
  2. Không develop khi spec chưa có task packet đã approve.
  3. Chạy /hapo:develop cho từng task packet.
  4. Verify bằng /hapo:test và review bằng /hapo:code-review.
  5. Chỉ chạy /hapo:sync sau khi có proof, hoặc dùng /hapo:sync audit <feature> để repair drift.
Khác gì với prompt bình thường
Ad-hoc prompting
Chat là source of truth
Scope đổi âm thầm
Assistant đoán phần còn thiếu
Review chỉ nhìn diff cuối
CafeKit SDD
File trong repo là source of truth
Scope lock bắt thay đổi phải explicit
Thiếu chi tiết thì quay lại spec
Review so code với contract

Khi nào nên dùng full SDD#

Dùng full path khi work đổi product behavior, chạm nhiều file, đi qua runtime boundary, đổi data/auth/package contracts, ảnh hưởng user, cần review evidence, hoặc có khả năng handoff cho assistant hay teammate khác.

Với copy edit nhỏ hoặc fix một dòng đã rất rõ, full spec flow có thể hơi nặng. Nhưng thói quen vẫn giữ nguyên: nói rõ boundary, chỉ sửa đúng boundary đó, verify kết quả, và không để scope lớn lên âm thầm.

Đọc tiếp ở đâu#

Đọc Workflow chính để thấy toàn bộ command path. Đọc Vòng đời spec khi cần luật chi tiết hơn về spec.json, task packets, validation, và readiness.