forge-workflow 0.0.10 → 0.1.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
  2. package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
  3. package/.cursor/rules/permissions-guidance.mdc +2 -2
  4. package/.forge/hooks/check-tdd.js +82 -5
  5. package/.forge/hooks/forge-native-hook.js +431 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +709 -0
  9. package/CLAUDE.md +9 -118
  10. package/QUICKSTART.md +175 -0
  11. package/README.md +275 -365
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +532 -489
  15. package/docs/INDEX.md +93 -0
  16. package/docs/PROJECT_DESIGN.md +685 -0
  17. package/docs/architecture/index.md +66 -0
  18. package/docs/architecture/notes/README.md +35 -0
  19. package/docs/architecture/subsystems/README.md +46 -0
  20. package/docs/forge/TOOLCHAIN.md +670 -0
  21. package/docs/forge/VALIDATION.md +82 -0
  22. package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
  23. package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
  24. package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
  25. package/docs/guides/GREPTILE_SETUP.md +46 -0
  26. package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
  27. package/docs/guides/MIGRATION.md +56 -0
  28. package/docs/guides/SETUP.md +121 -0
  29. package/docs/guides/SUPPORT.md +190 -0
  30. package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
  31. package/docs/guides/memory-backends.md +183 -0
  32. package/docs/reference/ADAPTERS.md +128 -0
  33. package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
  34. package/docs/reference/COMMANDS.md +214 -0
  35. package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
  36. package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
  37. package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
  38. package/docs/reference/HERMES_INTEGRATION.md +118 -0
  39. package/docs/reference/INSIGHTS_RECAP.md +63 -0
  40. package/docs/reference/INSTALL.md +164 -0
  41. package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
  42. package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
  43. package/docs/reference/RELEASE.md +68 -0
  44. package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
  45. package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
  46. package/docs/reference/SKILLS.md +35 -0
  47. package/docs/reference/STATUS_BOARD.md +80 -0
  48. package/docs/reference/TEMPLATES.md +106 -0
  49. package/docs/{TOOLCHAIN.md → reference/TOOLCHAIN.md} +62 -47
  50. package/docs/reference/VALIDATION.md +82 -0
  51. package/docs/reference/agent-permissions.md +169 -0
  52. package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
  53. package/docs/reference/control-plane-guarantees.md +125 -0
  54. package/docs/reference/dependency-chain.md +331 -0
  55. package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
  56. package/docs/reference/forge-kernel-schema.md +72 -0
  57. package/docs/reference/kernel-conflict-evaluators.md +27 -0
  58. package/docs/reference/patch-md-format.md +77 -0
  59. package/docs/reference/protected-state-surfaces.md +59 -0
  60. package/docs/reference/shepherd.md +155 -0
  61. package/docs/reference/superpowers-analysis.md +320 -0
  62. package/docs/reference/superpowers-integration-options.md +404 -0
  63. package/docs/reference/test-environment.md +519 -0
  64. package/docs/reference/upgrade-safety.md +59 -0
  65. package/lefthook.yml +18 -0
  66. package/lib/activation/ensure-forge-home.js +135 -0
  67. package/lib/adapter-cli.js +307 -0
  68. package/lib/adapters/beads-issue-adapter.js +127 -0
  69. package/lib/adapters/beads-kernel-compat.js +1109 -0
  70. package/lib/adapters/greptile-review-adapter.js +141 -0
  71. package/lib/adapters/kernel-issue-adapter.js +101 -0
  72. package/lib/adapters/pr-state-adapter.js +484 -0
  73. package/lib/adoption-profiles.js +139 -0
  74. package/lib/agents/README.md +2 -6
  75. package/lib/agents/claude.plugin.json +3 -8
  76. package/lib/agents/codex.plugin.json +9 -1
  77. package/lib/agents/cursor.plugin.json +2 -6
  78. package/lib/agents/hermes.plugin.json +22 -0
  79. package/lib/agents-config.js +39 -1236
  80. package/lib/audit-evidence.js +282 -0
  81. package/lib/beads-detect.js +60 -0
  82. package/lib/beads-nudge.js +91 -0
  83. package/lib/beads-setup.js +121 -0
  84. package/lib/beads-sync-scaffold.js +25 -101
  85. package/lib/codex-skills.js +51 -1
  86. package/lib/commands/_aliases.js +248 -0
  87. package/lib/commands/_issue.js +780 -77
  88. package/lib/commands/_manifest.js +93 -0
  89. package/lib/commands/_registry.js +99 -34
  90. package/lib/commands/_resolve-command-opts.js +230 -0
  91. package/lib/commands/_serve-security.js +270 -0
  92. package/lib/commands/adapter.js +12 -0
  93. package/lib/commands/add.js +118 -0
  94. package/lib/commands/audit.js +70 -0
  95. package/lib/commands/blocked.js +5 -0
  96. package/lib/commands/board.js +64 -0
  97. package/lib/commands/claim.js +21 -2
  98. package/lib/commands/claims.js +7 -0
  99. package/lib/commands/clean.js +485 -75
  100. package/lib/commands/close.js +2 -2
  101. package/lib/commands/comment.js +5 -0
  102. package/lib/commands/control.js +148 -0
  103. package/lib/commands/create.js +2 -2
  104. package/lib/commands/dev.js +185 -7
  105. package/lib/commands/doc-gate.js +336 -0
  106. package/lib/commands/doctor.js +156 -0
  107. package/lib/commands/explain.js +15 -0
  108. package/lib/commands/export.js +237 -0
  109. package/lib/commands/gate.js +209 -0
  110. package/lib/commands/hooks.js +377 -0
  111. package/lib/commands/inbox.js +118 -0
  112. package/lib/commands/init.js +604 -0
  113. package/lib/commands/insights.js +79 -0
  114. package/lib/commands/issue.js +12 -1
  115. package/lib/commands/issues.js +17 -0
  116. package/lib/commands/lint.js +5 -0
  117. package/lib/commands/list.js +2 -2
  118. package/lib/commands/memory.js +81 -0
  119. package/lib/commands/merge.js +312 -0
  120. package/lib/commands/migrate.js +362 -0
  121. package/lib/commands/new.js +12 -0
  122. package/lib/commands/options.js +241 -0
  123. package/lib/commands/orient.js +13 -0
  124. package/lib/commands/orphans.js +5 -0
  125. package/lib/commands/patch.js +67 -0
  126. package/lib/commands/plan.js +481 -29
  127. package/lib/commands/pr.js +88 -0
  128. package/lib/commands/preflight.js +211 -0
  129. package/lib/commands/prime.js +13 -0
  130. package/lib/commands/push.js +135 -2
  131. package/lib/commands/ready.js +2 -2
  132. package/lib/commands/recall.js +171 -0
  133. package/lib/commands/recap.js +75 -0
  134. package/lib/commands/recommend.js +0 -1
  135. package/lib/commands/release.js +104 -0
  136. package/lib/commands/remember.js +140 -0
  137. package/lib/commands/role.js +99 -0
  138. package/lib/commands/serve.js +581 -0
  139. package/lib/commands/setup.js +900 -971
  140. package/lib/commands/shepherd.js +501 -0
  141. package/lib/commands/ship.js +59 -1
  142. package/lib/commands/show.js +2 -2
  143. package/lib/commands/stage.js +192 -0
  144. package/lib/commands/stale.js +5 -0
  145. package/lib/commands/status.js +158 -21
  146. package/lib/commands/sync.js +34 -46
  147. package/lib/commands/team.js +4 -1
  148. package/lib/commands/test.js +43 -27
  149. package/lib/commands/update.js +2 -2
  150. package/lib/commands/upgrade.js +47 -0
  151. package/lib/commands/validate.js +43 -18
  152. package/lib/commands/worktree.js +362 -99
  153. package/lib/config-writer.js +202 -0
  154. package/lib/control-plane.js +236 -0
  155. package/lib/core/runtime-graph.js +977 -0
  156. package/lib/dep-guard/keyword-ripple.js +2 -2
  157. package/lib/deprecated-sync-cleanup.js +362 -0
  158. package/lib/detect-agent.js +2 -28
  159. package/lib/detect-worktree.js +35 -9
  160. package/lib/doc-gate/declaration.js +177 -0
  161. package/lib/doc-gate/detect.js +289 -0
  162. package/lib/doc-gate/gate.js +375 -0
  163. package/lib/doc-gate/okf-config.js +128 -0
  164. package/lib/doc-gate/okf.js +429 -0
  165. package/lib/docs-command.js +1161 -6
  166. package/lib/forge-issues.js +382 -11
  167. package/lib/forge-lock.js +262 -0
  168. package/lib/gate-events.js +192 -0
  169. package/lib/global-flags.js +104 -0
  170. package/lib/greptile-match.js +7 -63
  171. package/lib/grounding/context-events.js +230 -0
  172. package/lib/grounding/read-first.js +112 -0
  173. package/lib/harness-capability-matrix.js +380 -0
  174. package/lib/hook-global-installer.js +347 -0
  175. package/lib/hook-renderer.js +541 -0
  176. package/lib/inbox.js +391 -0
  177. package/lib/insights.js +397 -0
  178. package/lib/issue-adapter.js +156 -0
  179. package/lib/issue-backend.js +145 -0
  180. package/lib/issue-render.js +220 -0
  181. package/lib/kernel/backing-issue.js +311 -0
  182. package/lib/kernel/broker.js +1218 -0
  183. package/lib/kernel/cli-broker-factory.js +130 -0
  184. package/lib/kernel/conflict-signal.js +82 -0
  185. package/lib/kernel/evaluators.js +195 -0
  186. package/lib/kernel/fs-class.js +495 -0
  187. package/lib/kernel/issue-command-contract.js +559 -0
  188. package/lib/kernel/issue-id-resolver.js +186 -0
  189. package/lib/kernel/lease-enforcer.js +158 -0
  190. package/lib/kernel/migrations.js +333 -0
  191. package/lib/kernel/owned-kernel.js +43 -0
  192. package/lib/kernel/planning-buckets-schema.js +109 -0
  193. package/lib/kernel/projection-jsonl-writer.js +450 -0
  194. package/lib/kernel/readiness-model.js +329 -0
  195. package/lib/kernel/schema.js +356 -0
  196. package/lib/kernel/sqlite-driver.js +2540 -0
  197. package/lib/kernel/taxonomy-validator.js +394 -0
  198. package/lib/lefthook-check.js +3 -2
  199. package/lib/lefthook-wiring.js +413 -0
  200. package/lib/mcp-config-renderer.js +288 -0
  201. package/lib/memory/graphiti-mcp.js +106 -0
  202. package/lib/memory/router.js +387 -0
  203. package/lib/memory/typed-api.js +102 -0
  204. package/lib/memory-digest.js +195 -0
  205. package/lib/merge-rules.js +395 -0
  206. package/lib/migrate-dry-run.js +466 -0
  207. package/lib/orientation.js +863 -0
  208. package/lib/package-manager-remediation.js +103 -0
  209. package/lib/package-root.js +381 -0
  210. package/lib/patch-intent.js +890 -0
  211. package/lib/plugin-catalog.js +3 -4
  212. package/lib/plugin-manager.js +0 -5
  213. package/lib/pr-bundle.js +186 -0
  214. package/lib/pr-monitor/auto-actions.js +175 -0
  215. package/lib/pr-monitor/differ.js +195 -0
  216. package/lib/pr-monitor/digest.js +206 -0
  217. package/lib/pr-monitor/events.js +0 -0
  218. package/lib/pr-monitor/gather.js +124 -0
  219. package/lib/pr-monitor/journal.js +299 -0
  220. package/lib/pr-monitor/monitor.js +146 -0
  221. package/lib/pr-monitor/render-sticky.js +192 -0
  222. package/lib/pr-monitor/upsert-sticky.js +169 -0
  223. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  224. package/lib/pr-monitor/watch.js +247 -0
  225. package/lib/pr-pull.js +1314 -0
  226. package/lib/pr-shepherd.js +494 -0
  227. package/lib/pr-state-validator.js +59 -0
  228. package/lib/preflight/gates.js +237 -0
  229. package/lib/preflight/runner.js +116 -0
  230. package/lib/project-discovery.js +0 -53
  231. package/lib/project-memory.js +99 -497
  232. package/lib/protected-path-manifest.js +281 -0
  233. package/lib/protected-state-surfaces.js +387 -0
  234. package/lib/release-readiness.js +2105 -0
  235. package/lib/reset.js +59 -45
  236. package/lib/review-adapter.js +68 -0
  237. package/lib/rules-sync.js +260 -0
  238. package/lib/runtime-health.js +241 -20
  239. package/lib/safety-config-renderer.js +268 -0
  240. package/lib/setup-action-log.js +1 -7
  241. package/lib/setup.js +27 -65
  242. package/lib/shell-utils.js +76 -6
  243. package/lib/skills-sync.js +330 -0
  244. package/lib/smart-status/scoring.js +17 -3
  245. package/lib/status/beads-snapshot.js +45 -2
  246. package/lib/status/presenter.js +169 -18
  247. package/lib/status/snapshot.js +186 -0
  248. package/lib/sync-backend.js +202 -0
  249. package/lib/untrusted-content.js +52 -0
  250. package/lib/upgrade-safety.js +251 -0
  251. package/lib/workflow/enforce-stage.js +351 -45
  252. package/lib/workflow/stage-transition.js +115 -0
  253. package/lib/workflow/stages.js +30 -6
  254. package/lib/workflow/state-manager.js +11 -22
  255. package/lib/workflow/state.js +23 -1
  256. package/lib/workflow-profiles.js +17 -5
  257. package/package.json +37 -35
  258. package/rules/documentation.md +19 -0
  259. package/rules/kernel-tracking.md +26 -0
  260. package/rules/security.md +22 -0
  261. package/rules/tdd.md +20 -0
  262. package/rules/workflow.md +27 -0
  263. package/scripts/auto-backing-issue.js +47 -0
  264. package/scripts/beads-context.sh +81 -57
  265. package/scripts/beads-upgrade-smoke.sh +24 -3
  266. package/scripts/bootstrap-windows-tools.sh +78 -0
  267. package/scripts/branch-protection.js +2 -3
  268. package/scripts/check-agents.js +34 -137
  269. package/scripts/commitlint.js +3 -1
  270. package/scripts/conflict-detect.sh +3 -0
  271. package/scripts/dep-guard.sh +22 -3
  272. package/scripts/file-index.sh +3 -0
  273. package/scripts/forge-team/lib/claim.sh +34 -18
  274. package/scripts/forge-team/lib/dashboard.sh +61 -86
  275. package/scripts/forge-team/lib/epic.sh +99 -263
  276. package/scripts/forge-team/lib/hooks.sh +26 -28
  277. package/scripts/forge-team/lib/identity.sh +4 -4
  278. package/scripts/forge-team/lib/sync-github.sh +49 -84
  279. package/scripts/forge-team/lib/verify.sh +93 -83
  280. package/scripts/forge-team/lib/workload.sh +41 -65
  281. package/scripts/forge-team/tests/claim.test.sh +25 -19
  282. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  283. package/scripts/forge-team/tests/epic.test.sh +52 -71
  284. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  285. package/scripts/forge-team/tests/identity.test.sh +3 -3
  286. package/scripts/forge-team/tests/integration.test.sh +44 -66
  287. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  288. package/scripts/forge-team/tests/verify.test.sh +37 -46
  289. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  290. package/scripts/forge-team/tests/workload.test.sh +32 -66
  291. package/scripts/gen-command-manifest.js +153 -0
  292. package/scripts/gen-embedded-assets.mjs +129 -0
  293. package/scripts/install.ps1 +139 -0
  294. package/scripts/install.sh +268 -0
  295. package/scripts/lib/release-asset.mjs +84 -0
  296. package/scripts/parity-check.mjs +145 -0
  297. package/scripts/parity-check.test.mjs +58 -0
  298. package/scripts/pin-agentic-workflow-images.js +112 -0
  299. package/scripts/pr-auto-actions.js +93 -0
  300. package/scripts/pr-coordinator.sh +3 -0
  301. package/scripts/pr-verdict-label.js +50 -0
  302. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  303. package/scripts/preflight.sh +21 -94
  304. package/scripts/protected-state-check.js +104 -0
  305. package/scripts/smart-status.sh +60 -57
  306. package/scripts/spikes/config-race-bench.js +111 -0
  307. package/scripts/spikes/harness-capability-matrix.js +13 -0
  308. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  309. package/scripts/spikes/protected-path-manifest.js +20 -0
  310. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  311. package/scripts/sync-agent-skills.js +62 -0
  312. package/scripts/sync-utils.sh +3 -0
  313. package/scripts/test-ci-shard.js +13 -6
  314. package/scripts/test.js +95 -12
  315. package/skills/claim-safety/SKILL.md +102 -0
  316. package/skills/claim-safety/evals/evals.json +46 -0
  317. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  318. package/skills/dev/evals/evals.json +50 -0
  319. package/skills/hermes-forge/SKILL.md +185 -0
  320. package/skills/hermes-forge/evals/evals.json +46 -0
  321. package/skills/issue-basics/SKILL.md +111 -0
  322. package/skills/issue-basics/evals/evals.json +46 -0
  323. package/skills/kernel/SKILL.md +166 -0
  324. package/skills/kernel/evals/evals.json +50 -0
  325. package/skills/memory/SKILL.md +102 -0
  326. package/skills/parallel-deep-research/SKILL.md +14 -11
  327. package/skills/parallel-deep-research/evals/evals.json +11 -27
  328. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  329. package/skills/plan/evals/evals.json +42 -0
  330. package/skills/research/SKILL.md +195 -0
  331. package/skills/research/evals/evals.json +42 -0
  332. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  333. package/skills/review/evals/evals.json +42 -0
  334. package/skills/rollback/SKILL.md +110 -0
  335. package/skills/rollback/evals/evals.json +46 -0
  336. package/skills/rollback/references/methods.md +204 -0
  337. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  338. package/skills/shepherd/SKILL.md +66 -0
  339. package/skills/shepherd/evals/evals.json +42 -0
  340. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  341. package/skills/ship/evals/evals.json +42 -0
  342. package/skills/smith/SKILL.md +142 -0
  343. package/skills/smith/evals/evals.json +46 -0
  344. package/skills/smith/references/autonomy-and-gates.md +94 -0
  345. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  346. package/skills/sonarcloud/evals/evals.json +46 -0
  347. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  348. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  349. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  350. package/skills/status/evals/evals.json +50 -0
  351. package/skills/triage-ready/SKILL.md +121 -0
  352. package/skills/triage-ready/evals/evals.json +42 -0
  353. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  354. package/skills/validate/evals/evals.json +42 -0
  355. package/skills/verify/SKILL.md +299 -0
  356. package/skills/verify/evals/evals.json +50 -0
  357. package/.claude/commands/dev.md +0 -345
  358. package/.claude/commands/plan.md +0 -566
  359. package/.claude/commands/premerge.md +0 -186
  360. package/.claude/commands/research.md +0 -42
  361. package/.claude/commands/review.md +0 -451
  362. package/.claude/commands/rollback.md +0 -721
  363. package/.claude/commands/ship.md +0 -213
  364. package/.claude/commands/sonarcloud.md +0 -152
  365. package/.claude/commands/status.md +0 -90
  366. package/.claude/commands/validate.md +0 -288
  367. package/.claude/commands/verify.md +0 -269
  368. package/.claude/rules/workflow.md +0 -121
  369. package/.cline/workflows/dev.md +0 -342
  370. package/.cline/workflows/plan.md +0 -563
  371. package/.cline/workflows/premerge.md +0 -183
  372. package/.cline/workflows/research.md +0 -39
  373. package/.cline/workflows/review.md +0 -448
  374. package/.cline/workflows/rollback.md +0 -718
  375. package/.cline/workflows/ship.md +0 -210
  376. package/.cline/workflows/sonarcloud.md +0 -146
  377. package/.cline/workflows/status.md +0 -87
  378. package/.cline/workflows/validate.md +0 -285
  379. package/.cline/workflows/verify.md +0 -266
  380. package/.codex/config.toml +0 -11
  381. package/.codex/skills/dev/SKILL.md +0 -345
  382. package/.codex/skills/plan/SKILL.md +0 -566
  383. package/.codex/skills/premerge/SKILL.md +0 -186
  384. package/.codex/skills/research/SKILL.md +0 -42
  385. package/.codex/skills/review/SKILL.md +0 -451
  386. package/.codex/skills/rollback/SKILL.md +0 -721
  387. package/.codex/skills/ship/SKILL.md +0 -213
  388. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  389. package/.codex/skills/status/SKILL.md +0 -90
  390. package/.codex/skills/validate/SKILL.md +0 -288
  391. package/.codex/skills/verify/SKILL.md +0 -269
  392. package/.cursor/commands/dev.md +0 -342
  393. package/.cursor/commands/plan.md +0 -563
  394. package/.cursor/commands/premerge.md +0 -183
  395. package/.cursor/commands/research.md +0 -39
  396. package/.cursor/commands/review.md +0 -448
  397. package/.cursor/commands/ship.md +0 -210
  398. package/.cursor/commands/sonarcloud.md +0 -146
  399. package/.cursor/commands/status.md +0 -87
  400. package/.cursor/commands/validate.md +0 -285
  401. package/.cursor/commands/verify.md +0 -266
  402. package/.cursorrules +0 -149
  403. package/.github/prompts/premerge.prompt.md +0 -188
  404. package/.github/prompts/research.prompt.md +0 -44
  405. package/.github/prompts/rollback.prompt.md +0 -723
  406. package/.github/prompts/verify.prompt.md +0 -271
  407. package/.github/workflows/beads-to-github.yml +0 -89
  408. package/.github/workflows/github-to-beads.yml +0 -100
  409. package/.kilocode/workflows/dev.md +0 -346
  410. package/.kilocode/workflows/plan.md +0 -567
  411. package/.kilocode/workflows/premerge.md +0 -187
  412. package/.kilocode/workflows/research.md +0 -43
  413. package/.kilocode/workflows/review.md +0 -452
  414. package/.kilocode/workflows/rollback.md +0 -722
  415. package/.kilocode/workflows/ship.md +0 -214
  416. package/.kilocode/workflows/sonarcloud.md +0 -150
  417. package/.kilocode/workflows/status.md +0 -91
  418. package/.kilocode/workflows/validate.md +0 -289
  419. package/.kilocode/workflows/verify.md +0 -270
  420. package/.opencode/commands/dev.md +0 -345
  421. package/.opencode/commands/plan.md +0 -566
  422. package/.opencode/commands/premerge.md +0 -186
  423. package/.opencode/commands/research.md +0 -42
  424. package/.opencode/commands/review.md +0 -451
  425. package/.opencode/commands/rollback.md +0 -721
  426. package/.opencode/commands/ship.md +0 -213
  427. package/.opencode/commands/sonarcloud.md +0 -149
  428. package/.opencode/commands/status.md +0 -90
  429. package/.opencode/commands/validate.md +0 -288
  430. package/.opencode/commands/verify.md +0 -269
  431. package/.roo/commands/dev.md +0 -346
  432. package/.roo/commands/plan.md +0 -567
  433. package/.roo/commands/premerge.md +0 -187
  434. package/.roo/commands/research.md +0 -43
  435. package/.roo/commands/review.md +0 -452
  436. package/.roo/commands/rollback.md +0 -722
  437. package/.roo/commands/ship.md +0 -214
  438. package/.roo/commands/sonarcloud.md +0 -150
  439. package/.roo/commands/status.md +0 -91
  440. package/.roo/commands/validate.md +0 -289
  441. package/.roo/commands/verify.md +0 -270
  442. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  443. package/docs/GREPTILE_SETUP.md +0 -400
  444. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  445. package/docs/SETUP.md +0 -663
  446. package/docs/VALIDATION.md +0 -363
  447. package/lib/agents/cline.plugin.json +0 -29
  448. package/lib/agents/copilot.plugin.json +0 -24
  449. package/lib/agents/kilocode.plugin.json +0 -22
  450. package/lib/agents/opencode.plugin.json +0 -23
  451. package/lib/agents/roo.plugin.json +0 -30
  452. package/lib/beads-bootstrap.js +0 -225
  453. package/lib/beads-health-check.js +0 -188
  454. package/lib/commands/commands-reset.js +0 -147
  455. package/opencode.json +0 -67
  456. package/scripts/beads-context.test.js +0 -584
  457. package/scripts/github-beads-sync/comment.mjs +0 -64
  458. package/scripts/github-beads-sync/config.mjs +0 -148
  459. package/scripts/github-beads-sync/github-api.mjs +0 -131
  460. package/scripts/github-beads-sync/index.mjs +0 -356
  461. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  462. package/scripts/github-beads-sync/mapping.mjs +0 -132
  463. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  464. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  465. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  466. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  467. package/scripts/github-beads-sync.config.json +0 -26
  468. package/scripts/sync-commands.js +0 -600
package/CHANGELOG.md ADDED
@@ -0,0 +1,709 @@
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.3] - 2026-07-17
13
+
14
+ The **adoption-unblocking wave** — the changes beta testers hit on their very first real session. `forge ship`, the hook-enforcement verdict, and `forge worktree create` no longer dead-end a fresh or in-flight branch, and the PR shepherd now arms itself for any agent. Every change below was adversarially reviewed before merge.
15
+
16
+ ### Fixed
17
+
18
+ - **`forge ship` / `forge review` no longer hard-fail on a fresh or in-flight branch (B1).** They previously threw `Stage ship requires authoritative workflow state` whenever no `/plan → /dev → /validate → /ship` history had been walked — blocking the three most common adoption paths: a fresh setup, an in-flight branch, and a manual commit. The stage gate now degrades to a loud stderr warning and seeds stage history in the kernel, so ship works incrementally and future gating gets real data. The rework/contradiction guard (e.g. `validate` started-but-not-done) stays **fail-closed**, and `FORGE_STAGE_GATE=strict` restores the legacy hard block. (#413)
19
+ - **`forge setup` / `forge init --profile minimal` report hook enforcement honestly.** A deliberately-disabled TDD gate no longer prints `✓ Git hook enforcement active` or exits `1` with a `TDD ENFORCEMENT IS NOT ACTIVE` banner — the human-facing verdict and exit code now honor the resolved config (the hook scripts already honored it at run time; this closes the reporting/exit half). A disabled gate reports as intentionally inert with the re-enable command; a corrupt config still fails toward enforcement. (#414, #399)
20
+ - **`forge worktree create` bases new branches on the default branch, not the current checkout (B2).** A worktree created while on a WIP branch previously forked from the current HEAD and silently inherited unrelated commits. New worktrees now fork from the repository default branch (`origin/<default>` when the remote ref exists, else the local default); a new `--base <ref>` flag overrides it (invalid refs error and create nothing), and `create` prints the base it used so the fork point is never silent. (#415)
21
+ - **`forge plan` no longer moves the shared checkout's HEAD.** Creating the feature branch during planning switched the shared working checkout, colliding with parallel work; it now creates the branch without switching HEAD. (#396)
22
+ - **CI and grounding hardening.** Closed a Windows `EBUSY` by closing the kernel driver after context-event I/O (#411); removed an invalid `pull_request_review_thread` Actions trigger from the PR monitor (#404); stopped the pr-monitor red-X and auto-regenerated the D20 kill-list (#394); and cleared five residual B1 stage-state/worktree-linkage rows (#393). The kernel-driver close/ownership invariant is now regression-tested (#412).
23
+
24
+ ### Added
25
+
26
+ - **Agent-agnostic auto-shepherd PR monitor.** The PR watcher now arms itself on any open PR (`forge push` + `watch --adopt`), gated on the default-ON `rail.auto_shepherd` rail so **any** harness gets PR tracking without a per-agent monitor (#408, #407). It surfaces PR-monitor events into each turn via shepherd-events hooks (#409), lands an actionable `pr-verdict:*` label on the PR (#403), and takes Tier-2 **safe** auto-actions — update-branch when behind, re-run a flaky required check (#406).
27
+ - **Grounding read-first gate.** A P1 **fail-closed** `gate.read_first` blocks a claim about a file the agent has not read. (#410)
28
+ - **Unified command surface — noun verbs + aliases.** Declarative command-alias infrastructure (#401), `forge memory` shortcuts with a passthrough fix (#402), and a `forge pr` noun (`ship`/`preflight`/`shepherd`/`merge`) with gate docs (#405) — the CLI now groups by how people conventionally use it, aliases preserved.
29
+ - **Memory capture-on-exit + unified `forge memory`.** Memory commands are consolidated under `forge memory` with typed notes (#392), and a PreCompact/Stop hook plus `--session-summary` captures session memory on exit so nothing is lost to a compaction. (#397)
30
+ - **Global-plugin front door + lazy `.forge` home.** A global activation entry point that creates the `.forge` home lazily on first use. (#400)
31
+ - **Guided 0.0.10 → current upgrade.** `forge upgrade` walks the breaking Beads → Kernel upgrade from 0.0.10 and nudges the issue-path migration. (#398)
32
+ - **Consolidated opt-in Beads → Kernel migrator.** A single explicit-only migrator with an honest field-gap report. (#391)
33
+
34
+ ### Changed
35
+
36
+ - **TypeScript dev dependency bumped 5.4.5 → 7.0.2** (dev-deps group; no runtime change). (#371)
37
+ - Install docs now point at `forge-workflow@beta` so users land on the current prerelease. (#395)
38
+ - Bumped the GitHub Actions dependency group (3 updates). (#390)
39
+
40
+ ## [0.1.0-beta.2] - 2026-07-15
41
+
42
+ 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.)
43
+
44
+ ### Fixed
45
+
46
+ - **`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)
47
+ - **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)
48
+ - **`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)
49
+ - 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).
50
+
51
+ ### Added
52
+
53
+ - **`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)
54
+ - **`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)
55
+ - **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)
56
+ - Single-binary distribution (`bun build --compile`, checksum-verified install script) + an interactive local `forge serve` dashboard with a comment-back inbox. (#378, #379)
57
+
58
+ ### Changed
59
+
60
+ - **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)
61
+
62
+ ### Known limitation (honest by design)
63
+
64
+ - 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.
65
+
66
+ ## [0.1.0-beta.1] - 2026-07-09
67
+
68
+ 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.
69
+
70
+ ### Changed
71
+
72
+ - **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.
73
+ - 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)
74
+ - 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)
75
+ - **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)
76
+ - **`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)
77
+
78
+ ### Fixed
79
+
80
+ - **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)
81
+ - 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)
82
+ - `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)
83
+ - First-run hint from `forge status` pointed at a nonexistent docs topic (`forge docs workflow`); it now points at `forge docs setup`. (#334)
84
+ - Removed stale "Beads" wording from live `forge --help` output — the `board` and `test` command descriptions now reference the kernel. (#334)
85
+ - 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)
86
+
87
+ ### Added
88
+
89
+ - **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)
90
+ - **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)
91
+ - **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)
92
+ - 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.
93
+ - 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.
94
+ - **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.
95
+ - `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).
96
+ - **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).
97
+ - `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)
98
+ - **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.
99
+ - **`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)
100
+
101
+ ### Changed
102
+
103
+ - **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)
104
+ - **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)
105
+ - 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)
106
+ - 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)
107
+ - 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)
108
+ - 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.
109
+
110
+ ### Fixed
111
+
112
+ - 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)
113
+ - 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)
114
+ - 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)
115
+ - 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)
116
+ - `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)
117
+ - `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.
118
+ - `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.
119
+ - Corrected a stale `.gitignore` comment that described agent skill directories as "junctions/symlinks"; they are populated at setup time as real file copies.
120
+
121
+ #### Migration notes
122
+
123
+ - Existing `.beads` data is no longer read unless Beads is explicitly selected.
124
+ - 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`.
125
+
126
+ ## [0.0.11] - 2026-06-03
127
+
128
+ This is the public documentation and positioning release.
129
+
130
+ #### User value
131
+
132
+ - Reframes Forge as a local runtime control plane for AI-assisted engineering, not only a fixed TDD stage ladder.
133
+ - Makes the repository docs the canonical source for README, quickstart, support, command reference, release flow, and DeepWiki indexing.
134
+ - Gives new users a clearer first-run path for `forge init`, `forge setup`, `forge status`, Beads/GitHub sync, worktrees, validation, and PR review workflows.
135
+ - Adds support paths for setup failures, Beads/Dolt recovery, protected state, branch protection, worktree cleanup, and validation failures.
136
+
137
+ #### Migration notes
138
+
139
+ - 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.
140
+ - Use `forge init` for the `.forge/` adoption skeleton and `forge setup` for agent instructions, Beads/GitHub sync scaffolding, and harness files.
141
+ - Use `--agents`, not the stale singular `--agent`, when documenting or invoking setup.
142
+ - Internal roadmap labels such as `0.0.19` are future planning labels, not current public package availability.
143
+
144
+ #### Feature flags and experimental areas
145
+
146
+ - Protected-state enforcement is active only where the protected-state checker is wired into hooks or CI.
147
+ - `forge migrate` is a dry-run proof of concept.
148
+ - Review adapters currently support the review-adapter contract and Greptile-shaped starter template.
149
+ - Greptile, SonarCloud, branch protection, and GitHub sync depend on repository configuration and credentials.
150
+
151
+ #### Known limitations
152
+
153
+ - Beads/Dolt state can fail independently of Git state; use the support guide before changing issue metadata.
154
+ - Windows worktrees can leave locked Dolt or tool processes behind during cleanup.
155
+ - DeepWiki is generated from repository files and can lag behind `master` after merge.
156
+ - Some stage enforcement remains agent/harness dependent.
157
+
158
+ #### Rollback path
159
+
160
+ - Revert this release PR if the combined package metadata and public docs create release confusion.
161
+ - Do not publish the package unless the version bump, changelog entry, and public docs describe the same public release.
162
+ - If generated DeepWiki output keeps old TDD-only framing after refresh, file a follow-up issue and correct the repository docs first.
163
+
164
+ #### Adapter compatibility
165
+
166
+ - Existing issue wrappers continue to use Beads as the local/reference issue adapter.
167
+ - Existing Greptile review shell compatibility remains documented as the current review-adapter starter path.
168
+
169
+ #### Post-merge DeepWiki checklist
170
+
171
+ - Refresh DeepWiki after merge to `master`.
172
+ - Confirm the DeepWiki index date and commit changed to the merged commit.
173
+ - 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`.
174
+ - File a follow-up issue if generated docs still describe Forge as only the old seven-stage TDD workflow.
175
+
176
+ ### Added
177
+
178
+ - **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
179
+
180
+ ### Fixed
181
+
182
+ - **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
183
+ - **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
184
+ - **ENHANCED_ONBOARDING.md** (forge-3tnu): Rewrote to match actual 7-stage workflow with correct `--type` values (critical|standard|simple|hotfix|docs|refactor)
185
+ - **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
186
+ - **smart-status.sh display**: Numeric priorities now display as `P2` not `2` in dashboard; numeric `4` correctly groups into BACKLOG
187
+ - **Plan detection**: `forge status` no longer misdetects plan stage from unrelated files in `docs/plans/` — scopes to current branch slug
188
+ - **OWASP docs**: Fixed path-traversal risk in allowlist, clarified mitigations as collective requirements, corrected git `--` separator placement
189
+
190
+ ### Changed
191
+
192
+ - **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.
193
+ - **Ambiguity policy**: Hardcoded rubric scoring (>= 80% proceed, < 80% ask) as default in `/plan` — removed redundant per-feature Q&A question
194
+
195
+ ## [0.0.5] - 2026-03-22
196
+
197
+ ### Added
198
+
199
+ - **Install-fixes: hardened setup, Beads sync, documentation overhaul**
200
+ - `--dry-run` flag: preview setup actions without writing files
201
+ - `--non-interactive` flag: skip all prompts, use defaults; auto-enabled when `CI=true`
202
+ - `--symlink` flag: create CLAUDE.md as a symlink to AGENTS.md instead of a copy
203
+ - `--sync` flag: scaffold Beads GitHub sync workflow with PAT setup
204
+ - `--agents=<list>` flag: comma-separated agent selection (e.g., `--agents=claude,cursor`)
205
+ - `ActionCollector` and `isNonInteractive` utilities for setup orchestration
206
+ - Beads config writer utilities for programmatic `.beads/config.yaml` generation
207
+ - Beads health check smoke test after initialization
208
+ - Defensive `bd init` wrapper with hook preservation
209
+ - Auto-detect default branch and Beads version for sync workflows
210
+ - Guided PAT setup for Beads sync via `gh` CLI
211
+ - Beads sync scaffolding during `forge setup --sync`
212
+ - Husky detection and automated migration to Lefthook
213
+ - Documentation consistency tests (`test/docs-consistency.test.js`)
214
+
215
+ ### Changed
216
+
217
+ - **Install command**: `bun install forge-workflow` changed to `bun add -D forge-workflow` (dev dependency)
218
+ - **install.sh**: Deprecated to thin bootstrapper that installs forge-workflow and delegates to `bunx forge setup`
219
+ - **Lefthook check**: Now verifies binary existence, not just package.json entry
220
+ - **CLAUDE.md merge**: `smartMergeAgentsMd` preserves existing CLAUDE.md without markers
221
+ - **README.md**: Added Setup Flags table documenting all new CLI flags
222
+ - **docs/SETUP.md**: Added Beads sync section with PAT requirements and `BEADS_SYNC_TOKEN` documentation
223
+ - **Sync scripts and workflow templates**: Added to npm package `files` array
224
+
225
+ ### Fixed
226
+
227
+ - Lefthook check verifies binary existence, not just package.json entry
228
+ - `smartMergeAgentsMd` preserves existing CLAUDE.md without markers
229
+ - Sync scripts and workflow templates added to npm package
230
+
231
+ ## [0.0.4] - 2026-03-22
232
+
233
+ ### Added
234
+
235
+ - **Multi-dev session awareness: conflict detection, parallel work visibility** (PR #92, forge-w69s)
236
+ - Pluggable sync backend (`refs`/`branch`/`inline`) for cross-developer beads sync via git
237
+ - File index (`.beads/file-index.jsonl`) tracks which developer touches which files/modules
238
+ - Conflict detection script with module-level overlap warnings and `--detail` drill-down
239
+ - Cross-developer "Team Activity" section in `/status` with overlap and staleness warnings
240
+ - Soft-block gates on `/plan` and `/dev` entry when module overlap detected
241
+ - Auto-sync at Forge command entry pulls latest team state
242
+ - Session identity as `email@hostname`, sync branch auto-detection with config override
243
+ - 136 new shell tests across 5 test suites
244
+
245
+ - **Smart Setup UX: agent detection, incremental setup, clean output** (PR #90, forge-iv8b)
246
+ - 4-layer agent auto-detection: `AI_AGENT` env > agent-specific env vars > VSCode path parsing > config file signatures (8 agents)
247
+ - Incremental setup: content-hash comparison skips identical files on re-run; `--force` flag for CI/overwrite
248
+ - Progressive summary output: clean 3-line default, `--verbose` for file-by-file detail
249
+ - Lazy directory creation: `docs/planning/` and `docs/research/` created on first `/plan` use, not at setup
250
+ - Worktree detection utility: prevents nested worktree creation in `/plan`
251
+ - 5 new lib modules: `detect-agent.js`, `setup-action-log.js`, `file-hash.js`, `detect-worktree.js`, `setup-summary-renderer.js`
252
+ - 124 new tests across 9 test files
253
+
254
+ ### Removed
255
+
256
+ - **`docs/WORKFLOW.md`** — content duplicated in `AGENTS.md`; all 50+ references updated (PR #90, forge-iv8b)
257
+
258
+ ### Fixed
259
+
260
+ - **Smart-status.sh jq date parsing** for fractional seconds + timezone offsets (PR #90, forge-iv8b)
261
+ - **CI bypass workflow** — removed `test/**` from `paths-ignore` to unblock test-only PRs (PR #90, forge-iv8b)
262
+ - **Ship command rebases onto latest base branch before push** (PR #89, forge-ebls)
263
+ - `/validate` entry gate: rebases onto base branch (detected dynamically) before running checks
264
+ - `/ship` freshness check: lightweight behind-check before push, alerts if stale
265
+ - Fetch failures caught with `|| { exit 1; }` guards
266
+ - `bun run check` clarified as checks-only (no rebase)
267
+
268
+ ### Changed
269
+
270
+ - **PR template restructured to narrative format** (PR #89, forge-ebls)
271
+ - Visible: Problem → Root Cause → Fix → Value → Beads
272
+ - Collapsible `<details>`: Test Coverage, Security Review, Design Doc, Decisions Log, Documentation Updated, Validation checklist
273
+ - Tips section updated to reinforce narrative-first approach
274
+
275
+ ### Added
276
+
277
+ - **Workflow Intelligence: smart status, phase tracking, naming clarity** (PR #72, forge-68oj)
278
+ - `scripts/smart-status.sh`: Ranks all issues by composite score (priority × unblock chain × type × status boost × epic proximity × staleness)
279
+ - Grouped output: Resume → Unblock Chains → Ready Work → Blocked → Backlog with ANSI colors and NO_COLOR support
280
+ - Active session detection: parses `git worktree list --porcelain`, maps branches to in-progress beads issues
281
+ - Two-tier conflict detection: Tier 1 (file-level overlap via `git diff`) + Tier 2 (actual merge conflicts via `git merge-tree`, git 2.38+)
282
+ - `/plan` now creates epic at Phase 1 entry with stage transitions at each phase boundary
283
+ - `/status` updated to use `smart-status.sh` for dynamic ranked output
284
+ - Disambiguation note added to `/validate` command (three concepts: /validate, forge-preflight, bun run check)
285
+ - Auto-detect default branch (master/main) with `DEFAULT_BRANCH` env override
286
+ - Reverse dependency map computes "Unblocks:" annotations from actual dependency data
287
+ - 67 new tests, 0 regressions
288
+
289
+ ### Changed
290
+
291
+ - **CLI prerequisite checker renamed to `forge-preflight`** (PR #72, forge-0xic)
292
+ - Clearer name distinguishes it from `/validate` workflow command and `bun run check`
293
+ - Updated: bin entry, package.json, README, CHANGELOG, DEVELOPMENT, docs/VALIDATION, docs/research/
294
+ - Fixed pre-existing bug: `validateDev` now checks `docs/plans/` (was `.claude/plans/`)
295
+ - Fixed Node compat: removed `readdirSync({ recursive })` (requires Node 18.17+)
296
+
297
+ - **Dynamic commands rule** (PR #72)
298
+ - Added to AGENTS.md and CLAUDE.md: never hardcode example output in command files when scripts generate it dynamically
299
+
300
+ ### Fixed
301
+
302
+ - **P2 bug fixes: setup, postinstall, dead config, lint hooks** (PR #69, forge-cpnj + forge-iv1p + forge-8u6q + forge-zs2u)
303
+ - Setup code paths unified: extracted `executeSetup()` shared helper, fixed claude agent being skipped in CLI path
304
+ - Removed `postinstall` script — no more surprise file writes on `npm install`
305
+ - Added `[FORGE_SETUP_REQUIRED]` first-run detection with exit code 1
306
+ - Added `--yes`/`-y` flag for non-interactive setup (AI agent friendly)
307
+ - Removed dead `_CODE_REVIEW_TOOLS` and `_CODE_QUALITY_TOOLS` config objects
308
+ - Replaced `npx --yes eslint` in lint.js with package manager delegation (eliminates supply chain risk)
309
+ - Added `--max-warnings 0` to package.json lint script
310
+ - Added `--version`/`-V` flag handling
311
+ - Exempted `recommend` command from first-run guard (read-only, useful for onboarding)
312
+ - 38 new tests (1676 → 1714)
313
+
314
+ - **Stage naming consistency + COMMANDS array fix** (PR #67, forge-7lvz + forge-b262)
315
+ - Replaced hardcoded COMMANDS array with `getWorkflowCommands()` — scans `.claude/commands/*.md` at runtime
316
+ - Fixed stale `/check` → `/validate` and `/merge` → `/premerge` in CURSOR_RULE and `.cursorrules`
317
+ - Dynamic copy/convert counts — reports actual successes, not filesystem count
318
+ - `copyFile` now always warns on missing sources (was DEBUG-only)
319
+ - Fixed CLAUDE.md placeholder description
320
+ - Fixed README agent count: "7" → "8" to match `lib/agents/`
321
+ - 24 new regression tests across 2 test files
322
+
323
+ - **Hook bypass protection for AI agents** (PR #66)
324
+ - `scripts/branch-protection.js`: Allow beads-only pushes to master while blocking code changes
325
+ - Replaced `execSync` with `execFileSync` + `resolveGitBinary()` to prevent command injection
326
+ - Added `isSafeGitRefComponent()` validation on all branch name paths
327
+ - Gated `FORGE_GIT_MOCK_JS` behind `NODE_ENV=test` to prevent bypass in production
328
+ - Removed `LEFTHOOK=0` and `--no-verify` bypass guidance from all hook scripts
329
+ - Added behavioral integration tests with cross-platform mock git (Node.js shim)
330
+ - Updated `CLAUDE.md`: AI agents must never bypass hooks
331
+
332
+ ### Added
333
+
334
+ - **Logic-level dependency detection**: Upgrades dep-guard `check-ripple` from keyword-only matching to structured code-aware analysis (PR #65, forge-9zv)
335
+ - `lib/dep-guard/analyzer.js`: Phase 3 structured analyzer — scores dependencies across import, contract, and behavioral dimensions
336
+ - `lib/dep-guard/import-detector.js`: Traces actual `require`/`import` statements between task files using `@babel/parser`
337
+ - `lib/dep-guard/task-parser.js`: Extracts file-to-function mappings from task list markdown
338
+ - `scripts/dep-guard-analyze.js`: CLI entry point for the structured analyzer
339
+ - `apply-decision` subcommand: Beads approval flow with cycle detection, rollback, and state persistence
340
+ - Graceful fallback: structured analyzer failure falls through to keyword-only check
341
+ - 107+ new tests covering analyzer, import detector, and approval flow
342
+
343
+ - **Command behavioral eval + improvement loop**: Automated testing infrastructure for slash commands with LLM-based grading (PR #63, forge-agp)
344
+ - `scripts/run-command-eval.js`: E2E eval pipeline — runs commands in isolated worktrees, grades transcripts against assertions
345
+ - `scripts/improve-command.js`: Semi-autonomous improvement loop with pause-on-regression and cross-session eval history
346
+ - Three assertion types: standard (output correctness), HARD-GATE (gate enforcement), contract (cross-command pipeline integrity)
347
+ - `.claude/agents/command-grader.md`: LLM grader agent with strict grading guidelines
348
+ - Eval sets for `/status` and `/validate` as first targets
349
+ - 110 new tests across 10 test files, all passing
350
+
351
+ - **Pre-change dependency guard**: Contract-aware ripple analysis that detects logic conflicts between in-flight issues before work begins (PR #62, forge-mze)
352
+ - `scripts/dep-guard.sh`: 4 subcommands — `find-consumers`, `check-ripple`, `store-contracts`, `extract-contracts`
353
+ - `/plan` Phase 1: Advisory ripple check before design Q&A surfaces overlapping open issues
354
+ - `/plan` Phase 3: Auto-extract contracts from task list and store on Beads issue
355
+ - Ripple Analyst agent prompt: LLM-judged impact analysis (NONE/LOW/HIGH/CRITICAL)
356
+ - Keyword matching with stop-word filtering, timestamp-based contract dedup
357
+ - 29 tests covering all subcommands with mock-based `BD_CMD` testing pattern
358
+
359
+ ### Fixed
360
+
361
+ - **Roo Code rootConfig conflict**: Changed from `.clinerules` to `.roorules` — was conflicting with Cline during setup (PR #61)
362
+ - **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)
363
+ - **Symlink safety**: `createSymlinkOrCopy` now uses `lstatSync` to avoid false positives on symlinks to directories, with actionable warning for users (PR #61)
364
+ - **Cross-codepath sync**: Updated `sync-commands.js`, `install.sh`, tests, and sync manifest to match new Cline/Roo paths (PR #61)
365
+
366
+ ### Changed
367
+
368
+ - **Version reset to 0.0.1**: All prior npm versions (1.0.0–1.5.0) unpublished; clean alpha start (PR #61)
369
+ - **Removed `.clinerules` flat-file migration**: No longer needed since Cline workflows moved to `.cline/workflows/` (PR #61)
370
+
371
+ ### Added
372
+
373
+ - **Beads-embedded plan context**: Auto-populate design/notes/acceptance in Beads issues from `/plan` and `/dev` (PR #59, forge-bmy)
374
+ - `scripts/beads-context.sh`: Agent-agnostic helper with 5 commands (`set-design`, `set-acceptance`, `update-progress`, `parse-progress`, `stage-transition`)
375
+ - `/plan` Phase 3: Embeds task count + file path in `--design`, success criteria in `--acceptance`
376
+ - `/dev` Step E: Appends per-task progress (title, tests, commit, gates) to `--notes` as HARD-GATE
377
+ - `/status`: Shows compact progress ("3/7 tasks done | Last: title (sha)") with `bd show` hint
378
+ - Stage transitions recorded via `--comment` at `/plan`, `/dev`, `/validate`, `/ship`, `/review` exits
379
+ - `scripts/**` added to CI test workflow path filters
380
+ - **`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)
381
+
382
+ ### Changed
383
+
384
+ - **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)
385
+
386
+ ### Removed
387
+
388
+ - **Dropped agent cleanup**: Removed all code, config, docs, and files for 4 dropped agents — Antigravity, Windsurf, Aider, Continue (PR #60, forge-2w3)
389
+ - Deleted: `.aider.conf.yml`, `lib/agents/continue.plugin.json`, `docs/README-v1.3.md`, `docs/research/agent-instructions-sync.md`
390
+ - Cleaned: `bin/forge.js` (Continue setup), `packages/skills/` (agent entries), `package.json` (keywords), `.gitignore` (dropped dirs)
391
+ - Fixed: `package.json` description from "9-stage" to "7-stage"
392
+
393
+ ### Fixed
394
+
395
+ - **Stale workflow refs**: Cleaned up references to removed tools and orphaned files in agent commands (PR #56, forge-ctc)
396
+ - `status.md`: Replaced openspec/PROGRESS.md commands with Beads equivalents, fixed /research → /plan
397
+ - `rollback.md`: Updated workflow diagrams to correct 7-stage pipeline (removed /research)
398
+ - `premerge.md`: Replaced PROGRESS.md reference with CHANGELOG.md maintenance step
399
+ - Fixed inconsistent example output in status.md (in-progress work vs "Ready for new feature")
400
+
401
+ ## [1.5.0] - 2026-02-03
402
+
403
+ ### Added
404
+
405
+ - **Plugin Architecture**: 11 specialized agent plugins for enhanced capabilities
406
+ - `javascript-typescript`: JavaScript/TypeScript expertise (4 skills)
407
+ - `backend-development`: API design, microservices, Temporal workflows (9 skills)
408
+ - `database-design`: PostgreSQL, SQL optimization (2 skills)
409
+ - `security-scanning`: SAST, threat modeling, STRIDE analysis (6 skills)
410
+ - `full-stack-orchestration`: Deployment, performance, testing (4 skills)
411
+ - `tdd-workflows`: TDD orchestration, code review (2 skills)
412
+ - `llm-application-dev`: RAG, embeddings, prompt engineering (7 skills)
413
+ - `frontend-design`: Production-grade UI development (1 skill)
414
+
415
+ - **TDD Enforcement**: Git hooks via Lefthook
416
+ - Pre-commit hook checks for test files before allowing source commits
417
+ - Pre-push hook runs full test suite
418
+ - Interactive prompts for violations with recovery options
419
+ - CI/CD-aware: auto-aborts in non-interactive environments
420
+ - Package manager auto-detection (bun/pnpm/yarn/npm)
421
+
422
+ - **Preflight CLI**: `forge-preflight` command
423
+ - `forge-preflight status` - Check project prerequisites
424
+ - `forge-preflight dev` - Validate before /dev stage
425
+ - `forge-preflight ship` - Validate before /ship stage
426
+
427
+ - **Auto-Installation**: Beads and OpenSpec setup
428
+ - Quick setup mode auto-installs Beads
429
+ - Interactive setup prompts for both tools
430
+ - Dynamic tool status in project summary
431
+
432
+ - **AGENTS.md Enhancements**: Optimized universal instructions
433
+ - Plugin loading instructions
434
+ - Workflow stage documentation
435
+ - Security and TDD guidelines
436
+
437
+ ### Improved
438
+
439
+ - **Test Patterns**: Comprehensive test file detection
440
+ - Nested directories: `test/unit/`, `test/integration/`
441
+ - Colocated tests: `__tests__/` directories
442
+ - Both `.test` and `.spec` variants
443
+
444
+ - **Error Handling**: Safer recursive file operations
445
+ - Try/catch for directory reads
446
+ - Graceful failures in validation
447
+
448
+ ### Fixed
449
+
450
+ - Non-TTY environment handling in TDD hook (CI/CD compatibility)
451
+ - Silent failure in lefthook prepare script (now shows informative message)
452
+
453
+ ## [1.4.9] - 2025-02-02
454
+
455
+ ### Fixed
456
+
457
+ - **Code Quality Overhaul**: Resolved 101 SonarLint and linting warnings
458
+ - Fixed 42 structural warnings (exception handling, control flow, code patterns)
459
+ - Fixed 35 cognitive complexity warnings by extracting 47 helper functions
460
+ - Modernized JavaScript patterns (Number.parseInt, Number.isNaN, optional chaining)
461
+ - Applied node: protocol for all built-in module imports
462
+ - Improved exception handling with meaningful comments
463
+ - Converted negated conditions to positive logic
464
+ - Fixed nested ternary operations and if-in-else blocks
465
+
466
+ ### Refactored
467
+
468
+ - **8 Core Functions** - Reduced cognitive complexity from 24-57 to 5-10:
469
+ - `detectProjectType()` - 27→8 (14 helpers: framework detection, feature detection)
470
+ - `handleInstructionFiles()` - 37→5 (6 helpers: scenario handlers)
471
+ - `setupAgent()` - 40→8 (10 helpers: agent-specific setup, file operations)
472
+ - `interactiveSetup()` - 36→8 (9 helpers: UI, validation, workflow)
473
+ - `main()` - 24→10 (5 helpers: CLI parsing, setup orchestration)
474
+ - `extractUserSections()` - 25→8 (2 helpers: marker/command extraction)
475
+ - `performRollback()` - 32→10 (7 helpers: method-specific handlers)
476
+ - Plus 1 additional function refactored
477
+
478
+ ### Improved
479
+
480
+ - **Maintainability**: Single responsibility principle applied throughout
481
+ - **Testability**: 47 new focused helper functions can be tested independently
482
+ - **Readability**: Clear function names, reduced nesting, improved code organization
483
+ - **Code Quality**: Zero SonarLint warnings (except optional S7785 - CommonJS limitation)
484
+ - **Documentation**: Comprehensive inline comments for exception handling
485
+
486
+ ### Changed
487
+
488
+ - Internal code structure significantly reorganized (no API changes)
489
+ - +1,056 lines (helper functions), -749 lines (refactored complexity)
490
+ - Net: +307 lines with better separation of concerns
491
+
492
+ ## [1.4.8] - 2025-02-02
493
+
494
+ ### Fixed
495
+
496
+ - **Additional markdown linting**: Expanded markdownlint configuration
497
+ - Disabled MD031 (blanks around fenced code blocks)
498
+ - Disabled MD032 (blanks around lists)
499
+ - Disabled MD040 (fenced code language)
500
+ - Disabled MD041 (first line heading level)
501
+ - Disabled MD022 (blanks around headings)
502
+ - Disabled MD060 (table column count)
503
+ - Fixed .claude/skills/forge-workflow/SKILL.md formatting
504
+ - Updated .markdownlint.json with comprehensive rule suppressions
505
+
506
+ ### Improved
507
+
508
+ - Zero markdown linting warnings across all documentation
509
+ - Cleaner IDE experience with focused, actionable linting rules
510
+
511
+ ## [1.4.7] - 2025-02-02
512
+
513
+ ### Fixed
514
+
515
+ - **Line length warnings**: Disabled MD013 line-length rule
516
+ - 80-character limit too restrictive for modern documentation
517
+ - Especially problematic for changelog descriptions
518
+ - Updated .markdownlint.json to disable MD013
519
+
520
+ ### Improved
521
+
522
+ - Zero IDE warnings - completely clean development environment
523
+
524
+ ## [1.4.6] - 2025-02-02
525
+
526
+ ### Fixed
527
+
528
+ - **IDE linting issues**: Fixed all 100+ markdownlint warnings
529
+ - Fixed table formatting in .clinerules (MD060 - proper spacing around pipes)
530
+ - Added language specification to code blocks (MD040)
531
+ - Added blank lines around lists (MD032)
532
+ - Created .markdownlint.json config to suppress false positives in CHANGELOG.md
533
+
534
+ ### Improved
535
+
536
+ - Clean IDE experience with zero linting warnings
537
+ - Proper markdown formatting across all documentation files
538
+
539
+ ## [1.4.5] - 2025-02-02
540
+
541
+ ### Changed
542
+
543
+ - **Automatic versioning**: Version now read from package.json (single source of truth)
544
+ - Added VERSION constant from package.json
545
+ - Replaced all hardcoded version strings with VERSION variable
546
+ - No more manual version updates needed in bin/forge.js
547
+ - Simply run `npm version patch/minor/major` to bump version everywhere
548
+
549
+ ### Improved
550
+
551
+ - Version management simplified - update package.json only
552
+ - Eliminates risk of version mismatch between package.json and displayed version
553
+
554
+ ## [1.4.4] - 2025-02-02
555
+
556
+ ### Fixed
557
+
558
+ - **Version banner**: Updated all version strings from v1.3.0 to v1.4.4
559
+ - Fixed version display in CLI banner
560
+ - Updated all setup completion messages
561
+ - Ensures correct version is shown to users
562
+
563
+ - **Documentation setup**: Fixed missing documentation files during `npx forge setup`
564
+ - Created `setupCoreDocs()` helper function
565
+ - Now copies docs/WORKFLOW.md to project during setup
566
+ - Now copies docs/research/TEMPLATE.md to project during setup
567
+ - Creates docs/planning/PROGRESS.md during setup
568
+ - Applies to all setup modes: interactive, quick, and agent-specific
569
+
570
+ ### Changed
571
+
572
+ - Extracted documentation setup logic into reusable `setupCoreDocs()` function
573
+ - All setup commands now provide complete documentation structure
574
+ - Users no longer need to reference node_modules for workflow templates
575
+
576
+ ## [1.4.3] - 2025-01-31
577
+
578
+ ### Fixed
579
+
580
+ - **Critical package fix**: Properly exclude local user settings from npm package
581
+ - Updated package.json `files` array to explicitly include only necessary .claude/ subdirectories
582
+ - Prevents .claude/settings.json and .claude/settings.local.json from being published
583
+ - v1.4.2 still included these files due to `files` array overriding .npmignore
584
+
585
+ ### Security
586
+
587
+ - **CRITICAL**: v1.4.0, v1.4.1, and v1.4.2 inadvertently published user-specific permission settings
588
+ - Users who installed these versions should check if their .claude/settings*.json files were overwritten
589
+ - These files are now properly excluded in v1.4.3+
590
+
591
+ ## [1.4.2] - 2025-01-31
592
+
593
+ ### Fixed
594
+
595
+ - **npm package cleanup**: Attempted to exclude local user settings (incomplete fix)
596
+ - Added .npmignore (did not work due to `files` array in package.json)
597
+ - See v1.4.3 for complete fix
598
+
599
+ ## [1.4.1] - 2025-01-31
600
+
601
+ ### Changed
602
+
603
+ - **README simplified**: Reduced from 860 to 316 lines (63% reduction)
604
+ - Focused on value proposition and quick start
605
+ - Removed detailed setup instructions (moved to docs/SETUP.md)
606
+ - Removed lengthy examples (moved to docs/EXAMPLES.md)
607
+ - Added clear "Next Steps" section with links to guides
608
+ - Before/after comparison showing Forge value
609
+ - Scannable in under 2 minutes
610
+
611
+ ### Added
612
+
613
+ - **QUICKSTART.md**: Complete beginner guide (5-minute walkthrough)
614
+ - Step-by-step first feature implementation
615
+ - Actual commands with expected outputs
616
+ - Health check endpoint example
617
+ - All 9 stages demonstrated
618
+ - **docs/SETUP.md**: Comprehensive setup guide
619
+ - All agent-specific setup instructions (11+ agents)
620
+ - External services configuration (GitHub, SonarCloud, Greptile, etc.)
621
+ - Beads and OpenSpec detailed setup
622
+ - Troubleshooting section
623
+ - Environment variables reference
624
+ - **docs/EXAMPLES.md**: Real-world workflow examples
625
+ - Simple feature example (historical timing reference; not a current guarantee)
626
+ - Bug fix with security (30 minutes)
627
+ - Multi-file refactor (2-3 hours)
628
+ - Architecture change with OpenSpec (2-3 days)
629
+ - Team collaboration with Beads
630
+ - **docs/README-v1.3.md**: Archive of previous README for reference
631
+
632
+ ### Improved
633
+
634
+ - Documentation now follows progressive disclosure:
635
+ - Beginners → README + QUICKSTART.md
636
+ - Intermediate → docs/EXAMPLES.md
637
+ - Advanced → docs/SETUP.md + docs/TOOLCHAIN.md
638
+ - All technical content preserved, just better organized
639
+ - Easier to find specific information
640
+ - Better onboarding for new users
641
+
642
+ ## [1.4.0] - 2025-01-31
643
+
644
+ ### Added
645
+
646
+ - **Plan-Act-Reflect reminders**: Gentle reflection prompts in /plan, /dev, and /check commands
647
+ - Non-intrusive blockquote format at critical decision points
648
+ - Prompts to review research docs and consider complexity
649
+ - "If unsure" conditionals to avoid being prescriptive
650
+ - **Smart project detection**: Auto-detect framework, language, tooling with confidence scores
651
+ - Supports 12+ frameworks: Next.js, React, Vue, Angular, Svelte, NestJS, Express, Fastify, and more
652
+ - Confidence scoring (60-100) with visual indicators (✓ for 90%+, ~ for lower)
653
+ - Detects TypeScript, monorepo, Docker, and CI/CD configurations
654
+ - **AGENTS.md metadata**: Auto-populate with framework-specific tips and conventions
655
+ - Framework-specific development tips (3 per framework)
656
+ - Build tool detection (Vite, Webpack, Next, etc.)
657
+ - Test framework detection (Jest, Vitest, Playwright, Cypress, etc.)
658
+ - Automatic insertion after project description
659
+ - **Rollback system**: `forge rollback` command with USER section preservation
660
+ - Interactive menu with 6 options
661
+ - Comprehensive input validation for security
662
+ - Automatic USER section extraction and restoration
663
+ - Custom commands preservation in `.claude/commands/custom/`
664
+ - **4 rollback methods**:
665
+ - Last commit: Quick undo of most recent change
666
+ - Specific commit: Target any commit by hash
667
+ - Merged PR: Revert entire PR merge with Beads integration
668
+ - Partial rollback: Restore specific files only
669
+ - Branch range: Revert multiple commits
670
+ - **Dry run mode**: Preview rollback changes without executing
671
+ - Shows affected files
672
+ - Lists USER sections that would be preserved
673
+ - Lists custom commands that would be preserved
674
+ - No git operations performed
675
+ - **Input validation**: Comprehensive validation for all rollback inputs
676
+ - Commit hash validation (4-40 character hex strings or 'HEAD')
677
+ - Path traversal protection using `path.resolve()` and `startsWith()`
678
+ - Shell metacharacter rejection (`;`, `|`, `&`, `$`, `` ` ``, `(`, `)`, `<`, `>`, `\n`, `\r`)
679
+ - Method whitelist validation
680
+ - **Beads integration**: Auto-update issue status on PR rollback
681
+ - Parses commit message for issue number
682
+ - Updates issue status to 'reverted'
683
+ - Adds comment: "PR reverted by rollback"
684
+ - Silently skips if Beads not installed
685
+
686
+ ### Changed
687
+
688
+ - AGENTS.md now includes auto-detected project metadata after setup
689
+ - Setup completion message includes project detection results with confidence indicators
690
+ - COMMANDS array now includes 'rollback' for command file distribution
691
+
692
+ ### Security
693
+
694
+ - Added comprehensive input validation for all rollback commands to prevent command injection
695
+ - Path traversal protection for file operations using canonical path resolution
696
+ - Commit hash format validation to reject malicious inputs
697
+ - Shell metacharacter rejection in all user-provided inputs
698
+ - Non-destructive rollback using `git revert` (never uses `git reset --hard`)
699
+
700
+ ### Documentation
701
+
702
+ - Added `.claude/commands/rollback.md` with complete rollback documentation
703
+ - Updated `docs/WORKFLOW.md` with recovery section
704
+ - Added troubleshooting guide for common rollback issues
705
+ - Added examples for all rollback methods
706
+
707
+ ## [1.3.1] - Previous Release
708
+
709
+ (Previous changelog entries would go here)