forge-workflow 0.0.9 → 0.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
  2. package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
  3. package/.cursor/rules/permissions-guidance.mdc +2 -2
  4. package/.forge/hooks/check-tdd.js +3 -0
  5. package/.forge/hooks/forge-native-hook.js +245 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -106
  10. package/QUICKSTART.md +171 -0
  11. package/README.md +271 -363
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +466 -489
  15. package/docs/INDEX.md +93 -0
  16. package/docs/PROJECT_DESIGN.md +685 -0
  17. package/docs/architecture/index.md +66 -0
  18. package/docs/architecture/notes/README.md +35 -0
  19. package/docs/architecture/subsystems/README.md +46 -0
  20. package/docs/{TOOLCHAIN.md → forge/TOOLCHAIN.md} +56 -47
  21. package/docs/forge/VALIDATION.md +82 -0
  22. package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
  23. package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
  24. package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
  25. package/docs/guides/GREPTILE_SETUP.md +46 -0
  26. package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
  27. package/docs/guides/MIGRATION.md +56 -0
  28. package/docs/guides/SETUP.md +118 -0
  29. package/docs/guides/SUPPORT.md +185 -0
  30. package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
  31. package/docs/guides/memory-backends.md +183 -0
  32. package/docs/reference/ADAPTERS.md +128 -0
  33. package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
  34. package/docs/reference/COMMANDS.md +205 -0
  35. package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
  36. package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
  37. package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
  38. package/docs/reference/HERMES_INTEGRATION.md +118 -0
  39. package/docs/reference/INSIGHTS_RECAP.md +63 -0
  40. package/docs/reference/INSTALL.md +164 -0
  41. package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
  42. package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
  43. package/docs/reference/RELEASE.md +68 -0
  44. package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
  45. package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
  46. package/docs/reference/SKILLS.md +35 -0
  47. package/docs/reference/STATUS_BOARD.md +80 -0
  48. package/docs/reference/TEMPLATES.md +106 -0
  49. package/docs/reference/TOOLCHAIN.md +658 -0
  50. package/docs/reference/VALIDATION.md +82 -0
  51. package/docs/reference/agent-permissions.md +169 -0
  52. package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
  53. package/docs/reference/control-plane-guarantees.md +125 -0
  54. package/docs/reference/dependency-chain.md +331 -0
  55. package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
  56. package/docs/reference/forge-kernel-schema.md +72 -0
  57. package/docs/reference/kernel-conflict-evaluators.md +27 -0
  58. package/docs/reference/patch-md-format.md +77 -0
  59. package/docs/reference/protected-state-surfaces.md +59 -0
  60. package/docs/reference/shepherd.md +115 -0
  61. package/docs/reference/superpowers-analysis.md +320 -0
  62. package/docs/reference/superpowers-integration-options.md +404 -0
  63. package/docs/reference/test-environment.md +519 -0
  64. package/docs/reference/upgrade-safety.md +59 -0
  65. package/lefthook.yml +18 -0
  66. package/lib/adapter-cli.js +307 -0
  67. package/lib/adapters/beads-issue-adapter.js +127 -0
  68. package/lib/adapters/beads-kernel-compat.js +1042 -0
  69. package/lib/adapters/greptile-review-adapter.js +141 -0
  70. package/lib/adapters/kernel-issue-adapter.js +101 -0
  71. package/lib/adapters/pr-state-adapter.js +484 -0
  72. package/lib/adoption-profiles.js +126 -0
  73. package/lib/agents/README.md +2 -6
  74. package/lib/agents/claude.plugin.json +3 -8
  75. package/lib/agents/codex.plugin.json +9 -1
  76. package/lib/agents/cursor.plugin.json +2 -6
  77. package/lib/agents/hermes.plugin.json +22 -0
  78. package/lib/agents-config.js +39 -1236
  79. package/lib/audit-evidence.js +282 -0
  80. package/lib/beads-setup.js +225 -28
  81. package/lib/beads-sync-scaffold.js +36 -107
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +744 -70
  84. package/lib/commands/_manifest.js +91 -0
  85. package/lib/commands/_registry.js +85 -34
  86. package/lib/commands/_resolve-command-opts.js +261 -0
  87. package/lib/commands/_serve-security.js +270 -0
  88. package/lib/commands/adapter.js +12 -0
  89. package/lib/commands/add.js +118 -0
  90. package/lib/commands/audit.js +70 -0
  91. package/lib/commands/blocked.js +5 -0
  92. package/lib/commands/board.js +64 -0
  93. package/lib/commands/claim.js +21 -2
  94. package/lib/commands/claims.js +7 -0
  95. package/lib/commands/clean.js +485 -75
  96. package/lib/commands/close.js +2 -2
  97. package/lib/commands/comment.js +5 -0
  98. package/lib/commands/control.js +148 -0
  99. package/lib/commands/create.js +2 -2
  100. package/lib/commands/dev.js +185 -7
  101. package/lib/commands/doc-gate.js +336 -0
  102. package/lib/commands/doctor.js +156 -0
  103. package/lib/commands/explain.js +15 -0
  104. package/lib/commands/export.js +237 -0
  105. package/lib/commands/gate.js +192 -0
  106. package/lib/commands/hooks.js +242 -0
  107. package/lib/commands/inbox.js +118 -0
  108. package/lib/commands/init.js +598 -0
  109. package/lib/commands/insights.js +79 -0
  110. package/lib/commands/issue.js +12 -1
  111. package/lib/commands/issues.js +66 -0
  112. package/lib/commands/lint.js +5 -0
  113. package/lib/commands/list.js +2 -2
  114. package/lib/commands/merge.js +312 -0
  115. package/lib/commands/migrate.js +523 -0
  116. package/lib/commands/new.js +12 -0
  117. package/lib/commands/options.js +241 -0
  118. package/lib/commands/orient.js +13 -0
  119. package/lib/commands/orphans.js +5 -0
  120. package/lib/commands/patch.js +67 -0
  121. package/lib/commands/plan.js +436 -24
  122. package/lib/commands/preflight.js +211 -0
  123. package/lib/commands/prime.js +13 -0
  124. package/lib/commands/push.js +69 -2
  125. package/lib/commands/ready.js +2 -2
  126. package/lib/commands/recall.js +116 -0
  127. package/lib/commands/recap.js +61 -0
  128. package/lib/commands/recommend.js +22 -2
  129. package/lib/commands/release.js +91 -0
  130. package/lib/commands/remember.js +74 -0
  131. package/lib/commands/role.js +99 -0
  132. package/lib/commands/serve.js +581 -0
  133. package/lib/commands/setup.js +851 -979
  134. package/lib/commands/shepherd.js +436 -0
  135. package/lib/commands/ship.js +23 -1
  136. package/lib/commands/show.js +2 -2
  137. package/lib/commands/stage.js +192 -0
  138. package/lib/commands/stale.js +5 -0
  139. package/lib/commands/status.js +329 -11
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +15 -2
  142. package/lib/commands/test.js +58 -7
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +56 -25
  146. package/lib/commands/worktree.js +308 -128
  147. package/lib/config-writer.js +202 -0
  148. package/lib/control-plane.js +236 -0
  149. package/lib/core/runtime-graph.js +946 -0
  150. package/lib/dep-guard/keyword-ripple.js +184 -0
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +42 -17
  154. package/lib/doc-gate/declaration.js +177 -0
  155. package/lib/doc-gate/detect.js +289 -0
  156. package/lib/doc-gate/gate.js +375 -0
  157. package/lib/doc-gate/okf-config.js +128 -0
  158. package/lib/doc-gate/okf.js +429 -0
  159. package/lib/docs-command.js +1161 -6
  160. package/lib/forge-issues.js +697 -0
  161. package/lib/forge-lock.js +262 -0
  162. package/lib/gate-events.js +193 -0
  163. package/lib/global-flags.js +74 -0
  164. package/lib/greptile-match.js +7 -63
  165. package/lib/harness-capability-matrix.js +380 -0
  166. package/lib/hook-global-installer.js +347 -0
  167. package/lib/hook-renderer.js +451 -0
  168. package/lib/inbox.js +391 -0
  169. package/lib/insights.js +397 -0
  170. package/lib/issue-adapter.js +156 -0
  171. package/lib/issue-backend.js +145 -0
  172. package/lib/issue-render.js +220 -0
  173. package/lib/issue-sync/authority.js +100 -0
  174. package/lib/issue-sync/github-pull.js +184 -0
  175. package/lib/issue-sync/import-primitives.js +98 -0
  176. package/lib/issue-sync/legacy-link-bridge.js +436 -0
  177. package/lib/issue-sync/link-store.js +292 -0
  178. package/lib/issue-sync/project-github.js +123 -0
  179. package/lib/issue-sync/reconcile.js +195 -0
  180. package/lib/issue-sync/schema.js +126 -0
  181. package/lib/kernel/backing-issue.js +305 -0
  182. package/lib/kernel/broker.js +1218 -0
  183. package/lib/kernel/cli-broker-factory.js +130 -0
  184. package/lib/kernel/conflict-signal.js +82 -0
  185. package/lib/kernel/evaluators.js +195 -0
  186. package/lib/kernel/fs-class.js +495 -0
  187. package/lib/kernel/issue-command-contract.js +559 -0
  188. package/lib/kernel/issue-id-resolver.js +186 -0
  189. package/lib/kernel/lease-enforcer.js +158 -0
  190. package/lib/kernel/migrations.js +333 -0
  191. package/lib/kernel/planning-buckets-schema.js +109 -0
  192. package/lib/kernel/projection-jsonl-writer.js +450 -0
  193. package/lib/kernel/readiness-model.js +329 -0
  194. package/lib/kernel/schema.js +356 -0
  195. package/lib/kernel/sqlite-driver.js +2504 -0
  196. package/lib/kernel/taxonomy-validator.js +394 -0
  197. package/lib/lefthook-check.js +8 -4
  198. package/lib/lefthook-wiring.js +413 -0
  199. package/lib/mcp-config-renderer.js +288 -0
  200. package/lib/memory/graphiti-mcp.js +106 -0
  201. package/lib/memory/router.js +387 -0
  202. package/lib/memory/typed-api.js +102 -0
  203. package/lib/memory-digest.js +195 -0
  204. package/lib/merge-rules.js +395 -0
  205. package/lib/migrate-dry-run.js +466 -0
  206. package/lib/orientation.js +863 -0
  207. package/lib/package-manager-remediation.js +103 -0
  208. package/lib/package-root.js +381 -0
  209. package/lib/patch-intent.js +890 -0
  210. package/lib/plugin-catalog.js +3 -4
  211. package/lib/plugin-manager.js +0 -5
  212. package/lib/pr-bundle.js +186 -0
  213. package/lib/pr-monitor/differ.js +195 -0
  214. package/lib/pr-monitor/events.js +0 -0
  215. package/lib/pr-monitor/gather.js +124 -0
  216. package/lib/pr-monitor/journal.js +299 -0
  217. package/lib/pr-monitor/monitor.js +146 -0
  218. package/lib/pr-monitor/render-sticky.js +157 -0
  219. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  220. package/lib/pr-monitor/watch.js +247 -0
  221. package/lib/pr-pull.js +1273 -0
  222. package/lib/pr-shepherd.js +494 -0
  223. package/lib/pr-state-validator.js +59 -0
  224. package/lib/preflight/gates.js +237 -0
  225. package/lib/preflight/runner.js +116 -0
  226. package/lib/project-discovery.js +0 -53
  227. package/lib/project-memory.js +166 -0
  228. package/lib/protected-path-manifest.js +281 -0
  229. package/lib/protected-state-surfaces.js +387 -0
  230. package/lib/release-readiness.js +2089 -0
  231. package/lib/reset.js +59 -45
  232. package/lib/review-adapter.js +68 -0
  233. package/lib/rules-sync.js +260 -0
  234. package/lib/runtime-health.js +332 -23
  235. package/lib/safety-config-renderer.js +268 -0
  236. package/lib/setup-action-log.js +1 -7
  237. package/lib/setup.js +27 -65
  238. package/lib/shell-utils.js +76 -6
  239. package/lib/skills-sync.js +330 -0
  240. package/lib/smart-status/conflicts.js +205 -0
  241. package/lib/smart-status/scoring.js +191 -0
  242. package/lib/status/beads-snapshot.js +145 -0
  243. package/lib/status/presenter.js +216 -0
  244. package/lib/status/snapshot.js +186 -0
  245. package/lib/sync-backend.js +202 -0
  246. package/lib/untrusted-content.js +52 -0
  247. package/lib/upgrade-safety.js +199 -0
  248. package/lib/workflow/enforce-stage.js +298 -47
  249. package/lib/workflow/stage-transition.js +115 -0
  250. package/lib/workflow/stages.js +30 -6
  251. package/lib/workflow/state-manager.js +159 -14
  252. package/lib/workflow/state.js +23 -1
  253. package/lib/workflow-profiles.js +17 -5
  254. package/package.json +46 -36
  255. package/rules/documentation.md +19 -0
  256. package/rules/kernel-tracking.md +26 -0
  257. package/rules/security.md +22 -0
  258. package/rules/tdd.md +20 -0
  259. package/rules/workflow.md +27 -0
  260. package/scripts/auto-backing-issue.js +47 -0
  261. package/scripts/beads-context.sh +165 -22
  262. package/scripts/beads-migrate-to-dolt.sh +7 -0
  263. package/scripts/beads-upgrade-smoke.sh +284 -0
  264. package/scripts/behavioral-judge.sh +115 -11
  265. package/scripts/benchmark.js +349 -63
  266. package/scripts/bootstrap-windows-tools.sh +78 -0
  267. package/scripts/branch-protection.js +2 -3
  268. package/scripts/check-agents.js +34 -137
  269. package/scripts/commitlint.js +3 -1
  270. package/scripts/conflict-detect.sh +3 -0
  271. package/scripts/dep-guard-analyze.js +52 -17
  272. package/scripts/dep-guard-keyword-ripple.js +29 -0
  273. package/scripts/dep-guard-render-review.js +86 -0
  274. package/scripts/dep-guard.sh +64 -232
  275. package/scripts/file-index.sh +3 -0
  276. package/scripts/forge-team/lib/claim.sh +34 -18
  277. package/scripts/forge-team/lib/dashboard.sh +61 -86
  278. package/scripts/forge-team/lib/epic.sh +99 -263
  279. package/scripts/forge-team/lib/hooks.sh +26 -28
  280. package/scripts/forge-team/lib/identity.sh +4 -4
  281. package/scripts/forge-team/lib/sync-github.sh +144 -47
  282. package/scripts/forge-team/lib/verify.sh +93 -83
  283. package/scripts/forge-team/lib/workload.sh +41 -65
  284. package/scripts/forge-team/tests/claim.test.sh +25 -19
  285. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  286. package/scripts/forge-team/tests/epic.test.sh +52 -71
  287. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  288. package/scripts/forge-team/tests/identity.test.sh +3 -3
  289. package/scripts/forge-team/tests/integration.test.sh +44 -66
  290. package/scripts/forge-team/tests/sync-github.test.sh +183 -79
  291. package/scripts/forge-team/tests/verify.test.sh +37 -46
  292. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  293. package/scripts/forge-team/tests/workload.test.sh +32 -66
  294. package/scripts/gen-command-manifest.js +153 -0
  295. package/scripts/gen-embedded-assets.mjs +129 -0
  296. package/scripts/install.ps1 +139 -0
  297. package/scripts/install.sh +268 -0
  298. package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
  299. package/scripts/lib/release-asset.mjs +84 -0
  300. package/scripts/parity-check.mjs +145 -0
  301. package/scripts/parity-check.test.mjs +58 -0
  302. package/scripts/pin-agentic-workflow-images.js +112 -0
  303. package/scripts/pr-coordinator.sh +3 -0
  304. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  305. package/scripts/preflight.sh +108 -0
  306. package/scripts/protected-state-check.js +104 -0
  307. package/scripts/smart-status-score.js +31 -0
  308. package/scripts/smart-status-sessions.js +51 -0
  309. package/scripts/smart-status.sh +117 -369
  310. package/scripts/spikes/config-race-bench.js +111 -0
  311. package/scripts/spikes/harness-capability-matrix.js +13 -0
  312. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  313. package/scripts/spikes/protected-path-manifest.js +20 -0
  314. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  315. package/scripts/sync-agent-skills.js +62 -0
  316. package/scripts/sync-agentic-workflow.js +48 -0
  317. package/scripts/sync-utils.sh +3 -0
  318. package/scripts/test-ci-shard.js +251 -0
  319. package/scripts/test-dashboard.js +188 -52
  320. package/scripts/test-full-suite.js +186 -0
  321. package/scripts/test-profile.js +278 -0
  322. package/scripts/test.js +302 -28
  323. package/scripts/validate.js +143 -0
  324. package/scripts/validate.sh +18 -1
  325. package/skills/claim-safety/SKILL.md +102 -0
  326. package/skills/claim-safety/evals/evals.json +46 -0
  327. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +46 -52
  328. package/skills/dev/evals/evals.json +50 -0
  329. package/skills/hermes-forge/SKILL.md +185 -0
  330. package/skills/hermes-forge/evals/evals.json +46 -0
  331. package/skills/issue-basics/SKILL.md +111 -0
  332. package/skills/issue-basics/evals/evals.json +46 -0
  333. package/skills/kernel/SKILL.md +166 -0
  334. package/skills/kernel/evals/evals.json +50 -0
  335. package/skills/memory/SKILL.md +102 -0
  336. package/skills/parallel-deep-research/SKILL.md +14 -11
  337. package/skills/parallel-deep-research/evals/evals.json +11 -27
  338. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +134 -159
  339. package/skills/plan/evals/evals.json +42 -0
  340. package/skills/research/SKILL.md +195 -0
  341. package/skills/research/evals/evals.json +42 -0
  342. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  343. package/skills/review/evals/evals.json +42 -0
  344. package/skills/rollback/SKILL.md +110 -0
  345. package/skills/rollback/evals/evals.json +46 -0
  346. package/skills/rollback/references/methods.md +204 -0
  347. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  348. package/skills/shepherd/SKILL.md +66 -0
  349. package/skills/shepherd/evals/evals.json +42 -0
  350. package/skills/ship/SKILL.md +251 -0
  351. package/skills/ship/evals/evals.json +42 -0
  352. package/skills/smith/SKILL.md +142 -0
  353. package/skills/smith/evals/evals.json +46 -0
  354. package/skills/smith/references/autonomy-and-gates.md +94 -0
  355. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  356. package/skills/sonarcloud/evals/evals.json +46 -0
  357. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  358. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  359. package/skills/status/SKILL.md +102 -0
  360. package/skills/status/evals/evals.json +50 -0
  361. package/skills/triage-ready/SKILL.md +121 -0
  362. package/skills/triage-ready/evals/evals.json +42 -0
  363. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  364. package/skills/validate/evals/evals.json +42 -0
  365. package/skills/verify/SKILL.md +299 -0
  366. package/skills/verify/evals/evals.json +50 -0
  367. package/.claude/commands/dev.md +0 -345
  368. package/.claude/commands/plan.md +0 -566
  369. package/.claude/commands/premerge.md +0 -186
  370. package/.claude/commands/research.md +0 -42
  371. package/.claude/commands/review.md +0 -451
  372. package/.claude/commands/rollback.md +0 -721
  373. package/.claude/commands/ship.md +0 -213
  374. package/.claude/commands/sonarcloud.md +0 -152
  375. package/.claude/commands/status.md +0 -90
  376. package/.claude/commands/validate.md +0 -288
  377. package/.claude/commands/verify.md +0 -269
  378. package/.claude/rules/workflow.md +0 -121
  379. package/.cline/workflows/dev.md +0 -342
  380. package/.cline/workflows/plan.md +0 -563
  381. package/.cline/workflows/premerge.md +0 -183
  382. package/.cline/workflows/research.md +0 -39
  383. package/.cline/workflows/review.md +0 -448
  384. package/.cline/workflows/rollback.md +0 -718
  385. package/.cline/workflows/ship.md +0 -210
  386. package/.cline/workflows/sonarcloud.md +0 -146
  387. package/.cline/workflows/status.md +0 -87
  388. package/.cline/workflows/validate.md +0 -285
  389. package/.cline/workflows/verify.md +0 -266
  390. package/.codex/config.toml +0 -11
  391. package/.codex/skills/dev/SKILL.md +0 -345
  392. package/.codex/skills/plan/SKILL.md +0 -566
  393. package/.codex/skills/premerge/SKILL.md +0 -186
  394. package/.codex/skills/research/SKILL.md +0 -42
  395. package/.codex/skills/review/SKILL.md +0 -451
  396. package/.codex/skills/rollback/SKILL.md +0 -721
  397. package/.codex/skills/ship/SKILL.md +0 -213
  398. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  399. package/.codex/skills/status/SKILL.md +0 -90
  400. package/.codex/skills/validate/SKILL.md +0 -288
  401. package/.codex/skills/verify/SKILL.md +0 -269
  402. package/.cursor/commands/dev.md +0 -342
  403. package/.cursor/commands/plan.md +0 -563
  404. package/.cursor/commands/premerge.md +0 -183
  405. package/.cursor/commands/research.md +0 -39
  406. package/.cursor/commands/review.md +0 -448
  407. package/.cursor/commands/ship.md +0 -210
  408. package/.cursor/commands/sonarcloud.md +0 -146
  409. package/.cursor/commands/status.md +0 -87
  410. package/.cursor/commands/validate.md +0 -285
  411. package/.cursor/commands/verify.md +0 -266
  412. package/.cursorrules +0 -149
  413. package/.github/prompts/premerge.prompt.md +0 -188
  414. package/.github/prompts/research.prompt.md +0 -44
  415. package/.github/prompts/rollback.prompt.md +0 -723
  416. package/.github/prompts/ship.prompt.md +0 -215
  417. package/.github/prompts/status.prompt.md +0 -92
  418. package/.github/prompts/verify.prompt.md +0 -271
  419. package/.github/workflows/beads-to-github.yml +0 -56
  420. package/.github/workflows/github-to-beads.yml +0 -97
  421. package/.kilocode/workflows/dev.md +0 -346
  422. package/.kilocode/workflows/plan.md +0 -567
  423. package/.kilocode/workflows/premerge.md +0 -187
  424. package/.kilocode/workflows/research.md +0 -43
  425. package/.kilocode/workflows/review.md +0 -452
  426. package/.kilocode/workflows/rollback.md +0 -722
  427. package/.kilocode/workflows/ship.md +0 -214
  428. package/.kilocode/workflows/sonarcloud.md +0 -150
  429. package/.kilocode/workflows/status.md +0 -91
  430. package/.kilocode/workflows/validate.md +0 -289
  431. package/.kilocode/workflows/verify.md +0 -270
  432. package/.opencode/commands/dev.md +0 -345
  433. package/.opencode/commands/plan.md +0 -566
  434. package/.opencode/commands/premerge.md +0 -186
  435. package/.opencode/commands/research.md +0 -42
  436. package/.opencode/commands/review.md +0 -451
  437. package/.opencode/commands/rollback.md +0 -721
  438. package/.opencode/commands/ship.md +0 -213
  439. package/.opencode/commands/sonarcloud.md +0 -149
  440. package/.opencode/commands/status.md +0 -90
  441. package/.opencode/commands/validate.md +0 -288
  442. package/.opencode/commands/verify.md +0 -269
  443. package/.roo/commands/dev.md +0 -346
  444. package/.roo/commands/plan.md +0 -567
  445. package/.roo/commands/premerge.md +0 -187
  446. package/.roo/commands/research.md +0 -43
  447. package/.roo/commands/review.md +0 -452
  448. package/.roo/commands/rollback.md +0 -722
  449. package/.roo/commands/ship.md +0 -214
  450. package/.roo/commands/sonarcloud.md +0 -150
  451. package/.roo/commands/status.md +0 -91
  452. package/.roo/commands/validate.md +0 -289
  453. package/.roo/commands/verify.md +0 -270
  454. package/docs/BEADS_GITHUB_SYNC.md +0 -255
  455. package/docs/GREPTILE_SETUP.md +0 -400
  456. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  457. package/docs/SETUP.md +0 -663
  458. package/docs/VALIDATION.md +0 -363
  459. package/lib/agents/cline.plugin.json +0 -29
  460. package/lib/agents/copilot.plugin.json +0 -24
  461. package/lib/agents/kilocode.plugin.json +0 -22
  462. package/lib/agents/opencode.plugin.json +0 -23
  463. package/lib/agents/roo.plugin.json +0 -30
  464. package/lib/beads-health-check.js +0 -143
  465. package/lib/commands/commands-reset.js +0 -147
  466. package/opencode.json +0 -67
  467. package/scripts/beads-context.test.js +0 -567
  468. package/scripts/github-beads-sync/comment.mjs +0 -64
  469. package/scripts/github-beads-sync/config.mjs +0 -148
  470. package/scripts/github-beads-sync/github-api.mjs +0 -131
  471. package/scripts/github-beads-sync/index.mjs +0 -332
  472. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  473. package/scripts/github-beads-sync/mapping.mjs +0 -78
  474. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  475. package/scripts/github-beads-sync/reverse-sync.mjs +0 -138
  476. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  477. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  478. package/scripts/github-beads-sync.config.json +0 -26
  479. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,135 @@
1
+ # Forge Kernel Storage Model
2
+
3
+ **Status**: Planning reference for the Forge Kernel authority reset.
4
+ **Canonical design**: [Forge Kernel authority control plane](../work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md).
5
+
6
+ ## Purpose
7
+
8
+ This document defines where Forge Kernel state lives, what is authoritative, what is cached, what is projected, and what is archived. It exists to prevent future implementation work from drifting back into Beads-first, GitHub-first, or harness-first storage.
9
+
10
+ ## Storage Layers
11
+
12
+ ```text
13
+ Authority
14
+ Local mode: local SQLite WAL broker
15
+ Team mode: Cloudflare Durable Object per project
16
+
17
+ Read model
18
+ Local mode: SQLite query tables
19
+ Team mode: D1 query tables
20
+
21
+ Projection state
22
+ Beads export/import status
23
+ GitHub/Linear projection delivery status
24
+ dead letters and repair state
25
+
26
+ Repository exports
27
+ Explicit Kernel projection snapshots for clone/bootstrap/review only
28
+ Not the durability channel for routine local or team writes
29
+
30
+ Archive
31
+ Local evidence archive
32
+ R2 for server-side large evidence/log/artifact bundles
33
+
34
+ Configuration
35
+ .forge/workflow.yaml
36
+ .forge/providers/*.yaml
37
+ .forge/providers.lock later
38
+ generated harness files as projections only
39
+ ```
40
+
41
+ ## Authority Rules
42
+
43
+ 1. Forge Kernel owns issue, claim, stage, run, and projection state.
44
+ 2. Beads is import/export compatibility only.
45
+ 3. GitHub and Linear are server-side projections only.
46
+ 4. Harness files are generated projections only.
47
+ 5. D1 is a read model, not the claim authority.
48
+ 6. Queues retry projection work, not core issue mutations.
49
+ 7. R2 stores large evidence and archives, not hot authority fields.
50
+ 8. Routine close/verify state is never made durable by committing tracker metadata to the protected default branch.
51
+ 9. Repository exports are explicit projection artifacts, not the write-ahead log for normal work.
52
+
53
+ ## Local Mode
54
+
55
+ Local mode is for one user working across one or more local worktrees.
56
+
57
+ Local SQLite WAL broker stores:
58
+
59
+ - issue graph,
60
+ - dependencies and blockers,
61
+ - comments,
62
+ - priorities,
63
+ - claims and stale/reclaim state,
64
+ - stages and substages,
65
+ - worktrees,
66
+ - sessions,
67
+ - runs,
68
+ - event log,
69
+ - local outbox,
70
+ - projection/import/export status.
71
+
72
+ Local mode may work without a server. It must still prevent two local worktrees from double-claiming the same issue.
73
+
74
+ Local mode is intentionally local-only. Closing an issue, recording a run, updating a claim, or saving project knowledge in local mode must not require a Git commit or push. If the user wants another machine or teammate to see that state, Forge must use team mode server authority or an explicit export/import operation.
75
+
76
+ ### SQLite Runtime Driver
77
+
78
+ Forge Kernel local mode uses a builtin SQLite runtime driver. Driver selection must feature-detect `bun:sqlite` first and backup-capable `node:sqlite` second, and must not add a native-compile SQLite package as the default install path.
79
+
80
+ The selected driver must pass conformance checks for WAL mode, `busy_timeout`, transactions, WAL checkpointing, backup creation, and FTS5 before Forge claims real local SQLite authority behavior.
81
+
82
+ ## Team Mode
83
+
84
+ Team mode requires server authority.
85
+
86
+ Cloudflare components:
87
+
88
+ - Worker API validates auth, project membership, and routes requests.
89
+ - Durable Object serializes issue mutations and claims for a project.
90
+ - D1 stores queryable read models for dashboards and reports.
91
+ - Queues run retryable Beads/GitHub/Linear projections.
92
+ - R2 stores optional large evidence, validation artifacts, and archived session bundles.
93
+
94
+ Team mode must block claim/start/close/stage-transition writes when the server cannot accept them.
95
+
96
+ Team mode is the only shared write authority. Cross-machine and multi-user close/verify state must be accepted by the server before Forge reports it as shared truth. Projection workers may update GitHub, Linear, Beads, or explicit export artifacts after acceptance, but projection failure never rolls back the accepted server event.
97
+
98
+ ## Local Versus Server Matrix
99
+
100
+ | Data | Local mode | Team mode | Rule |
101
+ | --- | --- | --- | --- |
102
+ | Issue identity/title/body/type | SQLite authority | Durable Object authority + D1 read model | Server acceptance required in team mode. |
103
+ | Priority/order | SQLite authority | Durable Object authority + D1 read model | Deterministic reorder events. |
104
+ | Dependencies/blockers | SQLite authority | Durable Object authority + D1 read model | Ready queue depends on this. |
105
+ | Comments | SQLite authority | Durable Object authority + D1 read model | Sensitive local-only notes allowed only in local mode. |
106
+ | Claims/leases | SQLite authority | Durable Object authority | Team claims are never offline-authoritative. |
107
+ | Worktree path | SQLite full path | Redacted/normalized server record | Avoid leaking full local paths by default. |
108
+ | Session state | SQLite | Durable Object + D1 read model | Required for team visibility. |
109
+ | Stage/substage state | SQLite | Durable Object + D1 read model | Source for gates and workflow progress. |
110
+ | Run events | SQLite | Durable Object + D1 read model | Raw details may be summarized before upload. |
111
+ | Evidence metadata | SQLite | D1 metadata + optional R2 object | Store pointers and hashes. |
112
+ | Raw prompts/tool logs | Local only by default | Optional redacted R2 archive | Never push by default. |
113
+ | Provider manifests | Project files + local cache | Optional server hash/copy | Required providers need revision agreement. |
114
+ | Workflow config | Project files + local cache | Server copy/hash in team mode | Team writes require config revision agreement. |
115
+ | Beads import source | Local archive | Not uploaded by default | Upload only migration summary if needed. |
116
+ | Beads export output | Local projection | Projection status only | Export failure never rolls back Kernel state. |
117
+ | Kernel repository export | Explicit local export | Explicit server export/projection | Repository files are reviewable snapshots, not hot authority. |
118
+ | GitHub/Linear projection | Local status cache | Server outbox/projection table | Server workers own external projection. |
119
+ | Dead letters/conflicts | SQLite | Durable Object/D1 dead-letter state | Must be visible before release readiness. |
120
+
121
+ ## Drift Guard
122
+
123
+ Any PR that changes storage, authority, sync, projections, issue commands, workflow configuration, or provider loading must answer:
124
+
125
+ ```text
126
+ What is authoritative?
127
+ What is cached?
128
+ What is projected?
129
+ What is archived?
130
+ What remains local-only?
131
+ What requires server acceptance?
132
+ What happens when projection fails?
133
+ ```
134
+
135
+ If those answers change, update this document, the authority plan, and locked decisions.
@@ -0,0 +1,118 @@
1
+ # Hermes Integration
2
+
3
+ > Roadmap lane: `forge-2agy.9.7.x` (Hermes adapter)
4
+
5
+ This document defines how the **Hermes** harness integrates with a Forge
6
+ project, and — most importantly — the boundary between **Forge Kernel state**
7
+ (shared, authoritative, cited) and **Hermes-native memory** (private to a Hermes
8
+ session or profile).
9
+
10
+ The consumption contract that Hermes sessions follow lives in
11
+ [skills/hermes-forge/SKILL.md](../../skills/hermes-forge/SKILL.md). The storage
12
+ model Hermes reads against is described in
13
+ [FORGE_KERNEL_STORAGE_MODEL.md](FORGE_KERNEL_STORAGE_MODEL.md), and the
14
+ writeback surface in
15
+ [forge-kernel-issue-command-contract.md](forge-kernel-issue-command-contract.md).
16
+
17
+ ## Why a boundary is needed
18
+
19
+ Hermes carries its own conversational/profile memory. Forge carries the
20
+ project's durable, provenance-tracked state. If Hermes were allowed to write its
21
+ private memory into Forge state, the two would drift: Forge would accumulate
22
+ Hermes-specific context that other harnesses (Claude Code, Codex, Cursor) cannot
23
+ interpret, and the "single source of truth" guarantee behind `forge orient` /
24
+ `forge recap` would erode.
25
+
26
+ The integration therefore makes Forge state the authority and Hermes a
27
+ **consumer** that writes back only through the same audited CLI surface it reads
28
+ from.
29
+
30
+ ## The two memory tiers
31
+
32
+ | | Forge Kernel state | Hermes-native memory |
33
+ | --- | --- | --- |
34
+ | **Owner** | Forge | Hermes |
35
+ | **Scope** | The project — shared across all harnesses | One Hermes session / profile |
36
+ | **Authority** | Source of truth | Convenience cache, never authoritative |
37
+ | **Read path** | `forge orient` / `forge recap` (bounded, cited JSON) | Hermes' own store |
38
+ | **Write path** | Forge CLI only (`forge comment`, `forge update`) | Hermes' own store |
39
+ | **Contains** | Issues, decisions, evidence, design snapshots, claims, queues | Prompts, session scratch, user preferences, Hermes profile data |
40
+ | **Provenance** | Every fact carries `{ path, source_kind, authority, role }` | Not part of the Forge provenance graph |
41
+
42
+ ### What lives in Forge Kernel state
43
+
44
+ Anything that is a **project fact**: issue records, decisions, evidence,
45
+ design-snapshot content, ready queues, and active claims — all written back
46
+ exclusively through Forge CLI commands.
47
+
48
+ Not all of that state is surfaced by the bounded `forge orient` / `forge recap`
49
+ envelope. Today the envelope emits the project design snapshot, active-work
50
+ artifacts (`docs/work`), and — for `forge recap <issue-id>` — an issue summary;
51
+ ready queue and active claims currently appear as forward-looking kernel
52
+ placeholders. Issue **evidence/comments are not in the envelope** — read them
53
+ from the issue record itself (e.g. `forge show <id>`). Treat orient/recap as the
54
+ bounded entry point, not the exhaustive store.
55
+
56
+ ### What lives in Hermes-native memory
57
+
58
+ Anything that only matters to **Hermes**: conversational history, session
59
+ scratchpads, per-user preferences, and the Hermes profile itself. None of this
60
+ belongs in Forge Kernel state.
61
+
62
+ ## Authority rule
63
+
64
+ Forge Kernel state is the single source of truth. When Hermes needs project
65
+ state it MUST obtain it from `forge orient` / `forge recap` (JSON form) rather
66
+ than reconstructing it from raw files or kernel internals. When two sources
67
+ conflict, prefer the higher `authority` and surface the conflict instead of
68
+ silently choosing.
69
+
70
+ ## Writeback rule
71
+
72
+ Evidence and decisions discovered in a Hermes session flow back into the Forge
73
+ Kernel **only** through Forge CLI commands:
74
+
75
+ - `forge comment <id> <body...>` — attach evidence, a decision, or a note to an issue.
76
+ - `forge update <id...> [flags]` — update issue state/fields.
77
+ - `forge create [title] [flags]` — open a follow-up issue.
78
+
79
+ (`forge audit` is verify-only — `forge audit verify` — and is not an
80
+ evidence-append path; record evidence as an issue comment.)
81
+
82
+ These writes land in the Forge Kernel issue store and become part of the issue's
83
+ durable history. Note the read/write asymmetry: the bounded `forge orient` /
84
+ `forge recap` envelope is assembled from project docs, `docs/work` artifacts, and
85
+ the issue summary — it surfaces issue/design/decision state but does **not** echo
86
+ individual issue comments back. Evidence added via `forge comment` lives in the
87
+ issue history (reachable from the issue record), not necessarily in the next
88
+ orient/recap payload.
89
+
90
+ ## The no-profile-write guard
91
+
92
+ The hard boundary, enforced as a contract in the `hermes-forge` skill and
93
+ guarded by tests:
94
+
95
+ > **Hermes MUST NOT write Hermes profile state into Forge Kernel state.**
96
+
97
+ Concretely, a Hermes session must never:
98
+
99
+ - Persist Hermes profile or session memory into Forge Kernel storage.
100
+ - Edit Forge state files (design, decision, issue stores) directly to record
101
+ Hermes-side context.
102
+ - Use the Forge issue/evidence backend as a dumping ground for
103
+ Hermes-only data.
104
+
105
+ If a piece of context only matters to Hermes, it stays in Hermes-native memory.
106
+ If it is a project fact, decision, or evidence item, it is written through the
107
+ Forge CLI so it becomes part of the shared, cited source of truth.
108
+
109
+ ## Token-budget & truncation expectations
110
+
111
+ `forge orient` and `forge recap <issue-id>` emit the deterministically bounded
112
+ envelope (default ~2000 estimated tokens, `chars_per_token: 4`). Truncation
113
+ follows the published `token_budget.truncation_order`, marks trimmed sections
114
+ with `[truncated deterministically by token budget]`, and sets `truncated: true`.
115
+ Hermes treats truncated sections as incomplete and re-requests with a higher
116
+ `--budget` when completeness matters. (Bare `forge recap` — no issue id —
117
+ returns the legacy activity summary, which is not the bounded envelope.) See the
118
+ skill for the full envelope and provenance model.
@@ -0,0 +1,63 @@
1
+ # Insights And Recap
2
+
3
+ `forge insights` and `forge recap` summarize recurring local workflow evidence from existing Forge and Beads state.
4
+
5
+ ## Commands
6
+
7
+ ```bash
8
+ forge insights
9
+ forge insights --review-feedback
10
+ forge insights --min-count 2 --limit 5
11
+ forge insights --json
12
+ forge insights accept <candidate-id> --note "why this is useful"
13
+ forge insights reject <candidate-id> --note "why this is noise"
14
+ forge recap
15
+ forge recap --json
16
+ ```
17
+
18
+ `--review-feedback` is a compatibility alias. In this MVP it reads Beads interactions and issue evidence; it does not infer external review-provider comments.
19
+
20
+ ## Evidence Sources
21
+
22
+ - `.beads/interactions.jsonl`: field changes and review/close outcome reasons.
23
+ - `.beads/issues.jsonl`: tokenized issue titles and descriptions for themes, plus statuses and timestamps for recap context.
24
+ - `.forge/log.jsonl` and `.forge/audit.log`: optional audit event counts when present.
25
+ - Beads-backed typed memory: accept/reject decisions are recorded through `lib/memory/typed-api.js`.
26
+
27
+ ## What It Can Infer
28
+
29
+ - Repeated local workflow patterns.
30
+ - Candidate follow-ups based on frequency, source diversity, and evidence count.
31
+ - Recent issue activity and review outcome counts.
32
+ - Whether history is too sparse for a useful suggestion.
33
+
34
+ ## What It Cannot Infer
35
+
36
+ - Does not prove a workflow is correct.
37
+ - Reviewer intent is not inferred from provider-specific systems.
38
+ - Trusted executable skills are not installed.
39
+ - It does not modify upgrade safety, lockfile/trust policy, patch intent internals, team dashboards, or issue sync surfaces.
40
+
41
+ ## Example Output
42
+
43
+ ```text
44
+ Forge insights
45
+ Sources: interactions=16, issues=260, audit=0
46
+ Ranked candidates:
47
+ - insight-interaction-status-closed-merged-and-verified (55): status changed to closed (merged-and-verified)
48
+ Next: Review interaction evidence and consider a local workflow skill only if the pattern is still useful.
49
+ Limitations:
50
+ - Insights are local workflow signals, not proof of correctness.
51
+ ```
52
+
53
+ ```text
54
+ Forge recap
55
+ Issues: 260 total, 94 open, 166 closed
56
+ Review outcomes found: 4
57
+ Recent work:
58
+ - forge-besw.12: forge insights --review-feedback PoC (Week 1 deliverable) [open]
59
+ Insight candidates:
60
+ - insight-interaction-status-closed-merged-and-verified: status changed to closed (merged-and-verified)
61
+ Limitations:
62
+ - Sparse Beads interactions or missing Forge audit logs reduce confidence.
63
+ ```
@@ -0,0 +1,164 @@
1
+ # Installing Forge
2
+
3
+ Forge ships two ways to install:
4
+
5
+ 1. **Standalone binary** (this page) — a single compiled executable, no Node or
6
+ Bun runtime required. Best for a global CLI you run everywhere.
7
+ 2. **npm / npx** — the `forge-workflow` package, if you already live in Node and
8
+ want Forge as a project dev-dependency. See [npm / npx channel](#npm--npx-channel).
9
+
10
+ Both deliver the same Forge. The binary bundles Forge's own JavaScript, but **not**
11
+ its external prerequisites — see [Prerequisites](#prerequisites).
12
+
13
+ ---
14
+
15
+ ## One-line install
16
+
17
+ ### macOS / Linux
18
+
19
+ ```sh
20
+ curl -fsSL https://raw.githubusercontent.com/harshanandak/forge/master/scripts/install.sh | sh
21
+ ```
22
+
23
+ Install a specific version:
24
+
25
+ ```sh
26
+ curl -fsSL https://raw.githubusercontent.com/harshanandak/forge/master/scripts/install.sh | sh -s -- --version v1.2.3
27
+ ```
28
+
29
+ The script detects your OS, CPU architecture and (on Linux) your libc, downloads
30
+ the matching binary from the latest [GitHub Release](https://github.com/harshanandak/forge/releases),
31
+ makes it executable, and installs it to `~/.local/bin/forge`. If that directory
32
+ is not on your `PATH`, the script prints the line to add.
33
+
34
+ ### Windows (PowerShell)
35
+
36
+ ```powershell
37
+ irm https://raw.githubusercontent.com/harshanandak/forge/master/scripts/install.ps1 | iex
38
+ ```
39
+
40
+ Install a specific version (download the script, then run it with an argument):
41
+
42
+ ```powershell
43
+ $s = irm https://raw.githubusercontent.com/harshanandak/forge/master/scripts/install.ps1
44
+ & ([scriptblock]::Create($s)) -Version v1.2.3
45
+ ```
46
+
47
+ This installs `forge.exe` to `%LOCALAPPDATA%\Programs\forge\` and prints how to
48
+ add it to your `PATH`.
49
+
50
+ After installing, run `forge setup` inside a git repository to wire Forge up for
51
+ your agent.
52
+
53
+ ---
54
+
55
+ ## Supported platforms
56
+
57
+ Each GitHub Release publishes these assets. The install scripts pick the right one
58
+ automatically; the table is for manual downloads.
59
+
60
+ | OS | Architecture | libc | Release asset |
61
+ |----|--------------|------|---------------|
62
+ | macOS | Apple Silicon (arm64) | — | `forge-darwin-arm64` |
63
+ | macOS | Intel (x64) | — | `forge-darwin-x64` |
64
+ | Linux | x64 | glibc | `forge-linux-x64` |
65
+ | Linux | arm64 | glibc | `forge-linux-arm64` |
66
+ | Linux | x64 | musl (e.g. Alpine) | `forge-linux-x64-musl` |
67
+ | Linux | arm64 | musl (e.g. Alpine) | `forge-linux-arm64-musl` |
68
+ | Windows | x64 | — | `forge-windows-x64.exe` |
69
+
70
+ On an unsupported platform the install script fails with a clear message. Use the
71
+ [npm / npx channel](#npm--npx-channel) instead.
72
+
73
+ ---
74
+
75
+ ## Manual download and run
76
+
77
+ If you prefer not to pipe a script to your shell, download the asset for your
78
+ platform directly from the [latest release](https://github.com/harshanandak/forge/releases/latest)
79
+ and run it.
80
+
81
+ Every release also publishes a `checksums.txt` (SHA-256) manifest. **Verify the
82
+ asset before you run it** — the one-line install scripts do this automatically.
83
+
84
+ ### macOS / Linux
85
+
86
+ ```sh
87
+ # Pick the asset for your platform from the table above (here: linux x64 glibc)
88
+ curl -fsSL -o forge \
89
+ https://github.com/harshanandak/forge/releases/latest/download/forge-linux-x64
90
+
91
+ # Verify integrity against the release manifest before running:
92
+ curl -fsSL -o checksums.txt \
93
+ https://github.com/harshanandak/forge/releases/latest/download/checksums.txt
94
+ grep ' forge-linux-x64$' checksums.txt | sha256sum -c - # must print "forge-linux-x64: OK"
95
+
96
+ chmod +x forge
97
+ ./forge --version
98
+ # Optionally move it onto your PATH:
99
+ mkdir -p ~/.local/bin && mv forge ~/.local/bin/forge
100
+ ```
101
+
102
+ On macOS use `shasum -a 256 -c -` in place of `sha256sum -c -`.
103
+
104
+ ### Windows (PowerShell)
105
+
106
+ ```powershell
107
+ irm https://github.com/harshanandak/forge/releases/latest/download/forge-windows-x64.exe -OutFile forge.exe
108
+
109
+ # Verify integrity against the release manifest before running:
110
+ irm https://github.com/harshanandak/forge/releases/latest/download/checksums.txt -OutFile checksums.txt
111
+ $expected = ((Get-Content checksums.txt) -match ' \*?forge-windows-x64\.exe$') -replace '\s.*$',''
112
+ if ((Get-FileHash -Algorithm SHA256 forge.exe).Hash -ieq $expected) { "OK" } else { throw "checksum mismatch" }
113
+
114
+ .\forge.exe --version
115
+ ```
116
+
117
+ A pinned version uses the same URLs with `download/<tag>/` instead of
118
+ `latest/download/`, e.g.
119
+ `https://github.com/harshanandak/forge/releases/download/v1.2.3/forge-linux-x64`.
120
+
121
+ ---
122
+
123
+ ## npm / npx channel
124
+
125
+ If you already have Node.js, you can skip the binary entirely:
126
+
127
+ ```sh
128
+ # Global install
129
+ npm i -g forge-workflow
130
+ forge --version
131
+
132
+ # Or run once without installing
133
+ npx forge-workflow status
134
+
135
+ # Or as a project dev-dependency (recommended for teams)
136
+ bun add -D forge-workflow # or: npm install --save-dev forge-workflow
137
+ bunx forge setup --agents claude --yes
138
+ ```
139
+
140
+ The npm package and the standalone binary are the same Forge and stay in lockstep
141
+ on every release.
142
+
143
+ ---
144
+
145
+ ## Prerequisites
146
+
147
+ The binary bundles Forge's JavaScript, but relies on a few external tools being
148
+ installed and on your `PATH`:
149
+
150
+ - **git** — required for all repository operations.
151
+ - **gh** (GitHub CLI) — required for the PR / review workflow.
152
+ - **Git Bash** (Windows only) — Forge's helper-backed stage flows run under Git
153
+ Bash on Windows.
154
+
155
+ These are runtime prerequisites checked by `forge`'s own health checks; the
156
+ installer does not install them for you.
157
+
158
+ ---
159
+
160
+ ## Uninstall
161
+
162
+ - Binary: delete the installed file (`~/.local/bin/forge`, or
163
+ `%LOCALAPPDATA%\Programs\forge\forge.exe` on Windows).
164
+ - npm: `npm rm -g forge-workflow`.
@@ -0,0 +1,161 @@
1
+ # Kernel Taxonomy, Readiness, and Validation
2
+
3
+ Reference for the Forge Kernel issue taxonomy collapse and its read-model/validation
4
+ layer, implemented per **D18** (see
5
+ [`docs/work/2026-06-06-kernel-backlog-memory-roadmap/decisions.md`](../work/2026-06-06-kernel-backlog-memory-roadmap/decisions.md))
6
+ and roadmap items `forge-2agy.9.2.1`, `.9.2.2`, `.9.2.6`, `.9.2.7`, `.9.2.8`, `.9.2.9`.
7
+
8
+ The four planning axes are kept **separate** (D5): stored **status**, parent/child
9
+ **hierarchy**, sprint/release planning **bucket**, and workflow **stage** execution. A
10
+ task can be in a sprint, have a parent epic, be derived-ready, and currently sit in the
11
+ `validate` stage — these are not the same field.
12
+
13
+ ---
14
+
15
+ ## 1. Issue types (4) — `lib/kernel/taxonomy-validator.js`
16
+
17
+ A type only earns existence if it changes Kernel behavior (routing, gates, board
18
+ grouping, rollup). `feature`, `story`, `chore`, and `spike` are **labels**, not types.
19
+
20
+ | Type | `canParent` | `claimable` | `blocksOthers` | `rollup` | Board group |
21
+ | --- | --- | --- | --- | --- | --- |
22
+ | `epic` | ✅ (only container) | ❌ | ❌ | ✅ | `roadmap` |
23
+ | `task` | ❌ | ✅ | ❌ | ❌ | `backlog` |
24
+ | `bug` | ❌ | ✅ | ❌ | ❌ | `backlog` |
25
+ | `decision` | ❌ | ❌ | ✅ (gates dependents) | ❌ | `decisions` |
26
+
27
+ `TYPE_BEHAVIORS` is the single source of truth for these mappings. Enums are enforced at
28
+ the **validation layer**, not as DB constraints, so label-based extensibility and derived
29
+ readiness stay outside the stored column set.
30
+
31
+ ## 2. Status lifecycle (5 stored)
32
+
33
+ Stored statuses: `open`, `in_progress`, `review`, `done`, `cancelled`.
34
+
35
+ ```text
36
+ open ──► in_progress ──► review ──► done
37
+ ▲ │ │
38
+ └───────────┘ │ (rework: review ──► in_progress, in_progress ──► open)
39
+ open / in_progress / review ──► cancelled (done, cancelled are terminal)
40
+ ```
41
+
42
+ `STATUS_TRANSITIONS` encodes the legal moves. `validateStatusTransition(from, to)` throws
43
+ a `TaxonomyValidationError` for illegal moves and unknown statuses; a same-status
44
+ transition is treated as an idempotent no-op. `done` and `cancelled` are terminal — no
45
+ transition leaves them.
46
+
47
+ ## 3. Derived readiness — `lib/kernel/readiness-model.js`
48
+
49
+ `ready` and `blocked` are **derived read-model facts, never stored statuses** (D18). A
50
+ blocker that clears makes the issue ready again in whatever stored status it held — there
51
+ is no "preserve previous status" hack. `backlog` is the fallback summary state when an
52
+ issue is neither terminal nor ready/blocked/gated/deferred/claimed/disabled — for example
53
+ `open` with readiness conditions unmet, or a non-workable status such as `review`.
54
+
55
+ `deriveReadiness(issue, context)` returns:
56
+
57
+ ```json
58
+ {
59
+ "id": "forge-1",
60
+ "status": "open",
61
+ "ready": true,
62
+ "blocked": false,
63
+ "blocked_by": [],
64
+ "reasons": [],
65
+ "state": "ready"
66
+ }
67
+ ```
68
+
69
+ Readiness policy considers: blocking dependencies (upstream not in a terminal status —
70
+ `done` and `cancelled` both clear, so a cancelled blocker never wedges a dependent),
71
+ unresolved decision dependencies, projection **quarantine**/conflicts, required workflow
72
+ **gates**, **defer** windows, **policy-disabled** work, and an **active conflicting
73
+ claim** by another actor. Reason codes (`READINESS_REASONS`): `dependency` (carries a
74
+ `decision: true` flag when the blocker is a decision issue), `quarantine`, `conflict`,
75
+ `gate`, `claimed`, `deferred`, `policy_disabled`.
76
+
77
+ **Acceptance-criteria and due-date readiness** are modeled through the generic `gates`
78
+ input (an acceptance/definition-of-ready gate, or a due-window gate the caller supplies),
79
+ not as separate hardcoded field checks — so the policy stays open to caller-defined gates
80
+ without the read model owning every "definition of ready" rule.
81
+
82
+ Summary `state` (precedence high→low): `closed` → `blocked` → `gated` → `deferred` →
83
+ `claimed` → `disabled` → `ready` → `backlog`. `blocked` (dependencies/quarantine/conflict)
84
+ always outranks softer not-ready reasons. Because the single `state` collapses multiple
85
+ conditions, consumers picking next work should read the full `reasons[]` — e.g. a claim
86
+ hidden behind a defer window is in `reasons[]` even when `state` reports `deferred`.
87
+ Terminal issues are `closed` — neither ready nor blocked.
88
+
89
+ `buildReadinessIndex({ issues, dependencies, claims, conflicts, gates, now, actor,
90
+ policyDisabledIds })` computes readiness for a whole board, resolving each dependency's
91
+ status from the issue set and returning a `readyQueue` ordered by authoritative numeric
92
+ rank then id, plus the `blocked` id list. The ready-work queue excludes terminal,
93
+ deferred, gated, policy-disabled, and claimed-by-other issues.
94
+
95
+ ## 4. Validation layer — `lib/kernel/taxonomy-validator.js`
96
+
97
+ | Function | Enforces |
98
+ | --- | --- |
99
+ | `validateIssueTaxonomy(issue)` | type/status enum membership; rejects self-parent |
100
+ | `validateStatusTransition(from, to)` | status lifecycle rules (throws) |
101
+ | `findDependencyCycles(deps)` / `assertAcyclicDependencies(deps)` | dependency graph acyclicity (only `blocks` edges) |
102
+ | `validateParentChild(issue, parent)` | parent exists, parent type `canParent`, no self-parent |
103
+ | `findParentCycle(issuesById, startId)` | parent-chain cycle detection |
104
+ | `validateClaim(claim, { now, issueType })` | actor present, valid claim state, claimable type, lease not expired |
105
+ | `validateActiveClaimUniqueness(claims)` | at most one active claim per issue |
106
+
107
+ These complement (do not replace) the broker/DB claim-lease invariants enforced
108
+ elsewhere; the validation layer is the pure, storage-agnostic checker.
109
+
110
+ ## 5. Priority rank vs P0–P4 projection
111
+
112
+ A single numeric rank is authoritative for ordering; **P0–P4 is a display projection
113
+ only** (D18). `rankForPriorityLabel(label)` ingests a label/number to the authoritative
114
+ rank; `priorityLabelForRank(rank)` projects a rank to a display label clamped to `P0..P4`;
115
+ `normalizeRank(value)` coerces to a non-negative integer.
116
+
117
+ ## 6. Planning bucket entities — `lib/kernel/planning-buckets-schema.js`
118
+
119
+ Sprint, release, and milestone are first-class Kernel entities (`forge-2agy.9.2.7`), not
120
+ string fields on issues. Each table (`kernel_sprint`, `kernel_release`,
121
+ `kernel_milestone`) carries `id`, `name`, `state`, `rank`, owner/goal, dates,
122
+ `entity_revision`, and **read-model rollup counters** (`total_count`, `completed_count`).
123
+ The schema reuses the shared `lib/kernel/schema.js` builders and passes
124
+ `validateKernelSchema`; `getPlanningBucketsSchema()` is migration-renderable through the
125
+ existing `buildSchemaMigration` renderer.
126
+
127
+ State vocabularies:
128
+
129
+ - Sprint: `planned`, `active`, `completed`, `cancelled`
130
+ - Release: `planned`, `in_progress`, `released`, `cancelled`
131
+ - Milestone: `planned`, `reached`, `missed`, `cancelled`
132
+
133
+ The extended `kernel_issues` columns wire issues to these buckets and to hierarchy and
134
+ stage: `parent_id` (self-referencing), `sprint_id`, `release_id`, `stage_state`,
135
+ `labels`, `acceptance_criteria`, `estimate`.
136
+
137
+ ## 7. Board rank and mutation event model
138
+
139
+ Frontend drag/drop and assignment operations must produce Kernel events carrying
140
+ `expected_revision` and `idempotency_key` (`forge-2agy.9.2.6`). `BOARD_MUTATION_EVENT_TYPES`:
141
+
142
+ - `issue.reordered` — board rank change. Per D18 there is a **single** authoritative
143
+ numeric ordering rank (`priority_rank`); P0–P4 is its display projection. There is no
144
+ separate board-only rank column.
145
+ - `issue.status_changed`
146
+ - `issue.sprint_assigned`
147
+ - `issue.release_assigned`
148
+ - `issue.blocked` / `issue.unblocked` — recorded transitions of the derived readiness
149
+ edge, emitted for audit; readiness itself remains computed, not stored
150
+ - `issue.type_changed`
151
+
152
+ Each event is validated optimistically against the entity's current revision and is
153
+ idempotent on replay, consistent with the Kernel event/outbox contract.
154
+
155
+ ## Board views (frontend implications)
156
+
157
+ - **Backlog board** — group by `type`, `priority`, `parent_id`, `release_id`.
158
+ - **Sprint board** — group by `sprint_id` and status.
159
+ - **Ready-work queue** — `buildReadinessIndex(...).readyQueue` (derived).
160
+ - **Agent work view** — filter by claim actor, lease, worktree/session, and `stage_state`.
161
+ - **Roadmap view** — group epics by release/milestone with child rollups.
@@ -0,0 +1,25 @@
1
+ # Protected Path Manifest
2
+
3
+ Forge uses `.forge/protected-paths.yaml` as the canonical protected-path contract for the schema and integrity rail.
4
+
5
+ The manifest defines seven W1 categories:
6
+
7
+ - `forge_core`: checksum-verified Forge runtime files.
8
+ - `user_protocol`: user-facing protocol files that should be changed through Forge CLI surfaces.
9
+ - `generated_artifacts`: generated harness files that should come from renderers.
10
+ - `append_only_logs`: audit logs that must not be rewritten.
11
+ - `secrets`: env and secret-bearing files.
12
+ - `beads_state`: Beads state owned by `bd` or Forge issue adapters.
13
+ - `immutable`: VCS/runtime internals owned by their tools.
14
+
15
+ ## Harness Enforcement
16
+
17
+ Claude and Codex use native hook contracts for write/edit enforcement. Cursor fallback remains Forge CLI/pre-commit or file-watcher enforcement until a native Cursor hook surface is proven by fixture evidence.
18
+
19
+ ## Evidence Command
20
+
21
+ ```bash
22
+ node scripts/spikes/protected-path-manifest.js
23
+ ```
24
+
25
+ The command emits machine-readable JSON containing the manifest categories, per-harness enforcement mapping, validation result, and known issue for Cursor fallback.