bigpowers 2.82.4 → 2.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/.agents/skills/align-grid/SKILL.md +110 -0
  2. package/.agents/skills/assess-impact/SKILL.md +91 -0
  3. package/.agents/skills/audit-code/SKILL.md +187 -0
  4. package/.agents/skills/audit-plan/SKILL.md +89 -0
  5. package/.agents/skills/build-epic/SKILL.md +105 -0
  6. package/.agents/skills/change-request/SKILL.md +121 -0
  7. package/.agents/skills/commit-message/SKILL.md +140 -0
  8. package/.agents/skills/compose-workflow/SKILL.md +82 -0
  9. package/.agents/skills/context7-mcp/SKILL.md +55 -0
  10. package/.agents/skills/craft-skill/SKILL.md +179 -0
  11. package/.agents/skills/deepen-architecture/SKILL.md +260 -0
  12. package/.agents/skills/define-language/SKILL.md +80 -0
  13. package/.agents/skills/define-success/SKILL.md +65 -0
  14. package/.agents/skills/delegate-task/SKILL.md +91 -0
  15. package/.agents/skills/deploy/SKILL.md +198 -0
  16. package/.agents/skills/design-interface/SKILL.md +97 -0
  17. package/.agents/skills/develop-tdd/SKILL.md +406 -0
  18. package/.agents/skills/diagnose-root/SKILL.md +24 -0
  19. package/.agents/skills/diagnose-stall/SKILL.md +54 -0
  20. package/.agents/skills/dispatch-agents/SKILL.md +118 -0
  21. package/.agents/skills/edit-document/SKILL.md +23 -0
  22. package/.agents/skills/elaborate-spec/SKILL.md +101 -0
  23. package/.agents/skills/enforce-first/SKILL.md +32 -0
  24. package/.agents/skills/evolve-skill/SKILL.md +55 -0
  25. package/.agents/skills/execute-plan/SKILL.md +61 -0
  26. package/.agents/skills/extract-design/SKILL.md +132 -0
  27. package/.agents/skills/find-way/SKILL.md +191 -0
  28. package/.agents/skills/fix-bug/SKILL.md +67 -0
  29. package/.agents/skills/gate-trace/SKILL.md +88 -0
  30. package/.agents/skills/generate-allure-report/SKILL.md +285 -0
  31. package/.agents/skills/grill-me/SKILL.md +96 -0
  32. package/.agents/skills/grill-with-docs/SKILL.md +41 -0
  33. package/.agents/skills/guard-git/SKILL.md +231 -0
  34. package/.agents/skills/harden-vps/SKILL.md +288 -0
  35. package/.agents/skills/hook-commits/SKILL.md +94 -0
  36. package/.agents/skills/inspect-quality/SKILL.md +106 -0
  37. package/.agents/skills/investigate-bug/SKILL.md +127 -0
  38. package/.agents/skills/kickoff-branch/SKILL.md +143 -0
  39. package/.agents/skills/maintain-wiki/SKILL.md +64 -0
  40. package/.agents/skills/map-codebase/SKILL.md +71 -0
  41. package/.agents/skills/migrate-spec/SKILL.md +862 -0
  42. package/.agents/skills/model-domain/SKILL.md +232 -0
  43. package/.agents/skills/orchestrate-project/SKILL.md +174 -0
  44. package/.agents/skills/organize-workspace/SKILL.md +164 -0
  45. package/.agents/skills/plan-refactor/SKILL.md +87 -0
  46. package/.agents/skills/plan-release/SKILL.md +145 -0
  47. package/.agents/skills/plan-tests/SKILL.md +75 -0
  48. package/.agents/skills/plan-work/SKILL.md +260 -0
  49. package/.agents/skills/publish-package/SKILL.md +328 -0
  50. package/.agents/skills/quick-fix/SKILL.md +114 -0
  51. package/.agents/skills/release-branch/SKILL.md +298 -0
  52. package/.agents/skills/request-review/SKILL.md +112 -0
  53. package/.agents/skills/research-first/SKILL.md +87 -0
  54. package/.agents/skills/reset-baseline/SKILL.md +21 -0
  55. package/.agents/skills/respond-review/SKILL.md +71 -0
  56. package/.agents/skills/run-benchmark/SKILL.md +85 -0
  57. package/.agents/skills/run-evals/SKILL.md +80 -0
  58. package/.agents/skills/run-planning/SKILL.md +101 -0
  59. package/.agents/skills/scope-work/SKILL.md +63 -0
  60. package/.agents/skills/search-skills/SKILL.md +73 -0
  61. package/.agents/skills/security-review/SKILL.md +384 -0
  62. package/.agents/skills/seed-conventions/SKILL.md +285 -0
  63. package/.agents/skills/session-state/SKILL.md +146 -0
  64. package/.agents/skills/setup-environment/SKILL.md +39 -0
  65. package/.agents/skills/simulate-agents/SKILL.md +26 -0
  66. package/.agents/skills/slice-tasks/SKILL.md +68 -0
  67. package/.agents/skills/smoke-test/SKILL.md +242 -0
  68. package/.agents/skills/spike-prototype/SKILL.md +95 -0
  69. package/.agents/skills/stocktake-skills/SKILL.md +72 -0
  70. package/.agents/skills/survey-context/SKILL.md +135 -0
  71. package/.agents/skills/terse-mode/SKILL.md +42 -0
  72. package/.agents/skills/trace-requirement/SKILL.md +69 -0
  73. package/.agents/skills/using-bigpowers/SKILL.md +111 -0
  74. package/.agents/skills/validate-contracts/SKILL.md +309 -0
  75. package/.agents/skills/validate-fix/SKILL.md +106 -0
  76. package/.agents/skills/verify-work/SKILL.md +191 -0
  77. package/.agents/skills/visual-dashboard/SKILL.md +50 -0
  78. package/.agents/skills/wire-ci/SKILL.md +375 -0
  79. package/.agents/skills/wire-observability/SKILL.md +97 -0
  80. package/.agents/skills/write-document/SKILL.md +255 -0
  81. package/.hermes/skills/align-grid/SKILL.md +110 -0
  82. package/.hermes/skills/assess-impact/SKILL.md +91 -0
  83. package/.hermes/skills/audit-code/SKILL.md +187 -0
  84. package/.hermes/skills/audit-plan/SKILL.md +89 -0
  85. package/.hermes/skills/build-epic/SKILL.md +105 -0
  86. package/.hermes/skills/change-request/SKILL.md +121 -0
  87. package/.hermes/skills/commit-message/SKILL.md +140 -0
  88. package/.hermes/skills/compose-workflow/SKILL.md +82 -0
  89. package/.hermes/skills/context7-mcp/SKILL.md +55 -0
  90. package/.hermes/skills/craft-skill/SKILL.md +179 -0
  91. package/.hermes/skills/deepen-architecture/SKILL.md +260 -0
  92. package/.hermes/skills/define-language/SKILL.md +80 -0
  93. package/.hermes/skills/define-success/SKILL.md +65 -0
  94. package/.hermes/skills/delegate-task/SKILL.md +91 -0
  95. package/.hermes/skills/deploy/SKILL.md +198 -0
  96. package/.hermes/skills/design-interface/SKILL.md +97 -0
  97. package/.hermes/skills/develop-tdd/SKILL.md +406 -0
  98. package/.hermes/skills/diagnose-root/SKILL.md +24 -0
  99. package/.hermes/skills/diagnose-stall/SKILL.md +54 -0
  100. package/.hermes/skills/dispatch-agents/SKILL.md +118 -0
  101. package/.hermes/skills/edit-document/SKILL.md +23 -0
  102. package/.hermes/skills/elaborate-spec/SKILL.md +101 -0
  103. package/.hermes/skills/enforce-first/SKILL.md +32 -0
  104. package/.hermes/skills/evolve-skill/SKILL.md +55 -0
  105. package/.hermes/skills/execute-plan/SKILL.md +61 -0
  106. package/.hermes/skills/extract-design/SKILL.md +132 -0
  107. package/.hermes/skills/find-way/SKILL.md +191 -0
  108. package/.hermes/skills/fix-bug/SKILL.md +67 -0
  109. package/.hermes/skills/gate-trace/SKILL.md +88 -0
  110. package/.hermes/skills/generate-allure-report/SKILL.md +285 -0
  111. package/.hermes/skills/grill-me/SKILL.md +96 -0
  112. package/.hermes/skills/grill-with-docs/SKILL.md +41 -0
  113. package/.hermes/skills/guard-git/SKILL.md +231 -0
  114. package/.hermes/skills/harden-vps/SKILL.md +288 -0
  115. package/.hermes/skills/hook-commits/SKILL.md +94 -0
  116. package/.hermes/skills/inspect-quality/SKILL.md +106 -0
  117. package/.hermes/skills/investigate-bug/SKILL.md +127 -0
  118. package/.hermes/skills/kickoff-branch/SKILL.md +143 -0
  119. package/.hermes/skills/maintain-wiki/SKILL.md +64 -0
  120. package/.hermes/skills/map-codebase/SKILL.md +71 -0
  121. package/.hermes/skills/migrate-spec/SKILL.md +862 -0
  122. package/.hermes/skills/model-domain/SKILL.md +232 -0
  123. package/.hermes/skills/orchestrate-project/SKILL.md +174 -0
  124. package/.hermes/skills/organize-workspace/SKILL.md +164 -0
  125. package/.hermes/skills/plan-refactor/SKILL.md +87 -0
  126. package/.hermes/skills/plan-release/SKILL.md +145 -0
  127. package/.hermes/skills/plan-tests/SKILL.md +75 -0
  128. package/.hermes/skills/plan-work/SKILL.md +260 -0
  129. package/.hermes/skills/publish-package/SKILL.md +328 -0
  130. package/.hermes/skills/quick-fix/SKILL.md +114 -0
  131. package/.hermes/skills/release-branch/SKILL.md +298 -0
  132. package/.hermes/skills/request-review/SKILL.md +112 -0
  133. package/.hermes/skills/research-first/SKILL.md +87 -0
  134. package/.hermes/skills/reset-baseline/SKILL.md +21 -0
  135. package/.hermes/skills/respond-review/SKILL.md +71 -0
  136. package/.hermes/skills/run-benchmark/SKILL.md +85 -0
  137. package/.hermes/skills/run-evals/SKILL.md +80 -0
  138. package/.hermes/skills/run-planning/SKILL.md +101 -0
  139. package/.hermes/skills/scope-work/SKILL.md +63 -0
  140. package/.hermes/skills/search-skills/SKILL.md +73 -0
  141. package/.hermes/skills/security-review/SKILL.md +384 -0
  142. package/.hermes/skills/seed-conventions/SKILL.md +285 -0
  143. package/.hermes/skills/session-state/SKILL.md +146 -0
  144. package/.hermes/skills/setup-environment/SKILL.md +39 -0
  145. package/.hermes/skills/simulate-agents/SKILL.md +26 -0
  146. package/.hermes/skills/slice-tasks/SKILL.md +68 -0
  147. package/.hermes/skills/smoke-test/SKILL.md +242 -0
  148. package/.hermes/skills/spike-prototype/SKILL.md +95 -0
  149. package/.hermes/skills/stocktake-skills/SKILL.md +72 -0
  150. package/.hermes/skills/survey-context/SKILL.md +135 -0
  151. package/.hermes/skills/terse-mode/SKILL.md +42 -0
  152. package/.hermes/skills/trace-requirement/SKILL.md +69 -0
  153. package/.hermes/skills/using-bigpowers/SKILL.md +111 -0
  154. package/.hermes/skills/validate-contracts/SKILL.md +309 -0
  155. package/.hermes/skills/validate-fix/SKILL.md +106 -0
  156. package/.hermes/skills/verify-work/SKILL.md +191 -0
  157. package/.hermes/skills/visual-dashboard/SKILL.md +50 -0
  158. package/.hermes/skills/wire-ci/SKILL.md +375 -0
  159. package/.hermes/skills/wire-observability/SKILL.md +97 -0
  160. package/.hermes/skills/write-document/SKILL.md +255 -0
  161. package/.mimocode/skills/align-grid/SKILL.md +110 -0
  162. package/.mimocode/skills/assess-impact/SKILL.md +91 -0
  163. package/.mimocode/skills/audit-code/SKILL.md +187 -0
  164. package/.mimocode/skills/audit-plan/SKILL.md +89 -0
  165. package/.mimocode/skills/build-epic/SKILL.md +105 -0
  166. package/.mimocode/skills/change-request/SKILL.md +121 -0
  167. package/.mimocode/skills/commit-message/SKILL.md +140 -0
  168. package/.mimocode/skills/compose-workflow/SKILL.md +82 -0
  169. package/.mimocode/skills/context7-mcp/SKILL.md +55 -0
  170. package/.mimocode/skills/craft-skill/SKILL.md +179 -0
  171. package/.mimocode/skills/deepen-architecture/SKILL.md +260 -0
  172. package/.mimocode/skills/define-language/SKILL.md +80 -0
  173. package/.mimocode/skills/define-success/SKILL.md +65 -0
  174. package/.mimocode/skills/delegate-task/SKILL.md +91 -0
  175. package/.mimocode/skills/deploy/SKILL.md +198 -0
  176. package/.mimocode/skills/design-interface/SKILL.md +97 -0
  177. package/.mimocode/skills/develop-tdd/SKILL.md +406 -0
  178. package/.mimocode/skills/diagnose-root/SKILL.md +24 -0
  179. package/.mimocode/skills/diagnose-stall/SKILL.md +54 -0
  180. package/.mimocode/skills/dispatch-agents/SKILL.md +118 -0
  181. package/.mimocode/skills/edit-document/SKILL.md +23 -0
  182. package/.mimocode/skills/elaborate-spec/SKILL.md +101 -0
  183. package/.mimocode/skills/enforce-first/SKILL.md +32 -0
  184. package/.mimocode/skills/evolve-skill/SKILL.md +55 -0
  185. package/.mimocode/skills/execute-plan/SKILL.md +61 -0
  186. package/.mimocode/skills/extract-design/SKILL.md +132 -0
  187. package/.mimocode/skills/find-way/SKILL.md +191 -0
  188. package/.mimocode/skills/fix-bug/SKILL.md +67 -0
  189. package/.mimocode/skills/gate-trace/SKILL.md +88 -0
  190. package/.mimocode/skills/generate-allure-report/SKILL.md +285 -0
  191. package/.mimocode/skills/grill-me/SKILL.md +96 -0
  192. package/.mimocode/skills/grill-with-docs/SKILL.md +41 -0
  193. package/.mimocode/skills/guard-git/SKILL.md +231 -0
  194. package/.mimocode/skills/harden-vps/SKILL.md +288 -0
  195. package/.mimocode/skills/hook-commits/SKILL.md +94 -0
  196. package/.mimocode/skills/inspect-quality/SKILL.md +106 -0
  197. package/.mimocode/skills/investigate-bug/SKILL.md +127 -0
  198. package/.mimocode/skills/kickoff-branch/SKILL.md +143 -0
  199. package/.mimocode/skills/maintain-wiki/SKILL.md +64 -0
  200. package/.mimocode/skills/map-codebase/SKILL.md +71 -0
  201. package/.mimocode/skills/migrate-spec/SKILL.md +862 -0
  202. package/.mimocode/skills/model-domain/SKILL.md +232 -0
  203. package/.mimocode/skills/orchestrate-project/SKILL.md +174 -0
  204. package/.mimocode/skills/organize-workspace/SKILL.md +164 -0
  205. package/.mimocode/skills/plan-refactor/SKILL.md +87 -0
  206. package/.mimocode/skills/plan-release/SKILL.md +145 -0
  207. package/.mimocode/skills/plan-tests/SKILL.md +75 -0
  208. package/.mimocode/skills/plan-work/SKILL.md +260 -0
  209. package/.mimocode/skills/publish-package/SKILL.md +328 -0
  210. package/.mimocode/skills/quick-fix/SKILL.md +114 -0
  211. package/.mimocode/skills/release-branch/SKILL.md +298 -0
  212. package/.mimocode/skills/request-review/SKILL.md +112 -0
  213. package/.mimocode/skills/research-first/SKILL.md +87 -0
  214. package/.mimocode/skills/reset-baseline/SKILL.md +21 -0
  215. package/.mimocode/skills/respond-review/SKILL.md +71 -0
  216. package/.mimocode/skills/run-benchmark/SKILL.md +85 -0
  217. package/.mimocode/skills/run-evals/SKILL.md +80 -0
  218. package/.mimocode/skills/run-planning/SKILL.md +101 -0
  219. package/.mimocode/skills/scope-work/SKILL.md +63 -0
  220. package/.mimocode/skills/search-skills/SKILL.md +73 -0
  221. package/.mimocode/skills/security-review/SKILL.md +384 -0
  222. package/.mimocode/skills/seed-conventions/SKILL.md +285 -0
  223. package/.mimocode/skills/session-state/SKILL.md +146 -0
  224. package/.mimocode/skills/setup-environment/SKILL.md +39 -0
  225. package/.mimocode/skills/simulate-agents/SKILL.md +26 -0
  226. package/.mimocode/skills/slice-tasks/SKILL.md +68 -0
  227. package/.mimocode/skills/smoke-test/SKILL.md +242 -0
  228. package/.mimocode/skills/spike-prototype/SKILL.md +95 -0
  229. package/.mimocode/skills/stocktake-skills/SKILL.md +72 -0
  230. package/.mimocode/skills/survey-context/SKILL.md +135 -0
  231. package/.mimocode/skills/terse-mode/SKILL.md +42 -0
  232. package/.mimocode/skills/trace-requirement/SKILL.md +69 -0
  233. package/.mimocode/skills/using-bigpowers/SKILL.md +111 -0
  234. package/.mimocode/skills/validate-contracts/SKILL.md +309 -0
  235. package/.mimocode/skills/validate-fix/SKILL.md +106 -0
  236. package/.mimocode/skills/verify-work/SKILL.md +191 -0
  237. package/.mimocode/skills/visual-dashboard/SKILL.md +50 -0
  238. package/.mimocode/skills/wire-ci/SKILL.md +375 -0
  239. package/.mimocode/skills/wire-observability/SKILL.md +97 -0
  240. package/.mimocode/skills/write-document/SKILL.md +255 -0
  241. package/.pi/package.json +1 -1
  242. package/.zcode/skills/align-grid/SKILL.md +110 -0
  243. package/.zcode/skills/assess-impact/SKILL.md +91 -0
  244. package/.zcode/skills/audit-code/SKILL.md +187 -0
  245. package/.zcode/skills/audit-plan/SKILL.md +89 -0
  246. package/.zcode/skills/build-epic/SKILL.md +105 -0
  247. package/.zcode/skills/change-request/SKILL.md +121 -0
  248. package/.zcode/skills/commit-message/SKILL.md +140 -0
  249. package/.zcode/skills/compose-workflow/SKILL.md +82 -0
  250. package/.zcode/skills/context7-mcp/SKILL.md +55 -0
  251. package/.zcode/skills/craft-skill/SKILL.md +179 -0
  252. package/.zcode/skills/deepen-architecture/SKILL.md +260 -0
  253. package/.zcode/skills/define-language/SKILL.md +80 -0
  254. package/.zcode/skills/define-success/SKILL.md +65 -0
  255. package/.zcode/skills/delegate-task/SKILL.md +91 -0
  256. package/.zcode/skills/deploy/SKILL.md +198 -0
  257. package/.zcode/skills/design-interface/SKILL.md +97 -0
  258. package/.zcode/skills/develop-tdd/SKILL.md +406 -0
  259. package/.zcode/skills/diagnose-root/SKILL.md +24 -0
  260. package/.zcode/skills/diagnose-stall/SKILL.md +54 -0
  261. package/.zcode/skills/dispatch-agents/SKILL.md +118 -0
  262. package/.zcode/skills/edit-document/SKILL.md +23 -0
  263. package/.zcode/skills/elaborate-spec/SKILL.md +101 -0
  264. package/.zcode/skills/enforce-first/SKILL.md +32 -0
  265. package/.zcode/skills/evolve-skill/SKILL.md +55 -0
  266. package/.zcode/skills/execute-plan/SKILL.md +61 -0
  267. package/.zcode/skills/extract-design/SKILL.md +132 -0
  268. package/.zcode/skills/find-way/SKILL.md +191 -0
  269. package/.zcode/skills/fix-bug/SKILL.md +67 -0
  270. package/.zcode/skills/gate-trace/SKILL.md +88 -0
  271. package/.zcode/skills/generate-allure-report/SKILL.md +285 -0
  272. package/.zcode/skills/grill-me/SKILL.md +96 -0
  273. package/.zcode/skills/grill-with-docs/SKILL.md +41 -0
  274. package/.zcode/skills/guard-git/SKILL.md +231 -0
  275. package/.zcode/skills/harden-vps/SKILL.md +288 -0
  276. package/.zcode/skills/hook-commits/SKILL.md +94 -0
  277. package/.zcode/skills/inspect-quality/SKILL.md +106 -0
  278. package/.zcode/skills/investigate-bug/SKILL.md +127 -0
  279. package/.zcode/skills/kickoff-branch/SKILL.md +143 -0
  280. package/.zcode/skills/maintain-wiki/SKILL.md +64 -0
  281. package/.zcode/skills/map-codebase/SKILL.md +71 -0
  282. package/.zcode/skills/migrate-spec/SKILL.md +862 -0
  283. package/.zcode/skills/model-domain/SKILL.md +232 -0
  284. package/.zcode/skills/orchestrate-project/SKILL.md +174 -0
  285. package/.zcode/skills/organize-workspace/SKILL.md +164 -0
  286. package/.zcode/skills/plan-refactor/SKILL.md +87 -0
  287. package/.zcode/skills/plan-release/SKILL.md +145 -0
  288. package/.zcode/skills/plan-tests/SKILL.md +75 -0
  289. package/.zcode/skills/plan-work/SKILL.md +260 -0
  290. package/.zcode/skills/publish-package/SKILL.md +328 -0
  291. package/.zcode/skills/quick-fix/SKILL.md +114 -0
  292. package/.zcode/skills/release-branch/SKILL.md +298 -0
  293. package/.zcode/skills/request-review/SKILL.md +112 -0
  294. package/.zcode/skills/research-first/SKILL.md +87 -0
  295. package/.zcode/skills/reset-baseline/SKILL.md +21 -0
  296. package/.zcode/skills/respond-review/SKILL.md +71 -0
  297. package/.zcode/skills/run-benchmark/SKILL.md +85 -0
  298. package/.zcode/skills/run-evals/SKILL.md +80 -0
  299. package/.zcode/skills/run-planning/SKILL.md +101 -0
  300. package/.zcode/skills/scope-work/SKILL.md +63 -0
  301. package/.zcode/skills/search-skills/SKILL.md +73 -0
  302. package/.zcode/skills/security-review/SKILL.md +384 -0
  303. package/.zcode/skills/seed-conventions/SKILL.md +285 -0
  304. package/.zcode/skills/session-state/SKILL.md +146 -0
  305. package/.zcode/skills/setup-environment/SKILL.md +39 -0
  306. package/.zcode/skills/simulate-agents/SKILL.md +26 -0
  307. package/.zcode/skills/slice-tasks/SKILL.md +68 -0
  308. package/.zcode/skills/smoke-test/SKILL.md +242 -0
  309. package/.zcode/skills/spike-prototype/SKILL.md +95 -0
  310. package/.zcode/skills/stocktake-skills/SKILL.md +72 -0
  311. package/.zcode/skills/survey-context/SKILL.md +135 -0
  312. package/.zcode/skills/terse-mode/SKILL.md +42 -0
  313. package/.zcode/skills/trace-requirement/SKILL.md +69 -0
  314. package/.zcode/skills/using-bigpowers/SKILL.md +111 -0
  315. package/.zcode/skills/validate-contracts/SKILL.md +309 -0
  316. package/.zcode/skills/validate-fix/SKILL.md +106 -0
  317. package/.zcode/skills/verify-work/SKILL.md +191 -0
  318. package/.zcode/skills/visual-dashboard/SKILL.md +50 -0
  319. package/.zcode/skills/wire-ci/SKILL.md +375 -0
  320. package/.zcode/skills/wire-observability/SKILL.md +97 -0
  321. package/.zcode/skills/write-document/SKILL.md +255 -0
  322. package/CHANGELOG.md +20 -0
  323. package/bin/setup.js +13 -4
  324. package/package.json +1 -1
  325. package/scripts/adapters/agy.sh +44 -1
  326. package/scripts/adapters/gemini.sh +83 -0
  327. package/scripts/adapters/hermes.sh +53 -1
  328. package/scripts/adapters/mimo.sh +41 -0
  329. package/scripts/adapters/zcode.sh +37 -0
  330. package/scripts/hooks/hermes/gateway/session-log/HOOK.yaml +5 -0
  331. package/scripts/hooks/hermes/gateway/session-log/handler.py +7 -0
  332. package/scripts/hooks/hermes/plugin/guard-git-plugin.py +14 -0
  333. package/scripts/hooks/hermes/shell/block-dangerous-terminal.sh +23 -0
  334. package/scripts/hooks/hermes/shell/hooks-config.example.yaml +7 -0
  335. package/scripts/install-cursor-skills-local.sh +8 -6
  336. package/scripts/install-cursor-skills.sh +15 -25
  337. package/scripts/install.sh +211 -13
  338. package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
  339. package/scripts/lib/golden-suite-gates.sh +2 -1
  340. package/scripts/lib/install-helpers.js +199 -4
  341. package/scripts/lib/sync-render.sh +43 -0
  342. package/scripts/lib/target-contracts.sh +22 -0
  343. package/scripts/targets.yaml +31 -1
  344. package/scripts/test-agy-hub.sh +59 -0
  345. package/scripts/test-gemini-adapter.sh +70 -0
  346. package/scripts/test-gemini-hub.sh +55 -0
  347. package/scripts/test-hermes-adapter.sh +85 -0
  348. package/scripts/test-hermes-hub.sh +51 -0
  349. package/scripts/test-install-helpers.js +103 -0
  350. package/scripts/test-install-helpers.sh +7 -0
  351. package/scripts/test-mimo-hub.sh +51 -0
  352. package/scripts/test-zcode-hub.sh +51 -0
  353. package/scripts/verify-install.sh +31 -0
@@ -0,0 +1,191 @@
1
+ ---
2
+ name: find-way
3
+ model: sonnet
4
+ description: "Plan a large effort as a shared map of decision tickets on an issue tracker, resolving them one at a time until the way is clear. Use when an idea is too big for one session, needs structured exploration before implementation, or requires mapping decisions before building."
5
+ ---
6
+
7
+ # Find Way
8
+
9
+ ## Concept
10
+
11
+ A large effort arrives — too big for one session, wrapped in fog. **Find-way** charts the way as a **shared map** on the repo's issue tracker, then works **decision tickets** — questions whose resolution is a decision, not build slices — one at a time until the route is clear.
12
+
13
+ **Plan, don't do.** Each ticket resolves a decision. The map is done when the way is clear — nothing left to decide before someone executes.
14
+
15
+ **Refer by name.** Every map and ticket is an issue with a title. Always use the name, never bare ids or numbers.
16
+
17
+ ## The Map
18
+
19
+ A single issue labelled `wayfinder:map` — the canonical artifact. Child issues are its tickets.
20
+
21
+ ```markdown
22
+ ## Destination
23
+ <what reaching the end looks like — one or two lines>
24
+
25
+ ## Notes
26
+ <domain, skills to consult, standing preferences>
27
+
28
+ ## Decisions so far
29
+ - [closed ticket title](link) — one-line gist
30
+
31
+ ## Not yet specified
32
+ <in-scope fog you can't ticket yet>
33
+
34
+ ## Out of scope
35
+ <work ruled beyond the destination>
36
+ ```
37
+
38
+ ## Ticket Types
39
+
40
+ | Type | Label | Mode | Purpose |
41
+ |------|-------|------|---------|
42
+ | Research | `wayfinder:research` | AFK | Surface facts from docs/APIs |
43
+ | Prototype | `wayfinder:prototype` | HITL | Cheap artifact to react to |
44
+ | Grilling | `wayfinder:grilling` | HITL | One-question-at-a-time dialogue |
45
+ | Task | `wayfinder:task` | Either | Manual work unblocking a decision |
46
+
47
+ **HITL** = human in the loop. **AFK** = agent alone.
48
+
49
+ ## Two Modes
50
+
51
+ ### Chart the Map
52
+
53
+ User invokes with a loose idea.
54
+
55
+ 1. **Name the destination** — grill to pin down what this map finds its way to
56
+ 2. **Map the frontier** — breadth-first: surface open decisions and first steps. If no fog emerges, the effort fits one session — skip the map
57
+ 3. **Create the map** issue (label `wayfinder:map`)
58
+ 4. **Create tickets** as child issues, then wire blocking edges in a second pass
59
+ 5. **Fire research subagents** for each `research` ticket in parallel
60
+ 6. Stop — charting resolves nothing
61
+
62
+ ### Work Through the Map
63
+
64
+ User invokes with a map (URL/number). Ticket optional — without one, pick the next frontier ticket.
65
+
66
+ 1. Load the map (low-res view)
67
+ 2. **Choose & claim** — assign ticket before any work
68
+ 3. **Resolve** — zoom into related/closed tickets as needed
69
+ 4. **Record** — post resolution comment, close issue, append to Decisions-so-far
70
+ 5. **Graduate fog** — create new tickets from newly-specifiable fog, clear from Not-yet-specified
71
+ 6. **Rule out of scope** if resolution reveals something past the destination
72
+
73
+ **Never resolve more than one ticket per session** (except research).
74
+
75
+ ## Fog of War
76
+
77
+ Beyond live tickets lies the **fog** — decisions you can tell are coming but can't pin down yet. The **Not yet specified** section holds this dim view.
78
+
79
+ **Fog or ticket?** Test: can you state the question precisely now?
80
+
81
+ - **Ticket** when the question is sharp (even if blocked)
82
+ - **Not yet specified** when you can't phrase it sharply yet
83
+
84
+ ## Out of Scope
85
+
86
+ Work beyond the destination. Ruling something out is a scoping act, not a route step. Never graduates — returns only if destination is redrawn.
87
+
88
+ If an existing ticket sits past the destination, close it and note in Out of scope.
89
+
90
+ ## Blocking & Frontier
91
+
92
+ - **Blocking**: tracker's native dependency relationship
93
+ - **Unblocked**: every blocker is closed
94
+ - **Frontier**: open, unblocked, unclaimed children — the edge of the known
95
+
96
+ ## Detailed Reference
97
+
98
+ See [REFERENCE.md](REFERENCE.md) for ticket anatomy, resolution protocol, and examples.
99
+
100
+ ---
101
+
102
+ # Find-Way Reference
103
+
104
+ ## Ticket Anatomy
105
+
106
+ Each ticket holds one question, sized to one 100K token agent session:
107
+
108
+ ```markdown
109
+ ## Question
110
+
111
+ <the decision or investigation this ticket resolves>
112
+ ```
113
+
114
+ **Labels:** `wayfinder:research`, `wayfinder:prototype`, `wayfinder:grilling`, or `wayfinder:task`
115
+
116
+ **Claim:** Assign to yourself before any work — claim blocks concurrent sessions.
117
+
118
+ **Blocking:** Use tracker's native dependency relationship so the frontier renders visually.
119
+
120
+ **Resolution:** Post answer as a comment, close the issue, append to map's Decisions-so-far.
121
+
122
+ ## Resolution Protocol
123
+
124
+ 1. **Load the map** — read low-res view, not every ticket body
125
+ 2. **Choose & claim** — assign ticket to yourself (or take first frontier ticket if not named)
126
+ 3. **Resolve** — zoom into related/closed tickets as needed; invoke skills the Notes block names
127
+ 4. **Record** — post resolution comment with the answer, close the issue
128
+ 5. **Update map** — append to Decisions-so-far with one-line gist + link
129
+ 6. **Graduate fog** — create new tickets from newly-specifiable fog; clear from Not-yet-specified
130
+ 7. **Rule out of scope** if resolution reveals something past the destination
131
+
132
+ ## Ticket Types in Detail
133
+
134
+ ### Research (AFK)
135
+ Surfacing facts from docs, APIs, or knowledge bases that a decision waits on.
136
+ - Resolved by a `/research` subagent
137
+ - Use when knowledge outside the working directory is required
138
+ - **Label:** `wayfinder:research`
139
+
140
+ ### Prototype (HITL)
141
+ Raise fidelity by building cheap, rough, concrete artifact to react to — outline, stub, UI/logic code.
142
+ - Use the `/prototype` skill
143
+ - Links the prototype as an asset
144
+ - Use when "how should it look" or "how should it behave" is key
145
+ - **Label:** `wayfinder:prototype`
146
+
147
+ ### Grilling (HITL)
148
+ Conversation via `/grilling` and `/domain-modeling` skills, one question at a time.
149
+ - The default case for clarifying decisions
150
+ - **Label:** `wayfinder:grilling`
151
+
152
+ ### Task (HITL or AFK)
153
+ Manual work unblocking a decision — signing up for service, provisioning access, moving data.
154
+ - This is the **only** type that does rather than decides
155
+ - Earns its place by unblocking a decision, not by delivering the destination
156
+ - Agent drives AFK tasks alone; HITL tasks get precise checklist
157
+ - **Label:** `wayfinder:task`
158
+
159
+ ## Fog-to-Ticket Graduation
160
+
161
+ When resolving a ticket clears fog, graduate the newly-specifiable bits into fresh tickets:
162
+
163
+ 1. **Identify the fog** in Not-yet-specified that the resolution illuminates
164
+ 2. **Create new tickets** with crisp question statements
165
+ 3. **Wire blocking edges** if the new tickets depend on each other or existing ones
166
+ 4. **Clear from fog** — remove the graduated patch from Not-yet-specified so it lives only as its ticket
167
+
168
+ ## Out-of-Scope Close Protocol
169
+
170
+ If a ticket turns out to sit past the destination:
171
+
172
+ 1. **Close the ticket** — mark it resolved or won't-fix
173
+ 2. **Add one line to Out of scope** — gist + why it's out of scope, linking the closed ticket
174
+ 3. **Never append to Decisions so far** — scope boundaries aren't steps on the route
175
+
176
+ ## Map State Transitions
177
+
178
+ | State | Meaning | Action |
179
+ |-------|---------|--------|
180
+ | **Open, unblocked, unclaimed** | Frontier — ready to take | Claim and resolve |
181
+ | **Open, blocked** | Waiting on something | Wait for blockers to close |
182
+ | **Open, claimed** | Concurrent session working | Skip for now |
183
+ | **Closed** | Decided — lives in Decisions so far | Reference, don't re-open |
184
+
185
+ ## Concurrency
186
+
187
+ Users may run unblocked tickets in parallel, so expect the tracker to be edited concurrently. Always:
188
+
189
+ - Refresh the map before picking a ticket
190
+ - Claim immediately before starting work
191
+ - Never assume state hasn't changed since last read
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: fix-bug
3
+ model: sonnet
4
+ description: "Bug fix orchestrator — active_flow fix_bug; reads specs/bugs/BUG-*.md; chains investigate-bug, develop-tdd, validate-fix. Use when user reports a defect."
5
+ ---
6
+
7
+ # Fix Bug
8
+
9
+ **Boundary**: Orchestrator flow — chains `investigate-bug` (entry point + RCA via `diagnose-root`) → `develop-tdd` → `validate-fix`. Does not implement RCA or write bug files directly.
10
+
11
+ Orchestrates **fix_bug** flow without mixing epic build state.
12
+
13
+ > **HARD GATE** — Set `specs/state.yaml` `active_flow: fix_bug` and `bug_cycle.current_step: 1` before starting.
14
+
15
+ ## Discovered gate failures (e51s04)
16
+
17
+ Valid entry **without a user-reported bug** when:
18
+
19
+ - **Preflight** or **CI** is red at kickoff or verify-work
20
+ - **Golden suite** or project baseline is red (`bash scripts/run-verification-gates.sh` or equivalent)
21
+ - A reproducible gate failure during unrelated epic work exceeds quick-fix guardrails
22
+
23
+ Create `specs/bugs/BUG-*.md` via `investigate-bug` (or inline in fix-bug step 1) describing the gate failure, then run the standard fix_bug chain.
24
+
25
+ ## Five steps (`bug_cycle` in state.yaml)
26
+
27
+ | Step | Skill / action |
28
+ |------|----------------|
29
+ | 1 | `investigate-bug` — create BUG-*.md with RCA |
30
+ | 2 | `diagnose-root` — 4-phase root cause analysis |
31
+ | 3 | `develop-tdd` — red-green against bug file verify steps |
32
+ | 4 | `validate-fix` — re-run failing test, full suite, lint |
33
+ | 5 | `release-branch` — PR or solo land the fix |
34
+
35
+ ### Checkpoint / resume
36
+
37
+ Track progress via `specs/state.yaml` `bug_cycle`:
38
+ - `bug_cycle.current_step`: current step (1–5)
39
+ - `bug_cycle.completed_steps`: completed step numbers
40
+ - `handoff.next_skill`: skill for the current step
41
+ - On resume, read `bug_cycle.current_step` and continue from there
42
+
43
+ ## Process
44
+
45
+ 1. **Step 1 — investigate-bug:** If no `specs/bugs/BUG-*.md`, run `investigate-bug` first — it handles history check, RCA (via `diagnose-root`), fix approach, and writes the bug file. Increment `bug_cycle.current_step` to 2 on completion.
46
+ 2. **Step 2 — diagnose-root:** Run 4-phase RCA (reproduce → isolate → hypothesize → verify). Record findings in the bug file. Increment to step 3.
47
+ 3. **Step 3 — develop-tdd:** `develop-tdd` against the bug file's verify steps. Increment to step 4 on all-green.
48
+ 4. **Step 4 — validate-fix:** `validate-fix` — re-run failing test, full suite, typecheck, lint. Increment to step 5.
49
+ 5. **Step 5 — release-branch:** Land the fix via `release-branch`. Clear `bug_cycle` and `active_flow` when done.
50
+
51
+ ## Bug file SoT
52
+
53
+ One markdown file per bug with frontmatter:
54
+
55
+ ```yaml
56
+ ---
57
+ bug_id: BUG-001
58
+ status: open
59
+ severity: high
60
+ scope: api
61
+ title: Short title
62
+ ---
63
+ ```
64
+
65
+ ## Verify
66
+
67
+ → verify: `test -d specs/bugs && test -f scripts/run-skill-verify.sh`
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: gate-trace
3
+ model: haiku
4
+ description: "Deterministic traceability quality gate — reads coverage matrix + blind-spot data, applies decision rules with oracle confidence downgrade, emits PASS/CONCERNS/FAIL/WAIVED verdict. Use before release-branch to gate merges on traceability."
5
+ ---
6
+
7
+ # Gate Trace
8
+
9
+ Deterministic quality gate that combines traceability coverage and blind-spot data into a single PASS/FAIL/CONCERNS/WAIVED decision before release.
10
+
11
+ ## Decision Rules
12
+
13
+ | Rule | Condition | Verdict |
14
+ |------|-----------|---------|
15
+ | R1 | Any undone story with 0 code tags | FAIL |
16
+ | R2 | Any story done but no verify evidence | CONCERNS |
17
+ | R3 | P0 story (top WSJF quartile) with 0% coverage | FAIL |
18
+ | R4 | Overall coverage < 60% | CONCERNS |
19
+ | R6 | P0 story + eNN-TEST_PLAN_LATEST.md exists + zero SC-eNNsYY-P0-* in test files | CONCERNS |
20
+ | R5 | Overall ≥ 80% + no critical gaps + all verify → PASS | PASS |
21
+
22
+ ## Oracle Confidence Downgrade
23
+
24
+ TEA-inspired: if trace links rely on heuristics rather than explicit tags, confidence drops.
25
+
26
+ | Heuristic Ratio | Downgrade |
27
+ |-----------------|-----------|
28
+ | > 50% links from heuristics (file-name or task-reference) | One level (PASS→CONCERNS, CONCERNS→FAIL) |
29
+ | > 80% links from heuristics | Two levels (PASS→FAIL, CONCERNS→FAIL) |
30
+
31
+ ## Process
32
+
33
+ 1. **Pre-flight:** Ensure `scripts/trace-stories.sh --json` has been run (produces `specs/traceability-matrix.json`). If not present, run it.
34
+ 2. Ensure `scripts/check-blind-spots.sh` has been run (produces `specs/blind-spots.json`). If not present, run it.
35
+ 3. Read `specs/traceability-matrix.json` and `specs/blind-spots.json`.
36
+ 4. Apply decision rules R1–R5 in order (first match wins).
37
+ 5. Apply oracle confidence downgrade based on the heuristic link ratio from the matrix's `oracle_stats`.
38
+ 6. **Drift check (e39s03):** If `specs/drift-report.json` exists and has suspect links, mark verdict as CONCERNS with note: "Drift detected — some implementing files are newer than their specs. Run scripts/check-spec-drift.sh for details."
39
+ 7. Output verdict + rationale to stdout.
40
+ 8. **Adversarial refute check (e45s32):** Before emitting PASS, attempt to **refute** the verdict — list at least one concrete traceability gap that would block merge if it were real. If the gap is real, downgrade the verdict. Rubber-stamping is prohibited; every PASS must survive one refutation attempt.
41
+ 9. **Completeness critic (e45s05)** — Run adversarial gap-finding:
42
+
43
+ ```bash
44
+ bash scripts/lib/completeness-critic.sh
45
+ ```
46
+
47
+ Classify output as **BLOCKER / WARNING / FILLED**. **BLOCKER overrides any PASS verdict → FAIL.** Append critic summary to rationale.
48
+ 10. Update `specs/execution-status.yaml` with gate-trace result.
49
+
50
+ ## Verdict Semantics
51
+
52
+ | Verdict | Meaning | Action |
53
+ |---------|---------|--------|
54
+ | PASS | All gates satisfied | Proceed with merge |
55
+ | CONCERNS | Non-critical issues found | Requires explicit human override in `state.yaml` |
56
+ | FAIL | Critical traceability gap | Block merge — fix gap first |
57
+ | WAIVED | Cannot evaluate (missing inputs) | Skip gate — data not available |
58
+
59
+ ## Output Format
60
+
61
+ ```yaml
62
+ gate_trace:
63
+ verdict: PASS|CONCERNS|FAIL|WAIVED
64
+ generated_at: "<ISO 8601>"
65
+ rationale: "<human-readable explanation>"
66
+ heuristic_ratio: <0.0–1.0>
67
+ downgrade_applied: <true|false>
68
+ ```
69
+
70
+ ## Integration Points
71
+
72
+ - **release-branch SKILL.md** — pre-PR gate (FAIL blocks merge).
73
+ - **sync-skills.yml** — runs `trace-stories.sh --strict` as its "Traceability gate" step (FAIL
74
+ blocks pipeline), which shares this skill's coverage data (`traceability-matrix.json`) but
75
+ does not invoke a gate-trace PASS/CONCERNS/FAIL/WAIVED verdict directly.
76
+ - **verify-work SKILL.md** — runs blind-spot checks; gate-trace consumes the result.
77
+
78
+ ## References
79
+
80
+ - BMAD TEA traceability approach (market survey 2026-07-02).
81
+ - scripts/trace-stories.sh (e38s01) — produces traceability-matrix.json.
82
+ - scripts/check-blind-spots.sh (e38s04) — produces blind-spots.json.
83
+ - specs/execution-status.yaml — output target for gate result.
84
+
85
+ ## Handoff
86
+
87
+ Gate: READY → next: release-branch (final step before merge)
88
+ Writes: state.yaml handoff.next_skill = release-branch
@@ -0,0 +1,285 @@
1
+ ---
2
+ name: generate-allure-report
3
+ model: sonnet
4
+ description: "Generate Allure-ready reports from bigpowers YAML metadata. Reads execution-status.yaml, release-plan.yaml, epic capsules, task YAMLs, cycle-times.yaml, and bug registry to produce allure-results/junit-results.xml, categories.json, and executor.json. Use when preparing progress dashboards, integrating with Allure TestOps, or generating CI reports."
5
+ ---
6
+
7
+ # Generate Allure Report
8
+
9
+ Generate Allure TestOps-compatible reports from bigpowers project metadata. Produces JUnit XML for story-level test results, custom categories for filtering, and executor metadata — all in the `allure-results/` directory.
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ bash scripts/generate-allure-report.sh
15
+ ```
16
+
17
+ ## What It Produces
18
+
19
+ Three files in `allure-results/`:
20
+
21
+ | File | Description |
22
+ |------|-------------|
23
+ | `junit-results.xml` | One `<testcase>` per story with `<properties>` for risk, security, WSJF, tier, wave, and status. Incomplete stories get a `<failure>` element. |
24
+ | `categories.json` | Custom Allure categories for filtering by epic, risk level (P0), and security reviews. |
25
+ | `executor.json` | Build metadata — name, type, version from release-plan.yaml, build order. |
26
+
27
+ ## Data Sources
28
+
29
+ See [REFERENCE.md](REFERENCE.md)
30
+
31
+ ## Verify
32
+
33
+ ```bash
34
+ test -f allure-results/junit-results.xml && test -f allure-results/categories.json && test -f allure-results/executor.json
35
+ ```
36
+
37
+ ## Handoff
38
+
39
+ - next_skill: null (terminal skill — no downstream workflow step)
40
+
41
+ ---
42
+
43
+ # generate-allure-report — Reference
44
+
45
+ ## Data Sources
46
+
47
+ The script reads five YAML sources from the project:
48
+
49
+ | Source | Path | Fields Used |
50
+ |--------|------|-------------|
51
+ | Execution status | `specs/execution-status.yaml` | `epics`, `stories`, `development_status` |
52
+ | Release plan | `specs/release-plan.yaml` | `release.version`, `release.status`, `bugs` summary |
53
+ | Epic capsules | `specs/epics/**/epic.yaml` + `-tasks.yaml` | Epic metadata, task pass/fail counts |
54
+ | Cycle times | `specs/metrics/cycle-times.yaml` | Story-level `cycle_minutes`, `bcp_per_hour`, `source` |
55
+ | Bug registry | `specs/bugs/registry.yaml` | Bug counts by status and severity |
56
+
57
+ ## Script Body
58
+
59
+ `scripts/generate-allure-report.sh`:
60
+
61
+ ```bash
62
+ #!/usr/bin/env bash
63
+ set -euo pipefail
64
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/python-env.sh"
65
+ ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || ROOT="$(dirname "${BASH_SOURCE[0]}")/.."
66
+
67
+ mkdir -p "$ROOT/allure-results"
68
+
69
+ $PYTHON - "$ROOT" <<'PY'
70
+ import json
71
+ import sys
72
+ import xml.etree.ElementTree as ET
73
+ from pathlib import Path
74
+
75
+ root = Path(sys.argv[1])
76
+ out = root / "allure-results"
77
+
78
+ # 1. Read execution-status.yaml
79
+ exec_status_file = root / "specs" / "execution-status.yaml"
80
+ release_plan_file = root / "specs" / "release-plan.yaml"
81
+ cycle_times_file = root / "specs" / "metrics" / "cycle-times.yaml"
82
+ bugs_registry_file = root / "specs" / "bugs" / "registry.yaml"
83
+
84
+ sys.path.insert(0, str(root / "scripts" / "lib"))
85
+ from simple_yaml import parse_simple_yaml
86
+
87
+ exec_status = parse_simple_yaml(exec_status_file.read_text()) if exec_status_file.exists() else {}
88
+ release_plan = parse_simple_yaml(release_plan_file.read_text()) if release_plan_file.exists() else {}
89
+ cycle_times = parse_simple_yaml(cycle_times_file.read_text()) if cycle_times_file.exists() else {"stories": []}
90
+ bugs_registry = parse_simple_yaml(bugs_registry_file.read_text()) if bugs_registry_file.exists() else {"bugs": []}
91
+
92
+ # Build cycle-times lookup
93
+ ct_lookup = {}
94
+ for ct in cycle_times.get("stories", []):
95
+ if isinstance(ct, dict):
96
+ ct_lookup[ct.get("id", "")] = ct
97
+
98
+ # 2. Build JUnit XML
99
+ stories = exec_status.get("stories", {})
100
+
101
+ # Counts for testsuite attributes
102
+ total_stories = len(stories)
103
+ incomplete = sum(1 for s in stories.values() if isinstance(s, dict) and s.get("status") != "done")
104
+
105
+ testsuite = ET.Element("testsuite", {
106
+ "name": "bigpowers-epic-progress",
107
+ "tests": str(total_stories),
108
+ "failures": str(incomplete),
109
+ "errors": "0",
110
+ "skipped": "0",
111
+ })
112
+
113
+ for story_id in sorted(stories.keys()):
114
+ story = stories[story_id]
115
+ if not isinstance(story, dict):
116
+ continue
117
+
118
+ epic_id = story.get("epic", "unknown")
119
+ title = story.get("title", story_id)
120
+ bcps = story.get("bcps", 0)
121
+ status = story.get("status", "backlog")
122
+ risk_max = story.get("risk_max", "none")
123
+ security_max = story.get("security_max", "none")
124
+
125
+ # Enrich with cycle-times data
126
+ ct_data = ct_lookup.get(story_id, {})
127
+ cycle_minutes = ct_data.get("cycle_minutes", 0)
128
+ bcp_per_hour = ct_data.get("bcp_per_hour", 0)
129
+
130
+ # Time: cycle_minutes * 60 for seconds in Allure display
131
+ time_seconds = cycle_minutes * 60.0 if cycle_minutes else 0.0
132
+
133
+ testcase = ET.SubElement(testsuite, "testcase", {
134
+ "classname": epic_id,
135
+ "name": f"{story_id}: {title}",
136
+ "time": str(round(time_seconds, 3)),
137
+ })
138
+
139
+ props = ET.SubElement(testcase, "properties")
140
+ ET.SubElement(props, "property", {"name": "risk", "value": risk_max})
141
+ ET.SubElement(props, "property", {"name": "security", "value": security_max})
142
+ ET.SubElement(props, "property", {"name": "bcps", "value": str(bcps)})
143
+ ET.SubElement(props, "property", {"name": "status", "value": status})
144
+ ET.SubElement(props, "property", {"name": "bcp_per_hour", "value": str(bcp_per_hour)})
145
+ ET.SubElement(props, "property", {"name": "lead_time_minutes", "value": str(cycle_minutes)})
146
+
147
+ if status != "done":
148
+ ET.SubElement(testcase, "failure", {
149
+ "message": f"Story {story_id} is {status} [risk={risk_max}, security={security_max}]",
150
+ "type": "StoryIncomplete"
151
+ })
152
+
153
+ tree = ET.ElementTree(testsuite)
154
+ ET.indent(tree, space=" ")
155
+ tree.write(str(out / "junit-results.xml"), encoding="utf-8", xml_declaration=True)
156
+
157
+ # 3. Build categories.json
158
+ epics = exec_status.get("epics", {})
159
+ categories = []
160
+
161
+ for epic_id in sorted(epics.keys()):
162
+ epic = epics[epic_id]
163
+ if isinstance(epic, dict) and epic.get("status") != "done":
164
+ categories.append({
165
+ "name": f"Epic: {epic.get('title', epic_id)}",
166
+ "matchedStatuses": ["failed"],
167
+ "messageRegex": f".*{epic_id}:.*"
168
+ })
169
+
170
+ categories.append({
171
+ "name": "P0 Risk",
172
+ "matchedStatuses": ["failed"],
173
+ "messageRegex": ".*risk.*P0.*"
174
+ })
175
+ categories.append({
176
+ "name": "Security Review",
177
+ "matchedStatuses": ["failed"],
178
+ "messageRegex": ".*security.*(?:medium|high).*"
179
+ })
180
+
181
+ # Add bug-based categories
182
+ bug_list = bugs_registry.get("bugs", [])
183
+ bug_count = len(bug_list) if isinstance(bug_list, list) else 0
184
+ open_bugs = sum(1 for b in bug_list if isinstance(b, dict) and b.get("status") not in ("fixed", "closed", None))
185
+ if open_bugs > 0:
186
+ categories.append({
187
+ "name": "Open Bugs",
188
+ "matchedStatuses": ["failed"],
189
+ "messageRegex": ".*Bug.*"
190
+ })
191
+
192
+ (out / "categories.json").write_text(json.dumps(categories, indent=2))
193
+
194
+ # 4. Build executor.json
195
+ rl = release_plan.get("release", {}) if isinstance(release_plan.get("release"), dict) else {}
196
+ executor = {
197
+ "name": "bigpowers",
198
+ "type": "bigpowers",
199
+ "buildName": rl.get("version", "unknown") if isinstance(rl, dict) else "unknown",
200
+ "buildOrder": len(exec_status.get("development_status", {})),
201
+ }
202
+ (out / "executor.json").write_text(json.dumps(executor, indent=2))
203
+
204
+ # Summary
205
+ epic_count = len([e for e in epics.values() if isinstance(e, dict) and e.get("status") == "done"])
206
+ total_epics = len(epics)
207
+ print(f"generate-allure-report: {total_stories} stories, {epic_count}/{total_epics} epics done, {bug_count} bugs")
208
+ print(f" -> {out}/junit-results.xml")
209
+ print(f" -> {out}/categories.json")
210
+ print(f" -> {out}/executor.json")
211
+ PY
212
+ ```
213
+
214
+ ## JUnit XML Schema
215
+
216
+ ```xml
217
+ <?xml version="1.0" encoding="utf-8"?>
218
+ <testsuite name="bigpowers-epic-progress" tests="N" failures="F" errors="0" skipped="0">
219
+ <testcase classname="e01" name="e01s01: Security slopcheck tags" time="0.75">
220
+ <properties>
221
+ <property name="risk" value="none"/>
222
+ <property name="security" value="none"/>
223
+ <property name="bcps" value="1"/>
224
+ <property name="status" value="done"/>
225
+ <property name="bcp_per_hour" value="1.3"/>
226
+ <property name="lead_time_minutes" value="45"/>
227
+ </properties>
228
+ </testcase>
229
+ <testcase classname="e01" name="e01s99: Some incomplete story" time="0.0">
230
+ <properties>...</properties>
231
+ <failure message="Story e01s99 is backlog [risk=P0, security=high]" type="StoryIncomplete"/>
232
+ </testcase>
233
+ </testsuite>
234
+ ```
235
+
236
+ ## Categories JSON Schema
237
+
238
+ ```json
239
+ [
240
+ {
241
+ "name": "Epic: Quality Core - Skill Hardening",
242
+ "matchedStatuses": ["failed"],
243
+ "messageRegex": ".*e45:.*"
244
+ },
245
+ {
246
+ "name": "P0 Risk",
247
+ "matchedStatuses": ["failed"],
248
+ "messageRegex": ".*risk.*P0.*"
249
+ },
250
+ {
251
+ "name": "Security Review",
252
+ "matchedStatuses": ["failed"],
253
+ "messageRegex": ".*security.*(?:medium|high).*"
254
+ }
255
+ ]
256
+ ```
257
+
258
+ ## Executor JSON Schema
259
+
260
+ ```json
261
+ {
262
+ "name": "bigpowers",
263
+ "type": "bigpowers",
264
+ "buildName": "2.76.2",
265
+ "buildOrder": 400
266
+ }
267
+ ```
268
+
269
+ ## Example Usage
270
+
271
+ ```bash
272
+ # Generate reports
273
+ bash scripts/generate-allure-report.sh
274
+
275
+ # Verify output
276
+ test -f allure-results/junit-results.xml && echo "JUnit OK"
277
+ test -f allure-results/categories.json && echo "Categories OK"
278
+ test -f allure-results/executor.json && echo "Executor OK"
279
+
280
+ # Serve with Allure
281
+ allure serve allure-results/
282
+
283
+ # Or open the Allure TestOps UI
284
+ allure open allure-results/
285
+ ```