@ebrindley/build 0.0.0-stage → 1.42.1-rc28

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 (878) hide show
  1. package/.build-project/providers/catalog.json +13951 -0
  2. package/.build-project/providers/pricing.json +1978 -0
  3. package/.build-project/providers/registry.json +4103 -0
  4. package/.github/SECURITY.md +75 -0
  5. package/.nvmrc +1 -0
  6. package/CHANGELOG.md +661 -0
  7. package/CODE_OF_CONDUCT.md +44 -0
  8. package/CONTRIBUTING.md +24 -0
  9. package/INSTALL.md +623 -0
  10. package/LICENSE +21 -0
  11. package/README.md +118 -2
  12. package/THIRD_PARTY_NOTICES.txt +26 -0
  13. package/dist/ai-judge-UE5UOYOO.js +191 -0
  14. package/dist/allowlist-grounding-KPLN6NC5.js +16 -0
  15. package/dist/allowlist-utils-MZZKKXRD.js +31 -0
  16. package/dist/apply-completion-mode-EM37UZHB.js +110 -0
  17. package/dist/artifact-migrator-WPACNSEP.js +276 -0
  18. package/dist/ask-2OZ4JFQR.js +176 -0
  19. package/dist/auth-6UKBTJUQ.js +185 -0
  20. package/dist/auth-H5KJL6HL.js +165 -0
  21. package/dist/auth-LVJRJDMU.js +12 -0
  22. package/dist/auth-NHZOCNRR.js +94 -0
  23. package/dist/auth-PBXHWXGW.js +95 -0
  24. package/dist/auth-T7Y5DCAH.js +91 -0
  25. package/dist/auth-TVVKCHQW.js +13 -0
  26. package/dist/auth-UHB2UCSS.js +97 -0
  27. package/dist/auth-VACA3VUL.js +98 -0
  28. package/dist/auth-VVLC77S3.js +44 -0
  29. package/dist/auth-liveness-XO4AGDDD.js +53 -0
  30. package/dist/autoloop-cleanup-SI3VGAAR.js +106 -0
  31. package/dist/autoloop-evidence-gates-J5GG5YQB.js +39 -0
  32. package/dist/autoloop-gate-policy-SUNAEP6Q.js +169 -0
  33. package/dist/autoloop-helpers-VQGQNTT6.js +52 -0
  34. package/dist/autoloop-ledger-P6TIDP7C.js +96 -0
  35. package/dist/autoloop-ledger-subscriber-HFAGOZXH.js +161 -0
  36. package/dist/autoloop-run-defaults-GWGZBNT7.js +27 -0
  37. package/dist/autoloop-run-lock-GBWRM5A2.js +197 -0
  38. package/dist/autoloop-success-C32QVWOP.js +93 -0
  39. package/dist/autoloop-termination-summary-GI6IBQWD.js +58 -0
  40. package/dist/autoloop-trajectory-AMKSQISD.js +70 -0
  41. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  42. package/dist/automatic-branch-cleanup-R62X2C5O.js +49 -0
  43. package/dist/autonomous-loop-controller-2WL363LW.js +4386 -0
  44. package/dist/backend-YUTFDZXZ.js +30 -0
  45. package/dist/background-executor-Z3ODTMD7.js +260 -0
  46. package/dist/backlog-75QPEAMW.js +403 -0
  47. package/dist/backlog-execution-intent-GWUV5TUK.js +19 -0
  48. package/dist/backup-active-store-XHWLN34M.js +16 -0
  49. package/dist/backup-machine-stores-UI4LTJOY.js +251 -0
  50. package/dist/backup-telemetry-db-Z4ICYCNW.js +26 -0
  51. package/dist/branch-archive-manager-FMSQ7YJF.js +18 -0
  52. package/dist/branch-cleanup-manager-ST6FJGND.js +35 -0
  53. package/dist/build-gate-7NKWPY62.js +68 -0
  54. package/dist/build-root-S7DINODY.js +18 -0
  55. package/dist/change-summary-R6CB6VXJ.js +50 -0
  56. package/dist/chunk-24MNKKOM.js +173 -0
  57. package/dist/chunk-2H6VZFIO.js +235 -0
  58. package/dist/chunk-2JIX3EKV.js +39 -0
  59. package/dist/chunk-2KO7HVZM.js +106 -0
  60. package/dist/chunk-2L36U25O.js +100 -0
  61. package/dist/chunk-2NMNFUQA.js +475 -0
  62. package/dist/chunk-2OUAEH67.js +83 -0
  63. package/dist/chunk-2VLJUXJU.js +115 -0
  64. package/dist/chunk-2VUEDIUM.js +77 -0
  65. package/dist/chunk-2Y2IIHPI.js +430 -0
  66. package/dist/chunk-2YRG3LHZ.js +220 -0
  67. package/dist/chunk-2Z5Q3SUY.js +65 -0
  68. package/dist/chunk-32IYXIE5.js +873 -0
  69. package/dist/chunk-33IGPPUI.js +292 -0
  70. package/dist/chunk-352PCJLK.js +283 -0
  71. package/dist/chunk-35J4NE6S.js +226 -0
  72. package/dist/chunk-3C7WBIVK.js +1016 -0
  73. package/dist/chunk-3H3EY6U7.js +1225 -0
  74. package/dist/chunk-3H4MWYIC.js +198 -0
  75. package/dist/chunk-3HHWQR3N.js +2479 -0
  76. package/dist/chunk-3JKNRYEE.js +14 -0
  77. package/dist/chunk-3LECCYZY.js +128 -0
  78. package/dist/chunk-3LOY6YZI.js +852 -0
  79. package/dist/chunk-3M57DADF.js +44 -0
  80. package/dist/chunk-3NOTLVLG.js +3803 -0
  81. package/dist/chunk-3OPP2OZB.js +1480 -0
  82. package/dist/chunk-3P5IN5E7.js +9 -0
  83. package/dist/chunk-3PL22IYZ.js +20 -0
  84. package/dist/chunk-3REDAJUJ.js +14 -0
  85. package/dist/chunk-3S2R4XJI.js +203 -0
  86. package/dist/chunk-3UBZI5DW.js +61 -0
  87. package/dist/chunk-3VV5OBGG.js +308 -0
  88. package/dist/chunk-3WY5TU2O.js +823 -0
  89. package/dist/chunk-43OKHTW4.js +82 -0
  90. package/dist/chunk-45KUJBDI.js +112 -0
  91. package/dist/chunk-47X5LM7B.js +224 -0
  92. package/dist/chunk-4B6FQJ77.js +268 -0
  93. package/dist/chunk-4BTDUT2S.js +42 -0
  94. package/dist/chunk-4DJL2VXA.js +24 -0
  95. package/dist/chunk-4EBSXZ73.js +48 -0
  96. package/dist/chunk-4QKP6I4C.js +294 -0
  97. package/dist/chunk-4U6XK2DG.js +300 -0
  98. package/dist/chunk-4UMRUFBD.js +132 -0
  99. package/dist/chunk-4US4SYJ4.js +569 -0
  100. package/dist/chunk-4ZPLWEZO.js +154 -0
  101. package/dist/chunk-56WPYDJH.js +624 -0
  102. package/dist/chunk-57WRCJJW.js +50 -0
  103. package/dist/chunk-5AW4RMNG.js +24 -0
  104. package/dist/chunk-5EQN56OZ.js +155 -0
  105. package/dist/chunk-5F43TUIN.js +38 -0
  106. package/dist/chunk-5FKHIKTS.js +115 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5KQETTNS.js +152 -0
  109. package/dist/chunk-5PDVN2KO.js +498 -0
  110. package/dist/chunk-5UBIFVRD.js +509 -0
  111. package/dist/chunk-5YDE3Q62.js +46 -0
  112. package/dist/chunk-626AJVMU.js +302 -0
  113. package/dist/chunk-633XZ7UF.js +3583 -0
  114. package/dist/chunk-63DHNHGA.js +236 -0
  115. package/dist/chunk-666656AR.js +568 -0
  116. package/dist/chunk-67YRJPJO.js +19 -0
  117. package/dist/chunk-6CAU7VBA.js +20 -0
  118. package/dist/chunk-6CB3KJRY.js +21 -0
  119. package/dist/chunk-6DBMALXL.js +29 -0
  120. package/dist/chunk-6E25C4IA.js +269 -0
  121. package/dist/chunk-6FIBNIQU.js +73 -0
  122. package/dist/chunk-6G57FYBV.js +189 -0
  123. package/dist/chunk-6KZKRTG3.js +4885 -0
  124. package/dist/chunk-6LAH2UV2.js +525 -0
  125. package/dist/chunk-6PZY2TTU.js +921 -0
  126. package/dist/chunk-6T6NHXK4.js +230 -0
  127. package/dist/chunk-6TBEX4R4.js +432 -0
  128. package/dist/chunk-6TRD7TEE.js +911 -0
  129. package/dist/chunk-6XCP2RAI.js +47 -0
  130. package/dist/chunk-726G6WDL.js +351 -0
  131. package/dist/chunk-75EMT7BF.js +616 -0
  132. package/dist/chunk-762ACDZJ.js +4696 -0
  133. package/dist/chunk-77I6G4CO.js +1 -0
  134. package/dist/chunk-7DJ6SQH3.js +510 -0
  135. package/dist/chunk-7HPCIOMA.js +1383 -0
  136. package/dist/chunk-7HYBSRPZ.js +17503 -0
  137. package/dist/chunk-7KBEOPVB.js +73 -0
  138. package/dist/chunk-7LHJDJB3.js +2222 -0
  139. package/dist/chunk-7NVJMH52.js +306 -0
  140. package/dist/chunk-7RMARDVH.js +33 -0
  141. package/dist/chunk-7SEWU4QG.js +36 -0
  142. package/dist/chunk-7TUTZTI2.js +911 -0
  143. package/dist/chunk-7VBDFPUM.js +340 -0
  144. package/dist/chunk-7VRJHTGZ.js +6406 -0
  145. package/dist/chunk-7YAOUUKK.js +493 -0
  146. package/dist/chunk-AAAODV76.js +860 -0
  147. package/dist/chunk-AB4HUJVQ.js +339 -0
  148. package/dist/chunk-AEQWV746.js +611 -0
  149. package/dist/chunk-AHU3FKPA.js +11639 -0
  150. package/dist/chunk-AISTV5XU.js +226 -0
  151. package/dist/chunk-AJBTKGJZ.js +48 -0
  152. package/dist/chunk-AJJNW7XT.js +248 -0
  153. package/dist/chunk-AJN5Y5YZ.js +160 -0
  154. package/dist/chunk-ALDTFNZ3.js +150 -0
  155. package/dist/chunk-ARARVIZK.js +281 -0
  156. package/dist/chunk-ATBM6AW5.js +53 -0
  157. package/dist/chunk-ATKEKM3E.js +206 -0
  158. package/dist/chunk-AUJLW6JZ.js +92 -0
  159. package/dist/chunk-AY3MHEFM.js +24 -0
  160. package/dist/chunk-B7PYTV72.js +236 -0
  161. package/dist/chunk-B7YRSULE.js +1423 -0
  162. package/dist/chunk-BAWJNMWF.js +339 -0
  163. package/dist/chunk-BBPIILO2.js +88 -0
  164. package/dist/chunk-BD3PGW6A.js +957 -0
  165. package/dist/chunk-BDPYFAB4.js +44 -0
  166. package/dist/chunk-BIUV23HH.js +729 -0
  167. package/dist/chunk-BQ3VAGXH.js +243 -0
  168. package/dist/chunk-BQJOGAWT.js +31 -0
  169. package/dist/chunk-BT7EG7CO.js +68 -0
  170. package/dist/chunk-BV3XQQLU.js +27 -0
  171. package/dist/chunk-BY6ODHNZ.js +78 -0
  172. package/dist/chunk-BZRLSZNV.js +79 -0
  173. package/dist/chunk-C3DH3NCY.js +2773 -0
  174. package/dist/chunk-C3KCMAJP.js +756 -0
  175. package/dist/chunk-C7AGUJ5K.js +267 -0
  176. package/dist/chunk-CBSWKQCX.js +342 -0
  177. package/dist/chunk-CE5OZBYY.js +21 -0
  178. package/dist/chunk-CFCVYHSW.js +373 -0
  179. package/dist/chunk-CHA2HDE5.js +126 -0
  180. package/dist/chunk-CIHWPGS5.js +146 -0
  181. package/dist/chunk-CJBSZX3F.js +127 -0
  182. package/dist/chunk-CLA6QIJM.js +43 -0
  183. package/dist/chunk-CPSVQR2I.js +365 -0
  184. package/dist/chunk-CRPRVNQ4.js +254 -0
  185. package/dist/chunk-CSIE4Y7C.js +1093 -0
  186. package/dist/chunk-CSOPSYDY.js +142 -0
  187. package/dist/chunk-CSXLLEGB.js +205 -0
  188. package/dist/chunk-CTDLERWU.js +293 -0
  189. package/dist/chunk-CULBXMSK.js +110 -0
  190. package/dist/chunk-D2M2Y5ID.js +21 -0
  191. package/dist/chunk-D37WY7SH.js +1060 -0
  192. package/dist/chunk-D4VJFCGZ.js +89 -0
  193. package/dist/chunk-D6WTZMZB.js +48 -0
  194. package/dist/chunk-DBHOWDUH.js +976 -0
  195. package/dist/chunk-DCACX7BV.js +19364 -0
  196. package/dist/chunk-DFHX4XYA.js +128 -0
  197. package/dist/chunk-DIKBRRKE.js +176 -0
  198. package/dist/chunk-DJG5RIOR.js +9 -0
  199. package/dist/chunk-DNIOIISW.js +616 -0
  200. package/dist/chunk-DOA5G7IA.js +315 -0
  201. package/dist/chunk-DP7FKP6W.js +855 -0
  202. package/dist/chunk-DS2JZ677.js +79 -0
  203. package/dist/chunk-DSRLVYBS.js +82 -0
  204. package/dist/chunk-EAEVKNJA.js +209 -0
  205. package/dist/chunk-EEUESN3T.js +575 -0
  206. package/dist/chunk-EJ4LUU5Y.js +73 -0
  207. package/dist/chunk-EJIWTPSZ.js +1063 -0
  208. package/dist/chunk-EJVCDTAN.js +116 -0
  209. package/dist/chunk-EKLUBDBQ.js +627 -0
  210. package/dist/chunk-EN62WLFD.js +849 -0
  211. package/dist/chunk-ENYRCL43.js +26 -0
  212. package/dist/chunk-EP22ZMFO.js +273 -0
  213. package/dist/chunk-EP4SVAVI.js +87 -0
  214. package/dist/chunk-EPAMVGI3.js +1562 -0
  215. package/dist/chunk-EPRMH6HO.js +24 -0
  216. package/dist/chunk-ES6NWJ36.js +4057 -0
  217. package/dist/chunk-ETA2K4KI.js +30 -0
  218. package/dist/chunk-ETAD4NKD.js +31 -0
  219. package/dist/chunk-EUWIIDQ7.js +93 -0
  220. package/dist/chunk-EVE3OD2W.js +141 -0
  221. package/dist/chunk-EXA26FFC.js +459 -0
  222. package/dist/chunk-EXSPAA35.js +244 -0
  223. package/dist/chunk-F55YABKV.js +258 -0
  224. package/dist/chunk-F5DNGU5W.js +27 -0
  225. package/dist/chunk-F622MJYV.js +103 -0
  226. package/dist/chunk-F6NIQD74.js +5111 -0
  227. package/dist/chunk-FAWJTC34.js +43 -0
  228. package/dist/chunk-FAZBRHGG.js +47 -0
  229. package/dist/chunk-FIEUSGNJ.js +39 -0
  230. package/dist/chunk-FKCG7K6H.js +1146 -0
  231. package/dist/chunk-FOVVXV45.js +229 -0
  232. package/dist/chunk-FRBPKBFE.js +30 -0
  233. package/dist/chunk-FSA5BPFI.js +268 -0
  234. package/dist/chunk-FSJ5TTZ3.js +29 -0
  235. package/dist/chunk-FT7SGLXT.js +193 -0
  236. package/dist/chunk-FUUVZZUB.js +62 -0
  237. package/dist/chunk-FYMRVUNZ.js +1697 -0
  238. package/dist/chunk-FYTAA5FG.js +162 -0
  239. package/dist/chunk-G3VB2UCZ.js +3892 -0
  240. package/dist/chunk-G6OIMVXH.js +405 -0
  241. package/dist/chunk-G7PQCXVH.js +228 -0
  242. package/dist/chunk-GAB6UW52.js +1087 -0
  243. package/dist/chunk-GAFJEYLK.js +29 -0
  244. package/dist/chunk-GC4CRMTS.js +642 -0
  245. package/dist/chunk-GFHSIWHL.js +5297 -0
  246. package/dist/chunk-GI5M67YA.js +735 -0
  247. package/dist/chunk-GIJWHUWF.js +191 -0
  248. package/dist/chunk-GO6DRECI.js +1 -0
  249. package/dist/chunk-GOFVBTMN.js +314 -0
  250. package/dist/chunk-GQIP72ZJ.js +13 -0
  251. package/dist/chunk-GQXLXRFA.js +28 -0
  252. package/dist/chunk-GT6HFKJB.js +48 -0
  253. package/dist/chunk-GVJGSSKM.js +174 -0
  254. package/dist/chunk-GWHGTG37.js +36 -0
  255. package/dist/chunk-GZAJHLKO.js +18 -0
  256. package/dist/chunk-GZK62I3N.js +314 -0
  257. package/dist/chunk-H3HGMISG.js +483 -0
  258. package/dist/chunk-H3ISZJMJ.js +403 -0
  259. package/dist/chunk-H4HXVWEC.js +9 -0
  260. package/dist/chunk-H6MJGKAW.js +120 -0
  261. package/dist/chunk-HBTTGVR5.js +353 -0
  262. package/dist/chunk-HBZ322WZ.js +35 -0
  263. package/dist/chunk-HEP3ILP4.js +34 -0
  264. package/dist/chunk-HGFXODKO.js +106 -0
  265. package/dist/chunk-HHWDTB6S.js +59 -0
  266. package/dist/chunk-HKO45NLZ.js +286 -0
  267. package/dist/chunk-HLVTEA6A.js +89 -0
  268. package/dist/chunk-HS3SY6HN.js +160 -0
  269. package/dist/chunk-HT5OCGKN.js +899 -0
  270. package/dist/chunk-HXIIEMGF.js +78 -0
  271. package/dist/chunk-I56TH7VM.js +46 -0
  272. package/dist/chunk-I6FN3R5D.js +352 -0
  273. package/dist/chunk-I7SCBHJN.js +655 -0
  274. package/dist/chunk-IJM4GKAT.js +529 -0
  275. package/dist/chunk-IMEYU36R.js +344 -0
  276. package/dist/chunk-INJ3SS6A.js +936 -0
  277. package/dist/chunk-IUKOPCCE.js +441 -0
  278. package/dist/chunk-IVEPZQJO.js +33 -0
  279. package/dist/chunk-IVZEONFC.js +43 -0
  280. package/dist/chunk-IWBHRSG7.js +936 -0
  281. package/dist/chunk-IYY3HQAD.js +484 -0
  282. package/dist/chunk-J2ICMYDA.js +48 -0
  283. package/dist/chunk-J2QCFLUN.js +505 -0
  284. package/dist/chunk-J5HM6V5P.js +1039 -0
  285. package/dist/chunk-J6NZX6QH.js +398 -0
  286. package/dist/chunk-JBBB2Y47.js +432 -0
  287. package/dist/chunk-JDCZQZU7.js +42 -0
  288. package/dist/chunk-JEDNXGSS.js +169 -0
  289. package/dist/chunk-JHP7OT6K.js +89 -0
  290. package/dist/chunk-JLS65NUQ.js +14 -0
  291. package/dist/chunk-JNMWYMC6.js +38 -0
  292. package/dist/chunk-JNSTWNNW.js +25 -0
  293. package/dist/chunk-JOSK6GEU.js +9564 -0
  294. package/dist/chunk-JQUMSIGC.js +100 -0
  295. package/dist/chunk-JVHGMURQ.js +1106 -0
  296. package/dist/chunk-JYXS47FQ.js +951 -0
  297. package/dist/chunk-K2ZMW2Z5.js +2147 -0
  298. package/dist/chunk-K7FAFORM.js +14 -0
  299. package/dist/chunk-KBJXX3ON.js +333 -0
  300. package/dist/chunk-KHFKVQWY.js +486 -0
  301. package/dist/chunk-KHMEI3DQ.js +173 -0
  302. package/dist/chunk-KHW3UD7B.js +69 -0
  303. package/dist/chunk-KKQKWAMF.js +365 -0
  304. package/dist/chunk-KOKXJV2U.js +455 -0
  305. package/dist/chunk-KQ4NGOJI.js +14 -0
  306. package/dist/chunk-KQYQOXMS.js +342 -0
  307. package/dist/chunk-KTMW65UX.js +14 -0
  308. package/dist/chunk-KUEWV2JH.js +593 -0
  309. package/dist/chunk-KXYDV3HP.js +1523 -0
  310. package/dist/chunk-KZ4JMGZ5.js +96 -0
  311. package/dist/chunk-KZWGBUIO.js +2659 -0
  312. package/dist/chunk-L2CBG5IX.js +1892 -0
  313. package/dist/chunk-L2S235CU.js +314 -0
  314. package/dist/chunk-L32WD57F.js +98 -0
  315. package/dist/chunk-LDJCKAJP.js +123 -0
  316. package/dist/chunk-LDWNBEN7.js +541 -0
  317. package/dist/chunk-LJVH57G2.js +241 -0
  318. package/dist/chunk-LPQ7NZEN.js +209 -0
  319. package/dist/chunk-LRGH3CCV.js +148 -0
  320. package/dist/chunk-LULOGMMM.js +1133 -0
  321. package/dist/chunk-LWGKN2GY.js +8284 -0
  322. package/dist/chunk-LX4F24ZH.js +157 -0
  323. package/dist/chunk-M4BUEXXF.js +839 -0
  324. package/dist/chunk-M6UHOC4I.js +553 -0
  325. package/dist/chunk-MCBNWZNO.js +657 -0
  326. package/dist/chunk-MEMSY6VY.js +223 -0
  327. package/dist/chunk-MHLEZQQI.js +145 -0
  328. package/dist/chunk-MJ6WNSIX.js +192 -0
  329. package/dist/chunk-MKASIKWZ.js +442 -0
  330. package/dist/chunk-MNOVBYFU.js +60 -0
  331. package/dist/chunk-MO2BYAAF.js +2896 -0
  332. package/dist/chunk-MP6P7Y2A.js +180 -0
  333. package/dist/chunk-MQ4TFJAG.js +3365 -0
  334. package/dist/chunk-MT2WAIR3.js +131 -0
  335. package/dist/chunk-MTU7VTNN.js +1122 -0
  336. package/dist/chunk-MULMXX4V.js +150 -0
  337. package/dist/chunk-MW2DWWVA.js +147 -0
  338. package/dist/chunk-MY3ZPUN4.js +151 -0
  339. package/dist/chunk-MYLH2S4G.js +64 -0
  340. package/dist/chunk-MZ5WYKNA.js +28 -0
  341. package/dist/chunk-N3Q2JNPV.js +249 -0
  342. package/dist/chunk-N5DX4JAK.js +12 -0
  343. package/dist/chunk-NAINGKHF.js +35 -0
  344. package/dist/chunk-NEQUQHOX.js +223 -0
  345. package/dist/chunk-NHNPEZS4.js +1408 -0
  346. package/dist/chunk-NHTIXJCR.js +17 -0
  347. package/dist/chunk-NKLPMBNV.js +1154 -0
  348. package/dist/chunk-NMVZ5YES.js +199 -0
  349. package/dist/chunk-NRFRY3GE.js +256 -0
  350. package/dist/chunk-NTD6CSI6.js +1266 -0
  351. package/dist/chunk-NUO7B3SH.js +318 -0
  352. package/dist/chunk-NVOHIJKG.js +1319 -0
  353. package/dist/chunk-NXH3RX7O.js +523 -0
  354. package/dist/chunk-NXZ3DURF.js +257 -0
  355. package/dist/chunk-O26L6F7F.js +209 -0
  356. package/dist/chunk-O5RRIUEP.js +124 -0
  357. package/dist/chunk-O5X6BKAO.js +10 -0
  358. package/dist/chunk-O6ZQUVTR.js +31 -0
  359. package/dist/chunk-O7FE75QZ.js +306 -0
  360. package/dist/chunk-OC7Z6AJQ.js +81 -0
  361. package/dist/chunk-OH7IEZ63.js +307 -0
  362. package/dist/chunk-OI734GRS.js +115 -0
  363. package/dist/chunk-OJBH62DK.js +684 -0
  364. package/dist/chunk-OKJLVSTJ.js +247 -0
  365. package/dist/chunk-OMX5VL43.js +79 -0
  366. package/dist/chunk-ONHAMBN6.js +12 -0
  367. package/dist/chunk-ONYPLIVE.js +753 -0
  368. package/dist/chunk-OSK7QWPD.js +637 -0
  369. package/dist/chunk-OTXLMJKP.js +438 -0
  370. package/dist/chunk-OV5PKQMA.js +213 -0
  371. package/dist/chunk-OXK5HA4B.js +31 -0
  372. package/dist/chunk-OYDWFQA4.js +272 -0
  373. package/dist/chunk-OZAUKWHB.js +22 -0
  374. package/dist/chunk-P5P2EKGH.js +94 -0
  375. package/dist/chunk-P6SSWAKY.js +29 -0
  376. package/dist/chunk-P7CQGPLS.js +30 -0
  377. package/dist/chunk-P7RVCHQV.js +197 -0
  378. package/dist/chunk-PEBWDYIW.js +726 -0
  379. package/dist/chunk-PFCXFO7A.js +9193 -0
  380. package/dist/chunk-PFLDWMX6.js +168 -0
  381. package/dist/chunk-PHZGLQSK.js +15883 -0
  382. package/dist/chunk-PNFTPNSR.js +20 -0
  383. package/dist/chunk-PPHXX4W7.js +175 -0
  384. package/dist/chunk-PPZESPJT.js +262 -0
  385. package/dist/chunk-PRDHI2L5.js +296 -0
  386. package/dist/chunk-PSTKWHHN.js +32 -0
  387. package/dist/chunk-PV53ODOT.js +555 -0
  388. package/dist/chunk-PVJBTI7P.js +24 -0
  389. package/dist/chunk-PXKERBKX.js +100 -0
  390. package/dist/chunk-PZ5AY32C.js +10 -0
  391. package/dist/chunk-Q3DHEZA5.js +85 -0
  392. package/dist/chunk-Q5RZDVQK.js +204 -0
  393. package/dist/chunk-Q64IR2Z2.js +4933 -0
  394. package/dist/chunk-Q6Z5UGPL.js +398 -0
  395. package/dist/chunk-QAMAV4DT.js +627 -0
  396. package/dist/chunk-QBWF4444.js +112 -0
  397. package/dist/chunk-QDKYT4CI.js +22805 -0
  398. package/dist/chunk-QFLBRWCJ.js +126 -0
  399. package/dist/chunk-QILAQACE.js +107 -0
  400. package/dist/chunk-QJ6OEH4K.js +3683 -0
  401. package/dist/chunk-QK3NLYTV.js +320 -0
  402. package/dist/chunk-QOFLUS24.js +535 -0
  403. package/dist/chunk-QOIASNEJ.js +98 -0
  404. package/dist/chunk-QP4UTSOV.js +3587 -0
  405. package/dist/chunk-QP5ST7RI.js +904 -0
  406. package/dist/chunk-QS5AGRZN.js +167 -0
  407. package/dist/chunk-QTAOU53N.js +107 -0
  408. package/dist/chunk-QTCLJHLZ.js +351 -0
  409. package/dist/chunk-QTOLTG4L.js +119 -0
  410. package/dist/chunk-QWDV4OSL.js +142 -0
  411. package/dist/chunk-QWMQ74KD.js +508 -0
  412. package/dist/chunk-QX6LOMMH.js +158 -0
  413. package/dist/chunk-QXBKIHY7.js +238 -0
  414. package/dist/chunk-QXBKTJT6.js +270 -0
  415. package/dist/chunk-QYQOVOLR.js +196 -0
  416. package/dist/chunk-R2CKS6WT.js +73 -0
  417. package/dist/chunk-R2TIYG7U.js +68 -0
  418. package/dist/chunk-R2W3LESH.js +465 -0
  419. package/dist/chunk-R5EXHMUN.js +100 -0
  420. package/dist/chunk-RBBTBCHX.js +289 -0
  421. package/dist/chunk-RBKLOUXA.js +121 -0
  422. package/dist/chunk-RCP2Y6DQ.js +86 -0
  423. package/dist/chunk-RCYEJSD5.js +260 -0
  424. package/dist/chunk-RFDVSI4N.js +134 -0
  425. package/dist/chunk-RGJU63FV.js +1717 -0
  426. package/dist/chunk-RI4EX2QE.js +18 -0
  427. package/dist/chunk-RIMARPCF.js +152 -0
  428. package/dist/chunk-RJ6RSNT6.js +42 -0
  429. package/dist/chunk-RNI2GUIF.js +131 -0
  430. package/dist/chunk-RPHUWJ3K.js +264 -0
  431. package/dist/chunk-RPIMAMV7.js +361 -0
  432. package/dist/chunk-RQFX6YRN.js +49 -0
  433. package/dist/chunk-RRC5BL7B.js +285 -0
  434. package/dist/chunk-RSYTSBOO.js +79 -0
  435. package/dist/chunk-RWQQIKIC.js +35 -0
  436. package/dist/chunk-RZUBOZH2.js +373 -0
  437. package/dist/chunk-S2E632FQ.js +380 -0
  438. package/dist/chunk-S2VQCZO4.js +22 -0
  439. package/dist/chunk-S2XIMQJQ.js +681 -0
  440. package/dist/chunk-S47ISY27.js +183 -0
  441. package/dist/chunk-S6I4KISU.js +142 -0
  442. package/dist/chunk-S6TAFQI5.js +2403 -0
  443. package/dist/chunk-SBBNT5ZJ.js +27 -0
  444. package/dist/chunk-SDJV2DTQ.js +491 -0
  445. package/dist/chunk-SDPIFNLD.js +33 -0
  446. package/dist/chunk-SF6YK3JI.js +835 -0
  447. package/dist/chunk-SK3ZFONO.js +976 -0
  448. package/dist/chunk-SKTFRFQ7.js +1775 -0
  449. package/dist/chunk-SNGM452K.js +2002 -0
  450. package/dist/chunk-STW7OFOA.js +581 -0
  451. package/dist/chunk-SU6UFUQY.js +1351 -0
  452. package/dist/chunk-SVJM3LJA.js +27 -0
  453. package/dist/chunk-SVUNZOPG.js +129 -0
  454. package/dist/chunk-T5XLUYV3.js +34 -0
  455. package/dist/chunk-T7E5JS6N.js +57 -0
  456. package/dist/chunk-TA3N5MMO.js +450 -0
  457. package/dist/chunk-TAJPCXSB.js +13 -0
  458. package/dist/chunk-TDEMDRN2.js +1639 -0
  459. package/dist/chunk-TDSEX5CF.js +24 -0
  460. package/dist/chunk-TGCVL74Y.js +28 -0
  461. package/dist/chunk-TGXXYDL4.js +1012 -0
  462. package/dist/chunk-TIKTYUJO.js +296 -0
  463. package/dist/chunk-TIZAJD4M.js +6029 -0
  464. package/dist/chunk-TLSEZZCG.js +5549 -0
  465. package/dist/chunk-TMBDRHAX.js +19 -0
  466. package/dist/chunk-TRURQUBP.js +1217 -0
  467. package/dist/chunk-TSQ256N5.js +152 -0
  468. package/dist/chunk-TUQMMFEQ.js +2244 -0
  469. package/dist/chunk-U424MJLC.js +81 -0
  470. package/dist/chunk-U4DRS6ZW.js +11 -0
  471. package/dist/chunk-U5KS22IN.js +204 -0
  472. package/dist/chunk-UAPHFJPN.js +673 -0
  473. package/dist/chunk-UB7LQITD.js +1040 -0
  474. package/dist/chunk-UBVRHGAZ.js +237 -0
  475. package/dist/chunk-UDNNAQN5.js +98 -0
  476. package/dist/chunk-UJP3XM54.js +342 -0
  477. package/dist/chunk-UJYDH2MW.js +305 -0
  478. package/dist/chunk-UKMPASIC.js +399 -0
  479. package/dist/chunk-UKUL3EHK.js +763 -0
  480. package/dist/chunk-UPHU64NB.js +1327 -0
  481. package/dist/chunk-URMSZXAD.js +43 -0
  482. package/dist/chunk-US3RT6CY.js +525 -0
  483. package/dist/chunk-UTDEOPKV.js +30 -0
  484. package/dist/chunk-UUUDKV7N.js +13 -0
  485. package/dist/chunk-UVKWU3SM.js +39 -0
  486. package/dist/chunk-V2TVPO3X.js +521 -0
  487. package/dist/chunk-V3KLVK7B.js +398 -0
  488. package/dist/chunk-V3YFFHDR.js +17 -0
  489. package/dist/chunk-VAG6GUBR.js +1162 -0
  490. package/dist/chunk-VBENAHDA.js +1814 -0
  491. package/dist/chunk-VBNCKCCI.js +16 -0
  492. package/dist/chunk-VCGSWN5M.js +1300 -0
  493. package/dist/chunk-VE2O2I7M.js +115 -0
  494. package/dist/chunk-VIFHYTI5.js +31 -0
  495. package/dist/chunk-VJER3FUS.js +5080 -0
  496. package/dist/chunk-VLMDM56Q.js +268 -0
  497. package/dist/chunk-VMFZEVVX.js +99 -0
  498. package/dist/chunk-VNDPQVUZ.js +1853 -0
  499. package/dist/chunk-VSPJRLGA.js +4783 -0
  500. package/dist/chunk-VSWC5ZXI.js +103 -0
  501. package/dist/chunk-VYI4DSZP.js +2017 -0
  502. package/dist/chunk-W4BAIQ6L.js +1212 -0
  503. package/dist/chunk-W7VQAL2K.js +2203 -0
  504. package/dist/chunk-WEI3ZDZH.js +33 -0
  505. package/dist/chunk-WEIUS5NT.js +26 -0
  506. package/dist/chunk-WEW7UFWE.js +546 -0
  507. package/dist/chunk-WGQAXLNA.js +384 -0
  508. package/dist/chunk-WJAL4JL3.js +206 -0
  509. package/dist/chunk-WKFOJ5ZG.js +141 -0
  510. package/dist/chunk-WMWQEFLN.js +2177 -0
  511. package/dist/chunk-WNECKKO2.js +154 -0
  512. package/dist/chunk-WPKLYOAM.js +195 -0
  513. package/dist/chunk-WSH37YQN.js +243 -0
  514. package/dist/chunk-WV3KQDPE.js +84 -0
  515. package/dist/chunk-WZFC4V4U.js +389 -0
  516. package/dist/chunk-XCOIBNET.js +13 -0
  517. package/dist/chunk-XDM65LBX.js +53 -0
  518. package/dist/chunk-XGU6PBO5.js +645 -0
  519. package/dist/chunk-XHOI4V62.js +43 -0
  520. package/dist/chunk-XIBVFMLQ.js +6858 -0
  521. package/dist/chunk-XJ2E7YEJ.js +117 -0
  522. package/dist/chunk-XON4ZCYX.js +69 -0
  523. package/dist/chunk-XQPEWJPI.js +127 -0
  524. package/dist/chunk-XSJTIFUY.js +31 -0
  525. package/dist/chunk-XT7OVWM3.js +64 -0
  526. package/dist/chunk-XTXYIISX.js +1104 -0
  527. package/dist/chunk-XV7NZL4B.js +57 -0
  528. package/dist/chunk-XWIZ6B5S.js +109 -0
  529. package/dist/chunk-XWLIKOBX.js +240 -0
  530. package/dist/chunk-XZOXEIN4.js +156 -0
  531. package/dist/chunk-XZRS7I7W.js +3673 -0
  532. package/dist/chunk-Y4ZDDHB6.js +44 -0
  533. package/dist/chunk-Y733RB7T.js +194 -0
  534. package/dist/chunk-YBHUB4XR.js +14931 -0
  535. package/dist/chunk-YKC75XK4.js +147 -0
  536. package/dist/chunk-YKMXFVK7.js +27 -0
  537. package/dist/chunk-YO5BAJ55.js +225 -0
  538. package/dist/chunk-YPDCLXNZ.js +568 -0
  539. package/dist/chunk-YSQPGVFK.js +116 -0
  540. package/dist/chunk-YTVVTIWJ.js +716 -0
  541. package/dist/chunk-YVCMDVBB.js +698 -0
  542. package/dist/chunk-YYTOA6DP.js +114 -0
  543. package/dist/chunk-Z5WGNULV.js +88 -0
  544. package/dist/chunk-Z6NGVVXG.js +66 -0
  545. package/dist/chunk-Z7CDQNH3.js +20 -0
  546. package/dist/chunk-ZH4G3FU5.js +187 -0
  547. package/dist/chunk-ZJB6SQPA.js +257 -0
  548. package/dist/chunk-ZL6E4HMY.js +42 -0
  549. package/dist/chunk-ZMLOC3DW.js +62 -0
  550. package/dist/chunk-ZORW64QH.js +101 -0
  551. package/dist/chunk-ZVVD2XGV.js +1369 -0
  552. package/dist/cli-utils-ER33ODC5.js +31 -0
  553. package/dist/cli-validation-6CHPTANV.js +146 -0
  554. package/dist/commit-utils-3STAY7C7.js +49 -0
  555. package/dist/compatibility-notice-IHNXR2JR.js +21 -0
  556. package/dist/compete-config-resolver-V3GDNJMM.js +125 -0
  557. package/dist/compete-results-XUM3PJHS.js +318 -0
  558. package/dist/competition-outcome-tracker-NWSMVUPG.js +62 -0
  559. package/dist/config-4HHE4OIK.js +238 -0
  560. package/dist/config-D6YAZASH.js +10 -0
  561. package/dist/config-MIPRDYYV.js +46 -0
  562. package/dist/config-audit-GA5DCUAI.js +371 -0
  563. package/dist/config-explain-4LMO556H.js +71 -0
  564. package/dist/config-loader-RGP634PC.js +51 -0
  565. package/dist/config-manager-J2UTO635.js +114 -0
  566. package/dist/config-merger-TVUJBZTS.js +14 -0
  567. package/dist/config-validator-H4ZVIE56.js +122 -0
  568. package/dist/cost-HSIV5U2Y.js +85 -0
  569. package/dist/data-migration-state-OAUL2WPQ.js +35 -0
  570. package/dist/db-migrator-NUOW5NKR.js +34 -0
  571. package/dist/default-paths-UILB62BN.js +49 -0
  572. package/dist/discovery-V6GYUJUC.js +53 -0
  573. package/dist/doctor-BBSMCDWE.js +271 -0
  574. package/dist/doctor-context-blocks-LPY75VZA.js +231 -0
  575. package/dist/doctor-instructions-import-JXHDDOE5.js +70 -0
  576. package/dist/doctor-purpose-6YJOXPBE.js +30 -0
  577. package/dist/domain-analyzer-S35ABUNA.js +48 -0
  578. package/dist/ensure-initialized-Q6PEU55O.js +78 -0
  579. package/dist/entry.js +922 -0
  580. package/dist/error-parser-core-MZFMFANN.js +70 -0
  581. package/dist/evaluation-context-GQBYDAEV.js +63 -0
  582. package/dist/evidence-plan-resolver-5FUAP3SA.js +111 -0
  583. package/dist/execution-data-writer-YCG5UH37.js +72 -0
  584. package/dist/execution-policy-applier-PWZM5LNA.js +63 -0
  585. package/dist/execution-preflight-DASJWWQF.js +223 -0
  586. package/dist/execution-roles-KNSNNB2D.js +112 -0
  587. package/dist/exit-code-error-QIY5DOKF.js +18 -0
  588. package/dist/external-temp-cleanup-CAW7LQ6R.js +360 -0
  589. package/dist/factory-YCYCB7AE.js +209 -0
  590. package/dist/file-utils-ZQYNBQBW.js +45 -0
  591. package/dist/flywheel-allowlist-revert-H22HA6JE.js +21 -0
  592. package/dist/flywheel-autoloop-executor-PDOASJEZ.js +316 -0
  593. package/dist/flywheel-autoloop-unverified-TOKYFCDC.js +36 -0
  594. package/dist/flywheel-competition-executor-YJUMMEJO.js +320 -0
  595. package/dist/flywheel-executor-JWU43KAY.js +437 -0
  596. package/dist/flywheel-git-isolation-FQ2TRWMB.js +56 -0
  597. package/dist/flywheel-manifest-HDPNMWWF.js +114 -0
  598. package/dist/flywheel-model-defaults-UHAKTZT3.js +110 -0
  599. package/dist/flywheel-preflight-III2C7TH.js +163 -0
  600. package/dist/flywheel-resume-2O45MS7Y.js +31 -0
  601. package/dist/flywheel-resume-execution-lease-P2BK257J.js +59 -0
  602. package/dist/flywheel-safety-AVAVFXIJ.js +19 -0
  603. package/dist/flywheel-scope-decision-ALJUUNGG.js +14 -0
  604. package/dist/get-telemetry-logger-MPDVO2JA.js +155 -0
  605. package/dist/git-message-style-KCXGMTDT.js +104 -0
  606. package/dist/guidance-profile-config-G3K5YQOO.js +113 -0
  607. package/dist/guidance-profile-renderer-TX4TNDFL.js +23 -0
  608. package/dist/identity-XLQJ4YJF.js +25 -0
  609. package/dist/index-query-6NUY4FKX.js +37 -0
  610. package/dist/index.js +85588 -0
  611. package/dist/indexer-DL54CM3K.js +44 -0
  612. package/dist/init-OUZ72344.js +245 -0
  613. package/dist/instructions-import-offer-NSYXSITC.js +363 -0
  614. package/dist/instructions-run-NBII7W36.js +114 -0
  615. package/dist/interrupted-work-E4TLKJLE.js +43 -0
  616. package/dist/invoke-provider-auth-NEWEIHCI.js +38 -0
  617. package/dist/judge-scoring.json +64 -0
  618. package/dist/lab-mode-YXQ2Y3NG.js +44 -0
  619. package/dist/lab-utils-5QAMDJR5.js +29 -0
  620. package/dist/linux-host-class-YDWQX65O.js +31 -0
  621. package/dist/llm-judge-executor-OJSNCTFJ.js +179 -0
  622. package/dist/local-ci-config-VZ4WWDT5.js +48 -0
  623. package/dist/local-executor-DCMDDRX2.js +280 -0
  624. package/dist/logger-5KNKS3O4.js +154 -0
  625. package/dist/matrix-prompt-builder-4ZBOGZSB.js +527 -0
  626. package/dist/matrix-result-parser-EZJM4YXP.js +14 -0
  627. package/dist/merge-batch-RTEEMVDB.js +313 -0
  628. package/dist/merge-batch-members-VIWGVRHP.js +24 -0
  629. package/dist/merge-queue-TIIUSOY6.js +126 -0
  630. package/dist/merge-queue-trust-DUNZ4J65.js +21 -0
  631. package/dist/metadata-UKSMWM6J.js +29 -0
  632. package/dist/model-catalog-readiness-R5KJBP5M.js +202 -0
  633. package/dist/model-invocations-db-XTUPPQ34.js +70 -0
  634. package/dist/model-resolver-JFZ2MHOJ.js +39 -0
  635. package/dist/model-resolver-SCQ57KAQ.js +217 -0
  636. package/dist/model-roles-D3OR4NAH.js +110 -0
  637. package/dist/monitor-F4SIU5G2.js +96 -0
  638. package/dist/nested-worktrees-2WUWQ75N.js +23 -0
  639. package/dist/next-S3IRLVER.js +96 -0
  640. package/dist/next-UKPFRXOO.js +148 -0
  641. package/dist/opportunistic-TL4S26VX.js +86 -0
  642. package/dist/optimization-config-resolver-NAEIYU6A.js +148 -0
  643. package/dist/package-HJR4QJT4.js +10 -0
  644. package/dist/parse-git-status-7PIYFPS2.js +21 -0
  645. package/dist/path-security-5WJSY56G.js +41 -0
  646. package/dist/paths-JUI7C4KU.js +45 -0
  647. package/dist/plan-backlog-list-fast-SSTQL5XP.js +89 -0
  648. package/dist/plan-backlog-show-fast-PFRAQ3JB.js +114 -0
  649. package/dist/plan-sprint-list-fast-HD2KBZSY.js +110 -0
  650. package/dist/plan-sprint-status-fast-YFYH7WQF.js +116 -0
  651. package/dist/plan-task-status-fast-JU5PNLUU.js +114 -0
  652. package/dist/plan-to-flywheel-PY5MSY2H.js +529 -0
  653. package/dist/preflight-PJHGTJNZ.js +12 -0
  654. package/dist/process-registry-B4ZUCN7T.js +28 -0
  655. package/dist/process-scanner-TU3QHWVB.js +23 -0
  656. package/dist/processes-6FHVGT72.js +28 -0
  657. package/dist/processes-json-fast-YWTMUWXB.js +72 -0
  658. package/dist/profile-HWTC56SG.js +209 -0
  659. package/dist/project-runtime-paths-2UQNG5Y4.js +41 -0
  660. package/dist/protected-branches-N36LDBFY.js +71 -0
  661. package/dist/provider-aware-resource-manager-YTFAHNGJ.js +40 -0
  662. package/dist/provider-matrix-2KO2V5OM.js +214 -0
  663. package/dist/provider-matrix-renderer-MEC3PER7.js +139 -0
  664. package/dist/provider-output-forwarding-2AHL7YMA.js +26 -0
  665. package/dist/provider-registry-WCZ65QHC.js +136 -0
  666. package/dist/provider-temp-cleanup-IUNPJCZF.js +14 -0
  667. package/dist/prune-engine-EOQVWEP6.js +448 -0
  668. package/dist/publication-turn-S42RZTQF.js +44 -0
  669. package/dist/quality-gate-JQMVCKOO.js +72 -0
  670. package/dist/quickstart-3O6FRCFB.js +105 -0
  671. package/dist/readiness-GW6ABRHB.js +139 -0
  672. package/dist/readiness-KFZCXDTT.js +215 -0
  673. package/dist/registry-7XG376SY.js +217 -0
  674. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  675. package/dist/repo-root-YG6MQZDW.js +28 -0
  676. package/dist/resolution-engine-FFEK7HQ2.js +187 -0
  677. package/dist/resolve-provider-cli-ZEXVZKET.js +44 -0
  678. package/dist/restore-telemetry-db-E7BR5PO7.js +459 -0
  679. package/dist/routing-events-AW6SRZ6G.js +13 -0
  680. package/dist/routing-history-store-FMDDQL6W.js +39 -0
  681. package/dist/routing-planner-C6OHO3EY.js +221 -0
  682. package/dist/runner-KHDNQ5KU.js +1194 -0
  683. package/dist/runner-PIS2BW7Y.js +1801 -0
  684. package/dist/safety-E3JJVSFL.js +67 -0
  685. package/dist/safety-stanza-HE6GXP4G.js +49 -0
  686. package/dist/sandbox-7LBZC5PE.js +72 -0
  687. package/dist/sandbox-ASWCDYZL.js +80 -0
  688. package/dist/schema-extensions.sql +234 -0
  689. package/dist/security-JI22TBEB.js +17 -0
  690. package/dist/setup-bb-plugin-FQXLA76Y.js +531 -0
  691. package/dist/setup-claude-code-NF4ZSHVE.js +197 -0
  692. package/dist/setup-temp-cleanup-2APZ4HMA.js +29 -0
  693. package/dist/shared-utils-34HJZ6JX.js +40 -0
  694. package/dist/simple-artifact-goal-MQLDDMMX.js +29 -0
  695. package/dist/sprint-N7JFTEGL.js +403 -0
  696. package/dist/sprint-bridge-KJXIBNRJ.js +117 -0
  697. package/dist/sprint-completion-dependents-34SR7JVL.js +43 -0
  698. package/dist/sprint-execution-service-A6JPUBWY.js +376 -0
  699. package/dist/sprint-manager-MU2ZUWN2.js +140 -0
  700. package/dist/sqlite-timeout-config-U2CT4LKU.js +13 -0
  701. package/dist/sqlite-wrapper-FSGJ2QEW.js +19 -0
  702. package/dist/stale-cleanup-orchestrator-4X6324VF.js +71 -0
  703. package/dist/storage-access-I3V5LER7.js +31 -0
  704. package/dist/store-XVG64ZR2.js +25 -0
  705. package/dist/task-classifier-MN2DYE5R.js +558 -0
  706. package/dist/task-list-fast-7AT6LTTA.js +112 -0
  707. package/dist/task-manager-LHPBBRRE.js +136 -0
  708. package/dist/task-report-OLPAWBTK.js +64 -0
  709. package/dist/task-type-detector-6RG3YNZF.js +27 -0
  710. package/dist/task-type-resolver-EQHOUIHT.js +64 -0
  711. package/dist/telemetry-5VYSK772.js +212 -0
  712. package/dist/telemetry-health-tracker-4GFW2EMP.js +12 -0
  713. package/dist/telemetry-path-resolver-H3NFHHQY.js +34 -0
  714. package/dist/telemetry-reliability-URJDTNPZ.js +76 -0
  715. package/dist/transports-NREZQTJK.js +106 -0
  716. package/dist/unified-cost-tracker-5MTBJ2CL.js +59 -0
  717. package/dist/unified-state-cleanup-GGAXLHXF.js +292 -0
  718. package/dist/universal-cost-calculator-JTFEJVWK.js +70 -0
  719. package/dist/user-agents-QLIGPLP2.js +30 -0
  720. package/dist/variant-execution-I4ZZUAWY.js +319 -0
  721. package/dist/variant-opt-parser-JHCXKY2K.js +251 -0
  722. package/dist/variant-request-input-PL37N3AN.js +11 -0
  723. package/dist/variant-state-cleanup-KHMXRBZN.js +287 -0
  724. package/dist/variant-worker-COB5YTJX.js +4517 -0
  725. package/dist/variant-worker.js +26 -0
  726. package/dist/variants-XGDSXYG3.js +267 -0
  727. package/dist/verification-command-YSPU4VBH.js +66 -0
  728. package/dist/verify-command-timeout-DQUYH33Z.js +11 -0
  729. package/dist/verify-commands-LOHMOFKC.js +65 -0
  730. package/dist/warning-JSKSFKBT.js +13 -0
  731. package/dist/work-edge-K65NHVWY.js +50 -0
  732. package/dist/work-item-writer-KY5ZWZWW.js +30 -0
  733. package/dist/worker-JNXXEIT6.js +1504 -0
  734. package/dist/worker.js +21 -0
  735. package/dist/workspace-tree-identity-JO5PSKTW.js +52 -0
  736. package/dist/worktree-environment-WTVABAQW.js +64 -0
  737. package/dist/worktree-metrics-VZRQI26T.js +66 -0
  738. package/dist/writeback-TQFQBJNU.js +50 -0
  739. package/docs/CLI_REFERENCE.md +8287 -0
  740. package/docs/PROVIDER_SETUP.md +1737 -0
  741. package/docs/README.md +96 -0
  742. package/docs/TROUBLESHOOTING.md +2209 -0
  743. package/docs/getting-started/QUICK_START.md +260 -0
  744. package/docs/getting-started/README.md +198 -0
  745. package/docs/getting-started/SETUP.md +25 -0
  746. package/docs/reference/AGENT_CONTEXT.md +84 -0
  747. package/docs/reference/DELIVERY_ONBOARDING.md +198 -0
  748. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  749. package/docs/reference/SECURITY.md +291 -0
  750. package/docs/reference/TELEMETRY_PRIVACY.md +259 -0
  751. package/integrations/bb-plugin-build/README.md +391 -0
  752. package/integrations/bb-plugin-build/app.css +431 -0
  753. package/integrations/bb-plugin-build/app.tsx +6210 -0
  754. package/integrations/bb-plugin-build/package.json +45 -0
  755. package/integrations/bb-plugin-build/server.ts +488 -0
  756. package/integrations/bb-plugin-build/src/adapter.ts +3672 -0
  757. package/integrations/bb-plugin-build/src/backlog-authoring-model.ts +150 -0
  758. package/integrations/bb-plugin-build/src/backlog-authoring-schema.ts +458 -0
  759. package/integrations/bb-plugin-build/src/backlog-authoring-service.ts +467 -0
  760. package/integrations/bb-plugin-build/src/backlog-authoring-view.ts +1025 -0
  761. package/integrations/bb-plugin-build/src/command-evidence-schema.ts +13 -0
  762. package/integrations/bb-plugin-build/src/competition-defaults-schema.ts +122 -0
  763. package/integrations/bb-plugin-build/src/competition-defaults-service.ts +105 -0
  764. package/integrations/bb-plugin-build/src/competition-defaults-view.ts +138 -0
  765. package/integrations/bb-plugin-build/src/contract.ts +718 -0
  766. package/integrations/bb-plugin-build/src/execution-activity-view.ts +98 -0
  767. package/integrations/bb-plugin-build/src/finalize-model.ts +205 -0
  768. package/integrations/bb-plugin-build/src/finalize-schema.ts +150 -0
  769. package/integrations/bb-plugin-build/src/finalize-service.ts +330 -0
  770. package/integrations/bb-plugin-build/src/finalize-view.ts +159 -0
  771. package/integrations/bb-plugin-build/src/judge-operations-readback.ts +303 -0
  772. package/integrations/bb-plugin-build/src/judge-operations-schema.ts +33 -0
  773. package/integrations/bb-plugin-build/src/judge-operations-view.ts +459 -0
  774. package/integrations/bb-plugin-build/src/model.ts +1318 -0
  775. package/integrations/bb-plugin-build/src/monitor-service.ts +233 -0
  776. package/integrations/bb-plugin-build/src/panel-read-ux.ts +97 -0
  777. package/integrations/bb-plugin-build/src/patch-preview-schema.ts +166 -0
  778. package/integrations/bb-plugin-build/src/patch-preview-service.ts +480 -0
  779. package/integrations/bb-plugin-build/src/patch-preview-view.ts +109 -0
  780. package/integrations/bb-plugin-build/src/planning-readback.ts +228 -0
  781. package/integrations/bb-plugin-build/src/planning-service.ts +647 -0
  782. package/integrations/bb-plugin-build/src/planning-sync-evidence.ts +37 -0
  783. package/integrations/bb-plugin-build/src/planning-workspace-readback.ts +33 -0
  784. package/integrations/bb-plugin-build/src/planning-workspace-schema.ts +131 -0
  785. package/integrations/bb-plugin-build/src/planning-workspace.ts +333 -0
  786. package/integrations/bb-plugin-build/src/poll-handoff.ts +136 -0
  787. package/integrations/bb-plugin-build/src/project-target-server.ts +21 -0
  788. package/integrations/bb-plugin-build/src/project-target.ts +45 -0
  789. package/integrations/bb-plugin-build/src/reference-index.ts +218 -0
  790. package/integrations/bb-plugin-build/src/repository-identity.ts +17 -0
  791. package/integrations/bb-plugin-build/src/repository-schema.ts +30 -0
  792. package/integrations/bb-plugin-build/src/result-explorer-view.ts +597 -0
  793. package/integrations/bb-plugin-build/src/result-readback-model.ts +163 -0
  794. package/integrations/bb-plugin-build/src/result-readback-schema.ts +319 -0
  795. package/integrations/bb-plugin-build/src/result-readback-service.ts +333 -0
  796. package/integrations/bb-plugin-build/src/run-page-view.ts +332 -0
  797. package/integrations/bb-plugin-build/src/setup-config-schema.ts +293 -0
  798. package/integrations/bb-plugin-build/src/setup-config-service.ts +620 -0
  799. package/integrations/bb-plugin-build/src/setup-config-view.ts +388 -0
  800. package/integrations/bb-plugin-build/src/sprint-close-model.ts +150 -0
  801. package/integrations/bb-plugin-build/src/sprint-close-schema.ts +128 -0
  802. package/integrations/bb-plugin-build/src/sprint-close-service.ts +293 -0
  803. package/integrations/bb-plugin-build/src/sprint-close-view.ts +116 -0
  804. package/integrations/bb-plugin-build/src/sprint-composition-model.ts +709 -0
  805. package/integrations/bb-plugin-build/src/sprint-composition-readback.ts +231 -0
  806. package/integrations/bb-plugin-build/src/sprint-composition-schema.ts +597 -0
  807. package/integrations/bb-plugin-build/src/sprint-composition-service.ts +773 -0
  808. package/integrations/bb-plugin-build/src/sprint-composition-view.ts +1221 -0
  809. package/integrations/bb-plugin-build/src/sprint-execution-schema.ts +188 -0
  810. package/integrations/bb-plugin-build/src/sprint-execution-service.ts +289 -0
  811. package/integrations/bb-plugin-build/src/sprint-execution-view.ts +54 -0
  812. package/integrations/bb-plugin-build/src/task-authoring-model.ts +563 -0
  813. package/integrations/bb-plugin-build/src/task-authoring-schema.ts +629 -0
  814. package/integrations/bb-plugin-build/src/task-authoring-service.ts +842 -0
  815. package/integrations/bb-plugin-build/src/task-authoring-view.ts +1227 -0
  816. package/integrations/bb-plugin-build/src/task-catalog-schema.ts +46 -0
  817. package/integrations/bb-plugin-build/src/task-catalog-service.ts +44 -0
  818. package/integrations/bb-plugin-build/src/task-detail-readback.ts +56 -0
  819. package/integrations/bb-plugin-build/src/task-detail-schema.ts +171 -0
  820. package/integrations/bb-plugin-build/src/task-navigation.ts +446 -0
  821. package/integrations/bb-plugin-build/src/workbench-route.ts +74 -0
  822. package/package.json +306 -4
  823. package/schemas/README.md +80 -0
  824. package/schemas/build.config.schema.json +2110 -0
  825. package/schemas/config-v1.schema.json +136 -0
  826. package/schemas/execution-config.schema.json +47 -0
  827. package/schemas/judge-scoring.schema.json +257 -0
  828. package/schemas/provider-config.schema.json +179 -0
  829. package/schemas/telemetry-config.schema.json +79 -0
  830. package/schemas/user-preferences.schema.json +141 -0
  831. package/scripts/assert-node-runtime.mjs +146 -0
  832. package/scripts/preflight-native.mjs +49 -0
  833. package/scripts/setup-git-hooks.mjs +39 -0
  834. package/scripts/sync.sh +2871 -0
  835. package/scripts/write-node-launcher.sh +138 -0
  836. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  837. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  838. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  839. package/templates/.build-project/README.md +41 -0
  840. package/templates/.build-project/agents/README.md +50 -0
  841. package/templates/.build-project/agents/architect.md +10 -0
  842. package/templates/.build-project/agents/code-reviewer.md +10 -0
  843. package/templates/.build-project/agents/debugger.md +10 -0
  844. package/templates/.build-project/agents/documenter.md +10 -0
  845. package/templates/.build-project/agents/test-automator.md +10 -0
  846. package/templates/.build-project/config/build.config.jsonc +64 -0
  847. package/templates/.build-project/config/project-context.template.json +6 -0
  848. package/templates/.build-project/config/task-type-aliases.presets/kanban.yaml +14 -0
  849. package/templates/.build-project/config/task-type-aliases.presets/scrum.yaml +17 -0
  850. package/templates/.build-project/config/task-type-aliases.presets/xp.yaml +12 -0
  851. package/templates/.build-project/config/task-type-aliases.yaml +29 -0
  852. package/templates/.build-project/gitignore.template +70 -0
  853. package/templates/.build-project/task-types/analysis.yaml +38 -0
  854. package/templates/.build-project/task-types/architecture.yaml +35 -0
  855. package/templates/.build-project/task-types/doc.yaml +34 -0
  856. package/templates/.build-project/task-types/feature.yaml +22 -0
  857. package/templates/.build-project/task-types/general.yaml +4 -0
  858. package/templates/.build-project/task-types/security.yaml +38 -0
  859. package/templates/AGENTS.template.md +85 -0
  860. package/templates/CLAUDE.template.md +1 -0
  861. package/templates/GEMINI.template.md +1 -0
  862. package/templates/builtin-workflows/code-review.yaml +73 -0
  863. package/templates/builtin-workflows/skills/code-review/SKILL.md +61 -0
  864. package/templates/builtin-workflows/skills/execution-contract-analysis/SKILL.md +24 -0
  865. package/templates/builtin-workflows/skills/execution-contract-code/SKILL.md +19 -0
  866. package/templates/builtin-workflows/skills/execution-contract-structured/SKILL.md +17 -0
  867. package/templates/ci/incident-intake.mjs +787 -0
  868. package/templates/ci/incidents.yml.template +103 -0
  869. package/templates/ci/node.yml.template +17 -0
  870. package/templates/ci/python.yml.template +17 -0
  871. package/templates/guard-kit/GUARD_SETUP.md.template +258 -0
  872. package/templates/guard-kit/build-guard.yml.template +189 -0
  873. package/templates/guard-kit/check.mjs.template +932 -0
  874. package/templates/guard-kit/config.json.template +7 -0
  875. package/templates/guard-kit/policy.json.template +1 -0
  876. package/templates/profiles/README.md +57 -0
  877. package/templates/profiles/frontier-claude.json +23 -0
  878. package/templates/profiles/frontier-codex.json +23 -0
@@ -0,0 +1,1154 @@
1
+ import {
2
+ TaskTypeAliasMap
3
+ } from "./chunk-2KO7HVZM.js";
4
+ import {
5
+ boundTypeFromIntent,
6
+ calculateGuidanceTier,
7
+ extractFileHintPaths,
8
+ generatePromptInjection,
9
+ generateSpecQualitySignals,
10
+ getBoundType,
11
+ hasUnfilledMarkers,
12
+ validateTaskSpec
13
+ } from "./chunk-UAPHFJPN.js";
14
+ import {
15
+ TaskTypeRegistry
16
+ } from "./chunk-6T6NHXK4.js";
17
+ import {
18
+ fromPersistedFormat,
19
+ generateEnhancements,
20
+ getArchivedFilePath,
21
+ hintsFromEnhancements,
22
+ isInArchive,
23
+ resolveBucketArchiveRoot,
24
+ toEnhancementSet,
25
+ toPersistedFormat
26
+ } from "./chunk-US3RT6CY.js";
27
+ import {
28
+ validateCompletionContracts
29
+ } from "./chunk-MCBNWZNO.js";
30
+ import {
31
+ appendActivity,
32
+ keepActivity
33
+ } from "./chunk-J2QCFLUN.js";
34
+ import {
35
+ withIndexRegeneration
36
+ } from "./chunk-CSXLLEGB.js";
37
+ import {
38
+ createWorkItemFile
39
+ } from "./chunk-CIHWPGS5.js";
40
+ import {
41
+ getBucketByName
42
+ } from "./chunk-V3KLVK7B.js";
43
+ import {
44
+ resolvePlanningContext
45
+ } from "./chunk-BBPIILO2.js";
46
+ import {
47
+ isValidId
48
+ } from "./chunk-4DJL2VXA.js";
49
+ import {
50
+ detectProjectCapabilities
51
+ } from "./chunk-AHU3FKPA.js";
52
+ import {
53
+ isPersistedWorkEdge,
54
+ listMarkdownFiles,
55
+ listMarkdownFilesRecursive,
56
+ parseMarkdownFile,
57
+ writeMarkdownFile
58
+ } from "./chunk-352PCJLK.js";
59
+ import {
60
+ emitCustomWarning
61
+ } from "./chunk-7VRJHTGZ.js";
62
+
63
+ // src/planning/backlog-manager.ts
64
+ import * as fs from "fs/promises";
65
+ import * as path from "path";
66
+
67
+ // src/planning/schema-validator.ts
68
+ var BACKLOG_STATUSES = ["inbox", "reviewed", "archived", "done"];
69
+ var PRIORITIES = ["P0", "P1", "P2", "P3"];
70
+ var DEBT_SEVERITIES = ["critical", "high", "medium", "low"];
71
+ var DEBT_EFFORTS = ["low", "medium", "high"];
72
+ var DEBT_STATUSES = ["pending", "in-progress", "completed", "blocked", "archived"];
73
+ var PARKING_STATUSES = ["current", "reconsidering", "re-prioritized", "archived"];
74
+ var SPRINT_STATUSES = ["planning", "active", "completed", "archived"];
75
+ var TASK_STATUSES = [
76
+ "todo",
77
+ "in_progress",
78
+ "review",
79
+ "done",
80
+ "pending",
81
+ "in-progress",
82
+ "completed",
83
+ "blocked",
84
+ "archived",
85
+ "cancelled",
86
+ "canceled"
87
+ ];
88
+ function validateBaseFrontMatter(frontMatter, expectedKind, errors) {
89
+ if (typeof frontMatter.id !== "string" || frontMatter.id.length === 0) {
90
+ errors.push({
91
+ field: "id",
92
+ message: "Missing required field: id",
93
+ suggestion: "Use format: YYYYMMDDTHHMMSSZ-<uuidHex12> (UTC)"
94
+ });
95
+ } else if (!isValidId(frontMatter.id)) {
96
+ errors.push({
97
+ field: "id",
98
+ message: `Invalid id format: ${frontMatter.id}`,
99
+ suggestion: "Expected: YYYYMMDDTHHMMSSZ-<uuidHex12> (UTC)"
100
+ });
101
+ }
102
+ if (typeof frontMatter.kind !== "string" || frontMatter.kind.length === 0) {
103
+ errors.push({
104
+ field: "kind",
105
+ message: "Missing required field: kind",
106
+ suggestion: `Must be: ${expectedKind}`
107
+ });
108
+ } else if (frontMatter.kind !== expectedKind) {
109
+ errors.push({
110
+ field: "kind",
111
+ message: `Invalid kind: ${frontMatter.kind}`,
112
+ suggestion: `Must be: ${expectedKind}`
113
+ });
114
+ }
115
+ if (typeof frontMatter.title !== "string" || frontMatter.title.trim().length === 0) {
116
+ errors.push({
117
+ field: "title",
118
+ message: "Missing required field: title",
119
+ suggestion: "Provide a descriptive title"
120
+ });
121
+ }
122
+ }
123
+ function validateExpectedRuntimeMinutes(value, errors) {
124
+ if (value === void 0) return;
125
+ const minutes = Number(value);
126
+ if (Number.isNaN(minutes) || !Number.isFinite(minutes) || minutes <= 0) {
127
+ errors.push({
128
+ field: "expectedRuntimeMinutes",
129
+ message: `Invalid expectedRuntimeMinutes: ${String(value)}`,
130
+ suggestion: "Must be a positive number of minutes"
131
+ });
132
+ }
133
+ }
134
+ function validateBacklogItem(frontMatter) {
135
+ const errors = [];
136
+ validateBaseFrontMatter(frontMatter, "backlog", errors);
137
+ if (!frontMatter.status) {
138
+ errors.push({
139
+ field: "status",
140
+ message: "Missing required field: status",
141
+ suggestion: `Must be one of: ${BACKLOG_STATUSES.join(", ")}`
142
+ });
143
+ } else if (!BACKLOG_STATUSES.includes(frontMatter.status)) {
144
+ errors.push({
145
+ field: "status",
146
+ message: `Invalid status: ${frontMatter.status}`,
147
+ suggestion: `Must be one of: ${BACKLOG_STATUSES.join(", ")}`
148
+ });
149
+ }
150
+ if (frontMatter.priority && !PRIORITIES.includes(frontMatter.priority)) {
151
+ errors.push({
152
+ field: "priority",
153
+ message: `Invalid priority: ${frontMatter.priority}`,
154
+ suggestion: `Must be one of: ${PRIORITIES.join(", ")}`
155
+ });
156
+ }
157
+ if (frontMatter.estimatedComplexity !== void 0) {
158
+ const complexity = Number(frontMatter.estimatedComplexity);
159
+ if (Number.isNaN(complexity) || complexity < 0 || complexity > 1) {
160
+ errors.push({
161
+ field: "estimatedComplexity",
162
+ message: `Invalid estimatedComplexity: ${frontMatter.estimatedComplexity}`,
163
+ suggestion: "Must be a number between 0.0 and 1.0"
164
+ });
165
+ }
166
+ }
167
+ validateExpectedRuntimeMinutes(frontMatter.expectedRuntimeMinutes, errors);
168
+ if (frontMatter.workEdges !== void 0) {
169
+ if (!Array.isArray(frontMatter.workEdges)) {
170
+ errors.push({
171
+ field: "workEdges",
172
+ message: "workEdges must be an array of persisted canonical edges",
173
+ suggestion: "Run `build plan backlog graph migrate` to inspect legacy/unbound edges"
174
+ });
175
+ } else {
176
+ frontMatter.workEdges.forEach((edge, index) => {
177
+ if (!isPersistedWorkEdge(edge)) {
178
+ errors.push({
179
+ field: `workEdges[${index}]`,
180
+ message: "Malformed persisted work edge",
181
+ suggestion: "Each edge needs non-empty from/to/declaredOn/declaredTarget, a valid type (depends_on|supersedes), known fromKind/toKind, and a known declaredBy (blocks|blocked-by|supersedes|superseded_by)"
182
+ });
183
+ }
184
+ });
185
+ }
186
+ }
187
+ return {
188
+ valid: errors.length === 0,
189
+ errors
190
+ };
191
+ }
192
+ function validateDebtItem(frontMatter) {
193
+ const errors = [];
194
+ validateBaseFrontMatter(frontMatter, "tech-debt", errors);
195
+ if (frontMatter.severity && !DEBT_SEVERITIES.includes(frontMatter.severity)) {
196
+ errors.push({
197
+ field: "severity",
198
+ message: `Invalid severity: ${frontMatter.severity}`,
199
+ suggestion: `Must be one of: ${DEBT_SEVERITIES.join(", ")}`
200
+ });
201
+ }
202
+ if (!frontMatter.status) {
203
+ errors.push({
204
+ field: "status",
205
+ message: "Missing required field: status",
206
+ suggestion: `Must be one of: ${DEBT_STATUSES.join(", ")}`
207
+ });
208
+ } else if (!DEBT_STATUSES.includes(frontMatter.status)) {
209
+ errors.push({
210
+ field: "status",
211
+ message: `Invalid status: ${frontMatter.status}`,
212
+ suggestion: `Must be one of: ${DEBT_STATUSES.join(", ")}`
213
+ });
214
+ }
215
+ if (frontMatter.effort && !DEBT_EFFORTS.includes(frontMatter.effort)) {
216
+ errors.push({
217
+ field: "effort",
218
+ message: `Invalid effort: ${frontMatter.effort}`,
219
+ suggestion: `Must be one of: ${DEBT_EFFORTS.join(", ")}`
220
+ });
221
+ }
222
+ if (frontMatter.estimatedComplexity !== void 0) {
223
+ const complexity = Number(frontMatter.estimatedComplexity);
224
+ if (Number.isNaN(complexity) || complexity < 0 || complexity > 1) {
225
+ errors.push({
226
+ field: "estimatedComplexity",
227
+ message: `Invalid estimatedComplexity: ${frontMatter.estimatedComplexity}`,
228
+ suggestion: "Must be a number between 0.0 and 1.0"
229
+ });
230
+ }
231
+ }
232
+ validateExpectedRuntimeMinutes(frontMatter.expectedRuntimeMinutes, errors);
233
+ return {
234
+ valid: errors.length === 0,
235
+ errors
236
+ };
237
+ }
238
+ function validateParkingItem(frontMatter) {
239
+ const errors = [];
240
+ validateBaseFrontMatter(frontMatter, "parking-lot", errors);
241
+ if (!frontMatter.status) {
242
+ errors.push({
243
+ field: "status",
244
+ message: "Missing required field: status",
245
+ suggestion: `Must be one of: ${PARKING_STATUSES.join(", ")}`
246
+ });
247
+ } else if (!PARKING_STATUSES.includes(frontMatter.status)) {
248
+ errors.push({
249
+ field: "status",
250
+ message: `Invalid status: ${frontMatter.status}`,
251
+ suggestion: `Must be one of: ${PARKING_STATUSES.join(", ")}`
252
+ });
253
+ }
254
+ if (frontMatter.estimatedComplexity !== void 0) {
255
+ const complexity = Number(frontMatter.estimatedComplexity);
256
+ if (Number.isNaN(complexity) || complexity < 0 || complexity > 1) {
257
+ errors.push({
258
+ field: "estimatedComplexity",
259
+ message: `Invalid estimatedComplexity: ${frontMatter.estimatedComplexity}`,
260
+ suggestion: "Must be a number between 0.0 and 1.0"
261
+ });
262
+ }
263
+ }
264
+ return {
265
+ valid: errors.length === 0,
266
+ errors
267
+ };
268
+ }
269
+ function validateSprintItem(frontMatter) {
270
+ const errors = [];
271
+ validateBaseFrontMatter(frontMatter, "sprint", errors);
272
+ if (!frontMatter.status) {
273
+ errors.push({
274
+ field: "status",
275
+ message: "Missing required field: status",
276
+ suggestion: `Must be one of: ${SPRINT_STATUSES.join(", ")}`
277
+ });
278
+ } else if (!SPRINT_STATUSES.includes(frontMatter.status)) {
279
+ errors.push({
280
+ field: "status",
281
+ message: `Invalid status: ${frontMatter.status}`,
282
+ suggestion: `Must be one of: ${SPRINT_STATUSES.join(", ")}`
283
+ });
284
+ }
285
+ if (frontMatter.capacity) {
286
+ const cap = frontMatter.capacity;
287
+ if (typeof cap !== "object") {
288
+ errors.push({
289
+ field: "capacity",
290
+ message: "capacity must be an object",
291
+ suggestion: "Use format: { totalHours, allocatedHours, remainingHours, utilizationPercent }"
292
+ });
293
+ } else {
294
+ if (cap.totalHours !== void 0 && typeof cap.totalHours !== "number") {
295
+ errors.push({
296
+ field: "capacity.totalHours",
297
+ message: "capacity.totalHours must be a number"
298
+ });
299
+ }
300
+ if (cap.allocatedHours !== void 0 && typeof cap.allocatedHours !== "number") {
301
+ errors.push({
302
+ field: "capacity.allocatedHours",
303
+ message: "capacity.allocatedHours must be a number"
304
+ });
305
+ }
306
+ }
307
+ }
308
+ return {
309
+ valid: errors.length === 0,
310
+ errors
311
+ };
312
+ }
313
+ function validateTaskItem(frontMatter) {
314
+ const errors = [];
315
+ validateBaseFrontMatter(frontMatter, "task", errors);
316
+ if (!frontMatter.status) {
317
+ errors.push({
318
+ field: "status",
319
+ message: "Missing required field: status",
320
+ suggestion: `Must be one of: ${TASK_STATUSES.join(", ")}`
321
+ });
322
+ } else if (!TASK_STATUSES.includes(frontMatter.status)) {
323
+ errors.push({
324
+ field: "status",
325
+ message: `Invalid status: ${frontMatter.status}`,
326
+ suggestion: `Must be one of: ${TASK_STATUSES.join(", ")}`
327
+ });
328
+ }
329
+ if (frontMatter.priority && !PRIORITIES.includes(frontMatter.priority)) {
330
+ errors.push({
331
+ field: "priority",
332
+ message: `Invalid priority: ${frontMatter.priority}`,
333
+ suggestion: `Must be one of: ${PRIORITIES.join(", ")}`
334
+ });
335
+ }
336
+ if (frontMatter.complexity !== void 0) {
337
+ const complexity = Number(frontMatter.complexity);
338
+ if (Number.isNaN(complexity) || complexity < 0 || complexity > 1) {
339
+ errors.push({
340
+ field: "complexity",
341
+ message: `Invalid complexity: ${frontMatter.complexity}`,
342
+ suggestion: "Must be a number between 0.0 and 1.0"
343
+ });
344
+ }
345
+ }
346
+ if (frontMatter.estimatedHours !== void 0) {
347
+ const hours = Number(frontMatter.estimatedHours);
348
+ if (Number.isNaN(hours) || hours < 0) {
349
+ errors.push({
350
+ field: "estimatedHours",
351
+ message: `Invalid estimatedHours: ${frontMatter.estimatedHours}`,
352
+ suggestion: "Must be a positive number"
353
+ });
354
+ }
355
+ }
356
+ validateExpectedRuntimeMinutes(frontMatter.expectedRuntimeMinutes, errors);
357
+ if (frontMatter.dependencies !== void 0 && !Array.isArray(frontMatter.dependencies)) {
358
+ errors.push({
359
+ field: "dependencies",
360
+ message: "dependencies must be an array of task IDs",
361
+ suggestion: 'Use format: ["<id>", "<id>"]'
362
+ });
363
+ }
364
+ if (frontMatter.completionContract !== void 0) {
365
+ const contractValidation = validateCompletionContracts(frontMatter.completionContract);
366
+ for (const contractError of contractValidation.errors) {
367
+ errors.push({
368
+ field: contractError.field,
369
+ message: contractError.message,
370
+ suggestion: "Use typed completion contracts: path_exists, file_contains, glob_exists, command_passes, test_passes, llm_judge"
371
+ });
372
+ }
373
+ }
374
+ return {
375
+ valid: errors.length === 0,
376
+ errors
377
+ };
378
+ }
379
+
380
+ // src/planning/backlog-manager.ts
381
+ async function resolveDeclaredTypeAtCreation(rootDir, declaredType) {
382
+ if (typeof declaredType !== "string" || declaredType.length === 0) return void 0;
383
+ try {
384
+ const [registry, aliasMap] = await Promise.all([
385
+ TaskTypeRegistry.load({ cwd: rootDir }),
386
+ TaskTypeAliasMap.load({ cwd: rootDir })
387
+ ]);
388
+ if (aliasMap.isEmpty()) return void 0;
389
+ const mappedId = aliasMap.resolve(declaredType);
390
+ if (typeof mappedId === "string" && mappedId.length > 0 && registry.get(mappedId)) {
391
+ return mappedId;
392
+ }
393
+ } catch {
394
+ }
395
+ return void 0;
396
+ }
397
+ function emitBacklogManagerWarning(message, metadata) {
398
+ emitCustomWarning(
399
+ "WARN" /* WARN */,
400
+ "configuration" /* CONFIGURATION */,
401
+ message,
402
+ {
403
+ subsystem: "planning/backlog-manager",
404
+ executionPhase: "execution"
405
+ },
406
+ { metadata, skipConsole: true }
407
+ );
408
+ }
409
+ async function tryLoadPackageJsonScripts(repoRoot) {
410
+ try {
411
+ const raw = await fs.readFile(path.join(repoRoot, "package.json"), "utf-8");
412
+ const parsed = JSON.parse(raw);
413
+ const scripts = parsed.scripts && typeof parsed.scripts === "object" ? parsed.scripts : {};
414
+ return new Set(Object.keys(scripts));
415
+ } catch {
416
+ return void 0;
417
+ }
418
+ }
419
+ function buildScaffoldingFromEnhancements(enhancements) {
420
+ if (enhancements.length === 0) return "";
421
+ const hasScope = enhancements.some((e) => e.kind === "scope");
422
+ const hasAcceptance = enhancements.some((e) => e.kind === "acceptance");
423
+ const hasTesting = enhancements.some((e) => e.kind === "testing");
424
+ const hasReproducibility = enhancements.some((e) => e.kind === "reproducibility");
425
+ const hasResearch = enhancements.some((e) => e.kind === "research");
426
+ const hasAdr = enhancements.some((e) => e.kind === "adr");
427
+ const sections = [];
428
+ if (hasAdr) {
429
+ sections.push(`## Context
430
+
431
+ <<<FILL: What is the background? What problem are we solving?>>>
432
+ Example: The current caching strategy causes stale data issues during deployments.
433
+
434
+ ## Decision
435
+
436
+ <<<FILL: What did we decide?>>>
437
+ Example: Use cache invalidation via Redis pub/sub on deploy events.
438
+
439
+ ## Alternatives Considered
440
+
441
+ <<<FILL: What other options were evaluated?>>>
442
+ Example:
443
+ - Time-based TTL (rejected: unpredictable staleness)
444
+ - Manual cache clear (rejected: error-prone)
445
+
446
+ ## Consequences
447
+
448
+ <<<FILL: What are the implications of this decision?>>>
449
+ Example:
450
+ - (+) Fresh data immediately after deploys
451
+ - (-) Added Redis dependency`);
452
+ return sections.join("\n\n");
453
+ }
454
+ if (hasResearch) {
455
+ sections.push(`## Research Questions
456
+
457
+ - <<<FILL: Primary question to answer>>>
458
+ - <<<FILL: Secondary question>>>
459
+ Example:
460
+ - Which caching libraries fit the project's language and runtime?
461
+ - What are the performance trade-offs?
462
+
463
+ ## Deliverable
464
+
465
+ <<<FILL: What must the result help its reader understand, compare, or decide? Name any required evidence or constraints; prescribe a format only when the format itself is required.>>>
466
+ Example: A document that answers the research questions, shows the evidence and the
467
+ remaining uncertainty, and states what it means for the intended use or decision.`);
468
+ return sections.join("\n\n");
469
+ }
470
+ if (hasReproducibility) {
471
+ sections.push(`## Reproduction Steps
472
+
473
+ 1. <<<FILL: First step>>>
474
+ 2. <<<FILL: Next step>>>
475
+ Example:
476
+ 1. Open the settings page and save the form
477
+ 2. Reload the page
478
+
479
+ **Expected:** <<<FILL: What should happen>>>
480
+ Example: The saved values are shown
481
+
482
+ **Actual:** <<<FILL: What actually happens>>>
483
+ Example: An error appears and the values are lost`);
484
+ }
485
+ if (hasScope) {
486
+ sections.push(`## Scope / Surfaces Affected
487
+
488
+ Describe what areas of the codebase are involved:
489
+ <<<FILL: e.g., "settings page", "export service", "storage layer" >>>`);
490
+ }
491
+ sections.push(`## Non-goals
492
+
493
+ - <<<FILL: What is explicitly out of scope?>>>
494
+ Example:
495
+ - Not changing the database schema
496
+ - Not adding new CLI flags`);
497
+ if (hasAcceptance) {
498
+ sections.push(`## Acceptance Criteria
499
+
500
+ - [ ] <<<FILL: Specific criterion 1>>>
501
+ - [ ] <<<FILL: Specific criterion 2>>>
502
+ - [ ] Tests pass
503
+ - [ ] No regressions
504
+ Example:
505
+ - [ ] Command outputs JSON when --json flag is passed
506
+ - [ ] Error message shown when item not found`);
507
+ }
508
+ if (hasTesting) {
509
+ sections.push(`## How to Verify
510
+
511
+ \`\`\`bash
512
+ <<<FILL: Exact command to verify this works>>>
513
+ \`\`\`
514
+ Replace the placeholder with the test or check command this project uses.`);
515
+ }
516
+ return sections.join("\n\n");
517
+ }
518
+ function buildSpawnedFollowupVerifySection(repoRoot) {
519
+ let testCommand;
520
+ try {
521
+ testCommand = detectProjectCapabilities(repoRoot).verification.test[0];
522
+ } catch {
523
+ testCommand = void 0;
524
+ }
525
+ if (testCommand) {
526
+ return `## How to Verify
527
+
528
+ \`\`\`bash
529
+ ${testCommand}
530
+ \`\`\``;
531
+ }
532
+ return "## How to Verify\n\nRun the project's test suite.";
533
+ }
534
+ function buildSpawnedFollowupBody(parentTitle, parentBody, repoRoot) {
535
+ const filePaths = extractFileHintPaths(parentBody, 3);
536
+ const sections = [];
537
+ sections.push(
538
+ `Spawned follow-up from: ${parentTitle}
539
+
540
+ > This spec needs refinement. Run \`build plan backlog refine <id>\` to add detail before executing.`
541
+ );
542
+ if (filePaths.length > 0) {
543
+ const fileLines = filePaths.map((f) => `- FILE: ${f}`).join("\n");
544
+ sections.push(`## Files to Modify
545
+
546
+ ${fileLines}`);
547
+ }
548
+ sections.push(
549
+ "## Acceptance Criteria\n\n- [ ] Implement changes as described in the title\n- [ ] Tests pass\n- [ ] No regressions"
550
+ );
551
+ sections.push(buildSpawnedFollowupVerifySection(repoRoot));
552
+ return sections.join("\n\n");
553
+ }
554
+ function mergeUniqueNumbers(values) {
555
+ const seen = /* @__PURE__ */ new Set();
556
+ const merged = [];
557
+ for (const value of values) {
558
+ if (typeof value !== "number" || Number.isNaN(value)) continue;
559
+ if (!seen.has(value)) {
560
+ seen.add(value);
561
+ merged.push(value);
562
+ }
563
+ }
564
+ return merged;
565
+ }
566
+ function mergeUniqueStrings(values) {
567
+ const seen = /* @__PURE__ */ new Set();
568
+ const merged = [];
569
+ for (const value of values) {
570
+ if (typeof value !== "string" || value.trim().length === 0) continue;
571
+ if (!seen.has(value)) {
572
+ seen.add(value);
573
+ merged.push(value);
574
+ }
575
+ }
576
+ return merged;
577
+ }
578
+ async function createBacklogItem(backlogDir, title, options = {}) {
579
+ const rootDir = resolvePlanningContext(backlogDir).projectRoot;
580
+ return withIndexRegeneration(rootDir, async () => {
581
+ const now = (/* @__PURE__ */ new Date()).toISOString();
582
+ const initialBody = options.body?.trim();
583
+ let effectiveDescription;
584
+ let effectiveEnhancements;
585
+ let effectiveEnhancementSet;
586
+ let effectiveHints;
587
+ let guidance;
588
+ if (initialBody) {
589
+ guidance = generateEnhancements({ title, description: initialBody, itemKind: "backlog" });
590
+ effectiveDescription = initialBody;
591
+ effectiveEnhancements = toPersistedFormat(guidance.enhancements);
592
+ effectiveEnhancementSet = toEnhancementSet(guidance);
593
+ effectiveHints = hintsFromEnhancements(guidance.enhancements);
594
+ } else {
595
+ const baseDescription = options.description?.trim() || "(Add description here)";
596
+ guidance = generateEnhancements({ title, description: baseDescription, itemKind: "backlog" });
597
+ const scaffolding = buildScaffoldingFromEnhancements(guidance.enhancements);
598
+ effectiveDescription = scaffolding ? `${baseDescription}
599
+
600
+ ${scaffolding}` : baseDescription;
601
+ effectiveEnhancements = toPersistedFormat(guidance.enhancements);
602
+ effectiveEnhancementSet = toEnhancementSet(guidance);
603
+ effectiveHints = hintsFromEnhancements(guidance.enhancements);
604
+ }
605
+ const status = options.status || "inbox";
606
+ const priority = options.priority === void 0 ? null : options.priority;
607
+ const declaredTypeRaw = options.workType ?? options.type;
608
+ const declaredType = typeof declaredTypeRaw === "string" && declaredTypeRaw.trim().length > 0 ? declaredTypeRaw : void 0;
609
+ const declaredMethodology = typeof options.declaredMethodology === "string" && options.declaredMethodology.trim().length > 0 ? options.declaredMethodology : void 0;
610
+ const domain = declaredType ?? options.domain ?? "general";
611
+ const resolvedTaskTypeId = await resolveDeclaredTypeAtCreation(rootDir, declaredType);
612
+ const boundType = boundTypeFromIntent(guidance.intent);
613
+ const boundAt = now;
614
+ const result = await createWorkItemFile({
615
+ repoRoot: rootDir,
616
+ bucket: "backlog",
617
+ title,
618
+ description: effectiveDescription,
619
+ metadata: {
620
+ submittedDate: now,
621
+ submittedBy: options.submittedBy || "User",
622
+ status,
623
+ priority,
624
+ estimatedComplexity: options.complexity ?? 0.5,
625
+ // AI runtime estimate is optional and never defaulted (absence is honest).
626
+ ...typeof options.expectedRuntimeMinutes === "number" && options.expectedRuntimeMinutes > 0 ? { expectedRuntimeMinutes: options.expectedRuntimeMinutes } : {},
627
+ domain,
628
+ rationale: "",
629
+ relatedTasks: [],
630
+ createdHeadSha: options.createdHeadSha,
631
+ // Persist the enhancementSet (carrying intent) ALWAYS, even when zero
632
+ // enhancements were generated, so binding intent is never silently lost
633
+ // for very complete specs (fixes the prior omission).
634
+ enhancementSet: effectiveEnhancementSet,
635
+ ...effectiveEnhancements.length > 0 ? { enhancements: effectiveEnhancements } : {},
636
+ // Explicit top-level binding, set once at creation.
637
+ ...boundType ? { boundType, boundAt } : {},
638
+ // Declared terminology (verbatim, opaque) + its resolved canonical id.
639
+ ...declaredType ? { declaredType } : {},
640
+ ...declaredMethodology ? { declaredMethodology } : {},
641
+ ...resolvedTaskTypeId ? { resolvedTaskTypeId } : {},
642
+ ...effectiveHints.length > 0 ? { hints: effectiveHints } : {},
643
+ ...options.tags && options.tags.length > 0 ? { tags: options.tags } : {}
644
+ }
645
+ });
646
+ guidance.nextCommands = guidance.nextCommands.map((cmd) => cmd.replace("<item-id>", result.id));
647
+ const baseCompleteness = validateTaskSpec(effectiveDescription, guidance.enhancements);
648
+ const packageJsonScripts = await tryLoadPackageJsonScripts(rootDir);
649
+ const qualitySignals = generateSpecQualitySignals(
650
+ effectiveDescription,
651
+ rootDir,
652
+ packageJsonScripts
653
+ );
654
+ const completeness = qualitySignals.length > 0 ? { ...baseCompleteness, qualitySignals } : baseCompleteness;
655
+ const itemStatus = completeness.complete ? "created" : "draft";
656
+ const guidanceTier = calculateGuidanceTier(completeness);
657
+ const promptInjection = generatePromptInjection(completeness, guidanceTier);
658
+ return {
659
+ id: result.id,
660
+ filePath: result.path,
661
+ guidance,
662
+ completeness,
663
+ status: itemStatus,
664
+ guidanceTier,
665
+ encouragementLevel: guidanceTier,
666
+ // Backwards compat alias
667
+ promptInjection,
668
+ ...declaredType ? { declaredType } : {},
669
+ ...resolvedTaskTypeId ? { resolvedTaskTypeId } : {},
670
+ ...effectiveHints.length > 0 ? { hints: effectiveHints } : {}
671
+ };
672
+ });
673
+ }
674
+ async function moveToReviewed(backlogDir, itemId, options = {}) {
675
+ const rootDir = resolvePlanningContext(backlogDir).projectRoot;
676
+ return withIndexRegeneration(rootDir, async () => {
677
+ const item = await findBacklogItem(backlogDir, itemId);
678
+ if (!item) {
679
+ throw new Error(`Backlog item not found: ${itemId}`);
680
+ }
681
+ if (item.filePath !== path.join(backlogDir, `${itemId}.md`)) {
682
+ throw new Error(`Cannot review archived backlog item: ${itemId}`);
683
+ }
684
+ if (item.yaml.status && item.yaml.status !== "inbox" && item.yaml.status !== "reviewed") {
685
+ throw new Error(`Cannot review backlog item from status "${item.yaml.status}": ${itemId}`);
686
+ }
687
+ const { yaml: yamlData, body } = await parseMarkdownFile(item.filePath);
688
+ yamlData.status = "reviewed";
689
+ yamlData.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
690
+ if (options.reviewedAt) {
691
+ yamlData.reviewedAt = options.reviewedAt;
692
+ }
693
+ if (options.reviewedHeadSha) {
694
+ yamlData.reviewedHeadSha = options.reviewedHeadSha;
695
+ }
696
+ if (options.reviewedFiles && options.reviewedFiles.length > 0) {
697
+ yamlData.reviewedFiles = options.reviewedFiles;
698
+ }
699
+ await writeMarkdownFile(item.filePath, yamlData, body);
700
+ return { filePath: item.filePath, reviewedHeadSha: yamlData.reviewedHeadSha };
701
+ });
702
+ }
703
+ function hasExistingSpecMetadata(yamlData) {
704
+ return Array.isArray(yamlData.enhancements) || Boolean(yamlData.enhancementSet) || Array.isArray(yamlData.hints);
705
+ }
706
+ function existingBoundEnhancements(yamlData) {
707
+ const setEnhancements = yamlData.enhancementSet?.enhancements;
708
+ if (Array.isArray(setEnhancements) && setEnhancements.some(isBoundEnhancementKind)) {
709
+ return setEnhancements;
710
+ }
711
+ if (Array.isArray(yamlData.enhancements) && yamlData.enhancements.some(isBoundEnhancementKind)) {
712
+ return yamlData.enhancements;
713
+ }
714
+ return void 0;
715
+ }
716
+ function isBoundEnhancementKind(e) {
717
+ return e.kind === "adr" || e.kind === "research" || e.kind === "reproducibility";
718
+ }
719
+ function enhancementKindForBoundType(bound) {
720
+ return bound === "bug" ? "reproducibility" : bound;
721
+ }
722
+ function activityForBoundType(bound) {
723
+ switch (bound) {
724
+ case "bug":
725
+ return "debugging";
726
+ case "adr":
727
+ return "architecture";
728
+ case "research":
729
+ return "research";
730
+ default:
731
+ return "development";
732
+ }
733
+ }
734
+ function bindingAlignedGuidance(guidance, rebound) {
735
+ const targetKind = rebound === void 0 ? void 0 : enhancementKindForBoundType(rebound);
736
+ const enhancements = guidance.enhancements.filter(
737
+ (e) => !isBoundEnhancementKind(e) || e.kind === targetKind
738
+ );
739
+ return {
740
+ ...guidance,
741
+ enhancements,
742
+ intent: { ...guidance.intent, activity: activityForBoundType(rebound) }
743
+ };
744
+ }
745
+ function syncSpecMetadataFromBody(yamlData, body, options) {
746
+ if (options.explicitBoundType !== void 0) {
747
+ const rebound = options.explicitBoundType === "dev" ? void 0 : options.explicitBoundType;
748
+ const rawGuidance = generateEnhancements({
749
+ title: yamlData.title,
750
+ description: body,
751
+ itemKind: "backlog"
752
+ });
753
+ const rebindGuidance = bindingAlignedGuidance(rawGuidance, rebound);
754
+ const rebindSet = toEnhancementSet(rebindGuidance);
755
+ return {
756
+ enhancements: toPersistedFormat(rebindGuidance.enhancements),
757
+ enhancementSet: rebindSet,
758
+ hints: hintsFromEnhancements(rebindGuidance.enhancements),
759
+ boundType: rebound,
760
+ boundAt: rebound === void 0 ? void 0 : (/* @__PURE__ */ new Date()).toISOString()
761
+ };
762
+ }
763
+ if (options.mode === "preserve" && hasExistingSpecMetadata(yamlData)) {
764
+ return {
765
+ enhancements: yamlData.enhancements,
766
+ enhancementSet: yamlData.enhancementSet,
767
+ hints: yamlData.hints,
768
+ boundType: yamlData.boundType,
769
+ boundAt: yamlData.boundAt
770
+ };
771
+ }
772
+ const guidance = generateEnhancements({
773
+ title: yamlData.title,
774
+ description: body,
775
+ itemKind: "backlog"
776
+ });
777
+ const regeneratedEnhancements = toPersistedFormat(guidance.enhancements);
778
+ const regeneratedSet = toEnhancementSet(guidance);
779
+ const regeneratedHints = hintsFromEnhancements(guidance.enhancements);
780
+ const existingBoundType = getBoundType(yamlData);
781
+ if (options.mode === "regenerate" && existingBoundType !== void 0) {
782
+ const existingSet = yamlData.enhancementSet;
783
+ const boundEnhancements = existingBoundEnhancements(yamlData);
784
+ const enhancements = boundEnhancements ?? yamlData.enhancements;
785
+ const mergedSet = {
786
+ ...regeneratedSet,
787
+ // Bound intent is part of the bound type; the existing bound intent wins.
788
+ // Fall back to the regenerated intent only when no intent was stored.
789
+ intent: existingSet?.intent ?? regeneratedSet.intent,
790
+ // Pin the bound enhancement kinds to the existing (authoritative) set when present.
791
+ ...boundEnhancements ? { enhancements: boundEnhancements } : {}
792
+ };
793
+ if (existingSet?.acceptanceCriteria !== void 0) {
794
+ mergedSet.acceptanceCriteria = existingSet.acceptanceCriteria;
795
+ }
796
+ if (existingSet?.constraints !== void 0) {
797
+ mergedSet.constraints = existingSet.constraints;
798
+ }
799
+ if (existingSet?.artifactSources !== void 0) {
800
+ mergedSet.artifactSources = existingSet.artifactSources;
801
+ }
802
+ return {
803
+ enhancements,
804
+ // Hints describe the bound enhancement kinds; keep stored hints when present
805
+ // (they match the preserved bound type), else derive from the bound kinds.
806
+ enhancementSet: mergedSet,
807
+ hints: yamlData.hints ?? (enhancements ? hintsFromEnhancements(fromPersistedFormat(enhancements)) : regeneratedHints),
808
+ // Bound binding survives verbatim. Backfill boundType/boundAt for legacy
809
+ // bound items that predate the explicit fields, so the persisted authority
810
+ // becomes self-describing after this mutation (mutating path, not read).
811
+ boundType: yamlData.boundType ?? existingBoundType,
812
+ boundAt: yamlData.boundAt ?? (/* @__PURE__ */ new Date()).toISOString()
813
+ };
814
+ }
815
+ const regeneratedBoundType = boundTypeFromIntent(regeneratedSet.intent);
816
+ return {
817
+ enhancements: regeneratedEnhancements,
818
+ enhancementSet: regeneratedSet,
819
+ hints: regeneratedHints,
820
+ ...regeneratedBoundType ? { boundType: regeneratedBoundType, boundAt: yamlData.boundAt ?? (/* @__PURE__ */ new Date()).toISOString() } : { boundType: void 0, boundAt: yamlData.boundAt }
821
+ };
822
+ }
823
+ function resolvePlanningRootFromBacklogFile(filePath) {
824
+ return resolvePlanningContext(path.dirname(filePath)).projectRoot;
825
+ }
826
+ async function updateBacklogItem(filePath, updates, bodyOverride, options = {}) {
827
+ const rootDir = resolvePlanningRootFromBacklogFile(filePath);
828
+ await withIndexRegeneration(rootDir, async () => {
829
+ const { yaml: yamlData, body } = await parseMarkdownFile(filePath);
830
+ if (options.expectedBody !== void 0 && body !== options.expectedBody) {
831
+ throw new Error(`Backlog item ${yamlData.id} changed since it was read; nothing saved.`);
832
+ }
833
+ const effectiveUpdates = options.resolveUpdatesFromLockedItem ? { ...updates, ...await options.resolveUpdatesFromLockedItem(yamlData) } : updates;
834
+ const mergeArrayField = (key, target) => {
835
+ const next = effectiveUpdates[key];
836
+ const current = yamlData[key];
837
+ if (!Array.isArray(next) || !Array.isArray(current)) return;
838
+ if (next.length === 0) {
839
+ target[key] = current;
840
+ return;
841
+ }
842
+ target[key] = Array.from(/* @__PURE__ */ new Set([...current, ...next]));
843
+ };
844
+ const updated = {
845
+ ...yamlData,
846
+ ...effectiveUpdates,
847
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
848
+ };
849
+ mergeArrayField("linkedPrs", updated);
850
+ if (!options.replaceTags) {
851
+ mergeArrayField("tags", updated);
852
+ }
853
+ mergeArrayField("linkedCommits", updated);
854
+ mergeArrayField("followups", updated);
855
+ const explicitBoundType = "boundType" in effectiveUpdates ? effectiveUpdates.boundType === void 0 ? "dev" : effectiveUpdates.boundType : void 0;
856
+ const hasBodyOverride = typeof bodyOverride === "string";
857
+ const nextBody = keepActivity(`Backlog item ${yamlData.id}`, body, bodyOverride ?? body);
858
+ const needsMetadataSync = hasBodyOverride || "title" in effectiveUpdates || "domain" in effectiveUpdates || explicitBoundType !== void 0;
859
+ if (needsMetadataSync) {
860
+ Object.assign(
861
+ updated,
862
+ syncSpecMetadataFromBody(updated, nextBody, {
863
+ mode: hasBodyOverride ? "regenerate" : "preserve",
864
+ explicitBoundType
865
+ })
866
+ );
867
+ }
868
+ const validation = validateBacklogItem(updated);
869
+ if (!validation.valid) {
870
+ throw new Error(
871
+ `Backlog validation failed: ${validation.errors.map((error) => `${error.field}: ${error.message}`).join(", ")}`
872
+ );
873
+ }
874
+ await writeMarkdownFile(filePath, updated, nextBody);
875
+ });
876
+ }
877
+ async function listBacklogItems(dir, status, filters, options) {
878
+ try {
879
+ const isArchiveDir = options?.archiveRoot === true || dir.replace(/\\/g, "/").endsWith("/archive");
880
+ const items = [];
881
+ const files = isArchiveDir ? await listMarkdownFilesRecursive(dir) : await listMarkdownFiles(dir);
882
+ for (const filePath of files) {
883
+ let yamlData;
884
+ let body;
885
+ try {
886
+ ({ yaml: yamlData, body } = await parseMarkdownFile(filePath));
887
+ } catch (parseError) {
888
+ const reason = parseError instanceof Error ? parseError.message : String(parseError);
889
+ emitBacklogManagerWarning(
890
+ `Skipping unparseable backlog file ${path.basename(filePath)}: ${reason}`,
891
+ {
892
+ filePath,
893
+ fileName: path.basename(filePath),
894
+ reason
895
+ }
896
+ );
897
+ continue;
898
+ }
899
+ const id = typeof yamlData.id === "string" && yamlData.id.length > 0 ? yamlData.id : path.basename(filePath).replace(/\.md$/, "");
900
+ const title = typeof yamlData.title === "string" ? yamlData.title : "(Untitled)";
901
+ const rawStatus = typeof yamlData.status === "string" ? yamlData.status : "inbox";
902
+ const normalizedStatus = rawStatus === "done" ? "archived" : rawStatus === "inbox" || rawStatus === "reviewed" || rawStatus === "archived" ? rawStatus : "inbox";
903
+ if (status && normalizedStatus !== status) continue;
904
+ const priority = typeof yamlData.priority === "string" ? yamlData.priority : null;
905
+ const complexity = typeof yamlData.estimatedComplexity === "number" ? yamlData.estimatedComplexity : typeof yamlData.estimated_complexity === "number" ? yamlData.estimated_complexity : null;
906
+ const domain = typeof yamlData.domain === "string" ? yamlData.domain : typeof yamlData.activity === "string" ? yamlData.activity : null;
907
+ const createdAt = typeof yamlData.createdAt === "string" ? yamlData.createdAt : null;
908
+ const updatedAt = typeof yamlData.updatedAt === "string" ? yamlData.updatedAt : null;
909
+ const createdHeadSha = typeof yamlData.createdHeadSha === "string" ? yamlData.createdHeadSha : null;
910
+ const reviewedAt = typeof yamlData.reviewedAt === "string" ? yamlData.reviewedAt : null;
911
+ const reviewedHeadSha = typeof yamlData.reviewedHeadSha === "string" ? yamlData.reviewedHeadSha : null;
912
+ const reviewedFiles = Array.isArray(yamlData.reviewedFiles) && yamlData.reviewedFiles.every((f) => typeof f === "string") ? yamlData.reviewedFiles : null;
913
+ const archivedReason = typeof yamlData.archivedReason === "string" ? yamlData.archivedReason : null;
914
+ const rawLinkedPrs = Array.isArray(yamlData.linkedPrs) ? yamlData.linkedPrs : null;
915
+ const linkedPrs = rawLinkedPrs && rawLinkedPrs.length > 0 ? mergeUniqueNumbers(
916
+ rawLinkedPrs.map(
917
+ (value) => typeof value === "string" ? Number.parseInt(value, 10) : value
918
+ )
919
+ ) : null;
920
+ const rawLinkedCommits = Array.isArray(yamlData.linkedCommits) ? yamlData.linkedCommits : null;
921
+ const linkedCommits = rawLinkedCommits && rawLinkedCommits.length > 0 ? mergeUniqueStrings(rawLinkedCommits) : null;
922
+ const spawnedFrom = typeof yamlData.spawnedFrom === "string" ? yamlData.spawnedFrom : null;
923
+ const followups = Array.isArray(yamlData.followups) && yamlData.followups.every((f) => typeof f === "string") ? yamlData.followups : null;
924
+ const declaredType = typeof yamlData.declaredType === "string" ? yamlData.declaredType : null;
925
+ const resolvedTaskTypeId = typeof yamlData.resolvedTaskTypeId === "string" ? yamlData.resolvedTaskTypeId : null;
926
+ if (filters?.linkedPr !== void 0) {
927
+ if (!linkedPrs || !linkedPrs.includes(filters.linkedPr)) continue;
928
+ }
929
+ if (filters?.linkedCommit) {
930
+ if (!linkedCommits || !linkedCommits.includes(filters.linkedCommit)) continue;
931
+ }
932
+ if (filters?.spawnedFrom) {
933
+ if (spawnedFrom !== filters.spawnedFrom) continue;
934
+ }
935
+ if (filters?.hasFollowups) {
936
+ if (!followups || followups.length === 0) continue;
937
+ }
938
+ items.push({
939
+ id,
940
+ title,
941
+ complexity,
942
+ domain,
943
+ priority,
944
+ status: normalizedStatus,
945
+ createdAt,
946
+ updatedAt,
947
+ createdHeadSha,
948
+ reviewedAt,
949
+ reviewedHeadSha,
950
+ reviewedFiles,
951
+ archivedReason,
952
+ linkedPrs,
953
+ linkedCommits,
954
+ spawnedFrom,
955
+ followups,
956
+ needsRefinement: hasUnfilledMarkers(body),
957
+ declaredType,
958
+ resolvedTaskTypeId
959
+ });
960
+ }
961
+ return items;
962
+ } catch (error) {
963
+ if (error.code === "ENOENT") {
964
+ return [];
965
+ }
966
+ throw error;
967
+ }
968
+ }
969
+ function applyBacklogListFilters(items, filters) {
970
+ if (!filters) return items;
971
+ return items.filter((item) => {
972
+ if (filters.linkedPr !== void 0) {
973
+ if (!item.linkedPrs || !item.linkedPrs.includes(filters.linkedPr)) return false;
974
+ }
975
+ if (filters.linkedCommit) {
976
+ if (!item.linkedCommits || !item.linkedCommits.includes(filters.linkedCommit)) return false;
977
+ }
978
+ if (filters.spawnedFrom) {
979
+ if (item.spawnedFrom !== filters.spawnedFrom) return false;
980
+ }
981
+ if (filters.hasFollowups) {
982
+ if (!item.followups || item.followups.length === 0) return false;
983
+ }
984
+ return true;
985
+ });
986
+ }
987
+ async function queryArchivedMerged(backlogDir, filters) {
988
+ const archiveDir = resolveBucketArchiveRoot("backlog", backlogDir);
989
+ const [liveItems, archivedItems] = await Promise.all([
990
+ listBacklogItems(backlogDir, "archived"),
991
+ listBacklogItems(archiveDir, "archived", void 0, { archiveRoot: true }).catch(() => [])
992
+ ]);
993
+ const seen = new Set(archivedItems.map((i) => i.id));
994
+ const merged = [...archivedItems, ...liveItems.filter((i) => !seen.has(i.id))];
995
+ return applyBacklogListFilters(merged, filters);
996
+ }
997
+ async function queryBacklogList(backlogDir, status, filters) {
998
+ if (status !== "archived") {
999
+ return listBacklogItems(backlogDir, status, filters);
1000
+ }
1001
+ return queryArchivedMerged(backlogDir, filters);
1002
+ }
1003
+ async function queryBacklogListScoped(backlogDir, scope, filters) {
1004
+ const [inbox, reviewed, archived] = await Promise.all([
1005
+ listBacklogItems(backlogDir, "inbox", filters),
1006
+ listBacklogItems(backlogDir, "reviewed", filters),
1007
+ queryArchivedMerged(backlogDir, filters)
1008
+ ]);
1009
+ const active = [...inbox, ...reviewed];
1010
+ const items = scope === "with-archived" ? [...active, ...archived] : active;
1011
+ return { items, archivedCount: archived.length };
1012
+ }
1013
+ async function archiveBacklogItem(backlogBaseDir, itemId, options = {}) {
1014
+ const rootDir = resolvePlanningContext(backlogBaseDir).projectRoot;
1015
+ return withIndexRegeneration(rootDir, async () => {
1016
+ const item = await findBacklogItem(backlogBaseDir, itemId);
1017
+ if (!item) {
1018
+ throw new Error(`Backlog item not found: ${itemId}`);
1019
+ }
1020
+ if (isInArchive(resolveBucketArchiveRoot("backlog", backlogBaseDir), item.filePath)) {
1021
+ return { id: itemId, archivedPath: item.filePath };
1022
+ }
1023
+ const { yaml: yamlData, body } = await parseMarkdownFile(item.filePath);
1024
+ const now = (/* @__PURE__ */ new Date()).toISOString();
1025
+ const followupIds = [];
1026
+ const spawnTitles = options.spawnFollowups?.filter((title) => title.trim().length > 0) || [];
1027
+ if (spawnTitles.length > 0) {
1028
+ for (const followupTitle of spawnTitles) {
1029
+ const followupBody = buildSpawnedFollowupBody(yamlData.title, body, rootDir);
1030
+ const followup = await createBacklogItem(backlogBaseDir, followupTitle, {
1031
+ domain: yamlData.domain,
1032
+ complexity: yamlData.estimatedComplexity,
1033
+ submittedBy: yamlData.submittedBy,
1034
+ body: followupBody
1035
+ });
1036
+ followupIds.push(followup.id);
1037
+ await updateBacklogItem(followup.filePath, {
1038
+ spawnedFrom: itemId,
1039
+ ...yamlData.priority ? { priority: yamlData.priority } : {}
1040
+ });
1041
+ }
1042
+ }
1043
+ const updated = {
1044
+ ...yamlData,
1045
+ status: "archived",
1046
+ updatedAt: now,
1047
+ archivedAt: now,
1048
+ restoredStatus: yamlData.status === "inbox" || yamlData.status === "reviewed" ? yamlData.status : void 0,
1049
+ ...options.reason ? { archivedReason: options.reason } : {},
1050
+ ...followupIds.length > 0 ? {
1051
+ followups: mergeUniqueStrings([
1052
+ ...Array.isArray(yamlData.followups) ? yamlData.followups : [],
1053
+ ...followupIds
1054
+ ])
1055
+ } : {}
1056
+ };
1057
+ const bucketConfig = getBucketByName("backlog", rootDir);
1058
+ if (!bucketConfig) {
1059
+ throw new Error("Bucket not configured: backlog");
1060
+ }
1061
+ const archivedPath = getArchivedFilePath(bucketConfig, itemId, now, rootDir);
1062
+ await fs.mkdir(path.dirname(archivedPath), { recursive: true });
1063
+ await writeMarkdownFile(archivedPath, updated, body);
1064
+ await fs.unlink(item.filePath);
1065
+ await appendActivity(archivedPath, {
1066
+ timestamp: now,
1067
+ type: "completed",
1068
+ description: `Archived (reason: ${options.reason ?? "Not specified"}, by: ${options.actor ?? "unknown"})`
1069
+ });
1070
+ return followupIds.length > 0 ? { id: itemId, archivedPath, followupIds } : { id: itemId, archivedPath };
1071
+ });
1072
+ }
1073
+ async function findBacklogItem(backlogBaseDir, itemId) {
1074
+ const currentPath = path.join(backlogBaseDir, `${itemId}.md`);
1075
+ try {
1076
+ const { yaml: yamlData2, body: body2 } = await parseMarkdownFile(currentPath);
1077
+ if (yamlData2.id === itemId) return { filePath: currentPath, yaml: yamlData2, body: body2 };
1078
+ } catch {
1079
+ }
1080
+ const archiveRoot = resolveBucketArchiveRoot("backlog", backlogBaseDir);
1081
+ const archivedFiles = await listMarkdownFilesRecursive(archiveRoot);
1082
+ const match = archivedFiles.find((f) => path.basename(f) === `${itemId}.md`);
1083
+ if (!match) return null;
1084
+ const { yaml: yamlData, body } = await parseMarkdownFile(match);
1085
+ if (yamlData.id === itemId) return { filePath: match, yaml: yamlData, body };
1086
+ return null;
1087
+ }
1088
+ async function linkBacklogItem(backlogBaseDir, itemId, options) {
1089
+ const rootDir = resolvePlanningContext(backlogBaseDir).projectRoot;
1090
+ if (!options.pr && !options.commit) {
1091
+ throw new Error("At least one link (--pr or --commit) is required");
1092
+ }
1093
+ return withIndexRegeneration(rootDir, async () => {
1094
+ const item = await findBacklogItem(backlogBaseDir, itemId);
1095
+ if (!item) {
1096
+ throw new Error(`Backlog item not found: ${itemId}`);
1097
+ }
1098
+ const existingLinkedPrs = Array.isArray(item.yaml.linkedPrs) ? mergeUniqueNumbers(
1099
+ item.yaml.linkedPrs.map(
1100
+ (value) => typeof value === "string" ? Number.parseInt(value, 10) : value
1101
+ )
1102
+ ) : [];
1103
+ const existingLinkedCommits = Array.isArray(item.yaml.linkedCommits) && item.yaml.linkedCommits.every((value) => typeof value === "string") ? item.yaml.linkedCommits : [];
1104
+ const now = (/* @__PURE__ */ new Date()).toISOString();
1105
+ const updated = {
1106
+ ...item.yaml,
1107
+ updatedAt: now
1108
+ };
1109
+ if (options.pr !== void 0) {
1110
+ updated.linkedPrs = mergeUniqueNumbers([...existingLinkedPrs, options.pr]);
1111
+ }
1112
+ if (options.commit) {
1113
+ updated.linkedCommits = mergeUniqueStrings([...existingLinkedCommits, options.commit]);
1114
+ }
1115
+ await writeMarkdownFile(item.filePath, updated, item.body);
1116
+ const linkParts = [];
1117
+ if (options.pr !== void 0) {
1118
+ linkParts.push(`PR #${options.pr}`);
1119
+ }
1120
+ if (options.commit) {
1121
+ linkParts.push(`commit ${options.commit}`);
1122
+ }
1123
+ const description = `Linked to ${linkParts.join(" and ")} (by: ${options.actor ?? "unknown"})`;
1124
+ await appendActivity(item.filePath, {
1125
+ timestamp: now,
1126
+ type: "progress",
1127
+ description,
1128
+ metadata: options.pr !== void 0 ? { prNumber: options.pr } : void 0
1129
+ });
1130
+ return {
1131
+ filePath: item.filePath,
1132
+ linkedPrs: updated.linkedPrs ?? [],
1133
+ linkedCommits: updated.linkedCommits ?? []
1134
+ };
1135
+ });
1136
+ }
1137
+
1138
+ export {
1139
+ validateBacklogItem,
1140
+ validateDebtItem,
1141
+ validateParkingItem,
1142
+ validateSprintItem,
1143
+ validateTaskItem,
1144
+ createBacklogItem,
1145
+ moveToReviewed,
1146
+ updateBacklogItem,
1147
+ listBacklogItems,
1148
+ queryBacklogList,
1149
+ queryBacklogListScoped,
1150
+ archiveBacklogItem,
1151
+ findBacklogItem,
1152
+ linkBacklogItem
1153
+ };
1154
+ //# sourceMappingURL=chunk-NKLPMBNV.js.map