forge-workflow 0.0.10 → 0.1.0-beta.2

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