@diottodev/runic 1.0.0 → 1.1.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 (1444) hide show
  1. package/ai-research/.claude-plugin/plugin.json +16 -0
  2. package/ai-research/CLAUDE.md +17 -0
  3. package/ai-research/benchmark-analyzer/SKILL.md +106 -0
  4. package/ai-research/model-eval/SKILL.md +146 -0
  5. package/ai-security/.claude-plugin/plugin.json +15 -0
  6. package/ai-security/CLAUDE.md +16 -0
  7. package/ai-security/prompt-injection/SKILL.md +169 -0
  8. package/business/business-growth-skills/SKILL.md +56 -0
  9. package/business/business-operations-skills/SKILL.md +144 -0
  10. package/business/capacity-planner/SKILL.md +252 -0
  11. package/business/contract-and-proposal-writer/SKILL.md +423 -0
  12. package/business/customer-success-manager/SKILL.md +215 -0
  13. package/business/internal-comms/SKILL.md +125 -0
  14. package/business/knowledge-ops/SKILL.md +120 -0
  15. package/business/process-mapper/SKILL.md +102 -0
  16. package/business/procurement-optimizer/SKILL.md +167 -0
  17. package/business/revenue-operations/SKILL.md +273 -0
  18. package/business/sales-engineer/SKILL.md +225 -0
  19. package/business/vendor-management/SKILL.md +170 -0
  20. package/c-level/agent-protocol/SKILL.md +418 -0
  21. package/c-level/board-deck-builder/SKILL.md +183 -0
  22. package/c-level/board-meeting/SKILL.md +146 -0
  23. package/c-level/board-prep/SKILL.md +156 -0
  24. package/c-level/boardroom/SKILL.md +134 -0
  25. package/c-level/brief/SKILL.md +113 -0
  26. package/c-level/c-level-agents/SKILL.md +115 -0
  27. package/c-level/c-level-skills/SKILL.md +153 -0
  28. package/c-level/caio-review/SKILL.md +140 -0
  29. package/c-level/cco-review/SKILL.md +130 -0
  30. package/c-level/cdo-review/SKILL.md +126 -0
  31. package/c-level/ceo-advisor/SKILL.md +169 -0
  32. package/c-level/cfo-advisor/SKILL.md +140 -0
  33. package/c-level/cfo-review/SKILL.md +105 -0
  34. package/c-level/challenge/SKILL.md +181 -0
  35. package/c-level/change-management/SKILL.md +253 -0
  36. package/c-level/chief-ai-officer-advisor/SKILL.md +236 -0
  37. package/c-level/chief-customer-officer-advisor/SKILL.md +210 -0
  38. package/c-level/chief-data-officer-advisor/SKILL.md +205 -0
  39. package/c-level/chief-of-staff/SKILL.md +179 -0
  40. package/c-level/chro-advisor/SKILL.md +144 -0
  41. package/c-level/ciso-advisor/SKILL.md +135 -0
  42. package/c-level/ciso-review/SKILL.md +113 -0
  43. package/c-level/cmo-advisor/SKILL.md +169 -0
  44. package/c-level/cmo-review/SKILL.md +101 -0
  45. package/c-level/company-os/SKILL.md +236 -0
  46. package/c-level/competitive-intel/SKILL.md +203 -0
  47. package/c-level/context-engine/SKILL.md +134 -0
  48. package/c-level/coo-advisor/SKILL.md +137 -0
  49. package/c-level/cpo-advisor/SKILL.md +200 -0
  50. package/c-level/cpo-review/SKILL.md +110 -0
  51. package/c-level/cro-advisor/SKILL.md +183 -0
  52. package/c-level/cro-review/SKILL.md +110 -0
  53. package/c-level/cross-eval/SKILL.md +115 -0
  54. package/c-level/cs-onboard/SKILL.md +108 -0
  55. package/c-level/cto-advisor/SKILL.md +257 -0
  56. package/c-level/cto-review/SKILL.md +117 -0
  57. package/c-level/culture-architect/SKILL.md +167 -0
  58. package/c-level/decide/SKILL.md +104 -0
  59. package/c-level/decision-logger/SKILL.md +149 -0
  60. package/c-level/execute/SKILL.md +99 -0
  61. package/c-level/executive-mentor/SKILL.md +142 -0
  62. package/c-level/founder-coach/SKILL.md +300 -0
  63. package/c-level/founder-mode/SKILL.md +101 -0
  64. package/c-level/freeze/SKILL.md +101 -0
  65. package/c-level/gc-review/SKILL.md +132 -0
  66. package/c-level/general-counsel-advisor/SKILL.md +161 -0
  67. package/c-level/hard-call/SKILL.md +157 -0
  68. package/c-level/internal-narrative/SKILL.md +197 -0
  69. package/c-level/intl-expansion/SKILL.md +105 -0
  70. package/c-level/ma-playbook/SKILL.md +98 -0
  71. package/c-level/office-hours/SKILL.md +114 -0
  72. package/c-level/onboard/SKILL.md +124 -0
  73. package/c-level/org-health-diagnostic/SKILL.md +185 -0
  74. package/c-level/post-mortem/SKILL.md +115 -0
  75. package/c-level/postmortem/SKILL.md +193 -0
  76. package/c-level/scenario-war-room/SKILL.md +224 -0
  77. package/c-level/strategic-alignment/SKILL.md +194 -0
  78. package/c-level/stress-test/SKILL.md +204 -0
  79. package/c-level/vpe-advisor/SKILL.md +230 -0
  80. package/c-level/vpe-review/SKILL.md +129 -0
  81. package/commercial/channel-economics/SKILL.md +149 -0
  82. package/commercial/commercial-forecaster/SKILL.md +151 -0
  83. package/commercial/commercial-policy/SKILL.md +150 -0
  84. package/commercial/commercial-skills/SKILL.md +145 -0
  85. package/commercial/deal-desk/SKILL.md +138 -0
  86. package/commercial/partnerships-architect/SKILL.md +202 -0
  87. package/commercial/pricing-strategist/SKILL.md +130 -0
  88. package/commercial/rfp-responder/SKILL.md +154 -0
  89. package/compliance/ai-act-readiness/SKILL.md +149 -0
  90. package/compliance/aims-audit/SKILL.md +132 -0
  91. package/compliance/capa-officer/SKILL.md +434 -0
  92. package/compliance/compliance-os/SKILL.md +211 -0
  93. package/compliance/compliance-readiness/SKILL.md +136 -0
  94. package/compliance/eu-ai-act-specialist/SKILL.md +204 -0
  95. package/compliance/fda-consultant-specialist/SKILL.md +307 -0
  96. package/compliance/fda-qsr-audit-prep/SKILL.md +156 -0
  97. package/compliance/gdpr-audit-prep/SKILL.md +165 -0
  98. package/compliance/gdpr-dsgvo-expert/SKILL.md +266 -0
  99. package/compliance/information-security-manager-iso27001/SKILL.md +419 -0
  100. package/compliance/isms-audit-expert/SKILL.md +234 -0
  101. package/compliance/iso13485-audit-prep/SKILL.md +157 -0
  102. package/compliance/iso27001-audit-prep/SKILL.md +138 -0
  103. package/compliance/iso42001-specialist/SKILL.md +195 -0
  104. package/compliance/mdr-745-specialist/SKILL.md +335 -0
  105. package/compliance/qms-audit-expert/SKILL.md +323 -0
  106. package/compliance/quality-documentation-manager/SKILL.md +437 -0
  107. package/compliance/quality-manager-qmr/SKILL.md +488 -0
  108. package/compliance/quality-manager-qms-iso13485/SKILL.md +435 -0
  109. package/compliance/ra-qm-skills/SKILL.md +66 -0
  110. package/compliance/regulatory-affairs-head/SKILL.md +481 -0
  111. package/compliance/risk-management-specialist/SKILL.md +451 -0
  112. package/compliance/soc2-audit-prep/SKILL.md +152 -0
  113. package/compliance/soc2-compliance/SKILL.md +417 -0
  114. package/content/design-system/SKILL.md +156 -0
  115. package/content/markdown-html-orchestrator/SKILL.md +152 -0
  116. package/content/md-document/SKILL.md +105 -0
  117. package/content/md-review/SKILL.md +97 -0
  118. package/content/md-slides/SKILL.md +102 -0
  119. package/dist/index.js +62 -2
  120. package/engineering/.claude-plugin/plugin.json +24 -0
  121. package/engineering/CLAUDE.md +28 -0
  122. package/engineering/agent-designer/SKILL.md +159 -0
  123. package/engineering/agenthub/.claude-plugin/plugin.json +15 -0
  124. package/engineering/agenthub/CLAUDE.md +59 -0
  125. package/engineering/agenthub/README.md +268 -0
  126. package/engineering/agenthub/agents/hub-coordinator.md +99 -0
  127. package/engineering/agenthub/settings.json +24 -0
  128. package/engineering/agenthub/skills/agenthub/SKILL.md +257 -0
  129. package/engineering/agenthub/skills/agenthub/references/agent-templates.md +187 -0
  130. package/engineering/agenthub/skills/agenthub/references/coordination-strategies.md +186 -0
  131. package/engineering/agenthub/skills/agenthub/references/dag-patterns.md +149 -0
  132. package/engineering/agenthub/skills/agenthub/scripts/board_manager.py +266 -0
  133. package/engineering/agenthub/skills/agenthub/scripts/dag_analyzer.py +275 -0
  134. package/engineering/agenthub/skills/agenthub/scripts/dry_run.py +318 -0
  135. package/engineering/agenthub/skills/agenthub/scripts/hub_init.py +253 -0
  136. package/engineering/agenthub/skills/agenthub/scripts/result_ranker.py +315 -0
  137. package/engineering/agenthub/skills/agenthub/scripts/session_manager.py +302 -0
  138. package/engineering/agenthub/skills/board/SKILL.md +106 -0
  139. package/engineering/agenthub/skills/eval/SKILL.md +80 -0
  140. package/engineering/agenthub/skills/init/SKILL.md +89 -0
  141. package/engineering/agenthub/skills/merge/SKILL.md +94 -0
  142. package/engineering/agenthub/skills/run/SKILL.md +110 -0
  143. package/engineering/agenthub/skills/spawn/SKILL.md +83 -0
  144. package/engineering/agenthub/skills/status/SKILL.md +78 -0
  145. package/engineering/autoresearch-agent/.claude-plugin/plugin.json +15 -0
  146. package/engineering/autoresearch-agent/CLAUDE.md +66 -0
  147. package/engineering/autoresearch-agent/agents/experiment-runner.md +87 -0
  148. package/engineering/autoresearch-agent/evaluators/benchmark_size.py +60 -0
  149. package/engineering/autoresearch-agent/evaluators/benchmark_speed.py +40 -0
  150. package/engineering/autoresearch-agent/evaluators/build_speed.py +39 -0
  151. package/engineering/autoresearch-agent/evaluators/llm_judge_content.py +77 -0
  152. package/engineering/autoresearch-agent/evaluators/llm_judge_copy.py +113 -0
  153. package/engineering/autoresearch-agent/evaluators/llm_judge_prompt.py +108 -0
  154. package/engineering/autoresearch-agent/evaluators/memory_usage.py +53 -0
  155. package/engineering/autoresearch-agent/evaluators/test_pass_rate.py +55 -0
  156. package/engineering/autoresearch-agent/settings.json +22 -0
  157. package/engineering/autoresearch-agent/skills/autoresearch-agent/SKILL.md +308 -0
  158. package/engineering/autoresearch-agent/skills/autoresearch-agent/references/experiment-domains.md +255 -0
  159. package/engineering/autoresearch-agent/skills/autoresearch-agent/references/program-template.md +170 -0
  160. package/engineering/autoresearch-agent/skills/autoresearch-agent/scripts/log_results.py +393 -0
  161. package/engineering/autoresearch-agent/skills/autoresearch-agent/scripts/run_experiment.py +280 -0
  162. package/engineering/autoresearch-agent/skills/autoresearch-agent/scripts/setup_experiment.py +383 -0
  163. package/engineering/autoresearch-agent/skills/loop/SKILL.md +122 -0
  164. package/engineering/autoresearch-agent/skills/resume/SKILL.md +77 -0
  165. package/engineering/autoresearch-agent/skills/run/SKILL.md +84 -0
  166. package/engineering/autoresearch-agent/skills/setup/SKILL.md +77 -0
  167. package/engineering/autoresearch-agent/skills/status/SKILL.md +71 -0
  168. package/engineering/behuman/.claude-plugin/plugin.json +15 -0
  169. package/engineering/behuman/evals.json +42 -0
  170. package/engineering/behuman/skills/behuman/SKILL.md +193 -0
  171. package/engineering/behuman/skills/behuman/references/api-integration.md +100 -0
  172. package/engineering/caveman/.claude-plugin/plugin.json +21 -0
  173. package/engineering/caveman/README.md +35 -0
  174. package/engineering/caveman/agents/cs-caveman-mode.md +121 -0
  175. package/engineering/caveman/commands/cs-caveman.md +68 -0
  176. package/engineering/caveman/skills/caveman/SKILL.md +69 -0
  177. package/engineering/caveman/skills/caveman/references/companion_tooling.md +66 -0
  178. package/engineering/caveman/skills/caveman/references/compression_principles.md +112 -0
  179. package/engineering/caveman/skills/caveman/references/when_caveman_backfires.md +155 -0
  180. package/engineering/caveman/skills/caveman/scripts/caveman_compressor.py +248 -0
  181. package/engineering/caveman/skills/caveman/scripts/caveman_lint.py +191 -0
  182. package/engineering/caveman/skills/caveman/scripts/token_savings_estimator.py +137 -0
  183. package/engineering/chaos-engineering/.claude-plugin/plugin.json +15 -0
  184. package/engineering/chaos-engineering/README.md +107 -0
  185. package/engineering/chaos-engineering/skills/chaos-engineering/SKILL.md +231 -0
  186. package/engineering/chaos-engineering/skills/chaos-engineering/assets/experiment_template.md +76 -0
  187. package/engineering/chaos-engineering/skills/chaos-engineering/assets/postmortem_template.md +67 -0
  188. package/engineering/chaos-engineering/skills/chaos-engineering/references/attack_taxonomy.md +180 -0
  189. package/engineering/chaos-engineering/skills/chaos-engineering/references/chaos_principles.md +136 -0
  190. package/engineering/chaos-engineering/skills/chaos-engineering/references/experiment_design.md +158 -0
  191. package/engineering/chaos-engineering/skills/chaos-engineering/references/tooling_landscape.md +197 -0
  192. package/engineering/chaos-engineering/skills/chaos-engineering/scripts/blast_radius_calculator.py +101 -0
  193. package/engineering/chaos-engineering/skills/chaos-engineering/scripts/experiment_designer.py +139 -0
  194. package/engineering/chaos-engineering/skills/chaos-engineering/scripts/experiment_postmortem.py +144 -0
  195. package/engineering/claude-coach/.claude-plugin/plugin.json +15 -0
  196. package/engineering/claude-coach/README.md +39 -0
  197. package/engineering/claude-coach/agents/cs-claude-coach.md +50 -0
  198. package/engineering/claude-coach/commands/cs-claude-coach.md +32 -0
  199. package/engineering/claude-coach/skills/claude-coach/README.md +14 -0
  200. package/engineering/claude-coach/skills/claude-coach/SKILL.md +205 -0
  201. package/engineering/claude-coach/skills/claude-coach/references/cheat-codes.md +105 -0
  202. package/engineering/claude-coach/skills/claude-coach/references/coaching-rules.md +44 -0
  203. package/engineering/claude-coach/skills/claude-coach/scripts/cheat_code_filter.py +163 -0
  204. package/engineering/claude-coach/skills/claude-coach/scripts/coach_tip_classifier.py +205 -0
  205. package/engineering/claude-coach/skills/claude-coach/scripts/prompt_rater.py +176 -0
  206. package/engineering/code-review/SKILL.md +116 -0
  207. package/engineering/code-tour/.claude-plugin/plugin.json +15 -0
  208. package/engineering/code-tour/evals.json +32 -0
  209. package/engineering/code-tour/skills/code-tour/SKILL.md +140 -0
  210. package/engineering/data-quality-auditor/.claude-plugin/plugin.json +15 -0
  211. package/engineering/data-quality-auditor/skills/data-quality-auditor/SKILL.md +219 -0
  212. package/engineering/data-quality-auditor/skills/data-quality-auditor/references/data-quality-concepts.md +106 -0
  213. package/engineering/data-quality-auditor/skills/data-quality-auditor/scripts/data_profiler.py +258 -0
  214. package/engineering/data-quality-auditor/skills/data-quality-auditor/scripts/missing_value_analyzer.py +242 -0
  215. package/engineering/data-quality-auditor/skills/data-quality-auditor/scripts/outlier_detector.py +263 -0
  216. package/engineering/debug-error/SKILL.md +118 -0
  217. package/engineering/demo-video/.claude-plugin/plugin.json +15 -0
  218. package/engineering/demo-video/evals.json +26 -0
  219. package/engineering/demo-video/skills/demo-video/SKILL.md +110 -0
  220. package/engineering/demo-video/skills/demo-video/references/scene-design-system.md +61 -0
  221. package/engineering/docker-development/.claude-plugin/plugin.json +15 -0
  222. package/engineering/docker-development/skills/docker-development/SKILL.md +366 -0
  223. package/engineering/docker-development/skills/docker-development/references/compose-patterns.md +282 -0
  224. package/engineering/docker-development/skills/docker-development/references/dockerfile-best-practices.md +235 -0
  225. package/engineering/docker-development/skills/docker-development/scripts/compose_validator.py +390 -0
  226. package/engineering/docker-development/skills/docker-development/scripts/dockerfile_analyzer.py +410 -0
  227. package/engineering/explain-code/SKILL.md +100 -0
  228. package/engineering/feature-flags-architect/.claude-plugin/plugin.json +15 -0
  229. package/engineering/feature-flags-architect/README.md +94 -0
  230. package/engineering/feature-flags-architect/skills/feature-flags-architect/SKILL.md +219 -0
  231. package/engineering/feature-flags-architect/skills/feature-flags-architect/assets/flag_request_template.md +65 -0
  232. package/engineering/feature-flags-architect/skills/feature-flags-architect/references/flag_lifecycle.md +171 -0
  233. package/engineering/feature-flags-architect/skills/feature-flags-architect/references/flag_taxonomy.md +125 -0
  234. package/engineering/feature-flags-architect/skills/feature-flags-architect/references/provider_comparison.md +159 -0
  235. package/engineering/feature-flags-architect/skills/feature-flags-architect/references/rollout_strategies.md +140 -0
  236. package/engineering/feature-flags-architect/skills/feature-flags-architect/scripts/flag_debt_scanner.py +140 -0
  237. package/engineering/feature-flags-architect/skills/feature-flags-architect/scripts/kill_switch_audit.py +146 -0
  238. package/engineering/feature-flags-architect/skills/feature-flags-architect/scripts/rollout_planner.py +123 -0
  239. package/engineering/generate-tests/SKILL.md +142 -0
  240. package/engineering/git-commit/SKILL.md +130 -0
  241. package/engineering/grill-me/.claude-plugin/plugin.json +21 -0
  242. package/engineering/grill-me/README.md +37 -0
  243. package/engineering/grill-me/agents/cs-grill-master.md +170 -0
  244. package/engineering/grill-me/commands/cs-grill-me.md +84 -0
  245. package/engineering/grill-me/skills/grill-me/SKILL.md +58 -0
  246. package/engineering/grill-me/skills/grill-me/references/companion_tooling.md +65 -0
  247. package/engineering/grill-me/skills/grill-me/references/forcing_question_patterns.md +152 -0
  248. package/engineering/grill-me/skills/grill-me/references/when_to_stop_grilling.md +142 -0
  249. package/engineering/grill-me/skills/grill-me/scripts/decision_tree_extractor.py +149 -0
  250. package/engineering/grill-me/skills/grill-me/scripts/grill_session_tracker.py +264 -0
  251. package/engineering/grill-me/skills/grill-me/scripts/question_generator.py +142 -0
  252. package/engineering/grill-with-docs/.claude-plugin/plugin.json +21 -0
  253. package/engineering/grill-with-docs/README.md +53 -0
  254. package/engineering/grill-with-docs/agents/cs-grill-with-docs.md +200 -0
  255. package/engineering/grill-with-docs/commands/cs-grill-with-docs.md +100 -0
  256. package/engineering/grill-with-docs/skills/grill-with-docs/ADR-FORMAT.md +53 -0
  257. package/engineering/grill-with-docs/skills/grill-with-docs/CONTEXT-FORMAT.md +83 -0
  258. package/engineering/grill-with-docs/skills/grill-with-docs/SKILL.md +143 -0
  259. package/engineering/grill-with-docs/skills/grill-with-docs/references/adr_practice.md +111 -0
  260. package/engineering/grill-with-docs/skills/grill-with-docs/references/context_md_as_artifact.md +105 -0
  261. package/engineering/grill-with-docs/skills/grill-with-docs/references/ubiquitous_language.md +66 -0
  262. package/engineering/grill-with-docs/skills/grill-with-docs/scripts/adr_scanner.py +241 -0
  263. package/engineering/grill-with-docs/skills/grill-with-docs/scripts/context_md_linter.py +272 -0
  264. package/engineering/grill-with-docs/skills/grill-with-docs/scripts/glossary_code_consistency.py +301 -0
  265. package/engineering/handoff/.claude-plugin/plugin.json +21 -0
  266. package/engineering/handoff/README.md +37 -0
  267. package/engineering/handoff/agents/cs-handoff-author.md +177 -0
  268. package/engineering/handoff/commands/cs-handoff.md +80 -0
  269. package/engineering/handoff/skills/handoff/SKILL.md +41 -0
  270. package/engineering/handoff/skills/handoff/references/companion_tooling.md +56 -0
  271. package/engineering/handoff/skills/handoff/references/deduplication_discipline.md +196 -0
  272. package/engineering/handoff/skills/handoff/references/handoff_structure.md +163 -0
  273. package/engineering/handoff/skills/handoff/references/next_session_skill_matching.md +121 -0
  274. package/engineering/handoff/skills/handoff/scripts/artifact_deduplicator.py +244 -0
  275. package/engineering/handoff/skills/handoff/scripts/handoff_template_generator.py +217 -0
  276. package/engineering/handoff/skills/handoff/scripts/skill_recommender.py +185 -0
  277. package/engineering/helm-chart-builder/.claude-plugin/plugin.json +15 -0
  278. package/engineering/helm-chart-builder/skills/helm-chart-builder/SKILL.md +449 -0
  279. package/engineering/helm-chart-builder/skills/helm-chart-builder/references/chart-patterns.md +435 -0
  280. package/engineering/helm-chart-builder/skills/helm-chart-builder/references/values-design.md +462 -0
  281. package/engineering/helm-chart-builder/skills/helm-chart-builder/scripts/chart_analyzer.py +542 -0
  282. package/engineering/helm-chart-builder/skills/helm-chart-builder/scripts/values_validator.py +442 -0
  283. package/engineering/karpathy-coder/.claude-plugin/plugin.json +15 -0
  284. package/engineering/karpathy-coder/README.md +104 -0
  285. package/engineering/karpathy-coder/agents/karpathy-reviewer.md +84 -0
  286. package/engineering/karpathy-coder/commands/karpathy-check.md +46 -0
  287. package/engineering/karpathy-coder/hooks/karpathy-gate.sh +48 -0
  288. package/engineering/karpathy-coder/skills/karpathy-coder/SKILL.md +131 -0
  289. package/engineering/karpathy-coder/skills/karpathy-coder/expected_outputs/assumption_linter.json +34 -0
  290. package/engineering/karpathy-coder/skills/karpathy-coder/expected_outputs/complexity_checker.json +28 -0
  291. package/engineering/karpathy-coder/skills/karpathy-coder/expected_outputs/diff_surgeon.json +9 -0
  292. package/engineering/karpathy-coder/skills/karpathy-coder/expected_outputs/goal_verifier.json +20 -0
  293. package/engineering/karpathy-coder/skills/karpathy-coder/references/anti-patterns.md +168 -0
  294. package/engineering/karpathy-coder/skills/karpathy-coder/references/enforcement-patterns.md +128 -0
  295. package/engineering/karpathy-coder/skills/karpathy-coder/references/karpathy-principles.md +67 -0
  296. package/engineering/karpathy-coder/skills/karpathy-coder/scripts/assumption_linter.py +170 -0
  297. package/engineering/karpathy-coder/skills/karpathy-coder/scripts/complexity_checker.py +317 -0
  298. package/engineering/karpathy-coder/skills/karpathy-coder/scripts/diff_surgeon.py +217 -0
  299. package/engineering/karpathy-coder/skills/karpathy-coder/scripts/goal_verifier.py +207 -0
  300. package/engineering/kubernetes-operator/.claude-plugin/plugin.json +15 -0
  301. package/engineering/kubernetes-operator/README.md +83 -0
  302. package/engineering/kubernetes-operator/skills/kubernetes-operator/SKILL.md +242 -0
  303. package/engineering/kubernetes-operator/skills/kubernetes-operator/assets/crd_template.yaml +71 -0
  304. package/engineering/kubernetes-operator/skills/kubernetes-operator/assets/reconcile_skeleton.go +122 -0
  305. package/engineering/kubernetes-operator/skills/kubernetes-operator/references/crd_design.md +196 -0
  306. package/engineering/kubernetes-operator/skills/kubernetes-operator/references/operator_pattern.md +152 -0
  307. package/engineering/kubernetes-operator/skills/kubernetes-operator/references/reconcile_loop.md +210 -0
  308. package/engineering/kubernetes-operator/skills/kubernetes-operator/references/tooling_landscape.md +217 -0
  309. package/engineering/kubernetes-operator/skills/kubernetes-operator/scripts/crd_validator.py +134 -0
  310. package/engineering/kubernetes-operator/skills/kubernetes-operator/scripts/operator_capability_audit.py +150 -0
  311. package/engineering/kubernetes-operator/skills/kubernetes-operator/scripts/reconcile_lint.py +177 -0
  312. package/engineering/llm-cost-optimizer/SKILL.md +131 -0
  313. package/engineering/llm-wiki/.claude-plugin/plugin.json +15 -0
  314. package/engineering/llm-wiki/README.md +114 -0
  315. package/engineering/llm-wiki/agents/wiki-ingestor.md +89 -0
  316. package/engineering/llm-wiki/agents/wiki-librarian.md +83 -0
  317. package/engineering/llm-wiki/agents/wiki-linter.md +104 -0
  318. package/engineering/llm-wiki/commands/wiki-ingest.md +52 -0
  319. package/engineering/llm-wiki/commands/wiki-init.md +60 -0
  320. package/engineering/llm-wiki/commands/wiki-lint.md +83 -0
  321. package/engineering/llm-wiki/commands/wiki-log.md +64 -0
  322. package/engineering/llm-wiki/commands/wiki-query.md +58 -0
  323. package/engineering/llm-wiki/skills/llm-wiki/SKILL.md +178 -0
  324. package/engineering/llm-wiki/skills/llm-wiki/assets/AGENTS.md.template +140 -0
  325. package/engineering/llm-wiki/skills/llm-wiki/assets/CLAUDE.md.template +133 -0
  326. package/engineering/llm-wiki/skills/llm-wiki/assets/cursorrules.template +30 -0
  327. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/README.md +35 -0
  328. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/wiki/concepts/sparse-autoencoder.md +33 -0
  329. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/wiki/entities/anthropic.md +31 -0
  330. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/wiki/index.md +18 -0
  331. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/wiki/log.md +11 -0
  332. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/wiki/sources/monosemanticity.md +41 -0
  333. package/engineering/llm-wiki/skills/llm-wiki/assets/example-vault/wiki/synthesis/interpretability-overview.md +32 -0
  334. package/engineering/llm-wiki/skills/llm-wiki/assets/index.md.template +32 -0
  335. package/engineering/llm-wiki/skills/llm-wiki/assets/log.md.template +12 -0
  336. package/engineering/llm-wiki/skills/llm-wiki/assets/page-templates/comparison.md +39 -0
  337. package/engineering/llm-wiki/skills/llm-wiki/assets/page-templates/concept.md +31 -0
  338. package/engineering/llm-wiki/skills/llm-wiki/assets/page-templates/entity.md +31 -0
  339. package/engineering/llm-wiki/skills/llm-wiki/assets/page-templates/source-summary.md +41 -0
  340. package/engineering/llm-wiki/skills/llm-wiki/assets/page-templates/synthesis.md +38 -0
  341. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/README.md +19 -0
  342. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/append_log.json +9 -0
  343. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/export_marp.json +9 -0
  344. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/graph_analyzer.json +18 -0
  345. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/ingest_source.json +12 -0
  346. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/init_vault.json +26 -0
  347. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/lint_wiki.json +10 -0
  348. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/update_index.json +11 -0
  349. package/engineering/llm-wiki/skills/llm-wiki/expected_outputs/wiki_search.json +10 -0
  350. package/engineering/llm-wiki/skills/llm-wiki/references/cross-tool-setup.md +108 -0
  351. package/engineering/llm-wiki/skills/llm-wiki/references/ingest-workflow.md +97 -0
  352. package/engineering/llm-wiki/skills/llm-wiki/references/lint-workflow.md +91 -0
  353. package/engineering/llm-wiki/skills/llm-wiki/references/memex-principles.md +78 -0
  354. package/engineering/llm-wiki/skills/llm-wiki/references/obsidian-setup.md +85 -0
  355. package/engineering/llm-wiki/skills/llm-wiki/references/page-formats.md +194 -0
  356. package/engineering/llm-wiki/skills/llm-wiki/references/query-workflow.md +76 -0
  357. package/engineering/llm-wiki/skills/llm-wiki/references/wiki-schema.md +98 -0
  358. package/engineering/llm-wiki/skills/llm-wiki/scripts/append_log.py +134 -0
  359. package/engineering/llm-wiki/skills/llm-wiki/scripts/export_marp.py +146 -0
  360. package/engineering/llm-wiki/skills/llm-wiki/scripts/graph_analyzer.py +142 -0
  361. package/engineering/llm-wiki/skills/llm-wiki/scripts/ingest_source.py +177 -0
  362. package/engineering/llm-wiki/skills/llm-wiki/scripts/init_vault.py +219 -0
  363. package/engineering/llm-wiki/skills/llm-wiki/scripts/lint_wiki.py +202 -0
  364. package/engineering/llm-wiki/skills/llm-wiki/scripts/update_index.py +204 -0
  365. package/engineering/llm-wiki/skills/llm-wiki/scripts/wiki_search.py +145 -0
  366. package/engineering/prompt-engineering/SKILL.md +128 -0
  367. package/engineering/prompt-governance/.claude-plugin/plugin.json +15 -0
  368. package/engineering/prompt-governance/skills/prompt-governance/SKILL.md +224 -0
  369. package/engineering/refactor/SKILL.md +129 -0
  370. package/engineering/security-guidance/.claude-plugin/plugin.json +19 -0
  371. package/engineering/security-guidance/hooks/hooks.json +16 -0
  372. package/engineering/security-guidance/hooks/security_reminder_hook.py +291 -0
  373. package/engineering/security-guidance/skills/security-guidance/SKILL.md +160 -0
  374. package/engineering/security-guidance/skills/security-guidance/references/pretooluse_hook_canon.md +141 -0
  375. package/engineering/skills/agent-designer/README.md +430 -0
  376. package/engineering/skills/agent-designer/SKILL.md +279 -0
  377. package/engineering/skills/agent-designer/agent_evaluator.py +1223 -0
  378. package/engineering/skills/agent-designer/agent_planner.py +911 -0
  379. package/engineering/skills/agent-designer/assets/sample_execution_logs.json +543 -0
  380. package/engineering/skills/agent-designer/assets/sample_system_requirements.json +57 -0
  381. package/engineering/skills/agent-designer/assets/sample_tool_descriptions.json +545 -0
  382. package/engineering/skills/agent-designer/expected_outputs/sample_agent_architecture.json +488 -0
  383. package/engineering/skills/agent-designer/expected_outputs/sample_evaluation_report.json +570 -0
  384. package/engineering/skills/agent-designer/expected_outputs/sample_tool_schemas.json +416 -0
  385. package/engineering/skills/agent-designer/references/agent_architecture_patterns.md +445 -0
  386. package/engineering/skills/agent-designer/references/evaluation_methodology.md +749 -0
  387. package/engineering/skills/agent-designer/references/tool_design_best_practices.md +470 -0
  388. package/engineering/skills/agent-designer/tool_schema_generator.py +978 -0
  389. package/engineering/skills/agent-workflow-designer/SKILL.md +83 -0
  390. package/engineering/skills/agent-workflow-designer/references/workflow-patterns.md +82 -0
  391. package/engineering/skills/agent-workflow-designer/scripts/workflow_scaffolder.py +113 -0
  392. package/engineering/skills/api-design-reviewer/SKILL.md +421 -0
  393. package/engineering/skills/api-design-reviewer/references/api_antipatterns.md +680 -0
  394. package/engineering/skills/api-design-reviewer/references/rest_design_rules.md +487 -0
  395. package/engineering/skills/api-design-reviewer/scripts/api_linter.py +914 -0
  396. package/engineering/skills/api-design-reviewer/scripts/api_scorecard.py +1661 -0
  397. package/engineering/skills/api-design-reviewer/scripts/breaking_change_detector.py +1102 -0
  398. package/engineering/skills/api-test-suite-builder/SKILL.md +177 -0
  399. package/engineering/skills/api-test-suite-builder/references/example-test-files.md +508 -0
  400. package/engineering/skills/browser-automation/SKILL.md +266 -0
  401. package/engineering/skills/browser-automation/references/anti_detection_patterns.md +453 -0
  402. package/engineering/skills/browser-automation/references/data_extraction_recipes.md +580 -0
  403. package/engineering/skills/browser-automation/references/playwright_browser_api.md +492 -0
  404. package/engineering/skills/browser-automation/scripts/anti_detection_checker.py +520 -0
  405. package/engineering/skills/browser-automation/scripts/form_automation_builder.py +324 -0
  406. package/engineering/skills/browser-automation/scripts/scraping_toolkit.py +248 -0
  407. package/engineering/skills/changelog-generator/README.md +48 -0
  408. package/engineering/skills/changelog-generator/SKILL.md +165 -0
  409. package/engineering/skills/changelog-generator/references/changelog-formatting-guide.md +17 -0
  410. package/engineering/skills/changelog-generator/references/ci-integration.md +26 -0
  411. package/engineering/skills/changelog-generator/references/monorepo-strategy.md +39 -0
  412. package/engineering/skills/changelog-generator/scripts/commit_linter.py +138 -0
  413. package/engineering/skills/changelog-generator/scripts/generate_changelog.py +247 -0
  414. package/engineering/skills/chaos-engineering/SKILL.md +231 -0
  415. package/engineering/skills/chaos-engineering/assets/experiment_template.md +76 -0
  416. package/engineering/skills/chaos-engineering/assets/postmortem_template.md +67 -0
  417. package/engineering/skills/chaos-engineering/references/attack_taxonomy.md +180 -0
  418. package/engineering/skills/chaos-engineering/references/chaos_principles.md +136 -0
  419. package/engineering/skills/chaos-engineering/references/experiment_design.md +158 -0
  420. package/engineering/skills/chaos-engineering/references/tooling_landscape.md +197 -0
  421. package/engineering/skills/chaos-engineering/scripts/blast_radius_calculator.py +101 -0
  422. package/engineering/skills/chaos-engineering/scripts/experiment_designer.py +139 -0
  423. package/engineering/skills/chaos-engineering/scripts/experiment_postmortem.py +144 -0
  424. package/engineering/skills/ci-cd-pipeline-builder/README.md +48 -0
  425. package/engineering/skills/ci-cd-pipeline-builder/SKILL.md +147 -0
  426. package/engineering/skills/ci-cd-pipeline-builder/references/deployment-gates.md +17 -0
  427. package/engineering/skills/ci-cd-pipeline-builder/references/github-actions-templates.md +41 -0
  428. package/engineering/skills/ci-cd-pipeline-builder/references/gitlab-ci-templates.md +39 -0
  429. package/engineering/skills/ci-cd-pipeline-builder/scripts/pipeline_generator.py +310 -0
  430. package/engineering/skills/ci-cd-pipeline-builder/scripts/stack_detector.py +184 -0
  431. package/engineering/skills/codebase-onboarding/SKILL.md +84 -0
  432. package/engineering/skills/codebase-onboarding/references/onboarding-template.md +186 -0
  433. package/engineering/skills/codebase-onboarding/references/output-format-templates.md +41 -0
  434. package/engineering/skills/codebase-onboarding/scripts/codebase_analyzer.py +205 -0
  435. package/engineering/skills/command-guide/SKILL.md +314 -0
  436. package/engineering/skills/database-designer/README.md +388 -0
  437. package/engineering/skills/database-designer/SKILL.md +289 -0
  438. package/engineering/skills/database-designer/assets/sample_query_patterns.json +375 -0
  439. package/engineering/skills/database-designer/assets/sample_schema.json +372 -0
  440. package/engineering/skills/database-designer/assets/sample_schema.sql +207 -0
  441. package/engineering/skills/database-designer/expected_outputs/index_optimization_sample.txt +60 -0
  442. package/engineering/skills/database-designer/expected_outputs/migration_sample.txt +124 -0
  443. package/engineering/skills/database-designer/expected_outputs/schema_analysis_sample.txt +222 -0
  444. package/engineering/skills/database-designer/index_optimizer.py +926 -0
  445. package/engineering/skills/database-designer/migration_generator.py +1199 -0
  446. package/engineering/skills/database-designer/references/database-design-reference.md +476 -0
  447. package/engineering/skills/database-designer/references/database_selection_decision_tree.md +373 -0
  448. package/engineering/skills/database-designer/references/index_strategy_patterns.md +424 -0
  449. package/engineering/skills/database-designer/references/normalization_guide.md +354 -0
  450. package/engineering/skills/database-designer/schema_analyzer.py +982 -0
  451. package/engineering/skills/database-schema-designer/SKILL.md +248 -0
  452. package/engineering/skills/database-schema-designer/references/full-schema-examples.md +283 -0
  453. package/engineering/skills/dependency-auditor/README.md +524 -0
  454. package/engineering/skills/dependency-auditor/SKILL.md +338 -0
  455. package/engineering/skills/dependency-auditor/assets/sample_go.mod +53 -0
  456. package/engineering/skills/dependency-auditor/assets/sample_package.json +72 -0
  457. package/engineering/skills/dependency-auditor/assets/sample_requirements.txt +71 -0
  458. package/engineering/skills/dependency-auditor/expected_outputs/sample_license_report.txt +37 -0
  459. package/engineering/skills/dependency-auditor/expected_outputs/sample_upgrade_plan.txt +59 -0
  460. package/engineering/skills/dependency-auditor/expected_outputs/sample_vulnerability_report.json +71 -0
  461. package/engineering/skills/dependency-auditor/references/dependency_management_best_practices.md +643 -0
  462. package/engineering/skills/dependency-auditor/references/license_compatibility_matrix.md +238 -0
  463. package/engineering/skills/dependency-auditor/references/vulnerability_assessment_guide.md +461 -0
  464. package/engineering/skills/dependency-auditor/scripts/dep_scanner.py +794 -0
  465. package/engineering/skills/dependency-auditor/scripts/license_checker.py +996 -0
  466. package/engineering/skills/dependency-auditor/scripts/upgrade_planner.py +1029 -0
  467. package/engineering/skills/dependency-auditor/test-inventory.json +421 -0
  468. package/engineering/skills/dependency-auditor/test-project/package.json +72 -0
  469. package/engineering/skills/engineering-advanced-skills/SKILL.md +70 -0
  470. package/engineering/skills/env-secrets-manager/SKILL.md +260 -0
  471. package/engineering/skills/env-secrets-manager/references/secret-patterns.md +41 -0
  472. package/engineering/skills/env-secrets-manager/references/validation-detection-rotation.md +358 -0
  473. package/engineering/skills/env-secrets-manager/scripts/env_auditor.py +145 -0
  474. package/engineering/skills/feature-flags-architect/SKILL.md +219 -0
  475. package/engineering/skills/feature-flags-architect/assets/flag_request_template.md +65 -0
  476. package/engineering/skills/feature-flags-architect/references/flag_lifecycle.md +171 -0
  477. package/engineering/skills/feature-flags-architect/references/flag_taxonomy.md +125 -0
  478. package/engineering/skills/feature-flags-architect/references/provider_comparison.md +159 -0
  479. package/engineering/skills/feature-flags-architect/references/rollout_strategies.md +140 -0
  480. package/engineering/skills/feature-flags-architect/scripts/flag_debt_scanner.py +140 -0
  481. package/engineering/skills/feature-flags-architect/scripts/kill_switch_audit.py +146 -0
  482. package/engineering/skills/feature-flags-architect/scripts/rollout_planner.py +123 -0
  483. package/engineering/skills/focused-fix/SKILL.md +318 -0
  484. package/engineering/skills/full-page-screenshot/SKILL.md +123 -0
  485. package/engineering/skills/full-page-screenshot/scripts/full-page-screenshot.mjs +951 -0
  486. package/engineering/skills/git-worktree-manager/README.md +51 -0
  487. package/engineering/skills/git-worktree-manager/SKILL.md +193 -0
  488. package/engineering/skills/git-worktree-manager/references/docker-compose-patterns.md +62 -0
  489. package/engineering/skills/git-worktree-manager/references/port-allocation-strategy.md +46 -0
  490. package/engineering/skills/git-worktree-manager/scripts/worktree_cleanup.py +196 -0
  491. package/engineering/skills/git-worktree-manager/scripts/worktree_manager.py +240 -0
  492. package/engineering/skills/interview-system-designer/README.md +309 -0
  493. package/engineering/skills/interview-system-designer/SKILL.md +59 -0
  494. package/engineering/skills/interview-system-designer/assets/sample_interview_results.json +382 -0
  495. package/engineering/skills/interview-system-designer/assets/sample_role_definitions.json +170 -0
  496. package/engineering/skills/interview-system-designer/expected_outputs/product_manager_senior_questions.json +622 -0
  497. package/engineering/skills/interview-system-designer/expected_outputs/product_manager_senior_questions.txt +177 -0
  498. package/engineering/skills/interview-system-designer/expected_outputs/senior_software_engineer_senior_interview_loop.json +435 -0
  499. package/engineering/skills/interview-system-designer/expected_outputs/senior_software_engineer_senior_interview_loop.txt +151 -0
  500. package/engineering/skills/interview-system-designer/hiring_calibrator.py +1306 -0
  501. package/engineering/skills/interview-system-designer/loop_designer.py +908 -0
  502. package/engineering/skills/interview-system-designer/question_bank_generator.py +1060 -0
  503. package/engineering/skills/interview-system-designer/references/bias_mitigation_checklist.md +308 -0
  504. package/engineering/skills/interview-system-designer/references/competency_matrix_templates.md +171 -0
  505. package/engineering/skills/interview-system-designer/references/debrief_facilitation_guide.md +319 -0
  506. package/engineering/skills/interview-system-designer/references/interview-frameworks.md +46 -0
  507. package/engineering/skills/interview-system-designer/scripts/interview_planner.py +133 -0
  508. package/engineering/skills/kubernetes-operator/SKILL.md +242 -0
  509. package/engineering/skills/kubernetes-operator/assets/crd_template.yaml +71 -0
  510. package/engineering/skills/kubernetes-operator/assets/reconcile_skeleton.go +122 -0
  511. package/engineering/skills/kubernetes-operator/references/crd_design.md +196 -0
  512. package/engineering/skills/kubernetes-operator/references/operator_pattern.md +152 -0
  513. package/engineering/skills/kubernetes-operator/references/reconcile_loop.md +210 -0
  514. package/engineering/skills/kubernetes-operator/references/tooling_landscape.md +217 -0
  515. package/engineering/skills/kubernetes-operator/scripts/crd_validator.py +134 -0
  516. package/engineering/skills/kubernetes-operator/scripts/operator_capability_audit.py +150 -0
  517. package/engineering/skills/kubernetes-operator/scripts/reconcile_lint.py +177 -0
  518. package/engineering/skills/mcp-server-builder/README.md +50 -0
  519. package/engineering/skills/mcp-server-builder/SKILL.md +164 -0
  520. package/engineering/skills/mcp-server-builder/references/openapi-extraction-guide.md +34 -0
  521. package/engineering/skills/mcp-server-builder/references/python-server-template.md +22 -0
  522. package/engineering/skills/mcp-server-builder/references/typescript-server-template.md +19 -0
  523. package/engineering/skills/mcp-server-builder/references/validation-checklist.md +30 -0
  524. package/engineering/skills/mcp-server-builder/scripts/mcp_validator.py +186 -0
  525. package/engineering/skills/mcp-server-builder/scripts/openapi_to_mcp.py +284 -0
  526. package/engineering/skills/migration-architect/README.md +382 -0
  527. package/engineering/skills/migration-architect/SKILL.md +478 -0
  528. package/engineering/skills/migration-architect/assets/database_schema_after.json +367 -0
  529. package/engineering/skills/migration-architect/assets/database_schema_before.json +243 -0
  530. package/engineering/skills/migration-architect/assets/sample_database_migration.json +106 -0
  531. package/engineering/skills/migration-architect/assets/sample_service_migration.json +175 -0
  532. package/engineering/skills/migration-architect/expected_outputs/rollback_runbook.json +577 -0
  533. package/engineering/skills/migration-architect/expected_outputs/rollback_runbook.txt +282 -0
  534. package/engineering/skills/migration-architect/expected_outputs/sample_database_migration_plan.json +317 -0
  535. package/engineering/skills/migration-architect/expected_outputs/sample_database_migration_plan.txt +161 -0
  536. package/engineering/skills/migration-architect/expected_outputs/sample_service_migration_plan.json +310 -0
  537. package/engineering/skills/migration-architect/expected_outputs/sample_service_migration_plan.txt +154 -0
  538. package/engineering/skills/migration-architect/expected_outputs/schema_compatibility_report.json +192 -0
  539. package/engineering/skills/migration-architect/expected_outputs/schema_compatibility_report.txt +129 -0
  540. package/engineering/skills/migration-architect/references/data_reconciliation_strategies.md +1329 -0
  541. package/engineering/skills/migration-architect/references/migration_patterns_catalog.md +705 -0
  542. package/engineering/skills/migration-architect/references/zero_downtime_techniques.md +1104 -0
  543. package/engineering/skills/migration-architect/scripts/compatibility_checker.py +883 -0
  544. package/engineering/skills/migration-architect/scripts/migration_planner.py +661 -0
  545. package/engineering/skills/migration-architect/scripts/rollback_generator.py +1109 -0
  546. package/engineering/skills/monorepo-navigator/SKILL.md +97 -0
  547. package/engineering/skills/monorepo-navigator/references/monorepo-patterns.md +37 -0
  548. package/engineering/skills/monorepo-navigator/references/monorepo-tooling-reference.md +516 -0
  549. package/engineering/skills/monorepo-navigator/scripts/monorepo_analyzer.py +168 -0
  550. package/engineering/skills/observability-designer/README.md +384 -0
  551. package/engineering/skills/observability-designer/SKILL.md +269 -0
  552. package/engineering/skills/observability-designer/assets/sample_alerts.json +276 -0
  553. package/engineering/skills/observability-designer/assets/sample_service_api.json +83 -0
  554. package/engineering/skills/observability-designer/assets/sample_service_web.json +113 -0
  555. package/engineering/skills/observability-designer/expected_outputs/sample_dashboard.json +811 -0
  556. package/engineering/skills/observability-designer/expected_outputs/sample_slo_framework.json +545 -0
  557. package/engineering/skills/observability-designer/references/alert_design_patterns.md +469 -0
  558. package/engineering/skills/observability-designer/references/dashboard_best_practices.md +571 -0
  559. package/engineering/skills/observability-designer/references/slo_cookbook.md +329 -0
  560. package/engineering/skills/observability-designer/scripts/alert_optimizer.py +1059 -0
  561. package/engineering/skills/observability-designer/scripts/dashboard_generator.py +1219 -0
  562. package/engineering/skills/observability-designer/scripts/slo_designer.py +670 -0
  563. package/engineering/skills/performance-profiler/SKILL.md +170 -0
  564. package/engineering/skills/performance-profiler/references/profiling-recipes.md +475 -0
  565. package/engineering/skills/performance-profiler/scripts/performance_profiler.py +192 -0
  566. package/engineering/skills/pr-review-expert/SKILL.md +384 -0
  567. package/engineering/skills/rag-architect/SKILL.md +318 -0
  568. package/engineering/skills/rag-architect/chunking_optimizer.py +787 -0
  569. package/engineering/skills/rag-architect/rag_pipeline_designer.py +680 -0
  570. package/engineering/skills/rag-architect/references/chunking_strategies_comparison.md +287 -0
  571. package/engineering/skills/rag-architect/references/embedding_model_benchmark.md +338 -0
  572. package/engineering/skills/rag-architect/references/rag_evaluation_framework.md +431 -0
  573. package/engineering/skills/rag-architect/retrieval_evaluator.py +578 -0
  574. package/engineering/skills/release-manager/README.md +445 -0
  575. package/engineering/skills/release-manager/SKILL.md +490 -0
  576. package/engineering/skills/release-manager/assets/sample_commits.json +80 -0
  577. package/engineering/skills/release-manager/assets/sample_git_log.txt +30 -0
  578. package/engineering/skills/release-manager/assets/sample_git_log_full.txt +163 -0
  579. package/engineering/skills/release-manager/assets/sample_release_plan.json +273 -0
  580. package/engineering/skills/release-manager/changelog_generator.py +504 -0
  581. package/engineering/skills/release-manager/expected_outputs/changelog_example.md +37 -0
  582. package/engineering/skills/release-manager/expected_outputs/release_readiness_example.txt +30 -0
  583. package/engineering/skills/release-manager/expected_outputs/version_bump_example.txt +31 -0
  584. package/engineering/skills/release-manager/references/conventional-commits-guide.md +341 -0
  585. package/engineering/skills/release-manager/references/hotfix-procedures.md +592 -0
  586. package/engineering/skills/release-manager/references/release-workflow-comparison.md +410 -0
  587. package/engineering/skills/release-manager/release_planner.py +1003 -0
  588. package/engineering/skills/release-manager/version_bumper.py +645 -0
  589. package/engineering/skills/runbook-generator/SKILL.md +76 -0
  590. package/engineering/skills/runbook-generator/references/runbook-templates.md +40 -0
  591. package/engineering/skills/runbook-generator/scripts/runbook_generator.py +128 -0
  592. package/engineering/skills/secrets-vault-manager/SKILL.md +403 -0
  593. package/engineering/skills/secrets-vault-manager/references/cloud_secret_stores.md +354 -0
  594. package/engineering/skills/secrets-vault-manager/references/emergency_procedures.md +280 -0
  595. package/engineering/skills/secrets-vault-manager/references/vault_patterns.md +342 -0
  596. package/engineering/skills/secrets-vault-manager/scripts/audit_log_analyzer.py +330 -0
  597. package/engineering/skills/secrets-vault-manager/scripts/rotation_planner.py +280 -0
  598. package/engineering/skills/secrets-vault-manager/scripts/vault_config_generator.py +302 -0
  599. package/engineering/skills/self-eval/SKILL.md +181 -0
  600. package/engineering/skills/ship-gate/SKILL.md +190 -0
  601. package/engineering/skills/ship-gate/references/checks.md +483 -0
  602. package/engineering/skills/ship-gate/references/patterns.md +687 -0
  603. package/engineering/skills/ship-gate/scripts/ship_gate_scanner.py +1231 -0
  604. package/engineering/skills/skill-security-auditor/SKILL.md +171 -0
  605. package/engineering/skills/skill-security-auditor/references/threat-model.md +271 -0
  606. package/engineering/skills/skill-security-auditor/scripts/skill_security_auditor.py +1066 -0
  607. package/engineering/skills/skill-tester/README.md +229 -0
  608. package/engineering/skills/skill-tester/SKILL.md +390 -0
  609. package/engineering/skills/skill-tester/assets/sample-skill/README.md +40 -0
  610. package/engineering/skills/skill-tester/assets/sample-skill/SKILL.md +163 -0
  611. package/engineering/skills/skill-tester/assets/sample-skill/assets/sample_text.txt +23 -0
  612. package/engineering/skills/skill-tester/assets/sample-skill/assets/test_data.csv +16 -0
  613. package/engineering/skills/skill-tester/assets/sample-skill/expected_outputs/sample_text_analysis.json +13 -0
  614. package/engineering/skills/skill-tester/assets/sample-skill/references/api-reference.md +115 -0
  615. package/engineering/skills/skill-tester/assets/sample-skill/scripts/text_processor.py +382 -0
  616. package/engineering/skills/skill-tester/expected_outputs/sample_validation_report.json +68 -0
  617. package/engineering/skills/skill-tester/references/quality-scoring-rubric.md +559 -0
  618. package/engineering/skills/skill-tester/references/skill-structure-specification.md +355 -0
  619. package/engineering/skills/skill-tester/references/tier-requirements-matrix.md +418 -0
  620. package/engineering/skills/skill-tester/scripts/quality_scorer.py +1182 -0
  621. package/engineering/skills/skill-tester/scripts/script_tester.py +731 -0
  622. package/engineering/skills/skill-tester/scripts/security_scorer.py +606 -0
  623. package/engineering/skills/skill-tester/scripts/skill_validator.py +667 -0
  624. package/engineering/skills/skill-tester/tests/test_security_scorer.py +851 -0
  625. package/engineering/skills/slo-architect/SKILL.md +234 -0
  626. package/engineering/skills/slo-architect/assets/error_budget_policy.md +79 -0
  627. package/engineering/skills/slo-architect/assets/slo_template.yaml +63 -0
  628. package/engineering/skills/slo-architect/references/composition.md +139 -0
  629. package/engineering/skills/slo-architect/references/error_budget.md +128 -0
  630. package/engineering/skills/slo-architect/references/sli_design.md +175 -0
  631. package/engineering/skills/slo-architect/references/slo_principles.md +138 -0
  632. package/engineering/skills/slo-architect/scripts/error_budget_calculator.py +147 -0
  633. package/engineering/skills/slo-architect/scripts/slo_designer.py +158 -0
  634. package/engineering/skills/slo-architect/scripts/slo_review.py +159 -0
  635. package/engineering/skills/spec-driven-workflow/SKILL.md +333 -0
  636. package/engineering/skills/spec-driven-workflow/references/acceptance_criteria_patterns.md +497 -0
  637. package/engineering/skills/spec-driven-workflow/references/bounded_autonomy_rules.md +273 -0
  638. package/engineering/skills/spec-driven-workflow/references/spec_format_guide.md +531 -0
  639. package/engineering/skills/spec-driven-workflow/scripts/spec_generator.py +338 -0
  640. package/engineering/skills/spec-driven-workflow/scripts/spec_validator.py +461 -0
  641. package/engineering/skills/spec-driven-workflow/scripts/test_extractor.py +431 -0
  642. package/engineering/skills/sql-database-assistant/SKILL.md +457 -0
  643. package/engineering/skills/sql-database-assistant/references/optimization_guide.md +330 -0
  644. package/engineering/skills/sql-database-assistant/references/orm_patterns.md +451 -0
  645. package/engineering/skills/sql-database-assistant/references/query_patterns.md +406 -0
  646. package/engineering/skills/sql-database-assistant/scripts/migration_generator.py +442 -0
  647. package/engineering/skills/sql-database-assistant/scripts/query_optimizer.py +348 -0
  648. package/engineering/skills/sql-database-assistant/scripts/schema_explorer.py +315 -0
  649. package/engineering/skills/tc-tracker/README.md +72 -0
  650. package/engineering/skills/tc-tracker/SKILL.md +207 -0
  651. package/engineering/skills/tc-tracker/references/handoff-format.md +139 -0
  652. package/engineering/skills/tc-tracker/references/lifecycle.md +98 -0
  653. package/engineering/skills/tc-tracker/references/tc-schema.md +204 -0
  654. package/engineering/skills/tc-tracker/scripts/tc_create.py +277 -0
  655. package/engineering/skills/tc-tracker/scripts/tc_init.py +196 -0
  656. package/engineering/skills/tc-tracker/scripts/tc_status.py +200 -0
  657. package/engineering/skills/tc-tracker/scripts/tc_update.py +361 -0
  658. package/engineering/skills/tc-tracker/scripts/tc_validator.py +347 -0
  659. package/engineering/skills/tech-debt-tracker/README.md +308 -0
  660. package/engineering/skills/tech-debt-tracker/SKILL.md +93 -0
  661. package/engineering/skills/tech-debt-tracker/assets/historical_debt_2024-01-15.json +268 -0
  662. package/engineering/skills/tech-debt-tracker/assets/historical_debt_2024-02-01.json +214 -0
  663. package/engineering/skills/tech-debt-tracker/assets/sample_codebase/src/frontend.js +395 -0
  664. package/engineering/skills/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py +322 -0
  665. package/engineering/skills/tech-debt-tracker/assets/sample_codebase/src/user_service.py +276 -0
  666. package/engineering/skills/tech-debt-tracker/assets/sample_debt_inventory.json +285 -0
  667. package/engineering/skills/tech-debt-tracker/expected_outputs/sample_dashboard_output.json +221 -0
  668. package/engineering/skills/tech-debt-tracker/expected_outputs/sample_prioritization_output.json +1686 -0
  669. package/engineering/skills/tech-debt-tracker/expected_outputs/sample_scan_output.json +2034 -0
  670. package/engineering/skills/tech-debt-tracker/references/debt-classification-taxonomy.md +261 -0
  671. package/engineering/skills/tech-debt-tracker/references/debt-frameworks.md +486 -0
  672. package/engineering/skills/tech-debt-tracker/references/prioritization-framework.md +335 -0
  673. package/engineering/skills/tech-debt-tracker/references/stakeholder-communication-templates.md +418 -0
  674. package/engineering/skills/tech-debt-tracker/scripts/debt_dashboard.py +970 -0
  675. package/engineering/skills/tech-debt-tracker/scripts/debt_prioritizer.py +857 -0
  676. package/engineering/skills/tech-debt-tracker/scripts/debt_scanner.py +684 -0
  677. package/engineering/slo-architect/.claude-plugin/plugin.json +15 -0
  678. package/engineering/slo-architect/README.md +100 -0
  679. package/engineering/slo-architect/skills/slo-architect/SKILL.md +234 -0
  680. package/engineering/slo-architect/skills/slo-architect/assets/error_budget_policy.md +79 -0
  681. package/engineering/slo-architect/skills/slo-architect/assets/slo_template.yaml +63 -0
  682. package/engineering/slo-architect/skills/slo-architect/references/composition.md +139 -0
  683. package/engineering/slo-architect/skills/slo-architect/references/error_budget.md +128 -0
  684. package/engineering/slo-architect/skills/slo-architect/references/sli_design.md +175 -0
  685. package/engineering/slo-architect/skills/slo-architect/references/slo_principles.md +138 -0
  686. package/engineering/slo-architect/skills/slo-architect/scripts/error_budget_calculator.py +147 -0
  687. package/engineering/slo-architect/skills/slo-architect/scripts/slo_designer.py +158 -0
  688. package/engineering/slo-architect/skills/slo-architect/scripts/slo_review.py +159 -0
  689. package/engineering/statistical-analyst/.claude-plugin/plugin.json +15 -0
  690. package/engineering/statistical-analyst/skills/statistical-analyst/SKILL.md +246 -0
  691. package/engineering/statistical-analyst/skills/statistical-analyst/references/statistical-testing-concepts.md +189 -0
  692. package/engineering/statistical-analyst/skills/statistical-analyst/scripts/confidence_interval.py +198 -0
  693. package/engineering/statistical-analyst/skills/statistical-analyst/scripts/hypothesis_tester.py +471 -0
  694. package/engineering/statistical-analyst/skills/statistical-analyst/scripts/sample_size_calculator.py +262 -0
  695. package/engineering/terraform-patterns/.claude-plugin/plugin.json +15 -0
  696. package/engineering/terraform-patterns/skills/terraform-patterns/SKILL.md +740 -0
  697. package/engineering/terraform-patterns/skills/terraform-patterns/references/module-patterns.md +409 -0
  698. package/engineering/terraform-patterns/skills/terraform-patterns/references/state-management.md +472 -0
  699. package/engineering/terraform-patterns/skills/terraform-patterns/scripts/tf_module_analyzer.py +461 -0
  700. package/engineering/terraform-patterns/skills/terraform-patterns/scripts/tf_security_scanner.py +577 -0
  701. package/engineering/universal-scraping-architect/.claude-plugin/plugin.json +18 -0
  702. package/engineering/universal-scraping-architect/SKILL.md +58 -0
  703. package/engineering/universal-scraping-architect/agents/cs-scraping-architect.md +6 -0
  704. package/engineering/universal-scraping-architect/commands/cs-scrape.md +6 -0
  705. package/engineering/universal-scraping-architect/references/firecrawl-technical-guide.md +44 -0
  706. package/engineering/universal-scraping-architect/references/local-extraction-patterns.md +46 -0
  707. package/engineering/universal-scraping-architect/references/scraping-ethics-security.md +48 -0
  708. package/engineering/universal-scraping-architect/requirements.txt +7 -0
  709. package/engineering/universal-scraping-architect/scripts/firecrawl_example.py +217 -0
  710. package/engineering/universal-scraping-architect/scripts/local_bs4_example.py +293 -0
  711. package/engineering/universal-scraping-architect/scripts/validate_extraction.py +44 -0
  712. package/engineering/workflow-builder/.claude-plugin/plugin.json +18 -0
  713. package/engineering/workflow-builder/README.md +55 -0
  714. package/engineering/workflow-builder/agents/cs-workflow-architect.md +96 -0
  715. package/engineering/workflow-builder/commands/cs-workflow-build.md +95 -0
  716. package/engineering/workflow-builder/skills/workflow-builder/README.md +33 -0
  717. package/engineering/workflow-builder/skills/workflow-builder/SKILL.md +78 -0
  718. package/engineering/workflow-builder/skills/workflow-builder/assets/examples/pr-triage.js +98 -0
  719. package/engineering/workflow-builder/skills/workflow-builder/assets/templates/fan-out.js +48 -0
  720. package/engineering/workflow-builder/skills/workflow-builder/assets/templates/loop-until-budget.js +52 -0
  721. package/engineering/workflow-builder/skills/workflow-builder/assets/templates/pipeline.js +46 -0
  722. package/engineering/workflow-builder/skills/workflow-builder/expected_outputs/intake_pr_review.json +37 -0
  723. package/engineering/workflow-builder/skills/workflow-builder/expected_outputs/scaffold_pipeline.js +46 -0
  724. package/engineering/workflow-builder/skills/workflow-builder/expected_outputs/validate_sample.txt +6 -0
  725. package/engineering/workflow-builder/skills/workflow-builder/references/api_reference.md +115 -0
  726. package/engineering/workflow-builder/skills/workflow-builder/references/decision_and_intake_guide.md +83 -0
  727. package/engineering/workflow-builder/skills/workflow-builder/references/orchestration_patterns.md +160 -0
  728. package/engineering/workflow-builder/skills/workflow-builder/scripts/scaffold_workflow.py +211 -0
  729. package/engineering/workflow-builder/skills/workflow-builder/scripts/validate_workflow.py +274 -0
  730. package/engineering/workflow-builder/skills/workflow-builder/scripts/workflow_intake.py +233 -0
  731. package/engineering/write-a-skill/.claude-plugin/plugin.json +21 -0
  732. package/engineering/write-a-skill/README.md +44 -0
  733. package/engineering/write-a-skill/agents/cs-skill-author.md +149 -0
  734. package/engineering/write-a-skill/commands/cs-write-a-skill.md +140 -0
  735. package/engineering/write-a-skill/skills/write-a-skill/SKILL.md +141 -0
  736. package/engineering/write-a-skill/skills/write-a-skill/references/companion_tooling.md +67 -0
  737. package/engineering/write-a-skill/skills/write-a-skill/references/description_design_patterns.md +139 -0
  738. package/engineering/write-a-skill/skills/write-a-skill/references/progressive_disclosure_principles.md +89 -0
  739. package/engineering/write-a-skill/skills/write-a-skill/references/quality_gates_for_skills.md +158 -0
  740. package/engineering/write-a-skill/skills/write-a-skill/scripts/skill_description_validator.py +255 -0
  741. package/engineering/write-a-skill/skills/write-a-skill/scripts/skill_review_checklist_runner.py +268 -0
  742. package/engineering/write-a-skill/skills/write-a-skill/scripts/skill_structure_validator.py +277 -0
  743. package/engineering/write-docs/SKILL.md +167 -0
  744. package/engineering-team/.claude-plugin/plugin.json +13 -0
  745. package/engineering-team/.codex/instructions.md +40 -0
  746. package/engineering-team/CLAUDE.md +322 -0
  747. package/engineering-team/README.md +608 -0
  748. package/engineering-team/START_HERE.md +354 -0
  749. package/engineering-team/TEAM_STRUCTURE_GUIDE.md +630 -0
  750. package/engineering-team/a11y-audit/.claude-plugin/plugin.json +15 -0
  751. package/engineering-team/a11y-audit/README.md +46 -0
  752. package/engineering-team/a11y-audit/settings.json +15 -0
  753. package/engineering-team/a11y-audit/skills/a11y-audit/SKILL.md +211 -0
  754. package/engineering-team/a11y-audit/skills/a11y-audit/assets/sample-component.tsx +51 -0
  755. package/engineering-team/a11y-audit/skills/a11y-audit/expected_outputs/sample-contrast-output.txt +39 -0
  756. package/engineering-team/a11y-audit/skills/a11y-audit/expected_outputs/sample-scan-output.json +34 -0
  757. package/engineering-team/a11y-audit/skills/a11y-audit/expected_outputs/sample-scan-report.md +63 -0
  758. package/engineering-team/a11y-audit/skills/a11y-audit/references/aria-patterns.md +223 -0
  759. package/engineering-team/a11y-audit/skills/a11y-audit/references/audit-report-template.md +46 -0
  760. package/engineering-team/a11y-audit/skills/a11y-audit/references/ci-cd-integration.md +127 -0
  761. package/engineering-team/a11y-audit/skills/a11y-audit/references/color-contrast-guide.md +83 -0
  762. package/engineering-team/a11y-audit/skills/a11y-audit/references/examples-by-framework.md +312 -0
  763. package/engineering-team/a11y-audit/skills/a11y-audit/references/framework-a11y-patterns.md +661 -0
  764. package/engineering-team/a11y-audit/skills/a11y-audit/references/testing-checklist.md +41 -0
  765. package/engineering-team/a11y-audit/skills/a11y-audit/references/wcag-22-new-criteria.md +79 -0
  766. package/engineering-team/a11y-audit/skills/a11y-audit/references/wcag-quick-ref.md +113 -0
  767. package/engineering-team/a11y-audit/skills/a11y-audit/scripts/a11y_scanner.py +684 -0
  768. package/engineering-team/a11y-audit/skills/a11y-audit/scripts/contrast_checker.py +499 -0
  769. package/engineering-team/aws-solution-architect.zip +0 -0
  770. package/engineering-team/code-reviewer.zip +0 -0
  771. package/engineering-team/google-workspace-cli/.claude-plugin/plugin.json +15 -0
  772. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/SKILL.md +373 -0
  773. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/assets/persona-profiles.md +223 -0
  774. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/assets/workspace-config.json +61 -0
  775. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/references/gws-command-reference.md +313 -0
  776. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/references/recipes-cookbook.md +344 -0
  777. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/references/troubleshooting.md +323 -0
  778. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/scripts/auth_setup_guide.py +390 -0
  779. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/scripts/gws_doctor.py +245 -0
  780. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/scripts/gws_recipe_runner.py +399 -0
  781. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/scripts/output_analyzer.py +332 -0
  782. package/engineering-team/google-workspace-cli/skills/google-workspace-cli/scripts/workspace_audit.py +309 -0
  783. package/engineering-team/ms365-tenant-manager.zip +0 -0
  784. package/engineering-team/playwright-pro/.claude-plugin/plugin.json +15 -0
  785. package/engineering-team/playwright-pro/.mcp.json +27 -0
  786. package/engineering-team/playwright-pro/CLAUDE.md +84 -0
  787. package/engineering-team/playwright-pro/LICENSE +21 -0
  788. package/engineering-team/playwright-pro/README.md +133 -0
  789. package/engineering-team/playwright-pro/agents/migration-planner.md +122 -0
  790. package/engineering-team/playwright-pro/agents/test-architect.md +106 -0
  791. package/engineering-team/playwright-pro/agents/test-debugger.md +130 -0
  792. package/engineering-team/playwright-pro/hooks/detect-playwright.sh +23 -0
  793. package/engineering-team/playwright-pro/hooks/hooks.json +25 -0
  794. package/engineering-team/playwright-pro/hooks/validate-test.sh +58 -0
  795. package/engineering-team/playwright-pro/integrations/browserstack-mcp/package.json +18 -0
  796. package/engineering-team/playwright-pro/integrations/browserstack-mcp/src/client.ts +97 -0
  797. package/engineering-team/playwright-pro/integrations/browserstack-mcp/src/index.ts +183 -0
  798. package/engineering-team/playwright-pro/integrations/browserstack-mcp/src/types.ts +61 -0
  799. package/engineering-team/playwright-pro/integrations/browserstack-mcp/tsconfig.json +14 -0
  800. package/engineering-team/playwright-pro/integrations/testrail-mcp/package.json +18 -0
  801. package/engineering-team/playwright-pro/integrations/testrail-mcp/src/client.ts +147 -0
  802. package/engineering-team/playwright-pro/integrations/testrail-mcp/src/index.ts +270 -0
  803. package/engineering-team/playwright-pro/integrations/testrail-mcp/src/types.ts +105 -0
  804. package/engineering-team/playwright-pro/integrations/testrail-mcp/tsconfig.json +14 -0
  805. package/engineering-team/playwright-pro/settings.json +8 -0
  806. package/engineering-team/playwright-pro/skills/browserstack/SKILL.md +168 -0
  807. package/engineering-team/playwright-pro/skills/coverage/SKILL.md +98 -0
  808. package/engineering-team/playwright-pro/skills/fix/SKILL.md +113 -0
  809. package/engineering-team/playwright-pro/skills/fix/flaky-taxonomy.md +134 -0
  810. package/engineering-team/playwright-pro/skills/generate/SKILL.md +144 -0
  811. package/engineering-team/playwright-pro/skills/generate/patterns.md +163 -0
  812. package/engineering-team/playwright-pro/skills/init/SKILL.md +201 -0
  813. package/engineering-team/playwright-pro/skills/migrate/SKILL.md +135 -0
  814. package/engineering-team/playwright-pro/skills/migrate/cypress-mapping.md +79 -0
  815. package/engineering-team/playwright-pro/skills/migrate/selenium-mapping.md +94 -0
  816. package/engineering-team/playwright-pro/skills/pw/SKILL.md +124 -0
  817. package/engineering-team/playwright-pro/skills/pw/reference/assertions.md +89 -0
  818. package/engineering-team/playwright-pro/skills/pw/reference/common-pitfalls.md +137 -0
  819. package/engineering-team/playwright-pro/skills/pw/reference/fixtures.md +121 -0
  820. package/engineering-team/playwright-pro/skills/pw/reference/flaky-tests.md +56 -0
  821. package/engineering-team/playwright-pro/skills/pw/reference/golden-rules.md +12 -0
  822. package/engineering-team/playwright-pro/skills/pw/reference/locators.md +77 -0
  823. package/engineering-team/playwright-pro/skills/pw/templates/README.md +123 -0
  824. package/engineering-team/playwright-pro/skills/pw/templates/accessibility/color-contrast.md +162 -0
  825. package/engineering-team/playwright-pro/skills/pw/templates/accessibility/keyboard-navigation.md +149 -0
  826. package/engineering-team/playwright-pro/skills/pw/templates/accessibility/screen-reader.md +159 -0
  827. package/engineering-team/playwright-pro/skills/pw/templates/api/auth-headers.md +148 -0
  828. package/engineering-team/playwright-pro/skills/pw/templates/api/error-responses.md +157 -0
  829. package/engineering-team/playwright-pro/skills/pw/templates/api/graphql.md +174 -0
  830. package/engineering-team/playwright-pro/skills/pw/templates/api/rate-limiting.md +152 -0
  831. package/engineering-team/playwright-pro/skills/pw/templates/api/rest-crud.md +152 -0
  832. package/engineering-team/playwright-pro/skills/pw/templates/auth/login.md +119 -0
  833. package/engineering-team/playwright-pro/skills/pw/templates/auth/logout.md +112 -0
  834. package/engineering-team/playwright-pro/skills/pw/templates/auth/mfa.md +125 -0
  835. package/engineering-team/playwright-pro/skills/pw/templates/auth/password-reset.md +129 -0
  836. package/engineering-team/playwright-pro/skills/pw/templates/auth/rbac.md +132 -0
  837. package/engineering-team/playwright-pro/skills/pw/templates/auth/remember-me.md +127 -0
  838. package/engineering-team/playwright-pro/skills/pw/templates/auth/session-timeout.md +113 -0
  839. package/engineering-team/playwright-pro/skills/pw/templates/auth/sso.md +115 -0
  840. package/engineering-team/playwright-pro/skills/pw/templates/checkout/add-to-cart.md +112 -0
  841. package/engineering-team/playwright-pro/skills/pw/templates/checkout/apply-coupon.md +123 -0
  842. package/engineering-team/playwright-pro/skills/pw/templates/checkout/order-confirm.md +108 -0
  843. package/engineering-team/playwright-pro/skills/pw/templates/checkout/order-history.md +119 -0
  844. package/engineering-team/playwright-pro/skills/pw/templates/checkout/payment.md +148 -0
  845. package/engineering-team/playwright-pro/skills/pw/templates/checkout/update-quantity.md +125 -0
  846. package/engineering-team/playwright-pro/skills/pw/templates/crud/bulk-operations.md +129 -0
  847. package/engineering-team/playwright-pro/skills/pw/templates/crud/create.md +118 -0
  848. package/engineering-team/playwright-pro/skills/pw/templates/crud/delete.md +116 -0
  849. package/engineering-team/playwright-pro/skills/pw/templates/crud/read.md +117 -0
  850. package/engineering-team/playwright-pro/skills/pw/templates/crud/soft-delete.md +113 -0
  851. package/engineering-team/playwright-pro/skills/pw/templates/crud/update.md +129 -0
  852. package/engineering-team/playwright-pro/skills/pw/templates/dashboard/chart-rendering.md +131 -0
  853. package/engineering-team/playwright-pro/skills/pw/templates/dashboard/data-loading.md +128 -0
  854. package/engineering-team/playwright-pro/skills/pw/templates/dashboard/date-range-filter.md +136 -0
  855. package/engineering-team/playwright-pro/skills/pw/templates/dashboard/export.md +146 -0
  856. package/engineering-team/playwright-pro/skills/pw/templates/dashboard/realtime-updates.md +143 -0
  857. package/engineering-team/playwright-pro/skills/pw/templates/forms/autosave.md +135 -0
  858. package/engineering-team/playwright-pro/skills/pw/templates/forms/conditional-fields.md +120 -0
  859. package/engineering-team/playwright-pro/skills/pw/templates/forms/file-upload.md +136 -0
  860. package/engineering-team/playwright-pro/skills/pw/templates/forms/multi-step.md +137 -0
  861. package/engineering-team/playwright-pro/skills/pw/templates/forms/single-step.md +124 -0
  862. package/engineering-team/playwright-pro/skills/pw/templates/forms/validation.md +141 -0
  863. package/engineering-team/playwright-pro/skills/pw/templates/notifications/in-app.md +125 -0
  864. package/engineering-team/playwright-pro/skills/pw/templates/notifications/notification-center.md +128 -0
  865. package/engineering-team/playwright-pro/skills/pw/templates/notifications/toast-messages.md +139 -0
  866. package/engineering-team/playwright-pro/skills/pw/templates/onboarding/email-verification.md +118 -0
  867. package/engineering-team/playwright-pro/skills/pw/templates/onboarding/first-time-setup.md +130 -0
  868. package/engineering-team/playwright-pro/skills/pw/templates/onboarding/registration.md +131 -0
  869. package/engineering-team/playwright-pro/skills/pw/templates/onboarding/welcome-tour.md +128 -0
  870. package/engineering-team/playwright-pro/skills/pw/templates/search/basic-search.md +118 -0
  871. package/engineering-team/playwright-pro/skills/pw/templates/search/empty-state.md +109 -0
  872. package/engineering-team/playwright-pro/skills/pw/templates/search/filters.md +128 -0
  873. package/engineering-team/playwright-pro/skills/pw/templates/search/pagination.md +123 -0
  874. package/engineering-team/playwright-pro/skills/pw/templates/search/sorting.md +131 -0
  875. package/engineering-team/playwright-pro/skills/pw/templates/settings/account-delete.md +136 -0
  876. package/engineering-team/playwright-pro/skills/pw/templates/settings/notification-prefs.md +139 -0
  877. package/engineering-team/playwright-pro/skills/pw/templates/settings/password-change.md +143 -0
  878. package/engineering-team/playwright-pro/skills/pw/templates/settings/profile-update.md +130 -0
  879. package/engineering-team/playwright-pro/skills/report/SKILL.md +126 -0
  880. package/engineering-team/playwright-pro/skills/review/SKILL.md +102 -0
  881. package/engineering-team/playwright-pro/skills/review/anti-patterns.md +182 -0
  882. package/engineering-team/playwright-pro/skills/testrail/SKILL.md +129 -0
  883. package/engineering-team/self-improving-agent/.claude-plugin/plugin.json +15 -0
  884. package/engineering-team/self-improving-agent/CLAUDE.md +84 -0
  885. package/engineering-team/self-improving-agent/LICENSE +21 -0
  886. package/engineering-team/self-improving-agent/README.md +92 -0
  887. package/engineering-team/self-improving-agent/agents/memory-analyst.md +82 -0
  888. package/engineering-team/self-improving-agent/agents/skill-extractor.md +133 -0
  889. package/engineering-team/self-improving-agent/hooks/error-capture.sh +119 -0
  890. package/engineering-team/self-improving-agent/hooks/hooks.json +15 -0
  891. package/engineering-team/self-improving-agent/reference/memory-architecture.md +131 -0
  892. package/engineering-team/self-improving-agent/reference/promotion-rules.md +83 -0
  893. package/engineering-team/self-improving-agent/reference/rules-directory-patterns.md +137 -0
  894. package/engineering-team/self-improving-agent/settings.json +28 -0
  895. package/engineering-team/self-improving-agent/skills/extract/SKILL.md +193 -0
  896. package/engineering-team/self-improving-agent/skills/promote/SKILL.md +144 -0
  897. package/engineering-team/self-improving-agent/skills/remember/SKILL.md +98 -0
  898. package/engineering-team/self-improving-agent/skills/review/SKILL.md +126 -0
  899. package/engineering-team/self-improving-agent/skills/self-improving-agent/SKILL.md +162 -0
  900. package/engineering-team/self-improving-agent/skills/status/SKILL.md +103 -0
  901. package/engineering-team/self-improving-agent/templates/rule-template.md +17 -0
  902. package/engineering-team/self-improving-agent/templates/skill-template.md +53 -0
  903. package/engineering-team/senior-architect.zip +0 -0
  904. package/engineering-team/senior-backend.zip +0 -0
  905. package/engineering-team/senior-computer-vision.zip +0 -0
  906. package/engineering-team/senior-data-engineer.zip +0 -0
  907. package/engineering-team/senior-data-scientist.zip +0 -0
  908. package/engineering-team/senior-devops.zip +0 -0
  909. package/engineering-team/senior-frontend.zip +0 -0
  910. package/engineering-team/senior-fullstack.zip +0 -0
  911. package/engineering-team/senior-ml-engineer.zip +0 -0
  912. package/engineering-team/senior-prompt-engineer.zip +0 -0
  913. package/engineering-team/senior-qa.zip +0 -0
  914. package/engineering-team/senior-secops.zip +0 -0
  915. package/engineering-team/senior-security.zip +0 -0
  916. package/engineering-team/skills/adversarial-reviewer/SKILL.md +247 -0
  917. package/engineering-team/skills/ai-security/SKILL.md +364 -0
  918. package/engineering-team/skills/ai-security/references/atlas-coverage.md +150 -0
  919. package/engineering-team/skills/ai-security/scripts/ai_threat_scanner.py +564 -0
  920. package/engineering-team/skills/aws-solution-architect/SKILL.md +381 -0
  921. package/engineering-team/skills/aws-solution-architect/assets/expected_output.json +55 -0
  922. package/engineering-team/skills/aws-solution-architect/assets/sample_input.json +18 -0
  923. package/engineering-team/skills/aws-solution-architect/references/architecture_patterns.md +535 -0
  924. package/engineering-team/skills/aws-solution-architect/references/best_practices.md +631 -0
  925. package/engineering-team/skills/aws-solution-architect/references/service_selection.md +484 -0
  926. package/engineering-team/skills/aws-solution-architect/scripts/architecture_designer.py +808 -0
  927. package/engineering-team/skills/aws-solution-architect/scripts/cost_optimizer.py +346 -0
  928. package/engineering-team/skills/aws-solution-architect/scripts/serverless_stack.py +663 -0
  929. package/engineering-team/skills/azure-cloud-architect/SKILL.md +463 -0
  930. package/engineering-team/skills/azure-cloud-architect/references/architecture_patterns.md +413 -0
  931. package/engineering-team/skills/azure-cloud-architect/references/best_practices.md +337 -0
  932. package/engineering-team/skills/azure-cloud-architect/references/service_selection.md +250 -0
  933. package/engineering-team/skills/azure-cloud-architect/scripts/architecture_designer.py +592 -0
  934. package/engineering-team/skills/azure-cloud-architect/scripts/bicep_generator.py +775 -0
  935. package/engineering-team/skills/azure-cloud-architect/scripts/cost_optimizer.py +492 -0
  936. package/engineering-team/skills/cloud-security/SKILL.md +343 -0
  937. package/engineering-team/skills/cloud-security/references/cspm-checks.md +109 -0
  938. package/engineering-team/skills/cloud-security/scripts/cloud_posture_check.py +1180 -0
  939. package/engineering-team/skills/code-reviewer/README.md +92 -0
  940. package/engineering-team/skills/code-reviewer/SKILL.md +183 -0
  941. package/engineering-team/skills/code-reviewer/assets/sample_c_clean.c +71 -0
  942. package/engineering-team/skills/code-reviewer/assets/sample_c_smells.c +66 -0
  943. package/engineering-team/skills/code-reviewer/assets/sample_csharp_clean.cs +100 -0
  944. package/engineering-team/skills/code-reviewer/assets/sample_csharp_smells.cs +78 -0
  945. package/engineering-team/skills/code-reviewer/assets/sample_java_clean.java +55 -0
  946. package/engineering-team/skills/code-reviewer/assets/sample_java_smells.java +56 -0
  947. package/engineering-team/skills/code-reviewer/expected_outputs/sample_c_clean_quality.json +65 -0
  948. package/engineering-team/skills/code-reviewer/expected_outputs/sample_c_smells_quality.json +155 -0
  949. package/engineering-team/skills/code-reviewer/expected_outputs/sample_csharp_clean_quality.json +135 -0
  950. package/engineering-team/skills/code-reviewer/expected_outputs/sample_csharp_smells_quality.json +143 -0
  951. package/engineering-team/skills/code-reviewer/expected_outputs/sample_java_clean_quality.json +53 -0
  952. package/engineering-team/skills/code-reviewer/expected_outputs/sample_java_smells_quality.json +83 -0
  953. package/engineering-team/skills/code-reviewer/languages/c.md +103 -0
  954. package/engineering-team/skills/code-reviewer/languages/cpp.md +103 -0
  955. package/engineering-team/skills/code-reviewer/languages/csharp.md +97 -0
  956. package/engineering-team/skills/code-reviewer/languages/dart.md +108 -0
  957. package/engineering-team/skills/code-reviewer/languages/go.md +92 -0
  958. package/engineering-team/skills/code-reviewer/languages/java.md +103 -0
  959. package/engineering-team/skills/code-reviewer/languages/kotlin.md +88 -0
  960. package/engineering-team/skills/code-reviewer/languages/php.md +109 -0
  961. package/engineering-team/skills/code-reviewer/languages/python.md +94 -0
  962. package/engineering-team/skills/code-reviewer/languages/ruby.md +105 -0
  963. package/engineering-team/skills/code-reviewer/languages/rust.md +99 -0
  964. package/engineering-team/skills/code-reviewer/languages/swift.md +88 -0
  965. package/engineering-team/skills/code-reviewer/languages/typescript.md +97 -0
  966. package/engineering-team/skills/code-reviewer/rules/universal.md +49 -0
  967. package/engineering-team/skills/code-reviewer/scripts/code_quality_checker.py +1020 -0
  968. package/engineering-team/skills/code-reviewer/scripts/pr_analyzer.py +535 -0
  969. package/engineering-team/skills/code-reviewer/scripts/review_report_generator.py +505 -0
  970. package/engineering-team/skills/email-template-builder/SKILL.md +439 -0
  971. package/engineering-team/skills/engineering-skills/SKILL.md +91 -0
  972. package/engineering-team/skills/epic-design/SKILL.md +353 -0
  973. package/engineering-team/skills/epic-design/references/accessibility.md +378 -0
  974. package/engineering-team/skills/epic-design/references/asset-pipeline.md +135 -0
  975. package/engineering-team/skills/epic-design/references/depth-system.md +361 -0
  976. package/engineering-team/skills/epic-design/references/directional-reveals.md +455 -0
  977. package/engineering-team/skills/epic-design/references/examples.md +344 -0
  978. package/engineering-team/skills/epic-design/references/inter-section-effects.md +493 -0
  979. package/engineering-team/skills/epic-design/references/motion-system.md +531 -0
  980. package/engineering-team/skills/epic-design/references/performance.md +261 -0
  981. package/engineering-team/skills/epic-design/references/text-animations.md +709 -0
  982. package/engineering-team/skills/epic-design/scripts/inspect-assets.py +269 -0
  983. package/engineering-team/skills/epic-design/scripts/validate-layers.js +165 -0
  984. package/engineering-team/skills/gcp-cloud-architect/SKILL.md +444 -0
  985. package/engineering-team/skills/gcp-cloud-architect/references/architecture_patterns.md +512 -0
  986. package/engineering-team/skills/gcp-cloud-architect/references/best_practices.md +467 -0
  987. package/engineering-team/skills/gcp-cloud-architect/references/service_selection.md +547 -0
  988. package/engineering-team/skills/gcp-cloud-architect/scripts/architecture_designer.py +805 -0
  989. package/engineering-team/skills/gcp-cloud-architect/scripts/cost_optimizer.py +465 -0
  990. package/engineering-team/skills/gcp-cloud-architect/scripts/deployment_manager.py +835 -0
  991. package/engineering-team/skills/incident-commander/README.md +252 -0
  992. package/engineering-team/skills/incident-commander/SKILL.md +476 -0
  993. package/engineering-team/skills/incident-commander/assets/incident_report_template.md +171 -0
  994. package/engineering-team/skills/incident-commander/assets/runbook_template.md +289 -0
  995. package/engineering-team/skills/incident-commander/assets/sample_incident_classification.json +14 -0
  996. package/engineering-team/skills/incident-commander/assets/sample_incident_data.json +276 -0
  997. package/engineering-team/skills/incident-commander/assets/sample_incident_pir_data.json +74 -0
  998. package/engineering-team/skills/incident-commander/assets/sample_timeline_events.json +263 -0
  999. package/engineering-team/skills/incident-commander/assets/simple_incident.json +6 -0
  1000. package/engineering-team/skills/incident-commander/assets/simple_timeline_events.json +30 -0
  1001. package/engineering-team/skills/incident-commander/expected_outputs/incident_classification_text_output.txt +44 -0
  1002. package/engineering-team/skills/incident-commander/expected_outputs/pir_markdown_output.md +88 -0
  1003. package/engineering-team/skills/incident-commander/expected_outputs/simple_incident_classification.txt +44 -0
  1004. package/engineering-team/skills/incident-commander/expected_outputs/timeline_reconstruction_text_output.txt +110 -0
  1005. package/engineering-team/skills/incident-commander/references/communication_templates.md +591 -0
  1006. package/engineering-team/skills/incident-commander/references/incident-response-framework.md +372 -0
  1007. package/engineering-team/skills/incident-commander/references/incident_severity_matrix.md +292 -0
  1008. package/engineering-team/skills/incident-commander/references/rca_frameworks_guide.md +562 -0
  1009. package/engineering-team/skills/incident-commander/references/reference-information.md +201 -0
  1010. package/engineering-team/skills/incident-commander/references/sla-management-guide.md +566 -0
  1011. package/engineering-team/skills/incident-commander/scripts/incident_classifier.py +914 -0
  1012. package/engineering-team/skills/incident-commander/scripts/incident_timeline_builder.py +742 -0
  1013. package/engineering-team/skills/incident-commander/scripts/pir_generator.py +1638 -0
  1014. package/engineering-team/skills/incident-commander/scripts/postmortem_generator.py +804 -0
  1015. package/engineering-team/skills/incident-commander/scripts/severity_classifier.py +1228 -0
  1016. package/engineering-team/skills/incident-commander/scripts/timeline_reconstructor.py +1007 -0
  1017. package/engineering-team/skills/incident-response/SKILL.md +322 -0
  1018. package/engineering-team/skills/incident-response/references/regulatory-deadlines.md +125 -0
  1019. package/engineering-team/skills/incident-response/scripts/incident_triage.py +768 -0
  1020. package/engineering-team/skills/ms365-tenant-manager/SKILL.md +273 -0
  1021. package/engineering-team/skills/ms365-tenant-manager/expected_output.json +86 -0
  1022. package/engineering-team/skills/ms365-tenant-manager/references/powershell-templates.md +704 -0
  1023. package/engineering-team/skills/ms365-tenant-manager/references/security-policies.md +357 -0
  1024. package/engineering-team/skills/ms365-tenant-manager/references/troubleshooting.md +411 -0
  1025. package/engineering-team/skills/ms365-tenant-manager/sample_input.json +21 -0
  1026. package/engineering-team/skills/ms365-tenant-manager/scripts/powershell_generator.py +430 -0
  1027. package/engineering-team/skills/ms365-tenant-manager/scripts/tenant_setup.py +447 -0
  1028. package/engineering-team/skills/ms365-tenant-manager/scripts/user_management.py +447 -0
  1029. package/engineering-team/skills/red-team/SKILL.md +335 -0
  1030. package/engineering-team/skills/red-team/references/attack-path-methodology.md +135 -0
  1031. package/engineering-team/skills/red-team/scripts/engagement_planner.py +420 -0
  1032. package/engineering-team/skills/security-pen-testing/SKILL.md +306 -0
  1033. package/engineering-team/skills/security-pen-testing/references/attack_patterns.md +629 -0
  1034. package/engineering-team/skills/security-pen-testing/references/owasp_top_10_checklist.md +440 -0
  1035. package/engineering-team/skills/security-pen-testing/references/responsible_disclosure.md +317 -0
  1036. package/engineering-team/skills/security-pen-testing/scripts/dependency_auditor.py +455 -0
  1037. package/engineering-team/skills/security-pen-testing/scripts/pentest_report_generator.py +462 -0
  1038. package/engineering-team/skills/security-pen-testing/scripts/vulnerability_scanner.py +545 -0
  1039. package/engineering-team/skills/senior-architect/SKILL.md +343 -0
  1040. package/engineering-team/skills/senior-architect/references/architecture_patterns.md +470 -0
  1041. package/engineering-team/skills/senior-architect/references/system_design_workflows.md +536 -0
  1042. package/engineering-team/skills/senior-architect/references/tech_decision_guide.md +412 -0
  1043. package/engineering-team/skills/senior-architect/scripts/architecture_diagram_generator.py +660 -0
  1044. package/engineering-team/skills/senior-architect/scripts/dependency_analyzer.py +615 -0
  1045. package/engineering-team/skills/senior-architect/scripts/project_architect.py +749 -0
  1046. package/engineering-team/skills/senior-backend/SKILL.md +467 -0
  1047. package/engineering-team/skills/senior-backend/profiles/django-monolith.json +57 -0
  1048. package/engineering-team/skills/senior-backend/profiles/fastapi-python.json +58 -0
  1049. package/engineering-team/skills/senior-backend/profiles/go-or-rust-microservice.json +62 -0
  1050. package/engineering-team/skills/senior-backend/profiles/node-express.json +57 -0
  1051. package/engineering-team/skills/senior-backend/references/api_design_patterns.md +530 -0
  1052. package/engineering-team/skills/senior-backend/references/backend_security_practices.md +1075 -0
  1053. package/engineering-team/skills/senior-backend/references/composition_map.md +58 -0
  1054. package/engineering-team/skills/senior-backend/references/database_optimization_guide.md +593 -0
  1055. package/engineering-team/skills/senior-backend/references/forcing_questions.md +100 -0
  1056. package/engineering-team/skills/senior-backend/scripts/api_load_tester.py +607 -0
  1057. package/engineering-team/skills/senior-backend/scripts/api_scaffolder.py +645 -0
  1058. package/engineering-team/skills/senior-backend/scripts/backend_decision_engine.py +397 -0
  1059. package/engineering-team/skills/senior-backend/scripts/database_migration_tool.py +858 -0
  1060. package/engineering-team/skills/senior-computer-vision/SKILL.md +438 -0
  1061. package/engineering-team/skills/senior-computer-vision/references/computer_vision_architectures.md +683 -0
  1062. package/engineering-team/skills/senior-computer-vision/references/object_detection_optimization.md +885 -0
  1063. package/engineering-team/skills/senior-computer-vision/references/production_vision_systems.md +1226 -0
  1064. package/engineering-team/skills/senior-computer-vision/references/reference-docs-and-commands.md +96 -0
  1065. package/engineering-team/skills/senior-computer-vision/scripts/dataset_pipeline_builder.py +1699 -0
  1066. package/engineering-team/skills/senior-computer-vision/scripts/inference_optimizer.py +557 -0
  1067. package/engineering-team/skills/senior-computer-vision/scripts/vision_model_trainer.py +576 -0
  1068. package/engineering-team/skills/senior-data-engineer/SKILL.md +191 -0
  1069. package/engineering-team/skills/senior-data-engineer/references/data_modeling_patterns.md +1058 -0
  1070. package/engineering-team/skills/senior-data-engineer/references/data_pipeline_architecture.md +1100 -0
  1071. package/engineering-team/skills/senior-data-engineer/references/dataops_best_practices.md +1502 -0
  1072. package/engineering-team/skills/senior-data-engineer/references/troubleshooting.md +183 -0
  1073. package/engineering-team/skills/senior-data-engineer/references/workflows.md +624 -0
  1074. package/engineering-team/skills/senior-data-engineer/scripts/data_quality_validator.py +1636 -0
  1075. package/engineering-team/skills/senior-data-engineer/scripts/etl_performance_optimizer.py +1685 -0
  1076. package/engineering-team/skills/senior-data-engineer/scripts/pipeline_orchestrator.py +883 -0
  1077. package/engineering-team/skills/senior-data-scientist/SKILL.md +223 -0
  1078. package/engineering-team/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
  1079. package/engineering-team/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
  1080. package/engineering-team/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
  1081. package/engineering-team/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
  1082. package/engineering-team/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
  1083. package/engineering-team/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
  1084. package/engineering-team/skills/senior-devops/SKILL.md +323 -0
  1085. package/engineering-team/skills/senior-devops/references/cicd_pipeline_guide.md +103 -0
  1086. package/engineering-team/skills/senior-devops/references/deployment_strategies.md +103 -0
  1087. package/engineering-team/skills/senior-devops/references/infrastructure_as_code.md +103 -0
  1088. package/engineering-team/skills/senior-devops/scripts/deployment_manager.py +114 -0
  1089. package/engineering-team/skills/senior-devops/scripts/pipeline_generator.py +114 -0
  1090. package/engineering-team/skills/senior-devops/scripts/terraform_scaffolder.py +114 -0
  1091. package/engineering-team/skills/senior-frontend/SKILL.md +572 -0
  1092. package/engineering-team/skills/senior-frontend/profiles/astro-or-static.json +59 -0
  1093. package/engineering-team/skills/senior-frontend/profiles/next-app-router.json +60 -0
  1094. package/engineering-team/skills/senior-frontend/profiles/remix-or-sveltekit.json +56 -0
  1095. package/engineering-team/skills/senior-frontend/profiles/vite-spa.json +56 -0
  1096. package/engineering-team/skills/senior-frontend/references/composition_map.md +50 -0
  1097. package/engineering-team/skills/senior-frontend/references/forcing_questions.md +102 -0
  1098. package/engineering-team/skills/senior-frontend/references/frontend_best_practices.md +806 -0
  1099. package/engineering-team/skills/senior-frontend/references/nextjs_optimization_guide.md +724 -0
  1100. package/engineering-team/skills/senior-frontend/references/react_patterns.md +746 -0
  1101. package/engineering-team/skills/senior-frontend/scripts/bundle_analyzer.py +407 -0
  1102. package/engineering-team/skills/senior-frontend/scripts/component_generator.py +329 -0
  1103. package/engineering-team/skills/senior-frontend/scripts/frontend_decision_engine.py +327 -0
  1104. package/engineering-team/skills/senior-frontend/scripts/frontend_scaffolder.py +1005 -0
  1105. package/engineering-team/skills/senior-fullstack/SKILL.md +412 -0
  1106. package/engineering-team/skills/senior-fullstack/profiles/enterprise-scale.json +75 -0
  1107. package/engineering-team/skills/senior-fullstack/profiles/internal-tool.json +60 -0
  1108. package/engineering-team/skills/senior-fullstack/profiles/marketing-site.json +65 -0
  1109. package/engineering-team/skills/senior-fullstack/profiles/saas-startup.json +71 -0
  1110. package/engineering-team/skills/senior-fullstack/references/architecture_patterns.md +547 -0
  1111. package/engineering-team/skills/senior-fullstack/references/composition_map.md +52 -0
  1112. package/engineering-team/skills/senior-fullstack/references/development_workflows.md +784 -0
  1113. package/engineering-team/skills/senior-fullstack/references/forcing_questions.md +100 -0
  1114. package/engineering-team/skills/senior-fullstack/references/tech_stack_guide.md +590 -0
  1115. package/engineering-team/skills/senior-fullstack/scripts/code_quality_analyzer.py +691 -0
  1116. package/engineering-team/skills/senior-fullstack/scripts/fullstack_decision_engine.py +403 -0
  1117. package/engineering-team/skills/senior-fullstack/scripts/project_scaffolder.py +867 -0
  1118. package/engineering-team/skills/senior-ml-engineer/SKILL.md +304 -0
  1119. package/engineering-team/skills/senior-ml-engineer/references/llm_integration_guide.md +317 -0
  1120. package/engineering-team/skills/senior-ml-engineer/references/mlops_production_patterns.md +265 -0
  1121. package/engineering-team/skills/senior-ml-engineer/references/rag_system_architecture.md +371 -0
  1122. package/engineering-team/skills/senior-ml-engineer/scripts/ml_monitoring_suite.py +100 -0
  1123. package/engineering-team/skills/senior-ml-engineer/scripts/model_deployment_pipeline.py +100 -0
  1124. package/engineering-team/skills/senior-ml-engineer/scripts/rag_system_builder.py +100 -0
  1125. package/engineering-team/skills/senior-prompt-engineer/SKILL.md +355 -0
  1126. package/engineering-team/skills/senior-prompt-engineer/references/agentic_system_design.md +646 -0
  1127. package/engineering-team/skills/senior-prompt-engineer/references/llm_evaluation_frameworks.md +524 -0
  1128. package/engineering-team/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +572 -0
  1129. package/engineering-team/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +560 -0
  1130. package/engineering-team/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +519 -0
  1131. package/engineering-team/skills/senior-prompt-engineer/scripts/rag_evaluator.py +574 -0
  1132. package/engineering-team/skills/senior-qa/README.md +196 -0
  1133. package/engineering-team/skills/senior-qa/SKILL.md +331 -0
  1134. package/engineering-team/skills/senior-qa/references/qa_best_practices.md +964 -0
  1135. package/engineering-team/skills/senior-qa/references/test_automation_patterns.md +1009 -0
  1136. package/engineering-team/skills/senior-qa/references/testing_strategies.md +649 -0
  1137. package/engineering-team/skills/senior-qa/scripts/coverage_analyzer.py +836 -0
  1138. package/engineering-team/skills/senior-qa/scripts/e2e_test_scaffolder.py +820 -0
  1139. package/engineering-team/skills/senior-qa/scripts/test_suite_generator.py +605 -0
  1140. package/engineering-team/skills/senior-secops/SKILL.md +505 -0
  1141. package/engineering-team/skills/senior-secops/references/compliance_requirements.md +792 -0
  1142. package/engineering-team/skills/senior-secops/references/security_standards.md +718 -0
  1143. package/engineering-team/skills/senior-secops/references/vulnerability_management_guide.md +487 -0
  1144. package/engineering-team/skills/senior-secops/scripts/compliance_checker.py +1107 -0
  1145. package/engineering-team/skills/senior-secops/scripts/security_scanner.py +471 -0
  1146. package/engineering-team/skills/senior-secops/scripts/vulnerability_assessor.py +563 -0
  1147. package/engineering-team/skills/senior-security/SKILL.md +444 -0
  1148. package/engineering-team/skills/senior-security/references/cryptography-implementation.md +775 -0
  1149. package/engineering-team/skills/senior-security/references/security-architecture-patterns.md +615 -0
  1150. package/engineering-team/skills/senior-security/references/threat-modeling-guide.md +518 -0
  1151. package/engineering-team/skills/senior-security/scripts/secret_scanner.py +516 -0
  1152. package/engineering-team/skills/senior-security/scripts/threat_modeler.py +609 -0
  1153. package/engineering-team/skills/skill-authoring/SKILL.md +125 -0
  1154. package/engineering-team/skills/stripe-integration-expert/SKILL.md +476 -0
  1155. package/engineering-team/skills/tdd-guide/HOW_TO_USE.md +313 -0
  1156. package/engineering-team/skills/tdd-guide/README.md +680 -0
  1157. package/engineering-team/skills/tdd-guide/SKILL.md +403 -0
  1158. package/engineering-team/skills/tdd-guide/assets/expected_output.json +77 -0
  1159. package/engineering-team/skills/tdd-guide/assets/sample_coverage_report.lcov +56 -0
  1160. package/engineering-team/skills/tdd-guide/assets/sample_input_python.json +39 -0
  1161. package/engineering-team/skills/tdd-guide/assets/sample_input_typescript.json +36 -0
  1162. package/engineering-team/skills/tdd-guide/references/ci-integration.md +195 -0
  1163. package/engineering-team/skills/tdd-guide/references/framework-guide.md +206 -0
  1164. package/engineering-team/skills/tdd-guide/references/tdd-best-practices.md +128 -0
  1165. package/engineering-team/skills/tdd-guide/scripts/coverage_analyzer.py +434 -0
  1166. package/engineering-team/skills/tdd-guide/scripts/fixture_generator.py +440 -0
  1167. package/engineering-team/skills/tdd-guide/scripts/format_detector.py +384 -0
  1168. package/engineering-team/skills/tdd-guide/scripts/framework_adapter.py +428 -0
  1169. package/engineering-team/skills/tdd-guide/scripts/metrics_calculator.py +456 -0
  1170. package/engineering-team/skills/tdd-guide/scripts/output_formatter.py +354 -0
  1171. package/engineering-team/skills/tdd-guide/scripts/tdd_workflow.py +474 -0
  1172. package/engineering-team/skills/tdd-guide/scripts/test_generator.py +438 -0
  1173. package/engineering-team/skills/tech-stack-evaluator/SKILL.md +184 -0
  1174. package/engineering-team/skills/tech-stack-evaluator/assets/expected_output_comparison.json +82 -0
  1175. package/engineering-team/skills/tech-stack-evaluator/assets/sample_input_structured.json +39 -0
  1176. package/engineering-team/skills/tech-stack-evaluator/assets/sample_input_tco.json +42 -0
  1177. package/engineering-team/skills/tech-stack-evaluator/assets/sample_input_text.json +4 -0
  1178. package/engineering-team/skills/tech-stack-evaluator/references/examples.md +383 -0
  1179. package/engineering-team/skills/tech-stack-evaluator/references/metrics.md +242 -0
  1180. package/engineering-team/skills/tech-stack-evaluator/references/workflows.md +362 -0
  1181. package/engineering-team/skills/tech-stack-evaluator/scripts/ecosystem_analyzer.py +501 -0
  1182. package/engineering-team/skills/tech-stack-evaluator/scripts/format_detector.py +430 -0
  1183. package/engineering-team/skills/tech-stack-evaluator/scripts/migration_analyzer.py +587 -0
  1184. package/engineering-team/skills/tech-stack-evaluator/scripts/report_generator.py +460 -0
  1185. package/engineering-team/skills/tech-stack-evaluator/scripts/security_assessor.py +518 -0
  1186. package/engineering-team/skills/tech-stack-evaluator/scripts/stack_comparator.py +389 -0
  1187. package/engineering-team/skills/tech-stack-evaluator/scripts/tco_calculator.py +458 -0
  1188. package/engineering-team/skills/threat-detection/SKILL.md +299 -0
  1189. package/engineering-team/skills/threat-detection/references/hunt-playbooks.md +145 -0
  1190. package/engineering-team/skills/threat-detection/scripts/threat_signal_analyzer.py +571 -0
  1191. package/engineering-team/snowflake-development/.claude-plugin/plugin.json +15 -0
  1192. package/engineering-team/snowflake-development/skills/snowflake-development/SKILL.md +294 -0
  1193. package/engineering-team/snowflake-development/skills/snowflake-development/references/cortex_ai_and_agents.md +280 -0
  1194. package/engineering-team/snowflake-development/skills/snowflake-development/references/snowflake_sql_and_pipelines.md +281 -0
  1195. package/engineering-team/snowflake-development/skills/snowflake-development/references/troubleshooting.md +155 -0
  1196. package/engineering-team/snowflake-development/skills/snowflake-development/scripts/snowflake_query_helper.py +233 -0
  1197. package/engineering-team/tdd-guide.zip +0 -0
  1198. package/engineering-team/tech-stack-evaluator.zip +0 -0
  1199. package/finance/business-investment-advisor/SKILL.md +220 -0
  1200. package/finance/finance-skills/SKILL.md +55 -0
  1201. package/finance/financial-analyst/SKILL.md +148 -0
  1202. package/finance/saas-metrics-coach/SKILL.md +158 -0
  1203. package/marketing/ab-test-setup/SKILL.md +302 -0
  1204. package/marketing/ad-creative/SKILL.md +267 -0
  1205. package/marketing/aeo/SKILL.md +214 -0
  1206. package/marketing/ai-seo/SKILL.md +331 -0
  1207. package/marketing/analytics-tracking/SKILL.md +371 -0
  1208. package/marketing/app-store-optimization/SKILL.md +486 -0
  1209. package/marketing/brand-guidelines/SKILL.md +93 -0
  1210. package/marketing/campaign-analytics/SKILL.md +228 -0
  1211. package/marketing/churn-prevention/SKILL.md +240 -0
  1212. package/marketing/cold-email/SKILL.md +272 -0
  1213. package/marketing/competitor-alternatives/SKILL.md +290 -0
  1214. package/marketing/content-creator/SKILL.md +55 -0
  1215. package/marketing/content-humanizer/SKILL.md +261 -0
  1216. package/marketing/content-production/SKILL.md +245 -0
  1217. package/marketing/content-strategy/SKILL.md +127 -0
  1218. package/marketing/copy-editing/SKILL.md +491 -0
  1219. package/marketing/copywriting/SKILL.md +296 -0
  1220. package/marketing/email-sequence/SKILL.md +135 -0
  1221. package/marketing/form-cro/SKILL.md +204 -0
  1222. package/marketing/free-tool-strategy/SKILL.md +272 -0
  1223. package/marketing/landing/SKILL.md +346 -0
  1224. package/marketing/launch-strategy/SKILL.md +74 -0
  1225. package/marketing/marketing-context/SKILL.md +169 -0
  1226. package/marketing/marketing-demand-acquisition/SKILL.md +312 -0
  1227. package/marketing/marketing-ideas/SKILL.md +211 -0
  1228. package/marketing/marketing-ops/SKILL.md +190 -0
  1229. package/marketing/marketing-psychology/SKILL.md +123 -0
  1230. package/marketing/marketing-skills/SKILL.md +105 -0
  1231. package/marketing/marketing-strategy-pmm/SKILL.md +398 -0
  1232. package/marketing/onboarding-cro/SKILL.md +251 -0
  1233. package/marketing/page-cro/SKILL.md +222 -0
  1234. package/marketing/paid-ads/SKILL.md +347 -0
  1235. package/marketing/paywall-upgrade-cro/SKILL.md +258 -0
  1236. package/marketing/popup-cro/SKILL.md +229 -0
  1237. package/marketing/pricing-strategy/SKILL.md +323 -0
  1238. package/marketing/programmatic-seo/SKILL.md +278 -0
  1239. package/marketing/prompt-engineer-toolkit/SKILL.md +138 -0
  1240. package/marketing/referral-program/SKILL.md +286 -0
  1241. package/marketing/schema-markup/SKILL.md +233 -0
  1242. package/marketing/seo-audit/SKILL.md +154 -0
  1243. package/marketing/signup-flow-cro/SKILL.md +225 -0
  1244. package/marketing/site-architecture/SKILL.md +289 -0
  1245. package/marketing/social-content/SKILL.md +323 -0
  1246. package/marketing/social-media-analyzer/SKILL.md +309 -0
  1247. package/marketing/social-media-manager/SKILL.md +197 -0
  1248. package/marketing/webinar-marketing/SKILL.md +202 -0
  1249. package/marketing/x-twitter-growth/SKILL.md +226 -0
  1250. package/marketing/youtube-full/SKILL.md +171 -0
  1251. package/package.json +94 -73
  1252. package/product/agile-product-owner/SKILL.md +409 -0
  1253. package/product/apple-hig-expert/SKILL.md +90 -0
  1254. package/product/code-to-prd/SKILL.md +507 -0
  1255. package/product/competitive-teardown/SKILL.md +171 -0
  1256. package/product/experiment-designer/SKILL.md +104 -0
  1257. package/product/landing-page-generator/SKILL.md +198 -0
  1258. package/product/product-analytics/SKILL.md +147 -0
  1259. package/product/product-discovery/SKILL.md +114 -0
  1260. package/product/product-manager-toolkit/SKILL.md +352 -0
  1261. package/product/product-skills/SKILL.md +61 -0
  1262. package/product/product-strategist/SKILL.md +227 -0
  1263. package/product/research-summarizer/SKILL.md +274 -0
  1264. package/product/roadmap-communicator/SKILL.md +92 -0
  1265. package/product/saas-scaffolder/SKILL.md +293 -0
  1266. package/product/spec-to-repo/SKILL.md +274 -0
  1267. package/product/ui-design-system/SKILL.md +379 -0
  1268. package/product/ux-researcher-designer/SKILL.md +419 -0
  1269. package/productivity/andreessen/SKILL.md +178 -0
  1270. package/productivity/capture/SKILL.md +212 -0
  1271. package/productivity/handoff/SKILL.md +197 -0
  1272. package/productivity/inbox-setup/SKILL.md +229 -0
  1273. package/productivity/inbox-triage/SKILL.md +312 -0
  1274. package/productivity/reflect/SKILL.md +182 -0
  1275. package/project-management/atlassian-admin/SKILL.md +234 -0
  1276. package/project-management/atlassian-templates/SKILL.md +252 -0
  1277. package/project-management/confluence-expert/SKILL.md +375 -0
  1278. package/project-management/jira-expert/SKILL.md +305 -0
  1279. package/project-management/meeting-analyzer/SKILL.md +255 -0
  1280. package/project-management/pm-skills/SKILL.md +59 -0
  1281. package/project-management/scrum-master/SKILL.md +222 -0
  1282. package/project-management/senior-pm/SKILL.md +408 -0
  1283. package/project-management/team-communications/SKILL.md +67 -0
  1284. package/research/dossier/.claude-plugin/plugin.json +20 -0
  1285. package/research/dossier/README.md +59 -0
  1286. package/research/dossier/agents/cs-dossier.md +81 -0
  1287. package/research/dossier/commands/cs-dossier.md +141 -0
  1288. package/research/dossier/skills/dossier/SKILL.md +318 -0
  1289. package/research/dossier/skills/dossier/references/conversation_hook_quality.md +135 -0
  1290. package/research/dossier/skills/dossier/references/hypothesis_testing_discipline.md +158 -0
  1291. package/research/dossier/skills/dossier/references/subject_type_source_matrix.md +203 -0
  1292. package/research/dossier/skills/dossier/scripts/citation_tracker.py +286 -0
  1293. package/research/dossier/skills/dossier/scripts/disconfirming_evidence_balance.py +205 -0
  1294. package/research/dossier/skills/dossier/scripts/source_tier_classifier.py +238 -0
  1295. package/research/grants/.claude-plugin/plugin.json +20 -0
  1296. package/research/grants/README.md +54 -0
  1297. package/research/grants/agents/cs-grants.md +75 -0
  1298. package/research/grants/commands/cs-grants.md +128 -0
  1299. package/research/grants/skills/grants/SKILL.md +286 -0
  1300. package/research/grants/skills/grants/references/docx_9_sections.md +289 -0
  1301. package/research/grants/skills/grants/references/nih_mechanism_matching.md +163 -0
  1302. package/research/grants/skills/grants/references/reporter_post_patterns.md +194 -0
  1303. package/research/grants/skills/grants/scripts/citation_tracker.py +303 -0
  1304. package/research/grants/skills/grants/scripts/fiscal_year_calculator.py +95 -0
  1305. package/research/grants/skills/grants/scripts/mechanism_matcher.py +216 -0
  1306. package/research/litreview/.claude-plugin/plugin.json +20 -0
  1307. package/research/litreview/README.md +75 -0
  1308. package/research/litreview/agents/cs-litreview.md +171 -0
  1309. package/research/litreview/commands/cs-litreview.md +143 -0
  1310. package/research/litreview/skills/litreview/SKILL.md +251 -0
  1311. package/research/litreview/skills/litreview/references/docx_8_sections.md +287 -0
  1312. package/research/litreview/skills/litreview/references/framework_selection.md +174 -0
  1313. package/research/litreview/skills/litreview/references/search_budget_allocation.md +200 -0
  1314. package/research/litreview/skills/litreview/scripts/citation_tracker.py +258 -0
  1315. package/research/litreview/skills/litreview/scripts/cross_search_aggregator.py +239 -0
  1316. package/research/litreview/skills/litreview/scripts/framework_recommender.py +204 -0
  1317. package/research/notebooklm/.claude-plugin/plugin.json +20 -0
  1318. package/research/notebooklm/README.md +69 -0
  1319. package/research/notebooklm/agents/cs-notebooklm.md +83 -0
  1320. package/research/notebooklm/commands/cs-notebooklm.md +152 -0
  1321. package/research/notebooklm/skills/notebooklm/SKILL.md +290 -0
  1322. package/research/notebooklm/skills/notebooklm/references/async_action_discipline.md +206 -0
  1323. package/research/notebooklm/skills/notebooklm/references/browser_automation_canon.md +192 -0
  1324. package/research/notebooklm/skills/notebooklm/references/studio_output_custom_prompts.md +217 -0
  1325. package/research/notebooklm/skills/notebooklm/scripts/action_router.py +272 -0
  1326. package/research/notebooklm/skills/notebooklm/scripts/async_action_classifier.py +237 -0
  1327. package/research/notebooklm/skills/notebooklm/scripts/custom_prompt_template_generator.py +270 -0
  1328. package/research/patent/.claude-plugin/plugin.json +20 -0
  1329. package/research/patent/README.md +61 -0
  1330. package/research/patent/agents/cs-patent.md +76 -0
  1331. package/research/patent/commands/cs-patent.md +101 -0
  1332. package/research/patent/skills/patent/SKILL.md +287 -0
  1333. package/research/patent/skills/patent/references/cpc_classification_canon.md +154 -0
  1334. package/research/patent/skills/patent/references/legal_disclaimer_discipline.md +137 -0
  1335. package/research/patent/skills/patent/references/sub_use_case_routing.md +252 -0
  1336. package/research/patent/skills/patent/scripts/citation_tracker.py +241 -0
  1337. package/research/patent/skills/patent/scripts/family_resolver.py +260 -0
  1338. package/research/patent/skills/patent/scripts/sub_use_case_router.py +255 -0
  1339. package/research/pulse/.claude-plugin/plugin.json +19 -0
  1340. package/research/pulse/README.md +57 -0
  1341. package/research/pulse/agents/cs-pulse.md +201 -0
  1342. package/research/pulse/commands/cs-pulse.md +129 -0
  1343. package/research/pulse/skills/pulse/SKILL.md +258 -0
  1344. package/research/pulse/skills/pulse/references/cross_platform_synthesis.md +181 -0
  1345. package/research/pulse/skills/pulse/references/parallel_execution_discipline.md +156 -0
  1346. package/research/pulse/skills/pulse/references/research_pack_conventions.md +108 -0
  1347. package/research/pulse/skills/pulse/scripts/citation_tracker.py +251 -0
  1348. package/research/pulse/skills/pulse/scripts/time_window_calculator.py +140 -0
  1349. package/research/pulse/skills/pulse/scripts/topic_slug_generator.py +145 -0
  1350. package/research/research/.claude-plugin/plugin.json +28 -0
  1351. package/research/research/README.md +72 -0
  1352. package/research/research/agents/cs-research.md +90 -0
  1353. package/research/research/commands/cs-research.md +169 -0
  1354. package/research/research/skills/research/SKILL.md +319 -0
  1355. package/research/research/skills/research/references/deterministic_classification_canon.md +162 -0
  1356. package/research/research/skills/research/references/fallback_workflow_canon.md +214 -0
  1357. package/research/research/skills/research/references/hybrid_router_architecture.md +154 -0
  1358. package/research/research/skills/research/scripts/classifier.py +156 -0
  1359. package/research/research/skills/research/scripts/fallback_decomposer.py +107 -0
  1360. package/research/research/skills/research/scripts/routing_transparency_logger.py +200 -0
  1361. package/research/syllabus/.claude-plugin/plugin.json +20 -0
  1362. package/research/syllabus/README.md +68 -0
  1363. package/research/syllabus/agents/cs-syllabus.md +84 -0
  1364. package/research/syllabus/commands/cs-syllabus.md +143 -0
  1365. package/research/syllabus/skills/syllabus/SKILL.md +293 -0
  1366. package/research/syllabus/skills/syllabus/references/applied_domain_weaving.md +148 -0
  1367. package/research/syllabus/skills/syllabus/references/audience_calibration.md +167 -0
  1368. package/research/syllabus/skills/syllabus/references/bundled_script_pattern.md +150 -0
  1369. package/research/syllabus/skills/syllabus/scripts/citation_tracker.py +217 -0
  1370. package/research/syllabus/skills/syllabus/scripts/discussion_question_validator.py +196 -0
  1371. package/research/syllabus/skills/syllabus/scripts/generate_reading_list.js +395 -0
  1372. package/research/syllabus/skills/syllabus/scripts/topic_grouper.py +198 -0
  1373. package/research-ops/.claude-plugin/plugin.json +24 -0
  1374. package/research-ops/CLAUDE.md +62 -0
  1375. package/research-ops/agents/cs-research-ops-orchestrator.md +94 -0
  1376. package/research-ops/commands/cs-clinical-research.md +40 -0
  1377. package/research-ops/commands/cs-grill-research-ops.md +77 -0
  1378. package/research-ops/commands/cs-market-research.md +40 -0
  1379. package/research-ops/commands/cs-product-research.md +41 -0
  1380. package/research-ops/commands/cs-research-finance.md +39 -0
  1381. package/research-ops/commands/cs-research-ops.md +43 -0
  1382. package/research-ops/skills/clinical-research/SKILL.md +146 -0
  1383. package/research-ops/skills/clinical-research/assets/protocol_synopsis_template.md +57 -0
  1384. package/research-ops/skills/clinical-research/references/endpoint_and_power.md +37 -0
  1385. package/research-ops/skills/clinical-research/references/study_design_canon.md +36 -0
  1386. package/research-ops/skills/clinical-research/references/trial_operations.md +33 -0
  1387. package/research-ops/skills/clinical-research/scripts/ar_evaluator.py +74 -0
  1388. package/research-ops/skills/clinical-research/scripts/config_loader.py +123 -0
  1389. package/research-ops/skills/clinical-research/scripts/endpoint_selector.py +183 -0
  1390. package/research-ops/skills/clinical-research/scripts/onboard.py +144 -0
  1391. package/research-ops/skills/clinical-research/scripts/phase_gate_scorer.py +234 -0
  1392. package/research-ops/skills/clinical-research/scripts/sample_size_estimator.py +205 -0
  1393. package/research-ops/skills/market-research/SKILL.md +146 -0
  1394. package/research-ops/skills/market-research/assets/market_research_brief_template.md +36 -0
  1395. package/research-ops/skills/market-research/references/market_sizing_canon.md +36 -0
  1396. package/research-ops/skills/market-research/references/segmentation_and_ci.md +43 -0
  1397. package/research-ops/skills/market-research/references/survey_methodology.md +39 -0
  1398. package/research-ops/skills/market-research/scripts/ar_evaluator.py +77 -0
  1399. package/research-ops/skills/market-research/scripts/config_loader.py +114 -0
  1400. package/research-ops/skills/market-research/scripts/market_sizer.py +162 -0
  1401. package/research-ops/skills/market-research/scripts/onboard.py +117 -0
  1402. package/research-ops/skills/market-research/scripts/sample_size_planner.py +183 -0
  1403. package/research-ops/skills/market-research/scripts/segmentation_scorer.py +139 -0
  1404. package/research-ops/skills/product-research/SKILL.md +145 -0
  1405. package/research-ops/skills/product-research/assets/research_plan_template.md +50 -0
  1406. package/research-ops/skills/product-research/references/repository_and_synthesis.md +28 -0
  1407. package/research-ops/skills/product-research/references/research_methods_canon.md +34 -0
  1408. package/research-ops/skills/product-research/references/sampling_and_saturation.md +29 -0
  1409. package/research-ops/skills/product-research/scripts/ar_evaluator.py +68 -0
  1410. package/research-ops/skills/product-research/scripts/config_loader.py +114 -0
  1411. package/research-ops/skills/product-research/scripts/insight_synthesizer.py +113 -0
  1412. package/research-ops/skills/product-research/scripts/onboard.py +124 -0
  1413. package/research-ops/skills/product-research/scripts/saturation_planner.py +144 -0
  1414. package/research-ops/skills/product-research/scripts/study_designer.py +139 -0
  1415. package/research-ops/skills/research-finance/SKILL.md +146 -0
  1416. package/research-ops/skills/research-finance/assets/rd_program_budget_template.md +48 -0
  1417. package/research-ops/skills/research-finance/references/burn_and_portfolio.md +28 -0
  1418. package/research-ops/skills/research-finance/references/indirect_rate_modeling.md +42 -0
  1419. package/research-ops/skills/research-finance/references/rd_program_finance_canon.md +29 -0
  1420. package/research-ops/skills/research-finance/scripts/ar_evaluator.py +74 -0
  1421. package/research-ops/skills/research-finance/scripts/burn_runway_tracker.py +153 -0
  1422. package/research-ops/skills/research-finance/scripts/capex_vs_opex_router.py +189 -0
  1423. package/research-ops/skills/research-finance/scripts/config_loader.py +115 -0
  1424. package/research-ops/skills/research-finance/scripts/onboard.py +120 -0
  1425. package/research-ops/skills/research-finance/scripts/program_budget_planner.py +165 -0
  1426. package/research-ops/skills/research-ops-skills/SKILL.md +156 -0
  1427. package/superpowers/brainstorming/SKILL.md +146 -0
  1428. package/superpowers/dispatching-parallel-agents/SKILL.md +146 -0
  1429. package/superpowers/executing-plans/SKILL.md +140 -0
  1430. package/superpowers/finding-duplicate-functions/SKILL.md +161 -0
  1431. package/superpowers/finishing-a-development-branch/SKILL.md +225 -0
  1432. package/superpowers/mcp-cli/SKILL.md +135 -0
  1433. package/superpowers/receiving-code-review/SKILL.md +158 -0
  1434. package/superpowers/requesting-code-review/SKILL.md +181 -0
  1435. package/superpowers/subagent-driven-development/SKILL.md +144 -0
  1436. package/superpowers/systematic-debugging/SKILL.md +165 -0
  1437. package/superpowers/test-driven-development/SKILL.md +165 -0
  1438. package/superpowers/using-git-worktrees/SKILL.md +169 -0
  1439. package/superpowers/using-superpowers/SKILL.md +117 -0
  1440. package/superpowers/using-tmux-for-interactive-commands/SKILL.md +187 -0
  1441. package/superpowers/verification-before-completion/SKILL.md +168 -0
  1442. package/superpowers/windows-vm/SKILL.md +205 -0
  1443. package/superpowers/writing-plans/SKILL.md +155 -0
  1444. package/superpowers/writing-skills/SKILL.md +195 -0
@@ -0,0 +1,1638 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ PIR (Post-Incident Review) Generator
4
+
5
+ Generates comprehensive Post-Incident Review documents from incident data, timelines,
6
+ and actions taken. Applies multiple RCA frameworks including 5 Whys, Fishbone diagram,
7
+ and Timeline analysis.
8
+
9
+ This tool creates structured PIR documents with root cause analysis, lessons learned,
10
+ action items, and follow-up recommendations.
11
+
12
+ Usage:
13
+ python pir_generator.py --incident incident.json --timeline timeline.json --output pir.md
14
+ python pir_generator.py --incident incident.json --rca-method fishbone --action-items
15
+ cat incident.json | python pir_generator.py --format markdown
16
+ """
17
+
18
+ import argparse
19
+ import json
20
+ import sys
21
+ import re
22
+ from datetime import datetime, timezone, timedelta
23
+ from typing import Dict, List, Optional, Any, Tuple
24
+ from collections import defaultdict, Counter
25
+
26
+
27
+ class PIRGenerator:
28
+ """
29
+ Generates comprehensive Post-Incident Review documents with multiple
30
+ RCA frameworks, lessons learned, and actionable follow-up items.
31
+ """
32
+
33
+ def __init__(self):
34
+ """Initialize the PIR generator with templates and frameworks."""
35
+ self.rca_frameworks = self._load_rca_frameworks()
36
+ self.pir_templates = self._load_pir_templates()
37
+ self.severity_guidelines = self._load_severity_guidelines()
38
+ self.action_item_types = self._load_action_item_types()
39
+ self.lessons_learned_categories = self._load_lessons_learned_categories()
40
+
41
+ def _load_rca_frameworks(self) -> Dict[str, Dict]:
42
+ """Load root cause analysis framework definitions."""
43
+ return {
44
+ "five_whys": {
45
+ "name": "5 Whys Analysis",
46
+ "description": "Iterative questioning technique to explore cause-and-effect relationships",
47
+ "steps": [
48
+ "State the problem clearly",
49
+ "Ask why the problem occurred",
50
+ "For each answer, ask why again",
51
+ "Continue until root cause is identified",
52
+ "Verify the root cause addresses the original problem"
53
+ ],
54
+ "min_iterations": 3,
55
+ "max_iterations": 7
56
+ },
57
+ "fishbone": {
58
+ "name": "Fishbone (Ishikawa) Diagram",
59
+ "description": "Systematic analysis across multiple categories of potential causes",
60
+ "categories": [
61
+ {
62
+ "name": "People",
63
+ "description": "Human factors, training, communication, experience",
64
+ "examples": ["Training gaps", "Communication failures", "Skill deficits", "Staffing issues"]
65
+ },
66
+ {
67
+ "name": "Process",
68
+ "description": "Procedures, workflows, change management, review processes",
69
+ "examples": ["Missing procedures", "Inadequate reviews", "Change management gaps", "Documentation issues"]
70
+ },
71
+ {
72
+ "name": "Technology",
73
+ "description": "Systems, tools, architecture, automation",
74
+ "examples": ["Architecture limitations", "Tool deficiencies", "Automation gaps", "Infrastructure issues"]
75
+ },
76
+ {
77
+ "name": "Environment",
78
+ "description": "External factors, dependencies, infrastructure",
79
+ "examples": ["Third-party dependencies", "Network issues", "Hardware failures", "External service outages"]
80
+ }
81
+ ]
82
+ },
83
+ "timeline": {
84
+ "name": "Timeline Analysis",
85
+ "description": "Chronological analysis of events to identify decision points and missed opportunities",
86
+ "focus_areas": [
87
+ "Detection timing and effectiveness",
88
+ "Response time and escalation paths",
89
+ "Decision points and alternative paths",
90
+ "Communication effectiveness",
91
+ "Mitigation strategy effectiveness"
92
+ ]
93
+ },
94
+ "bow_tie": {
95
+ "name": "Bow Tie Analysis",
96
+ "description": "Analysis of both preventive and protective measures around an incident",
97
+ "components": [
98
+ "Hazards (what could go wrong)",
99
+ "Top events (what actually went wrong)",
100
+ "Threats (what caused it)",
101
+ "Consequences (what was the impact)",
102
+ "Barriers (what preventive/protective measures exist or could exist)"
103
+ ]
104
+ }
105
+ }
106
+
107
+ def _load_pir_templates(self) -> Dict[str, str]:
108
+ """Load PIR document templates for different severity levels."""
109
+ return {
110
+ "comprehensive": """# Post-Incident Review: {incident_title}
111
+
112
+ ## Executive Summary
113
+ {executive_summary}
114
+
115
+ ## Incident Overview
116
+ - **Incident ID:** {incident_id}
117
+ - **Date & Time:** {incident_date}
118
+ - **Duration:** {duration}
119
+ - **Severity:** {severity}
120
+ - **Status:** {status}
121
+ - **Incident Commander:** {incident_commander}
122
+ - **Responders:** {responders}
123
+
124
+ ### Customer Impact
125
+ {customer_impact}
126
+
127
+ ### Business Impact
128
+ {business_impact}
129
+
130
+ ## Timeline
131
+ {timeline_section}
132
+
133
+ ## Root Cause Analysis
134
+ {rca_section}
135
+
136
+ ## What Went Well
137
+ {what_went_well}
138
+
139
+ ## What Didn't Go Well
140
+ {what_went_wrong}
141
+
142
+ ## Lessons Learned
143
+ {lessons_learned}
144
+
145
+ ## Action Items
146
+ {action_items}
147
+
148
+ ## Follow-up and Prevention
149
+ {prevention_measures}
150
+
151
+ ## Appendix
152
+ {appendix_section}
153
+
154
+ ---
155
+ *Generated on {generation_date} by PIR Generator*
156
+ """,
157
+ "standard": """# Post-Incident Review: {incident_title}
158
+
159
+ ## Summary
160
+ {executive_summary}
161
+
162
+ ## Incident Details
163
+ - **Date:** {incident_date}
164
+ - **Duration:** {duration}
165
+ - **Severity:** {severity}
166
+ - **Impact:** {customer_impact}
167
+
168
+ ## Timeline
169
+ {timeline_section}
170
+
171
+ ## Root Cause
172
+ {rca_section}
173
+
174
+ ## Action Items
175
+ {action_items}
176
+
177
+ ## Lessons Learned
178
+ {lessons_learned}
179
+
180
+ ---
181
+ *Generated on {generation_date}*
182
+ """,
183
+ "brief": """# Incident Review: {incident_title}
184
+
185
+ **Date:** {incident_date} | **Duration:** {duration} | **Severity:** {severity}
186
+
187
+ ## What Happened
188
+ {executive_summary}
189
+
190
+ ## Root Cause
191
+ {rca_section}
192
+
193
+ ## Actions
194
+ {action_items}
195
+
196
+ ---
197
+ *{generation_date}*
198
+ """
199
+ }
200
+
201
+ def _load_severity_guidelines(self) -> Dict[str, Dict]:
202
+ """Load severity-specific PIR guidelines."""
203
+ return {
204
+ "sev1": {
205
+ "required_sections": ["executive_summary", "timeline", "rca", "action_items", "lessons_learned"],
206
+ "required_attendees": ["incident_commander", "technical_leads", "engineering_manager", "product_manager"],
207
+ "timeline_requirement": "Complete timeline with 15-minute intervals",
208
+ "rca_methods": ["five_whys", "fishbone", "timeline"],
209
+ "review_deadline_hours": 24,
210
+ "follow_up_weeks": 4
211
+ },
212
+ "sev2": {
213
+ "required_sections": ["summary", "timeline", "rca", "action_items"],
214
+ "required_attendees": ["incident_commander", "technical_leads", "team_lead"],
215
+ "timeline_requirement": "Key milestone timeline",
216
+ "rca_methods": ["five_whys", "timeline"],
217
+ "review_deadline_hours": 72,
218
+ "follow_up_weeks": 2
219
+ },
220
+ "sev3": {
221
+ "required_sections": ["summary", "rca", "action_items"],
222
+ "required_attendees": ["technical_lead", "team_member"],
223
+ "timeline_requirement": "Basic timeline",
224
+ "rca_methods": ["five_whys"],
225
+ "review_deadline_hours": 168, # 1 week
226
+ "follow_up_weeks": 1
227
+ },
228
+ "sev4": {
229
+ "required_sections": ["summary", "action_items"],
230
+ "required_attendees": ["assigned_engineer"],
231
+ "timeline_requirement": "Optional",
232
+ "rca_methods": ["brief_analysis"],
233
+ "review_deadline_hours": 336, # 2 weeks
234
+ "follow_up_weeks": 0
235
+ }
236
+ }
237
+
238
+ def _load_action_item_types(self) -> Dict[str, Dict]:
239
+ """Load action item categorization and templates."""
240
+ return {
241
+ "immediate_fix": {
242
+ "priority": "P0",
243
+ "timeline": "24-48 hours",
244
+ "description": "Critical bugs or security issues that need immediate attention",
245
+ "template": "Fix {issue_description} to prevent recurrence of {incident_type}",
246
+ "owners": ["engineer", "team_lead"]
247
+ },
248
+ "process_improvement": {
249
+ "priority": "P1",
250
+ "timeline": "1-2 weeks",
251
+ "description": "Process gaps or communication issues identified",
252
+ "template": "Improve {process_area} to address {gap_description}",
253
+ "owners": ["team_lead", "process_owner"]
254
+ },
255
+ "monitoring_alerting": {
256
+ "priority": "P1",
257
+ "timeline": "1 week",
258
+ "description": "Missing monitoring or alerting capabilities",
259
+ "template": "Implement {monitoring_type} for {system_component}",
260
+ "owners": ["sre", "engineer"]
261
+ },
262
+ "documentation": {
263
+ "priority": "P2",
264
+ "timeline": "2-3 weeks",
265
+ "description": "Documentation gaps or runbook updates",
266
+ "template": "Update {documentation_type} to include {missing_information}",
267
+ "owners": ["technical_writer", "engineer"]
268
+ },
269
+ "training": {
270
+ "priority": "P2",
271
+ "timeline": "1 month",
272
+ "description": "Training needs or knowledge gaps",
273
+ "template": "Provide {training_type} training on {topic}",
274
+ "owners": ["training_coordinator", "subject_matter_expert"]
275
+ },
276
+ "architectural": {
277
+ "priority": "P1-P3",
278
+ "timeline": "1-3 months",
279
+ "description": "System design or architecture improvements",
280
+ "template": "Redesign {system_component} to improve {quality_attribute}",
281
+ "owners": ["architect", "engineering_manager"]
282
+ },
283
+ "tooling": {
284
+ "priority": "P2",
285
+ "timeline": "2-4 weeks",
286
+ "description": "Tool improvements or new tool requirements",
287
+ "template": "Implement {tool_type} to support {use_case}",
288
+ "owners": ["devops", "engineer"]
289
+ }
290
+ }
291
+
292
+ def _load_lessons_learned_categories(self) -> Dict[str, List[str]]:
293
+ """Load categories for organizing lessons learned."""
294
+ return {
295
+ "detection_and_monitoring": [
296
+ "Monitoring gaps identified",
297
+ "Alert fatigue issues",
298
+ "Detection timing improvements",
299
+ "Observability enhancements"
300
+ ],
301
+ "response_and_escalation": [
302
+ "Response time improvements",
303
+ "Escalation path optimization",
304
+ "Communication effectiveness",
305
+ "Resource allocation lessons"
306
+ ],
307
+ "technical_systems": [
308
+ "Architecture resilience",
309
+ "Failure mode analysis",
310
+ "Performance bottlenecks",
311
+ "Dependency management"
312
+ ],
313
+ "process_and_procedures": [
314
+ "Runbook effectiveness",
315
+ "Change management gaps",
316
+ "Review process improvements",
317
+ "Documentation quality"
318
+ ],
319
+ "team_and_culture": [
320
+ "Training needs identified",
321
+ "Cross-team collaboration",
322
+ "Knowledge sharing gaps",
323
+ "Decision-making processes"
324
+ ]
325
+ }
326
+
327
+ def generate_pir(self, incident_data: Dict[str, Any], timeline_data: Optional[Dict] = None,
328
+ rca_method: str = "five_whys", template_type: str = "comprehensive") -> Dict[str, Any]:
329
+ """
330
+ Generate a comprehensive PIR document from incident data.
331
+
332
+ Args:
333
+ incident_data: Core incident information
334
+ timeline_data: Optional timeline reconstruction data
335
+ rca_method: RCA framework to use
336
+ template_type: PIR template type (comprehensive, standard, brief)
337
+
338
+ Returns:
339
+ Dictionary containing PIR document and metadata
340
+ """
341
+ # Extract incident information
342
+ incident_info = self._extract_incident_info(incident_data)
343
+
344
+ # Generate root cause analysis
345
+ rca_results = self._perform_rca(incident_data, timeline_data, rca_method)
346
+
347
+ # Generate lessons learned
348
+ lessons_learned = self._generate_lessons_learned(incident_data, timeline_data, rca_results)
349
+
350
+ # Generate action items
351
+ action_items = self._generate_action_items(incident_data, rca_results, lessons_learned)
352
+
353
+ # Create timeline section
354
+ timeline_section = self._create_timeline_section(timeline_data, incident_info["severity"])
355
+
356
+ # Generate document sections
357
+ sections = self._generate_document_sections(
358
+ incident_info, rca_results, lessons_learned, action_items, timeline_section
359
+ )
360
+
361
+ # Build final document
362
+ template = self.pir_templates[template_type]
363
+ pir_document = template.format(**sections)
364
+
365
+ # Generate metadata
366
+ metadata = self._generate_metadata(incident_info, rca_results, action_items)
367
+
368
+ return {
369
+ "pir_document": pir_document,
370
+ "metadata": metadata,
371
+ "incident_info": incident_info,
372
+ "rca_results": rca_results,
373
+ "lessons_learned": lessons_learned,
374
+ "action_items": action_items,
375
+ "generation_timestamp": datetime.now(timezone.utc).isoformat()
376
+ }
377
+
378
+ def _extract_incident_info(self, incident_data: Dict) -> Dict[str, Any]:
379
+ """Extract and normalize incident information."""
380
+ return {
381
+ "incident_id": incident_data.get("incident_id", "INC-" + datetime.now().strftime("%Y%m%d-%H%M")),
382
+ "title": incident_data.get("title", incident_data.get("description", "Incident")[:50]),
383
+ "description": incident_data.get("description", "No description provided"),
384
+ "severity": incident_data.get("severity", "unknown").lower(),
385
+ "start_time": self._parse_timestamp(incident_data.get("start_time", incident_data.get("timestamp", ""))),
386
+ "end_time": self._parse_timestamp(incident_data.get("end_time", "")),
387
+ "duration": self._calculate_duration(incident_data),
388
+ "affected_services": incident_data.get("affected_services", []),
389
+ "customer_impact": incident_data.get("customer_impact", "Unknown impact"),
390
+ "business_impact": incident_data.get("business_impact", "Unknown business impact"),
391
+ "incident_commander": incident_data.get("incident_commander", "TBD"),
392
+ "responders": incident_data.get("responders", []),
393
+ "status": incident_data.get("status", "resolved")
394
+ }
395
+
396
+ def _parse_timestamp(self, timestamp_str: str) -> Optional[datetime]:
397
+ """Parse timestamp string to datetime object."""
398
+ if not timestamp_str:
399
+ return None
400
+
401
+ formats = [
402
+ "%Y-%m-%dT%H:%M:%S.%fZ",
403
+ "%Y-%m-%dT%H:%M:%SZ",
404
+ "%Y-%m-%d %H:%M:%S",
405
+ "%m/%d/%Y %H:%M:%S"
406
+ ]
407
+
408
+ for fmt in formats:
409
+ try:
410
+ dt = datetime.strptime(timestamp_str, fmt)
411
+ if dt.tzinfo is None:
412
+ dt = dt.replace(tzinfo=timezone.utc)
413
+ return dt
414
+ except ValueError:
415
+ continue
416
+
417
+ return None
418
+
419
+ def _calculate_duration(self, incident_data: Dict) -> str:
420
+ """Calculate incident duration in human-readable format."""
421
+ start_time = self._parse_timestamp(incident_data.get("start_time", ""))
422
+ end_time = self._parse_timestamp(incident_data.get("end_time", ""))
423
+
424
+ if start_time and end_time:
425
+ duration = end_time - start_time
426
+ total_minutes = int(duration.total_seconds() / 60)
427
+
428
+ if total_minutes < 60:
429
+ return f"{total_minutes} minutes"
430
+ elif total_minutes < 1440: # Less than 24 hours
431
+ hours = total_minutes // 60
432
+ minutes = total_minutes % 60
433
+ return f"{hours}h {minutes}m"
434
+ else:
435
+ days = total_minutes // 1440
436
+ hours = (total_minutes % 1440) // 60
437
+ return f"{days}d {hours}h"
438
+
439
+ return incident_data.get("duration", "Unknown duration")
440
+
441
+ def _perform_rca(self, incident_data: Dict, timeline_data: Optional[Dict], method: str) -> Dict[str, Any]:
442
+ """Perform root cause analysis using specified method."""
443
+ if method == "five_whys":
444
+ return self._five_whys_analysis(incident_data, timeline_data)
445
+ elif method == "fishbone":
446
+ return self._fishbone_analysis(incident_data, timeline_data)
447
+ elif method == "timeline":
448
+ return self._timeline_analysis(incident_data, timeline_data)
449
+ elif method == "bow_tie":
450
+ return self._bow_tie_analysis(incident_data, timeline_data)
451
+ else:
452
+ return self._five_whys_analysis(incident_data, timeline_data) # Default
453
+
454
+ def _five_whys_analysis(self, incident_data: Dict, timeline_data: Optional[Dict]) -> Dict[str, Any]:
455
+ """Perform 5 Whys root cause analysis."""
456
+ problem_statement = incident_data.get("description", "Incident occurred")
457
+
458
+ # Generate why questions based on incident data
459
+ whys = []
460
+ current_issue = problem_statement
461
+
462
+ # Generate systematic why questions
463
+ why_patterns = [
464
+ f"Why did {current_issue}?",
465
+ "Why wasn't this detected earlier?",
466
+ "Why didn't existing safeguards prevent this?",
467
+ "Why wasn't there a backup mechanism?",
468
+ "Why wasn't this scenario anticipated?"
469
+ ]
470
+
471
+ # Try to infer answers from incident data
472
+ potential_answers = self._infer_why_answers(incident_data, timeline_data)
473
+
474
+ for i, why_question in enumerate(why_patterns):
475
+ answer = potential_answers[i] if i < len(potential_answers) else "Further investigation needed"
476
+ whys.append({
477
+ "question": why_question,
478
+ "answer": answer,
479
+ "evidence": self._find_supporting_evidence(answer, incident_data, timeline_data)
480
+ })
481
+
482
+ # Identify root causes from the analysis
483
+ root_causes = self._extract_root_causes(whys)
484
+
485
+ return {
486
+ "method": "five_whys",
487
+ "problem_statement": problem_statement,
488
+ "why_analysis": whys,
489
+ "root_causes": root_causes,
490
+ "confidence": self._calculate_rca_confidence(whys, incident_data)
491
+ }
492
+
493
+ def _fishbone_analysis(self, incident_data: Dict, timeline_data: Optional[Dict]) -> Dict[str, Any]:
494
+ """Perform Fishbone (Ishikawa) diagram analysis."""
495
+ problem_statement = incident_data.get("description", "Incident occurred")
496
+
497
+ # Analyze each category
498
+ categories = {}
499
+ for category_info in self.rca_frameworks["fishbone"]["categories"]:
500
+ category_name = category_info["name"]
501
+ contributing_factors = self._identify_category_factors(
502
+ category_name, incident_data, timeline_data
503
+ )
504
+ categories[category_name] = {
505
+ "description": category_info["description"],
506
+ "factors": contributing_factors,
507
+ "examples": category_info["examples"]
508
+ }
509
+
510
+ # Identify primary contributing factors
511
+ primary_factors = self._identify_primary_factors(categories)
512
+
513
+ # Generate root cause hypothesis
514
+ root_causes = self._synthesize_fishbone_root_causes(categories, primary_factors)
515
+
516
+ return {
517
+ "method": "fishbone",
518
+ "problem_statement": problem_statement,
519
+ "categories": categories,
520
+ "primary_factors": primary_factors,
521
+ "root_causes": root_causes,
522
+ "confidence": self._calculate_rca_confidence(categories, incident_data)
523
+ }
524
+
525
+ def _timeline_analysis(self, incident_data: Dict, timeline_data: Optional[Dict]) -> Dict[str, Any]:
526
+ """Perform timeline-based root cause analysis."""
527
+ if not timeline_data:
528
+ return {"method": "timeline", "error": "No timeline data provided"}
529
+
530
+ # Extract key decision points
531
+ decision_points = self._extract_decision_points(timeline_data)
532
+
533
+ # Identify missed opportunities
534
+ missed_opportunities = self._identify_missed_opportunities(timeline_data)
535
+
536
+ # Analyze response effectiveness
537
+ response_analysis = self._analyze_response_effectiveness(timeline_data)
538
+
539
+ # Generate timeline-based root causes
540
+ root_causes = self._extract_timeline_root_causes(
541
+ decision_points, missed_opportunities, response_analysis
542
+ )
543
+
544
+ return {
545
+ "method": "timeline",
546
+ "decision_points": decision_points,
547
+ "missed_opportunities": missed_opportunities,
548
+ "response_analysis": response_analysis,
549
+ "root_causes": root_causes,
550
+ "confidence": self._calculate_rca_confidence(timeline_data, incident_data)
551
+ }
552
+
553
+ def _bow_tie_analysis(self, incident_data: Dict, timeline_data: Optional[Dict]) -> Dict[str, Any]:
554
+ """Perform Bow Tie analysis."""
555
+ # Identify the top event (what went wrong)
556
+ top_event = incident_data.get("description", "Service failure")
557
+
558
+ # Identify threats (what caused it)
559
+ threats = self._identify_threats(incident_data, timeline_data)
560
+
561
+ # Identify consequences (impact)
562
+ consequences = self._identify_consequences(incident_data)
563
+
564
+ # Identify existing barriers
565
+ existing_barriers = self._identify_existing_barriers(incident_data, timeline_data)
566
+
567
+ # Recommend additional barriers
568
+ recommended_barriers = self._recommend_additional_barriers(threats, consequences)
569
+
570
+ return {
571
+ "method": "bow_tie",
572
+ "top_event": top_event,
573
+ "threats": threats,
574
+ "consequences": consequences,
575
+ "existing_barriers": existing_barriers,
576
+ "recommended_barriers": recommended_barriers,
577
+ "confidence": self._calculate_rca_confidence(threats, incident_data)
578
+ }
579
+
580
+ def _infer_why_answers(self, incident_data: Dict, timeline_data: Optional[Dict]) -> List[str]:
581
+ """Infer potential answers to why questions from available data."""
582
+ answers = []
583
+
584
+ # Look for clues in incident description
585
+ description = incident_data.get("description", "").lower()
586
+
587
+ # Common patterns and their inferred answers
588
+ if "database" in description and ("timeout" in description or "slow" in description):
589
+ answers.append("Database connection pool was exhausted")
590
+ answers.append("Connection pool configuration was insufficient for peak load")
591
+ answers.append("Load testing didn't include realistic database scenarios")
592
+ elif "deployment" in description or "release" in description:
593
+ answers.append("New deployment introduced a regression")
594
+ answers.append("Code review process missed the issue")
595
+ answers.append("Testing environment didn't match production")
596
+ elif "network" in description or "connectivity" in description:
597
+ answers.append("Network infrastructure had unexpected load")
598
+ answers.append("Network monitoring wasn't comprehensive enough")
599
+ answers.append("Redundancy mechanisms failed simultaneously")
600
+ else:
601
+ # Generic answers based on common root causes
602
+ answers.extend([
603
+ "System couldn't handle the load/request volume",
604
+ "Monitoring didn't detect the issue early enough",
605
+ "Error handling mechanisms were insufficient",
606
+ "Dependencies failed without proper circuit breakers",
607
+ "System lacked sufficient redundancy/resilience"
608
+ ])
609
+
610
+ return answers[:5] # Return up to 5 answers
611
+
612
+ def _find_supporting_evidence(self, answer: str, incident_data: Dict, timeline_data: Optional[Dict]) -> List[str]:
613
+ """Find supporting evidence for RCA answers."""
614
+ evidence = []
615
+
616
+ # Look for supporting information in incident data
617
+ if timeline_data and "timeline" in timeline_data:
618
+ events = timeline_data["timeline"].get("events", [])
619
+ for event in events:
620
+ event_message = event.get("message", "").lower()
621
+ if any(keyword in event_message for keyword in answer.lower().split()):
622
+ evidence.append(f"Timeline event: {event['message']}")
623
+
624
+ # Check incident metadata for supporting info
625
+ metadata = incident_data.get("metadata", {})
626
+ for key, value in metadata.items():
627
+ if isinstance(value, str) and any(keyword in value.lower() for keyword in answer.lower().split()):
628
+ evidence.append(f"Incident metadata: {key} = {value}")
629
+
630
+ return evidence[:3] # Return top 3 pieces of evidence
631
+
632
+ def _extract_root_causes(self, whys: List[Dict]) -> List[Dict]:
633
+ """Extract root causes from 5 Whys analysis."""
634
+ root_causes = []
635
+
636
+ # The deepest "why" answers are typically closest to root causes
637
+ if len(whys) >= 3:
638
+ for i, why in enumerate(whys[-2:]): # Look at last 2 whys
639
+ if "further investigation needed" not in why["answer"].lower():
640
+ root_causes.append({
641
+ "cause": why["answer"],
642
+ "category": self._categorize_root_cause(why["answer"]),
643
+ "evidence": why["evidence"],
644
+ "confidence": "high" if len(why["evidence"]) > 1 else "medium"
645
+ })
646
+
647
+ return root_causes
648
+
649
+ def _categorize_root_cause(self, cause: str) -> str:
650
+ """Categorize a root cause into standard categories."""
651
+ cause_lower = cause.lower()
652
+
653
+ if any(keyword in cause_lower for keyword in ["process", "procedure", "review", "change management"]):
654
+ return "Process"
655
+ elif any(keyword in cause_lower for keyword in ["training", "knowledge", "skill", "experience"]):
656
+ return "People"
657
+ elif any(keyword in cause_lower for keyword in ["system", "architecture", "code", "configuration"]):
658
+ return "Technology"
659
+ elif any(keyword in cause_lower for keyword in ["network", "infrastructure", "dependency", "third-party"]):
660
+ return "Environment"
661
+ else:
662
+ return "Unknown"
663
+
664
+ def _identify_category_factors(self, category: str, incident_data: Dict, timeline_data: Optional[Dict]) -> List[Dict]:
665
+ """Identify contributing factors for a Fishbone category."""
666
+ factors = []
667
+ description = incident_data.get("description", "").lower()
668
+
669
+ if category == "People":
670
+ if "misconfigured" in description or "human error" in description:
671
+ factors.append({"factor": "Configuration error", "likelihood": "high"})
672
+ if timeline_data and self._has_delayed_response(timeline_data):
673
+ factors.append({"factor": "Delayed incident response", "likelihood": "medium"})
674
+
675
+ elif category == "Process":
676
+ if "deployment" in description:
677
+ factors.append({"factor": "Insufficient deployment validation", "likelihood": "high"})
678
+ if "code review" in incident_data.get("context", "").lower():
679
+ factors.append({"factor": "Code review process gaps", "likelihood": "medium"})
680
+
681
+ elif category == "Technology":
682
+ if "database" in description:
683
+ factors.append({"factor": "Database performance limitations", "likelihood": "high"})
684
+ if "timeout" in description or "latency" in description:
685
+ factors.append({"factor": "System performance bottlenecks", "likelihood": "high"})
686
+
687
+ elif category == "Environment":
688
+ if "network" in description:
689
+ factors.append({"factor": "Network infrastructure issues", "likelihood": "medium"})
690
+ if "third-party" in description or "external" in description:
691
+ factors.append({"factor": "External service dependencies", "likelihood": "medium"})
692
+
693
+ return factors
694
+
695
+ def _identify_primary_factors(self, categories: Dict) -> List[Dict]:
696
+ """Identify primary contributing factors across all categories."""
697
+ primary_factors = []
698
+
699
+ for category_name, category_data in categories.items():
700
+ high_likelihood_factors = [
701
+ f for f in category_data["factors"]
702
+ if f.get("likelihood") == "high"
703
+ ]
704
+ primary_factors.extend([
705
+ {**factor, "category": category_name}
706
+ for factor in high_likelihood_factors
707
+ ])
708
+
709
+ return primary_factors
710
+
711
+ def _synthesize_fishbone_root_causes(self, categories: Dict, primary_factors: List[Dict]) -> List[Dict]:
712
+ """Synthesize root causes from Fishbone analysis."""
713
+ root_causes = []
714
+
715
+ # Group primary factors by category
716
+ category_factors = defaultdict(list)
717
+ for factor in primary_factors:
718
+ category_factors[factor["category"]].append(factor)
719
+
720
+ # Create root causes from categories with multiple factors
721
+ for category, factors in category_factors.items():
722
+ if len(factors) > 1:
723
+ root_causes.append({
724
+ "cause": f"Multiple {category.lower()} issues contributed to the incident",
725
+ "category": category,
726
+ "contributing_factors": [f["factor"] for f in factors],
727
+ "confidence": "high"
728
+ })
729
+ elif len(factors) == 1:
730
+ root_causes.append({
731
+ "cause": factors[0]["factor"],
732
+ "category": category,
733
+ "confidence": "medium"
734
+ })
735
+
736
+ return root_causes
737
+
738
+ def _has_delayed_response(self, timeline_data: Dict) -> bool:
739
+ """Check if timeline shows delayed response patterns."""
740
+ if not timeline_data or "gap_analysis" not in timeline_data:
741
+ return False
742
+
743
+ gaps = timeline_data["gap_analysis"].get("gaps", [])
744
+ return any(gap.get("type") == "phase_transition" for gap in gaps)
745
+
746
+ def _extract_decision_points(self, timeline_data: Dict) -> List[Dict]:
747
+ """Extract key decision points from timeline."""
748
+ decision_points = []
749
+
750
+ if "timeline" in timeline_data and "phases" in timeline_data["timeline"]:
751
+ phases = timeline_data["timeline"]["phases"]
752
+
753
+ for i, phase in enumerate(phases):
754
+ if phase["name"] in ["escalation", "mitigation"]:
755
+ decision_points.append({
756
+ "timestamp": phase["start_time"],
757
+ "decision": f"Initiated {phase['name']} phase",
758
+ "phase": phase["name"],
759
+ "duration": phase["duration_minutes"]
760
+ })
761
+
762
+ return decision_points
763
+
764
+ def _identify_missed_opportunities(self, timeline_data: Dict) -> List[Dict]:
765
+ """Identify missed opportunities from gap analysis."""
766
+ missed_opportunities = []
767
+
768
+ if "gap_analysis" in timeline_data:
769
+ gaps = timeline_data["gap_analysis"].get("gaps", [])
770
+
771
+ for gap in gaps:
772
+ if gap.get("severity") == "critical":
773
+ missed_opportunities.append({
774
+ "opportunity": f"Earlier {gap['type'].replace('_', ' ')}",
775
+ "gap_minutes": gap["gap_minutes"],
776
+ "potential_impact": "Could have reduced incident duration"
777
+ })
778
+
779
+ return missed_opportunities
780
+
781
+ def _analyze_response_effectiveness(self, timeline_data: Dict) -> Dict[str, Any]:
782
+ """Analyze the effectiveness of incident response."""
783
+ effectiveness = {
784
+ "overall_rating": "unknown",
785
+ "strengths": [],
786
+ "weaknesses": [],
787
+ "metrics": {}
788
+ }
789
+
790
+ if "metrics" in timeline_data:
791
+ metrics = timeline_data["metrics"]
792
+ duration_metrics = metrics.get("duration_metrics", {})
793
+
794
+ # Analyze response times
795
+ time_to_mitigation = duration_metrics.get("time_to_mitigation_minutes", 0)
796
+ time_to_resolution = duration_metrics.get("time_to_resolution_minutes", 0)
797
+
798
+ if time_to_mitigation <= 30:
799
+ effectiveness["strengths"].append("Quick mitigation response")
800
+ else:
801
+ effectiveness["weaknesses"].append("Slow mitigation response")
802
+
803
+ if time_to_resolution <= 120:
804
+ effectiveness["strengths"].append("Fast resolution")
805
+ else:
806
+ effectiveness["weaknesses"].append("Extended resolution time")
807
+
808
+ effectiveness["metrics"] = {
809
+ "time_to_mitigation": time_to_mitigation,
810
+ "time_to_resolution": time_to_resolution
811
+ }
812
+
813
+ # Overall rating based on strengths vs weaknesses
814
+ if len(effectiveness["strengths"]) > len(effectiveness["weaknesses"]):
815
+ effectiveness["overall_rating"] = "effective"
816
+ elif len(effectiveness["weaknesses"]) > len(effectiveness["strengths"]):
817
+ effectiveness["overall_rating"] = "needs_improvement"
818
+ else:
819
+ effectiveness["overall_rating"] = "mixed"
820
+
821
+ return effectiveness
822
+
823
+ def _extract_timeline_root_causes(self, decision_points: List, missed_opportunities: List,
824
+ response_analysis: Dict) -> List[Dict]:
825
+ """Extract root causes from timeline analysis."""
826
+ root_causes = []
827
+
828
+ # Root causes from missed opportunities
829
+ for opportunity in missed_opportunities:
830
+ if opportunity["gap_minutes"] > 60: # Significant gaps
831
+ root_causes.append({
832
+ "cause": f"Delayed response: {opportunity['opportunity']}",
833
+ "category": "Process",
834
+ "evidence": f"{opportunity['gap_minutes']} minute gap identified",
835
+ "confidence": "high"
836
+ })
837
+
838
+ # Root causes from response effectiveness
839
+ for weakness in response_analysis.get("weaknesses", []):
840
+ root_causes.append({
841
+ "cause": weakness,
842
+ "category": "Process",
843
+ "evidence": "Timeline analysis",
844
+ "confidence": "medium"
845
+ })
846
+
847
+ return root_causes
848
+
849
+ def _identify_threats(self, incident_data: Dict, timeline_data: Optional[Dict]) -> List[Dict]:
850
+ """Identify threats for Bow Tie analysis."""
851
+ threats = []
852
+ description = incident_data.get("description", "").lower()
853
+
854
+ if "deployment" in description:
855
+ threats.append({"threat": "Defective code deployment", "likelihood": "medium"})
856
+ if "load" in description or "traffic" in description:
857
+ threats.append({"threat": "Unexpected load increase", "likelihood": "high"})
858
+ if "database" in description:
859
+ threats.append({"threat": "Database performance degradation", "likelihood": "medium"})
860
+
861
+ return threats
862
+
863
+ def _identify_consequences(self, incident_data: Dict) -> List[Dict]:
864
+ """Identify consequences for Bow Tie analysis."""
865
+ consequences = []
866
+
867
+ customer_impact = incident_data.get("customer_impact", "").lower()
868
+ business_impact = incident_data.get("business_impact", "").lower()
869
+
870
+ if "all users" in customer_impact or "complete outage" in customer_impact:
871
+ consequences.append({"consequence": "Complete service unavailability", "severity": "critical"})
872
+
873
+ if "revenue" in business_impact:
874
+ consequences.append({"consequence": "Revenue loss", "severity": "high"})
875
+
876
+ return consequences
877
+
878
+ def _identify_existing_barriers(self, incident_data: Dict, timeline_data: Optional[Dict]) -> List[Dict]:
879
+ """Identify existing preventive/protective barriers."""
880
+ barriers = []
881
+
882
+ # Look for evidence of existing controls
883
+ if timeline_data and "timeline" in timeline_data:
884
+ events = timeline_data["timeline"].get("events", [])
885
+
886
+ for event in events:
887
+ message = event.get("message", "").lower()
888
+ if "alert" in message or "monitoring" in message:
889
+ barriers.append({
890
+ "barrier": "Monitoring and alerting system",
891
+ "type": "detective",
892
+ "effectiveness": "partial"
893
+ })
894
+ elif "rollback" in message:
895
+ barriers.append({
896
+ "barrier": "Rollback capability",
897
+ "type": "corrective",
898
+ "effectiveness": "effective"
899
+ })
900
+
901
+ return barriers
902
+
903
+ def _recommend_additional_barriers(self, threats: List[Dict], consequences: List[Dict]) -> List[Dict]:
904
+ """Recommend additional barriers based on threats and consequences."""
905
+ recommendations = []
906
+
907
+ for threat in threats:
908
+ if "deployment" in threat["threat"].lower():
909
+ recommendations.append({
910
+ "barrier": "Enhanced pre-deployment testing",
911
+ "type": "preventive",
912
+ "justification": "Prevent defective deployments reaching production"
913
+ })
914
+ elif "load" in threat["threat"].lower():
915
+ recommendations.append({
916
+ "barrier": "Auto-scaling and load shedding",
917
+ "type": "preventive",
918
+ "justification": "Handle unexpected load increases automatically"
919
+ })
920
+
921
+ return recommendations
922
+
923
+ def _calculate_rca_confidence(self, analysis_data: Any, incident_data: Dict) -> str:
924
+ """Calculate confidence level for RCA results."""
925
+ # Simple heuristic based on available data
926
+ confidence_score = 0
927
+
928
+ # More detailed incident data increases confidence
929
+ if incident_data.get("description") and len(incident_data["description"]) > 50:
930
+ confidence_score += 1
931
+
932
+ if incident_data.get("timeline") or incident_data.get("events"):
933
+ confidence_score += 2
934
+
935
+ if incident_data.get("logs") or incident_data.get("monitoring_data"):
936
+ confidence_score += 2
937
+
938
+ # Analysis data completeness
939
+ if isinstance(analysis_data, list) and len(analysis_data) > 3:
940
+ confidence_score += 1
941
+ elif isinstance(analysis_data, dict) and len(analysis_data) > 5:
942
+ confidence_score += 1
943
+
944
+ if confidence_score >= 4:
945
+ return "high"
946
+ elif confidence_score >= 2:
947
+ return "medium"
948
+ else:
949
+ return "low"
950
+
951
+ def _generate_lessons_learned(self, incident_data: Dict, timeline_data: Optional[Dict],
952
+ rca_results: Dict) -> Dict[str, List[str]]:
953
+ """Generate categorized lessons learned."""
954
+ lessons = defaultdict(list)
955
+
956
+ # Lessons from RCA
957
+ root_causes = rca_results.get("root_causes", [])
958
+ for root_cause in root_causes:
959
+ category = root_cause.get("category", "technical_systems").lower()
960
+ category_key = self._map_to_lessons_category(category)
961
+
962
+ lesson = f"Identified: {root_cause['cause']}"
963
+ lessons[category_key].append(lesson)
964
+
965
+ # Lessons from timeline analysis
966
+ if timeline_data and "gap_analysis" in timeline_data:
967
+ gaps = timeline_data["gap_analysis"].get("gaps", [])
968
+ for gap in gaps:
969
+ if gap.get("severity") == "critical":
970
+ lessons["response_and_escalation"].append(
971
+ f"Response time gap: {gap['type'].replace('_', ' ')} took {gap['gap_minutes']} minutes"
972
+ )
973
+
974
+ # Generic lessons based on incident characteristics
975
+ severity = incident_data.get("severity", "").lower()
976
+ if severity in ["sev1", "critical"]:
977
+ lessons["detection_and_monitoring"].append(
978
+ "Critical incidents require immediate detection and alerting"
979
+ )
980
+
981
+ return dict(lessons)
982
+
983
+ def _map_to_lessons_category(self, category: str) -> str:
984
+ """Map RCA category to lessons learned category."""
985
+ mapping = {
986
+ "people": "team_and_culture",
987
+ "process": "process_and_procedures",
988
+ "technology": "technical_systems",
989
+ "environment": "technical_systems",
990
+ "unknown": "process_and_procedures"
991
+ }
992
+ return mapping.get(category, "technical_systems")
993
+
994
+ def _generate_action_items(self, incident_data: Dict, rca_results: Dict,
995
+ lessons_learned: Dict) -> List[Dict]:
996
+ """Generate actionable follow-up items."""
997
+ action_items = []
998
+
999
+ # Actions from root causes
1000
+ root_causes = rca_results.get("root_causes", [])
1001
+ for root_cause in root_causes:
1002
+ action_type = self._determine_action_type(root_cause)
1003
+ action_template = self.action_item_types[action_type]
1004
+
1005
+ action_items.append({
1006
+ "title": f"Address: {root_cause['cause'][:50]}...",
1007
+ "description": root_cause["cause"],
1008
+ "type": action_type,
1009
+ "priority": action_template["priority"],
1010
+ "timeline": action_template["timeline"],
1011
+ "owner": "TBD",
1012
+ "success_criteria": f"Prevent recurrence of {root_cause['cause'][:30]}...",
1013
+ "related_root_cause": root_cause
1014
+ })
1015
+
1016
+ # Actions from lessons learned
1017
+ for category, lessons in lessons_learned.items():
1018
+ if len(lessons) > 1: # Multiple lessons in same category indicate systematic issue
1019
+ action_items.append({
1020
+ "title": f"Improve {category.replace('_', ' ')}",
1021
+ "description": f"Address multiple issues identified in {category}",
1022
+ "type": "process_improvement",
1023
+ "priority": "P1",
1024
+ "timeline": "2-3 weeks",
1025
+ "owner": "TBD",
1026
+ "success_criteria": f"Comprehensive review and improvement of {category}"
1027
+ })
1028
+
1029
+ # Standard actions based on severity
1030
+ severity = incident_data.get("severity", "").lower()
1031
+ if severity in ["sev1", "critical"]:
1032
+ action_items.append({
1033
+ "title": "Conduct comprehensive post-incident review",
1034
+ "description": "Schedule PIR meeting with all stakeholders",
1035
+ "type": "process_improvement",
1036
+ "priority": "P0",
1037
+ "timeline": "24-48 hours",
1038
+ "owner": incident_data.get("incident_commander", "TBD"),
1039
+ "success_criteria": "PIR completed and documented"
1040
+ })
1041
+
1042
+ return action_items
1043
+
1044
+ def _determine_action_type(self, root_cause: Dict) -> str:
1045
+ """Determine action item type based on root cause."""
1046
+ cause_text = root_cause.get("cause", "").lower()
1047
+ category = root_cause.get("category", "").lower()
1048
+
1049
+ if any(keyword in cause_text for keyword in ["bug", "error", "failure", "crash"]):
1050
+ return "immediate_fix"
1051
+ elif any(keyword in cause_text for keyword in ["monitor", "alert", "detect"]):
1052
+ return "monitoring_alerting"
1053
+ elif any(keyword in cause_text for keyword in ["process", "procedure", "review"]):
1054
+ return "process_improvement"
1055
+ elif any(keyword in cause_text for keyword in ["document", "runbook", "knowledge"]):
1056
+ return "documentation"
1057
+ elif any(keyword in cause_text for keyword in ["training", "skill", "knowledge"]):
1058
+ return "training"
1059
+ elif any(keyword in cause_text for keyword in ["architecture", "design", "system"]):
1060
+ return "architectural"
1061
+ else:
1062
+ return "process_improvement" # Default
1063
+
1064
+ def _create_timeline_section(self, timeline_data: Optional[Dict], severity: str) -> str:
1065
+ """Create timeline section for PIR document."""
1066
+ if not timeline_data:
1067
+ return "No detailed timeline available."
1068
+
1069
+ timeline_content = []
1070
+
1071
+ if "timeline" in timeline_data and "phases" in timeline_data["timeline"]:
1072
+ timeline_content.append("### Phase Timeline")
1073
+ timeline_content.append("")
1074
+
1075
+ phases = timeline_data["timeline"]["phases"]
1076
+ for phase in phases:
1077
+ timeline_content.append(f"**{phase['name'].title()} Phase**")
1078
+ timeline_content.append(f"- Start: {phase['start_time']}")
1079
+ timeline_content.append(f"- Duration: {phase['duration_minutes']} minutes")
1080
+ timeline_content.append(f"- Events: {phase['event_count']}")
1081
+ timeline_content.append("")
1082
+
1083
+ if "metrics" in timeline_data:
1084
+ metrics = timeline_data["metrics"]
1085
+ duration_metrics = metrics.get("duration_metrics", {})
1086
+
1087
+ timeline_content.append("### Key Metrics")
1088
+ timeline_content.append("")
1089
+ timeline_content.append(f"- Total Duration: {duration_metrics.get('total_duration_minutes', 'N/A')} minutes")
1090
+ timeline_content.append(f"- Time to Mitigation: {duration_metrics.get('time_to_mitigation_minutes', 'N/A')} minutes")
1091
+ timeline_content.append(f"- Time to Resolution: {duration_metrics.get('time_to_resolution_minutes', 'N/A')} minutes")
1092
+ timeline_content.append("")
1093
+
1094
+ return "\n".join(timeline_content)
1095
+
1096
+ def _generate_document_sections(self, incident_info: Dict, rca_results: Dict,
1097
+ lessons_learned: Dict, action_items: List[Dict],
1098
+ timeline_section: str) -> Dict[str, str]:
1099
+ """Generate all document sections for PIR template."""
1100
+ sections = {}
1101
+
1102
+ # Basic information
1103
+ sections["incident_title"] = incident_info["title"]
1104
+ sections["incident_id"] = incident_info["incident_id"]
1105
+ sections["incident_date"] = incident_info["start_time"].strftime("%Y-%m-%d %H:%M:%S UTC") if incident_info["start_time"] else "Unknown"
1106
+ sections["duration"] = incident_info["duration"]
1107
+ sections["severity"] = incident_info["severity"].upper()
1108
+ sections["status"] = incident_info["status"].title()
1109
+ sections["incident_commander"] = incident_info["incident_commander"]
1110
+ sections["responders"] = ", ".join(incident_info["responders"]) if incident_info["responders"] else "TBD"
1111
+ sections["generation_date"] = datetime.now().strftime("%Y-%m-%d")
1112
+
1113
+ # Impact sections
1114
+ sections["customer_impact"] = incident_info["customer_impact"]
1115
+ sections["business_impact"] = incident_info["business_impact"]
1116
+
1117
+ # Executive summary
1118
+ sections["executive_summary"] = self._create_executive_summary(incident_info, rca_results)
1119
+
1120
+ # Timeline
1121
+ sections["timeline_section"] = timeline_section
1122
+
1123
+ # RCA section
1124
+ sections["rca_section"] = self._create_rca_section(rca_results)
1125
+
1126
+ # What went well/wrong
1127
+ sections["what_went_well"] = self._create_what_went_well_section(incident_info, rca_results)
1128
+ sections["what_went_wrong"] = self._create_what_went_wrong_section(rca_results, lessons_learned)
1129
+
1130
+ # Lessons learned
1131
+ sections["lessons_learned"] = self._create_lessons_learned_section(lessons_learned)
1132
+
1133
+ # Action items
1134
+ sections["action_items"] = self._create_action_items_section(action_items)
1135
+
1136
+ # Prevention and appendix
1137
+ sections["prevention_measures"] = self._create_prevention_section(rca_results, action_items)
1138
+ sections["appendix_section"] = self._create_appendix_section(incident_info)
1139
+
1140
+ return sections
1141
+
1142
+ def _create_executive_summary(self, incident_info: Dict, rca_results: Dict) -> str:
1143
+ """Create executive summary section."""
1144
+ summary_parts = []
1145
+
1146
+ # Incident description
1147
+ summary_parts.append(f"On {incident_info['start_time'].strftime('%B %d, %Y') if incident_info['start_time'] else 'an unknown date'}, we experienced a {incident_info['severity']} incident affecting {incident_info.get('affected_services', ['our services'])}.")
1148
+
1149
+ # Duration and impact
1150
+ summary_parts.append(f"The incident lasted {incident_info['duration']} and had the following impact: {incident_info['customer_impact']}")
1151
+
1152
+ # Root cause summary
1153
+ root_causes = rca_results.get("root_causes", [])
1154
+ if root_causes:
1155
+ primary_cause = root_causes[0]["cause"]
1156
+ summary_parts.append(f"Root cause analysis identified the primary issue as: {primary_cause}")
1157
+
1158
+ # Resolution
1159
+ summary_parts.append(f"The incident has been {incident_info['status']} and we have identified specific actions to prevent recurrence.")
1160
+
1161
+ return " ".join(summary_parts)
1162
+
1163
+ def _create_rca_section(self, rca_results: Dict) -> str:
1164
+ """Create RCA section content."""
1165
+ rca_content = []
1166
+
1167
+ method = rca_results.get("method", "unknown")
1168
+ rca_content.append(f"### Analysis Method: {self.rca_frameworks.get(method, {}).get('name', method)}")
1169
+ rca_content.append("")
1170
+
1171
+ if method == "five_whys" and "why_analysis" in rca_results:
1172
+ rca_content.append("#### Why Analysis")
1173
+ rca_content.append("")
1174
+
1175
+ for i, why in enumerate(rca_results["why_analysis"], 1):
1176
+ rca_content.append(f"**Why {i}:** {why['question']}")
1177
+ rca_content.append(f"**Answer:** {why['answer']}")
1178
+ if why["evidence"]:
1179
+ rca_content.append(f"**Evidence:** {', '.join(why['evidence'])}")
1180
+ rca_content.append("")
1181
+
1182
+ elif method == "fishbone" and "categories" in rca_results:
1183
+ rca_content.append("#### Contributing Factor Analysis")
1184
+ rca_content.append("")
1185
+
1186
+ for category, data in rca_results["categories"].items():
1187
+ if data["factors"]:
1188
+ rca_content.append(f"**{category}:**")
1189
+ for factor in data["factors"]:
1190
+ rca_content.append(f"- {factor['factor']} (likelihood: {factor.get('likelihood', 'unknown')})")
1191
+ rca_content.append("")
1192
+
1193
+ # Root causes summary
1194
+ root_causes = rca_results.get("root_causes", [])
1195
+ if root_causes:
1196
+ rca_content.append("#### Identified Root Causes")
1197
+ rca_content.append("")
1198
+
1199
+ for i, cause in enumerate(root_causes, 1):
1200
+ rca_content.append(f"{i}. **{cause['cause']}**")
1201
+ rca_content.append(f" - Category: {cause.get('category', 'Unknown')}")
1202
+ rca_content.append(f" - Confidence: {cause.get('confidence', 'Unknown')}")
1203
+ if cause.get("evidence"):
1204
+ rca_content.append(f" - Evidence: {cause['evidence']}")
1205
+ rca_content.append("")
1206
+
1207
+ return "\n".join(rca_content)
1208
+
1209
+ def _create_what_went_well_section(self, incident_info: Dict, rca_results: Dict) -> str:
1210
+ """Create what went well section."""
1211
+ positives = []
1212
+
1213
+ # Generic positive aspects
1214
+ if incident_info["status"] == "resolved":
1215
+ positives.append("The incident was successfully resolved")
1216
+
1217
+ if incident_info["incident_commander"] != "TBD":
1218
+ positives.append("Incident command was established")
1219
+
1220
+ if len(incident_info.get("responders", [])) > 1:
1221
+ positives.append("Multiple team members collaborated on resolution")
1222
+
1223
+ # Analysis-specific positives
1224
+ if rca_results.get("confidence") == "high":
1225
+ positives.append("Root cause analysis provided clear insights")
1226
+
1227
+ if not positives:
1228
+ positives.append("Incident response process was followed")
1229
+
1230
+ return "\n".join([f"- {positive}" for positive in positives])
1231
+
1232
+ def _create_what_went_wrong_section(self, rca_results: Dict, lessons_learned: Dict) -> str:
1233
+ """Create what went wrong section."""
1234
+ issues = []
1235
+
1236
+ # Issues from RCA
1237
+ root_causes = rca_results.get("root_causes", [])
1238
+ for cause in root_causes[:3]: # Show top 3
1239
+ issues.append(cause["cause"])
1240
+
1241
+ # Issues from lessons learned
1242
+ for category, lessons in lessons_learned.items():
1243
+ if lessons:
1244
+ issues.append(f"{category.replace('_', ' ').title()}: {lessons[0]}")
1245
+
1246
+ if not issues:
1247
+ issues.append("Analysis in progress")
1248
+
1249
+ return "\n".join([f"- {issue}" for issue in issues])
1250
+
1251
+ def _create_lessons_learned_section(self, lessons_learned: Dict) -> str:
1252
+ """Create lessons learned section."""
1253
+ content = []
1254
+
1255
+ for category, lessons in lessons_learned.items():
1256
+ if lessons:
1257
+ content.append(f"### {category.replace('_', ' ').title()}")
1258
+ content.append("")
1259
+
1260
+ for lesson in lessons:
1261
+ content.append(f"- {lesson}")
1262
+
1263
+ content.append("")
1264
+
1265
+ if not content:
1266
+ content.append("Lessons learned to be documented following detailed analysis.")
1267
+
1268
+ return "\n".join(content)
1269
+
1270
+ def _create_action_items_section(self, action_items: List[Dict]) -> str:
1271
+ """Create action items section."""
1272
+ if not action_items:
1273
+ return "Action items to be defined."
1274
+
1275
+ content = []
1276
+
1277
+ # Group by priority
1278
+ priority_groups = defaultdict(list)
1279
+ for item in action_items:
1280
+ priority_groups[item.get("priority", "P3")].append(item)
1281
+
1282
+ for priority in ["P0", "P1", "P2", "P3"]:
1283
+ items = priority_groups.get(priority, [])
1284
+ if items:
1285
+ content.append(f"### {priority} - {self._get_priority_description(priority)}")
1286
+ content.append("")
1287
+
1288
+ for item in items:
1289
+ content.append(f"**{item['title']}**")
1290
+ content.append(f"- Owner: {item.get('owner', 'TBD')}")
1291
+ content.append(f"- Timeline: {item.get('timeline', 'TBD')}")
1292
+ content.append(f"- Success Criteria: {item.get('success_criteria', 'TBD')}")
1293
+ content.append("")
1294
+
1295
+ return "\n".join(content)
1296
+
1297
+ def _get_priority_description(self, priority: str) -> str:
1298
+ """Get human-readable priority description."""
1299
+ descriptions = {
1300
+ "P0": "Critical - Immediate Action Required",
1301
+ "P1": "High Priority - Complete Within 1-2 Weeks",
1302
+ "P2": "Medium Priority - Complete Within 1 Month",
1303
+ "P3": "Low Priority - Complete When Capacity Allows"
1304
+ }
1305
+ return descriptions.get(priority, "Unknown Priority")
1306
+
1307
+ def _create_prevention_section(self, rca_results: Dict, action_items: List[Dict]) -> str:
1308
+ """Create prevention and follow-up section."""
1309
+ content = []
1310
+
1311
+ content.append("### Prevention Measures")
1312
+ content.append("")
1313
+ content.append("Based on the root cause analysis, the following preventive measures have been identified:")
1314
+ content.append("")
1315
+
1316
+ # Extract prevention-focused action items
1317
+ prevention_items = [item for item in action_items if "prevent" in item.get("description", "").lower()]
1318
+
1319
+ if prevention_items:
1320
+ for item in prevention_items:
1321
+ content.append(f"- {item['title']}: {item.get('description', '')}")
1322
+ else:
1323
+ content.append("- Implement comprehensive testing for similar scenarios")
1324
+ content.append("- Improve monitoring and alerting coverage")
1325
+ content.append("- Enhance error handling and resilience patterns")
1326
+
1327
+ content.append("")
1328
+ content.append("### Follow-up Schedule")
1329
+ content.append("")
1330
+ content.append("- 1 week: Review action item progress")
1331
+ content.append("- 1 month: Evaluate effectiveness of implemented changes")
1332
+ content.append("- 3 months: Conduct follow-up assessment and update preventive measures")
1333
+
1334
+ return "\n".join(content)
1335
+
1336
+ def _create_appendix_section(self, incident_info: Dict) -> str:
1337
+ """Create appendix section."""
1338
+ content = []
1339
+
1340
+ content.append("### Additional Information")
1341
+ content.append("")
1342
+ content.append(f"- Incident ID: {incident_info['incident_id']}")
1343
+ content.append(f"- Severity Classification: {incident_info['severity']}")
1344
+
1345
+ if incident_info.get("affected_services"):
1346
+ content.append(f"- Affected Services: {', '.join(incident_info['affected_services'])}")
1347
+
1348
+ content.append("")
1349
+ content.append("### References")
1350
+ content.append("")
1351
+ content.append("- Incident tracking ticket: [Link TBD]")
1352
+ content.append("- Monitoring dashboards: [Link TBD]")
1353
+ content.append("- Communication thread: [Link TBD]")
1354
+
1355
+ return "\n".join(content)
1356
+
1357
+ def _generate_metadata(self, incident_info: Dict, rca_results: Dict, action_items: List[Dict]) -> Dict[str, Any]:
1358
+ """Generate PIR metadata for tracking and analysis."""
1359
+ return {
1360
+ "pir_id": f"PIR-{incident_info['incident_id']}",
1361
+ "incident_severity": incident_info["severity"],
1362
+ "rca_method": rca_results.get("method", "unknown"),
1363
+ "rca_confidence": rca_results.get("confidence", "unknown"),
1364
+ "total_action_items": len(action_items),
1365
+ "critical_action_items": len([item for item in action_items if item.get("priority") == "P0"]),
1366
+ "estimated_prevention_timeline": self._estimate_prevention_timeline(action_items),
1367
+ "categories_affected": list(set(item.get("type", "unknown") for item in action_items)),
1368
+ "review_completeness": self._assess_review_completeness(incident_info, rca_results, action_items)
1369
+ }
1370
+
1371
+ def _estimate_prevention_timeline(self, action_items: List[Dict]) -> str:
1372
+ """Estimate timeline for implementing all prevention measures."""
1373
+ if not action_items:
1374
+ return "unknown"
1375
+
1376
+ # Find the longest timeline among action items
1377
+ max_weeks = 0
1378
+ for item in action_items:
1379
+ timeline = item.get("timeline", "")
1380
+ if "week" in timeline:
1381
+ try:
1382
+ weeks = int(re.findall(r'\d+', timeline)[0])
1383
+ max_weeks = max(max_weeks, weeks)
1384
+ except (IndexError, ValueError):
1385
+ pass
1386
+ elif "month" in timeline:
1387
+ try:
1388
+ months = int(re.findall(r'\d+', timeline)[0])
1389
+ max_weeks = max(max_weeks, months * 4)
1390
+ except (IndexError, ValueError):
1391
+ pass
1392
+
1393
+ if max_weeks == 0:
1394
+ return "1-2 weeks"
1395
+ elif max_weeks <= 4:
1396
+ return f"{max_weeks} weeks"
1397
+ else:
1398
+ return f"{max_weeks // 4} months"
1399
+
1400
+ def _assess_review_completeness(self, incident_info: Dict, rca_results: Dict, action_items: List[Dict]) -> float:
1401
+ """Assess completeness of the PIR (0-1 score)."""
1402
+ score = 0.0
1403
+
1404
+ # Basic information completeness
1405
+ if incident_info.get("description"):
1406
+ score += 0.1
1407
+ if incident_info.get("start_time"):
1408
+ score += 0.1
1409
+ if incident_info.get("customer_impact"):
1410
+ score += 0.1
1411
+
1412
+ # RCA completeness
1413
+ if rca_results.get("root_causes"):
1414
+ score += 0.2
1415
+ if rca_results.get("confidence") in ["medium", "high"]:
1416
+ score += 0.1
1417
+
1418
+ # Action items completeness
1419
+ if action_items:
1420
+ score += 0.2
1421
+ if any(item.get("owner") and item["owner"] != "TBD" for item in action_items):
1422
+ score += 0.1
1423
+
1424
+ # Additional factors
1425
+ if incident_info.get("incident_commander") != "TBD":
1426
+ score += 0.1
1427
+ if len(action_items) >= 3: # Multiple action items show thorough analysis
1428
+ score += 0.1
1429
+
1430
+ return min(score, 1.0)
1431
+
1432
+
1433
+ def format_json_output(result: Dict) -> str:
1434
+ """Format result as pretty JSON."""
1435
+ return json.dumps(result, indent=2, ensure_ascii=False)
1436
+
1437
+
1438
+ def format_markdown_output(result: Dict) -> str:
1439
+ """Format result as Markdown PIR document."""
1440
+ return result.get("pir_document", "Error: No PIR document generated")
1441
+
1442
+
1443
+ def format_text_output(result: Dict) -> str:
1444
+ """Format result as human-readable summary."""
1445
+ if "error" in result:
1446
+ return f"Error: {result['error']}"
1447
+
1448
+ metadata = result.get("metadata", {})
1449
+ incident_info = result.get("incident_info", {})
1450
+ rca_results = result.get("rca_results", {})
1451
+ action_items = result.get("action_items", [])
1452
+
1453
+ output = []
1454
+ output.append("=" * 60)
1455
+ output.append("POST-INCIDENT REVIEW SUMMARY")
1456
+ output.append("=" * 60)
1457
+ output.append("")
1458
+
1459
+ # Basic info
1460
+ output.append("INCIDENT INFORMATION:")
1461
+ output.append(f" PIR ID: {metadata.get('pir_id', 'Unknown')}")
1462
+ output.append(f" Severity: {incident_info.get('severity', 'Unknown').upper()}")
1463
+ output.append(f" Duration: {incident_info.get('duration', 'Unknown')}")
1464
+ output.append(f" Status: {incident_info.get('status', 'Unknown').title()}")
1465
+ output.append("")
1466
+
1467
+ # RCA summary
1468
+ output.append("ROOT CAUSE ANALYSIS:")
1469
+ output.append(f" Method: {rca_results.get('method', 'Unknown')}")
1470
+ output.append(f" Confidence: {rca_results.get('confidence', 'Unknown').title()}")
1471
+
1472
+ root_causes = rca_results.get("root_causes", [])
1473
+ if root_causes:
1474
+ output.append(f" Root Causes Identified: {len(root_causes)}")
1475
+ for i, cause in enumerate(root_causes[:3], 1):
1476
+ output.append(f" {i}. {cause.get('cause', 'Unknown')[:60]}...")
1477
+ output.append("")
1478
+
1479
+ # Action items summary
1480
+ output.append("ACTION ITEMS:")
1481
+ output.append(f" Total Actions: {len(action_items)}")
1482
+ output.append(f" Critical (P0): {metadata.get('critical_action_items', 0)}")
1483
+ output.append(f" Prevention Timeline: {metadata.get('estimated_prevention_timeline', 'Unknown')}")
1484
+
1485
+ if action_items:
1486
+ output.append(" Top Actions:")
1487
+ for item in action_items[:3]:
1488
+ output.append(f" - {item.get('title', 'Unknown')[:50]}...")
1489
+ output.append("")
1490
+
1491
+ # Completeness
1492
+ completeness = metadata.get("review_completeness", 0) * 100
1493
+ output.append(f"REVIEW COMPLETENESS: {completeness:.0f}%")
1494
+ output.append("")
1495
+
1496
+ output.append("=" * 60)
1497
+
1498
+ return "\n".join(output)
1499
+
1500
+
1501
+ def main():
1502
+ """Main function with argument parsing and execution."""
1503
+ parser = argparse.ArgumentParser(
1504
+ description="Generate Post-Incident Review documents with RCA and action items",
1505
+ formatter_class=argparse.RawDescriptionHelpFormatter,
1506
+ epilog="""
1507
+ Examples:
1508
+ python pir_generator.py --incident incident.json --output pir.md
1509
+ python pir_generator.py --incident incident.json --rca-method fishbone
1510
+ cat incident.json | python pir_generator.py --format markdown
1511
+
1512
+ Incident JSON format:
1513
+ {
1514
+ "incident_id": "INC-2024-001",
1515
+ "title": "Database performance degradation",
1516
+ "description": "Users experiencing slow response times",
1517
+ "severity": "sev2",
1518
+ "start_time": "2024-01-01T12:00:00Z",
1519
+ "end_time": "2024-01-01T14:30:00Z",
1520
+ "customer_impact": "50% of users affected by slow page loads",
1521
+ "business_impact": "Moderate user experience degradation",
1522
+ "incident_commander": "Alice Smith",
1523
+ "responders": ["Bob Jones", "Carol Johnson"]
1524
+ }
1525
+ """
1526
+ )
1527
+
1528
+ parser.add_argument(
1529
+ "--incident", "-i",
1530
+ help="Incident data file (JSON) or '-' for stdin"
1531
+ )
1532
+
1533
+ parser.add_argument(
1534
+ "--timeline", "-t",
1535
+ help="Timeline reconstruction file (JSON)"
1536
+ )
1537
+
1538
+ parser.add_argument(
1539
+ "--output", "-o",
1540
+ help="Output file path (default: stdout)"
1541
+ )
1542
+
1543
+ parser.add_argument(
1544
+ "--format", "-f",
1545
+ choices=["json", "markdown", "text"],
1546
+ default="markdown",
1547
+ help="Output format (default: markdown)"
1548
+ )
1549
+
1550
+ parser.add_argument(
1551
+ "--rca-method",
1552
+ choices=["five_whys", "fishbone", "timeline", "bow_tie"],
1553
+ default="five_whys",
1554
+ help="Root cause analysis method (default: five_whys)"
1555
+ )
1556
+
1557
+ parser.add_argument(
1558
+ "--template-type",
1559
+ choices=["comprehensive", "standard", "brief"],
1560
+ default="comprehensive",
1561
+ help="PIR template type (default: comprehensive)"
1562
+ )
1563
+
1564
+ parser.add_argument(
1565
+ "--action-items",
1566
+ action="store_true",
1567
+ help="Generate detailed action items"
1568
+ )
1569
+
1570
+ args = parser.parse_args()
1571
+
1572
+ generator = PIRGenerator()
1573
+
1574
+ try:
1575
+ # Read incident data
1576
+ if args.incident == "-" or (not args.incident and not sys.stdin.isatty()):
1577
+ # Read from stdin
1578
+ input_text = sys.stdin.read().strip()
1579
+ if not input_text:
1580
+ parser.error("No incident data provided")
1581
+ incident_data = json.loads(input_text)
1582
+ elif args.incident:
1583
+ # Read from file
1584
+ with open(args.incident, 'r') as f:
1585
+ incident_data = json.load(f)
1586
+ else:
1587
+ parser.error("No incident data specified. Use --incident or pipe data to stdin.")
1588
+
1589
+ # Read timeline data if provided
1590
+ timeline_data = None
1591
+ if args.timeline:
1592
+ with open(args.timeline, 'r') as f:
1593
+ timeline_data = json.load(f)
1594
+
1595
+ # Validate incident data
1596
+ if not isinstance(incident_data, dict):
1597
+ parser.error("Incident data must be a JSON object")
1598
+
1599
+ if not incident_data.get("description") and not incident_data.get("title"):
1600
+ parser.error("Incident data must contain 'description' or 'title'")
1601
+
1602
+ # Generate PIR
1603
+ result = generator.generate_pir(
1604
+ incident_data=incident_data,
1605
+ timeline_data=timeline_data,
1606
+ rca_method=args.rca_method,
1607
+ template_type=args.template_type
1608
+ )
1609
+
1610
+ # Format output
1611
+ if args.format == "json":
1612
+ output = format_json_output(result)
1613
+ elif args.format == "markdown":
1614
+ output = format_markdown_output(result)
1615
+ else:
1616
+ output = format_text_output(result)
1617
+
1618
+ # Write output
1619
+ if args.output:
1620
+ with open(args.output, 'w') as f:
1621
+ f.write(output)
1622
+ f.write('\n')
1623
+ else:
1624
+ print(output)
1625
+
1626
+ except FileNotFoundError as e:
1627
+ print(f"Error: File not found - {e}", file=sys.stderr)
1628
+ sys.exit(1)
1629
+ except json.JSONDecodeError as e:
1630
+ print(f"Error: Invalid JSON - {e}", file=sys.stderr)
1631
+ sys.exit(1)
1632
+ except Exception as e:
1633
+ print(f"Error: {e}", file=sys.stderr)
1634
+ sys.exit(1)
1635
+
1636
+
1637
+ if __name__ == "__main__":
1638
+ main()