@leejungkiin/awkit 1.4.0 → 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 +432 -6
- package/bin/claude-generators.js +122 -0
- package/core/AGENTS.md +16 -0
- package/core/CLAUDE.md +155 -0
- package/core/GEMINI.md +44 -9
- 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/code-review/SKILL.md +21 -33
- 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/orchestrator/SKILL.md +5 -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 +9 -6
- 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 +51 -83
- package/skills/symphony-orchestrator/SKILL.md +1 -1
- package/skills/trello-sync/SKILL.md +27 -28
- 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/project-identity/android.json +0 -10
- package/templates/project-identity/backend-nestjs.json +0 -10
- package/templates/project-identity/expo.json +0 -10
- package/templates/project-identity/ios.json +0 -10
- package/templates/project-identity/web-nextjs.json +0 -10
- package/workflows/_uncategorized/ship-to-code.md +85 -0
- package/workflows/context/codebase-sync.md +10 -87
|
@@ -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,13 +24,13 @@ 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.
|
|
30
|
+
> **Key Changes v3.7:**
|
|
31
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 +
|
|
33
|
-
> - **TP1.7:
|
|
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
|
|
34
34
|
> - **UI-First Task Ordering**: UI tasks PHẢI đi trước logic tasks trong Symphony
|
|
35
35
|
> - Kế thừa tất cả features v3.5 (Kiro, Completion Status, Design Compliance).
|
|
36
36
|
> **Principle:** AI tự detect completion — user KHÔNG CẦN nói "xong".
|
|
@@ -163,8 +163,8 @@ LIÊN KẾT TỰ ĐỘNG:
|
|
|
163
163
|
|
|
164
164
|
THREE-PHASE MAPPING (Gate 4 — COMPLEX tasks với UI):
|
|
165
165
|
- Phase A done (build OK) → report_progress(25%) + checkpoint build
|
|
166
|
-
- Phase B done (UI mock) → report_progress(45%) + TRIGGER TP1.7 (
|
|
167
|
-
- 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)
|
|
168
168
|
- Phase C all features done → report_progress(90%) → Gate 5
|
|
169
169
|
```
|
|
170
170
|
|
|
@@ -217,10 +217,10 @@ Khi kích hoạt Three-Phase, AI PHẢI hiển thị:
|
|
|
217
217
|
→ {list tasks for Phase A}
|
|
218
218
|
🎨 Phase B: UI Shell (Mock Data)
|
|
219
219
|
→ {list tasks for Phase B}
|
|
220
|
-
→ 🧪
|
|
220
|
+
→ 🧪 AUTO DEVICE TEST (Maestro) sau phase này
|
|
221
221
|
⚡ Phase C: Logic Integration
|
|
222
222
|
→ {list tasks for Phase C}
|
|
223
|
-
→ 🧪
|
|
223
|
+
→ 🧪 AUTO DEVICE TEST (Maestro) mỗi feature
|
|
224
224
|
══════════════════════════════════════
|
|
225
225
|
Bắt đầu Phase A...
|
|
226
226
|
```
|
|
@@ -241,13 +241,19 @@ auto_triggers:
|
|
|
241
241
|
phase_b_to_checkpoint:
|
|
242
242
|
signal: Tất cả [UI] tasks đã done
|
|
243
243
|
action: |
|
|
244
|
-
- ⛔
|
|
245
|
-
-
|
|
246
|
-
-
|
|
247
|
-
|
|
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
|
|
248
254
|
|
|
249
255
|
checkpoint_to_phase_c:
|
|
250
|
-
signal: User confirmed "
|
|
256
|
+
signal: Build success & App launched (autoVerification=true) HOẶC User confirmed "OK" (autoVerification=false)
|
|
251
257
|
action: |
|
|
252
258
|
- Set phase_b_confirmed = true
|
|
253
259
|
- Set current_phase = "C"
|
|
@@ -265,16 +271,16 @@ auto_triggers:
|
|
|
265
271
|
|
|
266
272
|
```
|
|
267
273
|
❌ VI PHạM NẶNG:
|
|
268
|
-
- 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)
|
|
269
275
|
- Skip Phase Announcement Block
|
|
270
|
-
-
|
|
271
|
-
-
|
|
272
|
-
-
|
|
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)
|
|
273
279
|
|
|
274
280
|
✅ BẮT BUỘC:
|
|
275
281
|
- Luôn announce phase transition rõ ràng
|
|
276
|
-
- Luôn
|
|
277
|
-
-
|
|
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.
|
|
278
284
|
- Ghi lại phase state vào NeuralMemory khi chuyển phase
|
|
279
285
|
```
|
|
280
286
|
|
|
@@ -360,78 +366,40 @@ File patterns:
|
|
|
360
366
|
|
|
361
367
|
---
|
|
362
368
|
|
|
363
|
-
### TP1.7:
|
|
369
|
+
### TP1.7: Flexible Checkpoint (Manual v/s Auto) (UPDATE v3.7)
|
|
364
370
|
|
|
365
|
-
**
|
|
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**.
|
|
375
|
+
|
|
376
|
+
**Khi nào trigger TP1.7:**
|
|
366
377
|
|
|
367
378
|
1. **Phase B → C Transition (BẮT BUỘC cho COMPLEX):**
|
|
368
|
-
- ALL UI screens đã code xong
|
|
369
|
-
- Navigation hoạt động full flow
|
|
370
|
-
- App build và chạy OK trên emulator/device
|
|
379
|
+
- ALL UI screens đã code xong
|
|
371
380
|
|
|
372
381
|
2. **Sau mỗi feature trong Phase C (COMPLEX tasks):**
|
|
373
|
-
- Feature X đã
|
|
374
|
-
- Feature works end-to-end trên device
|
|
375
|
-
|
|
376
|
-
**Điều kiện kích hoạt:**
|
|
377
|
-
```
|
|
378
|
-
COMPLEX + có UI component → BẮT BUỘC TP1.7
|
|
379
|
-
MODERATE + có UI component → OPTIONAL (recommend cho hardware features: camera, GPS, sensors)
|
|
380
|
-
TRIVIAL → SKIP
|
|
381
|
-
Backend-only tasks → SKIP
|
|
382
|
-
```
|
|
382
|
+
- Feature X đã code xong logic
|
|
383
383
|
|
|
384
|
-
**Action:**
|
|
384
|
+
**Action (Tùy theo Mode):**
|
|
385
385
|
```
|
|
386
386
|
1. Report progress trước: symphony_report_progress(current_task, progress)
|
|
387
|
+
2. Kiểm tra cờ `autoVerification` trong .project-identity.
|
|
387
388
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
📋 Đã code xong: {summary of completed work}
|
|
394
|
-
📁 Files changed: {N} files
|
|
395
|
-
|
|
396
|
-
🔍 Hướng dẫn test:
|
|
397
|
-
1. {step 1 — cụ thể, actionable}
|
|
398
|
-
2. {step 2 — expected behavior}
|
|
399
|
-
3. {step 3 — edge case to check}
|
|
400
|
-
|
|
401
|
-
⏳ Anh test xong reply:
|
|
402
|
-
✅ OK — tiếp tục
|
|
403
|
-
⚠️ Issue: {mô tả} — tôi sẽ fix trước khi đi tiếp
|
|
404
|
-
══════════════════════════════════════
|
|
405
|
-
|
|
406
|
-
3. Gọi notify_user(BlockedOnUser=true) — DỪNG và CHỜ user response
|
|
407
|
-
|
|
408
|
-
4. User response handling:
|
|
409
|
-
→ "OK" / "✅" → Tiếp tục phase tiếp / feature tiếp
|
|
410
|
-
→ "Issue: ..." → Fix issue → re-run checkpoint
|
|
411
|
-
→ "Skip" → Ghi note concern, tiếp tục (DONE_WITH_CONCERNS later)
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
**Test Guidance Generation:**
|
|
415
|
-
```
|
|
416
|
-
AI PHẢI tạo hướng dẫn test CỤ THỂ cho từng checkpoint:
|
|
417
|
-
|
|
418
|
-
Phase B Examples (UI):
|
|
419
|
-
- "Mở app → bấm tab Health → xem Dashboard có hiển thị 4 cards không?"
|
|
420
|
-
- "Quay ngang màn hình → layout có bể không?"
|
|
421
|
-
- "Bấm nút Camera → xem preview có xuất hiện không?"
|
|
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".
|
|
422
394
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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.
|
|
427
401
|
```
|
|
428
402
|
|
|
429
|
-
**Enforcement:**
|
|
430
|
-
- ❌ KHÔNG được chuyển từ Phase B → Phase C mà chưa có user confirm (COMPLEX)
|
|
431
|
-
- ❌ KHÔNG được skip checkpoint cho hardware-related features (Camera, GPS, Sensors)
|
|
432
|
-
- ✅ NÊN batch các features nhỏ lại thành 1 checkpoint (tránh quá nhiều interrupt)
|
|
433
|
-
- ✅ Checkpoint cho logic KHÔNG cần nếu feature là pure-backend/invisible
|
|
434
|
-
|
|
435
403
|
---
|
|
436
404
|
|
|
437
405
|
### TP2: Task Complete — Completion Status Protocol
|
|
@@ -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:
|
|
@@ -132,62 +132,61 @@ Mỗi Card chứa:
|
|
|
132
132
|
|
|
133
133
|
---
|
|
134
134
|
|
|
135
|
-
###
|
|
135
|
+
### ⚡ Delegation Rule: Khi nào dùng CLI, khi nào tự xử lý
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
|
|
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.
|
|
139
139
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
144
|
|
|
145
|
-
|
|
146
|
-
awkit trello checklist "Module: Xác thực Người Dùng"
|
|
145
|
+
---
|
|
147
146
|
|
|
148
|
-
|
|
149
|
-
awkit trello item "Đăng nhập bằng Google"
|
|
150
|
-
awkit trello item "Hồ sơ Người Dùng"
|
|
147
|
+
### TP1: 🚀 Start Task / Start Project (Description + Checklist) — 🔴 DELEGATE
|
|
151
148
|
|
|
152
|
-
|
|
153
|
-
|
|
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).*
|
|
151
|
+
|
|
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
|
|
154
155
|
```
|
|
155
156
|
|
|
156
157
|
---
|
|
157
158
|
|
|
158
|
-
### TP2: 📈 Report Progress (Comment Milestone)
|
|
159
|
+
### TP2: 📈 Report Progress (Comment Milestone) — 🟢 TRỰC TIẾP
|
|
159
160
|
|
|
160
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.
|
|
161
162
|
|
|
162
|
-
**Action:**
|
|
163
|
+
**Action:** Gọi trực tiếp (1 lệnh duy nhất):
|
|
163
164
|
```bash
|
|
164
|
-
awkit trello comment "⏳ Progress:
|
|
165
|
+
awkit trello comment "⏳ Progress: [Tính năng] ([X]%) — [Chi tiết kỹ thuật]. Symphony: #sym-XXX"
|
|
165
166
|
```
|
|
166
167
|
|
|
167
168
|
---
|
|
168
169
|
|
|
169
|
-
### TP3: 🛑 Blocked
|
|
170
|
+
### TP3: 🛑 Blocked — 🟢 TRỰC TIẾP
|
|
170
171
|
|
|
171
172
|
**Khi nào:** Task bị chặn, cần human input.
|
|
172
173
|
|
|
174
|
+
**Action:** Gọi trực tiếp:
|
|
173
175
|
```bash
|
|
174
|
-
|
|
175
|
-
awkit trello block "API 500 on /auth/login. Cần Backend check."
|
|
176
|
+
awkit trello block "[Lý do block chi tiết]"
|
|
176
177
|
```
|
|
177
178
|
|
|
178
179
|
---
|
|
179
180
|
|
|
180
|
-
### TP4: ✅ Task Done (Đánh dấu Item Complete)
|
|
181
|
+
### TP4: ✅ Task Done (Đánh dấu Item Complete) — 🟢 TRỰC TIẾP
|
|
181
182
|
|
|
182
|
-
**Khi nào:** Toàn bộ cụm Tính năng Nghiệp vụ
|
|
183
|
-
*(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)*
|
|
184
185
|
|
|
186
|
+
**Action:** Gọi trực tiếp:
|
|
185
187
|
```bash
|
|
186
|
-
|
|
187
|
-
awkit trello
|
|
188
|
-
|
|
189
|
-
# 2. Comment kết quả
|
|
190
|
-
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)"
|
|
191
190
|
```
|
|
192
191
|
|
|
193
192
|
---
|
|
@@ -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)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Benchmark Artifacts
|
|
2
|
+
|
|
3
|
+
All skills in this repository should treat `.build-benchmark/` as the canonical location for measured build evidence.
|
|
4
|
+
|
|
5
|
+
## Goals
|
|
6
|
+
|
|
7
|
+
- Keep build measurements reproducible.
|
|
8
|
+
- Make clean and incremental build data easy to compare.
|
|
9
|
+
- Preserve enough context for later specialist analysis without rerunning the benchmark.
|
|
10
|
+
|
|
11
|
+
## Wall-Clock vs Cumulative Task Time
|
|
12
|
+
|
|
13
|
+
The `duration_seconds` field on each run and the `median_seconds` in the summary represent **wall-clock time** -- how long the developer actually waits. This is the primary success metric.
|
|
14
|
+
|
|
15
|
+
The `timing_summary_categories` are **aggregated task times** parsed from Xcode's Build Timing Summary. Because Xcode runs many tasks in parallel across CPU cores, these totals typically exceed the wall-clock duration. A large cumulative `SwiftCompile` value is diagnostic evidence of compiler workload, not proof that compilation is blocking the build. Always compare category totals against the wall-clock median before concluding that a category is a bottleneck.
|
|
16
|
+
|
|
17
|
+
## File Layout
|
|
18
|
+
|
|
19
|
+
Recommended outputs:
|
|
20
|
+
|
|
21
|
+
- `.build-benchmark/<timestamp>-<scheme>.json`
|
|
22
|
+
- `.build-benchmark/<timestamp>-<scheme>-clean-1.log`
|
|
23
|
+
- `.build-benchmark/<timestamp>-<scheme>-clean-2.log`
|
|
24
|
+
- `.build-benchmark/<timestamp>-<scheme>-clean-3.log`
|
|
25
|
+
- `.build-benchmark/<timestamp>-<scheme>-cached-clean-1.log` (when COMPILATION_CACHING is enabled)
|
|
26
|
+
- `.build-benchmark/<timestamp>-<scheme>-cached-clean-2.log`
|
|
27
|
+
- `.build-benchmark/<timestamp>-<scheme>-cached-clean-3.log`
|
|
28
|
+
- `.build-benchmark/<timestamp>-<scheme>-incremental-1.log`
|
|
29
|
+
- `.build-benchmark/<timestamp>-<scheme>-incremental-2.log`
|
|
30
|
+
- `.build-benchmark/<timestamp>-<scheme>-incremental-3.log`
|
|
31
|
+
|
|
32
|
+
Use an ISO-like UTC timestamp without spaces so the files sort naturally.
|
|
33
|
+
|
|
34
|
+
## Artifact Requirements
|
|
35
|
+
|
|
36
|
+
Each JSON artifact should include:
|
|
37
|
+
|
|
38
|
+
- schema version
|
|
39
|
+
- creation timestamp
|
|
40
|
+
- project context
|
|
41
|
+
- environment details when available
|
|
42
|
+
- the normalized build command
|
|
43
|
+
- separate `clean` and `incremental` run arrays
|
|
44
|
+
- summary statistics for each build type
|
|
45
|
+
- parsed timing-summary categories
|
|
46
|
+
- free-form notes for caveats or noise
|
|
47
|
+
|
|
48
|
+
## Clean, Cached Clean, And Incremental Separation
|
|
49
|
+
|
|
50
|
+
Do not merge different build type measurements into a single list. They answer different questions:
|
|
51
|
+
|
|
52
|
+
- **Clean builds** show full build-system, package, and module setup cost with a cold compilation cache.
|
|
53
|
+
- **Cached clean builds** show clean build cost when the compilation cache is warm. This is the realistic scenario for branch switching, pulling changes, or Clean Build Folder. Only present when `COMPILATION_CACHING = YES` is detected.
|
|
54
|
+
- **Incremental builds** show edit-loop productivity and script or cache invalidation problems.
|
|
55
|
+
|
|
56
|
+
## Raw Logs
|
|
57
|
+
|
|
58
|
+
Store raw `xcodebuild` output beside the JSON artifact whenever possible. That allows later skills to:
|
|
59
|
+
|
|
60
|
+
- re-parse timing summaries
|
|
61
|
+
- inspect failed builds
|
|
62
|
+
- search for long type-check warnings
|
|
63
|
+
- correlate build-system phases with recommendations
|
|
64
|
+
|
|
65
|
+
## Measurement Caveats
|
|
66
|
+
|
|
67
|
+
### COMPILATION_CACHING
|
|
68
|
+
|
|
69
|
+
`COMPILATION_CACHING = YES` stores compiled artifacts in a system-managed cache outside DerivedData so that repeated compilations of identical inputs are served from cache. The standard clean-build benchmark (`xcodebuild clean` between runs) may add overhead from cache population without showing the corresponding cache-hit benefit.
|
|
70
|
+
|
|
71
|
+
The benchmark script automatically detects `COMPILATION_CACHING = YES` and runs a **cached clean** benchmark phase. This phase:
|
|
72
|
+
|
|
73
|
+
1. Builds once to warm the compilation cache.
|
|
74
|
+
2. Deletes DerivedData (but not the compilation cache) before each measured run.
|
|
75
|
+
3. Rebuilds, measuring the cache-hit clean build time.
|
|
76
|
+
|
|
77
|
+
The cached clean metric captures the realistic developer experience: branch switching, pulling changes, and Clean Build Folder. Use the cached clean median as the primary comparison metric when evaluating `COMPILATION_CACHING` impact.
|
|
78
|
+
|
|
79
|
+
To skip this phase, pass `--no-cached-clean`.
|
|
80
|
+
|
|
81
|
+
### First-Run Variance
|
|
82
|
+
|
|
83
|
+
The first clean build after the warmup cycle often runs 20-40% slower than subsequent clean builds due to cold OS-level caches (disk I/O, dynamic linker cache, etc.). The benchmark script mitigates this by running a warmup clean+build cycle before measured runs. If variance between the first and later clean runs is still high, prefer the median or min over the mean, and note the variance in the artifact's `notes` field.
|
|
84
|
+
|
|
85
|
+
## Shared Consumer Expectations
|
|
86
|
+
|
|
87
|
+
Any skill reading a benchmark artifact should be able to identify:
|
|
88
|
+
|
|
89
|
+
- what was measured
|
|
90
|
+
- how it was measured
|
|
91
|
+
- whether the run succeeded
|
|
92
|
+
- whether the results are stable enough to compare
|
|
93
|
+
|
|
94
|
+
For the authoritative field-level schema, see [../schemas/build-benchmark.schema.json](../schemas/build-benchmark.schema.json).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Benchmarking Workflow
|
|
2
|
+
|
|
3
|
+
Use this reference when you need the full operational contract for collecting Xcode build measurements.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Produce a benchmark artifact that another skill can trust without rerunning the same setup discovery.
|
|
8
|
+
|
|
9
|
+
## Benchmark Contract
|
|
10
|
+
|
|
11
|
+
- Measure both clean and incremental builds unless the user narrows the scope.
|
|
12
|
+
- Use the same scheme, configuration, destination, and command flags for all measured runs.
|
|
13
|
+
- Record the exact command and any environment overrides.
|
|
14
|
+
- Keep clean and incremental runs in separate arrays in the artifact.
|
|
15
|
+
- Save wall-clock timing plus any parsed timing-summary categories.
|
|
16
|
+
|
|
17
|
+
## Suggested Run Counts
|
|
18
|
+
|
|
19
|
+
- Clean builds: 3 measured runs
|
|
20
|
+
- Incremental builds: 3 measured runs
|
|
21
|
+
- Warm-up: 0 to 1 validation run, excluded from the summary unless the user explicitly wants it included
|
|
22
|
+
|
|
23
|
+
## Clean Build Rules
|
|
24
|
+
|
|
25
|
+
- Clear build products with `xcodebuild clean` or an equivalent clean-build-folder step before each measured clean run.
|
|
26
|
+
- Do not change scheme, destination, or configuration between runs.
|
|
27
|
+
- If the command fails, store the failure and stop rather than mixing failed and successful runs.
|
|
28
|
+
|
|
29
|
+
## Incremental Build Rules
|
|
30
|
+
|
|
31
|
+
- Use the same build command after a successful baseline build.
|
|
32
|
+
- Do not clean between incremental runs.
|
|
33
|
+
- If the user wants edit-loop benchmarking, note the file change strategy explicitly in the artifact.
|
|
34
|
+
- If there are no source edits between runs, label the result as no-edit incremental timing.
|
|
35
|
+
|
|
36
|
+
## What To Capture
|
|
37
|
+
|
|
38
|
+
At minimum, keep:
|
|
39
|
+
|
|
40
|
+
- timestamp
|
|
41
|
+
- host machine info if available
|
|
42
|
+
- Xcode version if available
|
|
43
|
+
- workspace or project path
|
|
44
|
+
- scheme, configuration, destination
|
|
45
|
+
- exact `xcodebuild` command
|
|
46
|
+
- duration per run
|
|
47
|
+
- success or failure
|
|
48
|
+
- parsed timing-summary categories
|
|
49
|
+
- notes on warm-up behavior or unusual noise
|
|
50
|
+
|
|
51
|
+
## Reporting Guidance
|
|
52
|
+
|
|
53
|
+
Use medians for the headline number. Also include:
|
|
54
|
+
|
|
55
|
+
- min and max
|
|
56
|
+
- range
|
|
57
|
+
- category totals from the timing summary
|
|
58
|
+
- obvious outliers or instability
|
|
59
|
+
|
|
60
|
+
## Handoff Expectations
|
|
61
|
+
|
|
62
|
+
The next optimization skill should be able to answer:
|
|
63
|
+
|
|
64
|
+
- Is the main problem clean, incremental, or both?
|
|
65
|
+
- Which build categories dominate time?
|
|
66
|
+
- Which command produced the evidence?
|
|
67
|
+
- Is the baseline trustworthy enough to compare before and after changes?
|