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,54 @@
1
+ # Hỗ trợ ngôn ngữ của gkg
2
+
3
+ ## Bảng
4
+
5
+ | Ngôn ngữ | Định nghĩa | Import | Tham chiếu trong file | Tham chiếu chéo file |
6
+ |---|---|---|---|---|
7
+ | Ruby | ✅ | ✅ | ✅ | ✅ |
8
+ | Java | ✅ | ✅ | ✅ | ✅ |
9
+ | Kotlin | ✅ | ✅ | ✅ | ✅ |
10
+ | Python | ✅ | ✅ | ✅ | **chưa xong** |
11
+ | TypeScript | ✅ | ✅ | ✅ | **chưa xong** |
12
+ | JavaScript | ✅ | ✅ | ✅ | **chưa xong** |
13
+
14
+ ## Bốn năng lực nghĩa là gì
15
+
16
+ | Năng lực | Nội dung |
17
+ |---|---|
18
+ | **Định nghĩa** | class, hàm, method, hằng, interface — rút từ AST |
19
+ | **Import** | theo dõi import module/package để dựng đồ thị phụ thuộc |
20
+ | **Tham chiếu trong file** | chỗ dùng symbol nằm cùng file |
21
+ | **Tham chiếu chéo file** | chỗ dùng symbol định nghĩa ở file khác — **đây là cái quyết định phân tích ảnh hưởng** |
22
+
23
+ Cột cuối là cột duy nhất thật sự quan trọng khi truy xuất code. Ba cột đầu `rg` cũng làm
24
+ gần được.
25
+
26
+ ## Ruby / Java / Kotlin — dùng tự tin
27
+
28
+ Phân tích ngữ nghĩa đầy đủ: tìm định nghĩa chéo file · tìm mọi chỗ gọi · đồ thị phụ thuộc
29
+ đầy đủ · phân tích ảnh hưởng trước refactor.
30
+
31
+ ## Python / TS / JS — dùng có điều kiện
32
+
33
+ Chạy được: rút định nghĩa, theo dõi import, tham chiếu trong cùng file.
34
+
35
+ **Không đầy đủ:**
36
+
37
+ - `get_references` chéo file **có thể bỏ sót** chỗ dùng.
38
+ - `get_definition` có thể không giải được symbol từ bên ngoài.
39
+
40
+ Đây là điểm quan trọng nhất của cả file này. Với TS/JS/Python:
41
+
42
+ 1. **Luôn đối chiếu thêm bằng `rg`.** `gkg` cho quan hệ, `rg` cho độ phủ — cần cả hai.
43
+ 2. **Ghi rõ trong báo cáo là kết quả chưa chắc đầy đủ.**
44
+ 3. Việc quan trọng (ai đó sắp refactor) thì kiểm tay thêm những chỗ then chốt.
45
+
46
+ Trả lời "có 3 chỗ gọi" khi thật ra có 11 là kiểu sai đắt nhất một lượt truy xuất có thể
47
+ gây ra — người ta sẽ refactor dựa trên con số đó.
48
+
49
+ ## Đây là beta công khai
50
+
51
+ Không phải công cụ đã chín. Hỗ trợ tham chiếu chéo file cho Python/TS/JS đang được làm —
52
+ xem https://gitlab.com/gitlab-org/rust/knowledge-graph để biết trạng thái mới.
53
+
54
+ Đến khi nào cột cuối của TS/JS chuyển thành ✅ thì luật đối chiếu bằng `rg` vẫn còn hiệu lực.
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: problem-solving
3
+ description: Sáu kỹ thuật gỡ bế tắc có hệ thống — dùng khi độ phức tạp phình ra, khi giải pháp thông thường không đủ, khi cùng một vấn đề lặp ở nhiều nơi, khi bị ép vào "chỉ có một cách", hoặc khi không rõ có chịu nổi quy mô thật.
4
+ ---
5
+
6
+ # problem-solving — gỡ bế tắc có hệ thống
7
+
8
+ Dùng khi *đã* thử và *đã* bế tắc — nên việc của skill này không phải nghĩ chăm hơn, mà là
9
+ **đổi kiểu nghĩ**.
10
+
11
+ Mỗi kỹ thuật nhắm một dạng bế tắc khác nhau. Chẩn đoán sai dạng thì kỹ thuật vô dụng, nên
12
+ bước 1 là bước quan trọng nhất.
13
+
14
+ ## Chẩn đoán trước
15
+
16
+ | Triệu chứng | Kỹ thuật | Đọc |
17
+ |---|---|---|
18
+ | cùng một thứ triển khai 5 kiểu, special case cứ mọc thêm | **Thác đơn giản hoá** | `references/simplification-cascades.md` |
19
+ | cách thông thường không đủ, cần đột phá | **Vùng va chạm** | `references/collision-zone-thinking.md` |
20
+ | cùng một vấn đề ở nhiều chỗ khác nhau, phát minh lại bánh xe | **Nhận mẫu meta** | `references/meta-pattern-recognition.md` |
21
+ | giải pháp thấy gượng, "buộc phải làm thế này" | **Bài tập đảo ngược** | `references/inversion-exercise.md` |
22
+ | chạy thật có chịu nổi không, edge case chưa rõ | **Trò chơi quy mô** | `references/scale-game.md` |
23
+ | không rõ dùng cái nào | **Khi bế tắc** | `references/when-stuck.md` |
24
+
25
+ ## Sáu kỹ thuật
26
+
27
+ ### 1. Thác đơn giản hoá
28
+ Tìm **một** nhận định xoá được nhiều thành phần cùng lúc: "nếu điều này đúng thì không cần
29
+ X, Y, Z nữa."
30
+
31
+ Cốt lõi: mọi thứ đang có đều là trường hợp riêng của một mẫu chung chưa được đặt tên.
32
+ Cờ đỏ: "chỉ cần thêm một case nữa thôi" — lặp mãi không hết.
33
+
34
+ ### 2. Vùng va chạm
35
+ Ép hai khái niệm không liên quan vào nhau để lộ tính chất mới: "nếu coi X như Y thì sao?"
36
+
37
+ Cốt lõi: ý tưởng đột phá đến từ trộn ẩn dụ có chủ đích, không từ nghĩ chăm hơn trong cùng
38
+ một khung.
39
+ Cờ đỏ: "tôi thử hết cách trong mảng này rồi."
40
+
41
+ ### 3. Nhận mẫu meta
42
+ Tìm mẫu xuất hiện ở 3+ lĩnh vực khác nhau để rút ra nguyên lý dùng chung được.
43
+
44
+ Cốt lõi: mẫu về **cách các mẫu hình thành** cho ra trừu tượng tái dùng được.
45
+ Cờ đỏ: "vấn đề này là đặc thù, không giống ai" — hầu như luôn sai.
46
+
47
+ ### 4. Bài tập đảo ngược
48
+ Lật giả định lõi để lộ ràng buộc ngầm: "nếu ngược lại thì sao?"
49
+
50
+ Cốt lõi: đảo ngược *hợp lệ* cho thấy "luật" thật ra chỉ đúng trong một ngữ cảnh.
51
+ Cờ đỏ: "chỉ có một cách làm thôi."
52
+
53
+ ### 5. Trò chơi quy mô
54
+ Thử ở cực trị: lớn gấp 1000, nhỏ đi 1000, tức thì, kéo dài một năm.
55
+
56
+ Cốt lõi: thứ chạy tốt ở quy mô này hỏng ở quy mô khác — và cực trị lộ ra đâu là bản chất,
57
+ đâu là ngẫu nhiên.
58
+ Cờ đỏ: "chắc scale được thôi" mà chưa thử.
59
+
60
+ ### 6. Khi bế tắc
61
+ Cây quyết định để chọn năm cái trên. Dùng khi chẩn đoán không ra dạng bế tắc.
62
+
63
+ ## Cách áp dụng
64
+
65
+ 1. **Chẩn đoán dạng bế tắc** từ mô tả của việc được giao — bảng trên.
66
+ 2. **Đọc file reference** của kỹ thuật đó. SKILL.md này chỉ là bảng điều phối; quy trình
67
+ thật nằm trong reference.
68
+ 3. **Áp dụng theo đúng quy trình**, không rút gọn. Rút gọn là quay lại kiểu nghĩ cũ.
69
+ 4. **Ghi lại cái gì hiệu quả, cái gì không.** Bài học về chính cách bạn làm việc →
70
+ `memory/private/<vai>/journal/YYYY-MM.md`. Fact về project → báo lại; bên giao việc quyết
71
+ định ghi vào `memory/` chung hay không.
72
+
73
+ ## Kết hợp
74
+
75
+ - **Đơn giản hoá + Nhận mẫu meta** — tìm mẫu trước, rồi đơn giản hoá mọi thể hiện của nó.
76
+ - **Va chạm + Đảo ngược** — ép ẩn dụ, rồi lật giả định của chính ẩn dụ đó.
77
+ - **Quy mô + Đơn giản hoá** — cực trị cho thấy nên bỏ cái gì.
78
+ - **Nhận mẫu meta + Quy mô** — nguyên lý chung đem thử ở cực trị.
79
+
80
+ ## Ranh giới
81
+
82
+ Đây là việc **đọc và suy luận**, không phải việc sửa. Kết quả là một khuyến nghị, không
83
+ phải một thay đổi trong code — kể cả khi loadout có cấp `Edit`.
84
+
85
+ Cần dữ liệu bạn không tự lấy được → **nói rõ cần gì** rồi báo lại. Đừng đoán bù vào chỗ
86
+ thiếu dữ liệu.
@@ -0,0 +1,48 @@
1
+ # Nguồn gốc
2
+
3
+ Các kỹ thuật trong skill này bắt nguồn từ mẫu agent của dự án Microsoft Amplifier, qua hai
4
+ lần thích nghi.
5
+
6
+ ## Nguồn gốc
7
+
8
+ - **Dự án:** Amplifier — https://github.com/microsoft/amplifier
9
+ - **Commit:** `2adb63f858e7d760e188197c8e8d4c1ef721e2a6` (2025-10-10)
10
+ - **Giấy phép:** MIT
11
+
12
+ ## Chuỗi thích nghi
13
+
14
+ ```
15
+ Amplifier (agent JSON) → alp-plugin (skill tra cứu) → alp-code (skill của repo)
16
+ ```
17
+
18
+ ### Lần 1 — Amplifier → alp-plugin
19
+
20
+ Từ agent `insight-synthesizer`: `simplification-cascades` · `collision-zone-thinking` ·
21
+ `meta-pattern-recognition` · `inversion-exercise` · `scale-game`.
22
+
23
+ Mẫu điều phối: `when-stuck` — khớp triệu chứng bế tắc với kỹ thuật.
24
+
25
+ Đổi: agent sống lâu, xuất JSON có cấu trúc → tài liệu tra cứu quét được bằng mắt, dùng
26
+ được ngay, không cần công cụ riêng.
27
+
28
+ ### Lần 2 — alp-plugin → alp-code (2026-08)
29
+
30
+ Đổi:
31
+
32
+ - Dịch sang tiếng Việt, khớp `compiled policy invariants` và `HOUSE-RULES.md`.
33
+ - Viết cho **một lượt gỡ bế tắc**, không gắn với tên vai nào — vai nào được cấp skill này
34
+ là việc của `compiled AgentDefinition`, không phải của nội dung skill.
35
+ - Thêm ranh giới theo **loadout**, không theo tên vai: không cấp `Edit` thì sản phẩm là
36
+ khuyến nghị, không phải thay đổi trong code.
37
+ - Thêm ví dụ lấy từ chính alp-code ở chỗ ví dụ gốc quá xa ngữ cảnh.
38
+ - Tách rõ "bế tắc tư duy" (dùng skill này) khỏi "thiếu bằng chứng" (dùng `alp-debug`).
39
+
40
+ **Giữ nguyên:** năm kỹ thuật lõi, mẫu nhận diện, quy trình áp dụng, và luật 3 lĩnh vực.
41
+
42
+ ## Nhận định nền
43
+
44
+ Năng lực của một agent thực ra là **mẫu tư duy không phụ thuộc lĩnh vực**. Gói nó thành
45
+ "agent Amplifier", "skill alp-plugin" hay "một lượt gỡ bế tắc" thì kỹ thuật bên dưới vẫn
46
+ là một.
47
+
48
+ Đó cũng chính là `meta-pattern-recognition` áp dụng lên chính nó.
@@ -0,0 +1,71 @@
1
+ # Vùng va chạm
2
+
3
+ Ép hai khái niệm không liên quan vào nhau để lộ tính chất mới: **"nếu coi X như Y thì sao?"**
4
+
5
+ ## Nguyên lý
6
+
7
+ Đột phá đến từ **trộn ẩn dụ có chủ đích**, không từ nghĩ chăm hơn trong cùng một khung.
8
+ Nghĩ chăm hơn trong khung cũ chỉ cho ra cải tiến từng bước.
9
+
10
+ ## Khi nào dùng
11
+
12
+ | Triệu chứng | Việc phải làm |
13
+ |---|---|
14
+ | kẹt trong lối nghĩ thông thường | ép va chạm với một lĩnh vực xa |
15
+ | giải pháp nào cũng chỉ nhích thêm chút | cần đột phá, không phải tối ưu |
16
+ | "thử hết cách trong mảng này rồi" | nhập khái niệm từ nơi khác |
17
+
18
+ ## Va chạm mẫu
19
+
20
+ | Coi cái này | Như cái này | Lộ ra |
21
+ |---|---|---|
22
+ | tổ chức code | DNA / di truyền | mutation testing, thuật toán tiến hoá |
23
+ | kiến trúc dịch vụ | gạch Lego | microservice ghép được, cắm-là-chạy |
24
+ | quản lý dữ liệu | dòng nước | streaming, data lake, hệ theo luồng |
25
+ | xử lý request | thư bưu điện | hàng đợi, xử lý bất đồng bộ |
26
+ | xử lý lỗi | cầu dao điện | cô lập sự cố, xuống cấp có kiểm soát |
27
+
28
+ ## Quy trình
29
+
30
+ 1. **Chọn hai khái niệm không liên quan**, từ hai lĩnh vực khác nhau.
31
+ 2. **Ép ghép** — "nếu coi A như B thì sao?"
32
+ 3. **Khai thác tính chất mới** — xuất hiện năng lực nào chưa từng nghĩ tới?
33
+ 4. **Thử biên** — ẩn dụ gãy ở đâu?
34
+ 5. **Rút nhận định.**
35
+
36
+ **Bước 4 là bước không được bỏ.** Ẩn dụ nào cũng gãy ở đâu đó; biết nó gãy chỗ nào mới là
37
+ phần dùng được. Đem một ẩn dụ đi quá biên của nó là cách sinh ra kiến trúc sai một cách
38
+ thanh lịch.
39
+
40
+ ## Ví dụ chi tiết
41
+
42
+ **Vấn đề:** hệ phân tán, lỗi lan dây chuyền.
43
+
44
+ **Va chạm:** "nếu coi service như mạch điện?"
45
+
46
+ **Tính chất mới:**
47
+ - cầu dao (ngắt khi quá tải)
48
+ - cầu chì (bảo vệ một lần)
49
+ - nối đất (cô lập lỗi)
50
+ - cân tải (phân bổ dòng)
51
+ - ổn áp (giới hạn tần suất)
52
+
53
+ **Chỗ ẩn dụ đúng:** chặn lỗi lan, cô lập sự cố.
54
+
55
+ **Chỗ ẩn dụ gãy:** mạch điện không có retry, không tự lành.
56
+
57
+ **Nhận định rút ra:** mẫu cô lập sự cố mượn được từ kỹ thuật điện; mẫu tự phục hồi thì
58
+ phải lấy từ chỗ khác — sinh học chẳng hạn.
59
+
60
+ ## Lĩnh vực nguồn tốt
61
+
62
+ **Vật lý** (lực, nhiệt động, tương đối) · **Sinh học** (tiến hoá, hệ sinh thái, miễn dịch)
63
+ · **Kinh tế** (thị trường, động lực, lý thuyết trò chơi) · **Tâm lý** (nhận thức, hành vi)
64
+ · **Kiến trúc** (kết cấu, luồng di chuyển, tổ chức không gian).
65
+
66
+ ## Nhớ
67
+
68
+ - Ghép càng lạ càng hay ra nhận định tốt. Ghép an toàn thì chỉ ra thứ đã biết.
69
+ - Ghi lại cả va chạm **thất bại** — chỗ ẩn dụ gãy cũng là thông tin.
70
+ - Câu hỏi mở khoá: **"người giỏi nhất ở lĩnh vực kia sẽ làm gì với bài toán này?"**
71
+ - Đem về dưới dạng khuyến nghị kèm biên của ẩn dụ, đừng đem về một ẩn dụ trần.
@@ -0,0 +1,88 @@
1
+ # Bài tập đảo ngược
2
+
3
+ Lật giả định lõi để lộ ràng buộc ngầm: **"nếu ngược lại thì sao?"**
4
+
5
+ ## Nguyên lý
6
+
7
+ **Đảo ngược làm lộ giả định chưa ai nói ra.** Đôi khi cái ngược lại mới là câu trả lời —
8
+ nhưng kể cả khi không, việc lật cũng cho thấy vì sao cái đang có là đúng.
9
+
10
+ ## Khi nào dùng
11
+
12
+ | Triệu chứng | Việc phải làm |
13
+ |---|---|
14
+ | "chỉ có một cách thôi" | lật giả định đó |
15
+ | giải pháp thấy gượng | lật ràng buộc |
16
+ | không nói được vì sao nó bắt buộc | chất vấn chữ "phải" |
17
+ | "xưa nay vẫn làm thế" | thử làm ngược |
18
+
19
+ ## Đảo ngược mẫu
20
+
21
+ | Giả định thường | Lật lại | Lộ ra |
22
+ |---|---|---|
23
+ | cache để giảm độ trễ | thêm độ trễ để cache được | mẫu debounce |
24
+ | kéo dữ liệu khi cần | đẩy dữ liệu trước khi cần | prefetch, nạp sớm |
25
+ | xử lý lỗi khi lỗi xảy ra | làm cho lỗi không thể xảy ra | hệ kiểu, contract |
26
+ | thêm tính năng người dùng muốn | bỏ tính năng người dùng không cần | đơn giản > bổ sung |
27
+ | tối ưu cho ca phổ biến | tối ưu cho ca tệ nhất | mẫu chịu lỗi |
28
+
29
+ ## Quy trình
30
+
31
+ 1. **Liệt kê giả định lõi** — cái gì đang được coi là "phải" đúng?
32
+ 2. **Lật từng cái** — "nếu ngược lại thì sao?"
33
+ 3. **Truy hệ quả** — làm khác đi thế nào?
34
+ 4. **Tìm đảo ngược hợp lệ** — cái nào thật sự chạy được ở đâu đó?
35
+ 5. **Ghi nhận định.**
36
+
37
+ ## Ví dụ
38
+
39
+ **Vấn đề:** người dùng kêu app chậm.
40
+
41
+ **Cách thường:** làm mọi thứ nhanh hơn — cache, tối ưu truy vấn, CDN, giảm bundle.
42
+
43
+ **Lật lại:** cố tình làm chậm ở vài chỗ.
44
+
45
+ - **Debounce ô tìm kiếm** — thêm độ trễ → kết quả tốt hơn (đợi gõ xong).
46
+ - **Giới hạn tần suất** — thêm ma sát → chặn lạm dụng, người khác được phục vụ tốt hơn.
47
+ - **Lazy load** — hoãn tải → thời gian tải đầu ngắn lại.
48
+ - **Render dần** — hiện chậm hơn nhưng hiện sớm → *cảm giác* nhanh hơn.
49
+
50
+ **Nhận định:** chậm có chiến lược cải thiện trải nghiệm. Cái người dùng cảm nhận không phải
51
+ tổng thời gian, mà là thời gian phải chờ trước khi thấy gì đó.
52
+
53
+ ## Đảo ngược hợp lệ và không hợp lệ
54
+
55
+ **Hợp lệ:**
56
+ - Thường: "lưu dữ liệu vào database."
57
+ - Lật: "tính lại khi cần thay vì lưu."
58
+ - Hợp lệ khi: tính rẻ hơn lưu, dữ liệu đổi liên tục.
59
+
60
+ **Không hợp lệ:**
61
+ - Thường: "kiểm dữ liệu người dùng nhập."
62
+ - Lật: "tin mọi dữ liệu nhập vào."
63
+ - Không hợp lệ vì: đó là lỗ bảo mật, không phụ thuộc ngữ cảnh nào cả.
64
+
65
+ **Cách thử:** đảo ngược này có chạy được trong **bất kỳ** ngữ cảnh nào không? Có → nó hợp
66
+ lệ ở đâu đó, đáng khám phá. Không → bỏ, đừng cố.
67
+
68
+ ## Cặp hay lật
69
+
70
+ Sớm ↔ lười · đẩy ↔ kéo · lưu ↔ tính · tối ưu ↔ đơn giản hoá · thêm ↔ bớt.
71
+
72
+ ## Với alp-code
73
+
74
+ Repo này có sẵn vài giả định đáng lật khi bế tắc:
75
+
76
+ - "ACL phải do harness enforce" ↔ "nếu hook không chạy thì sao?" — chính câu hỏi này sinh
77
+ ra thiết kế fail đóng hiện tại.
78
+ - "mỗi vai một phiên riêng" ↔ "nếu gộp thì sao?" — lật để thấy vì sao tách là đúng.
79
+
80
+ Lật một nguyên tắc trong `compiled policy invariants` là bài tập tư duy hợp lệ. **Đề xuất đổi nó thì phải
81
+ qua principal** — chỉ principal sửa CHARTER (compiled policy invariants).
82
+
83
+ ## Nhớ
84
+
85
+ - Không phải đảo ngược nào cũng chạy. Thử biên.
86
+ - Đảo ngược hợp lệ cho thấy "luật" thật ra chỉ đúng trong một ngữ cảnh.
87
+ - Ghi lại cả lần lật thất bại — nó chứng minh vì sao cách hiện tại đúng, và đó là thứ đáng
88
+ ghi vào plan.
@@ -0,0 +1,80 @@
1
+ # Nhận mẫu meta
2
+
3
+ Tìm mẫu xuất hiện ở **3+ lĩnh vực** để rút ra nguyên lý dùng chung được.
4
+
5
+ ## Nguyên lý
6
+
7
+ **Tìm mẫu trong cách các mẫu hình thành.** Cùng một hình dạng xuất hiện ở 3 lĩnh vực không
8
+ liên quan thì nhiều khả năng nó là nguyên lý phổ quát, đáng rút ra.
9
+
10
+ ## Khi nào dùng
11
+
12
+ | Triệu chứng | Việc phải làm |
13
+ |---|---|
14
+ | cùng vấn đề ở nhiều chỗ khác nhau | rút dạng trừu tượng |
15
+ | cảm giác đã gặp bài này rồi | tìm mẫu phổ quát |
16
+ | phát minh lại bánh xe ở nhiều mảng | nhận diện mẫu meta |
17
+ | "hình như mình làm cái này rồi?" | rồi — tìm lại và dùng lại |
18
+
19
+ ## Mẫu tham chiếu
20
+
21
+ | Mẫu xuất hiện ở | Dạng trừu tượng | Còn ở đâu nữa |
22
+ |---|---|---|
23
+ | cache CPU / DB / HTTP / DNS | đưa dữ liệu hay dùng lại gần chỗ dùng | cache prompt LLM, CDN |
24
+ | phân lớp (mạng / lưu trữ / tính toán) | tách mối quan tâm thành các tầng trừu tượng | kiến trúc, cơ cấu tổ chức |
25
+ | hàng đợi (message / task / request) | tách người sản xuất khỏi người tiêu thụ bằng bộ đệm | hệ sự kiện, bất đồng bộ |
26
+ | pool (kết nối / thread / object) | dùng lại tài nguyên đắt | quản lý bộ nhớ |
27
+
28
+ ## Quy trình
29
+
30
+ 1. **Thấy lặp lại** — cùng một hình dạng ở 3+ chỗ.
31
+ 2. **Rút dạng trừu tượng** — mô tả nó mà **không nhắc tới lĩnh vực nào**.
32
+ 3. **Nhận điểm biến thiên** — mỗi lĩnh vực thích nghi khác nhau ở chỗ nào?
33
+ 4. **Kiểm khả dụng** — còn chỗ nào dùng được nữa?
34
+ 5. **Ghi lại mẫu** cho lần sau.
35
+
36
+ Bước 2 là bài kiểm tra thật: **mô tả được mà không nhắc lĩnh vực nào không?** Không mô tả
37
+ được nghĩa là bạn đang thấy ba thứ giống nhau bề ngoài, không phải một mẫu.
38
+
39
+ ## Ví dụ
40
+
41
+ **Mẫu:** giới hạn tần suất xuất hiện ở —
42
+
43
+ - throttle API (request mỗi phút)
44
+ - định hình lưu lượng mạng (gói tin mỗi giây)
45
+ - cầu dao (số lỗi trong một cửa sổ)
46
+ - kiểm soát nạp vào (số kết nối đồng thời)
47
+
48
+ **Dạng trừu tượng:** chặn mức tiêu thụ tài nguyên để tránh cạn kiệt.
49
+
50
+ **Điểm biến thiên:** tài nguyên gì · giới hạn theo cửa sổ thời gian hay đồng thời hay tích
51
+ luỹ · vượt thì làm gì (từ chối, xếp hàng, xuống cấp).
52
+
53
+ **Ứng dụng mới:** ngân sách token cho LLM — cùng mẫu, tài nguyên là token, giới hạn là
54
+ kích thước cửa sổ context, vượt thì cắt bớt hoặc từ chối.
55
+
56
+ Ngân sách 5 lượt tìm của `research` và giới hạn "boot set ≤ 7 nguồn" của CHARTER §2.6
57
+ cũng là cùng mẫu này.
58
+
59
+ ## Luật 3 lĩnh vực
60
+
61
+ | Số lần thấy | Nghĩa |
62
+ |---|---|
63
+ | 1 | trùng hợp |
64
+ | 2 | có thể là mẫu |
65
+ | 3+ | nhiều khả năng phổ quát |
66
+
67
+ Rút mẫu từ 2 lần thấy là trừu tượng hoá sớm — và trừu tượng sai đắt hơn trùng lặp.
68
+
69
+ ## Cờ đỏ — đang bỏ lỡ mẫu meta
70
+
71
+ - "vấn đề này đặc thù, không giống ai" — hầu như luôn sai.
72
+ - Nhiều người đang giải những bài "khác nhau" theo cách giống hệt nhau.
73
+ - Phát minh lại bánh xe ở các mảng khác nhau.
74
+
75
+ ## Nhớ
76
+
77
+ - Dạng trừu tượng cho thấy **ứng dụng mới** — đó mới là giá trị, không phải việc đặt tên.
78
+ - Điểm biến thiên cho biết mẫu thích nghi ở đâu, và ở đâu thì gãy.
79
+ - Ghi lại để lần sau khỏi tìm lại — với alp-code, fact loại này thuộc `memory/shared/`,
80
+ và việc ghi thuộc về bên có quyền ghi.
@@ -0,0 +1,82 @@
1
+ # Trò chơi quy mô
2
+
3
+ Thử ở cực trị — lớn gấp 1000, nhỏ đi 1000, tức thì, kéo dài một năm — để lộ ra bản chất bị
4
+ che ở quy mô bình thường.
5
+
6
+ ## Nguyên lý
7
+
8
+ **Cực trị làm lộ bản chất.** Thứ chạy tốt ở quy mô này hỏng ở quy mô khác, và chỗ nó hỏng
9
+ cho biết cái gì là thiết yếu, cái gì chỉ là ngẫu nhiên.
10
+
11
+ ## Khi nào dùng
12
+
13
+ | Triệu chứng | Việc phải làm |
14
+ |---|---|
15
+ | "chắc scale được" mà chưa thử | thử ở cực trị |
16
+ | không rõ chạy thật sẽ thế nào | nhân lên 1000 lần |
17
+ | edge case chưa rõ | thử cả tối thiểu lẫn tối đa |
18
+ | cần thẩm định kiến trúc | thử cực trị trước khi chốt |
19
+
20
+ ## Các chiều
21
+
22
+ | Chiều | Thử ở cực trị | Lộ ra |
23
+ |---|---|---|
24
+ | **Khối lượng** | 1 phần tử ↔ 1 tỷ | giới hạn độ phức tạp thuật toán |
25
+ | **Tốc độ** | tức thì ↔ một năm | nhu cầu bất đồng bộ, nhu cầu cache |
26
+ | **Người dùng** | 1 ↔ 1 tỷ | vấn đề đồng thời, giới hạn tài nguyên |
27
+ | **Thời lượng** | mili giây ↔ nhiều năm | rò bộ nhớ, trạng thái phình |
28
+ | **Tỷ lệ lỗi** | không bao giờ lỗi ↔ luôn lỗi | xử lý lỗi có đủ không |
29
+
30
+ ## Quy trình
31
+
32
+ 1. **Chọn chiều** — cái gì có thể biến thiên cực đoan?
33
+ 2. **Thử cực tiểu** — nhỏ/nhanh/ít đi 1000 lần thì sao?
34
+ 3. **Thử cực đại** — lớn/chậm/nhiều lên 1000 lần thì sao?
35
+ 4. **Ghi cái gì vỡ** — giới hạn nằm ở đâu?
36
+ 5. **Ghi cái gì sống** — phần nào vững về bản chất?
37
+ 6. **Thiết kế cho thực tế** — dùng nhận định để thẩm định kiến trúc.
38
+
39
+ ## Ví dụ
40
+
41
+ **Xử lý lỗi.** Quy mô thường: "có lỗi thì xử lý" — ổn. Ở 1 tỷ: lượng lỗi làm ngập hệ log,
42
+ sập hệ. → Phải làm cho lỗi **không thể xảy ra** (hệ kiểu), hoặc **coi lỗi là bình thường**
43
+ (thiết kế chịu lỗi). Thiết kế xử lý lỗi theo *khối lượng*, không chỉ theo *sự kiện*.
44
+
45
+ **API đồng bộ.** Quy mô thường: gọi trực tiếp, dưới 100ms — ổn. Quy mô toàn cầu: độ trễ
46
+ mạng 200–500ms làm đồng bộ không dùng được. → Bất đồng bộ trở thành điều kiện sống, không
47
+ phải tối ưu.
48
+
49
+ **Trạng thái trong bộ nhớ.** Chạy vài giờ/vài ngày: ổn. Chạy nhiều năm: bộ nhớ phình vô
50
+ hạn, sập. → Cần lưu ra ngoài hoặc dọn định kỳ.
51
+
52
+ ## Chiều nhỏ cũng quan trọng
53
+
54
+ Thử **nhỏ lại** hay bị bỏ qua, mà nó lộ ra over-engineering:
55
+
56
+ - Nếu chỉ có 1 người dùng thì độ phức tạp này còn hợp lý không?
57
+ - Nếu chỉ có 10 phần tử thì tối ưu kia có sớm quá không?
58
+ - Nếu phản hồi tức thì thì cái gì trở thành không cần?
59
+
60
+ Với alp-code, chiều nhỏ là chiều đúng để thử: hệ này có **8 vai và một principal**. Đề xuất
61
+ nào chỉ có nghĩa ở quy mô hàng trăm agent thì là over-engineering ở đây — và YAGNI là luật
62
+ thành văn của repo.
63
+
64
+ ## Cờ đỏ
65
+
66
+ - "chạy được ở máy tôi" — nhưng chạy thật thì sao?
67
+ - Không biết giới hạn nằm ở đâu.
68
+ - "chắc scale được" mà không có bằng chứng.
69
+ - Bị bất ngờ bởi hành vi lúc chạy thật.
70
+ - Kiến trúc thấy tuỳ tiện, không có lý do cho các lựa chọn.
71
+
72
+ ## Xong thì phải biết
73
+
74
+ - Hệ vỡ ở đâu — **giới hạn cụ thể**, không phải cảm giác.
75
+ - Cái gì sống sót — phần vững về bản chất.
76
+ - Cái gì phải thiết kế lại — phần phụ thuộc quy mô.
77
+
78
+ ## Nhớ
79
+
80
+ - Thử **cả hai chiều**, lớn và nhỏ.
81
+ - Đừng đoán — thử. "Chắc là" không phải kết luận.
82
+ - Nhận định rút ra đi vào khuyến nghị, kèm con số cụ thể chứ không kèm tính từ.
@@ -0,0 +1,83 @@
1
+ # Thác đơn giản hoá
2
+
3
+ Tìm **một** nhận định xoá được nhiều thành phần cùng lúc: "nếu điều này đúng thì không cần
4
+ X, Y, Z nữa."
5
+
6
+ ## Nguyên lý
7
+
8
+ **"Mọi thứ đều là trường hợp riêng của…"** — vế sau câu này, khi điền đúng, làm sập cả một
9
+ mảng phức tạp.
10
+
11
+ Một trừu tượng mạnh hơn mười thủ thuật khéo.
12
+
13
+ ## Khi nào dùng
14
+
15
+ | Triệu chứng | Việc phải làm |
16
+ |---|---|
17
+ | cùng một thứ triển khai 5 kiểu | trừu tượng hoá mẫu chung |
18
+ | danh sách special case cứ dài ra | tìm trường hợp tổng quát |
19
+ | luật phức tạp kèm nhiều ngoại lệ | tìm luật không có ngoại lệ |
20
+ | quá nhiều tuỳ chọn config | tìm mặc định đúng cho 95% |
21
+
22
+ ## Cách tìm
23
+
24
+ Tìm dấu hiệu: nhiều bản triển khai của những khái niệm na ná nhau · xử lý special case rải
25
+ khắp nơi · câu "cần xử lý A, B, C, D theo cách khác nhau" · luật nhiều ngoại lệ.
26
+
27
+ Rồi hỏi: **"nếu bên dưới chúng là cùng một thứ thì sao?"**
28
+
29
+ ## Ví dụ
30
+
31
+ **Trừu tượng stream**
32
+ - Trước: handler riêng cho dữ liệu batch / thời gian thực / file / mạng.
33
+ - Nhận định: "mọi đầu vào đều là stream, chỉ khác nguồn."
34
+ - Sau: một bộ xử lý stream, nhiều nguồn stream.
35
+ - Xoá được: 4 bản triển khai.
36
+
37
+ **Quản trị tài nguyên**
38
+ - Trước: theo dõi session, giới hạn tần suất, kiểm file, pool kết nối — bốn hệ riêng.
39
+ - Nhận định: "tất cả đều là giới hạn tài nguyên theo từng thực thể."
40
+ - Sau: một `ResourceGovernor`, bốn loại tài nguyên.
41
+
42
+ **Bất biến**
43
+ - Trước: copy phòng thủ, khoá, huỷ cache, phụ thuộc thứ tự thời gian.
44
+ - Nhận định: "coi mọi thứ là dữ liệu bất biến + phép biến đổi."
45
+ - Xoá được: cả một lớp bài toán đồng bộ.
46
+
47
+ ## Quy trình
48
+
49
+ 1. **Liệt kê biến thể** — cái gì đang được làm nhiều kiểu?
50
+ 2. **Tìm bản chất** — bên dưới chúng giống nhau ở đâu?
51
+ 3. **Rút trừu tượng** — mẫu đó, bỏ hết chi tiết nghiệp vụ, là gì?
52
+ 4. **Thử khớp** — mọi trường hợp hiện có có vừa không? Có cái nào phải gượng ép không?
53
+ 5. **Đo thác** — bao nhiêu thứ trở thành không cần thiết?
54
+
55
+ Bước 4 là bước quyết định. Một trừu tượng phải **gượng ép** mới nhét vừa một trường hợp thì
56
+ nó chưa đúng — và nó sẽ đẻ ra special case mới ngay sau khi bạn áp dụng.
57
+
58
+ ## Cờ đỏ — đang bỏ lỡ một thác
59
+
60
+ - "chỉ cần thêm một case nữa thôi" — lặp mãi không dứt.
61
+ - "chúng giống nhau nhưng khác nhau" — có thể chúng giống thật?
62
+ - Refactor như đập chuột: sửa chỗ này vỡ chỗ kia.
63
+ - File config cứ dài ra.
64
+ - "Đừng đụng vào đó, phức tạp lắm" — phức tạp đang che một mẫu chưa được nhận ra.
65
+
66
+ ## Thước đo
67
+
68
+ - **Thắng 10 lần, không phải 10%.** Cải thiện 10% thì không phải thác.
69
+ - Đo bằng "xoá được bao nhiêu thứ", không phải "thêm được bao nhiêu".
70
+ - Số dòng xoá > số dòng thêm.
71
+ - Số tuỳ chọn config biến mất.
72
+
73
+ ## Với alp-code
74
+
75
+ Repo này đã có sẵn nguyên tắc cùng hướng — `README.md`: `scripts/lib/` là **"MỘT nguồn cho
76
+ mỗi loại config"**. Khi đề xuất một thác, kiểm xem nó có đang dựng thêm nguồn thứ hai cho
77
+ cùng một loại dữ liệu không. Nếu có thì đó không phải thác, đó là mảnh vỡ mới.
78
+
79
+ ## Nhớ
80
+
81
+ - Mẫu thường **đã có sẵn**, chỉ chưa ai gọi tên nó.
82
+ - Thác đúng thì nhìn lại thấy hiển nhiên. Nghe hiển nhiên không phải là dấu hiệu tầm thường.
83
+ - Ghi lại nhận định — nó có giá trị hơn bản refactor nó sinh ra.
@@ -0,0 +1,76 @@
1
+ # Khi bế tắc — chọn kỹ thuật
2
+
3
+ Mỗi dạng bế tắc cần một kỹ thuật khác. Chẩn đoán sai dạng thì kỹ thuật vô dụng.
4
+
5
+ ## Cây quyết định
6
+
7
+ ```
8
+ BẾ TẮC
9
+
10
+ ├─ Độ phức tạp phình? Cùng một thứ làm 5 kiểu? Special case mọc thêm mãi?
11
+ │ └─→ Thác đơn giản hoá
12
+
13
+ ├─ Không tìm được cách hợp? Cách thông thường không đủ?
14
+ │ └─→ Vùng va chạm
15
+
16
+ ├─ Cùng vấn đề ở nhiều chỗ? Phát minh lại bánh xe? Thấy quen quen?
17
+ │ └─→ Nhận mẫu meta
18
+
19
+ ├─ Giải pháp thấy gượng? "Buộc phải làm thế này"? Kẹt vì một giả định?
20
+ │ └─→ Bài tập đảo ngược
21
+
22
+ ├─ Chạy thật có chịu nổi không? Edge case chưa rõ? Không rõ giới hạn?
23
+ │ └─→ Trò chơi quy mô
24
+
25
+ └─ Code hỏng? Hành vi sai? Test fail?
26
+ └─→ KHÔNG phải bế tắc tư duy. Dùng skill `alp-debug`
27
+ ```
28
+
29
+ Nhánh cuối quan trọng: bug không phải bế tắc. Bug là thiếu bằng chứng. Đừng đem kỹ thuật
30
+ gỡ bế tắc ra dùng khi thứ bạn cần chỉ là đọc thêm log.
31
+
32
+ ## Bảng chẩn đoán
33
+
34
+ | Kiểu bế tắc | Triệu chứng cụ thể | Đọc |
35
+ |---|---|---|
36
+ | **Phức tạp phình** | cùng một thứ 5 kiểu, special case mọc thêm, if/else chồng chất | `simplification-cascades.md` |
37
+ | **Cần đột phá** | cách thông thường không đủ, không tìm được hướng hợp | `collision-zone-thinking.md` |
38
+ | **Mẫu lặp lại** | cùng vấn đề ở nhiều nơi, cảm giác đã gặp rồi | `meta-pattern-recognition.md` |
39
+ | **Kẹt vì giả định** | "buộc phải thế này", không dám chất vấn tiền đề | `inversion-exercise.md` |
40
+ | **Không rõ quy mô** | chạy thật thế nào chưa biết, edge case chưa rõ | `scale-game.md` |
41
+ | **Code hỏng** | hành vi sai, test fail | skill `alp-debug` |
42
+
43
+ ## Cách làm
44
+
45
+ 1. **Chẩn đoán dạng bế tắc** — khớp triệu chứng ở bảng trên.
46
+ 2. **Đọc đúng file kỹ thuật đó.**
47
+ 3. **Áp dụng theo quy trình, không rút gọn.** Rút gọn là quay về kiểu nghĩ cũ — đúng thứ
48
+ đang làm bạn bế tắc.
49
+ 4. **Ghi lại đã thử gì, kết quả sao.**
50
+ 5. **Vẫn tắc** → đổi kỹ thuật khác, hoặc kết hợp.
51
+
52
+ **Một kỹ thuật một lúc.** Trộn hai kỹ thuật ngay từ đầu thì không biết cái nào có tác dụng.
53
+
54
+ ## Kết hợp
55
+
56
+ - **Đơn giản hoá + Nhận mẫu meta** — tìm mẫu trước, rồi đơn giản hoá mọi thể hiện.
57
+ - **Va chạm + Đảo ngược** — ép ẩn dụ, rồi lật giả định của chính ẩn dụ đó.
58
+ - **Quy mô + Đơn giản hoá** — cực trị cho thấy nên bỏ cái gì.
59
+ - **Nhận mẫu meta + Quy mô** — nguyên lý chung đem thử ở cực trị.
60
+
61
+ ## Khi không kỹ thuật nào ăn thua
62
+
63
+ 1. **Đóng khung lại vấn đề** — có đang giải đúng bài toán không?
64
+ 2. **Giải thích cho người khác** — viết ra thành báo cáo thường tự lộ chỗ hổng.
65
+ 3. **Thu nhỏ phạm vi** — giải bản nhỏ hơn trước.
66
+ 4. **Chất vấn ràng buộc** — ràng buộc đó có thật, hay chỉ là giả định?
67
+
68
+ Vẫn không ra thì **nói thẳng là chưa ra**, kèm những gì đã loại trừ. Một câu
69
+ "chưa xác định được, đã loại trừ A, B, C" đáng giá hơn một khuyến nghị đoán bừa —
70
+ Một lượt gỡ bế tắc được mở ra vì độ tin cậy, không vì tốc độ.
71
+
72
+ ## Nhớ
73
+
74
+ - Khớp triệu chứng với kỹ thuật, đừng chọn theo cái mình quen.
75
+ - Ghi lại đã thử gì — để người đọc không đi lại đường cũ.
76
+ - Bế tắc là tạm thời, không phải vĩnh viễn.