codexkit 1.0.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 (655) hide show
  1. package/.codex/.env.example +27 -0
  2. package/.codex/.template-manifest.json +631 -0
  3. package/.codex/.version +1 -0
  4. package/.codex/agents/builder.toml +104 -0
  5. package/.codex/agents/debugger.toml +67 -0
  6. package/.codex/agents/general.toml +41 -0
  7. package/.codex/agents/painter.toml +40 -0
  8. package/.codex/agents/planner.toml +60 -0
  9. package/.codex/agents/refactorer.toml +76 -0
  10. package/.codex/agents/reviewer.toml +60 -0
  11. package/.codex/agents/runner.toml +40 -0
  12. package/.codex/agents/scout.toml +133 -0
  13. package/.codex/agents/shipper.toml +69 -0
  14. package/.codex/agents/vision.toml +69 -0
  15. package/.codex/config.toml +146 -0
  16. package/.codex/context/architecture.md +66 -0
  17. package/.codex/context/conventions.md +98 -0
  18. package/.codex/context/current-priorities.md +33 -0
  19. package/.codex/context/decision-log.md +93 -0
  20. package/.codex/context/gotchas.md +42 -0
  21. package/.codex/context/index.md +21 -0
  22. package/.codex/context/session-context.md +11 -0
  23. package/.codex/context/worklog.md +9 -0
  24. package/.codex/hooks/README.md +17 -0
  25. package/.codex/hooks/after_agent.sh +11 -0
  26. package/.codex/hooks/after_tool_use.sh +10 -0
  27. package/.codex/hooks/post_commit.sh +10 -0
  28. package/.codex/hooks/pre_commit.sh +6 -0
  29. package/.codex/hooks/session_start.sh +18 -0
  30. package/.codex/hooks/stop.sh +10 -0
  31. package/.codex/mcp/README.md +143 -0
  32. package/.codex/mcp/basic-memory.toml.example +10 -0
  33. package/.codex/mcp/context7.toml.example +13 -0
  34. package/.codex/mcp/exa.toml.example +12 -0
  35. package/.codex/mcp/memory-bridge.toml.example +15 -0
  36. package/.codex/mcp/memory.toml.example +6 -0
  37. package/.codex/mcp/ref.toml.example +13 -0
  38. package/.codex/mcp/tilth.toml.example +10 -0
  39. package/.codex/memory/README.md +29 -0
  40. package/.codex/memory/_templates/README.md +26 -0
  41. package/.codex/memory/_templates/design.md +15 -0
  42. package/.codex/memory/_templates/gotcha.md +9 -0
  43. package/.codex/memory/_templates/handoff.md +9 -0
  44. package/.codex/memory/_templates/prd.md +13 -0
  45. package/.codex/memory/_templates/project.md +9 -0
  46. package/.codex/memory/_templates/proposal.md +13 -0
  47. package/.codex/memory/_templates/research.md +9 -0
  48. package/.codex/memory/_templates/roadmap.md +11 -0
  49. package/.codex/memory/_templates/session-context.md +7 -0
  50. package/.codex/memory/_templates/state.md +11 -0
  51. package/.codex/memory/_templates/tasks.md +9 -0
  52. package/.codex/memory/_templates/tech-stack.md +9 -0
  53. package/.codex/memory/_templates/user.md +7 -0
  54. package/.codex/memory/project/gotchas.md +5 -0
  55. package/.codex/memory/project/project.md +12 -0
  56. package/.codex/memory/project/roadmap.md +15 -0
  57. package/.codex/memory/project/state.md +22 -0
  58. package/.codex/memory/project/tech-stack.md +19 -0
  59. package/.codex/memory/project/user.md +10 -0
  60. package/.codex/memory/research/.gitkeep +1 -0
  61. package/.codex/memory/session-context.md +18 -0
  62. package/.codex/plans/README.md +7 -0
  63. package/.codex/prompts/compound.md +154 -0
  64. package/.codex/prompts/create.md +238 -0
  65. package/.codex/prompts/design.md +90 -0
  66. package/.codex/prompts/handoff.md +184 -0
  67. package/.codex/prompts/init-context.md +185 -0
  68. package/.codex/prompts/init-user.md +93 -0
  69. package/.codex/prompts/init.md +103 -0
  70. package/.codex/prompts/lfg.md +140 -0
  71. package/.codex/prompts/plan.md +140 -0
  72. package/.codex/prompts/pr.md +150 -0
  73. package/.codex/prompts/research.md +137 -0
  74. package/.codex/prompts/resume.md +105 -0
  75. package/.codex/prompts/review-codebase.md +147 -0
  76. package/.codex/prompts/ship.md +334 -0
  77. package/.codex/prompts/start.md +141 -0
  78. package/.codex/prompts/status.md +102 -0
  79. package/.codex/prompts/ui-inspire.md +151 -0
  80. package/.codex/prompts/ui-review.md +86 -0
  81. package/.codex/prompts/verify.md +181 -0
  82. package/.codex/scripts/append_worklog.sh +20 -0
  83. package/.codex/scripts/apply_worklog_archive.sh +48 -0
  84. package/.codex/scripts/audit_memory_hygiene.sh +102 -0
  85. package/.codex/scripts/build_memory_index.sh +167 -0
  86. package/.codex/scripts/build_prior_related_work.sh +127 -0
  87. package/.codex/scripts/build_startup_brief.sh +52 -0
  88. package/.codex/scripts/close_bead.sh +103 -0
  89. package/.codex/scripts/detect_changed_files.sh +38 -0
  90. package/.codex/scripts/ensure_beads.sh +14 -0
  91. package/.codex/scripts/memory_search.sh +292 -0
  92. package/.codex/scripts/prepare_worklog_archive.sh +115 -0
  93. package/.codex/scripts/search_bead_context.sh +214 -0
  94. package/.codex/scripts/start_bead.sh +129 -0
  95. package/.codex/scripts/sync_bead_context.sh +288 -0
  96. package/.codex/scripts/validate_memory_docs.sh +44 -0
  97. package/.codex/scripts/verify_bead.sh +154 -0
  98. package/.codex/skills/accessibility-audit/SKILL.md +191 -0
  99. package/.codex/skills/agent-browser/SKILL.md +413 -0
  100. package/.codex/skills/agent-teams/SKILL.md +268 -0
  101. package/.codex/skills/augment-context-engine/SKILL.md +115 -0
  102. package/.codex/skills/augment-context-engine/mcp.json +6 -0
  103. package/.codex/skills/beads/SKILL.md +181 -0
  104. package/.codex/skills/beads/references/BEST_PRACTICES.md +27 -0
  105. package/.codex/skills/beads/references/BOUNDARIES.md +219 -0
  106. package/.codex/skills/beads/references/DEPENDENCIES.md +124 -0
  107. package/.codex/skills/beads/references/EXAMPLES.md +45 -0
  108. package/.codex/skills/beads/references/FILE_CLAIMING.md +101 -0
  109. package/.codex/skills/beads/references/GIT_SYNC.md +25 -0
  110. package/.codex/skills/beads/references/HIERARCHY.md +71 -0
  111. package/.codex/skills/beads/references/MULTI_AGENT.md +40 -0
  112. package/.codex/skills/beads/references/RESUMABILITY.md +177 -0
  113. package/.codex/skills/beads/references/SESSION_PROTOCOL.md +61 -0
  114. package/.codex/skills/beads/references/TASK_CREATION.md +38 -0
  115. package/.codex/skills/beads/references/TROUBLESHOOTING.md +38 -0
  116. package/.codex/skills/beads/references/WORKFLOWS.md +226 -0
  117. package/.codex/skills/beads-bridge/SKILL.md +321 -0
  118. package/.codex/skills/brainstorming/SKILL.md +114 -0
  119. package/.codex/skills/bug-triage/SKILL.md +191 -0
  120. package/.codex/skills/chrome-devtools/SKILL.md +76 -0
  121. package/.codex/skills/chrome-devtools/mcp.json +19 -0
  122. package/.codex/skills/cloudflare/SKILL.md +253 -0
  123. package/.codex/skills/cloudflare/references/agents-sdk/README.md +35 -0
  124. package/.codex/skills/cloudflare/references/agents-sdk/api.md +100 -0
  125. package/.codex/skills/cloudflare/references/agents-sdk/configuration.md +99 -0
  126. package/.codex/skills/cloudflare/references/agents-sdk/gotchas.md +59 -0
  127. package/.codex/skills/cloudflare/references/agents-sdk/patterns.md +89 -0
  128. package/.codex/skills/cloudflare/references/ai-gateway/README.md +695 -0
  129. package/.codex/skills/cloudflare/references/ai-search/README.md +14 -0
  130. package/.codex/skills/cloudflare/references/ai-search/api.md +38 -0
  131. package/.codex/skills/cloudflare/references/ai-search/configuration.md +52 -0
  132. package/.codex/skills/cloudflare/references/ai-search/gotchas.md +41 -0
  133. package/.codex/skills/cloudflare/references/ai-search/patterns.md +45 -0
  134. package/.codex/skills/cloudflare/references/analytics-engine/README.md +14 -0
  135. package/.codex/skills/cloudflare/references/analytics-engine/api.md +27 -0
  136. package/.codex/skills/cloudflare/references/analytics-engine/configuration.md +45 -0
  137. package/.codex/skills/cloudflare/references/analytics-engine/gotchas.md +3 -0
  138. package/.codex/skills/cloudflare/references/analytics-engine/patterns.md +36 -0
  139. package/.codex/skills/cloudflare/references/api/README.md +21 -0
  140. package/.codex/skills/cloudflare/references/api/api.md +31 -0
  141. package/.codex/skills/cloudflare/references/api/configuration.md +20 -0
  142. package/.codex/skills/cloudflare/references/api/gotchas.md +28 -0
  143. package/.codex/skills/cloudflare/references/api/patterns.md +47 -0
  144. package/.codex/skills/cloudflare/references/api-shield/README.md +20 -0
  145. package/.codex/skills/cloudflare/references/api-shield/api.md +78 -0
  146. package/.codex/skills/cloudflare/references/api-shield/configuration.md +128 -0
  147. package/.codex/skills/cloudflare/references/api-shield/gotchas.md +51 -0
  148. package/.codex/skills/cloudflare/references/api-shield/patterns.md +145 -0
  149. package/.codex/skills/cloudflare/references/argo-smart-routing/README.md +16 -0
  150. package/.codex/skills/cloudflare/references/argo-smart-routing/api.md +50 -0
  151. package/.codex/skills/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  152. package/.codex/skills/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  153. package/.codex/skills/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  154. package/.codex/skills/cloudflare/references/bindings/README.md +14 -0
  155. package/.codex/skills/cloudflare/references/bindings/api.md +3 -0
  156. package/.codex/skills/cloudflare/references/bindings/configuration.md +58 -0
  157. package/.codex/skills/cloudflare/references/bindings/gotchas.md +35 -0
  158. package/.codex/skills/cloudflare/references/bindings/patterns.md +37 -0
  159. package/.codex/skills/cloudflare/references/bot-management/README.md +71 -0
  160. package/.codex/skills/cloudflare/references/bot-management/api.md +168 -0
  161. package/.codex/skills/cloudflare/references/bot-management/configuration.md +114 -0
  162. package/.codex/skills/cloudflare/references/bot-management/gotchas.md +99 -0
  163. package/.codex/skills/cloudflare/references/bot-management/patterns.md +125 -0
  164. package/.codex/skills/cloudflare/references/browser-rendering/README.md +16 -0
  165. package/.codex/skills/cloudflare/references/browser-rendering/api.md +54 -0
  166. package/.codex/skills/cloudflare/references/browser-rendering/configuration.md +47 -0
  167. package/.codex/skills/cloudflare/references/browser-rendering/gotchas.md +29 -0
  168. package/.codex/skills/cloudflare/references/browser-rendering/patterns.md +29 -0
  169. package/.codex/skills/cloudflare/references/c3/README.md +264 -0
  170. package/.codex/skills/cloudflare/references/cache-reserve/README.md +93 -0
  171. package/.codex/skills/cloudflare/references/cache-reserve/api.md +176 -0
  172. package/.codex/skills/cloudflare/references/cache-reserve/configuration.md +164 -0
  173. package/.codex/skills/cloudflare/references/cache-reserve/gotchas.md +203 -0
  174. package/.codex/skills/cloudflare/references/cache-reserve/patterns.md +180 -0
  175. package/.codex/skills/cloudflare/references/containers/README.md +16 -0
  176. package/.codex/skills/cloudflare/references/containers/api.md +43 -0
  177. package/.codex/skills/cloudflare/references/containers/configuration.md +56 -0
  178. package/.codex/skills/cloudflare/references/containers/gotchas.md +21 -0
  179. package/.codex/skills/cloudflare/references/containers/patterns.md +40 -0
  180. package/.codex/skills/cloudflare/references/cron-triggers/README.md +85 -0
  181. package/.codex/skills/cloudflare/references/cron-triggers/api.md +198 -0
  182. package/.codex/skills/cloudflare/references/cron-triggers/configuration.md +151 -0
  183. package/.codex/skills/cloudflare/references/cron-triggers/gotchas.md +129 -0
  184. package/.codex/skills/cloudflare/references/cron-triggers/patterns.md +122 -0
  185. package/.codex/skills/cloudflare/references/d1/README.md +92 -0
  186. package/.codex/skills/cloudflare/references/d1/api.md +141 -0
  187. package/.codex/skills/cloudflare/references/d1/configuration.md +127 -0
  188. package/.codex/skills/cloudflare/references/d1/gotchas.md +70 -0
  189. package/.codex/skills/cloudflare/references/d1/patterns.md +144 -0
  190. package/.codex/skills/cloudflare/references/ddos/README.md +34 -0
  191. package/.codex/skills/cloudflare/references/ddos/api.md +136 -0
  192. package/.codex/skills/cloudflare/references/ddos/configuration.md +67 -0
  193. package/.codex/skills/cloudflare/references/ddos/gotchas.md +114 -0
  194. package/.codex/skills/cloudflare/references/ddos/patterns.md +158 -0
  195. package/.codex/skills/cloudflare/references/do-storage/README.md +62 -0
  196. package/.codex/skills/cloudflare/references/do-storage/api.md +89 -0
  197. package/.codex/skills/cloudflare/references/do-storage/configuration.md +116 -0
  198. package/.codex/skills/cloudflare/references/do-storage/gotchas.md +93 -0
  199. package/.codex/skills/cloudflare/references/do-storage/patterns.md +112 -0
  200. package/.codex/skills/cloudflare/references/durable-objects/README.md +125 -0
  201. package/.codex/skills/cloudflare/references/durable-objects/api.md +152 -0
  202. package/.codex/skills/cloudflare/references/durable-objects/configuration.md +148 -0
  203. package/.codex/skills/cloudflare/references/durable-objects/gotchas.md +158 -0
  204. package/.codex/skills/cloudflare/references/durable-objects/patterns.md +255 -0
  205. package/.codex/skills/cloudflare/references/email-routing/README.md +18 -0
  206. package/.codex/skills/cloudflare/references/email-routing/api.md +46 -0
  207. package/.codex/skills/cloudflare/references/email-routing/configuration.md +63 -0
  208. package/.codex/skills/cloudflare/references/email-routing/gotchas.md +16 -0
  209. package/.codex/skills/cloudflare/references/email-routing/patterns.md +46 -0
  210. package/.codex/skills/cloudflare/references/email-workers/README.md +598 -0
  211. package/.codex/skills/cloudflare/references/hyperdrive/README.md +62 -0
  212. package/.codex/skills/cloudflare/references/hyperdrive/api.md +137 -0
  213. package/.codex/skills/cloudflare/references/hyperdrive/configuration.md +133 -0
  214. package/.codex/skills/cloudflare/references/hyperdrive/gotchas.md +184 -0
  215. package/.codex/skills/cloudflare/references/hyperdrive/patterns.md +176 -0
  216. package/.codex/skills/cloudflare/references/images/README.md +14 -0
  217. package/.codex/skills/cloudflare/references/images/api.md +3 -0
  218. package/.codex/skills/cloudflare/references/images/configuration.md +45 -0
  219. package/.codex/skills/cloudflare/references/images/gotchas.md +23 -0
  220. package/.codex/skills/cloudflare/references/images/patterns.md +31 -0
  221. package/.codex/skills/cloudflare/references/kv/README.md +60 -0
  222. package/.codex/skills/cloudflare/references/kv/api.md +114 -0
  223. package/.codex/skills/cloudflare/references/kv/configuration.md +92 -0
  224. package/.codex/skills/cloudflare/references/kv/gotchas.md +117 -0
  225. package/.codex/skills/cloudflare/references/kv/patterns.md +139 -0
  226. package/.codex/skills/cloudflare/references/miniflare/README.md +64 -0
  227. package/.codex/skills/cloudflare/references/miniflare/api.md +144 -0
  228. package/.codex/skills/cloudflare/references/miniflare/configuration.md +203 -0
  229. package/.codex/skills/cloudflare/references/miniflare/gotchas.md +187 -0
  230. package/.codex/skills/cloudflare/references/miniflare/patterns.md +211 -0
  231. package/.codex/skills/cloudflare/references/network-interconnect/README.md +60 -0
  232. package/.codex/skills/cloudflare/references/network-interconnect/api.md +240 -0
  233. package/.codex/skills/cloudflare/references/network-interconnect/configuration.md +127 -0
  234. package/.codex/skills/cloudflare/references/network-interconnect/gotchas.md +171 -0
  235. package/.codex/skills/cloudflare/references/network-interconnect/patterns.md +171 -0
  236. package/.codex/skills/cloudflare/references/observability/README.md +18 -0
  237. package/.codex/skills/cloudflare/references/observability/api.md +51 -0
  238. package/.codex/skills/cloudflare/references/observability/configuration.md +60 -0
  239. package/.codex/skills/cloudflare/references/observability/gotchas.md +36 -0
  240. package/.codex/skills/cloudflare/references/observability/patterns.md +42 -0
  241. package/.codex/skills/cloudflare/references/pages/README.md +76 -0
  242. package/.codex/skills/cloudflare/references/pages/api.md +200 -0
  243. package/.codex/skills/cloudflare/references/pages/configuration.md +228 -0
  244. package/.codex/skills/cloudflare/references/pages/gotchas.md +161 -0
  245. package/.codex/skills/cloudflare/references/pages/patterns.md +145 -0
  246. package/.codex/skills/cloudflare/references/pages-functions/README.md +57 -0
  247. package/.codex/skills/cloudflare/references/pages-functions/api.md +201 -0
  248. package/.codex/skills/cloudflare/references/pages-functions/configuration.md +159 -0
  249. package/.codex/skills/cloudflare/references/pages-functions/gotchas.md +151 -0
  250. package/.codex/skills/cloudflare/references/pages-functions/patterns.md +190 -0
  251. package/.codex/skills/cloudflare/references/pipelines/README.md +664 -0
  252. package/.codex/skills/cloudflare/references/pulumi/README.md +107 -0
  253. package/.codex/skills/cloudflare/references/pulumi/api.md +194 -0
  254. package/.codex/skills/cloudflare/references/pulumi/configuration.md +216 -0
  255. package/.codex/skills/cloudflare/references/pulumi/gotchas.md +223 -0
  256. package/.codex/skills/cloudflare/references/pulumi/patterns.md +139 -0
  257. package/.codex/skills/cloudflare/references/queues/README.md +69 -0
  258. package/.codex/skills/cloudflare/references/queues/api.md +138 -0
  259. package/.codex/skills/cloudflare/references/queues/configuration.md +125 -0
  260. package/.codex/skills/cloudflare/references/queues/gotchas.md +112 -0
  261. package/.codex/skills/cloudflare/references/queues/patterns.md +155 -0
  262. package/.codex/skills/cloudflare/references/r2/README.md +61 -0
  263. package/.codex/skills/cloudflare/references/r2/api.md +127 -0
  264. package/.codex/skills/cloudflare/references/r2/configuration.md +76 -0
  265. package/.codex/skills/cloudflare/references/r2/gotchas.md +94 -0
  266. package/.codex/skills/cloudflare/references/r2/patterns.md +127 -0
  267. package/.codex/skills/cloudflare/references/r2-data-catalog/README.md +18 -0
  268. package/.codex/skills/cloudflare/references/r2-data-catalog/api.md +29 -0
  269. package/.codex/skills/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  270. package/.codex/skills/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  271. package/.codex/skills/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  272. package/.codex/skills/cloudflare/references/r2-sql/README.md +512 -0
  273. package/.codex/skills/cloudflare/references/realtime-sfu/README.md +21 -0
  274. package/.codex/skills/cloudflare/references/realtime-sfu/api.md +135 -0
  275. package/.codex/skills/cloudflare/references/realtime-sfu/configuration.md +63 -0
  276. package/.codex/skills/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  277. package/.codex/skills/cloudflare/references/realtime-sfu/patterns.md +102 -0
  278. package/.codex/skills/cloudflare/references/realtimekit/README.md +81 -0
  279. package/.codex/skills/cloudflare/references/realtimekit/api.md +164 -0
  280. package/.codex/skills/cloudflare/references/realtimekit/configuration.md +147 -0
  281. package/.codex/skills/cloudflare/references/realtimekit/gotchas.md +172 -0
  282. package/.codex/skills/cloudflare/references/realtimekit/patterns.md +155 -0
  283. package/.codex/skills/cloudflare/references/sandbox/README.md +90 -0
  284. package/.codex/skills/cloudflare/references/sandbox/api.md +178 -0
  285. package/.codex/skills/cloudflare/references/sandbox/configuration.md +131 -0
  286. package/.codex/skills/cloudflare/references/sandbox/gotchas.md +156 -0
  287. package/.codex/skills/cloudflare/references/sandbox/patterns.md +203 -0
  288. package/.codex/skills/cloudflare/references/secrets-store/README.md +58 -0
  289. package/.codex/skills/cloudflare/references/secrets-store/api.md +182 -0
  290. package/.codex/skills/cloudflare/references/secrets-store/configuration.md +140 -0
  291. package/.codex/skills/cloudflare/references/secrets-store/gotchas.md +129 -0
  292. package/.codex/skills/cloudflare/references/secrets-store/patterns.md +218 -0
  293. package/.codex/skills/cloudflare/references/smart-placement/README.md +91 -0
  294. package/.codex/skills/cloudflare/references/smart-placement/api.md +139 -0
  295. package/.codex/skills/cloudflare/references/smart-placement/configuration.md +129 -0
  296. package/.codex/skills/cloudflare/references/smart-placement/gotchas.md +87 -0
  297. package/.codex/skills/cloudflare/references/smart-placement/patterns.md +135 -0
  298. package/.codex/skills/cloudflare/references/snippets/README.md +15 -0
  299. package/.codex/skills/cloudflare/references/snippets/api.md +47 -0
  300. package/.codex/skills/cloudflare/references/snippets/configuration.md +33 -0
  301. package/.codex/skills/cloudflare/references/snippets/gotchas.md +21 -0
  302. package/.codex/skills/cloudflare/references/snippets/patterns.md +34 -0
  303. package/.codex/skills/cloudflare/references/spectrum/README.md +16 -0
  304. package/.codex/skills/cloudflare/references/spectrum/api.md +24 -0
  305. package/.codex/skills/cloudflare/references/spectrum/configuration.md +43 -0
  306. package/.codex/skills/cloudflare/references/spectrum/gotchas.md +42 -0
  307. package/.codex/skills/cloudflare/references/spectrum/patterns.md +40 -0
  308. package/.codex/skills/cloudflare/references/static-assets/README.md +14 -0
  309. package/.codex/skills/cloudflare/references/static-assets/api.md +3 -0
  310. package/.codex/skills/cloudflare/references/static-assets/configuration.md +47 -0
  311. package/.codex/skills/cloudflare/references/static-assets/gotchas.md +44 -0
  312. package/.codex/skills/cloudflare/references/static-assets/patterns.md +42 -0
  313. package/.codex/skills/cloudflare/references/stream/README.md +103 -0
  314. package/.codex/skills/cloudflare/references/stream/api.md +204 -0
  315. package/.codex/skills/cloudflare/references/stream/configuration.md +127 -0
  316. package/.codex/skills/cloudflare/references/stream/gotchas.md +131 -0
  317. package/.codex/skills/cloudflare/references/stream/patterns.md +152 -0
  318. package/.codex/skills/cloudflare/references/tail-workers/README.md +640 -0
  319. package/.codex/skills/cloudflare/references/terraform/README.md +76 -0
  320. package/.codex/skills/cloudflare/references/terraform/api.md +159 -0
  321. package/.codex/skills/cloudflare/references/terraform/configuration.md +156 -0
  322. package/.codex/skills/cloudflare/references/terraform/gotchas.md +207 -0
  323. package/.codex/skills/cloudflare/references/terraform/patterns.md +135 -0
  324. package/.codex/skills/cloudflare/references/tunnel/README.md +82 -0
  325. package/.codex/skills/cloudflare/references/tunnel/api.md +105 -0
  326. package/.codex/skills/cloudflare/references/tunnel/configuration.md +113 -0
  327. package/.codex/skills/cloudflare/references/tunnel/gotchas.md +115 -0
  328. package/.codex/skills/cloudflare/references/tunnel/patterns.md +157 -0
  329. package/.codex/skills/cloudflare/references/turn/README.md +699 -0
  330. package/.codex/skills/cloudflare/references/turnstile/README.md +14 -0
  331. package/.codex/skills/cloudflare/references/turnstile/api.md +3 -0
  332. package/.codex/skills/cloudflare/references/turnstile/configuration.md +19 -0
  333. package/.codex/skills/cloudflare/references/turnstile/gotchas.md +27 -0
  334. package/.codex/skills/cloudflare/references/turnstile/patterns.md +41 -0
  335. package/.codex/skills/cloudflare/references/vectorize/README.md +682 -0
  336. package/.codex/skills/cloudflare/references/waf/README.md +14 -0
  337. package/.codex/skills/cloudflare/references/waf/api.md +3 -0
  338. package/.codex/skills/cloudflare/references/waf/configuration.md +44 -0
  339. package/.codex/skills/cloudflare/references/waf/gotchas.md +24 -0
  340. package/.codex/skills/cloudflare/references/waf/patterns.md +29 -0
  341. package/.codex/skills/cloudflare/references/web-analytics/README.md +19 -0
  342. package/.codex/skills/cloudflare/references/web-analytics/api.md +52 -0
  343. package/.codex/skills/cloudflare/references/web-analytics/configuration.md +31 -0
  344. package/.codex/skills/cloudflare/references/web-analytics/gotchas.md +28 -0
  345. package/.codex/skills/cloudflare/references/web-analytics/patterns.md +52 -0
  346. package/.codex/skills/cloudflare/references/workerd/README.md +47 -0
  347. package/.codex/skills/cloudflare/references/workerd/api.md +199 -0
  348. package/.codex/skills/cloudflare/references/workerd/configuration.md +185 -0
  349. package/.codex/skills/cloudflare/references/workerd/gotchas.md +203 -0
  350. package/.codex/skills/cloudflare/references/workerd/patterns.md +216 -0
  351. package/.codex/skills/cloudflare/references/workers/README.md +96 -0
  352. package/.codex/skills/cloudflare/references/workers/api.md +137 -0
  353. package/.codex/skills/cloudflare/references/workers/configuration.md +147 -0
  354. package/.codex/skills/cloudflare/references/workers/gotchas.md +99 -0
  355. package/.codex/skills/cloudflare/references/workers/patterns.md +149 -0
  356. package/.codex/skills/cloudflare/references/workers-ai/README.md +116 -0
  357. package/.codex/skills/cloudflare/references/workers-for-platforms/README.md +48 -0
  358. package/.codex/skills/cloudflare/references/workers-for-platforms/api.md +169 -0
  359. package/.codex/skills/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  360. package/.codex/skills/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  361. package/.codex/skills/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  362. package/.codex/skills/cloudflare/references/workers-playground/README.md +16 -0
  363. package/.codex/skills/cloudflare/references/workers-playground/api.md +20 -0
  364. package/.codex/skills/cloudflare/references/workers-playground/configuration.md +3 -0
  365. package/.codex/skills/cloudflare/references/workers-playground/gotchas.md +35 -0
  366. package/.codex/skills/cloudflare/references/workers-playground/patterns.md +42 -0
  367. package/.codex/skills/cloudflare/references/workers-vpc/README.md +579 -0
  368. package/.codex/skills/cloudflare/references/workflows/README.md +62 -0
  369. package/.codex/skills/cloudflare/references/workflows/api.md +125 -0
  370. package/.codex/skills/cloudflare/references/workflows/configuration.md +177 -0
  371. package/.codex/skills/cloudflare/references/workflows/gotchas.md +136 -0
  372. package/.codex/skills/cloudflare/references/workflows/patterns.md +132 -0
  373. package/.codex/skills/cloudflare/references/wrangler/README.md +90 -0
  374. package/.codex/skills/cloudflare/references/wrangler/api.md +140 -0
  375. package/.codex/skills/cloudflare/references/wrangler/configuration.md +128 -0
  376. package/.codex/skills/cloudflare/references/wrangler/gotchas.md +93 -0
  377. package/.codex/skills/cloudflare/references/wrangler/patterns.md +150 -0
  378. package/.codex/skills/cloudflare/references/zaraz/README.md +360 -0
  379. package/.codex/skills/code-navigation/SKILL.md +130 -0
  380. package/.codex/skills/code-review/SKILL.md +208 -0
  381. package/.codex/skills/compaction/SKILL.md +317 -0
  382. package/.codex/skills/condition-based-waiting/SKILL.md +123 -0
  383. package/.codex/skills/condition-based-waiting/example.ts +158 -0
  384. package/.codex/skills/context-engineering/SKILL.md +176 -0
  385. package/.codex/skills/context-initialization/SKILL.md +70 -0
  386. package/.codex/skills/context-management/SKILL.md +163 -0
  387. package/.codex/skills/core-data-expert/SKILL.md +93 -0
  388. package/.codex/skills/core-data-expert/references/batch-operations.md +543 -0
  389. package/.codex/skills/core-data-expert/references/cloudkit-integration.md +259 -0
  390. package/.codex/skills/core-data-expert/references/concurrency.md +522 -0
  391. package/.codex/skills/core-data-expert/references/fetch-requests.md +643 -0
  392. package/.codex/skills/core-data-expert/references/glossary.md +233 -0
  393. package/.codex/skills/core-data-expert/references/migration.md +393 -0
  394. package/.codex/skills/core-data-expert/references/model-configuration.md +597 -0
  395. package/.codex/skills/core-data-expert/references/performance.md +300 -0
  396. package/.codex/skills/core-data-expert/references/persistent-history.md +553 -0
  397. package/.codex/skills/core-data-expert/references/project-audit.md +60 -0
  398. package/.codex/skills/core-data-expert/references/saving.md +574 -0
  399. package/.codex/skills/core-data-expert/references/stack-setup.md +625 -0
  400. package/.codex/skills/core-data-expert/references/testing.md +300 -0
  401. package/.codex/skills/core-data-expert/references/threading.md +589 -0
  402. package/.codex/skills/debugging/SKILL.md +203 -0
  403. package/.codex/skills/deep-research/SKILL.md +384 -0
  404. package/.codex/skills/defense-in-depth/SKILL.md +166 -0
  405. package/.codex/skills/dependency-upgrades/SKILL.md +198 -0
  406. package/.codex/skills/design-system-audit/SKILL.md +153 -0
  407. package/.codex/skills/development-lifecycle/SKILL.md +356 -0
  408. package/.codex/skills/dispatching-parallel-agents/SKILL.md +191 -0
  409. package/.codex/skills/docs-handoff/SKILL.md +175 -0
  410. package/.codex/skills/executing-plans/SKILL.md +247 -0
  411. package/.codex/skills/figma/SKILL.md +224 -0
  412. package/.codex/skills/figma/mcp.json +6 -0
  413. package/.codex/skills/finishing-a-development-branch/SKILL.md +357 -0
  414. package/.codex/skills/frontend-design/SKILL.md +176 -0
  415. package/.codex/skills/gemini-large-context/SKILL.md +216 -0
  416. package/.codex/skills/git-pr-prep/SKILL.md +179 -0
  417. package/.codex/skills/index-knowledge/SKILL.md +413 -0
  418. package/.codex/skills/jira/SKILL.md +283 -0
  419. package/.codex/skills/jira/mcp.json +6 -0
  420. package/.codex/skills/memory-system/SKILL.md +93 -0
  421. package/.codex/skills/mockup-to-code/SKILL.md +184 -0
  422. package/.codex/skills/mqdh/SKILL.md +171 -0
  423. package/.codex/skills/obsidian/SKILL.md +187 -0
  424. package/.codex/skills/obsidian/mcp.json +22 -0
  425. package/.codex/skills/opensrc/SKILL.md +127 -0
  426. package/.codex/skills/opensrc/references/architecture.md +176 -0
  427. package/.codex/skills/opensrc/references/cli-usage.md +176 -0
  428. package/.codex/skills/opensrc/references/registry-support.md +137 -0
  429. package/.codex/skills/pdf-extract/SKILL.md +438 -0
  430. package/.codex/skills/playwright/SKILL.md +320 -0
  431. package/.codex/skills/playwright/mcp.json +16 -0
  432. package/.codex/skills/playwriter/SKILL.md +158 -0
  433. package/.codex/skills/polar/SKILL.md +102 -0
  434. package/.codex/skills/prd/SKILL.md +146 -0
  435. package/.codex/skills/prd-task/SKILL.md +182 -0
  436. package/.codex/skills/prd-task/references/prd-schema.json +124 -0
  437. package/.codex/skills/prompt-leverage/SKILL.md +69 -0
  438. package/.codex/skills/prompt-leverage/agents/openai.yaml +4 -0
  439. package/.codex/skills/prompt-leverage/references/framework.md +91 -0
  440. package/.codex/skills/prompt-leverage/scripts/augment_prompt.py +114 -0
  441. package/.codex/skills/ralph/SKILL.md +296 -0
  442. package/.codex/skills/react-best-practices/AGENTS.md +2410 -0
  443. package/.codex/skills/react-best-practices/README.md +123 -0
  444. package/.codex/skills/react-best-practices/SKILL.md +133 -0
  445. package/.codex/skills/react-best-practices/metadata.json +15 -0
  446. package/.codex/skills/react-best-practices/rules/_sections.md +46 -0
  447. package/.codex/skills/react-best-practices/rules/_template.md +28 -0
  448. package/.codex/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  449. package/.codex/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  450. package/.codex/skills/react-best-practices/rules/async-api-routes.md +38 -0
  451. package/.codex/skills/react-best-practices/rules/async-defer-await.md +80 -0
  452. package/.codex/skills/react-best-practices/rules/async-dependencies.md +36 -0
  453. package/.codex/skills/react-best-practices/rules/async-parallel.md +28 -0
  454. package/.codex/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  455. package/.codex/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  456. package/.codex/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  457. package/.codex/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  458. package/.codex/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  459. package/.codex/skills/react-best-practices/rules/bundle-preload.md +50 -0
  460. package/.codex/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  461. package/.codex/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  462. package/.codex/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  463. package/.codex/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  464. package/.codex/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  465. package/.codex/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  466. package/.codex/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  467. package/.codex/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  468. package/.codex/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  469. package/.codex/skills/react-best-practices/rules/js-early-exit.md +50 -0
  470. package/.codex/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  471. package/.codex/skills/react-best-practices/rules/js-index-maps.md +37 -0
  472. package/.codex/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  473. package/.codex/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  474. package/.codex/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  475. package/.codex/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  476. package/.codex/skills/react-best-practices/rules/rendering-activity.md +26 -0
  477. package/.codex/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  478. package/.codex/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  479. package/.codex/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  480. package/.codex/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  481. package/.codex/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  482. package/.codex/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  483. package/.codex/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  484. package/.codex/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  485. package/.codex/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  486. package/.codex/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  487. package/.codex/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  488. package/.codex/skills/react-best-practices/rules/rerender-memo.md +44 -0
  489. package/.codex/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  490. package/.codex/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  491. package/.codex/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  492. package/.codex/skills/react-best-practices/rules/server-cache-react.md +76 -0
  493. package/.codex/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  494. package/.codex/skills/react-best-practices/rules/server-serialization.md +38 -0
  495. package/.codex/skills/receiving-code-review/SKILL.md +252 -0
  496. package/.codex/skills/refactoring/SKILL.md +217 -0
  497. package/.codex/skills/repo-orientation/SKILL.md +156 -0
  498. package/.codex/skills/requesting-code-review/SKILL.md +397 -0
  499. package/.codex/skills/resend/SKILL.md +177 -0
  500. package/.codex/skills/resend/references/react-email.md +287 -0
  501. package/.codex/skills/resend/references/receive-email.md +248 -0
  502. package/.codex/skills/resend/references/send-email.md +318 -0
  503. package/.codex/skills/root-cause-tracing/SKILL.md +192 -0
  504. package/.codex/skills/root-cause-tracing/find-polluter.sh +63 -0
  505. package/.codex/skills/safe-implementation/SKILL.md +205 -0
  506. package/.codex/skills/session-management/SKILL.md +10 -0
  507. package/.codex/skills/sharing-skills/SKILL.md +214 -0
  508. package/.codex/skills/skill-creator/SKILL.md +156 -0
  509. package/.codex/skills/source-code-research/SKILL.md +293 -0
  510. package/.codex/skills/source-code-research/references/analysis-tips.md +43 -0
  511. package/.codex/skills/source-code-research/references/anti-patterns.md +36 -0
  512. package/.codex/skills/source-code-research/references/common-patterns.md +57 -0
  513. package/.codex/skills/source-code-research/references/example-workflow.md +60 -0
  514. package/.codex/skills/source-code-research/references/further-reading.md +5 -0
  515. package/.codex/skills/source-code-research/references/source-structure.md +45 -0
  516. package/.codex/skills/stitch/SKILL.md +147 -0
  517. package/.codex/skills/stitch/mcp.json +9 -0
  518. package/.codex/skills/structured-edit/SKILL.md +181 -0
  519. package/.codex/skills/subagent-driven-development/SKILL.md +237 -0
  520. package/.codex/skills/supabase/SKILL.md +130 -0
  521. package/.codex/skills/supabase/mcp.json +27 -0
  522. package/.codex/skills/supabase-postgres-best-practices/AGENTS.md +1490 -0
  523. package/.codex/skills/supabase-postgres-best-practices/SKILL.md +65 -0
  524. package/.codex/skills/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  525. package/.codex/skills/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  526. package/.codex/skills/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  527. package/.codex/skills/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
  528. package/.codex/skills/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
  529. package/.codex/skills/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  530. package/.codex/skills/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
  531. package/.codex/skills/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
  532. package/.codex/skills/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
  533. package/.codex/skills/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
  534. package/.codex/skills/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
  535. package/.codex/skills/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  536. package/.codex/skills/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
  537. package/.codex/skills/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
  538. package/.codex/skills/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  539. package/.codex/skills/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  540. package/.codex/skills/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  541. package/.codex/skills/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
  542. package/.codex/skills/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
  543. package/.codex/skills/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
  544. package/.codex/skills/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
  545. package/.codex/skills/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
  546. package/.codex/skills/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
  547. package/.codex/skills/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  548. package/.codex/skills/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  549. package/.codex/skills/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
  550. package/.codex/skills/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
  551. package/.codex/skills/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
  552. package/.codex/skills/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
  553. package/.codex/skills/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
  554. package/.codex/skills/swarm-coordination/SKILL.md +179 -0
  555. package/.codex/skills/swarm-coordination/references/architecture.md +39 -0
  556. package/.codex/skills/swarm-coordination/references/delegation-worker-protocol.md +145 -0
  557. package/.codex/skills/swarm-coordination/references/dependency-graph.md +50 -0
  558. package/.codex/skills/swarm-coordination/references/drift-check.md +90 -0
  559. package/.codex/skills/swarm-coordination/references/integration-beads.md +20 -0
  560. package/.codex/skills/swarm-coordination/references/launch-flow.md +186 -0
  561. package/.codex/skills/swarm-coordination/references/reconciler.md +172 -0
  562. package/.codex/skills/swarm-coordination/references/tier-enforcement.md +78 -0
  563. package/.codex/skills/swarm-coordination/references/tmux-integration.md +134 -0
  564. package/.codex/skills/swift-concurrency/SKILL.md +266 -0
  565. package/.codex/skills/swift-concurrency/references/actors.md +640 -0
  566. package/.codex/skills/swift-concurrency/references/async-algorithms.md +822 -0
  567. package/.codex/skills/swift-concurrency/references/async-await-basics.md +249 -0
  568. package/.codex/skills/swift-concurrency/references/async-sequences.md +670 -0
  569. package/.codex/skills/swift-concurrency/references/core-data.md +533 -0
  570. package/.codex/skills/swift-concurrency/references/glossary.md +128 -0
  571. package/.codex/skills/swift-concurrency/references/linting.md +142 -0
  572. package/.codex/skills/swift-concurrency/references/memory-management.md +542 -0
  573. package/.codex/skills/swift-concurrency/references/migration.md +1076 -0
  574. package/.codex/skills/swift-concurrency/references/performance.md +574 -0
  575. package/.codex/skills/swift-concurrency/references/sendable.md +578 -0
  576. package/.codex/skills/swift-concurrency/references/tasks.md +604 -0
  577. package/.codex/skills/swift-concurrency/references/testing.md +565 -0
  578. package/.codex/skills/swift-concurrency/references/threading.md +452 -0
  579. package/.codex/skills/swiftui-expert-skill/SKILL.md +329 -0
  580. package/.codex/skills/swiftui-expert-skill/references/animation-advanced.md +351 -0
  581. package/.codex/skills/swiftui-expert-skill/references/animation-basics.md +284 -0
  582. package/.codex/skills/swiftui-expert-skill/references/animation-transitions.md +326 -0
  583. package/.codex/skills/swiftui-expert-skill/references/image-optimization.md +286 -0
  584. package/.codex/skills/swiftui-expert-skill/references/layout-best-practices.md +312 -0
  585. package/.codex/skills/swiftui-expert-skill/references/liquid-glass.md +377 -0
  586. package/.codex/skills/swiftui-expert-skill/references/list-patterns.md +153 -0
  587. package/.codex/skills/swiftui-expert-skill/references/modern-apis.md +400 -0
  588. package/.codex/skills/swiftui-expert-skill/references/performance-patterns.md +377 -0
  589. package/.codex/skills/swiftui-expert-skill/references/scroll-patterns.md +305 -0
  590. package/.codex/skills/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
  591. package/.codex/skills/swiftui-expert-skill/references/state-management.md +447 -0
  592. package/.codex/skills/swiftui-expert-skill/references/text-formatting.md +285 -0
  593. package/.codex/skills/swiftui-expert-skill/references/view-structure.md +276 -0
  594. package/.codex/skills/systematic-debugging/SKILL.md +402 -0
  595. package/.codex/skills/task-planning/SKILL.md +205 -0
  596. package/.codex/skills/test-driven-development/SKILL.md +388 -0
  597. package/.codex/skills/test-strategy/SKILL.md +186 -0
  598. package/.codex/skills/testing-anti-patterns/SKILL.md +320 -0
  599. package/.codex/skills/testing-skills-with-subagents/SKILL.md +405 -0
  600. package/.codex/skills/tilth-cli/SKILL.md +180 -0
  601. package/.codex/skills/tool-priority/SKILL.md +299 -0
  602. package/.codex/skills/ui-inspiration-scout/SKILL.md +203 -0
  603. package/.codex/skills/ui-ux-research/SKILL.md +35 -0
  604. package/.codex/skills/using-git-worktrees/SKILL.md +259 -0
  605. package/.codex/skills/using-skills/SKILL.md +117 -0
  606. package/.codex/skills/v0/SKILL.md +158 -0
  607. package/.codex/skills/v0/mcp.json +6 -0
  608. package/.codex/skills/v1-run/SKILL.md +175 -0
  609. package/.codex/skills/v1-run/mcp.json +6 -0
  610. package/.codex/skills/vercel-deploy-claimable/SKILL.md +124 -0
  611. package/.codex/skills/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  612. package/.codex/skills/verification/SKILL.md +191 -0
  613. package/.codex/skills/verification-before-completion/SKILL.md +236 -0
  614. package/.codex/skills/visual-analysis/SKILL.md +154 -0
  615. package/.codex/skills/web-design-guidelines/SKILL.md +46 -0
  616. package/.codex/skills/writing-plans/SKILL.md +320 -0
  617. package/.codex/skills/writing-skills/SKILL.md +287 -0
  618. package/.codex/skills/writing-skills/anthropic-best-practices.md +1173 -0
  619. package/.codex/skills/writing-skills/graphviz-conventions.dot +172 -0
  620. package/.codex/skills/writing-skills/persuasion-principles.md +220 -0
  621. package/.codex/skills/writing-skills/references/anti-patterns.md +25 -0
  622. package/.codex/skills/writing-skills/references/claude-search-optimization.md +140 -0
  623. package/.codex/skills/writing-skills/references/discovery-workflow.md +11 -0
  624. package/.codex/skills/writing-skills/references/file-organization.md +32 -0
  625. package/.codex/skills/writing-skills/references/flowcharts-and-examples.md +57 -0
  626. package/.codex/skills/writing-skills/references/rationalization-hardening.md +75 -0
  627. package/.codex/skills/writing-skills/references/testing-skill-types.md +52 -0
  628. package/.template-manifest.json +631 -0
  629. package/AGENTS.md +719 -0
  630. package/AGENTS.override.md.example +7 -0
  631. package/CHANGELOG.md +28 -0
  632. package/LICENSE +21 -0
  633. package/README.md +641 -0
  634. package/bin/codexkit +148 -0
  635. package/install/bead-close.sh +20 -0
  636. package/install/bead-search.sh +18 -0
  637. package/install/bead-start.sh +20 -0
  638. package/install/bead-sync.sh +19 -0
  639. package/install/bead-verify.sh +20 -0
  640. package/install/generate-manifest.sh +55 -0
  641. package/install/install-global.sh +150 -0
  642. package/install/install-project.sh +704 -0
  643. package/install/install-remote.sh +152 -0
  644. package/install/patch.sh +478 -0
  645. package/install/plugin.sh +565 -0
  646. package/install/run-codex.sh +68 -0
  647. package/install/template.sh +620 -0
  648. package/install/validate.sh +653 -0
  649. package/package.json +39 -0
  650. package/templates/global/.codex-config-template.toml +87 -0
  651. package/templates/global/AGENTS.override.md +18 -0
  652. package/templates/global/README.md +29 -0
  653. package/templates/project/.codex-config-template.toml +26 -0
  654. package/templates/project/AGENTS.md.template +27 -0
  655. package/templates/project/README.md +24 -0
@@ -0,0 +1,553 @@
1
+ # Persistent History Tracking
2
+
3
+ Persistent history tracking enables Core Data to track changes across contexts, app extensions, and batch operations. This is essential for keeping your UI synchronized and supporting multi-target apps.
4
+
5
+ ## Why Persistent History Tracking?
6
+
7
+ **Without persistent history tracking:**
8
+ - Batch operations don't update UI
9
+ - App extensions can't notify main app of changes
10
+ - Multiple contexts don't stay synchronized
11
+
12
+ **With persistent history tracking:**
13
+ - All changes are recorded in a transaction log
14
+ - Changes can be merged into any context
15
+ - Works across app targets (main app, extensions, etc.)
16
+
17
+ ## Enabling Persistent History Tracking
18
+
19
+ ### In NSPersistentContainer
20
+
21
+ ```swift
22
+ class PersistentContainer: NSPersistentContainer {
23
+ override init(name: String, managedObjectModel model: NSManagedObjectModel) {
24
+ super.init(name: name, managedObjectModel: model)
25
+
26
+ guard let description = persistentStoreDescriptions.first else {
27
+ fatalError("No store description")
28
+ }
29
+
30
+ // Enable persistent history tracking
31
+ description.setOption(true as NSNumber,
32
+ forKey: NSPersistentHistoryTrackingKey)
33
+
34
+ // Enable remote change notifications
35
+ description.setOption(true as NSNumber,
36
+ forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
37
+
38
+ loadPersistentStores { description, error in
39
+ if let error = error {
40
+ fatalError("Failed to load store: \(error)")
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ ### For App Groups (Extensions)
48
+
49
+ ```swift
50
+ let storeURL = FileManager.default.containerURL(
51
+ forSecurityApplicationGroupIdentifier: "group.com.example.app"
52
+ )?.appendingPathComponent("Shared.sqlite")
53
+
54
+ let description = NSPersistentStoreDescription(url: storeURL!)
55
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
56
+ description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
57
+
58
+ container.persistentStoreDescriptions = [description]
59
+ ```
60
+
61
+ ## The Four Components
62
+
63
+ Persistent history tracking typically involves four components:
64
+
65
+ 1. **Observer** - Listens for remote change notifications
66
+ 2. **Fetcher** - Retrieves relevant transactions
67
+ 3. **Merger** - Merges transactions into view context
68
+ 4. **Cleaner** - Removes old transactions
69
+
70
+ ## 1. Observer: Listening for Changes
71
+
72
+ ```swift
73
+ final class PersistentHistoryObserver {
74
+ private let coordinator: NSPersistentStoreCoordinator
75
+ private let historyContext: NSManagedObjectContext
76
+ private let merger: PersistentHistoryMerger
77
+
78
+ init(container: NSPersistentContainer, viewContext: NSManagedObjectContext) {
79
+ self.coordinator = container.persistentStoreCoordinator
80
+ self.historyContext = container.newBackgroundContext()
81
+ self.historyContext.name = "PersistentHistoryContext"
82
+ self.historyContext.transactionAuthor = "PersistentHistory"
83
+ self.merger = PersistentHistoryMerger(historyContext: historyContext, viewContext: viewContext)
84
+
85
+ NotificationCenter.default.addObserver(
86
+ self,
87
+ selector: #selector(processStoreRemoteChanges),
88
+ name: .NSPersistentStoreRemoteChange,
89
+ object: coordinator
90
+ )
91
+ }
92
+
93
+ @objc private func processStoreRemoteChanges(_ notification: Notification) {
94
+ merger.merge()
95
+ }
96
+
97
+ deinit {
98
+ NotificationCenter.default.removeObserver(self)
99
+ }
100
+ }
101
+ ```
102
+
103
+ ## 2. Fetcher: Retrieving Transactions
104
+
105
+ ```swift
106
+ class PersistentHistoryFetcher {
107
+ private let context: NSManagedObjectContext
108
+ private let lastToken: NSPersistentHistoryToken?
109
+
110
+ init(context: NSManagedObjectContext, lastToken: NSPersistentHistoryToken?) {
111
+ self.context = context
112
+ self.lastToken = lastToken
113
+ }
114
+
115
+ func fetch() throws -> [NSPersistentHistoryTransaction] {
116
+ let fetchRequest = createFetchRequest()
117
+
118
+ guard let historyResult = try context.execute(fetchRequest) as? NSPersistentHistoryResult,
119
+ let transactions = historyResult.result as? [NSPersistentHistoryTransaction] else {
120
+ return []
121
+ }
122
+
123
+ return transactions
124
+ }
125
+
126
+ private func createFetchRequest() -> NSPersistentHistoryChangeRequest {
127
+ let request: NSPersistentHistoryChangeRequest
128
+
129
+ if let token = lastToken {
130
+ request = NSPersistentHistoryChangeRequest.fetchHistory(after: token)
131
+ } else {
132
+ request = NSPersistentHistoryChangeRequest.fetchHistory(after: Date.distantPast)
133
+ }
134
+
135
+ // Filter out transactions from this app target
136
+ if let fetchRequest = request.fetchRequest {
137
+ fetchRequest.predicate = NSPredicate(
138
+ format: "author != %@",
139
+ "MainApp" // Your app's transaction author
140
+ )
141
+ }
142
+
143
+ return request
144
+ }
145
+ }
146
+ ```
147
+
148
+ ## 3. Merger: Applying Changes
149
+
150
+ ```swift
151
+ final class PersistentHistoryMerger {
152
+ private let historyContext: NSManagedObjectContext
153
+ private let viewContext: NSManagedObjectContext
154
+ private var lastToken: NSPersistentHistoryToken?
155
+
156
+ init(historyContext: NSManagedObjectContext, viewContext: NSManagedObjectContext) {
157
+ self.historyContext = historyContext
158
+ self.viewContext = viewContext
159
+ self.lastToken = loadLastToken()
160
+ }
161
+
162
+ func merge() {
163
+ historyContext.perform {
164
+ do {
165
+ let fetcher = PersistentHistoryFetcher(
166
+ context: self.historyContext,
167
+ lastToken: self.lastToken
168
+ )
169
+
170
+ let transactions = try fetcher.fetch()
171
+ guard !transactions.isEmpty else { return }
172
+
173
+ self.viewContext.perform {
174
+ self.mergeTransactions(transactions)
175
+ }
176
+
177
+ if let newToken = transactions.last?.token {
178
+ self.lastToken = newToken
179
+ self.saveLastToken(newToken)
180
+ }
181
+ } catch {
182
+ print("Failed to merge history: \(error)")
183
+ }
184
+ }
185
+ }
186
+
187
+ private func mergeTransactions(_ transactions: [NSPersistentHistoryTransaction]) {
188
+ for transaction in transactions {
189
+ guard let userInfo = transaction.objectIDNotification().userInfo else { continue }
190
+ NSManagedObjectContext.mergeChanges(fromRemoteContextSave: userInfo, into: [viewContext])
191
+ }
192
+ }
193
+
194
+ private func loadLastToken() -> NSPersistentHistoryToken? {
195
+ guard let data = UserDefaults.standard.data(forKey: "lastHistoryToken") else {
196
+ return nil
197
+ }
198
+ return try? NSKeyedUnarchiver.unarchivedObject(
199
+ ofClass: NSPersistentHistoryToken.self,
200
+ from: data
201
+ )
202
+ }
203
+
204
+ private func saveLastToken(_ token: NSPersistentHistoryToken) {
205
+ if let data = try? NSKeyedArchiver.archivedData(
206
+ withRootObject: token,
207
+ requiringSecureCoding: true
208
+ ) {
209
+ UserDefaults.standard.set(data, forKey: "lastHistoryToken")
210
+ }
211
+ }
212
+ }
213
+ ```
214
+
215
+ ## 4. Cleaner: Removing Old Transactions
216
+
217
+ ```swift
218
+ class PersistentHistoryCleaner {
219
+ private let context: NSManagedObjectContext
220
+ private let targets: [AppTarget]
221
+
222
+ enum AppTarget {
223
+ case mainApp
224
+ case shareExtension
225
+ case widgetExtension
226
+
227
+ var lastTokenKey: String {
228
+ switch self {
229
+ case .mainApp: return "mainApp.lastHistoryToken"
230
+ case .shareExtension: return "shareExtension.lastHistoryToken"
231
+ case .widgetExtension: return "widgetExtension.lastHistoryToken"
232
+ }
233
+ }
234
+ }
235
+
236
+ init(context: NSManagedObjectContext, targets: [AppTarget]) {
237
+ self.context = context
238
+ self.targets = targets
239
+ }
240
+
241
+ func clean() {
242
+ context.perform {
243
+ // Find the oldest token across all targets
244
+ guard let oldestToken = self.findOldestToken() else { return }
245
+
246
+ // Delete history before that token
247
+ let deleteRequest = NSPersistentHistoryChangeRequest.deleteHistory(before: oldestToken)
248
+
249
+ do {
250
+ try self.context.execute(deleteRequest)
251
+ } catch {
252
+ print("Failed to clean history: \(error)")
253
+ }
254
+ }
255
+ }
256
+
257
+ private func findOldestToken() -> NSPersistentHistoryToken? {
258
+ var oldestDate: Date?
259
+ var oldestToken: NSPersistentHistoryToken?
260
+
261
+ for target in targets {
262
+ guard let token = loadToken(for: target) else { continue }
263
+
264
+ // Get timestamp from token (requires fetching transaction)
265
+ let historyRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: token)
266
+ historyRequest.fetchRequest?.fetchLimit = 1
267
+
268
+ guard let result = try? context.execute(historyRequest) as? NSPersistentHistoryResult,
269
+ let transactions = result.result as? [NSPersistentHistoryTransaction],
270
+ let transaction = transactions.first else {
271
+ continue
272
+ }
273
+
274
+ let date = transaction.timestamp
275
+ if oldestDate == nil || date < oldestDate! {
276
+ oldestDate = date
277
+ oldestToken = token
278
+ }
279
+ }
280
+
281
+ return oldestToken
282
+ }
283
+
284
+ private func loadToken(for target: AppTarget) -> NSPersistentHistoryToken? {
285
+ guard let data = UserDefaults.standard.data(forKey: target.lastTokenKey) else {
286
+ return nil
287
+ }
288
+ return try? NSKeyedUnarchiver.unarchivedObject(
289
+ ofClass: NSPersistentHistoryToken.self,
290
+ from: data
291
+ )
292
+ }
293
+ }
294
+ ```
295
+
296
+ ## Complete Integration Example
297
+
298
+ ```swift
299
+ class CoreDataStack {
300
+ static let shared = CoreDataStack()
301
+
302
+ lazy var persistentContainer: NSPersistentContainer = {
303
+ let container = NSPersistentContainer(name: "Model")
304
+
305
+ // Configure store
306
+ guard let description = container.persistentStoreDescriptions.first else {
307
+ fatalError("No store description")
308
+ }
309
+
310
+ // Enable persistent history tracking
311
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
312
+ description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
313
+
314
+ container.loadPersistentStores { description, error in
315
+ if let error = error {
316
+ fatalError("Failed to load store: \(error)")
317
+ }
318
+
319
+ self.setupHistoryTracking(container: container)
320
+ }
321
+
322
+ // Configure view context
323
+ container.viewContext.automaticallyMergesChangesFromParent = true
324
+ container.viewContext.name = "ViewContext"
325
+ container.viewContext.transactionAuthor = "MainApp"
326
+
327
+ return container
328
+ }()
329
+
330
+ private var historyObserver: PersistentHistoryObserver?
331
+
332
+ private init() {}
333
+
334
+ private func setupHistoryTracking(container: NSPersistentContainer) {
335
+ historyObserver = PersistentHistoryObserver(container: container, viewContext: container.viewContext)
336
+ cleanHistoryPeriodically(container: container)
337
+ }
338
+
339
+ private func cleanHistoryPeriodically(container: NSPersistentContainer) {
340
+ Timer.scheduledTimer(withTimeInterval: 3600, repeats: true) { _ in
341
+ let context = container.newBackgroundContext()
342
+ let cleaner = PersistentHistoryCleaner(
343
+ context: context,
344
+ targets: [.mainApp, .shareExtension]
345
+ )
346
+ cleaner.clean()
347
+ }
348
+ }
349
+ }
350
+ ```
351
+
352
+ ## Transaction Authors
353
+
354
+ Set unique transaction authors for each app target:
355
+
356
+ ```swift
357
+ // Main app
358
+ viewContext.transactionAuthor = "MainApp"
359
+
360
+ // Share extension
361
+ viewContext.transactionAuthor = "ShareExtension"
362
+
363
+ // Widget extension
364
+ viewContext.transactionAuthor = "WidgetExtension"
365
+ ```
366
+
367
+ **Why this matters:**
368
+ - Filter out your own transactions (avoid redundant merges)
369
+ - Identify which target made changes
370
+ - Debug multi-target issues
371
+
372
+ ## Filtering Transactions
373
+
374
+ ### By Author
375
+
376
+ ```swift
377
+ let fetchRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: lastToken)
378
+ if let request = fetchRequest.fetchRequest {
379
+ request.predicate = NSPredicate(format: "author != %@", "MainApp")
380
+ }
381
+ ```
382
+
383
+ ### By Date
384
+
385
+ ```swift
386
+ let cutoffDate = Calendar.current.date(byAdding: .day, value: -7, to: Date())!
387
+ let fetchRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: cutoffDate)
388
+ ```
389
+
390
+ ### By Entity
391
+
392
+ ```swift
393
+ let fetchRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: lastToken)
394
+ if let request = fetchRequest.fetchRequest {
395
+ request.predicate = NSPredicate(format: "ANY changes.changedObjectID.entity.name == %@", "Article")
396
+ }
397
+ ```
398
+
399
+ ## Batch Operations Integration
400
+
401
+ Persistent history tracking is **required** for batch operations to update the UI:
402
+
403
+ ```swift
404
+ // 1. Enable persistent history tracking
405
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
406
+
407
+ // 2. Perform batch operation
408
+ let context = container.newBackgroundContext()
409
+ context.perform {
410
+ let batchInsert = NSBatchInsertRequest(entity: Article.entity()) { object in
411
+ // Insert logic
412
+ return false
413
+ }
414
+ try? context.execute(batchInsert)
415
+ }
416
+
417
+ // 3. UI updates automatically via persistent history tracking
418
+ // The observer detects the change and merges it into the view context
419
+ ```
420
+
421
+ ## Testing Persistent History
422
+
423
+ ```swift
424
+ func testPersistentHistory() throws {
425
+ // Enable persistent history
426
+ let description = container.persistentStoreDescriptions.first!
427
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
428
+
429
+ // Create object in background
430
+ let backgroundContext = container.newBackgroundContext()
431
+ backgroundContext.transactionAuthor = "Test"
432
+
433
+ let expectation = XCTestExpectation(description: "Save")
434
+
435
+ backgroundContext.perform {
436
+ let article = Article(context: backgroundContext)
437
+ article.name = "Test"
438
+ try? backgroundContext.save()
439
+ expectation.fulfill()
440
+ }
441
+
442
+ wait(for: [expectation], timeout: 5.0)
443
+
444
+ // Fetch history
445
+ let fetchRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: Date.distantPast)
446
+ let result = try container.viewContext.execute(fetchRequest) as? NSPersistentHistoryResult
447
+ let transactions = result?.result as? [NSPersistentHistoryTransaction]
448
+
449
+ XCTAssertNotNil(transactions)
450
+ XCTAssertFalse(transactions!.isEmpty)
451
+ }
452
+ ```
453
+
454
+ ## Common Pitfalls
455
+
456
+ ### ❌ Not Enabling Remote Change Notifications
457
+
458
+ ```swift
459
+ // Only this isn't enough
460
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
461
+
462
+ // Need both!
463
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
464
+ description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
465
+ ```
466
+
467
+ ### ❌ Not Filtering Own Transactions
468
+
469
+ ```swift
470
+ // Merges own transactions (redundant)
471
+ let fetchRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: lastToken)
472
+ ```
473
+
474
+ ### ❌ Not Cleaning Old Transactions
475
+
476
+ ```swift
477
+ // History grows unbounded, wastes space
478
+ // Always implement cleaning!
479
+ ```
480
+
481
+ ### ❌ Not Setting Transaction Authors
482
+
483
+ ```swift
484
+ // Can't filter transactions by source
485
+ context.transactionAuthor = nil // Bad!
486
+ ```
487
+
488
+ ### ✅ Correct Approach
489
+
490
+ ```swift
491
+ // 1. Enable both options
492
+ description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
493
+ description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
494
+
495
+ // 2. Set transaction author
496
+ context.transactionAuthor = "MainApp"
497
+
498
+ // 3. Filter own transactions
499
+ fetchRequest.predicate = NSPredicate(format: "author != %@", "MainApp")
500
+
501
+ // 4. Clean periodically
502
+ let cleaner = PersistentHistoryCleaner(context: context, targets: [.mainApp, .shareExtension])
503
+ cleaner.clean()
504
+ ```
505
+
506
+ ## Performance Considerations
507
+
508
+ ### Clean History Regularly
509
+
510
+ ```swift
511
+ // Clean daily
512
+ Timer.scheduledTimer(withTimeInterval: 86400, repeats: true) { _ in
513
+ cleaner.clean()
514
+ }
515
+
516
+ // Or on app launch
517
+ func applicationDidFinishLaunching() {
518
+ cleaner.clean()
519
+ }
520
+ ```
521
+
522
+ ### Limit Fetch Range
523
+
524
+ ```swift
525
+ // Don't fetch all history
526
+ let sevenDaysAgo = Calendar.current.date(byAdding: .day, value: -7, to: Date())!
527
+ let fetchRequest = NSPersistentHistoryChangeRequest.fetchHistory(after: sevenDaysAgo)
528
+ ```
529
+
530
+ ### Batch Merge Changes
531
+
532
+ ```swift
533
+ // Merge multiple transactions at once
534
+ let transactions = try fetcher.fetch()
535
+ for transaction in transactions {
536
+ let userInfo = transaction.objectIDNotification().userInfo
537
+ NSManagedObjectContext.mergeChanges(
538
+ fromRemoteContextSave: userInfo!,
539
+ into: [viewContext]
540
+ )
541
+ }
542
+ ```
543
+
544
+ ## Summary
545
+
546
+ 1. **Enable persistent history tracking** - Required for batch operations and multi-target apps
547
+ 2. **Enable remote change notifications** - Required for cross-context updates
548
+ 3. **Set transaction authors** - Identify change sources
549
+ 4. **Filter own transactions** - Avoid redundant merges
550
+ 5. **Implement all four components** - Observer, Fetcher, Merger, Cleaner
551
+ 6. **Clean history regularly** - Prevent unbounded growth
552
+ 7. **Use with batch operations** - Essential for UI updates
553
+ 8. **Test thoroughly** - Verify history tracking works across targets
@@ -0,0 +1,60 @@
1
+ # Project Audit (Core Data)
2
+
3
+ Use this checklist to quickly discover how a project uses Core Data and which constraints apply (platform availability, CloudKit, history tracking, etc.).
4
+
5
+ ## Determine platform constraints
6
+
7
+ - Find the deployment target (iOS/macOS version). Many recommendations depend on this (e.g. staged migration and composite attributes require iOS 17+/macOS 14+).
8
+ - Note whether the project is Swift 6 / strict concurrency enabled (Sendable and isolation warnings change the advice).
9
+
10
+ ## Inspect the data model
11
+
12
+ - Open the model XML (`*.xcdatamodeld/*/contents`) and check:
13
+ - entities, attributes, relationships, constraints
14
+ - versioning setup (multiple model versions)
15
+ - renaming identifiers (for lightweight migration)
16
+ - composite attributes (iOS 17+)
17
+
18
+ ## Identify stack setup
19
+
20
+ Search for:
21
+
22
+ - `NSPersistentContainer` vs `NSPersistentCloudKitContainer`
23
+ - `loadPersistentStores` configuration
24
+ - `persistentStoreDescriptions` (migration options, history tracking, CloudKit options)
25
+ - `viewContext` configuration (merge policy, `automaticallyMergesChangesFromParent`, query generations)
26
+ - background context creation (`newBackgroundContext`, `performBackgroundTask`)
27
+
28
+ Then consult:
29
+
30
+ - `stack-setup.md` for recommended defaults and merge policies
31
+ - `cloudkit-integration.md` if CloudKit is enabled
32
+
33
+ ## Check for persistent history tracking (required for some flows)
34
+
35
+ Search for:
36
+
37
+ - `NSPersistentHistoryTrackingKey`
38
+ - `NSPersistentStoreRemoteChangeNotificationPostOptionKey`
39
+ - remote change notifications and history processing/merging
40
+
41
+ Then consult:
42
+
43
+ - `persistent-history.md` for the Observer/Fetcher/Merger/Cleaner pattern
44
+
45
+ ## Spot risky concurrency patterns
46
+
47
+ Search for:
48
+
49
+ - cross-thread access to managed objects (look for passing `NSManagedObject` into async tasks/closures)
50
+ - `performAndWait` usage (risk of deadlocks / UI blocking)
51
+ - `@unchecked Sendable` applied to Core Data types (usually hides a real problem)
52
+
53
+ Then consult:
54
+
55
+ - `threading.md` and `concurrency.md`
56
+
57
+ ## Useful debugging flags (for repro builds only)
58
+
59
+ - `-com.apple.CoreData.ConcurrencyDebug 1` (threading violations)
60
+ - `-com.apple.CoreData.SQLDebug 1` (SQL logging)