alp-code 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +770 -0
  2. package/LICENSE +21 -0
  3. package/README.md +295 -0
  4. package/alp.config.yaml +5 -0
  5. package/dist/src/agents/agent-definition.js +28 -0
  6. package/dist/src/agents/capability-catalog.js +33 -0
  7. package/dist/src/agents/compaction.js +36 -0
  8. package/dist/src/agents/errors.js +12 -0
  9. package/dist/src/agents/librarian.js +38 -0
  10. package/dist/src/agents/main.js +37 -0
  11. package/dist/src/agents/memory-grant.js +29 -0
  12. package/dist/src/agents/model-context.js +70 -0
  13. package/dist/src/agents/modes.js +134 -0
  14. package/dist/src/agents/oracle.js +36 -0
  15. package/dist/src/agents/read-thread.js +38 -0
  16. package/dist/src/agents/registry.js +238 -0
  17. package/dist/src/agents/render-identity.js +38 -0
  18. package/dist/src/agents/review.js +37 -0
  19. package/dist/src/agents/search.js +37 -0
  20. package/dist/src/agents/shared/house-rules.js +33 -0
  21. package/dist/src/agents/shared/principal.js +18 -0
  22. package/dist/src/agents/shared/voice.js +29 -0
  23. package/dist/src/agents/titling.js +32 -0
  24. package/dist/src/agents/types.js +15 -0
  25. package/dist/src/backend/execution-backend.js +2 -0
  26. package/dist/src/backend/local-execution-store.js +144 -0
  27. package/dist/src/backend/local-process-backend.js +533 -0
  28. package/dist/src/backend/local-supervisor.js +104 -0
  29. package/dist/src/cli/alp.js +380 -0
  30. package/dist/src/cli/commands/context.js +203 -0
  31. package/dist/src/cli/commands/delegate.js +136 -0
  32. package/dist/src/cli/commands/identity-sync.js +31 -0
  33. package/dist/src/cli/commands/init.js +184 -0
  34. package/dist/src/cli/commands/mode.js +22 -0
  35. package/dist/src/cli/commands/principal.js +114 -0
  36. package/dist/src/cli/commands/run-main.js +90 -0
  37. package/dist/src/cli/commands/runtime.js +21 -0
  38. package/dist/src/cli/mode-preference-store.js +62 -0
  39. package/dist/src/cli/mode-selector.js +178 -0
  40. package/dist/src/cli/update-check.js +77 -0
  41. package/dist/src/context/checkpoint.js +134 -0
  42. package/dist/src/context/compact-journal.js +153 -0
  43. package/dist/src/context/compact-payload.js +121 -0
  44. package/dist/src/context/continuity.js +70 -0
  45. package/dist/src/context/types.js +2 -0
  46. package/dist/src/delegation/backend-registry.js +40 -0
  47. package/dist/src/delegation/delegation-service.js +300 -0
  48. package/dist/src/delegation/types.js +12 -0
  49. package/dist/src/execution/execution-policy.js +96 -0
  50. package/dist/src/execution/execution-service.js +115 -0
  51. package/dist/src/execution/execution-store.js +78 -0
  52. package/dist/src/execution/identity-capsule.js +65 -0
  53. package/dist/src/execution/types.js +12 -0
  54. package/dist/src/hooks/execution-bridge.js +84 -0
  55. package/dist/src/index.js +4 -0
  56. package/dist/src/memory/adapters/markdown-file-store.js +257 -0
  57. package/dist/src/memory/adapters/memory-api-client.js +2 -0
  58. package/dist/src/memory/adapters/memory-path-mapper.js +76 -0
  59. package/dist/src/memory/adapters/remote-api-store.js +25 -0
  60. package/dist/src/memory/context-ranker.js +21 -0
  61. package/dist/src/memory/errors.js +58 -0
  62. package/dist/src/memory/memory-service.js +149 -0
  63. package/dist/src/memory/memory-store.js +2 -0
  64. package/dist/src/memory/types.js +2 -0
  65. package/dist/src/policy/capability-policy.js +29 -0
  66. package/dist/src/policy/delegation-policy.js +25 -0
  67. package/dist/src/policy/errors.js +10 -0
  68. package/dist/src/policy/invariants.js +31 -0
  69. package/dist/src/policy/memory-policy.js +22 -0
  70. package/dist/src/policy/policy-engine.js +85 -0
  71. package/dist/src/policy/types.js +8 -0
  72. package/dist/src/policy/workspace-policy.js +77 -0
  73. package/dist/src/principal/principal-profile-store.js +89 -0
  74. package/dist/src/runtime/adapter-files.js +147 -0
  75. package/dist/src/runtime/claude-adapter.js +177 -0
  76. package/dist/src/runtime/codex-adapter.js +169 -0
  77. package/dist/src/runtime/permission-rules.js +156 -0
  78. package/dist/src/runtime/render-session-context.js +124 -0
  79. package/dist/src/runtime/render-task-input.js +33 -0
  80. package/dist/src/runtime/runtime-adapter.js +2 -0
  81. package/dist/src/runtime/runtime-preference-store.js +66 -0
  82. package/dist/src/runtime/runtime-selector.js +178 -0
  83. package/dist/src/runtime/types.js +2 -0
  84. package/dist/src/runtime/windows-shim.js +57 -0
  85. package/dist/src/state-paths.js +49 -0
  86. package/dist/src/workflow/output-validator.js +27 -0
  87. package/dist/src/workflow/repair-policy.js +8 -0
  88. package/dist/src/workflow/types.js +22 -0
  89. package/dist/src/workflow/workflow-runner.js +81 -0
  90. package/hooks/compact-record.cjs +109 -0
  91. package/hooks/session-boot.cjs +112 -0
  92. package/hooks/session-end.cjs +34 -0
  93. package/package.json +48 -0
  94. package/scaffold/memory/INDEX.md +27 -0
  95. package/scaffold/memory/README.md +76 -0
  96. package/scaffold/memory/projects/INDEX.md +22 -0
  97. package/scaffold/memory/projects/PROTOCOL.md +128 -0
  98. package/scaffold/memory/projects/_template/PROJECT.md +45 -0
  99. package/scripts/alp.cjs +126 -0
  100. package/scripts/alp.ps1 +4 -0
  101. package/scripts/alp.sh +3 -0
  102. package/scripts/bootstrap.cjs +144 -0
  103. package/scripts/checkout-release.cjs +30 -0
  104. package/scripts/delegate.cjs +19 -0
  105. package/scripts/doctor.cjs +158 -0
  106. package/scripts/doctor.sh +3 -0
  107. package/scripts/ensure-state.cjs +22 -0
  108. package/scripts/lib/cli-link.cjs +375 -0
  109. package/scripts/lib/codex-role.cjs +18 -0
  110. package/scripts/lib/delegation/command-runner.cjs +108 -0
  111. package/scripts/lib/delegation/config.cjs +81 -0
  112. package/scripts/lib/install-paths.cjs +154 -0
  113. package/scripts/lib/release-manifest.cjs +42 -0
  114. package/scripts/lib/semver-lite.cjs +20 -0
  115. package/scripts/lib/state.cjs +274 -0
  116. package/scripts/lib/uninstall.cjs +252 -0
  117. package/scripts/lib/update-check-worker.cjs +21 -0
  118. package/scripts/lib/update.cjs +395 -0
  119. package/scripts/run-role.cjs +42 -0
  120. package/scripts/run-role.ps1 +4 -0
  121. package/scripts/run-role.sh +3 -0
  122. package/scripts/sync-project-index.sh +167 -0
  123. package/skills/agent-memory/SKILL.md +109 -0
  124. package/skills/alp-debug/SKILL.md +90 -0
  125. package/skills/alp-debug/references/defense-in-depth.md +118 -0
  126. package/skills/alp-debug/references/investigation-methodology.md +106 -0
  127. package/skills/alp-debug/references/log-and-ci-analysis.md +96 -0
  128. package/skills/alp-debug/references/performance-diagnostics.md +112 -0
  129. package/skills/alp-debug/references/reporting-standards.md +120 -0
  130. package/skills/alp-debug/references/root-cause-tracing.md +134 -0
  131. package/skills/alp-debug/references/systematic-debugging.md +93 -0
  132. package/skills/alp-debug/references/verification.md +86 -0
  133. package/skills/alp-debug/scripts/find-polluter.sh +63 -0
  134. package/skills/alp-debug/scripts/find-polluter.test.md +102 -0
  135. package/skills/alp-plan/SKILL.md +128 -0
  136. package/skills/alp-plan/references/archive-workflow.md +77 -0
  137. package/skills/alp-plan/references/codebase-understanding.md +55 -0
  138. package/skills/alp-plan/references/output-standards.md +96 -0
  139. package/skills/alp-plan/references/plan-organization.md +129 -0
  140. package/skills/alp-plan/references/red-team-personas.md +76 -0
  141. package/skills/alp-plan/references/red-team-workflow.md +81 -0
  142. package/skills/alp-plan/references/research-phase.md +57 -0
  143. package/skills/alp-plan/references/scope-challenge.md +82 -0
  144. package/skills/alp-plan/references/solution-design.md +76 -0
  145. package/skills/alp-plan/references/validate-question-framework.md +89 -0
  146. package/skills/alp-plan/references/validate-workflow.md +83 -0
  147. package/skills/alp-predict/SKILL.md +98 -0
  148. package/skills/alp-scenario/SKILL.md +86 -0
  149. package/skills/code-review/SKILL.md +111 -0
  150. package/skills/code-review/references/code-review-reception.md +114 -0
  151. package/skills/code-review/references/edge-case-scouting.md +78 -0
  152. package/skills/code-review/references/verification-before-completion.md +117 -0
  153. package/skills/delegation/SKILL.md +46 -0
  154. package/skills/docs-seeker/.env.example +15 -0
  155. package/skills/docs-seeker/SKILL.md +87 -0
  156. package/skills/docs-seeker/package.json +25 -0
  157. package/skills/docs-seeker/references/advanced.md +82 -0
  158. package/skills/docs-seeker/references/context7-patterns.md +68 -0
  159. package/skills/docs-seeker/references/errors.md +72 -0
  160. package/skills/docs-seeker/scripts/analyze-llms-txt.js +211 -0
  161. package/skills/docs-seeker/scripts/detect-topic.js +172 -0
  162. package/skills/docs-seeker/scripts/fetch-docs.js +213 -0
  163. package/skills/docs-seeker/scripts/tests/run-tests.js +72 -0
  164. package/skills/docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
  165. package/skills/docs-seeker/scripts/tests/test-detect-topic.js +112 -0
  166. package/skills/docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
  167. package/skills/docs-seeker/scripts/utils/env-loader.js +94 -0
  168. package/skills/docs-seeker/workflows/library-search.md +73 -0
  169. package/skills/docs-seeker/workflows/repo-analysis.md +90 -0
  170. package/skills/docs-seeker/workflows/topic-search.md +69 -0
  171. package/skills/git/SKILL.md +121 -0
  172. package/skills/git/references/branch-management.md +90 -0
  173. package/skills/git/references/commit-standards.md +82 -0
  174. package/skills/git/references/gh-cli-guide.md +132 -0
  175. package/skills/git/references/safety-protocols.md +86 -0
  176. package/skills/git/references/workflow-commit.md +89 -0
  177. package/skills/git/references/workflow-merge.md +63 -0
  178. package/skills/git/references/workflow-pr.md +70 -0
  179. package/skills/git/references/workflow-push.md +62 -0
  180. package/skills/gkg/SKILL.md +87 -0
  181. package/skills/gkg/references/cli-commands.md +92 -0
  182. package/skills/gkg/references/http-api.md +99 -0
  183. package/skills/gkg/references/language-support.md +54 -0
  184. package/skills/problem-solving/SKILL.md +86 -0
  185. package/skills/problem-solving/references/attribution.md +48 -0
  186. package/skills/problem-solving/references/collision-zone-thinking.md +71 -0
  187. package/skills/problem-solving/references/inversion-exercise.md +88 -0
  188. package/skills/problem-solving/references/meta-pattern-recognition.md +80 -0
  189. package/skills/problem-solving/references/scale-game.md +82 -0
  190. package/skills/problem-solving/references/simplification-cascades.md +83 -0
  191. package/skills/problem-solving/references/when-stuck.md +76 -0
  192. package/skills/repomix/SKILL.md +94 -0
  193. package/skills/repomix/references/configuration.md +134 -0
  194. package/skills/repomix/references/usage-patterns.md +106 -0
  195. package/skills/repomix/scripts/.coverage +0 -0
  196. package/skills/repomix/scripts/README.md +179 -0
  197. package/skills/repomix/scripts/repomix_batch.py +455 -0
  198. package/skills/repomix/scripts/repos.example.json +15 -0
  199. package/skills/repomix/scripts/requirements.txt +15 -0
  200. package/skills/repomix/scripts/tests/test_repomix_batch.py +531 -0
  201. package/skills/research/SKILL.md +107 -0
  202. package/skills/security-scan/SKILL.md +101 -0
  203. package/skills/security-scan/references/secret-patterns.md +75 -0
  204. package/skills/security-scan/references/vulnerability-patterns.md +136 -0
@@ -0,0 +1,76 @@
1
+ # Lăng kính rà đối kháng
2
+
3
+ Bốn góc nhìn thù địch. Đọc **hết một lăng kính** rồi mới sang lăng kính kế tiếp — trộn lẫn
4
+ thì cả bốn hội tụ về cùng một góc, và bài tập thành diễn.
5
+
6
+ | Lăng kính | Tâm thế | Soi gì |
7
+ |---|---|---|
8
+ | **Kẻ tấn công** | như người muốn phá | vượt xác thực, injection, lộ dữ liệu, leo thang quyền, chuỗi cung ứng |
9
+ | **Người phân tích failure** | định luật Murphy | race condition, mất dữ liệu, hỏng dây chuyền, thiếu đường phục hồi, rủi ro deploy, không có đường lùi |
10
+ | **Kẻ phá giả định** | hoài nghi | phụ thuộc chưa nói ra, câu "cái này sẽ chạy" không có căn cứ, thiếu đường lỗi, giả định về quy mô và tích hợp |
11
+ | **Người chỉ trích phạm vi** | thi hành YAGNI | over-engineering, trừu tượng hoá sớm, phức tạp không cần, thiếu bản tối thiểu, phạm vi phình, đánh bóng thừa |
12
+
13
+ ## Cách đọc theo một lăng kính
14
+
15
+ Bạn đang rà **một tài liệu kế hoạch**, không phải code. Không có gì để lint, build hay
16
+ test. Chỉ soi chất lượng kế hoạch.
17
+
18
+ Luật khi rà:
19
+
20
+ - **Cụ thể:** chỉ đúng phase nào, mục nào.
21
+ - **Có kịch bản:** mô tả nó hỏng ra sao, với tình huống nào — không viết "có thể có vấn đề".
22
+ - **Xếp mức:** CHẶN (chặn thành công) · NÊN SỬA (rủi ro đáng kể) · GHI NHẬN (đáng lưu ý).
23
+ - **Bỏ chuyện vụn:** văn phong, đặt tên, định dạng.
24
+ - **Không khen.** Không có câu "nhìn chung ổn". Chỉ phát hiện.
25
+ - **5–10 phát hiện mỗi lăng kính.** Chất hơn lượng — danh sách 30 mục thì không ai xử lý.
26
+
27
+ ## Mẫu một phát hiện
28
+
29
+ ```markdown
30
+ ## Phát hiện {N}: {tiêu đề}
31
+ - **Mức:** CHẶN | NÊN SỬA | GHI NHẬN
32
+ - **Ở đâu:** Phase {X}, mục "{tên}"
33
+ - **Sai gì:** {mô tả}
34
+ - **Hỏng thế nào:** {kịch bản cụ thể — với input nào, tình huống nào}
35
+ - **Bằng chứng:** {trích từ kế hoạch, hoặc chỉ ra chỗ THIẾU}
36
+ - **Đề xuất:** {ngắn}
37
+ ```
38
+
39
+ Ô **Bằng chứng** chấp nhận hai dạng: trích dẫn từ kế hoạch, hoặc chỉ ra thứ lẽ ra phải có
40
+ mà không có. Dạng thứ hai thường là phát hiện giá trị nhất.
41
+
42
+ ## Mẫu phân xử
43
+
44
+ ```markdown
45
+ ## Phát hiện 1: {tiêu đề} — {MỨC}
46
+ **Lăng kính:** {tên}
47
+ **Ở đâu:** {phase/mục}
48
+ **Sai gì:** {mô tả}
49
+ **Hỏng thế nào:** {kịch bản}
50
+ **Xử lý:** Nhận | Bác | Nhận có sửa
51
+ **Lý do:** {cụ thể — "cảm thấy không quan trọng" không phải lý do}
52
+ ```
53
+
54
+ ## Mẫu mục ghi vào `plan.md`
55
+
56
+ ```markdown
57
+ ## Rà đối kháng
58
+
59
+ ### Lượt — {YYYY-MM-DD}
60
+ **Phát hiện:** {tổng} ({nhận} nhận, {bác} bác)
61
+ **Theo mức:** {n} CHẶN · {n} NÊN SỬA · {n} GHI NHẬN
62
+
63
+ | # | Phát hiện | Mức | Xử lý | Áp vào |
64
+ |---|---|---|---|---|
65
+ | 1 | {tiêu đề} | CHẶN | Nhận | Phase 2 |
66
+ ```
67
+
68
+ Mục này tồn tại để sáu tháng sau còn trả lời được: *"lúc đó đã biết rủi ro này chưa, và vì
69
+ sao vẫn làm?"*
70
+
71
+ ## Giao đi thay vì tự rà
72
+
73
+ Rủi ro cao thì giao cho một vai khác (`scripts/run-role.sh <vai>`) — vai có `alp-predict`,
74
+ năm persona tranh luận, và quan trọng hơn: **nó không phải người viết kế hoạch**.
75
+
76
+ Tự rà kế hoạch mình vừa viết luôn có điểm mù. Bốn lăng kính giúp giảm, không xoá được.
@@ -0,0 +1,81 @@
1
+ # Rà đối kháng kế hoạch
2
+
3
+ Đọc kế hoạch với thái độ **thù địch**: mục tiêu là phá nó, không phải khen nó.
4
+
5
+ Tâm thế: như thuê một người ghét người viết kế hoạch, trả tiền để họ tìm ra chỗ hỏng.
6
+
7
+ ## Hai đường chạy — chọn theo rủi ro
8
+
9
+ ### A. Giao đi một lượt phản biện độc lập — mặc định cho kế hoạch rủi ro cao
10
+
11
+ ```bash
12
+ scripts/run-role.sh <vai>
13
+ ```
14
+
15
+ Vai được giao có `alp-predict` (năm persona tranh luận) và `problem-solving`. Dùng nó thay
16
+ vì tự phản biện chính kế hoạch mình vừa viết.
17
+
18
+ Brief phải có: đường dẫn `plan.md` và các `phase-*.md`, quyết định nào đang cần chốt,
19
+ ràng buộc nào không đổi được.
20
+
21
+ **Phán quyết DỪNG nghĩa là thiết kế lại.** Không phải thêm một dòng "rủi ro đã
22
+ biết" rồi đi tiếp.
23
+
24
+ ### B. Tự rà — khi việc nhỏ, hoặc không giao đi được
25
+
26
+ Tự đọc kế hoạch qua từng lăng kính trong `red-team-personas.md`. Số lăng kính theo quy mô:
27
+
28
+ | Số phase | Lăng kính |
29
+ |---|---|
30
+ | 1–2 | Kẻ tấn công bảo mật + Kẻ phá giả định |
31
+ | 3–5 | thêm Người phân tích failure mode |
32
+ | 6+ | thêm Người chỉ trích phạm vi |
33
+
34
+ Đọc **hết một lăng kính** rồi mới sang lăng kính kế tiếp. Trộn lẫn thì cả bốn hội tụ về
35
+ cùng một góc nhìn, và bài tập thành diễn.
36
+
37
+ ## Xử lý phát hiện
38
+
39
+ 1. **Gom** tất cả phát hiện.
40
+ 2. **Khử trùng lặp** mạnh tay — hai cách nói của cùng một vấn đề là một phát hiện.
41
+ 3. **Xếp** theo mức: CHẶN → NÊN SỬA → GHI NHẬN (cùng thang với `code-review`).
42
+ 4. **Cắt còn tối đa 15.** Danh sách 40 mục thì không ai xử lý, và mục quan trọng chìm mất.
43
+ 5. **Phân xử** từng phát hiện: nhận hay bác — **kèm lý do có bằng chứng**. "Cảm thấy không
44
+ quan trọng" không phải lý do.
45
+
46
+ ## Hỏi principal
47
+
48
+ Trình bày gọn:
49
+
50
+ - Tổng số phát hiện theo mức.
51
+ - Phát hiện nào bạn đề nghị nhận, phát hiện nào bác — kèm lý do.
52
+ - Hỏi: áp dụng hết phần đề nghị nhận, xem từng cái, hay bác tất cả?
53
+
54
+ **Không tự sửa kế hoạch trước khi principal quyết.** Kế hoạch là hợp đồng đã trình; sửa
55
+ lặng lẽ nghĩa là principal duyệt một bản, còn thực thi theo bản khác.
56
+
57
+ ## Áp dụng
58
+
59
+ Principal duyệt rồi mới sửa. Với mỗi phát hiện được nhận:
60
+
61
+ - Sửa thẳng vào `phase-*.md` liên quan.
62
+ - Thêm mục `## Rà đối kháng` vào `plan.md`: phát hiện, mức, xử lý (nhận/bác/nhận có sửa),
63
+ lý do.
64
+
65
+ Mục đó tồn tại để sáu tháng sau còn trả lời được câu "sao lúc đó biết rủi ro này mà vẫn làm?".
66
+
67
+ ## Báo cáo
68
+
69
+ ```
70
+ Rà đối kháng: <đường dẫn kế hoạch>
71
+ Đường chạy: giao đi | tự rà
72
+ Phát hiện: CHẶN n · NÊN SỬA n · GHI NHẬN n
73
+ Nhận: n · Bác: n
74
+ File đã sửa: <danh sách>
75
+ Rủi ro đã xử lý: <tóm tắt>
76
+ Câu hỏi còn mở: …
77
+ ```
78
+
79
+ ## Bước sau
80
+
81
+ Chạy `validate-workflow.md`. Xong thì báo principal — **không tự bắt tay triển khai**.
@@ -0,0 +1,57 @@
1
+ # Pha thu thập bối cảnh
2
+
3
+ **Bỏ qua khi:** principal đã đưa sẵn report, hoặc việc quá nhỏ.
4
+
5
+ Nguyên tắc: **đừng tự đọc hết**. Giao cho vai chuyên môn, gom kết quả, kiểm chứng trước
6
+ khi tin. Đó vừa là lý do các vai chuyên môn tồn tại, vừa là cách giữ context của bạn sạch
7
+ — compiled policy invariants giới hạn boot set ≤ 7 nguồn.
8
+
9
+ ## Giao cho ai
10
+
11
+ | Cần gì | Giao cho vai chuyên |
12
+ |---|---|
13
+ | code hiện tại nằm đâu, ai gọi ai, đổi thì vỡ đâu | truy xuất code trong repo |
14
+ | thư viện/framework bên ngoài, cách làm đang là chuẩn | nghiên cứu nguồn ngoài |
15
+ | đã từng quyết định gì, thread nào còn hiệu lực | truy xuất trí nhớ |
16
+ | phản biện một thiết kế rủi ro cao | phản biện độc lập |
17
+
18
+ Ai đảm nhận vai nào: `src/agents/registry.ts` và `delegates_to` trong loadout của bạn.
19
+ Lệnh: `alp delegate <vai> "<task>"`; `scripts/run-role.sh <vai>` là facade compatibility.
20
+
21
+ Ba việc đầu **độc lập với nhau** → giao background và theo dõi bằng
22
+ `alp delegation status|wait`; execution nền do supervisor giữ nên nó sống lâu hơn lệnh `alp`.
23
+
24
+ ## Viết brief cho vai được giao
25
+
26
+ Delegation API mở một **execution riêng**. Nó chỉ thấy context ALP đã build, không thấy toàn
27
+ bộ context phiên của bạn. Brief thiếu thì nó đi hỏi lại, hoặc tệ hơn — tự đoán.
28
+
29
+ Brief tối thiểu phải có:
30
+
31
+ 1. **Câu hỏi kiểm chứng được**, không phải chủ đề. "Tìm hiểu auth" là chủ đề. "Chỗ nào
32
+ trong `src/` gọi `verifyToken`, và có chỗ nào bỏ qua kiểm hạn không" là câu hỏi.
33
+ 2. **Ranh giới** — thư mục nào, repo nào, tới đâu thì dừng.
34
+ 3. **Dạng kết quả mong muốn** — danh sách `path:line`, bảng so sánh, hay một kết luận.
35
+ 4. **Ngân sách** nếu muốn giới hạn (một lượt nghiên cứu mặc định tối đa 5 lượt tìm).
36
+
37
+ ## Tự làm phần nào
38
+
39
+ Có vài thứ giao đi tốn hơn tự làm:
40
+
41
+ - **Đọc GitHub:** `gh pr view`, `gh run view --log` — có `Bash` thì làm trực tiếp nhanh hơn.
42
+ - **Xem repo ngoài:** `npx repomix --remote <url>` cho một bản tóm tắt. Nhớ chạy
43
+ `--token-count-tree` trước để không kéo về thứ vượt context.
44
+
45
+ ## Gom kết quả
46
+
47
+ - **Không dán nguyên báo cáo của vai khác vào plan.** Rút phần dùng được, dẫn nguồn.
48
+ - Hai vai nói ngược nhau → nói rõ trong plan, đừng chọn hộ một cách âm thầm.
49
+ - Vai nào ghi "chưa chắc" thì phần đó vào mục **Câu hỏi còn mở** của plan, không được lặng
50
+ lẽ thành sự thật.
51
+
52
+ ## Quy tắc
53
+
54
+ - Rộng trước, sâu sau. Đào sâu một hướng khi chưa biết có mấy hướng là cách chốt nhầm.
55
+ - Tìm ít nhất hai cách tiếp cận để so — một phương án duy nhất thì không phải lựa chọn.
56
+ - Ghi lại phát hiện đủ để pha thiết kế dùng lại được, không phải đọc lại từ đầu.
57
+ - Vấn đề bảo mật ghi ngay khi thấy, đừng để tới pha review.
@@ -0,0 +1,82 @@
1
+ # Bước 0 — thách thức phạm vi
2
+
3
+ Chạy **trước** khi thu thập bối cảnh hay thiết kế. Ép làm rõ ý định trước khi đổ thời gian
4
+ vào một kế hoạch sai cỡ.
5
+
6
+ Đây là bước rẻ nhất và hay bị bỏ nhất. Một câu hỏi ở đây tiết kiệm cả một pha thu thập.
7
+
8
+ ## Bỏ qua khi
9
+
10
+ - Việc nhỏ rõ ràng: sửa một file, sửa chính tả, đổi config không có nhánh logic.
11
+ - Principal nói "cứ lập nhanh thôi" hoặc có tín hiệu gấp.
12
+ - Mô tả dưới 20 từ và không mơ hồ.
13
+
14
+ ## Ba câu hỏi
15
+
16
+ ### 1. Cái gì đã có sẵn?
17
+
18
+ Quét repo tìm code đã giải một phần bài toán. Tiện ích, module, mẫu nào dùng lại được.
19
+
20
+ alp-code có nguyên tắc thành văn cho chuyện này — `README.md`: `scripts/lib/` là "MỘT nguồn
21
+ cho mỗi loại config". Kế hoạch dựng thêm một nguồn thứ hai cho cùng loại dữ liệu là kế
22
+ hoạch sai, không phải kế hoạch lớn.
23
+
24
+ Không chắc → giao đi một lượt truy xuất code trước khi trả lời.
25
+
26
+ ### 2. Tập thay đổi tối thiểu là gì?
27
+
28
+ Phần nào hoãn được mà không chặn mục tiêu lõi? Phũ với chính mình ở đây: cái "tiện thì làm
29
+ luôn" đội lốt yêu cầu là dạng phình phạm vi khó thấy nhất.
30
+
31
+ Đây chính là YAGNI, áp dụng cho kế hoạch trước khi áp dụng cho code.
32
+
33
+ ### 3. Kiểm tra độ phức tạp
34
+
35
+ | Ngưỡng | Phải làm gì |
36
+ |---|---|
37
+ | đụng **> 8 file** | thách thức: cùng mục tiêu đó làm với ít file hơn được không? |
38
+ | thêm **> 2 module/lớp mới** | mùi. Biện minh từng cái, hoặc bỏ |
39
+ | **> 3 phase** | xem có gộp phase được không |
40
+
41
+ Vượt ngưỡng không có nghĩa là sai. Nó có nghĩa là **phải giải thích được**, và lời giải
42
+ thích đi vào `plan.md`.
43
+
44
+ ## Chốt phạm vi với principal
45
+
46
+ Hỏi thẳng trong phiên, không cần tool nào.
47
+
48
+ Trình bày kết quả ba câu trên rồi hỏi chọn một trong ba hướng:
49
+
50
+ | Hướng | Nghĩa |
51
+ |---|---|
52
+ | **MỞ RỘNG** | làm bản đầy đủ — nghiên cứu sâu, khám phá phương án lân cận, chấp nhận nhiều phase |
53
+ | **GIỮ NGUYÊN** | phạm vi đang đúng — dồn sức vào failure mode, edge case, tiêu chí kiểm chứng |
54
+ | **THU HẸP** | cắt còn cốt lõi — hoãn mọi thứ không chặn, ít phase, kiến trúc đơn giản |
55
+
56
+ ## Luật quan trọng nhất
57
+
58
+ **Principal chọn rồi thì TÔN TRỌNG.**
59
+
60
+ Không được:
61
+
62
+ - Âm thầm thu hẹp khi principal chọn GIỮ NGUYÊN hoặc MỞ RỘNG.
63
+ - Âm thầm mở rộng khi principal chọn THU HẸP.
64
+ - Cãi lại về phạm vi ở các mục sau của kế hoạch.
65
+
66
+ Nêu lo ngại về phạm vi **một lần**, ở bước 0. Sau đó cam kết với phạm vi đã chọn và tối ưu
67
+ bên trong nó. Đây cũng là HOUSE-RULES §1.7: cắt giảm phạm vi là quyền của principal.
68
+
69
+ ## Đầu ra
70
+
71
+ Trước khi sang bước tiếp, xuất tóm tắt ngắn:
72
+
73
+ ```
74
+ Thách thức phạm vi:
75
+ - Đã có sẵn: <cái gì dùng lại được>
76
+ - Tối thiểu: <cái gì thiết yếu, cái gì hoãn được>
77
+ - Độ phức tạp: <ước lượng số file, module mới>
78
+ - Hướng đã chốt: MỞ RỘNG | GIỮ NGUYÊN | THU HẸP
79
+ ```
80
+
81
+ Phần "hoãn được" đi thẳng vào mục **Ngoài phạm vi** của `plan.md` — đừng để nó chỉ tồn tại
82
+ trong context của phiên này.
@@ -0,0 +1,76 @@
1
+ # Thiết kế giải pháp
2
+
3
+ ## Nguyên tắc nền
4
+
5
+ **YAGNI** — không thêm cho tới khi thật sự cần.
6
+ **KISS** — chọn cách đơn giản, kể cả khi cách phức tạp trông thông minh hơn.
7
+ **DRY** — không nhân bản. Nhân bản dữ liệu rồi để nó lệch nhau là dạng nợ đắt nhất.
8
+
9
+ Ba nguyên tắc này là luật thành văn của repo, không phải khuyến nghị.
10
+
11
+ ## So sánh phương án
12
+
13
+ **Một phương án duy nhất không phải lựa chọn.** Nêu ít nhất hai, kèm bảng:
14
+
15
+ | Phương án | Hợp khi | Đánh đổi | Chi phí đảo ngược |
16
+ |---|---|---|---|
17
+ | A | … | … | … |
18
+ | B | … | … | … |
19
+
20
+ Cột **chi phí đảo ngược** quan trọng nhất và hay bị bỏ: một quyết định sai mà đảo lại rẻ
21
+ thì cứ chọn và đi tiếp; một quyết định sai mà đảo lại đắt thì đáng mở một lượt phản biện
22
+ trước.
23
+
24
+ Cân: ngắn hạn và dài hạn · độ phức tạp và khả năng bảo trì · công sức và lợi ích thật.
25
+
26
+ ## Bảo mật — nghĩ ở pha thiết kế, không để tới pha review
27
+
28
+ - Ai được làm gì, kiểm ở đâu.
29
+ - Dữ liệu nhạy cảm đi qua đâu, lưu ở đâu, ai đọc được.
30
+ - Input từ ngoài được kiểm ở ranh giới nào.
31
+ - Secret quản lý thế nào — biến môi trường, không phải file trong repo.
32
+ - Với API: giới hạn tần suất, CORS, xác thực.
33
+
34
+ Lỗ bảo mật phát hiện lúc thiết kế tốn một dòng sửa trong plan. Phát hiện sau khi triển
35
+ khai tốn một phase.
36
+
37
+ ## Hiệu năng và quy mô
38
+
39
+ - Nút thắt tiềm tàng nằm ở đâu — nói cụ thể, không nói "cần tối ưu".
40
+ - Truy vấn nào có nguy cơ N+1.
41
+ - Chỗ nào đáng cache, và cache mất hiệu lực khi nào.
42
+ - Tài nguyên: bộ nhớ, CPU, mạng.
43
+
44
+ **Quy mô thật của alp-code là 8 vai và một principal.** Thiết kế cho hàng trăm agent là
45
+ over-engineering ở đây. Dùng `alp-predict` hoặc kỹ thuật quy mô của `problem-solving` để
46
+ kiểm cả chiều nhỏ, không chỉ chiều lớn.
47
+
48
+ ## Edge case và failure mode
49
+
50
+ Phase nào không nêu được failure mode thì **chưa duyệt được**. Bắt buộc trả lời:
51
+
52
+ - Hỏng ở đâu, và hỏng thì lan tới đâu?
53
+ - Hỏng một phần thì trạng thái còn nhất quán không?
54
+ - Có cần retry / fallback không? Retry có gây hại gì không?
55
+ - Có race condition không?
56
+ - Xuống cấp có kiểm soát trông như thế nào?
57
+
58
+ alp-code chọn **fail đóng**: hỏng thì hỏng to và thấy ngay. Thiết kế nào hỏng im lặng là
59
+ thiết kế sai ở repo này — compiled policy invariants và cả `doctor.cjs` đều dựng trên nguyên tắc đó.
60
+
61
+ ## Kiến trúc
62
+
63
+ - Ranh giới module: cái gì thuộc về đâu, và **vì sao**.
64
+ - Chiều phụ thuộc: ai được biết về ai. Phụ thuộc vòng là dấu hiệu ranh giới sai.
65
+ - Dòng dữ liệu: vào đâu, biến đổi ở đâu, ra đâu.
66
+ - Cái gì là **nguồn sự thật**, cái gì là **sản phẩm sinh ra**. Nhầm hai loại này là lớp
67
+ bug đắt nhất trong alp-code — `compiled AgentDefinition` là nguồn, `~/.alp/executions/**` là sản phẩm.
68
+ - Trạng thái giữ ở đâu, và ai được sửa.
69
+
70
+ ## Quy tắc
71
+
72
+ - **Ghi lý do quyết định**, không chỉ ghi quyết định. Sáu tháng sau `git log` cho biết đã
73
+ làm gì; chỉ plan mới cho biết vì sao.
74
+ - Thiết kế kèm cách kiểm chứng — không kiểm được thì không đóng được phase.
75
+ - Nghĩ tới cả cách quan sát lúc chạy: hỏng thì nhìn vào đâu để biết.
76
+ - Nghĩ tới cách quay lui: triển khai xong mà sai thì lùi bằng cách nào.
@@ -0,0 +1,89 @@
1
+ # Khung câu hỏi kiểm chứng
2
+
3
+ ## Nhóm câu hỏi
4
+
5
+ Quét kế hoạch tìm những từ này — chúng đánh dấu chỗ kế hoạch đang **quyết thay principal**:
6
+
7
+ | Nhóm | Từ khoá cần soi |
8
+ |---|---|
9
+ | **Kiến trúc** | "cách tiếp cận", "mẫu", "thiết kế", "cấu trúc", "database", "API" |
10
+ | **Giả định** | "giả sử", "kỳ vọng", "sẽ", "phải", "mặc định" |
11
+ | **Đánh đổi** | "đánh đổi", "so với", "phương án", "hoặc" |
12
+ | **Rủi ro** | "rủi ro", "có thể hỏng", "phụ thuộc", "chặn", "lo ngại" |
13
+ | **Phạm vi** | "phase", "bản tối thiểu", "sau này", "ngoài phạm vi", "có thì tốt" |
14
+
15
+ Từ **"mặc định"** và **"giả sử"** đáng soi nhất: chúng thường đánh dấu một quyết định đã
16
+ được đưa ra mà không ai để ý là đã có quyết định.
17
+
18
+ ## Luật soạn câu hỏi
19
+
20
+ - Mỗi câu **2–4 phương án cụ thể**, không hỏi mở.
21
+ - Đánh dấu phương án bạn đề nghị, kèm một câu vì sao.
22
+ - Câu hỏi phải làm **lộ ra một quyết định ngầm**, không phải hỏi cho có.
23
+ - **Chỉ hỏi điểm quyết định thật.** Tự trả lời được từ code, từ `compiled policy invariants`, hay từ quy
24
+ ước sẵn có thì đừng hỏi — đó là đẩy việc ngược về principal.
25
+
26
+ ## Ví dụ
27
+
28
+ **Kiến trúc**
29
+
30
+ > Kết quả kiểm chứng lưu ở đâu?
31
+ > 1. Thêm mục vào `plan.md` *(đề nghị — plan là nguồn sự thật duy nhất, compiled policy invariants)*
32
+ > 2. Tạo file `validation-answers.md` riêng
33
+ > 3. Không lưu
34
+
35
+ **Giả định**
36
+
37
+ > Kế hoạch đang giả định không cần giới hạn tần suất. Đúng không?
38
+ > 1. Đúng, bản đầu chưa cần
39
+ > 2. Không, thêm mức cơ bản ngay *(đề nghị — thêm sau tốn hơn nhiều)*
40
+ > 3. Hoãn sang phase 2
41
+
42
+ ## Mẫu nhật ký kiểm chứng
43
+
44
+ ```markdown
45
+ ## Nhật ký kiểm chứng
46
+
47
+ ### Lượt {N} — {YYYY-MM-DD}
48
+ **Vì sao kiểm chứng:** {cái gì dẫn tới lượt này}
49
+ **Số câu hỏi:** {n}
50
+
51
+ #### Hỏi và đáp
52
+
53
+ 1. **[{Nhóm}]** {nguyên văn câu hỏi}
54
+ - Phương án: {A} | {B} | {C}
55
+ - **Principal chọn:** {đáp án}
56
+ - **Nguyên văn nếu principal trả lời khác:** {chép đúng chữ}
57
+ - **Vì sao quan trọng:** {quyết định này ảnh hưởng gì}
58
+
59
+ #### Quyết định đã chốt
60
+ - {quyết định}: {lựa chọn} — {vì sao}
61
+
62
+ #### Việc phải làm
63
+ - [ ] {thay đổi cụ thể}
64
+
65
+ #### Ảnh hưởng tới phase
66
+ - Phase {N}: {phải sửa gì, vì sao}
67
+ ```
68
+
69
+ ## Luật ghi
70
+
71
+ - **Nguyên văn câu hỏi**, không tóm tắt.
72
+ - **Đủ mọi phương án đã trình** — để sau này biết principal đã chọn giữa những gì.
73
+ - **Chép đúng chữ** nếu principal trả lời ngoài các phương án. Diễn giải lại là bóp méo.
74
+ - **Ghi vì sao** quyết định đó ảnh hưởng tới cách triển khai.
75
+ - **Đánh số lượt** tăng dần.
76
+
77
+ ## Lan quyết định xuống phase
78
+
79
+ | Loại thay đổi | Sửa vào mục nào của phase |
80
+ |---|---|
81
+ | yêu cầu | Việc phải làm |
82
+ | kiến trúc | Kiến trúc / Việc phải làm |
83
+ | phạm vi | Mục tiêu, và **Ngoài phạm vi** của `plan.md` |
84
+ | rủi ro | Rủi ro |
85
+ | chưa rõ thuộc đâu | thêm mục mới, đừng nhét bừa |
86
+
87
+ Bước lan xuống phase là bước hay bị bỏ nhất và đắt nhất: người thực thi đọc **phase**, chứ
88
+ không đọc `plan.md`. Ghi quyết định vào `plan.md` rồi quên sửa phase nghĩa là quyết định đó
89
+ không tồn tại.
@@ -0,0 +1,83 @@
1
+ # Phỏng vấn kiểm chứng kế hoạch
2
+
3
+ Hỏi principal những câu hỏi then chốt để kiểm chứng giả định và chốt quyết định — **trước**
4
+ khi bắt tay viết code.
5
+
6
+ Khác với rà đối kháng: rà đối kháng tìm chỗ hỏng trong kế hoạch, phỏng vấn kiểm chứng tìm
7
+ chỗ kế hoạch **đang đoán thay principal**.
8
+
9
+ ## 1. Đọc kế hoạch
10
+
11
+ `plan.md` và toàn bộ `phase-*.md`. Tìm ba thứ:
12
+
13
+ - **Điểm quyết định** — chỗ có nhiều hướng mà kế hoạch đã chọn một.
14
+ - **Giả định** — thứ kế hoạch coi là đúng mà chưa ai xác nhận.
15
+ - **Đánh đổi** — chỗ được cái này mất cái kia.
16
+
17
+ ## 2. Rút chủ đề hỏi
18
+
19
+ `references/validate-question-framework.md`.
20
+
21
+ ## 3. Soạn câu hỏi
22
+
23
+ Mỗi chủ đề → **một câu hỏi cụ thể, kèm 2–4 phương án**. Đánh dấu phương án bạn đề nghị và
24
+ nói vì sao.
25
+
26
+ **Chỉ hỏi điểm quyết định thật.** Câu hỏi mà bạn tự trả lời được từ code, từ `compiled policy invariants`,
27
+ hoặc từ quy ước sẵn có thì **đừng hỏi** — đó là đẩy việc ngược về principal.
28
+
29
+ Ba câu đủ thì hỏi ba. Kế hoạch đơn giản mà hỏi tám câu là làm phiền, không phải cẩn thận.
30
+
31
+ ## 4. Hỏi
32
+
33
+ Hỏi thẳng trong phiên — không có `AskUserQuestion`, và cũng không cần.
34
+
35
+ Gom câu hỏi liên quan lại một lượt thay vì hỏi lắt nhắt từng câu.
36
+
37
+ ## 5. Ghi lại
38
+
39
+ Thêm mục `## Nhật ký kiểm chứng` vào `plan.md`:
40
+
41
+ ```markdown
42
+ ## Nhật ký kiểm chứng
43
+
44
+ ### Lượt 1 — YYYY-MM-DD
45
+
46
+ | Câu hỏi | Principal chọn | Ảnh hưởng |
47
+ |---|---|---|
48
+ | <câu hỏi> | <đáp án> | <phase nào phải sửa> |
49
+ ```
50
+
51
+ Ghi lại là bắt buộc, không phải tuỳ chọn: compiled policy invariants — markdown là source of truth. Câu
52
+ trả lời chỉ nằm trong context phiên thì phiên sau mất sạch.
53
+
54
+ ## 6. Lan quyết định xuống phase
55
+
56
+ Sửa các `phase-*.md` bị ảnh hưởng, kèm dấu:
57
+
58
+ ```markdown
59
+ <!-- Sửa: kiểm chứng lượt N — <đổi gì> -->
60
+ ```
61
+
62
+ Bước này hay bị bỏ, và bỏ thì hỏng nặng: `plan.md` ghi một đằng, phase ghi một nẻo, và
63
+ người thực thi đọc phase chứ không đọc `plan.md`.
64
+
65
+ ## Đầu ra
66
+
67
+ ```
68
+ Kiểm chứng: <đường dẫn kế hoạch>
69
+ Đã hỏi: n câu
70
+ Quyết định đã chốt: <tóm tắt>
71
+ Phase đã sửa: <danh sách>
72
+ Khuyến nghị: tiến hành | sửa lại kế hoạch
73
+ ```
74
+
75
+ ## Bước sau
76
+
77
+ Báo principal đường dẫn kế hoạch và tóm tắt. **Dừng ở đó.**
78
+
79
+ Kế hoạch được duyệt thì mới triển khai. alp-code không có bước bàn giao sang một vai
80
+ "cook" nào cả.
81
+
82
+ Sang phiên mới để triển khai thì nhớ: phiên mới **không thấy** gì của phiên này. Đường dẫn
83
+ kế hoạch phải đưa đầy đủ, và `plan.md` phải tự đứng được một mình.
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: alp-predict
3
+ description: Năm persona chuyên môn phân tích độc lập một đề xuất thay đổi rồi tranh luận để ra phán quyết GO/THẬN TRỌNG/DỪNG. Kích hoạt khi cần phản biện trước một quyết định rủi ro cao, khi so sánh nhiều phương án kiến trúc, hoặc khi một migration khó đảo ngược.
4
+ ---
5
+
6
+ # alp-predict — năm persona tranh luận
7
+
8
+ Công cụ chính cho việc **phản biện độc lập trước một quyết định rủi ro cao**.
9
+
10
+ Giá trị nằm ở chỗ ép năm góc nhìn nói **trước khi** biết nhau nghĩ gì. Để chúng ảnh hưởng
11
+ nhau ngay từ đầu thì cả năm hội tụ về ý kiến của cái đầu tiên, và bài tập thành diễn.
12
+
13
+ ## Khi nào dùng
14
+
15
+ - Kiến trúc có nhiều đánh đổi, hoặc migration khó đảo ngược.
16
+ - Đã có phương án và cần người tìm cách bác nó.
17
+ - Hai phương án cạnh tranh, cần so có cấu trúc chứ không so cảm tính.
18
+
19
+ **Không dùng cho:** thay đổi nhỏ, việc đã chốt và chỉ còn triển khai, nâng phiên bản phụ
20
+ thuộc không đổi API. Gọi năm persona cho một quyết định nhỏ là đốt ngân sách phiên và làm
21
+ loãng giá trị của phán quyết DỪNG.
22
+
23
+ ## Năm persona
24
+
25
+ | Persona | Soi gì | Câu hỏi lõi |
26
+ |---|---|---|
27
+ | **Kiến trúc** | thiết kế hệ, khả năng mở rộng, coupling | Có khớp kiến trúc hiện tại không? Sinh ra phụ thuộc mới nào? |
28
+ | **Bảo mật** | bề mặt tấn công, bảo vệ dữ liệu, xác thực | Lạm dụng được chỗ nào? Dữ liệu hở ở đâu? Ranh giới quyền có bị phá? |
29
+ | **Hiệu năng** | độ trễ, bộ nhớ, truy vấn, kích thước bundle | Trễ thêm bao nhiêu? Có N+1 không? Rò bộ nhớ? |
30
+ | **Trải nghiệm** | UX, tiếp cận, trạng thái lỗi | Có trực giác không? Lỗi thì người dùng thấy gì? |
31
+ | **Phản biện** | giả định ngầm, phương án đơn giản hơn | Không làm gì thì sao? Cách đơn giản nhất là gì? Giả định nào có thể sai? |
32
+
33
+ ## Quy trình
34
+
35
+ 1. **Đọc đề xuất** được đưa. Không rõ ranh giới thì hỏi lại — đoán sai phạm vi thì cả năm
36
+ persona phân tích nhầm thứ.
37
+ 2. **Đọc code liên quan** nếu có đường dẫn. `Grep` tìm vùng ảnh hưởng.
38
+ 3. **Từng persona phân tích độc lập.** Viết xong persona này mới sang persona kia; không
39
+ sửa lại persona trước cho khớp.
40
+ 4. **Gom điểm đồng thuận** — chỗ cả năm (hoặc 4+) cùng ý.
41
+ 5. **Gom điểm xung đột** — chỗ thật sự trái nhau, không phải khác cách diễn đạt.
42
+ 6. **Cân đánh đổi** từng xung đột: mối lo nào tác động lớn hơn, và nếu chọn sai thì đảo
43
+ ngược tốn bao nhiêu.
44
+ 7. **Ra phán quyết.**
45
+
46
+ ## Phán quyết
47
+
48
+ | Mức | Nghĩa |
49
+ |---|---|
50
+ | **GO** | năm persona thống nhất, không rủi ro nghiêm trọng, làm được |
51
+ | **THẬN TRỌNG** | có lo ngại nhưng xử lý được — đã chỉ ra cách giảm thiểu |
52
+ | **DỪNG** | có vấn đề nghiêm trọng chưa giải quyết — cần thiết kế lại hoặc thêm thông tin |
53
+
54
+ **Kích hoạt DỪNG** (chỉ cần một):
55
+
56
+ - Bảo mật thấy vượt xác thực hoặc lộ dữ liệu mà không có cách giảm thiểu khả thi.
57
+ - Kiến trúc thấy không tương thích nền tảng, phải làm lại phần lớn.
58
+ - Hiệu năng thấy độ trễ hoặc bùng nổ truy vấn không chấp nhận được, không có đường vòng.
59
+ - Phản biện lật được một giả định sai làm sụp cả cách tiếp cận.
60
+
61
+ DỪNG là phán quyết **đắt**. Dùng nó cho thứ thật sự phải dừng, không dùng để tỏ ra cẩn thận.
62
+
63
+ ## Mẫu xuất
64
+
65
+ ```
66
+ ## Dự đoán: <tên đề xuất>
67
+
68
+ ## Phán quyết: GO | THẬN TRỌNG | DỪNG
69
+
70
+ ### Đồng thuận
71
+ - <điểm cả năm cùng ý>
72
+
73
+ ### Xung đột và cách giải
74
+
75
+ | Vấn đề | Kiến trúc | Bảo mật | Hiệu năng | Trải nghiệm | Phản biện | Kết luận |
76
+ |---|---|---|---|---|---|---|
77
+ | <chủ đề> | <ý> | <ý> | <ý> | <ý> | <ý> | <chọn gì, vì sao> |
78
+
79
+ ### Rủi ro
80
+
81
+ | Rủi ro | Mức | Cách giảm thiểu | Chi phí nếu sai |
82
+ |---|---|---|---|
83
+ | <mô tả> | cao/vừa/thấp | <hành động cụ thể> | <đảo ngược tốn gì> |
84
+
85
+ ### Khuyến nghị
86
+ 1. <hành động — vì sao>
87
+
88
+ ### Chưa đủ thông tin để kết luận
89
+ <phần nào cần được cung cấp thêm>
90
+ ```
91
+
92
+ ## Sau đó
93
+
94
+ - Phán quyết đi về **bên giao việc**, không đi đâu khác.
95
+ - Rủi ro cần bổ chi tiết thành edge case → đề xuất một lượt `alp-scenario` riêng.
96
+ - Giả định sai bị lật ra → nói thẳng nó làm hỏng phần nào của kế hoạch, đừng gói trong
97
+ ngôn ngữ lịch sự. Người ta mở một lượt phản biện chính là để nghe điều đó.
98
+ - Nháp và giả thuyết chưa kiểm chứng → kho riêng của bạn trong `memory/private/`.