@slope-dev/slope 1.5.1

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +243 -0
  3. package/dist/cli/commands/auto-card.d.ts +2 -0
  4. package/dist/cli/commands/auto-card.d.ts.map +1 -0
  5. package/dist/cli/commands/auto-card.js +267 -0
  6. package/dist/cli/commands/auto-card.js.map +1 -0
  7. package/dist/cli/commands/briefing.d.ts +2 -0
  8. package/dist/cli/commands/briefing.d.ts.map +1 -0
  9. package/dist/cli/commands/briefing.js +133 -0
  10. package/dist/cli/commands/briefing.js.map +1 -0
  11. package/dist/cli/commands/card.d.ts +2 -0
  12. package/dist/cli/commands/card.d.ts.map +1 -0
  13. package/dist/cli/commands/card.js +144 -0
  14. package/dist/cli/commands/card.js.map +1 -0
  15. package/dist/cli/commands/claim.d.ts +2 -0
  16. package/dist/cli/commands/claim.d.ts.map +1 -0
  17. package/dist/cli/commands/claim.js +99 -0
  18. package/dist/cli/commands/claim.js.map +1 -0
  19. package/dist/cli/commands/classify.d.ts +2 -0
  20. package/dist/cli/commands/classify.d.ts.map +1 -0
  21. package/dist/cli/commands/classify.js +70 -0
  22. package/dist/cli/commands/classify.js.map +1 -0
  23. package/dist/cli/commands/dashboard.d.ts +4 -0
  24. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  25. package/dist/cli/commands/dashboard.js +156 -0
  26. package/dist/cli/commands/dashboard.js.map +1 -0
  27. package/dist/cli/commands/distill.d.ts +2 -0
  28. package/dist/cli/commands/distill.d.ts.map +1 -0
  29. package/dist/cli/commands/distill.js +91 -0
  30. package/dist/cli/commands/distill.js.map +1 -0
  31. package/dist/cli/commands/escalate.d.ts +2 -0
  32. package/dist/cli/commands/escalate.d.ts.map +1 -0
  33. package/dist/cli/commands/escalate.js +136 -0
  34. package/dist/cli/commands/escalate.js.map +1 -0
  35. package/dist/cli/commands/extract.d.ts +2 -0
  36. package/dist/cli/commands/extract.d.ts.map +1 -0
  37. package/dist/cli/commands/extract.js +147 -0
  38. package/dist/cli/commands/extract.js.map +1 -0
  39. package/dist/cli/commands/flows.d.ts +2 -0
  40. package/dist/cli/commands/flows.d.ts.map +1 -0
  41. package/dist/cli/commands/flows.js +156 -0
  42. package/dist/cli/commands/flows.js.map +1 -0
  43. package/dist/cli/commands/guard.d.ts +15 -0
  44. package/dist/cli/commands/guard.d.ts.map +1 -0
  45. package/dist/cli/commands/guard.js +207 -0
  46. package/dist/cli/commands/guard.js.map +1 -0
  47. package/dist/cli/commands/hook.d.ts +2 -0
  48. package/dist/cli/commands/hook.d.ts.map +1 -0
  49. package/dist/cli/commands/hook.js +299 -0
  50. package/dist/cli/commands/hook.js.map +1 -0
  51. package/dist/cli/commands/init.d.ts +6 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/init.js +421 -0
  54. package/dist/cli/commands/init.js.map +1 -0
  55. package/dist/cli/commands/map.d.ts +10 -0
  56. package/dist/cli/commands/map.d.ts.map +1 -0
  57. package/dist/cli/commands/map.js +591 -0
  58. package/dist/cli/commands/map.js.map +1 -0
  59. package/dist/cli/commands/next.d.ts +2 -0
  60. package/dist/cli/commands/next.d.ts.map +1 -0
  61. package/dist/cli/commands/next.js +28 -0
  62. package/dist/cli/commands/next.js.map +1 -0
  63. package/dist/cli/commands/plan.d.ts +2 -0
  64. package/dist/cli/commands/plan.d.ts.map +1 -0
  65. package/dist/cli/commands/plan.js +54 -0
  66. package/dist/cli/commands/plan.js.map +1 -0
  67. package/dist/cli/commands/plugin.d.ts +2 -0
  68. package/dist/cli/commands/plugin.d.ts.map +1 -0
  69. package/dist/cli/commands/plugin.js +118 -0
  70. package/dist/cli/commands/plugin.js.map +1 -0
  71. package/dist/cli/commands/release.d.ts +2 -0
  72. package/dist/cli/commands/release.d.ts.map +1 -0
  73. package/dist/cli/commands/release.js +64 -0
  74. package/dist/cli/commands/release.js.map +1 -0
  75. package/dist/cli/commands/report.d.ts +2 -0
  76. package/dist/cli/commands/report.d.ts.map +1 -0
  77. package/dist/cli/commands/report.js +68 -0
  78. package/dist/cli/commands/report.js.map +1 -0
  79. package/dist/cli/commands/review-state.d.ts +11 -0
  80. package/dist/cli/commands/review-state.d.ts.map +1 -0
  81. package/dist/cli/commands/review-state.js +193 -0
  82. package/dist/cli/commands/review-state.js.map +1 -0
  83. package/dist/cli/commands/review.d.ts +2 -0
  84. package/dist/cli/commands/review.d.ts.map +1 -0
  85. package/dist/cli/commands/review.js +53 -0
  86. package/dist/cli/commands/review.js.map +1 -0
  87. package/dist/cli/commands/roadmap.d.ts +2 -0
  88. package/dist/cli/commands/roadmap.d.ts.map +1 -0
  89. package/dist/cli/commands/roadmap.js +283 -0
  90. package/dist/cli/commands/roadmap.js.map +1 -0
  91. package/dist/cli/commands/session.d.ts +2 -0
  92. package/dist/cli/commands/session.d.ts.map +1 -0
  93. package/dist/cli/commands/session.js +232 -0
  94. package/dist/cli/commands/session.js.map +1 -0
  95. package/dist/cli/commands/standup.d.ts +2 -0
  96. package/dist/cli/commands/standup.d.ts.map +1 -0
  97. package/dist/cli/commands/standup.js +117 -0
  98. package/dist/cli/commands/standup.js.map +1 -0
  99. package/dist/cli/commands/status.d.ts +2 -0
  100. package/dist/cli/commands/status.d.ts.map +1 -0
  101. package/dist/cli/commands/status.js +148 -0
  102. package/dist/cli/commands/status.js.map +1 -0
  103. package/dist/cli/commands/tournament.d.ts +2 -0
  104. package/dist/cli/commands/tournament.d.ts.map +1 -0
  105. package/dist/cli/commands/tournament.js +60 -0
  106. package/dist/cli/commands/tournament.js.map +1 -0
  107. package/dist/cli/commands/validate.d.ts +2 -0
  108. package/dist/cli/commands/validate.d.ts.map +1 -0
  109. package/dist/cli/commands/validate.js +74 -0
  110. package/dist/cli/commands/validate.js.map +1 -0
  111. package/dist/cli/config.d.ts +2 -0
  112. package/dist/cli/config.d.ts.map +1 -0
  113. package/dist/cli/config.js +2 -0
  114. package/dist/cli/config.js.map +1 -0
  115. package/dist/cli/guards/commit-nudge.d.ts +7 -0
  116. package/dist/cli/guards/commit-nudge.d.ts.map +1 -0
  117. package/dist/cli/guards/commit-nudge.js +50 -0
  118. package/dist/cli/guards/commit-nudge.js.map +1 -0
  119. package/dist/cli/guards/compaction.d.ts +8 -0
  120. package/dist/cli/guards/compaction.d.ts.map +1 -0
  121. package/dist/cli/guards/compaction.js +79 -0
  122. package/dist/cli/guards/compaction.js.map +1 -0
  123. package/dist/cli/guards/explore.d.ts +8 -0
  124. package/dist/cli/guards/explore.d.ts.map +1 -0
  125. package/dist/cli/guards/explore.js +78 -0
  126. package/dist/cli/guards/explore.js.map +1 -0
  127. package/dist/cli/guards/hazard.d.ts +7 -0
  128. package/dist/cli/guards/hazard.d.ts.map +1 -0
  129. package/dist/cli/guards/hazard.js +43 -0
  130. package/dist/cli/guards/hazard.js.map +1 -0
  131. package/dist/cli/guards/next-action.d.ts +28 -0
  132. package/dist/cli/guards/next-action.d.ts.map +1 -0
  133. package/dist/cli/guards/next-action.js +196 -0
  134. package/dist/cli/guards/next-action.js.map +1 -0
  135. package/dist/cli/guards/push-nudge.d.ts +7 -0
  136. package/dist/cli/guards/push-nudge.d.ts.map +1 -0
  137. package/dist/cli/guards/push-nudge.js +53 -0
  138. package/dist/cli/guards/push-nudge.js.map +1 -0
  139. package/dist/cli/guards/review-tier.d.ts +7 -0
  140. package/dist/cli/guards/review-tier.d.ts.map +1 -0
  141. package/dist/cli/guards/review-tier.js +108 -0
  142. package/dist/cli/guards/review-tier.js.map +1 -0
  143. package/dist/cli/guards/scope-drift.d.ts +7 -0
  144. package/dist/cli/guards/scope-drift.d.ts.map +1 -0
  145. package/dist/cli/guards/scope-drift.js +47 -0
  146. package/dist/cli/guards/scope-drift.js.map +1 -0
  147. package/dist/cli/guards/stop-check.d.ts +7 -0
  148. package/dist/cli/guards/stop-check.d.ts.map +1 -0
  149. package/dist/cli/guards/stop-check.js +34 -0
  150. package/dist/cli/guards/stop-check.js.map +1 -0
  151. package/dist/cli/guards/subagent-gate.d.ts +7 -0
  152. package/dist/cli/guards/subagent-gate.d.ts.map +1 -0
  153. package/dist/cli/guards/subagent-gate.js +39 -0
  154. package/dist/cli/guards/subagent-gate.js.map +1 -0
  155. package/dist/cli/guards/version-check.d.ts +8 -0
  156. package/dist/cli/guards/version-check.d.ts.map +1 -0
  157. package/dist/cli/guards/version-check.js +49 -0
  158. package/dist/cli/guards/version-check.js.map +1 -0
  159. package/dist/cli/guards/workflow-gate.d.ts +7 -0
  160. package/dist/cli/guards/workflow-gate.d.ts.map +1 -0
  161. package/dist/cli/guards/workflow-gate.js +31 -0
  162. package/dist/cli/guards/workflow-gate.js.map +1 -0
  163. package/dist/cli/hooks-config.d.ts +9 -0
  164. package/dist/cli/hooks-config.d.ts.map +1 -0
  165. package/dist/cli/hooks-config.js +21 -0
  166. package/dist/cli/hooks-config.js.map +1 -0
  167. package/dist/cli/index.d.ts +19 -0
  168. package/dist/cli/index.d.ts.map +1 -0
  169. package/dist/cli/index.js +282 -0
  170. package/dist/cli/index.js.map +1 -0
  171. package/dist/cli/loader.d.ts +2 -0
  172. package/dist/cli/loader.d.ts.map +1 -0
  173. package/dist/cli/loader.js +2 -0
  174. package/dist/cli/loader.js.map +1 -0
  175. package/dist/cli/metaphor.d.ts +6 -0
  176. package/dist/cli/metaphor.d.ts.map +1 -0
  177. package/dist/cli/metaphor.js +26 -0
  178. package/dist/cli/metaphor.js.map +1 -0
  179. package/dist/cli/registries/api-registry.d.ts +11 -0
  180. package/dist/cli/registries/api-registry.d.ts.map +1 -0
  181. package/dist/cli/registries/api-registry.js +42 -0
  182. package/dist/cli/registries/api-registry.js.map +1 -0
  183. package/dist/cli/registries/file-registry.d.ts +13 -0
  184. package/dist/cli/registries/file-registry.d.ts.map +1 -0
  185. package/dist/cli/registries/file-registry.js +55 -0
  186. package/dist/cli/registries/file-registry.js.map +1 -0
  187. package/dist/cli/registries/index.d.ts +7 -0
  188. package/dist/cli/registries/index.d.ts.map +1 -0
  189. package/dist/cli/registries/index.js +20 -0
  190. package/dist/cli/registries/index.js.map +1 -0
  191. package/dist/cli/store.d.ts +3 -0
  192. package/dist/cli/store.d.ts.map +1 -0
  193. package/dist/cli/store.js +13 -0
  194. package/dist/cli/store.js.map +1 -0
  195. package/dist/cli/template-generator.d.ts +15 -0
  196. package/dist/cli/template-generator.d.ts.map +1 -0
  197. package/dist/cli/template-generator.js +562 -0
  198. package/dist/cli/template-generator.js.map +1 -0
  199. package/dist/core/advisor.d.ts +63 -0
  200. package/dist/core/advisor.d.ts.map +1 -0
  201. package/dist/core/advisor.js +395 -0
  202. package/dist/core/advisor.js.map +1 -0
  203. package/dist/core/briefing.d.ts +103 -0
  204. package/dist/core/briefing.d.ts.map +1 -0
  205. package/dist/core/briefing.js +380 -0
  206. package/dist/core/briefing.js.map +1 -0
  207. package/dist/core/builder.d.ts +70 -0
  208. package/dist/core/builder.d.ts.map +1 -0
  209. package/dist/core/builder.js +175 -0
  210. package/dist/core/builder.js.map +1 -0
  211. package/dist/core/ci-signals.d.ts +10 -0
  212. package/dist/core/ci-signals.d.ts.map +1 -0
  213. package/dist/core/ci-signals.js +145 -0
  214. package/dist/core/ci-signals.js.map +1 -0
  215. package/dist/core/config.d.ts +48 -0
  216. package/dist/core/config.d.ts.map +1 -0
  217. package/dist/core/config.js +42 -0
  218. package/dist/core/config.js.map +1 -0
  219. package/dist/core/constants.d.ts +14 -0
  220. package/dist/core/constants.d.ts.map +1 -0
  221. package/dist/core/constants.js +44 -0
  222. package/dist/core/constants.js.map +1 -0
  223. package/dist/core/dashboard.d.ts +40 -0
  224. package/dist/core/dashboard.d.ts.map +1 -0
  225. package/dist/core/dashboard.js +413 -0
  226. package/dist/core/dashboard.js.map +1 -0
  227. package/dist/core/dispersion.d.ts +12 -0
  228. package/dist/core/dispersion.d.ts.map +1 -0
  229. package/dist/core/dispersion.js +164 -0
  230. package/dist/core/dispersion.js.map +1 -0
  231. package/dist/core/escalation.d.ts +52 -0
  232. package/dist/core/escalation.d.ts.map +1 -0
  233. package/dist/core/escalation.js +105 -0
  234. package/dist/core/escalation.js.map +1 -0
  235. package/dist/core/flows.d.ts +44 -0
  236. package/dist/core/flows.d.ts.map +1 -0
  237. package/dist/core/flows.js +123 -0
  238. package/dist/core/flows.js.map +1 -0
  239. package/dist/core/formatter.d.ts +23 -0
  240. package/dist/core/formatter.d.ts.map +1 -0
  241. package/dist/core/formatter.js +301 -0
  242. package/dist/core/formatter.js.map +1 -0
  243. package/dist/core/guard.d.ts +124 -0
  244. package/dist/core/guard.d.ts.map +1 -0
  245. package/dist/core/guard.js +185 -0
  246. package/dist/core/guard.js.map +1 -0
  247. package/dist/core/handicap.d.ts +22 -0
  248. package/dist/core/handicap.d.ts.map +1 -0
  249. package/dist/core/handicap.js +111 -0
  250. package/dist/core/handicap.js.map +1 -0
  251. package/dist/core/index.d.ts +55 -0
  252. package/dist/core/index.d.ts.map +1 -0
  253. package/dist/core/index.js +62 -0
  254. package/dist/core/index.js.map +1 -0
  255. package/dist/core/leaderboard.d.ts +32 -0
  256. package/dist/core/leaderboard.d.ts.map +1 -0
  257. package/dist/core/leaderboard.js +98 -0
  258. package/dist/core/leaderboard.js.map +1 -0
  259. package/dist/core/loader.d.ts +17 -0
  260. package/dist/core/loader.d.ts.map +1 -0
  261. package/dist/core/loader.js +68 -0
  262. package/dist/core/loader.js.map +1 -0
  263. package/dist/core/metaphor.d.ts +73 -0
  264. package/dist/core/metaphor.d.ts.map +1 -0
  265. package/dist/core/metaphor.js +73 -0
  266. package/dist/core/metaphor.js.map +1 -0
  267. package/dist/core/metaphors/baseball.d.ts +3 -0
  268. package/dist/core/metaphors/baseball.d.ts.map +1 -0
  269. package/dist/core/metaphors/baseball.js +89 -0
  270. package/dist/core/metaphors/baseball.js.map +1 -0
  271. package/dist/core/metaphors/dnd.d.ts +3 -0
  272. package/dist/core/metaphors/dnd.d.ts.map +1 -0
  273. package/dist/core/metaphors/dnd.js +89 -0
  274. package/dist/core/metaphors/dnd.js.map +1 -0
  275. package/dist/core/metaphors/gaming.d.ts +3 -0
  276. package/dist/core/metaphors/gaming.d.ts.map +1 -0
  277. package/dist/core/metaphors/gaming.js +89 -0
  278. package/dist/core/metaphors/gaming.js.map +1 -0
  279. package/dist/core/metaphors/golf.d.ts +3 -0
  280. package/dist/core/metaphors/golf.d.ts.map +1 -0
  281. package/dist/core/metaphors/golf.js +89 -0
  282. package/dist/core/metaphors/golf.js.map +1 -0
  283. package/dist/core/metaphors/index.d.ts +8 -0
  284. package/dist/core/metaphors/index.d.ts.map +1 -0
  285. package/dist/core/metaphors/index.js +17 -0
  286. package/dist/core/metaphors/index.js.map +1 -0
  287. package/dist/core/metaphors/matrix.d.ts +3 -0
  288. package/dist/core/metaphors/matrix.d.ts.map +1 -0
  289. package/dist/core/metaphors/matrix.js +89 -0
  290. package/dist/core/metaphors/matrix.js.map +1 -0
  291. package/dist/core/metaphors/tennis.d.ts +3 -0
  292. package/dist/core/metaphors/tennis.d.ts.map +1 -0
  293. package/dist/core/metaphors/tennis.js +89 -0
  294. package/dist/core/metaphors/tennis.js.map +1 -0
  295. package/dist/core/pipeline.d.ts +39 -0
  296. package/dist/core/pipeline.d.ts.map +1 -0
  297. package/dist/core/pipeline.js +158 -0
  298. package/dist/core/pipeline.js.map +1 -0
  299. package/dist/core/player.d.ts +51 -0
  300. package/dist/core/player.d.ts.map +1 -0
  301. package/dist/core/player.js +101 -0
  302. package/dist/core/player.js.map +1 -0
  303. package/dist/core/plugins.d.ts +33 -0
  304. package/dist/core/plugins.d.ts.map +1 -0
  305. package/dist/core/plugins.js +176 -0
  306. package/dist/core/plugins.js.map +1 -0
  307. package/dist/core/pr-signals.d.ts +23 -0
  308. package/dist/core/pr-signals.d.ts.map +1 -0
  309. package/dist/core/pr-signals.js +178 -0
  310. package/dist/core/pr-signals.js.map +1 -0
  311. package/dist/core/registry.d.ts +20 -0
  312. package/dist/core/registry.d.ts.map +1 -0
  313. package/dist/core/registry.js +62 -0
  314. package/dist/core/registry.js.map +1 -0
  315. package/dist/core/report.d.ts +50 -0
  316. package/dist/core/report.d.ts.map +1 -0
  317. package/dist/core/report.js +392 -0
  318. package/dist/core/report.js.map +1 -0
  319. package/dist/core/roadmap.d.ts +74 -0
  320. package/dist/core/roadmap.d.ts.map +1 -0
  321. package/dist/core/roadmap.js +389 -0
  322. package/dist/core/roadmap.js.map +1 -0
  323. package/dist/core/roles.d.ts +23 -0
  324. package/dist/core/roles.d.ts.map +1 -0
  325. package/dist/core/roles.js +107 -0
  326. package/dist/core/roles.js.map +1 -0
  327. package/dist/core/standup.d.ts +44 -0
  328. package/dist/core/standup.d.ts.map +1 -0
  329. package/dist/core/standup.js +164 -0
  330. package/dist/core/standup.js.map +1 -0
  331. package/dist/core/store.d.ts +43 -0
  332. package/dist/core/store.d.ts.map +1 -0
  333. package/dist/core/store.js +11 -0
  334. package/dist/core/store.js.map +1 -0
  335. package/dist/core/team-handicap.d.ts +59 -0
  336. package/dist/core/team-handicap.d.ts.map +1 -0
  337. package/dist/core/team-handicap.js +227 -0
  338. package/dist/core/team-handicap.js.map +1 -0
  339. package/dist/core/tournament.d.ts +12 -0
  340. package/dist/core/tournament.d.ts.map +1 -0
  341. package/dist/core/tournament.js +249 -0
  342. package/dist/core/tournament.js.map +1 -0
  343. package/dist/core/types.d.ts +339 -0
  344. package/dist/core/types.d.ts.map +1 -0
  345. package/dist/core/types.js +4 -0
  346. package/dist/core/types.js.map +1 -0
  347. package/dist/core/validation.d.ts +23 -0
  348. package/dist/core/validation.d.ts.map +1 -0
  349. package/dist/core/validation.js +140 -0
  350. package/dist/core/validation.js.map +1 -0
  351. package/dist/index.d.ts +4 -0
  352. package/dist/index.d.ts.map +1 -0
  353. package/dist/index.js +9 -0
  354. package/dist/index.js.map +1 -0
  355. package/dist/mcp/index.d.ts +17 -0
  356. package/dist/mcp/index.d.ts.map +1 -0
  357. package/dist/mcp/index.js +363 -0
  358. package/dist/mcp/index.js.map +1 -0
  359. package/dist/mcp/index.test.d.ts +2 -0
  360. package/dist/mcp/index.test.d.ts.map +1 -0
  361. package/dist/mcp/index.test.js +497 -0
  362. package/dist/mcp/index.test.js.map +1 -0
  363. package/dist/mcp/registry.d.ts +17 -0
  364. package/dist/mcp/registry.d.ts.map +1 -0
  365. package/dist/mcp/registry.js +708 -0
  366. package/dist/mcp/registry.js.map +1 -0
  367. package/dist/mcp/sandbox.d.ts +15 -0
  368. package/dist/mcp/sandbox.d.ts.map +1 -0
  369. package/dist/mcp/sandbox.js +153 -0
  370. package/dist/mcp/sandbox.js.map +1 -0
  371. package/dist/store/index.d.ts +40 -0
  372. package/dist/store/index.d.ts.map +1 -0
  373. package/dist/store/index.js +324 -0
  374. package/dist/store/index.js.map +1 -0
  375. package/dist/tokens/colors.d.ts +47 -0
  376. package/dist/tokens/colors.d.ts.map +1 -0
  377. package/dist/tokens/colors.js +56 -0
  378. package/dist/tokens/colors.js.map +1 -0
  379. package/dist/tokens/css.d.ts +3 -0
  380. package/dist/tokens/css.d.ts.map +1 -0
  381. package/dist/tokens/css.js +58 -0
  382. package/dist/tokens/css.js.map +1 -0
  383. package/dist/tokens/index.d.ts +5 -0
  384. package/dist/tokens/index.d.ts.map +1 -0
  385. package/dist/tokens/index.js +6 -0
  386. package/dist/tokens/index.js.map +1 -0
  387. package/dist/tokens/spacing.d.ts +23 -0
  388. package/dist/tokens/spacing.d.ts.map +1 -0
  389. package/dist/tokens/spacing.js +28 -0
  390. package/dist/tokens/spacing.js.map +1 -0
  391. package/dist/tokens/typography.d.ts +28 -0
  392. package/dist/tokens/typography.d.ts.map +1 -0
  393. package/dist/tokens/typography.js +34 -0
  394. package/dist/tokens/typography.js.map +1 -0
  395. package/package.json +69 -0
@@ -0,0 +1,249 @@
1
+ const SCORE_ORDER = [
2
+ 'eagle', 'birdie', 'par',
3
+ 'bogey', 'double_bogey', 'triple_plus',
4
+ ];
5
+ function scoreLabelRank(label) {
6
+ return SCORE_ORDER.indexOf(label);
7
+ }
8
+ export function buildTournamentReview(id, name, scorecards, options) {
9
+ const sorted = [...scorecards].sort((a, b) => a.sprint_number - b.sprint_number);
10
+ const sprints = sorted.map((card) => {
11
+ const landed = card.shots.filter((s) => s.result === 'in_the_hole').length;
12
+ return {
13
+ sprintNumber: card.sprint_number,
14
+ theme: card.theme,
15
+ par: card.par,
16
+ slope: card.slope,
17
+ score: card.score,
18
+ scoreLabel: card.score_label,
19
+ ticketCount: card.shots.length,
20
+ ticketsLanded: landed,
21
+ };
22
+ });
23
+ const scoring = computeScoring(sprints);
24
+ const stats = computeStats(sorted);
25
+ const hazardIndex = extractHazards(sorted);
26
+ const clubPerformance = computeClubPerformance(sorted);
27
+ return {
28
+ id,
29
+ name,
30
+ dateRange: {
31
+ start: sorted[0]?.date ?? '',
32
+ end: sorted[sorted.length - 1]?.date ?? '',
33
+ },
34
+ sprints,
35
+ scoring,
36
+ stats,
37
+ hazardIndex,
38
+ clubPerformance,
39
+ takeaways: options?.takeaways ?? [],
40
+ improvements: options?.improvements ?? [],
41
+ reflection: options?.reflection,
42
+ };
43
+ }
44
+ function computeScoring(sprints) {
45
+ const totalPar = sprints.reduce((s, e) => s + e.par, 0);
46
+ const totalScore = sprints.reduce((s, e) => s + e.score, 0);
47
+ const ticketCount = sprints.reduce((s, e) => s + e.ticketCount, 0);
48
+ const ticketsLanded = sprints.reduce((s, e) => s + e.ticketsLanded, 0);
49
+ let best = sprints[0];
50
+ let worst = sprints[0];
51
+ for (const s of sprints) {
52
+ if (scoreLabelRank(s.scoreLabel) < scoreLabelRank(best.scoreLabel))
53
+ best = s;
54
+ if (scoreLabelRank(s.scoreLabel) > scoreLabelRank(worst.scoreLabel))
55
+ worst = s;
56
+ }
57
+ const labelCounts = {};
58
+ for (const s of sprints) {
59
+ labelCounts[s.scoreLabel] = (labelCounts[s.scoreLabel] ?? 0) + 1;
60
+ }
61
+ const avgScoreLabel = Object.entries(labelCounts).sort((a, b) => b[1] - a[1])[0]?.[0] ?? 'par';
62
+ return {
63
+ totalPar,
64
+ totalScore,
65
+ differential: totalScore - totalPar,
66
+ avgScoreLabel,
67
+ bestSprint: { sprintNumber: best?.sprintNumber ?? 0, label: best?.scoreLabel ?? 'par' },
68
+ worstSprint: { sprintNumber: worst?.sprintNumber ?? 0, label: worst?.scoreLabel ?? 'par' },
69
+ sprintCount: sprints.length,
70
+ ticketCount,
71
+ ticketsLanded,
72
+ landingRate: ticketCount > 0 ? ticketsLanded / ticketCount : 0,
73
+ };
74
+ }
75
+ function computeStats(cards) {
76
+ const avgSlope = cards.length > 0 ? cards.reduce((s, c) => s + c.slope, 0) / cards.length : 0;
77
+ let totalHazards = 0;
78
+ let totalPenalties = 0;
79
+ let totalPutts = 0;
80
+ let fairwayHit = 0;
81
+ let fairwayTotal = 0;
82
+ let girHit = 0;
83
+ let girTotal = 0;
84
+ for (const card of cards) {
85
+ const s = card.stats;
86
+ totalHazards += s.hazards_hit;
87
+ totalPenalties += s.penalties;
88
+ totalPutts += s.putts;
89
+ fairwayHit += s.fairways_hit;
90
+ fairwayTotal += s.fairways_total;
91
+ girHit += s.greens_in_regulation;
92
+ girTotal += s.greens_total;
93
+ }
94
+ return {
95
+ avgSlope: Math.round(avgSlope * 10) / 10,
96
+ totalHazards,
97
+ totalPenalties,
98
+ avgPutts: cards.length > 0 ? Math.round((totalPutts / cards.length) * 10) / 10 : 0,
99
+ fairwayRate: fairwayTotal > 0 ? Math.round((fairwayHit / fairwayTotal) * 1000) / 1000 : 0,
100
+ girRate: girTotal > 0 ? Math.round((girHit / girTotal) * 1000) / 1000 : 0,
101
+ };
102
+ }
103
+ function extractHazards(cards) {
104
+ const hazards = [];
105
+ for (const card of cards) {
106
+ if (!card.bunker_locations)
107
+ continue;
108
+ for (const loc of card.bunker_locations) {
109
+ if (typeof loc === 'string') {
110
+ hazards.push({
111
+ gotchaId: `g-${card.sprint_number}-${hazards.length}`,
112
+ sprint: card.sprint_number,
113
+ area: loc,
114
+ description: loc,
115
+ });
116
+ }
117
+ else if (typeof loc === 'object' && loc !== null) {
118
+ const obj = loc;
119
+ hazards.push({
120
+ gotchaId: obj.gotcha_id ?? `g-${card.sprint_number}-${hazards.length}`,
121
+ sprint: card.sprint_number,
122
+ area: obj.area ?? '',
123
+ description: obj.description ?? '',
124
+ });
125
+ }
126
+ }
127
+ }
128
+ return hazards;
129
+ }
130
+ function computeClubPerformance(cards) {
131
+ const clubMap = new Map();
132
+ for (const card of cards) {
133
+ for (const shot of card.shots) {
134
+ const club = shot.club;
135
+ if (!clubMap.has(club)) {
136
+ clubMap.set(club, { attempts: 0, inTheHole: 0, scores: [] });
137
+ }
138
+ const entry = clubMap.get(club);
139
+ entry.attempts++;
140
+ if (shot.result === 'in_the_hole')
141
+ entry.inTheHole++;
142
+ entry.scores.push(shot.result === 'in_the_hole' ? 1 : shot.result === 'green' ? 2 : 3);
143
+ }
144
+ }
145
+ const result = {};
146
+ for (const [club, data] of clubMap) {
147
+ result[club] = {
148
+ attempts: data.attempts,
149
+ inTheHole: data.inTheHole,
150
+ avgScore: Math.round((data.scores.reduce((a, b) => a + b, 0) / data.scores.length) * 100) / 100,
151
+ };
152
+ }
153
+ return result;
154
+ }
155
+ export function formatTournamentReview(review) {
156
+ const lines = [];
157
+ lines.push(`# Tournament Review: ${review.name}`);
158
+ lines.push(`**ID:** ${review.id} | **Period:** ${review.dateRange.start} — ${review.dateRange.end}`);
159
+ lines.push('');
160
+ // Scoring summary
161
+ const s = review.scoring;
162
+ const diffLabel = s.differential < 0 ? `${s.differential}` : s.differential === 0 ? 'E' : `+${s.differential}`;
163
+ lines.push('## Scoring Summary');
164
+ lines.push('');
165
+ lines.push(`| Metric | Value |`);
166
+ lines.push(`|--------|-------|`);
167
+ lines.push(`| Sprints | ${s.sprintCount} |`);
168
+ lines.push(`| Total Par | ${s.totalPar} |`);
169
+ lines.push(`| Total Score | ${s.totalScore} (${diffLabel}) |`);
170
+ lines.push(`| Tickets | ${s.ticketsLanded}/${s.ticketCount} landed (${Math.round(s.landingRate * 100)}%) |`);
171
+ lines.push(`| Most Common | ${s.avgScoreLabel} |`);
172
+ lines.push(`| Best Sprint | S${s.bestSprint.sprintNumber} (${s.bestSprint.label}) |`);
173
+ lines.push(`| Worst Sprint | S${s.worstSprint.sprintNumber} (${s.worstSprint.label}) |`);
174
+ lines.push('');
175
+ // Sprint-by-sprint table
176
+ lines.push('## Sprint Breakdown');
177
+ lines.push('');
178
+ lines.push('| Sprint | Theme | Par | Slope | Score | Label | Tickets |');
179
+ lines.push('|--------|-------|-----|-------|-------|-------|---------|');
180
+ for (const sp of review.sprints) {
181
+ lines.push(`| S${sp.sprintNumber} | ${sp.theme} | ${sp.par} | ${sp.slope} | ${sp.score} | ${sp.scoreLabel} | ${sp.ticketsLanded}/${sp.ticketCount} |`);
182
+ }
183
+ lines.push('');
184
+ // Aggregate stats
185
+ const st = review.stats;
186
+ lines.push('## Aggregate Stats');
187
+ lines.push('');
188
+ lines.push(`| Stat | Value |`);
189
+ lines.push(`|------|-------|`);
190
+ lines.push(`| Avg Slope | ${st.avgSlope} |`);
191
+ lines.push(`| Fairway Rate | ${Math.round(st.fairwayRate * 100)}% |`);
192
+ lines.push(`| GIR Rate | ${Math.round(st.girRate * 100)}% |`);
193
+ lines.push(`| Avg Putts/Sprint | ${st.avgPutts} |`);
194
+ lines.push(`| Total Penalties | ${st.totalPenalties} |`);
195
+ lines.push(`| Total Hazards Hit | ${st.totalHazards} |`);
196
+ lines.push('');
197
+ // Club performance
198
+ const clubs = Object.entries(review.clubPerformance).sort((a, b) => b[1].attempts - a[1].attempts);
199
+ if (clubs.length > 0) {
200
+ lines.push('## Club Performance');
201
+ lines.push('');
202
+ lines.push('| Club | Attempts | In-the-Hole | Rate | Avg Score |');
203
+ lines.push('|------|----------|-------------|------|-----------|');
204
+ for (const [club, perf] of clubs) {
205
+ const rate = perf.attempts > 0 ? Math.round((perf.inTheHole / perf.attempts) * 100) : 0;
206
+ lines.push(`| ${club} | ${perf.attempts} | ${perf.inTheHole} | ${rate}% | ${perf.avgScore} |`);
207
+ }
208
+ lines.push('');
209
+ }
210
+ // Hazard index
211
+ if (review.hazardIndex.length > 0) {
212
+ lines.push('## Hazard Index');
213
+ lines.push('');
214
+ for (const h of review.hazardIndex) {
215
+ lines.push(`- **[${h.gotchaId}]** (S${h.sprint}) ${h.area}`);
216
+ if (h.description !== h.area) {
217
+ lines.push(` ${h.description}`);
218
+ }
219
+ }
220
+ lines.push('');
221
+ }
222
+ // Takeaways
223
+ if (review.takeaways.length > 0) {
224
+ lines.push('## Strategic Takeaways');
225
+ lines.push('');
226
+ for (const t of review.takeaways) {
227
+ lines.push(`- ${t}`);
228
+ }
229
+ lines.push('');
230
+ }
231
+ // Improvements
232
+ if (review.improvements.length > 0) {
233
+ lines.push('## What We\'d Do Differently');
234
+ lines.push('');
235
+ for (const imp of review.improvements) {
236
+ lines.push(`- ${imp}`);
237
+ }
238
+ lines.push('');
239
+ }
240
+ // Reflection
241
+ if (review.reflection) {
242
+ lines.push('## Reflection');
243
+ lines.push('');
244
+ lines.push(review.reflection);
245
+ lines.push('');
246
+ }
247
+ return lines.join('\n');
248
+ }
249
+ //# sourceMappingURL=tournament.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tournament.js","sourceRoot":"","sources":["../../src/core/tournament.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,339 @@
1
+ /** Club selection declares approach complexity before starting a ticket */
2
+ export type ClubSelection = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';
3
+ /** Shot result describes the outcome of a ticket */
4
+ export type ShotResult = 'fairway' | 'green' | 'in_the_hole' | 'missed_long' | 'missed_short' | 'missed_left' | 'missed_right';
5
+ /** Types of hazards encountered during a ticket */
6
+ export type HazardType = 'bunker' | 'water' | 'ob' | 'rough' | 'trees';
7
+ /** Severity of a hazard — maps to penalty strokes */
8
+ export type HazardSeverity = 'minor' | 'moderate' | 'major' | 'critical';
9
+ /** External conditions that affected the sprint */
10
+ export type ConditionType = 'wind' | 'rain' | 'frost_delay' | 'altitude' | 'pin_position';
11
+ /** Special plays: workarounds, retries, and shortcuts */
12
+ export type SpecialPlay = 'gimme' | 'mulligan' | 'provisional' | 'lay_up' | 'scramble';
13
+ /** Directional miss tracking for pattern analysis */
14
+ export type MissDirection = 'long' | 'short' | 'left' | 'right';
15
+ /** Golf-inspired score labels relative to par */
16
+ export type ScoreLabel = 'eagle' | 'birdie' | 'par' | 'bogey' | 'double_bogey' | 'triple_plus';
17
+ /** Sprint type — teams can extend this with their own types */
18
+ export type SprintType = 'feature' | 'feedback' | 'infra' | 'bugfix' | 'research' | 'flow' | 'test-coverage';
19
+ /** A hazard hit during a ticket */
20
+ export interface HazardHit {
21
+ type: HazardType;
22
+ severity?: HazardSeverity;
23
+ description: string;
24
+ gotcha_id?: string;
25
+ }
26
+ /** A single ticket's outcome */
27
+ export interface ShotRecord {
28
+ ticket_key: string;
29
+ title: string;
30
+ club: ClubSelection;
31
+ result: ShotResult;
32
+ hazards: HazardHit[];
33
+ provisional_declared?: boolean;
34
+ notes?: string;
35
+ }
36
+ /** An external condition affecting the sprint */
37
+ export interface ConditionRecord {
38
+ type: ConditionType;
39
+ description: string;
40
+ impact: 'none' | 'minor' | 'major';
41
+ }
42
+ /** Aggregated statistics for a sprint (hole) */
43
+ export interface HoleStats {
44
+ fairways_hit: number;
45
+ fairways_total: number;
46
+ greens_in_regulation: number;
47
+ greens_total: number;
48
+ putts: number;
49
+ penalties: number;
50
+ hazards_hit: number;
51
+ hazard_penalties: number;
52
+ miss_directions: Record<MissDirection, number>;
53
+ }
54
+ /** Core score data for a sprint */
55
+ export interface HoleScore {
56
+ sprint_number: number;
57
+ theme: string;
58
+ par: 3 | 4 | 5;
59
+ slope: number;
60
+ score: number;
61
+ score_label: ScoreLabel;
62
+ shots: ShotRecord[];
63
+ conditions: ConditionRecord[];
64
+ special_plays: SpecialPlay[];
65
+ stats: HoleStats;
66
+ }
67
+ /** Maps sprint activities to golf practice types */
68
+ export type TrainingType = 'driving_range' | 'chipping_practice' | 'putting_practice' | 'lessons';
69
+ /** A training session completed during or for the sprint */
70
+ export interface TrainingSession {
71
+ type: TrainingType;
72
+ description: string;
73
+ outcome: string;
74
+ duration_sprints?: number;
75
+ }
76
+ /** Categories of development health */
77
+ export type NutritionCategory = 'hydration' | 'diet' | 'recovery' | 'supplements' | 'stretching';
78
+ /** A development health assessment entry */
79
+ export interface NutritionEntry {
80
+ category: NutritionCategory;
81
+ description: string;
82
+ status: 'healthy' | 'needs_attention' | 'neglected';
83
+ }
84
+ export interface NineteenthHole {
85
+ how_did_it_feel?: string;
86
+ advice_for_next_player?: string;
87
+ what_surprised_you?: string;
88
+ excited_about_next?: string;
89
+ }
90
+ /** Per-agent scoring breakdown within a swarm sprint */
91
+ export interface AgentBreakdown {
92
+ session_id: string;
93
+ agent_role: string;
94
+ shots: ShotRecord[];
95
+ score: number;
96
+ stats: HoleStats;
97
+ }
98
+ /** Complete SLOPE scorecard — the primary artifact for sprint retros */
99
+ export interface GolfScorecard extends HoleScore {
100
+ type?: SprintType;
101
+ /** Developer who played this sprint — omit for single-player repos */
102
+ player?: string;
103
+ date: string;
104
+ training?: TrainingSession[];
105
+ nutrition?: NutritionEntry[];
106
+ yardage_book_updates: string[];
107
+ bunker_locations: string[];
108
+ course_management_notes: string[];
109
+ nineteenth_hole?: NineteenthHole;
110
+ /** Per-agent breakdowns for multi-agent (swarm) sprints */
111
+ agents?: AgentBreakdown[];
112
+ }
113
+ /** Rolling statistics over a window of scorecards */
114
+ export interface RollingStats {
115
+ handicap: number;
116
+ fairway_pct: number;
117
+ gir_pct: number;
118
+ avg_putts: number;
119
+ penalties_per_round: number;
120
+ miss_pattern: Record<MissDirection, number>;
121
+ mulligans: number;
122
+ gimmes: number;
123
+ }
124
+ /** Handicap card with multiple rolling windows */
125
+ export interface HandicapCard {
126
+ last_5: RollingStats;
127
+ last_10: RollingStats;
128
+ all_time: RollingStats;
129
+ }
130
+ /** Shot dispersion analysis — miss pattern breakdown */
131
+ export interface DispersionReport {
132
+ total_shots: number;
133
+ total_misses: number;
134
+ miss_rate_pct: number;
135
+ by_direction: Record<MissDirection, {
136
+ count: number;
137
+ pct: number;
138
+ interpretation: string;
139
+ }>;
140
+ dominant_miss: MissDirection | null;
141
+ systemic_issues: string[];
142
+ }
143
+ /** Area performance analysis — by sprint type, club, and par */
144
+ export interface AreaReport {
145
+ by_sprint_type: Record<string, {
146
+ count: number;
147
+ avg_score_vs_par: number;
148
+ fairway_pct: number;
149
+ gir_pct: number;
150
+ }>;
151
+ by_club: Record<string, {
152
+ count: number;
153
+ in_the_hole_rate: number;
154
+ miss_rate: number;
155
+ }>;
156
+ par_performance: Record<number, {
157
+ count: number;
158
+ avg_score_vs_par: number;
159
+ over_par_rate: number;
160
+ }>;
161
+ }
162
+ /** Execution trace for a ticket — input to classifyShot() */
163
+ export interface ExecutionTrace {
164
+ planned_scope_paths: string[];
165
+ modified_files: string[];
166
+ test_results: {
167
+ suite: string;
168
+ passed: boolean;
169
+ first_run: boolean;
170
+ }[];
171
+ reverts: number;
172
+ elapsed_minutes: number;
173
+ hazards_encountered: HazardHit[];
174
+ }
175
+ /** Classified shot result from an execution trace */
176
+ export interface ShotClassification {
177
+ result: ShotResult;
178
+ miss_direction: MissDirection | null;
179
+ confidence: number;
180
+ reasoning: string;
181
+ }
182
+ /** Club recommendation for an upcoming ticket */
183
+ export interface ClubRecommendation {
184
+ club: ClubSelection;
185
+ confidence: number;
186
+ reasoning: string;
187
+ provisional_suggestion?: string;
188
+ }
189
+ /** Training recommendation from handicap and dispersion analysis */
190
+ export interface TrainingRecommendation {
191
+ area: string;
192
+ type: TrainingType;
193
+ description: string;
194
+ priority: 'high' | 'medium' | 'low';
195
+ instruction_adjustment?: string;
196
+ }
197
+ /** Scope of a sprint claim: individual ticket or broader area */
198
+ export type ClaimScope = 'ticket' | 'area';
199
+ /** A claim reserving a ticket or area for a player during a sprint */
200
+ export interface SprintClaim {
201
+ id: string;
202
+ sprint_number: number;
203
+ player: string;
204
+ target: string;
205
+ scope: ClaimScope;
206
+ claimed_at: string;
207
+ notes?: string;
208
+ session_id?: string;
209
+ expires_at?: string;
210
+ metadata?: Record<string, unknown>;
211
+ }
212
+ /** A conflict detected between two sprint claims */
213
+ export interface SprintConflict {
214
+ claims: [SprintClaim, SprintClaim];
215
+ reason: string;
216
+ severity: 'overlap' | 'adjacent';
217
+ }
218
+ /** A tournament is a multi-sprint initiative tracked as a cohesive unit */
219
+ export interface TournamentReview {
220
+ /** Initiative identifier (e.g. "M-09") */
221
+ id: string;
222
+ /** Human-readable name */
223
+ name: string;
224
+ /** Start/end dates (from first/last scorecard) */
225
+ dateRange: {
226
+ start: string;
227
+ end: string;
228
+ };
229
+ /** Sprints included in this tournament */
230
+ sprints: TournamentSprintEntry[];
231
+ /** Aggregate scoring */
232
+ scoring: TournamentScoring;
233
+ /** Aggregate stats across all sprints */
234
+ stats: TournamentStats;
235
+ /** Hazard patterns discovered across the tournament */
236
+ hazardIndex: TournamentHazard[];
237
+ /** Per-club performance (which complexities went well/poorly) */
238
+ clubPerformance: Record<string, {
239
+ attempts: number;
240
+ inTheHole: number;
241
+ avgScore: number;
242
+ }>;
243
+ /** Strategic takeaways */
244
+ takeaways: string[];
245
+ /** What would you do differently */
246
+ improvements: string[];
247
+ /** Free-form reflection */
248
+ reflection?: string;
249
+ }
250
+ export interface TournamentSprintEntry {
251
+ sprintNumber: number;
252
+ theme: string;
253
+ par: number;
254
+ slope: number;
255
+ score: number;
256
+ scoreLabel: ScoreLabel;
257
+ ticketCount: number;
258
+ ticketsLanded: number;
259
+ }
260
+ export interface TournamentScoring {
261
+ totalPar: number;
262
+ totalScore: number;
263
+ differential: number;
264
+ avgScoreLabel: string;
265
+ bestSprint: {
266
+ sprintNumber: number;
267
+ label: ScoreLabel;
268
+ };
269
+ worstSprint: {
270
+ sprintNumber: number;
271
+ label: ScoreLabel;
272
+ };
273
+ sprintCount: number;
274
+ ticketCount: number;
275
+ ticketsLanded: number;
276
+ landingRate: number;
277
+ }
278
+ export interface TournamentStats {
279
+ avgSlope: number;
280
+ totalHazards: number;
281
+ totalPenalties: number;
282
+ avgPutts: number;
283
+ fairwayRate: number;
284
+ girRate: number;
285
+ }
286
+ export interface TournamentHazard {
287
+ gotchaId: string;
288
+ sprint: number;
289
+ area: string;
290
+ description: string;
291
+ }
292
+ /** Types of events captured during a session */
293
+ export type EventType = 'failure' | 'dead_end' | 'scope_change' | 'compaction' | 'hazard' | 'decision' | 'standup';
294
+ /** CI/test runner identifier */
295
+ export type CIRunner = 'vitest' | 'jest' | 'unknown';
296
+ /** Structured test signal parsed from CI/test runner output */
297
+ export interface CISignal {
298
+ runner: CIRunner;
299
+ test_total: number;
300
+ test_passed: number;
301
+ test_failed: number;
302
+ test_skipped: number;
303
+ suites_total: number;
304
+ suites_passed: number;
305
+ suites_failed: number;
306
+ duration_ms?: number;
307
+ retries: number;
308
+ coverage_pct?: number;
309
+ }
310
+ /** Supported PR/code review platforms */
311
+ export type PRPlatform = 'github' | 'gitlab' | 'bitbucket' | 'unknown';
312
+ /** PR review decision states */
313
+ export type PRReviewDecision = 'APPROVED' | 'CHANGES_REQUESTED' | 'REVIEW_REQUIRED' | 'COMMENTED' | 'NONE';
314
+ /** Structured signal parsed from PR metadata (e.g. gh pr view --json) */
315
+ export interface PRSignal {
316
+ platform: PRPlatform;
317
+ pr_number: number;
318
+ review_cycles: number;
319
+ change_request_count: number;
320
+ time_to_merge_minutes: number | null;
321
+ ci_checks_passed: number;
322
+ ci_checks_failed: number;
323
+ file_count: number;
324
+ additions: number;
325
+ deletions: number;
326
+ comment_count: number;
327
+ review_decision: PRReviewDecision;
328
+ }
329
+ /** A telemetry event captured during a session */
330
+ export interface SlopeEvent {
331
+ id: string;
332
+ session_id?: string;
333
+ type: EventType;
334
+ timestamp: string;
335
+ data: Record<string, unknown>;
336
+ sprint_number?: number;
337
+ ticket_key?: string;
338
+ }
339
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // SLOPE — Sprint Lifecycle & Operational Performance Engine
2
+ // ════════════════════════════════════════════════════════════
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,+DAA+D"}
@@ -0,0 +1,23 @@
1
+ import type { GolfScorecard } from './types.js';
2
+ export interface ScorecardValidationError {
3
+ code: string;
4
+ message: string;
5
+ field?: string;
6
+ }
7
+ export interface ScorecardValidationWarning {
8
+ code: string;
9
+ message: string;
10
+ }
11
+ export interface ScorecardValidationResult {
12
+ valid: boolean;
13
+ errors: ScorecardValidationError[];
14
+ warnings: ScorecardValidationWarning[];
15
+ }
16
+ /**
17
+ * Validate a SLOPE scorecard for internal consistency.
18
+ * Accepts either `sprint_number` (TypeScript type) or `sprint` (retro JSON field name).
19
+ */
20
+ export declare function validateScorecard(card: GolfScorecard & {
21
+ sprint?: number;
22
+ }): ScorecardValidationResult;
23
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,YAAY,CAAC;AAK5E,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,QAAQ,EAAE,0BAA0B,EAAE,CAAC;CACxC;AAoBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,yBAAyB,CAkItG"}