buildanything 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +55 -0
  4. package/README.md +71 -61
  5. package/agents/ios-app-review-guardian.md +49 -0
  6. package/agents/ios-foundation-models-specialist.md +46 -0
  7. package/agents/ios-storekit-specialist.md +52 -0
  8. package/agents/ios-swift-architect.md +102 -0
  9. package/agents/ios-swift-search.md +130 -0
  10. package/agents/ios-swift-ui-design.md +104 -0
  11. package/commands/build.md +80 -176
  12. package/commands/fix.md +65 -0
  13. package/commands/setup.md +73 -0
  14. package/commands/ux-review.md +63 -0
  15. package/commands/verify.md +72 -0
  16. package/hooks/session-start +18 -1
  17. package/package.json +5 -2
  18. package/protocols/brainstorm.md +99 -0
  19. package/protocols/build-fix.md +52 -0
  20. package/protocols/cleanup.md +54 -0
  21. package/protocols/design.md +269 -0
  22. package/protocols/eval-harness.md +61 -0
  23. package/protocols/fake-data-detector.md +64 -0
  24. package/protocols/ios-context.md +235 -0
  25. package/protocols/ios-frameworks-map.md +323 -0
  26. package/protocols/ios-phase-branches.md +162 -0
  27. package/protocols/ios-preflight.md +27 -0
  28. package/protocols/metric-loop.md +93 -0
  29. package/protocols/planning.md +87 -0
  30. package/protocols/smoke-test.md +110 -0
  31. package/protocols/verify.md +67 -0
  32. package/protocols/web-phase-branches.md +201 -0
  33. package/skills/ios/_VENDORED.md +60 -0
  34. package/skills/ios/activitykit/LICENSE +131 -0
  35. package/skills/ios/activitykit/SKILL.md +505 -0
  36. package/skills/ios/activitykit/references/activitykit-patterns.md +868 -0
  37. package/skills/ios/app-intents/LICENSE +131 -0
  38. package/skills/ios/app-intents/SKILL.md +494 -0
  39. package/skills/ios/app-intents/references/appintents-advanced.md +1076 -0
  40. package/skills/ios/apple-on-device-ai/LICENSE +131 -0
  41. package/skills/ios/apple-on-device-ai/SKILL.md +505 -0
  42. package/skills/ios/apple-on-device-ai/references/coreml-conversion.md +425 -0
  43. package/skills/ios/apple-on-device-ai/references/coreml-optimization.md +344 -0
  44. package/skills/ios/apple-on-device-ai/references/foundation-models.md +508 -0
  45. package/skills/ios/apple-on-device-ai/references/mlx-swift.md +285 -0
  46. package/skills/ios/ios-26-platform/SKILL.md +53 -0
  47. package/skills/ios/ios-26-platform/references/automatic-adoption.md +161 -0
  48. package/skills/ios/ios-26-platform/references/backward-compat.md +238 -0
  49. package/skills/ios/ios-26-platform/references/liquid-glass.md +255 -0
  50. package/skills/ios/ios-26-platform/references/swiftui-apis.md +277 -0
  51. package/skills/ios/ios-26-platform/references/toolbar-navigation.md +250 -0
  52. package/skills/ios/ios-bootstrap/SKILL.md +98 -0
  53. package/skills/ios/ios-bootstrap/references/apple-docs-mcp-config.md +28 -0
  54. package/skills/ios/ios-bootstrap/references/new-project-dialog.md +41 -0
  55. package/skills/ios/ios-bootstrap/references/xcode-mcp-config.md +29 -0
  56. package/skills/ios/ios-debugger-agent/LICENSE +21 -0
  57. package/skills/ios/ios-debugger-agent/SKILL.md +58 -0
  58. package/skills/ios/ios-debugger-agent/agents/openai.yaml +4 -0
  59. package/skills/ios/ios-entitlements-generator/SKILL.md +47 -0
  60. package/skills/ios/ios-hig/SKILL.md +41 -0
  61. package/skills/ios/ios-hig/references/accessibility.md +81 -0
  62. package/skills/ios/ios-hig/references/content.md +142 -0
  63. package/skills/ios/ios-hig/references/feedback.md +123 -0
  64. package/skills/ios/ios-hig/references/interaction.md +199 -0
  65. package/skills/ios/ios-hig/references/performance-platform.md +129 -0
  66. package/skills/ios/ios-hig/references/privacy-permissions.md +181 -0
  67. package/skills/ios/ios-hig/references/visual-design.md +84 -0
  68. package/skills/ios/ios-info-plist-hardening/SKILL.md +130 -0
  69. package/skills/ios/ios-maestro-flow-author/SKILL.md +68 -0
  70. package/skills/ios/ios-maestro-flow-author/references/input-and-scroll.yaml +17 -0
  71. package/skills/ios/ios-maestro-flow-author/references/modal-and-dismiss.yaml +14 -0
  72. package/skills/ios/ios-maestro-flow-author/references/onboarding-flow.yaml +16 -0
  73. package/skills/ios/ios-maestro-flow-author/references/tab-navigation.yaml +13 -0
  74. package/skills/ios/ios-maestro-flow-author/references/tap-and-assert.yaml +9 -0
  75. package/skills/ios/swift-accessibility/LICENSE +21 -0
  76. package/skills/ios/swift-accessibility/SKILL.md +371 -0
  77. package/skills/ios/swift-accessibility/examples/before-after-appkit.md +446 -0
  78. package/skills/ios/swift-accessibility/examples/before-after-swiftui.md +441 -0
  79. package/skills/ios/swift-accessibility/examples/before-after-uikit.md +464 -0
  80. package/skills/ios/swift-accessibility/references/assistive-access.md +441 -0
  81. package/skills/ios/swift-accessibility/references/display-settings.md +491 -0
  82. package/skills/ios/swift-accessibility/references/dynamic-type.md +420 -0
  83. package/skills/ios/swift-accessibility/references/media-accessibility.md +421 -0
  84. package/skills/ios/swift-accessibility/references/motor-input.md +393 -0
  85. package/skills/ios/swift-accessibility/references/nutrition-labels.md +362 -0
  86. package/skills/ios/swift-accessibility/references/platform-specifics.md +515 -0
  87. package/skills/ios/swift-accessibility/references/semantic-structure.md +585 -0
  88. package/skills/ios/swift-accessibility/references/testing-auditing.md +507 -0
  89. package/skills/ios/swift-accessibility/references/voice-control.md +317 -0
  90. package/skills/ios/swift-accessibility/references/voiceover-swiftui.md +584 -0
  91. package/skills/ios/swift-accessibility/references/voiceover-uikit.md +519 -0
  92. package/skills/ios/swift-accessibility/references/wcag-mapping.md +167 -0
  93. package/skills/ios/swift-accessibility/resources/audit-template.swift +128 -0
  94. package/skills/ios/swift-accessibility/resources/qa-checklist.md +258 -0
  95. package/skills/ios/swift-concurrency/LICENSE +21 -0
  96. package/skills/ios/swift-concurrency/SKILL.md +171 -0
  97. package/skills/ios/swift-concurrency/references/_index.md +50 -0
  98. package/skills/ios/swift-concurrency/references/actors.md +660 -0
  99. package/skills/ios/swift-concurrency/references/async-algorithms.md +847 -0
  100. package/skills/ios/swift-concurrency/references/async-await-basics.md +266 -0
  101. package/skills/ios/swift-concurrency/references/async-sequences.md +710 -0
  102. package/skills/ios/swift-concurrency/references/core-data.md +560 -0
  103. package/skills/ios/swift-concurrency/references/glossary.md +135 -0
  104. package/skills/ios/swift-concurrency/references/linting.md +155 -0
  105. package/skills/ios/swift-concurrency/references/memory-management.md +569 -0
  106. package/skills/ios/swift-concurrency/references/migration.md +1104 -0
  107. package/skills/ios/swift-concurrency/references/performance.md +593 -0
  108. package/skills/ios/swift-concurrency/references/sendable.md +598 -0
  109. package/skills/ios/swift-concurrency/references/tasks.md +636 -0
  110. package/skills/ios/swift-concurrency/references/testing.md +592 -0
  111. package/skills/ios/swift-concurrency/references/threading.md +495 -0
  112. package/skills/ios/swift-security-expert/LICENSE +21 -0
  113. package/skills/ios/swift-security-expert/SKILL.md +470 -0
  114. package/skills/ios/swift-security-expert/references/biometric-authentication.md +565 -0
  115. package/skills/ios/swift-security-expert/references/certificate-trust.md +592 -0
  116. package/skills/ios/swift-security-expert/references/common-anti-patterns.md +690 -0
  117. package/skills/ios/swift-security-expert/references/compliance-owasp-mapping.md +537 -0
  118. package/skills/ios/swift-security-expert/references/credential-storage-patterns.md +721 -0
  119. package/skills/ios/swift-security-expert/references/cryptokit-public-key.md +505 -0
  120. package/skills/ios/swift-security-expert/references/cryptokit-symmetric.md +497 -0
  121. package/skills/ios/swift-security-expert/references/keychain-access-control.md +508 -0
  122. package/skills/ios/swift-security-expert/references/keychain-fundamentals.md +596 -0
  123. package/skills/ios/swift-security-expert/references/keychain-item-classes.md +476 -0
  124. package/skills/ios/swift-security-expert/references/keychain-sharing.md +458 -0
  125. package/skills/ios/swift-security-expert/references/migration-legacy-stores.md +727 -0
  126. package/skills/ios/swift-security-expert/references/secure-enclave.md +539 -0
  127. package/skills/ios/swift-security-expert/references/testing-security-code.md +781 -0
  128. package/skills/ios/swift-testing-expert/LICENSE +21 -0
  129. package/skills/ios/swift-testing-expert/SKILL.md +79 -0
  130. package/skills/ios/swift-testing-expert/references/_index.md +12 -0
  131. package/skills/ios/swift-testing-expert/references/async-testing-and-waiting.md +127 -0
  132. package/skills/ios/swift-testing-expert/references/expectations.md +145 -0
  133. package/skills/ios/swift-testing-expert/references/fundamentals.md +141 -0
  134. package/skills/ios/swift-testing-expert/references/migration-from-xctest.md +127 -0
  135. package/skills/ios/swift-testing-expert/references/parallelization-and-isolation.md +95 -0
  136. package/skills/ios/swift-testing-expert/references/parameterized-testing.md +284 -0
  137. package/skills/ios/swift-testing-expert/references/performance-and-best-practices.md +187 -0
  138. package/skills/ios/swift-testing-expert/references/traits-and-tags.md +114 -0
  139. package/skills/ios/swift-testing-expert/references/xcode-workflows.md +70 -0
  140. package/skills/ios/swiftdata-pro/LICENSE +21 -0
  141. package/skills/ios/swiftdata-pro/SKILL.md +102 -0
  142. package/skills/ios/swiftdata-pro/agents/openai.yaml +10 -0
  143. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.png +0 -0
  144. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.svg +29 -0
  145. package/skills/ios/swiftdata-pro/references/class-inheritance.md +104 -0
  146. package/skills/ios/swiftdata-pro/references/cloudkit.md +10 -0
  147. package/skills/ios/swiftdata-pro/references/core-rules.md +20 -0
  148. package/skills/ios/swiftdata-pro/references/indexing.md +27 -0
  149. package/skills/ios/swiftdata-pro/references/predicates.md +73 -0
  150. package/skills/ios/swiftui-design-principles/AGENTS.md +21 -0
  151. package/skills/ios/swiftui-design-principles/LICENSE +21 -0
  152. package/skills/ios/swiftui-design-principles/README.md +41 -0
  153. package/skills/ios/swiftui-design-principles/SKILL.md +605 -0
  154. package/skills/ios/swiftui-design-principles/metadata.json +10 -0
  155. package/skills/ios/swiftui-liquid-glass/LICENSE +21 -0
  156. package/skills/ios/swiftui-liquid-glass/SKILL.md +95 -0
  157. package/skills/ios/swiftui-liquid-glass/agents/openai.yaml +4 -0
  158. package/skills/ios/swiftui-liquid-glass/references/liquid-glass.md +280 -0
  159. package/skills/ios/swiftui-performance-audit/LICENSE +21 -0
  160. package/skills/ios/swiftui-performance-audit/SKILL.md +111 -0
  161. package/skills/ios/swiftui-performance-audit/agents/openai.yaml +4 -0
  162. package/skills/ios/swiftui-performance-audit/references/code-smells.md +150 -0
  163. package/skills/ios/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
  164. package/skills/ios/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
  165. package/skills/ios/swiftui-performance-audit/references/profiling-intake.md +44 -0
  166. package/skills/ios/swiftui-performance-audit/references/report-template.md +47 -0
  167. package/skills/ios/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
  168. package/skills/ios/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
  169. package/skills/ios/swiftui-pro/LICENSE +21 -0
  170. package/skills/ios/swiftui-pro/SKILL.md +108 -0
  171. package/skills/ios/swiftui-pro/agents/openai.yaml +10 -0
  172. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
  173. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
  174. package/skills/ios/swiftui-pro/references/accessibility.md +13 -0
  175. package/skills/ios/swiftui-pro/references/api.md +39 -0
  176. package/skills/ios/swiftui-pro/references/data.md +43 -0
  177. package/skills/ios/swiftui-pro/references/design.md +31 -0
  178. package/skills/ios/swiftui-pro/references/hygiene.md +9 -0
  179. package/skills/ios/swiftui-pro/references/navigation.md +14 -0
  180. package/skills/ios/swiftui-pro/references/performance.md +46 -0
  181. package/skills/ios/swiftui-pro/references/swift.md +56 -0
  182. package/skills/ios/swiftui-pro/references/views.md +35 -0
  183. package/skills/ios/swiftui-ui-patterns/LICENSE +21 -0
  184. package/skills/ios/swiftui-ui-patterns/SKILL.md +100 -0
  185. package/skills/ios/swiftui-ui-patterns/agents/openai.yaml +4 -0
  186. package/skills/ios/swiftui-ui-patterns/references/app-wiring.md +201 -0
  187. package/skills/ios/swiftui-ui-patterns/references/async-state.md +96 -0
  188. package/skills/ios/swiftui-ui-patterns/references/components-index.md +50 -0
  189. package/skills/ios/swiftui-ui-patterns/references/controls.md +57 -0
  190. package/skills/ios/swiftui-ui-patterns/references/deeplinks.md +66 -0
  191. package/skills/ios/swiftui-ui-patterns/references/focus.md +90 -0
  192. package/skills/ios/swiftui-ui-patterns/references/form.md +97 -0
  193. package/skills/ios/swiftui-ui-patterns/references/grids.md +71 -0
  194. package/skills/ios/swiftui-ui-patterns/references/haptics.md +71 -0
  195. package/skills/ios/swiftui-ui-patterns/references/input-toolbar.md +51 -0
  196. package/skills/ios/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
  197. package/skills/ios/swiftui-ui-patterns/references/list.md +86 -0
  198. package/skills/ios/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
  199. package/skills/ios/swiftui-ui-patterns/references/macos-settings.md +71 -0
  200. package/skills/ios/swiftui-ui-patterns/references/matched-transitions.md +59 -0
  201. package/skills/ios/swiftui-ui-patterns/references/media.md +73 -0
  202. package/skills/ios/swiftui-ui-patterns/references/menu-bar.md +101 -0
  203. package/skills/ios/swiftui-ui-patterns/references/navigationstack.md +159 -0
  204. package/skills/ios/swiftui-ui-patterns/references/overlay.md +45 -0
  205. package/skills/ios/swiftui-ui-patterns/references/performance.md +62 -0
  206. package/skills/ios/swiftui-ui-patterns/references/previews.md +48 -0
  207. package/skills/ios/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
  208. package/skills/ios/swiftui-ui-patterns/references/scrollview.md +87 -0
  209. package/skills/ios/swiftui-ui-patterns/references/searchable.md +71 -0
  210. package/skills/ios/swiftui-ui-patterns/references/sheets.md +155 -0
  211. package/skills/ios/swiftui-ui-patterns/references/split-views.md +72 -0
  212. package/skills/ios/swiftui-ui-patterns/references/tabview.md +114 -0
  213. package/skills/ios/swiftui-ui-patterns/references/theming.md +71 -0
  214. package/skills/ios/swiftui-ui-patterns/references/title-menus.md +93 -0
  215. package/skills/ios/swiftui-ui-patterns/references/top-bar.md +49 -0
  216. package/skills/ios/swiftui-view-refactor/LICENSE +21 -0
  217. package/skills/ios/swiftui-view-refactor/SKILL.md +207 -0
  218. package/skills/ios/swiftui-view-refactor/agents/openai.yaml +4 -0
  219. package/skills/ios/swiftui-view-refactor/references/mv-patterns.md +161 -0
  220. package/skills/ios/widgetkit/LICENSE +131 -0
  221. package/skills/ios/widgetkit/SKILL.md +502 -0
  222. package/skills/ios/widgetkit/references/widgetkit-advanced.md +871 -0
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: ios-info-plist-hardening
3
+ description: Generates and audits Info.plist defaults (usage-description strings, URL schemes, background modes, scene manifest) AND produces PrivacyInfo.xcprivacy so the app clears App Review and launches cleanly. Use during Phase 4 Foundation on every iOS project.
4
+ version: 0.2.0
5
+ status: ready
6
+ ---
7
+
8
+ # iOS Info.plist Hardening (Phase 4)
9
+
10
+ ## Purpose
11
+ Ensures `Info.plist` carries every required usage-description string, correctly registered URL schemes, declared background modes, and a sane SwiftUI scene manifest. Also emits the iOS 17+ `PrivacyInfo.xcprivacy` manifest. Catches "rejected because NSCameraUsageDescription is missing" before it happens.
12
+
13
+ ## When this fires
14
+ - Phase 4 Foundation (always, for iOS projects)
15
+ - Whenever a new API that requires a usage-description is added
16
+ - Pre-archive audit
17
+
18
+ ## Inputs
19
+ - `ios_features` from `docs/plans/.build-state.md` (boolean flags: camera, microphone, location_when_in_use, location_always, photos, contacts, calendar, reminders, motion, health, bluetooth, localNetwork, tracking, faceID, music, homeKit, siri, nearbyInteraction, speech, appleMusic)
20
+ - `url_schemes` (string[], optional)
21
+ - `background_modes` (string[], optional)
22
+ - `app_lifecycle` (enum: `swiftui_app` | `uikit_appdelegate`, default `swiftui_app`)
23
+ - `tracking_required_reasons` (object, optional) — required-reason API categories in use
24
+ - `collects_tracking_data` (bool, default false)
25
+
26
+ ## Outputs
27
+ - Updated `Info.plist` with merged keys (via XcodeBuildMCP)
28
+ - `PrivacyInfo.xcprivacy` at target root (iOS 17+)
29
+ - Audit report `docs/plans/plist-audit.md`: missing keys, stale keys, weak description strings
30
+
31
+ ## Required usage-description keys
32
+
33
+ | Info.plist key | Triggered by |
34
+ |---|---|
35
+ | `NSCameraUsageDescription` | Camera / AVFoundation / Vision / ARKit / VisionKit |
36
+ | `NSMicrophoneUsageDescription` | Microphone / Speech / ShazamKit |
37
+ | `NSPhotoLibraryUsageDescription` | PhotoKit read |
38
+ | `NSPhotoLibraryAddUsageDescription` | Writing to photo library |
39
+ | `NSLocationWhenInUseUsageDescription` | CoreLocation foreground |
40
+ | `NSLocationAlwaysAndWhenInUseUsageDescription` | CoreLocation background |
41
+ | `NSContactsUsageDescription` | Contacts |
42
+ | `NSCalendarsUsageDescription` / `NSCalendarsFullAccessUsageDescription` | EventKit (iOS 17+ split) |
43
+ | `NSRemindersUsageDescription` / `NSRemindersFullAccessUsageDescription` | EventKit reminders |
44
+ | `NSMotionUsageDescription` | CoreMotion |
45
+ | `NSHealthShareUsageDescription` | HealthKit read |
46
+ | `NSHealthUpdateUsageDescription` | HealthKit write |
47
+ | `NSSpeechRecognitionUsageDescription` | Speech |
48
+ | `NSBluetoothAlwaysUsageDescription` | CoreBluetooth |
49
+ | `NSLocalNetworkUsageDescription` | Bonjour / Multipeer / Network framework LAN |
50
+ | `NSUserTrackingUsageDescription` | AppTrackingTransparency / IDFA |
51
+ | `NSFaceIDUsageDescription` | LocalAuthentication biometrics |
52
+ | `NSAppleMusicUsageDescription` | MediaPlayer / MusicKit |
53
+ | `NSHomeKitUsageDescription` | HomeKit |
54
+ | `NSSiriUsageDescription` | SiriKit / App Intents w/ Siri |
55
+ | `NSNearbyInteractionUsageDescription` | NearbyInteraction (UWB) |
56
+
57
+ Usage descriptions must be **specific and user-facing** ("To scan receipts with your camera" beats "Needs camera"). Reject strings under 20 characters or containing placeholder text.
58
+
59
+ ## URL scheme registration template
60
+ ```xml
61
+ <key>CFBundleURLTypes</key>
62
+ <array>
63
+ <dict>
64
+ <key>CFBundleURLName</key>
65
+ <string>com.acme.habitforge</string>
66
+ <key>CFBundleURLSchemes</key>
67
+ <array>
68
+ <string>habitforge</string>
69
+ </array>
70
+ <key>CFBundleTypeRole</key>
71
+ <string>Editor</string>
72
+ </dict>
73
+ </array>
74
+ ```
75
+
76
+ ## UIBackgroundModes enumeration
77
+ Valid values (set only what the app actually uses):
78
+ - `fetch` — background app refresh
79
+ - `remote-notification` — silent push wake
80
+ - `audio` — background audio playback
81
+ - `location` — continuous location updates
82
+ - `bluetooth-central` — BLE central role
83
+ - `bluetooth-peripheral` — BLE peripheral role
84
+ - `voip` — VoIP calls
85
+ - `external-accessory`
86
+ - `processing` — BGProcessingTask (long-running)
87
+ - `nearby-interaction`
88
+
89
+ ## Scene manifest (SwiftUI app lifecycle default)
90
+ ```xml
91
+ <key>UIApplicationSceneManifest</key>
92
+ <dict>
93
+ <key>UIApplicationSupportsMultipleScenes</key>
94
+ <true/>
95
+ <key>UISceneConfigurations</key>
96
+ <dict/>
97
+ </dict>
98
+ ```
99
+
100
+ ## PrivacyInfo.xcprivacy (iOS 17+ — this skill owns creation at Phase 4)
101
+ Generate with four top-level keys:
102
+
103
+ - **`NSPrivacyTracking`** — bool; true only if `collects_tracking_data` is true.
104
+ - **`NSPrivacyTrackingDomains`** — array of tracking domains contacted (only if tracking is true).
105
+ - **`NSPrivacyCollectedDataTypes`** — array of dicts, one per data category collected, each with: `NSPrivacyCollectedDataType`, `NSPrivacyCollectedDataTypeLinked`, `NSPrivacyCollectedDataTypeTracking`, `NSPrivacyCollectedDataTypePurposes`.
106
+ - **`NSPrivacyAccessedAPITypes`** — array of required-reason API declarations. Each entry has `NSPrivacyAccessedAPIType` + `NSPrivacyAccessedAPITypeReasons`. Common categories:
107
+ - `NSPrivacyAccessedAPICategoryFileTimestamp`
108
+ - `NSPrivacyAccessedAPICategorySystemBootTime`
109
+ - `NSPrivacyAccessedAPICategoryDiskSpace`
110
+ - `NSPrivacyAccessedAPICategoryActiveKeyboards`
111
+ - `NSPrivacyAccessedAPICategoryUserDefaults`
112
+
113
+ Detect required-reason API usage by scanning code for patterns (e.g. `FileManager` attributes, `UserDefaults` access, `UIDevice` boot time). Emit a declaration for each detected category with the appropriate reason code.
114
+
115
+ ## Workflow
116
+ 1. **Read state** — load `ios_features` flags from `docs/plans/.build-state.md`.
117
+ 2. **Select required keys** — for each true flag, resolve to usage-description key(s) from the table above (cross-check `ios-frameworks-map.md §4` column "Info.plist keys").
118
+ 3. **Scan code for required-reason APIs** — grep for `FileManager`, `UserDefaults`, `systemUptime`, `.systemFreeSize`, keyboard APIs; build privacy-manifest entries.
119
+ 4. **Generate patches** — compute Info.plist additions and PrivacyInfo.xcprivacy content.
120
+ 5. **Write via XcodeBuildMCP** — merge Info.plist (never clobber user keys), create/overwrite `PrivacyInfo.xcprivacy` at target root.
121
+ 6. **Emit audit report** — `docs/plans/plist-audit.md` listing additions, weak descriptions, and any manual follow-ups (e.g. "add tracking domain list").
122
+
123
+ ## Validation
124
+ - Every usage-description string is ≥ 20 chars and references the concrete app action.
125
+ - No placeholder strings (`TODO`, `lorem`, `test`, `permission required`).
126
+ - Background modes in plist match entitlements and actual runtime usage.
127
+ - PrivacyInfo.xcprivacy includes a required-reason entry for every detected API category — missing entries block App Store submission.
128
+
129
+ ---
130
+ _Part of buildanything iOS mode. See `protocols/ios-context.md` for persona. Cross-references `protocols/ios-frameworks-map.md §4`._
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: ios-maestro-flow-author
3
+ description: Generates Maestro .yaml E2E flow files from natural-language user journeys. Use during /verify iOS branch whenever a critical user journey needs automated coverage.
4
+ version: 0.2.0
5
+ status: ready
6
+ ---
7
+
8
+ # iOS Maestro Flow Author (Phase 6, /verify twin)
9
+
10
+ ## Purpose
11
+ Converts a plain-English user journey ("sign up, create first habit, mark complete") into a runnable Maestro flow YAML, ready to execute against a booted simulator via `maestro test`.
12
+
13
+ ## When this fires
14
+ - `/verify` iOS branch
15
+ - A new critical user journey needs E2E coverage
16
+ - Regression: existing flow drifted from current UI
17
+
18
+ ## Inputs
19
+ - `journey_nl` (string) — natural-language user journey
20
+ - `app_id` (string) — bundle identifier under test (e.g. `com.acme.HabitForge`)
21
+ - `test_name` (string, optional) — defaults to slugified journey
22
+
23
+ ## Outputs
24
+ - `maestro/<test_name>.yaml`
25
+ - Dry-run summary (commands emitted, accessibility-id assumptions, skipped steps)
26
+
27
+ ## Workflow
28
+ 1. Parse `journey_nl` into ordered discrete user actions (one sentence = one action group).
29
+ 2. Match each action to a Maestro command pattern from the cheat-sheet below; prefer accessibility IDs over visible text when the app exposes them.
30
+ 3. Emit YAML with `appId: {app_id}` header and one command per step.
31
+ 4. Write to `maestro/<test_name>.yaml`.
32
+ 5. Validate via `maestro test maestro/<test_name>.yaml` on a booted simulator (Maestro has no true `--dry-run`; shortest validation is to run it once against the sim).
33
+
34
+ ## Maestro cheat-sheet (10 core commands)
35
+
36
+ ```yaml
37
+ - launchApp # launches the appId declared in the header
38
+ - tapOn: "Sign Up" # tap element by visible text
39
+ - tapOn:
40
+ id: "emailField" # tap by accessibility identifier (preferred)
41
+ - assertVisible: "Welcome back" # assert text/element visible, fails flow if not
42
+ - inputText: "alice@example.com" # types into currently focused field
43
+ - scroll # scroll down on current screen
44
+ - swipe:
45
+ direction: LEFT # swipe: LEFT | RIGHT | UP | DOWN
46
+ - hideKeyboard # dismiss soft keyboard
47
+ - back # system back / pop navigation
48
+ - pressKey: Enter # hardware key: Enter, Backspace, Home, Lock
49
+ ```
50
+
51
+ See `references/` for five copy-and-adapt templates covering the 90% cases.
52
+
53
+ ## Authoring rules
54
+ - Always start with `- launchApp`.
55
+ - Prefer `id:` selectors (stable) over raw text (fragile to copy changes).
56
+ - After every `inputText`, insert `hideKeyboard` before the next `tapOn` to avoid the keyboard intercepting taps.
57
+ - End every flow with at least one `assertVisible` that confirms the user reached the destination screen.
58
+ - Keep flows single-purpose — one user journey per file. Compose with `runFlow:` in a parent flow if needed.
59
+
60
+ ## Reference templates
61
+ - `references/onboarding-flow.yaml` — launch → splash → signup → main screen
62
+ - `references/tap-and-assert.yaml` — minimal tap + assertVisible pattern
63
+ - `references/input-and-scroll.yaml` — form input + scroll + tap
64
+ - `references/modal-and-dismiss.yaml` — open sheet, interact, dismiss
65
+ - `references/tab-navigation.yaml` — switch tabs, verify each screen
66
+
67
+ ---
68
+ _Part of buildanything iOS mode. See `protocols/ios-context.md` for Senior iOS Engineer persona._
@@ -0,0 +1,17 @@
1
+ # Form fill + scroll + submit
2
+ appId: com.acme.HabitForge
3
+ ---
4
+ - launchApp
5
+ - tapOn: "Add Habit"
6
+ - assertVisible: "New Habit"
7
+ - tapOn:
8
+ id: "habitNameField"
9
+ - inputText: "Drink water"
10
+ - hideKeyboard
11
+ - tapOn:
12
+ id: "notesField"
13
+ - inputText: "Eight glasses per day, spread across mornings and afternoons"
14
+ - hideKeyboard
15
+ - scroll
16
+ - tapOn: "Save"
17
+ - assertVisible: "Drink water"
@@ -0,0 +1,14 @@
1
+ # Open modal sheet, interact, dismiss
2
+ appId: com.acme.HabitForge
3
+ ---
4
+ - launchApp
5
+ - tapOn: "Settings"
6
+ - assertVisible: "Preferences"
7
+ - tapOn: "Appearance"
8
+ - assertVisible: "Theme"
9
+ - tapOn: "Dark"
10
+ - swipe:
11
+ direction: DOWN
12
+ - assertVisible: "Preferences"
13
+ - back
14
+ - assertVisible: "Your Habits"
@@ -0,0 +1,16 @@
1
+ # Onboarding: launch -> splash -> sign up -> main screen
2
+ appId: com.acme.HabitForge
3
+ ---
4
+ - launchApp
5
+ - assertVisible: "Welcome"
6
+ - tapOn: "Sign Up"
7
+ - assertVisible: "Create your account"
8
+ - tapOn:
9
+ id: "emailField"
10
+ - inputText: "alice@example.com"
11
+ - tapOn:
12
+ id: "passwordField"
13
+ - inputText: "hunter2hunter2"
14
+ - hideKeyboard
15
+ - tapOn: "Continue"
16
+ - assertVisible: "Your Habits"
@@ -0,0 +1,13 @@
1
+ # Tab bar navigation — verify each tab loads its root screen
2
+ appId: com.acme.HabitForge
3
+ ---
4
+ - launchApp
5
+ - assertVisible: "Your Habits"
6
+ - tapOn: "Stats"
7
+ - assertVisible: "Weekly Progress"
8
+ - tapOn: "Journal"
9
+ - assertVisible: "Entries"
10
+ - tapOn: "Settings"
11
+ - assertVisible: "Preferences"
12
+ - tapOn: "Habits"
13
+ - assertVisible: "Your Habits"
@@ -0,0 +1,9 @@
1
+ # Minimal tap + assert pattern
2
+ appId: com.acme.HabitForge
3
+ ---
4
+ - launchApp
5
+ - assertVisible: "Your Habits"
6
+ - tapOn: "Add Habit"
7
+ - assertVisible: "New Habit"
8
+ - tapOn: "Cancel"
9
+ - assertVisible: "Your Habits"
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pasquale Vittoriosi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.