@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,395 @@
1
+ import { computeAreaPerformance, computeDispersion } from './dispersion.js';
2
+ // --- Module-private constants ---
3
+ const MISS_RESULT_TO_DIR = {
4
+ missed_long: 'long',
5
+ missed_short: 'short',
6
+ missed_left: 'left',
7
+ missed_right: 'right',
8
+ };
9
+ const GOOD_RESULTS = new Set(['fairway', 'green', 'in_the_hole']);
10
+ // --- Club ordering for downgrade logic ---
11
+ const CLUB_ORDER = ['putter', 'wedge', 'short_iron', 'long_iron', 'driver'];
12
+ const COMPLEXITY_TO_CLUB = {
13
+ trivial: 'putter',
14
+ small: 'wedge',
15
+ medium: 'short_iron',
16
+ large: 'long_iron',
17
+ };
18
+ /**
19
+ * Recommend a club (approach complexity) for an upcoming ticket.
20
+ *
21
+ * Logic:
22
+ * 1. Map ticket complexity to default club (large → long_iron, never driver)
23
+ * 2. Check historical performance — if default club miss_rate > 30%, downgrade one level
24
+ * 3. Check dispersion for dominant miss — add provisional suggestion if ≥3 total misses
25
+ * 4. Confidence: 1.0 with ≥5 scorecards for that club, 0.5 with 1-4, 0.3 with 0
26
+ */
27
+ export function recommendClub(input) {
28
+ const { ticketComplexity, scorecards, slopeFactors = [] } = input;
29
+ // Step 1: Default club from complexity (large → long_iron, never driver)
30
+ let club = COMPLEXITY_TO_CLUB[ticketComplexity] ?? 'short_iron';
31
+ const reasons = [`${ticketComplexity} complexity → ${club}`];
32
+ // Step 2: Historical performance check
33
+ if (scorecards.length > 0) {
34
+ const areaReport = computeAreaPerformance(scorecards);
35
+ const clubStats = areaReport.by_club[club];
36
+ if (clubStats && clubStats.miss_rate > 30) {
37
+ const idx = CLUB_ORDER.indexOf(club);
38
+ if (idx > 0) {
39
+ const previousClub = club;
40
+ club = CLUB_ORDER[idx - 1];
41
+ reasons.push(`Downgraded from ${previousClub}: historical miss rate ${clubStats.miss_rate}% > 30%`);
42
+ }
43
+ }
44
+ }
45
+ // Step 3: Provisional suggestion from dispersion (requires ≥3 total misses)
46
+ let provisional_suggestion;
47
+ if (scorecards.length > 0) {
48
+ const dispersion = computeDispersion(scorecards);
49
+ if (dispersion.dominant_miss && dispersion.total_misses >= 3) {
50
+ const missRate = dispersion.miss_rate_pct;
51
+ provisional_suggestion = `Consider declaring provisional — this area has ${missRate}% miss rate (dominant: ${dispersion.dominant_miss})`;
52
+ }
53
+ }
54
+ // Step 4: Confidence from history depth for this club
55
+ let confidence;
56
+ if (scorecards.length > 0) {
57
+ const areaReport = computeAreaPerformance(scorecards);
58
+ const clubStats = areaReport.by_club[club];
59
+ const clubCount = clubStats?.count ?? 0;
60
+ confidence = clubCount >= 5 ? 1.0 : clubCount >= 1 ? 0.5 : 0.3;
61
+ }
62
+ else {
63
+ confidence = 0.3;
64
+ }
65
+ return {
66
+ club,
67
+ confidence,
68
+ reasoning: reasons.join('. '),
69
+ ...(provisional_suggestion ? { provisional_suggestion } : {}),
70
+ };
71
+ }
72
+ // ═══════════════════════════════════════════════════════════
73
+ // classifyShot()
74
+ // ═══════════════════════════════════════════════════════════
75
+ /**
76
+ * Classify a shot result from an execution trace.
77
+ *
78
+ * Rules:
79
+ * - All files in scope, no failures, no reverts → in_the_hole
80
+ * - Has hazards, all resolved before first green suite → in_the_hole (in-pass fix)
81
+ * - Has hazards, resolved after initial pass → green (required rework)
82
+ * - Files outside scope modified → missed_long (over-engineering)
83
+ * - Planned files not modified → missed_short (under-scoping)
84
+ * - Reverts > 0 or approach changed → missed_left (wrong approach)
85
+ * - Some test suites fail despite others passing → missed_right (wrong execution)
86
+ */
87
+ export function classifyShot(trace) {
88
+ const { planned_scope_paths, modified_files, test_results, reverts, hazards_encountered, } = trace;
89
+ // Count signals
90
+ const outOfScopeFiles = modified_files.filter(f => !planned_scope_paths.some(scope => f.startsWith(scope)));
91
+ const unmatchedPlanned = planned_scope_paths.filter(scope => !modified_files.some(f => f.startsWith(scope)));
92
+ const allTestsPassed = test_results.length === 0 || test_results.every(t => t.passed);
93
+ const someTestsFailed = test_results.some(t => !t.passed) && test_results.some(t => t.passed);
94
+ const hasHazards = hazards_encountered.length > 0;
95
+ const firstRunResults = test_results.filter(t => t.first_run);
96
+ const hazardsResolvedInPass = hasHazards && firstRunResults.length > 0 &&
97
+ firstRunResults.every(t => t.passed);
98
+ // Collect miss signals with weights
99
+ const signals = [];
100
+ if (reverts > 0) {
101
+ signals.push({ result: 'missed_left', weight: reverts * 2, reason: `${reverts} revert(s) — wrong approach` });
102
+ }
103
+ if (outOfScopeFiles.length > 0) {
104
+ signals.push({ result: 'missed_long', weight: outOfScopeFiles.length, reason: `${outOfScopeFiles.length} file(s) outside scope — over-engineering` });
105
+ }
106
+ if (unmatchedPlanned.length > 0 && planned_scope_paths.length > 0) {
107
+ signals.push({ result: 'missed_short', weight: unmatchedPlanned.length, reason: `${unmatchedPlanned.length} planned scope(s) not touched — under-scoping` });
108
+ }
109
+ if (someTestsFailed) {
110
+ const failCount = test_results.filter(t => !t.passed).length;
111
+ signals.push({ result: 'missed_right', weight: failCount, reason: `${failCount} test suite(s) failing — wrong execution` });
112
+ }
113
+ // If miss signals present, pick the dominant one
114
+ if (signals.length > 0) {
115
+ signals.sort((a, b) => b.weight - a.weight);
116
+ const dominant = signals[0];
117
+ const dir = MISS_RESULT_TO_DIR[dominant.result] ?? null;
118
+ // Confidence: high if single signal, lower if ambiguous
119
+ const confidence = signals.length === 1 ? 1.0 : 0.7 + (0.2 * (dominant.weight / (signals.reduce((s, sig) => s + sig.weight, 0))));
120
+ return {
121
+ result: dominant.result,
122
+ miss_direction: dir,
123
+ confidence: Math.round(Math.min(confidence, 1.0) * 100) / 100,
124
+ reasoning: dominant.reason,
125
+ };
126
+ }
127
+ // No miss signals — classify as good result
128
+ if (hasHazards && !hazardsResolvedInPass) {
129
+ return {
130
+ result: 'green',
131
+ miss_direction: null,
132
+ confidence: 1.0,
133
+ reasoning: 'Completed with hazards that required rework after initial pass',
134
+ };
135
+ }
136
+ if (hasHazards && hazardsResolvedInPass) {
137
+ return {
138
+ result: 'in_the_hole',
139
+ miss_direction: null,
140
+ confidence: 0.9,
141
+ reasoning: 'Hazards encountered but resolved before initial test pass',
142
+ };
143
+ }
144
+ return {
145
+ result: 'in_the_hole',
146
+ miss_direction: null,
147
+ confidence: 1.0,
148
+ reasoning: 'Clean execution — all files in scope, no failures, no reverts',
149
+ };
150
+ }
151
+ /**
152
+ * Enhanced shot classification using multiple signal sources.
153
+ *
154
+ * Key difference from classifyShot():
155
+ * - Git-only (no CI, no events) defaults to `green` instead of `in_the_hole`
156
+ * - CI signals can upgrade to `in_the_hole` (all tests pass, no retries, no failures)
157
+ * - CI test failures add miss signals (missed_right)
158
+ * - CI retries reduce confidence
159
+ * - Events (failure, dead_end, scope_change) add miss signals
160
+ */
161
+ export function classifyShotFromSignals(input) {
162
+ const { trace, ci, pr, events = [] } = input;
163
+ // Start with base classification from execution trace
164
+ const base = classifyShot(trace);
165
+ // If base already detected misses, enrich with CI/event/PR signals
166
+ if (base.miss_direction !== null) {
167
+ return enrichMissClassification(base, ci, events, pr);
168
+ }
169
+ // Base classified as good (green or in_the_hole)
170
+ // Now apply multi-source rules
171
+ // Count event-based miss signals
172
+ const failureEvents = events.filter(e => e.type === 'failure');
173
+ const deadEndEvents = events.filter(e => e.type === 'dead_end');
174
+ const scopeChangeEvents = events.filter(e => e.type === 'scope_change');
175
+ const eventSignals = [];
176
+ if (deadEndEvents.length > 0) {
177
+ eventSignals.push({
178
+ result: 'missed_left',
179
+ weight: deadEndEvents.length * 2,
180
+ reason: `${deadEndEvents.length} dead end(s) encountered — approach changes required`,
181
+ });
182
+ }
183
+ if (failureEvents.length >= 3) {
184
+ eventSignals.push({
185
+ result: 'missed_right',
186
+ weight: failureEvents.length,
187
+ reason: `${failureEvents.length} failure events — execution difficulties`,
188
+ });
189
+ }
190
+ if (scopeChangeEvents.length > 0) {
191
+ eventSignals.push({
192
+ result: 'missed_long',
193
+ weight: scopeChangeEvents.length,
194
+ reason: `${scopeChangeEvents.length} scope change(s) — scope expanded during execution`,
195
+ });
196
+ }
197
+ // If event signals indicate a miss, return that
198
+ if (eventSignals.length > 0) {
199
+ eventSignals.sort((a, b) => b.weight - a.weight);
200
+ const dominant = eventSignals[0];
201
+ const dir = MISS_RESULT_TO_DIR[dominant.result] ?? null;
202
+ const confidence = eventSignals.length === 1 ? 0.8 : 0.6;
203
+ return {
204
+ result: dominant.result,
205
+ miss_direction: dir,
206
+ confidence,
207
+ reasoning: dominant.reason,
208
+ };
209
+ }
210
+ // No miss signals from events — check PR signals before green vs in_the_hole
211
+ // PR signal: high change requests → missed_right (execution needed rework)
212
+ if (pr && pr.change_request_count >= 2) {
213
+ return {
214
+ result: 'missed_right',
215
+ miss_direction: 'right',
216
+ confidence: 0.7,
217
+ reasoning: `${pr.change_request_count} change request(s) on PR #${pr.pr_number} — execution needed rework`,
218
+ };
219
+ }
220
+ // PR signal: high comment density + change request → stay green (complex but completed)
221
+ if (pr && pr.change_request_count > 0 && pr.file_count > 0 && (pr.comment_count / pr.file_count) > 3) {
222
+ return {
223
+ result: 'green',
224
+ miss_direction: null,
225
+ confidence: 0.8,
226
+ reasoning: `PR #${pr.pr_number}: high comment density (${pr.comment_count} comments / ${pr.file_count} files) with change request — complex but completed`,
227
+ };
228
+ }
229
+ // Determine green vs in_the_hole
230
+ // If base was green (hazards with rework), keep it
231
+ if (base.result === 'green') {
232
+ return base;
233
+ }
234
+ // Base was in_the_hole — check if we have CI confirmation
235
+ const hasCi = ci !== undefined && ci.test_total > 0;
236
+ if (!hasCi) {
237
+ // Git-only: downgrade to green (need CI to confirm in_the_hole)
238
+ return {
239
+ result: 'green',
240
+ miss_direction: null,
241
+ confidence: 0.7,
242
+ reasoning: 'Clean git signals but no CI confirmation — defaulting to green',
243
+ };
244
+ }
245
+ // We have CI data — evaluate
246
+ if (ci.test_failed > 0) {
247
+ return {
248
+ result: 'missed_right',
249
+ miss_direction: 'right',
250
+ confidence: 0.9,
251
+ reasoning: `CI reports ${ci.test_failed} test failure(s) out of ${ci.test_total}`,
252
+ };
253
+ }
254
+ if (ci.retries > 0) {
255
+ // Tests pass but had retries — green, not in_the_hole
256
+ return {
257
+ result: 'green',
258
+ miss_direction: null,
259
+ confidence: 0.8,
260
+ reasoning: `All ${ci.test_passed} tests pass but ${ci.retries} retry(s) needed — not clean enough for in_the_hole`,
261
+ };
262
+ }
263
+ // CI confirms: all tests pass, no retries → in_the_hole
264
+ const prBoost = pr && pr.change_request_count === 0 && pr.review_decision === 'APPROVED'
265
+ ? ` + PR #${pr.pr_number} APPROVED with 0 change requests`
266
+ : '';
267
+ return {
268
+ result: 'in_the_hole',
269
+ miss_direction: null,
270
+ confidence: 1.0,
271
+ reasoning: `CI confirms: ${ci.test_passed}/${ci.test_total} tests pass, 0 retries — clean execution${prBoost}`,
272
+ };
273
+ }
274
+ /** Enrich an existing miss classification with CI/event/PR data */
275
+ function enrichMissClassification(base, ci, events = [], pr) {
276
+ const reasons = [base.reasoning];
277
+ if (ci && ci.test_failed > 0) {
278
+ reasons.push(`CI confirms: ${ci.test_failed} test failure(s)`);
279
+ }
280
+ const failureCount = events.filter(e => e.type === 'failure').length;
281
+ if (failureCount > 0) {
282
+ reasons.push(`${failureCount} failure event(s) recorded`);
283
+ }
284
+ if (pr && pr.change_request_count > 0) {
285
+ reasons.push(`PR #${pr.pr_number}: ${pr.change_request_count} change request(s)`);
286
+ }
287
+ // If multiple sources agree, boost confidence
288
+ const ciAgrees = ci !== undefined && ci.test_failed > 0;
289
+ const eventsAgree = failureCount > 0;
290
+ const prAgrees = pr !== undefined && pr.change_request_count > 0;
291
+ const sources = 1 + (ciAgrees ? 1 : 0) + (eventsAgree ? 1 : 0) + (prAgrees ? 1 : 0);
292
+ const confidence = Math.min(base.confidence + (sources - 1) * 0.1, 1.0);
293
+ return {
294
+ ...base,
295
+ confidence: Math.round(confidence * 100) / 100,
296
+ reasoning: reasons.join('. '),
297
+ };
298
+ }
299
+ /**
300
+ * Generate training recommendations from handicap trends and dispersion data.
301
+ *
302
+ * Checks:
303
+ * 1. Dominant miss direction → targeted practice (high)
304
+ * 2. Worsening trend (last_5 > all_time) → review (high)
305
+ * 3. Club-specific issues (miss_rate > 50%) → adjustment (medium)
306
+ * 4. Recurring hazard types in 3+ consecutive sprints → attention (medium)
307
+ */
308
+ export function generateTrainingPlan(input) {
309
+ const { handicap, dispersion, recentScorecards } = input;
310
+ const recommendations = [];
311
+ // 1. Dominant miss pattern
312
+ if (dispersion.dominant_miss) {
313
+ const dir = dispersion.dominant_miss;
314
+ const dirInfo = dispersion.by_direction[dir];
315
+ const trainingMap = {
316
+ long: { type: 'chipping_practice', instruction: 'Reduce scope per ticket. Break large tickets into smaller sub-tasks before starting.' },
317
+ short: { type: 'putting_practice', instruction: 'Verify all spec requirements are covered before marking a ticket complete. Add a pre-completion checklist.' },
318
+ left: { type: 'driving_range', instruction: 'Spend more time on approach selection. Research patterns before starting implementation.' },
319
+ right: { type: 'chipping_practice', instruction: 'Strictly follow scope_paths. Review diff before commit to catch unrelated changes.' },
320
+ };
321
+ const training = trainingMap[dir];
322
+ recommendations.push({
323
+ area: `Dominant miss: ${dir} (${dirInfo.pct}% of misses)`,
324
+ type: training.type,
325
+ description: `${dirInfo.interpretation} — ${dirInfo.count} occurrences across recent sprints`,
326
+ priority: 'high',
327
+ instruction_adjustment: training.instruction,
328
+ });
329
+ }
330
+ // 2. Worsening trend
331
+ if (handicap.last_5.handicap > handicap.all_time.handicap + 0.5 && handicap.all_time.handicap > 0) {
332
+ recommendations.push({
333
+ area: 'Worsening trend',
334
+ type: 'lessons',
335
+ description: `Recent handicap (+${handicap.last_5.handicap.toFixed(1)}) worse than all-time (+${handicap.all_time.handicap.toFixed(1)})`,
336
+ priority: 'high',
337
+ instruction_adjustment: 'Review recent sprint retros for recurring patterns. Consider reducing sprint scope or complexity until trend stabilizes.',
338
+ });
339
+ }
340
+ // 3. Club-specific issues
341
+ if (recentScorecards.length > 0) {
342
+ const areaReport = computeAreaPerformance(recentScorecards);
343
+ for (const [club, stats] of Object.entries(areaReport.by_club)) {
344
+ if (stats.miss_rate > 50 && stats.count >= 2) {
345
+ recommendations.push({
346
+ area: `Club: ${club}`,
347
+ type: 'driving_range',
348
+ description: `${club} has ${stats.miss_rate}% miss rate across ${stats.count} uses`,
349
+ priority: 'medium',
350
+ instruction_adjustment: `Avoid ${club}-level complexity. Downgrade to a simpler approach or break the work into smaller pieces.`,
351
+ });
352
+ }
353
+ }
354
+ }
355
+ // 4. Recurring hazards in 3+ consecutive sprints
356
+ if (recentScorecards.length >= 3) {
357
+ const hazardTypesBySprint = new Map();
358
+ for (const sc of recentScorecards) {
359
+ const sprintNum = sc.sprint_number;
360
+ for (const shot of sc.shots) {
361
+ for (const h of shot.hazards) {
362
+ if (!hazardTypesBySprint.has(h.type)) {
363
+ hazardTypesBySprint.set(h.type, []);
364
+ }
365
+ const sprints = hazardTypesBySprint.get(h.type);
366
+ if (!sprints.includes(sprintNum)) {
367
+ sprints.push(sprintNum);
368
+ }
369
+ }
370
+ }
371
+ }
372
+ for (const [hazardType, sprints] of hazardTypesBySprint) {
373
+ if (sprints.length >= 3) {
374
+ // Check if they are consecutive (sorted sprints with gap <= 2)
375
+ const sorted = [...sprints].sort((a, b) => a - b);
376
+ const lastThree = sorted.slice(-3);
377
+ const isConsecutive = lastThree[2] - lastThree[0] <= 4; // within 4 sprints
378
+ if (isConsecutive) {
379
+ recommendations.push({
380
+ area: `Recurring hazard: ${hazardType}`,
381
+ type: 'lessons',
382
+ description: `${hazardType} hazards appeared in ${sprints.length} sprints (${sorted.join(', ')})`,
383
+ priority: 'medium',
384
+ instruction_adjustment: `Before starting, check known ${hazardType} hazards from recent scorecards. Add explicit verification steps.`,
385
+ });
386
+ }
387
+ }
388
+ }
389
+ }
390
+ // Sort by priority (high first)
391
+ const priorityOrder = { high: 0, medium: 1, low: 2 };
392
+ recommendations.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
393
+ return recommendations;
394
+ }
395
+ //# sourceMappingURL=advisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisor.js","sourceRoot":"","sources":["../../src/core/advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import type { GolfScorecard, NutritionCategory, SprintClaim, SlopeEvent, PRSignal } from './types.js';
2
+ import type { MetaphorDefinition } from './metaphor.js';
3
+ import type { RoleDefinition } from './roles.js';
4
+ import type { RoadmapDefinition } from './roadmap.js';
5
+ /** A recurring pattern from common-issues.json */
6
+ export interface RecurringPattern {
7
+ id: number;
8
+ title: string;
9
+ category: string;
10
+ sprints_hit: number[];
11
+ gotcha_refs: string[];
12
+ description: string;
13
+ prevention: string;
14
+ /** Players who have reported this pattern */
15
+ reported_by?: string[];
16
+ }
17
+ /** The top-level common-issues.json shape */
18
+ export interface CommonIssuesFile {
19
+ recurring_patterns: RecurringPattern[];
20
+ }
21
+ /** A session entry from sessions.json */
22
+ export interface SessionEntry {
23
+ id: number;
24
+ date: string;
25
+ sprint: string;
26
+ summary: string;
27
+ where_left_off: string;
28
+ }
29
+ /** Briefing filter — what packages/categories the upcoming sprint touches */
30
+ export interface BriefingFilter {
31
+ categories?: string[];
32
+ keywords?: string[];
33
+ }
34
+ /** A single hazard extracted from scorecards */
35
+ export interface HazardEntry {
36
+ sprint: number;
37
+ ticket: string;
38
+ type: string;
39
+ description: string;
40
+ }
41
+ /** Nutrition trend for a single category */
42
+ export interface NutritionTrend {
43
+ category: NutritionCategory;
44
+ healthy: number;
45
+ needs_attention: number;
46
+ neglected: number;
47
+ trend: 'healthy' | 'mixed' | 'neglected';
48
+ }
49
+ /**
50
+ * Filter common issues to only those relevant to the sprint's work.
51
+ * Matches by category list and/or keyword search in title/description/prevention.
52
+ * Returns at most 10 results, sorted by most-recently-hit sprint (descending).
53
+ */
54
+ export declare function filterCommonIssues(issues: CommonIssuesFile, filter: BriefingFilter): RecurringPattern[];
55
+ /**
56
+ * Extract all hazards from scorecards into a flat searchable index.
57
+ * Optionally filter by keyword in the hazard description.
58
+ */
59
+ export declare function extractHazardIndex(scorecards: GolfScorecard[], keyword?: string): {
60
+ shot_hazards: HazardEntry[];
61
+ bunker_locations: {
62
+ sprint: number;
63
+ location: string;
64
+ }[];
65
+ };
66
+ /**
67
+ * Compute nutrition trends across scorecards.
68
+ * Shows which dev health categories are consistently healthy vs neglected.
69
+ */
70
+ export declare function computeNutritionTrend(scorecards: GolfScorecard[]): NutritionTrend[];
71
+ /**
72
+ * Generate hazard warnings for specific areas, formatted for agent instruction injection.
73
+ *
74
+ * Filters extractHazardIndex() to only hazards in the target areas,
75
+ * then formats as "WARNING: [area] — [description] (seen in S{N})".
76
+ */
77
+ export declare function hazardBriefing(opts: {
78
+ areas: string[];
79
+ scorecards: GolfScorecard[];
80
+ }): string[];
81
+ /**
82
+ * Format the complete pre-round briefing.
83
+ * Combines handicap card, filtered hazards, filtered common issues,
84
+ * nutrition trends, and session continuity into a single compact output.
85
+ *
86
+ * Replaces reading ~15k tokens across 3-4 files with ~500 tokens of output.
87
+ */
88
+ export declare function formatBriefing(opts: {
89
+ scorecards: GolfScorecard[];
90
+ commonIssues: CommonIssuesFile;
91
+ lastSession?: SessionEntry;
92
+ filter?: BriefingFilter;
93
+ includeTraining?: boolean;
94
+ claims?: SprintClaim[];
95
+ roadmap?: RoadmapDefinition;
96
+ currentSprint?: number;
97
+ metaphor?: MetaphorDefinition;
98
+ role?: RoleDefinition;
99
+ recentEvents?: SlopeEvent[];
100
+ eventRecencyWindow?: number;
101
+ prSignal?: PRSignal;
102
+ }): string;
103
+ //# sourceMappingURL=briefing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/core/briefing.ts"],"names":[],"mappings":"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"}