@k2works/claude-code-booster 4.15.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (758) hide show
  1. package/README.md +19 -0
  2. package/lib/assets/.claude/skills/apply-okf/SKILL.md +88 -0
  3. package/lib/assets/.claude/skills/apply-okf/evals/evals.json +8 -0
  4. package/lib/assets/.claude/skills/apply-okf/scripts/__pycache__/okf_apply.cpython-314.pyc +0 -0
  5. package/lib/assets/.claude/skills/apply-okf/scripts/okf_apply.py +397 -0
  6. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +20 -0
  7. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +13 -0
  8. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +14 -0
  9. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +39 -0
  10. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  11. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
  12. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/index.md +4 -0
  13. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/data-model.md +12 -0
  14. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/index.md +3 -0
  15. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +10 -0
  16. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +7 -0
  17. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  18. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  19. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/index.md +4 -0
  20. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  21. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +76 -0
  22. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +39 -0
  23. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  24. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
  25. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/index.md +4 -0
  26. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/data-model.md +12 -0
  27. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/index.md +3 -0
  28. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +10 -0
  29. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +7 -0
  30. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  31. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  32. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/index.md +4 -0
  33. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  34. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +22 -0
  35. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +13 -0
  36. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +34 -0
  37. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  38. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  39. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
  40. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/data-model.md +14 -0
  41. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/index.md +3 -0
  42. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +10 -0
  43. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +7 -0
  44. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  45. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  46. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/index.md +4 -0
  47. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  48. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +61 -0
  49. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +34 -0
  50. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  51. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  52. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
  53. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/data-model.md +13 -0
  54. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/index.md +3 -0
  55. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +10 -0
  56. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +7 -0
  57. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  58. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  59. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
  60. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  61. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +18 -0
  62. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +13 -0
  63. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +34 -0
  64. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  65. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  66. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
  67. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/data-model.md +12 -0
  68. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/index.md +3 -0
  69. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +10 -0
  70. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +7 -0
  71. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy-old.md +13 -0
  72. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  73. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/index.md +7 -0
  74. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  75. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +83 -0
  76. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +34 -0
  77. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  78. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  79. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
  80. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/data-model.md +12 -0
  81. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/index.md +3 -0
  82. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +10 -0
  83. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +7 -0
  84. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy-old.md +14 -0
  85. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  86. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
  87. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  88. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +15 -0
  89. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +1325 -0
  90. package/lib/assets/.claude/skills/closing-iteration/SKILL.md +16 -0
  91. package/lib/assets/.claude/skills/creating-adr/SKILL.md +4 -0
  92. package/lib/assets/.claude/skills/creating-journal/SKILL.md +12 -1
  93. package/lib/assets/.claude/skills/creating-manual/SKILL.md +199 -199
  94. package/lib/assets/.claude/skills/migrating-okf/SKILL.md +149 -0
  95. package/lib/assets/.claude/skills/migrating-okf/evals/evals.json +23 -0
  96. package/lib/assets/.claude/skills/migrating-okf/scripts/__pycache__/okf_check.cpython-314.pyc +0 -0
  97. package/lib/assets/.claude/skills/migrating-okf/scripts/okf_check.py +468 -0
  98. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +20 -0
  99. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +13 -0
  100. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +15 -0
  101. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +44 -0
  102. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +10 -0
  103. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +15 -0
  104. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +5 -0
  105. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +966 -0
  106. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +6 -0
  107. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/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 +261 -0
  108. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +480 -0
  109. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/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 +681 -0
  110. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +85 -0
  111. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +44 -0
  112. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +8 -0
  113. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +11 -0
  114. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +7 -0
  115. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +964 -0
  116. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +9 -0
  117. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/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 -0
  118. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +469 -0
  119. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/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 +677 -0
  120. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +49 -0
  121. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +13 -0
  122. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +34 -0
  123. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/index.md +7 -0
  124. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/log.md +7 -0
  125. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/churn.md +9 -0
  126. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/income-statement.md +15 -0
  127. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +147 -0
  128. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/review.html +1325 -0
  129. package/lib/assets/.claude/skills/opening-iteration/SKILL.md +15 -0
  130. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +4 -1
  131. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +2 -0
  132. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +3 -1
  133. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +4 -1
  134. package/lib/assets/.claude/skills/planning-releases/SKILL.md +2 -0
  135. package/lib/assets/.env.example +9 -0
  136. package/lib/assets/AGENTS.md +8 -0
  137. package/lib/assets/CLAUDE.md +218 -201
  138. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +9 -0
  139. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +9 -0
  140. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +9 -0
  141. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +9 -0
  142. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +9 -0
  143. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +9 -0
  144. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +9 -0
  145. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +10 -1
  146. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +9 -0
  147. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +9 -0
  148. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +9 -0
  149. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +9 -0
  150. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +9 -0
  151. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +9 -0
  152. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +9 -0
  153. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +9 -0
  154. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +9 -0
  155. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +9 -0
  156. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +10 -1
  157. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +9 -0
  158. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +9 -0
  159. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +9 -0
  160. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +9 -0
  161. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +9 -0
  162. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +9 -0
  163. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +9 -0
  164. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +9 -0
  165. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +9 -0
  166. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +9 -0
  167. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +9 -0
  168. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +9 -0
  169. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +9 -0
  170. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +9 -0
  171. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +9 -0
  172. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +9 -0
  173. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +9 -0
  174. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +9 -0
  175. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +9 -0
  176. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +9 -0
  177. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +9 -0
  178. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +9 -0
  179. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +9 -0
  180. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +9 -0
  181. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +9 -0
  182. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +3 -3
  183. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +9 -0
  184. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +9 -0
  185. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +9 -0
  186. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +9 -0
  187. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +9 -0
  188. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +9 -0
  189. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +9 -0
  190. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +9 -0
  191. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +9 -0
  192. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +9 -0
  193. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +9 -0
  194. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +9 -0
  195. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +9 -0
  196. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +9 -0
  197. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +9 -0
  198. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +9 -0
  199. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +9 -0
  200. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +9 -0
  201. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +9 -0
  202. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +9 -0
  203. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +9 -0
  204. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +9 -0
  205. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +22 -22
  206. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +9 -0
  207. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +9 -0
  208. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +9 -0
  209. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +9 -0
  210. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +9 -0
  211. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +9 -0
  212. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +9 -0
  213. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +9 -0
  214. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +9 -0
  215. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +9 -0
  216. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +9 -0
  217. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +9 -0
  218. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +9 -0
  219. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +9 -0
  220. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +9 -0
  221. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +9 -0
  222. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +9 -0
  223. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +9 -0
  224. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +9 -0
  225. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +9 -0
  226. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +9 -0
  227. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +9 -0
  228. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +9 -0
  229. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +9 -0
  230. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +9 -0
  231. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +9 -0
  232. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +9 -0
  233. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +9 -0
  234. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +9 -0
  235. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +9 -0
  236. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +9 -0
  237. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +9 -0
  238. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +9 -0
  239. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +9 -0
  240. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +9 -0
  241. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +9 -0
  242. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +9 -0
  243. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +9 -0
  244. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +9 -0
  245. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +9 -0
  246. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +9 -0
  247. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +9 -0
  248. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +9 -0
  249. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +9 -0
  250. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +9 -0
  251. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +9 -0
  252. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +9 -0
  253. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +9 -0
  254. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +9 -0
  255. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +9 -0
  256. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +9 -0
  257. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +9 -0
  258. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +9 -0
  259. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +9 -0
  260. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +9 -0
  261. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +9 -0
  262. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +9 -0
  263. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +9 -0
  264. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +9 -0
  265. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +9 -0
  266. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +9 -0
  267. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +9 -0
  268. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +9 -0
  269. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +9 -0
  270. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +9 -0
  271. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +9 -0
  272. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +9 -0
  273. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +9 -0
  274. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +9 -0
  275. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +9 -0
  276. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +9 -0
  277. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +9 -0
  278. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +9 -0
  279. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +9 -0
  280. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +9 -0
  281. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +9 -0
  282. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +9 -0
  283. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +9 -0
  284. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +9 -0
  285. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +9 -0
  286. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +9 -0
  287. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +9 -0
  288. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +9 -0
  289. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +9 -0
  290. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +9 -0
  291. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +9 -0
  292. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +9 -0
  293. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +9 -0
  294. package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md +341 -332
  295. package/lib/assets/docs/article/getting-start-docker-kubernetes/02-container-deployment.md +785 -776
  296. package/lib/assets/docs/article/getting-start-docker-kubernetes/03-practical-container-build-deploy.md +466 -457
  297. package/lib/assets/docs/article/getting-start-docker-kubernetes/04-multi-container-application.md +878 -869
  298. package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md +585 -576
  299. package/lib/assets/docs/article/getting-start-docker-kubernetes/06-kubernetes-deploy-cluster.md +620 -611
  300. package/lib/assets/docs/article/getting-start-docker-kubernetes/07-kubernetes-advanced.md +621 -612
  301. package/lib/assets/docs/article/getting-start-docker-kubernetes/08-kubernetes-packaging.md +518 -509
  302. package/lib/assets/docs/article/getting-start-docker-kubernetes/09-container-operations.md +546 -537
  303. package/lib/assets/docs/article/getting-start-docker-kubernetes/10-optimal-container-image.md +640 -631
  304. package/lib/assets/docs/article/getting-start-docker-kubernetes/11-continuous-delivery.md +607 -598
  305. package/lib/assets/docs/article/getting-start-docker-kubernetes/12-container-use-cases.md +463 -454
  306. package/lib/assets/docs/article/getting-start-docker-kubernetes/13-case-monolith-compose-vs-kustomize.md +346 -337
  307. package/lib/assets/docs/article/getting-start-docker-kubernetes/14-case-event-driven-kustomize-vs-helm.md +324 -315
  308. package/lib/assets/docs/article/getting-start-docker-kubernetes/15-case-escqrs-axon-kustomize-vs-helm.md +297 -288
  309. package/lib/assets/docs/article/getting-start-docker-kubernetes/16-case-escqrs-kafka-kustomize-vs-helm.md +256 -247
  310. package/lib/assets/docs/article/getting-start-docker-kubernetes/17-case-comparison-summary.md +141 -132
  311. package/lib/assets/docs/article/getting-start-docker-kubernetes/18-case-load-testing.md +303 -294
  312. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-a-dev-tools-setup.md +274 -265
  313. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-b-orchestration-environments.md +530 -521
  314. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-c-tips.md +519 -510
  315. package/lib/assets/docs/article/getting-start-docker-kubernetes/outline.md +220 -211
  316. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +9 -0
  317. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +9 -0
  318. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +9 -0
  319. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +9 -0
  320. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +9 -0
  321. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +9 -0
  322. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +9 -0
  323. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +9 -0
  324. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +9 -0
  325. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +9 -0
  326. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +9 -0
  327. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +9 -0
  328. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +9 -0
  329. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +9 -0
  330. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +9 -0
  331. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +9 -0
  332. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +9 -0
  333. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +9 -0
  334. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +9 -0
  335. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +9 -0
  336. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +9 -0
  337. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +9 -0
  338. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +9 -0
  339. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +9 -0
  340. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +9 -0
  341. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +9 -0
  342. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +9 -0
  343. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +9 -0
  344. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +9 -0
  345. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +9 -0
  346. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +9 -0
  347. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +9 -0
  348. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +9 -0
  349. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +9 -0
  350. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +9 -0
  351. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +9 -0
  352. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +2 -2
  353. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +9 -0
  354. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +9 -0
  355. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +9 -0
  356. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +9 -0
  357. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +9 -0
  358. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +9 -0
  359. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +9 -0
  360. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +9 -0
  361. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +9 -0
  362. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +9 -0
  363. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +9 -0
  364. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +9 -0
  365. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +9 -0
  366. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +9 -0
  367. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +9 -0
  368. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +9 -0
  369. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +9 -0
  370. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +9 -0
  371. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +8 -0
  372. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +8 -0
  373. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +8 -0
  374. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +8 -0
  375. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +8 -0
  376. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +8 -0
  377. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +9 -0
  378. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +9 -0
  379. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +9 -0
  380. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +9 -0
  381. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +9 -0
  382. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +9 -0
  383. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +9 -0
  384. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +9 -0
  385. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +9 -0
  386. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +9 -0
  387. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +9 -0
  388. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +9 -0
  389. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +9 -0
  390. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +9 -0
  391. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +9 -0
  392. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +9 -0
  393. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +9 -0
  394. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +9 -0
  395. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +9 -0
  396. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +9 -0
  397. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +9 -0
  398. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +9 -0
  399. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +9 -0
  400. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +9 -0
  401. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +9 -0
  402. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +9 -0
  403. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +9 -0
  404. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +9 -0
  405. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +9 -0
  406. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +9 -0
  407. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +9 -0
  408. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +9 -0
  409. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +9 -0
  410. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +9 -0
  411. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +9 -0
  412. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +9 -0
  413. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +9 -0
  414. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +9 -0
  415. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +9 -0
  416. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +9 -0
  417. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +9 -0
  418. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +9 -0
  419. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +9 -0
  420. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +9 -0
  421. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +9 -0
  422. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +9 -0
  423. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +9 -0
  424. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +9 -0
  425. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +8 -0
  426. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +8 -0
  427. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +8 -0
  428. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +8 -0
  429. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +8 -0
  430. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +8 -0
  431. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +9 -0
  432. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +9 -0
  433. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +9 -0
  434. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +9 -0
  435. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +9 -0
  436. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +9 -0
  437. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +9 -0
  438. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +9 -0
  439. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +9 -0
  440. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +9 -0
  441. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +9 -0
  442. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +9 -0
  443. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +9 -0
  444. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +9 -0
  445. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +9 -0
  446. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +9 -0
  447. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +9 -0
  448. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +9 -0
  449. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +9 -0
  450. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +9 -0
  451. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +9 -0
  452. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +9 -0
  453. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +9 -0
  454. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +9 -0
  455. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +9 -0
  456. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +9 -0
  457. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +9 -0
  458. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +9 -0
  459. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +9 -0
  460. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +9 -0
  461. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +9 -0
  462. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +9 -0
  463. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +9 -0
  464. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +9 -0
  465. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +9 -0
  466. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +9 -0
  467. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +9 -0
  468. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +9 -0
  469. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +9 -0
  470. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +9 -0
  471. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +9 -0
  472. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +9 -0
  473. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +9 -0
  474. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +9 -0
  475. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +9 -0
  476. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +9 -0
  477. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +9 -0
  478. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +9 -0
  479. package/lib/assets/docs/article/grokking-concurrency/all/index.md +0 -1
  480. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +9 -0
  481. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +9 -0
  482. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +9 -0
  483. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +9 -0
  484. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +9 -0
  485. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +9 -0
  486. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +9 -0
  487. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +9 -0
  488. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +0 -10
  489. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +6 -7
  490. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +6 -7
  491. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +6 -7
  492. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +6 -7
  493. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +6 -7
  494. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +6 -7
  495. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +6 -7
  496. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +6 -7
  497. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +0 -10
  498. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +6 -7
  499. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +6 -7
  500. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +6 -7
  501. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +6 -7
  502. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +6 -7
  503. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +6 -7
  504. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +6 -7
  505. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +6 -7
  506. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +0 -10
  507. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +6 -7
  508. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +6 -7
  509. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +6 -7
  510. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +6 -7
  511. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +6 -7
  512. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +6 -7
  513. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +6 -7
  514. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +6 -7
  515. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +0 -10
  516. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +6 -7
  517. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +6 -7
  518. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +6 -7
  519. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +6 -7
  520. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +6 -7
  521. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +6 -7
  522. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +6 -7
  523. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +6 -7
  524. package/lib/assets/docs/article/grokking-concurrency/java/index.md +0 -10
  525. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +8 -9
  526. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +8 -9
  527. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +7 -8
  528. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +8 -9
  529. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +7 -8
  530. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +6 -7
  531. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +6 -7
  532. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +6 -7
  533. package/lib/assets/docs/article/grokking-concurrency/python/index.md +0 -10
  534. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +7 -8
  535. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +10 -11
  536. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +8 -9
  537. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +8 -9
  538. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +9 -10
  539. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +9 -10
  540. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +9 -10
  541. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +8 -9
  542. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +0 -10
  543. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +6 -7
  544. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +6 -7
  545. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +6 -7
  546. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +6 -7
  547. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +6 -7
  548. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +6 -7
  549. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +6 -7
  550. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +6 -7
  551. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +0 -10
  552. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +6 -7
  553. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +6 -7
  554. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +6 -7
  555. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +6 -7
  556. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +6 -7
  557. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +6 -7
  558. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +6 -7
  559. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +6 -7
  560. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +9 -0
  561. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +9 -0
  562. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +9 -0
  563. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +9 -0
  564. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +9 -0
  565. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +9 -0
  566. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +9 -0
  567. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +9 -0
  568. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +9 -0
  569. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +9 -0
  570. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +9 -0
  571. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +9 -0
  572. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +9 -0
  573. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +9 -0
  574. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +9 -0
  575. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +9 -0
  576. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +9 -0
  577. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +9 -0
  578. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +9 -0
  579. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +9 -0
  580. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +9 -0
  581. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +9 -0
  582. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +9 -0
  583. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +9 -0
  584. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +9 -0
  585. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +9 -0
  586. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +9 -0
  587. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +9 -0
  588. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +9 -0
  589. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +9 -0
  590. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +9 -0
  591. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +9 -0
  592. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +9 -0
  593. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +9 -0
  594. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +9 -0
  595. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +9 -0
  596. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +9 -0
  597. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +9 -0
  598. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +9 -0
  599. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +9 -0
  600. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +9 -0
  601. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +9 -0
  602. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +9 -0
  603. package/lib/assets/docs/article/grokkingfp/java/part-1.md +9 -0
  604. package/lib/assets/docs/article/grokkingfp/java/part-2.md +9 -0
  605. package/lib/assets/docs/article/grokkingfp/java/part-3.md +9 -0
  606. package/lib/assets/docs/article/grokkingfp/java/part-4.md +9 -0
  607. package/lib/assets/docs/article/grokkingfp/java/part-5.md +9 -0
  608. package/lib/assets/docs/article/grokkingfp/java/part-6.md +9 -0
  609. package/lib/assets/docs/article/grokkingfp/python/part-1.md +9 -0
  610. package/lib/assets/docs/article/grokkingfp/python/part-2.md +9 -0
  611. package/lib/assets/docs/article/grokkingfp/python/part-3.md +9 -0
  612. package/lib/assets/docs/article/grokkingfp/python/part-4.md +9 -0
  613. package/lib/assets/docs/article/grokkingfp/python/part-5.md +9 -0
  614. package/lib/assets/docs/article/grokkingfp/python/part-6.md +9 -0
  615. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +9 -0
  616. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +9 -0
  617. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +9 -0
  618. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +9 -0
  619. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +9 -0
  620. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +9 -0
  621. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +9 -0
  622. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +9 -0
  623. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +9 -0
  624. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +9 -0
  625. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +9 -0
  626. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +9 -0
  627. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +9 -0
  628. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +9 -0
  629. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +9 -0
  630. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +9 -0
  631. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +9 -0
  632. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +9 -0
  633. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +9 -0
  634. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +9 -0
  635. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +9 -0
  636. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +9 -0
  637. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +9 -0
  638. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +9 -0
  639. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +9 -0
  640. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +9 -0
  641. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +9 -0
  642. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +9 -0
  643. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +9 -0
  644. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +9 -0
  645. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +9 -0
  646. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +9 -0
  647. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +9 -0
  648. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +9 -0
  649. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +9 -0
  650. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +9 -0
  651. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +9 -0
  652. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +9 -0
  653. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +9 -0
  654. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +9 -0
  655. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +9 -0
  656. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +9 -0
  657. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +9 -0
  658. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +9 -0
  659. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +9 -0
  660. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +9 -0
  661. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +9 -0
  662. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +9 -0
  663. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +9 -0
  664. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +9 -0
  665. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +9 -0
  666. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +9 -0
  667. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +9 -0
  668. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +9 -0
  669. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +9 -0
  670. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +9 -0
  671. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +9 -0
  672. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +9 -0
  673. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +9 -0
  674. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +9 -0
  675. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +9 -0
  676. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +8 -0
  677. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +8 -0
  678. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +8 -0
  679. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +8 -0
  680. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +9 -0
  681. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +9 -0
  682. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +9 -0
  683. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +9 -0
  684. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +9 -0
  685. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +9 -0
  686. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +9 -0
  687. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +9 -0
  688. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +9 -0
  689. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +9 -0
  690. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +9 -0
  691. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +9 -0
  692. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +9 -0
  693. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +9 -0
  694. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +9 -0
  695. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +9 -0
  696. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +9 -0
  697. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +9 -0
  698. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +9 -0
  699. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +9 -0
  700. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +9 -0
  701. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +9 -0
  702. package/lib/assets/docs/index.md +4 -0
  703. package/lib/assets/docs/log.md +5 -0
  704. package/lib/assets/docs/operation/index.md +15 -1
  705. 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 +13 -4
  706. 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 +10 -0
  707. 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 +11 -1
  708. package/lib/assets/docs/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  709. 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 +10 -0
  710. 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 +11 -1
  711. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
  712. package/lib/assets/docs/reference/Vim/346/223/215/344/275/234/343/203/236/343/203/213/343/203/245/343/202/242/343/203/253.md +177 -168
  713. package/lib/assets/docs/reference/index.md +54 -53
  714. 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 +7 -8
  715. 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 +10 -1
  716. 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 +10 -1
  717. 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 +6 -7
  718. 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 +10 -1
  719. 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 +10 -1
  720. 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 +10 -1
  721. 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 +10 -1
  722. 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 +9 -0
  723. 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 +10 -1
  724. 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 +9 -0
  725. 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 +7 -8
  726. 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 +9 -0
  727. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +10 -1
  728. 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 +10 -0
  729. package/lib/assets/docs/reference//347/265/214/345/226/266/346/210/246/347/225/245/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +9 -0
  730. 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 +10 -1
  731. 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 +9 -0
  732. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +10 -1
  733. 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 +9 -0
  734. 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 +10 -1
  735. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +9 -0
  736. 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 +10 -1
  737. package/lib/assets/docs/template/ADR.md +9 -0
  738. 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 +9 -0
  739. 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 +9 -0
  740. package/lib/assets/docs/template/README.md +9 -0
  741. 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 +9 -0
  742. 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 +9 -0
  743. 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 +10 -1
  744. 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/350/250/210/347/224/273.md +11 -2
  745. 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 +9 -0
  746. 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 +9 -0
  747. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +9 -0
  748. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/350/250/210/347/224/273.md +289 -280
  749. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +9 -0
  750. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +9 -0
  751. 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 +7 -8
  752. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +7 -8
  753. package/lib/assets/docs/template//350/250/255/350/250/210.md +10 -1
  754. 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 +9 -0
  755. package/lib/assets/gulpfile.js +4 -2
  756. package/lib/assets/ops/scripts/okf.js +272 -0
  757. package/lib/assets/package.json +2 -0
  758. package/package.json +1 -1
@@ -0,0 +1,149 @@
1
+ ---
2
+ name: migrating-okf
3
+ description: プロジェクトドキュメント(docs/ 配下の要件定義・設計・運用手順・ADR など)を Open Knowledge Format(OKF)の知識バンドルに移行し、OKF 仕様のバージョンアップ(v0.1→v0.2 など)にも追従させる。移行は `docs/reference/OKF導入ガイド_V0.2.md` に準拠する。「ドキュメントを OKF に移行したい」「知識バンドルを作りたい」「Markdown にフロントマターを付けてエージェントが読める形にしたい」「OKF のバージョンを上げたい」「timestamp を generated に置き換えたい」「OKF に適合しているか検証したい」「index.md / log.md を整備したい」「エージェント向けのナレッジベースを整備したい」といった場面で必ず発動する。既存ドキュメントに来歴(sources)・信頼(generated/verified)・ライフサイクル(status/stale_after)を付与する作業や、エージェントが生成した知識の検証状態を管理したい場面でも積極的に使うこと。
4
+ ---
5
+
6
+ # OKF 移行
7
+
8
+ プロジェクトの Markdown ドキュメントを OKF(Open Knowledge Format)の**知識バンドル**に移行し、仕様バージョンアップに追従させる。
9
+
10
+ 仕様の日本語リファレンスは `docs/reference/OKF導入ガイド_V0.2.md`。**作業前に必ず読む**。特に §4(コンセプト文書)・§5(来歴・信頼・ライフサイクル)・§11(適合性)・§13(バージョン間の変更点)・§14(導入手順)が本スキルの根拠になる。ガイドと本スキルが食い違う場合はガイドを正とする。
11
+
12
+ 同じディレクトリに `PROJECT.md` があれば必ず読む。バンドルの置き場所・対象ディレクトリ・既定の `generated.by`・除外パターンなど、プロジェクト固有の値はそこにある。
13
+
14
+ ## なぜ OKF に移行するのか
15
+
16
+ エージェントが繰り返し参照し、書き換えもする知識には「どこから来たか(来歴)」「誰が確認したか(信頼)」「まだ有効か(鮮度)」が要る。素の Markdown にはそれを置く場所がない。OKF は YAML フロントマターを持つ Markdown のディレクトリというだけの最小規約で、この 3 つを第一級にする。移行の本質はフォーマット変換ではなく、**各文書に「信頼してよい根拠」を持たせること**である。
17
+
18
+ ## モード
19
+
20
+ | モード | 用途 |
21
+ | :--- | :--- |
22
+ | `--plan` | 対象文書を棚卸しし、バンドル構造と `type` 割り当て案を提示する。ファイルは変更しない |
23
+ | `--migrate` | 文書に OKF フロントマターを付与し、`index.md`・`log.md` を整備する(既定) |
24
+ | `--upgrade <version>` | 既存バンドルを指定バージョンの仕様に追従させる(例: `--upgrade 0.2`) |
25
+ | `--check` | バンドルの適合性を検証し、違反と警告を報告する |
26
+
27
+ 指定がなければ、バンドルが未作成なら `--plan` → 確認 → `--migrate`、作成済みなら `--check` から始める。
28
+
29
+ ## 進め方
30
+
31
+ ### 1. 棚卸し(`--plan`)
32
+
33
+ 1. 対象ディレクトリ(既定 `docs/`。`PROJECT.md` で上書き可)の `.md` を列挙する
34
+ 2. 各文書を読み、次を判断する
35
+ - **コンセプトにするか除外するか**。`index.md`・`log.md` は予約名なのでコンセプトにできない。テンプレート(`docs/template/`)や一時的なジャーナルは通常除外する
36
+ - **`type`**。既存ディレクトリから素直に導く(例: `docs/adr/` → `ADR`、`docs/design/` → `Design`、`docs/operation/` → `Playbook`、`docs/reference/` → `Reference`)。中央登録はないので、説明的で一貫した値を選ぶことだけが要件
37
+ - **`resource` の有無**。テーブル・API・ダッシュボードなど実在の資産を説明する文書だけに付ける
38
+ 3. バンドル構造案を提示する。**既存ディレクトリ構造を尊重する**(移動はリンク切れと git 履歴の断絶を招く)。ガイド §14.2 の骨格はあくまで新規作成時の例
39
+ 4. 提案を表にまとめ、ユーザーの確認を得てから `--migrate` に進む
40
+
41
+ ### 2. 移行(`--migrate`)
42
+
43
+ 各コンセプト文書に対して:
44
+
45
+ 1. **フロントマターを付与する**。既存の見出し・本文はそのまま残す
46
+ - `type`(必須)、`title`(既存の `# 見出し` から)、`description`(本文冒頭から 1 文に要約。無ければ書く)、`tags`
47
+ - `generated: { by, at }`。`generated` は「**今の本文を誰がいつ書いたか**」を表す。フロントマターを付けただけで本文を変えていないなら、書いた人は変わっていないので、git log の著者から `human:<id>`、`at` は本文を最後に変えたコミットの日時にする。本文を書き換えた(要約を書き足した、構造化のため再構成した)なら本作業のエージェント(例: `claude-code/claude-fable-5`)と現在時刻。著者が git から辿れない(履歴が浅い、インポートされた文書)なら `generated` を省略し、レポートの要確認に載せる。移行しただけの文書にエージェントを著者として書くと、来歴が嘘になる
48
+ - 既存のフロントマター(Wiki.js の `dateCreated`/`editor`/`published`、Jekyll の `layout` など)があれば**併合**する。意味が対応するキーは OKF に写し(`dateCreated` → `generated.at`)、ツール固有で意味を失うキーは削除し、削除したことをレポートに書く。判断がつかないキーは残す(未知キーは仕様上有効)
49
+ - `status`。レビュー済みの安定文書は `stable`(省略可)、WIP は `draft`、置き換え済みは `deprecated`
50
+ - `sources`。文書が根拠にしている外部資料・上流文書(要件定義→設計など)があれば登録し、`id` を付ける。本文中で根拠を示す箇所は `[^id]` 脚注に変える
51
+ - `stale_after` は「定期的に見直すべき」文書(環境手順・技術スタック)にだけ付ける。全文書に一律付けると陳腐化警告がノイズになる
52
+ 2. **リンクをバンドル相対(`/` 始まり)に揃える**。既存の相対リンクが壊れていなければ無理に変えなくてよい(相対も仕様上有効)
53
+ 3. **本文を構造化する**。慣習見出し(`# Schema`・`# Examples`)が適用できる箇所だけ合わせる。文章を書き換えて意味を変えない。本文に NBSP(U+00A0)や全角スペースが混じっていることがあるので、文字列一致で編集する前に該当行を実際に読む
54
+ 4. 各ディレクトリの `index.md` を生成・更新する。エントリにはフロントマターの `description` を反映する。バンドルルートの `index.md` のみ `okf_version: "0.2"` を持つフロントマターを置く
55
+ 5. バンドルルートの `log.md` に移行エントリを追記する(`## YYYY-MM-DD` 見出し、新しい日付が上)
56
+ 6. `scripts/okf_check.py --check` を実行し、違反ゼロを確認する
57
+
58
+ フロントマター付与の例:
59
+
60
+ **Input**(`docs/design/data-model.md` 冒頭)
61
+
62
+ ```markdown
63
+ # データモデル設計
64
+
65
+ 本ドキュメントは受注管理システムのデータモデルを定義する。要件定義書のユースケース一覧を基に...
66
+ ```
67
+
68
+ **Output**
69
+
70
+ ```markdown
71
+ ---
72
+ type: Design
73
+ title: データモデル設計
74
+ description: 受注管理システムの概念・論理データモデルとテーブル定義。
75
+ tags: [design, data-model]
76
+ status: stable
77
+ generated: { by: human:k2works, at: 2026-06-10T09:12:00Z } # 本文未変更なので git 著者と最終更新コミット
78
+ sources:
79
+ - id: requirements
80
+ resource: /requirements/requirements_definition.md
81
+ title: 要件定義書
82
+ ---
83
+
84
+ # データモデル設計
85
+
86
+ 本ドキュメントは受注管理システムのデータモデルを定義する。要件定義書のユースケース一覧を基に...[^requirements]
87
+
88
+ [^requirements]: 要件定義書
89
+ ```
90
+
91
+ ### 3. バージョンアップ(`--upgrade <version>`)
92
+
93
+ 仕様が改訂されたとき、既存バンドルを新バージョンに追従させる。
94
+
95
+ 1. バンドルルート `index.md` の `okf_version` で現在バージョンを確認する(無ければ v0.1 相当とみなす)
96
+ 2. ガイドの「vX.Y からの変更点」節(v0.2 なら §13)を読み、**破壊的変更**と**追加的変更**を分けて把握する
97
+ 3. 破壊的変更を機械的に適用する。v0.1→v0.2 は `scripts/okf_check.py --upgrade 0.2` が対応している
98
+ - `timestamp` → `generated: { by, at }`(`by` は git log の著者から推定。人なら `human:<id>`。推定できなければ `unknown/legacy` とし、レポートに列挙する)
99
+ - 本文 `# Citations` リスト → フロントマター `sources`
100
+ 4. 追加的変更は「付けられるところだけ」付ける。無いことも仕様上有効なので、根拠の無いフィールドを埋めるためにでっち上げない
101
+ 5. `okf_version` を更新し、`log.md` に **Upgrade** エントリを追記する
102
+ 6. `--check` で違反ゼロを確認する
103
+
104
+ 将来のバージョン(v0.3 以降)でスクリプトが未対応なら、ガイドの変更点節を読んで変換規則を洗い出し、スクリプトに変換を追加してから適用する。手作業で全文書を直さない。
105
+
106
+ ### 4. 検証(`--check`)
107
+
108
+ ```bash
109
+ python .claude/skills/migrating-okf/scripts/okf_check.py --check <バンドルルート>
110
+ ```
111
+
112
+ 運用手順書に登録済みの Gulp タスク `gulp okf:check`(同じスクリプトを呼ぶ)でもよい。`gulp okf:help` に `okf:upgrade`・`okf:viz`(上流ツールでグラフ可視化)などの一覧がある。
113
+
114
+ 検証内容はガイド §11 に対応する。
115
+
116
+ | レベル | 内容 |
117
+ | :--- | :--- |
118
+ | ERROR | 予約名以外の `.md` にフロントマターが無い / `type` が空 / `index.md`(ルート以外)にフロントマターがある / `log.md` の日付見出しが `YYYY-MM-DD` でない |
119
+ | WARN | `generated` が無い / `generated.by` の形式がアクター規約に合わない / 脚注ラベルに対応する `sources[].id` が無い / タイムスタンプに UTC オフセットが無い / バンドル内リンク切れ / `stale_after` を過ぎている |
120
+
121
+ 検査はコードフェンスとインラインコードの中を無視する(仕様例のリンクや脚注を誤検知しないため)。ERROR は移行完了前に必ず解消する。WARN は仕様上は適合なので、内容を確認して意図的なら残してよい。リンク切れは「まだ書かれていない知識」でも有効だが、移行直後のリンク切れはたいてい単なるパス間違いなので直す。
122
+
123
+ ## 判断に迷いやすい点
124
+
125
+ - **`verified` を付けてよいのは、実際に人またはプロセスが内容を確認したときだけ。** 移行作業でエージェントが読んだだけでは `verified` にしない。信頼ティアの意味が壊れる
126
+ - **`description` は検索スニペットと `index.md` に使われる。** 「〜について記述したドキュメント」のような自己言及ではなく、中身を 1 文で言う
127
+ - **`type` の数は絞る。** ディレクトリごとに 1 つが目安。文書ごとに新しい型を発明すると消費側のルーティングが効かない
128
+ - **本文の意味を変えない。** 移行は構造の付与であって推敲ではない。内容の誤りに気づいたらレポートに書き、別作業にする
129
+ - **mkdocs との共存。** フロントマターは MkDocs でもメタデータとして無害に扱われる。`docs/index.md` は MkDocs のトップページでもあるので、OKF の `okf_version` フロントマターを追加しても既存本文は残す
130
+
131
+ ## 完了報告
132
+
133
+ `--migrate` / `--upgrade` の最後に次を報告する。
134
+
135
+ ```markdown
136
+ ## OKF 移行結果
137
+
138
+ - バンドル: <パス>(okf_version: <版>)
139
+ - コンセプト: <N> 件(type 別内訳)
140
+ - 除外: <N> 件(理由)
141
+ - 検証: ERROR 0 / WARN <N>
142
+ - 要確認: <generated.by を推定できなかった文書、リンク切れ、内容の疑義 など>
143
+ ```
144
+
145
+ ## 関連スキル
146
+
147
+ - `operating-docs` — `docs/index.md`・`mkdocs.yml` の更新と Markdown Lint
148
+ - `creating-adr` — ADR は `type: ADR` のコンセプトとして移行する
149
+ - `git-commit` — 移行後のコミット(ユーザーの指示があるまでコミットしない)
@@ -0,0 +1,23 @@
1
+ {
2
+ "skill_name": "migrating-okf",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "docs/ 配下の設計ドキュメントと ADR を OKF の知識バンドルに移行して。docs/reference/OKF導入ガイド_V0.2.md に沿ってやってほしい。まず案を見せてから実行して。",
7
+ "expected_output": "棚卸し表(type 割り当て)を提示後、各 .md に type/title/description/generated 等のフロントマターを付与し、index.md に okf_version、log.md に移行エントリを追加し、検証で ERROR 0 を報告する",
8
+ "files": []
9
+ },
10
+ {
11
+ "id": 2,
12
+ "prompt": "knowledge/ にある OKF バンドルが古い v0.1 形式(timestamp と # Citations を使っている)なので v0.2 に上げて。",
13
+ "expected_output": "timestamp を generated.at に、# Citations を sources に変換し、okf_version を 0.2 に更新、log.md に Upgrade エントリを追記、検証結果を報告する",
14
+ "files": []
15
+ },
16
+ {
17
+ "id": 3,
18
+ "prompt": "knowledge/ の OKF バンドルが仕様に適合しているかチェックして、問題があれば直して。",
19
+ "expected_output": "okf_check.py --check を実行し、ERROR を修正、WARN は内容を判断して報告する",
20
+ "files": []
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,468 @@
1
+ #!/usr/bin/env python3
2
+ """OKF バンドルの適合性検証とバージョンアップ。
3
+
4
+ 標準ライブラリのみで動作する(PyYAML 不要)。
5
+
6
+ 使い方:
7
+ python okf_check.py --check <bundle_root>
8
+ python okf_check.py --upgrade 0.2 <bundle_root> [--by <actor>] [--dry-run]
9
+
10
+ 検証(--check)はガイド §11 の適合条件を ERROR、§5〜§7 の推奨事項を WARN として報告する。
11
+ アップグレード(--upgrade)はガイド §13 の破壊的変更を機械的に適用する。
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import argparse
17
+ import datetime as dt
18
+ import re
19
+ import subprocess
20
+ import sys
21
+ from pathlib import Path
22
+
23
+ RESERVED = {"index.md", "log.md"}
24
+ ACTOR_RE = re.compile(r"^([A-Za-z_][\w-]*:[^\s]+|[^\s/]+/[^\s]+)$") # human:/process:/team: 等の <kind>:<id>、または <producer>/<version>
25
+ ISO_TZ_RE = re.compile(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$")
26
+ DATE_HEADING_RE = re.compile(r"^## (.+)$")
27
+ FOOTNOTE_REF_RE = re.compile(r"\[\^([^\]]+)\](?!:)")
28
+ LINK_RE = re.compile(r"(?<!\!)\[[^\]]*\]\(([^)\s]+)\)")
29
+ SUPPORTED_UPGRADES = {"0.2"}
30
+ FENCE_RE = re.compile(r"^[ \t]*(```|~~~)[^\n]*\n.*?^[ \t]*\1[ \t]*$", re.M | re.S)
31
+
32
+
33
+ def strip_fences(body: str) -> str:
34
+ """コードフェンスとインラインコードを除去する。例示リンク・脚注を検査対象から外すため。"""
35
+ body = FENCE_RE.sub("", body)
36
+ return re.sub(r"`[^`\n]*`", "", body) # インラインコードも除外
37
+
38
+
39
+ # --------------------------------------------------------------------------- #
40
+ # 最小 YAML パーサ(OKF フロントマターで使う範囲のみ)
41
+ # --------------------------------------------------------------------------- #
42
+
43
+ def _scalar(s: str):
44
+ s = s.strip()
45
+ if len(s) >= 2 and s[0] == s[-1] and s[0] in "'\"":
46
+ return s[1:-1]
47
+ if s.startswith("[") and s.endswith("]"):
48
+ inner = s[1:-1].strip()
49
+ return [_scalar(x) for x in _split_top(inner)] if inner else []
50
+ if s.startswith("{") and s.endswith("}"):
51
+ return _flow_map(s[1:-1])
52
+ return s
53
+
54
+
55
+ def _split_top(s: str) -> list[str]:
56
+ out, depth, cur, quote = [], 0, "", None
57
+ for ch in s:
58
+ if quote:
59
+ cur += ch
60
+ if ch == quote:
61
+ quote = None
62
+ continue
63
+ if ch in "'\"":
64
+ quote = ch
65
+ elif ch in "[{":
66
+ depth += 1
67
+ elif ch in "]}":
68
+ depth -= 1
69
+ if ch == "," and depth == 0:
70
+ out.append(cur)
71
+ cur = ""
72
+ else:
73
+ cur += ch
74
+ if cur.strip():
75
+ out.append(cur)
76
+ return out
77
+
78
+
79
+ def _flow_map(s: str) -> dict:
80
+ d = {}
81
+ for part in _split_top(s):
82
+ if ":" in part:
83
+ k, v = part.split(":", 1)
84
+ d[k.strip()] = _scalar(v)
85
+ return d
86
+
87
+
88
+ def parse_frontmatter(lines: list[str]) -> dict:
89
+ """フロントマター行(区切り `---` を除く)を dict にする。"""
90
+ data: dict = {}
91
+ i = 0
92
+ n = len(lines)
93
+ while i < n:
94
+ line = lines[i]
95
+ if not line.strip() or line.lstrip().startswith("#"):
96
+ i += 1
97
+ continue
98
+ m = re.match(r"^([A-Za-z_][\w-]*):(.*)$", line)
99
+ if not m:
100
+ i += 1
101
+ continue
102
+ key, rest = m.group(1), m.group(2).strip()
103
+ rest = re.sub(r"\s+#.*$", "", rest) if not rest.startswith(("'", '"')) else rest
104
+ if rest:
105
+ data[key] = _scalar(rest)
106
+ i += 1
107
+ continue
108
+ # ブロック値(リストまたはマッピング)
109
+ block: list[str] = []
110
+ i += 1
111
+ while i < n and (not lines[i].strip() or lines[i].startswith((" ", "\t"))):
112
+ block.append(lines[i])
113
+ i += 1
114
+ block = [b for b in block if b.strip()]
115
+ if not block:
116
+ data[key] = None
117
+ elif block[0].lstrip().startswith("- "):
118
+ data[key] = _parse_block_list(block)
119
+ else:
120
+ data[key] = _parse_block_map(block)
121
+ return data
122
+
123
+
124
+ def _dedent(block: list[str]) -> list[str]:
125
+ indent = min(len(b) - len(b.lstrip()) for b in block)
126
+ return [b[indent:] for b in block]
127
+
128
+
129
+ def _parse_block_list(block: list[str]) -> list:
130
+ items: list = []
131
+ block = _dedent(block)
132
+ cur: list[str] = []
133
+ for b in block:
134
+ if b.startswith("- "):
135
+ if cur:
136
+ items.append(_list_item(cur))
137
+ cur = [b[2:]]
138
+ else:
139
+ cur.append(b)
140
+ if cur:
141
+ items.append(_list_item(cur))
142
+ return items
143
+
144
+
145
+ def _list_item(lines: list[str]):
146
+ first = lines[0].strip()
147
+ if len(lines) == 1 and not re.match(r"^[A-Za-z_][\w-]*:\s", first + " "):
148
+ return _scalar(first)
149
+ if first.startswith("{"):
150
+ return _scalar(first)
151
+ # 「- key: value」形式のマッピング。後続行のインデントを揃える
152
+ rest = [re.sub(r"^\s{2}", "", l) if l.startswith(" ") else l.strip() for l in lines[1:]]
153
+ return parse_frontmatter([first] + rest)
154
+
155
+
156
+ def _parse_block_map(block: list[str]) -> dict:
157
+ return parse_frontmatter(_dedent(block))
158
+
159
+
160
+ def split_document(text: str):
161
+ """(frontmatter_lines | None, body_text, fm_end_line_index) を返す。"""
162
+ lines = text.splitlines()
163
+ if not lines or lines[0].strip() != "---":
164
+ return None, text, -1
165
+ for j in range(1, len(lines)):
166
+ if lines[j].strip() == "---":
167
+ return lines[1:j], "\n".join(lines[j + 1:]), j
168
+ return None, text, -1
169
+
170
+
171
+ # --------------------------------------------------------------------------- #
172
+ # 検証
173
+ # --------------------------------------------------------------------------- #
174
+
175
+ class Report:
176
+ def __init__(self):
177
+ self.errors: list[str] = []
178
+ self.warns: list[str] = []
179
+
180
+ def error(self, path, msg):
181
+ self.errors.append(f"{path}: {msg}")
182
+
183
+ def warn(self, path, msg):
184
+ self.warns.append(f"{path}: {msg}")
185
+
186
+
187
+ def iter_md(root: Path):
188
+ for p in sorted(root.rglob("*.md")):
189
+ if any(part.startswith(".") for part in p.relative_to(root).parts):
190
+ continue
191
+ yield p
192
+
193
+
194
+ def check_actor(rep, rel, field, value):
195
+ if not isinstance(value, str) or not ACTOR_RE.match(value):
196
+ rep.warn(rel, f"{field} '{value}' がアクター規約(<producer>/<version> | human:<id> | process:<id> など <kind>:<id>)に合わない")
197
+
198
+
199
+ def check_ts(rep, rel, field, value):
200
+ if not isinstance(value, str) or not ISO_TZ_RE.match(value):
201
+ rep.warn(rel, f"{field} '{value}' が UTC オフセット付き ISO 8601 ではない")
202
+
203
+
204
+ def check_bundle(root: Path) -> Report:
205
+ rep = Report()
206
+ now = dt.datetime.now(dt.timezone.utc)
207
+ all_paths = {p.relative_to(root).as_posix() for p in iter_md(root)}
208
+ for p in iter_md(root):
209
+ rel = p.relative_to(root).as_posix()
210
+ text = p.read_text(encoding="utf-8")
211
+ fm_lines, body, _ = split_document(text)
212
+ body = strip_fences(body)
213
+ if p.name == "log.md":
214
+ for line in text.splitlines():
215
+ m = DATE_HEADING_RE.match(line)
216
+ if m and not re.match(r"^\d{4}-\d{2}-\d{2}$", m.group(1).strip()):
217
+ rep.error(rel, f"log.md の日付見出し '{m.group(1)}' が YYYY-MM-DD 形式ではない")
218
+ continue
219
+ if p.name == "index.md":
220
+ if fm_lines is not None and p.parent != root:
221
+ rep.error(rel, "ルート以外の index.md にフロントマターがある")
222
+ elif fm_lines is not None:
223
+ fm = parse_frontmatter(fm_lines)
224
+ extra = set(fm) - {"okf_version"}
225
+ if extra:
226
+ rep.warn(rel, f"ルート index.md に okf_version 以外のキー {sorted(extra)} がある")
227
+ _check_links(rep, rel, p, body, root, all_paths)
228
+ continue
229
+
230
+ if fm_lines is None:
231
+ rep.error(rel, "フロントマターが無い")
232
+ continue
233
+ fm = parse_frontmatter(fm_lines)
234
+ t = fm.get("type")
235
+ if not t or not str(t).strip():
236
+ rep.error(rel, "type が空")
237
+
238
+ gen = fm.get("generated")
239
+ if gen is None:
240
+ rep.warn(rel, "generated が無い(誰がいつ書いたか不明)")
241
+ elif isinstance(gen, dict):
242
+ if "by" not in gen:
243
+ rep.warn(rel, "generated.by が無い")
244
+ else:
245
+ check_actor(rep, rel, "generated.by", gen["by"])
246
+ if "at" in gen:
247
+ check_ts(rep, rel, "generated.at", gen["at"])
248
+ else:
249
+ rep.warn(rel, "generated がマッピングではない")
250
+
251
+ ver = fm.get("verified")
252
+ if ver is not None:
253
+ entries = ver if isinstance(ver, list) else [ver]
254
+ for e in entries:
255
+ if not isinstance(e, dict):
256
+ rep.warn(rel, "verified の要素がマッピングではない")
257
+ continue
258
+ if "by" in e:
259
+ check_actor(rep, rel, "verified.by", e["by"])
260
+ if "at" in e:
261
+ check_ts(rep, rel, "verified.at", e["at"])
262
+
263
+ if "timestamp" in fm:
264
+ rep.warn(rel, "v0.1 の timestamp が残っている(--upgrade 0.2 で generated.at に移行)")
265
+ if re.search(r"^#+\s*Citations\s*$", body, re.M):
266
+ rep.warn(rel, "v0.1 の # Citations 節が残っている(--upgrade 0.2 で sources に移行)")
267
+
268
+ status = fm.get("status")
269
+ if status not in (None, "draft", "stable", "deprecated"):
270
+ rep.warn(rel, f"status '{status}' は draft|stable|deprecated のいずれでもない")
271
+
272
+ sa = fm.get("stale_after")
273
+ if sa is not None:
274
+ check_ts(rep, rel, "stale_after", sa)
275
+ try:
276
+ when = dt.datetime.fromisoformat(str(sa).replace("Z", "+00:00"))
277
+ if when <= now:
278
+ rep.warn(rel, f"stale_after {sa} を過ぎている")
279
+ except ValueError:
280
+ pass
281
+
282
+ ids = set()
283
+ sources = fm.get("sources")
284
+ if sources is not None:
285
+ if not isinstance(sources, list):
286
+ rep.warn(rel, "sources がリストではない")
287
+ else:
288
+ for s in sources:
289
+ if not isinstance(s, dict) or "resource" not in s:
290
+ rep.warn(rel, "sources の要素に resource が無い")
291
+ continue
292
+ if "id" in s:
293
+ ids.add(str(s["id"]))
294
+ if "author" in s:
295
+ check_actor(rep, rel, "sources[].author", s["author"])
296
+ if "last_modified" in s:
297
+ check_ts(rep, rel, "sources[].last_modified", s["last_modified"])
298
+ for label in set(FOOTNOTE_REF_RE.findall(body)):
299
+ if label not in ids:
300
+ rep.warn(rel, f"脚注 [^{label}] に対応する sources[].id が無い")
301
+
302
+ if str(t) == "Attested Computation":
303
+ if "runtime" not in fm:
304
+ rep.error(rel, "Attested Computation に runtime が無い")
305
+ has_inline = re.search(r"^#\s*Computation\s*$", body, re.M) is not None
306
+ if "computation" in fm and has_inline:
307
+ rep.warn(rel, "computation ファイルと本文 # Computation の両方がある")
308
+ if "computation" not in fm and not has_inline:
309
+ rep.warn(rel, "computation ファイルも本文 # Computation も無い")
310
+
311
+ _check_links(rep, rel, p, body, root, all_paths)
312
+ return rep
313
+
314
+
315
+ def _check_links(rep, rel, p: Path, body: str, root: Path, all_paths: set[str]):
316
+ for target in LINK_RE.findall(body):
317
+ if re.match(r"^[a-z]+:", target) or target.startswith("#"):
318
+ continue
319
+ target = target.split("#")[0]
320
+ if not target:
321
+ continue
322
+ if target.startswith("/"):
323
+ resolved = (root / target.lstrip("/")).resolve()
324
+ else:
325
+ resolved = (p.parent / target).resolve()
326
+ try:
327
+ r = resolved.relative_to(root.resolve()).as_posix()
328
+ except ValueError:
329
+ continue
330
+ if r.endswith("/") or resolved.is_dir():
331
+ continue
332
+ if not resolved.exists():
333
+ rep.warn(rel, f"リンク切れ: {target}")
334
+
335
+
336
+ # --------------------------------------------------------------------------- #
337
+ # アップグレード v0.1 → v0.2
338
+ # --------------------------------------------------------------------------- #
339
+
340
+ def git_author_actor(path: Path) -> str | None:
341
+ try:
342
+ out = subprocess.run(
343
+ ["git", "log", "--diff-filter=A", "--format=%ae", "--", str(path.resolve())],
344
+ capture_output=True, text=True, check=True, cwd=path.resolve().parent,
345
+ ).stdout.strip().splitlines()
346
+ except Exception:
347
+ return None
348
+ if not out:
349
+ return None
350
+ email = out[-1].strip()
351
+ local = email.split("@")[0]
352
+ return f"human:{local}" if local else None
353
+
354
+
355
+ def upgrade_file_to_0_2(p: Path, default_by: str | None, dry_run: bool) -> list[str]:
356
+ """変更内容の説明リストを返す。"""
357
+ notes: list[str] = []
358
+ text = p.read_text(encoding="utf-8")
359
+ fm_lines, body, end = split_document(text)
360
+ if fm_lines is None:
361
+ return notes
362
+ fm = parse_frontmatter(fm_lines)
363
+ new_fm = list(fm_lines)
364
+
365
+ if "timestamp" in fm and "generated" not in fm:
366
+ ts = str(fm["timestamp"])
367
+ by = default_by or git_author_actor(p) or "unknown/legacy"
368
+ if by == "unknown/legacy":
369
+ notes.append("generated.by を推定できず unknown/legacy を設定(要確認)")
370
+ new_fm = [l for l in new_fm if not re.match(r"^timestamp:", l)]
371
+ new_fm.append(f"generated: {{ by: {by}, at: {ts} }}")
372
+ notes.append(f"timestamp → generated.at(by: {by})")
373
+
374
+ m = re.search(r"^#+\s*Citations\s*$\n((?:\s*[-*]\s+.+\n?)+)", body, re.M)
375
+ if m and "sources" not in fm:
376
+ items = re.findall(r"^\s*[-*]\s+(.+?)\s*$", m.group(1), re.M)
377
+ if items:
378
+ new_fm.append("sources:")
379
+ for idx, item in enumerate(items, 1):
380
+ link = re.match(r"\[(.+?)\]\((.+?)\)", item)
381
+ if link:
382
+ title, res = link.group(1), link.group(2)
383
+ new_fm.append(f" - id: cite-{idx}")
384
+ new_fm.append(f" resource: {res}")
385
+ new_fm.append(f" title: \"{title}\"")
386
+ else:
387
+ new_fm.append(f" - id: cite-{idx}")
388
+ new_fm.append(f" resource: {item}")
389
+ body = body[: m.start()] + body[m.end():]
390
+ body = body.rstrip("\n") + "\n"
391
+ notes.append(f"# Citations({len(items)} 件)→ sources")
392
+
393
+ if notes and not dry_run:
394
+ out = "---\n" + "\n".join(new_fm) + "\n---\n" + body.rstrip("\n") + "\n"
395
+ p.write_text(out, encoding="utf-8")
396
+ return notes
397
+
398
+
399
+ def upgrade_bundle(root: Path, version: str, default_by: str | None, dry_run: bool):
400
+ if version not in SUPPORTED_UPGRADES:
401
+ print(f"未対応のバージョン: {version}。ガイドの変更点節を読んで本スクリプトに変換を追加してから実行する。")
402
+ sys.exit(2)
403
+ changed = 0
404
+ for p in iter_md(root):
405
+ if p.name in RESERVED:
406
+ continue
407
+ notes = upgrade_file_to_0_2(p, default_by, dry_run)
408
+ if notes:
409
+ changed += 1
410
+ rel = p.relative_to(root).as_posix()
411
+ print(f"{'[dry-run] ' if dry_run else ''}{rel}")
412
+ for n in notes:
413
+ print(f" - {n}")
414
+ idx = root / "index.md"
415
+ if not dry_run:
416
+ _set_okf_version(idx, version)
417
+ print(f"\n{changed} 件を更新{'(予定)' if dry_run else ''}。okf_version: \"{version}\" を {idx.name} に設定{'(予定)' if dry_run else ''}。")
418
+ print("log.md に **Upgrade** エントリを追記し、--check で確認すること。")
419
+
420
+
421
+ def _set_okf_version(idx: Path, version: str):
422
+ if idx.exists():
423
+ text = idx.read_text(encoding="utf-8")
424
+ fm_lines, body, _ = split_document(text)
425
+ if fm_lines is not None:
426
+ fm_lines = [l for l in fm_lines if not l.startswith("okf_version:")]
427
+ fm_lines.append(f'okf_version: "{version}"')
428
+ idx.write_text("---\n" + "\n".join(fm_lines) + "\n---\n" + body.lstrip("\n"), encoding="utf-8")
429
+ return
430
+ idx.write_text(f'---\nokf_version: "{version}"\n---\n\n' + text, encoding="utf-8")
431
+ else:
432
+ idx.write_text(f'---\nokf_version: "{version}"\n---\n\n# Index\n', encoding="utf-8")
433
+
434
+
435
+ # --------------------------------------------------------------------------- #
436
+
437
+ def main():
438
+ for stream in (sys.stdout, sys.stderr):
439
+ if hasattr(stream, "reconfigure"):
440
+ stream.reconfigure(encoding="utf-8")
441
+ ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
442
+ ap.add_argument("root", help="バンドルルート")
443
+ g = ap.add_mutually_exclusive_group(required=True)
444
+ g.add_argument("--check", action="store_true", help="適合性を検証する")
445
+ g.add_argument("--upgrade", metavar="VERSION", help="指定バージョンへアップグレードする(例: 0.2)")
446
+ ap.add_argument("--by", help="--upgrade 時の generated.by 既定値(git から推定できない場合)")
447
+ ap.add_argument("--dry-run", action="store_true", help="--upgrade 時にファイルを変更しない")
448
+ args = ap.parse_args()
449
+
450
+ root = Path(args.root)
451
+ if not root.is_dir():
452
+ print(f"ディレクトリが無い: {root}")
453
+ sys.exit(2)
454
+
455
+ if args.check:
456
+ rep = check_bundle(root)
457
+ for e in rep.errors:
458
+ print(f"ERROR {e}")
459
+ for w in rep.warns:
460
+ print(f"WARN {w}")
461
+ print(f"\nERROR {len(rep.errors)} / WARN {len(rep.warns)}")
462
+ sys.exit(1 if rep.errors else 0)
463
+ else:
464
+ upgrade_bundle(root, args.upgrade, args.by, args.dry_run)
465
+
466
+
467
+ if __name__ == "__main__":
468
+ main()
@@ -0,0 +1,20 @@
1
+ {
2
+ "metadata": {
3
+ "skill_name": "migrating-okf",
4
+ "skill_path": "<path/to/skill>",
5
+ "executor_model": "<model-name>",
6
+ "analyzer_model": "<model-name>",
7
+ "timestamp": "2026-08-25T02:22:14Z",
8
+ "evals_run": [],
9
+ "runs_per_configuration": 3
10
+ },
11
+ "runs": [],
12
+ "run_summary": {
13
+ "delta": {
14
+ "pass_rate": "+0.00",
15
+ "time_seconds": "+0.0",
16
+ "tokens": "+0"
17
+ }
18
+ },
19
+ "notes": []
20
+ }