@leejungkiin/awkit 1.3.8 → 1.4.2
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/bin/awk.js +630 -52
- package/bin/claude-generators.js +122 -0
- package/core/AGENTS.md +54 -0
- package/core/CLAUDE.md +155 -0
- package/core/GEMINI.md +44 -9
- package/core/GEMINI.md.bak +126 -199
- package/package.json +1 -1
- package/skills/ai-sprite-maker/SKILL.md +81 -0
- package/skills/ai-sprite-maker/scripts/animate_sprite.py +102 -0
- package/skills/ai-sprite-maker/scripts/process_sprites.py +140 -0
- package/skills/awf-session-restore/SKILL.md +12 -2
- package/skills/brainstorm-agent/SKILL.md +11 -8
- package/skills/code-review/SKILL.md +21 -33
- package/skills/gitnexus/gitnexus-cli/SKILL.md +82 -0
- package/skills/gitnexus/gitnexus-debugging/SKILL.md +89 -0
- package/skills/gitnexus/gitnexus-exploring/SKILL.md +78 -0
- package/skills/gitnexus/gitnexus-guide/SKILL.md +64 -0
- package/skills/gitnexus/gitnexus-impact-analysis/SKILL.md +97 -0
- package/skills/gitnexus/gitnexus-refactoring/SKILL.md +121 -0
- package/skills/lucylab-tts/SKILL.md +64 -0
- package/skills/lucylab-tts/resources/voices_library.json +908 -0
- package/skills/lucylab-tts/scripts/.env +1 -0
- package/skills/lucylab-tts/scripts/lucylab_tts.py +506 -0
- package/skills/nm-memory-sync/SKILL.md +14 -1
- package/skills/orchestrator/SKILL.md +5 -38
- package/skills/ship-to-code/SKILL.md +115 -0
- package/skills/short-maker/SKILL.md +150 -0
- package/skills/short-maker/_backup/storyboard.html +106 -0
- package/skills/short-maker/_backup/video_mixer.py +296 -0
- package/skills/short-maker/outputs/fitbite-promo/background.jpg +0 -0
- package/skills/short-maker/outputs/fitbite-promo/final/promo-final.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/script.md +19 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-01.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-02.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-03.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-04.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-01.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-02.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-03.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-04.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard.html +133 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard.json +38 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/merged_chroma.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/merged_crossfaded.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_00.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_01.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_02.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_03.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/manifest.json +31 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-01.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-02.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-03.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-04.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts_script.txt +11 -0
- package/skills/short-maker/scripts/google-flow-cli/.project-identity +41 -0
- package/skills/short-maker/scripts/google-flow-cli/.trae/rules/project_rules.md +52 -0
- package/skills/short-maker/scripts/google-flow-cli/CODEBASE.md +67 -0
- package/skills/short-maker/scripts/google-flow-cli/GoogleFlowCli.code-workspace +29 -0
- package/skills/short-maker/scripts/google-flow-cli/README.md +168 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/PROJECT.md +12 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/REQUIREMENTS.md +22 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/ROADMAP.md +16 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/TECH-SPEC.md +13 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/__init__.py +3 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/__init__.py +19 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/client.py +1921 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/models.py +64 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/rpc_ids.py +98 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/__init__.py +15 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/browser_auth.py +692 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/humanizer.py +417 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/proxy_ext.py +120 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/recaptcha.py +482 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/batchexecute/__init__.py +5 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/batchexecute/client.py +414 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/cli/__init__.py +1 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/cli/main.py +1075 -0
- package/skills/short-maker/scripts/google-flow-cli/pyproject.toml +36 -0
- package/skills/short-maker/scripts/google-flow-cli/script.txt +22 -0
- package/skills/short-maker/scripts/google-flow-cli/tests/__init__.py +0 -0
- package/skills/short-maker/scripts/google-flow-cli/tests/test_batchexecute.py +113 -0
- package/skills/short-maker/scripts/google-flow-cli/tests/test_client.py +190 -0
- package/skills/short-maker/templates/aida_script.md +40 -0
- package/skills/short-maker/templates/mimic_analyzer.md +29 -0
- package/skills/single-flow-task-execution/SKILL.md +412 -0
- package/skills/single-flow-task-execution/code-quality-reviewer-prompt.md +20 -0
- package/skills/single-flow-task-execution/implementer-prompt.md +78 -0
- package/skills/single-flow-task-execution/spec-reviewer-prompt.md +61 -0
- package/skills/skill-creator/SKILL.md +44 -0
- package/skills/spm-build-analysis/SKILL.md +92 -0
- package/skills/spm-build-analysis/references/build-optimization-sources.md +155 -0
- package/skills/spm-build-analysis/references/recommendation-format.md +85 -0
- package/skills/spm-build-analysis/references/spm-analysis-checks.md +105 -0
- package/skills/spm-build-analysis/scripts/check_spm_pins.py +118 -0
- package/skills/symphony-enforcer/SKILL.md +83 -97
- package/skills/symphony-orchestrator/SKILL.md +1 -1
- package/skills/trello-sync/SKILL.md +52 -45
- package/skills/verification-gate/SKILL.md +13 -2
- package/skills/xcode-build-benchmark/SKILL.md +88 -0
- package/skills/xcode-build-benchmark/references/benchmark-artifacts.md +94 -0
- package/skills/xcode-build-benchmark/references/benchmarking-workflow.md +67 -0
- package/skills/xcode-build-benchmark/schemas/build-benchmark.schema.json +230 -0
- package/skills/xcode-build-benchmark/scripts/benchmark_builds.py +308 -0
- package/skills/xcode-build-fixer/SKILL.md +218 -0
- package/skills/xcode-build-fixer/references/build-settings-best-practices.md +216 -0
- package/skills/xcode-build-fixer/references/fix-patterns.md +290 -0
- package/skills/xcode-build-fixer/references/recommendation-format.md +85 -0
- package/skills/xcode-build-fixer/scripts/benchmark_builds.py +308 -0
- package/skills/xcode-build-orchestrator/SKILL.md +156 -0
- package/skills/xcode-build-orchestrator/references/benchmark-artifacts.md +94 -0
- package/skills/xcode-build-orchestrator/references/build-settings-best-practices.md +216 -0
- package/skills/xcode-build-orchestrator/references/orchestration-report-template.md +143 -0
- package/skills/xcode-build-orchestrator/references/recommendation-format.md +85 -0
- package/skills/xcode-build-orchestrator/scripts/benchmark_builds.py +308 -0
- package/skills/xcode-build-orchestrator/scripts/diagnose_compilation.py +273 -0
- package/skills/xcode-build-orchestrator/scripts/generate_optimization_report.py +533 -0
- package/skills/xcode-compilation-analyzer/SKILL.md +89 -0
- package/skills/xcode-compilation-analyzer/references/build-optimization-sources.md +155 -0
- package/skills/xcode-compilation-analyzer/references/code-compilation-checks.md +106 -0
- package/skills/xcode-compilation-analyzer/references/recommendation-format.md +85 -0
- package/skills/xcode-compilation-analyzer/scripts/diagnose_compilation.py +273 -0
- package/skills/xcode-project-analyzer/SKILL.md +76 -0
- package/skills/xcode-project-analyzer/references/build-optimization-sources.md +155 -0
- package/skills/xcode-project-analyzer/references/build-settings-best-practices.md +216 -0
- package/skills/xcode-project-analyzer/references/project-audit-checks.md +101 -0
- package/skills/xcode-project-analyzer/references/recommendation-format.md +85 -0
- package/templates/CODEBASE.md +26 -42
- package/templates/configs/trello-config.json +2 -2
- package/templates/workflow_dual_mode_template.md +5 -5
- package/workflows/_uncategorized/conductor-codex.md +125 -0
- package/workflows/_uncategorized/conductor.md +97 -0
- package/workflows/_uncategorized/ship-to-code.md +85 -0
- package/workflows/_uncategorized/trello-sync.md +52 -0
- package/workflows/context/codebase-sync.md +10 -87
- package/workflows/quality/visual-debug.md +66 -12
|
@@ -4,13 +4,13 @@ description: |
|
|
|
4
4
|
Mandatory Symphony checkpoint system. Ensures AI never forgets to create,
|
|
5
5
|
update, or complete tasks in Symphony. Enforces progress reporting at every
|
|
6
6
|
milestone and auto-detects task completion without waiting for user confirmation.
|
|
7
|
-
v3.
|
|
7
|
+
v3.7: UI-First Three-Phase Execution with Auto Device Checkpoints (Maestro).
|
|
8
8
|
metadata:
|
|
9
9
|
stage: core
|
|
10
|
-
version: "3.
|
|
11
|
-
replaces: "v3.
|
|
10
|
+
version: "3.7"
|
|
11
|
+
replaces: "v3.6"
|
|
12
12
|
requires: symphony-orchestrator
|
|
13
|
-
tags: [symphony, enforcement, checkpoint, task-lifecycle, core, spec-first, auto-next, kiro, ui-first, user-test]
|
|
13
|
+
tags: [symphony, enforcement, checkpoint, task-lifecycle, core, spec-first, auto-next, kiro, ui-first, user-test, maestro, automated-verification]
|
|
14
14
|
agent: Symphony Enforcer
|
|
15
15
|
allowed-tools:
|
|
16
16
|
- symphony_create_task
|
|
@@ -24,14 +24,15 @@ invocation-type: auto
|
|
|
24
24
|
priority: 1
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
# Symphony Enforcer v3.
|
|
27
|
+
# Symphony Enforcer v3.7 — UI-First Three-Phase Execution + Auto Device Checkpoints
|
|
28
28
|
|
|
29
29
|
> **Purpose:** Đảm bảo AI KHÔNG BAO GIỜ quên cập nhật Symphony.
|
|
30
|
-
> **Key Changes v3.
|
|
31
|
-
> - **
|
|
32
|
-
> - **
|
|
30
|
+
> **Key Changes v3.7:**
|
|
31
|
+
> - **Step 0.5: Legacy Artifact Cleanup**: Auto-detect stale `.symphony/tasks.json` and warn user
|
|
32
|
+
> - **Gate 4 Three-Phase Execution**: Phase A (Infra) → Phase B (UI Shell + Auto Check) → Phase C (Logic + Auto Check)
|
|
33
|
+
> - **TP1.7: Auto Device Checkpoint (ADC)**: Tự động build & quét UI bằng Maestro MCP thay vì chờ user test thủ công
|
|
33
34
|
> - **UI-First Task Ordering**: UI tasks PHẢI đi trước logic tasks trong Symphony
|
|
34
|
-
> - Kế thừa tất cả features v3.
|
|
35
|
+
> - Kế thừa tất cả features v3.5 (Kiro, Completion Status, Design Compliance).
|
|
35
36
|
> **Principle:** AI tự detect completion — user KHÔNG CẦN nói "xong".
|
|
36
37
|
|
|
37
38
|
---
|
|
@@ -52,16 +53,32 @@ KHÔNG CÓ NGOẠI LỆ:
|
|
|
52
53
|
|
|
53
54
|
## 🔒 STRICT STARTUP PROTOCOL (BẮT BUỘC)
|
|
54
55
|
|
|
55
|
-
Mỗi khi bắt đầu task code/debug/plan, AI PHẢI đi qua **
|
|
56
|
+
Mỗi khi bắt đầu task code/debug/plan, AI PHẢI đi qua **6 steps tuần tự**.
|
|
56
57
|
KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
57
58
|
|
|
59
|
+
### Step 0.5: Legacy Artifact Cleanup (AUTO — v3.6)
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
→ Kiểm tra: .symphony/tasks.json tồn tại?
|
|
63
|
+
→ CÓ → ⚠️ CẢNH BÁO: "Legacy tasks.json detected. Symphony uses SQLite DB — this file is stale."
|
|
64
|
+
→ Khuyên user xoá: "rm .symphony/tasks.json"
|
|
65
|
+
→ KHÔNG tự xoá (safety guardrail) — chỉ cảnh báo.
|
|
66
|
+
→ Ghi log vào NeuralMemory: "Legacy tasks.json found at {project}, warned user."
|
|
67
|
+
→ KHÔNG → ✅ Clean (no legacy artifacts)
|
|
68
|
+
→ Output: "🧹 Step 0.5: Legacy Check ✅ — No stale artifacts"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> **Lý do:** Symphony v2+ sử dụng SQLite DB (`symphony.db`) làm single source of truth.
|
|
72
|
+
> File `tasks.json` là di sản từ phiên bản cũ (pre-SQLite). Nếu tồn tại song song sẽ gây
|
|
73
|
+
> "split-brain" — một nửa tool đọc JSON, một nửa đọc DB → dữ liệu lệch pha.
|
|
74
|
+
|
|
58
75
|
### Step 1: Project Identity — `.project-identity`
|
|
59
76
|
|
|
60
77
|
```
|
|
61
78
|
→ Kiểm tra: file .project-identity có tồn tại?
|
|
62
79
|
→ CÓ → Đọc projectId, projectName
|
|
63
80
|
→ KHÔNG → ⛔ DỪNG. Hỏi user hoặc tạo .project-identity.
|
|
64
|
-
→ Output: "📋 Step 1/
|
|
81
|
+
→ Output: "📋 Step 1/6: Project Identity ✅ — {projectId}"
|
|
65
82
|
```
|
|
66
83
|
|
|
67
84
|
### Step 2: NeuralMemory Brain — Switch brain
|
|
@@ -69,7 +86,7 @@ KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
|
69
86
|
```
|
|
70
87
|
→ nmem brain use <projectId>
|
|
71
88
|
→ nmem_recap(level=1) — load context
|
|
72
|
-
→ Output: "🧠 Step 2/
|
|
89
|
+
→ Output: "🧠 Step 2/6: Brain ✅ — switched to {projectId}"
|
|
73
90
|
```
|
|
74
91
|
|
|
75
92
|
### Step 3: Spec Alignment — Đọc Project Spec (v3.4 + Kiro)
|
|
@@ -82,7 +99,7 @@ KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
|
82
99
|
- .kiro/specs/<module>/design.md → architecture
|
|
83
100
|
- .kiro/specs/<module>/tasks.md → task breakdown (cho Step 4)
|
|
84
101
|
→ Extract constraints liên quan đến task hiện tại
|
|
85
|
-
→ Output: "📐 Step 3/
|
|
102
|
+
→ Output: "📐 Step 3/6: Kiro Specs Loaded ✅ — {N} modules, {M} design docs"
|
|
86
103
|
|
|
87
104
|
→ CHECK 2 (fallback): docs/specs/PROJECT.md tồn tại?
|
|
88
105
|
→ CÓ → Đọc silent: PROJECT.md + TECH-SPEC.md + REQUIREMENTS.md
|
|
@@ -90,8 +107,8 @@ KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
|
90
107
|
→ NẾU PLANNING mode:
|
|
91
108
|
- Hỏi user 1-3 câu về constraints/UX cụ thể của feature
|
|
92
109
|
- Ví dụ: "Feature này cần offline support không?"
|
|
93
|
-
→ Output: "📐 Step 3/
|
|
94
|
-
→ KHÔNG → Skip (project chưa /init) → "📐 Step 3/
|
|
110
|
+
→ Output: "📐 Step 3/6: Spec Aligned ✅"
|
|
111
|
+
→ KHÔNG → Skip (project chưa /init) → "📐 Step 3/6: No spec — skipped"
|
|
95
112
|
```
|
|
96
113
|
|
|
97
114
|
> **Quan trọng:** Nếu .kiro/specs hoặc TECH-SPEC.md có "Constraints & Non-Negotiables",
|
|
@@ -105,7 +122,7 @@ KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
|
105
122
|
- Group theo module name
|
|
106
123
|
- Đánh tag kèm module name
|
|
107
124
|
→ ⛔ CẢNH BÁO: KHÔNG đồng bộ hàng loạt các item nhỏ này lên Trello (để tránh rác board). Chỉ đồng bộ lên cấp module hoặc feature lớn.
|
|
108
|
-
→ Output: "🎯 Step 4/
|
|
125
|
+
→ Output: "🎯 Step 4/6: Kiro Tasks Imported ✅ — {N} tasks created"
|
|
109
126
|
→ Claim task phù hợp nhất với user request
|
|
110
127
|
→ CÓ + đã import → symphony_available_tasks → claim task phù hợp
|
|
111
128
|
|
|
@@ -114,7 +131,7 @@ KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
|
114
131
|
→ CÓ task ready phù hợp → symphony_claim_task
|
|
115
132
|
→ KHÔNG CÓ → symphony_create_task(title) → symphony_claim_task(new_id)
|
|
116
133
|
→ Lưu task_id cho TP1-TP4
|
|
117
|
-
→ Output: "🎯 Step 4/
|
|
134
|
+
→ Output: "🎯 Step 4/6: Task ✅ — #sym-XYZ claimed"
|
|
118
135
|
```
|
|
119
136
|
|
|
120
137
|
### Step 5: Confirmation Block
|
|
@@ -122,11 +139,12 @@ KHÔNG được bắt đầu work cho đến khi TẤT CẢ steps ✅.
|
|
|
122
139
|
```
|
|
123
140
|
🚦 STARTUP PROTOCOL COMPLETE
|
|
124
141
|
══════════════════════════════════════
|
|
125
|
-
Step
|
|
126
|
-
Step
|
|
127
|
-
Step
|
|
128
|
-
Step
|
|
129
|
-
Step
|
|
142
|
+
Step 0.5: 🧹 Legacy Check ✅ No stale artifacts
|
|
143
|
+
Step 1: 📋 Project Identity ✅ {projectId}
|
|
144
|
+
Step 2: 🧠 NeuralMemory ✅ brain: {projectId}
|
|
145
|
+
Step 3: 📐 Spec Alignment ✅ {constraints_count} constraints loaded
|
|
146
|
+
Step 4: 🎯 Task ✅ #sym-XYZ — "{title}"
|
|
147
|
+
Step 5: ✅ READY TO WORK
|
|
130
148
|
══════════════════════════════════════
|
|
131
149
|
```
|
|
132
150
|
|
|
@@ -145,8 +163,8 @@ LIÊN KẾT TỰ ĐỘNG:
|
|
|
145
163
|
|
|
146
164
|
THREE-PHASE MAPPING (Gate 4 — COMPLEX tasks với UI):
|
|
147
165
|
- Phase A done (build OK) → report_progress(25%) + checkpoint build
|
|
148
|
-
- Phase B done (UI mock) → report_progress(45%) + TRIGGER TP1.7 (
|
|
149
|
-
- Phase C per-feature done → report_progress(50-85%) + TRIGGER TP1.7 (
|
|
166
|
+
- Phase B done (UI mock) → report_progress(45%) + TRIGGER TP1.7 (Auto Device Checkpoint)
|
|
167
|
+
- Phase C per-feature done → report_progress(50-85%) + TRIGGER TP1.7 (Auto Device Checkpoint)
|
|
150
168
|
- Phase C all features done → report_progress(90%) → Gate 5
|
|
151
169
|
```
|
|
152
170
|
|
|
@@ -199,10 +217,10 @@ Khi kích hoạt Three-Phase, AI PHẢI hiển thị:
|
|
|
199
217
|
→ {list tasks for Phase A}
|
|
200
218
|
🎨 Phase B: UI Shell (Mock Data)
|
|
201
219
|
→ {list tasks for Phase B}
|
|
202
|
-
→ 🧪
|
|
220
|
+
→ 🧪 AUTO DEVICE TEST (Maestro) sau phase này
|
|
203
221
|
⚡ Phase C: Logic Integration
|
|
204
222
|
→ {list tasks for Phase C}
|
|
205
|
-
→ 🧪
|
|
223
|
+
→ 🧪 AUTO DEVICE TEST (Maestro) mỗi feature
|
|
206
224
|
══════════════════════════════════════
|
|
207
225
|
Bắt đầu Phase A...
|
|
208
226
|
```
|
|
@@ -223,13 +241,19 @@ auto_triggers:
|
|
|
223
241
|
phase_b_to_checkpoint:
|
|
224
242
|
signal: Tất cả [UI] tasks đã done
|
|
225
243
|
action: |
|
|
226
|
-
- ⛔
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
|
|
244
|
+
- ⛔ TRIGGER TP1.7 (Checkpoint)
|
|
245
|
+
- Đọc `.project-identity` -> `autoVerification`
|
|
246
|
+
- NẾU `true`:
|
|
247
|
+
+ Chạy Auto Build → check exit code 0
|
|
248
|
+
+ Dùng mcp_maestro_launch_app và take_screenshot
|
|
249
|
+
+ NẾU fail → DỪNG (notify_user BlockedOnUser=true)
|
|
250
|
+
+ NẾU pass → Báo cáo Screenshot (BlockedOnUser=false) và làm tiếp Phase C
|
|
251
|
+
- NẾU `false` (default):
|
|
252
|
+
+ DỪNG VÀ CHỜ user test thủ công (notify_user BlockedOnUser=true)
|
|
253
|
+
+ CHỜ user xác nhận "OK" mới đi tiếp Phase C
|
|
230
254
|
|
|
231
255
|
checkpoint_to_phase_c:
|
|
232
|
-
signal: User confirmed "
|
|
256
|
+
signal: Build success & App launched (autoVerification=true) HOẶC User confirmed "OK" (autoVerification=false)
|
|
233
257
|
action: |
|
|
234
258
|
- Set phase_b_confirmed = true
|
|
235
259
|
- Set current_phase = "C"
|
|
@@ -247,16 +271,16 @@ auto_triggers:
|
|
|
247
271
|
|
|
248
272
|
```
|
|
249
273
|
❌ VI PHạM NẶNG:
|
|
250
|
-
- Code logic (Phase C) khi phase_b_confirmed = false
|
|
274
|
+
- Code logic (Phase C) khi phase_b_confirmed = false (chưa pass Phase B checkpoint)
|
|
251
275
|
- Skip Phase Announcement Block
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
-
-
|
|
276
|
+
- Bỏ qua TP1.7
|
|
277
|
+
- Chạy Auto-verification khi `autoVerification: false` (bỏ qua thủ công)
|
|
278
|
+
- Chờ user test thủ công khi `autoVerification: true` (lười setup auto)
|
|
255
279
|
|
|
256
280
|
✅ BẮT BUỘC:
|
|
257
281
|
- Luôn announce phase transition rõ ràng
|
|
258
|
-
- Luôn
|
|
259
|
-
-
|
|
282
|
+
- Luôn đọc `autoVerification` trong `.project-identity` trước khi trigger check.
|
|
283
|
+
- Gắn BlockedOnUser = true cho mode manual, false cho mode auto.
|
|
260
284
|
- Ghi lại phase state vào NeuralMemory khi chuyển phase
|
|
261
285
|
```
|
|
262
286
|
|
|
@@ -342,77 +366,39 @@ File patterns:
|
|
|
342
366
|
|
|
343
367
|
---
|
|
344
368
|
|
|
345
|
-
### TP1.7:
|
|
369
|
+
### TP1.7: Flexible Checkpoint (Manual v/s Auto) (UPDATE v3.7)
|
|
370
|
+
|
|
371
|
+
**Cấu hình Mode Verification:**
|
|
372
|
+
Quy trình Verification được quyết định bởi thuộc tính `"autoVerification"` trong `.project-identity`:
|
|
373
|
+
- `{"autoVerification": true}` → **Auto Device Checkpoint (ADC)**: Dùng Maestro tự build & chụp ảnh screenshot. Tiến thẳng sang bước tiếp (BlockedOnUser=false).
|
|
374
|
+
- `{"autoVerification": false}` (hoặc không khai báo) → **Manual Checkpoint**: Dừng lại chờ user test thủ công (BlockedOnUser=true). Đây là **MẶC ĐỊNH an toàn**.
|
|
346
375
|
|
|
347
|
-
**Khi nào
|
|
376
|
+
**Khi nào trigger TP1.7:**
|
|
348
377
|
|
|
349
378
|
1. **Phase B → C Transition (BẮT BUỘC cho COMPLEX):**
|
|
350
|
-
- ALL UI screens đã code xong
|
|
351
|
-
- Navigation hoạt động full flow
|
|
352
|
-
- App build và chạy OK trên emulator/device
|
|
379
|
+
- ALL UI screens đã code xong
|
|
353
380
|
|
|
354
381
|
2. **Sau mỗi feature trong Phase C (COMPLEX tasks):**
|
|
355
|
-
- Feature X đã
|
|
356
|
-
- Feature works end-to-end trên device
|
|
382
|
+
- Feature X đã code xong logic
|
|
357
383
|
|
|
358
|
-
|
|
359
|
-
```
|
|
360
|
-
COMPLEX + có UI component → BẮT BUỘC TP1.7
|
|
361
|
-
MODERATE + có UI component → OPTIONAL (recommend cho hardware features: camera, GPS, sensors)
|
|
362
|
-
TRIVIAL → SKIP
|
|
363
|
-
Backend-only tasks → SKIP
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
**Action:**
|
|
384
|
+
**Action (Tùy theo Mode):**
|
|
367
385
|
```
|
|
368
386
|
1. Report progress trước: symphony_report_progress(current_task, progress)
|
|
387
|
+
2. Kiểm tra cờ `autoVerification` trong .project-identity.
|
|
369
388
|
|
|
370
|
-
|
|
389
|
+
=== TRƯỜNG HỢP 1: autoVerification = false (Default Manual) ===
|
|
390
|
+
- Announce "🧪 MANUAL USER TEST CHECKPOINT #{N}"
|
|
391
|
+
- Đưa hướng dẫn test cụ thể (e.g. "Mở app -> Bấm nút A -> Xem kết quả B")
|
|
392
|
+
- Gọi notify_user(BlockedOnUser=true) — DỪNG và CHỜ user response
|
|
393
|
+
- Chỉ đi tiếp khi user reply "OK".
|
|
371
394
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
🔍 Hướng dẫn test:
|
|
379
|
-
1. {step 1 — cụ thể, actionable}
|
|
380
|
-
2. {step 2 — expected behavior}
|
|
381
|
-
3. {step 3 — edge case to check}
|
|
382
|
-
|
|
383
|
-
⏳ Anh test xong reply:
|
|
384
|
-
✅ OK — tiếp tục
|
|
385
|
-
⚠️ Issue: {mô tả} — tôi sẽ fix trước khi đi tiếp
|
|
386
|
-
══════════════════════════════════════
|
|
387
|
-
|
|
388
|
-
3. Gọi notify_user(BlockedOnUser=true) — DỪNG và CHỜ user response
|
|
389
|
-
|
|
390
|
-
4. User response handling:
|
|
391
|
-
→ "OK" / "✅" → Tiếp tục phase tiếp / feature tiếp
|
|
392
|
-
→ "Issue: ..." → Fix issue → re-run checkpoint
|
|
393
|
-
→ "Skip" → Ghi note concern, tiếp tục (DONE_WITH_CONCERNS later)
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
**Test Guidance Generation:**
|
|
395
|
+
=== TRƯỜNG HỢP 2: autoVerification = true (Auto Maestro) ===
|
|
396
|
+
- Chạy Auto Build
|
|
397
|
+
- Chạy mcp_maestro_launch_app, mcp_maestro_take_screenshot
|
|
398
|
+
- Announce "🤖 AUTO DEVICE CHECKPOINT #{N}" + Log + Evidence
|
|
399
|
+
- NẾU Build/Run Lỗi: BlockedOnUser=true (bắt user xem lỗi).
|
|
400
|
+
- NẾU Pass: BlockedOnUser=false. Lập tức đi tiếp phase tiếp theo! KHÔNG DỪNG.
|
|
397
401
|
```
|
|
398
|
-
AI PHẢI tạo hướng dẫn test CỤ THỂ cho từng checkpoint:
|
|
399
|
-
|
|
400
|
-
Phase B Examples (UI):
|
|
401
|
-
- "Mở app → bấm tab Health → xem Dashboard có hiển thị 4 cards không?"
|
|
402
|
-
- "Quay ngang màn hình → layout có bể không?"
|
|
403
|
-
- "Bấm nút Camera → xem preview có xuất hiện không?"
|
|
404
|
-
|
|
405
|
-
Phase C Examples (Logic):
|
|
406
|
-
- "Mở Health Dashboard → data thật có load lên không? (nếu có wifi)"
|
|
407
|
-
- "Chụp ảnh thức ăn → kết quả AI có trả về trong 5s không?"
|
|
408
|
-
- "Bấm Save → quay lại list → record mới có xuất hiện không?"
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
**Enforcement:**
|
|
412
|
-
- ❌ KHÔNG được chuyển từ Phase B → Phase C mà chưa có user confirm (COMPLEX)
|
|
413
|
-
- ❌ KHÔNG được skip checkpoint cho hardware-related features (Camera, GPS, Sensors)
|
|
414
|
-
- ✅ NÊN batch các features nhỏ lại thành 1 checkpoint (tránh quá nhiều interrupt)
|
|
415
|
-
- ✅ Checkpoint cho logic KHÔNG cần nếu feature là pure-backend/invisible
|
|
416
402
|
|
|
417
403
|
---
|
|
418
404
|
|
|
@@ -8,7 +8,7 @@ metadata:
|
|
|
8
8
|
stage: core
|
|
9
9
|
version: "3.0"
|
|
10
10
|
replaces: null
|
|
11
|
-
requires: "@leejungkiin/awkit-symphony
|
|
11
|
+
requires: "@leejungkiin/awkit-symphony (npm i -g @leejungkiin/awkit-symphony)"
|
|
12
12
|
tags: [symphony, setup, server, orchestration, core, preflight, multi-project, agent]
|
|
13
13
|
agent: Symphony Conductor
|
|
14
14
|
allowed-tools:
|
|
@@ -30,21 +30,23 @@ priority: 2
|
|
|
30
30
|
KHÔNG CÓ NGOẠI LỆ:
|
|
31
31
|
- 1 Dự án = 1 Trello Card (KHÔNG tạo card mới cho mỗi task).
|
|
32
32
|
- **Mô tả Card (Description)** BẮT BUỘC phải được update chứa cái nhìn tổng thể về dự án (Mục tiêu, Tech Stack, Tình trạng chung) để Quản lý dễ nắm bắt.
|
|
33
|
-
- **Trello (PM View) vs Kiro (Dev View):** Trello là màn hình dành cho Quản lý (PM, QC), còn `.kiro/specs/tasks.md` là nơi để AI/Dev làm việc.
|
|
34
|
-
- [QUAN TRỌNG
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
33
|
+
- **Trello (PM View) vs Kiro (Dev View):** Trello là màn hình dành cho Quản lý (PM, QC), còn `.kiro/specs/tasks.md` hay `task.md` là nơi để AI/Dev làm việc.
|
|
34
|
+
- [QUAN TRỌNG NHẤT VỀ ĐỘ CHI TIẾT (GRANULARITY)]: Khi được yêu cầu chia task để sync lên Trello, AI PHẢI CHIA NHỎ các phase/tính năng lớn ra thành các Sub-features / Điểm chạm nghiệp vụ (Medium-detail). CẤM làm task quá chung chung.
|
|
35
|
+
- BAD (Quá chung chung): "Hoàn thiện Launch", "Setup Thanh Toán", "Xử lý Logic".
|
|
36
|
+
- BAD (Quá chi tiết / Dev task): "Tạo file BillingManager.kt", "Sửa padding cho nút Share".
|
|
37
|
+
- GOOD (Chuẩn PM View): "Tích hợp Google Play Billing v7", "Xử lý AlarmManager nhắc nhở đo huyết áp", "Cài đặt Crashlytics", "Thiết kế Store Assets (Icon, Screenshots)".
|
|
38
|
+
- AI NÊN gom nhóm các Items vào thành nhiều Checklist rõ ràng theo từng phân khu lớn (VD: `Checklist: 1. Hoàn Thiện Logic`, `Checklist: 2. Monetization`, `Checklist: 3. Analytics & QA`).
|
|
39
|
+
- ⛔ TUYỆT ĐỐI CẤM đưa các GIAI ĐOẠN QUY TRÌNH (Process Gates) vào Checklist Items. KHÔNG CÓ CÁC MỤC NHƯ: "Tài liệu", "Thiết kế Giao diện", "Gate 1", "Phase 2".
|
|
40
|
+
- Progress qua các Gate (Gate 1, Gate 2...) CHỈ ĐƯỢC BÁO CÁO qua Comment. Quản lý không quan tâm AI đang ở Gate nào trên Checklists.
|
|
41
|
+
- BẮT BUỘC ĐỒNG BỘ TOÀN BỘ DANH SÁCH NGHIỆP VỤ TỔNG HỢP: Khi Spec/dự án đã hòm hòm, AI phân mảnh các scope thành các Checklist Items (như quy tắc Granularity ở trên).
|
|
42
|
+
- Comment ở milestone quan trọng PHẢI bao gồm các quyết định cốt lõi hoặc sự thay đổi phase (VD: "Đã thiết kế xong màn hình Home", "Bắt đầu code Logic tracking").
|
|
41
43
|
```
|
|
42
44
|
|
|
43
45
|
---
|
|
44
46
|
|
|
45
47
|
## 🔐 Auth & Config
|
|
46
48
|
|
|
47
|
-
Credentials được lưu dưới dạng **environment variables** (`TRELLO_KEY`, `TRELLO_TOKEN`) trong shell profile (`~/.zshrc` hoặc `~/.bashrc`). Cấu hình dự án (Board/List/Card) lưu
|
|
49
|
+
Credentials được lưu dưới dạng **environment variables** (`TRELLO_KEY`, `TRELLO_TOKEN`) trong shell profile (`~/.zshrc` hoặc `~/.bashrc`). Cấu hình dự án (Board/List/Card) lưu trong `"trello"` key của `.project-identity` ở root mỗi dự án (fallback: `.trello-config.json`).
|
|
48
50
|
|
|
49
51
|
### 1. Global Credentials (Environment Variables)
|
|
50
52
|
|
|
@@ -52,15 +54,21 @@ User setup lần đầu qua **interactive wizard** khi chạy `awkit init`:
|
|
|
52
54
|
- CLI tự hỏi API Key → tạo link authorize token → hỏi Token → lưu vào `~/.zshrc`.
|
|
53
55
|
- Nếu user đã setup rồi, CLI tự skip bước này.
|
|
54
56
|
|
|
55
|
-
### 2. Local Project Config (
|
|
57
|
+
### 2. Local Project Config (`"trello"` key trong `.project-identity`)
|
|
56
58
|
```json
|
|
57
59
|
{
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
60
|
+
"projectName": "MyApp",
|
|
61
|
+
"projectId": "myapp",
|
|
62
|
+
"trello": {
|
|
63
|
+
"board": "Appdexter - Code Magic",
|
|
64
|
+
"list": "Kiên",
|
|
65
|
+
"card": "Tên Card Dự Án"
|
|
66
|
+
}
|
|
61
67
|
}
|
|
62
68
|
```
|
|
63
69
|
|
|
70
|
+
> **Fallback:** Nếu `.project-identity` không có key `trello`, CLI sẽ thử đọc `.trello-config.json` (backward compat).
|
|
71
|
+
|
|
64
72
|
| Field | Mô tả |
|
|
65
73
|
|-------|--------|
|
|
66
74
|
| `board` | Tên board (TÊN, không dùng ID) |
|
|
@@ -81,7 +89,7 @@ Lần 3 (vẫn lỗi): báo user "Trello chưa được cấu hình. Vui lòng c
|
|
|
81
89
|
|
|
82
90
|
### Tự Động Hóa Qua `awkit trello` (BẮT BUỘC)
|
|
83
91
|
|
|
84
|
-
AI không cần tự inject ENV hay tìm kiếm cấu hình. Công cụ lệnh `awkit trello` v1.3.0+ sẽ TỰ ĐỘNG đọc từ env vars và `.
|
|
92
|
+
AI không cần tự inject ENV hay tìm kiếm cấu hình. Công cụ lệnh `awkit trello` v1.3.0+ sẽ TỰ ĐỘNG đọc từ env vars và `.project-identity`. MỌI thao tác Trello phải đi qua `awkit trello`.
|
|
85
93
|
---
|
|
86
94
|
|
|
87
95
|
## 📚 Command Reference
|
|
@@ -99,7 +107,7 @@ Công cụ `awkit` đã cung cấp sẵn các lệnh native quản lý Trello. P
|
|
|
99
107
|
| Báo Blocked / Lỗi | `awkit trello block "<reason>"` |
|
|
100
108
|
| Tạo checklist mới | `awkit trello checklist "<name>"` |
|
|
101
109
|
|
|
102
|
-
> 💡 Nếu gặp board/list/card "not found", cấu hình có thể sai, báo user kiểm tra lại `.
|
|
110
|
+
> 💡 Nếu gặp board/list/card "not found", cấu hình có thể sai, báo user kiểm tra lại `trello` key trong `.project-identity`.
|
|
103
111
|
|
|
104
112
|
---
|
|
105
113
|
|
|
@@ -124,62 +132,61 @@ Mỗi Card chứa:
|
|
|
124
132
|
|
|
125
133
|
---
|
|
126
134
|
|
|
127
|
-
###
|
|
135
|
+
### ⚡ Delegation Rule: Khi nào dùng CLI, khi nào tự xử lý
|
|
128
136
|
|
|
129
|
-
|
|
130
|
-
|
|
137
|
+
> [!IMPORTANT]
|
|
138
|
+
> Gemini/Codex CLI đã có sẵn skill trello-sync. Chỉ delegate cho CLI khi **tác vụ NẶNG** (nhiều bước, cần phân tích). Tác vụ đơn giản thì Antigravity tự gọi `awkit trello` trực tiếp — tránh xử lý 2 lần.
|
|
131
139
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
140
|
+
| Loại tác vụ | Xử lý | Lý do |
|
|
141
|
+
|-------------|--------|-------|
|
|
142
|
+
| 🔴 **Nặng** — Setup project, tạo nhiều checklists, sync toàn bộ spec | `gemini -p "..." --approval-mode auto` | Nhiều bước, cần phân tích spec → delegate |
|
|
143
|
+
| 🟢 **Nhẹ** — Add 1 item, complete 1 item, comment, block | `awkit trello <cmd>` trực tiếp | 1 lệnh duy nhất → tự gọi, không cần CLI |
|
|
144
|
+
|
|
145
|
+
---
|
|
136
146
|
|
|
137
|
-
|
|
138
|
-
awkit trello checklist "Module: Xác thực Người Dùng"
|
|
147
|
+
### TP1: 🚀 Start Task / Start Project (Description + Checklist) — 🔴 DELEGATE
|
|
139
148
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
awkit trello item "Hồ sơ Người Dùng"
|
|
149
|
+
**Khi nào:** AI bắt đầu project mới, hoặc chuẩn bị triển khai Specs đã chốt (Gate 3/Gate 4).
|
|
150
|
+
*(Lưu ý: Không tạo Checklist Items các phase "Gate 1", "Gate 2" - lúc này chỉ dùng Comment hoặc Update Description thôi).*
|
|
143
151
|
|
|
144
|
-
|
|
145
|
-
|
|
152
|
+
**Action:** Delegate cho **Gemini CLI** (nhiều bước: update desc + tạo checklists + thêm items + comment):
|
|
153
|
+
```bash
|
|
154
|
+
gemini -p "Phân tích Spec/thiết kế đã chốt của dự án. Tạo các checklists và checklist items trên Trello card theo quy tắc Granularity (PM View). Cập nhật description card với tổng quan dự án. Comment thông báo bắt đầu. Dùng awkit trello." --approval-mode auto
|
|
146
155
|
```
|
|
147
156
|
|
|
148
157
|
---
|
|
149
158
|
|
|
150
|
-
### TP2: 📈 Report Progress (Comment Milestone)
|
|
159
|
+
### TP2: 📈 Report Progress (Comment Milestone) — 🟢 TRỰC TIẾP
|
|
151
160
|
|
|
152
161
|
**Khi nào:** AI đạt milestone quan trọng (40%, 60%, 80%) hoặc hoàn thành cụm tính năng.
|
|
153
162
|
|
|
154
|
-
**Action:**
|
|
163
|
+
**Action:** Gọi trực tiếp (1 lệnh duy nhất):
|
|
155
164
|
```bash
|
|
156
|
-
awkit trello comment "⏳ Progress:
|
|
165
|
+
awkit trello comment "⏳ Progress: [Tính năng] ([X]%) — [Chi tiết kỹ thuật]. Symphony: #sym-XXX"
|
|
157
166
|
```
|
|
158
167
|
|
|
159
168
|
---
|
|
160
169
|
|
|
161
|
-
### TP3: 🛑 Blocked
|
|
170
|
+
### TP3: 🛑 Blocked — 🟢 TRỰC TIẾP
|
|
162
171
|
|
|
163
172
|
**Khi nào:** Task bị chặn, cần human input.
|
|
164
173
|
|
|
174
|
+
**Action:** Gọi trực tiếp:
|
|
165
175
|
```bash
|
|
166
|
-
|
|
167
|
-
awkit trello block "API 500 on /auth/login. Cần Backend check."
|
|
176
|
+
awkit trello block "[Lý do block chi tiết]"
|
|
168
177
|
```
|
|
169
178
|
|
|
170
179
|
---
|
|
171
180
|
|
|
172
|
-
### TP4: ✅ Task Done (Đánh dấu Item Complete)
|
|
181
|
+
### TP4: ✅ Task Done (Đánh dấu Item Complete) — 🟢 TRỰC TIẾP
|
|
173
182
|
|
|
174
|
-
**Khi nào:** Toàn bộ cụm Tính năng Nghiệp vụ
|
|
175
|
-
*(Lưu ý: Không check item nếu chỉ mới xong 1 task code con
|
|
183
|
+
**Khi nào:** Toàn bộ cụm Tính năng Nghiệp vụ đã hoàn thành và sẵn sàng test.
|
|
184
|
+
*(Lưu ý: Không check item nếu chỉ mới xong 1 task code con)*
|
|
176
185
|
|
|
186
|
+
**Action:** Gọi trực tiếp:
|
|
177
187
|
```bash
|
|
178
|
-
|
|
179
|
-
awkit trello
|
|
180
|
-
|
|
181
|
-
# 2. Comment kết quả
|
|
182
|
-
awkit trello comment "✅ DONE Feature: Đăng nhập bằng Google | Commit: #$(git rev-parse --short HEAD)"
|
|
188
|
+
awkit trello complete "[Tên tính năng]"
|
|
189
|
+
awkit trello comment "✅ DONE: [Tên tính năng] | Commit: #$(git rev-parse --short HEAD)"
|
|
183
190
|
```
|
|
184
191
|
|
|
185
192
|
---
|
|
@@ -222,14 +229,14 @@ Trong comment, **PHẢI** ghi Symphony Task ID: `Symphony: #sym-XXX`
|
|
|
222
229
|
|
|
223
230
|
| Tình huống | Xử lý |
|
|
224
231
|
|-----------|--------|
|
|
225
|
-
|
|
|
232
|
+
| Trello config not found | ⛔ Bỏ qua Trello sync, log cảnh báo, tiếp tục code |
|
|
226
233
|
| **Credentials not found** | `source ~/.zshrc` → retry (max 2 lần). Vẫn lỗi → báo user chạy `awkit init` |
|
|
227
234
|
| Card not found | Chạy `sync`, retry. Nếu vẫn lỗi → báo user |
|
|
228
235
|
| Checklist chưa có | Tạo checklist mới bằng `awkit trello checklist` |
|
|
229
236
|
| Item trùng tên | Dùng `card:checklists` kiểm tra trước khi thêm |
|
|
230
237
|
| Rate limit / API error | Log warning, tiếp tục code, KHÔNG block flow. CLI tự retry 429. |
|
|
231
238
|
| Token hết hạn | Báo user chạy `awkit init` để setup lại credential mới |
|
|
232
|
-
| Dự án chưa có card trên Trello | Báo user tạo card trên board, cập nhật `.
|
|
239
|
+
| Dự án chưa có card trên Trello | Báo user tạo card trên board, cập nhật `trello` trong `.project-identity` |
|
|
233
240
|
|
|
234
241
|
---
|
|
235
242
|
|
|
@@ -31,6 +31,10 @@ BEFORE claiming any status or expressing satisfaction:
|
|
|
31
31
|
- If NO: State actual status with evidence
|
|
32
32
|
- If YES: State claim WITH evidence
|
|
33
33
|
5. ONLY THEN: Make the claim
|
|
34
|
+
6. AUTO-COMMIT: Build 0 errors → git add → git commit → git push (non-force)
|
|
35
|
+
- Do NOT ask user permission for regular commits
|
|
36
|
+
- Use conventional commit message (fix:/feat:/refactor:)
|
|
37
|
+
- If push fails → git pull --rebase && git push (retry once)
|
|
34
38
|
|
|
35
39
|
Skip any step = lying, not verifying
|
|
36
40
|
```
|
|
@@ -53,7 +57,7 @@ Skip any step = lying, not verifying
|
|
|
53
57
|
| Linter clean | Linter output: 0 errors | Partial check, extrapolation |
|
|
54
58
|
| Build succeeds | Build command: exit 0 | Linter passing, looks good |
|
|
55
59
|
| Bug fixed | Test original symptom: passes | Code changed, assumed fixed |
|
|
56
|
-
| Feature works |
|
|
60
|
+
| Feature works | Maestro MCP auto run/Screenshot | Code written, assumed works |
|
|
57
61
|
| Requirements met | Line-by-line checklist | Tests passing |
|
|
58
62
|
| Deploy succeeded | Health check: 200 OK | Deploy command completed |
|
|
59
63
|
|
|
@@ -93,8 +97,9 @@ If you catch yourself thinking any of these, STOP and run verification:
|
|
|
93
97
|
|
|
94
98
|
**Build:**
|
|
95
99
|
```
|
|
96
|
-
✅ [Run build] → [See: BUILD SUCCEEDED] → "Build passes"
|
|
100
|
+
✅ [Run build] → [See: BUILD SUCCEEDED] → auto git add+commit+push → "Build passes, committed & pushed"
|
|
97
101
|
❌ "Linter passed so build is fine"
|
|
102
|
+
❌ Build succeeded but forgot to commit
|
|
98
103
|
```
|
|
99
104
|
|
|
100
105
|
**Bug Fix:**
|
|
@@ -103,6 +108,12 @@ If you catch yourself thinking any of these, STOP and run verification:
|
|
|
103
108
|
❌ "I've changed the code, bug should be fixed"
|
|
104
109
|
```
|
|
105
110
|
|
|
111
|
+
**UI/Feature Verification:**
|
|
112
|
+
```
|
|
113
|
+
✅ Run Automated App Build → Run mcp_maestro_launch_app → Take mcp_maestro_take_screenshot → "UI renders correctly and no crash"
|
|
114
|
+
❌ "Code looks good, layouts conform to specs, should render fine."
|
|
115
|
+
```
|
|
116
|
+
|
|
106
117
|
**Requirements:**
|
|
107
118
|
```
|
|
108
119
|
✅ Re-read plan → Create checklist → Verify each → Report gaps or completion
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: xcode-build-benchmark
|
|
3
|
+
description: Benchmark Xcode clean và incremental builds với đầu vào có thể lặp lại, xuất timing summaries và lưu timestamped `.build-benchmark/` artifacts. Sử dụng khi lập trình viên muốn đo lường baseline, so sánh trước và sau khi tối ưu, hoặc khi phàn nàn về việc build chậm và muốn đo chính xác build mất bao lâu.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Xcode Build Benchmark
|
|
7
|
+
|
|
8
|
+
Use this skill to produce a repeatable Xcode build baseline before anyone tries to optimize build times.
|
|
9
|
+
|
|
10
|
+
## Core Rules
|
|
11
|
+
|
|
12
|
+
- Measure before recommending changes.
|
|
13
|
+
- Capture clean and incremental builds separately.
|
|
14
|
+
- Keep the command, destination, configuration, scheme, and warm-up rules consistent across runs.
|
|
15
|
+
- Write a timestamped JSON artifact to `.build-benchmark/`.
|
|
16
|
+
- Do not change project files as part of benchmarking.
|
|
17
|
+
|
|
18
|
+
## Inputs To Collect
|
|
19
|
+
|
|
20
|
+
Confirm or infer:
|
|
21
|
+
|
|
22
|
+
- workspace or project path
|
|
23
|
+
- scheme
|
|
24
|
+
- configuration
|
|
25
|
+
- destination
|
|
26
|
+
- whether the user wants simulator or device numbers
|
|
27
|
+
- whether a custom `DerivedData` path is needed
|
|
28
|
+
|
|
29
|
+
If the project has both clean-build and incremental-build pain, benchmark both. That is the default.
|
|
30
|
+
|
|
31
|
+
## Worktree Considerations
|
|
32
|
+
|
|
33
|
+
When benchmarking inside a git worktree, SPM packages with `exclude:` paths that reference gitignored directories (e.g., `__Snapshots__`) will cause `xcodebuild -resolvePackageDependencies` to crash. Create those missing directories before running any builds.
|
|
34
|
+
|
|
35
|
+
## Default Workflow
|
|
36
|
+
|
|
37
|
+
1. Normalize the build command and note every flag that affects caching or module reuse.
|
|
38
|
+
2. Run one warm-up build if needed to validate that the command succeeds.
|
|
39
|
+
3. Run 3 clean builds.
|
|
40
|
+
4. If `COMPILATION_CACHING = YES` is detected, run 3 cached clean builds. These measure clean build time with a warm compilation cache -- the realistic scenario for branch switching, pulling changes, or Clean Build Folder. The script handles this automatically by building once to warm the cache, then deleting DerivedData (but not the compilation cache) before each measured run. Pass `--no-cached-clean` to skip.
|
|
41
|
+
5. Run 3 zero-change builds (build immediately after a successful build with no edits). This measures the fixed overhead floor: dependency computation, project description transfer, build description creation, script phases, codesigning, and validation. A zero-change build that takes more than a few seconds indicates avoidable per-build overhead. Use the default `benchmark_builds.py` invocation (no `--touch-file` flag).
|
|
42
|
+
6. Optionally run 3 incremental builds with a file touch to measure a real edit-rebuild loop. Use `--touch-file path/to/SomeFile.swift` to touch a representative source file before each build.
|
|
43
|
+
7. Save the raw results and summary into `.build-benchmark/`.
|
|
44
|
+
8. Report medians and spread, not just the single fastest run.
|
|
45
|
+
|
|
46
|
+
## Preferred Command Path
|
|
47
|
+
|
|
48
|
+
Use the shared helper when possible:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
python3 scripts/benchmark_builds.py \
|
|
52
|
+
--workspace App.xcworkspace \
|
|
53
|
+
--scheme MyApp \
|
|
54
|
+
--configuration Debug \
|
|
55
|
+
--destination "platform=iOS Simulator,name=iPhone 16" \
|
|
56
|
+
--output-dir .build-benchmark
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If you cannot use the helper script, run equivalent `xcodebuild` commands with `-showBuildTimingSummary` and preserve the raw output.
|
|
60
|
+
|
|
61
|
+
## Required Output
|
|
62
|
+
|
|
63
|
+
Return:
|
|
64
|
+
|
|
65
|
+
- clean build median, min, max
|
|
66
|
+
- cached clean build median, min, max (when COMPILATION_CACHING is enabled)
|
|
67
|
+
- zero-change build median, min, max (fixed overhead floor)
|
|
68
|
+
- incremental build median, min, max (if `--touch-file` was used)
|
|
69
|
+
- biggest timing-summary categories
|
|
70
|
+
- environment details that could affect comparisons
|
|
71
|
+
- path to the saved artifact
|
|
72
|
+
|
|
73
|
+
If results are noisy, say so and recommend rerunning under calmer conditions.
|
|
74
|
+
|
|
75
|
+
## When To Stop
|
|
76
|
+
|
|
77
|
+
Stop after measurement if the user only asked for benchmarking. If they want optimization guidance, hand off the artifact to the relevant specialist by reading its SKILL.md and applying its workflow to the same project context:
|
|
78
|
+
|
|
79
|
+
- [`xcode-compilation-analyzer`](../xcode-compilation-analyzer/SKILL.md)
|
|
80
|
+
- [`xcode-project-analyzer`](../xcode-project-analyzer/SKILL.md)
|
|
81
|
+
- [`spm-build-analysis`](../spm-build-analysis/SKILL.md)
|
|
82
|
+
- [`xcode-build-orchestrator`](../xcode-build-orchestrator/SKILL.md) for full orchestration
|
|
83
|
+
|
|
84
|
+
## Additional Resources
|
|
85
|
+
|
|
86
|
+
- For the benchmark contract, see [references/benchmarking-workflow.md](references/benchmarking-workflow.md)
|
|
87
|
+
- For the shared artifact format, see [references/benchmark-artifacts.md](references/benchmark-artifacts.md)
|
|
88
|
+
- For the JSON schema, see [schemas/build-benchmark.schema.json](schemas/build-benchmark.schema.json)
|