forge-workflow 0.0.9 → 0.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
- package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
- package/.cursor/rules/permissions-guidance.mdc +2 -2
- package/.forge/hooks/check-tdd.js +3 -0
- package/.forge/hooks/forge-native-hook.js +245 -0
- package/.forge/protected-paths.yaml +157 -0
- package/AGENTS.md +151 -61
- package/CHANGELOG.md +681 -0
- package/CLAUDE.md +9 -106
- package/QUICKSTART.md +171 -0
- package/README.md +271 -363
- package/bin/forge-cmd.js +120 -9
- package/bin/forge-preflight.js +26 -5
- package/bin/forge.js +466 -489
- package/docs/INDEX.md +93 -0
- package/docs/PROJECT_DESIGN.md +685 -0
- package/docs/architecture/index.md +66 -0
- package/docs/architecture/notes/README.md +35 -0
- package/docs/architecture/subsystems/README.md +46 -0
- package/docs/{TOOLCHAIN.md → forge/TOOLCHAIN.md} +56 -47
- package/docs/forge/VALIDATION.md +82 -0
- package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
- package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
- package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
- package/docs/guides/GREPTILE_SETUP.md +46 -0
- package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
- package/docs/guides/MIGRATION.md +56 -0
- package/docs/guides/SETUP.md +118 -0
- package/docs/guides/SUPPORT.md +185 -0
- package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
- package/docs/guides/memory-backends.md +183 -0
- package/docs/reference/ADAPTERS.md +128 -0
- package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
- package/docs/reference/COMMANDS.md +205 -0
- package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
- package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
- package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
- package/docs/reference/HERMES_INTEGRATION.md +118 -0
- package/docs/reference/INSIGHTS_RECAP.md +63 -0
- package/docs/reference/INSTALL.md +164 -0
- package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
- package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
- package/docs/reference/RELEASE.md +68 -0
- package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
- package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
- package/docs/reference/SKILLS.md +35 -0
- package/docs/reference/STATUS_BOARD.md +80 -0
- package/docs/reference/TEMPLATES.md +106 -0
- package/docs/reference/TOOLCHAIN.md +658 -0
- package/docs/reference/VALIDATION.md +82 -0
- package/docs/reference/agent-permissions.md +169 -0
- package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
- package/docs/reference/control-plane-guarantees.md +125 -0
- package/docs/reference/dependency-chain.md +331 -0
- package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
- package/docs/reference/forge-kernel-schema.md +72 -0
- package/docs/reference/kernel-conflict-evaluators.md +27 -0
- package/docs/reference/patch-md-format.md +77 -0
- package/docs/reference/protected-state-surfaces.md +59 -0
- package/docs/reference/shepherd.md +115 -0
- package/docs/reference/superpowers-analysis.md +320 -0
- package/docs/reference/superpowers-integration-options.md +404 -0
- package/docs/reference/test-environment.md +519 -0
- package/docs/reference/upgrade-safety.md +59 -0
- package/lefthook.yml +18 -0
- package/lib/adapter-cli.js +307 -0
- package/lib/adapters/beads-issue-adapter.js +127 -0
- package/lib/adapters/beads-kernel-compat.js +1042 -0
- package/lib/adapters/greptile-review-adapter.js +141 -0
- package/lib/adapters/kernel-issue-adapter.js +101 -0
- package/lib/adapters/pr-state-adapter.js +484 -0
- package/lib/adoption-profiles.js +126 -0
- package/lib/agents/README.md +2 -6
- package/lib/agents/claude.plugin.json +3 -8
- package/lib/agents/codex.plugin.json +9 -1
- package/lib/agents/cursor.plugin.json +2 -6
- package/lib/agents/hermes.plugin.json +22 -0
- package/lib/agents-config.js +39 -1236
- package/lib/audit-evidence.js +282 -0
- package/lib/beads-setup.js +225 -28
- package/lib/beads-sync-scaffold.js +36 -107
- package/lib/codex-skills.js +51 -1
- package/lib/commands/_issue.js +744 -70
- package/lib/commands/_manifest.js +91 -0
- package/lib/commands/_registry.js +85 -34
- package/lib/commands/_resolve-command-opts.js +261 -0
- package/lib/commands/_serve-security.js +270 -0
- package/lib/commands/adapter.js +12 -0
- package/lib/commands/add.js +118 -0
- package/lib/commands/audit.js +70 -0
- package/lib/commands/blocked.js +5 -0
- package/lib/commands/board.js +64 -0
- package/lib/commands/claim.js +21 -2
- package/lib/commands/claims.js +7 -0
- package/lib/commands/clean.js +485 -75
- package/lib/commands/close.js +2 -2
- package/lib/commands/comment.js +5 -0
- package/lib/commands/control.js +148 -0
- package/lib/commands/create.js +2 -2
- package/lib/commands/dev.js +185 -7
- package/lib/commands/doc-gate.js +336 -0
- package/lib/commands/doctor.js +156 -0
- package/lib/commands/explain.js +15 -0
- package/lib/commands/export.js +237 -0
- package/lib/commands/gate.js +192 -0
- package/lib/commands/hooks.js +242 -0
- package/lib/commands/inbox.js +118 -0
- package/lib/commands/init.js +598 -0
- package/lib/commands/insights.js +79 -0
- package/lib/commands/issue.js +12 -1
- package/lib/commands/issues.js +66 -0
- package/lib/commands/lint.js +5 -0
- package/lib/commands/list.js +2 -2
- package/lib/commands/merge.js +312 -0
- package/lib/commands/migrate.js +523 -0
- package/lib/commands/new.js +12 -0
- package/lib/commands/options.js +241 -0
- package/lib/commands/orient.js +13 -0
- package/lib/commands/orphans.js +5 -0
- package/lib/commands/patch.js +67 -0
- package/lib/commands/plan.js +436 -24
- package/lib/commands/preflight.js +211 -0
- package/lib/commands/prime.js +13 -0
- package/lib/commands/push.js +69 -2
- package/lib/commands/ready.js +2 -2
- package/lib/commands/recall.js +116 -0
- package/lib/commands/recap.js +61 -0
- package/lib/commands/recommend.js +22 -2
- package/lib/commands/release.js +91 -0
- package/lib/commands/remember.js +74 -0
- package/lib/commands/role.js +99 -0
- package/lib/commands/serve.js +581 -0
- package/lib/commands/setup.js +851 -979
- package/lib/commands/shepherd.js +436 -0
- package/lib/commands/ship.js +23 -1
- package/lib/commands/show.js +2 -2
- package/lib/commands/stage.js +192 -0
- package/lib/commands/stale.js +5 -0
- package/lib/commands/status.js +329 -11
- package/lib/commands/sync.js +34 -46
- package/lib/commands/team.js +15 -2
- package/lib/commands/test.js +58 -7
- package/lib/commands/update.js +2 -2
- package/lib/commands/upgrade.js +47 -0
- package/lib/commands/validate.js +56 -25
- package/lib/commands/worktree.js +308 -128
- package/lib/config-writer.js +202 -0
- package/lib/control-plane.js +236 -0
- package/lib/core/runtime-graph.js +946 -0
- package/lib/dep-guard/keyword-ripple.js +184 -0
- package/lib/deprecated-sync-cleanup.js +362 -0
- package/lib/detect-agent.js +2 -28
- package/lib/detect-worktree.js +42 -17
- package/lib/doc-gate/declaration.js +177 -0
- package/lib/doc-gate/detect.js +289 -0
- package/lib/doc-gate/gate.js +375 -0
- package/lib/doc-gate/okf-config.js +128 -0
- package/lib/doc-gate/okf.js +429 -0
- package/lib/docs-command.js +1161 -6
- package/lib/forge-issues.js +697 -0
- package/lib/forge-lock.js +262 -0
- package/lib/gate-events.js +193 -0
- package/lib/global-flags.js +74 -0
- package/lib/greptile-match.js +7 -63
- package/lib/harness-capability-matrix.js +380 -0
- package/lib/hook-global-installer.js +347 -0
- package/lib/hook-renderer.js +451 -0
- package/lib/inbox.js +391 -0
- package/lib/insights.js +397 -0
- package/lib/issue-adapter.js +156 -0
- package/lib/issue-backend.js +145 -0
- package/lib/issue-render.js +220 -0
- package/lib/issue-sync/authority.js +100 -0
- package/lib/issue-sync/github-pull.js +184 -0
- package/lib/issue-sync/import-primitives.js +98 -0
- package/lib/issue-sync/legacy-link-bridge.js +436 -0
- package/lib/issue-sync/link-store.js +292 -0
- package/lib/issue-sync/project-github.js +123 -0
- package/lib/issue-sync/reconcile.js +195 -0
- package/lib/issue-sync/schema.js +126 -0
- package/lib/kernel/backing-issue.js +305 -0
- package/lib/kernel/broker.js +1218 -0
- package/lib/kernel/cli-broker-factory.js +130 -0
- package/lib/kernel/conflict-signal.js +82 -0
- package/lib/kernel/evaluators.js +195 -0
- package/lib/kernel/fs-class.js +495 -0
- package/lib/kernel/issue-command-contract.js +559 -0
- package/lib/kernel/issue-id-resolver.js +186 -0
- package/lib/kernel/lease-enforcer.js +158 -0
- package/lib/kernel/migrations.js +333 -0
- package/lib/kernel/planning-buckets-schema.js +109 -0
- package/lib/kernel/projection-jsonl-writer.js +450 -0
- package/lib/kernel/readiness-model.js +329 -0
- package/lib/kernel/schema.js +356 -0
- package/lib/kernel/sqlite-driver.js +2504 -0
- package/lib/kernel/taxonomy-validator.js +394 -0
- package/lib/lefthook-check.js +8 -4
- package/lib/lefthook-wiring.js +413 -0
- package/lib/mcp-config-renderer.js +288 -0
- package/lib/memory/graphiti-mcp.js +106 -0
- package/lib/memory/router.js +387 -0
- package/lib/memory/typed-api.js +102 -0
- package/lib/memory-digest.js +195 -0
- package/lib/merge-rules.js +395 -0
- package/lib/migrate-dry-run.js +466 -0
- package/lib/orientation.js +863 -0
- package/lib/package-manager-remediation.js +103 -0
- package/lib/package-root.js +381 -0
- package/lib/patch-intent.js +890 -0
- package/lib/plugin-catalog.js +3 -4
- package/lib/plugin-manager.js +0 -5
- package/lib/pr-bundle.js +186 -0
- package/lib/pr-monitor/differ.js +195 -0
- package/lib/pr-monitor/events.js +0 -0
- package/lib/pr-monitor/gather.js +124 -0
- package/lib/pr-monitor/journal.js +299 -0
- package/lib/pr-monitor/monitor.js +146 -0
- package/lib/pr-monitor/render-sticky.js +157 -0
- package/lib/pr-monitor/watch-lifecycle.js +95 -0
- package/lib/pr-monitor/watch.js +247 -0
- package/lib/pr-pull.js +1273 -0
- package/lib/pr-shepherd.js +494 -0
- package/lib/pr-state-validator.js +59 -0
- package/lib/preflight/gates.js +237 -0
- package/lib/preflight/runner.js +116 -0
- package/lib/project-discovery.js +0 -53
- package/lib/project-memory.js +166 -0
- package/lib/protected-path-manifest.js +281 -0
- package/lib/protected-state-surfaces.js +387 -0
- package/lib/release-readiness.js +2089 -0
- package/lib/reset.js +59 -45
- package/lib/review-adapter.js +68 -0
- package/lib/rules-sync.js +260 -0
- package/lib/runtime-health.js +332 -23
- package/lib/safety-config-renderer.js +268 -0
- package/lib/setup-action-log.js +1 -7
- package/lib/setup.js +27 -65
- package/lib/shell-utils.js +76 -6
- package/lib/skills-sync.js +330 -0
- package/lib/smart-status/conflicts.js +205 -0
- package/lib/smart-status/scoring.js +191 -0
- package/lib/status/beads-snapshot.js +145 -0
- package/lib/status/presenter.js +216 -0
- package/lib/status/snapshot.js +186 -0
- package/lib/sync-backend.js +202 -0
- package/lib/untrusted-content.js +52 -0
- package/lib/upgrade-safety.js +199 -0
- package/lib/workflow/enforce-stage.js +298 -47
- package/lib/workflow/stage-transition.js +115 -0
- package/lib/workflow/stages.js +30 -6
- package/lib/workflow/state-manager.js +159 -14
- package/lib/workflow/state.js +23 -1
- package/lib/workflow-profiles.js +17 -5
- package/package.json +46 -36
- package/rules/documentation.md +19 -0
- package/rules/kernel-tracking.md +26 -0
- package/rules/security.md +22 -0
- package/rules/tdd.md +20 -0
- package/rules/workflow.md +27 -0
- package/scripts/auto-backing-issue.js +47 -0
- package/scripts/beads-context.sh +165 -22
- package/scripts/beads-migrate-to-dolt.sh +7 -0
- package/scripts/beads-upgrade-smoke.sh +284 -0
- package/scripts/behavioral-judge.sh +115 -11
- package/scripts/benchmark.js +349 -63
- package/scripts/bootstrap-windows-tools.sh +78 -0
- package/scripts/branch-protection.js +2 -3
- package/scripts/check-agents.js +34 -137
- package/scripts/commitlint.js +3 -1
- package/scripts/conflict-detect.sh +3 -0
- package/scripts/dep-guard-analyze.js +52 -17
- package/scripts/dep-guard-keyword-ripple.js +29 -0
- package/scripts/dep-guard-render-review.js +86 -0
- package/scripts/dep-guard.sh +64 -232
- package/scripts/file-index.sh +3 -0
- package/scripts/forge-team/lib/claim.sh +34 -18
- package/scripts/forge-team/lib/dashboard.sh +61 -86
- package/scripts/forge-team/lib/epic.sh +99 -263
- package/scripts/forge-team/lib/hooks.sh +26 -28
- package/scripts/forge-team/lib/identity.sh +4 -4
- package/scripts/forge-team/lib/sync-github.sh +144 -47
- package/scripts/forge-team/lib/verify.sh +93 -83
- package/scripts/forge-team/lib/workload.sh +41 -65
- package/scripts/forge-team/tests/claim.test.sh +25 -19
- package/scripts/forge-team/tests/dashboard.test.sh +31 -46
- package/scripts/forge-team/tests/epic.test.sh +52 -71
- package/scripts/forge-team/tests/hooks.test.sh +38 -50
- package/scripts/forge-team/tests/identity.test.sh +3 -3
- package/scripts/forge-team/tests/integration.test.sh +44 -66
- package/scripts/forge-team/tests/sync-github.test.sh +183 -79
- package/scripts/forge-team/tests/verify.test.sh +37 -46
- package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
- package/scripts/forge-team/tests/workload.test.sh +32 -66
- package/scripts/gen-command-manifest.js +153 -0
- package/scripts/gen-embedded-assets.mjs +129 -0
- package/scripts/install.ps1 +139 -0
- package/scripts/install.sh +268 -0
- package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
- package/scripts/lib/release-asset.mjs +84 -0
- package/scripts/parity-check.mjs +145 -0
- package/scripts/parity-check.test.mjs +58 -0
- package/scripts/pin-agentic-workflow-images.js +112 -0
- package/scripts/pr-coordinator.sh +3 -0
- package/scripts/preflight-sonar.eslint.config.mjs +44 -0
- package/scripts/preflight.sh +108 -0
- package/scripts/protected-state-check.js +104 -0
- package/scripts/smart-status-score.js +31 -0
- package/scripts/smart-status-sessions.js +51 -0
- package/scripts/smart-status.sh +117 -369
- package/scripts/spikes/config-race-bench.js +111 -0
- package/scripts/spikes/harness-capability-matrix.js +13 -0
- package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
- package/scripts/spikes/protected-path-manifest.js +20 -0
- package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
- package/scripts/sync-agent-skills.js +62 -0
- package/scripts/sync-agentic-workflow.js +48 -0
- package/scripts/sync-utils.sh +3 -0
- package/scripts/test-ci-shard.js +251 -0
- package/scripts/test-dashboard.js +188 -52
- package/scripts/test-full-suite.js +186 -0
- package/scripts/test-profile.js +278 -0
- package/scripts/test.js +302 -28
- package/scripts/validate.js +143 -0
- package/scripts/validate.sh +18 -1
- package/skills/claim-safety/SKILL.md +102 -0
- package/skills/claim-safety/evals/evals.json +46 -0
- package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +46 -52
- package/skills/dev/evals/evals.json +50 -0
- package/skills/hermes-forge/SKILL.md +185 -0
- package/skills/hermes-forge/evals/evals.json +46 -0
- package/skills/issue-basics/SKILL.md +111 -0
- package/skills/issue-basics/evals/evals.json +46 -0
- package/skills/kernel/SKILL.md +166 -0
- package/skills/kernel/evals/evals.json +50 -0
- package/skills/memory/SKILL.md +102 -0
- package/skills/parallel-deep-research/SKILL.md +14 -11
- package/skills/parallel-deep-research/evals/evals.json +11 -27
- package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +134 -159
- package/skills/plan/evals/evals.json +42 -0
- package/skills/research/SKILL.md +195 -0
- package/skills/research/evals/evals.json +42 -0
- package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
- package/skills/review/evals/evals.json +42 -0
- package/skills/rollback/SKILL.md +110 -0
- package/skills/rollback/evals/evals.json +46 -0
- package/skills/rollback/references/methods.md +204 -0
- package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
- package/skills/shepherd/SKILL.md +66 -0
- package/skills/shepherd/evals/evals.json +42 -0
- package/skills/ship/SKILL.md +251 -0
- package/skills/ship/evals/evals.json +42 -0
- package/skills/smith/SKILL.md +142 -0
- package/skills/smith/evals/evals.json +46 -0
- package/skills/smith/references/autonomy-and-gates.md +94 -0
- package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
- package/skills/sonarcloud/evals/evals.json +46 -0
- package/skills/sonarcloud-analysis/SKILL.md +18 -13
- package/skills/sonarcloud-analysis/evals/evals.json +11 -15
- package/skills/status/SKILL.md +102 -0
- package/skills/status/evals/evals.json +50 -0
- package/skills/triage-ready/SKILL.md +121 -0
- package/skills/triage-ready/evals/evals.json +42 -0
- package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
- package/skills/validate/evals/evals.json +42 -0
- package/skills/verify/SKILL.md +299 -0
- package/skills/verify/evals/evals.json +50 -0
- package/.claude/commands/dev.md +0 -345
- package/.claude/commands/plan.md +0 -566
- package/.claude/commands/premerge.md +0 -186
- package/.claude/commands/research.md +0 -42
- package/.claude/commands/review.md +0 -451
- package/.claude/commands/rollback.md +0 -721
- package/.claude/commands/ship.md +0 -213
- package/.claude/commands/sonarcloud.md +0 -152
- package/.claude/commands/status.md +0 -90
- package/.claude/commands/validate.md +0 -288
- package/.claude/commands/verify.md +0 -269
- package/.claude/rules/workflow.md +0 -121
- package/.cline/workflows/dev.md +0 -342
- package/.cline/workflows/plan.md +0 -563
- package/.cline/workflows/premerge.md +0 -183
- package/.cline/workflows/research.md +0 -39
- package/.cline/workflows/review.md +0 -448
- package/.cline/workflows/rollback.md +0 -718
- package/.cline/workflows/ship.md +0 -210
- package/.cline/workflows/sonarcloud.md +0 -146
- package/.cline/workflows/status.md +0 -87
- package/.cline/workflows/validate.md +0 -285
- package/.cline/workflows/verify.md +0 -266
- package/.codex/config.toml +0 -11
- package/.codex/skills/dev/SKILL.md +0 -345
- package/.codex/skills/plan/SKILL.md +0 -566
- package/.codex/skills/premerge/SKILL.md +0 -186
- package/.codex/skills/research/SKILL.md +0 -42
- package/.codex/skills/review/SKILL.md +0 -451
- package/.codex/skills/rollback/SKILL.md +0 -721
- package/.codex/skills/ship/SKILL.md +0 -213
- package/.codex/skills/sonarcloud/SKILL.md +0 -149
- package/.codex/skills/status/SKILL.md +0 -90
- package/.codex/skills/validate/SKILL.md +0 -288
- package/.codex/skills/verify/SKILL.md +0 -269
- package/.cursor/commands/dev.md +0 -342
- package/.cursor/commands/plan.md +0 -563
- package/.cursor/commands/premerge.md +0 -183
- package/.cursor/commands/research.md +0 -39
- package/.cursor/commands/review.md +0 -448
- package/.cursor/commands/ship.md +0 -210
- package/.cursor/commands/sonarcloud.md +0 -146
- package/.cursor/commands/status.md +0 -87
- package/.cursor/commands/validate.md +0 -285
- package/.cursor/commands/verify.md +0 -266
- package/.cursorrules +0 -149
- package/.github/prompts/premerge.prompt.md +0 -188
- package/.github/prompts/research.prompt.md +0 -44
- package/.github/prompts/rollback.prompt.md +0 -723
- package/.github/prompts/ship.prompt.md +0 -215
- package/.github/prompts/status.prompt.md +0 -92
- package/.github/prompts/verify.prompt.md +0 -271
- package/.github/workflows/beads-to-github.yml +0 -56
- package/.github/workflows/github-to-beads.yml +0 -97
- package/.kilocode/workflows/dev.md +0 -346
- package/.kilocode/workflows/plan.md +0 -567
- package/.kilocode/workflows/premerge.md +0 -187
- package/.kilocode/workflows/research.md +0 -43
- package/.kilocode/workflows/review.md +0 -452
- package/.kilocode/workflows/rollback.md +0 -722
- package/.kilocode/workflows/ship.md +0 -214
- package/.kilocode/workflows/sonarcloud.md +0 -150
- package/.kilocode/workflows/status.md +0 -91
- package/.kilocode/workflows/validate.md +0 -289
- package/.kilocode/workflows/verify.md +0 -270
- package/.opencode/commands/dev.md +0 -345
- package/.opencode/commands/plan.md +0 -566
- package/.opencode/commands/premerge.md +0 -186
- package/.opencode/commands/research.md +0 -42
- package/.opencode/commands/review.md +0 -451
- package/.opencode/commands/rollback.md +0 -721
- package/.opencode/commands/ship.md +0 -213
- package/.opencode/commands/sonarcloud.md +0 -149
- package/.opencode/commands/status.md +0 -90
- package/.opencode/commands/validate.md +0 -288
- package/.opencode/commands/verify.md +0 -269
- package/.roo/commands/dev.md +0 -346
- package/.roo/commands/plan.md +0 -567
- package/.roo/commands/premerge.md +0 -187
- package/.roo/commands/research.md +0 -43
- package/.roo/commands/review.md +0 -452
- package/.roo/commands/rollback.md +0 -722
- package/.roo/commands/ship.md +0 -214
- package/.roo/commands/sonarcloud.md +0 -150
- package/.roo/commands/status.md +0 -91
- package/.roo/commands/validate.md +0 -289
- package/.roo/commands/verify.md +0 -270
- package/docs/BEADS_GITHUB_SYNC.md +0 -255
- package/docs/GREPTILE_SETUP.md +0 -400
- package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
- package/docs/SETUP.md +0 -663
- package/docs/VALIDATION.md +0 -363
- package/lib/agents/cline.plugin.json +0 -29
- package/lib/agents/copilot.plugin.json +0 -24
- package/lib/agents/kilocode.plugin.json +0 -22
- package/lib/agents/opencode.plugin.json +0 -23
- package/lib/agents/roo.plugin.json +0 -30
- package/lib/beads-health-check.js +0 -143
- package/lib/commands/commands-reset.js +0 -147
- package/opencode.json +0 -67
- package/scripts/beads-context.test.js +0 -567
- package/scripts/github-beads-sync/comment.mjs +0 -64
- package/scripts/github-beads-sync/config.mjs +0 -148
- package/scripts/github-beads-sync/github-api.mjs +0 -131
- package/scripts/github-beads-sync/index.mjs +0 -332
- package/scripts/github-beads-sync/label-mapper.mjs +0 -54
- package/scripts/github-beads-sync/mapping.mjs +0 -78
- package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
- package/scripts/github-beads-sync/reverse-sync.mjs +0 -138
- package/scripts/github-beads-sync/run-bd.mjs +0 -161
- package/scripts/github-beads-sync/sanitize.mjs +0 -121
- package/scripts/github-beads-sync.config.json +0 -26
- package/scripts/sync-commands.js +0 -600
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Autonomy calibration & human gates — reference
|
|
2
|
+
|
|
3
|
+
Read this when you are calibrating how much to involve the human on a specific
|
|
4
|
+
issue, or when you need the exact gate commands and IDs. `SKILL.md` carries the
|
|
5
|
+
procedure; this file carries the lookup tables and the reasoning behind them.
|
|
6
|
+
|
|
7
|
+
## The three human gates
|
|
8
|
+
|
|
9
|
+
Forge registers three human gates in the runtime graph as **approval-satisfied
|
|
10
|
+
events** (`requires: []`), additive to the evidence exit-gates. They are the
|
|
11
|
+
points where smith pauses and hands control to the human.
|
|
12
|
+
|
|
13
|
+
| Gate | Fires | What the human is deciding |
|
|
14
|
+
|------|-------|----------------------------|
|
|
15
|
+
| `gate.intent` | before planning / brainstorm | Do we agree on the goal, and on the autonomy tier smith proposed, before any design work? |
|
|
16
|
+
| `gate.plan-approval` | after the design doc + task DAG exist, before `dev` | Is this plan the right one (approve), or should it be redirected? |
|
|
17
|
+
| `gate.merge` | after `review`, before merge | Is the PR good to merge? |
|
|
18
|
+
|
|
19
|
+
The evidence exit-gates — `gate.plan-exit`, `gate.dev-exit`,
|
|
20
|
+
`gate.validate-exit`, `gate.ship-entry` — are a different kind: they are
|
|
21
|
+
satisfied by artifacts *inside* the stage skills (a design doc, TDD tests,
|
|
22
|
+
validation output), not by a human. Smith relies on each stage skill's own exit
|
|
23
|
+
checks for those and does not gate on them itself.
|
|
24
|
+
|
|
25
|
+
### Why gates are events, not prose
|
|
26
|
+
|
|
27
|
+
Each approval is written to the issue's event stream as a durable
|
|
28
|
+
`gate.approved` / `gate.rejected` record. That is what makes a gated run
|
|
29
|
+
**resume-safe**: if smith is interrupted by a crash or a context compaction, it
|
|
30
|
+
re-reads the event with `check` / `status` on resume and knows whether it may
|
|
31
|
+
proceed — instead of re-asking the human or guessing from memory. Prose in a
|
|
32
|
+
transcript cannot survive a compaction; an event can.
|
|
33
|
+
|
|
34
|
+
### Gate commands
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
forge gate check <issue> <gate> # exit 0 iff the gate is DISABLED or APPROVED
|
|
38
|
+
forge gate approve <issue> <gate> [--reason] # human records approval (durable event)
|
|
39
|
+
forge gate reject <issue> <gate> --reason # human sends the work back
|
|
40
|
+
forge gate status <issue> [--json] # list this issue's gate events (who/when)
|
|
41
|
+
forge gate enable|disable <gate-id> # repo default toggle: workflow.gates.<id>.enabled
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`check` is the enforcement primitive smith calls before advancing past a gate. It
|
|
45
|
+
exits 0 when the gate is disabled for the repo *or* an approval event exists, so a
|
|
46
|
+
disabled gate simply falls through — that is how a lean tier skips a checkpoint.
|
|
47
|
+
|
|
48
|
+
## Autonomy calibration — stakes → gate density
|
|
49
|
+
|
|
50
|
+
Match checkpoint density to what is at stake. A one-line docs fix and a risky
|
|
51
|
+
refactor need very different amounts of oversight: forcing the docs fix through a
|
|
52
|
+
full brainstorm wastes everyone's time, while letting the refactor run unattended
|
|
53
|
+
risks a large wrong turn. Smith reads the issue's **size × importance ×
|
|
54
|
+
complexity**, proposes a tier at `gate.intent`, and the human confirms or
|
|
55
|
+
overrides.
|
|
56
|
+
|
|
57
|
+
| Tier | Stakes read | Enforced human gates | Extra checkpoints |
|
|
58
|
+
|------|-------------|----------------------|-------------------|
|
|
59
|
+
| **Lean** | small · simple · low-importance (docs typo, one-line fix) | just `gate.merge`, or none under CI | skip the intent brainstorm; lean on CI + the evidence exit-gates |
|
|
60
|
+
| **Standard** (default) | an ordinary feature or bug | `gate.intent` · `gate.plan-approval` · `gate.merge` | the evidence exit-gates as configured |
|
|
61
|
+
| **High** | large · important · or complex (critical feature, risky refactor) | all three human gates, enabled | per-milestone / per-task human check-ins (pause + `forge comment`), an explicit pre-ship review pass |
|
|
62
|
+
|
|
63
|
+
### How a tier is enacted
|
|
64
|
+
|
|
65
|
+
The tier maps to *which gate events are required* for this issue. The human enacts
|
|
66
|
+
add/drop with `forge gate enable|disable <gate-id>` (the repo default), and smith
|
|
67
|
+
enforces every *enabled* gate via `check`. Because approvals are per-issue events,
|
|
68
|
+
the human can add or drop a checkpoint mid-flight and smith re-reads it on the next
|
|
69
|
+
step — the calibration is not frozen at planning time.
|
|
70
|
+
|
|
71
|
+
### Why uncertainty adds gates rather than removing them
|
|
72
|
+
|
|
73
|
+
Smith only *proposes* a tier; it never lowers oversight on its own. When its read
|
|
74
|
+
of size/importance/complexity is low-confidence, it defaults to **more**
|
|
75
|
+
checkpoints, because an unwanted extra approval is a few seconds of the human's
|
|
76
|
+
time, while a missed one can mean a large amount of wasted or wrong work. The
|
|
77
|
+
human always wins the final say.
|
|
78
|
+
|
|
79
|
+
## Composition map — smith invents nothing
|
|
80
|
+
|
|
81
|
+
Every step is an existing skill or `forge` verb; smith only sequences them.
|
|
82
|
+
|
|
83
|
+
| Step | Composed skill / verb |
|
|
84
|
+
|------|-----------------------|
|
|
85
|
+
| Pick work | `triage-ready` (`forge issue ready` / `blocked` / `stats`) |
|
|
86
|
+
| Claim + prove ownership | `claim-safety` (`forge claim` → `forge issue owns`) |
|
|
87
|
+
| Human gates | `forge gate check` / `approve` / `reject` / `status` |
|
|
88
|
+
| Plan | `plan` (intent brainstorm → design doc → task DAG) |
|
|
89
|
+
| Build | `dev` (per-task implementer → spec → quality TDD) |
|
|
90
|
+
| Validate | `validate` (types · lint · security · tests) |
|
|
91
|
+
| Ship | `ship` (push + PR) |
|
|
92
|
+
| Review | `review` (address CI / bot feedback) |
|
|
93
|
+
| Verify | `verify` (post-merge health) |
|
|
94
|
+
| Release readiness | `forge release check --target <version> --json` |
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sonarcloud
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
Query SonarCloud code-quality data via the `/sonarcloud` slash command — the fast in-context
|
|
5
|
+
lookup for a project, branch, or PR. Handles `issues`, `metrics`, `gate` (pass/fail + failed
|
|
6
|
+
conditions), `health`, `pr <number>`, `hotspots`, `history`, plus `--branch`, `--severity`,
|
|
7
|
+
`--type`, `--new-code` filters. Use the moment the user types `/sonarcloud ...` or asks in
|
|
8
|
+
plain language: "what does SonarCloud say about this PR", "check the SonarCloud quality gate
|
|
9
|
+
before I ship", "SonarCloud blocker/critical bugs on develop", "new-code SonarCloud issues
|
|
10
|
+
on PR 214". Only READS/reports — does NOT fix findings or reply-to/resolve PR threads (that
|
|
11
|
+
is `review`); it is the lightweight command surface, NOT the deep-analysis session
|
|
12
|
+
correlating findings with local source or history trends (that is `sonarcloud-analysis`).
|
|
13
|
+
Not for local SAST scans of your own code, nor the Forge issue tracker (`forge issue ...`,
|
|
14
|
+
"open/ready issues") — here those bare words always mean SonarCloud.
|
|
15
|
+
allowed-tools: Bash, Read, Grep, Glob, WebFetch
|
|
5
16
|
---
|
|
6
17
|
|
|
7
18
|
# SonarCloud Query Command
|
|
@@ -41,7 +52,7 @@ Pull code quality data from SonarCloud. Requires `SONARCLOUD_TOKEN` environment
|
|
|
41
52
|
- Optional filters (branch, severity, type, new-code, etc.)
|
|
42
53
|
2. Check for `SONARCLOUD_TOKEN` environment variable. If not set, inform user.
|
|
43
54
|
3. Check for `SONARCLOUD_ORG` environment variable or ask user for organization key.
|
|
44
|
-
4. Execute the appropriate API call
|
|
55
|
+
4. Execute the appropriate API call against the SonarCloud REST API (see the API Reference section below for endpoints)
|
|
45
56
|
5. Format and present results clearly:
|
|
46
57
|
- For issues: Group by severity/type, show file, line, message
|
|
47
58
|
- For metrics: Show as table with metric name and value
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "/sonarcloud gate my-project",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "/sonarcloud pr befach-web 214 --new-code",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "What does SonarCloud say about this pull request? Just the quality gate and the blocker issues, quick.",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "Show SonarCloud bugs and vulnerabilities on the develop branch for the api project",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "Any new-code SonarCloud issues on PR 88 before I ship?",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Pull the SonarCloud coverage and code-smell numbers for my-project so I can eyeball them",
|
|
24
|
+
"should_trigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Open an isolated SonarCloud deep-dive: correlate every flagged vulnerability with the actual source files, walk the analysis history for coverage trends, and hand back a synthesized technical-debt report",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "SonarCloud flagged issues on PR 214 — fix them, reply to each review thread, and mark them resolved",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"query": "Run a SAST security scan over my code and list the vulnerabilities you find",
|
|
36
|
+
"should_trigger": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"query": "Show me the open issues that are ready to work on next",
|
|
40
|
+
"should_trigger": false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"query": "Run lint and type-check and the test suite before I ship this branch",
|
|
44
|
+
"should_trigger": false
|
|
45
|
+
}
|
|
46
|
+
]
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sonarcloud-analysis
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
SonarCloud deep-dive via its REST API: pull open issues (bugs, vulnerabilities, code
|
|
5
|
+
smells), coverage/duplication metrics, quality-gate pass/fail with failed thresholds,
|
|
6
|
+
security hotspots, and measure/analysis history for a whole project, branch, or PR, then
|
|
7
|
+
return a ranked summary. Use whenever the user names SonarCloud or asks about code-quality
|
|
8
|
+
metrics, technical debt, a red/failing quality gate, or static-analysis
|
|
9
|
+
vulnerabilities/hotspots — e.g. 'why is the SonarCloud gate failing on this PR' or 'pull
|
|
10
|
+
every BLOCKER vulnerability with file and line'. NOT for: the thin `/sonarcloud <query>
|
|
11
|
+
<project>` slash command for a quick lookup (sibling 'sonarcloud'); replying to/resolving PR
|
|
12
|
+
review threads across Greptile, CodeRabbit, or GitHub Actions ('review'); running local
|
|
13
|
+
lint/type-check/test/security scans pre-ship ('validate'); implementing or patching a
|
|
14
|
+
flagged issue ('dev'); or an external market/competitor report on SonarSource or DevSecOps
|
|
15
|
+
vendors ('parallel-deep-research').
|
|
11
16
|
category: Code Quality
|
|
12
17
|
tags: [sonarcloud, code-quality, issues, metrics, security]
|
|
13
18
|
context: fork
|
|
@@ -77,12 +82,12 @@ export SONARCLOUD_ORG="your-org"
|
|
|
77
82
|
export SONARCLOUD_PROJECT="your-project"
|
|
78
83
|
|
|
79
84
|
# Common queries
|
|
80
|
-
curl -H "Authorization: Bearer $
|
|
81
|
-
"https://sonarcloud.io/api/issues/search?organization=$
|
|
82
|
-
curl -H "Authorization: Bearer $
|
|
83
|
-
"https://sonarcloud.io/api/measures/component?component=$
|
|
84
|
-
curl -H "Authorization: Bearer $
|
|
85
|
-
"https://sonarcloud.io/api/qualitygates/project_status?projectKey=$
|
|
85
|
+
curl -H "Authorization: Bearer $SONARCLOUD_TOKEN" \
|
|
86
|
+
"https://sonarcloud.io/api/issues/search?organization=$SONARCLOUD_ORG&componentKeys=$SONARCLOUD_PROJECT&resolved=false"
|
|
87
|
+
curl -H "Authorization: Bearer $SONARCLOUD_TOKEN" \
|
|
88
|
+
"https://sonarcloud.io/api/measures/component?component=$SONARCLOUD_PROJECT&metricKeys=bugs,coverage"
|
|
89
|
+
curl -H "Authorization: Bearer $SONARCLOUD_TOKEN" \
|
|
90
|
+
"https://sonarcloud.io/api/qualitygates/project_status?projectKey=$SONARCLOUD_PROJECT"
|
|
86
91
|
```
|
|
87
92
|
|
|
88
93
|
## Endpoints
|
|
@@ -1,50 +1,46 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
|
-
"query": "
|
|
3
|
+
"query": "Why is our quality gate red on this pull request? Break down exactly which conditions failed and by how much.",
|
|
4
4
|
"should_trigger": true
|
|
5
5
|
},
|
|
6
6
|
{
|
|
7
|
-
"query": "
|
|
7
|
+
"query": "How much technical debt has piled up in the codebase, and which files carry the worst maintainability rating?",
|
|
8
8
|
"should_trigger": true
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
|
-
"query": "
|
|
11
|
+
"query": "Give me the coverage and duplication numbers for the develop branch and flag the modules that regressed.",
|
|
12
12
|
"should_trigger": true
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"query": "
|
|
15
|
+
"query": "List every unresolved BLOCKER and CRITICAL vulnerability SonarCloud found, with file and line, so I know what to fix first.",
|
|
16
16
|
"should_trigger": true
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
"query": "
|
|
19
|
+
"query": "Pull the security hotspots that still need review and summarize the risk for each.",
|
|
20
20
|
"should_trigger": true
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
"query": "
|
|
23
|
+
"query": "Show me how our reliability and security ratings have trended over the last month of analyses.",
|
|
24
24
|
"should_trigger": true
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
"query": "
|
|
27
|
+
"query": "/sonarcloud issues checkout-service --severity BLOCKER",
|
|
28
28
|
"should_trigger": false
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
|
-
"query": "
|
|
31
|
+
"query": "Go through all the open PR review threads from Greptile and CodeRabbit, reply to each explaining the fix, and mark them resolved.",
|
|
32
32
|
"should_trigger": false
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"query": "
|
|
35
|
+
"query": "Run lint, type-check, the test suite, and the security scanner and give me fresh output before I ship this branch.",
|
|
36
36
|
"should_trigger": false
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
|
-
"query": "
|
|
39
|
+
"query": "Fix the SQL-injection vulnerability SonarCloud flagged in login.ts and add a regression test.",
|
|
40
40
|
"should_trigger": false
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
"query": "
|
|
44
|
-
"should_trigger": false
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"query": "Add proper citations to docs/research/security-audit-findings.md following our project's citation standards",
|
|
43
|
+
"query": "Produce a competitive market report comparing SonarCloud, Snyk, and Codacy for our tooling decision.",
|
|
48
44
|
"should_trigger": false
|
|
49
45
|
}
|
|
50
46
|
]
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: status
|
|
3
|
+
description: >
|
|
4
|
+
Report where the project stands and what work is in flight -- the Forge status snapshot.
|
|
5
|
+
Reach for this at session start or whenever the user says "/status", "where am I", "what's
|
|
6
|
+
in progress", "catch me up", "resume work", or "what changed recently". It surfaces the workflow stage, your active/claimed issues, all issues ranked by
|
|
7
|
+
composite score with conflict-risk flags, stale already-merged issues (which it closes), and
|
|
8
|
+
recent commits. Use it to ORIENT and decide the next move -- it reports state; it does not
|
|
9
|
+
plan, develop, or claim issues. Not for: routing to a stage skill or documenting the full
|
|
10
|
+
issue-verb surface (kernel); ranking and EXPLAINING a single next-ready or blocked issue to
|
|
11
|
+
hand off (triage-ready); everyday create/update/list/close/comment/search issue ops
|
|
12
|
+
(issue-basics); the Hermes harness's token-bounded orient/recap contract (hermes-forge); or
|
|
13
|
+
the post-merge CI health check that closes issues after a merge lands (verify).
|
|
14
|
+
allowed-tools: Bash, Read, Grep, Glob
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
Check where you are in the project and what work is in progress.
|
|
18
|
+
|
|
19
|
+
# Status Check
|
|
20
|
+
|
|
21
|
+
This skill helps you understand the current state of the project before starting new work.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
/status
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## What This Skill Does
|
|
30
|
+
|
|
31
|
+
## Step 0: Sync team state
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Sync team state before showing status
|
|
35
|
+
forge sync || true
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Step 1: Smart Status (ranked issues with conflict detection)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
bash scripts/smart-status.sh
|
|
42
|
+
```
|
|
43
|
+
This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
|
|
44
|
+
|
|
45
|
+
For full context on any issue: `forge show <id>`
|
|
46
|
+
|
|
47
|
+
### Step 1b: Reconcile stale in-progress issues
|
|
48
|
+
|
|
49
|
+
Check if any in-progress issues were already merged but not closed (can happen if `/verify` was skipped or backup was restored from stale snapshot):
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Detect default branch dynamically (prefer main over master)
|
|
53
|
+
DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
|
|
54
|
+
if [ -z "$DEFAULT_BRANCH" ]; then
|
|
55
|
+
if git rev-parse --verify main >/dev/null 2>&1; then DEFAULT_BRANCH="main"
|
|
56
|
+
elif git rev-parse --verify master >/dev/null 2>&1; then DEFAULT_BRANCH="master"
|
|
57
|
+
else echo "ERROR: No main or master branch found -- skipping stale reconciliation" >&2; DEFAULT_BRANCH=""; fi
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# For each in_progress issue, check if its PR was already merged
|
|
61
|
+
if [ -n "$DEFAULT_BRANCH" ]; then
|
|
62
|
+
forge list --status=in_progress --json 2>/dev/null | jq -r '.[].id' | while read id; do
|
|
63
|
+
# Search git log for the issue ID in commit messages (fixed-strings for literal match)
|
|
64
|
+
if git log --oneline --first-parent "$DEFAULT_BRANCH" --fixed-strings --grep="$id" | grep -q .; then
|
|
65
|
+
echo "STALE: $id -- found in git history, likely already merged"
|
|
66
|
+
fi
|
|
67
|
+
done
|
|
68
|
+
fi
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
If stale issues are found, close them:
|
|
72
|
+
```bash
|
|
73
|
+
forge close <id> --force --reason="Already merged -- detected during status reconciliation"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Step 2: Review Recent Commits
|
|
77
|
+
```bash
|
|
78
|
+
git log --oneline -10
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Step 3: Determine Context
|
|
82
|
+
- **New feature**: No active work, ready to start fresh
|
|
83
|
+
- **Continuing work**: In-progress issues found, resume where left off
|
|
84
|
+
- **Review needed**: Work marked complete, needs review/merge
|
|
85
|
+
|
|
86
|
+
### Team context
|
|
87
|
+
|
|
88
|
+
Show current developer's active work and team overview:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Show my active issues
|
|
92
|
+
forge team workload --me 2>&1 || true
|
|
93
|
+
|
|
94
|
+
# One-line team summary
|
|
95
|
+
forge team dashboard 2>&1 | head -5 || true
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Next Steps
|
|
99
|
+
|
|
100
|
+
- **If starting new work**: Run `/plan <feature-name>`
|
|
101
|
+
- **If continuing work**: Resume with appropriate phase command
|
|
102
|
+
- **If reviewing**: Run `/review <pr-number>` (the pre-merge doc gate is embedded in `/ship` and `/review`)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "/status",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "where am I on this project right now?",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "catch me up -- what's in progress and what got merged recently?",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "I stepped away for a few days, give me the current state of the work before I dive back in",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "show me my active issues and which stage we're at",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "are there any in-progress issues that were already merged and should be closed?",
|
|
24
|
+
"should_trigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "what's the single best next issue to start, and explain why that one?",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "why is issue forge-456 blocked -- what's it waiting on?",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"query": "route me to the correct Forge stage skill for opening a PR",
|
|
36
|
+
"should_trigger": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"query": "create an issue titled 'fix flaky login test' and tag it a bug",
|
|
40
|
+
"should_trigger": false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"query": "the PR just merged to master -- confirm CI is green and close the linked issues",
|
|
44
|
+
"should_trigger": false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"query": "keep an eye on PR #88 until its checks and review threads settle",
|
|
48
|
+
"should_trigger": false
|
|
49
|
+
}
|
|
50
|
+
]
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: triage-ready
|
|
3
|
+
description: >
|
|
4
|
+
Surfaces, ranks, and EXPLAINS the single best next issue in a Forge project — strictly
|
|
5
|
+
read-only. Recomputes the live ready queue and explains what is blocked via `forge issue
|
|
6
|
+
ready`/`blocked`/`stats`/`show`, always against the live kernel, never `forge board`.
|
|
7
|
+
Recommends ONE issue with a one-line reason, then hands off; never claims, comments, closes,
|
|
8
|
+
or mutates. Use when the user asks "what should I work on", "what's next", "what's ready",
|
|
9
|
+
"pick/triage my next task", "top of the ready queue", "which issue should I start", "why is
|
|
10
|
+
this issue blocked", or "what's blocking the most work". NOT for claiming or taking
|
|
11
|
+
ownership of the pick (use claim-safety), not for everyday issue
|
|
12
|
+
create/update/list/search/close/comment/dep CRUD (use issue-basics), not for reporting the
|
|
13
|
+
current workflow stage or "where am I / what's in flight" (use status), not for orienting a
|
|
14
|
+
whole session or routing to stage skills (use kernel), not for driving an issue to a merged
|
|
15
|
+
PR (use smith).
|
|
16
|
+
allowed-tools: Read, Bash(forge:*)
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Triage: what should I work on next
|
|
20
|
+
|
|
21
|
+
A read-only orientation skill. It answers "what is the single best thing to work
|
|
22
|
+
on right now, and *why*?" and hands the pick off to `claim-safety` / `dev` — it
|
|
23
|
+
never mutates the store itself.
|
|
24
|
+
|
|
25
|
+
Readiness in the Forge kernel is a **derived read model**: an issue is ready only
|
|
26
|
+
when every dependency is satisfied, it is unclaimed (no live lease), it is a
|
|
27
|
+
claimable type (epics and decisions never enter the queue), and no defer window
|
|
28
|
+
holds it back. Because it is derived, **always recompute it** — never trust a
|
|
29
|
+
cached "status == ready". Recompute means: run the query fresh each time.
|
|
30
|
+
|
|
31
|
+
## Do NOT use `board`
|
|
32
|
+
|
|
33
|
+
`forge board` reads a legacy snapshot store, not the live kernel, so its readiness
|
|
34
|
+
can be stale or wrong. This skill uses `forge issue ready`, `forge issue blocked`,
|
|
35
|
+
and `forge issue stats` exclusively.
|
|
36
|
+
|
|
37
|
+
## Procedure
|
|
38
|
+
|
|
39
|
+
### 1. Take the pulse
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
forge issue stats --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Returns `data.counts` (`open`/`done`/`cancelled` — keys are present only when
|
|
46
|
+
non-zero, and there is no `in_progress` bucket: claimed work stays in status
|
|
47
|
+
`open` and is surfaced via `active_claims`), `ready_count`, `blocked_count`, and
|
|
48
|
+
`active_claims`. A high `blocked_count` relative to
|
|
49
|
+
`ready_count` is your signal that dependency repair (not new work) is the real
|
|
50
|
+
bottleneck — hand off to `dependency-planning` / `backlog-hygiene`.
|
|
51
|
+
|
|
52
|
+
### 2. Rank the ready queue
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
forge issue ready --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`data.issues[]` comes back ordered by `rank` (priority ascending, then id), each
|
|
59
|
+
carrying `id`, `title`, `type`, `priority` (`P0`..`P4`), `rank`, `blocked`,
|
|
60
|
+
`claimed_by`, `parent_id`, `labels[]`, and `dependencies[]`. The top item is your
|
|
61
|
+
default pick. Surface the top few (see Fork points for how many), not the whole
|
|
62
|
+
list.
|
|
63
|
+
|
|
64
|
+
### 3. Explain WHY the top item is ready
|
|
65
|
+
|
|
66
|
+
Do not just name it — justify it. Pull its full record:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
forge issue show <id> --json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
State the reason in one sentence, drawn from the record:
|
|
73
|
+
|
|
74
|
+
- **Priority / rank** — `P0` at `rank` 0 outranks everything below it.
|
|
75
|
+
- **Dependencies satisfied** — every id in `dependencies[]` is closed/done, so
|
|
76
|
+
nothing gates it (`blocked: false`).
|
|
77
|
+
- **Unclaimed** — `claimed_by` is `null`, so no other agent holds the lease.
|
|
78
|
+
- **Claimable type** — it is a `task`/`feature`/`bug`, not an `epic`/`decision`.
|
|
79
|
+
|
|
80
|
+
### 4. Explain why the runners-up are NOT ready
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
forge issue blocked --json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
For a blocked item, name the specific unmet dependency (from its `dependencies[]`
|
|
87
|
+
cross-referenced against `forge issue show`) — e.g. "blocked by `forge-x` which is
|
|
88
|
+
still `open`". This turns triage into an actionable map: the fastest way to unlock
|
|
89
|
+
the most work is usually to finish the shared blocker.
|
|
90
|
+
|
|
91
|
+
### 5. Hand off
|
|
92
|
+
|
|
93
|
+
Recommend ONE issue with its one-line justification, then stop. The caller claims
|
|
94
|
+
it (via `claim-safety`) and executes (via `dev`). Triage does not claim, comment,
|
|
95
|
+
or close — it is strictly read-only.
|
|
96
|
+
|
|
97
|
+
## Reliability
|
|
98
|
+
|
|
99
|
+
- **Recompute, never cache.** Readiness is derived; re-run `forge issue ready`
|
|
100
|
+
every session rather than remembering a prior "ready" verdict.
|
|
101
|
+
- **Respect non-claimable types.** Epics and decisions never appear in `ready`
|
|
102
|
+
(the queue surfaces only claimable types — `task`/`bug`), so do not hand them
|
|
103
|
+
off as work. There is no `claimable` field in the CLI JSON; this is behavioral,
|
|
104
|
+
not a flag you can read.
|
|
105
|
+
- **Check the envelope.** Every `--json` reply carries `ok`; on `ok:false` read
|
|
106
|
+
`error.message` and retry the query rather than guessing at state.
|
|
107
|
+
- **Read-only.** This skill runs only `stats`/`ready`/`blocked`/`show`. If a fix is
|
|
108
|
+
needed, hand off — never mutate here.
|
|
109
|
+
|
|
110
|
+
## Fork points
|
|
111
|
+
|
|
112
|
+
Editable knobs — change these to carve your own triage policy. This skill is a
|
|
113
|
+
canonical source you fork, not a fixed ladder.
|
|
114
|
+
|
|
115
|
+
| Knob | Default | How to change |
|
|
116
|
+
|------|---------|---------------|
|
|
117
|
+
| **Readiness query / filters** | `forge issue ready` (whole queue) | Narrow to a slice, e.g. `forge issue list --status open --priority P0 --json` or post-filter `ready` output by `labels[]`/`type` to focus one workstream. |
|
|
118
|
+
| **How many items to surface** | Top 3 by `rank` | Raise for a broad standup view, lower to 1 for a strict "next task only" hand-off. |
|
|
119
|
+
| **Stale threshold** | `forge issue stale --days 14` | Change `--days` to flag idle in-progress work sooner/later; surface stale claims as a caveat before recommending fresh work. |
|
|
120
|
+
| **Priority ordering** | Kernel `rank` (priority, then id) | Re-rank the `ready` list by your own weights — epic proximity (`parent_id`), label, or age — before picking. |
|
|
121
|
+
| **Blocked-explain depth** | One hop (direct unmet deps) | Trace transitively via repeated `forge issue show` when you need the full blocking chain; hand to `graph-forensics` for deep `explain`. |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "I just sat down at this repo — what's the highest-priority thing I can actually start right now?",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "Give me the top few off the ready queue and tell me why the first one is unblocked.",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "Why can't I start forge-2agy.2.2 yet? What's holding it up?",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "The backlog feels stuck — is it mostly blocked, and which one dependency would unlock the most work?",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "Pick my next task and justify the choice, don't grab it yet.",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Claim forge-abc123 for me and confirm I actually hold the lease before I start editing.",
|
|
24
|
+
"should_trigger": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Create a P1 bug titled 'login returns 500' and add a comment linking the repro.",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "Where am I in the workflow right now and what work is in flight?",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"query": "Search every issue mentioning 'oauth' and list the open ones.",
|
|
36
|
+
"should_trigger": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"query": "Take forge-xyz all the way through to a merged PR.",
|
|
40
|
+
"should_trigger": false
|
|
41
|
+
}
|
|
42
|
+
]
|