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
|
@@ -0,0 +1,658 @@
|
|
|
1
|
+
# Forge Toolchain Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for all tools integrated with the Forge workflow.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Forge is a local runtime control plane that coordinates several tool surfaces:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
Forge runtime control plane
|
|
11
|
+
- workflow templates and stage skills
|
|
12
|
+
- local project state and protected surfaces
|
|
13
|
+
- kernel-backed issue wrappers and sync (Beads is an opt-out backend)
|
|
14
|
+
- validation, packaging, and release evidence
|
|
15
|
+
- review adapters and external service hooks
|
|
16
|
+
- harness projections for agent-specific commands, prompts, workflows, and skills
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The default TDD-first workflow is a core template shipped by Forge. It is not the only runtime primitive. Toolchain docs should describe tools by the surface they support: setup, state, workflow stages, validation, review, release, sync, and recovery.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Shell Model
|
|
24
|
+
|
|
25
|
+
Forge commands and repo scripts run under the shell shown below:
|
|
26
|
+
|
|
27
|
+
| Platform | Shell used by Forge commands and scripts |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| Windows | Git Bash for helper-backed Forge stage flows |
|
|
30
|
+
| macOS/Linux | Default login shell |
|
|
31
|
+
|
|
32
|
+
Windows gotchas:
|
|
33
|
+
|
|
34
|
+
- Forge runtime health enforces Git Bash on Windows for helper-backed flows and reports `Git Bash is required on Windows for helper-backed flows.` when it is missing.
|
|
35
|
+
- Native PowerShell is still used by some bootstrap paths, such as Beads installation, but it is not the enforced shell for helper-backed stage execution.
|
|
36
|
+
- WSL may be useful for adjacent development tasks, but it is not the Windows shell policy currently enforced by Forge runtime checks.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Beads - Opt-Out Dolt-Backed Issue Backend
|
|
41
|
+
|
|
42
|
+
**Package**: `@beads/bd`
|
|
43
|
+
**Repository**: [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
|
|
44
|
+
**Purpose**: Distributed issue tracking designed for AI coding agents
|
|
45
|
+
|
|
46
|
+
> Forge issue wrappers use the built-in **kernel** backend by default — no `bd` install or `bd init` is required, and a fresh clone can track issues immediately. Beads is an **opt-out** backend selected (precedence, highest first) with `--issue-backend beads`, `FORGE_ISSUE_BACKEND=beads`, or `issueBackend: beads` in `.forge/config.yaml`. The rest of this section applies only when Beads is selected.
|
|
47
|
+
|
|
48
|
+
### When Beads Is Selected
|
|
49
|
+
|
|
50
|
+
- Forge targets the stable Beads `v1.0.0` release for Beads-backed setup and CI.
|
|
51
|
+
- Routine team sync still goes through `forge sync`.
|
|
52
|
+
- Use `bd` directly for Beads features Forge does not wrap yet, such as `bd init`, `bd comments`, `bd dep`, `bd blocked`, `bd backup`, and `bd dolt *`.
|
|
53
|
+
|
|
54
|
+
### Install or Update Beads
|
|
55
|
+
|
|
56
|
+
**Recommended**:
|
|
57
|
+
```bash
|
|
58
|
+
bunx forge setup
|
|
59
|
+
bd --version
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Manual install**:
|
|
63
|
+
```bash
|
|
64
|
+
# Windows
|
|
65
|
+
irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iex
|
|
66
|
+
bd --version
|
|
67
|
+
|
|
68
|
+
# CI / pinned Linux install
|
|
69
|
+
BD_VERSION="1.0.0"
|
|
70
|
+
BD_URL="https://github.com/steveyegge/beads/releases/download/v${BD_VERSION}/beads_${BD_VERSION}_linux_amd64.tar.gz"
|
|
71
|
+
mkdir -p "$HOME/.local/bin"
|
|
72
|
+
curl -fsSL "$BD_URL" | tar -xz -C "$HOME/.local/bin" bd
|
|
73
|
+
chmod +x "$HOME/.local/bin/bd"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Verify the installed CLI before using it:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
bd --version
|
|
80
|
+
bd doctor
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Supported Repo Layout
|
|
84
|
+
|
|
85
|
+
Forge treats `.beads/` as the repo-local Beads home directory. `.beads/` is local runtime/export state and is not committed to the repository. `forge setup` writes local Git exclude rules under `.git/info/exclude` so Beads state does not dirty downstream projects.
|
|
86
|
+
|
|
87
|
+
A local initialized checkout may contain:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
.beads/
|
|
91
|
+
├── config.yaml # local Beads config
|
|
92
|
+
├── issues.jsonl # local/exported issue data
|
|
93
|
+
├── metadata.json # local Beads metadata
|
|
94
|
+
├── team-map.jsonl # local/team projection data
|
|
95
|
+
├── backup/ # local backup/export state
|
|
96
|
+
├── hooks/ # local hook shims created by Beads
|
|
97
|
+
└── .gitignore # local ignore guard for runtime files
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
No `.beads/` files are expected to appear in `git ls-files .beads`. Legacy local database cache files are no longer part of the supported Forge setup instructions. When you need JSONL snapshots for migration verification or CI diffing, generate them explicitly with `bd backup --force` and publish them through the intended sync/projection path, not by committing live `.beads/` runtime files.
|
|
101
|
+
|
|
102
|
+
### Migrate Legacy SQLite Data
|
|
103
|
+
|
|
104
|
+
Use the repo wrapper instead of hand-editing `.beads/`:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
bash scripts/beads-migrate-to-dolt.sh
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Default paths used by the wrapper:
|
|
111
|
+
|
|
112
|
+
- `--project-root`: current working directory
|
|
113
|
+
- `--legacy-backup-dir`: `.beads/backup`
|
|
114
|
+
- `--snapshot-root`: `.beads-migration-snapshots`
|
|
115
|
+
- `--migrated-dir`: `.beads-migrated`
|
|
116
|
+
- `--export-dir`: `.beads-migrated-export`
|
|
117
|
+
|
|
118
|
+
What the wrapper does:
|
|
119
|
+
|
|
120
|
+
1. Snapshots the current `.beads/` directory into `.beads-migration-snapshots/<timestamp>/current-beads`.
|
|
121
|
+
2. Restores the legacy JSONL backup into a fresh migrated workspace.
|
|
122
|
+
3. Exports a fresh backup snapshot for parity verification.
|
|
123
|
+
4. Verifies issue IDs, dependency edges, comment IDs, config keys, and record counts.
|
|
124
|
+
5. Writes `.beads-migrated/migration-manifest.json` on success.
|
|
125
|
+
|
|
126
|
+
rollback behavior:
|
|
127
|
+
|
|
128
|
+
- The wrapper automatically restores the pre-migration `.beads/` snapshot if parity verification fails.
|
|
129
|
+
- If you need to inspect or restore manually, use the timestamped snapshot under `.beads-migration-snapshots/`.
|
|
130
|
+
|
|
131
|
+
See the script help for explicit path overrides:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
bash scripts/beads-migrate-to-dolt.sh --help
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Project Memory
|
|
138
|
+
|
|
139
|
+
Forge project memory is a **kernel-backed** read model. `lib/project-memory.js` persists memories in the per-repo Forge Kernel store (the `kernel_memories` table, via the built-in SQLite driver) — it does **not** call `bd`. No Beads install is required for `forge remember` / `forge recall`.
|
|
140
|
+
|
|
141
|
+
`forge remember` / `forge recall` route through this same `kernel_memories` table (via `lib/memory/router.js`), indexed by **FTS5** for token-AND BM25 recall: a `recall` query does full-text matching, and a no-query `recall` returns the newest notes plus a total count (never a full dump). Because the insights engine also writes `kernel_memories`, what it learns is recallable. Any legacy `.forge/memory/notes.jsonl` is imported once on first use, then retired. The opt-in **`graphiti`** backend is **experimental** — its config/doctor checks ship but the runtime write-through emitter is a fast-follow, so selecting it today still writes the local kernel floor. See [docs/guides/memory-backends.md](../guides/memory-backends.md).
|
|
142
|
+
|
|
143
|
+
Typed memory helpers in `lib/memory/typed-api.js` add category and provenance conventions on top of the same kernel store; they do not create a new datastore. The supported categories are:
|
|
144
|
+
|
|
145
|
+
| Category | Key prefix | Durable backend |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| decisions | `decisions:` | Kernel memory index for canonical docs/work decisions |
|
|
148
|
+
| episodes | `episodes:` | Kernel-backed memory/audit context |
|
|
149
|
+
| skills | `skills:` | Kernel memory index for skill references |
|
|
150
|
+
| state | `state:` | Forge-owned state references |
|
|
151
|
+
| issues | `issues:` | Issue references (`beadsRefs` may cross-link Beads issues when that backend is selected) |
|
|
152
|
+
| audit | `audit:` | Kernel-backed audit references |
|
|
153
|
+
| preferences | `preferences:` | Kernel memory preferences |
|
|
154
|
+
|
|
155
|
+
Every typed write must include provenance fields: `actor`, `reason`, and `source`.
|
|
156
|
+
|
|
157
|
+
### Post-Upgrade Smoke Verification
|
|
158
|
+
|
|
159
|
+
Run the repo smoke harness after upgrading:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
bash scripts/beads-upgrade-smoke.sh
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
The harness records a machine-readable summary at `.artifacts/beads-upgrade-smoke/summary.json` by default and exercises this sequence:
|
|
166
|
+
|
|
167
|
+
1. `bd create` primary smoke issue
|
|
168
|
+
2. `bd create` dependent smoke issue
|
|
169
|
+
3. `bd list --json --limit=0`
|
|
170
|
+
4. `bd show <id> --json`
|
|
171
|
+
5. `bd dep add <child> <parent>`
|
|
172
|
+
6. `bd close <id>` cleanup for both smoke issues
|
|
173
|
+
7. `bd sync` compatibility check
|
|
174
|
+
|
|
175
|
+
If any command fails, the summary captures `failedStep`, command output, and cleanup state. This is intentional: the harness does not silently substitute a different command for `bd sync`.
|
|
176
|
+
|
|
177
|
+
### Day-to-Day Commands
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Find work
|
|
181
|
+
forge ready
|
|
182
|
+
forge show <id>
|
|
183
|
+
forge claim <id>
|
|
184
|
+
|
|
185
|
+
# Issue operations
|
|
186
|
+
forge create "Title"
|
|
187
|
+
forge list
|
|
188
|
+
forge update <id> --priority 2
|
|
189
|
+
forge close <id>
|
|
190
|
+
|
|
191
|
+
# Direct beads operations
|
|
192
|
+
bd comments add <id> "Progress update"
|
|
193
|
+
bd dep add <child> <parent>
|
|
194
|
+
bd dep cycles
|
|
195
|
+
bd backup --force
|
|
196
|
+
bd dolt status
|
|
197
|
+
|
|
198
|
+
# Routine repo sync
|
|
199
|
+
forge sync
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Session Workflow
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Start of session
|
|
206
|
+
forge ready
|
|
207
|
+
forge show <id>
|
|
208
|
+
forge claim <id>
|
|
209
|
+
|
|
210
|
+
# During work
|
|
211
|
+
bd comments add <id> "Progress update"
|
|
212
|
+
forge update <id> --notes "Found edge case"
|
|
213
|
+
|
|
214
|
+
# End of session
|
|
215
|
+
forge close <id>
|
|
216
|
+
forge sync
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## MCP Servers
|
|
222
|
+
|
|
223
|
+
### Context7 - Library Documentation
|
|
224
|
+
|
|
225
|
+
**Package**: `@upstash/context7-mcp@2` (pin to major version, not `@latest`)
|
|
226
|
+
**Purpose**: Up-to-date documentation and code examples for any programming library
|
|
227
|
+
**Used in**: `/plan` stage (Phase 2 research); any library lookup
|
|
228
|
+
|
|
229
|
+
Context7 provides current documentation that may be more recent than the AI's training data.
|
|
230
|
+
|
|
231
|
+
**Installation**:
|
|
232
|
+
|
|
233
|
+
**Claude Code**: Add to `.mcp.json` in your project root:
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"mcpServers": {
|
|
239
|
+
"context7": {
|
|
240
|
+
"command": "bunx",
|
|
241
|
+
"args": ["--bun", "@upstash/context7-mcp@2"]
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Cursor**: Check Cursor Settings → MCP Servers for configuration options
|
|
248
|
+
|
|
249
|
+
**Other agents**: If your agent supports MCP, configure using the JSON format above
|
|
250
|
+
|
|
251
|
+
**Usage**:
|
|
252
|
+
```
|
|
253
|
+
# The AI will automatically use Context7 when you ask about libraries
|
|
254
|
+
"How do I use React Query's useMutation hook?"
|
|
255
|
+
"What's the latest Next.js App Router API?"
|
|
256
|
+
"Show me Supabase RLS policy examples"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**When to use Context7**:
|
|
260
|
+
- Before implementing a library feature
|
|
261
|
+
- When official docs may have changed since AI training
|
|
262
|
+
- To verify API signatures and patterns
|
|
263
|
+
- For current best practices
|
|
264
|
+
|
|
265
|
+
### grep.app - Code Search
|
|
266
|
+
|
|
267
|
+
**Package**: `@ai-tools-all/grep_app_mcp` (recommended) or `@galprz/grep-mcp`
|
|
268
|
+
**Website**: [grep.app](https://grep.app)
|
|
269
|
+
**Purpose**: Search across 1M+ public GitHub repositories for real-world code examples
|
|
270
|
+
**Used in**: `/plan` stage (Phase 2 research); finding implementation patterns
|
|
271
|
+
|
|
272
|
+
grep.app provides code search across public GitHub repositories to find real-world examples and patterns.
|
|
273
|
+
|
|
274
|
+
**Installation (Claude Code)**:
|
|
275
|
+
|
|
276
|
+
Add to `.mcp.json` in your project root:
|
|
277
|
+
|
|
278
|
+
```json
|
|
279
|
+
{
|
|
280
|
+
"mcpServers": {
|
|
281
|
+
"context7": {
|
|
282
|
+
"command": "bunx",
|
|
283
|
+
"args": ["--bun", "@upstash/context7-mcp@2"]
|
|
284
|
+
},
|
|
285
|
+
"grep-app": {
|
|
286
|
+
"command": "bunx",
|
|
287
|
+
"args": ["--bun", "@ai-tools-all/grep_app_mcp"]
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Usage**:
|
|
294
|
+
```
|
|
295
|
+
# The AI will use grep.app when you need real-world examples
|
|
296
|
+
"Find examples of React useEffect cleanup patterns"
|
|
297
|
+
"Show me how others implement JWT authentication in Express"
|
|
298
|
+
"Search for rate limiting implementations in Node.js"
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**When to use grep.app**:
|
|
302
|
+
|
|
303
|
+
- Finding real-world implementation examples
|
|
304
|
+
- Discovering coding patterns in production code
|
|
305
|
+
- Validating implementation approaches
|
|
306
|
+
- Learning from open source projects
|
|
307
|
+
|
|
308
|
+
**Context7 vs grep.app**:
|
|
309
|
+
|
|
310
|
+
| Tool | Purpose | Use When |
|
|
311
|
+
|----------------|--------------------------------|-------------------------------------------|
|
|
312
|
+
| **Context7** | Official library documentation | You need API reference, official patterns |
|
|
313
|
+
| **grep.app** | Real code in the wild | You want to see how others solve problems |
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## External Services
|
|
318
|
+
|
|
319
|
+
### Parallel AI - Web Research
|
|
320
|
+
|
|
321
|
+
**Website**: [platform.parallel.ai](https://platform.parallel.ai)
|
|
322
|
+
**Used in**: `/plan` stage (Phase 2 research)
|
|
323
|
+
|
|
324
|
+
4 APIs for research:
|
|
325
|
+
- **Search** - Web search with AI analysis
|
|
326
|
+
- **Extract** - Scrape specific URLs
|
|
327
|
+
- **Task** - Structured data enrichment
|
|
328
|
+
- **Deep Research** - Multi-source analysis
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
# Setup
|
|
332
|
+
# 1. Get key from https://platform.parallel.ai
|
|
333
|
+
# 2. Add to .env.local
|
|
334
|
+
PARALLEL_API_KEY=your-key
|
|
335
|
+
|
|
336
|
+
# Test
|
|
337
|
+
API_KEY=$(grep "^PARALLEL_API_KEY=" .env.local | cut -d= -f2)
|
|
338
|
+
curl -s -X POST "https://api.parallel.ai/v1beta/search" \
|
|
339
|
+
-H "x-api-key: $API_KEY" \
|
|
340
|
+
-H "Content-Type: application/json" \
|
|
341
|
+
-H "parallel-beta: search-extract-2025-10-10" \
|
|
342
|
+
-d '{"objective": "Next.js authentication best practices 2026"}'
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Code Review Tools
|
|
348
|
+
|
|
349
|
+
Choose ONE code review tool based on your needs:
|
|
350
|
+
|
|
351
|
+
| Tool | Pricing | Best For | Setup |
|
|
352
|
+
|------|---------|----------|-------|
|
|
353
|
+
| **GitHub Code Quality** | FREE | All GitHub repos | Built-in, zero setup |
|
|
354
|
+
| **CodeRabbit** | FREE (OSS) | Open source projects | GitHub App |
|
|
355
|
+
| **Greptile** | $99+/mo | Enterprise | API key |
|
|
356
|
+
|
|
357
|
+
### Option 1: GitHub Code Quality (FREE, Recommended)
|
|
358
|
+
|
|
359
|
+
**Status**: Built-in to GitHub
|
|
360
|
+
**Used in**: `/review` stage
|
|
361
|
+
|
|
362
|
+
Zero setup required - GitHub's code quality features are enabled by default.
|
|
363
|
+
|
|
364
|
+
Features:
|
|
365
|
+
- Automatic code scanning
|
|
366
|
+
- Dependency vulnerability alerts
|
|
367
|
+
- Secret scanning
|
|
368
|
+
- Code navigation
|
|
369
|
+
|
|
370
|
+
### Option 2: CodeRabbit (FREE for Open Source)
|
|
371
|
+
|
|
372
|
+
**Website**: [coderabbit.ai](https://coderabbit.ai)
|
|
373
|
+
**Used in**: `/review` stage
|
|
374
|
+
|
|
375
|
+
AI-powered code review with deep context understanding.
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
# Setup
|
|
379
|
+
# 1. Go to https://coderabbit.ai
|
|
380
|
+
# 2. Install the GitHub App
|
|
381
|
+
# 3. Enable for your repositories
|
|
382
|
+
|
|
383
|
+
# Configuration (optional)
|
|
384
|
+
# Create .coderabbit.yaml in repo root
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Option 3: Greptile (Paid - Enterprise)
|
|
388
|
+
|
|
389
|
+
**Website**: [greptile.com](https://greptile.com)
|
|
390
|
+
**Used in**: `/review` stage
|
|
391
|
+
|
|
392
|
+
Enterprise-grade AI code review that understands your codebase.
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
# Setup
|
|
396
|
+
# 1. Get key from https://app.greptile.com
|
|
397
|
+
# 2. Add to .env.local
|
|
398
|
+
GREPTILE_API_KEY=your-key
|
|
399
|
+
|
|
400
|
+
# 3. Index repository (one-time)
|
|
401
|
+
curl -X POST "https://api.greptile.com/v2/repositories" \
|
|
402
|
+
-H "Authorization: Bearer $GREPTILE_API_KEY" \
|
|
403
|
+
-H "Content-Type: application/json" \
|
|
404
|
+
-d '{"remote": "github", "repository": "owner/repo"}'
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Code Quality Tools
|
|
410
|
+
|
|
411
|
+
Choose ONE code quality scanner based on your needs:
|
|
412
|
+
|
|
413
|
+
| Tool | Pricing | Best For | Requirement |
|
|
414
|
+
|------|---------|----------|-------------|
|
|
415
|
+
| **ESLint** | FREE | All projects | Built-in |
|
|
416
|
+
| **SonarCloud** | 50k LoC free | Cloud-first teams | API key |
|
|
417
|
+
| **SonarQube Community** | FREE | Self-hosted, unlimited | Docker |
|
|
418
|
+
|
|
419
|
+
### Option 1: ESLint Only (FREE, Recommended)
|
|
420
|
+
|
|
421
|
+
**Status**: Built-in
|
|
422
|
+
**Used in**: `/validate` stage
|
|
423
|
+
|
|
424
|
+
No external server required - uses your project's linting configuration.
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
# Already configured via package.json or eslint.config.js
|
|
428
|
+
bun run lint
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Option 2: SonarCloud (Cloud-Hosted)
|
|
432
|
+
|
|
433
|
+
**Website**: [sonarcloud.io](https://sonarcloud.io)
|
|
434
|
+
**Used in**: `/validate` stage
|
|
435
|
+
**Free Tier**: 50,000 lines of code
|
|
436
|
+
|
|
437
|
+
Static analysis for bugs, vulnerabilities, code smells.
|
|
438
|
+
|
|
439
|
+
```bash
|
|
440
|
+
# Setup
|
|
441
|
+
# 1. Create project at https://sonarcloud.io
|
|
442
|
+
# 2. Get token from Security settings
|
|
443
|
+
# 3. Add to .env.local
|
|
444
|
+
SONAR_TOKEN=your-token
|
|
445
|
+
SONAR_ORGANIZATION=your-org
|
|
446
|
+
SONAR_PROJECT_KEY=your-project
|
|
447
|
+
|
|
448
|
+
# 4. Create sonar-project.properties
|
|
449
|
+
echo "sonar.organization=$SONAR_ORGANIZATION
|
|
450
|
+
sonar.projectKey=$SONAR_PROJECT_KEY
|
|
451
|
+
sonar.sources=src" > sonar-project.properties
|
|
452
|
+
|
|
453
|
+
# 5. Run analysis
|
|
454
|
+
bunx sonarqube-scanner
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Option 3: SonarQube Community (Self-Hosted, FREE)
|
|
458
|
+
|
|
459
|
+
**Website**: [sonarqube.org](https://www.sonarsource.com/products/sonarqube/)
|
|
460
|
+
**Used in**: `/validate` stage
|
|
461
|
+
**Pricing**: FREE, unlimited lines of code
|
|
462
|
+
|
|
463
|
+
Self-hosted code quality analysis - no cloud dependency.
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
# Setup with Docker
|
|
467
|
+
docker run -d --name sonarqube \
|
|
468
|
+
-p 9000:9000 \
|
|
469
|
+
sonarqube:community
|
|
470
|
+
|
|
471
|
+
# Access at http://localhost:9000
|
|
472
|
+
# Default credentials: admin/admin
|
|
473
|
+
|
|
474
|
+
# Add to .env.local
|
|
475
|
+
SONARQUBE_URL=http://localhost:9000
|
|
476
|
+
SONARQUBE_TOKEN=your-token # Generate in SonarQube UI
|
|
477
|
+
|
|
478
|
+
# Create sonar-project.properties
|
|
479
|
+
echo "sonar.host.url=$SONARQUBE_URL
|
|
480
|
+
sonar.login=$SONARQUBE_TOKEN
|
|
481
|
+
sonar.projectKey=your-project
|
|
482
|
+
sonar.sources=src" > sonar-project.properties
|
|
483
|
+
|
|
484
|
+
# Run analysis
|
|
485
|
+
bunx sonarqube-scanner
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
**Docker Compose (Production)**:
|
|
489
|
+
```yaml
|
|
490
|
+
# docker-compose.yml
|
|
491
|
+
version: '3'
|
|
492
|
+
services:
|
|
493
|
+
sonarqube:
|
|
494
|
+
image: sonarqube:community
|
|
495
|
+
ports:
|
|
496
|
+
- "9000:9000"
|
|
497
|
+
environment:
|
|
498
|
+
- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
|
|
499
|
+
volumes:
|
|
500
|
+
- sonarqube_data:/opt/sonarqube/data
|
|
501
|
+
- sonarqube_logs:/opt/sonarqube/logs
|
|
502
|
+
|
|
503
|
+
volumes:
|
|
504
|
+
sonarqube_data:
|
|
505
|
+
sonarqube_logs:
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
### GitHub CLI - PR Workflow
|
|
511
|
+
|
|
512
|
+
**Installation**: [cli.github.com](https://cli.github.com)
|
|
513
|
+
**Used in**: `/ship` and `/review` stages
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
# Install
|
|
517
|
+
# macOS: brew install gh
|
|
518
|
+
# Windows: winget install GitHub.cli
|
|
519
|
+
# Linux: sudo apt install gh
|
|
520
|
+
|
|
521
|
+
# Authenticate
|
|
522
|
+
gh auth login
|
|
523
|
+
|
|
524
|
+
# Common commands
|
|
525
|
+
gh pr create --title "..." --body "..."
|
|
526
|
+
gh pr view <number>
|
|
527
|
+
gh pr checks <number>
|
|
528
|
+
gh pr merge <number> --squash --delete-branch
|
|
529
|
+
gh issue create --title "..." --body "..."
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
## Global CLI Tools
|
|
535
|
+
|
|
536
|
+
### Beads (`bd`) — Minimum Version
|
|
537
|
+
|
|
538
|
+
**Recommended stable version**: `v1.0.0`
|
|
539
|
+
**Check installed version**:
|
|
540
|
+
```bash
|
|
541
|
+
bd --version
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
**Install / Update**:
|
|
545
|
+
```bash
|
|
546
|
+
# Recommended
|
|
547
|
+
bunx forge setup
|
|
548
|
+
|
|
549
|
+
# Windows — use PowerShell installer (npm has EPERM bug)
|
|
550
|
+
irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iex
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
> **Why Forge + Beads?** Forge wraps the supported day-to-day issue workflow
|
|
554
|
+
> (`forge ready`, `forge create`, `forge close`, `forge sync`). The kernel is the
|
|
555
|
+
> default underlying issue store for these commands; Beads is an opt-out backend
|
|
556
|
+
> for initialization, dependencies, comments, and Dolt-backed sync internals when
|
|
557
|
+
> selected. Backend selection precedence (highest first): the `--issue-backend`
|
|
558
|
+
> flag, then `FORGE_ISSUE_BACKEND`, then `.forge/config.yaml` (`issueBackend`),
|
|
559
|
+
> then the kernel default.
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## Default Workflow Template Mapping
|
|
564
|
+
|
|
565
|
+
This table maps tools to the default workflow template. It is not the complete Forge product model and it is not a requirement that every project use every stage.
|
|
566
|
+
|
|
567
|
+
| Stage | Tools Used |
|
|
568
|
+
|-------|------------|
|
|
569
|
+
| `/status` | `forge ready`, `forge list`, `git status` |
|
|
570
|
+
| `/plan` (Phase 2) | Parallel AI, Context7, grep.app, codebase exploration |
|
|
571
|
+
| `/plan` | `forge create`, `git checkout -b` |
|
|
572
|
+
| `/dev` | Tests, code, `forge update`, `/tasks save` |
|
|
573
|
+
| `/validate` | Type check, lint, tests, SonarCloud |
|
|
574
|
+
| `/ship` | `forge close`, `gh pr create` |
|
|
575
|
+
| `/review` | `gh pr view`, Greptile, SonarCloud |
|
|
576
|
+
| `/verify` | Documentation cross-check |
|
|
577
|
+
|
|
578
|
+
Pre-merge is not a stage. Its work (`forge sync`, doc updates, hand off PR) runs inside the `/ship` and `/review` stages as an embedded documentation-and-handoff gate.
|
|
579
|
+
|
|
580
|
+
---
|
|
581
|
+
|
|
582
|
+
## Quick Reference Card
|
|
583
|
+
|
|
584
|
+
### Beads (Issue Tracking)
|
|
585
|
+
|
|
586
|
+
```bash
|
|
587
|
+
bd init # Initialize
|
|
588
|
+
forge ready # Find unblocked work
|
|
589
|
+
forge create "Title" # Create issue
|
|
590
|
+
forge show <id> # View details
|
|
591
|
+
forge update <id> --status X # Update status
|
|
592
|
+
bd dep add <a> <b> # a depends on b
|
|
593
|
+
forge close <id> # Complete
|
|
594
|
+
forge sync # Routine repo sync
|
|
595
|
+
bash scripts/beads-migrate-to-dolt.sh
|
|
596
|
+
bash scripts/beads-upgrade-smoke.sh
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
### GitHub CLI
|
|
600
|
+
|
|
601
|
+
```bash
|
|
602
|
+
gh auth login # Authenticate
|
|
603
|
+
gh pr create # Create PR
|
|
604
|
+
gh pr view <n> # View PR
|
|
605
|
+
gh pr checks <n> # Check status
|
|
606
|
+
gh pr merge <n> --squash # Merge
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## Troubleshooting
|
|
612
|
+
|
|
613
|
+
### Beads
|
|
614
|
+
|
|
615
|
+
**"bd: command not found"**
|
|
616
|
+
```bash
|
|
617
|
+
# macOS / Linux
|
|
618
|
+
bun add -g @beads/bd
|
|
619
|
+
# Or use bunx @beads/bd <command>
|
|
620
|
+
|
|
621
|
+
# Windows — use PowerShell installer
|
|
622
|
+
irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iex
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
**Windows EPERM error during `npm install -g @beads/bd`**
|
|
626
|
+
```bash
|
|
627
|
+
# npm @beads/bd has a known EPERM bug on Windows (Issue #1031)
|
|
628
|
+
# Use the PowerShell installer instead:
|
|
629
|
+
irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iex
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
**"database locked"**
|
|
633
|
+
```bash
|
|
634
|
+
forge sync
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
**Issues not showing after git pull**
|
|
638
|
+
```bash
|
|
639
|
+
forge sync # Re-syncs Beads state through the Forge wrapper
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### GitHub CLI
|
|
643
|
+
|
|
644
|
+
**"gh: not authenticated"**
|
|
645
|
+
```bash
|
|
646
|
+
gh auth login
|
|
647
|
+
gh auth status
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
---
|
|
651
|
+
|
|
652
|
+
## Resources
|
|
653
|
+
|
|
654
|
+
- **Beads**: [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
|
|
655
|
+
- **Parallel AI**: [platform.parallel.ai](https://platform.parallel.ai)
|
|
656
|
+
- **Greptile**: [greptile.com](https://greptile.com)
|
|
657
|
+
- **SonarCloud**: [sonarcloud.io](https://sonarcloud.io)
|
|
658
|
+
- **GitHub CLI**: [cli.github.com](https://cli.github.com)
|