@shaykec/bridge 0.4.25 → 0.4.27

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 (595) hide show
  1. package/journeys/ai-engineer.yaml +34 -0
  2. package/journeys/backend-developer.yaml +36 -0
  3. package/journeys/business-analyst.yaml +37 -0
  4. package/journeys/devops-engineer.yaml +37 -0
  5. package/journeys/engineering-manager.yaml +44 -0
  6. package/journeys/frontend-developer.yaml +41 -0
  7. package/journeys/fullstack-developer.yaml +49 -0
  8. package/journeys/mobile-developer.yaml +42 -0
  9. package/journeys/product-manager.yaml +35 -0
  10. package/journeys/qa-engineer.yaml +37 -0
  11. package/journeys/ux-designer.yaml +43 -0
  12. package/modules/README.md +52 -0
  13. package/modules/accessibility-fundamentals/content.md +126 -0
  14. package/modules/accessibility-fundamentals/exercises.md +88 -0
  15. package/modules/accessibility-fundamentals/module.yaml +43 -0
  16. package/modules/accessibility-fundamentals/quick-ref.md +71 -0
  17. package/modules/accessibility-fundamentals/quiz.md +100 -0
  18. package/modules/accessibility-fundamentals/resources.md +29 -0
  19. package/modules/accessibility-fundamentals/walkthrough.md +80 -0
  20. package/modules/adr-writing/content.md +121 -0
  21. package/modules/adr-writing/exercises.md +81 -0
  22. package/modules/adr-writing/module.yaml +41 -0
  23. package/modules/adr-writing/quick-ref.md +57 -0
  24. package/modules/adr-writing/quiz.md +73 -0
  25. package/modules/adr-writing/resources.md +29 -0
  26. package/modules/adr-writing/walkthrough.md +64 -0
  27. package/modules/ai-agents/content.md +120 -0
  28. package/modules/ai-agents/exercises.md +82 -0
  29. package/modules/ai-agents/module.yaml +42 -0
  30. package/modules/ai-agents/quick-ref.md +60 -0
  31. package/modules/ai-agents/quiz.md +103 -0
  32. package/modules/ai-agents/resources.md +30 -0
  33. package/modules/ai-agents/walkthrough.md +85 -0
  34. package/modules/ai-assisted-research/content.md +136 -0
  35. package/modules/ai-assisted-research/exercises.md +80 -0
  36. package/modules/ai-assisted-research/module.yaml +42 -0
  37. package/modules/ai-assisted-research/quick-ref.md +67 -0
  38. package/modules/ai-assisted-research/quiz.md +73 -0
  39. package/modules/ai-assisted-research/resources.md +33 -0
  40. package/modules/ai-assisted-research/walkthrough.md +85 -0
  41. package/modules/ai-pair-programming/content.md +105 -0
  42. package/modules/ai-pair-programming/exercises.md +98 -0
  43. package/modules/ai-pair-programming/module.yaml +39 -0
  44. package/modules/ai-pair-programming/quick-ref.md +58 -0
  45. package/modules/ai-pair-programming/quiz.md +73 -0
  46. package/modules/ai-pair-programming/resources.md +34 -0
  47. package/modules/ai-pair-programming/walkthrough.md +117 -0
  48. package/modules/ai-test-generation/content.md +125 -0
  49. package/modules/ai-test-generation/exercises.md +98 -0
  50. package/modules/ai-test-generation/module.yaml +39 -0
  51. package/modules/ai-test-generation/quick-ref.md +65 -0
  52. package/modules/ai-test-generation/quiz.md +74 -0
  53. package/modules/ai-test-generation/resources.md +41 -0
  54. package/modules/ai-test-generation/walkthrough.md +100 -0
  55. package/modules/api-design/content.md +189 -0
  56. package/modules/api-design/exercises.md +84 -0
  57. package/modules/api-design/game.yaml +113 -0
  58. package/modules/api-design/module.yaml +45 -0
  59. package/modules/api-design/quick-ref.md +73 -0
  60. package/modules/api-design/quiz.md +100 -0
  61. package/modules/api-design/resources.md +55 -0
  62. package/modules/api-design/walkthrough.md +88 -0
  63. package/modules/clean-code/content.md +136 -0
  64. package/modules/clean-code/exercises.md +137 -0
  65. package/modules/clean-code/game.yaml +172 -0
  66. package/modules/clean-code/module.yaml +44 -0
  67. package/modules/clean-code/quick-ref.md +44 -0
  68. package/modules/clean-code/quiz.md +105 -0
  69. package/modules/clean-code/resources.md +40 -0
  70. package/modules/clean-code/walkthrough.md +78 -0
  71. package/modules/clean-code/workshop.yaml +149 -0
  72. package/modules/code-review/content.md +130 -0
  73. package/modules/code-review/exercises.md +95 -0
  74. package/modules/code-review/game.yaml +83 -0
  75. package/modules/code-review/module.yaml +42 -0
  76. package/modules/code-review/quick-ref.md +77 -0
  77. package/modules/code-review/quiz.md +105 -0
  78. package/modules/code-review/resources.md +40 -0
  79. package/modules/code-review/walkthrough.md +106 -0
  80. package/modules/daily-workflow/content.md +81 -0
  81. package/modules/daily-workflow/exercises.md +50 -0
  82. package/modules/daily-workflow/module.yaml +33 -0
  83. package/modules/daily-workflow/quick-ref.md +37 -0
  84. package/modules/daily-workflow/quiz.md +65 -0
  85. package/modules/daily-workflow/resources.md +38 -0
  86. package/modules/daily-workflow/walkthrough.md +83 -0
  87. package/modules/debugging-systematically/content.md +139 -0
  88. package/modules/debugging-systematically/exercises.md +91 -0
  89. package/modules/debugging-systematically/module.yaml +46 -0
  90. package/modules/debugging-systematically/quick-ref.md +59 -0
  91. package/modules/debugging-systematically/quiz.md +105 -0
  92. package/modules/debugging-systematically/resources.md +42 -0
  93. package/modules/debugging-systematically/walkthrough.md +84 -0
  94. package/modules/debugging-systematically/workshop.yaml +127 -0
  95. package/modules/demo-test/content.md +68 -0
  96. package/modules/demo-test/exercises.md +28 -0
  97. package/modules/demo-test/game.yaml +171 -0
  98. package/modules/demo-test/module.yaml +41 -0
  99. package/modules/demo-test/quick-ref.md +54 -0
  100. package/modules/demo-test/quiz.md +74 -0
  101. package/modules/demo-test/resources.md +21 -0
  102. package/modules/demo-test/walkthrough.md +122 -0
  103. package/modules/demo-test/workshop.yaml +31 -0
  104. package/modules/design-critique/content.md +93 -0
  105. package/modules/design-critique/exercises.md +71 -0
  106. package/modules/design-critique/module.yaml +41 -0
  107. package/modules/design-critique/quick-ref.md +63 -0
  108. package/modules/design-critique/quiz.md +73 -0
  109. package/modules/design-critique/resources.md +27 -0
  110. package/modules/design-critique/walkthrough.md +68 -0
  111. package/modules/design-patterns/content.md +335 -0
  112. package/modules/design-patterns/exercises.md +82 -0
  113. package/modules/design-patterns/game.yaml +55 -0
  114. package/modules/design-patterns/module.yaml +45 -0
  115. package/modules/design-patterns/quick-ref.md +44 -0
  116. package/modules/design-patterns/quiz.md +101 -0
  117. package/modules/design-patterns/resources.md +40 -0
  118. package/modules/design-patterns/walkthrough.md +64 -0
  119. package/modules/exploratory-testing/content.md +133 -0
  120. package/modules/exploratory-testing/exercises.md +88 -0
  121. package/modules/exploratory-testing/module.yaml +41 -0
  122. package/modules/exploratory-testing/quick-ref.md +68 -0
  123. package/modules/exploratory-testing/quiz.md +75 -0
  124. package/modules/exploratory-testing/resources.md +39 -0
  125. package/modules/exploratory-testing/walkthrough.md +87 -0
  126. package/modules/git/content.md +128 -0
  127. package/modules/git/exercises.md +53 -0
  128. package/modules/git/game.yaml +190 -0
  129. package/modules/git/module.yaml +44 -0
  130. package/modules/git/quick-ref.md +67 -0
  131. package/modules/git/quiz.md +89 -0
  132. package/modules/git/resources.md +49 -0
  133. package/modules/git/walkthrough.md +92 -0
  134. package/modules/git/workshop.yaml +145 -0
  135. package/modules/hiring-interviews/content.md +130 -0
  136. package/modules/hiring-interviews/exercises.md +88 -0
  137. package/modules/hiring-interviews/module.yaml +41 -0
  138. package/modules/hiring-interviews/quick-ref.md +68 -0
  139. package/modules/hiring-interviews/quiz.md +73 -0
  140. package/modules/hiring-interviews/resources.md +36 -0
  141. package/modules/hiring-interviews/walkthrough.md +75 -0
  142. package/modules/hooks/content.md +97 -0
  143. package/modules/hooks/exercises.md +69 -0
  144. package/modules/hooks/module.yaml +39 -0
  145. package/modules/hooks/quick-ref.md +93 -0
  146. package/modules/hooks/quiz.md +81 -0
  147. package/modules/hooks/resources.md +34 -0
  148. package/modules/hooks/walkthrough.md +105 -0
  149. package/modules/hooks/workshop.yaml +64 -0
  150. package/modules/incident-response/content.md +124 -0
  151. package/modules/incident-response/exercises.md +82 -0
  152. package/modules/incident-response/game.yaml +132 -0
  153. package/modules/incident-response/module.yaml +45 -0
  154. package/modules/incident-response/quick-ref.md +53 -0
  155. package/modules/incident-response/quiz.md +103 -0
  156. package/modules/incident-response/resources.md +40 -0
  157. package/modules/incident-response/walkthrough.md +82 -0
  158. package/modules/llm-fundamentals/content.md +114 -0
  159. package/modules/llm-fundamentals/exercises.md +83 -0
  160. package/modules/llm-fundamentals/module.yaml +42 -0
  161. package/modules/llm-fundamentals/quick-ref.md +64 -0
  162. package/modules/llm-fundamentals/quiz.md +103 -0
  163. package/modules/llm-fundamentals/resources.md +30 -0
  164. package/modules/llm-fundamentals/walkthrough.md +91 -0
  165. package/modules/one-on-ones/content.md +133 -0
  166. package/modules/one-on-ones/exercises.md +81 -0
  167. package/modules/one-on-ones/module.yaml +44 -0
  168. package/modules/one-on-ones/quick-ref.md +67 -0
  169. package/modules/one-on-ones/quiz.md +73 -0
  170. package/modules/one-on-ones/resources.md +37 -0
  171. package/modules/one-on-ones/walkthrough.md +69 -0
  172. package/modules/package.json +9 -0
  173. package/modules/prioritization-frameworks/content.md +130 -0
  174. package/modules/prioritization-frameworks/exercises.md +93 -0
  175. package/modules/prioritization-frameworks/module.yaml +41 -0
  176. package/modules/prioritization-frameworks/quick-ref.md +77 -0
  177. package/modules/prioritization-frameworks/quiz.md +73 -0
  178. package/modules/prioritization-frameworks/resources.md +32 -0
  179. package/modules/prioritization-frameworks/walkthrough.md +69 -0
  180. package/modules/prompt-engineering/content.md +123 -0
  181. package/modules/prompt-engineering/exercises.md +82 -0
  182. package/modules/prompt-engineering/game.yaml +101 -0
  183. package/modules/prompt-engineering/module.yaml +45 -0
  184. package/modules/prompt-engineering/quick-ref.md +65 -0
  185. package/modules/prompt-engineering/quiz.md +105 -0
  186. package/modules/prompt-engineering/resources.md +36 -0
  187. package/modules/prompt-engineering/walkthrough.md +81 -0
  188. package/modules/rag-fundamentals/content.md +111 -0
  189. package/modules/rag-fundamentals/exercises.md +80 -0
  190. package/modules/rag-fundamentals/module.yaml +45 -0
  191. package/modules/rag-fundamentals/quick-ref.md +58 -0
  192. package/modules/rag-fundamentals/quiz.md +75 -0
  193. package/modules/rag-fundamentals/resources.md +34 -0
  194. package/modules/rag-fundamentals/walkthrough.md +75 -0
  195. package/modules/react-fundamentals/content.md +140 -0
  196. package/modules/react-fundamentals/exercises.md +81 -0
  197. package/modules/react-fundamentals/game.yaml +145 -0
  198. package/modules/react-fundamentals/module.yaml +45 -0
  199. package/modules/react-fundamentals/quick-ref.md +62 -0
  200. package/modules/react-fundamentals/quiz.md +106 -0
  201. package/modules/react-fundamentals/resources.md +42 -0
  202. package/modules/react-fundamentals/walkthrough.md +89 -0
  203. package/modules/react-fundamentals/workshop.yaml +112 -0
  204. package/modules/react-native-fundamentals/content.md +141 -0
  205. package/modules/react-native-fundamentals/exercises.md +79 -0
  206. package/modules/react-native-fundamentals/module.yaml +42 -0
  207. package/modules/react-native-fundamentals/quick-ref.md +60 -0
  208. package/modules/react-native-fundamentals/quiz.md +61 -0
  209. package/modules/react-native-fundamentals/resources.md +24 -0
  210. package/modules/react-native-fundamentals/walkthrough.md +84 -0
  211. package/modules/registry.yaml +1650 -0
  212. package/modules/risk-management/content.md +162 -0
  213. package/modules/risk-management/exercises.md +86 -0
  214. package/modules/risk-management/module.yaml +41 -0
  215. package/modules/risk-management/quick-ref.md +82 -0
  216. package/modules/risk-management/quiz.md +73 -0
  217. package/modules/risk-management/resources.md +40 -0
  218. package/modules/risk-management/walkthrough.md +67 -0
  219. package/modules/running-effective-standups/content.md +119 -0
  220. package/modules/running-effective-standups/exercises.md +79 -0
  221. package/modules/running-effective-standups/module.yaml +40 -0
  222. package/modules/running-effective-standups/quick-ref.md +61 -0
  223. package/modules/running-effective-standups/quiz.md +73 -0
  224. package/modules/running-effective-standups/resources.md +36 -0
  225. package/modules/running-effective-standups/walkthrough.md +76 -0
  226. package/modules/solid-principles/content.md +154 -0
  227. package/modules/solid-principles/exercises.md +107 -0
  228. package/modules/solid-principles/module.yaml +42 -0
  229. package/modules/solid-principles/quick-ref.md +50 -0
  230. package/modules/solid-principles/quiz.md +102 -0
  231. package/modules/solid-principles/resources.md +39 -0
  232. package/modules/solid-principles/walkthrough.md +84 -0
  233. package/modules/sprint-planning/content.md +142 -0
  234. package/modules/sprint-planning/exercises.md +79 -0
  235. package/modules/sprint-planning/game.yaml +84 -0
  236. package/modules/sprint-planning/module.yaml +44 -0
  237. package/modules/sprint-planning/quick-ref.md +76 -0
  238. package/modules/sprint-planning/quiz.md +102 -0
  239. package/modules/sprint-planning/resources.md +39 -0
  240. package/modules/sprint-planning/walkthrough.md +75 -0
  241. package/modules/sql-fundamentals/content.md +160 -0
  242. package/modules/sql-fundamentals/exercises.md +87 -0
  243. package/modules/sql-fundamentals/game.yaml +105 -0
  244. package/modules/sql-fundamentals/module.yaml +45 -0
  245. package/modules/sql-fundamentals/quick-ref.md +53 -0
  246. package/modules/sql-fundamentals/quiz.md +103 -0
  247. package/modules/sql-fundamentals/resources.md +42 -0
  248. package/modules/sql-fundamentals/walkthrough.md +92 -0
  249. package/modules/sql-fundamentals/workshop.yaml +109 -0
  250. package/modules/stakeholder-communication/content.md +186 -0
  251. package/modules/stakeholder-communication/exercises.md +87 -0
  252. package/modules/stakeholder-communication/module.yaml +38 -0
  253. package/modules/stakeholder-communication/quick-ref.md +89 -0
  254. package/modules/stakeholder-communication/quiz.md +73 -0
  255. package/modules/stakeholder-communication/resources.md +41 -0
  256. package/modules/stakeholder-communication/walkthrough.md +74 -0
  257. package/modules/system-design/content.md +149 -0
  258. package/modules/system-design/exercises.md +83 -0
  259. package/modules/system-design/game.yaml +95 -0
  260. package/modules/system-design/module.yaml +46 -0
  261. package/modules/system-design/quick-ref.md +59 -0
  262. package/modules/system-design/quiz.md +102 -0
  263. package/modules/system-design/resources.md +46 -0
  264. package/modules/system-design/walkthrough.md +90 -0
  265. package/modules/team-topologies/content.md +166 -0
  266. package/modules/team-topologies/exercises.md +85 -0
  267. package/modules/team-topologies/module.yaml +41 -0
  268. package/modules/team-topologies/quick-ref.md +61 -0
  269. package/modules/team-topologies/quiz.md +101 -0
  270. package/modules/team-topologies/resources.md +37 -0
  271. package/modules/team-topologies/walkthrough.md +76 -0
  272. package/modules/technical-debt/content.md +111 -0
  273. package/modules/technical-debt/exercises.md +92 -0
  274. package/modules/technical-debt/module.yaml +39 -0
  275. package/modules/technical-debt/quick-ref.md +60 -0
  276. package/modules/technical-debt/quiz.md +73 -0
  277. package/modules/technical-debt/resources.md +25 -0
  278. package/modules/technical-debt/walkthrough.md +94 -0
  279. package/modules/technical-mentoring/content.md +128 -0
  280. package/modules/technical-mentoring/exercises.md +84 -0
  281. package/modules/technical-mentoring/module.yaml +41 -0
  282. package/modules/technical-mentoring/quick-ref.md +74 -0
  283. package/modules/technical-mentoring/quiz.md +73 -0
  284. package/modules/technical-mentoring/resources.md +33 -0
  285. package/modules/technical-mentoring/walkthrough.md +65 -0
  286. package/modules/test-strategy/content.md +136 -0
  287. package/modules/test-strategy/exercises.md +84 -0
  288. package/modules/test-strategy/game.yaml +99 -0
  289. package/modules/test-strategy/module.yaml +45 -0
  290. package/modules/test-strategy/quick-ref.md +66 -0
  291. package/modules/test-strategy/quiz.md +99 -0
  292. package/modules/test-strategy/resources.md +60 -0
  293. package/modules/test-strategy/walkthrough.md +97 -0
  294. package/modules/test-strategy/workshop.yaml +96 -0
  295. package/modules/typescript-fundamentals/content.md +127 -0
  296. package/modules/typescript-fundamentals/exercises.md +79 -0
  297. package/modules/typescript-fundamentals/game.yaml +111 -0
  298. package/modules/typescript-fundamentals/module.yaml +45 -0
  299. package/modules/typescript-fundamentals/quick-ref.md +55 -0
  300. package/modules/typescript-fundamentals/quiz.md +104 -0
  301. package/modules/typescript-fundamentals/resources.md +42 -0
  302. package/modules/typescript-fundamentals/walkthrough.md +71 -0
  303. package/modules/typescript-fundamentals/workshop.yaml +146 -0
  304. package/modules/user-story-mapping/content.md +123 -0
  305. package/modules/user-story-mapping/exercises.md +87 -0
  306. package/modules/user-story-mapping/module.yaml +41 -0
  307. package/modules/user-story-mapping/quick-ref.md +64 -0
  308. package/modules/user-story-mapping/quiz.md +73 -0
  309. package/modules/user-story-mapping/resources.md +29 -0
  310. package/modules/user-story-mapping/walkthrough.md +86 -0
  311. package/modules/writing-prds/content.md +133 -0
  312. package/modules/writing-prds/exercises.md +93 -0
  313. package/modules/writing-prds/game.yaml +83 -0
  314. package/modules/writing-prds/module.yaml +44 -0
  315. package/modules/writing-prds/quick-ref.md +77 -0
  316. package/modules/writing-prds/quiz.md +103 -0
  317. package/modules/writing-prds/resources.md +30 -0
  318. package/modules/writing-prds/walkthrough.md +87 -0
  319. package/package.json +2 -2
  320. package/canvas-dist/assets/_basePickBy-BovdgFIW.js +0 -1
  321. package/canvas-dist/assets/_basePickBy-BtkHe2u_.js +0 -1
  322. package/canvas-dist/assets/_basePickBy-C0936578.js +0 -1
  323. package/canvas-dist/assets/_basePickBy-CE2Qvuh7.js +0 -1
  324. package/canvas-dist/assets/_basePickBy-DV6sX4CG.js +0 -1
  325. package/canvas-dist/assets/_basePickBy-DZX6ZNMT.js +0 -1
  326. package/canvas-dist/assets/_baseUniq-B7dN28TM.js +0 -1
  327. package/canvas-dist/assets/_baseUniq-Cl23fCdR.js +0 -1
  328. package/canvas-dist/assets/_baseUniq-CojWFw7B.js +0 -1
  329. package/canvas-dist/assets/_baseUniq-DA640BJl.js +0 -1
  330. package/canvas-dist/assets/_baseUniq-Ds-62CCj.js +0 -1
  331. package/canvas-dist/assets/_baseUniq-KG7SRw9H.js +0 -1
  332. package/canvas-dist/assets/arc-7E9FFKlC.js +0 -1
  333. package/canvas-dist/assets/arc-BSMfRZtt.js +0 -1
  334. package/canvas-dist/assets/arc-C6nT-koR.js +0 -1
  335. package/canvas-dist/assets/arc-D_fOnjmo.js +0 -1
  336. package/canvas-dist/assets/arc-Khfvgkr3.js +0 -1
  337. package/canvas-dist/assets/arc-ieS-i42x.js +0 -1
  338. package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DF4t6GQD.js +0 -36
  339. package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DXgSlsio.js +0 -36
  340. package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DiomxPB4.js +0 -36
  341. package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DnFaxvXD.js +0 -36
  342. package/canvas-dist/assets/architectureDiagram-VXUJARFQ-Dt38C0LJ.js +0 -36
  343. package/canvas-dist/assets/architectureDiagram-VXUJARFQ-egbtMwua.js +0 -36
  344. package/canvas-dist/assets/blockDiagram-VD42YOAC-CUNKQd-b.js +0 -122
  345. package/canvas-dist/assets/blockDiagram-VD42YOAC-D-NiLXxd.js +0 -122
  346. package/canvas-dist/assets/blockDiagram-VD42YOAC-Dx6Dh9gg.js +0 -122
  347. package/canvas-dist/assets/blockDiagram-VD42YOAC-_r-PmlQy.js +0 -122
  348. package/canvas-dist/assets/blockDiagram-VD42YOAC-bvYKZLMc.js +0 -122
  349. package/canvas-dist/assets/blockDiagram-VD42YOAC-l85QT9Ig.js +0 -122
  350. package/canvas-dist/assets/c4Diagram-YG6GDRKO-BWKCTyQi.js +0 -10
  351. package/canvas-dist/assets/c4Diagram-YG6GDRKO-CbXs2xzC.js +0 -10
  352. package/canvas-dist/assets/c4Diagram-YG6GDRKO-CjiS-GNK.js +0 -10
  353. package/canvas-dist/assets/c4Diagram-YG6GDRKO-D7SnLlHp.js +0 -10
  354. package/canvas-dist/assets/c4Diagram-YG6GDRKO-RTTCSVf2.js +0 -10
  355. package/canvas-dist/assets/c4Diagram-YG6GDRKO-yvqJ_AqX.js +0 -10
  356. package/canvas-dist/assets/channel-CSXq7GP6.js +0 -1
  357. package/canvas-dist/assets/channel-CvujjGiJ.js +0 -1
  358. package/canvas-dist/assets/channel-D959Iony.js +0 -1
  359. package/canvas-dist/assets/channel-DOSwCnrB.js +0 -1
  360. package/canvas-dist/assets/channel-sw61LzxF.js +0 -1
  361. package/canvas-dist/assets/channel-vZVnNhOK.js +0 -1
  362. package/canvas-dist/assets/chunk-4BX2VUAB-BBjuAwXr.js +0 -1
  363. package/canvas-dist/assets/chunk-4BX2VUAB-BXRNyucU.js +0 -1
  364. package/canvas-dist/assets/chunk-4BX2VUAB-Bgq5Z77T.js +0 -1
  365. package/canvas-dist/assets/chunk-4BX2VUAB-BuoMCMCr.js +0 -1
  366. package/canvas-dist/assets/chunk-4BX2VUAB-COD5n7vg.js +0 -1
  367. package/canvas-dist/assets/chunk-4BX2VUAB-K8DepKJO.js +0 -1
  368. package/canvas-dist/assets/chunk-55IACEB6-Bic_bMrQ.js +0 -1
  369. package/canvas-dist/assets/chunk-55IACEB6-DEy2QUDq.js +0 -1
  370. package/canvas-dist/assets/chunk-55IACEB6-Dcgbmfzg.js +0 -1
  371. package/canvas-dist/assets/chunk-55IACEB6-DfmuNm_E.js +0 -1
  372. package/canvas-dist/assets/chunk-55IACEB6-DlQRcczm.js +0 -1
  373. package/canvas-dist/assets/chunk-55IACEB6-p2qMY-fm.js +0 -1
  374. package/canvas-dist/assets/chunk-B4BG7PRW-BpbyxBP2.js +0 -165
  375. package/canvas-dist/assets/chunk-B4BG7PRW-CCPqvPrP.js +0 -165
  376. package/canvas-dist/assets/chunk-B4BG7PRW-CEeDPAki.js +0 -165
  377. package/canvas-dist/assets/chunk-B4BG7PRW-D2UFN_2M.js +0 -165
  378. package/canvas-dist/assets/chunk-B4BG7PRW-DFI5h6HC.js +0 -165
  379. package/canvas-dist/assets/chunk-B4BG7PRW-DKOiFGMU.js +0 -165
  380. package/canvas-dist/assets/chunk-DI55MBZ5-BV6nHjNQ.js +0 -220
  381. package/canvas-dist/assets/chunk-DI55MBZ5-CEZJmC0E.js +0 -220
  382. package/canvas-dist/assets/chunk-DI55MBZ5-DOZT99Ek.js +0 -220
  383. package/canvas-dist/assets/chunk-DI55MBZ5-DmC2LoG2.js +0 -220
  384. package/canvas-dist/assets/chunk-DI55MBZ5-DpkcJdZP.js +0 -220
  385. package/canvas-dist/assets/chunk-DI55MBZ5-fVTGx0zh.js +0 -220
  386. package/canvas-dist/assets/chunk-FMBD7UC4-BOCyQpI7.js +0 -15
  387. package/canvas-dist/assets/chunk-FMBD7UC4-C76FrRL8.js +0 -15
  388. package/canvas-dist/assets/chunk-FMBD7UC4-CAq-btWc.js +0 -15
  389. package/canvas-dist/assets/chunk-FMBD7UC4-CidVsej6.js +0 -15
  390. package/canvas-dist/assets/chunk-FMBD7UC4-DPpfskdX.js +0 -15
  391. package/canvas-dist/assets/chunk-FMBD7UC4-DnLtclge.js +0 -15
  392. package/canvas-dist/assets/chunk-QN33PNHL-BclpCUi8.js +0 -1
  393. package/canvas-dist/assets/chunk-QN33PNHL-DDUw8IU1.js +0 -1
  394. package/canvas-dist/assets/chunk-QN33PNHL-DdJFAUXw.js +0 -1
  395. package/canvas-dist/assets/chunk-QN33PNHL-DjV4jUn9.js +0 -1
  396. package/canvas-dist/assets/chunk-QN33PNHL-N-HTycqU.js +0 -1
  397. package/canvas-dist/assets/chunk-QN33PNHL-sd8p21DW.js +0 -1
  398. package/canvas-dist/assets/chunk-QZHKN3VN-B6mT-JkP.js +0 -1
  399. package/canvas-dist/assets/chunk-QZHKN3VN-BCo8pc7x.js +0 -1
  400. package/canvas-dist/assets/chunk-QZHKN3VN-C8IIu6es.js +0 -1
  401. package/canvas-dist/assets/chunk-QZHKN3VN-D9FF492U.js +0 -1
  402. package/canvas-dist/assets/chunk-QZHKN3VN-DWMbUjXT.js +0 -1
  403. package/canvas-dist/assets/chunk-QZHKN3VN-l5FBJ77g.js +0 -1
  404. package/canvas-dist/assets/chunk-TZMSLE5B-BASt-UWt.js +0 -1
  405. package/canvas-dist/assets/chunk-TZMSLE5B-BCfaZWLT.js +0 -1
  406. package/canvas-dist/assets/chunk-TZMSLE5B-BKIk_hBR.js +0 -1
  407. package/canvas-dist/assets/chunk-TZMSLE5B-C4pt-Ir8.js +0 -1
  408. package/canvas-dist/assets/chunk-TZMSLE5B-DwGlELvo.js +0 -1
  409. package/canvas-dist/assets/chunk-TZMSLE5B-jJKG-WvJ.js +0 -1
  410. package/canvas-dist/assets/classDiagram-2ON5EDUG-B7YQfPU4.js +0 -1
  411. package/canvas-dist/assets/classDiagram-2ON5EDUG-BZ61MaHY.js +0 -1
  412. package/canvas-dist/assets/classDiagram-2ON5EDUG-CGseYor2.js +0 -1
  413. package/canvas-dist/assets/classDiagram-2ON5EDUG-CKzOc99J.js +0 -1
  414. package/canvas-dist/assets/classDiagram-2ON5EDUG-Ce_LPjwW.js +0 -1
  415. package/canvas-dist/assets/classDiagram-2ON5EDUG-DorPdibv.js +0 -1
  416. package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-B7YQfPU4.js +0 -1
  417. package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-BZ61MaHY.js +0 -1
  418. package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-CGseYor2.js +0 -1
  419. package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-CKzOc99J.js +0 -1
  420. package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-Ce_LPjwW.js +0 -1
  421. package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-DorPdibv.js +0 -1
  422. package/canvas-dist/assets/clone-74KSto7H.js +0 -1
  423. package/canvas-dist/assets/clone-CJQgAYVe.js +0 -1
  424. package/canvas-dist/assets/clone-DLeTuhHE.js +0 -1
  425. package/canvas-dist/assets/clone-D_IHK_lQ.js +0 -1
  426. package/canvas-dist/assets/clone-DxMUv1L9.js +0 -1
  427. package/canvas-dist/assets/clone-UNKf_nED.js +0 -1
  428. package/canvas-dist/assets/cose-bilkent-S5V4N54A-BTyQiCkr.js +0 -1
  429. package/canvas-dist/assets/cose-bilkent-S5V4N54A-BtPAe24N.js +0 -1
  430. package/canvas-dist/assets/cose-bilkent-S5V4N54A-DIjE7V3m.js +0 -1
  431. package/canvas-dist/assets/cose-bilkent-S5V4N54A-DKL_BGvE.js +0 -1
  432. package/canvas-dist/assets/cose-bilkent-S5V4N54A-LZ4OsCLU.js +0 -1
  433. package/canvas-dist/assets/cose-bilkent-S5V4N54A-XWeJtgga.js +0 -1
  434. package/canvas-dist/assets/dagre-6UL2VRFP-BJ2vcFwR.js +0 -4
  435. package/canvas-dist/assets/dagre-6UL2VRFP-C1FlE5s8.js +0 -4
  436. package/canvas-dist/assets/dagre-6UL2VRFP-C3BWFgl6.js +0 -4
  437. package/canvas-dist/assets/dagre-6UL2VRFP-CUnx73Rf.js +0 -4
  438. package/canvas-dist/assets/dagre-6UL2VRFP-Do10BY1y.js +0 -4
  439. package/canvas-dist/assets/dagre-6UL2VRFP-rOZEkrsg.js +0 -4
  440. package/canvas-dist/assets/diagram-PSM6KHXK-BGi_qzbq.js +0 -24
  441. package/canvas-dist/assets/diagram-PSM6KHXK-C3Nv7h_j.js +0 -24
  442. package/canvas-dist/assets/diagram-PSM6KHXK-CsMy-r0n.js +0 -24
  443. package/canvas-dist/assets/diagram-PSM6KHXK-Dj8g7kGt.js +0 -24
  444. package/canvas-dist/assets/diagram-PSM6KHXK-Dxb1w_7r.js +0 -24
  445. package/canvas-dist/assets/diagram-PSM6KHXK-kVMBkEyV.js +0 -24
  446. package/canvas-dist/assets/diagram-QEK2KX5R-4bsrr1WZ.js +0 -43
  447. package/canvas-dist/assets/diagram-QEK2KX5R-Bv7BmKfI.js +0 -43
  448. package/canvas-dist/assets/diagram-QEK2KX5R-C_FLN6hv.js +0 -43
  449. package/canvas-dist/assets/diagram-QEK2KX5R-Csuk5L3z.js +0 -43
  450. package/canvas-dist/assets/diagram-QEK2KX5R-D5Aszgz4.js +0 -43
  451. package/canvas-dist/assets/diagram-QEK2KX5R-DX58f87l.js +0 -43
  452. package/canvas-dist/assets/diagram-S2PKOQOG-1Q7hwiSd.js +0 -24
  453. package/canvas-dist/assets/diagram-S2PKOQOG-Bz9Vxi5V.js +0 -24
  454. package/canvas-dist/assets/diagram-S2PKOQOG-CdWgZIIc.js +0 -24
  455. package/canvas-dist/assets/diagram-S2PKOQOG-DBicbKFU.js +0 -24
  456. package/canvas-dist/assets/diagram-S2PKOQOG-DsXKwPtU.js +0 -24
  457. package/canvas-dist/assets/diagram-S2PKOQOG-L_SMHLXs.js +0 -24
  458. package/canvas-dist/assets/erDiagram-Q2GNP2WA-BYu7fh6H.js +0 -60
  459. package/canvas-dist/assets/erDiagram-Q2GNP2WA-CvnQ69BF.js +0 -60
  460. package/canvas-dist/assets/erDiagram-Q2GNP2WA-D3xm-Tdm.js +0 -60
  461. package/canvas-dist/assets/erDiagram-Q2GNP2WA-DIPpD8sj.js +0 -60
  462. package/canvas-dist/assets/erDiagram-Q2GNP2WA-DNgu6dMd.js +0 -60
  463. package/canvas-dist/assets/erDiagram-Q2GNP2WA-Decm8aB4.js +0 -60
  464. package/canvas-dist/assets/flowDiagram-NV44I4VS-2ymk2kw2.js +0 -162
  465. package/canvas-dist/assets/flowDiagram-NV44I4VS-BEPFOt6U.js +0 -162
  466. package/canvas-dist/assets/flowDiagram-NV44I4VS-BwqXYGfK.js +0 -162
  467. package/canvas-dist/assets/flowDiagram-NV44I4VS-CS1jax_z.js +0 -162
  468. package/canvas-dist/assets/flowDiagram-NV44I4VS-DQz5bf7r.js +0 -162
  469. package/canvas-dist/assets/flowDiagram-NV44I4VS-KW4T1sqF.js +0 -162
  470. package/canvas-dist/assets/ganttDiagram-JELNMOA3-B811prZt.js +0 -267
  471. package/canvas-dist/assets/ganttDiagram-JELNMOA3-C75pWm7X.js +0 -267
  472. package/canvas-dist/assets/ganttDiagram-JELNMOA3-CWsbo0fn.js +0 -267
  473. package/canvas-dist/assets/ganttDiagram-JELNMOA3-CbJozPBN.js +0 -267
  474. package/canvas-dist/assets/ganttDiagram-JELNMOA3-Co0cFt4c.js +0 -267
  475. package/canvas-dist/assets/ganttDiagram-JELNMOA3-I4PDqrRh.js +0 -267
  476. package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-B-z0cLPt.js +0 -65
  477. package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-Be40z-LF.js +0 -65
  478. package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-BejNaAVm.js +0 -65
  479. package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-BqWDYr0X.js +0 -65
  480. package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-DSvWGY-e.js +0 -65
  481. package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-HLYbyNJ5.js +0 -65
  482. package/canvas-dist/assets/graph-BE8KKsdf.js +0 -1
  483. package/canvas-dist/assets/graph-D6DzzszU.js +0 -1
  484. package/canvas-dist/assets/graph-DFR8Y_8s.js +0 -1
  485. package/canvas-dist/assets/graph-Da385cDY.js +0 -1
  486. package/canvas-dist/assets/graph-MU7gZz2B.js +0 -1
  487. package/canvas-dist/assets/graph-wjSBJwnf.js +0 -1
  488. package/canvas-dist/assets/index--ztw-8Rw.js +0 -647
  489. package/canvas-dist/assets/index-5TpIM6B1.js +0 -11
  490. package/canvas-dist/assets/index-BSswTuBk.js +0 -11
  491. package/canvas-dist/assets/index-BVvhMmjs.js +0 -11
  492. package/canvas-dist/assets/index-BY92Mj5g.js +0 -572
  493. package/canvas-dist/assets/index-CV7palC3.js +0 -572
  494. package/canvas-dist/assets/index-D9bmQGsB.js +0 -11
  495. package/canvas-dist/assets/index-DDIKkGv8.js +0 -592
  496. package/canvas-dist/assets/index-Dyo0NkPb.js +0 -574
  497. package/canvas-dist/assets/index-iQWajCow.js +0 -572
  498. package/canvas-dist/assets/index-m68YlAMU.js +0 -11
  499. package/canvas-dist/assets/index-mEoP57az.js +0 -11
  500. package/canvas-dist/assets/infoDiagram-HS3SLOUP--9BirqgJ.js +0 -2
  501. package/canvas-dist/assets/infoDiagram-HS3SLOUP-CSJVED2y.js +0 -2
  502. package/canvas-dist/assets/infoDiagram-HS3SLOUP-D68HIb2t.js +0 -2
  503. package/canvas-dist/assets/infoDiagram-HS3SLOUP-DK2VLGGz.js +0 -2
  504. package/canvas-dist/assets/infoDiagram-HS3SLOUP-PaFhn4yD.js +0 -2
  505. package/canvas-dist/assets/infoDiagram-HS3SLOUP-zLNG47sU.js +0 -2
  506. package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-Bue2dR2X.js +0 -139
  507. package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-CrgZfpdU.js +0 -139
  508. package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-DUxWmkkC.js +0 -139
  509. package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-OTFkv4pd.js +0 -139
  510. package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-eK2_Zuu3.js +0 -139
  511. package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-uds5Tz8D.js +0 -139
  512. package/canvas-dist/assets/kanban-definition-3W4ZIXB7-BETdiI7I.js +0 -89
  513. package/canvas-dist/assets/kanban-definition-3W4ZIXB7-BdVh7KdN.js +0 -89
  514. package/canvas-dist/assets/kanban-definition-3W4ZIXB7-Cxl8UM9S.js +0 -89
  515. package/canvas-dist/assets/kanban-definition-3W4ZIXB7-DVPlx3I2.js +0 -89
  516. package/canvas-dist/assets/kanban-definition-3W4ZIXB7-LtNWeoYB.js +0 -89
  517. package/canvas-dist/assets/kanban-definition-3W4ZIXB7-uvhEMvyE.js +0 -89
  518. package/canvas-dist/assets/layout-1OzszN14.js +0 -1
  519. package/canvas-dist/assets/layout-CJSupFcF.js +0 -1
  520. package/canvas-dist/assets/layout-DFRmxN_c.js +0 -1
  521. package/canvas-dist/assets/layout-DSu-zk7y.js +0 -1
  522. package/canvas-dist/assets/layout-TGcrvApd.js +0 -1
  523. package/canvas-dist/assets/layout-eStc8SYK.js +0 -1
  524. package/canvas-dist/assets/linear-9qlE6xa7.js +0 -1
  525. package/canvas-dist/assets/linear-CBfFWnLD.js +0 -1
  526. package/canvas-dist/assets/linear-Cv4ai8Hq.js +0 -1
  527. package/canvas-dist/assets/linear-DDzz65E6.js +0 -1
  528. package/canvas-dist/assets/linear-wbIqhwDf.js +0 -1
  529. package/canvas-dist/assets/linear-wyNKl76F.js +0 -1
  530. package/canvas-dist/assets/mindmap-definition-VGOIOE7T-3l4YzhEM.js +0 -68
  531. package/canvas-dist/assets/mindmap-definition-VGOIOE7T-B-KkpNlw.js +0 -68
  532. package/canvas-dist/assets/mindmap-definition-VGOIOE7T-DHMHWgmT.js +0 -68
  533. package/canvas-dist/assets/mindmap-definition-VGOIOE7T-Dqfyg4Z2.js +0 -68
  534. package/canvas-dist/assets/mindmap-definition-VGOIOE7T-NeRYOzsq.js +0 -68
  535. package/canvas-dist/assets/mindmap-definition-VGOIOE7T-xyu628P9.js +0 -68
  536. package/canvas-dist/assets/pieDiagram-ADFJNKIX-BWNzVAGj.js +0 -30
  537. package/canvas-dist/assets/pieDiagram-ADFJNKIX-Bm3PXYs-.js +0 -30
  538. package/canvas-dist/assets/pieDiagram-ADFJNKIX-BvvN7VvQ.js +0 -30
  539. package/canvas-dist/assets/pieDiagram-ADFJNKIX-BwU7AN7W.js +0 -30
  540. package/canvas-dist/assets/pieDiagram-ADFJNKIX-CHgwWCaM.js +0 -30
  541. package/canvas-dist/assets/pieDiagram-ADFJNKIX-DlZc8YOh.js +0 -30
  542. package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-B-Zd8OFp.js +0 -7
  543. package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-B1CnJyxI.js +0 -7
  544. package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-C0Qo00b9.js +0 -7
  545. package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-C9bx3nEJ.js +0 -7
  546. package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-UHENkiRO.js +0 -7
  547. package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-jKfurTPU.js +0 -7
  548. package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-BPpNNusD.js +0 -64
  549. package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-BwZF1NIK.js +0 -64
  550. package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-CaT3Frtk.js +0 -64
  551. package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-Dfoz7R_7.js +0 -64
  552. package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-DsrX4TT-.js +0 -64
  553. package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-dmouSXOl.js +0 -64
  554. package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-BEy-A1Fu.js +0 -10
  555. package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-BViMBiAQ.js +0 -10
  556. package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-BqrM-qWN.js +0 -10
  557. package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-DRkRC9qB.js +0 -10
  558. package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-DbuzKCtn.js +0 -10
  559. package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-_aHMKbpw.js +0 -10
  560. package/canvas-dist/assets/sequenceDiagram-WL72ISMW-B8FOaL2Q.js +0 -145
  561. package/canvas-dist/assets/sequenceDiagram-WL72ISMW-C02NQwOB.js +0 -145
  562. package/canvas-dist/assets/sequenceDiagram-WL72ISMW-CgyHivPj.js +0 -145
  563. package/canvas-dist/assets/sequenceDiagram-WL72ISMW-CzW1WaEm.js +0 -145
  564. package/canvas-dist/assets/sequenceDiagram-WL72ISMW-DJhHI1pe.js +0 -145
  565. package/canvas-dist/assets/sequenceDiagram-WL72ISMW-VFkpAeoG.js +0 -145
  566. package/canvas-dist/assets/stateDiagram-FKZM4ZOC-BSqFX4PJ.js +0 -1
  567. package/canvas-dist/assets/stateDiagram-FKZM4ZOC-BnXhhxkN.js +0 -1
  568. package/canvas-dist/assets/stateDiagram-FKZM4ZOC-ClARVrvt.js +0 -1
  569. package/canvas-dist/assets/stateDiagram-FKZM4ZOC-CuC6xesY.js +0 -1
  570. package/canvas-dist/assets/stateDiagram-FKZM4ZOC-DcAiGjph.js +0 -1
  571. package/canvas-dist/assets/stateDiagram-FKZM4ZOC-aBg0hjTp.js +0 -1
  572. package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-8fib9ftc.js +0 -1
  573. package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-B-DO0ZqO.js +0 -1
  574. package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-BksbsE4k.js +0 -1
  575. package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-C2DJCNPK.js +0 -1
  576. package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-CeA5jba6.js +0 -1
  577. package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-zsAyq0tK.js +0 -1
  578. package/canvas-dist/assets/timeline-definition-IT6M3QCI-BaHdYD2h.js +0 -61
  579. package/canvas-dist/assets/timeline-definition-IT6M3QCI-Bl2hg8IM.js +0 -61
  580. package/canvas-dist/assets/timeline-definition-IT6M3QCI-CrVwLiGm.js +0 -61
  581. package/canvas-dist/assets/timeline-definition-IT6M3QCI-DrXGRjnB.js +0 -61
  582. package/canvas-dist/assets/timeline-definition-IT6M3QCI-cYAwshf6.js +0 -61
  583. package/canvas-dist/assets/timeline-definition-IT6M3QCI-flyL0y-3.js +0 -61
  584. package/canvas-dist/assets/treemap-GDKQZRPO-C4Hg8kJ_.js +0 -162
  585. package/canvas-dist/assets/treemap-GDKQZRPO-DVY2G9qY.js +0 -162
  586. package/canvas-dist/assets/treemap-GDKQZRPO-DpLWPA1z.js +0 -162
  587. package/canvas-dist/assets/treemap-GDKQZRPO-Ds86cUVw.js +0 -162
  588. package/canvas-dist/assets/treemap-GDKQZRPO-DwmoI6tH.js +0 -162
  589. package/canvas-dist/assets/treemap-GDKQZRPO-SsGFkgVd.js +0 -162
  590. package/canvas-dist/assets/xychartDiagram-PRI3JC2R-B9c1iLBf.js +0 -7
  591. package/canvas-dist/assets/xychartDiagram-PRI3JC2R-BpX6MPWa.js +0 -7
  592. package/canvas-dist/assets/xychartDiagram-PRI3JC2R-CEgW_j0p.js +0 -7
  593. package/canvas-dist/assets/xychartDiagram-PRI3JC2R-CSEFGEQX.js +0 -7
  594. package/canvas-dist/assets/xychartDiagram-PRI3JC2R-CnG4XoMc.js +0 -7
  595. package/canvas-dist/assets/xychartDiagram-PRI3JC2R-Dftj3Bt3.js +0 -7
@@ -0,0 +1,53 @@
1
+ # SQL Quick Reference
2
+
3
+ ## Basic Query
4
+
5
+ ```sql
6
+ SELECT col1, col2 FROM table WHERE condition ORDER BY col LIMIT n OFFSET m;
7
+ ```
8
+
9
+ ## JOINs
10
+
11
+ | Join | Result |
12
+ |------|--------|
13
+ | INNER JOIN | Only matches |
14
+ | LEFT JOIN | All left + matches from right |
15
+ | RIGHT JOIN | All right + matches from left |
16
+ | FULL OUTER | All from both |
17
+
18
+ ## Aggregates
19
+
20
+ | Function | Purpose |
21
+ |----------|---------|
22
+ | COUNT(*) | Number of rows |
23
+ | SUM(col) | Sum of values |
24
+ | AVG(col) | Average |
25
+ | MIN(col), MAX(col) | Min/Max |
26
+
27
+ ## WHERE vs HAVING
28
+
29
+ | Clause | When |
30
+ |--------|------|
31
+ | WHERE | Before GROUP BY; row-level filter |
32
+ | HAVING | After GROUP BY; group-level filter |
33
+
34
+ ## Normalization
35
+
36
+ | Form | Rule |
37
+ |------|------|
38
+ | 1NF | Atomic values, no repeating groups |
39
+ | 2NF | 1NF + no partial dependencies |
40
+ | 3NF | 2NF + no transitive dependencies |
41
+
42
+ ## Common Patterns
43
+
44
+ ```sql
45
+ -- Pagination
46
+ SELECT * FROM t ORDER BY id LIMIT 10 OFFSET 20;
47
+
48
+ -- Exists check
49
+ SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
50
+
51
+ -- Top N per group (simplified)
52
+ SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY group_col ORDER BY sort_col) rn FROM t) WHERE rn <= 5;
53
+ ```
@@ -0,0 +1,103 @@
1
+ # SQL Quiz
2
+
3
+ ## Question 1
4
+
5
+ What does an INNER JOIN return?
6
+
7
+ A) All rows from both tables
8
+ B) Only rows with matching values in both tables
9
+ C) All rows from the left table
10
+ D) Only the first matching row from each table
11
+
12
+ <!-- ANSWER: B -->
13
+ <!-- EXPLANATION: INNER JOIN returns only rows where the join condition is satisfied in both tables. Rows with no match in the other table are excluded. -->
14
+
15
+ ## Question 2
16
+
17
+ What is the difference between LEFT JOIN and INNER JOIN?
18
+
19
+ A) They are the same
20
+ B) LEFT JOIN includes all rows from the left table, even with no match
21
+ C) LEFT JOIN is faster
22
+ D) INNER JOIN includes NULLs
23
+
24
+ <!-- ANSWER: B -->
25
+ <!-- EXPLANATION: LEFT JOIN returns all rows from the left table. Where there's no match in the right table, right-side columns are NULL. INNER JOIN excludes such rows. -->
26
+
27
+ ## Question 3
28
+
29
+ When do you use HAVING instead of WHERE?
30
+
31
+ A) HAVING is for strings, WHERE is for numbers
32
+ B) HAVING filters after aggregation; WHERE filters before
33
+ C) HAVING is for JOINs, WHERE is for single tables
34
+ D) They are interchangeable
35
+
36
+ <!-- ANSWER: B -->
37
+ <!-- EXPLANATION: WHERE filters rows before GROUP BY. HAVING filters groups after aggregation. You use HAVING when the condition involves an aggregate (e.g., SUM(amount) > 100). -->
38
+
39
+ ## Question 4
40
+
41
+ What does 2NF (Second Normal Form) require?
42
+
43
+ A) No duplicate rows
44
+ B) No partial dependencies — all non-key attributes depend on the whole primary key
45
+ C) No more than 2 columns per table
46
+ D) All tables must have a foreign key
47
+
48
+ <!-- ANSWER: B -->
49
+ <!-- EXPLANATION: 2NF builds on 1NF (atomic values) and requires that no non-key attribute depends on only part of a composite primary key. This eliminates partial dependencies. -->
50
+
51
+ ## Question 5
52
+
53
+ Which query finds users who have placed no orders? (users.id, orders.user_id)
54
+
55
+ A) SELECT * FROM users INNER JOIN orders ON users.id = orders.user_id
56
+ B) SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE orders.id IS NULL
57
+ C) SELECT * FROM users WHERE orders.user_id IS NULL
58
+ D) SELECT * FROM users RIGHT JOIN orders ON users.id = orders.user_id
59
+
60
+ <!-- ANSWER: B -->
61
+ <!-- EXPLANATION: LEFT JOIN keeps all users. Where there's no order, orders columns are NULL. WHERE orders.id IS NULL filters to users with no matching order. -->
62
+
63
+ ## Question 6
64
+
65
+ What is the purpose of an index?
66
+
67
+ A) To store backup data
68
+ B) To speed up queries on indexed columns
69
+ C) To enforce unique values
70
+ D) To reduce storage
71
+
72
+ <!-- ANSWER: B -->
73
+ <!-- EXPLANATION: Indexes create a data structure (e.g., B-tree) that speeds up lookups, WHERE, JOIN, and ORDER BY on indexed columns. They trade write speed and storage for read speed. -->
74
+
75
+ ## Question 7
76
+
77
+ <!-- VISUAL: drag-order -->
78
+
79
+ Put these SQL clause phases in the order they are logically evaluated during query execution:
80
+
81
+ A) ORDER BY
82
+ B) WHERE
83
+ C) FROM
84
+ D) GROUP BY / HAVING
85
+
86
+ <!-- ANSWER: C,B,D,A -->
87
+ <!-- EXPLANATION: SQL evaluates FROM first (identify tables), then WHERE (filter rows), then GROUP BY/HAVING (aggregation), then ORDER BY (sort results). SELECT projects columns throughout but the logical order of row processing is FROM → WHERE → GROUP BY → ORDER BY. -->
88
+
89
+ ## Question 8
90
+
91
+ <!-- VISUAL: fill-blank -->
92
+
93
+ Complete the query to find customers who have ordered more than 5 times:
94
+
95
+ ```sql
96
+ SELECT customer_id, COUNT(*) AS order_count
97
+ FROM orders
98
+ GROUP BY customer_id
99
+ ___0___ COUNT(*) > 5;
100
+ ```
101
+
102
+ <!-- ANSWER: HAVING -->
103
+ <!-- EXPLANATION: HAVING filters after aggregation. WHERE cannot use aggregate functions like COUNT(*). HAVING applies to grouped rows, so HAVING COUNT(*) > 5 correctly filters to customers with more than 5 orders. -->
@@ -0,0 +1,42 @@
1
+ # SQL — Resources
2
+
3
+ ## Videos
4
+
5
+ - [SQL in 100 Seconds](https://www.youtube.com/watch?v=zsjvFFKOm3c) — Fireship. Quick overview.
6
+ - [SQL Tutorial](https://www.youtube.com/watch?v=HXV3zeQKqGY) — freeCodeCamp. Full beginner course.
7
+ - [SQL Joins Explained](https://www.youtube.com/watch?v=9yeOJ0ZMUYw) — Web Dev Simplified. Visual join explanations.
8
+
9
+ ## Articles and Readings
10
+
11
+ - [SQLBolt](https://sqlbolt.com) — Interactive SQL tutorials. Start here.
12
+ - [PostgreSQL Tutorial](https://www.postgresqltutorial.com/) — PostgreSQL-specific guide.
13
+ - [Use The Index, Luke](https://use-the-index-luke.com/) — SQL indexing deep dive.
14
+
15
+ ## Books
16
+
17
+ - **SQL in 10 Minutes** by Ben Forta — Quick reference and practice.
18
+ - **Learning SQL** by Alan Beaulieu — Comprehensive introduction.
19
+
20
+ ## Tools and Playgrounds
21
+
22
+ - [SQL Fiddle](http://sqlfiddle.com) — Run SQL in the browser.
23
+ - [DB Fiddle](https://www.db-fiddle.com/) — PostgreSQL, MySQL, SQLite.
24
+ - [PostgreSQL](https://www.postgresql.org/) — Open-source relational database.
25
+
26
+ ## Podcasts
27
+
28
+ - [Software Engineering Daily — Database Episodes](https://softwareengineeringdaily.com/category/all-episodes/exclusive-content/databases/) — Technical deep dives on SQL, PostgreSQL, indexing.
29
+ - [Postgres.fm](https://postgres.fm/) — Weekly PostgreSQL podcast covering SQL performance, extensions, and best practices.
30
+
31
+ ## Interactive and Visual
32
+
33
+ - [SQLBolt](https://sqlbolt.com/) — Step-by-step interactive SQL lessons in the browser.
34
+ - [SQL Murder Mystery](https://mystery.knightlab.com/) — Solve a murder mystery using SQL queries — gamified learning.
35
+ - [VisuAlgo — Databases](https://visualgo.net/) — Animated visualizations of B-trees, hashing, and indexing algorithms.
36
+ - [Explain.dalibo.com](https://explain.dalibo.com/) — Visual PostgreSQL EXPLAIN ANALYZE visualizer — paste a plan and see it as a tree.
37
+
38
+ ## Courses
39
+
40
+ - [Stanford — Databases (free)](https://online.stanford.edu/courses/soe-ydatabases0005-databases-relational-databases-and-sql) — Jennifer Widom's foundational SQL and relational database course.
41
+ - [freeCodeCamp — SQL and Databases](https://www.freecodecamp.org/learn/relational-database/) — Free interactive curriculum with PostgreSQL projects.
42
+ - [Mode Analytics — SQL Tutorial (free)](https://mode.com/sql-tutorial/) — Practical SQL for analysis with real datasets.
@@ -0,0 +1,92 @@
1
+ # SQL Walkthrough — Learn by Doing
2
+
3
+ ## Step 1: Your First Query
4
+
5
+ Assume a `users` table with `id`, `name`, `email`, `created_at`. Write a query to fetch all users.
6
+
7
+ <!-- hint:terminal -->
8
+ <!-- hint:code language="sql" highlight="1,2" -->
9
+
10
+ **Embed:** https://www.db-fiddle.com/
11
+
12
+ **Task:** Write `SELECT * FROM users`. Then write a query that returns only `name` and `email`.
13
+
14
+ **Question:** When would you use `SELECT *` vs listing specific columns? What are the tradeoffs?
15
+
16
+ **Checkpoint:** The user can write basic SELECT and understands column selection.
17
+
18
+ ---
19
+
20
+ ## Step 2: Filtering with WHERE
21
+
22
+ <!-- hint:terminal -->
23
+
24
+ **Task:** Write queries to:
25
+ - Find users created after 2024-01-01
26
+ - Find users whose email contains "@gmail.com"
27
+ - Find users with a non-null phone number
28
+
29
+ **Question:** What's the difference between `=` and `LIKE`? When would you use `IN` vs multiple `OR` conditions?
30
+
31
+ **Checkpoint:** The user can use WHERE with various operators.
32
+
33
+ ---
34
+
35
+ ## Step 3: INNER JOIN
36
+
37
+ Assume `orders` (id, user_id, amount) and `users` (id, name). Fetch all orders with the user's name.
38
+
39
+ <!-- hint:diagram mermaid-type="flowchart" topic="INNER JOIN vs LEFT JOIN — matching rows only vs all left rows" -->
40
+
41
+ **Task:** Write an INNER JOIN that returns `order_id`, `amount`, `user_name`.
42
+
43
+ **Question:** What happens to orders that have a `user_id` pointing to a deleted user? Would they appear? What about users with no orders?
44
+
45
+ **Checkpoint:** The user understands INNER JOIN returns only matching rows.
46
+
47
+ ---
48
+
49
+ ## Step 4: LEFT JOIN
50
+
51
+ <!-- hint:code language="sql" highlight="1,5" -->
52
+
53
+ **Task:** Write a query that lists **all** users and their order count (0 if none). Use LEFT JOIN and COUNT.
54
+
55
+ **Question:** Why does a LEFT JOIN from users to orders give us users with zero orders, while INNER JOIN would not?
56
+
57
+ **Checkpoint:** The user can use LEFT JOIN and understands NULL for non-matching right rows.
58
+
59
+ ---
60
+
61
+ ## Step 5: GROUP BY and Aggregation
62
+
63
+ **Task:** Write queries to:
64
+ - Count orders per user
65
+ - Sum order amount per user
66
+ - Find users whose total order amount exceeds 500 (use HAVING)
67
+
68
+ **Question:** What's the difference between WHERE and HAVING? Can you use aggregate functions in WHERE?
69
+
70
+ **Checkpoint:** The user understands GROUP BY and HAVING.
71
+
72
+ ---
73
+
74
+ ## Step 6: Subqueries
75
+
76
+ **Task:** Find all users who have placed at least one order over 100. Use a subquery with IN.
77
+
78
+ **Question:** Could you write this with a JOIN instead? When is a subquery clearer vs when is a JOIN better?
79
+
80
+ **Checkpoint:** The user can write an IN subquery and compare it to JOINs.
81
+
82
+ ---
83
+
84
+ ## Step 7: Schema Design
85
+
86
+ <!-- hint:celebrate -->
87
+
88
+ **Task:** Design tables for a simple blog: authors, posts, comments. Identify primary keys and foreign keys. Sketch the relationships.
89
+
90
+ **Question:** How do you decide when to normalize (split tables) vs denormalize (keep redundant data)? What problem does normalization solve?
91
+
92
+ **Checkpoint:** The user can design a minimal normalized schema with PKs and FKs.
@@ -0,0 +1,109 @@
1
+ # SQL Fundamentals — Interactive Workshop Scenarios
2
+ # Uses SQLite. Setup creates DB files; student writes queries in queries.sql.
3
+
4
+ scenarios:
5
+ - id: basic-select
6
+ title: "SELECT with WHERE"
7
+ difficulty: beginner
8
+ xp: 20
9
+ setup:
10
+ - "mkdir -p basic-select && cd basic-select"
11
+ - "sqlite3 workshop.db \"CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT, role TEXT); INSERT INTO users VALUES (1, 'Alice', 'alice@example.com', 'admin'); INSERT INTO users VALUES (2, 'Bob', 'bob@example.com', 'user'); INSERT INTO users VALUES (3, 'Carol', 'carol@example.com', 'user'); INSERT INTO users VALUES (4, 'Dave', 'dave@example.com', 'guest'); INSERT INTO users VALUES (5, 'Eve', 'eve@example.com', 'admin');\""
12
+ files:
13
+ - name: queries.sql
14
+ content: |
15
+ -- Write a SELECT query that returns users with role = 'admin'
16
+ -- Run with: sqlite3 workshop.db < queries.sql
17
+ language: sql
18
+ readonly: false
19
+ task: "Write a SELECT query that returns only users whose role is 'admin'. Run it with sqlite3 workshop.db < queries.sql. You should see Alice and Eve."
20
+ validations:
21
+ - label: "Query returns admin users"
22
+ check: output-contains
23
+ pattern: "Alice|Eve"
24
+ hints:
25
+ - "Use SELECT * FROM users WHERE role = 'admin';"
26
+ - "Remember the semicolon at the end of your query."
27
+ - "You can also SELECT specific columns: SELECT name, email FROM users WHERE role = 'admin';"
28
+ agent_prompts:
29
+ on_start: "You have five users. How would you pick only those with role 'admin'? What part of SQL filters rows?"
30
+
31
+ - id: joins
32
+ title: "JOIN Queries"
33
+ difficulty: beginner
34
+ xp: 25
35
+ setup:
36
+ - "mkdir -p joins && cd joins"
37
+ - "sqlite3 workshop.db \"CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, product TEXT, amount REAL); INSERT INTO users VALUES (1, 'Alice'); INSERT INTO users VALUES (2, 'Bob'); INSERT INTO users VALUES (3, 'Carol'); INSERT INTO orders VALUES (1, 1, 'Widget', 29.99); INSERT INTO orders VALUES (2, 1, 'Gadget', 49.99); INSERT INTO orders VALUES (3, 2, 'Widget', 29.99); INSERT INTO orders VALUES (4, 3, 'Thing', 19.99);\""
38
+ files:
39
+ - name: queries.sql
40
+ content: |
41
+ -- Write a JOIN query to show each order with the customer's name
42
+ -- Run with: sqlite3 workshop.db < queries.sql
43
+ language: sql
44
+ readonly: false
45
+ task: "Write an INNER JOIN query that returns each order's id, product, amount, and the user's name. The orders table has user_id linking to users.id. Run with sqlite3 workshop.db < queries.sql."
46
+ validations:
47
+ - label: "JOIN returns order and user data"
48
+ check: output-contains
49
+ pattern: "Alice|Bob|Carol"
50
+ hints:
51
+ - "INNER JOIN connects rows from two tables: SELECT orders.id, orders.product, orders.amount, users.name FROM orders JOIN users ON orders.user_id = users.id;"
52
+ - "Alias tables for brevity: FROM orders o JOIN users u ON o.user_id = u.id"
53
+ - "You should see 4 rows — one per order, each with a customer name."
54
+ agent_prompts:
55
+ on_start: "Orders have user_id but not the user's name. How can you combine data from two tables in one query?"
56
+
57
+ - id: group-by
58
+ title: "GROUP BY and Aggregation"
59
+ difficulty: intermediate
60
+ xp: 30
61
+ setup:
62
+ - "mkdir -p group-by && cd group-by"
63
+ - "sqlite3 workshop.db \"CREATE TABLE sales (id INTEGER PRIMARY KEY, region TEXT, product TEXT, amount REAL); INSERT INTO sales VALUES (1, 'North', 'A', 100); INSERT INTO sales VALUES (2, 'North', 'A', 150); INSERT INTO sales VALUES (3, 'North', 'B', 80); INSERT INTO sales VALUES (4, 'South', 'A', 120); INSERT INTO sales VALUES (5, 'South', 'B', 90); INSERT INTO sales VALUES (6, 'South', 'B', 110);\""
64
+ files:
65
+ - name: queries.sql
66
+ content: |
67
+ -- Write a query that groups by region and product, sums amount,
68
+ -- and only includes groups where the sum is >= 200
69
+ -- Run with: sqlite3 workshop.db < queries.sql
70
+ language: sql
71
+ readonly: false
72
+ task: "Write a GROUP BY query that shows total sales amount per region and product. Add a HAVING clause to show only groups where the total is 200 or more. Run with sqlite3 workshop.db < queries.sql."
73
+ validations:
74
+ - label: "GROUP BY with HAVING returns aggregated results"
75
+ check: output-contains
76
+ pattern: "North|250|South"
77
+ hints:
78
+ - "GROUP BY region, product with SUM(amount)."
79
+ - "HAVING filters after aggregation: HAVING SUM(amount) >= 200"
80
+ - "North,A = 250; South,B = 200. Both should appear."
81
+ agent_prompts:
82
+ on_start: "You want totals per region and product. What does GROUP BY do? And when would you use HAVING instead of WHERE?"
83
+
84
+ - id: subqueries
85
+ title: "Correlated Subqueries"
86
+ difficulty: intermediate
87
+ xp: 35
88
+ setup:
89
+ - "mkdir -p subqueries && cd subqueries"
90
+ - "sqlite3 workshop.db \"CREATE TABLE categories (id INTEGER PRIMARY KEY, name TEXT); CREATE TABLE products (id INTEGER PRIMARY KEY, category_id INTEGER, name TEXT, price REAL); INSERT INTO categories VALUES (1, 'Electronics'); INSERT INTO categories VALUES (2, 'Books'); INSERT INTO products VALUES (1, 1, 'Laptop', 999); INSERT INTO products VALUES (2, 1, 'Phone', 599); INSERT INTO products VALUES (3, 2, 'SQL Book', 39); INSERT INTO products VALUES (4, 2, 'React Book', 49);\""
91
+ files:
92
+ - name: queries.sql
93
+ content: |
94
+ -- Write a correlated subquery to find products priced above
95
+ -- their category's average
96
+ -- Run with: sqlite3 workshop.db < queries.sql
97
+ language: sql
98
+ readonly: false
99
+ task: "Write a correlated subquery that returns products whose price is above the average price for their category. Electronics avg = 799; Books avg = 44. You should get Laptop (999) and React Book (49). Run with sqlite3 workshop.db < queries.sql."
100
+ validations:
101
+ - label: "Correlated subquery returns correct products"
102
+ check: output-contains
103
+ pattern: "Laptop|React"
104
+ hints:
105
+ - "A correlated subquery references the outer query: WHERE price > (SELECT AVG(price) FROM products p2 WHERE p2.category_id = products.category_id)"
106
+ - "The subquery runs once per row in the outer query."
107
+ - "Laptop (999) > 799; React Book (49) > 44. Both qualify."
108
+ agent_prompts:
109
+ on_start: "How would you find the average price per category? Now, how would you compare each product's price to that average?"
@@ -0,0 +1,186 @@
1
+ # Stakeholder Communication — Status Updates That Actually Help
2
+
3
+ <!-- hint:slides topic="Stakeholder communication: audience mapping, pyramid principle, RAG status, power-interest grid, and update templates" slides="5" -->
4
+
5
+ ## Know Your Audience
6
+
7
+ Different stakeholders want different information:
8
+
9
+ | Audience | Cares Most About |
10
+ |----------|------------------|
11
+ | **Executives** | Outcomes, timeline, risks, decisions needed |
12
+ | **Engineers** | Technical blockers, dependencies, scope |
13
+ | **Product** | Scope, priorities, trade-offs |
14
+ | **Customers** | When, what's new, what's fixed |
15
+
16
+ Tailor your update to who's reading. An exec doesn't need Jira ticket IDs; an engineer might. One update can have sections for different audiences, or you send different versions.
17
+
18
+ ## The Pyramid Principle
19
+
20
+ **Lead with the conclusion.** Put the most important point first, then support it.
21
+
22
+ **Weak:** "We ran tests. We found some issues. We're fixing them. We might slip by a week."
23
+
24
+ **Strong:** "We're at risk of slipping the release by one week due to integration test failures. We've identified 3 blockers and are addressing them; next update in 48 hours."
25
+
26
+ Executives and busy stakeholders skim. If they read only the first line, they should get the takeaway.
27
+
28
+ ## RAG Status (Red / Amber / Green)
29
+
30
+ | Status | Meaning |
31
+ |--------|---------|
32
+ | **Green** | On track. No major issues. |
33
+ | **Amber** | At risk. Issues exist; we're working on them. Needs attention. |
34
+ | **Red** | Off track. Significant problem. Intervention may be needed. |
35
+
36
+ Use RAG consistently. If everything is always green, you lose credibility. If everything is red, you create alarm fatigue. Amber is your workhorse—"we're managing it."
37
+
38
+ ## Effective Status Update Structure
39
+
40
+ A good status update answers four questions:
41
+
42
+ 1. **What happened?** — Completed, shipped, decided.
43
+ 2. **What's next?** — Planned for this period.
44
+ 3. **Blockers** — What's in the way?
45
+ 4. **Risks** — What might go wrong? (and what we're doing about it)
46
+
47
+ Template:
48
+
49
+ ```markdown
50
+ ## Status — [Project/Release] | [Date]
51
+ **RAG:** [G/A/R]
52
+
53
+ ### What happened
54
+ - [Completed item 1]
55
+ - [Completed item 2]
56
+
57
+ ### What's next
58
+ - [Planned item 1]
59
+ - [Planned item 2]
60
+
61
+ ### Blockers
62
+ - [Blocker + owner/ETA]
63
+
64
+ ### Risks
65
+ - [Risk + mitigation]
66
+ ```
67
+
68
+ ## Communicating Bad News Early
69
+
70
+ Bad news does not improve with age. Surface delays, risks, and problems as soon as you have reasonable certainty. Early = more options. Late = fewer options and damaged trust.
71
+
72
+ **How to deliver bad news:**
73
+ 1. State the fact clearly: "We're slipping the launch by 2 weeks."
74
+ 2. Explain why: "Integration with the payment gateway took longer than estimated."
75
+ 3. What you're doing: "We've parallelized the remaining work and added a second developer."
76
+ 4. What you need: "We need a go/no-go on scope by Friday."
77
+
78
+ Don't bury it. Don't wait for the "perfect" moment. Communicate early.
79
+
80
+ ## Managing Expectations
81
+
82
+ - **Under-promise, over-deliver** — Better to surprise with early delivery than late.
83
+ - **Set checkpoints** — "We'll know by Wednesday whether we're on track."
84
+ - **Be explicit about assumptions** — "This assumes no further API changes from the vendor."
85
+ - **Call out dependencies** — "We're blocked until Legal approves the contract."
86
+
87
+ When stakeholders have clear expectations, they're less likely to be surprised or frustrated.
88
+
89
+ ## Stakeholder Mapping (Power / Interest Grid)
90
+
91
+ ```mermaid
92
+ quadrantChart
93
+ title Stakeholder Power-Interest Grid
94
+ x-axis Low Interest --> High Interest
95
+ y-axis Low Power --> High Power
96
+ quadrant-1 Manage closely
97
+ quadrant-2 Keep informed
98
+ quadrant-3 Monitor
99
+ quadrant-4 Keep satisfied
100
+ "Executive Sponsor": [0.9, 0.9]
101
+ "Engineering Lead": [0.8, 0.7]
102
+ "End Users": [0.6, 0.3]
103
+ "Legal": [0.2, 0.5]
104
+ ```
105
+
106
+ | | Low Interest | High Interest |
107
+ |---|--------------|---------------|
108
+ | **High Power** | Keep satisfied | Manage closely |
109
+ | **Low Power** | Monitor | Keep informed |
110
+
111
+ - **Manage closely** — Regular, rich updates. Involve in decisions.
112
+ - **Keep informed** — Periodic updates. Don't overwhelm.
113
+ - **Keep satisfied** — Don't annoy; ensure no unpleasant surprises.
114
+ - **Monitor** — Light touch. Watch for changes.
115
+
116
+ ## Meeting Cadence
117
+
118
+ | Stakeholder Type | Cadence | Format |
119
+ |------------------|---------|--------|
120
+ | Core team | Daily / every other day | Standup, Slack |
121
+ | Product / Eng leads | Weekly | Written + sync |
122
+ | Executives | Bi-weekly / monthly | Written (pyramid); optional 15-min call |
123
+ | Customers | Milestone-based | Release notes, blog, email |
124
+
125
+ Match cadence to need. More frequent = more overhead. Less frequent = more surprise risk.
126
+
127
+ ## Written vs Verbal
128
+
129
+ | Written | Verbal |
130
+ |---------|--------|
131
+ | Asynchronous, scalable | Real-time, interactive |
132
+ | Permanent record | Nuance, Q&A |
133
+ | Good for: status, decisions, specs | Good for: alignment, sensitive topics, complex trade-offs |
134
+
135
+ For status: **written first**. Follow up with a call for anything sensitive or contentious. Written updates create a paper trail and let people read when ready.
136
+
137
+ ## Avoiding Information Overload
138
+
139
+ - **One page max** for exec summaries.
140
+ - **Bullet points** over paragraphs.
141
+ - **RAG + key points** — Let them drill down if interested.
142
+ - **Link to details** — Don't put everything in the email.
143
+ - **Consistent format** — Same structure every time so people know where to look.
144
+
145
+ ## Status Update Template (Full)
146
+
147
+ ```markdown
148
+ # [Project] — Status | [Week of DATE]
149
+ **RAG:** [G/A/R] | **Next milestone:** [Date]
150
+
151
+ ## TL;DR
152
+ [One sentence: on track / at risk / off track + why]
153
+
154
+ ## Completed
155
+ - [Item 1]
156
+ - [Item 2]
157
+
158
+ ## In Progress
159
+ - [Item + owner]
160
+ - [Item + owner]
161
+
162
+ ## Next
163
+ - [Item 1]
164
+ - [Item 2]
165
+
166
+ ## Blockers
167
+ - [Blocker] — Owner: [Name] — ETA: [Date]
168
+
169
+ ## Risks
170
+ - [Risk] — Mitigation: [What we're doing]
171
+
172
+ ## Decisions needed
173
+ - [Decision] — By: [Date]
174
+ ```
175
+
176
+ ## Communicating Delays
177
+
178
+ When you need to announce a slip:
179
+
180
+ 1. **Lead with it** — "Release delayed by 2 weeks. New date: March 28."
181
+ 2. **Cause** — "Integration testing revealed issues we're fixing."
182
+ 3. **Impact** — "Q1 target unchanged; we're compressing the next phase."
183
+ 4. **Plan** — "Added QA capacity; daily standup with vendor."
184
+ 5. **Ask** — "Need approval to descope analytics from this release."
185
+
186
+ Clear, direct, with a path forward.
@@ -0,0 +1,87 @@
1
+ # Stakeholder Communication — Exercises
2
+
3
+ ## Exercise 1: Pyramid Principle Rewrite
4
+
5
+ **Task:** Take this status: "We've been working on the integration. There were some issues. We're fixing them. We might be a week late." Rewrite it using the pyramid principle. Lead with the conclusion. Max 3 sentences.
6
+
7
+ **Validation:**
8
+ - [ ] First sentence is the takeaway (delay + cause or implication)
9
+ - [ ] Supporting detail follows
10
+ - [ ] Total ≤ 3 sentences
11
+ - [ ] Reader gets the point from line 1
12
+
13
+ **Hints:**
14
+ 1. Lead: "We're at risk of slipping by one week due to integration issues."
15
+ 2. Support: "We've identified and are addressing 3 blockers."
16
+ 3. Optional: "Next update in 48 hours."
17
+
18
+ ---
19
+
20
+ ## Exercise 2: RAG Assignment
21
+
22
+ **Task:** Assign RAG to these: (A) On track, demo next week. (B) Key vendor delayed; we have a fallback. (C) Major bug in prod; fix in progress. (D) Scope increased 30%; no timeline change. For each, write one sentence you'd include in a status.
23
+
24
+ **Validation:**
25
+ - [ ] A = Green, B = Amber, C = Red or Amber, D = Amber or Red
26
+ - [ ] Each has a status-appropriate sentence
27
+ - [ ] No alarmist language for B; no understatement for C
28
+
29
+ **Hints:**
30
+ 1. A: Green—"On track for demo next week."
31
+ 2. B: Amber—"Vendor delay; fallback plan in place; monitoring."
32
+ 3. C: Red or Amber—"Critical bug; fix deployed in 4h; root cause analysis underway."
33
+ 4. D: Amber—"Scope +30%; reviewing timeline and resources."
34
+
35
+ ---
36
+
37
+ ## Exercise 3: Stakeholder Map
38
+
39
+ **Task:** For a "password reset" feature: list 4 stakeholders (e.g., Exec, Eng Lead, Support, Security). Plot on power/interest. For the highest-power, highest-interest one: what do they need in a status update?
40
+
41
+ **Validation:**
42
+ - [ ] 4 stakeholders named
43
+ - [ ] Plotted on grid
44
+ - [ ] "Manage closely" needs described
45
+ - [ ] Needs are specific (not "they need updates")
46
+
47
+ **Hints:**
48
+ 1. Exec: outcomes, timeline, risks, decisions
49
+ 2. Eng Lead: technical blockers, dependencies
50
+ 3. Support: when it ships, what changes for users
51
+ 4. Security: compliance, audit trail
52
+
53
+ ---
54
+
55
+ ## Exercise 4: Delay Communication
56
+
57
+ **Task:** Your "Search v2" release is slipping 2 weeks. Cause: performance issues under load. Write a 5-sentence message to the Product VP. Include: delay, cause, impact, plan, ask.
58
+
59
+ **Validation:**
60
+ - [ ] Delay and new date stated up front
61
+ - [ ] Cause is clear
62
+ - [ ] Impact (what it means) stated
63
+ - [ ] Plan (what you're doing) included
64
+ - [ ] Ask or next step present
65
+
66
+ **Hints:**
67
+ 1. "Search v2 delayed 2 weeks. New target: [date]."
68
+ 2. "Cause: performance issues under load in testing."
69
+ 3. "Impact: Q2 demo still feasible; later phases unchanged."
70
+ 4. "Plan: perf sprint this week; load tests in CI."
71
+ 5. "Ask: Confirm scope for v2 by Friday."
72
+
73
+ ---
74
+
75
+ ## Exercise 5: Two-Version Status
76
+
77
+ **Task:** Write one status for a "Payment integration" project. Create (1) Exec summary: 4 bullets, pyramid. (2) Eng Lead version: same content + technical blockers, dependencies, and decisions needed.
78
+
79
+ **Validation:**
80
+ - [ ] Exec: ≤ 4 bullets, outcome-focused
81
+ - [ ] Eng: includes technical detail
82
+ - [ ] Both share the same RAG and core facts
83
+ - [ ] Eng version is longer but still scannable
84
+
85
+ **Hints:**
86
+ 1. Exec: RAG, TL;DR, key milestone, top risk
87
+ 2. Eng: + Stripe API version, test env blocker, auth handoff decision