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
package/CHANGELOG.md ADDED
@@ -0,0 +1,681 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ > **Note**: `/check` was renamed to `/validate` and `/merge` was renamed to `/premerge` in v0.0.3. Historical entries below may use the old names.
9
+
10
+ ## [Unreleased]
11
+
12
+ ## [0.1.0-beta.2] - 2026-07-15
13
+
14
+ The **beta-blocker hardening wave** — Forge's advertised loop now composes end to end, its quality gates fail closed, its control surfaces describe themselves honestly, and the runtime is Beads-free. Every change below was adversarially reviewed before merge. (v0.1.0-beta.1 was tagged but never reached npm — its publish token had expired; this release switches to OIDC Trusted Publishing and is the first npm beta.)
15
+
16
+ ### Fixed
17
+
18
+ - **`forge ship` is reachable from the pure CLI.** `plan`/`dev`/`validate`/`ship` persist and read workflow stage state in the Kernel (completion-gated at the enforcement chokepoint), so **any** agent driving the bare CLI reaches ship — previously the stage state was written only by a Claude-specific slash layer, so a non-Claude agent ran every stage green then dead-ended. `plan --issue <id>` links an existing issue instead of forking a duplicate; `--issue` with no value errors instead of creating one. (#380)
19
+ - **Quality gates fail closed.** `forge validate` reports `SKIPPED` (never a silent `PASS`) on 0 tests; `forge preflight` fails on an unresolvable base instead of vacuously passing, and no longer runs Forge's own internal test files inside a consumer repo. Further preflight fail-open residuals closed. (#381, #386)
20
+ - **`forge setup` installs real TDD enforcement — on the live path.** Native `.git/hooks` fallback when lefthook's binary is absent, honors `core.hooksPath`, writes real hook jobs (never the stock example), verifies hooks are active with a loud non-zero exit when they aren't, never resolves/writes hooks into an ancestor repo, and never clobbers a user's existing hook without a backup. (#382, #388)
21
+ - npm publishing now authenticates via **Trusted Publishing (OIDC)** instead of a long-lived `NPM_TOKEN` (which had expired and silently failed the beta.1 publish).
22
+
23
+ ### Added
24
+
25
+ - **`forge serve` shared-machine hardening.** Single-instance `serve.lock` (dead-PID reclaim), server state files created with restrictive permissions + a startup audit, and a hash-chained mutation journal verified at every startup. (#383)
26
+ - **`forge control` — an honest tri-state control plane.** Set gates/rails `mandatory`/`optional`/`permission` over the **real resolver-enforced** config field (no parallel un-enforced key); refuses to "control" surfaces it can't enforce. Ships a state × enforcement-locus **guarantee matrix** and locus badges that state honestly what is run-time-enforced vs declared vs advisory. (#385)
27
+ - **Surface-only, author-agnostic PR auto-monitor.** A GitHub Actions workflow that posts a single sticky summary of unresolved review threads (grouped by author — any review bot or human) + failing/pending checks; fail-closed on both halves, never merges and never posts a verdict. (#384)
28
+ - Single-binary distribution (`bun build --compile`, checksum-verified install script) + an interactive local `forge serve` dashboard with a comment-back inbox. (#378, #379)
29
+
30
+ ### Changed
31
+
32
+ - **Beads is retired from the runtime.** The default kernel-primary path touches no Beads — the unconditional bootstrap/health probes (and their "Beads-not-initialized" stderr noise) are gone. An opt-in `forge migrate` import/export is the only remaining Beads surface. (#387)
33
+
34
+ ### Known limitation (honest by design)
35
+
36
+ - The *configurable* gate/rail registry is not yet consumed by a runtime deny — real quality enforcement today lives in the lefthook TDD pre-commit hook, fail-closed `validate`/`preflight`, and kernel stage-order/completion (all independent of the configurable flags). The `forge control` guarantee matrix documents exactly what each control does today; wiring the registry to those enforcement points is tracked for a later release.
37
+
38
+ ## [0.1.0-beta.1] - 2026-07-09
39
+
40
+ First public release (beta). Published under the npm `beta` dist-tag. The default issue backend changed from Beads to the built-in Kernel store, the Kernel's git-tracked JSONL portability loop now works end to end, and a pre-beta audit hardened the CLI surface, docs, and npm packaging.
41
+
42
+ ### Changed
43
+
44
+ - **Default issue backend is now the built-in Kernel store (was Beads).** `forge list`, `forge ready`, `forge show`, `forge create`, `forge close`, and the other issue wrappers now read the Kernel issue store by default; no Beads install or initialization is required.
45
+ - Pre-merge is presented as an embedded documentation gate inside the `/ship` and `/review` stages — not a numbered workflow stage, and not an invokable `/premerge` command. (#269)
46
+ - Packaging: excluded a stray test file from the published npm tarball, added an `engines.node` requirement of `>=22.16.0`, and documented the `forge doc-gate` command. (#271)
47
+ - **Packaging: stopped shipping internal `docs/work/**` planning docs in the npm tarball.** The published package no longer contains maintainer-local absolute paths or internal project names (843 → 425 files, 2.1 MB → 997 kB). (#334)
48
+ - **`forge <unknown-command>` now fails honestly.** A mistyped or unrecognized command prints `Error: Unknown command '<x>'` to stderr and exits `1`, instead of printing the setup banner and exiting `0`. (#334)
49
+
50
+ ### Fixed
51
+
52
+ - **The core workflow is now reachable out of the box after `forge init` / `forge setup`.** Previously, lefthook's own postinstall dropped a fully-commented stub `lefthook.yml` that blocked Forge from writing a real config, so `forge plan` / `dev` / `ship` all dead-ended on `HOOKS_NOT_ACTIVE: missing required hooks: pre-commit, pre-push`. Forge now writes a minimal user-facing lefthook config wiring the self-contained TDD gate (`.forge/hooks/check-tdd.js`) on pre-commit and the project's own tests on pre-push — referencing only files a user project actually has (never Forge's repo-internal `scripts/`) — and overwrites the disposable stub while never clobbering a real config. (#334)
53
+ - End-to-end new-user UX polish (all surfaced by a fresh-project journey audit): `forge claim`/`show`/etc. with no id now return a clean "Missing required argument <id>" and a non-zero exit instead of fabricating a random UUID and quarantining it; issue writes (`forge create`/`claim`/`close`/…) print a concise human confirmation (`✓ Created <id>`) at an interactive terminal while keeping the machine-parseable JSON envelope when piped or scripted (so automation is unchanged); `forge prime`/`orient` no longer show internal "D21 placeholder" text; the kernel filesystem note dropped its alarming "database corruption" wording on the fail-open path; and `forge init` no longer emits a Node `DEP0190` deprecation warning. (#334)
54
+ - `forge export` now actually projects Kernel issues to git-tracked JSONL. The command dispatcher injects a Kernel broker for `export`, and Kernel mutations enqueue the projection-outbox marker under the `jsonl` target the export consumer drains — so the Kernel git-persistence/portability loop works end to end. (#270)
55
+ - First-run hint from `forge status` pointed at a nonexistent docs topic (`forge docs workflow`); it now points at `forge docs setup`. (#334)
56
+ - Removed stale "Beads" wording from live `forge --help` output — the `board` and `test` command descriptions now reference the kernel. (#334)
57
+ - QUICKSTART: added an npm install path beside bun, listed Hermes as a supported harness (was "planned"), and pointed the section 6 validation example at the user's own project (`forge validate`) rather than this repository. (#334)
58
+
59
+ ### Added
60
+
61
+ - **Human-readable issue handles: `<title-slug>-<short-id>` (e.g. `add-oauth-login-56a3a16d`).** Opaque UUIDs make it hard to tell what an issue is or track where an agent is across sub/dependency tasks. `forge ready`/`list` now show a readable handle in the ID column, and issue writes confirm with it (`✓ Created add-oauth-login-56a3a16d`) at an interactive terminal. The handle is **resolvable** — `forge show add-oauth-login-56a3a16d`, `forge show 56a3a16d`, or even a stale slug with the right id all resolve to the same issue (the resolver reads the trailing 8-char short id; the slug is display sugar). The canonical id stays the full UUID; short legacy/imported ids (`forge-2a3bc9`) pass through unchanged. (kernel 1db53c60)
62
+ - **Lease-ownership verification: `forge issue owns <id>`.** A claim returning `ok:true` does not by itself prove you won the lease — a same-key duplicate replay also returns `ok:true` (echoing the current call's `claim_id`), and a live lease can be reclaimed on expiry. The new Kernel read exits `0` iff the resolving actor (`FORGE_ACTOR` → `FORGE_SESSION_ID` → default `forge`) holds the **single active claim** and that lease has **not expired**; otherwise it exits non-zero (conflict, code `4`) with a clear "you do not own the lease for `<id>` (held by `<actor>`)" message. `--json` emits `{ ok:true, data:{ owned, claimed_by, expired, actor, expires_at } }`. It is a strict READ (never mutates state) and is Kernel-only (the Beads passthrough returns a clear kernel-only error). The new `claim-safety` skill packages the reusable procedure — claim → `owns` → work → re-verify before `close`/`release` — and is registered in the `kernel` umbrella skill. (kernel eea2f9ce, builds on d71a824b)
63
+ - **Kernel linkage backbone: `forge worktree create` now records the issue → worktree → work-folder chain, and orientation reads it instead of guessing.** Previously `kernel_worktrees` was schema-only (0 writes, always empty), so the kernel stored none of the linkage and orientation resolved the active work-folder by a filesystem heuristic ("most-complete folder wins") that breaks silently under parallel features. Now `forge worktree create <slug> [--issue <id>] [--work-folder <path>]` writes an idempotent `kernel_worktrees` row (keyed by absolute worktree path) linking `path`/`branch`/`issue_id`/`work_folder`/`git_common_dir`, and drops a machine-readable `.forge-issue` marker in the work-folder so a folder resolves to its issue deterministically. `orientation.discoverWorkFolder` and the new `forge worktree list` READ this linkage from the kernel (row `work_folder`, else `issue_id` → marker scan), falling back to the folder heuristic only when no row exists. Migration `007_kernel_worktrees_linkage_columns` adds the two nullable columns (backward-compatible; a missing/un-migrated kernel degrades to the heuristic, so a repo with no reachable kernel still gets a usable worktree). (kernel 727289e2-be51-4833-adb1-03484fadc99d)
64
+ - Two kernel-native canonical skills, registered through the `kernel` umbrella index and mirrored into the generated agent skill dirs by `skills-sync`. `triage-ready` is a read-only "what should I work on" skill that ranks and *explains* the derived ready queue via `forge issue ready` / `blocked` / `stats` (never `board`, which reads a legacy snapshot store), justifies why the top pick is workable and why the runners-up are blocked, and hands the pick off without mutating the store. `issue-basics` is the everyday CRUD floor over the `forge issue` verbs (create/update/claim/release/comment/close/show/list/search/stats) with the real flags, plus the migration disposition for `label` (→ `--label "a,b"`), `reopen` (→ `update --status open`), and `delete` (unsupported by the append-only kernel — use `close`). Both carry an explicit `## Fork points` section so users can re-carve filters, ranking, staleness windows, and create conventions.
65
+ - Toggle-driven workflow config: a sparse writer for the schema-validated `.forge/config.yaml` surface (`lib/config-writer.js`) plus two thin verbs over it. `forge gate <enable|disable> <gate-id>` writes `workflow.gates.<gate-id>.enabled` and `forge role <role> --use <skill> [--ideology <name>]` writes `roles.<role>.skill` / `roles.<role>.ideology`, so users re-carve the assembly with config writes instead of editing Forge code. The reader gains an additive, backward-compatible `roles` section (siblings to `workflow.gates`) with open-world skill validation — the closed `PLAN_SUBSKILL` enum stays scoped to `planning.template.partialInvocation` and never blocks a `roles.<role>.skill` value — and `forge options roles --json` now reflects the resolved bindings. Both verbs validate at write time: an unknown gate id, unknown role, or unresolvable skill (no `SKILL.md` under `.skills/ > skills/`) errors before anything is written, never mid-run.
66
+ - **Onboarding now auto-migrates Beads → Kernel and self-installs git hooks.** `forge setup` (quick, `--yes`, and interactive agent paths) and `forge init` now detect an existing jsonl-backed `.beads` store and **auto-import** its issues, comments, and dependencies into the Kernel — reusing the idempotent `forge migrate --from beads` spine, reading the committed jsonl sidecars directly (no external issue-tracker CLI required, so it works even when the legacy SQL backend is offline) and surfacing the same honest field-gap report. A fresh `forge init` also now installs git hooks, so `forge validate`/`plan` are no longer immediately blocked by `HOOKS_NOT_ACTIVE` — closing the init → hooks catch-22. Both steps are idempotent and degrade to a warning rather than aborting onboarding.
67
+ - `forge migrate --from beads` now transfers the full legacy **activity log** — every `events.jsonl` lifecycle event (created/closed/status_changed/updated/label_added/…) and every `interactions.jsonl` agent interaction/memory record — into the Kernel `kernel_events` table (namespaced `beads.event.*` / `beads.interaction.*`, `origin=beads_import`), preserving each record's kind, actor, timestamp and payload. The write is idempotent (deterministic id, `ON CONFLICT DO NOTHING`) so re-migration mints no duplicates, and needs no schema change. Issue-level fields with no dedicated Kernel column are folded into the issue `metadata` blob instead of being dropped: beads `owner` → `assignee` (falling back after an explicit assignee, else `metadata.beads_owner`), plus `metadata.beads_external_ref` (linked GitHub issue/run) and `metadata.beads_started_at`; `design`/`assignee` land on their Kernel columns. The loader also tolerates a split `.beads` layout (events under `.beads/backup/`, interactions at `.beads/interactions.jsonl`) so neither sidecar is silently half-read. As a result `forge migrate` reports **no data-loss gap for events or interactions**, and the dry-run/import summaries surface an `events` count. The **only remaining reported gap is `dependencies.created_by`** (the Kernel dependency row has no creator column); beads-internal/derived fields such as `content_hash` are intentionally not carried (not user data).
68
+ - **Human gates are enforced by kernel EVENTS, not skill prose.** Three human gates — `gate.intent`, `gate.plan-approval`, `gate.merge` — are registered in the runtime graph (additive to the existing `gate.*-exit` set, so each is toggleable via `workflow.gates.<id>.enabled` and surfaced by `forge options gates`). New verbs record and query approval as durable kernel events on the issue: `forge gate approve <issue> <gate>` writes a `gate.approved` event and `forge gate reject <issue> <gate> [--reason <text>]` writes a `gate.rejected` event (both carrying the resolved actor; idempotent per issue+gate+actor+decision, so re-approving mints no duplicate). `forge gate status <issue> [--json]` lists an issue's gate events (who approved/rejected, when) — making gate state resume-safe after a compaction or crash. `forge gate check <issue> <gate>` is the reusable enforcement primitive a stage skill calls: it exits 0 iff the gate is disabled OR a `gate.approved` event exists, and non-zero (`gate <id> not approved for <issue>`) otherwise. Gate events are a pure append to the issue's event stream (they do not mutate the issue or participate in its revision CAS).
69
+ - `forge export --import` now **hydrates** the Kernel from a committed JSONL snapshot: it reads `.forge/kernel/*.jsonl` and upserts issues, comments, and dependencies into `kernel.sqlite`, so a fresh clone (whose `.git/forge/kernel.sqlite` is never cloned) restores its backlog from git instead of showing zero issues. The import is idempotent (upsert by id — re-importing applies nothing and never duplicates) and honors the versioned manifest (a snapshot whose `schema_version` is newer than this forge understands is refused with a clear message). The projection now carries `created_by` for author fidelity on round-trip (`schema_version` bumped 1 → 2; older v1 snapshots still import, with `created_by` defaulting to null). (#276)
70
+ - **Opt-in conditional auto-merge rules engine (default OFF).** A new pure evaluator `lib/merge-rules.js` — `evaluateMergeRules(prContext, rules) → { allowed, unmet }` — decides whether a PR may merge by ANDing a list of composable, config-driven rules over an already-fetched PR context (no network in the evaluator). Built-in rule types: `checks_green`, `threads_resolved`, `not_behind`, `no_conflicts`, `not_draft`, `min_approvals:N`, `settle_min:N` (quiet since the last comment), `idle_min:N` (quiet since the last activity), `last_comment_by:X`, `approved_by:[..]`, `not_commented_by:[..]`, composed with `any_of:[..]` groups and a `not:` wrapper; an unknown or malformed rule, or unreadable context, is surfaced as unmet (fail-closed). `checks_green` is bare (all checks must be green) or scoped — `{ checks_green: { ignore: [...] } }` exempts the named checks, `{ checks_green: { only: [...] } }` requires only the named checks (both together is malformed → fail-closed). A thin `forge merge --auto <pr>` command reads the opt-in `merge.auto` section of `.forge/config.yaml` (`{ enabled: false, rules: [...] }`), fetches the PR context via `gh` behind an injectable seam, and merges **only** when `enabled === true` **and** every rule passes — printing the unmet rules and doing nothing otherwise. Two safety layers wrap the decision: a pre-flight guard that no-ops on an already merged/closed PR (idempotent re-runs), and a TOCTOU live re-check that re-fetches and re-evaluates immediately before merging so a since-changed PR is never merged from a stale snapshot. Absent config or `enabled` not true is a strict no-op, so the test-enforced never-auto-merge-by-default invariant is preserved; it merely promotes the proven `settle-merge.sh` baseline to a native capability. Documented follow-ups (not built): the bring-your-own custom-predicate seam (`forge add`), an opt-in `auto_update` executor (update-branch when behind → wait CI → re-check → merge), required-checks scoping for `checks_green` (read the branch-protection required set), a configurable merge `method` (squash/merge/rebase), and post-merge branch deletion.
71
+ - **`smith` orchestrator super-skill.** A new flagship skill (`skills/smith/SKILL.md`, registered through the `kernel` umbrella and mirrored into the generated agent skill dirs) that COMPOSES the existing stage skills — `triage-ready` → `claim-safety` → `plan` → `dev` → `validate` → `ship` → `review` → `verify` — into the right path for a piece of work, driving autonomously BETWEEN human gates and pausing AT them. It invents no stage logic: it picks the path by change classification, enforces the three human gates as durable kernel events (`forge gate check|approve|reject|status <issue> <gate>` over `gate.intent` · `gate.plan-approval` · `gate.merge`, so a gated run is resume-safe across compaction), proves lease ownership before and after work via `claim-safety`/`forge issue owns`, and certifies `forge release check` before close. During the planning phase `smith` **calibrates the human-loop density** from the issue's size × importance × complexity, proposing an autonomy tier (lean / standard / high) — i.e. which gates to enforce — at the intent gate; the human confirms or overrides, and a low-confidence read fails toward MORE oversight. A `## Fork points` section documents the stakes heuristic, the tier → gate-set mapping, gate density, and the composed flow so users can re-carve the assembly. This is a skill doc — no new stage code. (kernel 7da81cbd)
72
+
73
+ ### Changed
74
+
75
+ - **BREAKING (default output only): `forge ready`, `forge list`/`forge issue list`, and `forge show` are human-first.** These reads now default to a compact text rendering (aligned `ID / TYPE / STATUS / PRIORITY / TITLE` columns with 8-char UUID prefixes for ready/list; a full detail view — including the FULL issue id — for show) instead of printing the raw `forge.issue.v1` JSON envelope. The kernel contract is unchanged and byte-identical behind `--json` (or `FORGE_JSON=1` for scripts that cannot alter argv); mutations and the other reads (`blocked`, `stale`, `search`, `stats`, …) keep their existing output. Check-after-write `verified:false`/`mismatches` outcomes are surfaced as a WARNING block in the text rendering, never hidden. Approved ahead of the 0.1.0 API freeze. (kernel a9bbd065)
76
+ - **Review-thread resolution machinery is now named agent-agnostically.** Renamed `.claude/scripts/greptile-resolve.sh` → `.claude/scripts/review-resolve.sh` and `.claude/rules/greptile-review-process.md` → `.claude/rules/review-process.md`. The helper always resolved GitHub PR review threads from ANY author — CodeRabbit, Qodo, Greptile, or a human — via GraphQL/REST; the old naming misleadingly implied it was Greptile-specific. The `review` and `shepherd` skills (canonical + generated `.codex` mirror), the review-process rule, and the manual/Greptile review guides now describe review threads in tool-neutral language, keeping Greptile as one supported example rather than THE brand. All in-repo references point at the new names (`lib/adapters/pr-state-adapter.js` default script path, `lib/reset.js` inventory, `lib/commands/setup.js` scaffold list, and the affected tests). Greptile-the-product surfaces are intentionally unchanged: `lib/adapters/greptile-review-adapter.js`, `lib/greptile-match.js`, the `greptile-quality-gate.yml` workflow, and `GREPTILE_SETUP.md` still document Greptile as a specific supported review tool. (092098de)
77
+ - Internal de-stage of pre-merge: the AGENTS.md/Cursor workflow generator, the plugin catalog, `forge recommend`, and the harness capability matrix no longer model pre-merge as a standalone `/premerge` stage or command. Pre-merge is now consistently presented as a documentation gate embedded in `/ship` and `/review`. Legacy `currentStage: 'premerge'` workflow state still round-trips on read, and the release-readiness gate now certifies the de-stage across those generator/taxonomy surfaces. (#275)
78
+ - Pre-merge is presented as an embedded documentation gate inside the `/ship` and `/review` stages — not a numbered workflow stage, and not an invokable `/premerge` command. (#269)
79
+ - Packaging: added an `engines.node` requirement of `>=22.16.0`, excluded a stray test file from the published npm tarball, and documented the `forge doc-gate` command. (#271)
80
+ - PR template `## Beads` section replaced with kernel-native `## Issue` (link with `Closes <forge-issue-id>`); `CONTRIBUTING.md` issue-tracking section updated to `forge issue …`; `/verify` Step 8 language de-beaded and auto-close matcher extended to also match kernel UUID issue IDs (`[0-9a-f]{8}-...-[0-9a-f]{12}`) in addition to short `prefix-xxx` form.
81
+
82
+ ### Fixed
83
+
84
+ - The stderr notice `Non-interactive mode: using default agent selection (all)` no longer prints on every command run by a non-TTY agent/CI. It is debug-only now: pass `--verbose` or set `FORGE_DEBUG=1` to see it. Plain commands are silent apart from their own output. (kernel a9bbd065)
85
+ - Concurrent agents can now genuinely contend for a Kernel issue lease. The CLI issue path wired no per-agent identity into the Kernel, so every claim used the shared `forge` actor default; two agents claiming the same issue produced an identical `claim.create:<id>:forge` idempotency key, and the second claim replayed as an idempotent duplicate (`ok:true`) instead of a lease conflict — the loser was told it had won. Forge now resolves a distinct per-agent actor (`FORGE_ACTOR` → `FORGE_SESSION_ID` → the historical `forge` default) and threads it (plus a session id when present) into the mutation context, so a second distinct claimant reaches the `claim_conflict` path (`ok:false`, exit `4`) while a same-actor retry stays idempotent. With no env set the actor is unchanged, so existing behavior is preserved. (kernel d71a824b)
86
+ - The canonical stage skills (`/plan`, `/dev`, `/validate`, `/ship`, `/review`) no longer hard-gate their exit criteria on Beads shell scripts, so a model following them on the kernel-native default is not blocked. Design/acceptance capture now uses native Kernel fields (`forge update <id> --design ...` / `--acceptance ...`); stage-transition and context-validation steps invoke the `beads-context.sh` helper only when present (kernel-native `forge comment` / `forge issue show` otherwise); and the `dep-guard` contract/ripple review is advisory and skipped (non-fatal) when its tooling is unavailable. `Beads issue` wording across the stage surface is now `Forge issue`. (#279)
87
+ - Kernel JSONL projection now round-trips the **full `kernel_issues` column set** (labels, assignee, closed_at, close_reason, parent_id, sprint_id, release_id, stage_state, acceptance_criteria, estimate, design, notes, metadata) instead of the previous 12-key subset, so `forge migrate --from beads` → `export` → hydrate no longer silently drops beads-carried fields. `schema_version` bumped 2 → 3 (additive; v1/v2 snapshots still import, with the newer columns defaulting to null). (#278)
88
+ - `forge export` now projects Kernel issues to git-tracked JSONL (command-dispatcher broker injection + `jsonl` projection-outbox target), so the Kernel's git-persistence/portability loop works end to end. (#270)
89
+ - `forge plan` no longer mislabels kernel-created issues as "Beads": the result now carries backend-accurate `issueId` and `issueBackend`, and the printed label reflects the active backend ("Kernel:" vs "Beads:"). `beadsIssueId` is retained as a deprecated alias of `issueId` for backward compatibility.
90
+ - `skills-sync` setup (`populateAgentSkills`) now pre-clears a pre-existing dangling symlink sitting at a target skill path before copying, fixing skill-sync failures caused by that cruft. Only symlinks are removed — real directories with content are never deleted.
91
+ - Corrected a stale `.gitignore` comment that described agent skill directories as "junctions/symlinks"; they are populated at setup time as real file copies.
92
+
93
+ #### Migration notes
94
+
95
+ - Existing `.beads` data is no longer read unless Beads is explicitly selected.
96
+ - Opt back in to Beads (precedence: highest first) with the CLI flag `--issue-backend beads`, the environment variable `FORGE_ISSUE_BACKEND=beads`, or the `.forge/config.yaml` key `issueBackend: beads`.
97
+
98
+ ## [0.0.11] - 2026-06-03
99
+
100
+ This is the public documentation and positioning release.
101
+
102
+ #### User value
103
+
104
+ - Reframes Forge as a local runtime control plane for AI-assisted engineering, not only a fixed TDD stage ladder.
105
+ - Makes the repository docs the canonical source for README, quickstart, support, command reference, release flow, and DeepWiki indexing.
106
+ - Gives new users a clearer first-run path for `forge init`, `forge setup`, `forge status`, Beads/GitHub sync, worktrees, validation, and PR review workflows.
107
+ - Adds support paths for setup failures, Beads/Dolt recovery, protected state, branch protection, worktree cleanup, and validation failures.
108
+
109
+ #### Migration notes
110
+
111
+ - Treat `/plan -> /dev -> /validate -> /ship -> /review -> /verify` as an agent workflow template. Pre-merge is a documentation gate embedded in `/ship` and `/review`, not a numbered stage. Do not assume every stage is a standalone `forge <stage>` CLI command.
112
+ - Use `forge init` for the `.forge/` adoption skeleton and `forge setup` for agent instructions, Beads/GitHub sync scaffolding, and harness files.
113
+ - Use `--agents`, not the stale singular `--agent`, when documenting or invoking setup.
114
+ - Internal roadmap labels such as `0.0.19` are future planning labels, not current public package availability.
115
+
116
+ #### Feature flags and experimental areas
117
+
118
+ - Protected-state enforcement is active only where the protected-state checker is wired into hooks or CI.
119
+ - `forge migrate` is a dry-run proof of concept.
120
+ - Review adapters currently support the review-adapter contract and Greptile-shaped starter template.
121
+ - Greptile, SonarCloud, branch protection, and GitHub sync depend on repository configuration and credentials.
122
+
123
+ #### Known limitations
124
+
125
+ - Beads/Dolt state can fail independently of Git state; use the support guide before changing issue metadata.
126
+ - Windows worktrees can leave locked Dolt or tool processes behind during cleanup.
127
+ - DeepWiki is generated from repository files and can lag behind `master` after merge.
128
+ - Some stage enforcement remains agent/harness dependent.
129
+
130
+ #### Rollback path
131
+
132
+ - Revert this release PR if the combined package metadata and public docs create release confusion.
133
+ - Do not publish the package unless the version bump, changelog entry, and public docs describe the same public release.
134
+ - If generated DeepWiki output keeps old TDD-only framing after refresh, file a follow-up issue and correct the repository docs first.
135
+
136
+ #### Adapter compatibility
137
+
138
+ - Existing issue wrappers continue to use Beads as the local/reference issue adapter.
139
+ - Existing Greptile review shell compatibility remains documented as the current review-adapter starter path.
140
+
141
+ #### Post-merge DeepWiki checklist
142
+
143
+ - Refresh DeepWiki after merge to `master`.
144
+ - Confirm the DeepWiki index date and commit changed to the merged commit.
145
+ - Compare generated Overview, Getting Started, Core Concepts, and workflow pages against `README.md`, `QUICKSTART.md`, `docs/INDEX.md`, `docs/guides/WORKFLOW_TEMPLATES.md`, `docs/reference/SKILLS.md`, and `docs/reference/COMMANDS.md`.
146
+ - File a follow-up issue if generated docs still describe Forge as only the old seven-stage TDD workflow.
147
+
148
+ ### Added
149
+
150
+ - **Normalized shared GitHub/Beads issue sync state** (PR #134, forge-nlgg): added canonical link reconciliation and shared import primitives so steady-state GitHub sync and existing-issue import use the same normalized issue contract
151
+
152
+ ### Fixed
153
+
154
+ - **Embedded Dolt worktree contention** (PR #146, forge-besw.18): switched this repo's Beads metadata to embedded Dolt mode, documented the local worktree contention failure mode, and updated workflow command surfaces to the current `docs/work/YYYY-MM-DD-<slug>/` planning structure
155
+ - **Historical plan file path contract** (forge-ddk3): earlier work unified `.claude/plans/` references to `docs/plans/`; current v0.0.11 docs use `docs/work/YYYY-MM-DD-<slug>/` as the canonical planning artifact path, with older path references treated as compatibility or historical notes
156
+ - **ENHANCED_ONBOARDING.md** (forge-3tnu): Rewrote to match actual 7-stage workflow with correct `--type` values (critical|standard|simple|hotfix|docs|refactor)
157
+ - **smart-status.sh jq errors**: Handle numeric priorities (0-4) and null types from beads 0.62+ — no more `string/number cannot be iterated` crashes
158
+ - **smart-status.sh display**: Numeric priorities now display as `P2` not `2` in dashboard; numeric `4` correctly groups into BACKLOG
159
+ - **Plan detection**: `forge status` no longer misdetects plan stage from unrelated files in `docs/plans/` — scopes to current branch slug
160
+ - **OWASP docs**: Fixed path-traversal risk in allowlist, clarified mitigations as collective requirements, corrected git `--` separator placement
161
+
162
+ ### Changed
163
+
164
+ - **Forge Kernel authority plan reset** (PR #191, forge-2agy.8): reframed the post-0.0.18 release train around Forge Kernel authority, local SQLite broker boundaries, Cloudflare team authority, Beads import/export compatibility, provider capability contracts, and decision drift guards.
165
+ - **Ambiguity policy**: Hardcoded rubric scoring (>= 80% proceed, < 80% ask) as default in `/plan` — removed redundant per-feature Q&A question
166
+
167
+ ## [0.0.5] - 2026-03-22
168
+
169
+ ### Added
170
+
171
+ - **Install-fixes: hardened setup, Beads sync, documentation overhaul**
172
+ - `--dry-run` flag: preview setup actions without writing files
173
+ - `--non-interactive` flag: skip all prompts, use defaults; auto-enabled when `CI=true`
174
+ - `--symlink` flag: create CLAUDE.md as a symlink to AGENTS.md instead of a copy
175
+ - `--sync` flag: scaffold Beads GitHub sync workflow with PAT setup
176
+ - `--agents=<list>` flag: comma-separated agent selection (e.g., `--agents=claude,cursor`)
177
+ - `ActionCollector` and `isNonInteractive` utilities for setup orchestration
178
+ - Beads config writer utilities for programmatic `.beads/config.yaml` generation
179
+ - Beads health check smoke test after initialization
180
+ - Defensive `bd init` wrapper with hook preservation
181
+ - Auto-detect default branch and Beads version for sync workflows
182
+ - Guided PAT setup for Beads sync via `gh` CLI
183
+ - Beads sync scaffolding during `forge setup --sync`
184
+ - Husky detection and automated migration to Lefthook
185
+ - Documentation consistency tests (`test/docs-consistency.test.js`)
186
+
187
+ ### Changed
188
+
189
+ - **Install command**: `bun install forge-workflow` changed to `bun add -D forge-workflow` (dev dependency)
190
+ - **install.sh**: Deprecated to thin bootstrapper that installs forge-workflow and delegates to `bunx forge setup`
191
+ - **Lefthook check**: Now verifies binary existence, not just package.json entry
192
+ - **CLAUDE.md merge**: `smartMergeAgentsMd` preserves existing CLAUDE.md without markers
193
+ - **README.md**: Added Setup Flags table documenting all new CLI flags
194
+ - **docs/SETUP.md**: Added Beads sync section with PAT requirements and `BEADS_SYNC_TOKEN` documentation
195
+ - **Sync scripts and workflow templates**: Added to npm package `files` array
196
+
197
+ ### Fixed
198
+
199
+ - Lefthook check verifies binary existence, not just package.json entry
200
+ - `smartMergeAgentsMd` preserves existing CLAUDE.md without markers
201
+ - Sync scripts and workflow templates added to npm package
202
+
203
+ ## [0.0.4] - 2026-03-22
204
+
205
+ ### Added
206
+
207
+ - **Multi-dev session awareness: conflict detection, parallel work visibility** (PR #92, forge-w69s)
208
+ - Pluggable sync backend (`refs`/`branch`/`inline`) for cross-developer beads sync via git
209
+ - File index (`.beads/file-index.jsonl`) tracks which developer touches which files/modules
210
+ - Conflict detection script with module-level overlap warnings and `--detail` drill-down
211
+ - Cross-developer "Team Activity" section in `/status` with overlap and staleness warnings
212
+ - Soft-block gates on `/plan` and `/dev` entry when module overlap detected
213
+ - Auto-sync at Forge command entry pulls latest team state
214
+ - Session identity as `email@hostname`, sync branch auto-detection with config override
215
+ - 136 new shell tests across 5 test suites
216
+
217
+ - **Smart Setup UX: agent detection, incremental setup, clean output** (PR #90, forge-iv8b)
218
+ - 4-layer agent auto-detection: `AI_AGENT` env > agent-specific env vars > VSCode path parsing > config file signatures (8 agents)
219
+ - Incremental setup: content-hash comparison skips identical files on re-run; `--force` flag for CI/overwrite
220
+ - Progressive summary output: clean 3-line default, `--verbose` for file-by-file detail
221
+ - Lazy directory creation: `docs/planning/` and `docs/research/` created on first `/plan` use, not at setup
222
+ - Worktree detection utility: prevents nested worktree creation in `/plan`
223
+ - 5 new lib modules: `detect-agent.js`, `setup-action-log.js`, `file-hash.js`, `detect-worktree.js`, `setup-summary-renderer.js`
224
+ - 124 new tests across 9 test files
225
+
226
+ ### Removed
227
+
228
+ - **`docs/WORKFLOW.md`** — content duplicated in `AGENTS.md`; all 50+ references updated (PR #90, forge-iv8b)
229
+
230
+ ### Fixed
231
+
232
+ - **Smart-status.sh jq date parsing** for fractional seconds + timezone offsets (PR #90, forge-iv8b)
233
+ - **CI bypass workflow** — removed `test/**` from `paths-ignore` to unblock test-only PRs (PR #90, forge-iv8b)
234
+ - **Ship command rebases onto latest base branch before push** (PR #89, forge-ebls)
235
+ - `/validate` entry gate: rebases onto base branch (detected dynamically) before running checks
236
+ - `/ship` freshness check: lightweight behind-check before push, alerts if stale
237
+ - Fetch failures caught with `|| { exit 1; }` guards
238
+ - `bun run check` clarified as checks-only (no rebase)
239
+
240
+ ### Changed
241
+
242
+ - **PR template restructured to narrative format** (PR #89, forge-ebls)
243
+ - Visible: Problem → Root Cause → Fix → Value → Beads
244
+ - Collapsible `<details>`: Test Coverage, Security Review, Design Doc, Decisions Log, Documentation Updated, Validation checklist
245
+ - Tips section updated to reinforce narrative-first approach
246
+
247
+ ### Added
248
+
249
+ - **Workflow Intelligence: smart status, phase tracking, naming clarity** (PR #72, forge-68oj)
250
+ - `scripts/smart-status.sh`: Ranks all issues by composite score (priority × unblock chain × type × status boost × epic proximity × staleness)
251
+ - Grouped output: Resume → Unblock Chains → Ready Work → Blocked → Backlog with ANSI colors and NO_COLOR support
252
+ - Active session detection: parses `git worktree list --porcelain`, maps branches to in-progress beads issues
253
+ - Two-tier conflict detection: Tier 1 (file-level overlap via `git diff`) + Tier 2 (actual merge conflicts via `git merge-tree`, git 2.38+)
254
+ - `/plan` now creates epic at Phase 1 entry with stage transitions at each phase boundary
255
+ - `/status` updated to use `smart-status.sh` for dynamic ranked output
256
+ - Disambiguation note added to `/validate` command (three concepts: /validate, forge-preflight, bun run check)
257
+ - Auto-detect default branch (master/main) with `DEFAULT_BRANCH` env override
258
+ - Reverse dependency map computes "Unblocks:" annotations from actual dependency data
259
+ - 67 new tests, 0 regressions
260
+
261
+ ### Changed
262
+
263
+ - **CLI prerequisite checker renamed to `forge-preflight`** (PR #72, forge-0xic)
264
+ - Clearer name distinguishes it from `/validate` workflow command and `bun run check`
265
+ - Updated: bin entry, package.json, README, CHANGELOG, DEVELOPMENT, docs/VALIDATION, docs/research/
266
+ - Fixed pre-existing bug: `validateDev` now checks `docs/plans/` (was `.claude/plans/`)
267
+ - Fixed Node compat: removed `readdirSync({ recursive })` (requires Node 18.17+)
268
+
269
+ - **Dynamic commands rule** (PR #72)
270
+ - Added to AGENTS.md and CLAUDE.md: never hardcode example output in command files when scripts generate it dynamically
271
+
272
+ ### Fixed
273
+
274
+ - **P2 bug fixes: setup, postinstall, dead config, lint hooks** (PR #69, forge-cpnj + forge-iv1p + forge-8u6q + forge-zs2u)
275
+ - Setup code paths unified: extracted `executeSetup()` shared helper, fixed claude agent being skipped in CLI path
276
+ - Removed `postinstall` script — no more surprise file writes on `npm install`
277
+ - Added `[FORGE_SETUP_REQUIRED]` first-run detection with exit code 1
278
+ - Added `--yes`/`-y` flag for non-interactive setup (AI agent friendly)
279
+ - Removed dead `_CODE_REVIEW_TOOLS` and `_CODE_QUALITY_TOOLS` config objects
280
+ - Replaced `npx --yes eslint` in lint.js with package manager delegation (eliminates supply chain risk)
281
+ - Added `--max-warnings 0` to package.json lint script
282
+ - Added `--version`/`-V` flag handling
283
+ - Exempted `recommend` command from first-run guard (read-only, useful for onboarding)
284
+ - 38 new tests (1676 → 1714)
285
+
286
+ - **Stage naming consistency + COMMANDS array fix** (PR #67, forge-7lvz + forge-b262)
287
+ - Replaced hardcoded COMMANDS array with `getWorkflowCommands()` — scans `.claude/commands/*.md` at runtime
288
+ - Fixed stale `/check` → `/validate` and `/merge` → `/premerge` in CURSOR_RULE and `.cursorrules`
289
+ - Dynamic copy/convert counts — reports actual successes, not filesystem count
290
+ - `copyFile` now always warns on missing sources (was DEBUG-only)
291
+ - Fixed CLAUDE.md placeholder description
292
+ - Fixed README agent count: "7" → "8" to match `lib/agents/`
293
+ - 24 new regression tests across 2 test files
294
+
295
+ - **Hook bypass protection for AI agents** (PR #66)
296
+ - `scripts/branch-protection.js`: Allow beads-only pushes to master while blocking code changes
297
+ - Replaced `execSync` with `execFileSync` + `resolveGitBinary()` to prevent command injection
298
+ - Added `isSafeGitRefComponent()` validation on all branch name paths
299
+ - Gated `FORGE_GIT_MOCK_JS` behind `NODE_ENV=test` to prevent bypass in production
300
+ - Removed `LEFTHOOK=0` and `--no-verify` bypass guidance from all hook scripts
301
+ - Added behavioral integration tests with cross-platform mock git (Node.js shim)
302
+ - Updated `CLAUDE.md`: AI agents must never bypass hooks
303
+
304
+ ### Added
305
+
306
+ - **Logic-level dependency detection**: Upgrades dep-guard `check-ripple` from keyword-only matching to structured code-aware analysis (PR #65, forge-9zv)
307
+ - `lib/dep-guard/analyzer.js`: Phase 3 structured analyzer — scores dependencies across import, contract, and behavioral dimensions
308
+ - `lib/dep-guard/import-detector.js`: Traces actual `require`/`import` statements between task files using `@babel/parser`
309
+ - `lib/dep-guard/task-parser.js`: Extracts file-to-function mappings from task list markdown
310
+ - `scripts/dep-guard-analyze.js`: CLI entry point for the structured analyzer
311
+ - `apply-decision` subcommand: Beads approval flow with cycle detection, rollback, and state persistence
312
+ - Graceful fallback: structured analyzer failure falls through to keyword-only check
313
+ - 107+ new tests covering analyzer, import detector, and approval flow
314
+
315
+ - **Command behavioral eval + improvement loop**: Automated testing infrastructure for slash commands with LLM-based grading (PR #63, forge-agp)
316
+ - `scripts/run-command-eval.js`: E2E eval pipeline — runs commands in isolated worktrees, grades transcripts against assertions
317
+ - `scripts/improve-command.js`: Semi-autonomous improvement loop with pause-on-regression and cross-session eval history
318
+ - Three assertion types: standard (output correctness), HARD-GATE (gate enforcement), contract (cross-command pipeline integrity)
319
+ - `.claude/agents/command-grader.md`: LLM grader agent with strict grading guidelines
320
+ - Eval sets for `/status` and `/validate` as first targets
321
+ - 110 new tests across 10 test files, all passing
322
+
323
+ - **Pre-change dependency guard**: Contract-aware ripple analysis that detects logic conflicts between in-flight issues before work begins (PR #62, forge-mze)
324
+ - `scripts/dep-guard.sh`: 4 subcommands — `find-consumers`, `check-ripple`, `store-contracts`, `extract-contracts`
325
+ - `/plan` Phase 1: Advisory ripple check before design Q&A surfaces overlapping open issues
326
+ - `/plan` Phase 3: Auto-extract contracts from task list and store on Beads issue
327
+ - Ripple Analyst agent prompt: LLM-judged impact analysis (NONE/LOW/HIGH/CRITICAL)
328
+ - Keyword matching with stop-word filtering, timestamp-based contract dedup
329
+ - 29 tests covering all subcommands with mock-based `BD_CMD` testing pattern
330
+
331
+ ### Fixed
332
+
333
+ - **Roo Code rootConfig conflict**: Changed from `.clinerules` to `.roorules` — was conflicting with Cline during setup (PR #61)
334
+ - **Cline workflows directory clash**: Moved from `.clinerules/workflows/` to `.cline/workflows/` — `.clinerules` was being created as a directory, blocking the root config symlink (PR #61)
335
+ - **Symlink safety**: `createSymlinkOrCopy` now uses `lstatSync` to avoid false positives on symlinks to directories, with actionable warning for users (PR #61)
336
+ - **Cross-codepath sync**: Updated `sync-commands.js`, `install.sh`, tests, and sync manifest to match new Cline/Roo paths (PR #61)
337
+
338
+ ### Changed
339
+
340
+ - **Version reset to 0.0.1**: All prior npm versions (1.0.0–1.5.0) unpublished; clean alpha start (PR #61)
341
+ - **Removed `.clinerules` flat-file migration**: No longer needed since Cline workflows moved to `.cline/workflows/` (PR #61)
342
+
343
+ ### Added
344
+
345
+ - **Beads-embedded plan context**: Auto-populate design/notes/acceptance in Beads issues from `/plan` and `/dev` (PR #59, forge-bmy)
346
+ - `scripts/beads-context.sh`: Agent-agnostic helper with 5 commands (`set-design`, `set-acceptance`, `update-progress`, `parse-progress`, `stage-transition`)
347
+ - `/plan` Phase 3: Embeds task count + file path in `--design`, success criteria in `--acceptance`
348
+ - `/dev` Step E: Appends per-task progress (title, tests, commit, gates) to `--notes` as HARD-GATE
349
+ - `/status`: Shows compact progress ("3/7 tasks done | Last: title (sha)") with `bd show` hint
350
+ - Stage transitions recorded via `--comment` at `/plan`, `/dev`, `/validate`, `/ship`, `/review` exits
351
+ - `scripts/**` added to CI test workflow path filters
352
+ - **`forge check-agents` CLI**: Validates all agent command files are in sync and plugin catalog matches reality (`node scripts/check-agents.js`) (PR #60, forge-2w3)
353
+
354
+ ### Changed
355
+
356
+ - **Plugin catalog**: Updated capability flags for 6 agents — Cursor, Cline, Copilot, Kilo Code, Codex now correctly report `commands: true`; Claude Code reports `hooks: true` (PR #60, forge-2w3)
357
+
358
+ ### Removed
359
+
360
+ - **Dropped agent cleanup**: Removed all code, config, docs, and files for 4 dropped agents — Antigravity, Windsurf, Aider, Continue (PR #60, forge-2w3)
361
+ - Deleted: `.aider.conf.yml`, `lib/agents/continue.plugin.json`, `docs/README-v1.3.md`, `docs/research/agent-instructions-sync.md`
362
+ - Cleaned: `bin/forge.js` (Continue setup), `packages/skills/` (agent entries), `package.json` (keywords), `.gitignore` (dropped dirs)
363
+ - Fixed: `package.json` description from "9-stage" to "7-stage"
364
+
365
+ ### Fixed
366
+
367
+ - **Stale workflow refs**: Cleaned up references to removed tools and orphaned files in agent commands (PR #56, forge-ctc)
368
+ - `status.md`: Replaced openspec/PROGRESS.md commands with Beads equivalents, fixed /research → /plan
369
+ - `rollback.md`: Updated workflow diagrams to correct 7-stage pipeline (removed /research)
370
+ - `premerge.md`: Replaced PROGRESS.md reference with CHANGELOG.md maintenance step
371
+ - Fixed inconsistent example output in status.md (in-progress work vs "Ready for new feature")
372
+
373
+ ## [1.5.0] - 2026-02-03
374
+
375
+ ### Added
376
+
377
+ - **Plugin Architecture**: 11 specialized agent plugins for enhanced capabilities
378
+ - `javascript-typescript`: JavaScript/TypeScript expertise (4 skills)
379
+ - `backend-development`: API design, microservices, Temporal workflows (9 skills)
380
+ - `database-design`: PostgreSQL, SQL optimization (2 skills)
381
+ - `security-scanning`: SAST, threat modeling, STRIDE analysis (6 skills)
382
+ - `full-stack-orchestration`: Deployment, performance, testing (4 skills)
383
+ - `tdd-workflows`: TDD orchestration, code review (2 skills)
384
+ - `llm-application-dev`: RAG, embeddings, prompt engineering (7 skills)
385
+ - `frontend-design`: Production-grade UI development (1 skill)
386
+
387
+ - **TDD Enforcement**: Git hooks via Lefthook
388
+ - Pre-commit hook checks for test files before allowing source commits
389
+ - Pre-push hook runs full test suite
390
+ - Interactive prompts for violations with recovery options
391
+ - CI/CD-aware: auto-aborts in non-interactive environments
392
+ - Package manager auto-detection (bun/pnpm/yarn/npm)
393
+
394
+ - **Preflight CLI**: `forge-preflight` command
395
+ - `forge-preflight status` - Check project prerequisites
396
+ - `forge-preflight dev` - Validate before /dev stage
397
+ - `forge-preflight ship` - Validate before /ship stage
398
+
399
+ - **Auto-Installation**: Beads and OpenSpec setup
400
+ - Quick setup mode auto-installs Beads
401
+ - Interactive setup prompts for both tools
402
+ - Dynamic tool status in project summary
403
+
404
+ - **AGENTS.md Enhancements**: Optimized universal instructions
405
+ - Plugin loading instructions
406
+ - Workflow stage documentation
407
+ - Security and TDD guidelines
408
+
409
+ ### Improved
410
+
411
+ - **Test Patterns**: Comprehensive test file detection
412
+ - Nested directories: `test/unit/`, `test/integration/`
413
+ - Colocated tests: `__tests__/` directories
414
+ - Both `.test` and `.spec` variants
415
+
416
+ - **Error Handling**: Safer recursive file operations
417
+ - Try/catch for directory reads
418
+ - Graceful failures in validation
419
+
420
+ ### Fixed
421
+
422
+ - Non-TTY environment handling in TDD hook (CI/CD compatibility)
423
+ - Silent failure in lefthook prepare script (now shows informative message)
424
+
425
+ ## [1.4.9] - 2025-02-02
426
+
427
+ ### Fixed
428
+
429
+ - **Code Quality Overhaul**: Resolved 101 SonarLint and linting warnings
430
+ - Fixed 42 structural warnings (exception handling, control flow, code patterns)
431
+ - Fixed 35 cognitive complexity warnings by extracting 47 helper functions
432
+ - Modernized JavaScript patterns (Number.parseInt, Number.isNaN, optional chaining)
433
+ - Applied node: protocol for all built-in module imports
434
+ - Improved exception handling with meaningful comments
435
+ - Converted negated conditions to positive logic
436
+ - Fixed nested ternary operations and if-in-else blocks
437
+
438
+ ### Refactored
439
+
440
+ - **8 Core Functions** - Reduced cognitive complexity from 24-57 to 5-10:
441
+ - `detectProjectType()` - 27→8 (14 helpers: framework detection, feature detection)
442
+ - `handleInstructionFiles()` - 37→5 (6 helpers: scenario handlers)
443
+ - `setupAgent()` - 40→8 (10 helpers: agent-specific setup, file operations)
444
+ - `interactiveSetup()` - 36→8 (9 helpers: UI, validation, workflow)
445
+ - `main()` - 24→10 (5 helpers: CLI parsing, setup orchestration)
446
+ - `extractUserSections()` - 25→8 (2 helpers: marker/command extraction)
447
+ - `performRollback()` - 32→10 (7 helpers: method-specific handlers)
448
+ - Plus 1 additional function refactored
449
+
450
+ ### Improved
451
+
452
+ - **Maintainability**: Single responsibility principle applied throughout
453
+ - **Testability**: 47 new focused helper functions can be tested independently
454
+ - **Readability**: Clear function names, reduced nesting, improved code organization
455
+ - **Code Quality**: Zero SonarLint warnings (except optional S7785 - CommonJS limitation)
456
+ - **Documentation**: Comprehensive inline comments for exception handling
457
+
458
+ ### Changed
459
+
460
+ - Internal code structure significantly reorganized (no API changes)
461
+ - +1,056 lines (helper functions), -749 lines (refactored complexity)
462
+ - Net: +307 lines with better separation of concerns
463
+
464
+ ## [1.4.8] - 2025-02-02
465
+
466
+ ### Fixed
467
+
468
+ - **Additional markdown linting**: Expanded markdownlint configuration
469
+ - Disabled MD031 (blanks around fenced code blocks)
470
+ - Disabled MD032 (blanks around lists)
471
+ - Disabled MD040 (fenced code language)
472
+ - Disabled MD041 (first line heading level)
473
+ - Disabled MD022 (blanks around headings)
474
+ - Disabled MD060 (table column count)
475
+ - Fixed .claude/skills/forge-workflow/SKILL.md formatting
476
+ - Updated .markdownlint.json with comprehensive rule suppressions
477
+
478
+ ### Improved
479
+
480
+ - Zero markdown linting warnings across all documentation
481
+ - Cleaner IDE experience with focused, actionable linting rules
482
+
483
+ ## [1.4.7] - 2025-02-02
484
+
485
+ ### Fixed
486
+
487
+ - **Line length warnings**: Disabled MD013 line-length rule
488
+ - 80-character limit too restrictive for modern documentation
489
+ - Especially problematic for changelog descriptions
490
+ - Updated .markdownlint.json to disable MD013
491
+
492
+ ### Improved
493
+
494
+ - Zero IDE warnings - completely clean development environment
495
+
496
+ ## [1.4.6] - 2025-02-02
497
+
498
+ ### Fixed
499
+
500
+ - **IDE linting issues**: Fixed all 100+ markdownlint warnings
501
+ - Fixed table formatting in .clinerules (MD060 - proper spacing around pipes)
502
+ - Added language specification to code blocks (MD040)
503
+ - Added blank lines around lists (MD032)
504
+ - Created .markdownlint.json config to suppress false positives in CHANGELOG.md
505
+
506
+ ### Improved
507
+
508
+ - Clean IDE experience with zero linting warnings
509
+ - Proper markdown formatting across all documentation files
510
+
511
+ ## [1.4.5] - 2025-02-02
512
+
513
+ ### Changed
514
+
515
+ - **Automatic versioning**: Version now read from package.json (single source of truth)
516
+ - Added VERSION constant from package.json
517
+ - Replaced all hardcoded version strings with VERSION variable
518
+ - No more manual version updates needed in bin/forge.js
519
+ - Simply run `npm version patch/minor/major` to bump version everywhere
520
+
521
+ ### Improved
522
+
523
+ - Version management simplified - update package.json only
524
+ - Eliminates risk of version mismatch between package.json and displayed version
525
+
526
+ ## [1.4.4] - 2025-02-02
527
+
528
+ ### Fixed
529
+
530
+ - **Version banner**: Updated all version strings from v1.3.0 to v1.4.4
531
+ - Fixed version display in CLI banner
532
+ - Updated all setup completion messages
533
+ - Ensures correct version is shown to users
534
+
535
+ - **Documentation setup**: Fixed missing documentation files during `npx forge setup`
536
+ - Created `setupCoreDocs()` helper function
537
+ - Now copies docs/WORKFLOW.md to project during setup
538
+ - Now copies docs/research/TEMPLATE.md to project during setup
539
+ - Creates docs/planning/PROGRESS.md during setup
540
+ - Applies to all setup modes: interactive, quick, and agent-specific
541
+
542
+ ### Changed
543
+
544
+ - Extracted documentation setup logic into reusable `setupCoreDocs()` function
545
+ - All setup commands now provide complete documentation structure
546
+ - Users no longer need to reference node_modules for workflow templates
547
+
548
+ ## [1.4.3] - 2025-01-31
549
+
550
+ ### Fixed
551
+
552
+ - **Critical package fix**: Properly exclude local user settings from npm package
553
+ - Updated package.json `files` array to explicitly include only necessary .claude/ subdirectories
554
+ - Prevents .claude/settings.json and .claude/settings.local.json from being published
555
+ - v1.4.2 still included these files due to `files` array overriding .npmignore
556
+
557
+ ### Security
558
+
559
+ - **CRITICAL**: v1.4.0, v1.4.1, and v1.4.2 inadvertently published user-specific permission settings
560
+ - Users who installed these versions should check if their .claude/settings*.json files were overwritten
561
+ - These files are now properly excluded in v1.4.3+
562
+
563
+ ## [1.4.2] - 2025-01-31
564
+
565
+ ### Fixed
566
+
567
+ - **npm package cleanup**: Attempted to exclude local user settings (incomplete fix)
568
+ - Added .npmignore (did not work due to `files` array in package.json)
569
+ - See v1.4.3 for complete fix
570
+
571
+ ## [1.4.1] - 2025-01-31
572
+
573
+ ### Changed
574
+
575
+ - **README simplified**: Reduced from 860 to 316 lines (63% reduction)
576
+ - Focused on value proposition and quick start
577
+ - Removed detailed setup instructions (moved to docs/SETUP.md)
578
+ - Removed lengthy examples (moved to docs/EXAMPLES.md)
579
+ - Added clear "Next Steps" section with links to guides
580
+ - Before/after comparison showing Forge value
581
+ - Scannable in under 2 minutes
582
+
583
+ ### Added
584
+
585
+ - **QUICKSTART.md**: Complete beginner guide (5-minute walkthrough)
586
+ - Step-by-step first feature implementation
587
+ - Actual commands with expected outputs
588
+ - Health check endpoint example
589
+ - All 9 stages demonstrated
590
+ - **docs/SETUP.md**: Comprehensive setup guide
591
+ - All agent-specific setup instructions (11+ agents)
592
+ - External services configuration (GitHub, SonarCloud, Greptile, etc.)
593
+ - Beads and OpenSpec detailed setup
594
+ - Troubleshooting section
595
+ - Environment variables reference
596
+ - **docs/EXAMPLES.md**: Real-world workflow examples
597
+ - Simple feature example (historical timing reference; not a current guarantee)
598
+ - Bug fix with security (30 minutes)
599
+ - Multi-file refactor (2-3 hours)
600
+ - Architecture change with OpenSpec (2-3 days)
601
+ - Team collaboration with Beads
602
+ - **docs/README-v1.3.md**: Archive of previous README for reference
603
+
604
+ ### Improved
605
+
606
+ - Documentation now follows progressive disclosure:
607
+ - Beginners → README + QUICKSTART.md
608
+ - Intermediate → docs/EXAMPLES.md
609
+ - Advanced → docs/SETUP.md + docs/TOOLCHAIN.md
610
+ - All technical content preserved, just better organized
611
+ - Easier to find specific information
612
+ - Better onboarding for new users
613
+
614
+ ## [1.4.0] - 2025-01-31
615
+
616
+ ### Added
617
+
618
+ - **Plan-Act-Reflect reminders**: Gentle reflection prompts in /plan, /dev, and /check commands
619
+ - Non-intrusive blockquote format at critical decision points
620
+ - Prompts to review research docs and consider complexity
621
+ - "If unsure" conditionals to avoid being prescriptive
622
+ - **Smart project detection**: Auto-detect framework, language, tooling with confidence scores
623
+ - Supports 12+ frameworks: Next.js, React, Vue, Angular, Svelte, NestJS, Express, Fastify, and more
624
+ - Confidence scoring (60-100) with visual indicators (✓ for 90%+, ~ for lower)
625
+ - Detects TypeScript, monorepo, Docker, and CI/CD configurations
626
+ - **AGENTS.md metadata**: Auto-populate with framework-specific tips and conventions
627
+ - Framework-specific development tips (3 per framework)
628
+ - Build tool detection (Vite, Webpack, Next, etc.)
629
+ - Test framework detection (Jest, Vitest, Playwright, Cypress, etc.)
630
+ - Automatic insertion after project description
631
+ - **Rollback system**: `forge rollback` command with USER section preservation
632
+ - Interactive menu with 6 options
633
+ - Comprehensive input validation for security
634
+ - Automatic USER section extraction and restoration
635
+ - Custom commands preservation in `.claude/commands/custom/`
636
+ - **4 rollback methods**:
637
+ - Last commit: Quick undo of most recent change
638
+ - Specific commit: Target any commit by hash
639
+ - Merged PR: Revert entire PR merge with Beads integration
640
+ - Partial rollback: Restore specific files only
641
+ - Branch range: Revert multiple commits
642
+ - **Dry run mode**: Preview rollback changes without executing
643
+ - Shows affected files
644
+ - Lists USER sections that would be preserved
645
+ - Lists custom commands that would be preserved
646
+ - No git operations performed
647
+ - **Input validation**: Comprehensive validation for all rollback inputs
648
+ - Commit hash validation (4-40 character hex strings or 'HEAD')
649
+ - Path traversal protection using `path.resolve()` and `startsWith()`
650
+ - Shell metacharacter rejection (`;`, `|`, `&`, `$`, `` ` ``, `(`, `)`, `<`, `>`, `\n`, `\r`)
651
+ - Method whitelist validation
652
+ - **Beads integration**: Auto-update issue status on PR rollback
653
+ - Parses commit message for issue number
654
+ - Updates issue status to 'reverted'
655
+ - Adds comment: "PR reverted by rollback"
656
+ - Silently skips if Beads not installed
657
+
658
+ ### Changed
659
+
660
+ - AGENTS.md now includes auto-detected project metadata after setup
661
+ - Setup completion message includes project detection results with confidence indicators
662
+ - COMMANDS array now includes 'rollback' for command file distribution
663
+
664
+ ### Security
665
+
666
+ - Added comprehensive input validation for all rollback commands to prevent command injection
667
+ - Path traversal protection for file operations using canonical path resolution
668
+ - Commit hash format validation to reject malicious inputs
669
+ - Shell metacharacter rejection in all user-provided inputs
670
+ - Non-destructive rollback using `git revert` (never uses `git reset --hard`)
671
+
672
+ ### Documentation
673
+
674
+ - Added `.claude/commands/rollback.md` with complete rollback documentation
675
+ - Updated `docs/WORKFLOW.md` with recovery section
676
+ - Added troubleshooting guide for common rollback issues
677
+ - Added examples for all rollback methods
678
+
679
+ ## [1.3.1] - Previous Release
680
+
681
+ (Previous changelog entries would go here)