bigpowers 2.87.4 → 2.87.5

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