forgedock 1.2.0 → 1.4.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/batch-runner.mjs +31 -2
- package/bin/engine/admission.mjs +294 -0
- package/bin/engine/admission.test.mjs +265 -0
- package/bin/engine/invariants.mjs +17 -4
- package/bin/engine/phases.mjs +358 -42
- package/bin/engine/resolve.mjs +256 -0
- package/bin/engine/resolve.test.mjs +149 -0
- package/bin/engine/state.mjs +31 -7
- package/bin/engine-cli.mjs +138 -2
- package/bin/engine.mjs +414 -21
- package/bin/forgedock.mjs +552 -44
- package/bin/hooks/interactive-engine.mjs +50 -24
- package/bin/hooks/pre-tool-use.mjs +189 -19
- package/bin/journey.mjs +109 -11
- package/bin/labels.json +5 -0
- package/bin/runner.mjs +321 -10
- package/bin/watch-utils.mjs +255 -0
- package/commands/cleanup.md +7 -3
- package/commands/forge-stats.md +5 -4
- package/commands/issue.md +5 -1
- package/commands/orchestrate/config.md +41 -1
- package/commands/orchestrate/phase-1-resolve.md +234 -8
- package/commands/orchestrate/phase-3-dependency.md +27 -18
- package/commands/orchestrate/phase-4-execution.md +223 -22
- package/commands/qa-sweep.md +17 -0
- package/commands/quality-gate.md +6 -6
- package/commands/replay.md +16 -2
- package/commands/review-pr-agents/spec-cli.md +179 -0
- package/commands/review-pr.md +65 -0
- package/commands/upgrade-deps.md +523 -0
- package/commands/work-on/build/validate.md +61 -1
- package/commands/work-on/build.md +9 -1
- package/commands/work-on/decompose.md +10 -1
- package/commands/work-on/investigate.md +22 -4
- package/commands/work-on/remediate.md +2 -0
- package/commands/work-on/review.md +40 -1
- package/commands/work-on.md +19 -4
- package/docs/AIDER.md +264 -0
- package/docs/AUTOPILOT-CRON.md +130 -0
- package/docs/CONFIG.md +156 -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/eval-run-result.md +8 -4
- package/docs/spec/label-state-machine.md +9 -0
- package/docs/spec-graph-schema.md +3 -3
- package/package.json +3 -3
- 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 +5 -11
- package/packages/protocol/src/html-comment-escape.js +68 -0
- package/packages/protocol/src/index.js +3 -1
- package/packages/protocol/src/parse.js +19 -11
- package/packages/protocol/src/phases.js +105 -0
- package/packages/protocol/src/types.js +18 -1
- package/packages/protocol/src/validate.js +11 -0
- package/scripts/check-admission-parity.mjs +167 -0
- package/scripts/check-command-side-effects.sh +376 -0
- package/scripts/check-phase-registry-drift.mjs +96 -0
- package/scripts/check-spec-markers.sh +274 -0
- package/scripts/classify-lane.sh +29 -7
- package/scripts/forge-run.sh +353 -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
package/docs/launch/show-hn.md
CHANGED
|
@@ -25,9 +25,9 @@ The fix isn't a bigger context window. It's structured memory that survives conv
|
|
|
25
25
|
|
|
26
26
|
ForgeDock treats GitHub as that memory layer. Every pipeline stage writes machine-readable HTML annotations to issues and PRs — FORGE:INVESTIGATOR traces root cause to a specific commit, FORGE:ARCHITECT produces a typed implementation plan, FORGE:CONTEXT surfaces known pitfalls from closed issues in the same module. The next agent reads these before doing anything. The gh CLI is the query interface; no external store, no embeddings.
|
|
27
27
|
|
|
28
|
-
The pipeline: /work-on #42 → investigate (reads git blame, closed issues, review findings) → architect (traces all call sites, orders changes by dependency) → build → quality gate (14+ check domains) → 9-agent review → PR. Each stage writes what it found so the next stage doesn't repeat the work.
|
|
28
|
+
The pipeline: /work-on #42 → investigate (reads git blame, closed issues, review findings) → architect (traces all call sites, orders changes by dependency) → build → quality gate (14+ check domains) → 9-agent review → PR. Each stage writes what it found so the next stage doesn't repeat the work. ForgeDock builds itself with this pipeline — in its first 30 days, 693 issues filed and 603 PRs merged across the repo — and patterns accumulate: the context phase now flags known pitfalls in a module before the builder touches it.
|
|
29
29
|
|
|
30
|
-
It's
|
|
30
|
+
It's a set of markdown command specs installed via npx forgedock, no runtime server. Would love to hear what the HN community thinks about using GitHub's existing graph structure — commits, blame, cross-references — as agent memory.
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
**Character count**: ~1,380 characters (well within 4,000 limit)
|
|
@@ -71,7 +71,7 @@ It's 25 markdown command specs installed via npx forgedock, no runtime server. W
|
|
|
71
71
|
|
|
72
72
|
### "Why HTML comments for annotations?"
|
|
73
73
|
|
|
74
|
-
> GitHub renders HTML comments invisibly to humans — the issue stays readable without noise. Agents grep for `<!-- FORGE:INVESTIGATOR -->` to find structured context fast. It's a zero-dependency protocol: no API, no schema registry, no additional auth. Any tool with `gh` CLI access can read and write annotations. The downside is parsing cost (tokens to extract fields from markdown); the [
|
|
74
|
+
> GitHub renders HTML comments invisibly to humans — the issue stays readable without noise. Agents grep for `<!-- FORGE:INVESTIGATOR -->` to find structured context fast. It's a zero-dependency protocol: no API, no schema registry, no additional auth. Any tool with `gh` CLI access can read and write annotations. The downside is parsing cost (tokens to extract fields from markdown); the [Where it's going section of the README](https://github.com/RapierCraftStudios/ForgeDock#where-its-going) describes replacing this with a purpose-built graph store once the protocol is proven.
|
|
75
75
|
|
|
76
76
|
---
|
|
77
77
|
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "ForgeDock Architecture"
|
|
3
|
+
description: "How ForgeDock's autonomous pipeline works. Phase-by-phase breakdown, FORGE annotation relay, worktree isolation, and how agents reconstruct context after compaction."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ForgeDock Architecture
|
|
7
|
+
|
|
8
|
+
ForgeDock is **not an application** — it's a set of markdown command specs that get symlinked into `~/.claude/commands/` and invoked as slash commands in Claude Code. There is no runtime process. Every pipeline operation runs inside Claude Code, using GitHub as the persistence layer.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Repository Structure
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
commands/ # Authoritative workflow specs
|
|
16
|
+
work-on.md # Main orchestrator: investigate → build → review → merge
|
|
17
|
+
work-on/ # Sub-phases: investigate, build, review, close
|
|
18
|
+
build/ # Sub-sub-phases: context, architect, implement, validate
|
|
19
|
+
review-pr.md # PR review orchestrator
|
|
20
|
+
review-pr-agents.md # 9-agent review catalog
|
|
21
|
+
orchestrate.md # Parallel multi-issue execution
|
|
22
|
+
quality-gate.md # Pre-commit checks (14+ domains)
|
|
23
|
+
autopilot.md # Self-improvement cycle
|
|
24
|
+
... # 25+ more commands
|
|
25
|
+
|
|
26
|
+
bin/ # npm installer
|
|
27
|
+
forgedock.mjs # npx forgedock — symlinks commands into ~/.claude/commands/
|
|
28
|
+
|
|
29
|
+
docs/ # Reference docs and this site
|
|
30
|
+
scripts/ # Verification scripts used by quality-gate
|
|
31
|
+
.agents/ # Codex adapter layer (repo-local skill overrides)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## The Pipeline Relay
|
|
37
|
+
|
|
38
|
+
The core innovation is **structured context passing via GitHub annotations**. Every pipeline phase writes a `FORGE:` annotation as a GitHub issue comment. Every downstream phase reads prior annotations before acting.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Issue opened
|
|
42
|
+
│
|
|
43
|
+
▼
|
|
44
|
+
FORGE:INVESTIGATOR — root cause, affected files, recommendation
|
|
45
|
+
│
|
|
46
|
+
▼
|
|
47
|
+
FORGE:CONTRACT — what will be built, deliverables table, acceptance criteria
|
|
48
|
+
│
|
|
49
|
+
▼
|
|
50
|
+
FORGE:CONTEXT — past review findings, historical bugs, related code paths
|
|
51
|
+
│
|
|
52
|
+
▼
|
|
53
|
+
FORGE:ARCHITECT — implementation plan, ordered file changes, risk assessment
|
|
54
|
+
│
|
|
55
|
+
▼
|
|
56
|
+
FORGE:BUILDER — branch, commits, files changed, acceptance criteria status
|
|
57
|
+
│
|
|
58
|
+
▼
|
|
59
|
+
FORGE:REVIEW — domain agent findings, severity ratings
|
|
60
|
+
│
|
|
61
|
+
▼
|
|
62
|
+
FORGE:TRAJECTORY — audit trail, pipeline phase results, anomalies
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This relay means:
|
|
66
|
+
- A new session can pick up exactly where a previous one left off by reading GitHub state
|
|
67
|
+
- Context compaction does not lose work — the next agent re-reads annotations and continues
|
|
68
|
+
- The audit trail is human-readable and queryable with the `gh` CLI
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Pipeline Phases
|
|
73
|
+
|
|
74
|
+
### Phase 0: Context Load
|
|
75
|
+
|
|
76
|
+
Reads issue number, labels, milestone, existing annotations. Determines which phase to resume from. Classifies lane (fast vs. feature) based on milestone presence.
|
|
77
|
+
|
|
78
|
+
**Fast lane**: Issues without a milestone → PR targets `staging`.
|
|
79
|
+
**Feature lane**: Issues with a milestone → PR targets `milestone/{slug}`.
|
|
80
|
+
|
|
81
|
+
### Phase 1: Investigation
|
|
82
|
+
|
|
83
|
+
Validates whether the issue is real. Reads domain files, traces execution paths, git blame. Posts `FORGE:INVESTIGATOR` with verdict (CONFIRMED / PARTIAL / INVALID), root cause, affected files, and decomposition assessment.
|
|
84
|
+
|
|
85
|
+
### Phase 2: Decomposition (conditional)
|
|
86
|
+
|
|
87
|
+
If 2+ services, 6+ files across directories, or multiple task types: creates sub-issues with dependency order. Parent issue gets `workflow:decomposed`. Each sub-issue runs its own `/work-on`.
|
|
88
|
+
|
|
89
|
+
### Phase 3: Build
|
|
90
|
+
|
|
91
|
+
Sub-phases in order:
|
|
92
|
+
|
|
93
|
+
| Sub-phase | What Happens |
|
|
94
|
+
|-----------|-------------|
|
|
95
|
+
| 3C: Contract | Builder posts deliverables table, acceptance criteria, quality considerations |
|
|
96
|
+
| 3C.5: Context | Surfaces institutional memory — past review findings, historical bugs, related code paths |
|
|
97
|
+
| 3C.6: Architect | Traces ALL affected code paths, sequences implementation order, assesses risk |
|
|
98
|
+
| 3F: Implement | Writes code in isolated git worktree per the architect plan |
|
|
99
|
+
| 3G: Quality Gate | 14-category pre-commit check (runs up to 3 iterations) |
|
|
100
|
+
| 3H: Format | Language-specific formatting and type checking |
|
|
101
|
+
| 3K: Commit | Conventional commit with issue reference |
|
|
102
|
+
| 3M: Builder comment | Posts `FORGE:BUILDER` with branch, commits, acceptance criteria status |
|
|
103
|
+
|
|
104
|
+
### Phase 4: PR Creation
|
|
105
|
+
|
|
106
|
+
Pushes branch, creates PR targeting the correct base branch. Updates issue to `workflow:in-review`.
|
|
107
|
+
|
|
108
|
+
### Phase 5: Auto-Review
|
|
109
|
+
|
|
110
|
+
Invokes `/review-pr --auto-merge`. 9 domain agents (security, billing, database, concurrency, auth, frontend, API, performance, infrastructure) review the PR. Critical/HIGH findings become separate GitHub issues. PR merges if no blocking findings.
|
|
111
|
+
|
|
112
|
+
### Phase 6: Close & Cleanup
|
|
113
|
+
|
|
114
|
+
Closes the issue, sets `workflow:merged`, removes worktree and local branch. If issue is a sub-issue, checks off the item in the parent tracker.
|
|
115
|
+
|
|
116
|
+
### Phase 7: Trajectory Log
|
|
117
|
+
|
|
118
|
+
Posts `FORGE:TRAJECTORY` with phase-by-phase results table for pipeline health monitoring.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Git Worktree Isolation
|
|
123
|
+
|
|
124
|
+
Every build phase creates an isolated git worktree:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
git worktree add .claude/worktrees/feat-my-feature-42 \
|
|
128
|
+
-b feat/my-feature-42 origin/staging
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Benefits:
|
|
132
|
+
- Build operations never dirty the main working tree
|
|
133
|
+
- Multiple issues can be built in parallel without branch conflicts
|
|
134
|
+
- Worktree is removed in Phase 6 after merge
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Quality Gate
|
|
139
|
+
|
|
140
|
+
The quality gate checks code before commit across 14+ domains:
|
|
141
|
+
|
|
142
|
+
- **Logic**: null checks, off-by-one errors, unreachable code
|
|
143
|
+
- **Auth**: auth guards on all state-changing routes
|
|
144
|
+
- **Database**: N+1 queries, missing indexes, raw SQL injection surface
|
|
145
|
+
- **Security**: hardcoded credentials, injection vectors, CSRF exposure
|
|
146
|
+
- **Frontend**: proxy wiring, missing error boundaries, a11y regressions
|
|
147
|
+
- **Infrastructure**: Docker ownership, port binding, env var sync
|
|
148
|
+
- **API contracts**: response shape changes, SDK literal sync
|
|
149
|
+
- **Tests**: coverage gaps, missing edge cases
|
|
150
|
+
|
|
151
|
+
Each finding is rated HIGH / MEDIUM / LOW. HIGH findings are blocking. The gate runs up to 3 iterations.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Compaction Resilience
|
|
156
|
+
|
|
157
|
+
Claude Code compacts context mid-session. ForgeDock is designed to survive this:
|
|
158
|
+
|
|
159
|
+
1. **Write to GitHub after every significant step** — annotations are the durable state
|
|
160
|
+
2. **Re-read GitHub at the start of each phase** — never assume in-memory context
|
|
161
|
+
3. **Universal dispatcher** — any session can re-read issue labels and comments and determine exactly which phase to resume
|
|
162
|
+
|
|
163
|
+
A new `/work-on 42` invocation after compaction reads the existing `FORGE:INVESTIGATOR`, `FORGE:CONTRACT`, `FORGE:ARCHITECT`, and `FORGE:BUILDER` comments and jumps straight to Phase 4 (PR creation) or Phase 5 (review) without re-running earlier phases.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Command Specs Are Prompts
|
|
168
|
+
|
|
169
|
+
The `.md` files in `commands/` are detailed prompt engineering documents — some exceed 50KB. They constrain LLM behavior at every step:
|
|
170
|
+
|
|
171
|
+
- **Phase boundaries** are explicit with entry conditions and exit actions
|
|
172
|
+
- **Universal continuation rule** prevents premature stopping after intermediate results
|
|
173
|
+
- **Structured output requirements** (e.g., `<!-- INVESTIGATION:COMPLETE -->` marker) are machine-readable gates that downstream phases check before proceeding
|
|
174
|
+
- **Domain-specific rules** (INFRA footguns, type invariant verification, sibling pattern sweeps) encode institutional memory directly into the prompt
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Contributing
|
|
179
|
+
|
|
180
|
+
The pipeline dogfoods itself. Bug reports, improvements, and new command specs all flow through `/work-on`. See [CONTRIBUTING.md](https://github.com/RapierCraftStudios/ForgeDock/blob/main/CONTRIBUTING.md) and [devdocs/project/architecture.md](https://github.com/RapierCraftStudios/ForgeDock/blob/main/devdocs/project/architecture.md) for the full strategic context.
|
|
@@ -453,6 +453,23 @@ Measures pipeline performance, correlates with prompt changes, and proposes impr
|
|
|
453
453
|
|
|
454
454
|
---
|
|
455
455
|
|
|
456
|
+
### `/upgrade-deps`
|
|
457
|
+
|
|
458
|
+
**Autonomous dependency upgrade pipeline.**
|
|
459
|
+
|
|
460
|
+
Detects outdated packages, triages them by semver risk, creates GitHub issues for eligible upgrades, and runs each through `/work-on` — so every upgrade gets investigation, compatibility verification, quality gate, review, and merge rather than a blind version bump. Major upgrades are flagged for human review unless `--allow-major` is passed.
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
/upgrade-deps # Detect + triage + report only
|
|
464
|
+
/upgrade-deps --dry-run # All phases, but create nothing
|
|
465
|
+
/upgrade-deps --ecosystem npm # Limit to one ecosystem (npm|pip|cargo)
|
|
466
|
+
/upgrade-deps --allow-major # Include major upgrades in issue creation
|
|
467
|
+
/upgrade-deps --limit 5 # Cap issue creation (default: 10)
|
|
468
|
+
/upgrade-deps --batch # Group patch upgrades into one issue
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
456
473
|
## Investigation & Validation
|
|
457
474
|
|
|
458
475
|
---
|
|
@@ -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
|
|