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,63 @@
1
+ #!/bin/bash
2
+ # Bisection script to find which test creates unwanted files/state
3
+ # Usage: ./find-polluter.sh <file_or_dir_to_check> <test_pattern>
4
+ # Example: ./find-polluter.sh '.git' 'src/**/*.test.ts'
5
+
6
+ set -e
7
+
8
+ if [ $# -ne 2 ]; then
9
+ echo "Usage: $0 <file_to_check> <test_pattern>"
10
+ echo "Example: $0 '.git' 'src/**/*.test.ts'"
11
+ exit 1
12
+ fi
13
+
14
+ POLLUTION_CHECK="$1"
15
+ TEST_PATTERN="$2"
16
+
17
+ echo "🔍 Searching for test that creates: $POLLUTION_CHECK"
18
+ echo "Test pattern: $TEST_PATTERN"
19
+ echo ""
20
+
21
+ # Get list of test files
22
+ TEST_FILES=$(find . -path "$TEST_PATTERN" | sort)
23
+ TOTAL=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
24
+
25
+ echo "Found $TOTAL test files"
26
+ echo ""
27
+
28
+ COUNT=0
29
+ for TEST_FILE in $TEST_FILES; do
30
+ COUNT=$((COUNT + 1))
31
+
32
+ # Skip if pollution already exists
33
+ if [ -e "$POLLUTION_CHECK" ]; then
34
+ echo "⚠️ Pollution already exists before test $COUNT/$TOTAL"
35
+ echo " Skipping: $TEST_FILE"
36
+ continue
37
+ fi
38
+
39
+ echo "[$COUNT/$TOTAL] Testing: $TEST_FILE"
40
+
41
+ # Run the test
42
+ npm test "$TEST_FILE" > /dev/null 2>&1 || true
43
+
44
+ # Check if pollution appeared
45
+ if [ -e "$POLLUTION_CHECK" ]; then
46
+ echo ""
47
+ echo "🎯 FOUND POLLUTER!"
48
+ echo " Test: $TEST_FILE"
49
+ echo " Created: $POLLUTION_CHECK"
50
+ echo ""
51
+ echo "Pollution details:"
52
+ ls -la "$POLLUTION_CHECK"
53
+ echo ""
54
+ echo "To investigate:"
55
+ echo " npm test $TEST_FILE # Run just this test"
56
+ echo " cat $TEST_FILE # Review test code"
57
+ exit 1
58
+ fi
59
+ done
60
+
61
+ echo ""
62
+ echo "✅ No polluter found - all tests clean!"
63
+ exit 0
@@ -0,0 +1,102 @@
1
+ # find-polluter.sh Test Documentation
2
+
3
+ ## Purpose
4
+ Bisection script to find which test creates unwanted files or state pollution.
5
+
6
+ ## Manual Test Procedure
7
+
8
+ ### Setup Test Scenario
9
+ ```bash
10
+ # Create test directory
11
+ mkdir -p /tmp/polluter-test && cd /tmp/polluter-test
12
+
13
+ # Create clean test
14
+ cat > test1.test.js << 'EOF'
15
+ console.log('Test 1: clean');
16
+ EOF
17
+
18
+ # Create polluter test
19
+ cat > test2.test.js << 'EOF'
20
+ const fs = require('fs');
21
+ fs.mkdirSync('.git', { recursive: true });
22
+ console.log('Test 2: creates pollution');
23
+ EOF
24
+
25
+ # Create another clean test
26
+ cat > test3.test.js << 'EOF'
27
+ console.log('Test 3: clean');
28
+ EOF
29
+ ```
30
+
31
+ ### Run Script
32
+ ```bash
33
+ # For projects with npm test
34
+ /path/to/find-polluter.sh '.git' 'src/**/*.test.ts'
35
+
36
+ # For node-only tests (modify script to use 'node' instead of 'npm test')
37
+ ./find-polluter.sh '.git' '*.test.js'
38
+ ```
39
+
40
+ ### Expected Output
41
+ ```
42
+ 🔍 Searching for test that creates: .git
43
+ Test pattern: *.test.js
44
+
45
+ Found 3 test files
46
+
47
+ [1/3] Testing: ./test1.test.js
48
+ [2/3] Testing: ./test2.test.js
49
+
50
+ 🎯 FOUND POLLUTER!
51
+ Test: ./test2.test.js
52
+ Created: .git
53
+ ```
54
+
55
+ ### Cleanup
56
+ ```bash
57
+ rm -rf /tmp/polluter-test
58
+ ```
59
+
60
+ ## Test Results
61
+
62
+ ✅ Script logic verified (2025-11-11)
63
+ - Correctly iterates through test files
64
+ - Detects pollution creation
65
+ - Reports the polluting test file
66
+ - Exits early when polluter found
67
+
68
+ ## Usage Notes
69
+
70
+ **Prerequisites:**
71
+ - Test runner (npm test) must be configured in project
72
+ - Test pattern must match actual test files
73
+ - Pollution path must be accurate
74
+
75
+ **Customization:**
76
+ If your project doesn't use `npm test`, modify line 42:
77
+ ```bash
78
+ # Replace
79
+ npm test "$TEST_FILE" > /dev/null 2>&1 || true
80
+
81
+ # With your test command
82
+ node "$TEST_FILE" > /dev/null 2>&1 || true
83
+ # Or
84
+ jest "$TEST_FILE" > /dev/null 2>&1 || true
85
+ ```
86
+
87
+ ## Common Use Cases
88
+
89
+ 1. **Find test creating .git directory:**
90
+ ```bash
91
+ ./find-polluter.sh '.git' 'src/**/*.test.ts'
92
+ ```
93
+
94
+ 2. **Find test creating node_modules:**
95
+ ```bash
96
+ ./find-polluter.sh 'node_modules' 'test/**/*.spec.js'
97
+ ```
98
+
99
+ 3. **Find test creating specific file:**
100
+ ```bash
101
+ ./find-polluter.sh 'unwanted-file.txt' '**/*.test.js'
102
+ ```
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: alp-plan
3
+ description: Lập kế hoạch triển khai — thách thức phạm vi, thu thập bối cảnh, thiết kế giải pháp, chia phase, viết plan vào plans/. Kích hoạt khi principal giao một việc đủ lớn để cần chia bước, khi phải chốt kiến trúc trước lúc viết code, hoặc khi cần rà kế hoạch cũ trước khi mở kế hoạch mới.
4
+ ---
5
+
6
+ # alp-plan — chốt kiến trúc trước khi gõ code
7
+
8
+ Kế hoạch là hợp đồng bạn ký với principal — và là thứ người thực thi đọc để biết mình
9
+ được giao gì.
10
+
11
+ **Không viết code trong lúc lập kế hoạch.** Ra plan, principal duyệt, rồi mới làm.
12
+
13
+ ## Trước khi mở kế hoạch mới
14
+
15
+ 1. **Quét `plans/` tìm kế hoạch chưa xong.** Đọc frontmatter `status:` của từng `plan.md`.
16
+ Kế hoạch dở dang trùng phạm vi mà không ai biết là cách chắc chắn nhất để làm hai lần
17
+ cùng một việc theo hai hướng khác nhau.
18
+
19
+ 2. **Phát hiện quan hệ chặn.** So phạm vi: file đụng nhau, phụ thuộc chung, cùng vùng tính năng.
20
+
21
+ | Quan hệ | Ghi vào frontmatter |
22
+ |---|---|
23
+ | kế hoạch mới cần kết quả của kế hoạch cũ | mới: `blockedBy: [<dir cũ>]` |
24
+ | kế hoạch mới đổi thứ kế hoạch cũ đang dựa vào | cũ: `blockedBy: [<dir mới>]` · mới: `blocks: [<dir cũ>]` |
25
+ | phụ thuộc hai chiều | cả hai cùng ghi |
26
+
27
+ **Cập nhật cả hai file.** Ghi một chiều thì lần quét sau chỉ thấy một nửa quan hệ.
28
+
29
+ 3. **Không rõ thì hỏi.** Một câu hỏi ngắn rẻ hơn nhiều so với lập sai cả kế hoạch.
30
+
31
+ ## Bốn bước
32
+
33
+ ### 0. Thách thức phạm vi
34
+
35
+ `references/scope-challenge.md`. **Bỏ qua nếu:** việc nhỏ rõ ràng (sửa một file, mô tả dưới
36
+ 20 từ).
37
+
38
+ Câu hỏi đắt nhất hỏi ở đây: *không làm gì thì sao?* Và: *phần nào của yêu cầu này là thật
39
+ sự cần, phần nào là mình tự thêm?* YAGNI áp dụng cho kế hoạch trước khi áp dụng cho code.
40
+
41
+ ### 1. Thu thập bối cảnh
42
+
43
+ Bạn **không tự đi đọc hết**. Giao đúng vai — đó là lý do chúng tồn tại, và là cách giữ
44
+ context của bạn sạch:
45
+
46
+ | Cần gì | Giao cho vai chuyên |
47
+ |---|---|
48
+ | code hiện tại nằm đâu, ai gọi ai, đổi thì vỡ đâu | truy xuất code trong repo |
49
+ | thư viện/cách làm bên ngoài | nghiên cứu nguồn ngoài |
50
+ | đã từng quyết định gì về việc này | truy xuất trí nhớ |
51
+
52
+ Ai đảm nhận vai nào: `src/agents/registry.ts` và `delegates_to` trong loadout của bạn.
53
+ Lệnh: `alp delegate <vai> "<task>"`.
54
+
55
+ Giao được nhiều vai **song song** thì dùng `--background` và theo dõi qua
56
+ `alp delegation status|wait`. Runtime backend nằm sau API, không gọi trực tiếp.
57
+
58
+ **Bỏ qua bước này nếu** principal đã đưa sẵn report, hoặc việc quá nhỏ.
59
+
60
+ Chi tiết: `references/research-phase.md`, `references/codebase-understanding.md`.
61
+
62
+ ### 2. Thiết kế giải pháp
63
+
64
+ `references/solution-design.md`.
65
+
66
+ Rủi ro cao, khó đảo ngược, hoặc nhiều phương án cạnh tranh → **mở một lượt phản biện độc
67
+ lập** (`alp-predict`) trước khi chốt. Phán quyết DỪNG nghĩa là thiết kế lại, không phải
68
+ ghi chú thêm một dòng rủi ro rồi đi tiếp.
69
+
70
+ ### 3. Viết kế hoạch
71
+
72
+ `references/plan-organization.md` và `references/output-standards.md`.
73
+
74
+ ## Định dạng — theo đúng repo
75
+
76
+ ```
77
+ plans/{YYMMDD}-{HHMM}-{slug}/
78
+ plan.md tổng quan, nguyên tắc, ngoài phạm vi
79
+ phase-0-<tên>.md từng phase một file
80
+ phase-1-<tên>.md
81
+ ```
82
+
83
+ Báo cáo: `plans/reports/{loại}-{YYMMDD}-{HHMM}-{slug}.md`.
84
+
85
+ Frontmatter bắt buộc của `plan.md`:
86
+
87
+ ```yaml
88
+ ---
89
+ status: draft | in-progress | completed | cancelled
90
+ created: YYYY-MM-DD
91
+ slug: <kebab>
92
+ source: plans/reports/<report sinh ra kế hoạch này>.md
93
+ blockedBy: []
94
+ blocks: []
95
+ ---
96
+ ```
97
+
98
+ `plan.md` phải có mục **Ngoài phạm vi**. Không có mục đó thì phạm vi sẽ tự phình trong lúc
99
+ làm, và không ai chỉ ra được lúc nào nó phình.
100
+
101
+ Mỗi file phase mở đầu bằng **Mục tiêu** một câu và **Phụ thuộc** (phase nào phải xong trước).
102
+
103
+ ## Chất lượng
104
+
105
+ - Đủ chi tiết để một vai khác đọc và làm được mà không hỏi lại.
106
+ - Nêu rõ **cách kiểm chứng** từng phase đã xong — không có tiêu chí thì phase không bao giờ
107
+ đóng được.
108
+ - Nêu failure mode và cách giảm thiểu. Phase nào chưa nêu được thì chưa duyệt được.
109
+ - Trong kế hoạch, ghi rõ phase nào **bắt buộc phải hỏi principal** trước khi chạy (thao tác
110
+ khó đảo ngược — HOUSE-RULES §1.2).
111
+ - Tôn trọng YAGNI, KISS, DRY. Thẳng, phũ, ngắn.
112
+
113
+ ## Sau khi viết xong
114
+
115
+ 1. **Rà đối kháng** — `references/red-team-workflow.md`.
116
+ 2. **Phỏng vấn kiểm chứng** — `references/validate-workflow.md`.
117
+ 3. **Báo principal**: đường dẫn plan + tóm tắt + **câu hỏi còn mở ở cuối**.
118
+ 4. **Không tự bắt tay làm.** Principal duyệt rồi mới chạy.
119
+
120
+ Kế hoạch xong hẳn → `references/archive-workflow.md`: đổi `status: completed`, ghi bài học
121
+ vào `memory/private/<vai>/journal/YYYY-MM.md`.
122
+
123
+ ## Ranh giới
124
+
125
+ - Không tạo plan hay report ngoài `plans/` của repo này.
126
+ - Không có `Task` tool — mọi việc giao đi đều qua ALP Delegation API, là **execution riêng**,
127
+ không phải subagent. Execution chỉ thấy context ALP đã build: brief phải đủ.
128
+ - Không có `AskUserQuestion`. Hỏi principal bằng cách hỏi thẳng trong phiên.
@@ -0,0 +1,77 @@
1
+ # Quy trình đóng kế hoạch
2
+
3
+ Chạy khi một kế hoạch đã xong, hoặc khi principal muốn dọn `plans/`.
4
+
5
+ ## 1. Đọc trạng thái thật
6
+
7
+ ```bash
8
+ ls plans/
9
+ ```
10
+
11
+ Với mỗi thư mục kế hoạch: đọc frontmatter `status:` của `plan.md`, và 20 dòng đầu của từng
12
+ `phase-*.md`.
13
+
14
+ **Đọc, đừng tin frontmatter.** `status: completed` mà còn phase chưa có tiêu chí hoàn thành
15
+ nào được đánh dấu thì kế hoạch chưa xong — nó chỉ bị bỏ dở. Nói thẳng điều đó với principal.
16
+
17
+ ## 2. Ghi bài học
18
+
19
+ Trước khi đóng, rút ra cái gì học được. Hai chỗ, đừng nhầm:
20
+
21
+ | Loại | Ghi vào |
22
+ |---|---|
23
+ | bài học về **cách bạn làm việc** — quyết định nào sai, vì sao | `memory/private/<vai>/journal/YYYY-MM.md` |
24
+ | fact về **project / principal / thế giới** | `memory/shared/` hoặc `memory/projects/` |
25
+
26
+ Đây là HOUSE-RULES §2 và compiled policy invariants. Ghi fact chung vào journal riêng = nhân bản dữ liệu
27
+ rồi để nó lệch — cấm.
28
+
29
+ Bài học phải cụ thể. "Cần lập kế hoạch kỹ hơn" thì vô dụng. "Spike ACL ở P1.0 đổi kiến trúc
30
+ P2 — lần sau spike trước khi chia phase" thì dùng được.
31
+
32
+ ## 3. Hỏi principal trước khi đóng
33
+
34
+ Hỏi thẳng trong phiên. Ba câu:
35
+
36
+ 1. Đóng kế hoạch nào — cụ thể, hay tất cả kế hoạch đã `completed`?
37
+ 2. Chuyển sang `plans/archive/` hay xoá hẳn?
38
+ 3. Có commit luôn không?
39
+
40
+ **Không tự quyết.** Xoá kế hoạch là hành động khó đảo ngược (HOUSE-RULES §1.2) — và
41
+ `plans/` có commit vào git, nên xoá nhầm thì lấy lại được, nhưng đừng dựa vào đó.
42
+
43
+ ## 4. Đóng
44
+
45
+ ```bash
46
+ mkdir -p plans/archive
47
+ git mv plans/<thư-mục-kế-hoạch> plans/archive/
48
+ ```
49
+
50
+ Dùng `git mv`, không dùng `mv` — giữ được lịch sử file.
51
+
52
+ Principal chọn xoá hẳn thì `rm -rf plans/<thư-mục>` — **hỏi lại một lần nữa** trước khi chạy.
53
+
54
+ Đổi `status:` trong `plan.md` thành `completed` hoặc `cancelled` **trước khi** chuyển đi.
55
+
56
+ ## 5. Dọn quan hệ chặn
57
+
58
+ Kế hoạch bị đóng có thể đang nằm trong `blockedBy` của kế hoạch khác. Quét `plans/` còn lại,
59
+ gỡ tham chiếu tới thư mục vừa đóng.
60
+
61
+ Bỏ bước này thì lần quét sau sẽ thấy một kế hoạch bị chặn bởi thứ không còn tồn tại — và nó
62
+ sẽ bị chặn mãi mãi.
63
+
64
+ ## 6. Báo cáo
65
+
66
+ ```
67
+ Đã đóng: N kế hoạch · Đã xoá: N
68
+ | Kế hoạch | Trạng thái | Tạo ngày | Ghi chú |
69
+ |---|---|---|---|
70
+
71
+ Journal: memory/private/<vai>/journal/YYYY-MM.md — <mục nào thêm mới>
72
+ Quan hệ chặn đã gỡ: <kế hoạch nào>
73
+ Commit: <hash hoặc "chưa — chờ principal">
74
+
75
+ Câu hỏi còn mở:
76
+ - …
77
+ ```
@@ -0,0 +1,55 @@
1
+ # Pha hiểu codebase
2
+
3
+ **Bỏ qua khi:** đã có báo cáo truy xuất code đủ dùng.
4
+
5
+ ## Đọc luật trước, đọc code sau
6
+
7
+ Đọc code trước khi biết luật là cách viết ra một kế hoạch đúng kỹ thuật nhưng sai quy ước.
8
+ Với alp-code, thứ tự bắt buộc:
9
+
10
+ | # | File | Cho biết |
11
+ |---|---|---|
12
+ | 1 | `compiled policy invariants` | sáu nguyên tắc bất biến, ai sửa được gì. **Chỉ principal sửa** |
13
+ | 2 | `src/agents/shared/house-rules.ts` | luật cứng mọi vai, thứ tự ưu tiên khi xung đột |
14
+ | 3 | `src/agents/<vai>.ts` | quy trình của chính bạn |
15
+ | 4 | `README.md` | cây thư mục, bảng script |
16
+ | 5 | `docs/` | tài liệu chuyên đề (delegation, ACL…) |
17
+
18
+ Với repo **bên ngoài** (trong `workspaces.read`): đọc `README.md`, `repository instructions`/`repository instructions`,
19
+ rồi `docs/` nếu có. Không có tài liệu thì nói rõ trong plan là kế hoạch dựng trên việc đọc
20
+ code, không phải trên quy ước đã ghi.
21
+
22
+ ## Tìm code
23
+
24
+ Giao cho vai chuyên truy xuất code (`scripts/run-role.sh <vai>`) — vai đó có `rg`, `Glob`,
25
+ `Grep`, và `gkg` cho phân tích ảnh hưởng. Xem `research-phase.md` để biết cách viết brief.
26
+
27
+ Tự tìm khi câu hỏi nhỏ và bạn đã biết đại khái file nào. Giao đi tốn một phiên; tự
28
+ `rg` một lần tốn vài giây.
29
+
30
+ ## Nhận quy ước
31
+
32
+ Trước khi thiết kế, trả lời được ba câu:
33
+
34
+ 1. **Chỗ này đã có mẫu chưa?** Có module tương tự thì theo nó, đừng phát minh cái thứ hai.
35
+ `README.md` của alp-code ghi rõ: `scripts/lib/` là "MỘT nguồn cho mỗi loại config".
36
+ 2. **Lỗi được xử lý kiểu gì?** Ném, trả về, hay fail đóng? alp-code chọn **fail đóng** —
37
+ hỏng thì hỏng to và thấy ngay, không hỏng im lặng.
38
+ 3. **Cái gì là sinh ra, cái gì là nguồn?** Sửa nhầm file sinh ra thì mất trong lần compile
39
+ kế tiếp. Trong alp-code: `compiled AgentDefinition` là nguồn; `~/.alp/executions/**` và
40
+ `$CODEX_HOME/<role>.config.toml` là sản phẩm.
41
+
42
+ ## Lập kế hoạch tích hợp
43
+
44
+ - Tính năng mới nối vào kiến trúc hiện có ở đâu — đặt tên file, tên hàm cụ thể.
45
+ - Đổi cái này thì vỡ những đâu. Không chắc → giao đi một lượt phân tích ảnh hưởng bằng `gkg`.
46
+ - Tương thích ngược: có ai đang phụ thuộc hành vi cũ không.
47
+ - Có phải sinh lại artifact không (`npm run build`), và ai chạy lệnh đó.
48
+
49
+ ## Ghi lại
50
+
51
+ Phần hiểu được đi vào **plan**, không nằm lại trong context của phiên. Phiên sau không nhớ
52
+ gì cả — compiled policy invariants: markdown là source of truth.
53
+
54
+ Thấy nợ kỹ thuật hoặc chỗ không nhất quán → ghi vào mục **Ngoài phạm vi** của plan.
55
+ **Không tự sửa** (HOUSE-RULES §1.6).
@@ -0,0 +1,96 @@
1
+ # Chuẩn đầu ra
2
+
3
+ ## Frontmatter của `plan.md`
4
+
5
+ Sáu trường, không hơn. Repo này đã dùng đúng bộ này — xem
6
+ `plans/260821-0930-multi-agent-identity-memory/plan.md`.
7
+
8
+ ```yaml
9
+ ---
10
+ status: draft | in-progress | completed | cancelled
11
+ created: YYYY-MM-DD
12
+ slug: <kebab>
13
+ source: plans/reports/<report>.md
14
+ blockedBy: []
15
+ blocks: []
16
+ ---
17
+ ```
18
+
19
+ | Trường | Điền thế nào |
20
+ |---|---|
21
+ | `status` | kế hoạch mới luôn là `draft` cho tới khi principal duyệt |
22
+ | `created` | ngày hôm nay, `YYYY-MM-DD` |
23
+ | `slug` | trùng phần slug của tên thư mục |
24
+ | `source` | report sinh ra kế hoạch này. Không có thì bỏ trường |
25
+ | `blockedBy` / `blocks` | phát hiện lúc quét trước khi tạo — `[]` nếu không có |
26
+
27
+ **Không thêm trường.** `priority`, `effort`, `tags`, `branch`, `issue` là của bản gốc
28
+ alp-plugin — chúng chỉ có nghĩa khi có dashboard đọc chúng. alp-code không có, nên thêm vào
29
+ là dữ liệu không ai cập nhật rồi trôi lệch.
30
+
31
+ ## Chia phase
32
+
33
+ - Mỗi phase **chạy được độc lập** sau khi phase phụ thuộc xong. Phase phải mở ba file mới
34
+ chạy nổi thì đó là hai phase.
35
+ - Xếp theo **phụ thuộc và rủi ro**, không theo mức dễ. Phần rủi ro cao đi trước — biết sớm
36
+ rẻ hơn biết muộn.
37
+ - Phase nào có spike quyết kiến trúc thì đặt trước, và ghi rõ: kết quả spike có thể đổi
38
+ phase sau.
39
+ - Mỗi phase phải có **lệnh chạy được** làm tiêu chí hoàn thành.
40
+
41
+ ## File đụng tới
42
+
43
+ Liệt kê kèm:
44
+
45
+ - Đường dẫn **từ gốc repo** (`scripts/lib/loadout.cjs`), không phải đường dẫn tương đối
46
+ theo chỗ đang đứng.
47
+ - Hành động: sửa / tạo / xoá.
48
+ - Một câu đổi gì.
49
+ - Phụ thuộc vào thay đổi nào khác.
50
+
51
+ Hai loại file **không bao giờ đưa vào danh sách sửa**:
52
+
53
+ | Loại | Vì sao |
54
+ |---|---|
55
+ | `~/.alp/executions/**`, `$CODEX_HOME/*.config.toml` | sản phẩm của `npm run build`. Sửa tay là mất ở lần compile sau |
56
+ | `compiled policy invariants`, `src/agents/shared/**`, `src/agents/registry.ts` | chỉ principal sửa (compiled policy invariants) |
57
+
58
+ Kế hoạch cần đổi chúng thì ghi vào mục **Cần principal duyệt**, đừng ghi vào danh sách việc.
59
+
60
+ ## Văn phong
61
+
62
+ Hy sinh ngữ pháp cho cô đọng. Gạch đầu dòng và bảng. Câu ngắn. Bỏ từ thừa.
63
+
64
+ Viết cho một vai khác đọc và **làm được mà không hỏi lại**. Chỗ nào phải hỏi lại thì chỗ đó
65
+ chưa viết xong.
66
+
67
+ Trong plan, nói **vì sao chọn cách này** ở chỗ quyết định không hiển nhiên. Sáu tháng sau,
68
+ `git log` cho biết đã làm gì; chỉ plan mới cho biết vì sao.
69
+
70
+ ## Câu hỏi còn mở
71
+
72
+ **Luôn có mục này ở cuối `plan.md`**, kể cả khi rỗng (ghi "không").
73
+
74
+ Đưa vào đây: chỗ cần principal làm rõ, quyết định kỹ thuật cần người quyết, ẩn số ảnh
75
+ hưởng cách triển khai, đánh đổi cần quyết định nghiệp vụ.
76
+
77
+ Hỏi thẳng trong phiên — không có `AskUserQuestion`, và cũng không cần. Có câu trả lời thì
78
+ sửa lại plan và phase.
79
+
80
+ ## Chất lượng
81
+
82
+ - **Đủ sâu:** nêu edge case và failure mode. Phase chưa nêu được failure mode thì chưa
83
+ duyệt được.
84
+ - **Bền:** ghi lý do quyết định. Tránh over-engineering — YAGNI áp dụng cho kế hoạch trước
85
+ khi áp dụng cho code.
86
+ - **Có căn cứ:** không chắc thì giao đi một lượt tra cứu, đừng đoán rồi viết như thật.
87
+ - **Bảo mật và hiệu năng:** nêu ngay ở phase liên quan, không dồn vào một phase "review"
88
+ cuối.
89
+ - **Khớp repo:** đối chiếu với mẫu đang có. Kế hoạch đúng kỹ thuật nhưng lệch quy ước thì
90
+ vẫn phải làm lại.
91
+
92
+ ## Không làm
93
+
94
+ - **Không viết code trong lúc lập kế hoạch.** Ra plan, principal duyệt, rồi mới làm.
95
+ - Không tạo plan hay report ngoài `plans/` của repo này.
96
+ - Trả về **đường dẫn plan + tóm tắt**, không dán cả nội dung plan vào câu trả lời.
@@ -0,0 +1,129 @@
1
+ # Tổ chức file kế hoạch
2
+
3
+ ## Đường dẫn
4
+
5
+ ```
6
+ plans/{YYMMDD}-{HHMM}-{slug}/
7
+ plan.md
8
+ phase-0-<tên>.md
9
+ phase-1-<tên>.md
10
+ ...
11
+ ```
12
+
13
+ Báo cáo: `plans/reports/{loại}-{YYMMDD}-{HHMM}-{slug}.md`
14
+ (`loại` = `brainstorm`, `research`, `review`, `skills`… — tên vai hoặc loại báo cáo).
15
+
16
+ `{YYMMDD}-{HHMM}` lấy lúc **bắt đầu** kế hoạch, không đổi về sau. Slug là kebab, mô tả
17
+ được, không đánh số.
18
+
19
+ Ví dụ thật trong repo: `plans/260821-0930-multi-agent-identity-memory/`.
20
+
21
+ **Không có hook nào inject đường dẫn.** Tự tính từ ngày giờ hiện tại.
22
+
23
+ ## `plan.md`
24
+
25
+ Frontmatter bắt buộc:
26
+
27
+ ```yaml
28
+ ---
29
+ status: draft | in-progress | completed | cancelled
30
+ created: YYYY-MM-DD
31
+ slug: <kebab>
32
+ source: plans/reports/<report sinh ra kế hoạch này>.md
33
+ blockedBy: []
34
+ blocks: []
35
+ ---
36
+ ```
37
+
38
+ Thân, theo đúng thứ tự này:
39
+
40
+ ```markdown
41
+ # <Tiêu đề>
42
+
43
+ ## Tổng quan
44
+
45
+ <2–5 câu: xây cái gì, cho ai, thay thế cái gì.>
46
+
47
+ Nguồn sự thật: [<report>](../reports/<file>.md).
48
+
49
+ **Ngoài phạm vi:** <liệt kê thẳng. Cái gì để lại cho sau, cái gì cố tình không làm.>
50
+
51
+ ## Nguyên tắc bất biến
52
+
53
+ 1. **<Nguyên tắc>.** <Vì sao. Vi phạm thì hỏng thế nào.>
54
+
55
+ ## Phase
56
+
57
+ | Phase | Tên | Trạng thái |
58
+ |---|---|---|
59
+ | 0 | [Dựng khung](./phase-0-scaffold.md) | chưa làm |
60
+ | 1 | [ACL](./phase-1-loadout-acl.md) | chưa làm |
61
+ ```
62
+
63
+ Giữ `plan.md` **dưới 80 dòng**. Nó là cửa vào, không phải nơi chứa chi tiết.
64
+
65
+ Hai mục hay bị bỏ và đều đắt khi bỏ:
66
+
67
+ - **Ngoài phạm vi** — không có thì phạm vi tự phình trong lúc làm, và không ai chỉ ra được
68
+ lúc nào nó bắt đầu phình.
69
+ - **Nguyên tắc bất biến** — cái neo để phase sau không mâu thuẫn phase trước.
70
+
71
+ Text của link phải là **tên người đọc được**, không phải tên file:
72
+ `[Dựng khung](./phase-0-scaffold.md)`, không phải `[phase-0-scaffold.md](...)`.
73
+
74
+ ## File phase
75
+
76
+ Mở đầu bắt buộc:
77
+
78
+ ```markdown
79
+ # P<n> — <tên>
80
+
81
+ **Mục tiêu:** <một câu. Xong phase này thì cái gì đúng mà trước đó chưa đúng.>
82
+ **Phụ thuộc:** <P trước đó, hoặc "không">
83
+
84
+ ---
85
+ ```
86
+
87
+ Rồi các mục theo nhu cầu — **chỉ viết mục nào có nội dung thật**:
88
+
89
+ | Mục | Khi nào cần |
90
+ |---|---|
91
+ | Bối cảnh | dẫn report, file, tài liệu liên quan |
92
+ | Việc phải làm | các bước đánh số, cụ thể tới tên file và tên hàm |
93
+ | File đụng tới | sửa gì, tạo gì, xoá gì |
94
+ | **Tiêu chí hoàn thành** | **luôn luôn** — lệnh chạy được để chứng minh phase xong |
95
+ | Rủi ro | failure mode + cách giảm thiểu |
96
+ | Cần principal duyệt | thao tác khó đảo ngược trong phase này |
97
+
98
+ **Không có tiêu chí hoàn thành thì phase không bao giờ đóng được.** Tiêu chí phải là thứ
99
+ chạy được: `node scripts/doctor.cjs` sạch, `test-x.cjs` xanh — không phải "hoạt động tốt".
100
+
101
+ Phase có spike (thử nghiệm để quyết kiến trúc) thì ghi thẳng: **không viết code phần sau
102
+ trước khi spike xong**, vì kết quả spike có thể đổi cả phase kế tiếp.
103
+
104
+ ## Quan hệ giữa các kế hoạch
105
+
106
+ Ghi vào frontmatter `blockedBy`/`blocks`, dùng tên thư mục kế hoạch.
107
+
108
+ **Cập nhật cả hai file.** Ghi một chiều thì lần quét sau chỉ thấy một nửa.
109
+
110
+ Có quan hệ chặn thì thêm bảng vào `plan.md`:
111
+
112
+ ```markdown
113
+ ## Phụ thuộc kế hoạch khác
114
+
115
+ | Quan hệ | Kế hoạch | Trạng thái |
116
+ |---|---|---|
117
+ | Chặn | [<tên>](../<dir>/plan.md) | in-progress |
118
+ ```
119
+
120
+ ## Không có trong alp-code
121
+
122
+ Bản gốc của skill này giả định vài thứ repo này không có — bỏ qua nếu gặp trong tài liệu cũ:
123
+
124
+ | Không có | Thay bằng |
125
+ |---|---|
126
+ | `ck plan create` CLI | viết file trực tiếp bằng `Write` |
127
+ | task hydration (`TaskCreate`) | không có hệ task; `plan.md` là nguồn sự thật duy nhất |
128
+ | `set-active-plan.cjs` | không có khái niệm "kế hoạch đang hoạt động" |
129
+ | hook inject `## Naming` / `## Plan Context` | tự tính đường dẫn |