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