forge-workflow 0.0.10 → 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 +150 -61
- package/CHANGELOG.md +681 -0
- package/CLAUDE.md +9 -118
- 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 +461 -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/forge/TOOLCHAIN.md +670 -0
- 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/{TOOLCHAIN.md → reference/TOOLCHAIN.md} +62 -47
- 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 +121 -0
- package/lib/beads-sync-scaffold.js +25 -101
- package/lib/codex-skills.js +51 -1
- package/lib/commands/_issue.js +741 -77
- 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 +17 -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 +0 -1
- 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 +838 -972
- 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 +158 -21
- package/lib/commands/sync.js +34 -46
- package/lib/commands/team.js +4 -1
- package/lib/commands/test.js +43 -27
- package/lib/commands/update.js +2 -2
- package/lib/commands/upgrade.js +47 -0
- package/lib/commands/validate.js +43 -18
- package/lib/commands/worktree.js +307 -100
- 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 +2 -2
- package/lib/deprecated-sync-cleanup.js +362 -0
- package/lib/detect-agent.js +2 -28
- package/lib/detect-worktree.js +35 -9
- 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 +382 -11
- 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/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 +3 -2
- 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 +99 -497
- 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 +241 -20
- 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/scoring.js +17 -3
- package/lib/status/beads-snapshot.js +45 -2
- package/lib/status/presenter.js +169 -18
- 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 +296 -47
- package/lib/workflow/stage-transition.js +115 -0
- package/lib/workflow/stages.js +30 -6
- package/lib/workflow/state-manager.js +11 -22
- package/lib/workflow/state.js +23 -1
- package/lib/workflow-profiles.js +17 -5
- package/package.json +37 -35
- 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 +81 -57
- package/scripts/beads-upgrade-smoke.sh +24 -3
- 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.sh +22 -3
- 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 +49 -84
- 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 +50 -83
- 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/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 +21 -94
- package/scripts/protected-state-check.js +104 -0
- package/scripts/smart-status.sh +60 -57
- 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-utils.sh +3 -0
- package/scripts/test-ci-shard.js +13 -6
- package/scripts/test.js +95 -12
- 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} +44 -50
- 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} +132 -157
- 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/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
- 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/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
- 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/verify.prompt.md +0 -271
- package/.github/workflows/beads-to-github.yml +0 -89
- package/.github/workflows/github-to-beads.yml +0 -100
- 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 -281
- 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-bootstrap.js +0 -225
- package/lib/beads-health-check.js +0 -188
- package/lib/commands/commands-reset.js +0 -147
- package/opencode.json +0 -67
- package/scripts/beads-context.test.js +0 -584
- 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 -356
- package/scripts/github-beads-sync/label-mapper.mjs +0 -54
- package/scripts/github-beads-sync/mapping.mjs +0 -132
- package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
- package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
- 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,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rollback
|
|
3
|
+
description: >
|
|
4
|
+
Safely revert or undo a change that is already committed or shipped, using non-destructive
|
|
5
|
+
`git revert` (never `reset --hard`, `push --force`, or `clean`). Drives the interactive
|
|
6
|
+
`bunx forge rollback` menu: undo the last commit, revert a commit by hash, revert a merged
|
|
7
|
+
PR (git revert -m 1), restore individual files to a prior version, revert a commit range, or
|
|
8
|
+
dry-run/preview first. Use when the user says roll back, revert, undo, back out, or restore
|
|
9
|
+
— e.g. "undo the last commit", "undo that change, the approach was wrong", "back out PR
|
|
10
|
+
#123", "revert the merge commit", "restore src/auth.js to before my last commit", or when a
|
|
11
|
+
shipped/merged change broke something and must be pulled back. Do NOT use for: replying to
|
|
12
|
+
or fixing PR review feedback (review), monitoring an open PR's checks toward merge
|
|
13
|
+
(shepherd), the post-merge CI health check on master (verify), pushing a branch or opening a
|
|
14
|
+
PR (ship), or ordinary issue status/field edits (issue-basics).
|
|
15
|
+
allowed-tools: Bash, Read, Edit, Grep, Glob
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Comprehensive rollback system with multiple methods and automatic USER content preservation.
|
|
19
|
+
|
|
20
|
+
# Rollback
|
|
21
|
+
|
|
22
|
+
This skill provides safe rollback operations with comprehensive validation and USER section preservation.
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bunx forge rollback
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Interactive menu with 6 options:
|
|
31
|
+
1. **Rollback last commit** - Quick undo of most recent change
|
|
32
|
+
2. **Rollback specific commit** - Target any commit by hash
|
|
33
|
+
3. **Rollback merged PR** - Revert an entire PR merge
|
|
34
|
+
4. **Rollback specific files** - Restore only certain files
|
|
35
|
+
5. **Rollback entire branch** - Revert multiple commits
|
|
36
|
+
6. **Preview rollback** - Dry run mode (shows changes without executing)
|
|
37
|
+
|
|
38
|
+
## How It Works
|
|
39
|
+
|
|
40
|
+
### Safety Features
|
|
41
|
+
|
|
42
|
+
**1. Working Directory Check**
|
|
43
|
+
- Requires clean working directory (no uncommitted changes)
|
|
44
|
+
- Prevents accidental data loss
|
|
45
|
+
- Prompts to commit or stash changes first
|
|
46
|
+
|
|
47
|
+
**2. Input Validation**
|
|
48
|
+
- Commit hashes: Must match `/^[0-9a-f]{4,40}$/i` or be 'HEAD'
|
|
49
|
+
- File paths: Validated to be within project (prevents path traversal)
|
|
50
|
+
- Methods: Whitelisted to 'commit', 'pr', 'partial', 'branch'
|
|
51
|
+
- Shell metacharacters: Rejected (`;`, `|`, `&`, `$`, `` ` ``, `(`, `)`, `<`, `>`, `\n`, `\r`)
|
|
52
|
+
|
|
53
|
+
**3. USER Section Preservation**
|
|
54
|
+
- Automatically extracts USER sections before rollback
|
|
55
|
+
- Restores USER sections after rollback
|
|
56
|
+
- Preserves custom commands in `.claude/commands/custom/`
|
|
57
|
+
- Amends rollback commit to include restored content
|
|
58
|
+
|
|
59
|
+
**4. Dry Run Mode**
|
|
60
|
+
- Preview affected files without executing
|
|
61
|
+
- Shows what would change
|
|
62
|
+
- No git operations performed
|
|
63
|
+
|
|
64
|
+
**5. Non-Destructive**
|
|
65
|
+
- Uses `git revert` (creates new commit)
|
|
66
|
+
- Never uses `git reset --hard` (destructive)
|
|
67
|
+
- Preserves full git history
|
|
68
|
+
- Can be undone with another rollback
|
|
69
|
+
|
|
70
|
+
### USER Section Preservation
|
|
71
|
+
|
|
72
|
+
**What Gets Preserved**:
|
|
73
|
+
```markdown
|
|
74
|
+
<!-- USER:START -->
|
|
75
|
+
Your custom content here
|
|
76
|
+
<!-- USER:END -->
|
|
77
|
+
|
|
78
|
+
<!-- USER:START:custom-name -->
|
|
79
|
+
Named USER section
|
|
80
|
+
<!-- USER:END:custom-name -->
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Process**:
|
|
84
|
+
1. Extract all USER sections from AGENTS.md, CLAUDE.md, etc.
|
|
85
|
+
2. Backup custom commands from `.claude/commands/custom/`
|
|
86
|
+
3. Execute rollback operation
|
|
87
|
+
4. Restore USER sections to current file content
|
|
88
|
+
5. Restore custom command files
|
|
89
|
+
6. Amend rollback commit to include restored content
|
|
90
|
+
|
|
91
|
+
**Result**: Your customizations survive rollback operations.
|
|
92
|
+
|
|
93
|
+
## Rollback methods
|
|
94
|
+
|
|
95
|
+
Six methods, selected interactively. Full step-by-step walkthroughs (commands,
|
|
96
|
+
prompts, expected output) are in [references/methods.md](references/methods.md) —
|
|
97
|
+
read it when running a specific rollback.
|
|
98
|
+
|
|
99
|
+
1. **Rollback last commit** — undo the most recent commit.
|
|
100
|
+
2. **Rollback specific commit** — revert one commit by hash.
|
|
101
|
+
3. **Rollback merged PR** — revert a merge commit.
|
|
102
|
+
4. **Rollback specific files** — restore named files from the previous commit.
|
|
103
|
+
5. **Rollback entire branch** — reset a range.
|
|
104
|
+
6. **Preview (dry run)** — show what a rollback would do, change nothing.
|
|
105
|
+
|
|
106
|
+
## Integration, issue status & troubleshooting
|
|
107
|
+
|
|
108
|
+
When to reach for rollback, how it fits the workflow, how revert state is recorded,
|
|
109
|
+
and error recovery are in
|
|
110
|
+
[references/workflow-integration.md](references/workflow-integration.md).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "undo the last commit, the approach was wrong",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "back out PR #482, it's breaking production",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "restore config/database.yml to the version before my last commit",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "show me which files reverting commit a1b2c3d would touch before I actually do it",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "that merged refactor broke everything — revert the whole thing but keep the git history intact",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "what's the safe way to undo a merged pull request?",
|
|
24
|
+
"should_trigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "address the Greptile and CodeRabbit comments on my PR",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "keep watching my open PR and tell me when checks pass and it's mergeable",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"query": "master is green after the merge — run the post-merge health check and close the issue",
|
|
36
|
+
"should_trigger": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"query": "push my validated branch and open a pull request",
|
|
40
|
+
"should_trigger": false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"query": "set issue forge-9f2 to status review",
|
|
44
|
+
"should_trigger": false
|
|
45
|
+
}
|
|
46
|
+
]
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Rollback methods (reference)
|
|
2
|
+
|
|
3
|
+
Detailed walkthroughs for each rollback method. Read the one you need; the skill body summarizes them.
|
|
4
|
+
|
|
5
|
+
## Rollback Methods
|
|
6
|
+
|
|
7
|
+
### 1. Rollback Last Commit
|
|
8
|
+
|
|
9
|
+
**Use when**: Quick undo of most recent change
|
|
10
|
+
|
|
11
|
+
**How it works**:
|
|
12
|
+
```bash
|
|
13
|
+
git revert HEAD --no-edit
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Example**:
|
|
17
|
+
```bash
|
|
18
|
+
bunx forge rollback
|
|
19
|
+
# Select: 1. Rollback last commit
|
|
20
|
+
|
|
21
|
+
✓ Working directory is clean
|
|
22
|
+
✓ Extracting USER sections...
|
|
23
|
+
✓ Executing: git revert HEAD --no-edit
|
|
24
|
+
✓ Restoring USER sections...
|
|
25
|
+
✓ Amended commit to preserve USER content
|
|
26
|
+
|
|
27
|
+
Rollback complete!
|
|
28
|
+
Commit: a1b2c3d "Revert: add authentication feature"
|
|
29
|
+
Files affected: 5
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Rollback Specific Commit
|
|
33
|
+
|
|
34
|
+
**Use when**: Need to revert a commit from earlier in history
|
|
35
|
+
|
|
36
|
+
**How it works**:
|
|
37
|
+
```bash
|
|
38
|
+
git revert <commit-hash> --no-edit
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Example**:
|
|
42
|
+
```bash
|
|
43
|
+
bunx forge rollback
|
|
44
|
+
# Select: 2. Rollback specific commit
|
|
45
|
+
# Enter: a1b2c3d
|
|
46
|
+
|
|
47
|
+
✓ Validating commit hash...
|
|
48
|
+
✓ Working directory is clean
|
|
49
|
+
✓ Extracting USER sections...
|
|
50
|
+
✓ Executing: git revert a1b2c3d --no-edit
|
|
51
|
+
✓ Restoring USER sections...
|
|
52
|
+
✓ Amended commit to preserve USER content
|
|
53
|
+
|
|
54
|
+
Rollback complete!
|
|
55
|
+
Commit: x9y8z7w "Revert: a1b2c3d"
|
|
56
|
+
Files affected: 8
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Input validation**:
|
|
60
|
+
- Accepts 4-40 character hex strings
|
|
61
|
+
- Accepts 'HEAD'
|
|
62
|
+
- Rejects shell metacharacters
|
|
63
|
+
- Rejects invalid formats
|
|
64
|
+
|
|
65
|
+
### 3. Rollback Merged PR
|
|
66
|
+
|
|
67
|
+
**Use when**: Need to revert an entire merged pull request
|
|
68
|
+
|
|
69
|
+
**How it works**:
|
|
70
|
+
```bash
|
|
71
|
+
git revert -m 1 <merge-commit-hash> --no-edit
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Example**:
|
|
75
|
+
```bash
|
|
76
|
+
bunx forge rollback
|
|
77
|
+
# Select: 3. Rollback merged PR
|
|
78
|
+
# Enter: def456 (merge commit hash)
|
|
79
|
+
|
|
80
|
+
✓ Validating commit hash...
|
|
81
|
+
✓ Working directory is clean
|
|
82
|
+
✓ Extracting USER sections...
|
|
83
|
+
✓ Executing: git revert -m 1 def456 --no-edit
|
|
84
|
+
✓ Restoring USER sections...
|
|
85
|
+
✓ Amended commit to preserve USER content
|
|
86
|
+
✓ Beads integration: Issue #123 marked as 'reverted'
|
|
87
|
+
|
|
88
|
+
Rollback complete!
|
|
89
|
+
Commit: m1n2o3p "Revert: Merge pull request #123"
|
|
90
|
+
Files affected: 15
|
|
91
|
+
Beads issue: #123 status → reverted
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Beads Integration**:
|
|
95
|
+
- Parses commit message for issue number (`#123`)
|
|
96
|
+
- If found, runs: `forge update <id> --status reverted --comment "PR reverted"`
|
|
97
|
+
- Silently skips if Beads not installed
|
|
98
|
+
- Updates issue tracking automatically
|
|
99
|
+
|
|
100
|
+
### 4. Rollback Specific Files
|
|
101
|
+
|
|
102
|
+
**Use when**: Only certain files need to be restored
|
|
103
|
+
|
|
104
|
+
**How it works**:
|
|
105
|
+
```bash
|
|
106
|
+
git checkout HEAD~1 -- <file1> <file2> ...
|
|
107
|
+
git commit -m "chore: rollback <files>"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Example**:
|
|
111
|
+
```bash
|
|
112
|
+
bunx forge rollback
|
|
113
|
+
# Select: 4. Rollback specific files
|
|
114
|
+
# Enter: AGENTS.md,CLAUDE.md
|
|
115
|
+
|
|
116
|
+
✓ Validating file paths...
|
|
117
|
+
✓ Working directory is clean
|
|
118
|
+
✓ Extracting USER sections...
|
|
119
|
+
✓ Executing: git checkout HEAD~1 -- AGENTS.md CLAUDE.md
|
|
120
|
+
✓ Committing changes...
|
|
121
|
+
✓ Restoring USER sections...
|
|
122
|
+
✓ Amended commit to preserve USER content
|
|
123
|
+
|
|
124
|
+
Rollback complete!
|
|
125
|
+
Commit: q4r5s6t "chore: rollback AGENTS.md, CLAUDE.md"
|
|
126
|
+
Files affected: 2
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Path validation**:
|
|
130
|
+
- Comma-separated file paths
|
|
131
|
+
- Validates paths are within project root
|
|
132
|
+
- Prevents path traversal (`../../../etc/passwd`)
|
|
133
|
+
- Rejects shell metacharacters
|
|
134
|
+
- Uses `path.resolve()` + `startsWith()` check
|
|
135
|
+
|
|
136
|
+
### 5. Rollback Entire Branch
|
|
137
|
+
|
|
138
|
+
**Use when**: Need to revert a range of commits
|
|
139
|
+
|
|
140
|
+
**How it works**:
|
|
141
|
+
```bash
|
|
142
|
+
git revert <start-commit>..<end-commit> --no-edit
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Example**:
|
|
146
|
+
```bash
|
|
147
|
+
bunx forge rollback
|
|
148
|
+
# Select: 5. Rollback entire branch
|
|
149
|
+
# Enter: abc123..def456
|
|
150
|
+
|
|
151
|
+
✓ Validating commit range...
|
|
152
|
+
✓ Working directory is clean
|
|
153
|
+
✓ Extracting USER sections...
|
|
154
|
+
✓ Executing: git revert abc123..def456 --no-edit
|
|
155
|
+
✓ Restoring USER sections...
|
|
156
|
+
✓ Amended commit to preserve USER content
|
|
157
|
+
|
|
158
|
+
Rollback complete!
|
|
159
|
+
Commits reverted: 7
|
|
160
|
+
Files affected: 24
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Range validation**:
|
|
164
|
+
- Format: `start..end`
|
|
165
|
+
- Both commits must be valid hashes (4-40 chars)
|
|
166
|
+
- Rejects invalid formats
|
|
167
|
+
- Checks for `..` separator
|
|
168
|
+
|
|
169
|
+
### 6. Preview Rollback (Dry Run)
|
|
170
|
+
|
|
171
|
+
**Use when**: Want to see what would change without executing
|
|
172
|
+
|
|
173
|
+
**How it works**:
|
|
174
|
+
- Prompts for method and target
|
|
175
|
+
- Validates inputs
|
|
176
|
+
- Shows affected files
|
|
177
|
+
- No git operations performed
|
|
178
|
+
|
|
179
|
+
**Example**:
|
|
180
|
+
```bash
|
|
181
|
+
bunx forge rollback
|
|
182
|
+
# Select: 6. Preview rollback (dry run)
|
|
183
|
+
# Enter method: partial
|
|
184
|
+
# Enter target: AGENTS.md,package.json
|
|
185
|
+
|
|
186
|
+
✓ Validating inputs...
|
|
187
|
+
✓ DRY RUN MODE - No changes will be made
|
|
188
|
+
|
|
189
|
+
Preview of rollback:
|
|
190
|
+
Method: partial
|
|
191
|
+
Target: AGENTS.md, package.json
|
|
192
|
+
|
|
193
|
+
Files that would be affected:
|
|
194
|
+
- AGENTS.md
|
|
195
|
+
- package.json
|
|
196
|
+
|
|
197
|
+
USER sections that would be preserved:
|
|
198
|
+
- AGENTS.md: 2 sections
|
|
199
|
+
|
|
200
|
+
Custom commands that would be preserved:
|
|
201
|
+
- .claude/commands/custom/my-workflow.md
|
|
202
|
+
|
|
203
|
+
No changes made (dry run).
|
|
204
|
+
```
|
|
@@ -1,279 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Comprehensive rollback system with multiple methods and automatic USER content preservation.
|
|
3
|
-
|
|
4
|
-
# Rollback
|
|
5
|
-
|
|
6
|
-
This command provides safe rollback operations with comprehensive validation and USER section preservation.
|
|
7
|
-
|
|
8
|
-
## Usage
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
bunx forge rollback
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
Interactive menu with 6 options:
|
|
15
|
-
1. **Rollback last commit** - Quick undo of most recent change
|
|
16
|
-
2. **Rollback specific commit** - Target any commit by hash
|
|
17
|
-
3. **Rollback merged PR** - Revert an entire PR merge
|
|
18
|
-
4. **Rollback specific files** - Restore only certain files
|
|
19
|
-
5. **Rollback entire branch** - Revert multiple commits
|
|
20
|
-
6. **Preview rollback** - Dry run mode (shows changes without executing)
|
|
21
|
-
|
|
22
|
-
## How It Works
|
|
23
|
-
|
|
24
|
-
### Safety Features
|
|
25
|
-
|
|
26
|
-
**1. Working Directory Check**
|
|
27
|
-
- Requires clean working directory (no uncommitted changes)
|
|
28
|
-
- Prevents accidental data loss
|
|
29
|
-
- Prompts to commit or stash changes first
|
|
30
|
-
|
|
31
|
-
**2. Input Validation**
|
|
32
|
-
- Commit hashes: Must match `/^[0-9a-f]{4,40}$/i` or be 'HEAD'
|
|
33
|
-
- File paths: Validated to be within project (prevents path traversal)
|
|
34
|
-
- Methods: Whitelisted to 'commit', 'pr', 'partial', 'branch'
|
|
35
|
-
- Shell metacharacters: Rejected (`;`, `|`, `&`, `$`, `` ` ``, `(`, `)`, `<`, `>`, `\n`, `\r`)
|
|
36
|
-
|
|
37
|
-
**3. USER Section Preservation**
|
|
38
|
-
- Automatically extracts USER sections before rollback
|
|
39
|
-
- Restores USER sections after rollback
|
|
40
|
-
- Preserves custom commands in `.claude/commands/custom/`
|
|
41
|
-
- Amends rollback commit to include restored content
|
|
42
|
-
|
|
43
|
-
**4. Dry Run Mode**
|
|
44
|
-
- Preview affected files without executing
|
|
45
|
-
- Shows what would change
|
|
46
|
-
- No git operations performed
|
|
47
|
-
|
|
48
|
-
**5. Non-Destructive**
|
|
49
|
-
- Uses `git revert` (creates new commit)
|
|
50
|
-
- Never uses `git reset --hard` (destructive)
|
|
51
|
-
- Preserves full git history
|
|
52
|
-
- Can be undone with another rollback
|
|
53
|
-
|
|
54
|
-
### USER Section Preservation
|
|
55
|
-
|
|
56
|
-
**What Gets Preserved**:
|
|
57
|
-
```markdown
|
|
58
|
-
<!-- USER:START -->
|
|
59
|
-
Your custom content here
|
|
60
|
-
<!-- USER:END -->
|
|
61
|
-
|
|
62
|
-
<!-- USER:START:custom-name -->
|
|
63
|
-
Named USER section
|
|
64
|
-
<!-- USER:END:custom-name -->
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Process**:
|
|
68
|
-
1. Extract all USER sections from AGENTS.md, CLAUDE.md, etc.
|
|
69
|
-
2. Backup custom commands from `.claude/commands/custom/`
|
|
70
|
-
3. Execute rollback operation
|
|
71
|
-
4. Restore USER sections to current file content
|
|
72
|
-
5. Restore custom command files
|
|
73
|
-
6. Amend rollback commit to include restored content
|
|
74
|
-
|
|
75
|
-
**Result**: Your customizations survive rollback operations.
|
|
76
|
-
|
|
77
|
-
## Rollback Methods
|
|
78
|
-
|
|
79
|
-
### 1. Rollback Last Commit
|
|
80
|
-
|
|
81
|
-
**Use when**: Quick undo of most recent change
|
|
82
|
-
|
|
83
|
-
**How it works**:
|
|
84
|
-
```bash
|
|
85
|
-
git revert HEAD --no-edit
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
**Example**:
|
|
89
|
-
```bash
|
|
90
|
-
bunx forge rollback
|
|
91
|
-
# Select: 1. Rollback last commit
|
|
92
|
-
|
|
93
|
-
✓ Working directory is clean
|
|
94
|
-
✓ Extracting USER sections...
|
|
95
|
-
✓ Executing: git revert HEAD --no-edit
|
|
96
|
-
✓ Restoring USER sections...
|
|
97
|
-
✓ Amended commit to preserve USER content
|
|
98
|
-
|
|
99
|
-
Rollback complete!
|
|
100
|
-
Commit: a1b2c3d "Revert: add authentication feature"
|
|
101
|
-
Files affected: 5
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### 2. Rollback Specific Commit
|
|
105
|
-
|
|
106
|
-
**Use when**: Need to revert a commit from earlier in history
|
|
107
|
-
|
|
108
|
-
**How it works**:
|
|
109
|
-
```bash
|
|
110
|
-
git revert <commit-hash> --no-edit
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**Example**:
|
|
114
|
-
```bash
|
|
115
|
-
bunx forge rollback
|
|
116
|
-
# Select: 2. Rollback specific commit
|
|
117
|
-
# Enter: a1b2c3d
|
|
118
|
-
|
|
119
|
-
✓ Validating commit hash...
|
|
120
|
-
✓ Working directory is clean
|
|
121
|
-
✓ Extracting USER sections...
|
|
122
|
-
✓ Executing: git revert a1b2c3d --no-edit
|
|
123
|
-
✓ Restoring USER sections...
|
|
124
|
-
✓ Amended commit to preserve USER content
|
|
125
|
-
|
|
126
|
-
Rollback complete!
|
|
127
|
-
Commit: x9y8z7w "Revert: a1b2c3d"
|
|
128
|
-
Files affected: 8
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**Input validation**:
|
|
132
|
-
- Accepts 4-40 character hex strings
|
|
133
|
-
- Accepts 'HEAD'
|
|
134
|
-
- Rejects shell metacharacters
|
|
135
|
-
- Rejects invalid formats
|
|
136
|
-
|
|
137
|
-
### 3. Rollback Merged PR
|
|
138
|
-
|
|
139
|
-
**Use when**: Need to revert an entire merged pull request
|
|
140
|
-
|
|
141
|
-
**How it works**:
|
|
142
|
-
```bash
|
|
143
|
-
git revert -m 1 <merge-commit-hash> --no-edit
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**Example**:
|
|
147
|
-
```bash
|
|
148
|
-
bunx forge rollback
|
|
149
|
-
# Select: 3. Rollback merged PR
|
|
150
|
-
# Enter: def456 (merge commit hash)
|
|
151
|
-
|
|
152
|
-
✓ Validating commit hash...
|
|
153
|
-
✓ Working directory is clean
|
|
154
|
-
✓ Extracting USER sections...
|
|
155
|
-
✓ Executing: git revert -m 1 def456 --no-edit
|
|
156
|
-
✓ Restoring USER sections...
|
|
157
|
-
✓ Amended commit to preserve USER content
|
|
158
|
-
✓ Beads integration: Issue #123 marked as 'reverted'
|
|
159
|
-
|
|
160
|
-
Rollback complete!
|
|
161
|
-
Commit: m1n2o3p "Revert: Merge pull request #123"
|
|
162
|
-
Files affected: 15
|
|
163
|
-
Beads issue: #123 status → reverted
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
**Beads Integration**:
|
|
167
|
-
- Parses commit message for issue number (`#123`)
|
|
168
|
-
- If found, runs: `bd update <id> --status reverted --comment "PR reverted"`
|
|
169
|
-
- Silently skips if Beads not installed
|
|
170
|
-
- Updates issue tracking automatically
|
|
171
|
-
|
|
172
|
-
### 4. Rollback Specific Files
|
|
173
|
-
|
|
174
|
-
**Use when**: Only certain files need to be restored
|
|
175
|
-
|
|
176
|
-
**How it works**:
|
|
177
|
-
```bash
|
|
178
|
-
git checkout HEAD~1 -- <file1> <file2> ...
|
|
179
|
-
git commit -m "Rollback: <files>"
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
**Example**:
|
|
183
|
-
```bash
|
|
184
|
-
bunx forge rollback
|
|
185
|
-
# Select: 4. Rollback specific files
|
|
186
|
-
# Enter: AGENTS.md,CLAUDE.md
|
|
187
|
-
|
|
188
|
-
✓ Validating file paths...
|
|
189
|
-
✓ Working directory is clean
|
|
190
|
-
✓ Extracting USER sections...
|
|
191
|
-
✓ Executing: git checkout HEAD~1 -- AGENTS.md CLAUDE.md
|
|
192
|
-
✓ Committing changes...
|
|
193
|
-
✓ Restoring USER sections...
|
|
194
|
-
✓ Amended commit to preserve USER content
|
|
195
|
-
|
|
196
|
-
Rollback complete!
|
|
197
|
-
Commit: q4r5s6t "Rollback: AGENTS.md, CLAUDE.md"
|
|
198
|
-
Files affected: 2
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
**Path validation**:
|
|
202
|
-
- Comma-separated file paths
|
|
203
|
-
- Validates paths are within project root
|
|
204
|
-
- Prevents path traversal (`../../../etc/passwd`)
|
|
205
|
-
- Rejects shell metacharacters
|
|
206
|
-
- Uses `path.resolve()` + `startsWith()` check
|
|
207
|
-
|
|
208
|
-
### 5. Rollback Entire Branch
|
|
209
|
-
|
|
210
|
-
**Use when**: Need to revert a range of commits
|
|
211
|
-
|
|
212
|
-
**How it works**:
|
|
213
|
-
```bash
|
|
214
|
-
git revert <start-commit>..<end-commit> --no-edit
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
**Example**:
|
|
218
|
-
```bash
|
|
219
|
-
bunx forge rollback
|
|
220
|
-
# Select: 5. Rollback entire branch
|
|
221
|
-
# Enter: abc123..def456
|
|
222
|
-
|
|
223
|
-
✓ Validating commit range...
|
|
224
|
-
✓ Working directory is clean
|
|
225
|
-
✓ Extracting USER sections...
|
|
226
|
-
✓ Executing: git revert abc123..def456 --no-edit
|
|
227
|
-
✓ Restoring USER sections...
|
|
228
|
-
✓ Amended commit to preserve USER content
|
|
229
|
-
|
|
230
|
-
Rollback complete!
|
|
231
|
-
Commits reverted: 7
|
|
232
|
-
Files affected: 24
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
**Range validation**:
|
|
236
|
-
- Format: `start..end`
|
|
237
|
-
- Both commits must be valid hashes (4-40 chars)
|
|
238
|
-
- Rejects invalid formats
|
|
239
|
-
- Checks for `..` separator
|
|
240
|
-
|
|
241
|
-
### 6. Preview Rollback (Dry Run)
|
|
242
|
-
|
|
243
|
-
**Use when**: Want to see what would change without executing
|
|
244
|
-
|
|
245
|
-
**How it works**:
|
|
246
|
-
- Prompts for method and target
|
|
247
|
-
- Validates inputs
|
|
248
|
-
- Shows affected files
|
|
249
|
-
- No git operations performed
|
|
250
|
-
|
|
251
|
-
**Example**:
|
|
252
|
-
```bash
|
|
253
|
-
bunx forge rollback
|
|
254
|
-
# Select: 6. Preview rollback (dry run)
|
|
255
|
-
# Enter method: partial
|
|
256
|
-
# Enter target: AGENTS.md,package.json
|
|
257
|
-
|
|
258
|
-
✓ Validating inputs...
|
|
259
|
-
✓ DRY RUN MODE - No changes will be made
|
|
260
|
-
|
|
261
|
-
Preview of rollback:
|
|
262
|
-
Method: partial
|
|
263
|
-
Target: AGENTS.md, package.json
|
|
264
|
-
|
|
265
|
-
Files that would be affected:
|
|
266
|
-
- AGENTS.md
|
|
267
|
-
- package.json
|
|
268
|
-
|
|
269
|
-
USER sections that would be preserved:
|
|
270
|
-
- AGENTS.md: 2 sections
|
|
271
|
-
|
|
272
|
-
Custom commands that would be preserved:
|
|
273
|
-
- .claude/commands/custom/my-workflow.md
|
|
274
|
-
|
|
275
|
-
No changes made (dry run).
|
|
276
|
-
```
|
|
1
|
+
# Rollback: workflow integration, issue status & troubleshooting (reference)
|
|
277
2
|
|
|
278
3
|
## Integration with Workflow
|
|
279
4
|
|
|
@@ -289,13 +14,13 @@ No changes made (dry run).
|
|
|
289
14
|
- CI/CD failures indicate architecture problems
|
|
290
15
|
- Breaking changes need to be reverted
|
|
291
16
|
|
|
292
|
-
**After Merging** (
|
|
17
|
+
**After Merging** (pre-merge gate + user merge):
|
|
293
18
|
- Production issues discovered
|
|
294
19
|
- Need to revert feature entirely
|
|
295
20
|
- Rollback PR merge commit
|
|
296
21
|
|
|
297
22
|
**Recovery Scenarios**:
|
|
298
|
-
- Accidentally committed sensitive data (rollback
|
|
23
|
+
- Accidentally committed sensitive data (follow the secret-removal runbook; rollback alone does not purge history)
|
|
299
24
|
- Merge conflict resolution went wrong
|
|
300
25
|
- Refactor broke existing functionality
|
|
301
26
|
|
|
@@ -303,7 +28,7 @@ No changes made (dry run).
|
|
|
303
28
|
|
|
304
29
|
```bash
|
|
305
30
|
# Standard workflow
|
|
306
|
-
/status → /plan → /dev → /validate → /ship → /review → /
|
|
31
|
+
/status → /plan → /dev → /validate → /ship → /review → /verify (pre-merge doc gate runs inside /ship and /review)
|
|
307
32
|
|
|
308
33
|
# Recovery workflow
|
|
309
34
|
/dev → (issues discovered) → bunx forge rollback → /dev (retry)
|
|
@@ -340,7 +65,7 @@ bunx forge rollback
|
|
|
340
65
|
|
|
341
66
|
## Beads Integration
|
|
342
67
|
|
|
343
|
-
If Beads is installed (`
|
|
68
|
+
If Beads is installed (`bunx forge setup`), rollback automatically updates issue tracking.
|
|
344
69
|
|
|
345
70
|
### PR Rollback → Issue Status
|
|
346
71
|
|
|
@@ -348,7 +73,7 @@ When rolling back a merged PR:
|
|
|
348
73
|
1. Parse commit message for issue number (`#123`, `fixes #456`, etc.)
|
|
349
74
|
2. If issue number found:
|
|
350
75
|
```bash
|
|
351
|
-
|
|
76
|
+
forge update <id> --status reverted --comment "PR reverted by rollback"
|
|
352
77
|
```
|
|
353
78
|
3. Silently skip if:
|
|
354
79
|
- Beads not installed
|
|
@@ -360,7 +85,7 @@ When rolling back a merged PR:
|
|
|
360
85
|
If automatic detection doesn't work:
|
|
361
86
|
```bash
|
|
362
87
|
# After rollback
|
|
363
|
-
|
|
88
|
+
forge update 123 --status reverted --comment "Rolled back due to production issues"
|
|
364
89
|
```
|
|
365
90
|
|
|
366
91
|
## Troubleshooting
|
|
@@ -525,7 +250,8 @@ if (target !== 'HEAD' && !/^[0-9a-f]{4,40}$/i.test(target)) {
|
|
|
525
250
|
**File paths**:
|
|
526
251
|
```javascript
|
|
527
252
|
const resolved = path.resolve(projectRoot, file);
|
|
528
|
-
|
|
253
|
+
const rel = path.relative(projectRoot, resolved);
|
|
254
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
529
255
|
return { valid: false, error: 'Path outside project' };
|
|
530
256
|
}
|
|
531
257
|
```
|
|
@@ -633,7 +359,7 @@ bunx forge rollback
|
|
|
633
359
|
# ✓ Beads: Issue #123 → status: reverted
|
|
634
360
|
# ✓ Rollback complete!
|
|
635
361
|
|
|
636
|
-
|
|
362
|
+
forge show 123
|
|
637
363
|
# ID: 123
|
|
638
364
|
# Title: Add real-time updates
|
|
639
365
|
# Status: reverted
|