@leejungkiin/awkit 1.7.0 → 1.7.4

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 (241) hide show
  1. package/bin/awk.js +576 -84
  2. package/core/CLAUDE.md +1 -1
  3. package/core/GEMINI.md +148 -167
  4. package/core/GEMINI.md.bak +149 -116
  5. package/core/skill-runtime-manifest.json +3 -0
  6. package/docs/Claude Fable 5.md +3826 -0
  7. package/docs/android_kotlin_system_instruction.md +210 -0
  8. package/docs/brainstorm_ponytail_integration.md +146 -0
  9. package/docs/brainstorm_smart_setup.md +113 -0
  10. package/docs/deep-research-report (1).md +293 -0
  11. package/docs/history/GEMINI.v1.md +135 -0
  12. package/docs/history/brainstorm_antigravity_unified_architecture.v1.md +105 -0
  13. package/docs/history/implementation_plan.v1.md +58 -0
  14. package/package.json +4 -1
  15. package/scripts/artifact-storage.js +130 -0
  16. package/scripts/automation-gate.js +40 -7
  17. package/scripts/claude-plan.js +76 -0
  18. package/scripts/dependency-manager.js +210 -0
  19. package/scripts/exec-rtk.js +11 -5
  20. package/scripts/i18n-helper.js +381 -0
  21. package/scripts/multi-model-pipeline.js +144 -0
  22. package/skill-packs/mobile-ios/pack.json +4 -2
  23. package/skill-packs/reverse-engineering/pack.json +1 -0
  24. package/skills/CATALOG.md +20 -0
  25. package/skills/GEMINI.md +9 -1
  26. package/skills/TRIGGER_INDEX.md +10 -0
  27. package/skills/ai-music/SKILL.md +275 -0
  28. package/skills/android-re-analyzer/SKILL.md +238 -0
  29. package/skills/android-re-analyzer/references/api-extraction-patterns.md +119 -0
  30. package/skills/android-re-analyzer/references/call-flow-analysis.md +176 -0
  31. package/skills/android-re-analyzer/references/fernflower-usage.md +115 -0
  32. package/skills/android-re-analyzer/references/jadx-usage.md +116 -0
  33. package/skills/android-re-analyzer/references/setup-guide.md +221 -0
  34. package/skills/android-re-analyzer/scripts/check-deps.sh +129 -0
  35. package/skills/android-re-analyzer/scripts/decompile.sh +375 -0
  36. package/skills/android-re-analyzer/scripts/find-api-calls.sh +118 -0
  37. package/skills/android-re-analyzer/scripts/install-dep.sh +448 -0
  38. package/skills/animal-island-ui-style/SKILL.md +1450 -0
  39. package/skills/app-store-review-agent/SKILL.md +164 -0
  40. package/skills/app-store-review-agent/references/guidelines/README.md +154 -0
  41. package/skills/app-store-review-agent/references/guidelines/by-app-type/ai_apps.md +37 -0
  42. package/skills/app-store-review-agent/references/guidelines/by-app-type/all_apps.md +50 -0
  43. package/skills/app-store-review-agent/references/guidelines/by-app-type/crypto_finance.md +31 -0
  44. package/skills/app-store-review-agent/references/guidelines/by-app-type/games.md +31 -0
  45. package/skills/app-store-review-agent/references/guidelines/by-app-type/health_fitness.md +31 -0
  46. package/skills/app-store-review-agent/references/guidelines/by-app-type/kids.md +27 -0
  47. package/skills/app-store-review-agent/references/guidelines/by-app-type/macos.md +38 -0
  48. package/skills/app-store-review-agent/references/guidelines/by-app-type/social_ugc.md +32 -0
  49. package/skills/app-store-review-agent/references/guidelines/by-app-type/subscription_iap.md +34 -0
  50. package/skills/app-store-review-agent/references/guidelines/by-app-type/vpn.md +18 -0
  51. package/skills/app-store-review-agent/references/rules/design/minimum_functionality.md +96 -0
  52. package/skills/app-store-review-agent/references/rules/design/sign_in_with_apple.md +54 -0
  53. package/skills/app-store-review-agent/references/rules/entitlements/unused_entitlements.md +83 -0
  54. package/skills/app-store-review-agent/references/rules/metadata/accurate_metadata.md +54 -0
  55. package/skills/app-store-review-agent/references/rules/metadata/apple_trademark.md +99 -0
  56. package/skills/app-store-review-agent/references/rules/metadata/china_storefront.md +72 -0
  57. package/skills/app-store-review-agent/references/rules/metadata/competitor_terms.md +56 -0
  58. package/skills/app-store-review-agent/references/rules/metadata/subscription_metadata.md +81 -0
  59. package/skills/app-store-review-agent/references/rules/privacy/privacy_manifest.md +84 -0
  60. package/skills/app-store-review-agent/references/rules/privacy/unnecessary_data.md +60 -0
  61. package/skills/app-store-review-agent/references/rules/subscription/misleading_pricing.md +63 -0
  62. package/skills/app-store-review-agent/references/rules/subscription/missing_tos_pp.md +54 -0
  63. package/skills/awf-ponytail/SKILL.md +91 -0
  64. package/skills/awf-ponytail-review/SKILL.md +67 -0
  65. package/skills/awf-session-restore/SKILL.md +3 -3
  66. package/skills/brainstorm-agent/SKILL.md +11 -2
  67. package/skills/brainstorm-agent/templates/brief-template.md +8 -0
  68. package/skills/claude-planner/SKILL.md +47 -0
  69. package/skills/code-review/SKILL.md +87 -0
  70. package/skills/expo-game-development/SKILL.md +163 -0
  71. package/skills/flutter/LICENSE.txt +202 -0
  72. package/skills/flutter/SKILL.md +127 -0
  73. package/skills/flutter-project-creater/LICENSE.txt +202 -0
  74. package/skills/flutter-project-creater/SKILL.md +106 -0
  75. package/skills/game-developer/SKILL.md +163 -0
  76. package/skills/game-developer/references/ecs-patterns.md +501 -0
  77. package/skills/game-developer/references/multiplayer-networking.md +475 -0
  78. package/skills/game-developer/references/performance-optimization.md +422 -0
  79. package/skills/game-developer/references/unity-patterns.md +271 -0
  80. package/skills/game-developer/references/unreal-cpp.md +352 -0
  81. package/skills/generate-gui-assets/SKILL.md +305 -0
  82. package/skills/generate-gui-assets/agents/openai.yaml +4 -0
  83. package/skills/generate-gui-assets/references/catalog-schema.md +58 -0
  84. package/skills/generate-gui-assets/references/extraction-techniques.md +21 -0
  85. package/skills/generate-gui-assets/references/prompt-patterns.md +58 -0
  86. package/skills/generate-gui-assets/scripts/__pycache__/clean_chroma_edges.cpython-311.pyc +0 -0
  87. package/skills/generate-gui-assets/scripts/build_gui_contact_sheet.py +51 -0
  88. package/skills/generate-gui-assets/scripts/clean_chroma_edges.py +262 -0
  89. package/skills/generate-gui-assets/scripts/copy_approved_icons.py +64 -0
  90. package/skills/generate-gui-assets/scripts/prepare_gui_asset_run.py +91 -0
  91. package/skills/generate-gui-assets/scripts/suggest_grid_options.py +63 -0
  92. package/skills/generate-gui-assets/scripts/validate_gui_catalog.py +50 -0
  93. package/skills/godot-game-development/SKILL.md +142 -0
  94. package/skills/hatch-pet/LICENSE.txt +201 -0
  95. package/skills/hatch-pet/SKILL.md +420 -0
  96. package/skills/hatch-pet/agents/openai.yaml +4 -0
  97. package/skills/hatch-pet/references/animation-rows.md +29 -0
  98. package/skills/hatch-pet/references/codex-pet-contract.md +35 -0
  99. package/skills/hatch-pet/references/qa-rubric.md +60 -0
  100. package/skills/hatch-pet/scripts/__pycache__/clean_chroma_edges.cpython-311.pyc +0 -0
  101. package/skills/hatch-pet/scripts/clean_chroma_edges.py +262 -0
  102. package/skills/hatch-pet/scripts/compose_atlas.py +150 -0
  103. package/skills/hatch-pet/scripts/derive_running_left_from_running_right.py +143 -0
  104. package/skills/hatch-pet/scripts/extract_strip_frames.py +323 -0
  105. package/skills/hatch-pet/scripts/finalize_pet_run.py +382 -0
  106. package/skills/hatch-pet/scripts/generate_pet_images.py +287 -0
  107. package/skills/hatch-pet/scripts/inspect_frames.py +246 -0
  108. package/skills/hatch-pet/scripts/make_contact_sheet.py +96 -0
  109. package/skills/hatch-pet/scripts/package_custom_pet.py +108 -0
  110. package/skills/hatch-pet/scripts/pet_job_status.py +117 -0
  111. package/skills/hatch-pet/scripts/prepare_pet_run.py +673 -0
  112. package/skills/hatch-pet/scripts/queue_pet_repairs.py +172 -0
  113. package/skills/hatch-pet/scripts/record_imagegen_result.py +250 -0
  114. package/skills/hatch-pet/scripts/render_animation_videos.py +134 -0
  115. package/skills/hatch-pet/scripts/render_animation_videos.sh +5 -0
  116. package/skills/hatch-pet/scripts/validate_atlas.py +139 -0
  117. package/skills/i18n-orchestrator/SKILL.md +37 -0
  118. package/skills/ios-simulator-skill/SKILL.md +390 -0
  119. package/skills/ios-simulator-skill/scripts/accessibility_audit.py +300 -0
  120. package/skills/ios-simulator-skill/scripts/app_launcher.py +326 -0
  121. package/skills/ios-simulator-skill/scripts/app_state_capture.py +400 -0
  122. package/skills/ios-simulator-skill/scripts/appearance.py +385 -0
  123. package/skills/ios-simulator-skill/scripts/build_and_test.py +348 -0
  124. package/skills/ios-simulator-skill/scripts/clipboard.py +103 -0
  125. package/skills/ios-simulator-skill/scripts/common/__init__.py +61 -0
  126. package/skills/ios-simulator-skill/scripts/common/cache_utils.py +289 -0
  127. package/skills/ios-simulator-skill/scripts/common/device_utils.py +462 -0
  128. package/skills/ios-simulator-skill/scripts/common/env_config.py +35 -0
  129. package/skills/ios-simulator-skill/scripts/common/hang_pipeline.py +862 -0
  130. package/skills/ios-simulator-skill/scripts/common/hang_sessions.py +490 -0
  131. package/skills/ios-simulator-skill/scripts/common/idb_utils.py +180 -0
  132. package/skills/ios-simulator-skill/scripts/common/screenshot_utils.py +338 -0
  133. package/skills/ios-simulator-skill/scripts/container.py +668 -0
  134. package/skills/ios-simulator-skill/scripts/gesture.py +394 -0
  135. package/skills/ios-simulator-skill/scripts/hang_watcher.py +1533 -0
  136. package/skills/ios-simulator-skill/scripts/keyboard.py +391 -0
  137. package/skills/ios-simulator-skill/scripts/localization_audit.py +483 -0
  138. package/skills/ios-simulator-skill/scripts/location.py +467 -0
  139. package/skills/ios-simulator-skill/scripts/log_monitor.py +493 -0
  140. package/skills/ios-simulator-skill/scripts/model_inspector.py +645 -0
  141. package/skills/ios-simulator-skill/scripts/navigator.py +461 -0
  142. package/skills/ios-simulator-skill/scripts/privacy_manager.py +310 -0
  143. package/skills/ios-simulator-skill/scripts/push_notification.py +240 -0
  144. package/skills/ios-simulator-skill/scripts/screen_mapper.py +296 -0
  145. package/skills/ios-simulator-skill/scripts/sim_health_check.sh +245 -0
  146. package/skills/ios-simulator-skill/scripts/sim_list.py +299 -0
  147. package/skills/ios-simulator-skill/scripts/simctl_boot.py +312 -0
  148. package/skills/ios-simulator-skill/scripts/simctl_create.py +316 -0
  149. package/skills/ios-simulator-skill/scripts/simctl_delete.py +357 -0
  150. package/skills/ios-simulator-skill/scripts/simctl_erase.py +351 -0
  151. package/skills/ios-simulator-skill/scripts/simctl_shutdown.py +290 -0
  152. package/skills/ios-simulator-skill/scripts/simulator_selector.py +375 -0
  153. package/skills/ios-simulator-skill/scripts/status_bar.py +250 -0
  154. package/skills/ios-simulator-skill/scripts/test_recorder.py +323 -0
  155. package/skills/ios-simulator-skill/scripts/visual_diff.py +235 -0
  156. package/skills/ios-simulator-skill/scripts/xcode/__init__.py +13 -0
  157. package/skills/ios-simulator-skill/scripts/xcode/builder.py +397 -0
  158. package/skills/ios-simulator-skill/scripts/xcode/cache.py +204 -0
  159. package/skills/ios-simulator-skill/scripts/xcode/config.py +178 -0
  160. package/skills/ios-simulator-skill/scripts/xcode/reporter.py +343 -0
  161. package/skills/ios-simulator-skill/scripts/xcode/xcresult.py +451 -0
  162. package/skills/ios-visual-qa-strategist/SKILL.md +111 -0
  163. package/skills/ios-visual-qa-strategist/agents/openai.yaml +4 -0
  164. package/skills/ios-visual-qa-strategist/references/ios-tool-selection.md +61 -0
  165. package/skills/ios-visual-qa-strategist/references/minimal-capture-policy.md +56 -0
  166. package/skills/ios-visual-qa-strategist/references/visual-reasoning-heuristics.md +53 -0
  167. package/skills/orchestrator/SKILL.md +0 -20
  168. package/skills/persistent-storage/SKILL.md +55 -0
  169. package/skills/short-maker/SKILL.md +23 -0
  170. package/skills/short-maker/scripts/effects.js +56 -0
  171. package/skills/short-maker/scripts/shortmaker-bridge.js +332 -0
  172. package/skills/short-maker/scripts/videomix.js +601 -0
  173. package/skills/short-maker/templates/hyperframes/cinematic-character.template.html +172 -0
  174. package/skills/short-maker/templates/hyperframes/index.template.html +194 -0
  175. package/skills/smali-to-kotlin/SKILL.md +128 -0
  176. package/skills/smali-to-kotlin/examples/getting-started/tech-stack.md +58 -0
  177. package/skills/smali-to-kotlin/examples/pipeline/data-ui-parity.md +118 -0
  178. package/skills/smali-to-kotlin/examples/pipeline/scanner-and-bootstrap.md +106 -0
  179. package/skills/smali-to-kotlin/library-patterns.md +189 -0
  180. package/skills/smali-to-kotlin/phase-0-discovery.md +128 -0
  181. package/skills/smali-to-kotlin/phase-1-architecture.md +166 -0
  182. package/skills/smali-to-kotlin/phase-2-blueprint-ui.md +347 -0
  183. package/skills/smali-to-kotlin/phase-2-blueprint.md +228 -0
  184. package/skills/smali-to-kotlin/phase-3-build.md +248 -0
  185. package/skills/smali-to-kotlin/phase-3-logic-build.md +268 -0
  186. package/skills/smali-to-kotlin/smali-reading-guide.md +310 -0
  187. package/skills/smali-to-kotlin/templates/app-map.md +101 -0
  188. package/skills/smali-to-kotlin/templates/architecture.md +142 -0
  189. package/skills/smali-to-kotlin/templates/blueprint.md +145 -0
  190. package/skills/spec-gate/SKILL.md +6 -2
  191. package/skills/symphony-enforcer/SKILL.md +8 -0
  192. package/skills/symphony-enforcer/examples/mindful-stop.md +2 -0
  193. package/skills/symphony-enforcer/examples/three-phase.md +16 -0
  194. package/skills/symphony-enforcer/examples/trigger-points.md +7 -1
  195. package/skills/unity-game-development/SKILL.md +231 -0
  196. package/skills/verification-gate/SKILL.md +4 -2
  197. package/skills/video-edit/SKILL.md +36 -0
  198. package/skills/video-edit/scripts/video_edit.py +324 -0
  199. package/templates/setup-mapping.json +48 -0
  200. package/templates/specs/design-template.md +161 -71
  201. package/templates/specs/requirements-template.md +65 -133
  202. package/templates/specs/task-spec-template.xml +3 -0
  203. package/workflows/_uncategorized/critic.md +40 -0
  204. package/workflows/_uncategorized/git-rebase-flow.md +81 -0
  205. package/workflows/_uncategorized/image-gen.md +118 -0
  206. package/workflows/_uncategorized/multi-model-pipeline.md +60 -0
  207. package/workflows/_uncategorized/pixel-gen.md +86 -0
  208. package/workflows/_uncategorized/pixel-setup.md +90 -0
  209. package/workflows/_uncategorized/ponytail-review.md +59 -0
  210. package/workflows/_uncategorized/reverse-android-build.md +222 -0
  211. package/workflows/_uncategorized/reverse-android-design.md +139 -0
  212. package/workflows/_uncategorized/reverse-android-discover.md +150 -0
  213. package/workflows/_uncategorized/reverse-android-scan.md +158 -0
  214. package/workflows/_uncategorized/reverse-android.md +143 -0
  215. package/workflows/_uncategorized/reverse-ios-build.md +240 -0
  216. package/workflows/_uncategorized/reverse-ios-design.md +112 -0
  217. package/workflows/_uncategorized/reverse-ios-discover.md +120 -0
  218. package/workflows/_uncategorized/reverse-ios-scan.md +155 -0
  219. package/workflows/_uncategorized/reverse-ios.md +152 -0
  220. package/workflows/_uncategorized/safety-router.md +34 -0
  221. package/workflows/_uncategorized/teach.md +89 -0
  222. package/workflows/_uncategorized/verify-ui.md +53 -0
  223. package/workflows/_uncategorized/visualize-screenshots.md +34 -0
  224. package/workflows/ads/ads-analyst.md +201 -0
  225. package/workflows/ads/ads-audit.md +106 -0
  226. package/workflows/ads/ads-optimize.md +97 -0
  227. package/workflows/ads/ads-targeting.md +241 -0
  228. package/workflows/ads/adsExpert.md +160 -0
  229. package/workflows/ads/smali-ads-config.md +400 -0
  230. package/workflows/ads/smali-ads-flow.md +331 -0
  231. package/workflows/ads/smali-ads-interstitial.md +377 -0
  232. package/workflows/ads/smali-ads-native.md +382 -0
  233. package/workflows/context/teach.md +89 -0
  234. package/workflows/gitnexus.md +8 -8
  235. package/workflows/lifecycle/brainstorm.md +43 -0
  236. package/workflows/lifecycle/code.md +5 -0
  237. package/workflows/lifecycle/init.md +23 -5
  238. package/workflows/lifecycle/multi-model-pipeline.md +60 -0
  239. package/workflows/quality/ponytail-review.md +59 -0
  240. package/workflows/roles/critic.md +40 -0
  241. package/workflows/roles/safety-router.md +34 -0
@@ -0,0 +1,84 @@
1
+ # Rule: Missing Privacy Manifest
2
+ - **Guideline**: 5.1.1 – Legal – Privacy (Spring 2024 requirement)
3
+ - **Severity**: REJECTION
4
+ - **Category**: privacy
5
+
6
+ ## What to Check
7
+ Starting Spring 2024, apps must include a **Privacy Manifest** (`PrivacyInfo.xcprivacy`) if they use any of Apple's "Required Reason APIs". Apple will reject apps that use these APIs without declaring the reason.
8
+
9
+ ### Required Reason API Categories
10
+
11
+ | Category | Common APIs | Example Reason Code |
12
+ |----------|------------|-------------------|
13
+ | **File Timestamp** | `NSFileCreationDate`, `NSFileModificationDate`, `stat()`, `getattrlist()` | `DDA9.1` – Display to user |
14
+ | **User Defaults** | `UserDefaults` (NSUserDefaults) | `CA92.1` – App-specific data |
15
+ | **System Boot Time** | `systemUptime`, `mach_absolute_time()` | `35F9.1` – Measure time intervals |
16
+ | **Disk Space** | `volumeAvailableCapacityKey`, `statfs()` | `E174.1` – Check for writes |
17
+
18
+ ### What to Declare in the Manifest
19
+ - **NSPrivacyTracking**: Whether the app uses data for tracking (true/false)
20
+ - **NSPrivacyTrackingDomains**: List of tracking domains (if any)
21
+ - **NSPrivacyCollectedDataTypes**: What data types are collected
22
+ - **NSPrivacyAccessedAPITypes**: Required reason APIs used, with reason codes
23
+
24
+ ## How to Detect
25
+
26
+ ### Check for Privacy Manifest existence
27
+ ```bash
28
+ # Look for PrivacyInfo.xcprivacy in the project
29
+ find . -name "PrivacyInfo.xcprivacy" -not -path "./.build/*"
30
+ ```
31
+
32
+ ### Check for Required Reason API usage
33
+ ```bash
34
+ # UserDefaults (most common)
35
+ grep -rn "UserDefaults\|NSUserDefaults\|standardUserDefaults" --include="*.swift" --include="*.m" .
36
+
37
+ # File Timestamps
38
+ grep -rn "NSFileCreationDate\|NSFileModificationDate\|creationDate\|modificationDate" --include="*.swift" --include="*.m" .
39
+
40
+ # System Boot Time
41
+ grep -rn "systemUptime\|mach_absolute_time\|ProcessInfo.*systemUptime" --include="*.swift" --include="*.m" .
42
+
43
+ # Disk Space
44
+ grep -rn "volumeAvailableCapacity\|statfs\|statvfs" --include="*.swift" --include="*.m" .
45
+ ```
46
+
47
+ ### Check third-party SDK manifests
48
+ Many popular SDKs (Firebase, Analytics, etc.) now bundle their own `PrivacyInfo.xcprivacy`. Ensure your app's manifest covers APIs used in **your own code**.
49
+
50
+ ## Resolution
51
+ 1. Create `PrivacyInfo.xcprivacy` in your Xcode project root
52
+ 2. Add it to your app target's "Copy Bundle Resources" build phase
53
+ 3. Declare all Required Reason APIs with appropriate reason codes
54
+ 4. For Flutter apps, place the manifest in `ios/Runner/PrivacyInfo.xcprivacy`
55
+
56
+ ### Minimal Example
57
+ ```xml
58
+ <?xml version="1.0" encoding="UTF-8"?>
59
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
60
+ <plist version="1.0">
61
+ <dict>
62
+ <key>NSPrivacyTracking</key>
63
+ <false/>
64
+ <key>NSPrivacyAccessedAPITypes</key>
65
+ <array>
66
+ <dict>
67
+ <key>NSPrivacyAccessedAPIType</key>
68
+ <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
69
+ <key>NSPrivacyAccessedAPITypeReasons</key>
70
+ <array>
71
+ <string>CA92.1</string>
72
+ </array>
73
+ </dict>
74
+ </array>
75
+ </dict>
76
+ </plist>
77
+ ```
78
+
79
+ ## Example Rejection
80
+ > Your app uses APIs that require a Privacy Manifest. Please add a PrivacyInfo.xcprivacy file to your app that includes the required reason codes for the APIs used by your app.
81
+ >
82
+ > The following APIs require reasons:
83
+ > - NSPrivacyAccessedAPICategoryUserDefaults
84
+ > - NSPrivacyAccessedAPICategoryFileTimestamp
@@ -0,0 +1,60 @@
1
+ # Rule: Requiring Unnecessary Personal Data
2
+ - **Guideline**: 5.1.1 – Legal – Privacy – Data Collection and Storage
3
+ - **Severity**: REJECTION
4
+ - **Category**: privacy
5
+
6
+ ## What to Check
7
+ Apps must only require personal information that is **directly relevant** to the app's core functionality. If information is useful but not essential, it must be **optional**.
8
+
9
+ ### Commonly Flagged Required Fields
10
+ - **Phone number** — unless the app's core function requires calling/SMS
11
+ - **Gender** — unless medically or fitness-relevant
12
+ - **Marital status** — rarely relevant
13
+ - **Date of birth** — unless age-gating is legally required
14
+ - **Home address** — unless shipping or location-specific services are core
15
+
16
+ ### Context Matters
17
+ - A fitness app may reasonably require gender (for calorie calculations)
18
+ - A dating app may reasonably require age and gender
19
+ - A shopping app should NOT require marital status
20
+ - A note-taking app should NOT require phone number
21
+
22
+ ## How to Detect
23
+
24
+ ### Code Inspection
25
+ ```bash
26
+ # Find registration/onboarding/profile forms
27
+ grep -rn "phone\|gender\|marital\|birthdate\|date.of.birth\|address\|registration\|onboarding\|signup\|sign.up\|profile" --include="*.swift" --include="*.dart" .
28
+
29
+ # Check if fields are marked as required vs optional
30
+ grep -rn "required\|validator\|isRequired\|optional" --include="*.swift" --include="*.dart" .
31
+ ```
32
+
33
+ ### UI Inspection
34
+ 1. Run the app and complete the onboarding/registration flow
35
+ 2. For each personal data field, check:
36
+ - Is it required (blocks progress if empty)?
37
+ - Is it relevant to the app's core feature?
38
+ 3. Flag any required field that isn't directly relevant to what the app does
39
+
40
+ ## Resolution
41
+ 1. Make non-essential personal data fields **optional** (remove validation requirements)
42
+ 2. Add "Skip" or "Not now" options for optional profile information
43
+ 3. If collecting data for personalization, clearly explain why and make it opt-in
44
+ 4. Review the App Privacy label in App Store Connect to ensure it matches what you actually collect
45
+
46
+ ## Example Rejection
47
+ > **Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage**
48
+ >
49
+ > Issue Description
50
+ >
51
+ > The app requires users to provide personal information that is not directly relevant to the app's core functionality.
52
+ >
53
+ > Apps should only require users to provide information that is necessary for the app to function. If information is useful for a non-essential feature, apps may request the information but make it optional.
54
+ >
55
+ > Next Steps
56
+ >
57
+ > Update the app to not require users to provide the following personal information:
58
+ >
59
+ > - Phone number
60
+ > - Gender
@@ -0,0 +1,63 @@
1
+ # Rule: Misleading Subscription Pricing Display
2
+ - **Guideline**: 3.1.2 – Business – Payments – Subscriptions
3
+ - **Severity**: REJECTION
4
+ - **Category**: subscription
5
+
6
+ ## What to Check
7
+ The subscription purchase flow must display the **actual billed amount** as the most prominent pricing element. Calculated/derived pricing (e.g., "only $2.50/month" for an annual plan billed at $29.99/year) must be **subordinate** in:
8
+
9
+ - Font size
10
+ - Font weight
11
+ - Color contrast
12
+ - Position/layout
13
+
14
+ ### Common Violations
15
+ - Showing "$2.50/mo" in large bold text while "$29.99/year" is in small gray text
16
+ - Using a bright accent color for the calculated monthly price but muted text for the real billed amount
17
+ - Placing the per-month breakdown above or more prominently than the actual charge
18
+ - Free trial text overshadowing the post-trial billed price
19
+
20
+ ## How to Detect
21
+
22
+ ### Code Inspection
23
+ ```bash
24
+ # Find subscription UI code
25
+ grep -rn "paywall\|subscribe\|pricing\|subscription" --include="*.swift" --include="*.dart" .
26
+
27
+ # Look for calculated pricing patterns
28
+ grep -rn "perMonth\|per_month\|monthly.*price\|price.*month\|calculated\|divided" --include="*.swift" --include="*.dart" .
29
+ ```
30
+
31
+ ### Visual Inspection
32
+ 1. Run the app and navigate to the subscription purchase screen
33
+ 2. Compare the visual hierarchy of:
34
+ - The calculated price (per month/week breakdown)
35
+ - The actual billed amount (what Apple will charge)
36
+ - Free trial or introductory pricing text
37
+ 3. The **billed amount** must be the largest, boldest, most visible price
38
+
39
+ ### Checklist
40
+ - [ ] Billed amount uses the largest font size among all pricing elements
41
+ - [ ] Billed amount has the highest contrast color
42
+ - [ ] Billed amount is positioned prominently (not buried below other pricing)
43
+ - [ ] Calculated/broken-down pricing uses smaller, lighter text
44
+ - [ ] Free trial terms do not overshadow the post-trial price
45
+
46
+ ## Resolution
47
+ 1. Make the total billed amount the most prominent pricing text
48
+ 2. Show calculated pricing (per month / per week) in smaller, subordinate text
49
+ 3. Ensure free trial duration is visible but does not overshadow the billing amount
50
+ 4. Follow [Apple HIG guidance for subscription purchase flows](https://developer.apple.com/design/human-interface-guidelines/in-app-purchase)
51
+
52
+ ## Example Rejection
53
+ > **Guideline 3.1.2 - Business - Payments - Subscriptions**
54
+ >
55
+ > One or more auto-renewable subscriptions are marketed in the purchase flow in a way that may mislead or confuse users about the subscription terms or pricing. Specifically:
56
+ >
57
+ > - The auto-renewable subscription displays the monthly calculated pricing for the subscription more clearly and conspicuously than the billed amount.
58
+ >
59
+ > Next Steps
60
+ >
61
+ > To resolve this issue, it would be appropriate to:
62
+ >
63
+ > - Revise the auto-renewable subscription purchase flow to ensure that the billed amount is the most clear and conspicuous pricing element in the layout. Any other pricing elements, including free trial, introductory pricing, and calculated pricing information, must be displayed in a subordinate position and size to the total billed amount.
@@ -0,0 +1,54 @@
1
+ # Rule: Missing Terms of Use and Privacy Policy for Subscriptions
2
+ - **Guideline**: 3.1.2 – Business – Payments – Subscriptions
3
+ - **Severity**: REJECTION
4
+ - **Category**: subscription
5
+
6
+ ## What to Check
7
+ The in-app subscription purchase flow and the app itself must include:
8
+
9
+ 1. **Title** of the auto-renewing subscription
10
+ 2. **Length** of subscription (e.g., 1 month, 1 year)
11
+ 3. **Price** of subscription (and price per unit if appropriate)
12
+ 4. **Functional link** to Privacy Policy
13
+ 5. **Functional link** to Terms of Use (EULA)
14
+
15
+ And the App Store metadata must include:
16
+ - Privacy Policy URL in the Privacy Policy field in App Store Connect
17
+ - Terms of Use (EULA) link in either the app description or the EULA field
18
+
19
+ ## How to Detect
20
+
21
+ ### Check in-app subscription screens
22
+ Search the codebase for subscription paywall / purchase views:
23
+ ```bash
24
+ # Find subscription-related UI files
25
+ grep -rn "subscribe\|paywall\|purchase\|StoreKit\|RevenueCat\|Superwall" --include="*.swift" --include="*.dart" .
26
+
27
+ # Check if terms/privacy links exist in those files
28
+ grep -rn "terms\|privacy\|eula\|TermsOfService\|PrivacyPolicy" --include="*.swift" --include="*.dart" .
29
+ ```
30
+
31
+ ### Check metadata descriptions
32
+ ```bash
33
+ # Verify ToS/PP links in descriptions
34
+ grep -i "terms\|privacy\|eula" ./metadata/*/description.txt
35
+ ```
36
+
37
+ ### Check App Store Connect
38
+ - App Information → Privacy Policy URL field must not be empty
39
+ - App Information → EULA field should have custom EULA or description should reference Apple's standard EULA
40
+
41
+ ## Resolution
42
+ 1. Add tappable Terms of Use and Privacy Policy links to every subscription paywall screen
43
+ 2. Add links to the app description in all locales
44
+ 3. Set the Privacy Policy URL field in App Store Connect
45
+ 4. If using a custom EULA, upload it in the EULA field
46
+
47
+ ## Example Rejection
48
+ > **Guideline 3.1.2 - Business - Payments - Subscriptions**
49
+ >
50
+ > The submission did not include all the required information for apps offering auto-renewable subscriptions.
51
+ >
52
+ > The following information needs to be included in the App Store metadata:
53
+ >
54
+ > - A functional link to the Terms of Use (EULA). If you are using the standard Apple Terms of Use (EULA), include a link to the Terms of Use in the App Description. If you are using a custom EULA, add it in App Store Connect.
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: awf-ponytail
3
+ description: >-
4
+ Lazy senior dev mode. Enforces the simplest, shortest solution that works:
5
+ YAGNI, stdlib first, native platform features before dependencies, one line
6
+ before fifty. Checks .project-identity for automation.ponytailMode config.
7
+ Default: enabled=true, level=full.
8
+ version: 1.0.0
9
+ ---
10
+
11
+ # AWF Ponytail — Lazy Dev Mode
12
+
13
+ You are a lazy senior developer. Lazy means efficient, not careless. You have
14
+ seen every over-engineered codebase and been paged at 3am for one. The best
15
+ code is the code never written.
16
+
17
+ > Adapted from [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) (MIT).
18
+ > Reference copy: `backup/ponytail/`
19
+
20
+ ## Trigger Conditions
21
+
22
+ **Auto-active skill** — Activates at session start based on `.project-identity`.
23
+
24
+ **Check Configuration:**
25
+ ```
26
+ config = read(".project-identity")
27
+ ponytail = config?.automation?.ponytailMode
28
+ enabled = ponytail?.enabled ?? true // default ON
29
+ level = ponytail?.level ?? "full" // default FULL
30
+ ```
31
+
32
+ If `enabled` is `false`, this skill is **inactive**. Do not apply.
33
+
34
+ ## The Ladder
35
+
36
+ Before writing ANY code, stop at the first rung that holds:
37
+
38
+ 1. **Does this need to exist at all?** Speculative need = skip it, say so in one line. (YAGNI)
39
+ 2. **Stdlib does it?** Use the standard library.
40
+ 3. **Native platform feature covers it?** `<input type="date">` over a picker lib, CSS over JS, DB constraint over app code.
41
+ 4. **Already-installed dependency solves it?** Use it. Never add a new one for what a few lines can do.
42
+ 5. **Can it be one line?** One line.
43
+ 6. **Only then:** the minimum code that works.
44
+
45
+ The ladder is a reflex, not a research project. Two rungs work → take the
46
+ higher one and move on.
47
+
48
+ ## Rules
49
+
50
+ - No unrequested abstractions: no interface with one implementation, no factory for one product, no config for a value that never changes.
51
+ - No boilerplate, no scaffolding "for later" — later can scaffold for itself.
52
+ - Deletion over addition. Boring over clever — clever is what someone decodes at 3am.
53
+ - Fewest files possible. Shortest working diff wins.
54
+ - Complex request? Ship the lazy version and question it: "Did X; Y covers it. Need full X? Say so." Never stall on an answer you can default.
55
+ - Two stdlib options, same size? Take the one correct on edge cases. Lazy = less code, not flimsier algorithm.
56
+ - Mark deliberate simplifications with a `ponytail:` comment. If the shortcut has a known ceiling, the comment names the ceiling and the upgrade path: `// ponytail: global lock, per-account locks if throughput matters`.
57
+
58
+ ## Intensity Levels
59
+
60
+ | Level | Behavior |
61
+ |-------|----------|
62
+ | **lite** | Build what's asked, but name the lazier alternative in one line. User picks. |
63
+ | **full** | The ladder enforced. Stdlib and native first. Shortest diff, shortest explanation. **Default.** |
64
+ | **ultra** | YAGNI extremist. Deletion before addition. Ship the one-liner and challenge the rest of the requirement. |
65
+
66
+ ## When NOT to Be Lazy
67
+
68
+ Never simplify away:
69
+ - Input validation at trust boundaries
70
+ - Error handling that prevents data loss
71
+ - Security measures
72
+ - Accessibility basics
73
+ - Anything explicitly requested by the user
74
+
75
+ User insists on the full version → build it, no re-arguing.
76
+
77
+ Lazy code without its check is unfinished. Non-trivial logic leaves ONE
78
+ runnable check behind (an `assert`-based self-check or one small test file).
79
+ Trivial one-liners need no test — YAGNI applies to tests too.
80
+
81
+ ## Integration with AWKit Gates
82
+
83
+ - **Gate 4 Phase B/C**: Apply the ladder before writing any implementation code.
84
+ - **Gate 5 (Verification)**: Before commit, self-audit for over-engineering. If ≥10% lines can be cut while preserving logic and safety → refactor immediately.
85
+ - **Mandatory Check-Then-Act**: Add to the `<thought>` checklist: "Ponytail ladder applied?"
86
+
87
+ ## Boundaries
88
+
89
+ Ponytail governs **what you build**, not how you talk (Caveman handles prose).
90
+ "stop ponytail" / "normal mode" from user → deactivate for the session.
91
+ Level persists until changed or session end.
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: awf-ponytail-review
3
+ description: >-
4
+ Code review focused exclusively on over-engineering. Finds what to delete:
5
+ reinvented stdlib, unneeded dependencies, speculative abstractions, dead
6
+ flexibility. One line per finding. Use when user says "review for
7
+ over-engineering", "what can we delete", "simplify review", or invokes
8
+ /ponytail-review. Complements correctness-focused review — this one only
9
+ hunts complexity.
10
+ version: 1.0.0
11
+ ---
12
+
13
+ # AWF Ponytail Review
14
+
15
+ Review diffs or directories for unnecessary complexity. One line per finding:
16
+ location, what to cut, what replaces it. The diff's best outcome is getting shorter.
17
+
18
+ > Adapted from [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) (MIT).
19
+ > Reference copy: `backup/ponytail/skills/ponytail-review/SKILL.md`
20
+
21
+ ## Trigger Conditions
22
+
23
+ **Manual skill** — Activates when:
24
+ - User invokes `/ponytail-review`
25
+ - User says: "review for over-engineering", "what can we delete", "is this over-engineered?", "simplify review"
26
+ - Gate 5 verification (if ponytailMode enabled)
27
+
28
+ ## Format
29
+
30
+ `L<line>: <tag> <what>. <replacement>.`, or `<file>:L<line>: ...` for
31
+ multi-file diffs.
32
+
33
+ ### Tags
34
+
35
+ - `delete:` dead code, unused flexibility, speculative feature. Replacement: nothing.
36
+ - `stdlib:` hand-rolled thing the standard library ships. Name the function.
37
+ - `native:` dependency or code doing what the platform already does. Name the feature.
38
+ - `yagni:` abstraction with one implementation, config nobody sets, layer with one caller.
39
+ - `shrink:` same logic, fewer lines. Show the shorter form.
40
+
41
+ ## Examples
42
+
43
+ ❌ "This EmailValidator class might be more complex than necessary, have you
44
+ considered whether all these validation rules are needed at this stage?"
45
+
46
+ ✅ `L12-38: stdlib: 27-line validator class. "@" in email, 1 line, real validation is the confirmation mail.`
47
+
48
+ ✅ `L4: native: moment.js imported for one format call. Intl.DateTimeFormat, 0 deps.`
49
+
50
+ ✅ `repo.py:L88: yagni: AbstractRepository with one implementation. Inline it until a second one exists.`
51
+
52
+ ✅ `L52-71: delete: retry wrapper around an idempotent local call. Nothing replaces it.`
53
+
54
+ ✅ `L30-44: shrink: manual loop builds dict. dict(zip(keys, values)), 1 line.`
55
+
56
+ ## Scoring
57
+
58
+ End with the only metric that matters: `net: -<N> lines possible.`
59
+
60
+ If there is nothing to cut, say `Lean already. Ship.` and stop.
61
+
62
+ ## Boundaries
63
+
64
+ - Complexity only — correctness bugs, security holes, and performance go to a normal review pass, not this one.
65
+ - A single smoke test or `assert`-based self-check is the ponytail minimum, not bloat — never flag it for deletion.
66
+ - Does not apply the fixes, only lists them.
67
+ - "stop ponytail-review" or "normal mode": revert to verbose review style.
@@ -61,11 +61,11 @@ symphony-enforcer (Gate 2: Project → Brain → Task → Confirmation bloc
61
61
  ### Step 1: Fetch Project Identity (CHẠY ĐẦU TIÊN)
62
62
 
63
63
  ```bash
64
- cat .project-identity 2>/dev/null || echo "NO_PROJECT"
64
+ awkit identity --json 2>/dev/null || echo "NO_PROJECT"
65
65
  ```
66
66
 
67
- **Nếu tìm thấy:** Extract `projectId` và `projectName` từ JSON.
68
- **Cache Mindful Config:** Extract `mindfulCheckpoint` `mindfulCheckpointConfig` (defaults: enabled=true, threshold=3, scopeGuard=true, milestoneRest=true).
67
+ **Nếu tìm thấy:** Extract `projectName` (và `projectId` nếu dự án có định nghĩa).
68
+ **Cache Mindful Config:** Extract các cấu hình (defaults: enabled=true, threshold=3, scopeGuard=true, milestoneRest=true) từ JSON.
69
69
  **Nếu không:** Ghi nhận `raw mode` — các bước sau vẫn chạy nhưng không scope theo project. Mindful defaults vẫn ON.
70
70
 
71
71
  ### Step 2: Switch NeuralMemory Brain (CHẠY THỨ HAI)
@@ -60,9 +60,16 @@ skip_if: Đang debug | Đang code cụ thể | .kiro/specs/ có requirements.md
60
60
  - Check existing BRIEF.md, active_plans.json
61
61
  - Set mode based on context
62
62
 
63
- ### Phase 2: Idea Exploration (1 question at a time)
63
+ ### Phase 2: Idea Exploration & Behavioral Check (1 question at a time)
64
64
  - Hỏi **một câu mỗi lần** — không overwhelm
65
- - **CHỦ ĐỘNG khai thác & mở rộng** (Socratic questioning)
65
+ - **CHỦ ĐỘNG khai thác & phản biện** (Socratic questioning + Hooked Model)
66
+ - **Tâm lý học Hành vi & Mô hình Hooked (Dẫn dắt người dùng):**
67
+ - Trong `<thought>`, rà soát ý tưởng dựa trên 4 thành tố: **Trigger** (Kích hoạt), **Action** (Hành động), **Variable Reward** (Phần thưởng biến thiên), **Investment** (Sự đầu tư).
68
+ - Tự suy luận và đưa ra câu hỏi phản biện sâu sắc để giúp người dùng làm rõ:
69
+ - *Trigger:* Nỗi đau/Cảm xúc tiêu cực nào thúc đẩy người dùng sử dụng? (Internal Trigger) & Kích hoạt nào từ ngoài dẫn họ tới? (External Trigger)
70
+ - *Action:* Hành động đơn giản nhất để nhận phần thưởng là gì? Làm sao tối ưu hóa B = MAP (Motivation, Ability, Prompt)?
71
+ - *Variable Reward:* Phần thưởng có thỏa mãn nhu cầu nhưng vẫn tạo tò mò không? (Bộ lạc, Săn mồi, Bản thân)
72
+ - *Investment:* Người dùng đầu tư công sức/dữ liệu gì để tích lũy giá trị và "nạp đạn" cho trigger tiếp theo?
66
73
  - Active listening: "Em hiểu là anh muốn [X] để giải quyết [Y], đúng không?"
67
74
 
68
75
  ### Phase 3: Idea Expansion & Alternatives
@@ -100,6 +107,8 @@ never_do:
100
107
 
101
108
  always_do:
102
109
  - Tóm tắt lại ý hiểu trước khi đề xuất
110
+ - Luôn suy luận trong `<thought>` theo Mô hình Hooked và Tâm lý học Hành vi trước khi phản hồi
111
+ - Đề xuất các giải pháp tăng tính giữ chân (retention) và thiết lập thói quen cho người dùng
103
112
  - Đề xuất 2-3 hướng, không chỉ 1
104
113
  - Hỏi confirm trước khi output BRIEF
105
114
  ```
@@ -14,6 +14,14 @@
14
14
  ## 2. GIẢI PHÁP ĐỀ XUẤT
15
15
  [Hướng đi được chọn + lý do]
16
16
 
17
+ ## 2.5. THIẾT KẾ HÀNH VI (MÔ HÌNH HOOKED)
18
+ - **Kích hoạt (Trigger):**
19
+ - *Internal (Bên trong):* [Cảm xúc tiêu cực/nhu cầu kích hoạt sử dụng]
20
+ - *External (Bên ngoài):* [Tác nhân bên ngoài đưa người dùng trở lại]
21
+ - **Hành động (Action):** [Hành vi đơn giản nhất người dùng thực hiện để nhận phần thưởng & tối giản hóa ma sát]
22
+ - **Phần thưởng biến thiên (Variable Reward):** [Phần thưởng tạo sự thỏa mãn và tò mò (Bộ lạc, Săn mồi, Bản thân)]
23
+ - **Sự đầu tư (Investment):** [Người dùng đầu tư gì để tích lũy giá trị và kích hoạt trigger tiếp theo]
24
+
17
25
  ## 3. ĐỐI TƯỢNG SỬ DỤNG
18
26
  - **Primary:** [...]
19
27
  - **Secondary:** [...]
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: claude-planner
3
+ description: |
4
+ Gate 2 planning delegate via Claude Code CLI.
5
+ Handles preparation of context, calling the helper script, and graceful
6
+ fallback to the local model if Claude CLI is unavailable.
7
+ metadata:
8
+ stage: core
9
+ version: "1.0"
10
+ tags: [gate, planning, architecture, multi-model]
11
+ requires: spec-gate
12
+ agent: Architect
13
+ trigger: conditional
14
+ invocation-type: auto
15
+ priority: 2
16
+ ---
17
+
18
+ # Claude Planner Skill
19
+
20
+ ## Purpose
21
+ Directs the AI agent to orchestrate the Gate 2 architecture/implementation planning by delegating it to Claude Opus via Claude CLI, with a strict, graceful fallback logic.
22
+
23
+ ## Usage Protocol
24
+
25
+ ### 1. Verify and Execute Claude CLI Planning
26
+ When Gate 2 (Spec/Architecture Planning) triggers for MODERATE or COMPLEX tasks:
27
+ 1. Prepare the planning prompt file at `brain/<projectId>/plan_prompt.md`.
28
+ 2. Run the helper script to attempt Claude planning:
29
+ ```bash
30
+ node scripts/claude-plan.js --prompt-file brain/<projectId>/plan_prompt.md --output brain/<projectId>/implementation_plan.md
31
+ ```
32
+ 3. If the script succeeds (Exit code `0`), read `brain/<projectId>/implementation_plan.md` to review the plan and present it to the user.
33
+
34
+ ### 2. Graceful Fallback Protocol
35
+ If the helper script fails (Exit code !== 0, e.g. code `127` for missing CLI, or `2` for unauthenticated CLI):
36
+ 1. **Do not crash or alert the user with command failures.**
37
+ 2. Immediately fallback to generating the `implementation_plan.md` using the local active model in the IDE.
38
+ 3. Follow the normal planning template from `templates/design-templates.md` and write it directly to `brain/<projectId>/implementation_plan.md`.
39
+
40
+ ## Planning Prompt Guidelines
41
+ When writing `brain/<projectId>/plan_prompt.md`, ensure it contains:
42
+ 1. Target architecture files.
43
+ 2. The current `docs/specs/<feature>_spec.md` or `docs/BRIEF.md`.
44
+ 3. Project info from `.project-identity`.
45
+ 4. NeuralMemory relevant constraints.
46
+ 5. Symphony tasks.
47
+ 6. The target format instructions for `implementation_plan.md`.
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: code-review
3
+ description: Use when completing tasks, implementing features, or before merging. Dispatch structured code review with severity classification via Codex CLI.
4
+ ---
5
+
6
+ <!-- ⚠️ SMART REVIEW AGENT — Intelligent routing for Security, Localization, Compliance, and Quality -->
7
+
8
+ # Smart Code Review
9
+
10
+ ## Overview
11
+
12
+ Review early, review often. Catch issues before they cascade.
13
+ Antigravity uses `codex` CLI to perform deep, multi-file code reviews across specific domains (Security, Localization, Compliance, Quality).
14
+
15
+ **Core principle:** Actionable, domain-specific feedback via Multi-Agent Flow.
16
+
17
+ ## The Review Modules (Execution via Codex CLI)
18
+
19
+ Thay vì tự đọc diff và đánh giá, Antigravity **BẮT BUỘC** gọi `codex` CLI để thực hiện Code Review nhằm mở rộng Context Window và sử dụng subagent chuyên dụng.
20
+ Dưới đây là 5 Module Review Tự Động. Antigravity tự động map intent của User để chọn Module phù hợp:
21
+
22
+ ### 1. 🛡️ Security & Privacy Review (Thay thế `/audit`)
23
+ **Dùng khi User yêu cầu:** *"review bảo mật", "check security", "kiểm tra an toàn"*
24
+
25
+ ```bash
26
+ codex -p "Thực hiện Security & Privacy Review. Hãy quét khắt khe các điểm sau:
27
+ 1. Hardcoded API Keys/Secrets trong code hoặc file config.
28
+ 2. Dữ liệu PII (Personal Identifiable Information) có bị log ra console không (print, console.log).
29
+ 3. Lỗ hổng OWASP (SQL Injection, XSS, thiếu Rate Limiting, CORS/Headers lỏng lẻo).
30
+ 4. Kiểm tra việc sử dụng Secure Storage (Keychain/EncryptedSharedPreferences).
31
+ 5. Phân tích file Privacy Policy có khớp với dữ liệu thực tế thu thập không.
32
+ Trả về báo cáo phân loại Critical/High/Low." --approval-mode auto
33
+ ```
34
+
35
+ ### 2. 🌐 Localization & UI Review
36
+ **Dùng khi User yêu cầu:** *"review đa ngôn ngữ", "check hardcode string", "kiểm tra UI"*
37
+
38
+ ```bash
39
+ codex -p "Thực hiện Localization Review. Quét các file UI (Views, Components):
40
+ 1. Tìm tất cả các string hiển thị cho người dùng bị hardcode mà chưa bọc qua hàm dịch (i18n, LocalizedStringKey, R.string).
41
+ 2. Đối chiếu xem các key được gọi trong UI đã tồn tại trong file từ điển (en/vi) chưa.
42
+ Liệt kê chi tiết tên file và số dòng vi phạm." --approval-mode auto
43
+ ```
44
+
45
+ ### 3. 🍏 Store Compliance Review
46
+ **Dùng khi User yêu cầu:** *"review appstore", "check compliance", "chuẩn bị submit"*
47
+
48
+ ```bash
49
+ codex -p "Thực hiện App Store / Play Store Compliance Review. Đánh giá:
50
+ 1. Info.plist / AndroidManifest: Các chuỗi giải thích quyền (NSCameraUsageDescription...) có đầy đủ ý nghĩa không.
51
+ 2. App Tracking Transparency (ATT): Đã cấu hình và gọi khi cần chưa.
52
+ 3. Background Modes: Có khai báo thừa thãi không.
53
+ 4. Kiểm tra mã nguồn có API riêng tư (Private APIs) hoặc code tải logic động trái phép không." --approval-mode auto
54
+ ```
55
+
56
+ ### 4. 🧠 Architecture & Logic Review
57
+ **Dùng khi User yêu cầu:** *"review kiến trúc", "review logic", "code smell"*
58
+
59
+ ```bash
60
+ codex -p "Thực hiện Architecture & Logic Review. Đánh giá:
61
+ 1. Vi phạm nguyên tắc SOLID và Clean Architecture (VD: View xử lý Business Logic).
62
+ 2. Code duplication (Lặp code) hoặc Hàm quá dài (>50 lines).
63
+ 3. Thiếu Error Handling trong các async function / API calls.
64
+ 4. Memory Leaks (Retain cycles, forgot to unsubscribe)." --approval-mode auto
65
+ ```
66
+
67
+ ### 5. ⚡ Auto Diff Review (Mặc định)
68
+ **Dùng khi User yêu cầu:** *"review", "review diff", "check code vừa viết"* hoặc khi hoàn thành Task.
69
+
70
+ ```bash
71
+ codex -p "Review các thay đổi hiện tại (git diff/staged). Đảm bảo code mới viết đáp ứng Spec, không phá vỡ logic cũ và tuân thủ Coding Convention của dự án. Nếu an toàn, hãy trả về LGTM (Looks Good To Me)." --approval-mode auto
72
+ ```
73
+
74
+ ---
75
+
76
+ ## Cách Xử Lý Output Từ Codex
77
+ 1. Fix 🔴 **Critical** issues NGAY LẬP TỨC. (VD: Lộ Key, API chưa chặn rate limit).
78
+ 2. Fix 🟡 **Important** issues trước khi kết thúc task hoặc chuyển sang Phase mới. (VD: Quên localize string).
79
+ 3. Log 🟢 **Minor** issues để cấu trúc lại sau.
80
+ 4. Proceed nếu Subagent Codex báo "LGTM" hoặc không có issue nào nghiêm trọng.
81
+
82
+ ## Integration
83
+
84
+ **Used by:**
85
+ - `single-flow-task-execution` — Review sau mỗi task
86
+ - `symphony-enforcer` — Review trước khi `symphony_complete_task`
87
+ - Thay thế hoàn toàn quy trình thủ công của `/audit` workflow.