@bitcobblers/wod-wiki-tools 0.52.2198 → 0.53.2204

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 (608) hide show
  1. package/dist/bin/wod.cjs +104 -37
  2. package/dist/bin/wod.cjs.map +1 -1
  3. package/dist/bin/wod.mjs +2 -2
  4. package/dist/{chunk-V77RQF5T.mjs → chunk-5NNSHRMZ.mjs} +3 -3
  5. package/dist/chunk-5NNSHRMZ.mjs.map +1 -0
  6. package/dist/{chunk-FJSPH4EA.mjs → chunk-SLCRIGUR.mjs} +5 -5
  7. package/dist/{chunk-FJSPH4EA.mjs.map → chunk-SLCRIGUR.mjs.map} +1 -1
  8. package/dist/{compiler-KOSG7QUK.mjs → compiler-WNZ455VL.mjs} +104 -37
  9. package/dist/compiler-WNZ455VL.mjs.map +1 -0
  10. package/dist/index.cjs +104 -37
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.mjs +2 -2
  13. package/dist/{scaffoldFeed-Y57UWPGG.mjs → scaffoldFeed-TCRNXYQU.mjs} +3 -3
  14. package/dist/{scaffoldFeed-Y57UWPGG.mjs.map → scaffoldFeed-TCRNXYQU.mjs.map} +1 -1
  15. package/dist/skills/README.md +2 -4
  16. package/dist/skills/wod-wiki-testing/SKILL.md +45 -0
  17. package/dist/skills/wod-wiki-testing/references/catalog.md +81 -0
  18. package/dist/web/playground/assets/main-DGz9PHS_.css +2 -0
  19. package/dist/web/playground/assets/main-DfHqNhwO.js +1149 -0
  20. package/dist/web/playground/assets/{statementBuilderFlow-Ba3zNEUH.js → statementBuilderFlow-CQWO7k9W.js} +2 -2
  21. package/dist/web/playground/index.html +2 -2
  22. package/dist/web/{server/seed/core/chunks/canvas.6ac57ab1.json → playground/seed/core/chunks/canvas.deac64e3.json} +1 -1
  23. package/dist/web/playground/seed/core/chunks/{dashboards.96c1474b.json → dashboards.08301ab4.json} +1 -1
  24. package/dist/web/playground/seed/core/chunks/{efforts.b724fc2b.json → efforts.47f650fe.json} +1 -1
  25. package/dist/web/playground/seed/core/chunks/{equipment.2743295a.json → equipment.79146d31.json} +1 -1
  26. package/dist/web/playground/seed/core/indexes/notebooks/canvas.json +180 -180
  27. package/dist/web/playground/seed/core/indexes/notebooks/dashboards.json +16 -16
  28. package/dist/web/playground/seed/core/indexes/notebooks/efforts.json +326 -326
  29. package/dist/web/playground/seed/core/indexes/notebooks/equipment.json +50 -50
  30. package/dist/web/playground/seed/core/manifest.json +27 -27
  31. package/dist/web/playground/seed/core/markdown/canvas/ai-first/README.json +1 -1
  32. package/dist/web/playground/seed/core/markdown/canvas/guide/README.json +4 -4
  33. package/dist/web/playground/seed/core/markdown/canvas/guide/clock.json +1 -1
  34. package/dist/web/playground/seed/core/markdown/canvas/guide/dashboards.json +1 -1
  35. package/dist/web/playground/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
  36. package/dist/web/playground/seed/core/markdown/canvas/guide/metrics.json +12 -12
  37. package/dist/web/playground/seed/core/markdown/canvas/guide/protocols.json +20 -20
  38. package/dist/web/playground/seed/core/markdown/canvas/guide/sessions.json +33 -33
  39. package/dist/web/playground/seed/core/markdown/canvas/guide/start.json +11 -11
  40. package/dist/web/playground/seed/core/markdown/canvas/guide/structure.json +25 -25
  41. package/dist/web/playground/seed/core/markdown/canvas/guide/wql.json +5 -5
  42. package/dist/web/playground/seed/core/markdown/canvas/home/sample-script.json +4 -4
  43. package/dist/web/playground/seed/core/markdown/canvas/home/welcome-1.json +2 -2
  44. package/dist/web/playground/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
  45. package/dist/web/playground/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
  46. package/dist/web/playground/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
  47. package/dist/web/playground/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
  48. package/dist/web/playground/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
  49. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
  50. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
  51. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
  52. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
  53. package/dist/web/playground/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
  54. package/dist/web/playground/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
  55. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
  56. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
  57. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
  58. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
  59. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
  60. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
  61. package/dist/web/playground/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
  62. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
  63. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
  64. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
  65. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
  66. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
  67. package/dist/web/playground/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
  68. package/dist/web/playground/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
  69. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-1.json +4 -4
  70. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-2.json +5 -5
  71. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-3.json +10 -10
  72. package/dist/web/playground/seed/core/markdown/canvas/syntax/document-4.json +5 -5
  73. package/dist/web/playground/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
  74. package/dist/web/playground/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
  75. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
  76. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
  77. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
  78. package/dist/web/playground/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
  79. package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
  80. package/dist/web/playground/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
  81. package/dist/web/playground/seed/core/markdown/canvas/syntax/measurements.json +7 -7
  82. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
  83. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
  84. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
  85. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
  86. package/dist/web/playground/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
  87. package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
  88. package/dist/web/playground/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
  89. package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
  90. package/dist/web/playground/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
  91. package/dist/web/playground/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
  92. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
  93. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
  94. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
  95. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
  96. package/dist/web/playground/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
  97. package/dist/web/playground/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
  98. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
  99. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
  100. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
  101. package/dist/web/playground/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
  102. package/dist/web/playground/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
  103. package/dist/web/playground/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
  104. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
  105. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
  106. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
  107. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
  108. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
  109. package/dist/web/playground/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
  110. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
  111. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
  112. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
  113. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
  114. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
  115. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
  116. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
  117. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
  118. package/dist/web/playground/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
  119. package/dist/web/playground/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
  120. package/dist/web/playground/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
  121. package/dist/web/playground/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
  122. package/dist/web/playground/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
  123. package/dist/web/playground/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
  124. package/dist/web/playground/seed/core/markdown/dashboards/training-block-review.json +11 -11
  125. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
  126. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
  127. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
  128. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
  129. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
  130. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
  131. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
  132. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
  133. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
  134. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
  135. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
  136. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
  137. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
  138. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
  139. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
  140. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
  141. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
  142. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
  143. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
  144. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
  145. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
  146. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
  147. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
  148. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
  149. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
  150. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
  151. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
  152. package/dist/web/playground/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
  153. package/dist/web/playground/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
  154. package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
  155. package/dist/web/playground/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
  156. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
  157. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
  158. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
  159. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
  160. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
  161. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
  162. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
  163. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
  164. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
  165. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
  166. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
  167. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
  168. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
  169. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
  170. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
  171. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
  172. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
  173. package/dist/web/playground/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
  174. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
  175. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
  176. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
  177. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
  178. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
  179. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
  180. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
  181. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
  182. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
  183. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
  184. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
  185. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
  186. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
  187. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
  188. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
  189. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
  190. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
  191. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
  192. package/dist/web/playground/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
  193. package/dist/web/playground/seed/core/markdown/efforts/recovery/rest.json +1 -1
  194. package/dist/web/playground/seed/core/markdown/efforts/recovery/stretching.json +1 -1
  195. package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
  196. package/dist/web/playground/seed/core/markdown/efforts/rowing/rowing.json +1 -1
  197. package/dist/web/playground/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
  198. package/dist/web/playground/seed/core/markdown/efforts/running/backward-running.json +1 -1
  199. package/dist/web/playground/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
  200. package/dist/web/playground/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
  201. package/dist/web/playground/seed/core/markdown/efforts/running/running-sprint.json +1 -1
  202. package/dist/web/playground/seed/core/markdown/efforts/snatch.json +2 -2
  203. package/dist/web/playground/seed/core/markdown/efforts/strength/back-squat.json +1 -1
  204. package/dist/web/playground/seed/core/markdown/efforts/strength/bench-press.json +1 -1
  205. package/dist/web/playground/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
  206. package/dist/web/playground/seed/core/markdown/efforts/strength/carioca.json +1 -1
  207. package/dist/web/playground/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
  208. package/dist/web/playground/seed/core/markdown/efforts/strength/cluster.json +1 -1
  209. package/dist/web/playground/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
  210. package/dist/web/playground/seed/core/markdown/efforts/strength/deadlift.json +1 -1
  211. package/dist/web/playground/seed/core/markdown/efforts/strength/devils-press.json +1 -1
  212. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
  213. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
  214. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
  215. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
  216. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
  217. package/dist/web/playground/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
  218. package/dist/web/playground/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
  219. package/dist/web/playground/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
  220. package/dist/web/playground/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
  221. package/dist/web/playground/seed/core/markdown/efforts/strength/front-squat.json +1 -1
  222. package/dist/web/playground/seed/core/markdown/efforts/strength/good-morning.json +1 -1
  223. package/dist/web/playground/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
  224. package/dist/web/playground/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
  225. package/dist/web/playground/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
  226. package/dist/web/playground/seed/core/markdown/efforts/strength/l-sit.json +1 -1
  227. package/dist/web/playground/seed/core/markdown/efforts/strength/man-maker.json +1 -1
  228. package/dist/web/playground/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
  229. package/dist/web/playground/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
  230. package/dist/web/playground/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
  231. package/dist/web/playground/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
  232. package/dist/web/playground/seed/core/markdown/efforts/strength/power-clean.json +1 -1
  233. package/dist/web/playground/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
  234. package/dist/web/playground/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
  235. package/dist/web/playground/seed/core/markdown/efforts/strength/push-press.json +1 -1
  236. package/dist/web/playground/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
  237. package/dist/web/playground/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
  238. package/dist/web/playground/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
  239. package/dist/web/playground/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
  240. package/dist/web/playground/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
  241. package/dist/web/playground/seed/core/markdown/efforts/strength/sled-push.json +1 -1
  242. package/dist/web/playground/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
  243. package/dist/web/playground/seed/core/markdown/efforts/strength/thruster.json +1 -1
  244. package/dist/web/playground/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
  245. package/dist/web/playground/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
  246. package/dist/web/playground/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
  247. package/dist/web/playground/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
  248. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
  249. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
  250. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
  251. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
  252. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
  253. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
  254. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
  255. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
  256. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
  257. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
  258. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
  259. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
  260. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
  261. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
  262. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
  263. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
  264. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
  265. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
  266. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
  267. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
  268. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
  269. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
  270. package/dist/web/playground/seed/core/markdown/efforts/swimming/swimming.json +1 -1
  271. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
  272. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
  273. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
  274. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
  275. package/dist/web/playground/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
  276. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
  277. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
  278. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
  279. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
  280. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
  281. package/dist/web/playground/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
  282. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
  283. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
  284. package/dist/web/playground/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
  285. package/dist/web/playground/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
  286. package/dist/web/playground/seed/core/markdown/equipment/air-bike.json +1 -1
  287. package/dist/web/playground/seed/core/markdown/equipment/barbell.json +1 -1
  288. package/dist/web/playground/seed/core/markdown/equipment/bench.json +1 -1
  289. package/dist/web/playground/seed/core/markdown/equipment/bike-erg.json +1 -1
  290. package/dist/web/playground/seed/core/markdown/equipment/climbing-rope.json +1 -1
  291. package/dist/web/playground/seed/core/markdown/equipment/clubs.json +1 -1
  292. package/dist/web/playground/seed/core/markdown/equipment/dumbbell.json +1 -1
  293. package/dist/web/playground/seed/core/markdown/equipment/ghd.json +1 -1
  294. package/dist/web/playground/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
  295. package/dist/web/playground/seed/core/markdown/equipment/jump-rope.json +1 -1
  296. package/dist/web/playground/seed/core/markdown/equipment/kettlebell.json +1 -1
  297. package/dist/web/playground/seed/core/markdown/equipment/macebell.json +1 -1
  298. package/dist/web/playground/seed/core/markdown/equipment/medicine-ball.json +1 -1
  299. package/dist/web/playground/seed/core/markdown/equipment/parallettes.json +1 -1
  300. package/dist/web/playground/seed/core/markdown/equipment/plyo-box.json +1 -1
  301. package/dist/web/playground/seed/core/markdown/equipment/pull-up-bar.json +1 -1
  302. package/dist/web/playground/seed/core/markdown/equipment/rower.json +1 -1
  303. package/dist/web/playground/seed/core/markdown/equipment/sandbag.json +1 -1
  304. package/dist/web/playground/seed/core/markdown/equipment/ski-erg.json +1 -1
  305. package/dist/web/playground/seed/core/markdown/equipment/slam-ball.json +1 -1
  306. package/dist/web/playground/seed/core/markdown/equipment/sled.json +1 -1
  307. package/dist/web/playground/seed/core/markdown/equipment/sledgehammer.json +1 -1
  308. package/dist/web/playground/seed/core/markdown/equipment/weight-vest.json +1 -1
  309. package/dist/web/playground/seed/core/report.html +13 -13
  310. package/dist/web/server/assets/main-DGz9PHS_.css +2 -0
  311. package/dist/web/server/assets/main-VXFEU44Q.js +1149 -0
  312. package/dist/web/server/assets/{statementBuilderFlow-D5uFXVe0.js → statementBuilderFlow-C7x-7JGx.js} +2 -2
  313. package/dist/web/server/index.html +2 -2
  314. package/dist/web/{playground/seed/core/chunks/canvas.6ac57ab1.json → server/seed/core/chunks/canvas.deac64e3.json} +1 -1
  315. package/dist/web/server/seed/core/chunks/{dashboards.96c1474b.json → dashboards.08301ab4.json} +1 -1
  316. package/dist/web/server/seed/core/chunks/{efforts.b724fc2b.json → efforts.47f650fe.json} +1 -1
  317. package/dist/web/server/seed/core/chunks/{equipment.2743295a.json → equipment.79146d31.json} +1 -1
  318. package/dist/web/server/seed/core/indexes/notebooks/canvas.json +180 -180
  319. package/dist/web/server/seed/core/indexes/notebooks/dashboards.json +16 -16
  320. package/dist/web/server/seed/core/indexes/notebooks/efforts.json +326 -326
  321. package/dist/web/server/seed/core/indexes/notebooks/equipment.json +50 -50
  322. package/dist/web/server/seed/core/manifest.json +27 -27
  323. package/dist/web/server/seed/core/markdown/canvas/ai-first/README.json +1 -1
  324. package/dist/web/server/seed/core/markdown/canvas/guide/README.json +4 -4
  325. package/dist/web/server/seed/core/markdown/canvas/guide/clock.json +1 -1
  326. package/dist/web/server/seed/core/markdown/canvas/guide/dashboards.json +1 -1
  327. package/dist/web/server/seed/core/markdown/canvas/guide/metrics-summaries.json +2 -2
  328. package/dist/web/server/seed/core/markdown/canvas/guide/metrics.json +12 -12
  329. package/dist/web/server/seed/core/markdown/canvas/guide/protocols.json +20 -20
  330. package/dist/web/server/seed/core/markdown/canvas/guide/sessions.json +33 -33
  331. package/dist/web/server/seed/core/markdown/canvas/guide/start.json +11 -11
  332. package/dist/web/server/seed/core/markdown/canvas/guide/structure.json +25 -25
  333. package/dist/web/server/seed/core/markdown/canvas/guide/wql.json +5 -5
  334. package/dist/web/server/seed/core/markdown/canvas/home/sample-script.json +4 -4
  335. package/dist/web/server/seed/core/markdown/canvas/home/welcome-1.json +2 -2
  336. package/dist/web/server/seed/core/markdown/canvas/syntax/actions-comments.json +4 -4
  337. package/dist/web/server/seed/core/markdown/canvas/syntax/alternating-emom.json +5 -5
  338. package/dist/web/server/seed/core/markdown/canvas/syntax/basic-emom.json +4 -4
  339. package/dist/web/server/seed/core/markdown/canvas/syntax/calculated-metrics.json +4 -4
  340. package/dist/web/server/seed/core/markdown/canvas/syntax/classic-amrap.json +6 -6
  341. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-barbell-cycling.json +4 -4
  342. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-full-session.json +10 -10
  343. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-nested-protocols.json +7 -7
  344. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-partner-workout.json +7 -7
  345. package/dist/web/server/seed/core/markdown/canvas/syntax/complex-swimming.json +5 -5
  346. package/dist/web/server/seed/core/markdown/canvas/syntax/core-rules.json +4 -4
  347. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-and-calculated-metrics.json +4 -4
  348. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-intervals.json +4 -4
  349. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-1.json +4 -4
  350. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-2.json +5 -5
  351. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-3.json +3 -3
  352. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-4.json +4 -4
  353. package/dist/web/server/seed/core/markdown/canvas/syntax/custom-metrics-5.json +4 -4
  354. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-bouldering.json +2 -2
  355. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-hangboard.json +2 -2
  356. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-climb-sport.json +2 -2
  357. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-log.json +4 -4
  358. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-plan.json +8 -8
  359. package/dist/web/server/seed/core/markdown/canvas/syntax/dialect-wod.json +5 -5
  360. package/dist/web/server/seed/core/markdown/canvas/syntax/distance-intervals.json +3 -3
  361. package/dist/web/server/seed/core/markdown/canvas/syntax/document-1.json +4 -4
  362. package/dist/web/server/seed/core/markdown/canvas/syntax/document-2.json +5 -5
  363. package/dist/web/server/seed/core/markdown/canvas/syntax/document-3.json +10 -10
  364. package/dist/web/server/seed/core/markdown/canvas/syntax/document-4.json +5 -5
  365. package/dist/web/server/seed/core/markdown/canvas/syntax/effort-notes.json +5 -5
  366. package/dist/web/server/seed/core/markdown/canvas/syntax/frontmatter-summaries.json +4 -4
  367. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-1.json +5 -5
  368. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-2.json +6 -6
  369. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-3.json +3 -3
  370. package/dist/web/server/seed/core/markdown/canvas/syntax/groups-4.json +3 -3
  371. package/dist/web/server/seed/core/markdown/canvas/syntax/longer-duration.json +4 -4
  372. package/dist/web/server/seed/core/markdown/canvas/syntax/longer-intervals.json +4 -4
  373. package/dist/web/server/seed/core/markdown/canvas/syntax/measurements.json +7 -7
  374. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-1.json +5 -5
  375. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-2.json +7 -7
  376. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-3.json +8 -8
  377. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-4.json +6 -6
  378. package/dist/web/server/seed/core/markdown/canvas/syntax/metrics-5.json +5 -5
  379. package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-sections.json +10 -10
  380. package/dist/web/server/seed/core/markdown/canvas/syntax/mixed-timers.json +5 -5
  381. package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-amrap-windows.json +7 -7
  382. package/dist/web/server/seed/core/markdown/canvas/syntax/multiple-sets.json +4 -4
  383. package/dist/web/server/seed/core/markdown/canvas/syntax/named-groups.json +6 -6
  384. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-1.json +6 -6
  385. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-2.json +4 -4
  386. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-3.json +6 -6
  387. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-4.json +3 -3
  388. package/dist/web/server/seed/core/markdown/canvas/syntax/protocols-5.json +4 -4
  389. package/dist/web/server/seed/core/markdown/canvas/syntax/single-movement.json +3 -3
  390. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-1.json +4 -4
  391. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-2.json +5 -5
  392. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-3.json +4 -4
  393. package/dist/web/server/seed/core/markdown/canvas/syntax/supplemental-4.json +4 -4
  394. package/dist/web/server/seed/core/markdown/canvas/syntax/time-cap.json +6 -6
  395. package/dist/web/server/seed/core/markdown/canvas/syntax/timer-modifiers.json +6 -6
  396. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-1.json +6 -6
  397. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-2.json +4 -4
  398. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-3.json +4 -4
  399. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-4.json +4 -4
  400. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-5.json +5 -5
  401. package/dist/web/server/seed/core/markdown/canvas/syntax/timers-rest.json +4 -4
  402. package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-effort.json +2 -2
  403. package/dist/web/server/seed/core/markdown/canvas/wql-presets/aggregate-by-week.json +2 -2
  404. package/dist/web/server/seed/core/markdown/canvas/wql-presets/content-fran.json +2 -2
  405. package/dist/web/server/seed/core/markdown/canvas/wql-presets/filter-combos.json +2 -2
  406. package/dist/web/server/seed/core/markdown/canvas/wql-presets/pipes-limit.json +2 -2
  407. package/dist/web/server/seed/core/markdown/canvas/wql-presets/session-rpe.json +2 -2
  408. package/dist/web/server/seed/core/markdown/canvas/wql-presets/source-journal.json +2 -2
  409. package/dist/web/server/seed/core/markdown/canvas/wql-presets/tis-trend.json +2 -2
  410. package/dist/web/server/seed/core/markdown/canvas/wql-presets/where-join.json +2 -2
  411. package/dist/web/server/seed/core/markdown/dashboards/benchmark-pr-board.json +6 -6
  412. package/dist/web/server/seed/core/markdown/dashboards/finger-strength-v8.json +5 -5
  413. package/dist/web/server/seed/core/markdown/dashboards/polarized-base-marathon.json +9 -9
  414. package/dist/web/server/seed/core/markdown/dashboards/recovery-readiness.json +7 -7
  415. package/dist/web/server/seed/core/markdown/dashboards/road-to-560-total.json +9 -9
  416. package/dist/web/server/seed/core/markdown/dashboards/training-block-review.json +11 -11
  417. package/dist/web/server/seed/core/markdown/efforts/bodyweight/air-squat.json +1 -1
  418. package/dist/web/server/seed/core/markdown/efforts/bodyweight/box-jump.json +1 -1
  419. package/dist/web/server/seed/core/markdown/efforts/bodyweight/broad-jump.json +1 -1
  420. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-box-jump-over.json +1 -1
  421. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee-over-dumbbell.json +1 -1
  422. package/dist/web/server/seed/core/markdown/efforts/bodyweight/burpee.json +1 -1
  423. package/dist/web/server/seed/core/markdown/efforts/bodyweight/dumbbell-squat-clean.json +1 -1
  424. package/dist/web/server/seed/core/markdown/efforts/bodyweight/ghd-sit-up.json +1 -1
  425. package/dist/web/server/seed/core/markdown/efforts/bodyweight/ground-kong.json +1 -1
  426. package/dist/web/server/seed/core/markdown/efforts/bodyweight/jumping-jack.json +1 -1
  427. package/dist/web/server/seed/core/markdown/efforts/bodyweight/kong-walk.json +1 -1
  428. package/dist/web/server/seed/core/markdown/efforts/bodyweight/lunge.json +1 -1
  429. package/dist/web/server/seed/core/markdown/efforts/bodyweight/overhead-squat.json +1 -1
  430. package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-roll.json +1 -1
  431. package/dist/web/server/seed/core/markdown/efforts/bodyweight/parkour-squat.json +1 -1
  432. package/dist/web/server/seed/core/markdown/efforts/bodyweight/pistol-squat.json +1 -1
  433. package/dist/web/server/seed/core/markdown/efforts/bodyweight/plank.json +1 -1
  434. package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-burpee.json +1 -1
  435. package/dist/web/server/seed/core/markdown/efforts/bodyweight/precision-jump.json +1 -1
  436. package/dist/web/server/seed/core/markdown/efforts/bodyweight/quadrupedal-movement.json +1 -1
  437. package/dist/web/server/seed/core/markdown/efforts/bodyweight/russian-twist.json +1 -1
  438. package/dist/web/server/seed/core/markdown/efforts/bodyweight/sit-up.json +1 -1
  439. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-clean.json +1 -1
  440. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-hold.json +1 -1
  441. package/dist/web/server/seed/core/markdown/efforts/bodyweight/squat-snatch.json +1 -1
  442. package/dist/web/server/seed/core/markdown/efforts/bodyweight/tuck-jump.json +1 -1
  443. package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-ball.json +1 -1
  444. package/dist/web/server/seed/core/markdown/efforts/bodyweight/wall-burpee.json +1 -1
  445. package/dist/web/server/seed/core/markdown/efforts/cycling/assault-bike.json +1 -1
  446. package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-moderate.json +1 -1
  447. package/dist/web/server/seed/core/markdown/efforts/cycling/cycling-vigorous.json +1 -1
  448. package/dist/web/server/seed/core/markdown/efforts/gymnastics/assisted-pull-up.json +1 -1
  449. package/dist/web/server/seed/core/markdown/efforts/gymnastics/burpee-pull-up.json +1 -1
  450. package/dist/web/server/seed/core/markdown/efforts/gymnastics/chest-to-bar-pull-up.json +1 -1
  451. package/dist/web/server/seed/core/markdown/efforts/gymnastics/dip.json +1 -1
  452. package/dist/web/server/seed/core/markdown/efforts/gymnastics/double-under.json +1 -1
  453. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-hold.json +1 -1
  454. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-push-up.json +1 -1
  455. package/dist/web/server/seed/core/markdown/efforts/gymnastics/handstand-walk.json +1 -1
  456. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jump-rope.json +1 -1
  457. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-pull-up.json +1 -1
  458. package/dist/web/server/seed/core/markdown/efforts/gymnastics/jumping-push-up.json +1 -1
  459. package/dist/web/server/seed/core/markdown/efforts/gymnastics/l-sit-pull-up.json +1 -1
  460. package/dist/web/server/seed/core/markdown/efforts/gymnastics/muscle-up.json +1 -1
  461. package/dist/web/server/seed/core/markdown/efforts/gymnastics/pull-up.json +1 -1
  462. package/dist/web/server/seed/core/markdown/efforts/gymnastics/push-up.json +1 -1
  463. package/dist/web/server/seed/core/markdown/efforts/gymnastics/reverse-wall-dip.json +1 -1
  464. package/dist/web/server/seed/core/markdown/efforts/gymnastics/rope-climb.json +1 -1
  465. package/dist/web/server/seed/core/markdown/efforts/gymnastics/toes-to-bar.json +1 -1
  466. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-arm-bar.json +1 -1
  467. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-around-the-world.json +1 -1
  468. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-bent-over-row.json +1 -1
  469. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-jerk.json +1 -1
  470. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean-and-press.json +1 -1
  471. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-clean.json +1 -1
  472. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-deadlift.json +1 -1
  473. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-floor-press.json +1 -1
  474. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-front-squat.json +1 -1
  475. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-goblet-squat.json +1 -1
  476. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-gorilla-row.json +1 -1
  477. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-halo.json +1 -1
  478. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-jerk.json +1 -1
  479. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-overhead-squat.json +1 -1
  480. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-press.json +1 -1
  481. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-snatch.json +1 -1
  482. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-swing.json +1 -1
  483. package/dist/web/server/seed/core/markdown/efforts/kettlebell/kettlebell-windmill.json +1 -1
  484. package/dist/web/server/seed/core/markdown/efforts/kettlebell/turkish-get-up.json +1 -1
  485. package/dist/web/server/seed/core/markdown/efforts/recovery/rest.json +1 -1
  486. package/dist/web/server/seed/core/markdown/efforts/recovery/stretching.json +1 -1
  487. package/dist/web/server/seed/core/markdown/efforts/rowing/rowing-sprint.json +1 -1
  488. package/dist/web/server/seed/core/markdown/efforts/rowing/rowing.json +1 -1
  489. package/dist/web/server/seed/core/markdown/efforts/rowing/ski-erg.json +1 -1
  490. package/dist/web/server/seed/core/markdown/efforts/running/backward-running.json +1 -1
  491. package/dist/web/server/seed/core/markdown/efforts/running/running-6-mph.json +1 -1
  492. package/dist/web/server/seed/core/markdown/efforts/running/running-8-mph.json +1 -1
  493. package/dist/web/server/seed/core/markdown/efforts/running/running-sprint.json +1 -1
  494. package/dist/web/server/seed/core/markdown/efforts/snatch.json +2 -2
  495. package/dist/web/server/seed/core/markdown/efforts/strength/back-squat.json +1 -1
  496. package/dist/web/server/seed/core/markdown/efforts/strength/bench-press.json +1 -1
  497. package/dist/web/server/seed/core/markdown/efforts/strength/box-step-up.json +1 -1
  498. package/dist/web/server/seed/core/markdown/efforts/strength/carioca.json +1 -1
  499. package/dist/web/server/seed/core/markdown/efforts/strength/clean-and-jerk.json +1 -1
  500. package/dist/web/server/seed/core/markdown/efforts/strength/cluster.json +1 -1
  501. package/dist/web/server/seed/core/markdown/efforts/strength/dead-hang.json +1 -1
  502. package/dist/web/server/seed/core/markdown/efforts/strength/deadlift.json +1 -1
  503. package/dist/web/server/seed/core/markdown/efforts/strength/devils-press.json +1 -1
  504. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-box-step-up.json +1 -1
  505. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-clean.json +1 -1
  506. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-fly.json +1 -1
  507. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-row.json +1 -1
  508. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-snatch.json +1 -1
  509. package/dist/web/server/seed/core/markdown/efforts/strength/dumbbell-thruster.json +1 -1
  510. package/dist/web/server/seed/core/markdown/efforts/strength/elbows-to-knees.json +1 -1
  511. package/dist/web/server/seed/core/markdown/efforts/strength/farmer-carry.json +1 -1
  512. package/dist/web/server/seed/core/markdown/efforts/strength/frog-stand.json +1 -1
  513. package/dist/web/server/seed/core/markdown/efforts/strength/front-squat.json +1 -1
  514. package/dist/web/server/seed/core/markdown/efforts/strength/good-morning.json +1 -1
  515. package/dist/web/server/seed/core/markdown/efforts/strength/hanging-leg-raise.json +1 -1
  516. package/dist/web/server/seed/core/markdown/efforts/strength/hollow-rock.json +1 -1
  517. package/dist/web/server/seed/core/markdown/efforts/strength/knees-to-elbows.json +1 -1
  518. package/dist/web/server/seed/core/markdown/efforts/strength/l-sit.json +1 -1
  519. package/dist/web/server/seed/core/markdown/efforts/strength/man-maker.json +1 -1
  520. package/dist/web/server/seed/core/markdown/efforts/strength/medicine-ball-clean.json +1 -1
  521. package/dist/web/server/seed/core/markdown/efforts/strength/overhead-press.json +1 -1
  522. package/dist/web/server/seed/core/markdown/efforts/strength/parkour-vault.json +1 -1
  523. package/dist/web/server/seed/core/markdown/efforts/strength/pig-flip.json +1 -1
  524. package/dist/web/server/seed/core/markdown/efforts/strength/power-clean.json +1 -1
  525. package/dist/web/server/seed/core/markdown/efforts/strength/power-snatch.json +1 -1
  526. package/dist/web/server/seed/core/markdown/efforts/strength/push-jerk.json +1 -1
  527. package/dist/web/server/seed/core/markdown/efforts/strength/push-press.json +1 -1
  528. package/dist/web/server/seed/core/markdown/efforts/strength/romanian-deadlift.json +1 -1
  529. package/dist/web/server/seed/core/markdown/efforts/strength/single-leg-deadlift.json +1 -1
  530. package/dist/web/server/seed/core/markdown/efforts/strength/skull-crusher.json +1 -1
  531. package/dist/web/server/seed/core/markdown/efforts/strength/slam-ball.json +1 -1
  532. package/dist/web/server/seed/core/markdown/efforts/strength/sled-pull.json +1 -1
  533. package/dist/web/server/seed/core/markdown/efforts/strength/sled-push.json +1 -1
  534. package/dist/web/server/seed/core/markdown/efforts/strength/sumo-deadlift.json +1 -1
  535. package/dist/web/server/seed/core/markdown/efforts/strength/thruster.json +1 -1
  536. package/dist/web/server/seed/core/markdown/efforts/strength/triceps-extension.json +1 -1
  537. package/dist/web/server/seed/core/markdown/efforts/strength/v-sit-hold.json +1 -1
  538. package/dist/web/server/seed/core/markdown/efforts/strength/wall-walk.json +1 -1
  539. package/dist/web/server/seed/core/markdown/efforts/strength/yoga-sun-salutation.json +1 -1
  540. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-assisted-sprint.json +1 -1
  541. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-backstroke.json +1 -1
  542. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke-kick.json +1 -1
  543. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-breaststroke.json +1 -1
  544. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-butterfly.json +1 -1
  545. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-catch-up-drill.json +1 -1
  546. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-choice-stroke.json +1 -1
  547. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dive-start.json +1 -1
  548. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-dolphin-kick.json +1 -1
  549. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-drafting.json +1 -1
  550. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-fingertip-drag.json +1 -1
  551. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-freestyle.json +1 -1
  552. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-individual-medley.json +1 -1
  553. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-kick.json +1 -1
  554. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-pull.json +1 -1
  555. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-resisted-sprint.json +1 -1
  556. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-rotation-drill.json +1 -1
  557. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-sighting.json +1 -1
  558. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-single-arm-drill.json +1 -1
  559. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-stroke-transition.json +1 -1
  560. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-two-kick-one-pull.json +1 -1
  561. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming-vigorous.json +1 -1
  562. package/dist/web/server/seed/core/markdown/efforts/swimming/swimming.json +1 -1
  563. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-arm-cast.json +1 -1
  564. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-circles.json +1 -1
  565. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-mill.json +1 -1
  566. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-reverse-mill.json +1 -1
  567. package/dist/web/server/seed/core/markdown/efforts/unconventional/clubbell-shield-cast.json +1 -1
  568. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-10-to-2-swing.json +1 -1
  569. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-360-swing.json +1 -1
  570. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-barbarian-squat.json +1 -1
  571. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-flow.json +1 -1
  572. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-gravedigger.json +1 -1
  573. package/dist/web/server/seed/core/markdown/efforts/unconventional/macebell-touchdown.json +1 -1
  574. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-carry.json +1 -1
  575. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-bear-hug-extension.json +1 -1
  576. package/dist/web/server/seed/core/markdown/efforts/unconventional/sandbag-over-shoulder.json +1 -1
  577. package/dist/web/server/seed/core/markdown/efforts/walking/walking-3-mph.json +1 -1
  578. package/dist/web/server/seed/core/markdown/equipment/air-bike.json +1 -1
  579. package/dist/web/server/seed/core/markdown/equipment/barbell.json +1 -1
  580. package/dist/web/server/seed/core/markdown/equipment/bench.json +1 -1
  581. package/dist/web/server/seed/core/markdown/equipment/bike-erg.json +1 -1
  582. package/dist/web/server/seed/core/markdown/equipment/climbing-rope.json +1 -1
  583. package/dist/web/server/seed/core/markdown/equipment/clubs.json +1 -1
  584. package/dist/web/server/seed/core/markdown/equipment/dumbbell.json +1 -1
  585. package/dist/web/server/seed/core/markdown/equipment/ghd.json +1 -1
  586. package/dist/web/server/seed/core/markdown/equipment/gymnastic-rings.json +1 -1
  587. package/dist/web/server/seed/core/markdown/equipment/jump-rope.json +1 -1
  588. package/dist/web/server/seed/core/markdown/equipment/kettlebell.json +1 -1
  589. package/dist/web/server/seed/core/markdown/equipment/macebell.json +1 -1
  590. package/dist/web/server/seed/core/markdown/equipment/medicine-ball.json +1 -1
  591. package/dist/web/server/seed/core/markdown/equipment/parallettes.json +1 -1
  592. package/dist/web/server/seed/core/markdown/equipment/plyo-box.json +1 -1
  593. package/dist/web/server/seed/core/markdown/equipment/pull-up-bar.json +1 -1
  594. package/dist/web/server/seed/core/markdown/equipment/rower.json +1 -1
  595. package/dist/web/server/seed/core/markdown/equipment/sandbag.json +1 -1
  596. package/dist/web/server/seed/core/markdown/equipment/ski-erg.json +1 -1
  597. package/dist/web/server/seed/core/markdown/equipment/slam-ball.json +1 -1
  598. package/dist/web/server/seed/core/markdown/equipment/sled.json +1 -1
  599. package/dist/web/server/seed/core/markdown/equipment/sledgehammer.json +1 -1
  600. package/dist/web/server/seed/core/markdown/equipment/weight-vest.json +1 -1
  601. package/dist/web/server/seed/core/report.html +13 -13
  602. package/package.json +6 -6
  603. package/dist/chunk-V77RQF5T.mjs.map +0 -1
  604. package/dist/compiler-KOSG7QUK.mjs.map +0 -1
  605. package/dist/web/playground/assets/main-CnfiwGSd.js +0 -1149
  606. package/dist/web/playground/assets/main-Vksl1E71.css +0 -2
  607. package/dist/web/server/assets/main-CnNELDQ_.js +0 -1149
  608. package/dist/web/server/assets/main-Vksl1E71.css +0 -2
@@ -174,14 +174,98 @@ function gateDashboards(groups, corpusRoot) {
174
174
  }
175
175
  }
176
176
  }
177
- function getFileCreatedAt(file, repoRoot) {
177
+ var EMPTY_GIT_INDEX = { files: /* @__PURE__ */ new Map(), dirs: /* @__PURE__ */ new Map() };
178
+ var gitHistoryCache = /* @__PURE__ */ new Map();
179
+ function normalizeRelGitPath(p) {
180
+ return p.replace(/\\/g, "/").replace(/^\.\//, "").replace(/^\/+|\/+$/g, "");
181
+ }
182
+ function getGitHistoryIndex(repoRoot, targetRelPath) {
183
+ const normTarget = targetRelPath ? normalizeRelGitPath(targetRelPath) : "";
184
+ const topSegment = normTarget.split("/")[0] ?? "";
185
+ const scopeArg = topSegment && existsSync(join(repoRoot, topSegment)) ? topSegment : ".";
186
+ let prefix;
187
+ let headSha;
178
188
  try {
179
- const out = execSync(`git log -1 --format=%ct -- '${file}'`, { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
180
- const ts = Number(out) * 1e3;
181
- return Number.isFinite(ts) && ts > 0 ? ts : 0;
189
+ const rev = execFileSync("git", ["rev-parse", "--show-prefix", "HEAD"], {
190
+ cwd: repoRoot,
191
+ encoding: "utf8",
192
+ stdio: ["ignore", "pipe", "ignore"]
193
+ });
194
+ const lines = rev.split("\n");
195
+ prefix = lines[0] ?? "";
196
+ headSha = (lines[1] ?? "").trim();
182
197
  } catch {
183
- return 0;
198
+ return EMPTY_GIT_INDEX;
184
199
  }
200
+ if (!headSha) return EMPTY_GIT_INDEX;
201
+ const cacheKey = `${repoRoot}::${prefix}::${scopeArg}::${headSha}`;
202
+ const cached = gitHistoryCache.get(cacheKey);
203
+ if (cached) return cached;
204
+ const files = /* @__PURE__ */ new Map();
205
+ const dirs = /* @__PURE__ */ new Map();
206
+ try {
207
+ const out = execFileSync(
208
+ "git",
209
+ ["log", "--format=%H %ct %cI", "--name-only", "HEAD", "--", scopeArg],
210
+ {
211
+ cwd: repoRoot,
212
+ encoding: "utf8",
213
+ stdio: ["ignore", "pipe", "ignore"],
214
+ maxBuffer: 64 * 1024 * 1024
215
+ }
216
+ );
217
+ for (const block of out.split("")) {
218
+ const trimmed = block.trim();
219
+ if (!trimmed) continue;
220
+ const lines = trimmed.split("\n");
221
+ const header = lines[0] ?? "";
222
+ const [commit = "", ctStr = "0", cI = ""] = header.split(" ");
223
+ const ts = Number(ctStr) * 1e3;
224
+ const ctMs = Number.isFinite(ts) && ts > 0 ? ts : 0;
225
+ const seenDirs = /* @__PURE__ */ new Set();
226
+ for (let i = 1; i < lines.length; i++) {
227
+ let rel = lines[i].trim();
228
+ if (!rel) continue;
229
+ if (prefix) {
230
+ if (!rel.startsWith(prefix)) continue;
231
+ rel = rel.slice(prefix.length);
232
+ }
233
+ rel = normalizeRelGitPath(rel);
234
+ if (!rel) continue;
235
+ const existingFile = files.get(rel);
236
+ if (!existingFile) {
237
+ files.set(rel, { commit, ctMs, cI, count: 1 });
238
+ } else {
239
+ existingFile.count += 1;
240
+ }
241
+ let slash = rel.lastIndexOf("/");
242
+ while (slash > 0) {
243
+ seenDirs.add(rel.slice(0, slash));
244
+ slash = rel.lastIndexOf("/", slash - 1);
245
+ }
246
+ }
247
+ for (const dir of seenDirs) {
248
+ const existingDir = dirs.get(dir);
249
+ if (!existingDir) {
250
+ dirs.set(dir, { commit, ctMs, cI, count: 1 });
251
+ } else {
252
+ existingDir.count += 1;
253
+ }
254
+ }
255
+ }
256
+ } catch {
257
+ return EMPTY_GIT_INDEX;
258
+ }
259
+ if (gitHistoryCache.size >= 8) {
260
+ gitHistoryCache.clear();
261
+ }
262
+ const built = { files, dirs };
263
+ gitHistoryCache.set(cacheKey, built);
264
+ return built;
265
+ }
266
+ function getFileCreatedAt(file, repoRoot) {
267
+ const norm = normalizeRelGitPath(file);
268
+ return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.ctMs ?? 0;
185
269
  }
186
270
  function seedNoteIdSync(path) {
187
271
  const hash = createHash("sha1").update(`${contract_exports.SEED_NAMESPACE}:${path}`).digest();
@@ -191,44 +275,27 @@ function seedNoteIdSync(path) {
191
275
  return [...bytes].map((b, i) => [4, 6, 8, 10].includes(i) ? `-${b.toString(16).padStart(2, "0")}` : b.toString(16).padStart(2, "0")).join("");
192
276
  }
193
277
  function getFileCommit(file, repoRoot) {
194
- try {
195
- return execFileSync("git", ["log", "-1", "--format=%H", "--", file], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
196
- } catch {
197
- return "";
198
- }
278
+ const norm = normalizeRelGitPath(file);
279
+ return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.commit ?? "";
199
280
  }
200
281
  function getFileVersion(file, repoRoot) {
201
- try {
202
- const out = execFileSync("git", ["rev-list", "--count", "HEAD", "--", file], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
203
- const count = Number(out);
204
- return Number.isFinite(count) && count > 0 ? count : 1;
205
- } catch {
206
- return 1;
207
- }
282
+ const norm = normalizeRelGitPath(file);
283
+ return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.count ?? 1;
284
+ }
285
+ function lookupPathStats(targetPath, repoRoot) {
286
+ const norm = normalizeRelGitPath(targetPath);
287
+ const idx = getGitHistoryIndex(repoRoot, norm);
288
+ return idx.dirs.get(norm) ?? idx.files.get(norm);
208
289
  }
209
290
  function getPathVersion(targetPath, repoRoot) {
210
- try {
211
- const out = execFileSync("git", ["rev-list", "--count", "HEAD", "--", targetPath], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
212
- const count = Number(out);
213
- return Number.isFinite(count) && count > 0 ? count : 1;
214
- } catch {
215
- return 1;
216
- }
291
+ return lookupPathStats(targetPath, repoRoot)?.count ?? 1;
217
292
  }
218
293
  function getPathCommit(targetPath, repoRoot) {
219
- try {
220
- return execFileSync("git", ["log", "-1", "--format=%H", "--", targetPath], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
221
- } catch {
222
- return "";
223
- }
294
+ return lookupPathStats(targetPath, repoRoot)?.commit ?? "";
224
295
  }
225
296
  function getPathUpdatedAt(targetPath, repoRoot) {
226
- try {
227
- const out = execFileSync("git", ["log", "-1", "--format=%cI", "--", targetPath], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
228
- return out || void 0;
229
- } catch {
230
- return void 0;
231
- }
297
+ const cI = lookupPathStats(targetPath, repoRoot)?.cI;
298
+ return cI || void 0;
232
299
  }
233
300
  function groupCorpusPath(id) {
234
301
  if (id.startsWith("notebook.")) {
@@ -687,5 +754,5 @@ ${shown}${more}`);
687
754
  }
688
755
 
689
756
  export { buildBlockEffortRows, buildBlockEquipmentRows, buildBlockIndexRows, chunkIdFor, collectCorpusMarkdown, compileSeedRow, dateKeyToCreatedAt, discoverUncatalogedEfforts, frontmatterDateToCreatedAt, generateSeed, getFileCommit, getFileVersion, getPathCommit, getPathUpdatedAt, getPathVersion, groupCorpusPath, loadCorpusReferenceCatalog, partitionIntoChunks, scaffoldDiscoveredEfforts, seedNoteIdSync, validateDashboardNote, validateWodBlockSyntax };
690
- //# sourceMappingURL=compiler-KOSG7QUK.mjs.map
691
- //# sourceMappingURL=compiler-KOSG7QUK.mjs.map
757
+ //# sourceMappingURL=compiler-WNZ455VL.mjs.map
758
+ //# sourceMappingURL=compiler-WNZ455VL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/seedbuild/contract.ts","../src/seedbuild/filename.ts","../src/seedbuild/git-version.ts","../src/seedbuild/validation.ts","../src/seedbuild/compiler.ts"],"names":["wod_wiki_engine_star","parsed","section"],"mappings":"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","file":"compiler-WNZ455VL.mjs","sourcesContent":["export * from '@bitcobblers/wod-wiki-engine';\n","/**\n * fileToDisplayName — port of wod-wiki's\n * apps/playground/src/repositories/groupings.ts (display-name derivation\n * only). Block-index rows carry the same note titles the app renders, so\n * titles must derive identically on both sides.\n */\n\n/** Lowercased mid-title words — \"and\", \"of\", \"70.3\"-style fragments read wrong capped. */\nconst FILE_TITLE_STOP_WORDS: Record<string, true> = {\n and: true, or: true, of: true, for: true, to: true, in: true, on: true,\n at: true, by: true, with: true, the: true, a: true, an: true,\n};\n\n/**\n * Parse a filename into a display name.\n * \"simple-and-sinister.md\" -> \"Simple and Sinister\"\n */\nexport function fileToDisplayName(filename: string): string {\n const base = filename.replace(/\\.md$/, '');\n if (base.toUpperCase() === 'README') return 'Overview';\n // Strip leading \"day-01-\" prefixes if present, then humanise\n const cleaned = base.replace(/^day-\\d+-/, '');\n const tokens = cleaned.split(/[-_]/);\n const titled: string[] = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n const next = tokens[i + 1];\n const after = tokens[i + 2];\n const prev = tokens[i - 1];\n // Race distances keep their dot: a lone 1-2-digit pair (\"70-3\" -> \"70.3\").\n // Longer numeric runs are dates (2009-12-01) or rep ladders (5-3-1) —\n // only an isolated pair between words is a distance.\n if (\n /^\\d{1,2}$/.test(token) && /^\\d{1,2}$/.test(next ?? '')\n && !/^\\d+$/.test(prev ?? '') && !/^\\d+$/.test(after ?? '')\n ) {\n titled.push(`${token}.${next}`);\n i++;\n continue;\n }\n if (titled.length > 0 && FILE_TITLE_STOP_WORDS[token.toLowerCase()]) {\n titled.push(token.toLowerCase());\n continue;\n }\n titled.push(token.charAt(0).toUpperCase() + token.slice(1));\n }\n return titled.join(' ');\n}\n","/**\n * Git-derived versioning — the seed artifact's version IS this repo's git\n * history. Every merged MR advances `version` (commit count), and\n * `versionLabel`/`commit` make an artifact traceable to its exact source\n * tree, so the app (and humans diffing manifests) can answer \"what changed\n * and what needs syncing\" from the manifest alone.\n */\nimport { execSync } from 'node:child_process';\n\nexport interface GitVersion {\n /** Monotonic commit count — the import-order version stamped on the manifest. */\n version: number;\n /** `git describe --tags --long --always --dirty`, e.g. `v1.2.0-4-gdeadbee`. */\n versionLabel: string;\n /** Full HEAD sha. */\n commit: string;\n /** True when built with uncommitted working-tree changes. */\n dirty: boolean;\n}\n\n/** Unversioned fallback for source trees without git history (e.g. exported tarballs). */\nexport const UNKNOWN_GIT_VERSION: GitVersion = {\n version: 0,\n versionLabel: 'unknown',\n commit: '',\n dirty: false,\n};\n\nexport function resolveGitVersion(repoRoot: string): GitVersion {\n try {\n const run = (args: string): string =>\n execSync(`git ${args}`, { cwd: repoRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n const count = Number(run('rev-list --count HEAD'));\n return {\n version: Number.isFinite(count) && count > 0 ? count : 0,\n versionLabel: run('describe --tags --long --always --dirty'),\n commit: run('rev-parse HEAD'),\n dirty: run('status --porcelain') !== '',\n };\n } catch {\n return UNKNOWN_GIT_VERSION;\n }\n}\n","export * from '@bitcobblers/wod-wiki-engine';\n","/** Compiles exact source, occurrence maps and sparse projections into atomic notes chunks. */\nimport { parseScript, whiteboardParser } from '@bitcobblers/wod-wiki-lang';\nimport { blockContentId, parseDocumentSections, parseNoteBundleFromJsonl, reconcileNoteBlocks, serializeNoteBundleToJsonl } from '@bitcobblers/wod-wiki-core';\nimport type { BlockEffort, BlockEquipment, BlockIndexRow } from '@bitcobblers/wod-wiki-storage';\nimport {\n buildDashboardDocument,\n isDashboardWidgetType,\n parseDashboardNote,\n parseDocument,\n parseQuery,\n resolveWidgetType,\n} from '@bitcobblers/wod-wiki-wql';\nimport {\n DASHBOARDS_CHUNK_ID,\n SEED_NAMESPACE,\n SEED_SCHEMA,\n SEED_REGISTERED_WIDGETS,\n canvasRouteSlug,\n seedNoteSourceId,\n notebookSlugForChunkId,\n type ManifestChunk,\n type NotebookIndex,\n type NotebookIndexSummary,\n type SeedManifest,\n type SeedRecordRef,\n type SeedRow,\n} from './contract';\nimport { fileToDisplayName } from './filename';\nimport { createReferenceIndex, extractStatementRefs, parseEffortFile, parseEquipmentFile, slugifyRefLabel, type IEffort, type IEquipment } from '@bitcobblers/wod-wiki-lang';\nimport { resolveGitVersion } from './git-version';\nimport { writeBuildReport } from './report';\nimport { getScalar, parseFrontmatter } from './frontmatter';\nimport { assertNotebookIndex, assertSeedManifest, assertSeedRows } from './validation';\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { execFileSync } from 'node:child_process';\nimport { dirname, join } from 'node:path';\n\n// BlockEffort/BlockIndexRow row types come from @bitcobblers/wod-wiki-storage\n// (type-only import — chunk rows are plain JSON applied structurally by the\n// app, mirroring cli/seed.ts).\n\n/** Scan `dir` recursively for `*.md` files; returns POSIX paths relative to `dir`, sorted. */\nfunction listMarkdownFiles(dir: string, prefix = ''): string[] {\n if (!existsSync(dir)) return [];\n const out: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) out.push(...listMarkdownFiles(join(dir, entry.name), rel));\n else if (entry.isFile() && entry.name.endsWith('.md')) out.push(rel);\n }\n return out.sort();\n}\n\n// ── Types ─────────────────────────────────────────────────────────────────\n\nexport interface ChunkGroup {\n id: string;\n files: string[];\n}\n\nexport interface GenerateSeedOptions {\n /** The corpus directory (`markdown/`). Defaults to `<corpusRoot>/markdown`. */\n markdownDir?: string;\n /** Output directory. Defaults to `<corpusRoot>/dist`. */\n outDir?: string;\n /**\n * Explicit manifest version (tests). Defaults to the corpus repo's git\n * commit count — see git-version.ts.\n */\n version?: number;\n /** Repo root the corpus paths resolve against and versioning derives from. Defaults to cwd. */\n corpusRoot?: string;\n /** Automatically scaffold markdown files for newly discovered efforts. */\n scaffoldDiscoveredEfforts?: boolean;\n /** Repo-relative POSIX paths omitted from chunk rows and derived indexes. */\n excludePaths?: readonly string[];\n}\n\nexport interface GenerateSeedResult {\n manifest: SeedManifest;\n outDir: string;\n totalFiles: number;\n reportPath: string;\n /** ms timings per pass (mirrored into report.html). */\n passMs: { scan: number; blockIndex: number; parseGate: number; blockEfforts: number; write: number };\n}\n\n// ── Corpus partition ──────────────────────────────────────────────────────\n\n/**\n * Map one `markdown/…` path to its chunk id. Returns null for files outside\n * the known corpora — callers MUST treat that as a parity failure so new\n * content directories cannot bypass the seed.\n */\nexport function chunkIdFor(relPath: string): string | null {\n const parts = relPath.split('/');\n if (parts[0] !== 'markdown' || parts.length < 2) return null;\n const corpus = parts[1];\n // markdown/<corpus>/<rest…>; a file directly under markdown/ has no corpus.\n if (parts.length === 2) return null;\n const slug = parts[2]?.replace(/\\.md$/, '');\n switch (corpus) {\n case 'canvas':\n case 'dashboards':\n case 'efforts':\n case 'equipment':\n return corpus;\n case 'notebooks':\n return parts.length === 3 ? `notebook._root` : `notebook.${slug}`;\n default:\n return null;\n }\n}\n\n/** Scan the markdown corpus; returns repo-relative POSIX paths of all .md files. */\nexport function collectCorpusMarkdown(markdownDir: string, excludePaths: readonly string[] = []): string[] {\n const excluded = new Set(excludePaths);\n return listMarkdownFiles(markdownDir)\n .map((p) => `markdown/${p}`)\n .filter((path) => !excluded.has(path));\n}\n\n/** Group markdown corpus paths into chunk groups; throws on paths outside the known corpora. */\nexport function partitionIntoChunks(paths: string[]): ChunkGroup[] {\n const byId = new Map<string, string[]>();\n for (const p of paths) {\n const id = chunkIdFor(p);\n if (id === null) {\n throw new Error(\n `[generate-seed] Parity failure: '${p}' is not part of any known corpus ` +\n `(canvas | dashboards | efforts | equipment | notebooks). ` +\n `Extend chunkIdFor() if this is a new corpus.`,\n );\n }\n const list = byId.get(id);\n if (list) list.push(p);\n else byId.set(id, [p]);\n }\n return [...byId.entries()]\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([id, files]) => ({ id, files }));\n}\n\n// ── Dashboard gate (#906) ─────────────────────────────────────────────────\n\n/**\n * Validate one dashboard note in the locked #899 format: dashboard\n * frontmatter, a title, known widget types, WQL bodies that parse (and are\n * aggregate queries, not find queries), and every `$token` reference\n * declared. Returns the problems found (empty = valid).\n */\nexport function validateDashboardNote(raw: string): string[] {\n const problems: string[] = [];\n const { meta } = parseFrontmatter(raw);\n const { sections } = parseDashboardNote(raw);\n const doc = buildDashboardDocument(sections, meta);\n if (!doc.isDashboard) return ['file is not a dashboard note (missing dashboard frontmatter)'];\n if (doc.title === undefined) problems.push('dashboard has no title');\n if (doc.widgets.length < 3) problems.push(`dashboard has only ${doc.widgets.length} widgets (the locked format has ≥ 3)`);\n const declared = new Set(doc.tokens.map((t) => t.name));\n for (const widget of doc.widgets) {\n const where = `widget '${widget.title ?? widget.body.slice(0, 40)}'`;\n if (widget.title === undefined) problems.push(`${where}: missing title`);\n if (!isDashboardWidgetType(resolveWidgetType(widget.type))) {\n problems.push(`${where}: unknown widget type '${widget.type}'`);\n }\n if (widget.body.includes('\\n')) {\n const docParsed = parseDocument(widget.body);\n if (docParsed.diagnostics.length > 0) {\n problems.push(`${where}: QueryDocument error: ${docParsed.diagnostics[0]}`);\n }\n } else {\n const parsed = parseQuery(widget.body);\n if (parsed.error !== undefined) problems.push(`${where}: WQL parse error: ${parsed.error}`);\n }\n for (const ref of [\n ...widget.body.matchAll(/\\$([A-Za-z][\\w-]*)/g),\n ...Object.values(widget.attributes).flatMap((v) => [...String(v).matchAll(/\\$([A-Za-z][\\w-]*)/g)]),\n ]) {\n if (!declared.has(ref[1])) problems.push(`${where}: undeclared token $${ref[1]}`);\n }\n }\n return problems;\n}\n\n/** Validate every dashboard file in a chunk group; throws on the first invalid file. */\nfunction gateDashboards(groups: ChunkGroup[], corpusRoot: string): void {\n for (const group of groups) {\n if (group.id !== DASHBOARDS_CHUNK_ID) continue;\n for (const p of group.files) {\n const problems = validateDashboardNote(readFileSync(join(corpusRoot, p), 'utf8'));\n if (problems.length > 0) {\n throw new Error(`[generate-seed] Dashboard validation failed for '${p}':\\n - ${problems.join('\\n - ')}`);\n }\n }\n }\n}\n\n// ── Block index derivation ────────────────────────────────────────────────\n\n\ninterface GitPathStats {\n commit: string;\n ctMs: number;\n cI: string;\n count: number;\n}\n\ninterface GitHistoryIndex {\n files: Map<string, GitPathStats>;\n dirs: Map<string, GitPathStats>;\n}\n\nconst EMPTY_GIT_INDEX: GitHistoryIndex = { files: new Map(), dirs: new Map() };\nconst gitHistoryCache = new Map<string, GitHistoryIndex>();\n\nfunction normalizeRelGitPath(p: string): string {\n return p.replace(/\\\\/g, '/').replace(/^\\.\\//, '').replace(/^\\/+|\\/+$/g, '');\n}\n\nfunction getGitHistoryIndex(repoRoot: string, targetRelPath?: string): GitHistoryIndex {\n const normTarget = targetRelPath ? normalizeRelGitPath(targetRelPath) : '';\n const topSegment = normTarget.split('/')[0] ?? '';\n const scopeArg = topSegment && existsSync(join(repoRoot, topSegment)) ? topSegment : '.';\n\n let prefix: string;\n let headSha: string;\n try {\n const rev = execFileSync('git', ['rev-parse', '--show-prefix', 'HEAD'], {\n cwd: repoRoot,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n const lines = rev.split('\\n');\n prefix = lines[0] ?? '';\n headSha = (lines[1] ?? '').trim();\n } catch {\n return EMPTY_GIT_INDEX;\n }\n if (!headSha) return EMPTY_GIT_INDEX;\n\n const cacheKey = `${repoRoot}::${prefix}::${scopeArg}::${headSha}`;\n const cached = gitHistoryCache.get(cacheKey);\n if (cached) return cached;\n\n const files = new Map<string, GitPathStats>();\n const dirs = new Map<string, GitPathStats>();\n try {\n const out = execFileSync(\n 'git',\n ['log', '--format=\\x1e%H\\t%ct\\t%cI', '--name-only', 'HEAD', '--', scopeArg],\n {\n cwd: repoRoot,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n maxBuffer: 64 * 1024 * 1024,\n },\n );\n for (const block of out.split('\\x1e')) {\n const trimmed = block.trim();\n if (!trimmed) continue;\n const lines = trimmed.split('\\n');\n const header = lines[0] ?? '';\n const [commit = '', ctStr = '0', cI = ''] = header.split('\\t');\n const ts = Number(ctStr) * 1000;\n const ctMs = Number.isFinite(ts) && ts > 0 ? ts : 0;\n const seenDirs = new Set<string>();\n\n for (let i = 1; i < lines.length; i++) {\n let rel = lines[i]!.trim();\n if (!rel) continue;\n if (prefix) {\n if (!rel.startsWith(prefix)) continue;\n rel = rel.slice(prefix.length);\n }\n rel = normalizeRelGitPath(rel);\n if (!rel) continue;\n\n const existingFile = files.get(rel);\n if (!existingFile) {\n files.set(rel, { commit, ctMs, cI, count: 1 });\n } else {\n existingFile.count += 1;\n }\n\n let slash = rel.lastIndexOf('/');\n while (slash > 0) {\n seenDirs.add(rel.slice(0, slash));\n slash = rel.lastIndexOf('/', slash - 1);\n }\n }\n\n for (const dir of seenDirs) {\n const existingDir = dirs.get(dir);\n if (!existingDir) {\n dirs.set(dir, { commit, ctMs, cI, count: 1 });\n } else {\n existingDir.count += 1;\n }\n }\n }\n } catch {\n return EMPTY_GIT_INDEX;\n }\n\n if (gitHistoryCache.size >= 8) {\n gitHistoryCache.clear();\n }\n const built: GitHistoryIndex = { files, dirs };\n gitHistoryCache.set(cacheKey, built);\n return built;\n}\n\n/** Created-at from the corpus repo's git history (notebooks/guides), 0 fallback when unknown. */\nfunction getFileCreatedAt(file: string, repoRoot: string): number {\n const norm = normalizeRelGitPath(file);\n return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.ctMs ?? 0;\n}\n\nexport function seedNoteIdSync(path: string): string {\n const hash = createHash('sha1').update(`${SEED_NAMESPACE}:${path}`).digest();\n const bytes = new Uint8Array(hash.subarray(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n return [...bytes].map((b, i) => ([4, 6, 8, 10].includes(i) ? `-${b.toString(16).padStart(2, '0')}` : b.toString(16).padStart(2, '0'))).join('');\n}\n\nexport function getFileCommit(file: string, repoRoot: string): string {\n const norm = normalizeRelGitPath(file);\n return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.commit ?? '';\n}\n\nexport function getFileVersion(file: string, repoRoot: string): number {\n const norm = normalizeRelGitPath(file);\n return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.count ?? 1;\n}\n\nfunction lookupPathStats(targetPath: string, repoRoot: string): GitPathStats | undefined {\n const norm = normalizeRelGitPath(targetPath);\n const idx = getGitHistoryIndex(repoRoot, norm);\n return idx.dirs.get(norm) ?? idx.files.get(norm);\n}\n\nexport function getPathVersion(targetPath: string, repoRoot: string): number {\n return lookupPathStats(targetPath, repoRoot)?.count ?? 1;\n}\n\nexport function getPathCommit(targetPath: string, repoRoot: string): string {\n return lookupPathStats(targetPath, repoRoot)?.commit ?? '';\n}\n\nexport function getPathUpdatedAt(targetPath: string, repoRoot: string): string | undefined {\n const cI = lookupPathStats(targetPath, repoRoot)?.cI;\n return cI || undefined;\n}\n\nexport function groupCorpusPath(id: string): string {\n if (id.startsWith('notebook.')) {\n const slug = id.slice('notebook.'.length);\n return slug === '_root' ? 'markdown/notebooks' : `markdown/notebooks/${slug}`;\n }\n return `markdown/${id}`;\n}\n\n/**\n * Frontmatter `date: YYYY-MM-DD` → epoch ms at noon UTC (mirrors the seed\n * importer's Note.date, so the block and note planes place a post on the\n * same civil day). Absent/empty → undefined; anything else that is not a\n * real calendar day throws — the build fails loudly instead of silently\n * misdating or rolling the post to another day.\n */\nexport function frontmatterDateToCreatedAt(raw: string, path: string): number | undefined {\n const value = getScalar(parseFrontmatter(raw).meta, 'date');\n if (value === undefined || value === '') return undefined;\n const text = String(value);\n const parts = text.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n const ts = parts ? Date.parse(`${text}T12:00:00Z`) : NaN;\n // Some engines roll impossible days (2026-02-30 → March 2) instead of\n // failing — round-trip the UTC components so the post can never silently\n // move to another day.\n const valid = !!parts && Number.isFinite(ts)\n && new Date(ts).getUTCMonth() === Number(parts[2]) - 1\n && new Date(ts).getUTCDate() === Number(parts[3]);\n if (!valid) {\n throw new Error(`[wod build] invalid frontmatter date '${text}' in '${path}' — expected a real calendar day (YYYY-MM-DD)`);\n }\n return ts;\n}\n\n/** Created-at timestamp for a dated notebook item's date key (`yyyy-mm-dd` from the path). */\nexport function dateKeyToCreatedAt(dateKey: string): number {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateKey)) return 0;\n const ts = Date.parse(`${dateKey}T00:00:00Z`);\n return Number.isNaN(ts) ? 0 : ts;\n}\n\n// canvasRouteSlug lives in contract.ts — one derivation shared by the\n// block plane (here) and the app's importer (note plane).\n\n\nfunction compileCompanionTelemetry(path: string, jsonl: string, blockIndex: BlockIndexRow[]): SeedRow['telemetry'] {\n const firstWod = blockIndex.find((block) => block.dataType === 'wod');\n const noteId = seedNoteIdSync(path);\n const normalized = jsonl.split(/\\r?\\n/).map((line) => {\n if (!line.trim()) return line;\n const parsed: unknown = JSON.parse(line);\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) return line;\n const record: Record<string, unknown> = { ...parsed, noteId };\n if (record.kind === 'session' || record.kind === 'event') {\n if (!firstWod) throw new Error(`Telemetry for '${path}' requires a wod block`);\n if (record.blockId === undefined || record.blockId === '@first-wod') record.blockId = firstWod.blockId;\n if (record.blockVersion === undefined || record.blockVersion === '@first-wod') record.blockVersion = firstWod.blockVersion;\n if (record.blockContentId === undefined || record.blockContentId === '@first-wod') record.blockContentId = firstWod.blockContentId;\n }\n return JSON.stringify(record);\n }).join('\\n');\n const parsed = parseNoteBundleFromJsonl(normalized);\n if (parsed.errors.length > 0) throw new Error(`Invalid telemetry companion '${path}': ${parsed.errors.join('; ')}`);\n return {\n sessions: parsed.bundles.flatMap((bundle) => bundle.sessions),\n events: parsed.bundles.flatMap((bundle) => bundle.events),\n };\n}\n\nexport function compileSeedRow(path: string, content: string, metadata: { routeId?: string; noteTitle?: string; sourceId?: string; createdAt?: number; telemetryJsonl?: string } = {}): SeedRow {\n let ordinal = 0;\n const blocks = reconcileNoteBlocks(content, { sourceRevision: 1, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${path}:${ordinal++}` });\n const noteId = metadata.routeId ?? path;\n const sections = parseDocumentSections(content);\n const blockIndex: BlockIndexRow[] = Object.values(blocks).map((block, position) => {\n const section = sections.find((section) => section.from === block.from && section.to === block.to);\n return { id: `${noteId}:${block.id}`, noteId, blockId: block.id, blockVersion: 1, sourceRevision: 1, from: block.from, to: block.to, position, dataType: block.kind, ...(block.kind === 'wod' ? { blockContentId: blockContentId(section?.scriptBlock?.content ?? content.slice(block.from, block.to)) } : {}), rawContent: content.slice(block.from, block.to), noteTitle: metadata.noteTitle ?? fileToDisplayName(path.split('/').at(-1) ?? path), createdAt: metadata.createdAt ?? 0, isStatic: true, sourceId: metadata.sourceId, sourcePath: path, routeId: metadata.routeId };\n });\n const telemetry = metadata.telemetryJsonl === undefined ? undefined : compileCompanionTelemetry(path, metadata.telemetryJsonl, blockIndex);\n return { path, content, blocks, blockIndex, blockEfforts: [], blockEquipment: [], ...(telemetry ? { telemetry } : {}) };\n}\n\nexport function buildBlockIndexRows(markdownDir: string, corpusRoot: string, excludePaths: readonly string[] = []): BlockIndexRow[] {\n const rows: BlockIndexRow[] = [];\n for (const path of collectCorpusMarkdown(markdownDir, excludePaths)) {\n const chunkId = chunkIdFor(path);\n if (!chunkId) continue;\n const content = readFileSync(join(corpusRoot, path), 'utf8');\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/, '');\n const slug = parts[2];\n const routeId = chunkId === 'canvas' ? canvasRouteSlug(content) ?? undefined : chunkId.startsWith('notebook.') ? (stem.toLowerCase() === 'readme' ? slug : parts.slice(2).join('/').replace(/\\.md$/, '')) : undefined;\n const sourceId = seedNoteSourceId(path, content, chunkId);\n // Authored frontmatter date wins regardless of filename/directory; dated\n // notebooks keep their historical path-date placement, everything else\n // falls back to the corpus repo's git history.\n const createdAt = frontmatterDateToCreatedAt(content, path)\n ?? (chunkId.startsWith('notebook.') && /^\\d{4}-\\d{2}-\\d{2}$/.test(parts.at(-2) ?? '') ? dateKeyToCreatedAt(parts.at(-2) ?? '') : getFileCreatedAt(path, corpusRoot));\n rows.push(...compileSeedRow(path, content, { routeId, sourceId, createdAt }).blockIndex);\n }\n return rows;\n}\n\n/**\n * Syntax gate — every `wod` block's script must parse cleanly.\n *\n * Plain fences get a strict scan of the Lezer tree for error nodes\n * (`WhiteboardScript.errors` only carries mapper exceptions; the parser\n * recovers silently, so the tree is scanned directly) with `path:line`\n * diagnostics. Dialect-fenced blocks (`log:climbing`, …) are owned by the\n * dialect stack — their `key: value` lines are recovered by dialect\n * handlers, not the base grammar — so those gate on the exception channel\n * of a dialect-aware parse instead, matching how the app consumes them.\n */\nexport function validateWodBlockSyntax(blocks: BlockIndexRow[]): string[] {\n const problems: string[] = [];\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent?.trim()) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS })\n .find((s) => s.scriptBlock);\n const source = section?.scriptBlock?.content ?? block.rawContent;\n if (!source.trim()) continue;\n\n const where = block.sourcePath ?? block.noteId;\n if (section?.sport) {\n const parsed = parseScript(source, { sport: section.sport });\n for (const error of parsed.errors ?? []) {\n problems.push(`${where}: ${error.message}`);\n }\n continue;\n }\n\n const doc = source.endsWith('\\n') ? source : source + '\\n';\n const tree = whiteboardParser.parse(doc);\n tree.iterate({\n enter: (node) => {\n if (!node.type.isError) return;\n const line = doc.slice(0, node.from).split('\\n').length;\n const snippet = source.slice(node.from, Math.min(node.to, node.from + 60)).split('\\n')[0];\n problems.push(`${where}:${line} \\`${snippet}\\``);\n },\n });\n }\n return problems;\n}\n\n/**\n * Uncataloged effort discovered during workout block analysis.\n */\nexport interface DiscoveredEffort {\n slug: string;\n label: string;\n rawLabels: string[];\n}\n\n/** Static lookup — syntax/structure keywords and known non-effort labels that must never scaffold. */\nconst NON_EFFORT_SLUGS: Record<string, true> = {\n 'amrap': true, 'emom': true, 'tabata': true, 'for-time': true, 'rounds': true, 'sets': true,\n 'repetitions': true, 'count-down': true, 'total-reps': true,\n 'warmup': true, 'cooldown': true, 'cool-down': true, 'transition': true, 'rest': true, 'break': true, 'work': true,\n 'i-suck-at-this': true, 'isuckatthis': true, 'movement': true, 'movement-you': true, 'selected-exercise': true,\n 'training-setup': true, 'grade-system': true, 'hangs': true, 'warm-light-wind': true, 'basin': true, 'rock-canyon': true,\n 'b-onsight': true, 'a-redpoint': true, 'd-redpoint': true, 'v0-flash': true, 'v2-flash': true, 'v7-redpoint': true,\n 'avgrpe-mean': true, 'calculate': true, 'totalload-sum': true, 'query': true, 'by': true,\n '': true, '-': true, '...': true, 'x': true, 's': true, 'bw': true,\n};\n\nfunction formatDiscoveredLabel(raw: string): string {\n const clean = raw.replace(/[-_]+/g, ' ').trim();\n return clean\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n}\n\n/**\n * ONE corpus reference catalog — both definition families parsed once into\n * real arrays, the direct feed for lang's `createReferenceIndex`. Effort and\n * equipment containment rows, discovery and the runtime all resolve through\n * that single index, so the static plane and runtime agree on canonical\n * slugs with no per-family copies.\n */\nexport function loadCorpusReferenceCatalog(markdownDir: string): { efforts: IEffort[]; equipment: IEquipment[] } {\n const efforts: IEffort[] = [];\n const equipment: IEquipment[] = [];\n const effortsDir = join(markdownDir, 'efforts');\n for (const file of listMarkdownFiles(effortsDir)) {\n const parsed = parseEffortFile(readFileSync(join(effortsDir, file), 'utf8'));\n if (parsed) efforts.push(parsed);\n }\n const equipmentDir = join(markdownDir, 'equipment');\n for (const file of listMarkdownFiles(equipmentDir)) {\n const parsed = parseEquipmentFile(readFileSync(join(equipmentDir, file), 'utf8'));\n if (parsed) equipment.push(parsed);\n }\n return { efforts, equipment };\n}\n\nexport function discoverUncatalogedEfforts(markdownDir: string, corpusRoot: string, excludePaths: readonly string[] = []): DiscoveredEffort[] {\n const catalog = loadCorpusReferenceCatalog(markdownDir);\n const index = createReferenceIndex(catalog);\n const blocks = buildBlockIndexRows(markdownDir, corpusRoot, excludePaths);\n const discovered = new Map<string, { label: string; rawLabels: Set<string> }>();\n\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((section) => section.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent, { references: index });\n for (const statement of script.statements) {\n const effortMetric = statement.metrics?.getMetric?.('effort');\n const effortLabel = (effortMetric && typeof effortMetric.value === 'string' ? effortMetric.value : undefined) ?? statement.exerciseId;\n if (!effortLabel) continue;\n\n const slugified = slugifyRefLabel(effortLabel);\n if (!slugified || NON_EFFORT_SLUGS[slugified]) continue;\n\n // Known efforts are exactly the catalog's canonical slugs — discovery\n // only reports labels the shared index cannot resolve.\n if (index.resolveEffort(slugified) || index.resolveEffort(effortLabel)) continue;\n\n const existing = discovered.get(slugified);\n if (existing) {\n existing.rawLabels.add(effortLabel);\n } else {\n discovered.set(slugified, {\n label: formatDiscoveredLabel(effortLabel),\n rawLabels: new Set([effortLabel]),\n });\n }\n }\n }\n\n return Array.from(discovered.entries()).map(([slug, data]) => ({\n slug,\n label: data.label,\n rawLabels: Array.from(data.rawLabels),\n }));\n}\n\nexport function scaffoldDiscoveredEfforts(\n discovered: DiscoveredEffort[],\n markdownDir: string,\n): string[] {\n const targetDir = join(markdownDir, 'efforts', 'discovered');\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n const createdPaths: string[] = [];\n for (const effort of discovered) {\n const filePath = join(targetDir, `${effort.slug}.md`);\n if (existsSync(filePath)) continue;\n\n const aliases = effort.rawLabels\n .filter((l) => l.toLowerCase() !== effort.label.toLowerCase())\n .map((l) => ` - \"${l.replace(/\"/g, '\\\\\"')}\"`);\n\n const content = [\n '---',\n `id: effort-bundled-${effort.slug}`,\n `slug: ${effort.slug}`,\n `label: \"${effort.label.replace(/\"/g, '\\\\\"')}\"`,\n aliases.length > 0 ? `aliases:\\n${aliases.join('\\n')}` : 'aliases: []',\n 'baseAttributes:',\n ' met: 5.0',\n ' discipline: general',\n ' intensityTier: moderate',\n 'registrySource: bundled',\n '---',\n '',\n ].join('\\n');\n\n writeFileSync(filePath, content, 'utf8');\n createdPaths.push(filePath);\n }\n\n return createdPaths;\n}\n\n/**\n * Derive BlockEffort[] containment rows from the block-index row set.\n * Requires a second pass over the source markdown to parse the script AST\n * (with the corpus reference index configured, so statements carry canonical\n * refs), which is safe because the corpus is static and compile-time.\n *\n * Only VALIDATED refs enter the durable index: a slug that survives is\n * confirmed by the shared index (`resolveEffort`); uncataloged movements\n * produce no durable link — that is discovery's reporting job.\n */\nexport function buildBlockEffortRows(markdownDir: string, corpusRoot: string, blocks: BlockIndexRow[] = buildBlockIndexRows(markdownDir, corpusRoot)): BlockEffort[] {\n const efforts: BlockEffort[] = [];\n const index = createReferenceIndex(loadCorpusReferenceCatalog(markdownDir));\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((section) => section.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent, { references: index });\n const linked = new Set<string>();\n for (const rawSlug of extractStatementRefs(script.statements).efforts) {\n const canonical = index.resolveEffort(rawSlug);\n const canonicalSlug = canonical?.slug;\n if (!canonicalSlug || NON_EFFORT_SLUGS[canonicalSlug] || NON_EFFORT_SLUGS[rawSlug]) {\n continue;\n }\n if (linked.has(canonicalSlug)) continue;\n linked.add(canonicalSlug);\n efforts.push({\n id: `${block.id}:${canonicalSlug}`,\n noteId: block.noteId,\n blockId: block.blockId,\n blockContentId: block.blockContentId,\n effortSlug: canonicalSlug,\n isStatic: block.isStatic,\n sourcePath: block.sourcePath,\n createdAt: block.createdAt,\n });\n }\n }\n return efforts;\n}\n\n/**\n * Derive BlockEquipment[] containment rows — the equipment twin of\n * {@link buildBlockEffortRows}. Parsed with the corpus reference index so\n * statements carry canonical equipment refs; only slugs the shared index\n * confirms (`resolveEquipment`) produce a durable link. Unknown equipment\n * stays visible as authored source + parser diagnostics.\n */\nexport function buildBlockEquipmentRows(markdownDir: string, corpusRoot: string, blocks: BlockIndexRow[] = buildBlockIndexRows(markdownDir, corpusRoot)): BlockEquipment[] {\n const links: BlockEquipment[] = [];\n const index = createReferenceIndex(loadCorpusReferenceCatalog(markdownDir));\n for (const block of blocks) {\n if (block.dataType !== 'wod' || !block.rawContent) continue;\n const section = parseDocumentSections(block.rawContent, { registeredWidgets: SEED_REGISTERED_WIDGETS }).find((s) => s.scriptBlock);\n const script = parseScript(section?.scriptBlock?.content ?? block.rawContent, { references: index });\n const linked = new Set<string>();\n for (const rawSlug of extractStatementRefs(script.statements).equipment) {\n const canonicalSlug = index.resolveEquipment(rawSlug)?.slug;\n if (!canonicalSlug || linked.has(canonicalSlug)) continue;\n linked.add(canonicalSlug);\n links.push({\n id: `${block.id}:${canonicalSlug}`,\n noteId: block.noteId,\n blockId: block.blockId,\n blockContentId: block.blockContentId,\n equipmentSlug: canonicalSlug,\n isStatic: block.isStatic,\n sourcePath: block.sourcePath,\n createdAt: block.createdAt,\n });\n }\n }\n return links;\n}\n\n\n// ── Generation ────────────────────────────────────────────────────────────\n\nfunction sha256Hex(data: string | Buffer): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nexport function generateSeed(options: GenerateSeedOptions = {}): GenerateSeedResult {\n const t0 = Date.now();\n const passMs = { scan: 0, blockIndex: 0, parseGate: 0, blockEfforts: 0, write: 0 };\n const corpusRoot = options.corpusRoot ?? process.cwd();\n const markdownDir = options.markdownDir ?? join(corpusRoot, 'markdown');\n const outDir = options.outDir ?? join(corpusRoot, 'dist');\n const gitVersion = options.version !== undefined\n ? { ...resolveGitVersion(corpusRoot), version: options.version }\n : resolveGitVersion(corpusRoot);\n const packageFile = join(corpusRoot, 'package.json');\n const packageMetadata: unknown = existsSync(packageFile) ? JSON.parse(readFileSync(packageFile, 'utf8')) : {};\n const metadata = packageMetadata && typeof packageMetadata === 'object' ? packageMetadata : {};\n const repository = 'repository' in metadata ? metadata.repository : undefined;\n const repositoryUrl = typeof repository === 'string' ? repository : repository && typeof repository === 'object' && 'url' in repository && typeof repository.url === 'string' ? repository.url : undefined;\n const webRepositoryUrl = repositoryUrl?.replace(/^git\\+/, '').replace(/\\.git$/, '');\n const repositoryLink = webRepositoryUrl && URL.canParse(webRepositoryUrl) ? new URL(webRepositoryUrl) : undefined;\n if (options.scaffoldDiscoveredEfforts) {\n const discovered = discoverUncatalogedEfforts(markdownDir, corpusRoot, options.excludePaths);\n if (discovered.length > 0) {\n scaffoldDiscoveredEfforts(discovered, markdownDir);\n }\n }\n\n const tScan = Date.now();\n const paths = collectCorpusMarkdown(markdownDir, options.excludePaths);\n const groups = partitionIntoChunks(paths);\n gateDashboards(groups, corpusRoot);\n passMs.scan = Date.now() - tScan;\n\n const tBlockIndex = Date.now();\n const blockRows = buildBlockIndexRows(markdownDir, corpusRoot, options.excludePaths);\n passMs.blockIndex = Date.now() - tBlockIndex;\n const tParseGate = Date.now();\n const syntaxProblems = validateWodBlockSyntax(blockRows);\n passMs.parseGate = Date.now() - tParseGate;\n if (syntaxProblems.length > 0) {\n const shown = syntaxProblems.slice(0, 20).map((p) => ` ${p}`).join('\\n');\n const more = syntaxProblems.length > 20 ? `\\n … and ${syntaxProblems.length - 20} more` : '';\n throw new Error(`[wod build] block syntax gate failed — ${syntaxProblems.length} block(s) do not parse:\\n${shown}${more}`);\n }\n\n const chunksDir = join(outDir, 'chunks');\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(chunksDir, { recursive: true });\n\n const manifestChunks: ManifestChunk[] = [];\n const tBlockEfforts = Date.now();\n const effortRows = buildBlockEffortRows(markdownDir, corpusRoot, blockRows);\n const equipmentRows = buildBlockEquipmentRows(markdownDir, corpusRoot, blockRows);\n passMs.blockEfforts = Date.now() - tBlockEfforts;\n const blocksByPath = new Map<string, BlockIndexRow[]>();\n const effortsByPath = new Map<string, BlockEffort[]>();\n const equipmentByPath = new Map<string, BlockEquipment[]>();\n for (const row of blockRows) {\n const rows = blocksByPath.get(row.sourcePath!) ?? [];\n rows.push(row); blocksByPath.set(row.sourcePath!, rows);\n }\n for (const row of effortRows) {\n const rows = effortsByPath.get(row.sourcePath!) ?? [];\n rows.push(row); effortsByPath.set(row.sourcePath!, rows);\n }\n for (const row of equipmentRows) {\n const rows = equipmentByPath.get(row.sourcePath!) ?? [];\n rows.push(row); equipmentByPath.set(row.sourcePath!, rows);\n }\n let totalFiles = 0;\n const manifestNotebooks: NotebookIndexSummary[] = [];\n const manifestBuiltAt = new Date().toISOString();\n\n const tWrite = Date.now();\n for (const { id, files } of groups) {\n const records: SeedRecordRef[] = [];\n const rows: SeedRow[] = files.map((p) => {\n const raw = readFileSync(join(corpusRoot, p), 'utf8');\n const content = raw;\n const companionPath = join(corpusRoot, p.replace(/\\.md$/, '.jsonl'));\n const compiled = compileSeedRow(p, content, { telemetryJsonl: existsSync(companionPath) ? readFileSync(companionPath, 'utf8') : undefined });\n compiled.blockIndex = blocksByPath.get(p) ?? compiled.blockIndex;\n compiled.blockEfforts = effortsByPath.get(p) ?? [];\n compiled.blockEquipment = equipmentByPath.get(p) ?? [];\n const fileCommit = getFileCommit(p, corpusRoot) || gitVersion.commit || '';\n const fileVer = getFileVersion(p, corpusRoot);\n const uuid = seedNoteIdSync(p);\n compiled.commit = fileCommit;\n compiled.uuid = uuid;\n compiled.version = fileVer;\n\n // Write compiled record JSON alongside markdown\n const recordRelPath = p.replace(/\\.md$/, '.json');\n const recordOutFile = join(outDir, recordRelPath);\n mkdirSync(dirname(recordOutFile), { recursive: true });\n const recordBytes = Buffer.from(JSON.stringify(compiled, null, 2), 'utf8');\n writeFileSync(recordOutFile, recordBytes);\n if (compiled.telemetry) {\n writeFileSync(join(outDir, p.replace(/\\.md$/, '.jsonl')), serializeNoteBundleToJsonl(compiled.telemetry) + '\\n');\n }\n\n const title = compiled.blockIndex[0]?.noteTitle ?? fileToDisplayName(p.split('/').at(-1) ?? p);\n records.push({\n uuid,\n path: p,\n recordPath: recordRelPath,\n commit: fileCommit,\n version: fileVer,\n sha256: sha256Hex(recordBytes),\n title,\n date: frontmatterDateToCreatedAt(content, p),\n });\n\n return compiled;\n });\n assertSeedRows(rows);\n const bytes = Buffer.from(JSON.stringify(rows), 'utf8');\n const sha = sha256Hex(bytes);\n const file = `chunks/${id}.${sha.slice(0, 8)}.json`;\n writeFileSync(join(outDir, file), bytes);\n manifestChunks.push({ id, path: file, sha256: sha, bytes: bytes.length, count: rows.length });\n totalFiles += rows.length;\n\n // Emit notebook index\n const groupPath = groupCorpusPath(id);\n const groupVersion = getPathVersion(groupPath, corpusRoot);\n const groupCommit = getPathCommit(groupPath, corpusRoot) || gitVersion.commit || '';\n const groupUpdatedAt = getPathUpdatedAt(groupPath, corpusRoot);\n\n const notebookIndexPath = `indexes/notebooks/${id}.json`;\n const summary: NotebookIndexSummary = {\n notebookId: id,\n label: fileToDisplayName(id.split('.').at(-1) ?? id),\n category: notebookSlugForChunkId(id),\n indexPath: notebookIndexPath,\n version: groupVersion,\n commit: groupCommit,\n updatedAt: groupUpdatedAt,\n builtAt: manifestBuiltAt,\n sha256: sha,\n bytes: bytes.length,\n count: rows.length,\n };\n const notebookIndex: NotebookIndex = {\n ...summary,\n records,\n };\n assertNotebookIndex(notebookIndex);\n const indexOutFile = join(outDir, notebookIndexPath);\n mkdirSync(dirname(indexOutFile), { recursive: true });\n writeFileSync(indexOutFile, JSON.stringify(notebookIndex, null, 2) + '\\n');\n manifestNotebooks.push(summary);\n }\n\n passMs.write = Date.now() - tWrite;\n\n const manifest: SeedManifest = {\n name: 'name' in metadata && typeof metadata.name === 'string' ? metadata.name : undefined,\n description: 'description' in metadata && typeof metadata.description === 'string' ? metadata.description : undefined,\n repositoryUrl: repositoryLink?.protocol === 'https:' && !repositoryLink.username && !repositoryLink.password ? repositoryLink.href : undefined,\n schema: SEED_SCHEMA,\n version: gitVersion.version,\n versionLabel: gitVersion.versionLabel,\n commit: gitVersion.commit,\n dirty: gitVersion.dirty,\n builtAt: manifestBuiltAt,\n chunks: manifestChunks,\n notebooks: manifestNotebooks,\n };\n assertSeedManifest(manifest);\n writeFileSync(join(outDir, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\\n');\n\n const reportPath = writeBuildReport(outDir, {\n manifest,\n totalMs: Date.now() - t0,\n passMs,\n fileCount: paths.length,\n outDir,\n });\n\n return { manifest, outDir, totalFiles, reportPath, passMs };\n}\n"]}
package/dist/index.cjs CHANGED
@@ -439,7 +439,7 @@ var init_report = __esm({
439
439
  var VERSION;
440
440
  var init_version = __esm({
441
441
  "src/version.ts"() {
442
- VERSION = "0.52.2198";
442
+ VERSION = "0.53.2204";
443
443
  }
444
444
  });
445
445
 
@@ -914,14 +914,96 @@ function gateDashboards(groups, corpusRoot) {
914
914
  }
915
915
  }
916
916
  }
917
- function getFileCreatedAt(file, repoRoot) {
917
+ function normalizeRelGitPath(p) {
918
+ return p.replace(/\\/g, "/").replace(/^\.\//, "").replace(/^\/+|\/+$/g, "");
919
+ }
920
+ function getGitHistoryIndex(repoRoot, targetRelPath) {
921
+ const normTarget = targetRelPath ? normalizeRelGitPath(targetRelPath) : "";
922
+ const topSegment = normTarget.split("/")[0] ?? "";
923
+ const scopeArg = topSegment && fs.existsSync(path.join(repoRoot, topSegment)) ? topSegment : ".";
924
+ let prefix;
925
+ let headSha;
918
926
  try {
919
- const out = child_process.execSync(`git log -1 --format=%ct -- '${file}'`, { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
920
- const ts = Number(out) * 1e3;
921
- return Number.isFinite(ts) && ts > 0 ? ts : 0;
927
+ const rev = child_process.execFileSync("git", ["rev-parse", "--show-prefix", "HEAD"], {
928
+ cwd: repoRoot,
929
+ encoding: "utf8",
930
+ stdio: ["ignore", "pipe", "ignore"]
931
+ });
932
+ const lines = rev.split("\n");
933
+ prefix = lines[0] ?? "";
934
+ headSha = (lines[1] ?? "").trim();
922
935
  } catch {
923
- return 0;
936
+ return EMPTY_GIT_INDEX;
937
+ }
938
+ if (!headSha) return EMPTY_GIT_INDEX;
939
+ const cacheKey = `${repoRoot}::${prefix}::${scopeArg}::${headSha}`;
940
+ const cached = gitHistoryCache.get(cacheKey);
941
+ if (cached) return cached;
942
+ const files = /* @__PURE__ */ new Map();
943
+ const dirs = /* @__PURE__ */ new Map();
944
+ try {
945
+ const out = child_process.execFileSync(
946
+ "git",
947
+ ["log", "--format=%H %ct %cI", "--name-only", "HEAD", "--", scopeArg],
948
+ {
949
+ cwd: repoRoot,
950
+ encoding: "utf8",
951
+ stdio: ["ignore", "pipe", "ignore"],
952
+ maxBuffer: 64 * 1024 * 1024
953
+ }
954
+ );
955
+ for (const block of out.split("")) {
956
+ const trimmed = block.trim();
957
+ if (!trimmed) continue;
958
+ const lines = trimmed.split("\n");
959
+ const header = lines[0] ?? "";
960
+ const [commit = "", ctStr = "0", cI = ""] = header.split(" ");
961
+ const ts = Number(ctStr) * 1e3;
962
+ const ctMs = Number.isFinite(ts) && ts > 0 ? ts : 0;
963
+ const seenDirs = /* @__PURE__ */ new Set();
964
+ for (let i = 1; i < lines.length; i++) {
965
+ let rel = lines[i].trim();
966
+ if (!rel) continue;
967
+ if (prefix) {
968
+ if (!rel.startsWith(prefix)) continue;
969
+ rel = rel.slice(prefix.length);
970
+ }
971
+ rel = normalizeRelGitPath(rel);
972
+ if (!rel) continue;
973
+ const existingFile = files.get(rel);
974
+ if (!existingFile) {
975
+ files.set(rel, { commit, ctMs, cI, count: 1 });
976
+ } else {
977
+ existingFile.count += 1;
978
+ }
979
+ let slash = rel.lastIndexOf("/");
980
+ while (slash > 0) {
981
+ seenDirs.add(rel.slice(0, slash));
982
+ slash = rel.lastIndexOf("/", slash - 1);
983
+ }
984
+ }
985
+ for (const dir of seenDirs) {
986
+ const existingDir = dirs.get(dir);
987
+ if (!existingDir) {
988
+ dirs.set(dir, { commit, ctMs, cI, count: 1 });
989
+ } else {
990
+ existingDir.count += 1;
991
+ }
992
+ }
993
+ }
994
+ } catch {
995
+ return EMPTY_GIT_INDEX;
924
996
  }
997
+ if (gitHistoryCache.size >= 8) {
998
+ gitHistoryCache.clear();
999
+ }
1000
+ const built = { files, dirs };
1001
+ gitHistoryCache.set(cacheKey, built);
1002
+ return built;
1003
+ }
1004
+ function getFileCreatedAt(file, repoRoot) {
1005
+ const norm = normalizeRelGitPath(file);
1006
+ return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.ctMs ?? 0;
925
1007
  }
926
1008
  function seedNoteIdSync(path) {
927
1009
  const hash = crypto.createHash("sha1").update(`${contract_exports.SEED_NAMESPACE}:${path}`).digest();
@@ -931,44 +1013,27 @@ function seedNoteIdSync(path) {
931
1013
  return [...bytes].map((b, i) => [4, 6, 8, 10].includes(i) ? `-${b.toString(16).padStart(2, "0")}` : b.toString(16).padStart(2, "0")).join("");
932
1014
  }
933
1015
  function getFileCommit(file, repoRoot) {
934
- try {
935
- return child_process.execFileSync("git", ["log", "-1", "--format=%H", "--", file], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
936
- } catch {
937
- return "";
938
- }
1016
+ const norm = normalizeRelGitPath(file);
1017
+ return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.commit ?? "";
939
1018
  }
940
1019
  function getFileVersion(file, repoRoot) {
941
- try {
942
- const out = child_process.execFileSync("git", ["rev-list", "--count", "HEAD", "--", file], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
943
- const count = Number(out);
944
- return Number.isFinite(count) && count > 0 ? count : 1;
945
- } catch {
946
- return 1;
947
- }
1020
+ const norm = normalizeRelGitPath(file);
1021
+ return getGitHistoryIndex(repoRoot, norm).files.get(norm)?.count ?? 1;
1022
+ }
1023
+ function lookupPathStats(targetPath, repoRoot) {
1024
+ const norm = normalizeRelGitPath(targetPath);
1025
+ const idx = getGitHistoryIndex(repoRoot, norm);
1026
+ return idx.dirs.get(norm) ?? idx.files.get(norm);
948
1027
  }
949
1028
  function getPathVersion(targetPath, repoRoot) {
950
- try {
951
- const out = child_process.execFileSync("git", ["rev-list", "--count", "HEAD", "--", targetPath], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
952
- const count = Number(out);
953
- return Number.isFinite(count) && count > 0 ? count : 1;
954
- } catch {
955
- return 1;
956
- }
1029
+ return lookupPathStats(targetPath, repoRoot)?.count ?? 1;
957
1030
  }
958
1031
  function getPathCommit(targetPath, repoRoot) {
959
- try {
960
- return child_process.execFileSync("git", ["log", "-1", "--format=%H", "--", targetPath], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
961
- } catch {
962
- return "";
963
- }
1032
+ return lookupPathStats(targetPath, repoRoot)?.commit ?? "";
964
1033
  }
965
1034
  function getPathUpdatedAt(targetPath, repoRoot) {
966
- try {
967
- const out = child_process.execFileSync("git", ["log", "-1", "--format=%cI", "--", targetPath], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
968
- return out || void 0;
969
- } catch {
970
- return void 0;
971
- }
1035
+ const cI = lookupPathStats(targetPath, repoRoot)?.cI;
1036
+ return cI || void 0;
972
1037
  }
973
1038
  function groupCorpusPath(id) {
974
1039
  if (id.startsWith("notebook.")) {
@@ -1377,7 +1442,7 @@ ${shown}${more}`);
1377
1442
  fileCount: paths.length});
1378
1443
  return { manifest, outDir, totalFiles, reportPath, passMs };
1379
1444
  }
1380
- var NON_EFFORT_SLUGS;
1445
+ var EMPTY_GIT_INDEX, gitHistoryCache, NON_EFFORT_SLUGS;
1381
1446
  var init_compiler = __esm({
1382
1447
  "src/seedbuild/compiler.ts"() {
1383
1448
  init_contract();
@@ -1386,6 +1451,8 @@ var init_compiler = __esm({
1386
1451
  init_report();
1387
1452
  init_frontmatter();
1388
1453
  init_validation();
1454
+ EMPTY_GIT_INDEX = { files: /* @__PURE__ */ new Map(), dirs: /* @__PURE__ */ new Map() };
1455
+ gitHistoryCache = /* @__PURE__ */ new Map();
1389
1456
  NON_EFFORT_SLUGS = {
1390
1457
  "amrap": true,
1391
1458
  "emom": true,