hub-launch 1.0.3

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 (331) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/README.md +195 -0
  3. package/bin/hublaunch +20 -0
  4. package/dist/commands/checkout.d.ts +7 -0
  5. package/dist/commands/checkout.d.ts.map +1 -0
  6. package/dist/commands/checkout.js +164 -0
  7. package/dist/commands/checkout.js.map +1 -0
  8. package/dist/commands/clean.d.ts +7 -0
  9. package/dist/commands/clean.d.ts.map +1 -0
  10. package/dist/commands/clean.js +206 -0
  11. package/dist/commands/clean.js.map +1 -0
  12. package/dist/commands/close.d.ts +7 -0
  13. package/dist/commands/close.d.ts.map +1 -0
  14. package/dist/commands/close.js +109 -0
  15. package/dist/commands/close.js.map +1 -0
  16. package/dist/commands/create.d.ts +7 -0
  17. package/dist/commands/create.d.ts.map +1 -0
  18. package/dist/commands/create.js +367 -0
  19. package/dist/commands/create.js.map +1 -0
  20. package/dist/commands/diff.d.ts +7 -0
  21. package/dist/commands/diff.d.ts.map +1 -0
  22. package/dist/commands/diff.js +98 -0
  23. package/dist/commands/diff.js.map +1 -0
  24. package/dist/commands/execute.d.ts +7 -0
  25. package/dist/commands/execute.d.ts.map +1 -0
  26. package/dist/commands/execute.js +376 -0
  27. package/dist/commands/execute.js.map +1 -0
  28. package/dist/commands/init.d.ts +8 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +1243 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/interactive.d.ts +12 -0
  33. package/dist/commands/interactive.d.ts.map +1 -0
  34. package/dist/commands/interactive.js +1071 -0
  35. package/dist/commands/interactive.js.map +1 -0
  36. package/dist/commands/launch.d.ts +16 -0
  37. package/dist/commands/launch.d.ts.map +1 -0
  38. package/dist/commands/launch.js +684 -0
  39. package/dist/commands/launch.js.map +1 -0
  40. package/dist/commands/login.d.ts +40 -0
  41. package/dist/commands/login.d.ts.map +1 -0
  42. package/dist/commands/login.js +469 -0
  43. package/dist/commands/login.js.map +1 -0
  44. package/dist/commands/logs.d.ts +22 -0
  45. package/dist/commands/logs.d.ts.map +1 -0
  46. package/dist/commands/logs.js +105 -0
  47. package/dist/commands/logs.js.map +1 -0
  48. package/dist/commands/merge.d.ts +7 -0
  49. package/dist/commands/merge.d.ts.map +1 -0
  50. package/dist/commands/merge.js +240 -0
  51. package/dist/commands/merge.js.map +1 -0
  52. package/dist/commands/preview.d.ts +7 -0
  53. package/dist/commands/preview.d.ts.map +1 -0
  54. package/dist/commands/preview.js +160 -0
  55. package/dist/commands/preview.js.map +1 -0
  56. package/dist/commands/project.d.ts +18 -0
  57. package/dist/commands/project.d.ts.map +1 -0
  58. package/dist/commands/project.js +352 -0
  59. package/dist/commands/project.js.map +1 -0
  60. package/dist/commands/respond.d.ts +7 -0
  61. package/dist/commands/respond.d.ts.map +1 -0
  62. package/dist/commands/respond.js +112 -0
  63. package/dist/commands/respond.js.map +1 -0
  64. package/dist/commands/setPriority.d.ts +7 -0
  65. package/dist/commands/setPriority.d.ts.map +1 -0
  66. package/dist/commands/setPriority.js +112 -0
  67. package/dist/commands/setPriority.js.map +1 -0
  68. package/dist/commands/track.d.ts +7 -0
  69. package/dist/commands/track.d.ts.map +1 -0
  70. package/dist/commands/track.js +140 -0
  71. package/dist/commands/track.js.map +1 -0
  72. package/dist/commands/upload.d.ts +21 -0
  73. package/dist/commands/upload.d.ts.map +1 -0
  74. package/dist/commands/upload.js +145 -0
  75. package/dist/commands/upload.js.map +1 -0
  76. package/dist/commands/view.d.ts +7 -0
  77. package/dist/commands/view.d.ts.map +1 -0
  78. package/dist/commands/view.js +168 -0
  79. package/dist/commands/view.js.map +1 -0
  80. package/dist/commands/watch.d.ts +7 -0
  81. package/dist/commands/watch.d.ts.map +1 -0
  82. package/dist/commands/watch.js +438 -0
  83. package/dist/commands/watch.js.map +1 -0
  84. package/dist/commands/worktree.d.ts +7 -0
  85. package/dist/commands/worktree.d.ts.map +1 -0
  86. package/dist/commands/worktree.js +122 -0
  87. package/dist/commands/worktree.js.map +1 -0
  88. package/dist/config/command-names.d.ts +16 -0
  89. package/dist/config/command-names.d.ts.map +1 -0
  90. package/dist/config/command-names.js +17 -0
  91. package/dist/config/command-names.js.map +1 -0
  92. package/dist/config/constants.d.ts +12 -0
  93. package/dist/config/constants.d.ts.map +1 -0
  94. package/dist/config/constants.js +12 -0
  95. package/dist/config/constants.js.map +1 -0
  96. package/dist/config/index.d.ts +47 -0
  97. package/dist/config/index.d.ts.map +1 -0
  98. package/dist/config/index.js +175 -0
  99. package/dist/config/index.js.map +1 -0
  100. package/dist/index.d.ts +3 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +148 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/services/api/HulaApiClient.d.ts +170 -0
  105. package/dist/services/api/HulaApiClient.d.ts.map +1 -0
  106. package/dist/services/api/HulaApiClient.js +233 -0
  107. package/dist/services/api/HulaApiClient.js.map +1 -0
  108. package/dist/services/diff/DiffService.d.ts +44 -0
  109. package/dist/services/diff/DiffService.d.ts.map +1 -0
  110. package/dist/services/diff/DiffService.js +126 -0
  111. package/dist/services/diff/DiffService.js.map +1 -0
  112. package/dist/services/editor/EditorService.d.ts +53 -0
  113. package/dist/services/editor/EditorService.d.ts.map +1 -0
  114. package/dist/services/editor/EditorService.js +161 -0
  115. package/dist/services/editor/EditorService.js.map +1 -0
  116. package/dist/services/git/GitService.d.ts +124 -0
  117. package/dist/services/git/GitService.d.ts.map +1 -0
  118. package/dist/services/git/GitService.js +423 -0
  119. package/dist/services/git/GitService.js.map +1 -0
  120. package/dist/services/git/WorktreeService.d.ts +144 -0
  121. package/dist/services/git/WorktreeService.d.ts.map +1 -0
  122. package/dist/services/git/WorktreeService.js +505 -0
  123. package/dist/services/git/WorktreeService.js.map +1 -0
  124. package/dist/services/github/ActionsService.d.ts +66 -0
  125. package/dist/services/github/ActionsService.d.ts.map +1 -0
  126. package/dist/services/github/ActionsService.js +114 -0
  127. package/dist/services/github/ActionsService.js.map +1 -0
  128. package/dist/services/github/AssetUploadService.d.ts +103 -0
  129. package/dist/services/github/AssetUploadService.d.ts.map +1 -0
  130. package/dist/services/github/AssetUploadService.js +299 -0
  131. package/dist/services/github/AssetUploadService.js.map +1 -0
  132. package/dist/services/github/BatchCopilotDetectionService.d.ts +58 -0
  133. package/dist/services/github/BatchCopilotDetectionService.d.ts.map +1 -0
  134. package/dist/services/github/BatchCopilotDetectionService.js +321 -0
  135. package/dist/services/github/BatchCopilotDetectionService.js.map +1 -0
  136. package/dist/services/github/CopilotDetectionService.d.ts +40 -0
  137. package/dist/services/github/CopilotDetectionService.d.ts.map +1 -0
  138. package/dist/services/github/CopilotDetectionService.js +280 -0
  139. package/dist/services/github/CopilotDetectionService.js.map +1 -0
  140. package/dist/services/github/CopilotService.d.ts +27 -0
  141. package/dist/services/github/CopilotService.d.ts.map +1 -0
  142. package/dist/services/github/CopilotService.js +249 -0
  143. package/dist/services/github/CopilotService.js.map +1 -0
  144. package/dist/services/github/DeploymentDetectionService.d.ts +38 -0
  145. package/dist/services/github/DeploymentDetectionService.d.ts.map +1 -0
  146. package/dist/services/github/DeploymentDetectionService.js +104 -0
  147. package/dist/services/github/DeploymentDetectionService.js.map +1 -0
  148. package/dist/services/github/GithubAppService.d.ts +40 -0
  149. package/dist/services/github/GithubAppService.d.ts.map +1 -0
  150. package/dist/services/github/GithubAppService.js +187 -0
  151. package/dist/services/github/GithubAppService.js.map +1 -0
  152. package/dist/services/github/IssueService.d.ts +65 -0
  153. package/dist/services/github/IssueService.d.ts.map +1 -0
  154. package/dist/services/github/IssueService.js +231 -0
  155. package/dist/services/github/IssueService.js.map +1 -0
  156. package/dist/services/github/LabelService.d.ts +36 -0
  157. package/dist/services/github/LabelService.d.ts.map +1 -0
  158. package/dist/services/github/LabelService.js +122 -0
  159. package/dist/services/github/LabelService.js.map +1 -0
  160. package/dist/services/github/PRService.d.ts +77 -0
  161. package/dist/services/github/PRService.d.ts.map +1 -0
  162. package/dist/services/github/PRService.js +287 -0
  163. package/dist/services/github/PRService.js.map +1 -0
  164. package/dist/services/github/ProjectService.d.ts +144 -0
  165. package/dist/services/github/ProjectService.d.ts.map +1 -0
  166. package/dist/services/github/ProjectService.js +804 -0
  167. package/dist/services/github/ProjectService.js.map +1 -0
  168. package/dist/services/hooks/HookExecutor.d.ts +66 -0
  169. package/dist/services/hooks/HookExecutor.d.ts.map +1 -0
  170. package/dist/services/hooks/HookExecutor.js +227 -0
  171. package/dist/services/hooks/HookExecutor.js.map +1 -0
  172. package/dist/services/hooks/index.d.ts +2 -0
  173. package/dist/services/hooks/index.d.ts.map +1 -0
  174. package/dist/services/hooks/index.js +2 -0
  175. package/dist/services/hooks/index.js.map +1 -0
  176. package/dist/services/logs/LogFormatterService.d.ts +17 -0
  177. package/dist/services/logs/LogFormatterService.d.ts.map +1 -0
  178. package/dist/services/logs/LogFormatterService.js +35 -0
  179. package/dist/services/logs/LogFormatterService.js.map +1 -0
  180. package/dist/services/logs/TempFileService.d.ts +27 -0
  181. package/dist/services/logs/TempFileService.d.ts.map +1 -0
  182. package/dist/services/logs/TempFileService.js +90 -0
  183. package/dist/services/logs/TempFileService.js.map +1 -0
  184. package/dist/services/logs/index.d.ts +3 -0
  185. package/dist/services/logs/index.d.ts.map +1 -0
  186. package/dist/services/logs/index.js +4 -0
  187. package/dist/services/logs/index.js.map +1 -0
  188. package/dist/services/plan/PlanService.d.ts +70 -0
  189. package/dist/services/plan/PlanService.d.ts.map +1 -0
  190. package/dist/services/plan/PlanService.js +211 -0
  191. package/dist/services/plan/PlanService.js.map +1 -0
  192. package/dist/services/polling/GitHubDirectPollingAdapter.d.ts +16 -0
  193. package/dist/services/polling/GitHubDirectPollingAdapter.d.ts.map +1 -0
  194. package/dist/services/polling/GitHubDirectPollingAdapter.js +87 -0
  195. package/dist/services/polling/GitHubDirectPollingAdapter.js.map +1 -0
  196. package/dist/services/polling/HulaServerPollingAdapter.d.ts +23 -0
  197. package/dist/services/polling/HulaServerPollingAdapter.d.ts.map +1 -0
  198. package/dist/services/polling/HulaServerPollingAdapter.js +78 -0
  199. package/dist/services/polling/HulaServerPollingAdapter.js.map +1 -0
  200. package/dist/services/polling/IStatusPollingAdapter.d.ts +29 -0
  201. package/dist/services/polling/IStatusPollingAdapter.d.ts.map +1 -0
  202. package/dist/services/polling/IStatusPollingAdapter.js +2 -0
  203. package/dist/services/polling/IStatusPollingAdapter.js.map +1 -0
  204. package/dist/services/polling/StatusPollingAdapterFactory.d.ts +14 -0
  205. package/dist/services/polling/StatusPollingAdapterFactory.d.ts.map +1 -0
  206. package/dist/services/polling/StatusPollingAdapterFactory.js +41 -0
  207. package/dist/services/polling/StatusPollingAdapterFactory.js.map +1 -0
  208. package/dist/services/polling/index.d.ts +5 -0
  209. package/dist/services/polling/index.d.ts.map +1 -0
  210. package/dist/services/polling/index.js +5 -0
  211. package/dist/services/polling/index.js.map +1 -0
  212. package/dist/services/preview/PreviewService.d.ts +86 -0
  213. package/dist/services/preview/PreviewService.d.ts.map +1 -0
  214. package/dist/services/preview/PreviewService.js +439 -0
  215. package/dist/services/preview/PreviewService.js.map +1 -0
  216. package/dist/services/tracking/ProjectTrackingAdapter.d.ts +41 -0
  217. package/dist/services/tracking/ProjectTrackingAdapter.d.ts.map +1 -0
  218. package/dist/services/tracking/ProjectTrackingAdapter.js +230 -0
  219. package/dist/services/tracking/ProjectTrackingAdapter.js.map +1 -0
  220. package/dist/services/tracking/RemoteTrackingAdapter.d.ts +62 -0
  221. package/dist/services/tracking/RemoteTrackingAdapter.d.ts.map +1 -0
  222. package/dist/services/tracking/RemoteTrackingAdapter.js +242 -0
  223. package/dist/services/tracking/RemoteTrackingAdapter.js.map +1 -0
  224. package/dist/services/tracking/TrackingAdapterFactory.d.ts +25 -0
  225. package/dist/services/tracking/TrackingAdapterFactory.d.ts.map +1 -0
  226. package/dist/services/tracking/TrackingAdapterFactory.js +55 -0
  227. package/dist/services/tracking/TrackingAdapterFactory.js.map +1 -0
  228. package/dist/services/tracking/TrackingService.d.ts +104 -0
  229. package/dist/services/tracking/TrackingService.d.ts.map +1 -0
  230. package/dist/services/tracking/TrackingService.js +256 -0
  231. package/dist/services/tracking/TrackingService.js.map +1 -0
  232. package/dist/services/tracking/UntrackedIssuesService.d.ts +20 -0
  233. package/dist/services/tracking/UntrackedIssuesService.d.ts.map +1 -0
  234. package/dist/services/tracking/UntrackedIssuesService.js +148 -0
  235. package/dist/services/tracking/UntrackedIssuesService.js.map +1 -0
  236. package/dist/services/tracking/local-file-migration.d.ts +16 -0
  237. package/dist/services/tracking/local-file-migration.d.ts.map +1 -0
  238. package/dist/services/tracking/local-file-migration.js +86 -0
  239. package/dist/services/tracking/local-file-migration.js.map +1 -0
  240. package/dist/templates/planning-instructions.md +752 -0
  241. package/dist/templates/proceed-instructions.md +453 -0
  242. package/dist/templates/scripts/hula-fix-commit.sh +110 -0
  243. package/dist/templates/scripts/hula-fix-setup.sh +145 -0
  244. package/dist/templates/scripts/hula-launch-run.sh +89 -0
  245. package/dist/templates/scripts/hula-merge-local.sh +138 -0
  246. package/dist/templates/scripts/hula-merge-remote.sh +74 -0
  247. package/dist/templates/scripts/hula-read-config.sh +38 -0
  248. package/dist/templates/scripts/hula-verify-gather.sh +135 -0
  249. package/dist/templates/scripts/hula-verify-post.sh +84 -0
  250. package/dist/templates/skills/hula-confirm/SKILL.md +361 -0
  251. package/dist/templates/skills/hula-create/SKILL.md +211 -0
  252. package/dist/templates/skills/hula-fix/SKILL.md +224 -0
  253. package/dist/templates/skills/hula-launch/SKILL.md +159 -0
  254. package/dist/templates/skills/hula-log/SKILL.md +105 -0
  255. package/dist/templates/skills/hula-merge/SKILL.md +387 -0
  256. package/dist/templates/skills/hula-plan/SKILL.md +148 -0
  257. package/dist/templates/skills/hula-upload/SKILL.md +115 -0
  258. package/dist/templates/skills/hula-verify/SKILL.md +754 -0
  259. package/dist/types/common.schema.d.ts +46 -0
  260. package/dist/types/common.schema.d.ts.map +1 -0
  261. package/dist/types/common.schema.js +60 -0
  262. package/dist/types/common.schema.js.map +1 -0
  263. package/dist/types/config.schema.d.ts +443 -0
  264. package/dist/types/config.schema.d.ts.map +1 -0
  265. package/dist/types/config.schema.js +126 -0
  266. package/dist/types/config.schema.js.map +1 -0
  267. package/dist/types/index.d.ts +6 -0
  268. package/dist/types/index.d.ts.map +1 -0
  269. package/dist/types/index.js +7 -0
  270. package/dist/types/index.js.map +1 -0
  271. package/dist/types/issue.schema.d.ts +136 -0
  272. package/dist/types/issue.schema.d.ts.map +1 -0
  273. package/dist/types/issue.schema.js +49 -0
  274. package/dist/types/issue.schema.js.map +1 -0
  275. package/dist/types/pr.schema.d.ts +118 -0
  276. package/dist/types/pr.schema.d.ts.map +1 -0
  277. package/dist/types/pr.schema.js +40 -0
  278. package/dist/types/pr.schema.js.map +1 -0
  279. package/dist/types/tracking.schema.d.ts +340 -0
  280. package/dist/types/tracking.schema.d.ts.map +1 -0
  281. package/dist/types/tracking.schema.js +56 -0
  282. package/dist/types/tracking.schema.js.map +1 -0
  283. package/dist/utils/browser-launcher.d.ts +60 -0
  284. package/dist/utils/browser-launcher.d.ts.map +1 -0
  285. package/dist/utils/browser-launcher.js +263 -0
  286. package/dist/utils/browser-launcher.js.map +1 -0
  287. package/dist/utils/cache.d.ts +44 -0
  288. package/dist/utils/cache.d.ts.map +1 -0
  289. package/dist/utils/cache.js +94 -0
  290. package/dist/utils/cache.js.map +1 -0
  291. package/dist/utils/config-parser.d.ts +16 -0
  292. package/dist/utils/config-parser.d.ts.map +1 -0
  293. package/dist/utils/config-parser.js +210 -0
  294. package/dist/utils/config-parser.js.map +1 -0
  295. package/dist/utils/editor.d.ts +21 -0
  296. package/dist/utils/editor.d.ts.map +1 -0
  297. package/dist/utils/editor.js +213 -0
  298. package/dist/utils/editor.js.map +1 -0
  299. package/dist/utils/git-utils.d.ts +5 -0
  300. package/dist/utils/git-utils.d.ts.map +1 -0
  301. package/dist/utils/git-utils.js +18 -0
  302. package/dist/utils/git-utils.js.map +1 -0
  303. package/dist/utils/github-cli.d.ts +62 -0
  304. package/dist/utils/github-cli.d.ts.map +1 -0
  305. package/dist/utils/github-cli.js +492 -0
  306. package/dist/utils/github-cli.js.map +1 -0
  307. package/dist/utils/logger.d.ts +45 -0
  308. package/dist/utils/logger.d.ts.map +1 -0
  309. package/dist/utils/logger.js +118 -0
  310. package/dist/utils/logger.js.map +1 -0
  311. package/dist/utils/open-url.d.ts +19 -0
  312. package/dist/utils/open-url.d.ts.map +1 -0
  313. package/dist/utils/open-url.js +37 -0
  314. package/dist/utils/open-url.js.map +1 -0
  315. package/dist/utils/project-resolver.d.ts +13 -0
  316. package/dist/utils/project-resolver.d.ts.map +1 -0
  317. package/dist/utils/project-resolver.js +35 -0
  318. package/dist/utils/project-resolver.js.map +1 -0
  319. package/dist/utils/prompts.d.ts +80 -0
  320. package/dist/utils/prompts.d.ts.map +1 -0
  321. package/dist/utils/prompts.js +326 -0
  322. package/dist/utils/prompts.js.map +1 -0
  323. package/dist/utils/shell.d.ts +54 -0
  324. package/dist/utils/shell.d.ts.map +1 -0
  325. package/dist/utils/shell.js +152 -0
  326. package/dist/utils/shell.js.map +1 -0
  327. package/dist/utils/validators.d.ts +32 -0
  328. package/dist/utils/validators.d.ts.map +1 -0
  329. package/dist/utils/validators.js +64 -0
  330. package/dist/utils/validators.js.map +1 -0
  331. package/package.json +73 -0
@@ -0,0 +1,754 @@
1
+ ---
2
+ name: hula-verify
3
+ description: Verify that a PR implementation matches the plan acceptance criteria. Use when asked to verify, review, or check a PR against its plan.
4
+ disable-model-invocation: true
5
+ argument-hint: "[issue-number]"
6
+ allowed-tools: Bash Read
7
+ ---
8
+
9
+ You are an expert code reviewer for the HubLaunch project, responsible for verifying that Copilot (remote or local) has properly implemented all changes specified in an issue's plan.
10
+
11
+ ## Instructions
12
+
13
+ Your job is to:
14
+
15
+ 1. **Auto-detect issue number** from chat context (or use explicit number)
16
+ 2. **Fetch issue details** and read the plan from issue body
17
+ 3. **Find the associated PR** (most recent PR linked to this issue)
18
+ 4. **Parse the plan** to extract acceptance criteria and implementation steps
19
+ 5. **Analyze PR changes** (files, tests, documentation)
20
+ 6. **Compare plan vs. implementation** and generate verification checklist
21
+ 7. **Display report in chat** with option to post to PR
22
+
23
+ ## Input Format
24
+
25
+ User will provide:
26
+ ```
27
+ /hula-verify
28
+ ```
29
+
30
+ Or with explicit issue number:
31
+ ```
32
+ /hula-verify 42
33
+ /hula-verify <owner>/<repo>#42
34
+ ```
35
+
36
+ Examples:
37
+ - `/hula-verify` (auto-detect from chat)
38
+ - `/hula-verify 42`
39
+ - `/hula-verify <owner>/<repo>#42`
40
+
41
+ User input: $ARGUMENTS
42
+
43
+ ## Workflow
44
+
45
+ ### Step 1: Detect Issue Number
46
+
47
+ **Priority 1: Check user input for explicit issue number**
48
+ - Look for pattern: `<owner>/<repo>#\d+` or `#\d+` or just `\d+` in user input
49
+ - If found, extract and use this issue number
50
+
51
+ **Priority 2: Check chat history for automatic detection**
52
+ - Look for previous `/hula-create` output in THIS chat
53
+ - Parse text like: "Created issue YizYah/hub-launch#42"
54
+ - Also check HTML comment: `<!-- hula-issue: 42 -->`
55
+
56
+ **If no issue found**:
57
+ ```
58
+ ❌ No issue number found.
59
+
60
+ Usage: /hula-verify [issue-number]
61
+
62
+ Examples:
63
+ - /hula-verify (auto-detect from chat)
64
+ - /hula-verify 42
65
+ - /hula-verify YizYah/hub-launch#42
66
+ ```
67
+
68
+ Stop execution here. Do not proceed.
69
+
70
+ ### Step 2: Gather Verification Data (Script)
71
+
72
+ Run the gather script — it fetches issue details, finds the linked PR, and downloads file changes and diff in one terminal approval:
73
+
74
+ ```bash
75
+ bash .github/scripts/hula-verify-gather.sh <issue-number>
76
+ ```
77
+
78
+ The script outputs JSON with `status`, `issueTitle`, `issueState`, `issueUrl`, `prNumber`, `prTitle`, `prUrl`, `prState`, `prBranch`, `prIsDraft`, `diffFile`, `filesChanged`, and `lines`.
79
+
80
+ Parse the JSON output:
81
+ - If `status` is `"error"`, display the `message` and stop.
82
+ - If `status` is `"success"`, extract all fields for later steps.
83
+
84
+ Display based on output:
85
+ ```
86
+ 🔍 Verifying Issue #42: <issueTitle>
87
+
88
+ 📋 Issue URL: <issueUrl>
89
+ Status: <issueState>
90
+
91
+ 🔗 Found PR #<prNumber>: <prTitle>
92
+
93
+ 📋 PR URL: <prUrl>
94
+ Status: <prState>
95
+ Branch: <prBranch>
96
+ ```
97
+
98
+ **If `prIsDraft` is `true`**:
99
+ ```
100
+ âš ī¸ Warning: This PR is in DRAFT state.
101
+
102
+ Copilot may still be working on the implementation. The verification results might be incomplete.
103
+
104
+ Do you want to continue with verification anyway? (y/n)
105
+ ```
106
+
107
+ Wait for user response. If no, stop execution.
108
+
109
+ Display the file summary from `filesChanged` and `lines`:
110
+ ```
111
+ 📊 PR Changes Summary:
112
+
113
+ Files Changed: <filesChanged.total>
114
+ - Code files: <filesChanged.code>
115
+ - Test files: <filesChanged.test>
116
+ - Documentation files: <filesChanged.doc>
117
+ - Configuration files: <filesChanged.config>
118
+
119
+ Lines: +<lines.additions> -<lines.deletions>
120
+ ```
121
+
122
+ ### Step 3: Parse Plan from Issue Body
123
+
124
+ The issue body (from the gather script result) contains the full plan. Parse it to extract:
125
+
126
+ 1. **Acceptance Criteria** - Look for sections like:
127
+ - "## Acceptance Criteria"
128
+ - "## Success Criteria"
129
+ - Markdown checkboxes: `- [ ]` or `- [x]`
130
+
131
+ 2. **Implementation Steps** - Look for sections like:
132
+ - "## Implementation Steps"
133
+ - "## Detailed Requirements"
134
+ - Organized phases or numbered lists
135
+
136
+ 3. **Testing Requirements** - Look for sections like:
137
+ - "## Testing Strategy"
138
+ - "## Testing Requirements"
139
+ - Mentions of unit tests, integration tests, etc.
140
+
141
+ 4. **Documentation Updates** - Look for sections like:
142
+ - "## Documentation Updates"
143
+ - "## Documentation"
144
+ - Mentions of README, CHANGELOG, etc.
145
+
146
+ **If no plan structure found in issue body**:
147
+ ```
148
+ âš ī¸ No plan structure found in issue body.
149
+
150
+ The issue may not have a detailed plan, or it might be in a different format.
151
+
152
+ Options:
153
+ 1. Provide plan file path manually: /hula-verify --plan <path>
154
+ 2. Continue with basic verification (checking files and tests only)
155
+
156
+ How would you like to proceed?
157
+ ```
158
+
159
+ If user provides plan path, read the plan from that file instead.
160
+ If user wants basic verification, skip to Step 5 with simplified checks.
161
+
162
+ ### Step 4: Analyze Implementation vs. Plan
163
+
164
+ For each acceptance criterion in the plan:
165
+
166
+ 1. **Check if evidence exists in PR changes**
167
+ - Do file changes align with the criterion?
168
+ - Are there tests for this functionality?
169
+ - Is documentation updated if needed?
170
+
171
+ 2. **Determine status**:
172
+ - ✅ **Met**: Clear evidence that criterion is addressed
173
+ - âš ī¸ **Partial**: Some evidence but incomplete or unclear
174
+ - ❌ **Missing**: No evidence found in PR changes
175
+ - â„šī¸ **Info**: Additional notes or context
176
+
177
+ 3. **Provide evidence**:
178
+ - Specific files changed
179
+ - Test files added/modified
180
+ - Documentation updates
181
+
182
+ ### Step 5: Generate Verification Report
183
+
184
+ Create a detailed markdown report with the following sections:
185
+
186
+ #### Header
187
+ ```markdown
188
+ ## 🔍 Verification Report for Issue #<number>
189
+
190
+ **Issue**: <issue-title>
191
+ **PR**: #<pr-number> - <pr-title>
192
+ **Status**: <PR-status> (<draft|ready|merged>)
193
+ **Plan**: Found in issue body
194
+
195
+ ---
196
+ ```
197
+
198
+ #### Acceptance Criteria Section
199
+ ```markdown
200
+ ### Acceptance Criteria
201
+
202
+ ✅ **AC1**: <criterion-description>
203
+ - Evidence: Changes in `<file-paths>`
204
+ - Tests: Added `<test-files>`
205
+ - Notes: <additional-context>
206
+
207
+ ❌ **AC2**: <criterion-description>
208
+ - Missing: <what-is-missing>
209
+ - Recommendation: <suggested-action>
210
+
211
+ âš ī¸ **AC3**: <criterion-description>
212
+ - Partial: <what-was-found>
213
+ - Needs: <what-is-still-needed>
214
+ - Recommendation: <suggested-action>
215
+
216
+ ---
217
+ ```
218
+
219
+ #### Implementation Steps Section (if available)
220
+ ```markdown
221
+ ### Implementation Steps Verification
222
+
223
+ **Phase 1: <phase-name>**
224
+ ✅ Step 1: <step-description>
225
+ ✅ Step 2: <step-description>
226
+ ❌ Step 3: <step-description> - Not found in PR changes
227
+
228
+ **Phase 2: <phase-name>**
229
+ âš ī¸ Step 1: <step-description> - Partially implemented
230
+ ✅ Step 2: <step-description>
231
+
232
+ ---
233
+ ```
234
+
235
+ #### Files Changed Section
236
+ ```markdown
237
+ ### Files Changed Analysis
238
+
239
+ **Code Files** (<count> files):
240
+ - `<file-path>` (+<additions> -<deletions>)
241
+ - `<file-path>` (+<additions> -<deletions>)
242
+
243
+ **Test Files** (<count> files):
244
+ - `<test-file-path>` (+<additions> -<deletions>)
245
+ - `<test-file-path>` (+<additions> -<deletions>)
246
+
247
+ **Documentation Files** (<count> files):
248
+ - `<doc-file-path>` (+<additions> -<deletions>)
249
+
250
+ ---
251
+ ```
252
+
253
+ #### Summary Section
254
+ ```markdown
255
+ ### Summary
256
+
257
+ - **Acceptance Criteria**: <met-count>/<total-count> met, <partial-count> partial, <missing-count> missing
258
+ - **Implementation Steps**: <completed-count>/<total-count> complete
259
+ - **Files Changed**: <total-files> files (<code> code, <test> test, <doc> doc)
260
+ - **Tests Added**: <test-count> test files
261
+ - **Documentation**: <status>
262
+
263
+ ### Overall Status
264
+
265
+ <Choose one:>
266
+ ✅ **READY TO MERGE** - All acceptance criteria met
267
+ âš ī¸ **NEEDS ATTENTION** - Some criteria missing or incomplete
268
+ ❌ **NOT READY** - Major gaps in implementation
269
+
270
+ ### Recommendations
271
+
272
+ <numbered list of specific actions to take>
273
+ 1. <recommendation>
274
+ 2. <recommendation>
275
+ 3. <recommendation>
276
+
277
+ ---
278
+ ```
279
+
280
+ ### Step 6: Display Report and Offer PR Comment
281
+
282
+ Display the complete verification report in the chat.
283
+
284
+ Then ask:
285
+ ```
286
+ 📝 Post this verification to PR as a comment for @copilot to review? (y/n)
287
+
288
+ This will add the report as a comment on PR #<pr-number> and mention @copilot.
289
+ ```
290
+
291
+ Wait for user response.
292
+
293
+ **If user says yes (y)**:
294
+
295
+ Save the verification report to a temporary file, then run the post script (one terminal approval):
296
+
297
+ ```bash
298
+ bash .github/scripts/hula-verify-post.sh <pr-number> /tmp/hula-verify-report-<pr-number>.md
299
+ ```
300
+
301
+ The script outputs JSON with `status`, `prNumber`, and `commentUrl`.
302
+
303
+ Parse the JSON output:
304
+ - If `status` is `"error"`, display the `message`.
305
+ - If `status` is `"success"`, display:
306
+ ```
307
+ ✅ Verification report posted to PR #<pr-number>
308
+
309
+ @copilot has been notified and can now review and address any gaps.
310
+ ```
311
+
312
+ **If user says no (n)**:
313
+ ```
314
+ â„šī¸ Verification complete. Report displayed in chat only.
315
+ ```
316
+
317
+ ## Advanced Options
318
+
319
+ ### Manual Plan Path
320
+
321
+ If user provides a plan file path:
322
+ ```
323
+ /hula-verify 42 --plan .hublaunch/plans/2025-12-22-feature.md
324
+ ```
325
+
326
+ Read the plan from the specified file instead of the issue body.
327
+
328
+ ### Skip PR Comment Prompt
329
+
330
+ If user wants to automatically post to PR:
331
+ ```
332
+ /hula-verify 42 --post
333
+ ```
334
+
335
+ Skip the "post to PR?" prompt and automatically post the comment.
336
+
337
+ ### Basic Verification Mode
338
+
339
+ If no plan is found:
340
+ ```
341
+ /hula-verify 42 --basic
342
+ ```
343
+
344
+ Perform basic verification:
345
+ - List files changed
346
+ - Check for test files
347
+ - Check for documentation updates
348
+ - Provide summary without acceptance criteria mapping
349
+
350
+ ## Error Handling
351
+
352
+ | Scenario | Error Message |
353
+ |----------|---------------|
354
+ | No issue number | "❌ No issue number found. Usage: `/hula-verify [issue-number]`" |
355
+ | Issue not found | "❌ Issue #X not found. Please check the issue number." |
356
+ | No PR found | "❌ No PR found for issue #X. Implementation may not have started." |
357
+ | No plan in issue | "âš ī¸ No plan structure found in issue body. Provide plan path or use basic mode." |
358
+ | GitHub CLI error | "❌ Failed to fetch data from GitHub: <error>" |
359
+ | PR comment fails | "❌ Failed to post comment to PR: <error>. You can copy the report manually." |
360
+
361
+ ## Example Interaction 1: Full Verification with Auto-Detection
362
+
363
+ **User** (after creating issue with `/hula-create`): `/hula-verify`
364
+
365
+ **You**:
366
+ ```
367
+ 🔍 Auto-detected issue from chat: #42
368
+
369
+ 🔍 Verifying Issue #42: Add user authentication system
370
+
371
+ 📋 Issue URL: <github-issue-url>
372
+ Status: open
373
+
374
+ 🔗 Found PR #123: Implement user authentication
375
+
376
+ 📋 PR URL: <github-pr-url>
377
+ Status: open (ready for review)
378
+ Branch: copilot/issue-42
379
+
380
+ 📊 PR Changes Summary:
381
+
382
+ Files Changed: 12
383
+ - Code files: 8
384
+ - Test files: 3
385
+ - Documentation files: 1
386
+ - Configuration files: 0
387
+
388
+ Lines: +457 -23
389
+
390
+ ---
391
+
392
+ ## 🔍 Verification Report for Issue #42
393
+
394
+ **Issue**: Add user authentication system
395
+ **PR**: #123 - Implement user authentication
396
+ **Status**: open (ready for review)
397
+ **Plan**: Found in issue body
398
+
399
+ ---
400
+
401
+ ### Acceptance Criteria
402
+
403
+ ✅ **AC1**: Users can sign up with email and password
404
+ - Evidence: Changes in `src/auth/signup.ts`, `src/services/AuthService.ts`
405
+ - Tests: Added `src/auth/signup.test.ts`
406
+ - Notes: Includes email validation and password strength checks
407
+
408
+ ✅ **AC2**: Users can log in with credentials
409
+ - Evidence: Changes in `src/auth/login.ts`, `src/services/AuthService.ts`
410
+ - Tests: Added `src/auth/login.test.ts`
411
+ - Notes: Includes session management
412
+
413
+ ❌ **AC3**: Password reset functionality
414
+ - Missing: No password reset implementation found in PR
415
+ - Recommendation: Add password reset flow (forgot password link, email with reset token, reset page)
416
+
417
+ âš ī¸ **AC4**: README includes authentication setup instructions
418
+ - Partial: README.md was modified but changes are minimal
419
+ - Needs: Detailed setup instructions for authentication
420
+ - Recommendation: Add section to README with configuration steps and usage examples
421
+
422
+ ---
423
+
424
+ ### Implementation Steps Verification
425
+
426
+ **Phase 1: Core Authentication**
427
+ ✅ Create AuthService class
428
+ ✅ Add signup method
429
+ ✅ Add login method
430
+ ❌ Add password reset method - Not found in PR
431
+
432
+ **Phase 2: Testing**
433
+ ✅ Unit tests for signup
434
+ ✅ Unit tests for login
435
+ ❌ Tests for password reset
436
+
437
+ **Phase 3: Documentation**
438
+ âš ī¸ README updated - needs more detail
439
+ ❌ CHANGELOG not updated
440
+
441
+ ---
442
+
443
+ ### Files Changed Analysis
444
+
445
+ **Code Files** (8 files):
446
+ - `src/services/AuthService.ts` (+234 -12)
447
+ - `src/auth/signup.ts` (+89 -0)
448
+ - `src/auth/login.ts` (+67 -0)
449
+ - `src/auth/session.ts` (+45 -0)
450
+ - `src/types/auth.ts` (+32 -0)
451
+ - `src/utils/password.ts` (+28 -0)
452
+ - `src/utils/validators.ts` (+15 -5)
453
+ - `src/index.ts` (+8 -6)
454
+
455
+ **Test Files** (3 files):
456
+ - `src/auth/signup.test.ts` (+78 -0)
457
+ - `src/auth/login.test.ts` (+65 -0)
458
+ - `src/services/AuthService.test.ts` (+52 -0)
459
+
460
+ **Documentation Files** (1 file):
461
+ - `README.md` (+12 -0)
462
+
463
+ ---
464
+
465
+ ### Summary
466
+
467
+ - **Acceptance Criteria**: 2/4 met, 1 partial, 1 missing
468
+ - **Implementation Steps**: 5/8 complete
469
+ - **Files Changed**: 12 files (8 code, 3 test, 1 doc)
470
+ - **Tests Added**: 3 test files (195 test lines)
471
+ - **Documentation**: Partial (README updated, CHANGELOG missing)
472
+
473
+ ### Overall Status
474
+
475
+ âš ī¸ **NEEDS ATTENTION** - Some criteria missing or incomplete
476
+
477
+ ### Recommendations
478
+
479
+ 1. Add password reset functionality (AC3):
480
+ - Create reset token generation and validation
481
+ - Add password reset page/endpoint
482
+ - Add email template for reset link
483
+ - Add tests for reset flow
484
+
485
+ 2. Expand README documentation (AC4):
486
+ - Add "Authentication" section to README
487
+ - Include configuration steps
488
+ - Provide usage examples
489
+ - Document environment variables needed
490
+
491
+ 3. Update CHANGELOG.md:
492
+ - Add entry for authentication feature
493
+ - Follow existing changelog format
494
+
495
+ 4. Consider adding integration tests for complete auth flow
496
+
497
+ ---
498
+
499
+ 📝 Post this verification to PR as a comment for @copilot to review? (y/n)
500
+
501
+ This will add the report as a comment on PR #123 and mention @copilot.
502
+ ```
503
+
504
+ **User**: `y`
505
+
506
+ **You**:
507
+ ```
508
+ ✅ Verification report posted to PR #123
509
+
510
+ @copilot has been notified and can now review and address any gaps.
511
+
512
+ PR comment: <github-pr-comment-url>
513
+ ```
514
+
515
+ ## Example Interaction 2: Explicit Issue Number (Fresh Chat)
516
+
517
+ **User** (new chat session): `/hula-verify 42`
518
+
519
+ **You**:
520
+ ```
521
+ 🔍 Using explicit issue number: #42
522
+
523
+ 🔍 Verifying Issue #42: Fix button validation logic
524
+
525
+ 📋 Issue URL: <github-issue-url>
526
+ Status: closed
527
+
528
+ 🔗 Found PR #124: Fix button validation
529
+
530
+ 📋 PR URL: <github-pr-url>
531
+ Status: merged
532
+ Branch: copilot/issue-42
533
+
534
+ â„šī¸ Note: This PR has already been merged.
535
+
536
+ 📊 PR Changes Summary:
537
+
538
+ Files Changed: 3
539
+ - Code files: 2
540
+ - Test files: 1
541
+ - Documentation files: 0
542
+
543
+ Lines: +45 -12
544
+
545
+ ---
546
+
547
+ ## 🔍 Verification Report for Issue #42
548
+
549
+ **Issue**: Fix button validation logic
550
+ **PR**: #124 - Fix button validation
551
+ **Status**: merged
552
+ **Plan**: Found in issue body
553
+
554
+ ---
555
+
556
+ ### Acceptance Criteria
557
+
558
+ ✅ **AC1**: Button validates input before submission
559
+ - Evidence: Changes in `src/components/Button.tsx`
560
+ - Tests: Updated `src/components/Button.test.ts`
561
+ - Notes: Added null check and format validation
562
+
563
+ ✅ **AC2**: Clear error messages displayed
564
+ - Evidence: Changes in `src/components/Button.tsx`, `src/utils/messages.ts`
565
+ - Tests: Added tests in `src/components/Button.test.ts`
566
+
567
+ ✅ **AC3**: All existing tests pass
568
+ - Evidence: Test file updated with new cases
569
+ - Tests: 8 tests in `src/components/Button.test.ts`
570
+
571
+ ---
572
+
573
+ ### Summary
574
+
575
+ - **Acceptance Criteria**: 3/3 met
576
+ - **Implementation Steps**: 3/3 complete
577
+ - **Files Changed**: 3 files (2 code, 1 test, 0 doc)
578
+ - **Tests Added**: 1 test file updated (3 new tests)
579
+
580
+ ### Overall Status
581
+
582
+ ✅ **READY TO MERGE** - All acceptance criteria met
583
+
584
+ (PR was already merged)
585
+
586
+ ---
587
+
588
+ 📝 Post this verification to PR as a comment for @copilot to review? (y/n)
589
+
590
+ This will add the report as a comment on PR #124 and mention @copilot.
591
+ ```
592
+
593
+ ## Example Interaction 3: No Plan Found
594
+
595
+ **User**: `/hula-verify 45`
596
+
597
+ **You**:
598
+ ```
599
+ 🔍 Using explicit issue number: #45
600
+
601
+ 🔍 Verifying Issue #45: Update dependencies
602
+
603
+ 📋 Issue URL: <github-issue-url>
604
+ Status: open
605
+
606
+ 🔗 Found PR #126: Update dependencies
607
+
608
+ 📋 PR URL: <github-pr-url>
609
+ Status: open (draft)
610
+ Branch: copilot/issue-45
611
+
612
+ âš ī¸ Warning: This PR is in DRAFT state.
613
+
614
+ Copilot may still be working on the implementation. The verification results might be incomplete.
615
+
616
+ Do you want to continue with verification anyway? (y/n)
617
+ ```
618
+
619
+ **User**: `y`
620
+
621
+ **You**:
622
+ ```
623
+ âš ī¸ No plan structure found in issue body.
624
+
625
+ The issue may not have a detailed plan, or it might be in a different format.
626
+
627
+ Options:
628
+ 1. Provide plan file path manually
629
+ 2. Continue with basic verification (checking files and tests only)
630
+
631
+ Proceeding with basic verification...
632
+
633
+ 📊 PR Changes Summary:
634
+
635
+ Files Changed: 2
636
+ - Code files: 0
637
+ - Test files: 0
638
+ - Documentation files: 0
639
+ - Configuration files: 2
640
+
641
+ Lines: +15 -15
642
+
643
+ ---
644
+
645
+ ## 🔍 Basic Verification Report for Issue #45
646
+
647
+ **Issue**: Update dependencies
648
+ **PR**: #126 - Update dependencies
649
+ **Status**: open (draft)
650
+ **Plan**: No structured plan found
651
+
652
+ ---
653
+
654
+ ### Files Changed Analysis
655
+
656
+ **Configuration Files** (2 files):
657
+ - `package.json` (+12 -12)
658
+ - `package-lock.json` (+3 -3)
659
+
660
+ ---
661
+
662
+ ### Summary
663
+
664
+ - **Files Changed**: 2 files (0 code, 0 test, 0 doc, 2 config)
665
+ - **Tests Added**: 0 test files
666
+ - **Documentation**: No documentation changes
667
+
668
+ ### Overall Status
669
+
670
+ â„šī¸ **BASIC VERIFICATION** - No acceptance criteria to verify
671
+
672
+ ### Observations
673
+
674
+ 1. Dependencies were updated in package.json
675
+ 2. No code changes were made
676
+ 3. No tests were added (may not be needed for dependency updates)
677
+ 4. No documentation was updated
678
+
679
+ ### Recommendations
680
+
681
+ 1. Consider updating CHANGELOG.md to document dependency changes
682
+ 2. Verify that all tests pass with updated dependencies
683
+ 3. Check for any breaking changes in updated packages
684
+
685
+ ---
686
+
687
+ 📝 Post this verification to PR as a comment for @copilot to review? (y/n)
688
+ ```
689
+
690
+ ## Important Notes
691
+
692
+ ### Plan Parsing Strategy
693
+
694
+ Plans may have various formats. Be flexible when parsing:
695
+
696
+ - Look for common section headers (case-insensitive)
697
+ - Handle both `## Acceptance Criteria` and `### Acceptance Criteria`
698
+ - Parse checkboxes: `- [ ]`, `- [x]`, `* [ ]`, `* [x]`
699
+ - Extract numbered lists: `1.`, `2.`, etc.
700
+ - Handle nested lists and sub-items
701
+
702
+ ### Evidence Gathering
703
+
704
+ When checking if a criterion is met:
705
+
706
+ 1. **Read the criterion carefully** - understand what it's asking for
707
+ 2. **Look for direct evidence** - files, tests, or changes that directly address it
708
+ 3. **Check related files** - service files, utils, types that support the feature
709
+ 4. **Verify tests exist** - look for test files or test cases
710
+ 5. **Check documentation** - README, CHANGELOG, inline comments
711
+
712
+ ### Status Determination
713
+
714
+ Use clear, consistent criteria:
715
+
716
+ - ✅ **Met**: Unambiguous evidence that criterion is fully addressed
717
+ - âš ī¸ **Partial**: Some evidence but incomplete, unclear, or needs review
718
+ - ❌ **Missing**: No evidence found in PR changes
719
+ - â„šī¸ **Info**: Use for additional context or observations
720
+
721
+ ### Copilot Activity Detection
722
+
723
+ Check for signs that Copilot is still working:
724
+
725
+ - PR is in draft state
726
+ - Recent commits in the last hour
727
+ - PR description mentions "work in progress"
728
+ - Comments from Copilot indicating ongoing work
729
+
730
+ Warn users if verification might be premature.
731
+
732
+ ### PR Comment Formatting
733
+
734
+ When posting to PR, ensure:
735
+
736
+ - Use proper markdown formatting
737
+ - Include @copilot mention at the top
738
+ - Keep the format clean and readable
739
+ - Use emoji sparingly (GitHub renders them in comments)
740
+ - Include links to specific files when possible
741
+
742
+ ## Success Criteria
743
+
744
+ - ✅ Auto-detection finds issue number from chat or user input
745
+ - ✅ Issue details fetched successfully from GitHub
746
+ - ✅ PR found and linked to issue
747
+ - ✅ Plan parsed from issue body (or fallback to basic mode)
748
+ - ✅ PR changes analyzed and categorized
749
+ - ✅ Acceptance criteria mapped to evidence
750
+ - ✅ Comprehensive verification report generated
751
+ - ✅ Report displayed in chat with clear formatting
752
+ - ✅ Option to post to PR as comment (with @copilot mention)
753
+ - ✅ Graceful error handling for all failure scenarios
754
+ - ✅ Clear, actionable recommendations provided