@k2works/claude-code-booster 3.5.0 → 3.6.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 (712) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +42 -42
  3. package/bin/claude-code-booster +90 -90
  4. package/lib/assets/.claude/README.md +239 -239
  5. package/lib/assets/.claude/scripts/generate-inception-deck.mjs +911 -911
  6. package/lib/assets/.claude/settings.json +11 -11
  7. package/lib/assets/.claude/skills/ai-agent-guidelines/SKILL.md +111 -111
  8. package/lib/assets/.claude/skills/analyzing-architecture/SKILL.md +83 -83
  9. package/lib/assets/.claude/skills/analyzing-business/SKILL.md +95 -95
  10. package/lib/assets/.claude/skills/analyzing-data-model/SKILL.md +77 -77
  11. package/lib/assets/.claude/skills/analyzing-domain-model/SKILL.md +117 -88
  12. package/lib/assets/.claude/skills/analyzing-inception-deck/SKILL.md +84 -84
  13. package/lib/assets/.claude/skills/analyzing-non-functional/SKILL.md +95 -95
  14. package/lib/assets/.claude/skills/analyzing-operation/SKILL.md +95 -95
  15. package/lib/assets/.claude/skills/analyzing-requirements/SKILL.md +91 -91
  16. package/lib/assets/.claude/skills/analyzing-tech-stack/SKILL.md +101 -101
  17. package/lib/assets/.claude/skills/analyzing-test-strategy/SKILL.md +89 -89
  18. package/lib/assets/.claude/skills/analyzing-ui-design/SKILL.md +80 -80
  19. package/lib/assets/.claude/skills/analyzing-usecases/SKILL.md +72 -72
  20. package/lib/assets/.claude/skills/creating-adr/SKILL.md +113 -113
  21. package/lib/assets/.claude/skills/developing-backend/SKILL.md +100 -100
  22. package/lib/assets/.claude/skills/developing-frontend/SKILL.md +93 -93
  23. package/lib/assets/.claude/skills/developing-release/SKILL.md +120 -120
  24. package/lib/assets/.claude/skills/generating-slides/SKILL.md +94 -94
  25. package/lib/assets/.claude/skills/git-commit/SKILL.md +81 -81
  26. package/lib/assets/.claude/skills/killing-processes/SKILL.md +44 -44
  27. package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -59
  28. package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -54
  29. package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -67
  30. package/lib/assets/.claude/skills/operating-docs/SKILL.md +219 -219
  31. package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -77
  32. package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -63
  33. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +104 -104
  34. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +162 -161
  35. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +158 -158
  36. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +144 -144
  37. package/lib/assets/.claude/skills/planning-releases/SKILL.md +119 -119
  38. package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +151 -151
  39. package/lib/assets/.claude/skills/tracking-progress/SKILL.md +91 -91
  40. package/lib/assets/.claude/skills/validating-iteration-plan/SKILL.md +215 -215
  41. package/lib/assets/.devcontainer/devcontainer.json +34 -34
  42. package/lib/assets/.env.example +17 -17
  43. package/lib/assets/.gitattributes +4 -4
  44. package/lib/assets/.github/workflows/docker-publish.yml +77 -77
  45. package/lib/assets/.github/workflows/mkdocs.yml +39 -39
  46. package/lib/assets/AGENTS.md +94 -94
  47. package/lib/assets/CLAUDE.md +183 -183
  48. package/lib/assets/README.md +254 -254
  49. package/lib/assets/docker-compose.yml +33 -33
  50. package/lib/assets/docs/adr/index.md +10 -10
  51. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +475 -475
  52. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +519 -519
  53. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +537 -537
  54. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +300 -300
  55. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +320 -320
  56. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +498 -498
  57. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +298 -298
  58. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +291 -291
  59. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +336 -336
  60. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +303 -303
  61. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +286 -286
  62. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +322 -322
  63. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +319 -319
  64. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +365 -365
  65. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +156 -156
  66. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +178 -178
  67. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +312 -312
  68. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +287 -287
  69. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +286 -286
  70. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +274 -274
  71. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +294 -294
  72. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +337 -337
  73. package/lib/assets/docs/article/functional-desgin-ppp/all/index.md +388 -388
  74. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +273 -273
  75. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +380 -380
  76. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +384 -384
  77. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +350 -350
  78. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +352 -352
  79. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +383 -383
  80. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +529 -529
  81. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +395 -395
  82. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +399 -399
  83. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +485 -485
  84. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +566 -566
  85. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +567 -567
  86. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +475 -475
  87. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +462 -462
  88. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +325 -325
  89. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +401 -401
  90. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +450 -450
  91. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +475 -475
  92. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +739 -739
  93. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +567 -567
  94. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +518 -518
  95. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +532 -532
  96. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +241 -241
  97. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +383 -383
  98. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +374 -374
  99. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +375 -375
  100. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +195 -195
  101. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +268 -268
  102. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +294 -294
  103. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +164 -164
  104. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +168 -168
  105. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +254 -254
  106. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +269 -269
  107. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +148 -148
  108. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +176 -176
  109. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +604 -604
  110. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +729 -729
  111. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +291 -291
  112. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +420 -420
  113. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +319 -319
  114. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +466 -466
  115. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +523 -523
  116. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +287 -287
  117. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +340 -340
  118. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +395 -395
  119. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +248 -248
  120. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +384 -384
  121. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +452 -452
  122. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +495 -495
  123. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +416 -416
  124. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +382 -382
  125. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +687 -687
  126. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +442 -442
  127. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +479 -479
  128. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +479 -479
  129. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +427 -427
  130. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +428 -428
  131. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +339 -339
  132. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +309 -309
  133. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +596 -596
  134. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +355 -355
  135. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +350 -350
  136. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +414 -414
  137. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +367 -367
  138. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +403 -403
  139. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +291 -291
  140. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +324 -324
  141. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +332 -332
  142. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +274 -274
  143. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +298 -298
  144. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +304 -304
  145. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +362 -362
  146. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +257 -257
  147. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +254 -254
  148. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +283 -283
  149. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +395 -395
  150. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +319 -319
  151. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +382 -382
  152. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +287 -287
  153. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +303 -303
  154. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +326 -326
  155. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +332 -332
  156. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +379 -379
  157. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +177 -177
  158. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +219 -219
  159. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +244 -244
  160. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +363 -363
  161. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +438 -438
  162. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +325 -325
  163. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +403 -403
  164. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +469 -469
  165. package/lib/assets/docs/article/functional-desgin-ppp/haskell/index.md +174 -174
  166. package/lib/assets/docs/article/functional-desgin-ppp/index.md +90 -90
  167. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +450 -450
  168. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +463 -463
  169. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +425 -425
  170. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +273 -273
  171. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +247 -247
  172. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +841 -841
  173. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +384 -384
  174. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +383 -383
  175. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +339 -339
  176. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +331 -331
  177. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +356 -356
  178. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +379 -379
  179. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +361 -361
  180. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +392 -392
  181. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +300 -300
  182. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +297 -297
  183. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +304 -304
  184. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +315 -315
  185. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +311 -311
  186. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +304 -304
  187. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +336 -336
  188. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +349 -349
  189. package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +243 -243
  190. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +328 -328
  191. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +348 -348
  192. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +357 -357
  193. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +364 -364
  194. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +515 -515
  195. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +557 -557
  196. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +363 -363
  197. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +327 -327
  198. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +517 -517
  199. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +441 -441
  200. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +407 -407
  201. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +379 -379
  202. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +398 -398
  203. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +476 -476
  204. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +391 -391
  205. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +342 -342
  206. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +324 -324
  207. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +730 -730
  208. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +624 -624
  209. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +512 -512
  210. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +433 -433
  211. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +688 -688
  212. package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +243 -243
  213. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +166 -166
  214. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +162 -162
  215. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +135 -135
  216. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +88 -88
  217. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +299 -299
  218. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +241 -241
  219. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +131 -131
  220. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +130 -130
  221. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +127 -127
  222. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +114 -114
  223. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +138 -138
  224. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +161 -161
  225. package/lib/assets/docs/article/getting-start-tdd/clojure/index.md +65 -65
  226. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +232 -232
  227. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +244 -244
  228. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +202 -202
  229. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +92 -92
  230. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +256 -256
  231. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +195 -195
  232. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +214 -214
  233. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +249 -249
  234. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +174 -174
  235. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +166 -166
  236. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +192 -192
  237. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +211 -211
  238. package/lib/assets/docs/article/getting-start-tdd/csharp/index.md +83 -83
  239. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +87 -87
  240. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +95 -95
  241. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +109 -109
  242. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +96 -96
  243. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +88 -88
  244. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +71 -71
  245. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +110 -110
  246. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +108 -108
  247. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +104 -104
  248. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +178 -178
  249. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +142 -142
  250. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +145 -145
  251. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +35 -35
  252. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +202 -202
  253. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +246 -246
  254. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +218 -218
  255. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +179 -179
  256. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +267 -267
  257. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +190 -190
  258. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +161 -161
  259. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +175 -175
  260. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +222 -222
  261. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +189 -189
  262. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +212 -212
  263. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +215 -215
  264. package/lib/assets/docs/article/getting-start-tdd/fsharp/index.md +71 -71
  265. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +213 -213
  266. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +302 -302
  267. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +339 -339
  268. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +112 -112
  269. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +272 -272
  270. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +233 -233
  271. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +394 -394
  272. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +422 -422
  273. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +400 -400
  274. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +226 -226
  275. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +296 -296
  276. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +411 -411
  277. package/lib/assets/docs/article/getting-start-tdd/go/index.md +83 -83
  278. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +279 -279
  279. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +337 -337
  280. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +257 -257
  281. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +182 -182
  282. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +313 -313
  283. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +309 -309
  284. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +412 -412
  285. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +390 -390
  286. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +461 -461
  287. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +434 -434
  288. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +392 -392
  289. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +631 -631
  290. package/lib/assets/docs/article/getting-start-tdd/haskell/index.md +49 -49
  291. package/lib/assets/docs/article/getting-start-tdd/index.md +93 -93
  292. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +375 -375
  293. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +349 -349
  294. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +445 -445
  295. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +409 -409
  296. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +330 -330
  297. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +290 -290
  298. package/lib/assets/docs/article/getting-start-tdd/integration/index.md +69 -69
  299. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +234 -234
  300. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +261 -261
  301. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +185 -185
  302. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +115 -115
  303. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +382 -382
  304. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +272 -272
  305. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +626 -626
  306. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +393 -393
  307. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +310 -310
  308. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +188 -188
  309. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +167 -167
  310. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +205 -205
  311. package/lib/assets/docs/article/getting-start-tdd/java/index.md +61 -61
  312. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +244 -244
  313. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +262 -262
  314. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +169 -169
  315. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +112 -112
  316. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +314 -314
  317. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +235 -235
  318. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +327 -327
  319. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +322 -322
  320. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +285 -285
  321. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +199 -199
  322. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +207 -207
  323. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +295 -295
  324. package/lib/assets/docs/article/getting-start-tdd/node/index.md +56 -56
  325. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +259 -259
  326. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +200 -200
  327. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +248 -248
  328. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +141 -141
  329. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +410 -410
  330. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +321 -321
  331. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +372 -372
  332. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +453 -453
  333. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +460 -460
  334. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +182 -182
  335. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +266 -266
  336. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +308 -308
  337. package/lib/assets/docs/article/getting-start-tdd/php/index.md +84 -84
  338. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +201 -201
  339. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +247 -247
  340. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +199 -199
  341. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +87 -87
  342. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +274 -274
  343. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +190 -190
  344. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +208 -208
  345. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +172 -172
  346. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +130 -130
  347. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +122 -122
  348. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +116 -116
  349. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +126 -126
  350. package/lib/assets/docs/article/getting-start-tdd/python/index.md +55 -55
  351. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +231 -231
  352. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +238 -238
  353. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +228 -228
  354. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +112 -112
  355. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +287 -287
  356. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +248 -248
  357. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +279 -279
  358. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +329 -329
  359. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +196 -196
  360. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +175 -175
  361. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +237 -237
  362. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +398 -398
  363. package/lib/assets/docs/article/getting-start-tdd/ruby/index.md +83 -83
  364. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +211 -211
  365. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +264 -264
  366. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +233 -233
  367. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +92 -92
  368. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +212 -212
  369. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +164 -164
  370. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +142 -142
  371. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +145 -145
  372. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +110 -110
  373. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +94 -94
  374. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +105 -105
  375. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +112 -112
  376. package/lib/assets/docs/article/getting-start-tdd/rust/index.md +83 -83
  377. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +111 -111
  378. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +107 -107
  379. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +99 -99
  380. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +123 -123
  381. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +196 -196
  382. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +186 -186
  383. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +139 -139
  384. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +106 -106
  385. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +75 -75
  386. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +104 -104
  387. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +94 -94
  388. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +92 -92
  389. package/lib/assets/docs/article/getting-start-tdd/scala/index.md +65 -65
  390. package/lib/assets/docs/article/grokking-concurrency/all/index.md +404 -404
  391. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +554 -554
  392. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +469 -469
  393. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +520 -520
  394. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +420 -420
  395. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +510 -510
  396. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +435 -435
  397. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +465 -465
  398. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +377 -377
  399. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +116 -116
  400. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +108 -108
  401. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +101 -101
  402. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +122 -122
  403. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +123 -123
  404. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +118 -118
  405. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +89 -89
  406. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +100 -100
  407. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +120 -120
  408. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +101 -101
  409. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +97 -97
  410. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +123 -123
  411. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +101 -101
  412. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +112 -112
  413. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +99 -99
  414. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +61 -61
  415. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +84 -84
  416. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +92 -92
  417. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +65 -65
  418. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +80 -80
  419. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +103 -103
  420. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +94 -94
  421. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +110 -110
  422. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +104 -104
  423. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +93 -93
  424. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +121 -121
  425. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +107 -107
  426. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +248 -248
  427. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +96 -96
  428. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +96 -96
  429. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +91 -91
  430. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +106 -106
  431. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +99 -99
  432. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +95 -95
  433. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +111 -111
  434. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +118 -118
  435. package/lib/assets/docs/article/grokking-concurrency/index.md +66 -66
  436. package/lib/assets/docs/article/grokking-concurrency/java/index.md +102 -102
  437. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +308 -308
  438. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +334 -334
  439. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +221 -221
  440. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +213 -213
  441. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +112 -112
  442. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +69 -69
  443. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +101 -101
  444. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +101 -101
  445. package/lib/assets/docs/article/grokking-concurrency/python/index.md +313 -313
  446. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +239 -239
  447. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +418 -418
  448. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +227 -227
  449. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +299 -299
  450. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +315 -315
  451. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +297 -297
  452. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +314 -314
  453. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +360 -360
  454. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +270 -270
  455. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +108 -108
  456. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +120 -120
  457. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +126 -126
  458. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +175 -175
  459. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +158 -158
  460. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +94 -94
  461. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +133 -133
  462. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +155 -155
  463. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +69 -69
  464. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +78 -78
  465. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +112 -112
  466. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +93 -93
  467. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +110 -110
  468. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +119 -119
  469. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +83 -83
  470. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +131 -131
  471. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +129 -129
  472. package/lib/assets/docs/article/grokkingfp/all/index.md +368 -368
  473. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +530 -530
  474. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +923 -923
  475. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +1128 -1128
  476. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +1104 -1104
  477. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +1026 -1026
  478. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +785 -785
  479. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +871 -871
  480. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +972 -972
  481. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +926 -926
  482. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +870 -870
  483. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +715 -715
  484. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +626 -626
  485. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +712 -712
  486. package/lib/assets/docs/article/grokkingfp/clojure/index.md +276 -276
  487. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +667 -667
  488. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +643 -643
  489. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +620 -620
  490. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +697 -697
  491. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +751 -751
  492. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +721 -721
  493. package/lib/assets/docs/article/grokkingfp/csharp/index.md +246 -246
  494. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +811 -811
  495. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +971 -971
  496. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +981 -981
  497. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +949 -949
  498. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +947 -947
  499. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +739 -739
  500. package/lib/assets/docs/article/grokkingfp/elixir/index.md +203 -203
  501. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +712 -712
  502. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +838 -838
  503. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +985 -985
  504. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +974 -974
  505. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +1286 -1286
  506. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +1049 -1049
  507. package/lib/assets/docs/article/grokkingfp/fsharp/index.md +210 -210
  508. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +714 -714
  509. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +961 -961
  510. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +972 -972
  511. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +832 -832
  512. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +911 -911
  513. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +922 -922
  514. package/lib/assets/docs/article/grokkingfp/haskell/index.md +234 -234
  515. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +591 -591
  516. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +866 -866
  517. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +915 -915
  518. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +878 -878
  519. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +845 -845
  520. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +844 -844
  521. package/lib/assets/docs/article/grokkingfp/index.md +143 -143
  522. package/lib/assets/docs/article/grokkingfp/java/index.md +211 -211
  523. package/lib/assets/docs/article/grokkingfp/java/part-1.md +648 -648
  524. package/lib/assets/docs/article/grokkingfp/java/part-2.md +675 -675
  525. package/lib/assets/docs/article/grokkingfp/java/part-3.md +672 -672
  526. package/lib/assets/docs/article/grokkingfp/java/part-4.md +771 -771
  527. package/lib/assets/docs/article/grokkingfp/java/part-5.md +959 -959
  528. package/lib/assets/docs/article/grokkingfp/java/part-6.md +1328 -1328
  529. package/lib/assets/docs/article/grokkingfp/python/index.md +258 -258
  530. package/lib/assets/docs/article/grokkingfp/python/part-1.md +443 -443
  531. package/lib/assets/docs/article/grokkingfp/python/part-2.md +958 -958
  532. package/lib/assets/docs/article/grokkingfp/python/part-3.md +1004 -1004
  533. package/lib/assets/docs/article/grokkingfp/python/part-4.md +765 -765
  534. package/lib/assets/docs/article/grokkingfp/python/part-5.md +747 -747
  535. package/lib/assets/docs/article/grokkingfp/python/part-6.md +861 -861
  536. package/lib/assets/docs/article/grokkingfp/ruby/index.md +330 -330
  537. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +755 -755
  538. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +938 -938
  539. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +946 -946
  540. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +921 -921
  541. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +908 -908
  542. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +1412 -1412
  543. package/lib/assets/docs/article/grokkingfp/rust/index.md +242 -242
  544. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +634 -634
  545. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +1060 -1060
  546. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +994 -994
  547. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +573 -573
  548. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +705 -705
  549. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +508 -508
  550. package/lib/assets/docs/article/grokkingfp/scala/index.md +171 -171
  551. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +543 -543
  552. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +946 -946
  553. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +919 -919
  554. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +742 -742
  555. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +722 -722
  556. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +867 -867
  557. package/lib/assets/docs/article/grokkingfp/typescript/index.md +273 -273
  558. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +561 -561
  559. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +1129 -1129
  560. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +842 -842
  561. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +1087 -1087
  562. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +717 -717
  563. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +982 -982
  564. package/lib/assets/docs/article/practical-database-design/index.md +121 -121
  565. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +288 -288
  566. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +518 -518
  567. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +557 -557
  568. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +924 -924
  569. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +1627 -1627
  570. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +2716 -2716
  571. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +2082 -2082
  572. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +2105 -2105
  573. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +2031 -2031
  574. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +1387 -1387
  575. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +1677 -1677
  576. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +1417 -1417
  577. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +1434 -1434
  578. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +667 -667
  579. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +1625 -1625
  580. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +1915 -1915
  581. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +1708 -1708
  582. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +2095 -2095
  583. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +1123 -1123
  584. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +1031 -1031
  585. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +1382 -1382
  586. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +991 -991
  587. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +1300 -1300
  588. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +1166 -1166
  589. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +1584 -1584
  590. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +1183 -1183
  591. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +1016 -1016
  592. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +1753 -1753
  593. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +1447 -1447
  594. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +1878 -1878
  595. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +965 -965
  596. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +2069 -2069
  597. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +2439 -2439
  598. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +3661 -3661
  599. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +2916 -2916
  600. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +3105 -3105
  601. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +2697 -2697
  602. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +2544 -2544
  603. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +2180 -2180
  604. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +1192 -1192
  605. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +2101 -2101
  606. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +1032 -1032
  607. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +1609 -1609
  608. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +1453 -1453
  609. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +1292 -1292
  610. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +1470 -1470
  611. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +1698 -1698
  612. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +2334 -2334
  613. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +1693 -1693
  614. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +1347 -1347
  615. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +2044 -2044
  616. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +2229 -2229
  617. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +2418 -2418
  618. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +2205 -2205
  619. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +2221 -2221
  620. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +2253 -2253
  621. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +2106 -2106
  622. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +2507 -2507
  623. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +2587 -2587
  624. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +2075 -2075
  625. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +1805 -1805
  626. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +1895 -1895
  627. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +2878 -2878
  628. package/lib/assets/docs/assets/css/extra.css +29 -29
  629. package/lib/assets/docs/assets/js/extra.js +44 -44
  630. package/lib/assets/docs/development/index.md +39 -39
  631. package/lib/assets/docs/operation/index.md +11 -11
  632. package/lib/assets/docs/reference/CodexCLIMCP/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/343/203/225/343/203/255/343/203/274.md +532 -532
  633. package/lib/assets/docs/reference/CodexCLIMCP/343/202/265/343/203/274/343/203/220/343/203/274/350/250/255/345/256/232/346/211/213/351/240/206.md +341 -341
  634. package/lib/assets/docs/reference/Java/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +581 -580
  635. package/lib/assets/docs/reference/SonarQube/343/203/255/343/203/274/343/202/253/343/203/253/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +642 -642
  636. package/lib/assets/docs/reference/TypeScript/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +465 -465
  637. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +450 -450
  638. package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
  639. package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
  640. package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
  641. package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
  642. package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
  643. package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
  644. package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
  645. package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
  646. package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
  647. package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
  648. package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
  649. package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
  650. package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
  651. package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
  652. package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
  653. package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
  654. package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
  655. package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
  656. package/lib/assets/docs/reference/index.md +52 -52
  657. package/lib/assets/docs/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +250 -242
  658. package/lib/assets/docs/reference//343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +2216 -2216
  659. package/lib/assets/docs/reference//343/202/244/343/203/263/343/203/225/343/203/251/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +1878 -1878
  660. package/lib/assets/docs/reference//343/202/250/343/202/257/343/202/271/343/203/210/343/203/252/343/203/274/343/203/240/343/203/227/343/203/255/343/202/260/343/203/251/343/203/237/343/203/263/343/202/260.md +550 -544
  661. package/lib/assets/docs/reference//343/202/263/343/203/274/343/203/207/343/202/243/343/203/263/343/202/260/343/201/250/343/203/206/343/202/271/343/203/210/343/202/254/343/202/244/343/203/211.md +705 -705
  662. package/lib/assets/docs/reference//343/203/206/343/202/271/343/203/210/346/210/246/347/225/245/343/202/254/343/202/244/343/203/211.md +1313 -1313
  663. package/lib/assets/docs/reference//343/203/207/343/203/274/343/202/277/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +311 -311
  664. package/lib/assets/docs/reference//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +599 -599
  665. package/lib/assets/docs/reference//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +528 -528
  666. package/lib/assets/docs/reference//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +689 -682
  667. package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +461 -461
  668. package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/203/273/343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273/343/202/254/343/202/244/343/203/211.md +580 -560
  669. package/lib/assets/docs/reference//343/203/255/343/202/270/343/202/253/343/203/253/343/202/267/343/203/263/343/202/255/343/203/263/343/202/260.md +1367 -1367
  670. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2637 -2636
  671. package/lib/assets/docs/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +665 -663
  672. package/lib/assets/docs/reference//350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +1248 -1248
  673. package/lib/assets/docs/reference//350/250/200/350/252/236/345/210/245/351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +28 -0
  674. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1482 -1482
  675. package/lib/assets/docs/reference//351/201/213/347/224/250/343/202/271/343/202/257/343/203/252/343/203/227/343/203/210/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +421 -421
  676. package/lib/assets/docs/reference//351/201/213/347/224/250/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +392 -392
  677. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +299 -299
  678. package/lib/assets/docs/reference//351/235/236/346/251/237/350/203/275/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +1236 -1236
  679. package/lib/assets/docs/review/index.md +5 -5
  680. package/lib/assets/docs/strategy/index.md +1 -1
  681. package/lib/assets/docs/template/ADR.md +30 -30
  682. package/lib/assets/docs/template/AWS/343/202/271/343/203/206/343/203/274/343/202/270/343/203/263/343/202/260/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +1366 -1366
  683. package/lib/assets/docs/template/AWS/343/203/227/343/203/255/343/203/200/343/202/257/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +634 -634
  684. package/lib/assets/docs/template/README.md +50 -50
  685. package/lib/assets/docs/template/index.md +23 -23
  686. package/lib/assets/docs/template//343/201/276/343/201/232/343/201/223/343/202/214/343/202/222/350/252/255/343/202/202/343/201/206/343/203/252/343/202/271/343/203/210.md +12 -12
  687. package/lib/assets/docs/template//343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +547 -547
  688. package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +58 -58
  689. package/lib/assets/docs/template//343/202/244/343/203/263/343/202/273/343/203/227/343/202/267/343/203/247/343/203/263/343/203/207/343/203/203/343/202/255.md +13 -13
  690. package/lib/assets/docs/template//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243.md +379 -379
  691. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +573 -573
  692. package/lib/assets/docs/template//345/256/214/345/205/250/345/275/242/345/274/217/343/201/256/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271.md +69 -68
  693. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
  694. package/lib/assets/docs/template//350/250/255/350/250/210.md +173 -173
  695. package/lib/assets/docs/template//351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +688 -688
  696. package/lib/assets/gulpfile.js +25 -25
  697. package/lib/assets/mkdocs.yml +136 -135
  698. package/lib/assets/ops/docker/mkdoc/Dockerfile +19 -19
  699. package/lib/assets/ops/scripts/journal.js +180 -180
  700. package/lib/assets/ops/scripts/mkdocs.js +82 -82
  701. package/lib/assets/ops/scripts/release.js +431 -431
  702. package/lib/assets/ops/scripts/sonar_local.js +726 -726
  703. package/lib/assets/ops/scripts/ssh.js +190 -190
  704. package/lib/assets/ops/scripts/vault.js +299 -299
  705. package/lib/assets/package-lock.json +1653 -1653
  706. package/lib/assets/package.json +40 -40
  707. package/lib/gulpfile.js +37 -37
  708. package/package.json +41 -41
  709. package/lib/assets/.claude/agent-memory/xp-programmer/MEMORY.md +0 -6
  710. package/lib/assets/.claude/agent-memory/xp-programmer/project_cargo_tracker.md +0 -11
  711. package/lib/assets/.claude/agent-memory/xp-programmer/project_ddd_patterns.md +0 -27
  712. package/lib/assets/.claude/agent-memory/xp-programmer/project_us07_route_assignment.md +0 -19
@@ -1,911 +1,911 @@
1
- /**
2
- * インセプションデッキ PowerPoint 生成スクリプト(汎用テンプレート)
3
- *
4
- * テンプレート: docs/template/インセプションデッキ.pptx のスライド構成に準拠
5
- * データソース: docs/analysis/inception-deck.md, docs/analysis/business_architecture.md
6
- *
7
- * 使い方:
8
- * 1. SLIDE_DATA セクションのプレースホルダーをプロジェクト固有の内容に書き換える
9
- * 2. node .claude/scripts/generate-inception-deck.mjs を実行
10
- */
11
- import PptxGenJS from "pptxgenjs";
12
- import { writeFileSync } from "fs";
13
- import { resolve } from "path";
14
-
15
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
- // SLIDE_DATA: プロジェクト固有データ(ここを書き換える)
17
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
- const SLIDE_DATA = {
19
- // ── メタ情報 ──
20
- meta: {
21
- author: "プロジェクトチーム",
22
- title: "プロジェクト名 インセプションデッキ",
23
- version: "v0.1.0",
24
- date: "YYYY-MM-DD",
25
- outputFileName: "PROJECT_v0.1.0.pptx",
26
- },
27
-
28
- // ── Slide 1: タイトル ──
29
- titleSlide: {
30
- projectName: "プロジェクト名",
31
- subtitle: "プロジェクトの説明",
32
- deckLabel: "インセプションデッキ",
33
- organization: "組織名",
34
- },
35
-
36
- // ── Slide 2: 我われはなぜここにいるのか ──
37
- whyAreWeHere: {
38
- subtitle: "プロジェクトが解決すべき課題の概要",
39
- bullets: [
40
- "課題 1: 現状の問題点を記述",
41
- "課題 2: 現状の問題点を記述",
42
- "課題 3: 現状の問題点を記述",
43
- ],
44
- highlight: "課題を一文で要約するメッセージ",
45
- },
46
-
47
- // ── Slide 3: エレベーターピッチ ──
48
- elevatorPitch: {
49
- want: "〇〇を実現",
50
- targetUser: "ターゲットユーザーの説明",
51
- productName: "プロダクト名",
52
- category: "プロダクトカテゴリ",
53
- keyBenefit: "主要な機能・利点の説明",
54
- competitor: "既存の代替手段",
55
- differentiator: "差別化ポイント",
56
- },
57
-
58
- // ── Slide 4: どんな価値をもたらすのか? ──
59
- values: {
60
- rows: [
61
- // [番号, ビジネス目標, 期待される効果]
62
- ["1", "ビジネス目標 1", "期待される効果 1"],
63
- ["2", "ビジネス目標 2", "期待される効果 2"],
64
- ["3", "ビジネス目標 3", "期待される効果 3"],
65
- ],
66
- },
67
-
68
- // ── Slide 5: やらないことリスト ──
69
- scope: {
70
- inScope: [
71
- "スコープ内の機能 1",
72
- "スコープ内の機能 2",
73
- "スコープ内の機能 3",
74
- ],
75
- outOfScope: [
76
- "スコープ外の項目 1",
77
- "スコープ外の項目 2",
78
- ],
79
- decideLater: [
80
- "後で決める項目 1",
81
- "後で決める項目 2",
82
- ],
83
- },
84
-
85
- // ── Slide 6: プロジェクトコミュニティ ──
86
- stakeholders: {
87
- rows: [
88
- // [ステークホルダー, 役割, 主な関心事]
89
- ["ステークホルダー 1", "役割", "関心事"],
90
- ["ステークホルダー 2", "役割", "関心事"],
91
- ["ステークホルダー 3", "役割", "関心事"],
92
- ],
93
- },
94
-
95
- // ── Slide 7: 技術的な解決策の概要 ──
96
- technicalSolution: {
97
- // 上部の外部チャネル(モール、外部 API など)
98
- externalChannels: [
99
- { name: "チャネル 1" },
100
- { name: "チャネル 2" },
101
- { name: "チャネル 3" },
102
- ],
103
- // 中央のシステム
104
- systemName: "システム名",
105
- modules: [
106
- "モジュール 1",
107
- "モジュール 2",
108
- "モジュール 3",
109
- "モジュール 4",
110
- ],
111
- // 下部の外部連携先
112
- externalServices: [
113
- { name: "外部サービス 1" },
114
- { name: "外部サービス 2" },
115
- { name: "外部サービス 3" },
116
- ],
117
- techNote: "技術方針の概要を一文で記述",
118
- },
119
-
120
- // ── Slide 8: 夜も眠れなくなるような問題 ──
121
- risks: {
122
- rows: [
123
- // [番号, リスク, 影響度, 対策]
124
- ["1", "リスク 1", "高", "対策 1"],
125
- ["2", "リスク 2", "中", "対策 2"],
126
- ["3", "リスク 3", "低", "対策 3"],
127
- ],
128
- },
129
-
130
- // ── Slide 9: 俺たちの "A チーム" ──
131
- team: {
132
- rows: [
133
- // [役割, 人数, 備考]
134
- ["役割 1", "N 名", "備考"],
135
- ["役割 2", "N 名", "備考"],
136
- ],
137
- highlight: "チーム体制の特徴やポイントを一文で記述",
138
- },
139
-
140
- // ── Slide 10: 期間を見極める ──
141
- timeline: {
142
- totalWeeks: 12,
143
- phases: [
144
- // weeks: ガントバー上の幅(週数)
145
- {
146
- name: "Phase 1: フェーズ名",
147
- desc: "主な作業内容",
148
- weeksLabel: "N 週間",
149
- weeks: 3,
150
- },
151
- {
152
- name: "Phase 2: フェーズ名",
153
- desc: "主な作業内容",
154
- weeksLabel: "N 週間",
155
- weeks: 4,
156
- },
157
- {
158
- name: "Phase 3: フェーズ名",
159
- desc: "主な作業内容",
160
- weeksLabel: "N 週間",
161
- weeks: 3,
162
- },
163
- {
164
- name: "Phase 4: フェーズ名",
165
- desc: "主な作業内容",
166
- weeksLabel: "N 週間",
167
- weeks: 2,
168
- },
169
- ],
170
- // MVP マーカーを表示するフェーズ番号(0 始まり。先頭から N フェーズ完了時点)
171
- // null の場合はマーカーを表示しない
172
- mvpAfterPhase: 1,
173
- },
174
-
175
- // ── Slide 11: トレードオフ・スライダー ──
176
- tradeoffs: {
177
- // level: 1=MIN 〜 4=MAX
178
- sliders: [
179
- { label: "機能をぜんぶ揃える(スコープ)", level: 2 },
180
- { label: "予算内に収める(予算)", level: 2 },
181
- { label: "期日を死守する(時間)", level: 2 },
182
- { label: "高い品質、少ない欠陥(品質)", level: 3 },
183
- ],
184
- qualityPriorities: [
185
- // [優先度, 品質特性, 理由]
186
- ["1", "品質特性 1", "理由 1"],
187
- ["2", "品質特性 2", "理由 2"],
188
- ["3", "品質特性 3", "理由 3"],
189
- ],
190
- },
191
-
192
- // ── Slide 12: 初回のリリースに必要なもの ──
193
- initialRelease: {
194
- highlight: "MVP の概要を一文で記述",
195
- mvpScope: [
196
- "MVP 機能 1",
197
- "MVP 機能 2",
198
- "MVP 機能 3",
199
- ],
200
- releaseStrategy: [
201
- "リリース戦略 1",
202
- "リリース戦略 2",
203
- ],
204
- },
205
- };
206
-
207
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
208
- // テーマ設定(テンプレートから抽出)
209
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
210
- const COLORS = {
211
- black: "000000",
212
- white: "FFFFFF",
213
- darkBlue: "333399",
214
- teal: "009999",
215
- lightTeal: "BBE0E3",
216
- paleBlue: "DAEDEF",
217
- green: "99CC00",
218
- gray: "808080",
219
- lightGray: "D0D0D0",
220
- orange: "FF6600",
221
- red: "CC3333",
222
- yellow: "FFCC00",
223
- };
224
-
225
- const FONT = {
226
- title: "Yu Gothic",
227
- body: "Yu Gothic",
228
- code: "Courier New",
229
- };
230
-
231
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
232
- // ヘルパー関数
233
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
234
- function addTitle(slide, text) {
235
- slide.addText(text, {
236
- x: 0.5,
237
- y: 0.2,
238
- w: 9.0,
239
- h: 1.0,
240
- fontSize: 28,
241
- fontFace: FONT.title,
242
- bold: true,
243
- color: COLORS.darkBlue,
244
- });
245
- }
246
-
247
- function addSubtitle(slide, text) {
248
- slide.addText(text, {
249
- x: 0.5,
250
- y: 1.1,
251
- w: 9.0,
252
- h: 0.5,
253
- fontSize: 14,
254
- fontFace: FONT.body,
255
- color: COLORS.gray,
256
- });
257
- }
258
-
259
- function addBullets(slide, items, opts = {}) {
260
- const top = opts.y ?? 1.6;
261
- const textRows = items.map((item) => ({
262
- text: item,
263
- options: {
264
- fontSize: opts.fontSize ?? 14,
265
- fontFace: FONT.body,
266
- color: opts.color ?? COLORS.black,
267
- bullet: { type: "bullet" },
268
- paraSpaceAfter: 6,
269
- },
270
- }));
271
- slide.addText(textRows, {
272
- x: opts.x ?? 0.7,
273
- y: top,
274
- w: opts.w ?? 8.6,
275
- h: opts.h ?? 5.5 - (top - 1.0),
276
- valign: "top",
277
- });
278
- }
279
-
280
- function addTable(slide, header, rows, opts = {}) {
281
- const top = opts.y ?? 1.8;
282
- const tableData = [
283
- header.map((h) => ({
284
- text: h,
285
- options: {
286
- bold: true,
287
- fontSize: 11,
288
- fontFace: FONT.body,
289
- color: COLORS.white,
290
- fill: { color: COLORS.darkBlue },
291
- align: "left",
292
- valign: "middle",
293
- },
294
- })),
295
- ...rows.map((row) =>
296
- row.map((cell) => ({
297
- text: cell,
298
- options: {
299
- fontSize: 10,
300
- fontFace: FONT.body,
301
- color: COLORS.black,
302
- align: "left",
303
- valign: "top",
304
- },
305
- }))
306
- ),
307
- ];
308
- slide.addTable(tableData, {
309
- x: opts.x ?? 0.5,
310
- y: top,
311
- w: opts.w ?? 9.0,
312
- colW: opts.colW,
313
- border: { type: "solid", pt: 0.5, color: COLORS.lightGray },
314
- rowH: opts.rowH,
315
- autoPage: false,
316
- });
317
- }
318
-
319
- function addHighlightBox(slide, text, opts = {}) {
320
- slide.addText(text, {
321
- x: opts.x ?? 0.5,
322
- y: opts.y ?? 1.5,
323
- w: opts.w ?? 9.0,
324
- h: opts.h ?? 1.0,
325
- fontSize: opts.fontSize ?? 16,
326
- fontFace: FONT.body,
327
- color: COLORS.darkBlue,
328
- bold: true,
329
- fill: { color: COLORS.paleBlue },
330
- align: "center",
331
- valign: "middle",
332
- });
333
- }
334
-
335
- function addSliderBar(slide, label, level, y) {
336
- const barX = 3.5;
337
- const barW = 5.0;
338
- const segW = barW / 4;
339
-
340
- slide.addText(label, {
341
- x: 0.5,
342
- y,
343
- w: 3.0,
344
- h: 0.45,
345
- fontSize: 11,
346
- fontFace: FONT.body,
347
- color: COLORS.black,
348
- valign: "middle",
349
- });
350
-
351
- for (let i = 0; i < 4; i++) {
352
- const isFilled = i < level;
353
- slide.addShape("rect", {
354
- x: barX + i * segW,
355
- y: y + 0.05,
356
- w: segW - 0.05,
357
- h: 0.35,
358
- fill: { color: isFilled ? COLORS.darkBlue : COLORS.lightGray },
359
- line: { color: COLORS.gray, width: 0.5 },
360
- });
361
- }
362
-
363
- slide.addText("MIN", {
364
- x: barX - 0.05,
365
- y: y + 0.38,
366
- w: 0.5,
367
- h: 0.2,
368
- fontSize: 7,
369
- fontFace: FONT.body,
370
- color: COLORS.gray,
371
- });
372
- slide.addText("MAX", {
373
- x: barX + barW - 0.45,
374
- y: y + 0.38,
375
- w: 0.5,
376
- h: 0.2,
377
- fontSize: 7,
378
- fontFace: FONT.body,
379
- color: COLORS.gray,
380
- });
381
- }
382
-
383
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
384
- // スライド生成
385
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
386
- async function main() {
387
- const { meta } = SLIDE_DATA;
388
-
389
- const pptx = new PptxGenJS();
390
- pptx.defineLayout({ name: "SCREEN_4x3", width: 10, height: 7.5 });
391
- pptx.layout = "SCREEN_4x3";
392
- pptx.author = meta.author;
393
- pptx.title = meta.title;
394
-
395
- // ─── Slide 1: タイトル ───
396
- {
397
- const d = SLIDE_DATA.titleSlide;
398
- const slide = pptx.addSlide();
399
- slide.background = { color: COLORS.darkBlue };
400
- slide.addText(
401
- [
402
- {
403
- text: d.projectName,
404
- options: {
405
- fontSize: 48,
406
- fontFace: FONT.title,
407
- bold: true,
408
- color: COLORS.white,
409
- breakLine: true,
410
- },
411
- },
412
- {
413
- text: d.subtitle,
414
- options: {
415
- fontSize: 28,
416
- fontFace: FONT.title,
417
- color: COLORS.lightTeal,
418
- breakLine: true,
419
- },
420
- },
421
- {
422
- text: d.deckLabel,
423
- options: {
424
- fontSize: 24,
425
- fontFace: FONT.title,
426
- color: COLORS.white,
427
- breakLine: true,
428
- },
429
- },
430
- ],
431
- { x: 1.0, y: 1.5, w: 8.0, h: 3.5, align: "center", valign: "middle" }
432
- );
433
- slide.addText(d.organization, {
434
- x: 1.0,
435
- y: 5.5,
436
- w: 8.0,
437
- h: 0.5,
438
- fontSize: 16,
439
- fontFace: FONT.body,
440
- color: COLORS.lightTeal,
441
- align: "center",
442
- });
443
- slide.addText(`${meta.version} | ${meta.date}`, {
444
- x: 1.0,
445
- y: 6.2,
446
- w: 8.0,
447
- h: 0.4,
448
- fontSize: 12,
449
- fontFace: FONT.body,
450
- color: COLORS.gray,
451
- align: "center",
452
- });
453
- }
454
-
455
- // ─── Slide 2: 我われはなぜここにいるのか ───
456
- {
457
- const d = SLIDE_DATA.whyAreWeHere;
458
- const slide = pptx.addSlide();
459
- addTitle(slide, "我われはなぜここにいるのか");
460
- addSubtitle(slide, d.subtitle);
461
- addBullets(slide, d.bullets);
462
- addHighlightBox(slide, d.highlight, {
463
- y: 5.8,
464
- h: 0.7,
465
- fontSize: 14,
466
- });
467
- }
468
-
469
- // ─── Slide 3: エレベーターピッチ ───
470
- {
471
- const d = SLIDE_DATA.elevatorPitch;
472
- const slide = pptx.addSlide();
473
- addTitle(slide, "エレベーターピッチ");
474
-
475
- const bold = {
476
- fontSize: 14,
477
- fontFace: FONT.body,
478
- color: COLORS.darkBlue,
479
- bold: true,
480
- };
481
- const normal = {
482
- fontSize: 14,
483
- fontFace: FONT.body,
484
- color: COLORS.black,
485
- };
486
-
487
- const pitchParts = [
488
- { text: d.want, options: bold },
489
- { text: " したい\n", options: normal },
490
- { text: d.targetUser, options: bold },
491
- { text: " 向けの、\n", options: normal },
492
- { text: d.productName, options: bold },
493
- { text: " というプロダクトは、\n", options: normal },
494
- { text: d.category, options: bold },
495
- { text: " です。\nこれは ", options: normal },
496
- { text: d.keyBenefit, options: bold },
497
- { text: " ができ、\n", options: normal },
498
- { text: d.competitor, options: bold },
499
- { text: " とは違って、\n", options: normal },
500
- { text: d.differentiator, options: bold },
501
- { text: " が備わっている。", options: normal },
502
- ];
503
-
504
- slide.addText(pitchParts, {
505
- x: 0.8,
506
- y: 1.5,
507
- w: 8.4,
508
- h: 4.5,
509
- fill: { color: COLORS.paleBlue },
510
- valign: "middle",
511
- paraSpaceAfter: 8,
512
- });
513
- }
514
-
515
- // ─── Slide 4: どんな価値をもたらすのか? ───
516
- {
517
- const d = SLIDE_DATA.values;
518
- const slide = pptx.addSlide();
519
- addTitle(slide, "どんな価値をもたらすのか?");
520
- addTable(
521
- slide,
522
- ["#", "ビジネス目標", "期待される効果"],
523
- d.rows,
524
- { colW: [0.4, 3.0, 5.6] }
525
- );
526
- }
527
-
528
- // ─── Slide 5: やらないことリスト ───
529
- {
530
- const d = SLIDE_DATA.scope;
531
- const slide = pptx.addSlide();
532
- addTitle(slide, "やらないことリスト");
533
- addSubtitle(slide, "スコープの範囲");
534
-
535
- const colW = 2.85;
536
- const colGap = 0.15;
537
- const cols = [
538
- { title: "やる(スコープ内)", color: COLORS.teal, items: d.inScope },
539
- { title: "やらない(スコープ外)", color: COLORS.red, items: d.outOfScope },
540
- { title: "あとで決める", color: COLORS.orange, items: d.decideLater },
541
- ];
542
-
543
- cols.forEach((col, i) => {
544
- const x = 0.5 + i * (colW + colGap);
545
- slide.addText(col.title, {
546
- x,
547
- y: 1.7,
548
- w: colW,
549
- h: 0.45,
550
- fontSize: 13,
551
- fontFace: FONT.body,
552
- bold: true,
553
- color: COLORS.white,
554
- fill: { color: col.color },
555
- align: "center",
556
- valign: "middle",
557
- });
558
- const bullets = col.items.map((item) => ({
559
- text: item,
560
- options: {
561
- fontSize: 11,
562
- fontFace: FONT.body,
563
- color: COLORS.black,
564
- bullet: { type: "bullet" },
565
- paraSpaceAfter: 4,
566
- },
567
- }));
568
- slide.addText(bullets, {
569
- x,
570
- y: 2.2,
571
- w: colW,
572
- h: 4.8,
573
- valign: "top",
574
- });
575
- });
576
- }
577
-
578
- // ─── Slide 6: プロジェクトコミュニティ ───
579
- {
580
- const d = SLIDE_DATA.stakeholders;
581
- const slide = pptx.addSlide();
582
- addTitle(slide, "プロジェクトコミュニティ");
583
- addSubtitle(slide, "主なステークホルダーと関心事");
584
- addTable(
585
- slide,
586
- ["ステークホルダー", "役割", "主な関心事"],
587
- d.rows,
588
- { y: 1.7, colW: [2.0, 2.2, 4.8] }
589
- );
590
- }
591
-
592
- // ─── Slide 7: 技術的な解決策の概要 ───
593
- {
594
- const d = SLIDE_DATA.technicalSolution;
595
- const slide = pptx.addSlide();
596
- addTitle(slide, "技術的な解決策の概要");
597
-
598
- const boxH = 0.5;
599
-
600
- // 上部: 外部チャネル
601
- const channelCount = d.externalChannels.length;
602
- const channelW = Math.min(2.0, (9.0 - 0.2 * (channelCount - 1)) / channelCount);
603
- const channelGap = channelCount > 1 ? (9.0 - channelW * channelCount) / (channelCount - 1) : 0;
604
- d.externalChannels.forEach((ch, i) => {
605
- const x = 0.5 + i * (channelW + channelGap);
606
- slide.addShape("rect", {
607
- x,
608
- y: 1.5,
609
- w: channelW,
610
- h: boxH,
611
- fill: { color: COLORS.lightTeal },
612
- line: { color: COLORS.teal, width: 1 },
613
- });
614
- slide.addText(ch.name, {
615
- x,
616
- y: 1.5,
617
- w: channelW,
618
- h: boxH,
619
- fontSize: 10,
620
- fontFace: FONT.body,
621
- color: COLORS.black,
622
- align: "center",
623
- valign: "middle",
624
- });
625
- });
626
-
627
- // 接続ラベル
628
- slide.addText("API", {
629
- x: 4.0,
630
- y: 2.05,
631
- w: 1.0,
632
- h: 0.3,
633
- fontSize: 9,
634
- fontFace: FONT.body,
635
- color: COLORS.gray,
636
- align: "center",
637
- });
638
-
639
- // 中央: メインシステム
640
- slide.addShape("rect", {
641
- x: 0.5,
642
- y: 2.5,
643
- w: 9.0,
644
- h: 2.8,
645
- fill: { color: "F8F8FF" },
646
- line: { color: COLORS.darkBlue, width: 2 },
647
- });
648
- slide.addText(d.systemName, {
649
- x: 0.5,
650
- y: 2.5,
651
- w: 9.0,
652
- h: 0.4,
653
- fontSize: 12,
654
- fontFace: FONT.body,
655
- bold: true,
656
- color: COLORS.darkBlue,
657
- align: "center",
658
- });
659
-
660
- // 内部モジュール
661
- d.modules.forEach((name, i) => {
662
- const row = Math.floor(i / 4);
663
- const col = i % 4;
664
- slide.addShape("roundRect", {
665
- x: 0.8 + col * 2.15,
666
- y: 3.0 + row * 0.7,
667
- w: 1.95,
668
- h: 0.55,
669
- fill: { color: COLORS.darkBlue },
670
- rectRadius: 0.05,
671
- });
672
- slide.addText(name, {
673
- x: 0.8 + col * 2.15,
674
- y: 3.0 + row * 0.7,
675
- w: 1.95,
676
- h: 0.55,
677
- fontSize: 10,
678
- fontFace: FONT.body,
679
- color: COLORS.white,
680
- align: "center",
681
- valign: "middle",
682
- });
683
- });
684
-
685
- // 下部: 外部連携先
686
- const svcCount = d.externalServices.length;
687
- const svcW = Math.min(2.0, (9.0 - 0.2 * (svcCount - 1)) / svcCount);
688
- const svcGap = svcCount > 1 ? (9.0 - svcW * svcCount) / (svcCount - 1) : 0;
689
- d.externalServices.forEach((svc, i) => {
690
- const x = 0.5 + i * (svcW + svcGap);
691
- slide.addShape("rect", {
692
- x,
693
- y: 5.6,
694
- w: svcW,
695
- h: boxH,
696
- fill: { color: "FFF3E0" },
697
- line: { color: COLORS.orange, width: 1 },
698
- });
699
- slide.addText(svc.name, {
700
- x,
701
- y: 5.6,
702
- w: svcW,
703
- h: boxH,
704
- fontSize: 10,
705
- fontFace: FONT.body,
706
- color: COLORS.black,
707
- align: "center",
708
- valign: "middle",
709
- });
710
- });
711
-
712
- // 技術方針ノート
713
- slide.addText(d.techNote, {
714
- x: 0.5,
715
- y: 6.4,
716
- w: 9.0,
717
- h: 0.4,
718
- fontSize: 10,
719
- fontFace: FONT.body,
720
- color: COLORS.gray,
721
- align: "center",
722
- });
723
- }
724
-
725
- // ─── Slide 8: 夜も眠れなくなるような問題 ───
726
- {
727
- const d = SLIDE_DATA.risks;
728
- const slide = pptx.addSlide();
729
- addTitle(slide, "夜も眠れなくなるような問題は何だろう?");
730
- addTable(
731
- slide,
732
- ["#", "リスク", "影響度", "対策"],
733
- d.rows,
734
- { colW: [0.4, 3.0, 0.8, 4.8] }
735
- );
736
- }
737
-
738
- // ─── Slide 9: 俺たちの "A チーム" ───
739
- {
740
- const d = SLIDE_DATA.team;
741
- const slide = pptx.addSlide();
742
- addTitle(slide, '俺たちの "A チーム"');
743
- addTable(
744
- slide,
745
- ["役割", "人数", "備考"],
746
- d.rows,
747
- { y: 1.8, colW: [2.5, 1.5, 5.0] }
748
- );
749
- addHighlightBox(slide, d.highlight, { y: 4.0, h: 0.8, fontSize: 14 });
750
- }
751
-
752
- // ─── Slide 10: 期間を見極める ───
753
- {
754
- const d = SLIDE_DATA.timeline;
755
- const slide = pptx.addSlide();
756
- addTitle(slide, "期間を見極める");
757
-
758
- const barStartX = 0.5;
759
- const barMaxW = 9.0;
760
- const phaseWeeks = d.phases.map((p) => p.weeks);
761
-
762
- d.phases.forEach((phase, i) => {
763
- const y = 1.8 + i * 1.0;
764
- const startWeek = phaseWeeks.slice(0, i).reduce((a, b) => a + b, 0);
765
- const x = barStartX + (startWeek / d.totalWeeks) * barMaxW;
766
- const w = (phaseWeeks[i] / d.totalWeeks) * barMaxW;
767
- const fillColor = i % 2 === 0 ? COLORS.lightTeal : COLORS.teal;
768
-
769
- slide.addShape("rect", {
770
- x,
771
- y,
772
- w,
773
- h: 0.45,
774
- fill: { color: fillColor },
775
- line: { color: COLORS.teal, width: 1 },
776
- });
777
- slide.addText(phase.name, {
778
- x,
779
- y,
780
- w,
781
- h: 0.45,
782
- fontSize: 10,
783
- fontFace: FONT.body,
784
- bold: true,
785
- color: COLORS.darkBlue,
786
- align: "center",
787
- valign: "middle",
788
- });
789
- slide.addText(`${phase.desc}(${phase.weeksLabel})`, {
790
- x,
791
- y: y + 0.45,
792
- w,
793
- h: 0.35,
794
- fontSize: 8,
795
- fontFace: FONT.body,
796
- color: COLORS.gray,
797
- align: "center",
798
- });
799
- });
800
-
801
- // MVP マーカー
802
- if (d.mvpAfterPhase != null) {
803
- const mvpWeeks = phaseWeeks
804
- .slice(0, d.mvpAfterPhase + 1)
805
- .reduce((a, b) => a + b, 0);
806
- const mvpX = barStartX + (mvpWeeks / d.totalWeeks) * barMaxW;
807
- slide.addShape("line", {
808
- x: mvpX,
809
- y: 1.5,
810
- w: 0,
811
- h: 5.0,
812
- line: { color: COLORS.red, width: 2, dashType: "dash" },
813
- });
814
- slide.addText("MVP\nリリース", {
815
- x: mvpX - 0.5,
816
- y: 6.5,
817
- w: 1.2,
818
- h: 0.5,
819
- fontSize: 10,
820
- fontFace: FONT.body,
821
- bold: true,
822
- color: COLORS.red,
823
- align: "center",
824
- });
825
- }
826
-
827
- slide.addText("あくまで推測であって、確約するものではありません。", {
828
- x: 0.5,
829
- y: 7.0,
830
- w: 9.0,
831
- h: 0.3,
832
- fontSize: 9,
833
- fontFace: FONT.body,
834
- color: COLORS.gray,
835
- align: "right",
836
- });
837
- }
838
-
839
- // ─── Slide 11: トレードオフ・スライダー ───
840
- {
841
- const d = SLIDE_DATA.tradeoffs;
842
- const slide = pptx.addSlide();
843
- addTitle(slide, "トレードオフ・スライダー");
844
-
845
- d.sliders.forEach((s, i) => {
846
- addSliderBar(slide, s.label, s.level, 1.8 + i * 0.7);
847
- });
848
-
849
- const qualityY = 1.8 + d.sliders.length * 0.7 + 0.3;
850
- slide.addText("品質特性の優先順位", {
851
- x: 0.5,
852
- y: qualityY,
853
- w: 9.0,
854
- h: 0.4,
855
- fontSize: 14,
856
- fontFace: FONT.body,
857
- bold: true,
858
- color: COLORS.darkBlue,
859
- });
860
-
861
- addTable(
862
- slide,
863
- ["優先度", "品質特性", "理由"],
864
- d.qualityPriorities,
865
- { y: qualityY + 0.4, colW: [0.8, 1.8, 6.4] }
866
- );
867
- }
868
-
869
- // ─── Slide 12: 初回のリリースに必要なもの ───
870
- {
871
- const d = SLIDE_DATA.initialRelease;
872
- const slide = pptx.addSlide();
873
- addTitle(slide, "初回のリリースに必要なもの");
874
-
875
- addHighlightBox(slide, d.highlight, { y: 1.5, h: 0.7, fontSize: 16 });
876
-
877
- slide.addText("MVP スコープ", {
878
- x: 0.5,
879
- y: 2.5,
880
- w: 9.0,
881
- h: 0.4,
882
- fontSize: 14,
883
- fontFace: FONT.body,
884
- bold: true,
885
- color: COLORS.darkBlue,
886
- });
887
-
888
- addBullets(slide, d.mvpScope, { y: 2.9, h: 2.5, fontSize: 13 });
889
-
890
- slide.addText("リリース戦略", {
891
- x: 0.5,
892
- y: 5.2,
893
- w: 9.0,
894
- h: 0.4,
895
- fontSize: 14,
896
- fontFace: FONT.body,
897
- bold: true,
898
- color: COLORS.darkBlue,
899
- });
900
-
901
- addBullets(slide, d.releaseStrategy, { y: 5.6, h: 1.5, fontSize: 12 });
902
- }
903
-
904
- // ─── 保存 ───
905
- const outputPath = resolve(`docs/analysis/slide/${meta.outputFileName}`);
906
- const dataBuffer = await pptx.write({ outputType: "nodebuffer" });
907
- writeFileSync(outputPath, dataBuffer);
908
- console.log("Generated:", outputPath);
909
- }
910
-
911
- main().catch(console.error);
1
+ /**
2
+ * インセプションデッキ PowerPoint 生成スクリプト(汎用テンプレート)
3
+ *
4
+ * テンプレート: docs/template/インセプションデッキ.pptx のスライド構成に準拠
5
+ * データソース: docs/analysis/inception-deck.md, docs/analysis/business_architecture.md
6
+ *
7
+ * 使い方:
8
+ * 1. SLIDE_DATA セクションのプレースホルダーをプロジェクト固有の内容に書き換える
9
+ * 2. node .claude/scripts/generate-inception-deck.mjs を実行
10
+ */
11
+ import PptxGenJS from "pptxgenjs";
12
+ import { writeFileSync } from "fs";
13
+ import { resolve } from "path";
14
+
15
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ // SLIDE_DATA: プロジェクト固有データ(ここを書き換える)
17
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
+ const SLIDE_DATA = {
19
+ // ── メタ情報 ──
20
+ meta: {
21
+ author: "プロジェクトチーム",
22
+ title: "プロジェクト名 インセプションデッキ",
23
+ version: "v0.1.0",
24
+ date: "YYYY-MM-DD",
25
+ outputFileName: "PROJECT_v0.1.0.pptx",
26
+ },
27
+
28
+ // ── Slide 1: タイトル ──
29
+ titleSlide: {
30
+ projectName: "プロジェクト名",
31
+ subtitle: "プロジェクトの説明",
32
+ deckLabel: "インセプションデッキ",
33
+ organization: "組織名",
34
+ },
35
+
36
+ // ── Slide 2: 我われはなぜここにいるのか ──
37
+ whyAreWeHere: {
38
+ subtitle: "プロジェクトが解決すべき課題の概要",
39
+ bullets: [
40
+ "課題 1: 現状の問題点を記述",
41
+ "課題 2: 現状の問題点を記述",
42
+ "課題 3: 現状の問題点を記述",
43
+ ],
44
+ highlight: "課題を一文で要約するメッセージ",
45
+ },
46
+
47
+ // ── Slide 3: エレベーターピッチ ──
48
+ elevatorPitch: {
49
+ want: "〇〇を実現",
50
+ targetUser: "ターゲットユーザーの説明",
51
+ productName: "プロダクト名",
52
+ category: "プロダクトカテゴリ",
53
+ keyBenefit: "主要な機能・利点の説明",
54
+ competitor: "既存の代替手段",
55
+ differentiator: "差別化ポイント",
56
+ },
57
+
58
+ // ── Slide 4: どんな価値をもたらすのか? ──
59
+ values: {
60
+ rows: [
61
+ // [番号, ビジネス目標, 期待される効果]
62
+ ["1", "ビジネス目標 1", "期待される効果 1"],
63
+ ["2", "ビジネス目標 2", "期待される効果 2"],
64
+ ["3", "ビジネス目標 3", "期待される効果 3"],
65
+ ],
66
+ },
67
+
68
+ // ── Slide 5: やらないことリスト ──
69
+ scope: {
70
+ inScope: [
71
+ "スコープ内の機能 1",
72
+ "スコープ内の機能 2",
73
+ "スコープ内の機能 3",
74
+ ],
75
+ outOfScope: [
76
+ "スコープ外の項目 1",
77
+ "スコープ外の項目 2",
78
+ ],
79
+ decideLater: [
80
+ "後で決める項目 1",
81
+ "後で決める項目 2",
82
+ ],
83
+ },
84
+
85
+ // ── Slide 6: プロジェクトコミュニティ ──
86
+ stakeholders: {
87
+ rows: [
88
+ // [ステークホルダー, 役割, 主な関心事]
89
+ ["ステークホルダー 1", "役割", "関心事"],
90
+ ["ステークホルダー 2", "役割", "関心事"],
91
+ ["ステークホルダー 3", "役割", "関心事"],
92
+ ],
93
+ },
94
+
95
+ // ── Slide 7: 技術的な解決策の概要 ──
96
+ technicalSolution: {
97
+ // 上部の外部チャネル(モール、外部 API など)
98
+ externalChannels: [
99
+ { name: "チャネル 1" },
100
+ { name: "チャネル 2" },
101
+ { name: "チャネル 3" },
102
+ ],
103
+ // 中央のシステム
104
+ systemName: "システム名",
105
+ modules: [
106
+ "モジュール 1",
107
+ "モジュール 2",
108
+ "モジュール 3",
109
+ "モジュール 4",
110
+ ],
111
+ // 下部の外部連携先
112
+ externalServices: [
113
+ { name: "外部サービス 1" },
114
+ { name: "外部サービス 2" },
115
+ { name: "外部サービス 3" },
116
+ ],
117
+ techNote: "技術方針の概要を一文で記述",
118
+ },
119
+
120
+ // ── Slide 8: 夜も眠れなくなるような問題 ──
121
+ risks: {
122
+ rows: [
123
+ // [番号, リスク, 影響度, 対策]
124
+ ["1", "リスク 1", "高", "対策 1"],
125
+ ["2", "リスク 2", "中", "対策 2"],
126
+ ["3", "リスク 3", "低", "対策 3"],
127
+ ],
128
+ },
129
+
130
+ // ── Slide 9: 俺たちの "A チーム" ──
131
+ team: {
132
+ rows: [
133
+ // [役割, 人数, 備考]
134
+ ["役割 1", "N 名", "備考"],
135
+ ["役割 2", "N 名", "備考"],
136
+ ],
137
+ highlight: "チーム体制の特徴やポイントを一文で記述",
138
+ },
139
+
140
+ // ── Slide 10: 期間を見極める ──
141
+ timeline: {
142
+ totalWeeks: 12,
143
+ phases: [
144
+ // weeks: ガントバー上の幅(週数)
145
+ {
146
+ name: "Phase 1: フェーズ名",
147
+ desc: "主な作業内容",
148
+ weeksLabel: "N 週間",
149
+ weeks: 3,
150
+ },
151
+ {
152
+ name: "Phase 2: フェーズ名",
153
+ desc: "主な作業内容",
154
+ weeksLabel: "N 週間",
155
+ weeks: 4,
156
+ },
157
+ {
158
+ name: "Phase 3: フェーズ名",
159
+ desc: "主な作業内容",
160
+ weeksLabel: "N 週間",
161
+ weeks: 3,
162
+ },
163
+ {
164
+ name: "Phase 4: フェーズ名",
165
+ desc: "主な作業内容",
166
+ weeksLabel: "N 週間",
167
+ weeks: 2,
168
+ },
169
+ ],
170
+ // MVP マーカーを表示するフェーズ番号(0 始まり。先頭から N フェーズ完了時点)
171
+ // null の場合はマーカーを表示しない
172
+ mvpAfterPhase: 1,
173
+ },
174
+
175
+ // ── Slide 11: トレードオフ・スライダー ──
176
+ tradeoffs: {
177
+ // level: 1=MIN 〜 4=MAX
178
+ sliders: [
179
+ { label: "機能をぜんぶ揃える(スコープ)", level: 2 },
180
+ { label: "予算内に収める(予算)", level: 2 },
181
+ { label: "期日を死守する(時間)", level: 2 },
182
+ { label: "高い品質、少ない欠陥(品質)", level: 3 },
183
+ ],
184
+ qualityPriorities: [
185
+ // [優先度, 品質特性, 理由]
186
+ ["1", "品質特性 1", "理由 1"],
187
+ ["2", "品質特性 2", "理由 2"],
188
+ ["3", "品質特性 3", "理由 3"],
189
+ ],
190
+ },
191
+
192
+ // ── Slide 12: 初回のリリースに必要なもの ──
193
+ initialRelease: {
194
+ highlight: "MVP の概要を一文で記述",
195
+ mvpScope: [
196
+ "MVP 機能 1",
197
+ "MVP 機能 2",
198
+ "MVP 機能 3",
199
+ ],
200
+ releaseStrategy: [
201
+ "リリース戦略 1",
202
+ "リリース戦略 2",
203
+ ],
204
+ },
205
+ };
206
+
207
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
208
+ // テーマ設定(テンプレートから抽出)
209
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
210
+ const COLORS = {
211
+ black: "000000",
212
+ white: "FFFFFF",
213
+ darkBlue: "333399",
214
+ teal: "009999",
215
+ lightTeal: "BBE0E3",
216
+ paleBlue: "DAEDEF",
217
+ green: "99CC00",
218
+ gray: "808080",
219
+ lightGray: "D0D0D0",
220
+ orange: "FF6600",
221
+ red: "CC3333",
222
+ yellow: "FFCC00",
223
+ };
224
+
225
+ const FONT = {
226
+ title: "Yu Gothic",
227
+ body: "Yu Gothic",
228
+ code: "Courier New",
229
+ };
230
+
231
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
232
+ // ヘルパー関数
233
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
234
+ function addTitle(slide, text) {
235
+ slide.addText(text, {
236
+ x: 0.5,
237
+ y: 0.2,
238
+ w: 9.0,
239
+ h: 1.0,
240
+ fontSize: 28,
241
+ fontFace: FONT.title,
242
+ bold: true,
243
+ color: COLORS.darkBlue,
244
+ });
245
+ }
246
+
247
+ function addSubtitle(slide, text) {
248
+ slide.addText(text, {
249
+ x: 0.5,
250
+ y: 1.1,
251
+ w: 9.0,
252
+ h: 0.5,
253
+ fontSize: 14,
254
+ fontFace: FONT.body,
255
+ color: COLORS.gray,
256
+ });
257
+ }
258
+
259
+ function addBullets(slide, items, opts = {}) {
260
+ const top = opts.y ?? 1.6;
261
+ const textRows = items.map((item) => ({
262
+ text: item,
263
+ options: {
264
+ fontSize: opts.fontSize ?? 14,
265
+ fontFace: FONT.body,
266
+ color: opts.color ?? COLORS.black,
267
+ bullet: { type: "bullet" },
268
+ paraSpaceAfter: 6,
269
+ },
270
+ }));
271
+ slide.addText(textRows, {
272
+ x: opts.x ?? 0.7,
273
+ y: top,
274
+ w: opts.w ?? 8.6,
275
+ h: opts.h ?? 5.5 - (top - 1.0),
276
+ valign: "top",
277
+ });
278
+ }
279
+
280
+ function addTable(slide, header, rows, opts = {}) {
281
+ const top = opts.y ?? 1.8;
282
+ const tableData = [
283
+ header.map((h) => ({
284
+ text: h,
285
+ options: {
286
+ bold: true,
287
+ fontSize: 11,
288
+ fontFace: FONT.body,
289
+ color: COLORS.white,
290
+ fill: { color: COLORS.darkBlue },
291
+ align: "left",
292
+ valign: "middle",
293
+ },
294
+ })),
295
+ ...rows.map((row) =>
296
+ row.map((cell) => ({
297
+ text: cell,
298
+ options: {
299
+ fontSize: 10,
300
+ fontFace: FONT.body,
301
+ color: COLORS.black,
302
+ align: "left",
303
+ valign: "top",
304
+ },
305
+ }))
306
+ ),
307
+ ];
308
+ slide.addTable(tableData, {
309
+ x: opts.x ?? 0.5,
310
+ y: top,
311
+ w: opts.w ?? 9.0,
312
+ colW: opts.colW,
313
+ border: { type: "solid", pt: 0.5, color: COLORS.lightGray },
314
+ rowH: opts.rowH,
315
+ autoPage: false,
316
+ });
317
+ }
318
+
319
+ function addHighlightBox(slide, text, opts = {}) {
320
+ slide.addText(text, {
321
+ x: opts.x ?? 0.5,
322
+ y: opts.y ?? 1.5,
323
+ w: opts.w ?? 9.0,
324
+ h: opts.h ?? 1.0,
325
+ fontSize: opts.fontSize ?? 16,
326
+ fontFace: FONT.body,
327
+ color: COLORS.darkBlue,
328
+ bold: true,
329
+ fill: { color: COLORS.paleBlue },
330
+ align: "center",
331
+ valign: "middle",
332
+ });
333
+ }
334
+
335
+ function addSliderBar(slide, label, level, y) {
336
+ const barX = 3.5;
337
+ const barW = 5.0;
338
+ const segW = barW / 4;
339
+
340
+ slide.addText(label, {
341
+ x: 0.5,
342
+ y,
343
+ w: 3.0,
344
+ h: 0.45,
345
+ fontSize: 11,
346
+ fontFace: FONT.body,
347
+ color: COLORS.black,
348
+ valign: "middle",
349
+ });
350
+
351
+ for (let i = 0; i < 4; i++) {
352
+ const isFilled = i < level;
353
+ slide.addShape("rect", {
354
+ x: barX + i * segW,
355
+ y: y + 0.05,
356
+ w: segW - 0.05,
357
+ h: 0.35,
358
+ fill: { color: isFilled ? COLORS.darkBlue : COLORS.lightGray },
359
+ line: { color: COLORS.gray, width: 0.5 },
360
+ });
361
+ }
362
+
363
+ slide.addText("MIN", {
364
+ x: barX - 0.05,
365
+ y: y + 0.38,
366
+ w: 0.5,
367
+ h: 0.2,
368
+ fontSize: 7,
369
+ fontFace: FONT.body,
370
+ color: COLORS.gray,
371
+ });
372
+ slide.addText("MAX", {
373
+ x: barX + barW - 0.45,
374
+ y: y + 0.38,
375
+ w: 0.5,
376
+ h: 0.2,
377
+ fontSize: 7,
378
+ fontFace: FONT.body,
379
+ color: COLORS.gray,
380
+ });
381
+ }
382
+
383
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
384
+ // スライド生成
385
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
386
+ async function main() {
387
+ const { meta } = SLIDE_DATA;
388
+
389
+ const pptx = new PptxGenJS();
390
+ pptx.defineLayout({ name: "SCREEN_4x3", width: 10, height: 7.5 });
391
+ pptx.layout = "SCREEN_4x3";
392
+ pptx.author = meta.author;
393
+ pptx.title = meta.title;
394
+
395
+ // ─── Slide 1: タイトル ───
396
+ {
397
+ const d = SLIDE_DATA.titleSlide;
398
+ const slide = pptx.addSlide();
399
+ slide.background = { color: COLORS.darkBlue };
400
+ slide.addText(
401
+ [
402
+ {
403
+ text: d.projectName,
404
+ options: {
405
+ fontSize: 48,
406
+ fontFace: FONT.title,
407
+ bold: true,
408
+ color: COLORS.white,
409
+ breakLine: true,
410
+ },
411
+ },
412
+ {
413
+ text: d.subtitle,
414
+ options: {
415
+ fontSize: 28,
416
+ fontFace: FONT.title,
417
+ color: COLORS.lightTeal,
418
+ breakLine: true,
419
+ },
420
+ },
421
+ {
422
+ text: d.deckLabel,
423
+ options: {
424
+ fontSize: 24,
425
+ fontFace: FONT.title,
426
+ color: COLORS.white,
427
+ breakLine: true,
428
+ },
429
+ },
430
+ ],
431
+ { x: 1.0, y: 1.5, w: 8.0, h: 3.5, align: "center", valign: "middle" }
432
+ );
433
+ slide.addText(d.organization, {
434
+ x: 1.0,
435
+ y: 5.5,
436
+ w: 8.0,
437
+ h: 0.5,
438
+ fontSize: 16,
439
+ fontFace: FONT.body,
440
+ color: COLORS.lightTeal,
441
+ align: "center",
442
+ });
443
+ slide.addText(`${meta.version} | ${meta.date}`, {
444
+ x: 1.0,
445
+ y: 6.2,
446
+ w: 8.0,
447
+ h: 0.4,
448
+ fontSize: 12,
449
+ fontFace: FONT.body,
450
+ color: COLORS.gray,
451
+ align: "center",
452
+ });
453
+ }
454
+
455
+ // ─── Slide 2: 我われはなぜここにいるのか ───
456
+ {
457
+ const d = SLIDE_DATA.whyAreWeHere;
458
+ const slide = pptx.addSlide();
459
+ addTitle(slide, "我われはなぜここにいるのか");
460
+ addSubtitle(slide, d.subtitle);
461
+ addBullets(slide, d.bullets);
462
+ addHighlightBox(slide, d.highlight, {
463
+ y: 5.8,
464
+ h: 0.7,
465
+ fontSize: 14,
466
+ });
467
+ }
468
+
469
+ // ─── Slide 3: エレベーターピッチ ───
470
+ {
471
+ const d = SLIDE_DATA.elevatorPitch;
472
+ const slide = pptx.addSlide();
473
+ addTitle(slide, "エレベーターピッチ");
474
+
475
+ const bold = {
476
+ fontSize: 14,
477
+ fontFace: FONT.body,
478
+ color: COLORS.darkBlue,
479
+ bold: true,
480
+ };
481
+ const normal = {
482
+ fontSize: 14,
483
+ fontFace: FONT.body,
484
+ color: COLORS.black,
485
+ };
486
+
487
+ const pitchParts = [
488
+ { text: d.want, options: bold },
489
+ { text: " したい\n", options: normal },
490
+ { text: d.targetUser, options: bold },
491
+ { text: " 向けの、\n", options: normal },
492
+ { text: d.productName, options: bold },
493
+ { text: " というプロダクトは、\n", options: normal },
494
+ { text: d.category, options: bold },
495
+ { text: " です。\nこれは ", options: normal },
496
+ { text: d.keyBenefit, options: bold },
497
+ { text: " ができ、\n", options: normal },
498
+ { text: d.competitor, options: bold },
499
+ { text: " とは違って、\n", options: normal },
500
+ { text: d.differentiator, options: bold },
501
+ { text: " が備わっている。", options: normal },
502
+ ];
503
+
504
+ slide.addText(pitchParts, {
505
+ x: 0.8,
506
+ y: 1.5,
507
+ w: 8.4,
508
+ h: 4.5,
509
+ fill: { color: COLORS.paleBlue },
510
+ valign: "middle",
511
+ paraSpaceAfter: 8,
512
+ });
513
+ }
514
+
515
+ // ─── Slide 4: どんな価値をもたらすのか? ───
516
+ {
517
+ const d = SLIDE_DATA.values;
518
+ const slide = pptx.addSlide();
519
+ addTitle(slide, "どんな価値をもたらすのか?");
520
+ addTable(
521
+ slide,
522
+ ["#", "ビジネス目標", "期待される効果"],
523
+ d.rows,
524
+ { colW: [0.4, 3.0, 5.6] }
525
+ );
526
+ }
527
+
528
+ // ─── Slide 5: やらないことリスト ───
529
+ {
530
+ const d = SLIDE_DATA.scope;
531
+ const slide = pptx.addSlide();
532
+ addTitle(slide, "やらないことリスト");
533
+ addSubtitle(slide, "スコープの範囲");
534
+
535
+ const colW = 2.85;
536
+ const colGap = 0.15;
537
+ const cols = [
538
+ { title: "やる(スコープ内)", color: COLORS.teal, items: d.inScope },
539
+ { title: "やらない(スコープ外)", color: COLORS.red, items: d.outOfScope },
540
+ { title: "あとで決める", color: COLORS.orange, items: d.decideLater },
541
+ ];
542
+
543
+ cols.forEach((col, i) => {
544
+ const x = 0.5 + i * (colW + colGap);
545
+ slide.addText(col.title, {
546
+ x,
547
+ y: 1.7,
548
+ w: colW,
549
+ h: 0.45,
550
+ fontSize: 13,
551
+ fontFace: FONT.body,
552
+ bold: true,
553
+ color: COLORS.white,
554
+ fill: { color: col.color },
555
+ align: "center",
556
+ valign: "middle",
557
+ });
558
+ const bullets = col.items.map((item) => ({
559
+ text: item,
560
+ options: {
561
+ fontSize: 11,
562
+ fontFace: FONT.body,
563
+ color: COLORS.black,
564
+ bullet: { type: "bullet" },
565
+ paraSpaceAfter: 4,
566
+ },
567
+ }));
568
+ slide.addText(bullets, {
569
+ x,
570
+ y: 2.2,
571
+ w: colW,
572
+ h: 4.8,
573
+ valign: "top",
574
+ });
575
+ });
576
+ }
577
+
578
+ // ─── Slide 6: プロジェクトコミュニティ ───
579
+ {
580
+ const d = SLIDE_DATA.stakeholders;
581
+ const slide = pptx.addSlide();
582
+ addTitle(slide, "プロジェクトコミュニティ");
583
+ addSubtitle(slide, "主なステークホルダーと関心事");
584
+ addTable(
585
+ slide,
586
+ ["ステークホルダー", "役割", "主な関心事"],
587
+ d.rows,
588
+ { y: 1.7, colW: [2.0, 2.2, 4.8] }
589
+ );
590
+ }
591
+
592
+ // ─── Slide 7: 技術的な解決策の概要 ───
593
+ {
594
+ const d = SLIDE_DATA.technicalSolution;
595
+ const slide = pptx.addSlide();
596
+ addTitle(slide, "技術的な解決策の概要");
597
+
598
+ const boxH = 0.5;
599
+
600
+ // 上部: 外部チャネル
601
+ const channelCount = d.externalChannels.length;
602
+ const channelW = Math.min(2.0, (9.0 - 0.2 * (channelCount - 1)) / channelCount);
603
+ const channelGap = channelCount > 1 ? (9.0 - channelW * channelCount) / (channelCount - 1) : 0;
604
+ d.externalChannels.forEach((ch, i) => {
605
+ const x = 0.5 + i * (channelW + channelGap);
606
+ slide.addShape("rect", {
607
+ x,
608
+ y: 1.5,
609
+ w: channelW,
610
+ h: boxH,
611
+ fill: { color: COLORS.lightTeal },
612
+ line: { color: COLORS.teal, width: 1 },
613
+ });
614
+ slide.addText(ch.name, {
615
+ x,
616
+ y: 1.5,
617
+ w: channelW,
618
+ h: boxH,
619
+ fontSize: 10,
620
+ fontFace: FONT.body,
621
+ color: COLORS.black,
622
+ align: "center",
623
+ valign: "middle",
624
+ });
625
+ });
626
+
627
+ // 接続ラベル
628
+ slide.addText("API", {
629
+ x: 4.0,
630
+ y: 2.05,
631
+ w: 1.0,
632
+ h: 0.3,
633
+ fontSize: 9,
634
+ fontFace: FONT.body,
635
+ color: COLORS.gray,
636
+ align: "center",
637
+ });
638
+
639
+ // 中央: メインシステム
640
+ slide.addShape("rect", {
641
+ x: 0.5,
642
+ y: 2.5,
643
+ w: 9.0,
644
+ h: 2.8,
645
+ fill: { color: "F8F8FF" },
646
+ line: { color: COLORS.darkBlue, width: 2 },
647
+ });
648
+ slide.addText(d.systemName, {
649
+ x: 0.5,
650
+ y: 2.5,
651
+ w: 9.0,
652
+ h: 0.4,
653
+ fontSize: 12,
654
+ fontFace: FONT.body,
655
+ bold: true,
656
+ color: COLORS.darkBlue,
657
+ align: "center",
658
+ });
659
+
660
+ // 内部モジュール
661
+ d.modules.forEach((name, i) => {
662
+ const row = Math.floor(i / 4);
663
+ const col = i % 4;
664
+ slide.addShape("roundRect", {
665
+ x: 0.8 + col * 2.15,
666
+ y: 3.0 + row * 0.7,
667
+ w: 1.95,
668
+ h: 0.55,
669
+ fill: { color: COLORS.darkBlue },
670
+ rectRadius: 0.05,
671
+ });
672
+ slide.addText(name, {
673
+ x: 0.8 + col * 2.15,
674
+ y: 3.0 + row * 0.7,
675
+ w: 1.95,
676
+ h: 0.55,
677
+ fontSize: 10,
678
+ fontFace: FONT.body,
679
+ color: COLORS.white,
680
+ align: "center",
681
+ valign: "middle",
682
+ });
683
+ });
684
+
685
+ // 下部: 外部連携先
686
+ const svcCount = d.externalServices.length;
687
+ const svcW = Math.min(2.0, (9.0 - 0.2 * (svcCount - 1)) / svcCount);
688
+ const svcGap = svcCount > 1 ? (9.0 - svcW * svcCount) / (svcCount - 1) : 0;
689
+ d.externalServices.forEach((svc, i) => {
690
+ const x = 0.5 + i * (svcW + svcGap);
691
+ slide.addShape("rect", {
692
+ x,
693
+ y: 5.6,
694
+ w: svcW,
695
+ h: boxH,
696
+ fill: { color: "FFF3E0" },
697
+ line: { color: COLORS.orange, width: 1 },
698
+ });
699
+ slide.addText(svc.name, {
700
+ x,
701
+ y: 5.6,
702
+ w: svcW,
703
+ h: boxH,
704
+ fontSize: 10,
705
+ fontFace: FONT.body,
706
+ color: COLORS.black,
707
+ align: "center",
708
+ valign: "middle",
709
+ });
710
+ });
711
+
712
+ // 技術方針ノート
713
+ slide.addText(d.techNote, {
714
+ x: 0.5,
715
+ y: 6.4,
716
+ w: 9.0,
717
+ h: 0.4,
718
+ fontSize: 10,
719
+ fontFace: FONT.body,
720
+ color: COLORS.gray,
721
+ align: "center",
722
+ });
723
+ }
724
+
725
+ // ─── Slide 8: 夜も眠れなくなるような問題 ───
726
+ {
727
+ const d = SLIDE_DATA.risks;
728
+ const slide = pptx.addSlide();
729
+ addTitle(slide, "夜も眠れなくなるような問題は何だろう?");
730
+ addTable(
731
+ slide,
732
+ ["#", "リスク", "影響度", "対策"],
733
+ d.rows,
734
+ { colW: [0.4, 3.0, 0.8, 4.8] }
735
+ );
736
+ }
737
+
738
+ // ─── Slide 9: 俺たちの "A チーム" ───
739
+ {
740
+ const d = SLIDE_DATA.team;
741
+ const slide = pptx.addSlide();
742
+ addTitle(slide, '俺たちの "A チーム"');
743
+ addTable(
744
+ slide,
745
+ ["役割", "人数", "備考"],
746
+ d.rows,
747
+ { y: 1.8, colW: [2.5, 1.5, 5.0] }
748
+ );
749
+ addHighlightBox(slide, d.highlight, { y: 4.0, h: 0.8, fontSize: 14 });
750
+ }
751
+
752
+ // ─── Slide 10: 期間を見極める ───
753
+ {
754
+ const d = SLIDE_DATA.timeline;
755
+ const slide = pptx.addSlide();
756
+ addTitle(slide, "期間を見極める");
757
+
758
+ const barStartX = 0.5;
759
+ const barMaxW = 9.0;
760
+ const phaseWeeks = d.phases.map((p) => p.weeks);
761
+
762
+ d.phases.forEach((phase, i) => {
763
+ const y = 1.8 + i * 1.0;
764
+ const startWeek = phaseWeeks.slice(0, i).reduce((a, b) => a + b, 0);
765
+ const x = barStartX + (startWeek / d.totalWeeks) * barMaxW;
766
+ const w = (phaseWeeks[i] / d.totalWeeks) * barMaxW;
767
+ const fillColor = i % 2 === 0 ? COLORS.lightTeal : COLORS.teal;
768
+
769
+ slide.addShape("rect", {
770
+ x,
771
+ y,
772
+ w,
773
+ h: 0.45,
774
+ fill: { color: fillColor },
775
+ line: { color: COLORS.teal, width: 1 },
776
+ });
777
+ slide.addText(phase.name, {
778
+ x,
779
+ y,
780
+ w,
781
+ h: 0.45,
782
+ fontSize: 10,
783
+ fontFace: FONT.body,
784
+ bold: true,
785
+ color: COLORS.darkBlue,
786
+ align: "center",
787
+ valign: "middle",
788
+ });
789
+ slide.addText(`${phase.desc}(${phase.weeksLabel})`, {
790
+ x,
791
+ y: y + 0.45,
792
+ w,
793
+ h: 0.35,
794
+ fontSize: 8,
795
+ fontFace: FONT.body,
796
+ color: COLORS.gray,
797
+ align: "center",
798
+ });
799
+ });
800
+
801
+ // MVP マーカー
802
+ if (d.mvpAfterPhase != null) {
803
+ const mvpWeeks = phaseWeeks
804
+ .slice(0, d.mvpAfterPhase + 1)
805
+ .reduce((a, b) => a + b, 0);
806
+ const mvpX = barStartX + (mvpWeeks / d.totalWeeks) * barMaxW;
807
+ slide.addShape("line", {
808
+ x: mvpX,
809
+ y: 1.5,
810
+ w: 0,
811
+ h: 5.0,
812
+ line: { color: COLORS.red, width: 2, dashType: "dash" },
813
+ });
814
+ slide.addText("MVP\nリリース", {
815
+ x: mvpX - 0.5,
816
+ y: 6.5,
817
+ w: 1.2,
818
+ h: 0.5,
819
+ fontSize: 10,
820
+ fontFace: FONT.body,
821
+ bold: true,
822
+ color: COLORS.red,
823
+ align: "center",
824
+ });
825
+ }
826
+
827
+ slide.addText("あくまで推測であって、確約するものではありません。", {
828
+ x: 0.5,
829
+ y: 7.0,
830
+ w: 9.0,
831
+ h: 0.3,
832
+ fontSize: 9,
833
+ fontFace: FONT.body,
834
+ color: COLORS.gray,
835
+ align: "right",
836
+ });
837
+ }
838
+
839
+ // ─── Slide 11: トレードオフ・スライダー ───
840
+ {
841
+ const d = SLIDE_DATA.tradeoffs;
842
+ const slide = pptx.addSlide();
843
+ addTitle(slide, "トレードオフ・スライダー");
844
+
845
+ d.sliders.forEach((s, i) => {
846
+ addSliderBar(slide, s.label, s.level, 1.8 + i * 0.7);
847
+ });
848
+
849
+ const qualityY = 1.8 + d.sliders.length * 0.7 + 0.3;
850
+ slide.addText("品質特性の優先順位", {
851
+ x: 0.5,
852
+ y: qualityY,
853
+ w: 9.0,
854
+ h: 0.4,
855
+ fontSize: 14,
856
+ fontFace: FONT.body,
857
+ bold: true,
858
+ color: COLORS.darkBlue,
859
+ });
860
+
861
+ addTable(
862
+ slide,
863
+ ["優先度", "品質特性", "理由"],
864
+ d.qualityPriorities,
865
+ { y: qualityY + 0.4, colW: [0.8, 1.8, 6.4] }
866
+ );
867
+ }
868
+
869
+ // ─── Slide 12: 初回のリリースに必要なもの ───
870
+ {
871
+ const d = SLIDE_DATA.initialRelease;
872
+ const slide = pptx.addSlide();
873
+ addTitle(slide, "初回のリリースに必要なもの");
874
+
875
+ addHighlightBox(slide, d.highlight, { y: 1.5, h: 0.7, fontSize: 16 });
876
+
877
+ slide.addText("MVP スコープ", {
878
+ x: 0.5,
879
+ y: 2.5,
880
+ w: 9.0,
881
+ h: 0.4,
882
+ fontSize: 14,
883
+ fontFace: FONT.body,
884
+ bold: true,
885
+ color: COLORS.darkBlue,
886
+ });
887
+
888
+ addBullets(slide, d.mvpScope, { y: 2.9, h: 2.5, fontSize: 13 });
889
+
890
+ slide.addText("リリース戦略", {
891
+ x: 0.5,
892
+ y: 5.2,
893
+ w: 9.0,
894
+ h: 0.4,
895
+ fontSize: 14,
896
+ fontFace: FONT.body,
897
+ bold: true,
898
+ color: COLORS.darkBlue,
899
+ });
900
+
901
+ addBullets(slide, d.releaseStrategy, { y: 5.6, h: 1.5, fontSize: 12 });
902
+ }
903
+
904
+ // ─── 保存 ───
905
+ const outputPath = resolve(`docs/analysis/slide/${meta.outputFileName}`);
906
+ const dataBuffer = await pptx.write({ outputType: "nodebuffer" });
907
+ writeFileSync(outputPath, dataBuffer);
908
+ console.log("Generated:", outputPath);
909
+ }
910
+
911
+ main().catch(console.error);