@leejungkiin/awkit 1.7.1 → 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.
- package/bin/awk.js +576 -84
- package/core/CLAUDE.md +1 -1
- package/core/GEMINI.md +148 -167
- package/core/GEMINI.md.bak +149 -116
- package/core/skill-runtime-manifest.json +3 -0
- package/docs/Claude Fable 5.md +3826 -0
- package/docs/android_kotlin_system_instruction.md +210 -0
- package/docs/brainstorm_ponytail_integration.md +146 -0
- package/docs/brainstorm_smart_setup.md +113 -0
- package/docs/deep-research-report (1).md +293 -0
- package/docs/history/GEMINI.v1.md +135 -0
- package/docs/history/brainstorm_antigravity_unified_architecture.v1.md +105 -0
- package/docs/history/implementation_plan.v1.md +58 -0
- package/package.json +4 -1
- package/scripts/artifact-storage.js +130 -0
- package/scripts/automation-gate.js +35 -2
- package/scripts/claude-plan.js +76 -0
- package/scripts/dependency-manager.js +210 -0
- package/scripts/exec-rtk.js +11 -5
- package/scripts/i18n-helper.js +381 -0
- package/scripts/multi-model-pipeline.js +144 -0
- package/skill-packs/mobile-ios/pack.json +4 -2
- package/skill-packs/reverse-engineering/pack.json +1 -0
- package/skills/CATALOG.md +20 -0
- package/skills/GEMINI.md +9 -1
- package/skills/TRIGGER_INDEX.md +10 -0
- package/skills/ai-music/SKILL.md +275 -0
- package/skills/android-re-analyzer/SKILL.md +238 -0
- package/skills/android-re-analyzer/references/api-extraction-patterns.md +119 -0
- package/skills/android-re-analyzer/references/call-flow-analysis.md +176 -0
- package/skills/android-re-analyzer/references/fernflower-usage.md +115 -0
- package/skills/android-re-analyzer/references/jadx-usage.md +116 -0
- package/skills/android-re-analyzer/references/setup-guide.md +221 -0
- package/skills/android-re-analyzer/scripts/check-deps.sh +129 -0
- package/skills/android-re-analyzer/scripts/decompile.sh +375 -0
- package/skills/android-re-analyzer/scripts/find-api-calls.sh +118 -0
- package/skills/android-re-analyzer/scripts/install-dep.sh +448 -0
- package/skills/animal-island-ui-style/SKILL.md +1450 -0
- package/skills/app-store-review-agent/SKILL.md +164 -0
- package/skills/app-store-review-agent/references/guidelines/README.md +154 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/ai_apps.md +37 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/all_apps.md +50 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/crypto_finance.md +31 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/games.md +31 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/health_fitness.md +31 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/kids.md +27 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/macos.md +38 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/social_ugc.md +32 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/subscription_iap.md +34 -0
- package/skills/app-store-review-agent/references/guidelines/by-app-type/vpn.md +18 -0
- package/skills/app-store-review-agent/references/rules/design/minimum_functionality.md +96 -0
- package/skills/app-store-review-agent/references/rules/design/sign_in_with_apple.md +54 -0
- package/skills/app-store-review-agent/references/rules/entitlements/unused_entitlements.md +83 -0
- package/skills/app-store-review-agent/references/rules/metadata/accurate_metadata.md +54 -0
- package/skills/app-store-review-agent/references/rules/metadata/apple_trademark.md +99 -0
- package/skills/app-store-review-agent/references/rules/metadata/china_storefront.md +72 -0
- package/skills/app-store-review-agent/references/rules/metadata/competitor_terms.md +56 -0
- package/skills/app-store-review-agent/references/rules/metadata/subscription_metadata.md +81 -0
- package/skills/app-store-review-agent/references/rules/privacy/privacy_manifest.md +84 -0
- package/skills/app-store-review-agent/references/rules/privacy/unnecessary_data.md +60 -0
- package/skills/app-store-review-agent/references/rules/subscription/misleading_pricing.md +63 -0
- package/skills/app-store-review-agent/references/rules/subscription/missing_tos_pp.md +54 -0
- package/skills/awf-ponytail/SKILL.md +91 -0
- package/skills/awf-ponytail-review/SKILL.md +67 -0
- package/skills/awf-session-restore/SKILL.md +3 -3
- package/skills/brainstorm-agent/SKILL.md +11 -2
- package/skills/brainstorm-agent/templates/brief-template.md +8 -0
- package/skills/claude-planner/SKILL.md +47 -0
- package/skills/code-review/SKILL.md +87 -0
- package/skills/expo-game-development/SKILL.md +163 -0
- package/skills/flutter/LICENSE.txt +202 -0
- package/skills/flutter/SKILL.md +127 -0
- package/skills/flutter-project-creater/LICENSE.txt +202 -0
- package/skills/flutter-project-creater/SKILL.md +106 -0
- package/skills/game-developer/SKILL.md +163 -0
- package/skills/game-developer/references/ecs-patterns.md +501 -0
- package/skills/game-developer/references/multiplayer-networking.md +475 -0
- package/skills/game-developer/references/performance-optimization.md +422 -0
- package/skills/game-developer/references/unity-patterns.md +271 -0
- package/skills/game-developer/references/unreal-cpp.md +352 -0
- package/skills/generate-gui-assets/SKILL.md +305 -0
- package/skills/generate-gui-assets/agents/openai.yaml +4 -0
- package/skills/generate-gui-assets/references/catalog-schema.md +58 -0
- package/skills/generate-gui-assets/references/extraction-techniques.md +21 -0
- package/skills/generate-gui-assets/references/prompt-patterns.md +58 -0
- package/skills/generate-gui-assets/scripts/__pycache__/clean_chroma_edges.cpython-311.pyc +0 -0
- package/skills/generate-gui-assets/scripts/build_gui_contact_sheet.py +51 -0
- package/skills/generate-gui-assets/scripts/clean_chroma_edges.py +262 -0
- package/skills/generate-gui-assets/scripts/copy_approved_icons.py +64 -0
- package/skills/generate-gui-assets/scripts/prepare_gui_asset_run.py +91 -0
- package/skills/generate-gui-assets/scripts/suggest_grid_options.py +63 -0
- package/skills/generate-gui-assets/scripts/validate_gui_catalog.py +50 -0
- package/skills/godot-game-development/SKILL.md +142 -0
- package/skills/hatch-pet/LICENSE.txt +201 -0
- package/skills/hatch-pet/SKILL.md +420 -0
- package/skills/hatch-pet/agents/openai.yaml +4 -0
- package/skills/hatch-pet/references/animation-rows.md +29 -0
- package/skills/hatch-pet/references/codex-pet-contract.md +35 -0
- package/skills/hatch-pet/references/qa-rubric.md +60 -0
- package/skills/hatch-pet/scripts/__pycache__/clean_chroma_edges.cpython-311.pyc +0 -0
- package/skills/hatch-pet/scripts/clean_chroma_edges.py +262 -0
- package/skills/hatch-pet/scripts/compose_atlas.py +150 -0
- package/skills/hatch-pet/scripts/derive_running_left_from_running_right.py +143 -0
- package/skills/hatch-pet/scripts/extract_strip_frames.py +323 -0
- package/skills/hatch-pet/scripts/finalize_pet_run.py +382 -0
- package/skills/hatch-pet/scripts/generate_pet_images.py +287 -0
- package/skills/hatch-pet/scripts/inspect_frames.py +246 -0
- package/skills/hatch-pet/scripts/make_contact_sheet.py +96 -0
- package/skills/hatch-pet/scripts/package_custom_pet.py +108 -0
- package/skills/hatch-pet/scripts/pet_job_status.py +117 -0
- package/skills/hatch-pet/scripts/prepare_pet_run.py +673 -0
- package/skills/hatch-pet/scripts/queue_pet_repairs.py +172 -0
- package/skills/hatch-pet/scripts/record_imagegen_result.py +250 -0
- package/skills/hatch-pet/scripts/render_animation_videos.py +134 -0
- package/skills/hatch-pet/scripts/render_animation_videos.sh +5 -0
- package/skills/hatch-pet/scripts/validate_atlas.py +139 -0
- package/skills/i18n-orchestrator/SKILL.md +37 -0
- package/skills/ios-simulator-skill/SKILL.md +390 -0
- package/skills/ios-simulator-skill/scripts/accessibility_audit.py +300 -0
- package/skills/ios-simulator-skill/scripts/app_launcher.py +326 -0
- package/skills/ios-simulator-skill/scripts/app_state_capture.py +400 -0
- package/skills/ios-simulator-skill/scripts/appearance.py +385 -0
- package/skills/ios-simulator-skill/scripts/build_and_test.py +348 -0
- package/skills/ios-simulator-skill/scripts/clipboard.py +103 -0
- package/skills/ios-simulator-skill/scripts/common/__init__.py +61 -0
- package/skills/ios-simulator-skill/scripts/common/cache_utils.py +289 -0
- package/skills/ios-simulator-skill/scripts/common/device_utils.py +462 -0
- package/skills/ios-simulator-skill/scripts/common/env_config.py +35 -0
- package/skills/ios-simulator-skill/scripts/common/hang_pipeline.py +862 -0
- package/skills/ios-simulator-skill/scripts/common/hang_sessions.py +490 -0
- package/skills/ios-simulator-skill/scripts/common/idb_utils.py +180 -0
- package/skills/ios-simulator-skill/scripts/common/screenshot_utils.py +338 -0
- package/skills/ios-simulator-skill/scripts/container.py +668 -0
- package/skills/ios-simulator-skill/scripts/gesture.py +394 -0
- package/skills/ios-simulator-skill/scripts/hang_watcher.py +1533 -0
- package/skills/ios-simulator-skill/scripts/keyboard.py +391 -0
- package/skills/ios-simulator-skill/scripts/localization_audit.py +483 -0
- package/skills/ios-simulator-skill/scripts/location.py +467 -0
- package/skills/ios-simulator-skill/scripts/log_monitor.py +493 -0
- package/skills/ios-simulator-skill/scripts/model_inspector.py +645 -0
- package/skills/ios-simulator-skill/scripts/navigator.py +461 -0
- package/skills/ios-simulator-skill/scripts/privacy_manager.py +310 -0
- package/skills/ios-simulator-skill/scripts/push_notification.py +240 -0
- package/skills/ios-simulator-skill/scripts/screen_mapper.py +296 -0
- package/skills/ios-simulator-skill/scripts/sim_health_check.sh +245 -0
- package/skills/ios-simulator-skill/scripts/sim_list.py +299 -0
- package/skills/ios-simulator-skill/scripts/simctl_boot.py +312 -0
- package/skills/ios-simulator-skill/scripts/simctl_create.py +316 -0
- package/skills/ios-simulator-skill/scripts/simctl_delete.py +357 -0
- package/skills/ios-simulator-skill/scripts/simctl_erase.py +351 -0
- package/skills/ios-simulator-skill/scripts/simctl_shutdown.py +290 -0
- package/skills/ios-simulator-skill/scripts/simulator_selector.py +375 -0
- package/skills/ios-simulator-skill/scripts/status_bar.py +250 -0
- package/skills/ios-simulator-skill/scripts/test_recorder.py +323 -0
- package/skills/ios-simulator-skill/scripts/visual_diff.py +235 -0
- package/skills/ios-simulator-skill/scripts/xcode/__init__.py +13 -0
- package/skills/ios-simulator-skill/scripts/xcode/builder.py +397 -0
- package/skills/ios-simulator-skill/scripts/xcode/cache.py +204 -0
- package/skills/ios-simulator-skill/scripts/xcode/config.py +178 -0
- package/skills/ios-simulator-skill/scripts/xcode/reporter.py +343 -0
- package/skills/ios-simulator-skill/scripts/xcode/xcresult.py +451 -0
- package/skills/ios-visual-qa-strategist/SKILL.md +111 -0
- package/skills/ios-visual-qa-strategist/agents/openai.yaml +4 -0
- package/skills/ios-visual-qa-strategist/references/ios-tool-selection.md +61 -0
- package/skills/ios-visual-qa-strategist/references/minimal-capture-policy.md +56 -0
- package/skills/ios-visual-qa-strategist/references/visual-reasoning-heuristics.md +53 -0
- package/skills/orchestrator/SKILL.md +0 -20
- package/skills/persistent-storage/SKILL.md +55 -0
- package/skills/short-maker/SKILL.md +23 -0
- package/skills/short-maker/scripts/effects.js +56 -0
- package/skills/short-maker/scripts/shortmaker-bridge.js +332 -0
- package/skills/short-maker/scripts/videomix.js +601 -0
- package/skills/short-maker/templates/hyperframes/cinematic-character.template.html +172 -0
- package/skills/short-maker/templates/hyperframes/index.template.html +194 -0
- package/skills/smali-to-kotlin/SKILL.md +128 -0
- package/skills/smali-to-kotlin/examples/getting-started/tech-stack.md +58 -0
- package/skills/smali-to-kotlin/examples/pipeline/data-ui-parity.md +118 -0
- package/skills/smali-to-kotlin/examples/pipeline/scanner-and-bootstrap.md +106 -0
- package/skills/smali-to-kotlin/library-patterns.md +189 -0
- package/skills/smali-to-kotlin/phase-0-discovery.md +128 -0
- package/skills/smali-to-kotlin/phase-1-architecture.md +166 -0
- package/skills/smali-to-kotlin/phase-2-blueprint-ui.md +347 -0
- package/skills/smali-to-kotlin/phase-2-blueprint.md +228 -0
- package/skills/smali-to-kotlin/phase-3-build.md +248 -0
- package/skills/smali-to-kotlin/phase-3-logic-build.md +268 -0
- package/skills/smali-to-kotlin/smali-reading-guide.md +310 -0
- package/skills/smali-to-kotlin/templates/app-map.md +101 -0
- package/skills/smali-to-kotlin/templates/architecture.md +142 -0
- package/skills/smali-to-kotlin/templates/blueprint.md +145 -0
- package/skills/spec-gate/SKILL.md +6 -2
- package/skills/symphony-enforcer/SKILL.md +8 -0
- package/skills/symphony-enforcer/examples/mindful-stop.md +2 -0
- package/skills/symphony-enforcer/examples/three-phase.md +16 -0
- package/skills/symphony-enforcer/examples/trigger-points.md +7 -1
- package/skills/unity-game-development/SKILL.md +231 -0
- package/skills/video-edit/SKILL.md +36 -0
- package/skills/video-edit/scripts/video_edit.py +324 -0
- package/templates/project-identity/android.json +2 -2
- package/templates/project-identity/backend-nestjs.json +2 -2
- package/templates/project-identity/expo.json +2 -2
- package/templates/project-identity/ios.json +2 -2
- package/templates/project-identity/web-nextjs.json +2 -2
- package/templates/setup-mapping.json +48 -0
- package/templates/specs/design-template.md +161 -71
- package/templates/specs/requirements-template.md +65 -133
- package/templates/specs/task-spec-template.xml +3 -0
- package/workflows/_uncategorized/critic.md +40 -0
- package/workflows/_uncategorized/git-rebase-flow.md +81 -0
- package/workflows/_uncategorized/image-gen.md +118 -0
- package/workflows/_uncategorized/multi-model-pipeline.md +60 -0
- package/workflows/_uncategorized/pixel-gen.md +86 -0
- package/workflows/_uncategorized/pixel-setup.md +90 -0
- package/workflows/_uncategorized/ponytail-review.md +59 -0
- package/workflows/_uncategorized/reverse-android-build.md +222 -0
- package/workflows/_uncategorized/reverse-android-design.md +139 -0
- package/workflows/_uncategorized/reverse-android-discover.md +150 -0
- package/workflows/_uncategorized/reverse-android-scan.md +158 -0
- package/workflows/_uncategorized/reverse-android.md +143 -0
- package/workflows/_uncategorized/reverse-ios-build.md +240 -0
- package/workflows/_uncategorized/reverse-ios-design.md +112 -0
- package/workflows/_uncategorized/reverse-ios-discover.md +120 -0
- package/workflows/_uncategorized/reverse-ios-scan.md +155 -0
- package/workflows/_uncategorized/reverse-ios.md +152 -0
- package/workflows/_uncategorized/safety-router.md +34 -0
- package/workflows/_uncategorized/teach.md +89 -0
- package/workflows/_uncategorized/verify-ui.md +53 -0
- package/workflows/_uncategorized/visualize-screenshots.md +34 -0
- package/workflows/ads/ads-analyst.md +201 -0
- package/workflows/ads/ads-audit.md +106 -0
- package/workflows/ads/ads-optimize.md +97 -0
- package/workflows/ads/ads-targeting.md +241 -0
- package/workflows/ads/adsExpert.md +160 -0
- package/workflows/ads/smali-ads-config.md +400 -0
- package/workflows/ads/smali-ads-flow.md +331 -0
- package/workflows/ads/smali-ads-interstitial.md +377 -0
- package/workflows/ads/smali-ads-native.md +382 -0
- package/workflows/context/teach.md +89 -0
- package/workflows/gitnexus.md +8 -8
- package/workflows/lifecycle/brainstorm.md +43 -0
- package/workflows/lifecycle/code.md +5 -0
- package/workflows/lifecycle/init.md +23 -5
- package/workflows/lifecycle/multi-model-pipeline.md +60 -0
- package/workflows/quality/ponytail-review.md +59 -0
- package/workflows/roles/critic.md +40 -0
- 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
|
-
|
|
64
|
+
awkit identity --json 2>/dev/null || echo "NO_PROJECT"
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
**Nếu tìm thấy:** Extract `
|
|
68
|
-
**Cache Mindful Config:** Extract
|
|
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 &
|
|
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.
|