forge-workflow 0.0.9 → 0.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
  2. package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
  3. package/.cursor/rules/permissions-guidance.mdc +2 -2
  4. package/.forge/hooks/check-tdd.js +3 -0
  5. package/.forge/hooks/forge-native-hook.js +245 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -106
  10. package/QUICKSTART.md +171 -0
  11. package/README.md +271 -363
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +466 -489
  15. package/docs/INDEX.md +93 -0
  16. package/docs/PROJECT_DESIGN.md +685 -0
  17. package/docs/architecture/index.md +66 -0
  18. package/docs/architecture/notes/README.md +35 -0
  19. package/docs/architecture/subsystems/README.md +46 -0
  20. package/docs/{TOOLCHAIN.md → forge/TOOLCHAIN.md} +56 -47
  21. package/docs/forge/VALIDATION.md +82 -0
  22. package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
  23. package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
  24. package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
  25. package/docs/guides/GREPTILE_SETUP.md +46 -0
  26. package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
  27. package/docs/guides/MIGRATION.md +56 -0
  28. package/docs/guides/SETUP.md +118 -0
  29. package/docs/guides/SUPPORT.md +185 -0
  30. package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
  31. package/docs/guides/memory-backends.md +183 -0
  32. package/docs/reference/ADAPTERS.md +128 -0
  33. package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
  34. package/docs/reference/COMMANDS.md +205 -0
  35. package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
  36. package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
  37. package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
  38. package/docs/reference/HERMES_INTEGRATION.md +118 -0
  39. package/docs/reference/INSIGHTS_RECAP.md +63 -0
  40. package/docs/reference/INSTALL.md +164 -0
  41. package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
  42. package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
  43. package/docs/reference/RELEASE.md +68 -0
  44. package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
  45. package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
  46. package/docs/reference/SKILLS.md +35 -0
  47. package/docs/reference/STATUS_BOARD.md +80 -0
  48. package/docs/reference/TEMPLATES.md +106 -0
  49. package/docs/reference/TOOLCHAIN.md +658 -0
  50. package/docs/reference/VALIDATION.md +82 -0
  51. package/docs/reference/agent-permissions.md +169 -0
  52. package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
  53. package/docs/reference/control-plane-guarantees.md +125 -0
  54. package/docs/reference/dependency-chain.md +331 -0
  55. package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
  56. package/docs/reference/forge-kernel-schema.md +72 -0
  57. package/docs/reference/kernel-conflict-evaluators.md +27 -0
  58. package/docs/reference/patch-md-format.md +77 -0
  59. package/docs/reference/protected-state-surfaces.md +59 -0
  60. package/docs/reference/shepherd.md +115 -0
  61. package/docs/reference/superpowers-analysis.md +320 -0
  62. package/docs/reference/superpowers-integration-options.md +404 -0
  63. package/docs/reference/test-environment.md +519 -0
  64. package/docs/reference/upgrade-safety.md +59 -0
  65. package/lefthook.yml +18 -0
  66. package/lib/adapter-cli.js +307 -0
  67. package/lib/adapters/beads-issue-adapter.js +127 -0
  68. package/lib/adapters/beads-kernel-compat.js +1042 -0
  69. package/lib/adapters/greptile-review-adapter.js +141 -0
  70. package/lib/adapters/kernel-issue-adapter.js +101 -0
  71. package/lib/adapters/pr-state-adapter.js +484 -0
  72. package/lib/adoption-profiles.js +126 -0
  73. package/lib/agents/README.md +2 -6
  74. package/lib/agents/claude.plugin.json +3 -8
  75. package/lib/agents/codex.plugin.json +9 -1
  76. package/lib/agents/cursor.plugin.json +2 -6
  77. package/lib/agents/hermes.plugin.json +22 -0
  78. package/lib/agents-config.js +39 -1236
  79. package/lib/audit-evidence.js +282 -0
  80. package/lib/beads-setup.js +225 -28
  81. package/lib/beads-sync-scaffold.js +36 -107
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +744 -70
  84. package/lib/commands/_manifest.js +91 -0
  85. package/lib/commands/_registry.js +85 -34
  86. package/lib/commands/_resolve-command-opts.js +261 -0
  87. package/lib/commands/_serve-security.js +270 -0
  88. package/lib/commands/adapter.js +12 -0
  89. package/lib/commands/add.js +118 -0
  90. package/lib/commands/audit.js +70 -0
  91. package/lib/commands/blocked.js +5 -0
  92. package/lib/commands/board.js +64 -0
  93. package/lib/commands/claim.js +21 -2
  94. package/lib/commands/claims.js +7 -0
  95. package/lib/commands/clean.js +485 -75
  96. package/lib/commands/close.js +2 -2
  97. package/lib/commands/comment.js +5 -0
  98. package/lib/commands/control.js +148 -0
  99. package/lib/commands/create.js +2 -2
  100. package/lib/commands/dev.js +185 -7
  101. package/lib/commands/doc-gate.js +336 -0
  102. package/lib/commands/doctor.js +156 -0
  103. package/lib/commands/explain.js +15 -0
  104. package/lib/commands/export.js +237 -0
  105. package/lib/commands/gate.js +192 -0
  106. package/lib/commands/hooks.js +242 -0
  107. package/lib/commands/inbox.js +118 -0
  108. package/lib/commands/init.js +598 -0
  109. package/lib/commands/insights.js +79 -0
  110. package/lib/commands/issue.js +12 -1
  111. package/lib/commands/issues.js +66 -0
  112. package/lib/commands/lint.js +5 -0
  113. package/lib/commands/list.js +2 -2
  114. package/lib/commands/merge.js +312 -0
  115. package/lib/commands/migrate.js +523 -0
  116. package/lib/commands/new.js +12 -0
  117. package/lib/commands/options.js +241 -0
  118. package/lib/commands/orient.js +13 -0
  119. package/lib/commands/orphans.js +5 -0
  120. package/lib/commands/patch.js +67 -0
  121. package/lib/commands/plan.js +436 -24
  122. package/lib/commands/preflight.js +211 -0
  123. package/lib/commands/prime.js +13 -0
  124. package/lib/commands/push.js +69 -2
  125. package/lib/commands/ready.js +2 -2
  126. package/lib/commands/recall.js +116 -0
  127. package/lib/commands/recap.js +61 -0
  128. package/lib/commands/recommend.js +22 -2
  129. package/lib/commands/release.js +91 -0
  130. package/lib/commands/remember.js +74 -0
  131. package/lib/commands/role.js +99 -0
  132. package/lib/commands/serve.js +581 -0
  133. package/lib/commands/setup.js +851 -979
  134. package/lib/commands/shepherd.js +436 -0
  135. package/lib/commands/ship.js +23 -1
  136. package/lib/commands/show.js +2 -2
  137. package/lib/commands/stage.js +192 -0
  138. package/lib/commands/stale.js +5 -0
  139. package/lib/commands/status.js +329 -11
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +15 -2
  142. package/lib/commands/test.js +58 -7
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +56 -25
  146. package/lib/commands/worktree.js +308 -128
  147. package/lib/config-writer.js +202 -0
  148. package/lib/control-plane.js +236 -0
  149. package/lib/core/runtime-graph.js +946 -0
  150. package/lib/dep-guard/keyword-ripple.js +184 -0
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +42 -17
  154. package/lib/doc-gate/declaration.js +177 -0
  155. package/lib/doc-gate/detect.js +289 -0
  156. package/lib/doc-gate/gate.js +375 -0
  157. package/lib/doc-gate/okf-config.js +128 -0
  158. package/lib/doc-gate/okf.js +429 -0
  159. package/lib/docs-command.js +1161 -6
  160. package/lib/forge-issues.js +697 -0
  161. package/lib/forge-lock.js +262 -0
  162. package/lib/gate-events.js +193 -0
  163. package/lib/global-flags.js +74 -0
  164. package/lib/greptile-match.js +7 -63
  165. package/lib/harness-capability-matrix.js +380 -0
  166. package/lib/hook-global-installer.js +347 -0
  167. package/lib/hook-renderer.js +451 -0
  168. package/lib/inbox.js +391 -0
  169. package/lib/insights.js +397 -0
  170. package/lib/issue-adapter.js +156 -0
  171. package/lib/issue-backend.js +145 -0
  172. package/lib/issue-render.js +220 -0
  173. package/lib/issue-sync/authority.js +100 -0
  174. package/lib/issue-sync/github-pull.js +184 -0
  175. package/lib/issue-sync/import-primitives.js +98 -0
  176. package/lib/issue-sync/legacy-link-bridge.js +436 -0
  177. package/lib/issue-sync/link-store.js +292 -0
  178. package/lib/issue-sync/project-github.js +123 -0
  179. package/lib/issue-sync/reconcile.js +195 -0
  180. package/lib/issue-sync/schema.js +126 -0
  181. package/lib/kernel/backing-issue.js +305 -0
  182. package/lib/kernel/broker.js +1218 -0
  183. package/lib/kernel/cli-broker-factory.js +130 -0
  184. package/lib/kernel/conflict-signal.js +82 -0
  185. package/lib/kernel/evaluators.js +195 -0
  186. package/lib/kernel/fs-class.js +495 -0
  187. package/lib/kernel/issue-command-contract.js +559 -0
  188. package/lib/kernel/issue-id-resolver.js +186 -0
  189. package/lib/kernel/lease-enforcer.js +158 -0
  190. package/lib/kernel/migrations.js +333 -0
  191. package/lib/kernel/planning-buckets-schema.js +109 -0
  192. package/lib/kernel/projection-jsonl-writer.js +450 -0
  193. package/lib/kernel/readiness-model.js +329 -0
  194. package/lib/kernel/schema.js +356 -0
  195. package/lib/kernel/sqlite-driver.js +2504 -0
  196. package/lib/kernel/taxonomy-validator.js +394 -0
  197. package/lib/lefthook-check.js +8 -4
  198. package/lib/lefthook-wiring.js +413 -0
  199. package/lib/mcp-config-renderer.js +288 -0
  200. package/lib/memory/graphiti-mcp.js +106 -0
  201. package/lib/memory/router.js +387 -0
  202. package/lib/memory/typed-api.js +102 -0
  203. package/lib/memory-digest.js +195 -0
  204. package/lib/merge-rules.js +395 -0
  205. package/lib/migrate-dry-run.js +466 -0
  206. package/lib/orientation.js +863 -0
  207. package/lib/package-manager-remediation.js +103 -0
  208. package/lib/package-root.js +381 -0
  209. package/lib/patch-intent.js +890 -0
  210. package/lib/plugin-catalog.js +3 -4
  211. package/lib/plugin-manager.js +0 -5
  212. package/lib/pr-bundle.js +186 -0
  213. package/lib/pr-monitor/differ.js +195 -0
  214. package/lib/pr-monitor/events.js +0 -0
  215. package/lib/pr-monitor/gather.js +124 -0
  216. package/lib/pr-monitor/journal.js +299 -0
  217. package/lib/pr-monitor/monitor.js +146 -0
  218. package/lib/pr-monitor/render-sticky.js +157 -0
  219. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  220. package/lib/pr-monitor/watch.js +247 -0
  221. package/lib/pr-pull.js +1273 -0
  222. package/lib/pr-shepherd.js +494 -0
  223. package/lib/pr-state-validator.js +59 -0
  224. package/lib/preflight/gates.js +237 -0
  225. package/lib/preflight/runner.js +116 -0
  226. package/lib/project-discovery.js +0 -53
  227. package/lib/project-memory.js +166 -0
  228. package/lib/protected-path-manifest.js +281 -0
  229. package/lib/protected-state-surfaces.js +387 -0
  230. package/lib/release-readiness.js +2089 -0
  231. package/lib/reset.js +59 -45
  232. package/lib/review-adapter.js +68 -0
  233. package/lib/rules-sync.js +260 -0
  234. package/lib/runtime-health.js +332 -23
  235. package/lib/safety-config-renderer.js +268 -0
  236. package/lib/setup-action-log.js +1 -7
  237. package/lib/setup.js +27 -65
  238. package/lib/shell-utils.js +76 -6
  239. package/lib/skills-sync.js +330 -0
  240. package/lib/smart-status/conflicts.js +205 -0
  241. package/lib/smart-status/scoring.js +191 -0
  242. package/lib/status/beads-snapshot.js +145 -0
  243. package/lib/status/presenter.js +216 -0
  244. package/lib/status/snapshot.js +186 -0
  245. package/lib/sync-backend.js +202 -0
  246. package/lib/untrusted-content.js +52 -0
  247. package/lib/upgrade-safety.js +199 -0
  248. package/lib/workflow/enforce-stage.js +298 -47
  249. package/lib/workflow/stage-transition.js +115 -0
  250. package/lib/workflow/stages.js +30 -6
  251. package/lib/workflow/state-manager.js +159 -14
  252. package/lib/workflow/state.js +23 -1
  253. package/lib/workflow-profiles.js +17 -5
  254. package/package.json +46 -36
  255. package/rules/documentation.md +19 -0
  256. package/rules/kernel-tracking.md +26 -0
  257. package/rules/security.md +22 -0
  258. package/rules/tdd.md +20 -0
  259. package/rules/workflow.md +27 -0
  260. package/scripts/auto-backing-issue.js +47 -0
  261. package/scripts/beads-context.sh +165 -22
  262. package/scripts/beads-migrate-to-dolt.sh +7 -0
  263. package/scripts/beads-upgrade-smoke.sh +284 -0
  264. package/scripts/behavioral-judge.sh +115 -11
  265. package/scripts/benchmark.js +349 -63
  266. package/scripts/bootstrap-windows-tools.sh +78 -0
  267. package/scripts/branch-protection.js +2 -3
  268. package/scripts/check-agents.js +34 -137
  269. package/scripts/commitlint.js +3 -1
  270. package/scripts/conflict-detect.sh +3 -0
  271. package/scripts/dep-guard-analyze.js +52 -17
  272. package/scripts/dep-guard-keyword-ripple.js +29 -0
  273. package/scripts/dep-guard-render-review.js +86 -0
  274. package/scripts/dep-guard.sh +64 -232
  275. package/scripts/file-index.sh +3 -0
  276. package/scripts/forge-team/lib/claim.sh +34 -18
  277. package/scripts/forge-team/lib/dashboard.sh +61 -86
  278. package/scripts/forge-team/lib/epic.sh +99 -263
  279. package/scripts/forge-team/lib/hooks.sh +26 -28
  280. package/scripts/forge-team/lib/identity.sh +4 -4
  281. package/scripts/forge-team/lib/sync-github.sh +144 -47
  282. package/scripts/forge-team/lib/verify.sh +93 -83
  283. package/scripts/forge-team/lib/workload.sh +41 -65
  284. package/scripts/forge-team/tests/claim.test.sh +25 -19
  285. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  286. package/scripts/forge-team/tests/epic.test.sh +52 -71
  287. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  288. package/scripts/forge-team/tests/identity.test.sh +3 -3
  289. package/scripts/forge-team/tests/integration.test.sh +44 -66
  290. package/scripts/forge-team/tests/sync-github.test.sh +183 -79
  291. package/scripts/forge-team/tests/verify.test.sh +37 -46
  292. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  293. package/scripts/forge-team/tests/workload.test.sh +32 -66
  294. package/scripts/gen-command-manifest.js +153 -0
  295. package/scripts/gen-embedded-assets.mjs +129 -0
  296. package/scripts/install.ps1 +139 -0
  297. package/scripts/install.sh +268 -0
  298. package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
  299. package/scripts/lib/release-asset.mjs +84 -0
  300. package/scripts/parity-check.mjs +145 -0
  301. package/scripts/parity-check.test.mjs +58 -0
  302. package/scripts/pin-agentic-workflow-images.js +112 -0
  303. package/scripts/pr-coordinator.sh +3 -0
  304. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  305. package/scripts/preflight.sh +108 -0
  306. package/scripts/protected-state-check.js +104 -0
  307. package/scripts/smart-status-score.js +31 -0
  308. package/scripts/smart-status-sessions.js +51 -0
  309. package/scripts/smart-status.sh +117 -369
  310. package/scripts/spikes/config-race-bench.js +111 -0
  311. package/scripts/spikes/harness-capability-matrix.js +13 -0
  312. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  313. package/scripts/spikes/protected-path-manifest.js +20 -0
  314. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  315. package/scripts/sync-agent-skills.js +62 -0
  316. package/scripts/sync-agentic-workflow.js +48 -0
  317. package/scripts/sync-utils.sh +3 -0
  318. package/scripts/test-ci-shard.js +251 -0
  319. package/scripts/test-dashboard.js +188 -52
  320. package/scripts/test-full-suite.js +186 -0
  321. package/scripts/test-profile.js +278 -0
  322. package/scripts/test.js +302 -28
  323. package/scripts/validate.js +143 -0
  324. package/scripts/validate.sh +18 -1
  325. package/skills/claim-safety/SKILL.md +102 -0
  326. package/skills/claim-safety/evals/evals.json +46 -0
  327. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +46 -52
  328. package/skills/dev/evals/evals.json +50 -0
  329. package/skills/hermes-forge/SKILL.md +185 -0
  330. package/skills/hermes-forge/evals/evals.json +46 -0
  331. package/skills/issue-basics/SKILL.md +111 -0
  332. package/skills/issue-basics/evals/evals.json +46 -0
  333. package/skills/kernel/SKILL.md +166 -0
  334. package/skills/kernel/evals/evals.json +50 -0
  335. package/skills/memory/SKILL.md +102 -0
  336. package/skills/parallel-deep-research/SKILL.md +14 -11
  337. package/skills/parallel-deep-research/evals/evals.json +11 -27
  338. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +134 -159
  339. package/skills/plan/evals/evals.json +42 -0
  340. package/skills/research/SKILL.md +195 -0
  341. package/skills/research/evals/evals.json +42 -0
  342. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  343. package/skills/review/evals/evals.json +42 -0
  344. package/skills/rollback/SKILL.md +110 -0
  345. package/skills/rollback/evals/evals.json +46 -0
  346. package/skills/rollback/references/methods.md +204 -0
  347. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  348. package/skills/shepherd/SKILL.md +66 -0
  349. package/skills/shepherd/evals/evals.json +42 -0
  350. package/skills/ship/SKILL.md +251 -0
  351. package/skills/ship/evals/evals.json +42 -0
  352. package/skills/smith/SKILL.md +142 -0
  353. package/skills/smith/evals/evals.json +46 -0
  354. package/skills/smith/references/autonomy-and-gates.md +94 -0
  355. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  356. package/skills/sonarcloud/evals/evals.json +46 -0
  357. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  358. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  359. package/skills/status/SKILL.md +102 -0
  360. package/skills/status/evals/evals.json +50 -0
  361. package/skills/triage-ready/SKILL.md +121 -0
  362. package/skills/triage-ready/evals/evals.json +42 -0
  363. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  364. package/skills/validate/evals/evals.json +42 -0
  365. package/skills/verify/SKILL.md +299 -0
  366. package/skills/verify/evals/evals.json +50 -0
  367. package/.claude/commands/dev.md +0 -345
  368. package/.claude/commands/plan.md +0 -566
  369. package/.claude/commands/premerge.md +0 -186
  370. package/.claude/commands/research.md +0 -42
  371. package/.claude/commands/review.md +0 -451
  372. package/.claude/commands/rollback.md +0 -721
  373. package/.claude/commands/ship.md +0 -213
  374. package/.claude/commands/sonarcloud.md +0 -152
  375. package/.claude/commands/status.md +0 -90
  376. package/.claude/commands/validate.md +0 -288
  377. package/.claude/commands/verify.md +0 -269
  378. package/.claude/rules/workflow.md +0 -121
  379. package/.cline/workflows/dev.md +0 -342
  380. package/.cline/workflows/plan.md +0 -563
  381. package/.cline/workflows/premerge.md +0 -183
  382. package/.cline/workflows/research.md +0 -39
  383. package/.cline/workflows/review.md +0 -448
  384. package/.cline/workflows/rollback.md +0 -718
  385. package/.cline/workflows/ship.md +0 -210
  386. package/.cline/workflows/sonarcloud.md +0 -146
  387. package/.cline/workflows/status.md +0 -87
  388. package/.cline/workflows/validate.md +0 -285
  389. package/.cline/workflows/verify.md +0 -266
  390. package/.codex/config.toml +0 -11
  391. package/.codex/skills/dev/SKILL.md +0 -345
  392. package/.codex/skills/plan/SKILL.md +0 -566
  393. package/.codex/skills/premerge/SKILL.md +0 -186
  394. package/.codex/skills/research/SKILL.md +0 -42
  395. package/.codex/skills/review/SKILL.md +0 -451
  396. package/.codex/skills/rollback/SKILL.md +0 -721
  397. package/.codex/skills/ship/SKILL.md +0 -213
  398. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  399. package/.codex/skills/status/SKILL.md +0 -90
  400. package/.codex/skills/validate/SKILL.md +0 -288
  401. package/.codex/skills/verify/SKILL.md +0 -269
  402. package/.cursor/commands/dev.md +0 -342
  403. package/.cursor/commands/plan.md +0 -563
  404. package/.cursor/commands/premerge.md +0 -183
  405. package/.cursor/commands/research.md +0 -39
  406. package/.cursor/commands/review.md +0 -448
  407. package/.cursor/commands/ship.md +0 -210
  408. package/.cursor/commands/sonarcloud.md +0 -146
  409. package/.cursor/commands/status.md +0 -87
  410. package/.cursor/commands/validate.md +0 -285
  411. package/.cursor/commands/verify.md +0 -266
  412. package/.cursorrules +0 -149
  413. package/.github/prompts/premerge.prompt.md +0 -188
  414. package/.github/prompts/research.prompt.md +0 -44
  415. package/.github/prompts/rollback.prompt.md +0 -723
  416. package/.github/prompts/ship.prompt.md +0 -215
  417. package/.github/prompts/status.prompt.md +0 -92
  418. package/.github/prompts/verify.prompt.md +0 -271
  419. package/.github/workflows/beads-to-github.yml +0 -56
  420. package/.github/workflows/github-to-beads.yml +0 -97
  421. package/.kilocode/workflows/dev.md +0 -346
  422. package/.kilocode/workflows/plan.md +0 -567
  423. package/.kilocode/workflows/premerge.md +0 -187
  424. package/.kilocode/workflows/research.md +0 -43
  425. package/.kilocode/workflows/review.md +0 -452
  426. package/.kilocode/workflows/rollback.md +0 -722
  427. package/.kilocode/workflows/ship.md +0 -214
  428. package/.kilocode/workflows/sonarcloud.md +0 -150
  429. package/.kilocode/workflows/status.md +0 -91
  430. package/.kilocode/workflows/validate.md +0 -289
  431. package/.kilocode/workflows/verify.md +0 -270
  432. package/.opencode/commands/dev.md +0 -345
  433. package/.opencode/commands/plan.md +0 -566
  434. package/.opencode/commands/premerge.md +0 -186
  435. package/.opencode/commands/research.md +0 -42
  436. package/.opencode/commands/review.md +0 -451
  437. package/.opencode/commands/rollback.md +0 -721
  438. package/.opencode/commands/ship.md +0 -213
  439. package/.opencode/commands/sonarcloud.md +0 -149
  440. package/.opencode/commands/status.md +0 -90
  441. package/.opencode/commands/validate.md +0 -288
  442. package/.opencode/commands/verify.md +0 -269
  443. package/.roo/commands/dev.md +0 -346
  444. package/.roo/commands/plan.md +0 -567
  445. package/.roo/commands/premerge.md +0 -187
  446. package/.roo/commands/research.md +0 -43
  447. package/.roo/commands/review.md +0 -452
  448. package/.roo/commands/rollback.md +0 -722
  449. package/.roo/commands/ship.md +0 -214
  450. package/.roo/commands/sonarcloud.md +0 -150
  451. package/.roo/commands/status.md +0 -91
  452. package/.roo/commands/validate.md +0 -289
  453. package/.roo/commands/verify.md +0 -270
  454. package/docs/BEADS_GITHUB_SYNC.md +0 -255
  455. package/docs/GREPTILE_SETUP.md +0 -400
  456. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  457. package/docs/SETUP.md +0 -663
  458. package/docs/VALIDATION.md +0 -363
  459. package/lib/agents/cline.plugin.json +0 -29
  460. package/lib/agents/copilot.plugin.json +0 -24
  461. package/lib/agents/kilocode.plugin.json +0 -22
  462. package/lib/agents/opencode.plugin.json +0 -23
  463. package/lib/agents/roo.plugin.json +0 -30
  464. package/lib/beads-health-check.js +0 -143
  465. package/lib/commands/commands-reset.js +0 -147
  466. package/opencode.json +0 -67
  467. package/scripts/beads-context.test.js +0 -567
  468. package/scripts/github-beads-sync/comment.mjs +0 -64
  469. package/scripts/github-beads-sync/config.mjs +0 -148
  470. package/scripts/github-beads-sync/github-api.mjs +0 -131
  471. package/scripts/github-beads-sync/index.mjs +0 -332
  472. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  473. package/scripts/github-beads-sync/mapping.mjs +0 -78
  474. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  475. package/scripts/github-beads-sync/reverse-sync.mjs +0 -138
  476. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  477. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  478. package/scripts/github-beads-sync.config.json +0 -26
  479. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,519 @@
1
+ # Research: Comprehensive Test Environment for Forge
2
+
3
+ **Date**: 2026-02-03
4
+ **Researcher**: AI Assistant
5
+ **Epic**: forge-hql
6
+ **Status**: Complete
7
+
8
+ ## Executive Summary
9
+
10
+ Research into creating a comprehensive test environment for the Forge workflow project, covering installation flows, edge cases, onboarding processes, and multi-installation validation. The current test suite (9 files) needs expansion to 50+ tests with automated fixtures, security validation, and improvement recommendations.
11
+
12
+ ## Problem Statement
13
+
14
+ Forge is a universal AI agent workflow tool supporting 11 agent plugins with complex installation flows. Current testing is insufficient:
15
+
16
+ - **Test coverage gaps**: Only 9 test files, missing edge cases like permissions, network failures, unicode handling
17
+ - **No multi-installation validation**: Not tested across npm/yarn/pnpm/bun or different frameworks
18
+ - **Manual onboarding testing**: No automated validation of 11 agent combinations
19
+ - **Security concerns**: Limited validation of user inputs, path traversal, injection attacks
20
+ - **No improvement tracking**: Need systematic identification of UX and reliability issues
21
+
22
+ ## Current State Analysis
23
+
24
+ ### Existing Test Infrastructure
25
+
26
+ **9 test files** (using Node.js `node:test`, no external dependencies):
27
+
28
+ 1. `test/agents-md/structure.test.js` - AGENTS.md structure validation
29
+ 2. `test/plugins/plugin-manager.test.js` - Plugin loading tests
30
+ 3. `test/plugins/plugin-schema.test.js` - Plugin JSON schema validation
31
+ 4. `test/validation/forge-preflight.test.js` - CLI validation
32
+ 5. `test/validation/git-hooks.test.js` - Lefthook configuration
33
+ 6. `test/validation/project-tools.test.js` - Project tools detection
34
+ 7. `test/rollback-validation.test.js` - Rollback input validation
35
+ 8. `test/rollback-user-sections.test.js` - User section preservation
36
+ 9. `test/rollback-edge-cases.test.js` - Security validation (434 lines)
37
+
38
+ **Coverage**: ~30% of critical flows
39
+
40
+ ### Installation Entry Points
41
+
42
+ 1. **Postinstall** (automatic): Creates AGENTS.md + docs/ (minimal)
43
+ 2. **Interactive setup**: `bunx forge setup` (full agent selection)
44
+ 3. **Quick mode**: `bunx forge setup --quick` (all defaults)
45
+ 4. **Curl install**: `install.sh` (bash script, 1063 lines)
46
+
47
+ ### Critical Files
48
+
49
+ - `bin/forge.js` (3,771 lines) - Main CLI, all flows
50
+ - `bin/forge-preflight.js` (303 lines) - Validation CLI
51
+ - `lib/plugin-manager.js` (115 lines) - Plugin loading
52
+ - `install.sh` (1,063 lines) - Curl installation
53
+ - 11 plugin files in `lib/agents/*.plugin.json`
54
+
55
+ ### Known Edge Cases (Discovered)
56
+
57
+ From code analysis, these edge cases exist but lack tests:
58
+
59
+ 1. **Prerequisites**: Missing git, gh, Node < 20, no package manager
60
+ 2. **Permissions**: Read-only directories, locked files
61
+ 3. **Git states**: Detached HEAD, uncommitted changes, merge conflicts
62
+ 4. **Partial install**: Some files exist, others missing
63
+ 5. **Conflicts**: Both AGENTS.md and CLAUDE.md present
64
+ 6. **File limits**: AGENTS.md > 200 lines (warning triggers)
65
+ 7. **Unicode/special chars**: Not validated in paths
66
+ 8. **Network failures**: No timeout handling visible
67
+ 9. **Invalid JSON**: Plugin validation exists but not comprehensive
68
+ 10. **Path traversal**: Some validation in rollback, needs expansion
69
+
70
+ ## Research Findings
71
+
72
+ ### 1. Security Validation Patterns
73
+
74
+ **Good pattern found**: `test/rollback-edge-cases.test.js:10-54`
75
+
76
+ ```javascript
77
+ function validateRollbackInput(method, target) {
78
+ // Validates:
79
+ // - Commit hash format (4-40 hex chars)
80
+ // - Shell injection characters (;|&$`()<>)
81
+ // - Path traversal (../, URL-encoded)
82
+ // - Non-ASCII characters
83
+ // - NULL bytes
84
+
85
+ // Returns: { valid: boolean, error?: string }
86
+ }
87
+ ```
88
+
89
+ **Tests cover**:
90
+ - Shell injection via semicolon, pipe, ampersand, dollar, backtick
91
+ - Path traversal attempts (simple, encoded, Windows-style)
92
+ - Unicode injection
93
+ - File path validation (within project root)
94
+
95
+ **Should apply to**:
96
+ - Installation target paths (`--path` flag)
97
+ - Agent selection names
98
+ - File paths in partial rollback
99
+ - API keys in .env.local
100
+ - Plugin JSON file paths
101
+
102
+ ### 2. Installation Flow Complexity
103
+
104
+ **Three installation modes**:
105
+
106
+ ```
107
+ Mode 1: Postinstall (automatic)
108
+ bun add forge-workflow
109
+
110
+ Creates: AGENTS.md + docs/ only
111
+ Duration: ~5 seconds
112
+ Files created: ~5
113
+
114
+ Mode 2: Interactive Setup
115
+ bunx forge setup
116
+
117
+ Prompts: Agent selection (11 options)
118
+ Prompts: File overwrites (if exists)
119
+ Prompts: Beads/OpenSpec installation
120
+ Prompts: External services (code review, quality, research)
121
+
122
+ Creates: Agent-specific dirs + configs
123
+ Duration: 2-5 minutes (interactive)
124
+ Files created: 5-50 depending on agents
125
+
126
+ Mode 3: Quick Mode
127
+ bunx forge setup --quick
128
+
129
+ Defaults: All agents, GitHub Code Quality, ESLint
130
+ No prompts (except file overwrites)
131
+ Duration: ~30 seconds
132
+ Files created: ~50
133
+ ```
134
+
135
+ **Complexity points**:
136
+ - File overwrite handling (backup, prompt, merge)
137
+ - USER section preservation in AGENTS.md
138
+ - .env.local preservation of existing vars
139
+ - Symlink fallback to copy on Windows
140
+ - Plugin JSON validation and loading
141
+ - Smart project type detection (Next.js, NestJS, etc.)
142
+
143
+ ### 3. Multi-Agent Combinations
144
+
145
+ **11 agents = 2,047 possible combinations** (2^11 - 1)
146
+
147
+ Realistic sampling strategy:
148
+ - Single agent: 11 tests
149
+ - Popular pairs: Claude+Cursor, Claude+Cline, Cursor+Kilo (3 tests)
150
+ - All agents: 1 test
151
+ - No agents: 1 test (error handling)
152
+
153
+ **Total: 16 representative tests** (covers ~80% of use cases)
154
+
155
+ ### 4. Package Manager Detection
156
+
157
+ **Code**: `install.sh:114-138` and `bin/forge.js:detectPackageManager()`
158
+
159
+ **Detection logic**:
160
+ 1. Check lock files (bun.lockb, pnpm-lock.yaml, yarn.lock, package-lock.json)
161
+ 2. Check commands available (bun, pnpm, yarn, npm)
162
+ 3. Priority: bun > pnpm > yarn > npm
163
+
164
+ **Edge cases**:
165
+ - Monorepo with mixed package managers
166
+ - Missing lock file but command available
167
+ - Multiple lock files (corrupted state)
168
+ - No package manager installed
169
+
170
+ ### 5. Framework Detection Accuracy
171
+
172
+ **Code**: `bin/forge.js:detectProjectType()`
173
+
174
+ **Detects**:
175
+ - Next.js (next.config.js, next.config.mjs)
176
+ - NestJS (@nestjs/core in dependencies)
177
+ - React (react in dependencies)
178
+ - Vue (vue in dependencies)
179
+ - Angular (angular.json)
180
+ - Remix (remix.config.js)
181
+ - SvelteKit (svelte.config.js)
182
+ - Astro (astro.config.mjs)
183
+
184
+ **Adds framework-specific tips to AGENTS.md**
185
+
186
+ **Edge cases**:
187
+ - Multiple frameworks in monorepo
188
+ - Framework migration in progress
189
+ - Custom build configurations
190
+
191
+ ### 6. External Services Configuration
192
+
193
+ **Four service categories**:
194
+
195
+ 1. **Code Review** (3 options + skip):
196
+ - GitHub Code Quality (free, default)
197
+ - CodeRabbit (free for OSS)
198
+ - Greptile (paid, requires API key)
199
+
200
+ 2. **Code Quality** (3 options + skip):
201
+ - ESLint only (free, default)
202
+ - SonarCloud (50k LoC free)
203
+ - SonarQube Community (self-hosted)
204
+
205
+ 3. **Research Tool** (2 options):
206
+ - Manual (default)
207
+ - Parallel AI (requires API key)
208
+
209
+ 4. **Context7 MCP**:
210
+ - Auto-installed for Claude Code (.mcp.json)
211
+ - Manual setup for others
212
+
213
+ **Edge cases**:
214
+ - API key validation (no network validation currently)
215
+ - .env.local already exists with custom vars
216
+ - Service requires additional setup (Docker for SonarQube)
217
+
218
+ ### 7. Backup and Recovery
219
+
220
+ **Current state**:
221
+ - AGENTS.md backed up before overwrite: `AGENTS.md.backup`
222
+ - No comprehensive backup system
223
+ - No rollback capability (except git)
224
+
225
+ **Needed**:
226
+ - Transaction-like installation (all-or-nothing)
227
+ - Backup directory with timestamp
228
+ - Rollback command: `bunx forge rollback --backup <timestamp>`
229
+ - Keep last 5 backups, auto-cleanup
230
+
231
+ ### 8. Performance Characteristics
232
+
233
+ **Measured from code**:
234
+
235
+ - Plugin loading: O(n) where n=11 plugins (fast)
236
+ - File downloads: Serial, not parallel (slow)
237
+ - File writes: Serial (could parallelize)
238
+ - Git operations: Blocking (necessary)
239
+
240
+ **Targets**:
241
+ - Quick mode: < 30 seconds
242
+ - Interactive mode: 2-5 minutes (acceptable)
243
+ - Postinstall: < 10 seconds
244
+
245
+ **Bottlenecks**:
246
+ - Network requests (curl downloads in install.sh)
247
+ - Git operations (gh pr create, git push)
248
+ - User input waits (interactive prompts)
249
+
250
+ ## Key Decisions
251
+
252
+ ### 1. Test Framework Choice
253
+
254
+ **Decision**: Use Node.js built-in `node:test` (no external dependencies)
255
+
256
+ **Rationale**:
257
+ - Already used in 9 existing tests
258
+ - No npm install needed (zero dependencies)
259
+ - Fast, lightweight
260
+ - Standard assert library sufficient
261
+
262
+ **Alternatives considered**:
263
+ - Jest (too heavy, requires setup)
264
+ - Vitest (requires Vite)
265
+ - Mocha (requires install)
266
+
267
+ ### 2. Test Isolation Strategy
268
+
269
+ **Decision**: Use temp directories per test, cleanup after
270
+
271
+ **Rationale**:
272
+ - Prevents test pollution
273
+ - Allows parallel execution
274
+ - Safe to run repeatedly
275
+ - Matches current pattern
276
+
277
+ **Implementation**:
278
+ ```javascript
279
+ const { mkdtempSync } = require('fs');
280
+ const { tmpdir } = require('os');
281
+ const { join } = require('path');
282
+
283
+ const testDir = mkdtempSync(join(tmpdir(), 'forge-test-'));
284
+ // Run test in testDir
285
+ // Cleanup: fs.rmSync(testDir, { recursive: true })
286
+ ```
287
+
288
+ ### 3. Fixture Management
289
+
290
+ **Decision**: Create fixtures once via script, reuse across tests
291
+
292
+ **Rationale**:
293
+ - Faster test execution
294
+ - Consistent test environments
295
+ - Easy to add new fixtures
296
+
297
+ **Script**: `automation/setup-fixtures.sh`
298
+
299
+ ### 4. Security Test Approach
300
+
301
+ **Decision**: Follow pattern from `test/rollback-edge-cases.test.js`
302
+
303
+ **Rationale**:
304
+ - Already proven pattern
305
+ - Comprehensive coverage (43 security tests)
306
+ - Clear test naming
307
+ - Returns validation objects
308
+
309
+ **Expand to**:
310
+ - Installation paths
311
+ - Agent names
312
+ - API keys
313
+ - File paths
314
+
315
+ ### 5. Multi-Installation Testing
316
+
317
+ **Decision**: Use Docker containers for prerequisite testing
318
+
319
+ **Rationale**:
320
+ - Can simulate missing git, gh, Node versions
321
+ - Isolated environments
322
+ - Reproducible
323
+
324
+ **Alternatives**:
325
+ - Mock commands (doesn't test real behavior)
326
+ - Manual VMs (slow, not reproducible)
327
+
328
+ ### 6. Improvement Prioritization
329
+
330
+ **Decision**: Four-tier priority system (P1-P4)
331
+
332
+ **P1 (Critical)**: Security, data loss prevention
333
+ **P2 (High)**: User experience, error messages
334
+ **P3 (Medium)**: Testing, reliability
335
+ **P4 (Low)**: Nice-to-have features
336
+
337
+ **Rationale**:
338
+ - Focuses on impact
339
+ - Clear implementation order
340
+ - Balances short-term and long-term
341
+
342
+ ### 7. Reporting Format
343
+
344
+ **Decision**: HTML report with interactive sections
345
+
346
+ **Rationale**:
347
+ - Easy to share
348
+ - Visual representation
349
+ - Can drill down into failures
350
+ - Includes benchmarks
351
+
352
+ **Libraries**: None (generate raw HTML)
353
+
354
+ ### 8. CI/CD Integration
355
+
356
+ **Decision**: GitHub Actions with matrix testing
357
+
358
+ **Matrix**:
359
+ - OS: Ubuntu, macOS, Windows
360
+ - Node: 20.x, 22.x
361
+ - Package Manager: npm, yarn, pnpm
362
+
363
+ **Rationale**:
364
+ - Covers 80% of users
365
+ - Catches platform-specific bugs
366
+ - Automated on every PR
367
+
368
+ ## Risks and Mitigations
369
+
370
+ ### Risk 1: Test execution time too long
371
+
372
+ **Impact**: Medium
373
+ **Probability**: High
374
+
375
+ **Mitigation**:
376
+ - Run edge case tests in parallel
377
+ - Use test fixtures (not fresh setup each time)
378
+ - Skip slow tests in pre-commit hook
379
+ - Full suite only on CI/CD
380
+
381
+ ### Risk 2: Docker dependency for prerequisite tests
382
+
383
+ **Impact**: Medium
384
+ **Probability**: Medium
385
+
386
+ **Mitigation**:
387
+ - Make Docker tests optional
388
+ - Provide mock alternative
389
+ - Document Docker setup clearly
390
+
391
+ ### Risk 3: Windows compatibility issues
392
+
393
+ **Impact**: High
394
+ **Probability**: Medium
395
+
396
+ **Mitigation**:
397
+ - Test on Windows in CI/CD
398
+ - Handle symlink failures (already done)
399
+ - Path normalization (use `path.join()`)
400
+
401
+ ### Risk 4: Breaking changes during improvement implementation
402
+
403
+ **Impact**: High
404
+ **Probability**: Low
405
+
406
+ **Mitigation**:
407
+ - Comprehensive tests before changes
408
+ - Feature flags for new features
409
+ - Gradual rollout (start with P1)
410
+ - Backup system (ironically, solving this risk is P1)
411
+
412
+ ## Recommended Approach
413
+
414
+ ### Phase 1: Test Infrastructure (Immediate)
415
+
416
+ **Goal**: Create test environment and fixtures
417
+
418
+ 1. Create `test-env/` directory structure
419
+ 2. Build 15 test fixtures
420
+ 3. Create 4 validation helpers
421
+ 4. Write 4 automation scripts
422
+
423
+ **Duration**: 2-3 hours
424
+ **Deliverable**: Test infrastructure ready
425
+
426
+ ### Phase 2: Edge Case Tests (Immediate)
427
+
428
+ **Goal**: Expand test coverage to 50+ tests
429
+
430
+ 1. Create 8 edge case test files
431
+ 2. Create 6 integration test files
432
+ 3. Create 11 agent validation tests
433
+ 4. Create 4 package manager tests
434
+
435
+ **Duration**: 12-15 hours
436
+ **Deliverable**: Comprehensive test suite
437
+
438
+ ### Phase 3: Multi-Installation Testing (Immediate)
439
+
440
+ **Goal**: Validate across platforms and scenarios
441
+
442
+ 1. Create `run-multi-install.sh` script
443
+ 2. Test 13 installation scenarios
444
+ 3. Generate performance benchmarks
445
+ 4. Create HTML report generator
446
+
447
+ **Duration**: 3-4 hours
448
+ **Deliverable**: Automated validation across scenarios
449
+
450
+ ### Phase 4: Critical Improvements (Priority 1)
451
+
452
+ **Goal**: Security and data loss prevention
453
+
454
+ 1. Implement backup system
455
+ 2. Implement atomic installation
456
+ 3. Enhance security validation
457
+
458
+ **Duration**: 10-13 hours
459
+ **Deliverable**: Production-ready reliability
460
+
461
+ ### Phase 5: UX Improvements (Priority 2)
462
+
463
+ **Goal**: Better error handling and recovery
464
+
465
+ 1. Create `forge doctor` command
466
+ 2. Interactive recovery mode
467
+ 3. Progress indication
468
+
469
+ **Duration**: 9-12 hours
470
+ **Deliverable**: Better user experience
471
+
472
+ ## Success Metrics
473
+
474
+ 1. **Test coverage**: 50+ test files (from 9)
475
+ 2. **Edge case coverage**: 100% of identified edge cases tested
476
+ 3. **Security validation**: 100% of injection attempts blocked
477
+ 4. **Installation success rate**: 99%+ across 13 scenarios
478
+ 5. **Performance**: Quick mode < 30 seconds
479
+ 6. **User satisfaction**: Clear error messages, recovery options
480
+
481
+ ## Next Steps
482
+
483
+ 1. Create Beads epic: `bd create "Comprehensive test environment"`
484
+ 2. Create branch: `git checkout -b feat/test-environment`
485
+ 3. Implement Phase 1 (test infrastructure)
486
+ 4. Implement Phase 2 (edge case tests)
487
+ 5. Implement Phase 3 (multi-installation)
488
+ 6. Generate first report
489
+ 7. Review with team
490
+ 8. Implement Phase 4-5 based on priorities
491
+
492
+ ## References
493
+
494
+ - Forge codebase: `bin/forge.js`, `bin/forge-preflight.js`, `lib/plugin-manager.js`
495
+ - Security test pattern: `test/rollback-edge-cases.test.js`
496
+ - Installation script: `install.sh`
497
+ - Plugin definitions: `lib/agents/*.plugin.json`
498
+
499
+ ## Appendix: Test Scenarios Matrix
500
+
501
+ | Category | Scenario | Files Affected | Priority |
502
+ |----------|----------|----------------|----------|
503
+ | Prerequisites | Missing git | bin/forge.js:146-200 | P1 |
504
+ | Prerequisites | Node < 20 | bin/forge.js:146-200 | P1 |
505
+ | Prerequisites | No package manager | install.sh:114-138 | P1 |
506
+ | Permissions | Read-only .claude/ | bin/forge.js (multiple) | P1 |
507
+ | Git States | Detached HEAD | bin/forge.js (git ops) | P2 |
508
+ | Git States | Uncommitted changes | bin/forge.js (git ops) | P2 |
509
+ | Git States | Merge conflict | bin/forge.js (git ops) | P2 |
510
+ | Partial Install | Missing commands | bin/forge.js:400-406 | P1 |
511
+ | Conflicts | Both AGENTS + CLAUDE | bin/forge.js:275-340 | P2 |
512
+ | File Limits | AGENTS.md > 200 lines | test/agents-md/structure.test.js | P3 |
513
+ | Security | Shell injection | All user inputs | P1 |
514
+ | Security | Path traversal | File operations | P1 |
515
+ | Security | Unicode injection | All user inputs | P1 |
516
+ | Network | npm install timeout | install.sh:280-290 | P2 |
517
+ | Network | API validation failure | bin/forge.js:2800-3000 | P3 |
518
+
519
+ **Total scenarios**: 15 fixtures + 40+ test cases = 55+ tests needed
@@ -0,0 +1,59 @@
1
+ # Upgrade Safety
2
+
3
+ Forge 0.0.16 upgrade safety is a foundation layer. It makes upgrade inputs reviewable and checks recoverable metadata before later releases add full install, rollback, and restore flows.
4
+
5
+ ## Lockfile
6
+
7
+ `forge add <source> [--name <id>]` records extension source metadata in `forge.lock`.
8
+
9
+ Trusted local files inside the project root are hashed with SHA-512 SRI and can be rechecked:
10
+
11
+ ```bash
12
+ forge add ./extensions/local.plugin.json --name local
13
+ forge audit verify
14
+ ```
15
+
16
+ Remote and package locator strings such as `https:`, `gh:`, `gist:`, and `npm:` are untrusted by default. They are recorded only when the caller explicitly uses `--allow-untrusted`:
17
+
18
+ ```bash
19
+ forge add gh:owner/repo/plugin --name plugin --allow-untrusted
20
+ ```
21
+
22
+ Those entries are visible in `forge.lock` as explicit trust-policy records. This foundation does not fetch remote bytes for SRI verification.
23
+
24
+ ## Audit Log
25
+
26
+ `forge add` appends a JSONL audit event to `.forge/log.jsonl`. The log is best-effort local evidence for reviewing lockfile changes. Beads remains the durable issue-state authority.
27
+
28
+ ## Verification
29
+
30
+ `forge audit verify` rechecks all local lockfile integrity hashes:
31
+
32
+ - matching local content passes;
33
+ - missing or tampered local content fails;
34
+ - untrusted remote/package locators warn because this PR does not implement resolver-backed byte materialization.
35
+
36
+ ## Upgrade Dry-Run
37
+
38
+ `forge upgrade --dry-run` is report-only. It reads:
39
+
40
+ - resolved runtime config health;
41
+ - patch intent record/orphan status;
42
+ - lock/trust state and integrity verification;
43
+ - recoverable self-heal candidates.
44
+
45
+ The dry-run does not write files.
46
+
47
+ ## Self-Heal
48
+
49
+ `forge upgrade --self-heal` applies only safe metadata repairs:
50
+
51
+ - create missing `.forge/`;
52
+ - create missing `.forge/log.jsonl`.
53
+
54
+ It is idempotent and refuses unrecoverable integrity failures. It does not edit managed workflow files, apply patch intent diffs, install extensions, create rollback snapshots, or restore backups.
55
+
56
+ ## Non-Scope
57
+
58
+ This PR intentionally does not implement rollback snapshots, full restore, marketplace allowlists, name-collision policy, resolver-backed downloads, or automatic patch application.
59
+
package/lefthook.yml CHANGED
@@ -13,6 +13,18 @@ commit-msg:
13
13
 
14
14
  pre-commit:
15
15
  commands:
16
+ # Keep the committed .agents/skills mirror byte-identical to canonical skills/.
17
+ # Runs only when skills/** is staged; regenerates + re-stages the mirror so the
18
+ # drift gate never fails on a stale checked-in mirror (single-source, #342).
19
+ sync-agent-skills:
20
+ run: node scripts/sync-agent-skills.js
21
+ stage_fixed: false
22
+ tags: skills
23
+ glob: "skills/**"
24
+ protected-state:
25
+ run: node scripts/protected-state-check.js
26
+ stage_fixed: false
27
+ tags: protected-state
16
28
  tdd-check:
17
29
  run: node .forge/hooks/check-tdd.js
18
30
  stage_fixed: false
@@ -48,3 +60,9 @@ pre-push:
48
60
  team-sync:
49
61
  run: bash scripts/forge-team/lib/hooks.sh sync --quiet || true
50
62
  tags: team
63
+
64
+ # 5. Auto-file rail — ensure the branch has a backing Kernel issue so a raw
65
+ # `git push` still auto-files started work (non-blocking; always exits 0).
66
+ auto-backing-issue:
67
+ run: node scripts/auto-backing-issue.js || true
68
+ tags: tracking