claude-flow-novice 2.9.1 → 2.10.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 (349) hide show
  1. package/.claude/agents/cfn-dev-team/CLAUDE.md +1086 -0
  2. package/.claude/agents/cfn-dev-team/README.md +116 -0
  3. package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
  4. package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
  5. package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
  6. package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
  7. package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
  8. package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
  9. package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
  10. package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
  11. package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
  12. package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
  13. package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
  14. package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
  15. package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
  16. package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
  17. package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
  18. package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
  19. package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
  20. package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
  21. package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
  22. package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
  23. package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
  24. package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
  25. package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
  26. package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
  27. package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
  28. package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
  29. package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
  30. package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
  31. package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
  32. package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
  33. package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
  34. package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
  35. package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
  36. package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
  37. package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
  38. package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
  39. package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
  40. package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
  41. package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
  42. package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
  43. package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
  44. package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
  45. package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
  46. package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
  47. package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
  48. package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
  49. package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
  50. package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
  51. package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
  52. package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
  53. package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
  54. package/.claude/commands/cfn/cfn-loop.md +168 -7
  55. package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
  56. package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
  57. package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
  58. package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
  59. package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
  60. package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
  61. package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
  62. package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
  63. package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
  64. package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
  65. package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
  66. package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
  67. package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
  68. package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
  69. package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
  70. package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
  71. package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
  72. package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
  73. package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
  74. package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
  75. package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
  76. package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
  77. package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
  78. package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
  79. package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
  80. package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
  81. package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
  82. package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
  83. package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
  84. package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
  85. package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
  86. package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
  87. package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
  88. package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
  89. package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
  90. package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
  91. package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
  92. package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
  93. package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
  94. package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
  95. package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
  96. package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
  97. package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
  98. package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
  99. package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
  100. package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
  101. package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
  102. package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
  103. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
  104. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
  105. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
  106. package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
  107. package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
  108. package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
  109. package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
  110. package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
  111. package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
  112. package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
  113. package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
  114. package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
  115. package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
  116. package/.claude/skills/cfn-config-management/SKILL.md +34 -0
  117. package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
  118. package/.claude/skills/cfn-config-management/config.json +32 -0
  119. package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
  120. package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
  121. package/.claude/skills/cfn-event-bus/config.json +111 -0
  122. package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
  123. package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
  124. package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
  125. package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
  126. package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
  127. package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
  128. package/.claude/skills/cfn-fleet-manager/config.json +60 -0
  129. package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
  130. package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
  131. package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
  132. package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
  133. package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
  134. package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
  135. package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
  136. package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
  137. package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
  138. package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
  139. package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
  140. package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
  141. package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
  142. package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
  143. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
  144. package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
  145. package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
  146. package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
  147. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
  148. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
  149. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
  150. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
  151. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
  152. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
  153. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
  154. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
  155. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
  156. package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
  157. package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
  158. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
  159. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
  160. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
  161. package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
  162. package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
  163. package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
  164. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
  165. package/.claude/skills/cfn-loop-validation/config.json +161 -0
  166. package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
  167. package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
  168. package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
  169. package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
  170. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
  171. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
  172. package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
  173. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
  174. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
  175. package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
  176. package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
  177. package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
  178. package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
  179. package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
  180. package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
  181. package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
  182. package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
  183. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
  184. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
  185. package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
  186. package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
  187. package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
  188. package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
  189. package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
  190. package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
  191. package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
  192. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
  193. package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
  194. package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
  195. package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
  196. package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
  197. package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
  198. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
  199. package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
  200. package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
  201. package/.claude/skills/cfn-redis-coordination/config.json +61 -0
  202. package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
  203. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
  204. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
  205. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
  206. package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
  207. package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
  208. package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
  209. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
  210. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
  211. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
  212. package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
  213. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
  214. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
  215. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
  216. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
  217. package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
  218. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
  219. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
  220. package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
  221. package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
  222. package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
  223. package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
  224. package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
  225. package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
  226. package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
  227. package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
  228. package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
  229. package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
  230. package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
  231. package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
  232. package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
  233. package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
  234. package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
  235. package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
  236. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
  237. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
  238. package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
  239. package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
  240. package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
  241. package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
  242. package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
  243. package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
  244. package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
  245. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
  246. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
  247. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
  248. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
  249. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
  250. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
  251. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
  252. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
  253. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  254. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
  255. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
  256. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
  257. package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
  258. package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
  259. package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
  260. package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
  261. package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
  262. package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
  263. package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
  264. package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
  265. package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
  266. package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
  267. package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
  268. package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
  269. package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
  270. package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
  271. package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
  272. package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
  273. package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
  274. package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
  275. package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
  276. package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
  277. package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
  278. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
  279. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
  280. package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
  281. package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
  282. package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
  283. package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
  284. package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
  285. package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
  286. package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
  287. package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
  288. package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
  289. package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
  290. package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
  291. package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
  292. package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
  293. package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
  294. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
  295. package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
  296. package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
  297. package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
  298. package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
  299. package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
  300. package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
  301. package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
  302. package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
  303. package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
  304. package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
  305. package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
  306. package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
  307. package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
  308. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
  309. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
  310. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
  311. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
  312. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
  313. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
  314. package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
  315. package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
  316. package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
  317. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
  318. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
  319. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
  320. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
  321. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
  322. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
  323. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
  324. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
  325. package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
  326. package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
  327. package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
  328. package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
  329. package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
  330. package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
  331. package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
  332. package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
  333. package/README.md +51 -2
  334. package/dist/ace/ace-reflector.js +109 -10
  335. package/dist/ace/ace-reflector.js.map +1 -1
  336. package/dist/cli/agent-executor.js +1 -1
  337. package/dist/cli/agent-executor.js.map +1 -1
  338. package/package.json +43 -7
  339. package/readme/README.md +15 -4
  340. package/scripts/init-project.js +39 -2
  341. package/scripts/run-marketing-tests.sh +43 -0
  342. package/scripts/update_paths.sh +47 -0
  343. package/tools/install-lizard.sh +37 -0
  344. package/tools/simple-complexity.sh +44 -0
  345. package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
  346. package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
  347. package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
  348. /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
  349. /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
@@ -0,0 +1,615 @@
1
+ ---
2
+ name: graphql-specialist
3
+ description: |
4
+ MUST BE USED for GraphQL schema design, resolver implementation, federation, and performance optimization.
5
+ Use PROACTIVELY for GraphQL APIs, schema stitching, Apollo Server, federation, subscriptions, DataLoader.
6
+ ALWAYS delegate for "GraphQL API", "schema design", "resolvers", "federation", "GraphQL subscriptions".
7
+ Keywords - GraphQL, schema, resolvers, mutations, queries, subscriptions, Apollo, federation, DataLoader, N+1
8
+ tools: [Read, Write, Edit, Bash, Grep, Glob, TodoWrite]
9
+ model: sonnet
10
+ type: specialist
11
+ acl_level: 1
12
+ validation_hooks:
13
+ - agent-template-validator
14
+ - test-coverage-validator
15
+ lifecycle:
16
+ pre_task: |
17
+ sqlite-cli exec "INSERT INTO agents (id, type, status, spawned_at) VALUES ('${AGENT_ID}', 'graphql-specialist', 'active', CURRENT_TIMESTAMP)"
18
+ post_task: |
19
+ sqlite-cli exec "UPDATE agents SET status = 'completed', confidence = ${CONFIDENCE_SCORE}, completed_at = CURRENT_TIMESTAMP WHERE id = '${AGENT_ID}'"
20
+ ---
21
+
22
+ # GraphQL Specialist Agent
23
+
24
+ ## Core Responsibilities
25
+ - Design GraphQL schemas and type systems
26
+ - Implement efficient resolvers
27
+ - Optimize query performance with DataLoader
28
+ - Configure Apollo Federation
29
+ - Implement real-time subscriptions
30
+ - Handle authentication and authorization
31
+ - Prevent N+1 query problems
32
+ - Design pagination strategies
33
+
34
+ ## Technical Expertise
35
+
36
+ ### Schema Design
37
+
38
+ #### Type Definitions
39
+ ```graphql
40
+ type User {
41
+ id: ID!
42
+ email: String!
43
+ username: String!
44
+ profile: UserProfile
45
+ posts(first: Int, after: String): PostConnection!
46
+ createdAt: DateTime!
47
+ }
48
+
49
+ type UserProfile {
50
+ firstName: String
51
+ lastName: String
52
+ bio: String
53
+ avatarUrl: String
54
+ }
55
+
56
+ type Post {
57
+ id: ID!
58
+ title: String!
59
+ content: String!
60
+ author: User!
61
+ comments(first: Int, after: String): CommentConnection!
62
+ publishedAt: DateTime
63
+ tags: [Tag!]!
64
+ }
65
+
66
+ type Tag {
67
+ id: ID!
68
+ name: String!
69
+ posts(first: Int, after: String): PostConnection!
70
+ }
71
+
72
+ type Comment {
73
+ id: ID!
74
+ content: String!
75
+ author: User!
76
+ post: Post!
77
+ createdAt: DateTime!
78
+ }
79
+ ```
80
+
81
+ #### Queries and Mutations
82
+ ```graphql
83
+ type Query {
84
+ # Single resource queries
85
+ user(id: ID!): User
86
+ post(id: ID!): Post
87
+
88
+ # List queries with filtering
89
+ users(
90
+ first: Int
91
+ after: String
92
+ filter: UserFilter
93
+ orderBy: UserOrderBy
94
+ ): UserConnection!
95
+
96
+ posts(
97
+ first: Int
98
+ after: String
99
+ filter: PostFilter
100
+ orderBy: PostOrderBy
101
+ ): PostConnection!
102
+
103
+ # Search
104
+ searchPosts(query: String!, first: Int, after: String): PostConnection!
105
+ }
106
+
107
+ type Mutation {
108
+ # User mutations
109
+ createUser(input: CreateUserInput!): CreateUserPayload!
110
+ updateUser(id: ID!, input: UpdateUserInput!): UpdateUserPayload!
111
+ deleteUser(id: ID!): DeleteUserPayload!
112
+
113
+ # Post mutations
114
+ createPost(input: CreatePostInput!): CreatePostPayload!
115
+ updatePost(id: ID!, input: UpdatePostInput!): UpdatePostPayload!
116
+ publishPost(id: ID!): PublishPostPayload!
117
+ deletePost(id: ID!): DeletePostPayload!
118
+
119
+ # Comment mutations
120
+ createComment(input: CreateCommentInput!): CreateCommentPayload!
121
+ deleteComment(id: ID!): DeleteCommentPayload!
122
+ }
123
+
124
+ type Subscription {
125
+ # Real-time updates
126
+ postPublished: Post!
127
+ commentAdded(postId: ID!): Comment!
128
+ userStatusChanged(userId: ID!): UserStatus!
129
+ }
130
+ ```
131
+
132
+ #### Input Types and Filters
133
+ ```graphql
134
+ input CreateUserInput {
135
+ email: String!
136
+ username: String!
137
+ password: String!
138
+ profile: CreateUserProfileInput
139
+ }
140
+
141
+ input UpdateUserInput {
142
+ email: String
143
+ username: String
144
+ profile: UpdateUserProfileInput
145
+ }
146
+
147
+ input CreateUserProfileInput {
148
+ firstName: String
149
+ lastName: String
150
+ bio: String
151
+ }
152
+
153
+ input UserFilter {
154
+ username: StringFilter
155
+ email: StringFilter
156
+ createdAt: DateTimeFilter
157
+ AND: [UserFilter!]
158
+ OR: [UserFilter!]
159
+ }
160
+
161
+ input StringFilter {
162
+ equals: String
163
+ contains: String
164
+ startsWith: String
165
+ endsWith: String
166
+ in: [String!]
167
+ }
168
+
169
+ input DateTimeFilter {
170
+ equals: DateTime
171
+ gt: DateTime
172
+ gte: DateTime
173
+ lt: DateTime
174
+ lte: DateTime
175
+ }
176
+
177
+ enum UserOrderBy {
178
+ CREATED_AT_ASC
179
+ CREATED_AT_DESC
180
+ USERNAME_ASC
181
+ USERNAME_DESC
182
+ }
183
+ ```
184
+
185
+ #### Pagination (Relay Cursor Connections)
186
+ ```graphql
187
+ type UserConnection {
188
+ edges: [UserEdge!]!
189
+ pageInfo: PageInfo!
190
+ totalCount: Int!
191
+ }
192
+
193
+ type UserEdge {
194
+ cursor: String!
195
+ node: User!
196
+ }
197
+
198
+ type PageInfo {
199
+ hasNextPage: Boolean!
200
+ hasPreviousPage: Boolean!
201
+ startCursor: String
202
+ endCursor: String
203
+ }
204
+ ```
205
+
206
+ ### Resolver Implementation
207
+
208
+ #### Apollo Server Setup
209
+ ```typescript
210
+ import { ApolloServer } from '@apollo/server';
211
+ import { startStandaloneServer } from '@apollo/server/standalone';
212
+ import { makeExecutableSchema } from '@graphql-tools/schema';
213
+ import DataLoader from 'dataloader';
214
+
215
+ // Context with DataLoaders
216
+ interface Context {
217
+ db: Database;
218
+ loaders: {
219
+ users: DataLoader<string, User>;
220
+ posts: DataLoader<string, Post>;
221
+ comments: DataLoader<string, Comment>;
222
+ };
223
+ currentUser?: User;
224
+ }
225
+
226
+ // Create DataLoaders
227
+ function createLoaders(db: Database) {
228
+ return {
229
+ users: new DataLoader<string, User>(async (ids) => {
230
+ const users = await db.users.findMany({
231
+ where: { id: { in: ids } }
232
+ });
233
+ return ids.map(id => users.find(u => u.id === id));
234
+ }),
235
+
236
+ posts: new DataLoader<string, Post>(async (ids) => {
237
+ const posts = await db.posts.findMany({
238
+ where: { id: { in: ids } }
239
+ });
240
+ return ids.map(id => posts.find(p => p.id === id));
241
+ }),
242
+
243
+ comments: new DataLoader<string, Comment>(async (ids) => {
244
+ const comments = await db.comments.findMany({
245
+ where: { id: { in: ids } }
246
+ });
247
+ return ids.map(id => comments.find(c => c.id === id));
248
+ })
249
+ };
250
+ }
251
+
252
+ // Resolvers
253
+ const resolvers = {
254
+ Query: {
255
+ user: async (_parent, { id }, context: Context) => {
256
+ return context.loaders.users.load(id);
257
+ },
258
+
259
+ users: async (_parent, { first = 10, after, filter, orderBy }, context: Context) => {
260
+ const result = await context.db.users.findMany({
261
+ take: first + 1,
262
+ cursor: after ? { id: after } : undefined,
263
+ where: buildWhereClause(filter),
264
+ orderBy: buildOrderBy(orderBy)
265
+ });
266
+
267
+ const hasNextPage = result.length > first;
268
+ const nodes = hasNextPage ? result.slice(0, -1) : result;
269
+
270
+ return {
271
+ edges: nodes.map(node => ({
272
+ cursor: node.id,
273
+ node
274
+ })),
275
+ pageInfo: {
276
+ hasNextPage,
277
+ hasPreviousPage: !!after,
278
+ startCursor: nodes[0]?.id,
279
+ endCursor: nodes[nodes.length - 1]?.id
280
+ },
281
+ totalCount: await context.db.users.count({ where: buildWhereClause(filter) })
282
+ };
283
+ }
284
+ },
285
+
286
+ Mutation: {
287
+ createUser: async (_parent, { input }, context: Context) => {
288
+ // Authorization check
289
+ if (!context.currentUser?.isAdmin) {
290
+ throw new Error('Unauthorized');
291
+ }
292
+
293
+ // Hash password
294
+ const hashedPassword = await bcrypt.hash(input.password, 10);
295
+
296
+ // Create user
297
+ const user = await context.db.users.create({
298
+ data: {
299
+ email: input.email,
300
+ username: input.username,
301
+ password: hashedPassword,
302
+ profile: input.profile ? {
303
+ create: input.profile
304
+ } : undefined
305
+ },
306
+ include: { profile: true }
307
+ });
308
+
309
+ return { user };
310
+ },
311
+
312
+ createPost: async (_parent, { input }, context: Context) => {
313
+ if (!context.currentUser) {
314
+ throw new Error('Authentication required');
315
+ }
316
+
317
+ const post = await context.db.posts.create({
318
+ data: {
319
+ title: input.title,
320
+ content: input.content,
321
+ authorId: context.currentUser.id,
322
+ tags: {
323
+ connectOrCreate: input.tags?.map(tag => ({
324
+ where: { name: tag },
325
+ create: { name: tag }
326
+ }))
327
+ }
328
+ },
329
+ include: { author: true, tags: true }
330
+ });
331
+
332
+ return { post };
333
+ }
334
+ },
335
+
336
+ Subscription: {
337
+ postPublished: {
338
+ subscribe: (_parent, _args, context: Context) => {
339
+ return context.pubsub.asyncIterator(['POST_PUBLISHED']);
340
+ }
341
+ },
342
+
343
+ commentAdded: {
344
+ subscribe: (_parent, { postId }, context: Context) => {
345
+ return context.pubsub.asyncIterator([`COMMENT_ADDED_${postId}`]);
346
+ }
347
+ }
348
+ },
349
+
350
+ // Field resolvers
351
+ User: {
352
+ posts: async (parent, { first = 10, after }, context: Context) => {
353
+ return context.db.posts.findMany({
354
+ where: { authorId: parent.id },
355
+ take: first + 1,
356
+ cursor: after ? { id: after } : undefined,
357
+ orderBy: { createdAt: 'desc' }
358
+ });
359
+ }
360
+ },
361
+
362
+ Post: {
363
+ author: async (parent, _args, context: Context) => {
364
+ // Use DataLoader to batch requests
365
+ return context.loaders.users.load(parent.authorId);
366
+ },
367
+
368
+ comments: async (parent, { first = 10, after }, context: Context) => {
369
+ return context.db.comments.findMany({
370
+ where: { postId: parent.id },
371
+ take: first + 1,
372
+ cursor: after ? { id: after } : undefined,
373
+ orderBy: { createdAt: 'asc' }
374
+ });
375
+ }
376
+ }
377
+ };
378
+
379
+ // Server setup
380
+ const schema = makeExecutableSchema({ typeDefs, resolvers });
381
+
382
+ const server = new ApolloServer<Context>({
383
+ schema,
384
+ plugins: [
385
+ // Enable query complexity analysis
386
+ ApolloServerPluginQueryComplexity({
387
+ maximumComplexity: 1000,
388
+ estimators: [
389
+ fieldExtensionsEstimator(),
390
+ simpleEstimator({ defaultComplexity: 1 })
391
+ ]
392
+ })
393
+ ]
394
+ });
395
+
396
+ const { url } = await startStandaloneServer(server, {
397
+ context: async ({ req }) => {
398
+ const token = req.headers.authorization?.replace('Bearer ', '');
399
+ const currentUser = token ? await verifyToken(token) : undefined;
400
+
401
+ return {
402
+ db,
403
+ loaders: createLoaders(db),
404
+ currentUser,
405
+ pubsub
406
+ };
407
+ },
408
+ listen: { port: 4000 }
409
+ });
410
+ ```
411
+
412
+ ### Apollo Federation
413
+
414
+ #### Subgraph Schema (Users Service)
415
+ ```graphql
416
+ extend schema
417
+ @link(url: "https://specs.apollo.dev/federation/v2.0",
418
+ import: ["@key", "@shareable", "@external"])
419
+
420
+ type User @key(fields: "id") {
421
+ id: ID!
422
+ email: String!
423
+ username: String!
424
+ profile: UserProfile
425
+ }
426
+
427
+ type UserProfile {
428
+ firstName: String
429
+ lastName: String
430
+ avatarUrl: String
431
+ }
432
+ ```
433
+
434
+ #### Subgraph Schema (Posts Service)
435
+ ```graphql
436
+ extend schema
437
+ @link(url: "https://specs.apollo.dev/federation/v2.0",
438
+ import: ["@key", "@shareable", "@external"])
439
+
440
+ type User @key(fields: "id") {
441
+ id: ID! @external
442
+ posts: [Post!]!
443
+ }
444
+
445
+ type Post @key(fields: "id") {
446
+ id: ID!
447
+ title: String!
448
+ content: String!
449
+ authorId: ID!
450
+ author: User!
451
+ }
452
+ ```
453
+
454
+ #### Federation Resolvers
455
+ ```typescript
456
+ // Users service
457
+ const resolvers = {
458
+ User: {
459
+ __resolveReference: async (reference, context) => {
460
+ return context.loaders.users.load(reference.id);
461
+ }
462
+ }
463
+ };
464
+
465
+ // Posts service
466
+ const resolvers = {
467
+ User: {
468
+ posts: async (user, _args, context) => {
469
+ return context.db.posts.findMany({
470
+ where: { authorId: user.id }
471
+ });
472
+ }
473
+ },
474
+
475
+ Post: {
476
+ __resolveReference: async (reference, context) => {
477
+ return context.loaders.posts.load(reference.id);
478
+ },
479
+
480
+ author: (post) => ({ __typename: 'User', id: post.authorId })
481
+ }
482
+ };
483
+ ```
484
+
485
+ ### Performance Optimization
486
+
487
+ #### Query Complexity Limits
488
+ ```typescript
489
+ import { directiveEstimator, simpleEstimator } from 'graphql-query-complexity';
490
+
491
+ const server = new ApolloServer({
492
+ schema,
493
+ plugins: [
494
+ {
495
+ requestDidStart: () => ({
496
+ async didResolveOperation({ request, document }) {
497
+ const complexity = getComplexity({
498
+ schema,
499
+ operationName: request.operationName,
500
+ query: document,
501
+ variables: request.variables,
502
+ estimators: [
503
+ directiveEstimator({ name: 'complexity' }),
504
+ simpleEstimator({ defaultComplexity: 1 })
505
+ ]
506
+ });
507
+
508
+ if (complexity > 1000) {
509
+ throw new Error(`Query too complex: ${complexity}. Maximum: 1000`);
510
+ }
511
+ }
512
+ })
513
+ }
514
+ ]
515
+ });
516
+ ```
517
+
518
+ #### Persisted Queries
519
+ ```typescript
520
+ import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries';
521
+
522
+ const link = createPersistedQueryLink({ sha256 }).concat(httpLink);
523
+
524
+ const client = new ApolloClient({
525
+ link,
526
+ cache: new InMemoryCache()
527
+ });
528
+ ```
529
+
530
+ ## Security Best Practices
531
+
532
+ ### Authentication
533
+ - Use JWT tokens in Authorization header
534
+ - Validate tokens in context creation
535
+ - Refresh tokens before expiry
536
+
537
+ ### Authorization
538
+ - Field-level authorization with directives
539
+ - Check permissions in resolvers
540
+ - Use context for current user access
541
+
542
+ ### Rate Limiting
543
+ ```typescript
544
+ import rateLimit from 'graphql-rate-limit';
545
+
546
+ const rateLimitDirective = rateLimit({
547
+ identifyContext: (ctx) => ctx.currentUser?.id || ctx.ip
548
+ });
549
+
550
+ // Schema directive
551
+ directive @rateLimit(
552
+ max: Int
553
+ window: String
554
+ message: String
555
+ ) on FIELD_DEFINITION
556
+
557
+ type Query {
558
+ expensiveQuery: Result @rateLimit(max: 10, window: "1m")
559
+ }
560
+ ```
561
+
562
+ ## Testing
563
+
564
+ ### Unit Tests
565
+ ```typescript
566
+ import { graphql } from 'graphql';
567
+
568
+ describe('User resolvers', () => {
569
+ it('should fetch user by ID', async () => {
570
+ const query = `
571
+ query GetUser($id: ID!) {
572
+ user(id: $id) {
573
+ id
574
+ username
575
+ }
576
+ }
577
+ `;
578
+
579
+ const result = await graphql({
580
+ schema,
581
+ source: query,
582
+ variableValues: { id: '1' },
583
+ contextValue: { db: mockDb, loaders: mockLoaders }
584
+ });
585
+
586
+ expect(result.data?.user).toEqual({
587
+ id: '1',
588
+ username: 'testuser'
589
+ });
590
+ });
591
+ });
592
+ ```
593
+
594
+ ## Deliverables
595
+
596
+ 1. **GraphQL Schema**: Type definitions with queries, mutations, subscriptions
597
+ 2. **Resolvers**: Efficient resolver implementations with DataLoader
598
+ 3. **Federation Config**: Subgraph schemas and gateway configuration
599
+ 4. **Documentation**: API docs with example queries
600
+ 5. **Tests**: Unit and integration tests for resolvers
601
+
602
+ ## Confidence Reporting
603
+
604
+ ✅ Report high confidence when:
605
+ - Schema validated with GraphQL tools
606
+ - Resolvers tested with DataLoader batching
607
+ - N+1 queries prevented
608
+ - Query complexity limits configured
609
+ - Authentication/authorization implemented
610
+
611
+ ❌ DO NOT report >0.80 confidence without:
612
+ - Testing queries with realistic data volume
613
+ - Verifying DataLoader batching effectiveness
614
+ - Testing federation if using Apollo Federation
615
+ - Security review of authorization logic