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.
- package/CHANGELOG.md +770 -0
- package/LICENSE +21 -0
- package/README.md +295 -0
- package/alp.config.yaml +5 -0
- package/dist/src/agents/agent-definition.js +28 -0
- package/dist/src/agents/capability-catalog.js +33 -0
- package/dist/src/agents/compaction.js +36 -0
- package/dist/src/agents/errors.js +12 -0
- package/dist/src/agents/librarian.js +38 -0
- package/dist/src/agents/main.js +37 -0
- package/dist/src/agents/memory-grant.js +29 -0
- package/dist/src/agents/model-context.js +70 -0
- package/dist/src/agents/modes.js +134 -0
- package/dist/src/agents/oracle.js +36 -0
- package/dist/src/agents/read-thread.js +38 -0
- package/dist/src/agents/registry.js +238 -0
- package/dist/src/agents/render-identity.js +38 -0
- package/dist/src/agents/review.js +37 -0
- package/dist/src/agents/search.js +37 -0
- package/dist/src/agents/shared/house-rules.js +33 -0
- package/dist/src/agents/shared/principal.js +18 -0
- package/dist/src/agents/shared/voice.js +29 -0
- package/dist/src/agents/titling.js +32 -0
- package/dist/src/agents/types.js +15 -0
- package/dist/src/backend/execution-backend.js +2 -0
- package/dist/src/backend/local-execution-store.js +144 -0
- package/dist/src/backend/local-process-backend.js +533 -0
- package/dist/src/backend/local-supervisor.js +104 -0
- package/dist/src/cli/alp.js +380 -0
- package/dist/src/cli/commands/context.js +203 -0
- package/dist/src/cli/commands/delegate.js +136 -0
- package/dist/src/cli/commands/identity-sync.js +31 -0
- package/dist/src/cli/commands/init.js +184 -0
- package/dist/src/cli/commands/mode.js +22 -0
- package/dist/src/cli/commands/principal.js +114 -0
- package/dist/src/cli/commands/run-main.js +90 -0
- package/dist/src/cli/commands/runtime.js +21 -0
- package/dist/src/cli/mode-preference-store.js +62 -0
- package/dist/src/cli/mode-selector.js +178 -0
- package/dist/src/cli/update-check.js +77 -0
- package/dist/src/context/checkpoint.js +134 -0
- package/dist/src/context/compact-journal.js +153 -0
- package/dist/src/context/compact-payload.js +121 -0
- package/dist/src/context/continuity.js +70 -0
- package/dist/src/context/types.js +2 -0
- package/dist/src/delegation/backend-registry.js +40 -0
- package/dist/src/delegation/delegation-service.js +300 -0
- package/dist/src/delegation/types.js +12 -0
- package/dist/src/execution/execution-policy.js +96 -0
- package/dist/src/execution/execution-service.js +115 -0
- package/dist/src/execution/execution-store.js +78 -0
- package/dist/src/execution/identity-capsule.js +65 -0
- package/dist/src/execution/types.js +12 -0
- package/dist/src/hooks/execution-bridge.js +84 -0
- package/dist/src/index.js +4 -0
- package/dist/src/memory/adapters/markdown-file-store.js +257 -0
- package/dist/src/memory/adapters/memory-api-client.js +2 -0
- package/dist/src/memory/adapters/memory-path-mapper.js +76 -0
- package/dist/src/memory/adapters/remote-api-store.js +25 -0
- package/dist/src/memory/context-ranker.js +21 -0
- package/dist/src/memory/errors.js +58 -0
- package/dist/src/memory/memory-service.js +149 -0
- package/dist/src/memory/memory-store.js +2 -0
- package/dist/src/memory/types.js +2 -0
- package/dist/src/policy/capability-policy.js +29 -0
- package/dist/src/policy/delegation-policy.js +25 -0
- package/dist/src/policy/errors.js +10 -0
- package/dist/src/policy/invariants.js +31 -0
- package/dist/src/policy/memory-policy.js +22 -0
- package/dist/src/policy/policy-engine.js +85 -0
- package/dist/src/policy/types.js +8 -0
- package/dist/src/policy/workspace-policy.js +77 -0
- package/dist/src/principal/principal-profile-store.js +89 -0
- package/dist/src/runtime/adapter-files.js +147 -0
- package/dist/src/runtime/claude-adapter.js +177 -0
- package/dist/src/runtime/codex-adapter.js +169 -0
- package/dist/src/runtime/permission-rules.js +156 -0
- package/dist/src/runtime/render-session-context.js +124 -0
- package/dist/src/runtime/render-task-input.js +33 -0
- package/dist/src/runtime/runtime-adapter.js +2 -0
- package/dist/src/runtime/runtime-preference-store.js +66 -0
- package/dist/src/runtime/runtime-selector.js +178 -0
- package/dist/src/runtime/types.js +2 -0
- package/dist/src/runtime/windows-shim.js +57 -0
- package/dist/src/state-paths.js +49 -0
- package/dist/src/workflow/output-validator.js +27 -0
- package/dist/src/workflow/repair-policy.js +8 -0
- package/dist/src/workflow/types.js +22 -0
- package/dist/src/workflow/workflow-runner.js +81 -0
- package/hooks/compact-record.cjs +109 -0
- package/hooks/session-boot.cjs +112 -0
- package/hooks/session-end.cjs +34 -0
- package/package.json +48 -0
- package/scaffold/memory/INDEX.md +27 -0
- package/scaffold/memory/README.md +76 -0
- package/scaffold/memory/projects/INDEX.md +22 -0
- package/scaffold/memory/projects/PROTOCOL.md +128 -0
- package/scaffold/memory/projects/_template/PROJECT.md +45 -0
- package/scripts/alp.cjs +126 -0
- package/scripts/alp.ps1 +4 -0
- package/scripts/alp.sh +3 -0
- package/scripts/bootstrap.cjs +144 -0
- package/scripts/checkout-release.cjs +30 -0
- package/scripts/delegate.cjs +19 -0
- package/scripts/doctor.cjs +158 -0
- package/scripts/doctor.sh +3 -0
- package/scripts/ensure-state.cjs +22 -0
- package/scripts/lib/cli-link.cjs +375 -0
- package/scripts/lib/codex-role.cjs +18 -0
- package/scripts/lib/delegation/command-runner.cjs +108 -0
- package/scripts/lib/delegation/config.cjs +81 -0
- package/scripts/lib/install-paths.cjs +154 -0
- package/scripts/lib/release-manifest.cjs +42 -0
- package/scripts/lib/semver-lite.cjs +20 -0
- package/scripts/lib/state.cjs +274 -0
- package/scripts/lib/uninstall.cjs +252 -0
- package/scripts/lib/update-check-worker.cjs +21 -0
- package/scripts/lib/update.cjs +395 -0
- package/scripts/run-role.cjs +42 -0
- package/scripts/run-role.ps1 +4 -0
- package/scripts/run-role.sh +3 -0
- package/scripts/sync-project-index.sh +167 -0
- package/skills/agent-memory/SKILL.md +109 -0
- package/skills/alp-debug/SKILL.md +90 -0
- package/skills/alp-debug/references/defense-in-depth.md +118 -0
- package/skills/alp-debug/references/investigation-methodology.md +106 -0
- package/skills/alp-debug/references/log-and-ci-analysis.md +96 -0
- package/skills/alp-debug/references/performance-diagnostics.md +112 -0
- package/skills/alp-debug/references/reporting-standards.md +120 -0
- package/skills/alp-debug/references/root-cause-tracing.md +134 -0
- package/skills/alp-debug/references/systematic-debugging.md +93 -0
- package/skills/alp-debug/references/verification.md +86 -0
- package/skills/alp-debug/scripts/find-polluter.sh +63 -0
- package/skills/alp-debug/scripts/find-polluter.test.md +102 -0
- package/skills/alp-plan/SKILL.md +128 -0
- package/skills/alp-plan/references/archive-workflow.md +77 -0
- package/skills/alp-plan/references/codebase-understanding.md +55 -0
- package/skills/alp-plan/references/output-standards.md +96 -0
- package/skills/alp-plan/references/plan-organization.md +129 -0
- package/skills/alp-plan/references/red-team-personas.md +76 -0
- package/skills/alp-plan/references/red-team-workflow.md +81 -0
- package/skills/alp-plan/references/research-phase.md +57 -0
- package/skills/alp-plan/references/scope-challenge.md +82 -0
- package/skills/alp-plan/references/solution-design.md +76 -0
- package/skills/alp-plan/references/validate-question-framework.md +89 -0
- package/skills/alp-plan/references/validate-workflow.md +83 -0
- package/skills/alp-predict/SKILL.md +98 -0
- package/skills/alp-scenario/SKILL.md +86 -0
- package/skills/code-review/SKILL.md +111 -0
- package/skills/code-review/references/code-review-reception.md +114 -0
- package/skills/code-review/references/edge-case-scouting.md +78 -0
- package/skills/code-review/references/verification-before-completion.md +117 -0
- package/skills/delegation/SKILL.md +46 -0
- package/skills/docs-seeker/.env.example +15 -0
- package/skills/docs-seeker/SKILL.md +87 -0
- package/skills/docs-seeker/package.json +25 -0
- package/skills/docs-seeker/references/advanced.md +82 -0
- package/skills/docs-seeker/references/context7-patterns.md +68 -0
- package/skills/docs-seeker/references/errors.md +72 -0
- package/skills/docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/skills/docs-seeker/scripts/detect-topic.js +172 -0
- package/skills/docs-seeker/scripts/fetch-docs.js +213 -0
- package/skills/docs-seeker/scripts/tests/run-tests.js +72 -0
- package/skills/docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/skills/docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/skills/docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/skills/docs-seeker/scripts/utils/env-loader.js +94 -0
- package/skills/docs-seeker/workflows/library-search.md +73 -0
- package/skills/docs-seeker/workflows/repo-analysis.md +90 -0
- package/skills/docs-seeker/workflows/topic-search.md +69 -0
- package/skills/git/SKILL.md +121 -0
- package/skills/git/references/branch-management.md +90 -0
- package/skills/git/references/commit-standards.md +82 -0
- package/skills/git/references/gh-cli-guide.md +132 -0
- package/skills/git/references/safety-protocols.md +86 -0
- package/skills/git/references/workflow-commit.md +89 -0
- package/skills/git/references/workflow-merge.md +63 -0
- package/skills/git/references/workflow-pr.md +70 -0
- package/skills/git/references/workflow-push.md +62 -0
- package/skills/gkg/SKILL.md +87 -0
- package/skills/gkg/references/cli-commands.md +92 -0
- package/skills/gkg/references/http-api.md +99 -0
- package/skills/gkg/references/language-support.md +54 -0
- package/skills/problem-solving/SKILL.md +86 -0
- package/skills/problem-solving/references/attribution.md +48 -0
- package/skills/problem-solving/references/collision-zone-thinking.md +71 -0
- package/skills/problem-solving/references/inversion-exercise.md +88 -0
- package/skills/problem-solving/references/meta-pattern-recognition.md +80 -0
- package/skills/problem-solving/references/scale-game.md +82 -0
- package/skills/problem-solving/references/simplification-cascades.md +83 -0
- package/skills/problem-solving/references/when-stuck.md +76 -0
- package/skills/repomix/SKILL.md +94 -0
- package/skills/repomix/references/configuration.md +134 -0
- package/skills/repomix/references/usage-patterns.md +106 -0
- package/skills/repomix/scripts/.coverage +0 -0
- package/skills/repomix/scripts/README.md +179 -0
- package/skills/repomix/scripts/repomix_batch.py +455 -0
- package/skills/repomix/scripts/repos.example.json +15 -0
- package/skills/repomix/scripts/requirements.txt +15 -0
- package/skills/repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/research/SKILL.md +107 -0
- package/skills/security-scan/SKILL.md +101 -0
- package/skills/security-scan/references/secret-patterns.md +75 -0
- 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.
|