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,58 @@
|
|
|
1
|
+
# Manual Review Guide
|
|
2
|
+
|
|
3
|
+
Manual review remains required even when AI review tools are configured.
|
|
4
|
+
|
|
5
|
+
## Workflow Boundary
|
|
6
|
+
|
|
7
|
+
`/review` is an agent workflow stage. It is not currently documented as a standalone `forge review` CLI command. Use GitHub, `gh`, adapter tools, and the installed agent review skill for PR review work.
|
|
8
|
+
|
|
9
|
+
Default stage context:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
/plan -> /dev -> /validate -> /ship -> /review -> /verify
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
These are the 6 workflow stages. Pre-merge is not a stage or a `/premerge` command — it is a documentation-and-handoff gate embedded in `/ship` and `/review`.
|
|
16
|
+
|
|
17
|
+
## Review Inputs
|
|
18
|
+
|
|
19
|
+
Check all available inputs:
|
|
20
|
+
|
|
21
|
+
- GitHub Actions and required checks
|
|
22
|
+
- human review comments
|
|
23
|
+
- Greptile or other review-bot comments, when configured
|
|
24
|
+
- SonarCloud or code-scanning findings, when configured
|
|
25
|
+
- local validation evidence from `bun run check`
|
|
26
|
+
- design and task artifacts under `docs/work/YYYY-MM-DD-<slug>/`
|
|
27
|
+
|
|
28
|
+
## Checklist
|
|
29
|
+
|
|
30
|
+
- The PR description matches the diff.
|
|
31
|
+
- The change stays inside scope.
|
|
32
|
+
- User-facing commands are verified against current code.
|
|
33
|
+
- Security-sensitive claims are backed by code, tests, or configured CI.
|
|
34
|
+
- Tests or validation evidence match the risk of the change.
|
|
35
|
+
- Documentation changes do not present future roadmap work as ready now.
|
|
36
|
+
- Review threads are replied to and resolved where the platform supports it.
|
|
37
|
+
|
|
38
|
+
## Greptile
|
|
39
|
+
|
|
40
|
+
If Greptile is configured for the repository, use the repo's review-thread resolution script when available (it handles Greptile and any other review author):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
bash .claude/scripts/review-resolve.sh list <pr-number> --unresolved
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Then reply to each thread with the fix, rejection reason, or follow-up issue.
|
|
47
|
+
|
|
48
|
+
## Final State
|
|
49
|
+
|
|
50
|
+
Before calling review complete:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
gh pr checks <pr-number>
|
|
54
|
+
gh pr view <pr-number> --json reviews,comments,statusCheckRollup
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
All completed required checks should be passing, and unresolved comments should either be fixed or explicitly answered.
|
|
58
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Migration Guide
|
|
2
|
+
|
|
3
|
+
Use this guide when moving older Forge docs, habits, or installed scaffolding toward the v0.0.11 public framing.
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
Forge is now documented as a local runtime control plane for AI-assisted engineering. The TDD-first workflow is still the default template, but it is no longer the only public explanation of Forge.
|
|
8
|
+
|
|
9
|
+
## From Stage-Only Docs
|
|
10
|
+
|
|
11
|
+
Old docs often describe Forge as a fixed seven-, eight-, or nine-stage workflow. Replace that with:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
Default template: /plan -> /dev -> /validate -> /ship -> /review -> /verify
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
These are the 6 workflow stages. Pre-merge is not a stage or a `/premerge` command — it is a documentation-and-handoff gate embedded in `/ship` and `/review`. A composable `research` skill runs as a phase of `/plan` or standalone. Then add the boundary:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
These are agent workflow stages. Not every stage is a standalone forge CLI command.
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## From `forge setup` Only
|
|
24
|
+
|
|
25
|
+
Use both entry points correctly:
|
|
26
|
+
|
|
27
|
+
- `forge init` creates the `.forge/` adoption skeleton.
|
|
28
|
+
- `forge setup` installs agent instructions, skills, harness files, local Beads compatibility, and optional setup material.
|
|
29
|
+
- `forge setup --sync` is deprecated and retained only to remove old generated Beads/GitHub sync scaffolding when present.
|
|
30
|
+
|
|
31
|
+
## From Singular Agent Flags
|
|
32
|
+
|
|
33
|
+
Replace stale examples that use the old singular agent flag form with:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
forge setup --agents codex
|
|
37
|
+
forge setup --agents claude,cursor
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Version Labels
|
|
41
|
+
|
|
42
|
+
- `0.0.11` is the package version for this public docs/readiness release.
|
|
43
|
+
- `0.0.10` is the previous published package version.
|
|
44
|
+
- Internal labels such as `0.0.19` or `v3` describe roadmap slices or historical codenames. Do not present them as current package versions.
|
|
45
|
+
|
|
46
|
+
## Safe Upgrade Path
|
|
47
|
+
|
|
48
|
+
1. Update docs and examples first.
|
|
49
|
+
2. Run `bun run check`.
|
|
50
|
+
3. Run `npm pack --dry-run`.
|
|
51
|
+
4. Open a PR.
|
|
52
|
+
5. After merge, refresh DeepWiki and verify generated pages against repository docs.
|
|
53
|
+
|
|
54
|
+
## Rollback
|
|
55
|
+
|
|
56
|
+
If migration creates confusion, revert the release PR or open a corrective docs PR. Do not publish a package version unless README, CHANGELOG, quickstart, support docs, and package metadata agree.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide covers supported Forge adoption paths. Use [Quickstart](../../QUICKSTART.md) for the shortest path and [Support](SUPPORT.md) when setup fails.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Git
|
|
8
|
+
- Node.js and Bun
|
|
9
|
+
- GitHub CLI if using PR or sync workflows
|
|
10
|
+
- Optional: Beads (`bd`) as an opt-out issue backend (issue commands use the built-in kernel backend by default)
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
bun add -D forge-workflow
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The package exposes `forge`, `forge-workflow`, and `forge-preflight`.
|
|
19
|
+
|
|
20
|
+
`install.sh` is a thin bootstrapper. It installs or invokes `forge-workflow` and delegates setup to the package; it is not a separate implementation of setup behavior.
|
|
21
|
+
|
|
22
|
+
## Fresh Repository Runtime Skeleton
|
|
23
|
+
|
|
24
|
+
Use `forge init` when you want only the local `.forge/` adoption skeleton:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bunx forge init --profile minimal --classification standard --harness codex --yes
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Supported options:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
--profile minimal|standard|full
|
|
34
|
+
--classification critical|standard|refactor
|
|
35
|
+
--harness claude,cursor,codex
|
|
36
|
+
--yes
|
|
37
|
+
--force
|
|
38
|
+
--dry-run
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`forge init` creates `.forge/config.yaml`, `.forge/patch.md`, and `.forge/protected-paths.yaml`. It does not install agent instructions.
|
|
42
|
+
|
|
43
|
+
## Agent Setup
|
|
44
|
+
|
|
45
|
+
Use `forge setup` when you want agent-facing files:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
bunx forge setup --agents codex --yes
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Safe examples:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
bunx forge setup --agents claude,cursor
|
|
55
|
+
bunx forge setup --agents claude cursor
|
|
56
|
+
bunx forge setup --all --quick
|
|
57
|
+
bunx forge setup --path ./my-project --agents codex --dry-run
|
|
58
|
+
bunx forge setup --merge smart --agents claude,cursor
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Use `--agents`, not `--agent`.
|
|
62
|
+
|
|
63
|
+
## Agent Notes
|
|
64
|
+
|
|
65
|
+
Forge currently supports Claude Code, Codex, and Cursor. Hermes support is planned.
|
|
66
|
+
|
|
67
|
+
- Claude Code: installs `.claude/commands`, rules, and skills when selected.
|
|
68
|
+
- Cursor: installs Cursor rules and links back to `AGENTS.md`.
|
|
69
|
+
- Codex: uses `AGENTS.md` and may use Codex skills when installed.
|
|
70
|
+
|
|
71
|
+
Exact generated files depend on selected agents and existing repository files. Use `--dry-run` before applying setup to a mature repo.
|
|
72
|
+
|
|
73
|
+
## Issue Backend
|
|
74
|
+
|
|
75
|
+
Forge issue commands (`forge ready`, `forge show`, `forge claim`, `forge create`, `forge close`) use the built-in **kernel** backend by default. No install or initialization is required — a fresh clone can track issues immediately.
|
|
76
|
+
|
|
77
|
+
## Beads (Opt-Out Backend)
|
|
78
|
+
|
|
79
|
+
Beads (`bd`) is an optional opt-out backend for teams that prefer Dolt-backed sync internals. Select it (precedence, highest first) with `--issue-backend beads`, `FORGE_ISSUE_BACKEND=beads`, or `issueBackend: beads` in `.forge/config.yaml`; only then is `bd` required. Prefer the current Beads installer documented by Beads itself and this repo's toolchain docs. On Windows, avoid stale global install examples if they hit EPERM or shim issues; use the PowerShell installer path described in [Toolchain](../reference/TOOLCHAIN.md).
|
|
80
|
+
|
|
81
|
+
When Beads is selected, health checks:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
bd doctor
|
|
85
|
+
bd dolt status
|
|
86
|
+
forge sync
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
If a feature worktree reports `database "forge" not found on Dolt server`, diagnose in the root checkout before changing issue state. This applies only to the Beads backend.
|
|
90
|
+
|
|
91
|
+
## Deprecated GitHub Sync Cleanup
|
|
92
|
+
|
|
93
|
+
To remove old generated GitHub/Beads sync files from an existing install:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
bunx forge setup --sync
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`forge setup --sync` is deprecated. It now removes old generated Beads/GitHub sync files instead of creating new sync workflows. Future GitHub issue sync belongs to Forge Kernel/server authority, not Beads runtime files or metadata commits.
|
|
100
|
+
|
|
101
|
+
## Validate Setup
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
bunx forge status --json
|
|
105
|
+
bunx forge board --json
|
|
106
|
+
bun run check
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Troubleshooting
|
|
110
|
+
|
|
111
|
+
Use [Support and troubleshooting](SUPPORT.md) for:
|
|
112
|
+
|
|
113
|
+
- Beads/Dolt database errors
|
|
114
|
+
- Windows locked files
|
|
115
|
+
- protected-state blocks
|
|
116
|
+
- branch-protection push failures
|
|
117
|
+
- validation failures
|
|
118
|
+
- DeepWiki refresh drift
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# Support And Troubleshooting
|
|
2
|
+
|
|
3
|
+
Start here when Forge setup, Beads, protected state, GitHub sync, worktrees, validation, or release readiness fails.
|
|
4
|
+
|
|
5
|
+
## First Checks
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git status --short --branch
|
|
9
|
+
git remote show origin
|
|
10
|
+
bun --version
|
|
11
|
+
node --version
|
|
12
|
+
bun run check
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
If the failure involves Beads:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
bd doctor
|
|
19
|
+
bd dolt status
|
|
20
|
+
forge sync
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If `forge` wrappers fail because Beads is unavailable, use direct `git`, `gh`, and `bd` commands only after identifying the source of truth.
|
|
24
|
+
|
|
25
|
+
For branch-specific checks, resolve the default branch first:
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
$defaultBranch = git remote show origin | Select-String 'HEAD branch' | ForEach-Object { $_.ToString().Split(':')[-1].Trim() }
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## FAQ
|
|
32
|
+
|
|
33
|
+
### Is DeepWiki the source of truth?
|
|
34
|
+
|
|
35
|
+
No. DeepWiki is generated from the repository. Fix README, CHANGELOG, quickstart, docs, CLI files, and tests first, then refresh DeepWiki.
|
|
36
|
+
|
|
37
|
+
### Is Forge only the seven-stage TDD workflow?
|
|
38
|
+
|
|
39
|
+
No. The default template is TDD-first, but Forge is a runtime control plane with local state, gates, adapters, issue wrappers, validation evidence, and recovery surfaces.
|
|
40
|
+
|
|
41
|
+
### Are `/review` and `/verify` CLI commands?
|
|
42
|
+
|
|
43
|
+
They are agent workflow stages. Do not document them as `forge review` or `forge verify` unless those CLI commands exist in the current code.
|
|
44
|
+
|
|
45
|
+
### Does protected state always block edits?
|
|
46
|
+
|
|
47
|
+
Only when `scripts/protected-state-check.js` is wired into the active hook or CI path. The model is real, but enforcement depends on configuration.
|
|
48
|
+
|
|
49
|
+
### Can agents publish releases?
|
|
50
|
+
|
|
51
|
+
Agents can prepare a release PR and validation evidence. Publishing is out of scope unless the user explicitly requests it.
|
|
52
|
+
|
|
53
|
+
## Beads And Dolt Recovery
|
|
54
|
+
|
|
55
|
+
Common errors:
|
|
56
|
+
|
|
57
|
+
- `Beads is not initialized in this project.`
|
|
58
|
+
- `database "forge" not found on Dolt server`
|
|
59
|
+
- `database locked`
|
|
60
|
+
- stale `.beads/backup` data
|
|
61
|
+
- Windows EPERM or locked files during worktree cleanup
|
|
62
|
+
|
|
63
|
+
Triage:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
bd doctor
|
|
67
|
+
bd dolt status
|
|
68
|
+
bd dolt pull
|
|
69
|
+
bd dolt push
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
If the Dolt server is serving the wrong database or data directory, stop and diagnose before closing or rewriting issue state. Use the root checkout when the feature worktree has an incomplete `.beads` runtime.
|
|
73
|
+
|
|
74
|
+
Recovery guidance:
|
|
75
|
+
|
|
76
|
+
- Preserve current state first: copy `.beads/backup` or export a Beads backup if the command is available.
|
|
77
|
+
- Prefer `forge sync` when Beads is configured and healthy.
|
|
78
|
+
- Use `bd close`, `bd comments`, or `bd dep` directly only for operations Forge does not wrap or when wrappers fail.
|
|
79
|
+
- Do not create follow-up PRs just to commit Beads runtime metadata. `.beads/` is local non-versioned state; shared state must flow through the configured sync/server authority or an explicit projection/import path.
|
|
80
|
+
- Do not hand-edit `.beads` live state unless a recovery procedure explicitly requires it.
|
|
81
|
+
- Success proof is concrete: `bd doctor` exits cleanly, `bd dolt status` is understandable, and `forge ready` or `forge show <id>` can read current issue state.
|
|
82
|
+
|
|
83
|
+
## GitHub Sync
|
|
84
|
+
|
|
85
|
+
`forge setup --sync` is deprecated and removes old generated GitHub/Beads sync scaffolding. `forge sync` still runs local Beads/Dolt sync operations when configured. Future GitHub issue sync belongs to Forge Kernel/server authority.
|
|
86
|
+
|
|
87
|
+
Modern sync should use snapshot, backup, server authority, or explicit projection files, not stale examples that edit or commit live `.beads/issues.jsonl` directly.
|
|
88
|
+
|
|
89
|
+
When sync fails:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
gh auth status
|
|
93
|
+
bd doctor
|
|
94
|
+
bd dolt status
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```powershell
|
|
98
|
+
gh run list --branch $defaultBranch --limit 10
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Check whether GitHub owns the field you are trying to update. GitHub owns shared remote issue fields; Forge/Beads owns local workflow context and recovery metadata.
|
|
102
|
+
|
|
103
|
+
## Worktrees
|
|
104
|
+
|
|
105
|
+
Create isolated work:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
forge worktree create <slug> --branch <branch-name>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Remove it:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
forge worktree remove <slug>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
If removal fails on Windows:
|
|
118
|
+
|
|
119
|
+
1. Stop any active `node`, `bun`, `gh`, or Dolt process using the worktree.
|
|
120
|
+
2. Run `git worktree list`.
|
|
121
|
+
3. Prove the branch is preserved: `git status --short --branch` and `git log --oneline -1`.
|
|
122
|
+
4. Retry `forge worktree remove <slug>`.
|
|
123
|
+
5. If Git already unregistered the worktree but files remain locked, wait for the process to exit before deleting the leftover directory.
|
|
124
|
+
|
|
125
|
+
Never delete a worktree before verifying that its branch is pushed or intentionally disposable.
|
|
126
|
+
|
|
127
|
+
## Branch Protection
|
|
128
|
+
|
|
129
|
+
Branch protection can reject direct pushes to `master` or `main` with `GH006`. That is expected for code changes.
|
|
130
|
+
|
|
131
|
+
Beads runtime metadata is not a branch-protection exception. If shared state is required, use the configured sync/server authority or an explicit projection/import path; do not open metadata-only PRs for live `.beads/` files.
|
|
132
|
+
|
|
133
|
+
Recovery:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
git status --short --branch
|
|
137
|
+
gh pr checks <pr-number>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
```powershell
|
|
141
|
+
git fetch origin $defaultBranch
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
If shared metadata cannot sync, diagnose the sync/server authority path instead of pushing live `.beads/` state to the protected branch.
|
|
145
|
+
|
|
146
|
+
## Rollback And Recovery Paths
|
|
147
|
+
|
|
148
|
+
Choose the rollback path by surface:
|
|
149
|
+
|
|
150
|
+
- Release documentation confusion: revert the release PR or open a corrective docs PR. Do not publish while README, CHANGELOG, Quickstart, package metadata, and release docs disagree.
|
|
151
|
+
- Setup-generated files: rerun `forge setup --dry-run` first, then rerun setup with the intended `--merge` mode. Preserve existing instruction files before replacing them.
|
|
152
|
+
- Beads metadata: prefer `forge sync`, server authority, or explicit projection/import paths. Avoid direct `.beads` edits unless a documented recovery path requires them.
|
|
153
|
+
- Failed GitHub sync commit: inspect the workflow run, preserve the generated backup or snapshot, then replay through the configured sync workflow or a follow-up branch.
|
|
154
|
+
- Worktree cleanup: prove the branch is pushed or disposable before removal, then remove through `forge worktree remove <slug>` or Git's worktree command if Forge is unavailable.
|
|
155
|
+
|
|
156
|
+
## Protected State
|
|
157
|
+
|
|
158
|
+
Protected surfaces include `.beads`, `.forge`, generated agent harness files, workflows, lockfiles, extension manifests, secrets, immutable Git internals, and append-only logs.
|
|
159
|
+
|
|
160
|
+
If a protected-state check blocks a file:
|
|
161
|
+
|
|
162
|
+
1. Read the repair hint.
|
|
163
|
+
2. Use the owning command or API surface.
|
|
164
|
+
3. For Forge-owned writes, set `FORGE_PROTECTED_STATE_ALLOWED_SURFACES` only for the surfaces that command owns.
|
|
165
|
+
4. For Beads metadata after merge, keep `.beads/` local and diagnose the sync/server authority path when shared state is required.
|
|
166
|
+
|
|
167
|
+
## Validation Failures
|
|
168
|
+
|
|
169
|
+
`bun run check` runs:
|
|
170
|
+
|
|
171
|
+
1. `bun run typecheck`
|
|
172
|
+
2. `bun run lint`
|
|
173
|
+
3. `bun audit`
|
|
174
|
+
4. `node scripts/test.js --validate`
|
|
175
|
+
|
|
176
|
+
Fix the first failing stage first. Do not hide a validation failure by documenting that it "should pass"; rerun the command and record the fresh result.
|
|
177
|
+
|
|
178
|
+
## Known Limitations
|
|
179
|
+
|
|
180
|
+
- Package version remains separate from docs readiness until release/publish occurs.
|
|
181
|
+
- `forge migrate` is dry-run only.
|
|
182
|
+
- Protected-state enforcement depends on hooks/CI wiring.
|
|
183
|
+
- Review adapters currently focus on review adapters and Greptile-shaped scaffolding.
|
|
184
|
+
- DeepWiki can lag after merge until refreshed.
|
|
185
|
+
- Some external services require credentials and branch protection setup outside Forge.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Workflow Templates
|
|
2
|
+
|
|
3
|
+
Forge's workflow is a core product surface, not a side note. The default template gives agents a known path for planning, development, validation, shipping, review, and post-merge verification, with a pre-merge documentation gate that finishes docs and hands off the PR inside the ship and review stages.
|
|
4
|
+
|
|
5
|
+
## Default Template
|
|
6
|
+
|
|
7
|
+
The full default template is:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
/plan -> /dev -> /validate -> /ship -> /review -> /verify
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Projects can use the full template or smaller profile-specific paths. The important boundary is that these are agent workflow stages, not necessarily standalone `forge <stage>` CLI commands.
|
|
14
|
+
|
|
15
|
+
## Why It Matters
|
|
16
|
+
|
|
17
|
+
The template gives AI-assisted work a repeatable operating model:
|
|
18
|
+
|
|
19
|
+
- `/plan` captures intent, research, branch/worktree setup, and tasks.
|
|
20
|
+
- `/dev` implements through a TDD-oriented loop.
|
|
21
|
+
- `/validate` gathers evidence from project checks.
|
|
22
|
+
- `/ship` prepares a reviewable PR.
|
|
23
|
+
- `/review` handles PR feedback and evaluator findings.
|
|
24
|
+
- `/verify` proves post-merge health when the workflow type requires it.
|
|
25
|
+
|
|
26
|
+
Before merge, a pre-merge documentation gate finishes documentation and handoff context. It is not a numbered stage or a `/premerge` command; it runs inside the `/ship` and `/review` stages.
|
|
27
|
+
|
|
28
|
+
The value is not the exact number of stages. The value is recoverable state, known handoff points, validation evidence, and clear ownership while agents work.
|
|
29
|
+
|
|
30
|
+
## Customization Model
|
|
31
|
+
|
|
32
|
+
Forge treats the default workflow as a configurable template over runtime building blocks:
|
|
33
|
+
|
|
34
|
+
- stages can be skipped or shortened by workflow type,
|
|
35
|
+
- project setup can choose different harness targets,
|
|
36
|
+
- `.forge/config.yaml` records adoption profile and harness choices,
|
|
37
|
+
- `forge options lint`, `forge options diff`, and `forge options stages` inspect the resolved config,
|
|
38
|
+
- future work can add or replace stages through skills, adapters, and extension manifests.
|
|
39
|
+
|
|
40
|
+
Customization should stay explicit. Do not silently remove validation, review, or state handoff steps from high-risk work.
|
|
41
|
+
|
|
42
|
+
## Workflow Types
|
|
43
|
+
|
|
44
|
+
Current docs describe these profiles:
|
|
45
|
+
|
|
46
|
+
| Type | Intended use | Typical path |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| Critical | Security, auth, payments, migrations, breaking changes | Full template |
|
|
49
|
+
| Standard | Normal features and enhancements | Plan through review |
|
|
50
|
+
| Simple | Small fixes and focused changes | Shorter dev, validate, ship path |
|
|
51
|
+
| Hotfix | Production emergencies | Short path with urgent validation |
|
|
52
|
+
| Docs | Documentation-only changes | Verify and ship |
|
|
53
|
+
| Refactor | Behavior-preserving cleanup | Plan, dev, validate, ship |
|
|
54
|
+
|
|
55
|
+
Profile docs must be checked against `lib/workflow-profiles.js` and `AGENTS.md` before release because command files, skills, and runtime profiles can drift.
|
|
56
|
+
|
|
57
|
+
## Skills Direction
|
|
58
|
+
|
|
59
|
+
Forge is moving toward skills as the portable agent-facing package format. Current v0.0.11 packaging still includes command projections for several agents, and Codex already receives stage workflows as `.codex/skills/<stage>/SKILL.md`.
|
|
60
|
+
|
|
61
|
+
See [Skills and command projections](../reference/SKILLS.md) for the current source-of-truth boundary.
|
|
62
|
+
|
|
63
|
+
## Live Feature Rollout
|
|
64
|
+
|
|
65
|
+
When a planned feature becomes real, update docs in this order:
|
|
66
|
+
|
|
67
|
+
1. Verify the code, tests, package contents, and CLI output.
|
|
68
|
+
2. Move the feature from roadmap or experimental docs into ready-now docs.
|
|
69
|
+
3. Update README, Quickstart, this guide, and the relevant reference page.
|
|
70
|
+
4. Add migration or support notes if the feature changes setup, state, validation, or workflow behavior.
|
|
71
|
+
5. Refresh DeepWiki after merge and record the generated index date and commit.
|
|
72
|
+
|
|
73
|
+
Do not document future workflow customization as ready-now until the command, skill, or runtime surface exists and has validation evidence.
|
|
74
|
+
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Forge Memory
|
|
2
|
+
|
|
3
|
+
Forge gives agents **durable project memory** through two verbs:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
forge remember "<note>" [--tag <label>]... # write a lasting fact
|
|
7
|
+
forge recall "[query]" [--limit N] # read it back
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Both route through a small **backend router** (`lib/memory/router.js`). The
|
|
11
|
+
backend is chosen by `memory.backend` in `.forge/config.yaml`:
|
|
12
|
+
|
|
13
|
+
| Backend | Storage | Needs | When |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| **`local`** (default) | kernel `kernel_memories` table, FTS5-indexed | nothing — offline, instant | always the floor |
|
|
16
|
+
| **`graphiti`** _(experimental)_ | temporal **knowledge graph** over MCP | graph DB + LLM | evolving, relational, temporal recall |
|
|
17
|
+
|
|
18
|
+
`local` and `graphiti` are the only public `memory.backend` values.
|
|
19
|
+
|
|
20
|
+
> **The local backend is the default and the guaranteed offline floor.** You do
|
|
21
|
+
> not need to configure anything to use `forge remember` / `forge recall`. The
|
|
22
|
+
> Graphiti backend is strictly **opt-in** and never changes the default path.
|
|
23
|
+
>
|
|
24
|
+
> **`graphiti` is experimental — its runtime emitter is not yet shipped.**
|
|
25
|
+
> Selecting it today still writes the local kernel floor (the graph emit is a
|
|
26
|
+
> best-effort no-op), so `recall` always reads back from the kernel. The config
|
|
27
|
+
> and `forge doctor` reachability checks work; the write-through emit is a
|
|
28
|
+
> fast-follow.
|
|
29
|
+
|
|
30
|
+
Precedence for selecting the backend:
|
|
31
|
+
`FORGE_MEMORY_BACKEND` env → `memory.backend` in config → `local`.
|
|
32
|
+
|
|
33
|
+
Check the active backend any time:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
forge doctor # reports the memory backend (+ graphiti reachability, non-fatal)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Local (default) — nothing to set up
|
|
40
|
+
|
|
41
|
+
Notes persist to the kernel `kernel_memories` table (the per-repo Forge Kernel
|
|
42
|
+
SQLite store under `.git/forge/`), indexed by **FTS5** for token-AND BM25 recall.
|
|
43
|
+
No services, no network, no keys. This is what ships and what most projects
|
|
44
|
+
should use. `recall` with no query returns the newest notes plus a total count;
|
|
45
|
+
a query does full-text BM25 matching (every token must appear, in any order). The
|
|
46
|
+
same kernel table also holds what `forge insights` learns; those records are
|
|
47
|
+
recallable with a query or `--all` (the default no-query listing shows only your
|
|
48
|
+
`remember` notes). (An older flat `.forge/memory/notes.jsonl` is imported once on
|
|
49
|
+
first use, then retired.)
|
|
50
|
+
|
|
51
|
+
## Opt into Graphiti (knowledge-graph memory)
|
|
52
|
+
|
|
53
|
+
[Graphiti](https://github.com/getzep/graphiti) (getzep/graphiti) is a Python
|
|
54
|
+
framework that turns notes ("episodes") into a **bi-temporal knowledge graph**:
|
|
55
|
+
an LLM extracts entities and facts, every fact carries two timelines (when it
|
|
56
|
+
was true in the world, and when the system learned it), and superseded facts are
|
|
57
|
+
**invalidated, not deleted** — so you can query "what is true now" or "what was
|
|
58
|
+
true at time T", with a pointer back to the source (provenance). It is served to
|
|
59
|
+
any MCP agent through Graphiti's **MCP server**; Forge only wires it in.
|
|
60
|
+
|
|
61
|
+
Forge does **not** bundle or reimplement Graphiti. Forge ships the config +
|
|
62
|
+
router seam and documents how to run Graphiti; when `memory.backend` resolves to
|
|
63
|
+
`graphiti` (and the config passes the same validity check `forge doctor` uses),
|
|
64
|
+
**`forge setup` automatically writes the MCP server entry** into `.mcp.json`
|
|
65
|
+
(Claude) and `.cursor/mcp.json` (Cursor) from the descriptor in
|
|
66
|
+
`lib/memory/graphiti-mcp.js`. For other harnesses (e.g. Codex `config.toml`) you
|
|
67
|
+
add the server entry yourself (template below). Design rationale and trade-offs:
|
|
68
|
+
[`docs/work/2026-07-06-graphiti-memory/research.md`](../work/2026-07-06-graphiti-memory/research.md).
|
|
69
|
+
|
|
70
|
+
### 1. Turn it on (config)
|
|
71
|
+
|
|
72
|
+
Set the backend in `.forge/config.yaml` — additive and reversible:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
memory:
|
|
76
|
+
backend: graphiti
|
|
77
|
+
graphiti:
|
|
78
|
+
# --- active today (validated by the router / forge doctor) ---
|
|
79
|
+
transport: stdio # stdio | http
|
|
80
|
+
mcpServerPath: ./graphiti/mcp_server # required — path to the Graphiti checkout's mcp_server dir
|
|
81
|
+
graphDb: falkordb # falkordb | falkordb-lite | neo4j
|
|
82
|
+
apiKeyEnv: OPENAI_API_KEY # referenced by NAME — never store the key here
|
|
83
|
+
# --- reserved: NO EFFECT yet (the descriptor emits ${VAR} env references, not these values) ---
|
|
84
|
+
dbUri: redis://localhost:6379
|
|
85
|
+
llmProvider: openai
|
|
86
|
+
model: gpt-5.5
|
|
87
|
+
groupId: <your-project>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Only `mcpServerPath` is required today (it's what `forge doctor` checks and what
|
|
91
|
+
the descriptor threads into the launch args). The keys under "reserved" still
|
|
92
|
+
have no effect — the rendered entry references env vars (`${VAR}`), not these
|
|
93
|
+
literal values — set them now only if you like, they are no-ops until a renderer
|
|
94
|
+
consumes them.
|
|
95
|
+
|
|
96
|
+
Forge exposes the MCP server as a harness-agnostic **descriptor** (see
|
|
97
|
+
`lib/memory/graphiti-mcp.js`, `buildGraphitiServerDescriptor`) and `forge setup`
|
|
98
|
+
wires it into the right place for Claude (`.mcp.json`) and Cursor
|
|
99
|
+
(`.cursor/mcp.json`), preserving any servers you already have there. Codex
|
|
100
|
+
(`config.toml`) is not auto-wired yet. The descriptor's env values are `${VAR}`
|
|
101
|
+
references only — Forge never writes a secret into any committed config. The
|
|
102
|
+
rendered entry looks like:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
"graphiti-memory": {
|
|
106
|
+
"transport": "stdio",
|
|
107
|
+
"command": "uv",
|
|
108
|
+
"args": ["run","--isolated","--directory","./graphiti/mcp_server",
|
|
109
|
+
"--project",".","main.py","--transport","stdio"],
|
|
110
|
+
"env": {
|
|
111
|
+
"FALKORDB_URI": "${FALKORDB_URI}",
|
|
112
|
+
"OPENAI_API_KEY": "${OPENAI_API_KEY}",
|
|
113
|
+
"MODEL_NAME": "${MODEL_NAME}",
|
|
114
|
+
"GROUP_ID": "${GRAPHITI_GROUP_ID}"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 2. Run the graph DB + MCP server
|
|
120
|
+
|
|
121
|
+
Graphiti needs a **graph database** and an **LLM/embedder**. The documented
|
|
122
|
+
default is **FalkorDB** (a light, Redis-based graph DB via Docker) with an
|
|
123
|
+
OpenAI-compatible model. Roughly:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# a) graph DB (FalkorDB) — or run the Graphiti combined Docker Compose
|
|
127
|
+
docker run -p 6379:6379 -it --rm falkordb/falkordb:latest
|
|
128
|
+
|
|
129
|
+
# b) the Graphiti MCP server (from a graphiti checkout)
|
|
130
|
+
git clone https://github.com/getzep/graphiti
|
|
131
|
+
cd graphiti/mcp_server
|
|
132
|
+
export OPENAI_API_KEY=sk-... # or point at an OpenAI-compatible endpoint
|
|
133
|
+
uv run --isolated --directory . --project . main.py --transport stdio
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Set `memory.graphiti.mcpServerPath` in `.forge/config.yaml` to the checkout's
|
|
137
|
+
`mcp_server` directory so `forge doctor` can see it.
|
|
138
|
+
|
|
139
|
+
**Alternatives** (all documented in the design doc):
|
|
140
|
+
|
|
141
|
+
- **Graph DB:** FalkorDB (Docker, default) · FalkorDB-lite (embedded, Python
|
|
142
|
+
3.12+, no server) · Neo4j (production). Set `memory.graphiti.graphDb` +
|
|
143
|
+
`dbUri` accordingly (Neo4j uses `NEO4J_URI` plus `NEO4J_USER` and
|
|
144
|
+
`NEO4J_PASSWORD`).
|
|
145
|
+
- **LLM/embedder:** OpenAI (best quality) · any OpenAI-compatible endpoint
|
|
146
|
+
(OpenRouter, DeepSeek, Together) · **Ollama** for a fully local/offline stack
|
|
147
|
+
(`ollama pull deepseek-r1:7b` + `ollama pull nomic-embed-text`). Set
|
|
148
|
+
`memory.graphiti.llmProvider` / `model` / `apiKeyEnv`.
|
|
149
|
+
|
|
150
|
+
### 3. Use it
|
|
151
|
+
|
|
152
|
+
Once wired, **agents** call the graph directly over MCP:
|
|
153
|
+
|
|
154
|
+
- `add_memory` — record a durable fact/decision as an episode (scope with
|
|
155
|
+
`group_id`). Ingestion is LLM-backed, so treat writes as async.
|
|
156
|
+
- `search_memory_facts` — retrieve facts/edges (with validity windows) before
|
|
157
|
+
assuming.
|
|
158
|
+
- `search_nodes` — find entities and summaries.
|
|
159
|
+
|
|
160
|
+
The **`memory` skill** ([`skills/memory/SKILL.md`](../../skills/memory/SKILL.md))
|
|
161
|
+
teaches agents when and how to use these. `forge remember` / `forge recall` keep
|
|
162
|
+
working from the CLI — when the graph backend is selected they still write to the
|
|
163
|
+
local kernel store as a safety floor, so a note is never lost.
|
|
164
|
+
|
|
165
|
+
## Privacy & cost (read before enabling)
|
|
166
|
+
|
|
167
|
+
- **Privacy:** with an LLM provider like OpenAI, **every note you add as an
|
|
168
|
+
episode is sent to that LLM** for entity/fact extraction. For private dev
|
|
169
|
+
notes this matters — use the Ollama/local path if that is a concern.
|
|
170
|
+
- **Cost + latency:** `add_memory` fires **multiple LLM calls** per episode, so
|
|
171
|
+
writes are billable and take from sub-second to a couple of seconds. Prefer
|
|
172
|
+
async ingest; retrieval is cheap.
|
|
173
|
+
- **Ops:** you run and maintain a graph DB + the (experimental) Graphiti MCP
|
|
174
|
+
server. This is a real jump from "write a note to the local kernel store" —
|
|
175
|
+
which is exactly why it is opt-in and the local backend stays the default.
|
|
176
|
+
|
|
177
|
+
## Turning it off
|
|
178
|
+
|
|
179
|
+
Remove `memory.backend` (and the `memory.graphiti` block) from
|
|
180
|
+
`.forge/config.yaml` — the router falls straight back to `local`. Your local
|
|
181
|
+
kernel notes were never touched. If a `graphiti-memory` entry is in your agent's
|
|
182
|
+
MCP config — whether `forge setup` wrote it when you enabled Graphiti, or you
|
|
183
|
+
added it by hand — delete it too.
|