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,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.