forge-workflow 0.0.10 → 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 (454) 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 +150 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -118
  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 +461 -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/forge/TOOLCHAIN.md +670 -0
  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/{TOOLCHAIN.md → reference/TOOLCHAIN.md} +62 -47
  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 +121 -0
  81. package/lib/beads-sync-scaffold.js +25 -101
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +741 -77
  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 +17 -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 +0 -1
  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 +838 -972
  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 +158 -21
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +4 -1
  142. package/lib/commands/test.js +43 -27
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +43 -18
  146. package/lib/commands/worktree.js +307 -100
  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 +2 -2
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +35 -9
  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 +382 -11
  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/kernel/backing-issue.js +305 -0
  174. package/lib/kernel/broker.js +1218 -0
  175. package/lib/kernel/cli-broker-factory.js +130 -0
  176. package/lib/kernel/conflict-signal.js +82 -0
  177. package/lib/kernel/evaluators.js +195 -0
  178. package/lib/kernel/fs-class.js +495 -0
  179. package/lib/kernel/issue-command-contract.js +559 -0
  180. package/lib/kernel/issue-id-resolver.js +186 -0
  181. package/lib/kernel/lease-enforcer.js +158 -0
  182. package/lib/kernel/migrations.js +333 -0
  183. package/lib/kernel/planning-buckets-schema.js +109 -0
  184. package/lib/kernel/projection-jsonl-writer.js +450 -0
  185. package/lib/kernel/readiness-model.js +329 -0
  186. package/lib/kernel/schema.js +356 -0
  187. package/lib/kernel/sqlite-driver.js +2504 -0
  188. package/lib/kernel/taxonomy-validator.js +394 -0
  189. package/lib/lefthook-check.js +3 -2
  190. package/lib/lefthook-wiring.js +413 -0
  191. package/lib/mcp-config-renderer.js +288 -0
  192. package/lib/memory/graphiti-mcp.js +106 -0
  193. package/lib/memory/router.js +387 -0
  194. package/lib/memory/typed-api.js +102 -0
  195. package/lib/memory-digest.js +195 -0
  196. package/lib/merge-rules.js +395 -0
  197. package/lib/migrate-dry-run.js +466 -0
  198. package/lib/orientation.js +863 -0
  199. package/lib/package-manager-remediation.js +103 -0
  200. package/lib/package-root.js +381 -0
  201. package/lib/patch-intent.js +890 -0
  202. package/lib/plugin-catalog.js +3 -4
  203. package/lib/plugin-manager.js +0 -5
  204. package/lib/pr-bundle.js +186 -0
  205. package/lib/pr-monitor/differ.js +195 -0
  206. package/lib/pr-monitor/events.js +0 -0
  207. package/lib/pr-monitor/gather.js +124 -0
  208. package/lib/pr-monitor/journal.js +299 -0
  209. package/lib/pr-monitor/monitor.js +146 -0
  210. package/lib/pr-monitor/render-sticky.js +157 -0
  211. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  212. package/lib/pr-monitor/watch.js +247 -0
  213. package/lib/pr-pull.js +1273 -0
  214. package/lib/pr-shepherd.js +494 -0
  215. package/lib/pr-state-validator.js +59 -0
  216. package/lib/preflight/gates.js +237 -0
  217. package/lib/preflight/runner.js +116 -0
  218. package/lib/project-discovery.js +0 -53
  219. package/lib/project-memory.js +99 -497
  220. package/lib/protected-path-manifest.js +281 -0
  221. package/lib/protected-state-surfaces.js +387 -0
  222. package/lib/release-readiness.js +2089 -0
  223. package/lib/reset.js +59 -45
  224. package/lib/review-adapter.js +68 -0
  225. package/lib/rules-sync.js +260 -0
  226. package/lib/runtime-health.js +241 -20
  227. package/lib/safety-config-renderer.js +268 -0
  228. package/lib/setup-action-log.js +1 -7
  229. package/lib/setup.js +27 -65
  230. package/lib/shell-utils.js +76 -6
  231. package/lib/skills-sync.js +330 -0
  232. package/lib/smart-status/scoring.js +17 -3
  233. package/lib/status/beads-snapshot.js +45 -2
  234. package/lib/status/presenter.js +169 -18
  235. package/lib/status/snapshot.js +186 -0
  236. package/lib/sync-backend.js +202 -0
  237. package/lib/untrusted-content.js +52 -0
  238. package/lib/upgrade-safety.js +199 -0
  239. package/lib/workflow/enforce-stage.js +296 -47
  240. package/lib/workflow/stage-transition.js +115 -0
  241. package/lib/workflow/stages.js +30 -6
  242. package/lib/workflow/state-manager.js +11 -22
  243. package/lib/workflow/state.js +23 -1
  244. package/lib/workflow-profiles.js +17 -5
  245. package/package.json +37 -35
  246. package/rules/documentation.md +19 -0
  247. package/rules/kernel-tracking.md +26 -0
  248. package/rules/security.md +22 -0
  249. package/rules/tdd.md +20 -0
  250. package/rules/workflow.md +27 -0
  251. package/scripts/auto-backing-issue.js +47 -0
  252. package/scripts/beads-context.sh +81 -57
  253. package/scripts/beads-upgrade-smoke.sh +24 -3
  254. package/scripts/bootstrap-windows-tools.sh +78 -0
  255. package/scripts/branch-protection.js +2 -3
  256. package/scripts/check-agents.js +34 -137
  257. package/scripts/commitlint.js +3 -1
  258. package/scripts/conflict-detect.sh +3 -0
  259. package/scripts/dep-guard.sh +22 -3
  260. package/scripts/file-index.sh +3 -0
  261. package/scripts/forge-team/lib/claim.sh +34 -18
  262. package/scripts/forge-team/lib/dashboard.sh +61 -86
  263. package/scripts/forge-team/lib/epic.sh +99 -263
  264. package/scripts/forge-team/lib/hooks.sh +26 -28
  265. package/scripts/forge-team/lib/identity.sh +4 -4
  266. package/scripts/forge-team/lib/sync-github.sh +49 -84
  267. package/scripts/forge-team/lib/verify.sh +93 -83
  268. package/scripts/forge-team/lib/workload.sh +41 -65
  269. package/scripts/forge-team/tests/claim.test.sh +25 -19
  270. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  271. package/scripts/forge-team/tests/epic.test.sh +52 -71
  272. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  273. package/scripts/forge-team/tests/identity.test.sh +3 -3
  274. package/scripts/forge-team/tests/integration.test.sh +44 -66
  275. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  276. package/scripts/forge-team/tests/verify.test.sh +37 -46
  277. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  278. package/scripts/forge-team/tests/workload.test.sh +32 -66
  279. package/scripts/gen-command-manifest.js +153 -0
  280. package/scripts/gen-embedded-assets.mjs +129 -0
  281. package/scripts/install.ps1 +139 -0
  282. package/scripts/install.sh +268 -0
  283. package/scripts/lib/release-asset.mjs +84 -0
  284. package/scripts/parity-check.mjs +145 -0
  285. package/scripts/parity-check.test.mjs +58 -0
  286. package/scripts/pin-agentic-workflow-images.js +112 -0
  287. package/scripts/pr-coordinator.sh +3 -0
  288. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  289. package/scripts/preflight.sh +21 -94
  290. package/scripts/protected-state-check.js +104 -0
  291. package/scripts/smart-status.sh +60 -57
  292. package/scripts/spikes/config-race-bench.js +111 -0
  293. package/scripts/spikes/harness-capability-matrix.js +13 -0
  294. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  295. package/scripts/spikes/protected-path-manifest.js +20 -0
  296. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  297. package/scripts/sync-agent-skills.js +62 -0
  298. package/scripts/sync-utils.sh +3 -0
  299. package/scripts/test-ci-shard.js +13 -6
  300. package/scripts/test.js +95 -12
  301. package/skills/claim-safety/SKILL.md +102 -0
  302. package/skills/claim-safety/evals/evals.json +46 -0
  303. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  304. package/skills/dev/evals/evals.json +50 -0
  305. package/skills/hermes-forge/SKILL.md +185 -0
  306. package/skills/hermes-forge/evals/evals.json +46 -0
  307. package/skills/issue-basics/SKILL.md +111 -0
  308. package/skills/issue-basics/evals/evals.json +46 -0
  309. package/skills/kernel/SKILL.md +166 -0
  310. package/skills/kernel/evals/evals.json +50 -0
  311. package/skills/memory/SKILL.md +102 -0
  312. package/skills/parallel-deep-research/SKILL.md +14 -11
  313. package/skills/parallel-deep-research/evals/evals.json +11 -27
  314. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  315. package/skills/plan/evals/evals.json +42 -0
  316. package/skills/research/SKILL.md +195 -0
  317. package/skills/research/evals/evals.json +42 -0
  318. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  319. package/skills/review/evals/evals.json +42 -0
  320. package/skills/rollback/SKILL.md +110 -0
  321. package/skills/rollback/evals/evals.json +46 -0
  322. package/skills/rollback/references/methods.md +204 -0
  323. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  324. package/skills/shepherd/SKILL.md +66 -0
  325. package/skills/shepherd/evals/evals.json +42 -0
  326. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  327. package/skills/ship/evals/evals.json +42 -0
  328. package/skills/smith/SKILL.md +142 -0
  329. package/skills/smith/evals/evals.json +46 -0
  330. package/skills/smith/references/autonomy-and-gates.md +94 -0
  331. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  332. package/skills/sonarcloud/evals/evals.json +46 -0
  333. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  334. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  335. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  336. package/skills/status/evals/evals.json +50 -0
  337. package/skills/triage-ready/SKILL.md +121 -0
  338. package/skills/triage-ready/evals/evals.json +42 -0
  339. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  340. package/skills/validate/evals/evals.json +42 -0
  341. package/skills/verify/SKILL.md +299 -0
  342. package/skills/verify/evals/evals.json +50 -0
  343. package/.claude/commands/dev.md +0 -345
  344. package/.claude/commands/plan.md +0 -566
  345. package/.claude/commands/premerge.md +0 -186
  346. package/.claude/commands/research.md +0 -42
  347. package/.claude/commands/review.md +0 -451
  348. package/.claude/commands/rollback.md +0 -721
  349. package/.claude/commands/ship.md +0 -213
  350. package/.claude/commands/sonarcloud.md +0 -152
  351. package/.claude/commands/status.md +0 -90
  352. package/.claude/commands/validate.md +0 -288
  353. package/.claude/commands/verify.md +0 -269
  354. package/.claude/rules/workflow.md +0 -121
  355. package/.cline/workflows/dev.md +0 -342
  356. package/.cline/workflows/plan.md +0 -563
  357. package/.cline/workflows/premerge.md +0 -183
  358. package/.cline/workflows/research.md +0 -39
  359. package/.cline/workflows/review.md +0 -448
  360. package/.cline/workflows/rollback.md +0 -718
  361. package/.cline/workflows/ship.md +0 -210
  362. package/.cline/workflows/sonarcloud.md +0 -146
  363. package/.cline/workflows/status.md +0 -87
  364. package/.cline/workflows/validate.md +0 -285
  365. package/.cline/workflows/verify.md +0 -266
  366. package/.codex/config.toml +0 -11
  367. package/.codex/skills/dev/SKILL.md +0 -345
  368. package/.codex/skills/plan/SKILL.md +0 -566
  369. package/.codex/skills/premerge/SKILL.md +0 -186
  370. package/.codex/skills/research/SKILL.md +0 -42
  371. package/.codex/skills/review/SKILL.md +0 -451
  372. package/.codex/skills/rollback/SKILL.md +0 -721
  373. package/.codex/skills/ship/SKILL.md +0 -213
  374. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  375. package/.codex/skills/status/SKILL.md +0 -90
  376. package/.codex/skills/validate/SKILL.md +0 -288
  377. package/.codex/skills/verify/SKILL.md +0 -269
  378. package/.cursor/commands/dev.md +0 -342
  379. package/.cursor/commands/plan.md +0 -563
  380. package/.cursor/commands/premerge.md +0 -183
  381. package/.cursor/commands/research.md +0 -39
  382. package/.cursor/commands/review.md +0 -448
  383. package/.cursor/commands/ship.md +0 -210
  384. package/.cursor/commands/sonarcloud.md +0 -146
  385. package/.cursor/commands/status.md +0 -87
  386. package/.cursor/commands/validate.md +0 -285
  387. package/.cursor/commands/verify.md +0 -266
  388. package/.cursorrules +0 -149
  389. package/.github/prompts/premerge.prompt.md +0 -188
  390. package/.github/prompts/research.prompt.md +0 -44
  391. package/.github/prompts/rollback.prompt.md +0 -723
  392. package/.github/prompts/verify.prompt.md +0 -271
  393. package/.github/workflows/beads-to-github.yml +0 -89
  394. package/.github/workflows/github-to-beads.yml +0 -100
  395. package/.kilocode/workflows/dev.md +0 -346
  396. package/.kilocode/workflows/plan.md +0 -567
  397. package/.kilocode/workflows/premerge.md +0 -187
  398. package/.kilocode/workflows/research.md +0 -43
  399. package/.kilocode/workflows/review.md +0 -452
  400. package/.kilocode/workflows/rollback.md +0 -722
  401. package/.kilocode/workflows/ship.md +0 -214
  402. package/.kilocode/workflows/sonarcloud.md +0 -150
  403. package/.kilocode/workflows/status.md +0 -91
  404. package/.kilocode/workflows/validate.md +0 -289
  405. package/.kilocode/workflows/verify.md +0 -270
  406. package/.opencode/commands/dev.md +0 -345
  407. package/.opencode/commands/plan.md +0 -566
  408. package/.opencode/commands/premerge.md +0 -186
  409. package/.opencode/commands/research.md +0 -42
  410. package/.opencode/commands/review.md +0 -451
  411. package/.opencode/commands/rollback.md +0 -721
  412. package/.opencode/commands/ship.md +0 -213
  413. package/.opencode/commands/sonarcloud.md +0 -149
  414. package/.opencode/commands/status.md +0 -90
  415. package/.opencode/commands/validate.md +0 -288
  416. package/.opencode/commands/verify.md +0 -269
  417. package/.roo/commands/dev.md +0 -346
  418. package/.roo/commands/plan.md +0 -567
  419. package/.roo/commands/premerge.md +0 -187
  420. package/.roo/commands/research.md +0 -43
  421. package/.roo/commands/review.md +0 -452
  422. package/.roo/commands/rollback.md +0 -722
  423. package/.roo/commands/ship.md +0 -214
  424. package/.roo/commands/sonarcloud.md +0 -150
  425. package/.roo/commands/status.md +0 -91
  426. package/.roo/commands/validate.md +0 -289
  427. package/.roo/commands/verify.md +0 -270
  428. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  429. package/docs/GREPTILE_SETUP.md +0 -400
  430. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  431. package/docs/SETUP.md +0 -663
  432. package/docs/VALIDATION.md +0 -363
  433. package/lib/agents/cline.plugin.json +0 -29
  434. package/lib/agents/copilot.plugin.json +0 -24
  435. package/lib/agents/kilocode.plugin.json +0 -22
  436. package/lib/agents/opencode.plugin.json +0 -23
  437. package/lib/agents/roo.plugin.json +0 -30
  438. package/lib/beads-bootstrap.js +0 -225
  439. package/lib/beads-health-check.js +0 -188
  440. package/lib/commands/commands-reset.js +0 -147
  441. package/opencode.json +0 -67
  442. package/scripts/beads-context.test.js +0 -584
  443. package/scripts/github-beads-sync/comment.mjs +0 -64
  444. package/scripts/github-beads-sync/config.mjs +0 -148
  445. package/scripts/github-beads-sync/github-api.mjs +0 -131
  446. package/scripts/github-beads-sync/index.mjs +0 -356
  447. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  448. package/scripts/github-beads-sync/mapping.mjs +0 -132
  449. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  450. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  451. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  452. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  453. package/scripts/github-beads-sync.config.json +0 -26
  454. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,185 @@
1
+ # Support And Troubleshooting
2
+
3
+ Start here when Forge setup, Beads, protected state, GitHub sync, worktrees, validation, or release readiness fails.
4
+
5
+ ## First Checks
6
+
7
+ ```bash
8
+ git status --short --branch
9
+ git remote show origin
10
+ bun --version
11
+ node --version
12
+ bun run check
13
+ ```
14
+
15
+ If the failure involves Beads:
16
+
17
+ ```bash
18
+ bd doctor
19
+ bd dolt status
20
+ forge sync
21
+ ```
22
+
23
+ If `forge` wrappers fail because Beads is unavailable, use direct `git`, `gh`, and `bd` commands only after identifying the source of truth.
24
+
25
+ For branch-specific checks, resolve the default branch first:
26
+
27
+ ```powershell
28
+ $defaultBranch = git remote show origin | Select-String 'HEAD branch' | ForEach-Object { $_.ToString().Split(':')[-1].Trim() }
29
+ ```
30
+
31
+ ## FAQ
32
+
33
+ ### Is DeepWiki the source of truth?
34
+
35
+ No. DeepWiki is generated from the repository. Fix README, CHANGELOG, quickstart, docs, CLI files, and tests first, then refresh DeepWiki.
36
+
37
+ ### Is Forge only the seven-stage TDD workflow?
38
+
39
+ No. The default template is TDD-first, but Forge is a runtime control plane with local state, gates, adapters, issue wrappers, validation evidence, and recovery surfaces.
40
+
41
+ ### Are `/review` and `/verify` CLI commands?
42
+
43
+ They are agent workflow stages. Do not document them as `forge review` or `forge verify` unless those CLI commands exist in the current code.
44
+
45
+ ### Does protected state always block edits?
46
+
47
+ Only when `scripts/protected-state-check.js` is wired into the active hook or CI path. The model is real, but enforcement depends on configuration.
48
+
49
+ ### Can agents publish releases?
50
+
51
+ Agents can prepare a release PR and validation evidence. Publishing is out of scope unless the user explicitly requests it.
52
+
53
+ ## Beads And Dolt Recovery
54
+
55
+ Common errors:
56
+
57
+ - `Beads is not initialized in this project.`
58
+ - `database "forge" not found on Dolt server`
59
+ - `database locked`
60
+ - stale `.beads/backup` data
61
+ - Windows EPERM or locked files during worktree cleanup
62
+
63
+ Triage:
64
+
65
+ ```bash
66
+ bd doctor
67
+ bd dolt status
68
+ bd dolt pull
69
+ bd dolt push
70
+ ```
71
+
72
+ If the Dolt server is serving the wrong database or data directory, stop and diagnose before closing or rewriting issue state. Use the root checkout when the feature worktree has an incomplete `.beads` runtime.
73
+
74
+ Recovery guidance:
75
+
76
+ - Preserve current state first: copy `.beads/backup` or export a Beads backup if the command is available.
77
+ - Prefer `forge sync` when Beads is configured and healthy.
78
+ - Use `bd close`, `bd comments`, or `bd dep` directly only for operations Forge does not wrap or when wrappers fail.
79
+ - Do not create follow-up PRs just to commit Beads runtime metadata. `.beads/` is local non-versioned state; shared state must flow through the configured sync/server authority or an explicit projection/import path.
80
+ - Do not hand-edit `.beads` live state unless a recovery procedure explicitly requires it.
81
+ - Success proof is concrete: `bd doctor` exits cleanly, `bd dolt status` is understandable, and `forge ready` or `forge show <id>` can read current issue state.
82
+
83
+ ## GitHub Sync
84
+
85
+ `forge setup --sync` is deprecated and removes old generated GitHub/Beads sync scaffolding. `forge sync` still runs local Beads/Dolt sync operations when configured. Future GitHub issue sync belongs to Forge Kernel/server authority.
86
+
87
+ Modern sync should use snapshot, backup, server authority, or explicit projection files, not stale examples that edit or commit live `.beads/issues.jsonl` directly.
88
+
89
+ When sync fails:
90
+
91
+ ```bash
92
+ gh auth status
93
+ bd doctor
94
+ bd dolt status
95
+ ```
96
+
97
+ ```powershell
98
+ gh run list --branch $defaultBranch --limit 10
99
+ ```
100
+
101
+ Check whether GitHub owns the field you are trying to update. GitHub owns shared remote issue fields; Forge/Beads owns local workflow context and recovery metadata.
102
+
103
+ ## Worktrees
104
+
105
+ Create isolated work:
106
+
107
+ ```bash
108
+ forge worktree create <slug> --branch <branch-name>
109
+ ```
110
+
111
+ Remove it:
112
+
113
+ ```bash
114
+ forge worktree remove <slug>
115
+ ```
116
+
117
+ If removal fails on Windows:
118
+
119
+ 1. Stop any active `node`, `bun`, `gh`, or Dolt process using the worktree.
120
+ 2. Run `git worktree list`.
121
+ 3. Prove the branch is preserved: `git status --short --branch` and `git log --oneline -1`.
122
+ 4. Retry `forge worktree remove <slug>`.
123
+ 5. If Git already unregistered the worktree but files remain locked, wait for the process to exit before deleting the leftover directory.
124
+
125
+ Never delete a worktree before verifying that its branch is pushed or intentionally disposable.
126
+
127
+ ## Branch Protection
128
+
129
+ Branch protection can reject direct pushes to `master` or `main` with `GH006`. That is expected for code changes.
130
+
131
+ Beads runtime metadata is not a branch-protection exception. If shared state is required, use the configured sync/server authority or an explicit projection/import path; do not open metadata-only PRs for live `.beads/` files.
132
+
133
+ Recovery:
134
+
135
+ ```bash
136
+ git status --short --branch
137
+ gh pr checks <pr-number>
138
+ ```
139
+
140
+ ```powershell
141
+ git fetch origin $defaultBranch
142
+ ```
143
+
144
+ If shared metadata cannot sync, diagnose the sync/server authority path instead of pushing live `.beads/` state to the protected branch.
145
+
146
+ ## Rollback And Recovery Paths
147
+
148
+ Choose the rollback path by surface:
149
+
150
+ - Release documentation confusion: revert the release PR or open a corrective docs PR. Do not publish while README, CHANGELOG, Quickstart, package metadata, and release docs disagree.
151
+ - Setup-generated files: rerun `forge setup --dry-run` first, then rerun setup with the intended `--merge` mode. Preserve existing instruction files before replacing them.
152
+ - Beads metadata: prefer `forge sync`, server authority, or explicit projection/import paths. Avoid direct `.beads` edits unless a documented recovery path requires them.
153
+ - Failed GitHub sync commit: inspect the workflow run, preserve the generated backup or snapshot, then replay through the configured sync workflow or a follow-up branch.
154
+ - Worktree cleanup: prove the branch is pushed or disposable before removal, then remove through `forge worktree remove <slug>` or Git's worktree command if Forge is unavailable.
155
+
156
+ ## Protected State
157
+
158
+ Protected surfaces include `.beads`, `.forge`, generated agent harness files, workflows, lockfiles, extension manifests, secrets, immutable Git internals, and append-only logs.
159
+
160
+ If a protected-state check blocks a file:
161
+
162
+ 1. Read the repair hint.
163
+ 2. Use the owning command or API surface.
164
+ 3. For Forge-owned writes, set `FORGE_PROTECTED_STATE_ALLOWED_SURFACES` only for the surfaces that command owns.
165
+ 4. For Beads metadata after merge, keep `.beads/` local and diagnose the sync/server authority path when shared state is required.
166
+
167
+ ## Validation Failures
168
+
169
+ `bun run check` runs:
170
+
171
+ 1. `bun run typecheck`
172
+ 2. `bun run lint`
173
+ 3. `bun audit`
174
+ 4. `node scripts/test.js --validate`
175
+
176
+ Fix the first failing stage first. Do not hide a validation failure by documenting that it "should pass"; rerun the command and record the fresh result.
177
+
178
+ ## Known Limitations
179
+
180
+ - Package version remains separate from docs readiness until release/publish occurs.
181
+ - `forge migrate` is dry-run only.
182
+ - Protected-state enforcement depends on hooks/CI wiring.
183
+ - Review adapters currently focus on review adapters and Greptile-shaped scaffolding.
184
+ - DeepWiki can lag after merge until refreshed.
185
+ - Some external services require credentials and branch protection setup outside Forge.
@@ -0,0 +1,74 @@
1
+ # Workflow Templates
2
+
3
+ Forge's workflow is a core product surface, not a side note. The default template gives agents a known path for planning, development, validation, shipping, review, and post-merge verification, with a pre-merge documentation gate that finishes docs and hands off the PR inside the ship and review stages.
4
+
5
+ ## Default Template
6
+
7
+ The full default template is:
8
+
9
+ ```text
10
+ /plan -> /dev -> /validate -> /ship -> /review -> /verify
11
+ ```
12
+
13
+ Projects can use the full template or smaller profile-specific paths. The important boundary is that these are agent workflow stages, not necessarily standalone `forge <stage>` CLI commands.
14
+
15
+ ## Why It Matters
16
+
17
+ The template gives AI-assisted work a repeatable operating model:
18
+
19
+ - `/plan` captures intent, research, branch/worktree setup, and tasks.
20
+ - `/dev` implements through a TDD-oriented loop.
21
+ - `/validate` gathers evidence from project checks.
22
+ - `/ship` prepares a reviewable PR.
23
+ - `/review` handles PR feedback and evaluator findings.
24
+ - `/verify` proves post-merge health when the workflow type requires it.
25
+
26
+ Before merge, a pre-merge documentation gate finishes documentation and handoff context. It is not a numbered stage or a `/premerge` command; it runs inside the `/ship` and `/review` stages.
27
+
28
+ The value is not the exact number of stages. The value is recoverable state, known handoff points, validation evidence, and clear ownership while agents work.
29
+
30
+ ## Customization Model
31
+
32
+ Forge treats the default workflow as a configurable template over runtime building blocks:
33
+
34
+ - stages can be skipped or shortened by workflow type,
35
+ - project setup can choose different harness targets,
36
+ - `.forge/config.yaml` records adoption profile and harness choices,
37
+ - `forge options lint`, `forge options diff`, and `forge options stages` inspect the resolved config,
38
+ - future work can add or replace stages through skills, adapters, and extension manifests.
39
+
40
+ Customization should stay explicit. Do not silently remove validation, review, or state handoff steps from high-risk work.
41
+
42
+ ## Workflow Types
43
+
44
+ Current docs describe these profiles:
45
+
46
+ | Type | Intended use | Typical path |
47
+ | --- | --- | --- |
48
+ | Critical | Security, auth, payments, migrations, breaking changes | Full template |
49
+ | Standard | Normal features and enhancements | Plan through review |
50
+ | Simple | Small fixes and focused changes | Shorter dev, validate, ship path |
51
+ | Hotfix | Production emergencies | Short path with urgent validation |
52
+ | Docs | Documentation-only changes | Verify and ship |
53
+ | Refactor | Behavior-preserving cleanup | Plan, dev, validate, ship |
54
+
55
+ Profile docs must be checked against `lib/workflow-profiles.js` and `AGENTS.md` before release because command files, skills, and runtime profiles can drift.
56
+
57
+ ## Skills Direction
58
+
59
+ Forge is moving toward skills as the portable agent-facing package format. Current v0.0.11 packaging still includes command projections for several agents, and Codex already receives stage workflows as `.codex/skills/<stage>/SKILL.md`.
60
+
61
+ See [Skills and command projections](../reference/SKILLS.md) for the current source-of-truth boundary.
62
+
63
+ ## Live Feature Rollout
64
+
65
+ When a planned feature becomes real, update docs in this order:
66
+
67
+ 1. Verify the code, tests, package contents, and CLI output.
68
+ 2. Move the feature from roadmap or experimental docs into ready-now docs.
69
+ 3. Update README, Quickstart, this guide, and the relevant reference page.
70
+ 4. Add migration or support notes if the feature changes setup, state, validation, or workflow behavior.
71
+ 5. Refresh DeepWiki after merge and record the generated index date and commit.
72
+
73
+ Do not document future workflow customization as ready-now until the command, skill, or runtime surface exists and has validation evidence.
74
+
@@ -0,0 +1,183 @@
1
+ # Forge Memory
2
+
3
+ Forge gives agents **durable project memory** through two verbs:
4
+
5
+ ```bash
6
+ forge remember "<note>" [--tag <label>]... # write a lasting fact
7
+ forge recall "[query]" [--limit N] # read it back
8
+ ```
9
+
10
+ Both route through a small **backend router** (`lib/memory/router.js`). The
11
+ backend is chosen by `memory.backend` in `.forge/config.yaml`:
12
+
13
+ | Backend | Storage | Needs | When |
14
+ |---|---|---|---|
15
+ | **`local`** (default) | kernel `kernel_memories` table, FTS5-indexed | nothing — offline, instant | always the floor |
16
+ | **`graphiti`** _(experimental)_ | temporal **knowledge graph** over MCP | graph DB + LLM | evolving, relational, temporal recall |
17
+
18
+ `local` and `graphiti` are the only public `memory.backend` values.
19
+
20
+ > **The local backend is the default and the guaranteed offline floor.** You do
21
+ > not need to configure anything to use `forge remember` / `forge recall`. The
22
+ > Graphiti backend is strictly **opt-in** and never changes the default path.
23
+ >
24
+ > **`graphiti` is experimental — its runtime emitter is not yet shipped.**
25
+ > Selecting it today still writes the local kernel floor (the graph emit is a
26
+ > best-effort no-op), so `recall` always reads back from the kernel. The config
27
+ > and `forge doctor` reachability checks work; the write-through emit is a
28
+ > fast-follow.
29
+
30
+ Precedence for selecting the backend:
31
+ `FORGE_MEMORY_BACKEND` env → `memory.backend` in config → `local`.
32
+
33
+ Check the active backend any time:
34
+
35
+ ```bash
36
+ forge doctor # reports the memory backend (+ graphiti reachability, non-fatal)
37
+ ```
38
+
39
+ ## Local (default) — nothing to set up
40
+
41
+ Notes persist to the kernel `kernel_memories` table (the per-repo Forge Kernel
42
+ SQLite store under `.git/forge/`), indexed by **FTS5** for token-AND BM25 recall.
43
+ No services, no network, no keys. This is what ships and what most projects
44
+ should use. `recall` with no query returns the newest notes plus a total count;
45
+ a query does full-text BM25 matching (every token must appear, in any order). The
46
+ same kernel table also holds what `forge insights` learns; those records are
47
+ recallable with a query or `--all` (the default no-query listing shows only your
48
+ `remember` notes). (An older flat `.forge/memory/notes.jsonl` is imported once on
49
+ first use, then retired.)
50
+
51
+ ## Opt into Graphiti (knowledge-graph memory)
52
+
53
+ [Graphiti](https://github.com/getzep/graphiti) (getzep/graphiti) is a Python
54
+ framework that turns notes ("episodes") into a **bi-temporal knowledge graph**:
55
+ an LLM extracts entities and facts, every fact carries two timelines (when it
56
+ was true in the world, and when the system learned it), and superseded facts are
57
+ **invalidated, not deleted** — so you can query "what is true now" or "what was
58
+ true at time T", with a pointer back to the source (provenance). It is served to
59
+ any MCP agent through Graphiti's **MCP server**; Forge only wires it in.
60
+
61
+ Forge does **not** bundle or reimplement Graphiti. Forge ships the config +
62
+ router seam and documents how to run Graphiti; when `memory.backend` resolves to
63
+ `graphiti` (and the config passes the same validity check `forge doctor` uses),
64
+ **`forge setup` automatically writes the MCP server entry** into `.mcp.json`
65
+ (Claude) and `.cursor/mcp.json` (Cursor) from the descriptor in
66
+ `lib/memory/graphiti-mcp.js`. For other harnesses (e.g. Codex `config.toml`) you
67
+ add the server entry yourself (template below). Design rationale and trade-offs:
68
+ [`docs/work/2026-07-06-graphiti-memory/research.md`](../work/2026-07-06-graphiti-memory/research.md).
69
+
70
+ ### 1. Turn it on (config)
71
+
72
+ Set the backend in `.forge/config.yaml` — additive and reversible:
73
+
74
+ ```yaml
75
+ memory:
76
+ backend: graphiti
77
+ graphiti:
78
+ # --- active today (validated by the router / forge doctor) ---
79
+ transport: stdio # stdio | http
80
+ mcpServerPath: ./graphiti/mcp_server # required — path to the Graphiti checkout's mcp_server dir
81
+ graphDb: falkordb # falkordb | falkordb-lite | neo4j
82
+ apiKeyEnv: OPENAI_API_KEY # referenced by NAME — never store the key here
83
+ # --- reserved: NO EFFECT yet (the descriptor emits ${VAR} env references, not these values) ---
84
+ dbUri: redis://localhost:6379
85
+ llmProvider: openai
86
+ model: gpt-5.5
87
+ groupId: <your-project>
88
+ ```
89
+
90
+ Only `mcpServerPath` is required today (it's what `forge doctor` checks and what
91
+ the descriptor threads into the launch args). The keys under "reserved" still
92
+ have no effect — the rendered entry references env vars (`${VAR}`), not these
93
+ literal values — set them now only if you like, they are no-ops until a renderer
94
+ consumes them.
95
+
96
+ Forge exposes the MCP server as a harness-agnostic **descriptor** (see
97
+ `lib/memory/graphiti-mcp.js`, `buildGraphitiServerDescriptor`) and `forge setup`
98
+ wires it into the right place for Claude (`.mcp.json`) and Cursor
99
+ (`.cursor/mcp.json`), preserving any servers you already have there. Codex
100
+ (`config.toml`) is not auto-wired yet. The descriptor's env values are `${VAR}`
101
+ references only — Forge never writes a secret into any committed config. The
102
+ rendered entry looks like:
103
+
104
+ ```json
105
+ "graphiti-memory": {
106
+ "transport": "stdio",
107
+ "command": "uv",
108
+ "args": ["run","--isolated","--directory","./graphiti/mcp_server",
109
+ "--project",".","main.py","--transport","stdio"],
110
+ "env": {
111
+ "FALKORDB_URI": "${FALKORDB_URI}",
112
+ "OPENAI_API_KEY": "${OPENAI_API_KEY}",
113
+ "MODEL_NAME": "${MODEL_NAME}",
114
+ "GROUP_ID": "${GRAPHITI_GROUP_ID}"
115
+ }
116
+ }
117
+ ```
118
+
119
+ ### 2. Run the graph DB + MCP server
120
+
121
+ Graphiti needs a **graph database** and an **LLM/embedder**. The documented
122
+ default is **FalkorDB** (a light, Redis-based graph DB via Docker) with an
123
+ OpenAI-compatible model. Roughly:
124
+
125
+ ```bash
126
+ # a) graph DB (FalkorDB) — or run the Graphiti combined Docker Compose
127
+ docker run -p 6379:6379 -it --rm falkordb/falkordb:latest
128
+
129
+ # b) the Graphiti MCP server (from a graphiti checkout)
130
+ git clone https://github.com/getzep/graphiti
131
+ cd graphiti/mcp_server
132
+ export OPENAI_API_KEY=sk-... # or point at an OpenAI-compatible endpoint
133
+ uv run --isolated --directory . --project . main.py --transport stdio
134
+ ```
135
+
136
+ Set `memory.graphiti.mcpServerPath` in `.forge/config.yaml` to the checkout's
137
+ `mcp_server` directory so `forge doctor` can see it.
138
+
139
+ **Alternatives** (all documented in the design doc):
140
+
141
+ - **Graph DB:** FalkorDB (Docker, default) · FalkorDB-lite (embedded, Python
142
+ 3.12+, no server) · Neo4j (production). Set `memory.graphiti.graphDb` +
143
+ `dbUri` accordingly (Neo4j uses `NEO4J_URI` plus `NEO4J_USER` and
144
+ `NEO4J_PASSWORD`).
145
+ - **LLM/embedder:** OpenAI (best quality) · any OpenAI-compatible endpoint
146
+ (OpenRouter, DeepSeek, Together) · **Ollama** for a fully local/offline stack
147
+ (`ollama pull deepseek-r1:7b` + `ollama pull nomic-embed-text`). Set
148
+ `memory.graphiti.llmProvider` / `model` / `apiKeyEnv`.
149
+
150
+ ### 3. Use it
151
+
152
+ Once wired, **agents** call the graph directly over MCP:
153
+
154
+ - `add_memory` — record a durable fact/decision as an episode (scope with
155
+ `group_id`). Ingestion is LLM-backed, so treat writes as async.
156
+ - `search_memory_facts` — retrieve facts/edges (with validity windows) before
157
+ assuming.
158
+ - `search_nodes` — find entities and summaries.
159
+
160
+ The **`memory` skill** ([`skills/memory/SKILL.md`](../../skills/memory/SKILL.md))
161
+ teaches agents when and how to use these. `forge remember` / `forge recall` keep
162
+ working from the CLI — when the graph backend is selected they still write to the
163
+ local kernel store as a safety floor, so a note is never lost.
164
+
165
+ ## Privacy & cost (read before enabling)
166
+
167
+ - **Privacy:** with an LLM provider like OpenAI, **every note you add as an
168
+ episode is sent to that LLM** for entity/fact extraction. For private dev
169
+ notes this matters — use the Ollama/local path if that is a concern.
170
+ - **Cost + latency:** `add_memory` fires **multiple LLM calls** per episode, so
171
+ writes are billable and take from sub-second to a couple of seconds. Prefer
172
+ async ingest; retrieval is cheap.
173
+ - **Ops:** you run and maintain a graph DB + the (experimental) Graphiti MCP
174
+ server. This is a real jump from "write a note to the local kernel store" —
175
+ which is exactly why it is opt-in and the local backend stays the default.
176
+
177
+ ## Turning it off
178
+
179
+ Remove `memory.backend` (and the `memory.graphiti` block) from
180
+ `.forge/config.yaml` — the router falls straight back to `local`. Your local
181
+ kernel notes were never touched. If a `graphiti-memory` entry is in your agent's
182
+ MCP config — whether `forge setup` wrote it when you enabled Graphiti, or you
183
+ added it by hand — delete it too.
@@ -0,0 +1,128 @@
1
+ # Forge Adapters
2
+
3
+ Forge adapters normalize provider-specific surfaces behind Forge-owned contracts. The bundled adapters are reference implementations; Forge owns the contract and authority rules.
4
+
5
+ Current public support is narrow: Beads is the reference issue adapter, and review-adapter scaffolding supports review adapters with a Greptile-shaped starter template. Other adapter kinds are roadmap or internal design work until implemented and tested.
6
+
7
+ ## Issue Adapters
8
+
9
+ Issue adapters expose issue tracking operations without making Beads, GitHub, Linear, Jira, or another provider the Forge API. The bundled reference adapter is `BeadsIssueAdapter`.
10
+
11
+ ### Issue Contract
12
+
13
+ An issue adapter has `kind: "issue"` and implements these methods:
14
+
15
+ - `list(args, context)`: list issues from the provider/backend.
16
+ - `read(args, context)`: read a single issue. The Beads adapter maps this to `bd show`.
17
+ - `create(args, context)`: create an issue.
18
+ - `update(args, context)`: update issue fields.
19
+ - `close(args, context)`: close an issue.
20
+ - `comment(args, context)`: add an issue comment. The Beads adapter maps this to `bd comments add`.
21
+ - `mapStatus(status, context)`: map provider status into the requested target state.
22
+ - `decideAuthority(change, context)`: return the Forge authority decision for a field change.
23
+
24
+ ### Issue Authority
25
+
26
+ GitHub owns shared team-visible fields: GitHub identity, URL, title, body, state, assignees, labels, milestone, and remote update timestamps.
27
+
28
+ Forge owns workflow and project context: Forge issue id, dependencies, parent/child links, workflow stages, acceptance criteria, progress notes, stage transitions, decisions, memory, outbound projection bookkeeping, and drift diagnostics.
29
+
30
+ Beads is the local/reference issue adapter and cache backend. Cache fields are derived and may be rebuilt. Unknown field paths are rejected until the authority model explicitly assigns ownership.
31
+
32
+ ### Conflict Behavior
33
+
34
+ During pull/import, GitHub-owned remote fields overwrite local materialized shared fields and differences are recorded as drift diagnostics. Forge-owned fields are preserved locally and are not overwritten by GitHub import. Cache fields are rebuilt from the authoritative inputs.
35
+
36
+ ### Issue Non-Scope
37
+
38
+ Issue adapters do not implement team dashboard UI, ReviewAdapter internals, GitHub Projects board automation, or full comment/discussion import. GitHub issue import must use the existing `lib/issue-sync/import-primitives.js` reconciliation path rather than a separate import contract.
39
+
40
+ ## Review Adapters
41
+
42
+ Forge review adapters normalize provider-specific review feedback into one contract used by review tooling and offline fixture tests.
43
+
44
+ ### Review Contract
45
+
46
+ A review adapter has `kind: "review"` and implements these methods:
47
+
48
+ - `fetchThreads(context)`: fetch provider review threads. Live adapters may use GitHub, REST, GraphQL, or a provider SDK.
49
+ - `parse(payload, options)`: normalize provider payloads into review thread objects.
50
+ - `reply(context)`: post a reply to a provider review comment.
51
+ - `resolve(context)`: mark a provider review thread resolved.
52
+ - `score(threads, context)`: score or classify parsed threads, usually by checking local commits or fixture data.
53
+
54
+ Normalized thread shape:
55
+
56
+ ```js
57
+ {
58
+ id: 'provider-thread-id',
59
+ commentId: 123,
60
+ file: 'lib/example.js',
61
+ line: 42,
62
+ body: 'review text',
63
+ author: 'review-bot',
64
+ isResolved: false,
65
+ raw: {}
66
+ }
67
+ ```
68
+
69
+ ### Review Lifecycle
70
+
71
+ 1. `fetchThreads` obtains raw provider data for live review runs.
72
+ 2. `parse` filters and normalizes the provider data.
73
+ 3. `score` decides whether local work appears to address each parsed thread.
74
+ 4. `reply` posts the resolution explanation.
75
+ 5. `resolve` closes the provider thread after a reply is recorded.
76
+
77
+ The bundled `GreptileReviewAdapter` is the compatibility reference. Existing Greptile shell commands keep their public command names while the shared matching behavior is routed through the adapter implementation.
78
+
79
+ ### Review Scaffold
80
+
81
+ Create a local review adapter starter:
82
+
83
+ ```bash
84
+ forge new adapter coderabbit --kind=review --template=greptile
85
+ ```
86
+
87
+ The scaffold is written to:
88
+
89
+ ```text
90
+ .forge/adapters/review/coderabbit.js
91
+ ```
92
+
93
+ Only review adapters and the Greptile-shaped starter template are supported in this foundation PR.
94
+
95
+ ### Review Fixture Replay
96
+
97
+ Run adapter parsing and scoring offline:
98
+
99
+ ```bash
100
+ forge adapter test greptile --fixture=fixtures/greptile-review.json
101
+ ```
102
+
103
+ Fixture shape:
104
+
105
+ ```json
106
+ {
107
+ "input": {
108
+ "data": {
109
+ "repository": {
110
+ "pullRequest": {
111
+ "reviewThreads": {
112
+ "nodes": []
113
+ }
114
+ }
115
+ }
116
+ }
117
+ },
118
+ "expect": {
119
+ "threads": 0
120
+ }
121
+ }
122
+ ```
123
+
124
+ Fixture replay must not make network calls. Live provider calls belong in `fetchThreads`, `reply`, and `resolve`.
125
+
126
+ ### Review Non-Scope
127
+
128
+ Review adapters do not implement issue tracking, GitHub issue sync, or the full v3 reference adapter template catalog.