forgedock 1.2.0 → 1.3.0
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/README.md +8 -2
- package/bin/engine/phases.mjs +178 -28
- package/bin/engine/state.mjs +39 -7
- package/bin/engine-cli.mjs +63 -2
- package/bin/engine.mjs +25 -4
- package/bin/forgedock.mjs +235 -4
- package/bin/hooks/pre-tool-use.mjs +26 -12
- package/bin/journey.mjs +103 -11
- package/commands/forge-stats.md +5 -4
- package/commands/issue.md +5 -1
- package/commands/orchestrate/phase-4-execution.md +2 -0
- package/commands/qa-sweep.md +17 -0
- package/commands/replay.md +16 -2
- package/commands/review-pr-agents/spec-cli.md +179 -0
- package/commands/review-pr.md +49 -0
- package/commands/upgrade-deps.md +518 -0
- package/commands/work-on/build/validate.md +61 -1
- package/commands/work-on/build.md +9 -1
- package/commands/work-on/decompose.md +8 -1
- package/docs/AIDER.md +264 -0
- package/docs/AUTOPILOT-CRON.md +130 -0
- package/docs/CONFIG.md +36 -0
- package/docs/CURSOR.md +135 -0
- package/docs/OPENCODE.md +312 -0
- package/docs/demo.gif +0 -0
- package/docs/eval/README.md +4 -4
- package/docs/launch/show-hn.md +3 -3
- package/docs/site/architecture.md +180 -0
- package/docs/site/command-reference.md +17 -0
- package/docs/site/configuration.md +243 -0
- package/docs/site/for-companies.md +4 -4
- package/docs/site/forge-annotation-protocol.md +1 -1
- package/docs/site/github-is-the-memory.md +2 -2
- package/docs/site/how-it-works.md +1 -1
- package/docs/site/public/llms-full.txt +380 -0
- package/docs/site/public/llms.txt +35 -0
- package/docs/spec-graph-schema.md +3 -3
- package/package.json +2 -2
- package/packages/protocol/README.md +75 -0
- package/packages/protocol/src/card.js +114 -0
- package/packages/protocol/src/cli.js +4 -77
- package/packages/protocol/src/emit.js +14 -3
- package/packages/protocol/src/index.js +2 -1
- package/packages/protocol/src/parse.js +17 -8
- package/packages/protocol/src/types.js +1 -1
- package/packages/protocol/src/validate.js +11 -0
- package/scripts/check-command-side-effects.sh +261 -0
- package/scripts/check-spec-markers.sh +273 -0
- package/scripts/classify-lane.sh +29 -7
- package/scripts/forge-run.sh +322 -0
- package/templates/cross-repo-trigger.yml +282 -0
- package/templates/cursor/forge.mdc +148 -0
- package/templates/github-actions/forgedock-autopilot.yml +113 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Configuration Reference — forge.yaml"
|
|
3
|
+
description: "Complete forge.yaml schema reference for ForgeDock. All required and optional sections explained with examples."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Configuration Reference — forge.yaml
|
|
7
|
+
|
|
8
|
+
`forge.yaml` lives at your project root and tells ForgeDock commands how to interact with your project. Without it, commands cannot resolve your GitHub repository, paths, or branches.
|
|
9
|
+
|
|
10
|
+
## Quick Start
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Option 1: Autopilot setup (recommended)
|
|
14
|
+
npx forgedock init
|
|
15
|
+
|
|
16
|
+
# Option 2: Manual setup
|
|
17
|
+
cp forge.yaml.example forge.yaml
|
|
18
|
+
# Edit forge.yaml with your project details
|
|
19
|
+
echo "forge.yaml" >> .gitignore
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`npx forgedock init` auto-detects most values from `git remote`, `package.json`, and `gh api`. You review the result on a single annotated screen.
|
|
23
|
+
|
|
24
|
+
### `init` Flags
|
|
25
|
+
|
|
26
|
+
| Flag | Behavior |
|
|
27
|
+
|------|----------|
|
|
28
|
+
| `--manual` | Skip AI enrichment — shows detection baseline values only |
|
|
29
|
+
| `--verbose` | Show each field's detection source and confidence rationale |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Schema Overview
|
|
34
|
+
|
|
35
|
+
| Section | Required | Purpose |
|
|
36
|
+
|---------|----------|---------|
|
|
37
|
+
| [`project`](#project-required) | **Yes** | GitHub identity (owner, repo, name) |
|
|
38
|
+
| [`paths`](#paths-required) | **Yes** | Local filesystem locations |
|
|
39
|
+
| [`branches`](#branches-required) | **Yes** | Branch naming conventions |
|
|
40
|
+
| [`repos`](#repos-optional) | No | Multi-repository routing |
|
|
41
|
+
| [`project_board`](#project_board-optional) | No | GitHub Projects v2 integration |
|
|
42
|
+
| [`services`](#services-optional) | No | External service URLs and IDs |
|
|
43
|
+
| [`review`](#review-optional) | No | Context injected into review agents |
|
|
44
|
+
| [`devdocs`](#devdocs-optional) | No | Devdocs knowledge tree path |
|
|
45
|
+
| [`verification`](#verification-optional) | No | Health-check patterns |
|
|
46
|
+
| [`billing`](#billing-optional) | No | Financial integrity audit |
|
|
47
|
+
| [`adaptive_scripts`](#adaptive_scripts-optional) | No | Per-repo script override configuration |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## `project` (REQUIRED)
|
|
52
|
+
|
|
53
|
+
Core identity fields used by every command that calls `gh issue`, `gh pr`, or `gh project`.
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
project:
|
|
57
|
+
name: "Acme Platform"
|
|
58
|
+
owner: "acme-org"
|
|
59
|
+
repo: "acme-platform"
|
|
60
|
+
description: "SaaS platform for automated data processing"
|
|
61
|
+
# forge_repo: "acme-org/acme-forge" # if pipeline lives in a separate repo
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
| Field | Type | Required | Description |
|
|
65
|
+
|-------|------|----------|-------------|
|
|
66
|
+
| `name` | string | **Yes** | Human-readable name used in pipeline reports and issue comments |
|
|
67
|
+
| `owner` | string | **Yes** | GitHub org or username |
|
|
68
|
+
| `repo` | string | **Yes** | Repository name. Combined as `owner/repo` = the `GH_REPO` in all commands |
|
|
69
|
+
| `description` | string | No | One-line description used in issue templates |
|
|
70
|
+
| `forge_repo` | string | No | Pipeline repo in `owner/repo` format when pipeline lives separately from the project being developed |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## `paths` (REQUIRED)
|
|
75
|
+
|
|
76
|
+
Local filesystem paths for git worktree operations.
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
paths:
|
|
80
|
+
root: "/home/youruser/projects/acme-platform"
|
|
81
|
+
worktree_base: "/home/youruser/projects/acme-platform/.claude/worktrees"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Field | Type | Required | Description |
|
|
85
|
+
|-------|------|----------|-------------|
|
|
86
|
+
| `root` | string (absolute) | **Yes** | Absolute path to the project root. Base for `git worktree add` |
|
|
87
|
+
| `worktree_base` | string (absolute) | **Yes** | Directory where per-branch worktrees are created |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## `branches` (REQUIRED)
|
|
92
|
+
|
|
93
|
+
Branch naming conventions that control PR targeting and source branch selection.
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
branches:
|
|
97
|
+
default: "main"
|
|
98
|
+
staging: "staging"
|
|
99
|
+
feature_pattern: "milestone/{slug}"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
| Field | Type | Required | Description |
|
|
103
|
+
|-------|------|----------|-------------|
|
|
104
|
+
| `default` | string | **Yes** | Default branch (`main` or `master`) |
|
|
105
|
+
| `staging` | string | **Yes** | Staging branch for fast-lane PRs (issues without a milestone) |
|
|
106
|
+
| `feature_pattern` | string | **Yes** | Pattern for feature branches. `{slug}` = milestone title in kebab-case |
|
|
107
|
+
|
|
108
|
+
**Lane routing**: Issues without a milestone → fast lane → PR targets `branches.staging`. Issues with a milestone → feature lane → PR targets `branches.feature_pattern`.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## `repos` (OPTIONAL)
|
|
113
|
+
|
|
114
|
+
Multi-repository routing for projects that span multiple GitHub repos.
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
repos:
|
|
118
|
+
default:
|
|
119
|
+
repo: "acme-org/acme-platform"
|
|
120
|
+
staging_branch: "staging"
|
|
121
|
+
|
|
122
|
+
satellites:
|
|
123
|
+
- prefix: "mcp"
|
|
124
|
+
repo: "acme-org/acme-mcp-server"
|
|
125
|
+
staging_branch: "main"
|
|
126
|
+
local_path: "/home/youruser/projects/acme-mcp-server"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Use `<prefix>:<issue_number>` syntax in commands: `mcp:5`, `sdk:12`.
|
|
130
|
+
|
|
131
|
+
| Field | Type | Required | Description |
|
|
132
|
+
|-------|------|----------|-------------|
|
|
133
|
+
| `satellites[].prefix` | string | **Yes** | Short prefix for issue routing |
|
|
134
|
+
| `satellites[].repo` | string | **Yes** | Full `owner/repo` of the satellite repository |
|
|
135
|
+
| `satellites[].staging_branch` | string | **Yes** | Target branch for fast-lane PRs |
|
|
136
|
+
| `satellites[].local_path` | string | No | Absolute local path to the satellite repo |
|
|
137
|
+
| `satellites[].billing_enabled` | boolean | No | Enable financial integrity audit for this satellite |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## `project_board` (OPTIONAL)
|
|
142
|
+
|
|
143
|
+
GitHub Projects v2 integration. When configured, ForgeDock automatically adds issues to the board and updates Status, Lane, Component, Priority, and Workflow fields.
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
project_board:
|
|
147
|
+
owner: "acme-org"
|
|
148
|
+
project_number: 1
|
|
149
|
+
project_id: "PVT_kwHOxxxxxxxxxxxxxxxx"
|
|
150
|
+
|
|
151
|
+
field_ids:
|
|
152
|
+
status: "PVTSSF_xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
153
|
+
lane: "PVTSSF_xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
154
|
+
component: "PVTSSF_xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
155
|
+
priority: "PVTSSF_xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
156
|
+
workflow: "PVTSSF_xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
157
|
+
|
|
158
|
+
option_ids:
|
|
159
|
+
status:
|
|
160
|
+
todo: "xxxxxxxx"
|
|
161
|
+
in_progress: "xxxxxxxx"
|
|
162
|
+
done: "xxxxxxxx"
|
|
163
|
+
lane:
|
|
164
|
+
fast: "xxxxxxxx"
|
|
165
|
+
feature: "xxxxxxxx"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Finding your IDs**:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# List project IDs
|
|
172
|
+
gh project list --owner <owner> --format json | jq '.projects[] | {number, id, title}'
|
|
173
|
+
|
|
174
|
+
# List field IDs
|
|
175
|
+
gh project field-list <project_number> --owner <owner> --format json | jq '.fields[]'
|
|
176
|
+
|
|
177
|
+
# List option IDs for a single-select field
|
|
178
|
+
gh project field-list <project_number> --owner <owner> --format json \
|
|
179
|
+
| jq '.fields[] | select(.name == "Status") | .options[]'
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## `review` (OPTIONAL)
|
|
185
|
+
|
|
186
|
+
Context injected into review agent prompts. Helps agents make project-aware decisions.
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
review:
|
|
190
|
+
context: |
|
|
191
|
+
This is a multi-tenant SaaS. Every endpoint must enforce tenant isolation.
|
|
192
|
+
We use row-level security in PostgreSQL — never bypass it.
|
|
193
|
+
Financial calculations must use Decimal, never float.
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## `devdocs` (OPTIONAL)
|
|
199
|
+
|
|
200
|
+
Path to your project's devdocs knowledge tree. Agents read this for institutional context before making architectural decisions.
|
|
201
|
+
|
|
202
|
+
```yaml
|
|
203
|
+
devdocs:
|
|
204
|
+
path: "devdocs/"
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
The devdocs directory should contain `project/architecture.md` as the primary strategic context file. See [Architecture](./architecture) for details on ForgeDock's own devdocs structure.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## `adaptive_scripts` (OPTIONAL)
|
|
212
|
+
|
|
213
|
+
Per-repo script overrides for deterministic pipeline operations. Allows you to replace prose instructions with executable scripts for project-specific validation.
|
|
214
|
+
|
|
215
|
+
```yaml
|
|
216
|
+
adaptive_scripts:
|
|
217
|
+
enabled: true
|
|
218
|
+
directory: "scripts/forge/"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Full Example
|
|
224
|
+
|
|
225
|
+
```yaml
|
|
226
|
+
# forge.yaml — minimal required config
|
|
227
|
+
|
|
228
|
+
project:
|
|
229
|
+
name: "My Project"
|
|
230
|
+
owner: "my-org"
|
|
231
|
+
repo: "my-project"
|
|
232
|
+
|
|
233
|
+
paths:
|
|
234
|
+
root: "/home/me/projects/my-project"
|
|
235
|
+
worktree_base: "/home/me/projects/my-project/.claude/worktrees"
|
|
236
|
+
|
|
237
|
+
branches:
|
|
238
|
+
default: "main"
|
|
239
|
+
staging: "staging"
|
|
240
|
+
feature_pattern: "milestone/{slug}"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
For the full annotated example, see [`forge.yaml.example`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/forge.yaml.example) in the repository.
|
|
@@ -30,7 +30,7 @@ Use this table to determine which license you need:
|
|
|
30
30
|
|
|
31
31
|
Key clarification: ForgeDock is a **development tool**, not a library embedded in your product. Simply using ForgeDock to build and ship your own software does not trigger the copyleft clause — the clause applies when you modify ForgeDock itself and offer it as a service to others.
|
|
32
32
|
|
|
33
|
-
For the full license text, see [`LICENSE`](
|
|
33
|
+
For the full license text, see [`LICENSE`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/LICENSE) (AGPL-3.0) and [`COMMERCIAL-LICENSE.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/COMMERCIAL-LICENSE.md).
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -76,13 +76,13 @@ All pipeline state lives in your GitHub repository: issue comments (FORGE annota
|
|
|
76
76
|
No. ForgeDock has no server-side component that could receive your code or GitHub data. The `npx forgedock` installer symlinks command files into `~/.claude/commands/` on the developer's machine — it does not phone home.
|
|
77
77
|
|
|
78
78
|
**How are contributions governed?**
|
|
79
|
-
All contributors sign a Developer Certificate of Origin (DCO) on each commit. ForgeDock does not use a CLA. See [`CONTRIBUTING.md`](
|
|
79
|
+
All contributors sign a Developer Certificate of Origin (DCO) on each commit. ForgeDock does not use a CLA. See [`CONTRIBUTING.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/CONTRIBUTING.md) for the full process.
|
|
80
80
|
|
|
81
81
|
**Security policy?**
|
|
82
|
-
See [`SECURITY.md`](
|
|
82
|
+
See [`SECURITY.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/SECURITY.md) for the vulnerability disclosure policy and contact.
|
|
83
83
|
|
|
84
84
|
**Governance?**
|
|
85
|
-
See [`GOVERNANCE.md`](
|
|
85
|
+
See [`GOVERNANCE.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/GOVERNANCE.md) for the project's decision-making process and stewardship model.
|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
@@ -10,7 +10,7 @@ keywords: ["ai agent context protocol", "ai agent communication", "forge annotat
|
|
|
10
10
|
>
|
|
11
11
|
> The normative specification for the FORGE Annotation Protocol is now maintained at:
|
|
12
12
|
>
|
|
13
|
-
> **[`docs/spec/forge-protocol-v1.md`](
|
|
13
|
+
> **[`docs/spec/forge-protocol-v1.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/docs/spec/forge-protocol-v1.md)**
|
|
14
14
|
>
|
|
15
15
|
> That document is the single source of truth for all FORGE annotation types,
|
|
16
16
|
> syntax rules, the label state machine, conformance requirements, the extension
|
|
@@ -36,7 +36,7 @@ affected_files: commands/orchestrate.md, scripts/layer5-query.sh
|
|
|
36
36
|
|
|
37
37
|
This is still a GitHub comment — a human reading the thread sees it as a collapsed HTML comment or reads its contents directly. But a downstream agent querying the issue with `gh issue view` gets it as structured text it can parse without guessing at prose intent. The annotation is the contract between stages.
|
|
38
38
|
|
|
39
|
-
The annotation format is an open standard — the [FORGE Annotation Protocol](
|
|
39
|
+
The annotation format is an open standard — the [FORGE Annotation Protocol](https://github.com/RapierCraftStudios/ForgeDock/blob/main/docs/spec/forge-protocol-v1.md). Any agent pipeline can implement it without ForgeDock. The format is documented in full, the vocabulary is fixed, and the license is CC-BY-4.0.
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
@@ -106,7 +106,7 @@ Checks your environment, installs the slash commands into Claude Code, and gener
|
|
|
106
106
|
|
|
107
107
|
**Adopt the protocol without ForgeDock:**
|
|
108
108
|
|
|
109
|
-
The annotation format is the independently useful part. The [FORGE Annotation Protocol](
|
|
109
|
+
The annotation format is the independently useful part. The [FORGE Annotation Protocol](https://github.com/RapierCraftStudios/ForgeDock/blob/main/docs/FORGE-PROTOCOL.md) document describes the philosophy and vocabulary. The [protocol spec](https://github.com/RapierCraftStudios/ForgeDock/blob/main/docs/spec/forge-protocol-v1.md) gives the full technical definition — annotation types, required fields, completion markers, and query patterns. The license is CC-BY-4.0. Any agent pipeline can implement structured GitHub annotations using these specs without adopting ForgeDock's command layer. The only requirement is consistency: if annotations are written and read with the same vocabulary, the knowledge graph is coherent across sessions.
|
|
110
110
|
|
|
111
111
|
---
|
|
112
112
|
|
|
@@ -129,7 +129,7 @@ A new agent session running `/work-on 42` should always know what to do next by
|
|
|
129
129
|
|
|
130
130
|
GitHub labels track the workflow state of every issue. The pipeline reads these labels to determine what to do next. A human can also manually set a label to nudge the pipeline or override its routing.
|
|
131
131
|
|
|
132
|
-
> **Label reference**: [`docs/spec/label-state-machine.md`](
|
|
132
|
+
> **Label reference**: [`docs/spec/label-state-machine.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/docs/spec/label-state-machine.md) — full state table, transition rules, and terminal labels.
|
|
133
133
|
|
|
134
134
|
---
|
|
135
135
|
|