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
|
@@ -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
|
]
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: status
|
|
3
|
-
description:
|
|
4
|
-
|
|
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
|
|
5
15
|
---
|
|
6
16
|
|
|
7
17
|
Check where you are in the project and what work is in progress.
|
|
8
18
|
|
|
9
19
|
# Status Check
|
|
10
20
|
|
|
11
|
-
This
|
|
21
|
+
This skill helps you understand the current state of the project before starting new work.
|
|
12
22
|
|
|
13
23
|
## Usage
|
|
14
24
|
|
|
@@ -16,7 +26,7 @@ This command helps you understand the current state of the project before starti
|
|
|
16
26
|
/status
|
|
17
27
|
```
|
|
18
28
|
|
|
19
|
-
## What This
|
|
29
|
+
## What This Skill Does
|
|
20
30
|
|
|
21
31
|
## Step 0: Sync team state
|
|
22
32
|
|
|
@@ -32,7 +42,7 @@ bash scripts/smart-status.sh
|
|
|
32
42
|
```
|
|
33
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.
|
|
34
44
|
|
|
35
|
-
For full context on any issue: `
|
|
45
|
+
For full context on any issue: `forge show <id>`
|
|
36
46
|
|
|
37
47
|
### Step 1b: Reconcile stale in-progress issues
|
|
38
48
|
|
|
@@ -44,15 +54,15 @@ DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|
|
|
|
44
54
|
if [ -z "$DEFAULT_BRANCH" ]; then
|
|
45
55
|
if git rev-parse --verify main >/dev/null 2>&1; then DEFAULT_BRANCH="main"
|
|
46
56
|
elif git rev-parse --verify master >/dev/null 2>&1; then DEFAULT_BRANCH="master"
|
|
47
|
-
else echo "ERROR: No main or master branch found
|
|
57
|
+
else echo "ERROR: No main or master branch found -- skipping stale reconciliation" >&2; DEFAULT_BRANCH=""; fi
|
|
48
58
|
fi
|
|
49
59
|
|
|
50
60
|
# For each in_progress issue, check if its PR was already merged
|
|
51
61
|
if [ -n "$DEFAULT_BRANCH" ]; then
|
|
52
|
-
|
|
62
|
+
forge list --status=in_progress --json 2>/dev/null | jq -r '.[].id' | while read id; do
|
|
53
63
|
# Search git log for the issue ID in commit messages (fixed-strings for literal match)
|
|
54
64
|
if git log --oneline --first-parent "$DEFAULT_BRANCH" --fixed-strings --grep="$id" | grep -q .; then
|
|
55
|
-
echo "STALE: $id
|
|
65
|
+
echo "STALE: $id -- found in git history, likely already merged"
|
|
56
66
|
fi
|
|
57
67
|
done
|
|
58
68
|
fi
|
|
@@ -60,7 +70,7 @@ fi
|
|
|
60
70
|
|
|
61
71
|
If stale issues are found, close them:
|
|
62
72
|
```bash
|
|
63
|
-
|
|
73
|
+
forge close <id> --force --reason="Already merged -- detected during status reconciliation"
|
|
64
74
|
```
|
|
65
75
|
|
|
66
76
|
### Step 2: Review Recent Commits
|
|
@@ -89,4 +99,4 @@ forge team dashboard 2>&1 | head -5 || true
|
|
|
89
99
|
|
|
90
100
|
- **If starting new work**: Run `/plan <feature-name>`
|
|
91
101
|
- **If continuing work**: Resume with appropriate phase command
|
|
92
|
-
- **If reviewing**: Run `/review <pr-number>`
|
|
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
|
+
]
|
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: validate
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
Forge VALIDATE stage — the pre-pull-request quality gate. Rebases the branch onto the
|
|
5
|
+
current base branch, then runs type-checking, linting, code review, an OWASP Top 10 security
|
|
6
|
+
review plus dependency scan, and the full test suite, demanding fresh passing output in THIS
|
|
7
|
+
session before anything ships. Reach for this whenever a branch is code-complete and someone
|
|
8
|
+
says: validate my changes, run the quality gates, run the pre-PR checks, type-check and lint
|
|
9
|
+
before the PR, run the security scan, or run the full test suite before opening a PR — and
|
|
10
|
+
for the literal `/validate` command or `bun run check`. This is the gate that runs AFTER
|
|
11
|
+
code is written but BEFORE a PR exists, so discriminate carefully: it does not implement
|
|
12
|
+
features or write tests (that is `/dev`), it does not push the branch or open the PR (that
|
|
13
|
+
is `/ship`), it does not answer PR review feedback from Greptile / SonarCloud / CodeRabbit
|
|
14
|
+
(that is `/review`), and it is not the post-merge CI health check (that is `/verify`).
|
|
15
|
+
allowed-tools: Bash, Read, Grep, Glob
|
|
5
16
|
---
|
|
6
17
|
|
|
7
18
|
> **Note:** Three things share the "validate" name in Forge:
|
|
8
|
-
> - `/validate` (this command):
|
|
19
|
+
> - `/validate` (this command): default-template validation command — rebases onto the base branch, then runs type/lint/test/security checks
|
|
9
20
|
> - `forge-preflight` (formerly forge-validate): CLI tool — checks prerequisites before a stage
|
|
10
|
-
> - `bun run check` (scripts/validate.
|
|
21
|
+
> - `bun run check` (scripts/validate.js): Local quality gate — runs type/lint/test/security checks only (does NOT rebase; assumes branch is already current with the base branch)
|
|
11
22
|
|
|
12
23
|
Run comprehensive validation including type checking, linting, code review, security review, and tests.
|
|
13
24
|
|
|
14
25
|
# Validate
|
|
15
26
|
|
|
16
|
-
This
|
|
27
|
+
This skill validates all code before creating a pull request.
|
|
17
28
|
|
|
18
29
|
## Usage
|
|
19
30
|
|
|
@@ -67,9 +78,9 @@ reflect the true state of what will be merged.
|
|
|
67
78
|
</HARD-GATE>
|
|
68
79
|
```
|
|
69
80
|
|
|
70
|
-
## What This
|
|
81
|
+
## What This Skill Does
|
|
71
82
|
|
|
72
|
-
**Quick Start**: Run `bun run check` to execute the full validation pipeline (implemented in `scripts/validate.
|
|
83
|
+
**Quick Start**: Run `bun run check` to execute the full validation pipeline (implemented in `scripts/validate.js`). The npm script is named `check`; the workflow command is `/validate`. See individual steps below for details.
|
|
73
84
|
|
|
74
85
|
### Step 1: Type Check
|
|
75
86
|
```bash
|
|
@@ -137,7 +148,7 @@ bun test # or: npm run test, jest, vitest, etc.
|
|
|
137
148
|
> - Did you verify OWASP Top 10 mitigations, not just check a box?
|
|
138
149
|
> - Are there edge cases or integration scenarios you haven't tested?
|
|
139
150
|
>
|
|
140
|
-
> **If unsure**: Re-read the `## Technical Research` section in `docs/
|
|
151
|
+
> **If unsure**: Re-read the `## Technical Research` section in `docs/work/YYYY-MM-DD-<slug>/plan.md`
|
|
141
152
|
|
|
142
153
|
## On Validation Failure: 4-Phase Debug Mode
|
|
143
154
|
|
|
@@ -206,11 +217,12 @@ If you have attempted 3+ fixes without resolution:
|
|
|
206
217
|
|
|
207
218
|
If any check fails:
|
|
208
219
|
```bash
|
|
209
|
-
# Create
|
|
210
|
-
|
|
220
|
+
# Create Forge issue for problems
|
|
221
|
+
forge create "Fix <issue-description>"
|
|
211
222
|
|
|
212
223
|
# Mark current issue as blocked
|
|
213
|
-
|
|
224
|
+
forge update <current-id> --status blocked
|
|
225
|
+
forge comment <current-id> "Blocked by <new-issue-id>"
|
|
214
226
|
|
|
215
227
|
# Output what needs fixing
|
|
216
228
|
```
|
|
@@ -230,13 +242,21 @@ until ALL FOUR show fresh output in this session:
|
|
|
230
242
|
"Should pass", "was passing earlier", and "I'm confident" are not evidence.
|
|
231
243
|
Run the commands. Show the output. THEN declare done.
|
|
232
244
|
|
|
233
|
-
5. Context check:
|
|
234
|
-
6. Stage transition
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
245
|
+
5. Context check: confirm design + acceptance on the Forge issue (`forge issue show <id>`); if the beads-context helper is present, run `bash scripts/beads-context.sh validate <id>` and address any warnings
|
|
246
|
+
6. Stage transition recorded (structured helper when present; kernel-native comment otherwise):
|
|
247
|
+
if [ -f scripts/beads-context.sh ]; then
|
|
248
|
+
bash scripts/beads-context.sh stage-transition <id> validate ship \
|
|
249
|
+
--summary "<all checks pass/fail summary>" \
|
|
250
|
+
--decisions "<any failures diagnosed and fixed>" \
|
|
251
|
+
--artifacts "<scripts and commands run>" \
|
|
252
|
+
--next "<ship readiness notes>"
|
|
253
|
+
else
|
|
254
|
+
forge comment <id> "Stage: validate complete → ready for ship
|
|
255
|
+
Summary: <all checks pass/fail summary>
|
|
256
|
+
Decisions: <any failures diagnosed and fixed>
|
|
257
|
+
Artifacts: <scripts and commands run>
|
|
258
|
+
Next: <ship readiness notes>"
|
|
259
|
+
fi
|
|
240
260
|
</HARD-GATE>
|
|
241
261
|
```
|
|
242
262
|
|
|
@@ -262,8 +282,8 @@ Ready for /ship
|
|
|
262
282
|
- validation.test.ts: Assertion failed
|
|
263
283
|
- auth.test.ts: Timeout exceeded
|
|
264
284
|
|
|
265
|
-
✓
|
|
266
|
-
✓ Current issue marked: Blocked by
|
|
285
|
+
✓ Forge issue created: forge-k8m3 "Fix validation test"
|
|
286
|
+
✓ Current issue marked: Blocked by forge-k8m3
|
|
267
287
|
|
|
268
288
|
Fix issues then re-run /validate
|
|
269
289
|
```
|
|
@@ -271,20 +291,23 @@ Fix issues then re-run /validate
|
|
|
271
291
|
## Integration with Workflow
|
|
272
292
|
|
|
273
293
|
```
|
|
274
|
-
Utility: /status
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
294
|
+
Utility: /status -> Understand current context before starting
|
|
295
|
+
|
|
296
|
+
Default template:
|
|
297
|
+
/plan -> Optional default planner; external planners may satisfy /dev entry
|
|
298
|
+
/dev -> Implement each task with subagent-driven TDD
|
|
299
|
+
/validate -> Type check, lint, tests, security (you are here)
|
|
300
|
+
/ship -> Push + create PR
|
|
301
|
+
/review -> Address PR feedback
|
|
302
|
+
/verify -> Post-merge health check
|
|
303
|
+
|
|
304
|
+
Pre-merge gate: doc updates + CI-green checkpoint embedded in /ship and /review (not a separate stage).
|
|
282
305
|
```
|
|
283
306
|
|
|
284
307
|
## Tips
|
|
285
308
|
|
|
286
309
|
- **All checks must pass**: Don't proceed to /ship with failures
|
|
287
310
|
- **Security is mandatory**: OWASP Top 10 review required for all features
|
|
288
|
-
- **Create issues for failures**: Track problems in
|
|
311
|
+
- **Create issues for failures**: Track problems in the Forge issue tracker
|
|
289
312
|
- **TDD helps**: Tests should already pass from /dev phase
|
|
290
313
|
- **Fix before shipping**: Resolve all issues before creating PR
|