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
@@ -37,71 +37,59 @@ esac
37
37
  MOCK
38
38
  chmod +x "$mock_dir/gh-noauth"
39
39
 
40
- # ── Create mock bd (with in_progress issues having github_issue state) ──
41
- cat > "$mock_dir/bd" << 'MOCK'
40
+ # ── Create mock forge (in_progress issues carry github_issue:<n> labels) ──
41
+ # `issue list --json` exposes labels; sync_issue_status re-reads `issue show`.
42
+ cat > "$mock_dir/forge" << 'MOCK'
42
43
  #!/usr/bin/env bash
43
44
  case "$1 $2" in
44
- "list --status=in_progress")
45
- echo "forge-aaa · Feature A"
46
- echo "◐ forge-bbb · Feature B"
45
+ "issue list")
46
+ printf '{"data":{"issues":[{"id":"forge-aaa","status":"in_progress","labels":["github_issue:42"]},{"id":"forge-bbb","status":"in_progress","labels":["github_issue:55"]}]}}\n'
47
47
  ;;
48
- "show forge-aaa")
49
- echo " forge-aaa · Feature A [● P2 · IN_PROGRESS]"
50
- echo "Owner: devone"
51
- echo "Updated: 2026-03-27T10:00:00Z"
52
- echo ""
53
- echo "STATE"
54
- echo " github_issue:42"
55
- ;;
56
- "show forge-bbb")
57
- echo "◐ forge-bbb · Feature B [● P2 · IN_PROGRESS]"
58
- echo "Owner: devtwo"
59
- echo "Updated: 2026-03-27T09:00:00Z"
60
- echo ""
61
- echo "STATE"
62
- echo " github_issue:55"
48
+ "issue show")
49
+ case "$3" in
50
+ forge-aaa) printf '{"data":{"issue":{"id":"forge-aaa","title":"Feature A","labels":["github_issue:42"]}}}\n' ;;
51
+ forge-bbb) printf '{"data":{"issue":{"id":"forge-bbb","title":"Feature B","labels":["github_issue:55"]}}}\n' ;;
52
+ *) printf '{"data":{"issue":{"id":"%s","title":"","labels":[]}}}\n' "$3" ;;
53
+ esac
63
54
  ;;
55
+ "issue update") echo "Updated" ;;
64
56
  esac
65
57
  MOCK
66
- chmod +x "$mock_dir/bd"
58
+ chmod +x "$mock_dir/forge"
67
59
 
68
- # ── Create mock bd (no in_progress issues) ──────────────────────────────
69
- cat > "$mock_dir/bd-empty" << 'MOCK'
60
+ # ── Create mock forge (no in_progress issues) ───────────────────────────
61
+ cat > "$mock_dir/forge-empty" << 'MOCK'
70
62
  #!/usr/bin/env bash
71
63
  case "$1 $2" in
72
- "list --status=in_progress")
73
- echo ""
74
- ;;
64
+ "issue list") printf '{"data":{"issues":[]}}\n' ;;
75
65
  esac
76
66
  MOCK
77
- chmod +x "$mock_dir/bd-empty"
67
+ chmod +x "$mock_dir/forge-empty"
78
68
 
79
- # ── Create mock bd (issue without github_issue state) ───────────────────
80
- cat > "$mock_dir/bd-no-gh" << 'MOCK'
69
+ # ── Create mock forge (issue without a github_issue label) ──────────────
70
+ cat > "$mock_dir/forge-no-gh" << 'MOCK'
81
71
  #!/usr/bin/env bash
82
72
  case "$1 $2" in
83
- "list --status=in_progress")
84
- echo "forge-xxx · Feature X"
73
+ "issue list")
74
+ printf '{"data":{"issues":[{"id":"forge-xxx","status":"in_progress","labels":[]}]}}\n'
85
75
  ;;
86
- "show forge-xxx")
87
- echo "forge-xxx · Feature X [● P2 · IN_PROGRESS]"
88
- echo "Owner: devone"
89
- echo "Updated: 2026-03-27T10:00:00Z"
76
+ "issue show")
77
+ printf '{"data":{"issue":{"id":"forge-xxx","title":"Feature X","labels":[]}}}\n'
90
78
  ;;
91
79
  esac
92
80
  MOCK
93
- chmod +x "$mock_dir/bd-no-gh"
81
+ chmod +x "$mock_dir/forge-no-gh"
94
82
 
95
- # ── Create .beads/config.yaml for auto-sync tests ──────────────────────
96
- mkdir -p "$TEST_TMP/.beads"
97
- cat > "$TEST_TMP/.beads/config.yaml" << 'YAML'
83
+ # ── Create .forge/config.yaml for auto-sync tests ──────────────────────
84
+ mkdir -p "$TEST_TMP/.forge"
85
+ cat > "$TEST_TMP/.forge/config.yaml" << 'YAML'
98
86
  team:
99
87
  auto-sync: true
100
88
  YAML
101
89
 
102
90
  export GH_CMD="$mock_dir/gh"
103
- export BD_CMD="$mock_dir/bd"
104
- export BEADS_ROOT="$TEST_TMP"
91
+ export FORGE_CMD="$mock_dir/forge"
92
+ export FORGE_ROOT="$TEST_TMP"
105
93
 
106
94
  # Source the library under test
107
95
  source "$SCRIPT_DIR/lib/hooks.sh"
@@ -148,7 +136,7 @@ assert_exit() {
148
136
  # ── Test 1: forge_team_sync with mock gh + bd → syncs in_progress issues ──
149
137
  echo "── Test 1: forge_team_sync syncs in_progress issues ──"
150
138
  export GH_CMD="$mock_dir/gh"
151
- export BD_CMD="$mock_dir/bd"
139
+ export FORGE_CMD="$mock_dir/forge"
152
140
  rc=0
153
141
  output="$(forge_team_sync 2>&1)" || rc=$?
154
142
  assert_exit "exits 0" 0 "$rc"
@@ -158,7 +146,7 @@ assert_contains "reports synced issues" "Synced 2 issues" "$output"
158
146
  echo ""
159
147
  echo "── Test 2: forge_team_sync with gh not authenticated → error, exit 1 ──"
160
148
  export GH_CMD="$mock_dir/gh-noauth"
161
- export BD_CMD="$mock_dir/bd"
149
+ export FORGE_CMD="$mock_dir/forge"
162
150
  rc=0
163
151
  output="$(forge_team_sync 2>&1)" || rc=$?
164
152
  assert_exit "exits 1" 1 "$rc"
@@ -168,8 +156,8 @@ assert_contains "error message" "FORGE_AGENT_7f3a:ERROR:" "$output"
168
156
  echo ""
169
157
  echo "── Test 3: forge_team_sync with auto-sync: false → skip, exit 0 ──"
170
158
  export GH_CMD="$mock_dir/gh"
171
- export BD_CMD="$mock_dir/bd"
172
- cat > "$TEST_TMP/.beads/config.yaml" << 'YAML'
159
+ export FORGE_CMD="$mock_dir/forge"
160
+ cat > "$TEST_TMP/.forge/config.yaml" << 'YAML'
173
161
  team:
174
162
  auto-sync: false
175
163
  YAML
@@ -178,7 +166,7 @@ output="$(forge_team_sync 2>&1)" || rc=$?
178
166
  assert_exit "exits 0" 0 "$rc"
179
167
  assert_not_contains "does not sync" "Synced" "$output"
180
168
  # Restore config
181
- cat > "$TEST_TMP/.beads/config.yaml" << 'YAML'
169
+ cat > "$TEST_TMP/.forge/config.yaml" << 'YAML'
182
170
  team:
183
171
  auto-sync: true
184
172
  YAML
@@ -187,7 +175,7 @@ YAML
187
175
  echo ""
188
176
  echo "── Test 4: forge_team_sync with no in_progress issues → nothing to sync ──"
189
177
  export GH_CMD="$mock_dir/gh"
190
- export BD_CMD="$mock_dir/bd-empty"
178
+ export FORGE_CMD="$mock_dir/forge-empty"
191
179
  rc=0
192
180
  output="$(forge_team_sync 2>&1)" || rc=$?
193
181
  assert_exit "exits 0" 0 "$rc"
@@ -197,7 +185,7 @@ assert_contains "nothing to sync message" "Nothing to sync" "$output"
197
185
  echo ""
198
186
  echo "── Test 5: forge_team_sync --quiet → no output on success ──"
199
187
  export GH_CMD="$mock_dir/gh"
200
- export BD_CMD="$mock_dir/bd"
188
+ export FORGE_CMD="$mock_dir/forge"
201
189
  rc=0
202
190
  output="$(forge_team_sync --quiet 2>&1)" || rc=$?
203
191
  assert_exit "exits 0" 0 "$rc"
@@ -207,7 +195,7 @@ assert_eq "no output" "" "$output"
207
195
  echo ""
208
196
  echo "── Test 6: forge_team_sync_on_stage triggers correct status sync per stage ──"
209
197
  export GH_CMD="$mock_dir/gh"
210
- export BD_CMD="$mock_dir/bd"
198
+ export FORGE_CMD="$mock_dir/forge"
211
199
  # dev transition → in_progress
212
200
  rc=0
213
201
  output="$(forge_team_sync_on_stage forge-aaa plan dev 2>&1)" || rc=$?
@@ -226,7 +214,7 @@ assert_contains "verify skips sync" "skipped" "$output"
226
214
  echo ""
227
215
  echo "── Test 7: Sync failure doesn't block (non-fatal warning) ──"
228
216
  export GH_CMD="$mock_dir/gh"
229
- export BD_CMD="$mock_dir/bd-no-gh"
217
+ export FORGE_CMD="$mock_dir/forge-no-gh"
230
218
  rc=0
231
219
  output="$(forge_team_sync 2>&1)" || rc=$?
232
220
  # Should still exit 0 even with sync failures (non-blocking)
@@ -7,7 +7,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
7
7
  TEST_TMP="$(mktemp -d)"
8
8
  trap 'rm -rf "$TEST_TMP"' EXIT
9
9
 
10
- # Override TEAM_MAP_ROOT so tests don't touch real .beads/
10
+ # Override TEAM_MAP_ROOT so tests don't touch real .forge/
11
11
  export TEAM_MAP_ROOT="$TEST_TMP"
12
12
 
13
13
  # ── Create mock gh ───────────────────────────────────────────────────────
@@ -88,7 +88,7 @@ echo "── Test 3: team_map_add creates parseable JSONL ──"
88
88
  export GH_CMD="$mock_dir/gh"
89
89
  unset _GITHUB_USER_CACHE
90
90
  team_map_add "testuser" "Test User"
91
- mapfile="$TEAM_MAP_ROOT/.beads/team-map.jsonl"
91
+ mapfile="$TEAM_MAP_ROOT/.forge/team-map.jsonl"
92
92
  # Entry should be parseable JSON
93
93
  last_line="$(tail -1 "$mapfile")"
94
94
  parsed="$(echo "$last_line" | jq -r '.github')"
@@ -146,7 +146,7 @@ assert_exit "not a bot" 1 "$rc"
146
146
  echo ""
147
147
  echo "── Test 9: auto_detect_identity ──"
148
148
  # Clean state
149
- rm -rf "$TEAM_MAP_ROOT/.beads"
149
+ rm -rf "$TEAM_MAP_ROOT/.forge"
150
150
  unset _GITHUB_USER_CACHE
151
151
  export GH_CMD="$mock_dir/gh"
152
152
  auto_detect_identity
@@ -10,7 +10,7 @@ TEST_TMP=""
10
10
  setup() {
11
11
  mkdir -p /c/tmp/forge-team-integ
12
12
  TEST_TMP="$(mktemp -d /c/tmp/forge-team-integ/run.XXXXXX)"
13
- mkdir -p "$TEST_TMP/.beads" "$TEST_TMP/mock"
13
+ mkdir -p "$TEST_TMP/.forge" "$TEST_TMP/mock"
14
14
  export TEAM_MAP_ROOT="$TEST_TMP"
15
15
  }
16
16
 
@@ -18,7 +18,7 @@ teardown() {
18
18
  rm -rf "$TEST_TMP"
19
19
  unset TEAM_MAP_ROOT || true
20
20
  unset GH_CMD || true
21
- unset BD_CMD || true
21
+ unset FORGE_CMD || true
22
22
  }
23
23
 
24
24
  assert_exit_code() {
@@ -64,32 +64,25 @@ esac
64
64
  MOCK
65
65
  chmod +x "$TEST_TMP/mock/gh"
66
66
 
67
- cat > "$TEST_TMP/mock/bd" << 'MOCK'
67
+ cat > "$TEST_TMP/mock/forge" << 'MOCK'
68
68
  #!/usr/bin/env bash
69
69
  case "$*" in
70
- *"list --status=open,in_progress"*)
71
- echo "forge-t1 · Test Task 1"
72
- echo " forge-t2 · Test Task 2" ;;
73
- *"show forge-t1"*)
74
- echo "◐ forge-t1 · Test Task 1 [● P2 · IN_PROGRESS]"
75
- echo "Owner: testdev"
76
- echo "Updated: 2026-03-27T10:00:00Z" ;;
77
- *"show forge-t2"*)
78
- echo "○ forge-t2 · Test Task 2 [● P3 · OPEN]"
79
- echo "Owner: testdev"
80
- echo "Updated: 2026-03-27T09:00:00Z" ;;
70
+ *"issue list"*"--status=in_progress"*)
71
+ printf '{"data":{"issues":[{"id":"forge-t1","title":"Test Task 1","status":"in_progress","assignee":"testdev","updated_at":"2026-03-27T10:00:00Z","dependencies":[]}]}}\n' ;;
72
+ *"issue list"*"--status=open"*)
73
+ printf '{"data":{"issues":[{"id":"forge-t2","title":"Test Task 2","status":"open","assignee":"testdev","updated_at":"2026-03-27T09:00:00Z","dependencies":[]}]}}\n' ;;
81
74
  *) exit 0 ;;
82
75
  esac
83
76
  MOCK
84
- chmod +x "$TEST_TMP/mock/bd"
77
+ chmod +x "$TEST_TMP/mock/forge"
85
78
 
86
- export GH_CMD="$TEST_TMP/mock/gh" BD_CMD="$TEST_TMP/mock/bd"
79
+ export GH_CMD="$TEST_TMP/mock/gh" FORGE_CMD="$TEST_TMP/mock/forge"
87
80
 
88
81
  # Run identity auto-detect in subshell to avoid readonly clashes
89
82
  local id_rc
90
83
  bash -c '
91
84
  set -euo pipefail
92
- export GH_CMD="'"$TEST_TMP"'/mock/gh" BD_CMD="'"$TEST_TMP"'/mock/bd" TEAM_MAP_ROOT="'"$TEST_TMP"'"
85
+ export GH_CMD="'"$TEST_TMP"'/mock/gh" FORGE_CMD="'"$TEST_TMP"'/mock/forge" TEAM_MAP_ROOT="'"$TEST_TMP"'"
93
86
  source "'"$SCRIPT_DIR"'/lib/identity.sh"
94
87
  _GITHUB_USER_CACHE=""
95
88
  auto_detect_identity
@@ -98,7 +91,7 @@ MOCK
98
91
 
99
92
  # Check team map has entry
100
93
  local map_content
101
- map_content="$(cat "$TEST_TMP/.beads/team-map.jsonl" 2>/dev/null || echo "")"
94
+ map_content="$(cat "$TEST_TMP/.forge/team-map.jsonl" 2>/dev/null || echo "")"
102
95
  assert_contains "team map has testdev" "testdev" "$map_content"
103
96
 
104
97
  # Workload shows issues
@@ -125,26 +118,19 @@ esac
125
118
  MOCK
126
119
  chmod +x "$TEST_TMP/mock/gh"
127
120
 
128
- cat > "$TEST_TMP/mock/bd" << 'MOCK'
121
+ cat > "$TEST_TMP/mock/forge" << 'MOCK'
129
122
  #!/usr/bin/env bash
130
123
  case "$*" in
131
- *"list --status=open,in_progress"*)
132
- echo "forge-aa · Task A"
133
- echo " forge-bb · Task B" ;;
134
- *"show forge-aa"*)
135
- echo "◐ forge-aa · Task A [● P2 · IN_PROGRESS]"
136
- echo "Owner: dev-a"
137
- echo "Updated: 2026-03-27T10:00:00Z" ;;
138
- *"show forge-bb"*)
139
- echo "○ forge-bb · Task B [● P3 · OPEN]"
140
- echo "Owner: dev-b"
141
- echo "Updated: 2026-03-27T09:00:00Z" ;;
124
+ *"issue list"*"--status=in_progress"*)
125
+ printf '{"data":{"issues":[{"id":"forge-aa","title":"Task A","status":"in_progress","assignee":"dev-a","updated_at":"2026-03-27T10:00:00Z","dependencies":[]}]}}\n' ;;
126
+ *"issue list"*"--status=open"*)
127
+ printf '{"data":{"issues":[{"id":"forge-bb","title":"Task B","status":"open","assignee":"dev-b","updated_at":"2026-03-27T09:00:00Z","dependencies":[]}]}}\n' ;;
142
128
  *) exit 0 ;;
143
129
  esac
144
130
  MOCK
145
- chmod +x "$TEST_TMP/mock/bd"
131
+ chmod +x "$TEST_TMP/mock/forge"
146
132
 
147
- export GH_CMD="$TEST_TMP/mock/gh" BD_CMD="$TEST_TMP/mock/bd"
133
+ export GH_CMD="$TEST_TMP/mock/gh" FORGE_CMD="$TEST_TMP/mock/forge"
148
134
 
149
135
  local output rc
150
136
  output="$(bash "$FORGE_TEAM" workload 2>&1)" && rc=$? || rc=$?
@@ -173,23 +159,24 @@ esac
173
159
  MOCK
174
160
  chmod +x "$TEST_TMP/mock/gh"
175
161
 
176
- cat > "$TEST_TMP/mock/bd" << 'MOCK'
162
+ cat > "$TEST_TMP/mock/forge" << 'MOCK'
177
163
  #!/usr/bin/env bash
178
164
  case "$*" in
179
- *"show forge-claimed"*) echo "○ forge-claimed · Claimed [● P2 · OPEN] [github_issue:42]" ;;
165
+ *"issue show forge-claimed"*)
166
+ printf '{"data":{"issue":{"id":"forge-claimed","title":"Claimed","status":"open","labels":["github_issue:42"]}}}\n' ;;
180
167
  *) exit 0 ;;
181
168
  esac
182
169
  MOCK
183
- chmod +x "$TEST_TMP/mock/bd"
170
+ chmod +x "$TEST_TMP/mock/forge"
184
171
 
185
- export GH_CMD="$TEST_TMP/mock/gh" BD_CMD="$TEST_TMP/mock/bd"
172
+ export GH_CMD="$TEST_TMP/mock/gh" FORGE_CMD="$TEST_TMP/mock/forge"
186
173
 
187
174
  # Run in subshell to avoid readonly clashes from re-sourcing
188
175
  local output rc
189
176
  output="$(
190
177
  bash -c '
191
178
  set -euo pipefail
192
- export GH_CMD="'"$TEST_TMP"'/mock/gh" BD_CMD="'"$TEST_TMP"'/mock/bd" TEAM_MAP_ROOT="'"$TEST_TMP"'"
179
+ export GH_CMD="'"$TEST_TMP"'/mock/gh" FORGE_CMD="'"$TEST_TMP"'/mock/forge" TEAM_MAP_ROOT="'"$TEST_TMP"'"
193
180
  source "'"$SCRIPT_DIR"'/lib/claim.sh"
194
181
  _GITHUB_USER_CACHE=""
195
182
  pre_claim_check "forge-claimed" 2>&1
@@ -217,24 +204,22 @@ esac
217
204
  MOCK
218
205
  chmod +x "$TEST_TMP/mock/gh"
219
206
 
220
- cat > "$TEST_TMP/mock/bd" << 'MOCK'
207
+ cat > "$TEST_TMP/mock/forge" << 'MOCK'
221
208
  #!/usr/bin/env bash
222
209
  case "$*" in
223
- *"list --status=open,in_progress"*)
224
- echo "forge-orphan · Orphan Task" ;;
225
- *"show forge-orphan"*)
226
- echo "○ forge-orphan · Orphan Task [ P3 · OPEN]"
227
- echo "Owner: testdev"
228
- echo "Updated: 2026-03-27T10:00:00Z" ;;
210
+ *"issue list"*"--status=open"*)
211
+ printf '{"data":{"issues":[{"id":"forge-orphan","title":"Orphan Task","status":"open","assignee":"testdev","updated_at":"2026-03-27T10:00:00Z","labels":[],"dependencies":[]}]}}\n' ;;
212
+ *"issue list"*"--status=in_progress"*)
213
+ printf '{"data":{"issues":[]}}\n' ;;
229
214
  *) exit 0 ;;
230
215
  esac
231
216
  MOCK
232
- chmod +x "$TEST_TMP/mock/bd"
217
+ chmod +x "$TEST_TMP/mock/forge"
233
218
 
234
- export GH_CMD="$TEST_TMP/mock/gh" BD_CMD="$TEST_TMP/mock/bd"
219
+ export GH_CMD="$TEST_TMP/mock/gh" FORGE_CMD="$TEST_TMP/mock/forge"
235
220
 
236
221
  # Seed team map so identity check passes
237
- echo '{"github":"testdev","display_name":"testdev","updated_at":"2026-03-27T10:00:00Z","is_bot":false}' > "$TEST_TMP/.beads/team-map.jsonl"
222
+ echo '{"github":"testdev","display_name":"testdev","updated_at":"2026-03-27T10:00:00Z","is_bot":false}' > "$TEST_TMP/.forge/team-map.jsonl"
238
223
 
239
224
  local output rc
240
225
  output="$(bash "$FORGE_TEAM" verify 2>&1)" && rc=$? || rc=$?
@@ -261,19 +246,19 @@ esac
261
246
  MOCK
262
247
  chmod +x "$TEST_TMP/mock/gh"
263
248
 
264
- cat > "$TEST_TMP/mock/bd" << 'MOCK'
249
+ cat > "$TEST_TMP/mock/forge" << 'MOCK'
265
250
  #!/usr/bin/env bash
266
251
  case "$*" in
267
- *"list"*) echo "" ;;
252
+ *"issue list"*) printf '{"data":{"issues":[]}}\n' ;;
268
253
  *) exit 0 ;;
269
254
  esac
270
255
  MOCK
271
- chmod +x "$TEST_TMP/mock/bd"
256
+ chmod +x "$TEST_TMP/mock/forge"
272
257
 
273
- export GH_CMD="$TEST_TMP/mock/gh" BD_CMD="$TEST_TMP/mock/bd"
258
+ export GH_CMD="$TEST_TMP/mock/gh" FORGE_CMD="$TEST_TMP/mock/forge"
274
259
 
275
260
  # Seed team map so identity check passes
276
- echo '{"github":"testdev","display_name":"testdev","updated_at":"2026-03-27T10:00:00Z","is_bot":false}' > "$TEST_TMP/.beads/team-map.jsonl"
261
+ echo '{"github":"testdev","display_name":"testdev","updated_at":"2026-03-27T10:00:00Z","is_bot":false}' > "$TEST_TMP/.forge/team-map.jsonl"
277
262
 
278
263
  # No mapping file — all GitHub issues should be orphans
279
264
  local output rc
@@ -299,26 +284,19 @@ esac
299
284
  MOCK
300
285
  chmod +x "$TEST_TMP/mock/gh"
301
286
 
302
- cat > "$TEST_TMP/mock/bd" << 'MOCK'
287
+ cat > "$TEST_TMP/mock/forge" << 'MOCK'
303
288
  #!/usr/bin/env bash
304
289
  case "$*" in
305
- *"list --status=open,in_progress"*)
306
- echo "forge-bot1 · Bot Task"
307
- echo " forge-real · Real Task" ;;
308
- *"show forge-bot1"*)
309
- echo "○ forge-bot1 · Bot Task [● P4 · OPEN]"
310
- echo "Owner: dependabot[bot]"
311
- echo "Updated: 2026-03-27T10:00:00Z" ;;
312
- *"show forge-real"*)
313
- echo "◐ forge-real · Real Task [● P2 · IN_PROGRESS]"
314
- echo "Owner: testdev"
315
- echo "Updated: 2026-03-27T10:00:00Z" ;;
290
+ *"issue list"*"--status=in_progress"*)
291
+ printf '{"data":{"issues":[{"id":"forge-real","title":"Real Task","status":"in_progress","assignee":"testdev","updated_at":"2026-03-27T10:00:00Z","dependencies":[]}]}}\n' ;;
292
+ *"issue list"*"--status=open"*)
293
+ printf '{"data":{"issues":[{"id":"forge-bot1","title":"Bot Task","status":"open","assignee":"dependabot[bot]","updated_at":"2026-03-27T10:00:00Z","dependencies":[]}]}}\n' ;;
316
294
  *) exit 0 ;;
317
295
  esac
318
296
  MOCK
319
- chmod +x "$TEST_TMP/mock/bd"
297
+ chmod +x "$TEST_TMP/mock/forge"
320
298
 
321
- export GH_CMD="$TEST_TMP/mock/gh" BD_CMD="$TEST_TMP/mock/bd"
299
+ export GH_CMD="$TEST_TMP/mock/gh" FORGE_CMD="$TEST_TMP/mock/forge"
322
300
 
323
301
  local output rc
324
302
  output="$(bash "$FORGE_TEAM" workload 2>&1)" && rc=$? || rc=$?