forge-workflow 0.0.9 → 0.1.0-beta.2

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 (479) hide show
  1. package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
  2. package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
  3. package/.cursor/rules/permissions-guidance.mdc +2 -2
  4. package/.forge/hooks/check-tdd.js +3 -0
  5. package/.forge/hooks/forge-native-hook.js +245 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -106
  10. package/QUICKSTART.md +171 -0
  11. package/README.md +271 -363
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +466 -489
  15. package/docs/INDEX.md +93 -0
  16. package/docs/PROJECT_DESIGN.md +685 -0
  17. package/docs/architecture/index.md +66 -0
  18. package/docs/architecture/notes/README.md +35 -0
  19. package/docs/architecture/subsystems/README.md +46 -0
  20. package/docs/{TOOLCHAIN.md → forge/TOOLCHAIN.md} +56 -47
  21. package/docs/forge/VALIDATION.md +82 -0
  22. package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
  23. package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
  24. package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
  25. package/docs/guides/GREPTILE_SETUP.md +46 -0
  26. package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
  27. package/docs/guides/MIGRATION.md +56 -0
  28. package/docs/guides/SETUP.md +118 -0
  29. package/docs/guides/SUPPORT.md +185 -0
  30. package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
  31. package/docs/guides/memory-backends.md +183 -0
  32. package/docs/reference/ADAPTERS.md +128 -0
  33. package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
  34. package/docs/reference/COMMANDS.md +205 -0
  35. package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
  36. package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
  37. package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
  38. package/docs/reference/HERMES_INTEGRATION.md +118 -0
  39. package/docs/reference/INSIGHTS_RECAP.md +63 -0
  40. package/docs/reference/INSTALL.md +164 -0
  41. package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
  42. package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
  43. package/docs/reference/RELEASE.md +68 -0
  44. package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
  45. package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
  46. package/docs/reference/SKILLS.md +35 -0
  47. package/docs/reference/STATUS_BOARD.md +80 -0
  48. package/docs/reference/TEMPLATES.md +106 -0
  49. package/docs/reference/TOOLCHAIN.md +658 -0
  50. package/docs/reference/VALIDATION.md +82 -0
  51. package/docs/reference/agent-permissions.md +169 -0
  52. package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
  53. package/docs/reference/control-plane-guarantees.md +125 -0
  54. package/docs/reference/dependency-chain.md +331 -0
  55. package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
  56. package/docs/reference/forge-kernel-schema.md +72 -0
  57. package/docs/reference/kernel-conflict-evaluators.md +27 -0
  58. package/docs/reference/patch-md-format.md +77 -0
  59. package/docs/reference/protected-state-surfaces.md +59 -0
  60. package/docs/reference/shepherd.md +115 -0
  61. package/docs/reference/superpowers-analysis.md +320 -0
  62. package/docs/reference/superpowers-integration-options.md +404 -0
  63. package/docs/reference/test-environment.md +519 -0
  64. package/docs/reference/upgrade-safety.md +59 -0
  65. package/lefthook.yml +18 -0
  66. package/lib/adapter-cli.js +307 -0
  67. package/lib/adapters/beads-issue-adapter.js +127 -0
  68. package/lib/adapters/beads-kernel-compat.js +1042 -0
  69. package/lib/adapters/greptile-review-adapter.js +141 -0
  70. package/lib/adapters/kernel-issue-adapter.js +101 -0
  71. package/lib/adapters/pr-state-adapter.js +484 -0
  72. package/lib/adoption-profiles.js +126 -0
  73. package/lib/agents/README.md +2 -6
  74. package/lib/agents/claude.plugin.json +3 -8
  75. package/lib/agents/codex.plugin.json +9 -1
  76. package/lib/agents/cursor.plugin.json +2 -6
  77. package/lib/agents/hermes.plugin.json +22 -0
  78. package/lib/agents-config.js +39 -1236
  79. package/lib/audit-evidence.js +282 -0
  80. package/lib/beads-setup.js +225 -28
  81. package/lib/beads-sync-scaffold.js +36 -107
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +744 -70
  84. package/lib/commands/_manifest.js +91 -0
  85. package/lib/commands/_registry.js +85 -34
  86. package/lib/commands/_resolve-command-opts.js +261 -0
  87. package/lib/commands/_serve-security.js +270 -0
  88. package/lib/commands/adapter.js +12 -0
  89. package/lib/commands/add.js +118 -0
  90. package/lib/commands/audit.js +70 -0
  91. package/lib/commands/blocked.js +5 -0
  92. package/lib/commands/board.js +64 -0
  93. package/lib/commands/claim.js +21 -2
  94. package/lib/commands/claims.js +7 -0
  95. package/lib/commands/clean.js +485 -75
  96. package/lib/commands/close.js +2 -2
  97. package/lib/commands/comment.js +5 -0
  98. package/lib/commands/control.js +148 -0
  99. package/lib/commands/create.js +2 -2
  100. package/lib/commands/dev.js +185 -7
  101. package/lib/commands/doc-gate.js +336 -0
  102. package/lib/commands/doctor.js +156 -0
  103. package/lib/commands/explain.js +15 -0
  104. package/lib/commands/export.js +237 -0
  105. package/lib/commands/gate.js +192 -0
  106. package/lib/commands/hooks.js +242 -0
  107. package/lib/commands/inbox.js +118 -0
  108. package/lib/commands/init.js +598 -0
  109. package/lib/commands/insights.js +79 -0
  110. package/lib/commands/issue.js +12 -1
  111. package/lib/commands/issues.js +66 -0
  112. package/lib/commands/lint.js +5 -0
  113. package/lib/commands/list.js +2 -2
  114. package/lib/commands/merge.js +312 -0
  115. package/lib/commands/migrate.js +523 -0
  116. package/lib/commands/new.js +12 -0
  117. package/lib/commands/options.js +241 -0
  118. package/lib/commands/orient.js +13 -0
  119. package/lib/commands/orphans.js +5 -0
  120. package/lib/commands/patch.js +67 -0
  121. package/lib/commands/plan.js +436 -24
  122. package/lib/commands/preflight.js +211 -0
  123. package/lib/commands/prime.js +13 -0
  124. package/lib/commands/push.js +69 -2
  125. package/lib/commands/ready.js +2 -2
  126. package/lib/commands/recall.js +116 -0
  127. package/lib/commands/recap.js +61 -0
  128. package/lib/commands/recommend.js +22 -2
  129. package/lib/commands/release.js +91 -0
  130. package/lib/commands/remember.js +74 -0
  131. package/lib/commands/role.js +99 -0
  132. package/lib/commands/serve.js +581 -0
  133. package/lib/commands/setup.js +851 -979
  134. package/lib/commands/shepherd.js +436 -0
  135. package/lib/commands/ship.js +23 -1
  136. package/lib/commands/show.js +2 -2
  137. package/lib/commands/stage.js +192 -0
  138. package/lib/commands/stale.js +5 -0
  139. package/lib/commands/status.js +329 -11
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +15 -2
  142. package/lib/commands/test.js +58 -7
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +56 -25
  146. package/lib/commands/worktree.js +308 -128
  147. package/lib/config-writer.js +202 -0
  148. package/lib/control-plane.js +236 -0
  149. package/lib/core/runtime-graph.js +946 -0
  150. package/lib/dep-guard/keyword-ripple.js +184 -0
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +42 -17
  154. package/lib/doc-gate/declaration.js +177 -0
  155. package/lib/doc-gate/detect.js +289 -0
  156. package/lib/doc-gate/gate.js +375 -0
  157. package/lib/doc-gate/okf-config.js +128 -0
  158. package/lib/doc-gate/okf.js +429 -0
  159. package/lib/docs-command.js +1161 -6
  160. package/lib/forge-issues.js +697 -0
  161. package/lib/forge-lock.js +262 -0
  162. package/lib/gate-events.js +193 -0
  163. package/lib/global-flags.js +74 -0
  164. package/lib/greptile-match.js +7 -63
  165. package/lib/harness-capability-matrix.js +380 -0
  166. package/lib/hook-global-installer.js +347 -0
  167. package/lib/hook-renderer.js +451 -0
  168. package/lib/inbox.js +391 -0
  169. package/lib/insights.js +397 -0
  170. package/lib/issue-adapter.js +156 -0
  171. package/lib/issue-backend.js +145 -0
  172. package/lib/issue-render.js +220 -0
  173. package/lib/issue-sync/authority.js +100 -0
  174. package/lib/issue-sync/github-pull.js +184 -0
  175. package/lib/issue-sync/import-primitives.js +98 -0
  176. package/lib/issue-sync/legacy-link-bridge.js +436 -0
  177. package/lib/issue-sync/link-store.js +292 -0
  178. package/lib/issue-sync/project-github.js +123 -0
  179. package/lib/issue-sync/reconcile.js +195 -0
  180. package/lib/issue-sync/schema.js +126 -0
  181. package/lib/kernel/backing-issue.js +305 -0
  182. package/lib/kernel/broker.js +1218 -0
  183. package/lib/kernel/cli-broker-factory.js +130 -0
  184. package/lib/kernel/conflict-signal.js +82 -0
  185. package/lib/kernel/evaluators.js +195 -0
  186. package/lib/kernel/fs-class.js +495 -0
  187. package/lib/kernel/issue-command-contract.js +559 -0
  188. package/lib/kernel/issue-id-resolver.js +186 -0
  189. package/lib/kernel/lease-enforcer.js +158 -0
  190. package/lib/kernel/migrations.js +333 -0
  191. package/lib/kernel/planning-buckets-schema.js +109 -0
  192. package/lib/kernel/projection-jsonl-writer.js +450 -0
  193. package/lib/kernel/readiness-model.js +329 -0
  194. package/lib/kernel/schema.js +356 -0
  195. package/lib/kernel/sqlite-driver.js +2504 -0
  196. package/lib/kernel/taxonomy-validator.js +394 -0
  197. package/lib/lefthook-check.js +8 -4
  198. package/lib/lefthook-wiring.js +413 -0
  199. package/lib/mcp-config-renderer.js +288 -0
  200. package/lib/memory/graphiti-mcp.js +106 -0
  201. package/lib/memory/router.js +387 -0
  202. package/lib/memory/typed-api.js +102 -0
  203. package/lib/memory-digest.js +195 -0
  204. package/lib/merge-rules.js +395 -0
  205. package/lib/migrate-dry-run.js +466 -0
  206. package/lib/orientation.js +863 -0
  207. package/lib/package-manager-remediation.js +103 -0
  208. package/lib/package-root.js +381 -0
  209. package/lib/patch-intent.js +890 -0
  210. package/lib/plugin-catalog.js +3 -4
  211. package/lib/plugin-manager.js +0 -5
  212. package/lib/pr-bundle.js +186 -0
  213. package/lib/pr-monitor/differ.js +195 -0
  214. package/lib/pr-monitor/events.js +0 -0
  215. package/lib/pr-monitor/gather.js +124 -0
  216. package/lib/pr-monitor/journal.js +299 -0
  217. package/lib/pr-monitor/monitor.js +146 -0
  218. package/lib/pr-monitor/render-sticky.js +157 -0
  219. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  220. package/lib/pr-monitor/watch.js +247 -0
  221. package/lib/pr-pull.js +1273 -0
  222. package/lib/pr-shepherd.js +494 -0
  223. package/lib/pr-state-validator.js +59 -0
  224. package/lib/preflight/gates.js +237 -0
  225. package/lib/preflight/runner.js +116 -0
  226. package/lib/project-discovery.js +0 -53
  227. package/lib/project-memory.js +166 -0
  228. package/lib/protected-path-manifest.js +281 -0
  229. package/lib/protected-state-surfaces.js +387 -0
  230. package/lib/release-readiness.js +2089 -0
  231. package/lib/reset.js +59 -45
  232. package/lib/review-adapter.js +68 -0
  233. package/lib/rules-sync.js +260 -0
  234. package/lib/runtime-health.js +332 -23
  235. package/lib/safety-config-renderer.js +268 -0
  236. package/lib/setup-action-log.js +1 -7
  237. package/lib/setup.js +27 -65
  238. package/lib/shell-utils.js +76 -6
  239. package/lib/skills-sync.js +330 -0
  240. package/lib/smart-status/conflicts.js +205 -0
  241. package/lib/smart-status/scoring.js +191 -0
  242. package/lib/status/beads-snapshot.js +145 -0
  243. package/lib/status/presenter.js +216 -0
  244. package/lib/status/snapshot.js +186 -0
  245. package/lib/sync-backend.js +202 -0
  246. package/lib/untrusted-content.js +52 -0
  247. package/lib/upgrade-safety.js +199 -0
  248. package/lib/workflow/enforce-stage.js +298 -47
  249. package/lib/workflow/stage-transition.js +115 -0
  250. package/lib/workflow/stages.js +30 -6
  251. package/lib/workflow/state-manager.js +159 -14
  252. package/lib/workflow/state.js +23 -1
  253. package/lib/workflow-profiles.js +17 -5
  254. package/package.json +46 -36
  255. package/rules/documentation.md +19 -0
  256. package/rules/kernel-tracking.md +26 -0
  257. package/rules/security.md +22 -0
  258. package/rules/tdd.md +20 -0
  259. package/rules/workflow.md +27 -0
  260. package/scripts/auto-backing-issue.js +47 -0
  261. package/scripts/beads-context.sh +165 -22
  262. package/scripts/beads-migrate-to-dolt.sh +7 -0
  263. package/scripts/beads-upgrade-smoke.sh +284 -0
  264. package/scripts/behavioral-judge.sh +115 -11
  265. package/scripts/benchmark.js +349 -63
  266. package/scripts/bootstrap-windows-tools.sh +78 -0
  267. package/scripts/branch-protection.js +2 -3
  268. package/scripts/check-agents.js +34 -137
  269. package/scripts/commitlint.js +3 -1
  270. package/scripts/conflict-detect.sh +3 -0
  271. package/scripts/dep-guard-analyze.js +52 -17
  272. package/scripts/dep-guard-keyword-ripple.js +29 -0
  273. package/scripts/dep-guard-render-review.js +86 -0
  274. package/scripts/dep-guard.sh +64 -232
  275. package/scripts/file-index.sh +3 -0
  276. package/scripts/forge-team/lib/claim.sh +34 -18
  277. package/scripts/forge-team/lib/dashboard.sh +61 -86
  278. package/scripts/forge-team/lib/epic.sh +99 -263
  279. package/scripts/forge-team/lib/hooks.sh +26 -28
  280. package/scripts/forge-team/lib/identity.sh +4 -4
  281. package/scripts/forge-team/lib/sync-github.sh +144 -47
  282. package/scripts/forge-team/lib/verify.sh +93 -83
  283. package/scripts/forge-team/lib/workload.sh +41 -65
  284. package/scripts/forge-team/tests/claim.test.sh +25 -19
  285. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  286. package/scripts/forge-team/tests/epic.test.sh +52 -71
  287. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  288. package/scripts/forge-team/tests/identity.test.sh +3 -3
  289. package/scripts/forge-team/tests/integration.test.sh +44 -66
  290. package/scripts/forge-team/tests/sync-github.test.sh +183 -79
  291. package/scripts/forge-team/tests/verify.test.sh +37 -46
  292. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  293. package/scripts/forge-team/tests/workload.test.sh +32 -66
  294. package/scripts/gen-command-manifest.js +153 -0
  295. package/scripts/gen-embedded-assets.mjs +129 -0
  296. package/scripts/install.ps1 +139 -0
  297. package/scripts/install.sh +268 -0
  298. package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
  299. package/scripts/lib/release-asset.mjs +84 -0
  300. package/scripts/parity-check.mjs +145 -0
  301. package/scripts/parity-check.test.mjs +58 -0
  302. package/scripts/pin-agentic-workflow-images.js +112 -0
  303. package/scripts/pr-coordinator.sh +3 -0
  304. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  305. package/scripts/preflight.sh +108 -0
  306. package/scripts/protected-state-check.js +104 -0
  307. package/scripts/smart-status-score.js +31 -0
  308. package/scripts/smart-status-sessions.js +51 -0
  309. package/scripts/smart-status.sh +117 -369
  310. package/scripts/spikes/config-race-bench.js +111 -0
  311. package/scripts/spikes/harness-capability-matrix.js +13 -0
  312. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  313. package/scripts/spikes/protected-path-manifest.js +20 -0
  314. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  315. package/scripts/sync-agent-skills.js +62 -0
  316. package/scripts/sync-agentic-workflow.js +48 -0
  317. package/scripts/sync-utils.sh +3 -0
  318. package/scripts/test-ci-shard.js +251 -0
  319. package/scripts/test-dashboard.js +188 -52
  320. package/scripts/test-full-suite.js +186 -0
  321. package/scripts/test-profile.js +278 -0
  322. package/scripts/test.js +302 -28
  323. package/scripts/validate.js +143 -0
  324. package/scripts/validate.sh +18 -1
  325. package/skills/claim-safety/SKILL.md +102 -0
  326. package/skills/claim-safety/evals/evals.json +46 -0
  327. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +46 -52
  328. package/skills/dev/evals/evals.json +50 -0
  329. package/skills/hermes-forge/SKILL.md +185 -0
  330. package/skills/hermes-forge/evals/evals.json +46 -0
  331. package/skills/issue-basics/SKILL.md +111 -0
  332. package/skills/issue-basics/evals/evals.json +46 -0
  333. package/skills/kernel/SKILL.md +166 -0
  334. package/skills/kernel/evals/evals.json +50 -0
  335. package/skills/memory/SKILL.md +102 -0
  336. package/skills/parallel-deep-research/SKILL.md +14 -11
  337. package/skills/parallel-deep-research/evals/evals.json +11 -27
  338. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +134 -159
  339. package/skills/plan/evals/evals.json +42 -0
  340. package/skills/research/SKILL.md +195 -0
  341. package/skills/research/evals/evals.json +42 -0
  342. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  343. package/skills/review/evals/evals.json +42 -0
  344. package/skills/rollback/SKILL.md +110 -0
  345. package/skills/rollback/evals/evals.json +46 -0
  346. package/skills/rollback/references/methods.md +204 -0
  347. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  348. package/skills/shepherd/SKILL.md +66 -0
  349. package/skills/shepherd/evals/evals.json +42 -0
  350. package/skills/ship/SKILL.md +251 -0
  351. package/skills/ship/evals/evals.json +42 -0
  352. package/skills/smith/SKILL.md +142 -0
  353. package/skills/smith/evals/evals.json +46 -0
  354. package/skills/smith/references/autonomy-and-gates.md +94 -0
  355. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  356. package/skills/sonarcloud/evals/evals.json +46 -0
  357. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  358. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  359. package/skills/status/SKILL.md +102 -0
  360. package/skills/status/evals/evals.json +50 -0
  361. package/skills/triage-ready/SKILL.md +121 -0
  362. package/skills/triage-ready/evals/evals.json +42 -0
  363. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  364. package/skills/validate/evals/evals.json +42 -0
  365. package/skills/verify/SKILL.md +299 -0
  366. package/skills/verify/evals/evals.json +50 -0
  367. package/.claude/commands/dev.md +0 -345
  368. package/.claude/commands/plan.md +0 -566
  369. package/.claude/commands/premerge.md +0 -186
  370. package/.claude/commands/research.md +0 -42
  371. package/.claude/commands/review.md +0 -451
  372. package/.claude/commands/rollback.md +0 -721
  373. package/.claude/commands/ship.md +0 -213
  374. package/.claude/commands/sonarcloud.md +0 -152
  375. package/.claude/commands/status.md +0 -90
  376. package/.claude/commands/validate.md +0 -288
  377. package/.claude/commands/verify.md +0 -269
  378. package/.claude/rules/workflow.md +0 -121
  379. package/.cline/workflows/dev.md +0 -342
  380. package/.cline/workflows/plan.md +0 -563
  381. package/.cline/workflows/premerge.md +0 -183
  382. package/.cline/workflows/research.md +0 -39
  383. package/.cline/workflows/review.md +0 -448
  384. package/.cline/workflows/rollback.md +0 -718
  385. package/.cline/workflows/ship.md +0 -210
  386. package/.cline/workflows/sonarcloud.md +0 -146
  387. package/.cline/workflows/status.md +0 -87
  388. package/.cline/workflows/validate.md +0 -285
  389. package/.cline/workflows/verify.md +0 -266
  390. package/.codex/config.toml +0 -11
  391. package/.codex/skills/dev/SKILL.md +0 -345
  392. package/.codex/skills/plan/SKILL.md +0 -566
  393. package/.codex/skills/premerge/SKILL.md +0 -186
  394. package/.codex/skills/research/SKILL.md +0 -42
  395. package/.codex/skills/review/SKILL.md +0 -451
  396. package/.codex/skills/rollback/SKILL.md +0 -721
  397. package/.codex/skills/ship/SKILL.md +0 -213
  398. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  399. package/.codex/skills/status/SKILL.md +0 -90
  400. package/.codex/skills/validate/SKILL.md +0 -288
  401. package/.codex/skills/verify/SKILL.md +0 -269
  402. package/.cursor/commands/dev.md +0 -342
  403. package/.cursor/commands/plan.md +0 -563
  404. package/.cursor/commands/premerge.md +0 -183
  405. package/.cursor/commands/research.md +0 -39
  406. package/.cursor/commands/review.md +0 -448
  407. package/.cursor/commands/ship.md +0 -210
  408. package/.cursor/commands/sonarcloud.md +0 -146
  409. package/.cursor/commands/status.md +0 -87
  410. package/.cursor/commands/validate.md +0 -285
  411. package/.cursor/commands/verify.md +0 -266
  412. package/.cursorrules +0 -149
  413. package/.github/prompts/premerge.prompt.md +0 -188
  414. package/.github/prompts/research.prompt.md +0 -44
  415. package/.github/prompts/rollback.prompt.md +0 -723
  416. package/.github/prompts/ship.prompt.md +0 -215
  417. package/.github/prompts/status.prompt.md +0 -92
  418. package/.github/prompts/verify.prompt.md +0 -271
  419. package/.github/workflows/beads-to-github.yml +0 -56
  420. package/.github/workflows/github-to-beads.yml +0 -97
  421. package/.kilocode/workflows/dev.md +0 -346
  422. package/.kilocode/workflows/plan.md +0 -567
  423. package/.kilocode/workflows/premerge.md +0 -187
  424. package/.kilocode/workflows/research.md +0 -43
  425. package/.kilocode/workflows/review.md +0 -452
  426. package/.kilocode/workflows/rollback.md +0 -722
  427. package/.kilocode/workflows/ship.md +0 -214
  428. package/.kilocode/workflows/sonarcloud.md +0 -150
  429. package/.kilocode/workflows/status.md +0 -91
  430. package/.kilocode/workflows/validate.md +0 -289
  431. package/.kilocode/workflows/verify.md +0 -270
  432. package/.opencode/commands/dev.md +0 -345
  433. package/.opencode/commands/plan.md +0 -566
  434. package/.opencode/commands/premerge.md +0 -186
  435. package/.opencode/commands/research.md +0 -42
  436. package/.opencode/commands/review.md +0 -451
  437. package/.opencode/commands/rollback.md +0 -721
  438. package/.opencode/commands/ship.md +0 -213
  439. package/.opencode/commands/sonarcloud.md +0 -149
  440. package/.opencode/commands/status.md +0 -90
  441. package/.opencode/commands/validate.md +0 -288
  442. package/.opencode/commands/verify.md +0 -269
  443. package/.roo/commands/dev.md +0 -346
  444. package/.roo/commands/plan.md +0 -567
  445. package/.roo/commands/premerge.md +0 -187
  446. package/.roo/commands/research.md +0 -43
  447. package/.roo/commands/review.md +0 -452
  448. package/.roo/commands/rollback.md +0 -722
  449. package/.roo/commands/ship.md +0 -214
  450. package/.roo/commands/sonarcloud.md +0 -150
  451. package/.roo/commands/status.md +0 -91
  452. package/.roo/commands/validate.md +0 -289
  453. package/.roo/commands/verify.md +0 -270
  454. package/docs/BEADS_GITHUB_SYNC.md +0 -255
  455. package/docs/GREPTILE_SETUP.md +0 -400
  456. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  457. package/docs/SETUP.md +0 -663
  458. package/docs/VALIDATION.md +0 -363
  459. package/lib/agents/cline.plugin.json +0 -29
  460. package/lib/agents/copilot.plugin.json +0 -24
  461. package/lib/agents/kilocode.plugin.json +0 -22
  462. package/lib/agents/opencode.plugin.json +0 -23
  463. package/lib/agents/roo.plugin.json +0 -30
  464. package/lib/beads-health-check.js +0 -143
  465. package/lib/commands/commands-reset.js +0 -147
  466. package/opencode.json +0 -67
  467. package/scripts/beads-context.test.js +0 -567
  468. package/scripts/github-beads-sync/comment.mjs +0 -64
  469. package/scripts/github-beads-sync/config.mjs +0 -148
  470. package/scripts/github-beads-sync/github-api.mjs +0 -131
  471. package/scripts/github-beads-sync/index.mjs +0 -332
  472. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  473. package/scripts/github-beads-sync/mapping.mjs +0 -78
  474. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  475. package/scripts/github-beads-sync/reverse-sync.mjs +0 -138
  476. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  477. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  478. package/scripts/github-beads-sync.config.json +0 -26
  479. package/scripts/sync-commands.js +0 -600
@@ -1,215 +0,0 @@
1
- ---
2
- name: ship
3
- description: Create PR with comprehensive documentation
4
- tools: []
5
- ---
6
-
7
- Push code and create a pull request with full context and documentation links.
8
-
9
- # Ship
10
-
11
- This command creates a PR after validation passes.
12
-
13
- ## Usage
14
-
15
- ```bash
16
- /ship
17
- ```
18
-
19
- ```
20
- <HARD-GATE: /ship entry>
21
- Do NOT create PR until:
22
- 1. /validate was run in this session with all four outputs shown (type, lint, tests, security)
23
- 2. All checks confirmed passing — not assumed, not "was passing earlier"
24
- 3. Beads issue is in_progress
25
- 4. git branch --show-current output is NOT main or master
26
- </HARD-GATE>
27
- ```
28
-
29
- ## What This Command Does
30
-
31
- ### Step 1: Verify /validate Passed
32
- Ensure all four validation checks completed successfully with fresh output in this session.
33
-
34
- ### Step 2: Freshness Check — Is Branch Still Current?
35
-
36
- Even though /validate rebased onto the base branch, time may have passed since then (user reviewed design doc, took a break, etc.). This lightweight check catches staleness before pushing.
37
-
38
- ```bash
39
- BASE=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | awk '{print $NF}')
40
- if [ -z "$BASE" ] || [ "$BASE" = "(unknown)" ]; then BASE="master"; fi
41
- git fetch origin "$BASE" || { echo "✗ Fetch failed — cannot verify freshness"; exit 1; }
42
- BEHIND=$(git rev-list --count HEAD..origin/"$BASE")
43
- ```
44
-
45
- - If `BEHIND > 0`: **STOP**. Print: "$BASE has advanced since /validate ($BEHIND new commits). Run /validate again to rebase and re-check."
46
- - If `BEHIND = 0`: Continue to push.
47
- - If fetch fails: the `|| { ...; exit 1; }` guard catches this — **STOP**. Do NOT push without confirming freshness.
48
-
49
- This is NOT a full rebase — just a check. The rebase happens in /validate where the full test suite runs afterward.
50
-
51
- ### Parallel PR coordination (soft block)
52
-
53
- Before creating the PR, check merge readiness:
54
-
55
- ```bash
56
- # Run merge simulation against base branch
57
- bash scripts/pr-coordinator.sh merge-sim "$(git branch --show-current)" 2>&1
58
-
59
- # Show recommended merge order
60
- bash scripts/pr-coordinator.sh merge-order 2>&1 || true
61
-
62
- # Auto-label the PR after creation (called after gh pr create below)
63
- # bash scripts/pr-coordinator.sh auto-label <issue-id>
64
- ```
65
-
66
- If merge simulation finds conflicts:
67
- - Display conflicted files
68
- - Ask: "Merge conflicts detected with base branch. These PRs should merge first: [list]. Proceed with PR creation anyway? (y/n)"
69
- - If `n`: exit cleanly
70
- - If `y`: log override via `bd comments add <id> "Ship override: creating PR despite merge conflicts"`, then continue
71
-
72
- After PR creation completes:
73
- ```bash
74
- # Auto-label the newly created PR
75
- bash scripts/pr-coordinator.sh auto-label <issue-id>
76
-
77
- # Check for stale worktrees (informational)
78
- bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
79
- ```
80
-
81
- ### Step 3: Update Beads
82
- ```bash
83
- bd update <id> --status done
84
- bd sync
85
- ```
86
-
87
- ### Step 4: Push Branch
88
-
89
- Use `--force-with-lease` because `/validate` may have rebased the branch, rewriting history. This is safe: it only forces the push if the remote branch hasn't been updated by someone else since the last fetch.
90
-
91
- ```bash
92
- git push --force-with-lease -u origin <branch-name>
93
- ```
94
-
95
- ### Step 5: Create PR Using Project's PR Template
96
-
97
- **CRITICAL**: Always use the project's own PR template. Never use a hardcoded body.
98
-
99
- **Step 5a: Locate the PR template**
100
-
101
- Check for a PR template in the project (in order of precedence):
102
- ```bash
103
- # Check standard locations
104
- PR_TEMPLATE=""
105
- for path in .github/pull_request_template.md .github/PULL_REQUEST_TEMPLATE.md docs/pull_request_template.md pull_request_template.md; do
106
- if [ -f "$path" ]; then
107
- PR_TEMPLATE="$path"
108
- break
109
- fi
110
- done
111
- ```
112
-
113
- **Step 5b: Read and populate the template**
114
-
115
- If a PR template exists:
116
- 1. **Read the template file** using the Read tool
117
- 2. **Fill in every section** with actual data from the current PR context:
118
- - Replace HTML comments (`<!-- ... -->`) with real content
119
- - Check applicable checkboxes (`- [x]`)
120
- - Fill in beads issue IDs (replace `beads-xxx` with actual ID)
121
- - Fill in test results, validation status, and other concrete data
122
- - Reference the design doc: `docs/plans/YYYY-MM-DD-<slug>-design.md`
123
- 3. **Do NOT remove any sections** — fill them all, even if "N/A"
124
- 4. **Do NOT restructure the template** — keep the project's chosen format
125
-
126
- If no PR template exists, use this minimal fallback:
127
- ```
128
- ## Summary
129
- [1-3 sentences: what this PR does and why]
130
-
131
- ## Changes
132
- [Bulleted list of key changes]
133
-
134
- ## Testing
135
- [How it was tested, test results]
136
-
137
- ## Beads
138
- Closes beads-xxx
139
-
140
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
141
- ```
142
-
143
- **Step 5c: Create the PR**
144
-
145
- ```bash
146
- gh pr create --title "<type>: <concise description>" --body "<populated-template-content>"
147
- ```
148
-
149
- Rules for the PR body:
150
- - **Use the project's template structure** — never substitute your own format
151
- - **Fill in concrete data** — commit counts, test results, actual file paths, real beads IDs
152
- - **Check applicable checkboxes** — `[x]` for items that apply, `[ ]` for items that don't
153
- - **Include "Closes beads-xxx"** in the Beads section (required for auto-close in /verify)
154
-
155
- ### Step 6: Validate Context and Record Stage Transition
156
- ```bash
157
- bash scripts/beads-context.sh validate <id>
158
- bash scripts/beads-context.sh stage-transition <id> ship review \
159
- --summary "<PR created, checks pending>" \
160
- --decisions "<template sections filled, beads linked>" \
161
- --artifacts "<PR URL, branch name>" \
162
- --next "<review focus areas>"
163
- ```
164
-
165
- ### Team sync after PR
166
-
167
- After PR is created, sync issue state to GitHub and verify 1:1 mapping:
168
-
169
- ```bash
170
- # Sync issue state to GitHub
171
- bash scripts/forge-team/index.sh sync 2>&1 || true
172
-
173
- # Verify 1:1 mapping
174
- bash scripts/forge-team/index.sh verify 2>&1 || true
175
- ```
176
-
177
- ## Example Output
178
-
179
- ```
180
- ✓ Validation: /validate passed (all 4 checks — fresh output confirmed)
181
- ✓ Freshness: Branch is up-to-date with master
182
- ✓ Beads: Marked done & synced (forge-xyz)
183
- ✓ Pushed: feat/stripe-billing
184
- ✓ PR created: https://github.com/.../pull/123
185
- - PR body: Problem → Root Cause → Fix → Value (narrative format)
186
- - Beads linked: forge-xyz
187
- - Implementation details in collapsible section
188
-
189
- ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
190
- Poll for up to 60 seconds. If checks are still pending, stop here.
191
-
192
- Next: /review <pr-number> (when automated checks complete or new feedback appears)
193
- ```
194
-
195
- ## Integration with Workflow
196
-
197
- ```
198
- Utility: /status → Understand current context before starting
199
- Stage 1: /plan → Design intent → research → branch + worktree + task list
200
- Stage 2: /dev → Implement each task with subagent-driven TDD
201
- Stage 3: /validate → Type check, lint, tests, security — all fresh output
202
- Stage 4: /ship → Push + create PR (you are here)
203
- Stage 5: /review → Address GitHub Actions, Greptile, SonarCloud
204
- Stage 6: /premerge → Update docs, hand off PR to user
205
- Stage 7: /verify → Post-merge CI check on main
206
- ```
207
-
208
- ## Tips
209
-
210
- - **Use the project's PR template**: Always read `.github/pull_request_template.md` (or equivalent) and populate it — never substitute your own format
211
- - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
212
- - **Include "Closes beads-xxx"**: Required for auto-close in /verify
213
- - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
214
- - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
215
- - **NO auto-merge**: Always wait for /review phase
@@ -1,92 +0,0 @@
1
- ---
2
- name: status
3
- description: Check current stage and context
4
- tools: []
5
- ---
6
-
7
- Check where you are in the project and what work is in progress.
8
-
9
- # Status Check
10
-
11
- This command helps you understand the current state of the project before starting new work.
12
-
13
- ## Usage
14
-
15
- ```bash
16
- /status
17
- ```
18
-
19
- ## What This Command Does
20
-
21
- ## Step 0: Sync team state
22
-
23
- ```bash
24
- # Sync team state before showing status
25
- bash scripts/sync-utils.sh auto-sync
26
- ```
27
-
28
- ### Step 1: Smart Status (ranked issues with conflict detection)
29
-
30
- ```bash
31
- bash scripts/smart-status.sh
32
- ```
33
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
34
-
35
- For full context on any issue: `bd show <id>`
36
-
37
- ### Step 1b: Reconcile stale in-progress issues
38
-
39
- Check if any in-progress issues were already merged but not closed (can happen if `/verify` was skipped or backup was restored from stale snapshot):
40
-
41
- ```bash
42
- # Detect default branch dynamically (prefer main over master)
43
- DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
44
- if [ -z "$DEFAULT_BRANCH" ]; then
45
- if git rev-parse --verify main >/dev/null 2>&1; then DEFAULT_BRANCH="main"
46
- elif git rev-parse --verify master >/dev/null 2>&1; then DEFAULT_BRANCH="master"
47
- else echo "ERROR: No main or master branch found — skipping stale reconciliation" >&2; DEFAULT_BRANCH=""; fi
48
- fi
49
-
50
- # For each in_progress issue, check if its PR was already merged
51
- if [ -n "$DEFAULT_BRANCH" ]; then
52
- bd list --status=in_progress --json 2>/dev/null | jq -r '.[].id' | while read id; do
53
- # Search git log for the issue ID in commit messages (fixed-strings for literal match)
54
- if git log --oneline --first-parent "$DEFAULT_BRANCH" --fixed-strings --grep="$id" | grep -q .; then
55
- echo "STALE: $id — found in git history, likely already merged"
56
- fi
57
- done
58
- fi
59
- ```
60
-
61
- If stale issues are found, close them:
62
- ```bash
63
- bd close <id> --force --reason="Already merged — detected during status reconciliation"
64
- ```
65
-
66
- ### Step 2: Review Recent Commits
67
- ```bash
68
- git log --oneline -10
69
- ```
70
-
71
- ### Step 3: Determine Context
72
- - **New feature**: No active work, ready to start fresh
73
- - **Continuing work**: In-progress issues found, resume where left off
74
- - **Review needed**: Work marked complete, needs review/merge
75
-
76
- ### Team context
77
-
78
- Show current developer's active work and team overview:
79
-
80
- ```bash
81
- # Show my active issues
82
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
83
-
84
- # One-line team summary
85
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
86
- ```
87
-
88
- ## Next Steps
89
-
90
- - **If starting new work**: Run `/plan <feature-name>`
91
- - **If continuing work**: Resume with appropriate phase command
92
- - **If reviewing**: Run `/review <pr-number>` or `/premerge <pr-number>`
@@ -1,271 +0,0 @@
1
- ---
2
- name: verify
3
- description: Post-merge health check — confirm merge landed, CI is clean, deployments are up
4
- tools: []
5
- ---
6
-
7
- Verify that the merge landed correctly and everything is running properly after merge.
8
-
9
- # Verify
10
-
11
- This command runs AFTER the user has merged the PR. It checks system health — not documentation (that was handled in `/premerge`).
12
-
13
- ## Usage
14
-
15
- ```bash
16
- /verify
17
- ```
18
-
19
- ## What This Command Does
20
-
21
- ### Step 1: Switch to Main and Pull
22
-
23
- ```bash
24
- git checkout master
25
- git pull
26
- ```
27
-
28
- Confirm the merge actually landed on main. If the PR isn't merged yet, stop and tell the user to merge first.
29
-
30
- ### Step 2: Confirm PR Is Merged
31
-
32
- Detect the most recently merged PR from the current HEAD commit:
33
-
34
- ```bash
35
- gh pr list --state merged --base master --limit 1 --json number,state,mergedAt,mergedBy
36
- ```
37
-
38
- - `state` should be `MERGED`
39
- - If no PR found: the merge may not have landed yet — stop and tell the user to merge first
40
- - If the wrong PR appears: user can specify the number directly with `gh pr view <number> --json state,mergedAt,mergedBy`
41
-
42
- ### Step 3: Check CI on Main After Merge
43
-
44
- ```bash
45
- gh run list --branch master --limit 5
46
- ```
47
-
48
- Check the most recent workflow runs on `master`:
49
- - All should be passing or in progress
50
- - If any failed: identify which workflow and what failed
51
- - Failed CI on main after merge may need a hotfix PR
52
-
53
- ### Step 4: Check Deployments (if applicable)
54
-
55
- Check if the project has a deployment target:
56
-
57
- ```bash
58
- # Check deployment status from latest run
59
- gh run list --branch master --limit 1
60
-
61
- # Check Vercel deployments for the merged PR (use number from Step 2)
62
- gh pr view <number> --json deployments
63
- ```
64
-
65
- If deployments exist:
66
- - Are they showing as successful?
67
- - Is the production/preview URL responding?
68
-
69
- ### Step 5: Report Status
70
-
71
- **If everything is clean**:
72
- ```
73
- ✅ Merge verified — everything is healthy
74
-
75
- PR: #<number> merged by <user> at <time>
76
- CI on master: ✓ All passing
77
- Deployments: ✓ Up (if applicable)
78
-
79
- Ready for next feature → run /status
80
- ```
81
-
82
- **If issues found**:
83
- ```
84
- ⚠️ Post-merge issues detected
85
-
86
- PR: #<number> merged ✓
87
- CI on master: ✗ <workflow-name> failing
88
- - Error: <description>
89
- - Action needed: <hotfix or investigation>
90
-
91
- Deployments: ✗ <deployment> not responding
92
-
93
- Next: Create hotfix branch or investigate root cause
94
- ```
95
-
96
- ### Step 6: Clean Up Worktree and Branch
97
-
98
- Only run this step after CI is confirmed healthy (Step 3 passed).
99
-
100
- Get the merged branch name:
101
-
102
- ```bash
103
- gh pr view <number> --json headRefName --jq '.headRefName'
104
- ```
105
-
106
- If the branch name cannot be determined (empty output or error), skip cleanup and tell the user to run `git worktree list` and clean up manually.
107
-
108
- Find and remove the matching worktree (if it exists):
109
-
110
- ```bash
111
- # Get the worktree path for this exact branch
112
- WORKTREE_PATH=$(git worktree list --porcelain \
113
- | awk -v branch="refs/heads/<branch>" '
114
- /^worktree / { path=substr($0, 10) }
115
- $0 == "branch " branch { print path }
116
- ')
117
-
118
- if [ -n "$WORKTREE_PATH" ]; then
119
- git worktree remove "$WORKTREE_PATH" --force
120
- echo "Worktree: removed ✓ ($WORKTREE_PATH)"
121
- else
122
- echo "Worktree: not found (already removed or never created) — skipping"
123
- fi
124
- ```
125
-
126
- If no worktree is found for that branch, skip gracefully with a note: "Worktree: not found (already removed or never created)".
127
-
128
- Delete the local branch (safe delete only):
129
-
130
- ```bash
131
- git branch -d <branch> 2>/dev/null || echo "Branch: already deleted — skipping"
132
- ```
133
-
134
- The `|| echo` fallback handles the case where the branch is already gone (e.g., deleted by a previous run or the remote), so the command never fails the verify step.
135
-
136
- Report cleanup in output:
137
- ```
138
- Worktree: removed ✓
139
- Branch: <branch-name> deleted ✓
140
- ```
141
-
142
- ### Step 7: If Issues Found — Create Beads Issue
143
-
144
- **Never commit inline.** If something is wrong, create a tracking issue:
145
-
146
- ```bash
147
- bd create --title="Post-merge: <description of issue>" --type=bug --priority=1
148
- ```
149
-
150
- ### Step 8: Close Beads Issues (if healthy)
151
-
152
- If everything is clean, close all Beads issues referenced in the merged PR.
153
-
154
- **Auto-detect beads issues from PR body and branch name:**
155
-
156
- ```bash
157
- # Get PR body and branch name
158
- PR_BODY=$(gh pr view <number> --json body --jq '.body')
159
- PR_BRANCH=$(gh pr view <number> --json headRefName --jq '.headRefName')
160
-
161
- # Extract beads IDs from PR body (matches "Closes beads-xxx", "closes forge-xxx", etc.)
162
- # Patterns: "Closes <prefix>-<id>", "Fixes <prefix>-<id>", "Resolves <prefix>-<id>"
163
- BEADS_IDS=$(echo "$PR_BODY" | grep -oiE '(closes|fixes|resolves):?\s+[a-z]+-[a-z0-9]+' | grep -oiE '[a-z]+-[a-z0-9]{3,6}$')
164
-
165
- # Validate each ID exists in beads
166
- VALID_IDS=""
167
- for id in $BEADS_IDS; do
168
- if bd show "$id" >/dev/null 2>&1; then
169
- VALID_IDS="$VALID_IDS $id"
170
- fi
171
- done
172
- BEADS_IDS="$VALID_IDS"
173
-
174
- # Also check branch name for beads ID — extract segment after last /
175
- # then validate with bd show to avoid false matches like "pr-templa"
176
- BRANCH_SLUG=$(echo "$PR_BRANCH" | sed 's|.*/||')
177
- BRANCH_ID=$(echo "$BRANCH_SLUG" | grep -oE '[a-z]+-[a-z0-9]{3,6}' | head -1)
178
- if [ -n "$BRANCH_ID" ] && ! bd show "$BRANCH_ID" >/dev/null 2>&1; then
179
- BRANCH_ID="" # Not a valid beads ID — discard
180
- fi
181
- ```
182
-
183
- **Close each matched issue:**
184
-
185
- ```bash
186
- # Close issues found in PR body
187
- for id in $BEADS_IDS; do
188
- bd close "$id" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $id"
189
- done
190
-
191
- # If no issues found in body, try branch name match (skip if already closed above)
192
- if [ -z "$BEADS_IDS" ] && [ -n "$BRANCH_ID" ]; then
193
- bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
194
- elif [ -n "$BRANCH_ID" ] && ! echo "$BEADS_IDS" | grep -qw "$BRANCH_ID"; then
195
- bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
196
- fi
197
- ```
198
-
199
- **If no beads issues detected at all**, prompt the user:
200
- ```
201
- ⚠ No beads issue ID found in PR body or branch name.
202
- If this PR closes a beads issue, run: bd close <id> --reason="Merged and verified on master (PR #<number>)"
203
- ```
204
-
205
- ```
206
- <HARD-GATE: /verify exit>
207
- Do NOT declare /verify complete until:
208
- 1. gh run list --branch master --limit 3 shows actual CI output (not "should be fine")
209
- 2. If healthy: Beads issues extracted from PR body/branch and closed (bd close run and confirmed)
210
- - If no beads ID found: user was warned and given manual close command
211
- 3. If issues found: Beads tracking issue created for every problem
212
- 4. Worktree removed (or confirmed already gone) — OR Step 6 was intentionally skipped because CI was unhealthy; if skipped, state explicitly: "cleanup deferred, CI was not healthy"
213
- "It should be fine" is not evidence. Run the command. Show the output.
214
- </HARD-GATE>
215
- ```
216
-
217
- ## Rules
218
-
219
- - **Never commits** — this command is read-only
220
- - **Never creates PRs** — if fixes are needed, that's a new /dev cycle
221
- - **Runs after user confirms merge** — not before
222
- - **Reports honestly** — if CI is broken on main, say so clearly
223
-
224
- ## Example Output (Healthy)
225
-
226
- ```
227
- ✅ Merge verified — everything is healthy
228
-
229
- PR: #89 merged by harshanandak at 2026-02-24T14:30:00Z
230
- Branch: feat/auth-refresh deleted ✓
231
- CI on master:
232
- ✓ Test Suite (ubuntu, node 20): passing
233
- ✓ Test Suite (windows, node 22): passing
234
- ✓ ESLint: passing
235
- ✓ SonarCloud: passing
236
- ✓ CodeQL: passing
237
- Deployments: N/A (no deployment configured)
238
-
239
- Ready for next feature → run /status
240
- ```
241
-
242
- ## Example Output (Issues Found)
243
-
244
- ```
245
- ⚠️ Post-merge issues detected
246
-
247
- PR: #89 merged ✓
248
- CI on master:
249
- ✓ Test Suite: passing
250
- ✗ SonarCloud: quality gate failing
251
- - 2 new code smells introduced
252
- - Action: investigate or create hotfix
253
-
254
- Created Beads issue: forge-xyz
255
- "Post-merge: SonarCloud quality gate failing on master after PR #89"
256
-
257
- Run /status to assess next steps
258
- ```
259
-
260
- ## Integration with Workflow
261
-
262
- ```
263
- Utility: /status → Understand current context before starting
264
- Stage 1: /plan → Design intent → research → branch + worktree + task list
265
- Stage 2: /dev → Implement each task with subagent-driven TDD
266
- Stage 3: /validate → Type check, lint, tests, security — all fresh output
267
- Stage 4: /ship → Push + create PR
268
- Stage 5: /review → Address GitHub Actions, Greptile, SonarCloud
269
- Stage 6: /premerge → Update docs, hand off PR to user
270
- Stage 7: /verify → Post-merge CI check on main (you are here) ✓
271
- ```
@@ -1,56 +0,0 @@
1
- name: Beads → GitHub Issue Sync
2
-
3
- on:
4
- push:
5
- branches: [master]
6
- paths:
7
- - '.beads/**'
8
-
9
- # Serialize with forward-sync to prevent race conditions
10
- concurrency:
11
- group: beads-sync
12
- cancel-in-progress: false
13
-
14
- permissions:
15
- contents: read
16
- issues: write
17
-
18
- jobs:
19
- reverse-sync:
20
- runs-on: ubuntu-latest
21
- steps:
22
- - name: Guard — skip loop commits
23
- env:
24
- COMMIT_MSG: ${{ github.event.head_commit.message }}
25
- run: |
26
- if [[ "$COMMIT_MSG" == chore\(beads\):* ]]; then
27
- echo "Loop guard: skipping chore(beads): commit"
28
- echo "SKIP=true" >> "$GITHUB_ENV"
29
- fi
30
-
31
- - name: Checkout current
32
- if: env.SKIP != 'true'
33
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
34
- with:
35
- fetch-depth: 0
36
-
37
- - name: Detect and close
38
- if: env.SKIP != 'true'
39
- env:
40
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
- BEFORE_SHA: ${{ github.event.before }}
42
- run: |
43
- # Get old and new versions of .beads/issues.jsonl
44
- # Use github.event.before (pre-push SHA) to catch multi-commit pushes
45
- if [ "$BEFORE_SHA" = "0000000000000000000000000000000000000000" ] || [ -z "$BEFORE_SHA" ]; then
46
- OLD_CONTENT=""
47
- else
48
- OLD_CONTENT=$(git show "$BEFORE_SHA":.beads/issues.jsonl 2>/dev/null || echo "")
49
- fi
50
- NEW_CONTENT=$(cat .beads/issues.jsonl 2>/dev/null || echo "")
51
-
52
- # Export via temp files to avoid shell injection
53
- printf '%s' "$OLD_CONTENT" > /tmp/old-issues.jsonl
54
- printf '%s' "$NEW_CONTENT" > /tmp/new-issues.jsonl
55
-
56
- node scripts/github-beads-sync/reverse-sync-cli.mjs /tmp/old-issues.jsonl /tmp/new-issues.jsonl