Một từ, một nghĩa
Không mơ hồ với đồng đội, cũng không mơ hồ với agent đang đọc specs.
Không cái nào là vấn đề chất lượng model. Tất cả đều là vấn đề ngữ cảnh — mà ngữ cảnh thì kỹ thuật hoá được.
Bạn dán lại đúng đoạn giải thích kiến trúc đó. Hoặc nhét cả repo vào rồi nhìn context window đầy ứ những thứ tác vụ này không bao giờ đụng tới.
Một yêu cầu nhỏ, và nó lặng lẽ refactor ba module bạn chưa từng nhắc tới. Không nêu ranh giới thì cái gì cũng có vẻ trong phạm vi.
Specs lệch khỏi code trong vòng một tuần. Không ai cập nhật nên không ai tin, rồi agent được cho ăn sự thật cũ — một cách rất tự tin.
Nếu giữ đồng bộ nghĩa là sửa tay tài liệu sau mỗi commit thì sẽ không ai làm. Model phải tự nuôi được, không thì nó chết.
Context là vùng ranh giới mà trong đó mỗi từ chỉ có đúng một nghĩa. Bên trong bạn mô hình hoá entity và usecase; cạnh giữa các context suy ra từ @mention giữa usecase — không vẽ tay.
Không mơ hồ với đồng đội, cũng không mơ hồ với agent đang đọc specs.
DSpecs suy ra thay đổi thật sự chạm tới context nào — bằng duyệt đồ thị, không hỏi LLM.
Prompt nhỏ hơn, ít hallucination hơn, không phí context window cho code không liên quan.
Linter chỉ ra spec đã lệch hoặc còn rỗng ruột; mọi chữ agent muốn sửa đều quay về dạng đề xuất để bạn duyệt.
Bạn duy trì model; specs là build artifact. Một cú bấm compile ra CLAUDE.md, AGENTS.md, Cursor rules và JSON — kèm Constitution ở đầu — rồi giao qua MCP hoặc CLI.
$ dspecs pull ✓ CLAUDE.md (17.8 KB) ✓ AGENTS.md ✓ .cursor/rules/ (10 files) ✓ dspecs.json ## 0. Project Constitution Stack: Next.js · Prisma · PostgreSQL ## 1. Context: Ordering #### Entity: Customer ⭐ root #### Usecase: Checkout — actor: Buyer
$ claude mcp add --transport http dspecs \ https://dspecs.com/api/v1/mcp \ --header "Authorization: Bearer dsp_xxx" # 13 tools available: # get_project_overview · get_context # get_usecase · get_specs · search_specs # list_updates · get_update_delta # set_update_status · propose_spec_change # get_sync_plan · import_model_map # finish_code_map · get_mapping_status
Mỗi context, entity, usecase đều mang codeRef — file và symbol thật thực thi nó. Agent tự map repo; bạn duyệt phần lệch. Không bao giờ xoá gì mà thiếu bạn.
## 2. Code Map Modify only what section 1 requires; read the rest for context. Files not listed here are unaffected — do not modify them. - src/ordering/coupon.service.ts - src/ordering/order.entity.ts
Sửa model và DSpecs bắt đúng phần khác biệt — rồi compile thành một prompt gọn: đã đổi gì, chạm file nào, và phần ngữ cảnh tối thiểu xung quanh. Không compile lại toàn bộ, không giải thích lại.
## 0. Constitution Stack: Next.js · Prisma · PostgreSQL ## 1. What Changed #### UPDATED Usecase: Checkout - contentText: "..." → "...award 1 point per $10" + CREATED Field: Customer.loyaltyPoints (int ≥ 0) ## 2. Relevant Context #### Entity: Customer ⭐ root #### Usecase: Award Loyalty Points · write ## 3. System Map - Ordering ← affected
Model nằm ở trung tâm và vòng lặp khép kín cả hai chiều: bạn sửa specs, agent build, rồi agent đồng bộ code map ngược lại để model không bao giờ tụt hậu.
Trỏ agent vào repo, nó map codebase thành context, entity, usecase — mỗi thứ gắn với file thật. Hoặc bắt đầu từ tài liệu, hoặc từ số không.
Model cộng quy tắc dự án compile thành CLAUDE.md, AGENTS.md và Cursor rules — Constitution luôn render đầu tiên, nên một lát cắt mỏng cũng không mất quy ước của bạn.
Agent kéo đúng thứ nó cần qua MCP: một usecase, một context, hoặc delta của bản update nó đang làm.
Xong việc, agent hỏi DSpecs cần quét lại những gì — một work order tính từ thứ đã đổi trong model, không phải từ lịch sử git — rồi đẩy code map mới. Bạn xem drift và duyệt.
Stack, kiến trúc, quy ước, ràng buộc bất di bất dịch — giữ dưới dạng thư viện các rule có tên thay vì một khối chữ, và chèn ở đầu mọi bản compile và mọi delta.
✓ stack.md default · Next.js · Prisma · PostgreSQL ✓ conventions.md default · DDD, event-driven, i18n ○ legacy-api.md optional · pick per compile $ compile --delta ## 0. Project Constitution ### stack ### conventions ## 1. What Changed …