forge-workflow 0.0.10 → 0.1.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) 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 +82 -5
  5. package/.forge/hooks/forge-native-hook.js +431 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +709 -0
  9. package/CLAUDE.md +9 -118
  10. package/QUICKSTART.md +175 -0
  11. package/README.md +275 -365
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +532 -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 +121 -0
  29. package/docs/guides/SUPPORT.md +190 -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 +214 -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 +155 -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/activation/ensure-forge-home.js +135 -0
  67. package/lib/adapter-cli.js +307 -0
  68. package/lib/adapters/beads-issue-adapter.js +127 -0
  69. package/lib/adapters/beads-kernel-compat.js +1109 -0
  70. package/lib/adapters/greptile-review-adapter.js +141 -0
  71. package/lib/adapters/kernel-issue-adapter.js +101 -0
  72. package/lib/adapters/pr-state-adapter.js +484 -0
  73. package/lib/adoption-profiles.js +139 -0
  74. package/lib/agents/README.md +2 -6
  75. package/lib/agents/claude.plugin.json +3 -8
  76. package/lib/agents/codex.plugin.json +9 -1
  77. package/lib/agents/cursor.plugin.json +2 -6
  78. package/lib/agents/hermes.plugin.json +22 -0
  79. package/lib/agents-config.js +39 -1236
  80. package/lib/audit-evidence.js +282 -0
  81. package/lib/beads-detect.js +60 -0
  82. package/lib/beads-nudge.js +91 -0
  83. package/lib/beads-setup.js +121 -0
  84. package/lib/beads-sync-scaffold.js +25 -101
  85. package/lib/codex-skills.js +51 -1
  86. package/lib/commands/_aliases.js +248 -0
  87. package/lib/commands/_issue.js +780 -77
  88. package/lib/commands/_manifest.js +93 -0
  89. package/lib/commands/_registry.js +99 -34
  90. package/lib/commands/_resolve-command-opts.js +230 -0
  91. package/lib/commands/_serve-security.js +270 -0
  92. package/lib/commands/adapter.js +12 -0
  93. package/lib/commands/add.js +118 -0
  94. package/lib/commands/audit.js +70 -0
  95. package/lib/commands/blocked.js +5 -0
  96. package/lib/commands/board.js +64 -0
  97. package/lib/commands/claim.js +21 -2
  98. package/lib/commands/claims.js +7 -0
  99. package/lib/commands/clean.js +485 -75
  100. package/lib/commands/close.js +2 -2
  101. package/lib/commands/comment.js +5 -0
  102. package/lib/commands/control.js +148 -0
  103. package/lib/commands/create.js +2 -2
  104. package/lib/commands/dev.js +185 -7
  105. package/lib/commands/doc-gate.js +336 -0
  106. package/lib/commands/doctor.js +156 -0
  107. package/lib/commands/explain.js +15 -0
  108. package/lib/commands/export.js +237 -0
  109. package/lib/commands/gate.js +209 -0
  110. package/lib/commands/hooks.js +377 -0
  111. package/lib/commands/inbox.js +118 -0
  112. package/lib/commands/init.js +604 -0
  113. package/lib/commands/insights.js +79 -0
  114. package/lib/commands/issue.js +12 -1
  115. package/lib/commands/issues.js +17 -0
  116. package/lib/commands/lint.js +5 -0
  117. package/lib/commands/list.js +2 -2
  118. package/lib/commands/memory.js +81 -0
  119. package/lib/commands/merge.js +312 -0
  120. package/lib/commands/migrate.js +362 -0
  121. package/lib/commands/new.js +12 -0
  122. package/lib/commands/options.js +241 -0
  123. package/lib/commands/orient.js +13 -0
  124. package/lib/commands/orphans.js +5 -0
  125. package/lib/commands/patch.js +67 -0
  126. package/lib/commands/plan.js +481 -29
  127. package/lib/commands/pr.js +88 -0
  128. package/lib/commands/preflight.js +211 -0
  129. package/lib/commands/prime.js +13 -0
  130. package/lib/commands/push.js +135 -2
  131. package/lib/commands/ready.js +2 -2
  132. package/lib/commands/recall.js +171 -0
  133. package/lib/commands/recap.js +75 -0
  134. package/lib/commands/recommend.js +0 -1
  135. package/lib/commands/release.js +104 -0
  136. package/lib/commands/remember.js +140 -0
  137. package/lib/commands/role.js +99 -0
  138. package/lib/commands/serve.js +581 -0
  139. package/lib/commands/setup.js +900 -971
  140. package/lib/commands/shepherd.js +501 -0
  141. package/lib/commands/ship.js +59 -1
  142. package/lib/commands/show.js +2 -2
  143. package/lib/commands/stage.js +192 -0
  144. package/lib/commands/stale.js +5 -0
  145. package/lib/commands/status.js +158 -21
  146. package/lib/commands/sync.js +34 -46
  147. package/lib/commands/team.js +4 -1
  148. package/lib/commands/test.js +43 -27
  149. package/lib/commands/update.js +2 -2
  150. package/lib/commands/upgrade.js +47 -0
  151. package/lib/commands/validate.js +43 -18
  152. package/lib/commands/worktree.js +362 -99
  153. package/lib/config-writer.js +202 -0
  154. package/lib/control-plane.js +236 -0
  155. package/lib/core/runtime-graph.js +977 -0
  156. package/lib/dep-guard/keyword-ripple.js +2 -2
  157. package/lib/deprecated-sync-cleanup.js +362 -0
  158. package/lib/detect-agent.js +2 -28
  159. package/lib/detect-worktree.js +35 -9
  160. package/lib/doc-gate/declaration.js +177 -0
  161. package/lib/doc-gate/detect.js +289 -0
  162. package/lib/doc-gate/gate.js +375 -0
  163. package/lib/doc-gate/okf-config.js +128 -0
  164. package/lib/doc-gate/okf.js +429 -0
  165. package/lib/docs-command.js +1161 -6
  166. package/lib/forge-issues.js +382 -11
  167. package/lib/forge-lock.js +262 -0
  168. package/lib/gate-events.js +192 -0
  169. package/lib/global-flags.js +104 -0
  170. package/lib/greptile-match.js +7 -63
  171. package/lib/grounding/context-events.js +230 -0
  172. package/lib/grounding/read-first.js +112 -0
  173. package/lib/harness-capability-matrix.js +380 -0
  174. package/lib/hook-global-installer.js +347 -0
  175. package/lib/hook-renderer.js +541 -0
  176. package/lib/inbox.js +391 -0
  177. package/lib/insights.js +397 -0
  178. package/lib/issue-adapter.js +156 -0
  179. package/lib/issue-backend.js +145 -0
  180. package/lib/issue-render.js +220 -0
  181. package/lib/kernel/backing-issue.js +311 -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/owned-kernel.js +43 -0
  192. package/lib/kernel/planning-buckets-schema.js +109 -0
  193. package/lib/kernel/projection-jsonl-writer.js +450 -0
  194. package/lib/kernel/readiness-model.js +329 -0
  195. package/lib/kernel/schema.js +356 -0
  196. package/lib/kernel/sqlite-driver.js +2540 -0
  197. package/lib/kernel/taxonomy-validator.js +394 -0
  198. package/lib/lefthook-check.js +3 -2
  199. package/lib/lefthook-wiring.js +413 -0
  200. package/lib/mcp-config-renderer.js +288 -0
  201. package/lib/memory/graphiti-mcp.js +106 -0
  202. package/lib/memory/router.js +387 -0
  203. package/lib/memory/typed-api.js +102 -0
  204. package/lib/memory-digest.js +195 -0
  205. package/lib/merge-rules.js +395 -0
  206. package/lib/migrate-dry-run.js +466 -0
  207. package/lib/orientation.js +863 -0
  208. package/lib/package-manager-remediation.js +103 -0
  209. package/lib/package-root.js +381 -0
  210. package/lib/patch-intent.js +890 -0
  211. package/lib/plugin-catalog.js +3 -4
  212. package/lib/plugin-manager.js +0 -5
  213. package/lib/pr-bundle.js +186 -0
  214. package/lib/pr-monitor/auto-actions.js +175 -0
  215. package/lib/pr-monitor/differ.js +195 -0
  216. package/lib/pr-monitor/digest.js +206 -0
  217. package/lib/pr-monitor/events.js +0 -0
  218. package/lib/pr-monitor/gather.js +124 -0
  219. package/lib/pr-monitor/journal.js +299 -0
  220. package/lib/pr-monitor/monitor.js +146 -0
  221. package/lib/pr-monitor/render-sticky.js +192 -0
  222. package/lib/pr-monitor/upsert-sticky.js +169 -0
  223. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  224. package/lib/pr-monitor/watch.js +247 -0
  225. package/lib/pr-pull.js +1314 -0
  226. package/lib/pr-shepherd.js +494 -0
  227. package/lib/pr-state-validator.js +59 -0
  228. package/lib/preflight/gates.js +237 -0
  229. package/lib/preflight/runner.js +116 -0
  230. package/lib/project-discovery.js +0 -53
  231. package/lib/project-memory.js +99 -497
  232. package/lib/protected-path-manifest.js +281 -0
  233. package/lib/protected-state-surfaces.js +387 -0
  234. package/lib/release-readiness.js +2105 -0
  235. package/lib/reset.js +59 -45
  236. package/lib/review-adapter.js +68 -0
  237. package/lib/rules-sync.js +260 -0
  238. package/lib/runtime-health.js +241 -20
  239. package/lib/safety-config-renderer.js +268 -0
  240. package/lib/setup-action-log.js +1 -7
  241. package/lib/setup.js +27 -65
  242. package/lib/shell-utils.js +76 -6
  243. package/lib/skills-sync.js +330 -0
  244. package/lib/smart-status/scoring.js +17 -3
  245. package/lib/status/beads-snapshot.js +45 -2
  246. package/lib/status/presenter.js +169 -18
  247. package/lib/status/snapshot.js +186 -0
  248. package/lib/sync-backend.js +202 -0
  249. package/lib/untrusted-content.js +52 -0
  250. package/lib/upgrade-safety.js +251 -0
  251. package/lib/workflow/enforce-stage.js +351 -45
  252. package/lib/workflow/stage-transition.js +115 -0
  253. package/lib/workflow/stages.js +30 -6
  254. package/lib/workflow/state-manager.js +11 -22
  255. package/lib/workflow/state.js +23 -1
  256. package/lib/workflow-profiles.js +17 -5
  257. package/package.json +37 -35
  258. package/rules/documentation.md +19 -0
  259. package/rules/kernel-tracking.md +26 -0
  260. package/rules/security.md +22 -0
  261. package/rules/tdd.md +20 -0
  262. package/rules/workflow.md +27 -0
  263. package/scripts/auto-backing-issue.js +47 -0
  264. package/scripts/beads-context.sh +81 -57
  265. package/scripts/beads-upgrade-smoke.sh +24 -3
  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.sh +22 -3
  272. package/scripts/file-index.sh +3 -0
  273. package/scripts/forge-team/lib/claim.sh +34 -18
  274. package/scripts/forge-team/lib/dashboard.sh +61 -86
  275. package/scripts/forge-team/lib/epic.sh +99 -263
  276. package/scripts/forge-team/lib/hooks.sh +26 -28
  277. package/scripts/forge-team/lib/identity.sh +4 -4
  278. package/scripts/forge-team/lib/sync-github.sh +49 -84
  279. package/scripts/forge-team/lib/verify.sh +93 -83
  280. package/scripts/forge-team/lib/workload.sh +41 -65
  281. package/scripts/forge-team/tests/claim.test.sh +25 -19
  282. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  283. package/scripts/forge-team/tests/epic.test.sh +52 -71
  284. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  285. package/scripts/forge-team/tests/identity.test.sh +3 -3
  286. package/scripts/forge-team/tests/integration.test.sh +44 -66
  287. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  288. package/scripts/forge-team/tests/verify.test.sh +37 -46
  289. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  290. package/scripts/forge-team/tests/workload.test.sh +32 -66
  291. package/scripts/gen-command-manifest.js +153 -0
  292. package/scripts/gen-embedded-assets.mjs +129 -0
  293. package/scripts/install.ps1 +139 -0
  294. package/scripts/install.sh +268 -0
  295. package/scripts/lib/release-asset.mjs +84 -0
  296. package/scripts/parity-check.mjs +145 -0
  297. package/scripts/parity-check.test.mjs +58 -0
  298. package/scripts/pin-agentic-workflow-images.js +112 -0
  299. package/scripts/pr-auto-actions.js +93 -0
  300. package/scripts/pr-coordinator.sh +3 -0
  301. package/scripts/pr-verdict-label.js +50 -0
  302. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  303. package/scripts/preflight.sh +21 -94
  304. package/scripts/protected-state-check.js +104 -0
  305. package/scripts/smart-status.sh +60 -57
  306. package/scripts/spikes/config-race-bench.js +111 -0
  307. package/scripts/spikes/harness-capability-matrix.js +13 -0
  308. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  309. package/scripts/spikes/protected-path-manifest.js +20 -0
  310. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  311. package/scripts/sync-agent-skills.js +62 -0
  312. package/scripts/sync-utils.sh +3 -0
  313. package/scripts/test-ci-shard.js +13 -6
  314. package/scripts/test.js +95 -12
  315. package/skills/claim-safety/SKILL.md +102 -0
  316. package/skills/claim-safety/evals/evals.json +46 -0
  317. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  318. package/skills/dev/evals/evals.json +50 -0
  319. package/skills/hermes-forge/SKILL.md +185 -0
  320. package/skills/hermes-forge/evals/evals.json +46 -0
  321. package/skills/issue-basics/SKILL.md +111 -0
  322. package/skills/issue-basics/evals/evals.json +46 -0
  323. package/skills/kernel/SKILL.md +166 -0
  324. package/skills/kernel/evals/evals.json +50 -0
  325. package/skills/memory/SKILL.md +102 -0
  326. package/skills/parallel-deep-research/SKILL.md +14 -11
  327. package/skills/parallel-deep-research/evals/evals.json +11 -27
  328. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  329. package/skills/plan/evals/evals.json +42 -0
  330. package/skills/research/SKILL.md +195 -0
  331. package/skills/research/evals/evals.json +42 -0
  332. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  333. package/skills/review/evals/evals.json +42 -0
  334. package/skills/rollback/SKILL.md +110 -0
  335. package/skills/rollback/evals/evals.json +46 -0
  336. package/skills/rollback/references/methods.md +204 -0
  337. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  338. package/skills/shepherd/SKILL.md +66 -0
  339. package/skills/shepherd/evals/evals.json +42 -0
  340. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  341. package/skills/ship/evals/evals.json +42 -0
  342. package/skills/smith/SKILL.md +142 -0
  343. package/skills/smith/evals/evals.json +46 -0
  344. package/skills/smith/references/autonomy-and-gates.md +94 -0
  345. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  346. package/skills/sonarcloud/evals/evals.json +46 -0
  347. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  348. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  349. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  350. package/skills/status/evals/evals.json +50 -0
  351. package/skills/triage-ready/SKILL.md +121 -0
  352. package/skills/triage-ready/evals/evals.json +42 -0
  353. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  354. package/skills/validate/evals/evals.json +42 -0
  355. package/skills/verify/SKILL.md +299 -0
  356. package/skills/verify/evals/evals.json +50 -0
  357. package/.claude/commands/dev.md +0 -345
  358. package/.claude/commands/plan.md +0 -566
  359. package/.claude/commands/premerge.md +0 -186
  360. package/.claude/commands/research.md +0 -42
  361. package/.claude/commands/review.md +0 -451
  362. package/.claude/commands/rollback.md +0 -721
  363. package/.claude/commands/ship.md +0 -213
  364. package/.claude/commands/sonarcloud.md +0 -152
  365. package/.claude/commands/status.md +0 -90
  366. package/.claude/commands/validate.md +0 -288
  367. package/.claude/commands/verify.md +0 -269
  368. package/.claude/rules/workflow.md +0 -121
  369. package/.cline/workflows/dev.md +0 -342
  370. package/.cline/workflows/plan.md +0 -563
  371. package/.cline/workflows/premerge.md +0 -183
  372. package/.cline/workflows/research.md +0 -39
  373. package/.cline/workflows/review.md +0 -448
  374. package/.cline/workflows/rollback.md +0 -718
  375. package/.cline/workflows/ship.md +0 -210
  376. package/.cline/workflows/sonarcloud.md +0 -146
  377. package/.cline/workflows/status.md +0 -87
  378. package/.cline/workflows/validate.md +0 -285
  379. package/.cline/workflows/verify.md +0 -266
  380. package/.codex/config.toml +0 -11
  381. package/.codex/skills/dev/SKILL.md +0 -345
  382. package/.codex/skills/plan/SKILL.md +0 -566
  383. package/.codex/skills/premerge/SKILL.md +0 -186
  384. package/.codex/skills/research/SKILL.md +0 -42
  385. package/.codex/skills/review/SKILL.md +0 -451
  386. package/.codex/skills/rollback/SKILL.md +0 -721
  387. package/.codex/skills/ship/SKILL.md +0 -213
  388. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  389. package/.codex/skills/status/SKILL.md +0 -90
  390. package/.codex/skills/validate/SKILL.md +0 -288
  391. package/.codex/skills/verify/SKILL.md +0 -269
  392. package/.cursor/commands/dev.md +0 -342
  393. package/.cursor/commands/plan.md +0 -563
  394. package/.cursor/commands/premerge.md +0 -183
  395. package/.cursor/commands/research.md +0 -39
  396. package/.cursor/commands/review.md +0 -448
  397. package/.cursor/commands/ship.md +0 -210
  398. package/.cursor/commands/sonarcloud.md +0 -146
  399. package/.cursor/commands/status.md +0 -87
  400. package/.cursor/commands/validate.md +0 -285
  401. package/.cursor/commands/verify.md +0 -266
  402. package/.cursorrules +0 -149
  403. package/.github/prompts/premerge.prompt.md +0 -188
  404. package/.github/prompts/research.prompt.md +0 -44
  405. package/.github/prompts/rollback.prompt.md +0 -723
  406. package/.github/prompts/verify.prompt.md +0 -271
  407. package/.github/workflows/beads-to-github.yml +0 -89
  408. package/.github/workflows/github-to-beads.yml +0 -100
  409. package/.kilocode/workflows/dev.md +0 -346
  410. package/.kilocode/workflows/plan.md +0 -567
  411. package/.kilocode/workflows/premerge.md +0 -187
  412. package/.kilocode/workflows/research.md +0 -43
  413. package/.kilocode/workflows/review.md +0 -452
  414. package/.kilocode/workflows/rollback.md +0 -722
  415. package/.kilocode/workflows/ship.md +0 -214
  416. package/.kilocode/workflows/sonarcloud.md +0 -150
  417. package/.kilocode/workflows/status.md +0 -91
  418. package/.kilocode/workflows/validate.md +0 -289
  419. package/.kilocode/workflows/verify.md +0 -270
  420. package/.opencode/commands/dev.md +0 -345
  421. package/.opencode/commands/plan.md +0 -566
  422. package/.opencode/commands/premerge.md +0 -186
  423. package/.opencode/commands/research.md +0 -42
  424. package/.opencode/commands/review.md +0 -451
  425. package/.opencode/commands/rollback.md +0 -721
  426. package/.opencode/commands/ship.md +0 -213
  427. package/.opencode/commands/sonarcloud.md +0 -149
  428. package/.opencode/commands/status.md +0 -90
  429. package/.opencode/commands/validate.md +0 -288
  430. package/.opencode/commands/verify.md +0 -269
  431. package/.roo/commands/dev.md +0 -346
  432. package/.roo/commands/plan.md +0 -567
  433. package/.roo/commands/premerge.md +0 -187
  434. package/.roo/commands/research.md +0 -43
  435. package/.roo/commands/review.md +0 -452
  436. package/.roo/commands/rollback.md +0 -722
  437. package/.roo/commands/ship.md +0 -214
  438. package/.roo/commands/sonarcloud.md +0 -150
  439. package/.roo/commands/status.md +0 -91
  440. package/.roo/commands/validate.md +0 -289
  441. package/.roo/commands/verify.md +0 -270
  442. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  443. package/docs/GREPTILE_SETUP.md +0 -400
  444. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  445. package/docs/SETUP.md +0 -663
  446. package/docs/VALIDATION.md +0 -363
  447. package/lib/agents/cline.plugin.json +0 -29
  448. package/lib/agents/copilot.plugin.json +0 -24
  449. package/lib/agents/kilocode.plugin.json +0 -22
  450. package/lib/agents/opencode.plugin.json +0 -23
  451. package/lib/agents/roo.plugin.json +0 -30
  452. package/lib/beads-bootstrap.js +0 -225
  453. package/lib/beads-health-check.js +0 -188
  454. package/lib/commands/commands-reset.js +0 -147
  455. package/opencode.json +0 -67
  456. package/scripts/beads-context.test.js +0 -584
  457. package/scripts/github-beads-sync/comment.mjs +0 -64
  458. package/scripts/github-beads-sync/config.mjs +0 -148
  459. package/scripts/github-beads-sync/github-api.mjs +0 -131
  460. package/scripts/github-beads-sync/index.mjs +0 -356
  461. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  462. package/scripts/github-beads-sync/mapping.mjs +0 -132
  463. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  464. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  465. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  466. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  467. package/scripts/github-beads-sync.config.json +0 -26
  468. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,331 @@
1
+ # Forge Workflow: Dependency Chain Research
2
+
3
+ > Historical note: this file describes an older setup dependency map. Current user-facing setup guidance lives in [Setup Guide](../guides/SETUP.md) and [Command Reference](COMMANDS.md).
4
+ > Known-stale content may appear below because this file is retained as research context for maintainers, not as current setup authority.
5
+
6
+ **Date**: 2026-02-23
7
+ **Branch**: feat/skills-restructure
8
+ **Objective**: Map every dependency the Forge workflow installs, how it installs them, what their own prerequisites are, and how the user is informed throughout.
9
+
10
+ ---
11
+
12
+ ## 1. What Forge Installs — Complete Map
13
+
14
+ ### Quick Setup Flow (`bunx forge setup --quick`)
15
+
16
+ ```
17
+ quickSetup()
18
+ ├── checkPrerequisites()
19
+ ├── Copy AGENTS.md
20
+ ├── setupCoreDocs()
21
+ ├── autoInstallLefthook()
22
+ ├── autoSetupToolsInQuickMode()
23
+ │ ├── autoSetupBeadsInQuickMode()
24
+ │ ├── initializeOpenSpec() (only if already installed)
25
+ │ └── initializeSkills() (only if already installed)
26
+ ├── loadAndSetupClaudeCommands()
27
+ ├── setupSelectedAgents()
28
+ ├── installGitHooks()
29
+ └── configureDefaultExternalServices()
30
+ ```
31
+
32
+ ### Every Tool — Install Method and Command
33
+
34
+ | Tool | Install Method | Command Used | Platform Branch |
35
+ |------|---------------|--------------|-----------------|
36
+ | **Lefthook** | npm/bun devDep | `bun add -d lefthook` | No |
37
+ | **Beads** | npm global | `npm install -g @beads/bd` | ⚠️ No Windows branch |
38
+ | **OpenSpec** | Skip if missing | `openspec init` only if found | No |
39
+ | **Skills** | Skip if missing | `skills init` only if found | No |
40
+ | **Git hooks** | via lefthook | `lefthook install` → hooks from lefthook.yml | No |
41
+ | **Context7 MCP** | npx/bunx at runtime | pin `@upstash/context7-mcp@2` in current examples | Auto for configured agents |
42
+ | **Grep.app MCP** | npx at runtime | `npx -y @ai-tools-all/grep_app_mcp` | Auto for Claude Code, Continue |
43
+ | **Agent config files** | File copy | Copies .claude/, .cursor/, .github/, etc. | Yes (path handling) |
44
+ | **AGENTS.md** | File copy | from package | No |
45
+ | **docs/forge/TOOLCHAIN.md / docs/forge/VALIDATION.md** | File copy | from package | No |
46
+
47
+ ---
48
+
49
+ ## 2. Dependencies of Each Tool
50
+
51
+ ### Beads (`@beads/bd`)
52
+
53
+ - **Language**: Go binary (pre-compiled, ~114MB `.exe` on Windows)
54
+ - **Runtime deps**: None — self-contained binary
55
+ - **Install prerequisites**:
56
+
57
+ | Install Path | Prerequisites | Works on Windows? |
58
+ |-------------|--------------|-------------------|
59
+ | `npm install -g @beads/bd` | npm/bun | ⚠️ Broken — Issue #1031, closed "not planned" |
60
+ | `irm .../install.ps1 \| iex` | PowerShell 5+ | ✅ Recommended on Windows |
61
+ | `curl .../install.sh \| bash` | bash, curl | ❌ Needs Git Bash or WSL |
62
+ | `go install .../bd@latest` | Go 1.24+ | ✅ Works |
63
+ | `brew install beads` | Homebrew | macOS/Linux only |
64
+
65
+ - **Build-from-source deps** (only if no pre-compiled binary):
66
+ - macOS: `icu4c`, `zstd`
67
+ - Linux: `libicu-dev`, `libzstd-dev`
68
+ - Windows: Go 1.24+ (no ICU required — uses pure Go regex backend)
69
+
70
+ - **What `bd init` creates**: `.beads/` directory with `issues.jsonl`, `metadata.json`, `config.yaml`, `README.md`, `.gitignore`
71
+
72
+ - **Critical gap**: forge.js uses `npm install -g @beads/bd` on ALL platforms including Windows, where this is broken. The PowerShell installer (`install.ps1`) is never called.
73
+
74
+ ### OpenSpec (`@fission-ai/openspec`)
75
+
76
+ - **Language**: Node.js (pure JS/TS, not a compiled binary)
77
+ - **Runtime**: Node.js ≥ 20.19.0
78
+ - **Own dependencies** (transitive, pulled on install):
79
+ - `@inquirer/core`, `@inquirer/prompts` — CLI prompts
80
+ - `commander` — CLI argument parsing
81
+ - `chalk` — terminal colors
82
+ - `fast-glob` — file pattern matching
83
+ - `ora` — **spinner** (ironically OpenSpec has a spinner, Forge doesn't)
84
+ - `yaml` — YAML parsing
85
+ - `zod` — schema validation
86
+ - `posthog-node` — analytics (sends usage telemetry)
87
+ - **Install prerequisites**: Node.js 20+ only
88
+ - **Works on Windows**: ✅ Yes — pure Node.js
89
+ - **What `openspec init` creates**: `openspec/` directory with proposal templates
90
+ - **Forge behavior**: Only initialized if already installed. Never force-installed. If not on machine, silently skipped.
91
+
92
+ ### Lefthook
93
+
94
+ - **Language**: Go binary (same distribution model as Beads)
95
+ - **Runtime deps**: None — zero dependencies
96
+ - **Own npm dependencies**: Uses `optionalDependencies` for platform-specific binaries:
97
+ - `lefthook-darwin-arm64`, `lefthook-darwin-x64`
98
+ - `lefthook-linux-arm64`, `lefthook-linux-x64`
99
+ - `lefthook-win32-x64`, `lefthook-win32-arm64`
100
+ - **Install prerequisites**: npm/bun only (binary bundled in npm package)
101
+ - **Works on Windows**: ✅ Yes — ships Windows binary via npm optionalDependencies
102
+ - **What lefthook installs** (via lefthook.yml): 3 git hooks:
103
+ - `commit-msg`: `bunx commitlint --edit {1}` — enforces conventional commits
104
+ - `pre-commit`: `node .forge/hooks/check-tdd.js` — TDD enforcement
105
+ - `pre-push`: branch protection + ESLint + test suite
106
+ - **Pre-push hooks use bash syntax** (`if [ $? -ne 0 ]`) — ⚠️ breaks on Windows without Git Bash
107
+ - **Transitive from hooks**: `commitlint` pulled via bunx at runtime (not pre-installed)
108
+
109
+ ### GitHub CLI (`gh`)
110
+
111
+ - **Not installed by Forge** — must be pre-installed by user
112
+ - **Checked in**: `checkPrerequisites()` — fatal error if missing
113
+ - **Auth status**: checked as warning (not fatal)
114
+ - **Download**: https://cli.github.com
115
+ - **No version requirement specified** in forge.js
116
+
117
+ ### MCP Servers (Context7, Grep.app)
118
+
119
+ - **Not pre-installed** — downloaded at runtime when agent first uses them
120
+ - **Mechanism**: current examples pin `@upstash/context7-mcp@2`; older notes used on-demand `@latest`
121
+ - **Prerequisites**: npx (comes with npm) or bunx
122
+ - **Context7 own deps**: Historical note; current examples pin `@upstash/context7-mcp@2`.
123
+ - **Grep.app own deps**: Unknown — no version pinned
124
+ - **Version pinning gap**: Both use `@latest` — breaking changes can silently break research workflow
125
+ - **Auto-configured for**: Claude Code (`.mcp.json`)
126
+ - **Manual setup required for**: Cursor, Cline
127
+
128
+ ---
129
+
130
+ ## 3. Transitive Dependencies (What Each Tool Pulls In)
131
+
132
+ ```
133
+ Forge setup triggers:
134
+
135
+ ├── npm install -g @beads/bd
136
+ │ └── Pre-compiled Go binary (no transitive npm deps)
137
+
138
+ ├── bun add -d lefthook
139
+ │ └── lefthook-win32-x64 (or platform binary) via optionalDeps
140
+ │ └── No further deps
141
+
142
+ ├── lefthook install (from lefthook.yml)
143
+ │ ├── commit-msg hook → bunx commitlint (runtime, not pre-installed)
144
+ │ │ └── @commitlint/cli + @commitlint/config-conventional (in devDeps ✓)
145
+ │ ├── pre-commit hook → node .forge/hooks/check-tdd.js (local file)
146
+ │ └── pre-push hook → bunx eslint (runtime)
147
+ │ └── eslint (in devDeps ✓)
148
+
149
+ ├── pinned Context7 MCP runtime (at agent runtime)
150
+ │ └── Unknown — @latest, not audited
151
+
152
+ └── npx @ai-tools-all/grep_app_mcp (at agent runtime)
153
+ └── Unknown — no version pinned
154
+ ```
155
+
156
+ **Key finding**: Beads and Lefthook have zero transitive npm dependencies (Go binaries). OpenSpec has ~8 transitive Node.js deps but all are benign utilities. The MCP servers are the unknown — they run as subprocesses with whatever deps they pull.
157
+
158
+ ---
159
+
160
+ ## 4. User-Facing Progress Reporting
161
+
162
+ ### What the user currently sees
163
+
164
+ ```
165
+ [ASCII Banner]
166
+ Forge v1.6.0
167
+ Quick Setup
168
+
169
+ Checking prerequisites...
170
+ ✓ git version 2.x
171
+ ✓ gh version 2.x
172
+ ✓ node v22.x
173
+ ✓ bun v1.x
174
+
175
+ Created: AGENTS.md (universal standard)
176
+
177
+ 📦 Installing lefthook for git hooks...
178
+ ✓ Lefthook installed
179
+
180
+ 📦 Installing Beads globally...
181
+ ✓ Beads installed globally
182
+ 📦 Initializing Beads...
183
+ ✓ Beads initialized
184
+
185
+ [1/1] Setting up Claude Code...
186
+ ✓ ...
187
+
188
+ Installing git hooks (TDD enforcement)...
189
+ ✓ Lefthook hooks installed (local)
190
+
191
+ ==============================================
192
+ Forge v1.6.0 Quick Setup Complete!
193
+ ==============================================
194
+
195
+ Next steps:
196
+ 1. Start with: /status
197
+ 2. Read the current setup and command guides under docs/guides/ and docs/reference/
198
+ ```
199
+
200
+ ### What's MISSING from the UX
201
+
202
+ | Missing Element | Impact |
203
+ |----------------|--------|
204
+ | No spinner/progress bar | User can't tell if it's hung or working |
205
+ | No step counter in quick mode | "Step 3 of 6" would orient the user |
206
+ | No post-install verification | "Beads installed" ≠ `bd version` actually works |
207
+ | Silent skips for OpenSpec/Skills | User doesn't know they weren't installed |
208
+ | No total time estimate | Network-heavy steps (beads download) feel like hangs |
209
+ | No retry feedback | If npm fails, just says "run manually" with no context |
210
+ | No success summary with versions | Should show: `bd 0.49.1 ✓`, `lefthook 1.10.x ✓` |
211
+
212
+ ### Interactive mode step counter (exists but only in agent setup)
213
+
214
+ ```
215
+ [1/1] Setting up Claude Code... ← This exists for agent files
216
+ ```
217
+
218
+ But NOT for the tool installation steps (beads, openspec, lefthook).
219
+
220
+ ---
221
+
222
+ ## 5. Windows-Specific Gaps
223
+
224
+ ### What forge.js does detect on Windows
225
+ - `process.platform === 'win32'` → uses `where.exe` instead of `which`
226
+ - CRLF handling (line 85): `.split(/\r?\n/)` on path resolution
227
+ - chmod skipped with warning (line 2886)
228
+
229
+ ### What forge.js does NOT do on Windows
230
+ - Does NOT detect Windows and switch to `install.ps1` for beads
231
+ - Does NOT warn about bash-syntax lefthook hooks
232
+ - Does NOT check for Git Bash or WSL
233
+ - Does NOT offer PowerShell alternative for beads
234
+
235
+ ### Windows failure sequence (current behavior)
236
+ ```
237
+ 1. forge.js runs npm install -g @beads/bd
238
+ 2. npm postinstall runs PowerShell Expand-Archive
239
+ 3. File locking error (EPERM) — bd.exe never lands
240
+ 4. forge.js catches error, prints "Run manually: npm install -g @beads/bd && bd init"
241
+ 5. User retries npm install → same EPERM → stuck in loop
242
+ 6. pre-push hook runs bash syntax → fails on Windows CMD
243
+ 7. User has lefthook installed but hooks don't fire correctly
244
+ ```
245
+
246
+ ### Correct Windows flow (not yet implemented)
247
+ ```
248
+ 1. Detect win32
249
+ 2. Run: powershell -Command "irm https://.../install.ps1 | iex"
250
+ 3. Verify: bd version
251
+ 4. Run: bd init
252
+ 5. For lefthook hooks: verify Git Bash is available, or use Node.js equivalents
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 6. Full Flow — Zero to Working
258
+
259
+ ### macOS / Linux
260
+ ```bash
261
+ # Prerequisites (manual)
262
+ # - git (https://git-scm.com)
263
+ # - gh (https://cli.github.com) + gh auth login
264
+ # - Node.js 20+ (https://nodejs.org)
265
+ # - bun (https://bun.sh)
266
+
267
+ # Install Forge (triggers postinstall → copies AGENTS.md baseline)
268
+ npx forge-workflow
269
+ # OR add to project:
270
+ bun add -d forge-workflow
271
+
272
+ # Full setup (single command)
273
+ bunx forge setup --quick
274
+
275
+ # Verify
276
+ bd version # should show 0.49.x
277
+ lefthook version # should show 1.10.x
278
+ bd ready # should show open issues
279
+ ```
280
+
281
+ ### Windows (correct flow — not what forge currently does)
282
+ ```powershell
283
+ # Prerequisites (manual)
284
+ # - Git for Windows (https://git-scm.com) — includes bash
285
+ # - gh CLI (https://cli.github.com) + gh auth login
286
+ # - Node.js 20+ (https://nodejs.org)
287
+ # - bun (https://bun.sh)
288
+
289
+ # Install beads FIRST (before forge setup) — npm is broken on Windows
290
+ irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iex
291
+
292
+ # Then install Forge
293
+ npx forge-workflow
294
+
295
+ # Full setup
296
+ bunx forge setup --quick
297
+
298
+ # Verify
299
+ bd version # should work now (was pre-installed)
300
+ lefthook version # should work (ships Windows binary via npm)
301
+ ```
302
+
303
+ ---
304
+
305
+ ## 7. Key Gaps — Priority Order
306
+
307
+ | Priority | Gap | Fix |
308
+ |----------|-----|-----|
309
+ | P0 | Beads npm install broken on Windows | Detect win32, use install.ps1 |
310
+ | P0 | No post-install verification | Run `bd version` after install, fail loudly if not working |
311
+ | P1 | OpenSpec/Skills silently skipped | Show clear message: "OpenSpec not found — install with: ..." |
312
+ | P1 | lefthook.yml pre-push uses bash syntax | Replace `if [ $? -ne 0 ]` with cross-platform Node.js scripts |
313
+ | P1 | Historical MCP server notes used `@latest` | Current examples pin `@upstash/context7-mcp@2` |
314
+ | P2 | No spinner during installs | Add ora (already a dep of OpenSpec — ironic) |
315
+ | P2 | No step counter in quick mode | "Step 3/6: Installing Beads..." |
316
+ | P2 | No versions in success summary | Show installed versions at end |
317
+ | P3 | Go not mentioned as Windows fallback | Document: if install.ps1 fails → go install |
318
+ | P3 | OpenSpec telemetry (posthog-node) | Document/allow opt-out |
319
+ | P3 | GitHub integration not set up post-install | Add `bd config set github.org/repo` prompt |
320
+
321
+ ---
322
+
323
+ ## Sources
324
+
325
+ - [Beads Installation Docs](https://steveyegge.github.io/beads/getting-started/installation)
326
+ - [npm install broken on Windows #1031](https://github.com/steveyegge/beads/issues/1031) — closed "not planned"
327
+ - [OpenSpec GitHub](https://github.com/Fission-AI/OpenSpec)
328
+ - [OpenSpec package.json](https://github.com/Fission-AI/OpenSpec/blob/main/package.json)
329
+ - [Lefthook npm](https://www.npmjs.com/package/lefthook) — 0 dependencies, platform binaries via optionalDeps
330
+ - [Lefthook Installation Docs](https://lefthook.dev/installation/node.html)
331
+ - [Beads install.ps1](https://github.com/steveyegge/beads/blob/main/install.ps1)
@@ -0,0 +1,161 @@
1
+ # Forge Kernel Issue Command Contract
2
+
3
+ **Status**: Contract slice for Kernel-backed issue commands.
4
+ **Code contract**: `lib/kernel/issue-command-contract.js`.
5
+ **Storage model**: [Forge Kernel storage model](FORGE_KERNEL_STORAGE_MODEL.md).
6
+
7
+ ## Purpose
8
+
9
+ This document defines the stable command contract for the Forge Kernel issue surface before the full Beads execution path is replaced. The command schemas, error envelope, next-command hints, and exit behavior are the contract. Skills and harness files must wrap these CLI commands rather than inventing alternate behavior.
10
+
11
+ This PR does not make every command Kernel-backed at runtime. Verified Beads-compatible passthroughs may remain during migration. Commands without a verified Beads equivalent, such as `forge release <id>`, are contract-defined for the Kernel backend and must not pretend to be supported through Beads.
12
+
13
+ ## Commands
14
+
15
+ Read commands must support `--json` and return `next_commands`:
16
+
17
+ ```text
18
+ forge issue ready --json
19
+ forge issue list --json
20
+ forge issue show <id> --json
21
+ forge issue search <query> --json
22
+ forge issue stats --json
23
+ ```
24
+
25
+ Mutation commands must return the affected issue id, the resulting revision, and `next_commands`:
26
+
27
+ ```text
28
+ forge issue create
29
+ forge issue update
30
+ forge issue close
31
+ forge issue comment
32
+ forge issue dep add
33
+ forge issue dep remove
34
+ forge claim <id>
35
+ forge release <id>
36
+ ```
37
+
38
+ The operation names behind those commands are stable:
39
+
40
+ | Command | Operation | Mode |
41
+ | --- | --- | --- |
42
+ | `forge issue ready --json` | `ready` | read |
43
+ | `forge issue list --json` | `list` | read |
44
+ | `forge issue show <id> --json` | `show` | read |
45
+ | `forge issue search <query> --json` | `search` | read |
46
+ | `forge issue stats --json` | `stats` | read |
47
+ | `forge issue create` | `create` | mutation |
48
+ | `forge issue update` | `update` | mutation |
49
+ | `forge issue close` | `close` | mutation |
50
+ | `forge issue comment` | `comment` | mutation |
51
+ | `forge issue dep add` | `dep.add` | mutation |
52
+ | `forge issue dep remove` | `dep.remove` | mutation |
53
+ | `forge claim <id>` | `claim` | mutation |
54
+ | `forge release <id>` | `release` | mutation |
55
+
56
+ ## Success Envelopes
57
+
58
+ All successful JSON responses use schema version `forge.issue.v1`.
59
+
60
+ Single-issue reads return:
61
+
62
+ ```json
63
+ {
64
+ "ok": true,
65
+ "schema_version": "forge.issue.v1",
66
+ "command": "forge issue show forge-123 --json",
67
+ "data": {
68
+ "id": "forge-123",
69
+ "title": "Define command contract",
70
+ "type": "task",
71
+ "status": "open",
72
+ "revision": 7
73
+ },
74
+ "next_commands": [
75
+ "forge claim forge-123",
76
+ "forge issue comment forge-123 \"<note>\""
77
+ ]
78
+ }
79
+ ```
80
+
81
+ List-style reads return `data.issues[]`, optional counts, and `next_commands`. `forge issue stats --json` returns `data.counts` plus ready, blocked, and claim counts when available.
82
+
83
+ Mutations return:
84
+
85
+ ```json
86
+ {
87
+ "ok": true,
88
+ "schema_version": "forge.issue.v1",
89
+ "command": "forge claim forge-123",
90
+ "data": {
91
+ "id": "forge-123",
92
+ "revision": 8,
93
+ "projection": {
94
+ "status": "pending",
95
+ "targets": ["beads"]
96
+ }
97
+ },
98
+ "next_commands": [
99
+ "forge issue show forge-123 --json",
100
+ "forge release forge-123"
101
+ ]
102
+ }
103
+ ```
104
+
105
+ ## Error Envelope
106
+
107
+ All command failures that render JSON use `forge.issue.error.v1`:
108
+
109
+ ```json
110
+ {
111
+ "ok": false,
112
+ "schema_version": "forge.issue.error.v1",
113
+ "command": "forge issue show forge-missing --json",
114
+ "error": {
115
+ "code": "ISSUE_NOT_FOUND",
116
+ "message": "Issue not found: forge-missing",
117
+ "exit_code": 3,
118
+ "retryable": false
119
+ },
120
+ "next_commands": [
121
+ "forge issue search \"forge-missing\" --json"
122
+ ]
123
+ }
124
+ ```
125
+
126
+ `error.code` is stable for scripts. `error.message` is for humans. `error.details` may be present for structured diagnostics, but consumers must not require it.
127
+
128
+ ## Exit Codes
129
+
130
+ | Exit code | Meaning |
131
+ | --- | --- |
132
+ | `0` | Success. |
133
+ | `1` | Internal or unclassified command failure. |
134
+ | `2` | Usage error, invalid flags, or missing required arguments. |
135
+ | `3` | Requested issue, dependency, claim, or comment was not found. |
136
+ | `4` | Revision conflict, claim conflict, or dependency-cycle conflict. |
137
+ | `5` | Required backend, broker, projection target, or local filesystem authority is unavailable. |
138
+ | `6` | Validation failure for command input or payload shape. |
139
+
140
+ ## Revision And Idempotency
141
+
142
+ Kernel writes are guarded by `expected_revision` and idempotency at the broker boundary. The CLI owns both:
143
+
144
+ - The CLI derives idempotency metadata from the command, normalized payload, actor/session/worktree context, and retry attempt.
145
+ - The CLI fetches or refreshes the current issue revision before submitting a guarded mutation.
146
+ - Skills must not hand-generate idempotency keys.
147
+ - Skills must not require agents to supply `expected_revision` for normal commands.
148
+ - A later escape hatch may expose an explicit revision flag for advanced repair flows, but that flag is not part of the agent happy path.
149
+
150
+ Successful mutation responses expose the resulting `revision`; they do not require the caller to understand the broker event internals.
151
+
152
+ ## Beads Migration Boundary
153
+
154
+ During migration, these verified Beads-compatible passthroughs may remain:
155
+
156
+ - `ready`, `list`, `show`, `search`, and `stats`,
157
+ - `create`, `update`, `close`, and `comment`,
158
+ - `dep.add` and `dep.remove`,
159
+ - legacy `claim` through `bd update --claim` until Kernel claim leases become the default.
160
+
161
+ `release` is Kernel-only in this contract because no verified Beads release operation is documented by the current Beads help surface. Implementing real Kernel execution for `release` belongs to the follow-up broker command PR.
@@ -0,0 +1,72 @@
1
+ # Forge Kernel Schema And Migrations
2
+
3
+ **Status**: 0.0.20 schema slice reference.
4
+ **Storage model**: [Forge Kernel storage model](FORGE_KERNEL_STORAGE_MODEL.md).
5
+
6
+ ## Purpose
7
+
8
+ This document records the contract for the 0.0.20 Forge Kernel schema slice. It is a release reference for the schema registry, local migration plans, and storage-class metadata. It does not define the broker runtime, importer/exporter behavior, or conflict resolver behavior; those remain follow-up PRs.
9
+
10
+ ## Schema registry contract
11
+
12
+ `lib/kernel/schema.js` is the source of truth for Kernel table definitions in this slice. The registry must keep table names, fields, primary keys, indexes, storage classes, and field authority metadata together so later broker and adapter work can consume one deterministic definition.
13
+
14
+ The schema registry covers these Kernel surfaces:
15
+
16
+ - issues,
17
+ - dependencies,
18
+ - comments,
19
+ - priority events,
20
+ - claims,
21
+ - sessions,
22
+ - worktrees,
23
+ - stage runs,
24
+ - evidence,
25
+ - projections,
26
+ - conflicts,
27
+ - events,
28
+ - outbox entries,
29
+ - dead letters.
30
+
31
+ Kernel events persist `expected_revision` alongside the idempotency key and payload. Conflict evaluators depend on that revision metadata to distinguish a true equivalent retry from a later intentional write that returns an entity to an earlier payload.
32
+
33
+ Every table and field must declare a storage class and field authority that match [FORGE_KERNEL_STORAGE_MODEL.md](FORGE_KERNEL_STORAGE_MODEL.md). Drift guard failures should name the missing or invalid table or field.
34
+
35
+ ## Migration contract
36
+
37
+ `lib/kernel/migrations.js` owns reversible local migration plans for this slice. Migration definitions must:
38
+
39
+ - apply in declared order,
40
+ - roll back in reverse order,
41
+ - reject duplicate migration IDs,
42
+ - produce deterministic SQL,
43
+ - avoid introducing a database runtime dependency.
44
+
45
+ Migration SQL generation should stay small and explicit. Runtime connection management, broker coordination, and remote execution are outside this slice.
46
+
47
+ `expected_revision` on `kernel_events` is added by the additive `002_kernel_events_expected_revision` migration so existing local Kernel databases created by the initial schema migration gain the column during upgrade.
48
+
49
+ ## Storage-class contract
50
+
51
+ Storage-class metadata must answer the storage model questions before a table or field lands:
52
+
53
+ - What is authoritative?
54
+ - What is cached?
55
+ - What is projected?
56
+ - What is archived?
57
+ - What remains local-only?
58
+ - What requires server acceptance?
59
+ - What happens when projection fails?
60
+
61
+ The valid classes and authority rules are inherited from [FORGE_KERNEL_STORAGE_MODEL.md](FORGE_KERNEL_STORAGE_MODEL.md). This schema reference links that model so changes to schema, migrations, or storage classification cannot drift into undocumented authority behavior.
62
+
63
+ ## Follow-up PRs
64
+
65
+ This document intentionally limits 0.0.20 to schema, migration, and storage-class contracts. Follow-up PRs should cover:
66
+
67
+ - broker read/write execution,
68
+ - Beads import and export adapters,
69
+ - conflict detection and resolution workflows,
70
+ - projection delivery workers,
71
+ - dead-letter repair operations,
72
+ - team-mode server acceptance paths.
@@ -0,0 +1,27 @@
1
+ # Kernel Conflict Evaluators
2
+
3
+ **Status**: 0.0.20 conflict quarantine slice.
4
+
5
+ ## Contract
6
+
7
+ Kernel event writes are evaluated before projection. The evaluator can accept a write, return a prior accepted idempotency result, dedupe an equivalent write, or quarantine the write as a conflict.
8
+
9
+ Quarantined writes insert `kernel_conflicts` records and do not enqueue projection outbox entries. This keeps Beads, GitHub, Linear, and other downstream projections from resolving authority conflicts.
10
+
11
+ ## Guarded Cases
12
+
13
+ - Stale `expected_revision` values quarantine the write with the actual entity revision.
14
+ - Duplicate idempotency keys return the original accepted event without creating a second event or projection.
15
+ - Equivalent duplicate writes dedupe even when the retry uses a different idempotency key.
16
+ - Dependency writes that would create a dependency cycle quarantine before projection.
17
+ - Fixture cases cover import fidelity, priority ordering, dependency correctness, idempotency, and drift guard violations.
18
+
19
+ ## Broker Ordering
20
+
21
+ The local broker remains dependency-free. Drivers provide the storage runtime and the broker enforces this order:
22
+
23
+ 1. Load the authority entity revision, prior events, and dependencies.
24
+ 2. Evaluate the event.
25
+ 3. Insert a conflict for quarantined writes and stop.
26
+ 4. Insert accepted events.
27
+ 5. Enqueue projection outbox rows only after event acceptance.
@@ -0,0 +1,77 @@
1
+ # patch.md Format
2
+
3
+ `patch.md` records user patch intent against stable Forge anchors. It is a reviewable markdown file, not an upgrade engine. Later upgrade and rollback work can consume these records to explain conflicts, preserve local edits, or refuse unsafe operations with a clear hint.
4
+
5
+ ## Anchor Declaration
6
+
7
+ Managed files declare stable anchors with HTML comments:
8
+
9
+ ```md
10
+ <!-- forge-anchor:stage.validate -->
11
+ ```
12
+
13
+ The anchor ID is the durable identity. File paths can change. When a file is renamed, Forge scans the workspace and resolves the record to the file that still declares the anchor.
14
+
15
+ ## Record Block
16
+
17
+ Each patch intent record is a markdown block with YAML metadata and a unified diff:
18
+
19
+ ````md
20
+ <!-- forge-patch-intent:v1
21
+ id: patch_stage_validate_8f14e45fceea
22
+ anchorId: stage.validate
23
+ path: .claude/commands/validate.md
24
+ createdAt: 2026-05-13T00:00:00.000Z
25
+ source: git-diff
26
+ status: active
27
+ anchorLine: 3
28
+ baseAnchorHash: sha256:72a7d2a11b2ef199
29
+ -->
30
+ ```diff
31
+ diff --git a/.claude/commands/validate.md b/.claude/commands/validate.md
32
+ --- a/.claude/commands/validate.md
33
+ +++ b/.claude/commands/validate.md
34
+ @@ -1,4 +1,4 @@
35
+ # Validate
36
+ <!-- forge-anchor:stage.validate -->
37
+ -Run checks.
38
+ +Run checks carefully.
39
+ ```
40
+ <!-- /forge-patch-intent -->
41
+ ````
42
+
43
+ Record IDs are deterministic from the anchor ID and diff body. Recording the same diff replaces the same block instead of appending duplicates.
44
+
45
+ ## Example 1: Basic Edit
46
+
47
+ 1. A managed file declares `<!-- forge-anchor:stage.dev -->`.
48
+ 2. The user edits text below that anchor.
49
+ 3. `forge patch record --from-diff` writes a record whose `anchorId` is `stage.dev` and whose diff can be reapplied to recreate the edit.
50
+
51
+ ## Example 2: Rename
52
+
53
+ If `.claude/commands/validate.md` moves to `.codex/skills/validate/SKILL.md` but keeps `<!-- forge-anchor:stage.validate -->`, Forge resolves the record as `renamed` with `currentPath: .codex/skills/validate/SKILL.md`. Later upgrade code can use that resolved path instead of treating the patch as lost.
54
+
55
+ ## Example 3: Orphan
56
+
57
+ If a record references `stage.ship` and no file declares that anchor, `forge patch status` reports it as orphaned. Later upgrade work should refuse to apply that record automatically and tell the user to re-record or restore the anchor.
58
+
59
+ ## Config
60
+
61
+ `.forge/config.yaml` may configure patch intent:
62
+
63
+ ```yaml
64
+ patchIntent:
65
+ enabled: true
66
+ path: .forge/patch.md
67
+ anchorAliases:
68
+ stage.old-validate: stage.validate
69
+ ```
70
+
71
+ - `enabled: false` disables `forge patch record --from-diff`.
72
+ - `path` moves the record file.
73
+ - `anchorAliases` lets renamed anchors resolve without editing historical records.
74
+
75
+ ## Later Upgrade and Rollback Safety
76
+
77
+ Upgrade can use patch intent records to decide whether a local edit is anchored, moved, or orphaned before touching managed files. Rollback can use the same metadata to explain which user edits were intentionally preserved. This baseline does not implement upgrade application, rollback snapshots, self-heal, marketplace, or adapter behavior.