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
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
# GitHub <-> Beads Issue Sync
|
|
2
|
-
|
|
3
|
-
Automatic synchronization between GitHub Issues and Beads issue tracking.
|
|
4
|
-
|
|
5
|
-
**GitHub Issues** = human/team/public interface.
|
|
6
|
-
**Beads** = issue engine behind Forge (`forge ready`, `forge close`).
|
|
7
|
-
|
|
8
|
-
Neither side needs to know about the other. Contributors file issues on GitHub; AI agents pick up work via Beads. Status changes propagate automatically.
|
|
9
|
-
|
|
10
|
-
For human and agent workflows, prefer the Forge wrapper commands (`forge ready`,
|
|
11
|
-
`forge create`, `forge close`, `forge sync`). The workflow automation shown below
|
|
12
|
-
still calls `bd` directly as an internal implementation detail.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Architecture
|
|
17
|
-
|
|
18
|
-
### Phase 1: GitHub -> Beads (CI-driven)
|
|
19
|
-
|
|
20
|
-
```mermaid
|
|
21
|
-
sequenceDiagram
|
|
22
|
-
participant U as User
|
|
23
|
-
participant GH as GitHub Issues
|
|
24
|
-
participant WF as GitHub Actions
|
|
25
|
-
participant BD as Beads CLI
|
|
26
|
-
participant Repo as .beads/ + mapping
|
|
27
|
-
|
|
28
|
-
U->>GH: Opens issue #42
|
|
29
|
-
GH->>WF: issues.opened trigger
|
|
30
|
-
WF->>WF: Guard checks (bot? skip label? no-beads?)
|
|
31
|
-
WF->>WF: Idempotency check (existing bot comment?)
|
|
32
|
-
WF->>BD: bd create --title "..." --type bug --priority 1
|
|
33
|
-
BD->>Repo: Write .beads/issues.jsonl
|
|
34
|
-
WF->>Repo: Write .github/beads-mapping.json {"42": "forge-abc"}
|
|
35
|
-
WF->>GH: Post bot comment <!-- beads-sync:42 -->
|
|
36
|
-
WF->>Repo: git commit + push
|
|
37
|
-
|
|
38
|
-
U->>GH: Closes issue #42
|
|
39
|
-
GH->>WF: issues.closed trigger
|
|
40
|
-
WF->>Repo: Read mapping: "42" -> "forge-abc"
|
|
41
|
-
WF->>BD: bd close forge-abc --reason "Closed via GitHub #42"
|
|
42
|
-
WF->>Repo: git commit + push
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Phase 2: Beads -> GitHub (push-triggered)
|
|
46
|
-
|
|
47
|
-
```mermaid
|
|
48
|
-
sequenceDiagram
|
|
49
|
-
participant AI as AI Agent
|
|
50
|
-
participant BD as Beads CLI
|
|
51
|
-
participant Repo as .beads/
|
|
52
|
-
participant WF as GitHub Actions
|
|
53
|
-
participant GH as GitHub Issues
|
|
54
|
-
|
|
55
|
-
AI->>BD: forge close forge-abc
|
|
56
|
-
BD->>Repo: Update issues.jsonl
|
|
57
|
-
AI->>Repo: git push
|
|
58
|
-
Repo->>WF: push trigger (paths: .beads/**)
|
|
59
|
-
WF->>WF: Guard: skip if commit msg starts with "chore(beads):"
|
|
60
|
-
WF->>Repo: Diff issues.jsonl for closed transitions
|
|
61
|
-
WF->>GH: gh api PATCH /issues/42 state=closed
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Loop Prevention
|
|
65
|
-
|
|
66
|
-
Three guards prevent infinite ping-pong:
|
|
67
|
-
|
|
68
|
-
1. **Bot detection** -- workflows skip events from `github-actions[bot]`
|
|
69
|
-
2. **Commit message prefix** -- Phase 2 workflow skips commits starting with `chore(beads):`
|
|
70
|
-
3. **Opt-out label** -- `skip-beads-sync` label on any issue disables sync entirely
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Setup
|
|
75
|
-
|
|
76
|
-
### Via Forge Setup (recommended)
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
bunx forge setup
|
|
80
|
-
# During interactive prompts:
|
|
81
|
-
# "Enable GitHub <-> Beads sync? (y/n)" -> y
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
This scaffolds:
|
|
85
|
-
- `.github/workflows/github-to-beads.yml`
|
|
86
|
-
- `.github/workflows/beads-to-github.yml` (Phase 2)
|
|
87
|
-
- `.github/beads-mapping.json`
|
|
88
|
-
- `scripts/github-beads-sync/` (Node modules)
|
|
89
|
-
- `scripts/github-beads-sync.config.json`
|
|
90
|
-
|
|
91
|
-
### Manual Setup
|
|
92
|
-
|
|
93
|
-
1. Copy workflow files from `templates/` into `.github/workflows/`
|
|
94
|
-
2. Copy `scripts/github-beads-sync/` and `scripts/github-beads-sync.config.json`
|
|
95
|
-
3. Create `.github/beads-mapping.json` with `{}`
|
|
96
|
-
4. Ensure Beads is initialized: `bd init`
|
|
97
|
-
5. Commit and push to enable the workflows
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Configuration Reference
|
|
102
|
-
|
|
103
|
-
All settings live in `scripts/github-beads-sync.config.json`.
|
|
104
|
-
|
|
105
|
-
### Label and Type Mapping
|
|
106
|
-
|
|
107
|
-
| Field | Type | Default | Description |
|
|
108
|
-
|-------|------|---------|-------------|
|
|
109
|
-
| `labelToType` | `object` | `{"bug":"bug", "enhancement":"feature", "documentation":"task", "question":"task"}` | Maps GitHub labels to Beads issue types. First matching label wins. |
|
|
110
|
-
| `labelToPriority` | `object` | `{"P0":0, "critical":0, "P1":1, "high":1, "P2":2, "medium":2, "P3":3, "low":3, "P4":4, "backlog":4}` | Maps GitHub labels to Beads priority levels (0-4). First matching label wins. |
|
|
111
|
-
| `defaultType` | `string` | `"task"` | Beads type when no label matches `labelToType`. |
|
|
112
|
-
| `defaultPriority` | `number` | `2` | Beads priority when no label matches `labelToPriority`. |
|
|
113
|
-
| `mapAssignee` | `boolean` | `true` | Whether to copy GitHub assignee to Beads issue on creation. |
|
|
114
|
-
|
|
115
|
-
### Security Gates (Public Repos)
|
|
116
|
-
|
|
117
|
-
| Field | Type | Default | Description |
|
|
118
|
-
|-------|------|---------|-------------|
|
|
119
|
-
| `publicRepoGate` | `string` | `"none"` | Access control for public repos. See [Security](#security) section. |
|
|
120
|
-
| `gateLabelName` | `string` | `"beads-track"` | Required label when `publicRepoGate` is `"label"`. |
|
|
121
|
-
| `gateAssociations` | `string[]` | `["MEMBER", "COLLABORATOR", "OWNER"]` | Allowed author associations when `publicRepoGate` is `"author_association"`. |
|
|
122
|
-
|
|
123
|
-
### Example: Custom Configuration
|
|
124
|
-
|
|
125
|
-
```json
|
|
126
|
-
{
|
|
127
|
-
"labelToType": {
|
|
128
|
-
"bug": "bug",
|
|
129
|
-
"feature": "feature",
|
|
130
|
-
"chore": "chore",
|
|
131
|
-
"spike": "task"
|
|
132
|
-
},
|
|
133
|
-
"labelToPriority": {
|
|
134
|
-
"urgent": 0,
|
|
135
|
-
"important": 1,
|
|
136
|
-
"normal": 2,
|
|
137
|
-
"nice-to-have": 3
|
|
138
|
-
},
|
|
139
|
-
"defaultType": "task",
|
|
140
|
-
"defaultPriority": 2,
|
|
141
|
-
"mapAssignee": true,
|
|
142
|
-
"publicRepoGate": "author_association",
|
|
143
|
-
"gateAssociations": ["MEMBER", "COLLABORATOR", "OWNER"]
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Security
|
|
150
|
-
|
|
151
|
-
### Public Repo Gate
|
|
152
|
-
|
|
153
|
-
On public repos, anyone can open an issue -- which triggers a commit to your default branch via the sync workflow. The `publicRepoGate` setting controls who can trigger sync:
|
|
154
|
-
|
|
155
|
-
| Value | Behavior | Recommended For |
|
|
156
|
-
|-------|----------|-----------------|
|
|
157
|
-
| `"none"` | All issues sync (default). | Private repos, trusted teams. |
|
|
158
|
-
| `"author_association"` | Only issues from authors in `gateAssociations` sync. | Public repos with known contributors. |
|
|
159
|
-
| `"label"` | Only issues with the `gateLabelName` label sync. A maintainer must add the label. | Public repos accepting external issues. |
|
|
160
|
-
|
|
161
|
-
### Input Sanitization
|
|
162
|
-
|
|
163
|
-
- Issue titles and bodies are **never interpolated in shell commands**. The sync scripts use Node `execFile` with array arguments (no shell).
|
|
164
|
-
- Workflow files pass event data via `env:` blocks, never via `${{ }}` in `run:` blocks (prevents GitHub Actions injection).
|
|
165
|
-
- Only title, URL, mapped type, and priority are stored in Beads -- raw issue body is not committed.
|
|
166
|
-
|
|
167
|
-
### SHA-Pinned Actions
|
|
168
|
-
|
|
169
|
-
All third-party actions in the workflow files are pinned to full commit SHAs, not tags. This prevents supply-chain attacks via tag mutation.
|
|
170
|
-
|
|
171
|
-
```yaml
|
|
172
|
-
# Good: SHA-pinned
|
|
173
|
-
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
174
|
-
|
|
175
|
-
# Bad: tag-only (never used)
|
|
176
|
-
- uses: actions/checkout@v4
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## Opt-Out
|
|
182
|
-
|
|
183
|
-
Two ways to prevent an issue from syncing:
|
|
184
|
-
|
|
185
|
-
1. **Label**: Add `skip-beads-sync` to the GitHub issue. The workflow checks labels before processing.
|
|
186
|
-
2. **Body keyword**: Include `no-beads` anywhere in the issue body. Useful for quick one-off exclusions.
|
|
187
|
-
|
|
188
|
-
Both are checked at the `issues.opened` trigger. If added after creation, they prevent close-sync but not the already-created Beads issue.
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## Troubleshooting
|
|
193
|
-
|
|
194
|
-
### Sync not triggering
|
|
195
|
-
|
|
196
|
-
- **Check workflow is enabled**: Go to Actions tab in GitHub, verify `github-to-beads` workflow exists and is active.
|
|
197
|
-
- **Check branch**: Workflows must exist on the default branch (usually `main` or `master`).
|
|
198
|
-
- **Check permissions**: The workflow needs `contents: write` and `issues: write` permissions.
|
|
199
|
-
|
|
200
|
-
### Duplicate Beads issues
|
|
201
|
-
|
|
202
|
-
- The workflow checks for an existing `<!-- beads-sync:N -->` bot comment before creating. If the comment was deleted, a duplicate may be created.
|
|
203
|
-
- Fix: Check `.github/beads-mapping.json` for the existing mapping and manually remove the duplicate Beads issue with `bd delete`.
|
|
204
|
-
|
|
205
|
-
### Loop detection firing incorrectly
|
|
206
|
-
|
|
207
|
-
- If legitimate commits starting with `chore(beads):` are being skipped by the Phase 2 workflow, rename the commit prefix in the workflow file.
|
|
208
|
-
- The bot-actor check uses `github.actor` -- ensure your CI bot user matches the expected name.
|
|
209
|
-
|
|
210
|
-
### Mapping file conflicts
|
|
211
|
-
|
|
212
|
-
- If two issues are created simultaneously, the `git push` for the second may fail due to a stale mapping file.
|
|
213
|
-
- The workflow retries with `git pull --rebase` up to 3 times. If it still fails, the workflow run will show as failed -- re-run it manually.
|
|
214
|
-
|
|
215
|
-
### `bd` command not found in CI
|
|
216
|
-
|
|
217
|
-
- The workflow installs Beads fresh each run: `bun add -g @beads/bd`.
|
|
218
|
-
- If this fails, check that the workflow uses a runner with Node/Bun available.
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Fork Behavior
|
|
223
|
-
|
|
224
|
-
Sync does **not** work in forks. The `GITHUB_TOKEN` provided to forked repo workflows is scoped to the fork and cannot write to the upstream repo's `.beads/` directory or post comments on upstream issues.
|
|
225
|
-
|
|
226
|
-
When a fork PR uses `Closes #N`, GitHub closes the issue on the **upstream** repo on merge. This triggers the upstream's `issues.closed` workflow, which handles the Beads close normally.
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
## GitHub Projects Integration
|
|
231
|
-
|
|
232
|
-
This plugin creates well-labeled GitHub issues but does **not** manage GitHub Projects boards. Use GitHub's built-in automation instead:
|
|
233
|
-
|
|
234
|
-
### Setting Up Auto-Add to Project
|
|
235
|
-
|
|
236
|
-
1. Go to your GitHub Project (Projects tab on your profile or org)
|
|
237
|
-
2. Click the `...` menu, then **Workflows**
|
|
238
|
-
3. Enable **"Auto-add to project"**
|
|
239
|
-
4. Set the filter, for example: `is:issue is:open label:bug,enhancement`
|
|
240
|
-
5. All matching issues (including those created by the sync) will auto-appear on your board
|
|
241
|
-
|
|
242
|
-
### Recommended Project Views
|
|
243
|
-
|
|
244
|
-
- **Board view**: Columns for `Open`, `In Progress`, `Done` -- map to Beads statuses
|
|
245
|
-
- **Table view**: Add `Labels`, `Assignees`, `Priority` fields for triage
|
|
246
|
-
- **Filter by label**: Use the labels mapped in your config to create focused views
|
|
247
|
-
|
|
248
|
-
This approach is more flexible than automating board placement -- you control the filters and views entirely within GitHub's UI.
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## Related Documentation
|
|
253
|
-
|
|
254
|
-
- [Design doc](plans/2026-03-21-github-beads-sync-design.md) -- full design decisions, OWASP analysis, and edge cases
|
|
255
|
-
- [Toolchain reference](TOOLCHAIN.md) -- Beads CLI commands, installation, and troubleshooting
|
package/docs/GREPTILE_SETUP.md
DELETED
|
@@ -1,400 +0,0 @@
|
|
|
1
|
-
# Greptile Code Review - Branch Protection Setup
|
|
2
|
-
|
|
3
|
-
**✅ Greptile is already working on your repository!**
|
|
4
|
-
|
|
5
|
-
Greptile provides AI-powered code review as a **GitHub App** that automatically analyzes every PR.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Current Status
|
|
10
|
-
|
|
11
|
-
🎉 **Greptile is Fully Operational!**
|
|
12
|
-
|
|
13
|
-
Your repository has both Greptile features working:
|
|
14
|
-
- ✅ **Greptile Review** (GitHub App) - Provides detailed code review comments
|
|
15
|
-
- ✅ **Greptile Quality Gate** (Workflow) - Enforces minimum score of 4.0/5 before merge
|
|
16
|
-
- ✅ Both integrated into branch protection for master branch
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Branch Protection Status
|
|
21
|
-
|
|
22
|
-
### ✅ Fully Configured!
|
|
23
|
-
|
|
24
|
-
Branch protection for `master` now requires:
|
|
25
|
-
|
|
26
|
-
1. **Greptile Review** (GitHub App check) - Must pass
|
|
27
|
-
2. **Greptile Quality Gate (≥4/5)** (Custom workflow) - Must pass with score ≥ 4.0
|
|
28
|
-
3. **Other Required Checks**: ESLint, CodeQL, dependency-review
|
|
29
|
-
4. **PR Reviews**: At least 1 approving review required
|
|
30
|
-
5. **Conversation Resolution**: All review threads must be resolved
|
|
31
|
-
|
|
32
|
-
**Result**: PRs cannot be merged unless:
|
|
33
|
-
- Greptile Review completes successfully
|
|
34
|
-
- Greptile confidence score is at least 4.0/5
|
|
35
|
-
- All other quality checks pass
|
|
36
|
-
- Code has been reviewed and approved
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## How Greptile Works
|
|
41
|
-
|
|
42
|
-
### GitHub App Integration
|
|
43
|
-
|
|
44
|
-
- **Automatic**: Runs on every PR (no manual trigger needed)
|
|
45
|
-
- **No Workflow Needed**: Works as a GitHub App, not a GitHub Action
|
|
46
|
-
- **No API Key Required**: Authorized through GitHub App installation
|
|
47
|
-
|
|
48
|
-
### Review Process
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
PR created/updated
|
|
52
|
-
↓
|
|
53
|
-
Greptile automatically analyzes code
|
|
54
|
-
↓
|
|
55
|
-
Posts detailed feedback as comments
|
|
56
|
-
↓
|
|
57
|
-
Updates "Greptile Review" check status
|
|
58
|
-
↓
|
|
59
|
-
Pass: ✅ Can merge
|
|
60
|
-
Fail: ❌ Blocked (if required in branch protection)
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### What Greptile Checks
|
|
64
|
-
|
|
65
|
-
- 🐛 **Bugs & Edge Cases**: Potential runtime errors, null pointers, race conditions
|
|
66
|
-
- 🔒 **Security**: Vulnerabilities, injection risks, auth issues
|
|
67
|
-
- 📊 **Code Quality**: Complexity, duplication, naming conventions
|
|
68
|
-
- ⚡ **Performance**: Inefficient algorithms, memory leaks
|
|
69
|
-
- 📝 **Best Practices**: Error handling, type safety, modern patterns
|
|
70
|
-
- 🧪 **Testing**: Missing test coverage, test quality
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Understanding Greptile Feedback
|
|
75
|
-
|
|
76
|
-
### Confidence Score
|
|
77
|
-
|
|
78
|
-
Greptile provides a confidence score (0-5) in the PR description that reflects overall code quality:
|
|
79
|
-
|
|
80
|
-
📊 **Confidence Score Format**: "Confidence Score: X/5" or "Confidence Score: X out of 5"
|
|
81
|
-
🎯 **Quality Gate Threshold**: Minimum 4.0/5 required to merge
|
|
82
|
-
✅ **Detailed inline comments** on specific lines of code
|
|
83
|
-
✅ **Issue severity** indicators (critical, major, minor)
|
|
84
|
-
✅ **Actionable suggestions** with example fixes
|
|
85
|
-
|
|
86
|
-
### Example from Your PR #13
|
|
87
|
-
|
|
88
|
-
Greptile identified and you fixed:
|
|
89
|
-
- ✅ Windows path validation bug
|
|
90
|
-
- ✅ Duplicate function definitions
|
|
91
|
-
- ✅ Incorrect fetch timeout implementation
|
|
92
|
-
- ✅ Security vulnerabilities (command injection)
|
|
93
|
-
- ✅ JSON parse crash issues
|
|
94
|
-
- ✅ Unused variables
|
|
95
|
-
|
|
96
|
-
**Result**: 16/16 issues addressed! 🎉
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Addressing Greptile Feedback
|
|
101
|
-
|
|
102
|
-
### Workflow
|
|
103
|
-
|
|
104
|
-
1. **Read Comments**
|
|
105
|
-
- Greptile posts inline comments on changed files
|
|
106
|
-
- Each explains the issue and suggests fixes
|
|
107
|
-
|
|
108
|
-
2. **Fix Issues**
|
|
109
|
-
```bash
|
|
110
|
-
# Make changes based on feedback
|
|
111
|
-
git add .
|
|
112
|
-
git commit -m "fix: address Greptile feedback"
|
|
113
|
-
git push
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
3. **Auto Re-analysis**
|
|
117
|
-
- Greptile automatically reviews again after push
|
|
118
|
-
- Verifies fixes
|
|
119
|
-
- Updates check status
|
|
120
|
-
|
|
121
|
-
4. **Resolve Conversations**
|
|
122
|
-
- Click "Resolve conversation" on each fixed comment
|
|
123
|
-
- Helps track progress
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Branch Protection Behavior
|
|
128
|
-
|
|
129
|
-
### When "Greptile Review" is Required:
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
✅ All issues addressed → Check: SUCCESS → ✅ Can merge
|
|
133
|
-
❌ Outstanding issues → Check: PENDING → ❌ Blocked
|
|
134
|
-
🔄 Analysis in progress → Check: PENDING → ❌ Blocked
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Emergency Override
|
|
138
|
-
|
|
139
|
-
If you **must** merge despite Greptile feedback:
|
|
140
|
-
|
|
141
|
-
1. **Get approval** from tech lead/architect
|
|
142
|
-
2. **Document in PR description**:
|
|
143
|
-
```markdown
|
|
144
|
-
**Emergency Bypass**: Production hotfix for [critical-issue]
|
|
145
|
-
**Greptile Status**: Bypassed
|
|
146
|
-
**Justification**: [detailed reason]
|
|
147
|
-
**Follow-up**: Issue #123 created to address feedback
|
|
148
|
-
```
|
|
149
|
-
3. **Temporarily disable branch protection** (admin only)
|
|
150
|
-
4. **Merge**
|
|
151
|
-
5. **Re-enable protection immediately**
|
|
152
|
-
6. **Create follow-up issue** to address Greptile feedback
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## Configuration
|
|
157
|
-
|
|
158
|
-
### No Setup Required! ✅
|
|
159
|
-
|
|
160
|
-
Since Greptile is a GitHub App:
|
|
161
|
-
|
|
162
|
-
- ❌ No API keys needed in secrets
|
|
163
|
-
- ❌ No workflow files needed
|
|
164
|
-
- ❌ No manual configuration
|
|
165
|
-
|
|
166
|
-
It just works automatically!
|
|
167
|
-
|
|
168
|
-
### Managing the GitHub App
|
|
169
|
-
|
|
170
|
-
**View installed apps**:
|
|
171
|
-
```
|
|
172
|
-
https://github.com/settings/installations
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
**Repository-specific settings** (admin only):
|
|
176
|
-
```
|
|
177
|
-
https://github.com/harshanandak/forge/settings/installations
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
You can:
|
|
181
|
-
- Enable/disable Greptile for specific repos
|
|
182
|
-
- Adjust review frequency
|
|
183
|
-
- Configure notification settings
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## Customization (Optional)
|
|
188
|
-
|
|
189
|
-
### Repository Configuration
|
|
190
|
-
|
|
191
|
-
Create `.greptile/config.yml` in repo root:
|
|
192
|
-
|
|
193
|
-
```yaml
|
|
194
|
-
# Greptile configuration
|
|
195
|
-
review:
|
|
196
|
-
# File patterns to ignore
|
|
197
|
-
exclude:
|
|
198
|
-
- "*.md"
|
|
199
|
-
- "test/**"
|
|
200
|
-
- "docs/**"
|
|
201
|
-
- "*.test.js"
|
|
202
|
-
- "dist/**"
|
|
203
|
-
|
|
204
|
-
# Focus areas (prioritize these checks)
|
|
205
|
-
focus:
|
|
206
|
-
- security
|
|
207
|
-
- bugs
|
|
208
|
-
- performance
|
|
209
|
-
|
|
210
|
-
# Review depth
|
|
211
|
-
depth: thorough # quick, normal, thorough
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Per-PR Instructions
|
|
215
|
-
|
|
216
|
-
Add comments in PR description to guide Greptile:
|
|
217
|
-
|
|
218
|
-
```markdown
|
|
219
|
-
@greptile focus on security and performance
|
|
220
|
-
@greptile ignore docs/ and test files
|
|
221
|
-
@greptile be extra strict on src/auth/
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## Troubleshooting
|
|
227
|
-
|
|
228
|
-
### "Greptile Review check not appearing in branch protection"
|
|
229
|
-
|
|
230
|
-
**Cause**: Check hasn't completed at least once on any PR.
|
|
231
|
-
|
|
232
|
-
**Fix**:
|
|
233
|
-
1. It's currently running on PR #13
|
|
234
|
-
2. Wait for it to complete
|
|
235
|
-
3. Then refresh branch protection settings page
|
|
236
|
-
4. "Greptile Review" should now appear in the list
|
|
237
|
-
|
|
238
|
-
### "Greptile didn't review my PR"
|
|
239
|
-
|
|
240
|
-
**Possible causes**:
|
|
241
|
-
- GitHub App not installed or disabled
|
|
242
|
-
- PR is a draft (some apps skip drafts)
|
|
243
|
-
- Repository not in allowed list
|
|
244
|
-
|
|
245
|
-
**Fix**:
|
|
246
|
-
1. Visit: https://github.com/harshanandak/forge/settings/installations
|
|
247
|
-
2. Verify Greptile is installed and enabled
|
|
248
|
-
3. Check repository access permissions
|
|
249
|
-
4. Convert draft to ready for review if applicable
|
|
250
|
-
|
|
251
|
-
### "How do I request a re-review?"
|
|
252
|
-
|
|
253
|
-
**Methods**:
|
|
254
|
-
1. **Push new commit** - Triggers automatic re-analysis
|
|
255
|
-
2. **Comment on PR**: `@greptile please review` or `@greptile recheck`
|
|
256
|
-
3. **Close and reopen PR** - Forces fresh analysis
|
|
257
|
-
|
|
258
|
-
### "Can I see why Greptile flagged something?"
|
|
259
|
-
|
|
260
|
-
**Yes!**
|
|
261
|
-
1. Go to "Files changed" tab in PR
|
|
262
|
-
2. Find Greptile's comment thread
|
|
263
|
-
3. Each comment explains:
|
|
264
|
-
- What the issue is
|
|
265
|
-
- Why it's problematic
|
|
266
|
-
- How to fix it
|
|
267
|
-
- Often includes code examples
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
## Best Practices
|
|
272
|
-
|
|
273
|
-
### 1. Address Feedback Incrementally
|
|
274
|
-
|
|
275
|
-
Don't batch all fixes into one commit:
|
|
276
|
-
- Fix issues as you see them
|
|
277
|
-
- Commit after each logical fix
|
|
278
|
-
- Easier to review and debug
|
|
279
|
-
|
|
280
|
-
### 2. Use as Learning Tool
|
|
281
|
-
|
|
282
|
-
Greptile explains *why* something is an issue:
|
|
283
|
-
- Read the explanations, don't just apply fixes blindly
|
|
284
|
-
- Share interesting findings with your team
|
|
285
|
-
- Update coding standards based on patterns
|
|
286
|
-
|
|
287
|
-
### 3. Combine with Human Review
|
|
288
|
-
|
|
289
|
-
| Review Type | What It Catches |
|
|
290
|
-
|-------------|-----------------|
|
|
291
|
-
| 🤖 Greptile | Technical bugs, security, complexity, patterns |
|
|
292
|
-
| 👥 Human | Business logic, UX, architecture, context |
|
|
293
|
-
|
|
294
|
-
**Both are essential!** They catch different types of issues.
|
|
295
|
-
|
|
296
|
-
### 4. Don't Fight the AI Unnecessarily
|
|
297
|
-
|
|
298
|
-
If Greptile flags something:
|
|
299
|
-
- There's usually a valid reason
|
|
300
|
-
- Read the explanation carefully
|
|
301
|
-
- If you disagree, comment why (helps improve Greptile)
|
|
302
|
-
- Propose alternative if you have a better approach
|
|
303
|
-
|
|
304
|
-
### 5. Track Common Patterns
|
|
305
|
-
|
|
306
|
-
Notice recurring issues across PRs?
|
|
307
|
-
- Document in coding standards
|
|
308
|
-
- Add to .greptile/config.yml to auto-enforce
|
|
309
|
-
- Share with team in README or CONTRIBUTING.md
|
|
310
|
-
- Consider pre-commit hooks for common issues
|
|
311
|
-
|
|
312
|
-
---
|
|
313
|
-
|
|
314
|
-
## Verification Checklist
|
|
315
|
-
|
|
316
|
-
Use this to confirm Greptile is set up correctly:
|
|
317
|
-
|
|
318
|
-
```
|
|
319
|
-
✅ Greptile GitHub App is installed
|
|
320
|
-
✅ Greptile has access to your repository
|
|
321
|
-
✅ "Greptile Review" check runs on PRs
|
|
322
|
-
✅ Greptile posts code review comments
|
|
323
|
-
✅ "Greptile Review" appears in branch protection options
|
|
324
|
-
✅ "Greptile Review" is selected as required check
|
|
325
|
-
✅ Branch protection rule is saved
|
|
326
|
-
✅ Test: Create PR → Greptile reviews → Merge blocked if issues
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
|
-
## FAQ
|
|
332
|
-
|
|
333
|
-
**Q: Does Greptile use a scoring system (like 4.0/5.0)?**
|
|
334
|
-
A: Yes! Greptile Review provides a confidence score (0-5) in the PR description. Our custom Quality Gate workflow enforces a minimum score of 4.0/5 before allowing merges.
|
|
335
|
-
|
|
336
|
-
**Q: Will it review every single commit?**
|
|
337
|
-
A: It reviews at the PR level. Runs when PR is opened and when new commits are pushed.
|
|
338
|
-
|
|
339
|
-
**Q: Does it slow down development?**
|
|
340
|
-
A: No! Reviews typically complete in 1-2 minutes. Runs in parallel with other checks.
|
|
341
|
-
|
|
342
|
-
**Q: Can I disable it for specific PRs?**
|
|
343
|
-
A: Yes, via PR description: `@greptile skip` (but only if not required in branch protection)
|
|
344
|
-
|
|
345
|
-
**Q: Is it free?**
|
|
346
|
-
A: Greptile has free and paid tiers. Check https://greptile.com/pricing for current plans.
|
|
347
|
-
|
|
348
|
-
**Q: Does it replace code review?**
|
|
349
|
-
A: No! It augments human review by catching technical issues, allowing humans to focus on architecture, business logic, and UX.
|
|
350
|
-
|
|
351
|
-
**Q: What languages does it support?**
|
|
352
|
-
A: Most modern languages including JavaScript, TypeScript, Python, Go, Java, Rust, etc.
|
|
353
|
-
|
|
354
|
-
**Q: Can I customize what it checks for?**
|
|
355
|
-
A: Yes, via `.greptile/config.yml` configuration file.
|
|
356
|
-
|
|
357
|
-
---
|
|
358
|
-
|
|
359
|
-
## Next Steps
|
|
360
|
-
|
|
361
|
-
1. ✅ **DONE** - Greptile Review is active and running
|
|
362
|
-
2. ✅ **DONE** - Greptile Quality Gate (≥4/5) is enforced in branch protection
|
|
363
|
-
3. ✅ **DONE** - All required checks configured for master branch
|
|
364
|
-
4. 🎯 **Create new PRs** and watch the quality gate in action
|
|
365
|
-
5. 📚 **Document** your team's policy for handling Greptile feedback
|
|
366
|
-
6. 🎉 **Celebrate** improved code quality!
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
## Additional Resources
|
|
371
|
-
|
|
372
|
-
- **Greptile Documentation**: https://docs.greptile.com
|
|
373
|
-
- **GitHub App Settings**: https://github.com/settings/installations
|
|
374
|
-
- **Branch Protection Guide**: [../.github/BRANCH_PROTECTION_GUIDE.md](../.github/BRANCH_PROTECTION_GUIDE.md)
|
|
375
|
-
- **Your PRs**: Check the [pull requests page](https://github.com/harshanandak/forge/pulls) for examples
|
|
376
|
-
|
|
377
|
-
---
|
|
378
|
-
|
|
379
|
-
## Summary
|
|
380
|
-
|
|
381
|
-
**What Greptile Is:**
|
|
382
|
-
- ✅ GitHub App providing detailed code reviews
|
|
383
|
-
- ✅ Custom Quality Gate workflow enforcing minimum score 4.0/5
|
|
384
|
-
- ✅ AI-powered code analysis on every PR
|
|
385
|
-
- ✅ Detailed, actionable feedback with confidence scores
|
|
386
|
-
|
|
387
|
-
**What's Now Active:**
|
|
388
|
-
- ✅ Greptile Review (GitHub App) is installed and running
|
|
389
|
-
- ✅ Greptile Quality Gate (≥4/5) is enforced in branch protection
|
|
390
|
-
- ✅ PRs to master require score ≥ 4.0/5 to merge
|
|
391
|
-
- ✅ All review comments must be resolved before merge
|
|
392
|
-
|
|
393
|
-
**Result:**
|
|
394
|
-
- 🚀 Higher code quality with enforced standards
|
|
395
|
-
- 🐛 Fewer bugs in production
|
|
396
|
-
- 📊 Objective quality metrics (4.0/5 minimum)
|
|
397
|
-
- 🛡️ Automated security and best practice checks
|
|
398
|
-
- 📚 Team learning from AI feedback
|
|
399
|
-
|
|
400
|
-
Enjoy your new AI code reviewer with quality enforcement! 🤖✨
|