forge-workflow 0.1.0-beta.3 → 0.1.0-beta.5
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/AGENTS.md +14 -7
- package/CHANGELOG.md +43 -1
- package/README.md +6 -2
- package/bin/forge-cmd.js +21 -1
- package/bin/forge.js +16 -369
- package/docs/INDEX.md +1 -1
- package/docs/guides/BEADS_GITHUB_SYNC.md +2 -31
- package/docs/guides/MIGRATION.md +4 -4
- package/docs/guides/SETUP.md +16 -16
- package/docs/reference/COMMANDS.md +9 -4
- package/docs/reference/INSIGHTS_RECAP.md +9 -20
- package/docs/reference/RELEASE.md +5 -3
- package/docs/reference/TOOLCHAIN.md +8 -0
- package/docs/reference/protected-state-surfaces.md +4 -4
- package/docs/reference/shepherd.md +117 -17
- package/lefthook.yml +12 -0
- package/lib/activation/ensure-forge-home.js +33 -15
- package/lib/adapters/greptile-review-adapter.js +1 -1
- package/lib/adapters/pr-state-adapter.js +397 -100
- package/lib/agents-config.js +5 -0
- package/lib/audit-evidence.js +71 -110
- package/lib/capped-jsonl-log.js +236 -0
- package/lib/commands/_issue.js +31 -46
- package/lib/commands/_manifest.js +1 -1
- package/lib/commands/_registry.js +2 -2
- package/lib/commands/_resolve-command-opts.js +36 -29
- package/lib/commands/claim.js +2 -4
- package/lib/commands/clean.js +196 -32
- package/lib/commands/dev.js +4 -33
- package/lib/commands/hooks.js +358 -13
- package/lib/commands/insights.js +8 -3
- package/lib/commands/merge.js +600 -40
- package/lib/commands/plan.js +23 -115
- package/lib/commands/pr.js +1 -1
- package/lib/commands/preflight.js +11 -2
- package/lib/commands/prime.js +23 -3
- package/lib/commands/push.js +41 -51
- package/lib/commands/recall.js +60 -16
- package/lib/commands/recap.js +6 -1
- package/lib/commands/release.js +18 -4
- package/lib/commands/serve.js +5 -2
- package/lib/commands/setup.js +191 -95
- package/lib/commands/shepherd.js +49 -4
- package/lib/commands/ship.js +22 -23
- package/lib/commands/skill.js +383 -0
- package/lib/commands/status.js +54 -33
- package/lib/commands/test.js +56 -34
- package/lib/commands/worktree.js +247 -43
- package/lib/core/runtime-graph.js +89 -15
- package/lib/doc-assertions.js +297 -0
- package/lib/existing-tdd-gate.js +253 -0
- package/lib/forge-context.js +1 -4
- package/lib/forge-issues.js +64 -491
- package/lib/git-defaults.js +56 -0
- package/lib/harness-capability-matrix.js +5 -5
- package/lib/hook-renderer.js +147 -16
- package/lib/insights.js +96 -80
- package/lib/issue-backend.js +42 -3
- package/lib/kernel/backing-issue.js +14 -2
- package/lib/kernel/broker.js +44 -0
- package/lib/kernel/cli-broker-factory.js +12 -1
- package/lib/kernel/close-on-merge.js +154 -0
- package/lib/kernel/fs-class.js +42 -25
- package/lib/kernel/migrations.js +30 -2
- package/lib/kernel/schema.js +35 -0
- package/lib/kernel/sqlite-driver.js +292 -18
- package/lib/lefthook-wiring.js +21 -1
- package/lib/memory/router.js +16 -1
- package/lib/memory-digest.js +47 -15
- package/lib/memory-recall-events.js +145 -0
- package/lib/memory-recall.js +212 -0
- package/lib/merge-rules.js +8 -4
- package/lib/npm-publish-workflow.js +272 -0
- package/lib/orientation.js +371 -49
- package/lib/plugin-catalog.js +14 -4
- package/lib/pr-bundle.js +9 -6
- package/lib/pr-monitor/journal.js +18 -2
- package/lib/pr-monitor/reconcile-executor.js +842 -0
- package/lib/pr-monitor/reconcile-tick.js +138 -0
- package/lib/pr-monitor/reconcile.js +0 -0
- package/lib/pr-monitor/render-summary.js +196 -0
- package/lib/pr-monitor/shepherd-lease.js +252 -0
- package/lib/pr-monitor/watch-lifecycle.js +14 -2
- package/lib/pr-pull.js +98 -24
- package/lib/pr-shepherd.js +34 -8
- package/lib/preflight/gates.js +65 -18
- package/lib/preflight/runner.js +5 -0
- package/lib/project-memory.js +40 -0
- package/lib/protected-state-authority.js +305 -0
- package/lib/protected-state-surfaces.js +64 -44
- package/lib/release-readiness.js +51 -4
- package/lib/rules-sync.js +4 -0
- package/lib/runtime-health.js +15 -46
- package/lib/shell-utils.js +1 -1
- package/lib/skill-eval.js +750 -0
- package/lib/skills-sync.js +6 -3
- package/lib/smart-merge.js +28 -4
- package/lib/status/identity.js +46 -0
- package/lib/status/presenter.js +0 -35
- package/lib/status/snapshot.js +11 -16
- package/lib/symlink-utils.js +74 -26
- package/lib/upgrade-safety.js +47 -9
- package/lib/using-forge.js +328 -0
- package/lib/workflow/enforce-stage.js +5 -5
- package/lib/workflow/state-manager.js +23 -23
- package/package.json +6 -7
- package/rules/using-forge.md +24 -0
- package/scripts/doc-asserting-tests.js +158 -0
- package/scripts/forge-team/index.sh +0 -5
- package/scripts/forge-team/tests/dispatcher.test.sh +1 -1
- package/scripts/forge-team/tests/workflow-integration.test.sh +0 -1
- package/scripts/lib/behavioral-eval-runner.js +310 -0
- package/scripts/lib/behavioral-eval-runtime.js +456 -0
- package/scripts/lib/eval-evidence.js +328 -0
- package/scripts/lib/eval-runner.js +81 -41
- package/scripts/lib/immutable-eval-corpus.js +309 -0
- package/scripts/lib/promotion-evidence-loader.js +94 -0
- package/scripts/lib/promotion-scorecard.js +314 -0
- package/scripts/npm-release-receipt.js +134 -0
- package/scripts/process-tree.js +761 -0
- package/scripts/protected-state-check.js +47 -22
- package/scripts/run-command-eval.js +29 -1
- package/scripts/sync-d20-audit.js +172 -0
- package/scripts/test-full-suite.js +249 -37
- package/scripts/test.js +184 -44
- package/skills/claim-safety/SKILL.md +4 -0
- package/skills/claim-safety/evals/scorecard.json +41 -0
- package/skills/coverage.json +83 -0
- package/skills/dev/SKILL.md +4 -0
- package/skills/dev/evals/scorecard.json +41 -0
- package/skills/gates/SKILL.md +80 -0
- package/skills/gates/evals/evals.json +38 -0
- package/skills/gates/evals/scorecard.json +41 -0
- package/skills/hermes-forge/SKILL.md +1 -0
- package/skills/hermes-forge/evals/scorecard.json +41 -0
- package/skills/issue-basics/SKILL.md +1 -0
- package/skills/issue-basics/evals/scorecard.json +41 -0
- package/skills/kernel/SKILL.md +38 -0
- package/skills/kernel/evals/scorecard.json +41 -0
- package/skills/memory/SKILL.md +16 -1
- package/skills/memory/evals/scorecard.json +41 -0
- package/skills/parallel-deep-research/SKILL.md +1 -0
- package/skills/parallel-deep-research/evals/scorecard.json +41 -0
- package/skills/plan/SKILL.md +6 -0
- package/skills/plan/evals/scorecard.json +41 -0
- package/skills/portability/SKILL.md +47 -0
- package/skills/portability/evals/evals.json +34 -0
- package/skills/portability/evals/scorecard.json +41 -0
- package/skills/research/SKILL.md +1 -0
- package/skills/research/evals/scorecard.json +41 -0
- package/skills/review/SKILL.md +10 -11
- package/skills/review/evals/scorecard.json +41 -0
- package/skills/rollback/SKILL.md +5 -11
- package/skills/rollback/evals/scorecard.json +41 -0
- package/skills/setup/SKILL.md +91 -0
- package/skills/setup/evals/evals.json +42 -0
- package/skills/setup/evals/scorecard.json +41 -0
- package/skills/shepherd/SKILL.md +84 -38
- package/skills/shepherd/evals/evals.json +21 -9
- package/skills/shepherd/evals/scorecard.json +41 -0
- package/skills/ship/SKILL.md +10 -12
- package/skills/ship/evals/scorecard.json +41 -0
- package/skills/smith/SKILL.md +8 -0
- package/skills/smith/evals/scorecard.json +41 -0
- package/skills/sonarcloud/SKILL.md +1 -0
- package/skills/sonarcloud/evals/scorecard.json +41 -0
- package/skills/sonarcloud-analysis/SKILL.md +1 -0
- package/skills/sonarcloud-analysis/evals/scorecard.json +41 -0
- package/skills/status/SKILL.md +3 -0
- package/skills/status/evals/scorecard.json +41 -0
- package/skills/triage-ready/SKILL.md +2 -0
- package/skills/triage-ready/evals/scorecard.json +41 -0
- package/skills/using-forge/SKILL.md +104 -0
- package/skills/using-forge/evals/scorecard.json +41 -0
- package/skills/validate/SKILL.md +4 -0
- package/skills/validate/evals/scorecard.json +41 -0
- package/skills/verify/SKILL.md +4 -0
- package/skills/verify/evals/scorecard.json +41 -0
- package/skills/worktree/SKILL.md +92 -0
- package/skills/worktree/evals/evals.json +38 -0
- package/skills/worktree/evals/scorecard.json +41 -0
- package/lib/adapters/beads-issue-adapter.js +0 -127
- package/lib/beads-nudge.js +0 -91
- package/lib/beads-setup.js +0 -538
- package/lib/beads-sync-scaffold.js +0 -189
- package/lib/commands/board.js +0 -64
- package/lib/pat-setup.js +0 -207
- package/lib/pr-monitor/render-sticky.js +0 -192
- package/lib/pr-monitor/upsert-sticky.js +0 -169
- package/lib/status/beads-snapshot.js +0 -145
- package/scripts/beads-context.sh +0 -577
- package/scripts/beads-migrate-to-dolt.sh +0 -7
- package/scripts/beads-upgrade-smoke.sh +0 -284
- package/scripts/forge-team/lib/dashboard.sh +0 -316
- package/scripts/forge-team/tests/dashboard.test.sh +0 -155
- package/scripts/lib/beads-migrate-to-dolt.mjs +0 -503
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "gates",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 994,
|
|
7
|
+
"body_lines": 63,
|
|
8
|
+
"score": 45
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": true,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 100
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 6,
|
|
27
|
+
"fixtures_best_hit": 6,
|
|
28
|
+
"reachable": true,
|
|
29
|
+
"keyword_alignment": 1
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 84
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "hermes-forge",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 993,
|
|
7
|
+
"body_lines": 157,
|
|
8
|
+
"score": 36
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": true,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 100
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 6,
|
|
27
|
+
"fixtures_best_hit": 2,
|
|
28
|
+
"reachable": true,
|
|
29
|
+
"keyword_alignment": 0.33
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 81
|
|
41
|
+
}
|
|
@@ -14,6 +14,7 @@ description: >
|
|
|
14
14
|
the plan->dev->validate->ship pipeline or open a PR (use smith or stage skills); does NOT
|
|
15
15
|
report the current stage or what's in flight (use status).
|
|
16
16
|
allowed-tools: Read, Bash(forge:*)
|
|
17
|
+
terminal: true
|
|
17
18
|
---
|
|
18
19
|
|
|
19
20
|
# Issue basics — the CRUD floor
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "issue-basics",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 991,
|
|
7
|
+
"body_lines": 95,
|
|
8
|
+
"score": 42
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": false,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 60
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 6,
|
|
27
|
+
"fixtures_best_hit": 0,
|
|
28
|
+
"reachable": false,
|
|
29
|
+
"keyword_alignment": 0
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 63
|
|
41
|
+
}
|
package/skills/kernel/SKILL.md
CHANGED
|
@@ -14,6 +14,7 @@ description: >
|
|
|
14
14
|
merged PR under gates → `smith`; token-bounded state for the Hermes harness →
|
|
15
15
|
`hermes-forge`.
|
|
16
16
|
allowed-tools: Read, Bash(forge:*)
|
|
17
|
+
terminal: true
|
|
17
18
|
---
|
|
18
19
|
|
|
19
20
|
# Forge kernel surface
|
|
@@ -56,6 +57,43 @@ mutating it — a claim returning ok:true does not by itself prove ownership).
|
|
|
56
57
|
status → plan → dev → validate → ship → review → verify
|
|
57
58
|
```
|
|
58
59
|
|
|
60
|
+
### Chain map (each skill declares its successor)
|
|
61
|
+
|
|
62
|
+
Every skill carries chain metadata in its frontmatter (`next`, `terminal`,
|
|
63
|
+
`subskills`, `handoffs`); each workflow STAGE skill additionally carries a
|
|
64
|
+
HARD-GATE chain line in its body, so each stage announces the next one. The
|
|
65
|
+
linear ladder:
|
|
66
|
+
|
|
67
|
+
| Skill | `next` | `terminal` |
|
|
68
|
+
|-------|--------|-----------|
|
|
69
|
+
| `plan` | `dev` | `false` |
|
|
70
|
+
| `dev` | `validate` | `false` |
|
|
71
|
+
| `validate` | `ship` | `false` |
|
|
72
|
+
| `ship` | `review` | `false` |
|
|
73
|
+
| `review` | `verify` | `false` |
|
|
74
|
+
| `verify` | `ship` | `false` |
|
|
75
|
+
|
|
76
|
+
The `next` column is each stage's DEFAULT / critical-path successor (`plan`
|
|
77
|
+
composes `research`; `ship` and `review` also carry a `shepherd` handoff). The
|
|
78
|
+
actual successor after `ship`, `review`, and `verify` is classification-dependent
|
|
79
|
+
— see the note below. `verify`'s `next` (`ship`) is the `docs`-only pre-ship
|
|
80
|
+
reuse; in every other flow nothing follows `verify`.
|
|
81
|
+
|
|
82
|
+
Feeders into the chain: `triage-ready` → `claim-safety` → `dev` (rank the pick,
|
|
83
|
+
prove the live lease, then work it). `research` is standalone / callable
|
|
84
|
+
mid-workflow and returns to its CALLER (no forced `next`); it is also a `subskill`
|
|
85
|
+
of `plan`. The `smith` orchestrator composes the six stages (`subskills`).
|
|
86
|
+
Utility/terminal skills (`status`, `shepherd`, `kernel`, `issue-basics`, `memory`,
|
|
87
|
+
`rollback`, `research`, `sonarcloud`, `sonarcloud-analysis`,
|
|
88
|
+
`parallel-deep-research`, `using-forge`) declare no forward-stage `next`. Meta
|
|
89
|
+
skills (`hermes-forge`) are chain-exempt.
|
|
90
|
+
|
|
91
|
+
The stage `next` values above are the DEFAULT / critical-path successors. The
|
|
92
|
+
actual successor after `ship`, `review`, and `verify` is
|
|
93
|
+
classification-dependent — the authoritative matrix is `lib/workflow/stages.js`
|
|
94
|
+
(Simple/Hotfix/Refactor end at `ship`; Standard ends at `review`; Critical runs
|
|
95
|
+
through `verify`; the `docs` classification reuses `verify` → `ship`).
|
|
96
|
+
|
|
59
97
|
## Orchestrator super-skill
|
|
60
98
|
|
|
61
99
|
`smith` is the flagship: a thin orchestrator that COMPOSES the skills above into
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "kernel",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 993,
|
|
7
|
+
"body_lines": 187,
|
|
8
|
+
"score": 33
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": true,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 100
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 6,
|
|
27
|
+
"fixtures_best_hit": 0,
|
|
28
|
+
"reachable": false,
|
|
29
|
+
"keyword_alignment": 0
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 80
|
|
41
|
+
}
|
package/skills/memory/SKILL.md
CHANGED
|
@@ -13,6 +13,7 @@ description: >
|
|
|
13
13
|
The local backend is always the offline floor. Not for: issue create/list/close ops
|
|
14
14
|
(issue-basics), workflow status (status), or transient scratch notes.
|
|
15
15
|
allowed-tools: Bash, Read, Grep, Glob
|
|
16
|
+
terminal: true
|
|
16
17
|
---
|
|
17
18
|
|
|
18
19
|
# Memory
|
|
@@ -20,6 +21,16 @@ allowed-tools: Bash, Read, Grep, Glob
|
|
|
20
21
|
Durable project memory for agents. This skill teaches you where a fact belongs,
|
|
21
22
|
which backend is active, and how to use graph memory when it is enabled.
|
|
22
23
|
|
|
24
|
+
## Applies to: Forge-managed memory
|
|
25
|
+
|
|
26
|
+
This skill describes memory managed by **Forge's own store** — `forge remember` /
|
|
27
|
+
`forge recall`, whose backend the Backends section (below) explains. If the repo you are working in ships
|
|
28
|
+
its **own** memory system (a database, an API, a "log a decision" surface, an
|
|
29
|
+
in-app memory service), **that** system is authoritative here and this skill does
|
|
30
|
+
not apply — follow the repo's own memory instructions instead. When unsure, prefer
|
|
31
|
+
the host repo's memory over `forge remember`; a note written to the wrong store is
|
|
32
|
+
a note nobody finds.
|
|
33
|
+
|
|
23
34
|
## The one rule
|
|
24
35
|
|
|
25
36
|
Persistent, project-level knowledge goes to **`forge remember`** — never to a
|
|
@@ -33,7 +44,11 @@ is a local file store, so they always work offline with zero setup.
|
|
|
33
44
|
convention, a decision and its rationale, a non-obvious gotcha, an environment
|
|
34
45
|
quirk, a "we tried X, it failed because Y". Add `--tag <label>` for retrieval.
|
|
35
46
|
- **`forge recall "<query>"`** — before assuming, check what is already known.
|
|
36
|
-
Search first; do not re-derive knowledge the project already recorded.
|
|
47
|
+
Search first; do not re-derive knowledge the project already recorded. Note that
|
|
48
|
+
memory relevant to your current prompt **may already be injected automatically**
|
|
49
|
+
(a per-turn hook surfaces the best-matching notes; silent when nothing clears the
|
|
50
|
+
relevance bar). Treat auto-surfaced memory as a head start, and still `recall`
|
|
51
|
+
explicitly when you need to search for something specific it did not surface.
|
|
37
52
|
- **`forge issue comment <id> "<note>"`** — progress or context that belongs to
|
|
38
53
|
ONE issue's lifecycle (status, a blocker, a hand-off). Issue-scoped, not global.
|
|
39
54
|
- **Rule of thumb:** would a future session on a *different* issue want this? →
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "memory",
|
|
3
|
+
"fixtures": "no-fixtures",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 938,
|
|
7
|
+
"body_lines": 101,
|
|
8
|
+
"score": 44
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": true,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 100
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "no-fixtures",
|
|
26
|
+
"fixtures_total": 0,
|
|
27
|
+
"fixtures_best_hit": 0,
|
|
28
|
+
"reachable": null,
|
|
29
|
+
"keyword_alignment": null
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 83
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "parallel-deep-research",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 996,
|
|
7
|
+
"body_lines": 92,
|
|
8
|
+
"score": 42
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": true,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 100
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 5,
|
|
27
|
+
"fixtures_best_hit": 1,
|
|
28
|
+
"reachable": true,
|
|
29
|
+
"keyword_alignment": 0.2
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 83
|
|
41
|
+
}
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -13,12 +13,18 @@ description: >
|
|
|
13
13
|
where work stands or what is stale (status), and NOT for everyday issue create/list/close or
|
|
14
14
|
picking the next ready issue (issue-basics / triage-ready).
|
|
15
15
|
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
|
|
16
|
+
next: dev
|
|
17
|
+
terminal: false
|
|
18
|
+
subskills:
|
|
19
|
+
- research
|
|
16
20
|
---
|
|
17
21
|
|
|
18
22
|
Plan a feature from scratch: brainstorm design intent, research technical approach, then set up branch, worktree, and a complete task list ready for /dev.
|
|
19
23
|
|
|
20
24
|
# Plan
|
|
21
25
|
|
|
26
|
+
> **Chain (HARD-GATE):** the next skill after `plan` is `dev`. `plan` composes the `research` sub-skill for its Phase 2 technical bundle. Do not skip ahead past `dev`.
|
|
27
|
+
|
|
22
28
|
`/plan` is the default planning super-skill. A full invocation runs the three legacy sections below (intent, research, setup/task list), but v3 treats the internal planning work as callable sub-skills:
|
|
23
29
|
|
|
24
30
|
- `plan.intent_capture`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "plan",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 958,
|
|
7
|
+
"body_lines": 530,
|
|
8
|
+
"score": 3
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": false,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 60
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 5,
|
|
27
|
+
"fixtures_best_hit": 4,
|
|
28
|
+
"reachable": true,
|
|
29
|
+
"keyword_alignment": 0.8
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 51
|
|
41
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: portability
|
|
3
|
+
description: >
|
|
4
|
+
Forge kernel data portability — getting issue data in and out of the local kernel. `forge
|
|
5
|
+
export [--dir] [--dry-run]` writes the kernel backlog to deterministic git-tracked JSONL
|
|
6
|
+
(D16 portability projection); `forge export --import` reads that committed snapshot back
|
|
7
|
+
into the kernel (hydrate). `forge migrate --from beads [--dry-run] [--source <dir>]` imports
|
|
8
|
+
a Beads issue store into the kernel — the onboarding path for users coming from Beads. Use
|
|
9
|
+
when the user says "export the kernel backlog to JSONL", "back up / snapshot the backlog",
|
|
10
|
+
"re-import / hydrate the backlog", "migrate from beads", or "import a beads store". Honesty:
|
|
11
|
+
bare `forge migrate --dry-run` (no `--from`) is v2→v3 preview only; a re-import that applies
|
|
12
|
+
nothing reports "already hydrated". NOT the cloud/backend sync of the kernel (that is `forge
|
|
13
|
+
sync`, cloud-native), NOT a database/schema migration (plan/dev), NOT memory notes (memory),
|
|
14
|
+
NOT syncing a git branch with main (ship).
|
|
15
|
+
allowed-tools: Bash, Read, Grep, Glob
|
|
16
|
+
terminal: true
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
Moving Forge kernel issue data across a boundary: project the backlog to a git-committable snapshot (and hydrate it back), or import an existing issue store into the kernel. This is data portability — distinct from schema/database migrations and from the cloud backend sync (`forge sync`).
|
|
20
|
+
|
|
21
|
+
# Export / re-import the backlog
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
forge export # write the kernel backlog to git-tracked JSONL (deterministic)
|
|
25
|
+
forge export --dir <path> # choose the projection directory
|
|
26
|
+
forge export --dry-run # show what would be written, change nothing
|
|
27
|
+
forge export --import # read the committed JSONL snapshot back INTO the kernel (hydrate)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`forge export` is the **D16 portability projection**: a deterministic, git-committable snapshot of the backlog you can review in a diff and carry between machines or checkouts. `forge export --import` is the reverse — it hydrates the kernel from that on-disk snapshot; a re-import that finds everything already present reports "already hydrated" rather than claiming it imported anything.
|
|
31
|
+
|
|
32
|
+
# Migrate in from Beads (or preview v2→v3)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
forge migrate --from beads [--dry-run] # import a Beads issue store into the kernel
|
|
36
|
+
forge migrate --from beads --source <dir> # point at exported beads *.jsonl (defaults to auto-detecting .beads/)
|
|
37
|
+
forge migrate --dry-run # preview the v2→v3 migration (the ONLY supported mode without --from)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`forge migrate --from beads` is the **onboarding path for users coming from Beads** — it imports a Beads issue store into the Forge Kernel (`--dry-run` reads + maps only, writing nothing). Without `--from`, migrate is **v2→v3 preview only**: `--dry-run` is required and applying the migration is not yet available.
|
|
41
|
+
|
|
42
|
+
## Boundaries
|
|
43
|
+
|
|
44
|
+
- The **cloud/backend sync** of the kernel is `forge sync` (cloud-native) — a different operation; this skill is the local, git-based portability projection.
|
|
45
|
+
- A **database/schema** migration (adding a column, altering a table) is application work — that's **plan**/**dev**, not `forge migrate`.
|
|
46
|
+
- Persisting a decision or note is **memory** (`forge remember`), not export.
|
|
47
|
+
- Syncing a git **branch** with main before a PR is **ship**/**worktree**.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "Back up the kernel backlog to a git-tracked JSONL snapshot.",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "Export the kernel backlog to git-tracked JSONL.",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "Migrate our Beads issue store into the Forge kernel.",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "Dry-run the beads migration and show what would be imported.",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "Re-import the exported backlog JSONL into the kernel.",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Migrate the database schema to add the new billing column.",
|
|
24
|
+
"should_trigger": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Sync my feature branch with main before opening the PR.",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "Remember this decision for later.",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
}
|
|
34
|
+
]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "portability",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 957,
|
|
7
|
+
"body_lines": 31,
|
|
8
|
+
"score": 50
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": true,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 100
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 5,
|
|
27
|
+
"fixtures_best_hit": 5,
|
|
28
|
+
"reachable": true,
|
|
29
|
+
"keyword_alignment": 1
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 85
|
|
41
|
+
}
|
package/skills/research/SKILL.md
CHANGED
|
@@ -14,6 +14,7 @@ description: >
|
|
|
14
14
|
heavyweight EXTERNAL market/competitive report (paid Parallel AI); `plan` for the full plan
|
|
15
15
|
stage (brainstorm + tasks); `dev` or `validate` to implement or scan rather than investigate.
|
|
16
16
|
allowed-tools: Bash, Read, Write, Grep, Glob, WebSearch, WebFetch
|
|
17
|
+
terminal: true
|
|
17
18
|
---
|
|
18
19
|
|
|
19
20
|
Investigate anything, from anywhere: verify a claim, search the web, find better options, pull
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "research",
|
|
3
|
+
"fixtures": "present",
|
|
4
|
+
"static": {
|
|
5
|
+
"token_cost": {
|
|
6
|
+
"desc_chars": 1014,
|
|
7
|
+
"body_lines": 179,
|
|
8
|
+
"score": 33
|
|
9
|
+
},
|
|
10
|
+
"caps": {
|
|
11
|
+
"desc_within": true,
|
|
12
|
+
"body_within": true,
|
|
13
|
+
"score": 100
|
|
14
|
+
},
|
|
15
|
+
"description_quality": {
|
|
16
|
+
"has_trigger_cues": false,
|
|
17
|
+
"has_disambiguation_cues": true,
|
|
18
|
+
"adequate_length": true,
|
|
19
|
+
"score": 60
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"router_reachability": {
|
|
23
|
+
"has_curated_rule": true,
|
|
24
|
+
"router_exempt": false,
|
|
25
|
+
"fixtures": "present",
|
|
26
|
+
"fixtures_total": 5,
|
|
27
|
+
"fixtures_best_hit": 2,
|
|
28
|
+
"reachable": true,
|
|
29
|
+
"keyword_alignment": 0.4
|
|
30
|
+
},
|
|
31
|
+
"behavioral": {
|
|
32
|
+
"trigger_recall": null,
|
|
33
|
+
"trigger_precision": null,
|
|
34
|
+
"disambiguation": null,
|
|
35
|
+
"chain_correctness": null,
|
|
36
|
+
"outcome_quality": null,
|
|
37
|
+
"variance": null,
|
|
38
|
+
"note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
|
|
39
|
+
},
|
|
40
|
+
"composite": 60
|
|
41
|
+
}
|
package/skills/review/SKILL.md
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review
|
|
3
|
+
invocation: user
|
|
3
4
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
marks it resolved until checks pass, then runs the pre-merge doc gate and hands the PR off
|
|
8
|
-
for MANUAL merge — never runs `gh pr merge`. Use whenever a PR has review feedback or red
|
|
9
|
-
checks: "address the review comments on PR #123", "the bots flagged issues / Greptile score
|
|
10
|
-
is low", "fix the failing checks and resolve the threads", "CodeRabbit and SonarCloud left
|
|
11
|
-
comments", "get my PR merge-ready". This MUTATING feedback-resolution stage is distinct from
|
|
12
|
-
shepherd (only WATCHES an open PR, changes nothing), verify (POST-merge CI health check +
|
|
13
|
-
closing issues), ship (pushes the branch + opens the PR), validate (PRE-PR local
|
|
14
|
-
type/lint/test/security), and sonarcloud / sonarcloud-analysis (only QUERY SonarCloud data).
|
|
5
|
+
Drive an already-open PR's feedback and failing checks to all-green, resolve every thread,
|
|
6
|
+
run the pre-merge doc gate, then stop for manual merge. Use only when the user asks to
|
|
7
|
+
address PR feedback or checks; never merges or substitutes for Shepherd monitoring.
|
|
15
8
|
allowed-tools: Bash, Read, Edit, Grep, Glob
|
|
9
|
+
next: verify
|
|
10
|
+
terminal: false
|
|
11
|
+
handoffs:
|
|
12
|
+
- shepherd
|
|
16
13
|
---
|
|
17
14
|
|
|
18
15
|
Process ALL pull request issues including GitHub Actions failures, review-agent inline comments (Greptile, CodeRabbit, Qodo, or human reviewers), SonarCloud analysis, and other CI/CD checks.
|
|
19
16
|
|
|
20
17
|
# Review
|
|
21
18
|
|
|
19
|
+
> **Chain (HARD-GATE):** the successor depends on the change classification (source of truth: lib/workflow/stages.js) — Critical → `verify` (post-merge health check); Standard ENDS at `review`. `verify` is the default/critical-path next. While the PR is still open you may hand off to `shepherd` to watch checks toward merge. `review` never merges.
|
|
20
|
+
|
|
22
21
|
This skill handles ALL issues that arise after creating a pull request.
|
|
23
22
|
|
|
24
23
|
## Usage
|