forgedock 1.0.22 → 1.1.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/README.md +255 -211
- package/bin/batch-runner.mjs +339 -0
- package/bin/cinema.mjs +320 -0
- package/bin/demo.mjs +92 -7
- package/bin/engine/phases.mjs +168 -0
- package/bin/engine/projector.mjs +32 -0
- package/bin/engine/reconcile.mjs +11 -0
- package/bin/engine/runlog.mjs +79 -0
- package/bin/engine/state.mjs +32 -0
- package/bin/engine-cli.mjs +222 -0
- package/bin/engine.mjs +138 -0
- package/bin/forgedock.mjs +896 -1540
- package/bin/hooks/interactive-engine.mjs +509 -0
- package/bin/hooks/pre-tool-use.mjs +498 -0
- package/bin/hooks/subagent-stop-enforce.mjs +197 -0
- package/bin/journey.mjs +841 -0
- package/bin/registry.mjs +139 -0
- package/bin/report.mjs +447 -0
- package/bin/runner.mjs +136 -20
- package/bin/settings-hook.mjs +346 -0
- package/bin/tui.mjs +6 -3
- package/commands/adopt.md +4 -1
- package/commands/analytics.md +4 -1
- package/commands/audit-agents.md +110 -27
- package/commands/audit.md +20 -1
- package/commands/autopilot.md +84 -12
- package/commands/changelog.md +2 -1
- package/commands/ci-audit.md +2 -1
- package/commands/cleanup.md +161 -1
- package/commands/compat-audit.md +2 -1
- package/commands/deploy-info.md +63 -4
- package/commands/design-bench.md +6 -1
- package/commands/design-render-critique-loop.md +2 -1
- package/commands/design.md +1 -0
- package/commands/diagnose.md +2 -1
- package/commands/explain.md +2 -1
- package/commands/forge-stats.md +122 -2
- package/commands/forgedock-init.md +1 -1
- package/commands/geo-audit.md +3 -0
- package/commands/incident-response.md +2 -1
- package/commands/issue.md +24 -3
- package/commands/milestone.md +77 -12
- package/commands/optimize.md +2 -1
- package/commands/orchestrate/config.md +67 -0
- package/commands/orchestrate/phase-1-resolve.md +159 -0
- package/commands/orchestrate/phase-2-triage.md +126 -0
- package/commands/orchestrate/phase-2.5-synthesis.md +156 -0
- package/commands/orchestrate/phase-3-dependency.md +591 -0
- package/commands/orchestrate/phase-4-execution.md +962 -0
- package/commands/orchestrate/phase-5-cleanup.md +47 -0
- package/commands/orchestrate/phase-6-report.md +198 -0
- package/commands/orchestrate/safety.md +62 -0
- package/commands/orchestrate.md +25 -2027
- package/commands/pipeline-health/config.md +34 -0
- package/commands/pipeline-health/phase-1-context.md +180 -0
- package/commands/pipeline-health/phase-2-metrics.md +1729 -0
- package/commands/pipeline-health/phase-3-analyze.md +204 -0
- package/commands/pipeline-health/phase-4-proposals.md +117 -0
- package/commands/pipeline-health/phase-5-report.md +284 -0
- package/commands/pipeline-health/phase-6-summary.md +52 -0
- package/commands/pipeline-health.md +25 -2401
- package/commands/pipeline-resume.md +24 -1
- package/commands/pipeline-status.md +65 -0
- package/commands/qa-sweep.md +4 -1
- package/commands/quality-gate.md +326 -42
- package/commands/replay.md +2 -1
- package/commands/review-pr-agents/api.md +135 -0
- package/commands/review-pr-agents/auth.md +137 -0
- package/commands/review-pr-agents/billing.md +101 -0
- package/commands/review-pr-agents/concurrency.md +145 -0
- package/commands/review-pr-agents/database.md +103 -0
- package/commands/review-pr-agents/frontend.md +89 -0
- package/commands/review-pr-agents/infra.md +385 -0
- package/commands/review-pr-agents/protocols.md +185 -0
- package/commands/review-pr-agents/scraper.md +185 -0
- package/commands/review-pr-agents/security.md +406 -0
- package/commands/review-pr-agents.md +45 -1722
- package/commands/review-pr-staging.md +196 -40
- package/commands/review-pr.md +612 -56
- package/commands/rollback.md +2 -1
- package/commands/scope.md +2 -1
- package/commands/security-audit.md +2 -1
- package/commands/signal-planner.md +623 -0
- package/commands/sync-ecosystem.md +1 -0
- package/commands/test-gate.md +17 -1
- package/commands/validate.md +2 -1
- package/commands/work-on/build/architect.md +28 -0
- package/commands/work-on/build/context.md +2 -0
- package/commands/work-on/build/implement.md +19 -5
- package/commands/work-on/build/validate.md +62 -6
- package/commands/work-on/build.md +187 -30
- package/commands/work-on/close.md +132 -5
- package/commands/work-on/decompose.md +19 -1
- package/commands/work-on/investigate.md +117 -2
- package/commands/work-on/review.md +48 -4
- package/commands/work-on-monolithic.md +8 -2
- package/commands/work-on.md +247 -7
- package/docs/BRAND.md +16 -5
- package/docs/CI.md +2 -2
- package/docs/CODEX.md +36 -1
- package/docs/CONFIG.md +44 -42
- package/docs/FORGE-PROTOCOL.md +15 -1064
- package/docs/anthropic-devrel-outreach.md +2 -2
- package/docs/articles/command-decomposition-token-savings.md +214 -0
- package/docs/articles/model-release-playbook.md +131 -0
- package/docs/articles/per-repo-adaptive-scripts-token-savings.md +27 -25
- package/docs/claude-breakpoints.json +75 -5
- package/docs/design/abc-benchmark.md +1 -1
- package/docs/design/design-spec-schema.md +1 -1
- package/docs/design/divergent-generation.md +1 -1
- package/docs/design/eval-gate-runbook.md +178 -0
- package/docs/design/show-hn-draft.md +26 -1
- package/docs/design/token-cost-baseline-1298.md +59 -0
- package/docs/eval/README.md +117 -0
- package/docs/eval/corpus/seed-v1.json +6 -0
- package/docs/eval/published/claude-sonnet-4-6-2026-07-04.json +33 -0
- package/docs/site/annotations-explained.md +24 -0
- package/docs/site/command-learning-path.md +51 -14
- package/docs/site/command-reference.md +339 -113
- package/docs/site/for-companies.md +95 -0
- package/docs/site/forge-annotation-protocol.md +12 -256
- package/docs/site/getting-started.md +58 -12
- package/docs/site/github-is-the-memory.md +113 -0
- package/docs/site/how-it-works.md +3 -13
- package/docs/site/index.md +10 -2
- package/docs/spec/eval-run-result.md +147 -0
- package/docs/spec/forge-protocol-v1.md +441 -18
- package/docs/spec/label-state-machine.md +55 -0
- package/docs/spec/review-protocol.md +158 -0
- package/docs/spec-graph-schema.md +28 -0
- package/docs/superpowers/plans/2026-07-03-cinematic-onboarding-tui.md +2339 -0
- package/docs/superpowers/plans/2026-07-03-durable-execution-engine.md +1223 -0
- package/docs/superpowers/specs/2026-07-03-cinematic-onboarding-tui-design.md +157 -0
- package/docs/superpowers/specs/2026-07-03-durable-execution-engine-design.md +194 -0
- package/docs/superpowers/specs/2026-07-04-economic-self-governance-design.md +181 -0
- package/docs/superpowers/specs/2026-07-04-provenance-trail-design.md +189 -0
- package/examples/forgedock-demo/README.md +41 -22
- package/examples/forgedock-demo/issues/06-bug-tags-type-validation.md +43 -0
- package/examples/forgedock-demo/issues/07-bug-negative-offset-pagination.md +42 -0
- package/examples/forgedock-demo/issues/08-bug-patch-mass-assignment.md +49 -0
- package/examples/forgedock-demo/issues/09-bug-count-injection.md +47 -0
- package/examples/forgedock-demo/issues/10-feature-sort-param.md +39 -0
- package/examples/forgedock-demo/issues/11-feature-patch-tags.md +37 -0
- package/examples/forgedock-demo/issues/12-feature-bulk-create.md +42 -0
- package/examples/forgedock-demo/issues/13-feature-archive-notes.md +46 -0
- package/examples/forgedock-demo/issues/14-refactor-extract-title-validation.md +41 -0
- package/examples/forgedock-demo/issues/15-refactor-protected-route-flag.md +43 -0
- package/examples/forgedock-demo/issues/16-refactor-extract-store.md +45 -0
- package/examples/forgedock-demo/issues/17-perf-tags-dedup-set.md +35 -0
- package/examples/forgedock-demo/issues/18-perf-remove-redundant-sort.md +37 -0
- package/examples/forgedock-demo/issues/19-docs-api-reference-full.md +53 -0
- package/examples/forgedock-demo/issues/20-docs-intentional-flaw-convention.md +46 -0
- package/examples/forgedock-demo/scripts/smoke.js +18 -1
- package/examples/forgedock-demo/src/db.js +36 -11
- package/examples/forgedock-demo/src/routes/notes.js +106 -9
- package/examples/forgedock-demo/src/server.js +4 -1
- package/package.json +12 -4
- package/packages/protocol/LICENSE +21 -0
- package/packages/protocol/src/cli.js +135 -0
- package/packages/protocol/src/emit.js +146 -0
- package/packages/protocol/src/index.js +43 -0
- package/packages/protocol/src/parse.js +229 -0
- package/packages/protocol/src/types.js +171 -0
- package/packages/protocol/src/validate.js +122 -0
- package/scripts/bench-topology-cost.mjs +372 -0
- package/scripts/check-command-docs-drift.sh +198 -0
- package/scripts/check-protocol-restatements.sh +176 -0
- package/scripts/check-registry/README.md +72 -0
- package/scripts/check-registry/manifest.json +6 -0
- package/scripts/code-index.sh +454 -0
- package/scripts/conformance-check.mjs +168 -0
- package/scripts/doctor-pipeline-state.sh +484 -0
- package/scripts/eval-gate-baseline.json +17 -0
- package/scripts/eval-gate-scorecard.mjs +242 -0
- package/scripts/eval-scorecard-aggregator.mjs +252 -0
- package/scripts/flaky-quarantine.sh +241 -0
- package/scripts/forge-annotation.sh +567 -0
- package/scripts/issue-dedup.sh +236 -0
- package/scripts/validate-annotation-node.mjs +233 -0
- package/scripts/verify-env-vars.sh +18 -2
- package/scripts/verify-host-headers.sh +4 -4
- package/scripts/verify-route-registration.sh +2 -2
- package/scripts/worktree-lifecycle.sh +202 -0
- package/templates/devdocs/agent/using-forgedock.md +14 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "ForgeDock for Companies"
|
|
3
|
+
description: "Commercial licensing, the fleet layer, design-partner program, and procurement facts for organizations evaluating ForgeDock."
|
|
4
|
+
keywords: ["forgedock enterprise", "forgedock commercial license", "forgedock fleet layer", "design partner", "agpl commercial"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ForgeDock for Companies
|
|
8
|
+
|
|
9
|
+
ForgeDock's open-source core — the pipeline commands, CLI installer, and all code in this repository — is licensed under AGPL-3.0 and stays that way. Engineers run the full pipeline on their own Claude account, forever free.
|
|
10
|
+
|
|
11
|
+
This page answers the questions that come up when an organization considers ForgeDock for team-wide or production use.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## AGPL-3.0 vs. Commercial License
|
|
16
|
+
|
|
17
|
+
The AGPL-3.0 license is broad but has one specific trigger: **network-use copyleft**. If you run a modified version of ForgeDock as a service that others access over a network, the AGPL requires you to publish your modifications under the same license.
|
|
18
|
+
|
|
19
|
+
Use this table to determine which license you need:
|
|
20
|
+
|
|
21
|
+
| Scenario | License needed |
|
|
22
|
+
|----------|---------------|
|
|
23
|
+
| Individual engineer running ForgeDock on their own repos | **AGPL-3.0 — free** |
|
|
24
|
+
| Team running ForgeDock internally, no external users, comfortable with AGPL | **AGPL-3.0 — free** |
|
|
25
|
+
| Organization contributing modifications back under AGPL-3.0 | **AGPL-3.0 — free** |
|
|
26
|
+
| Organization integrating ForgeDock into a proprietary internal tool and cannot open-source the integration | **Commercial license required** |
|
|
27
|
+
| Building a SaaS or hosted product on top of ForgeDock and cannot release derivative source | **Commercial license required** |
|
|
28
|
+
| Organization whose legal policy prohibits AGPL-licensed software in certain contexts | **Commercial license required** |
|
|
29
|
+
| Want enterprise terms: support SLA, indemnification, or audit rights | **Commercial license required** |
|
|
30
|
+
|
|
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
|
+
|
|
33
|
+
For the full license text, see [`LICENSE`](../../LICENSE) (AGPL-3.0) and [`COMMERCIAL-LICENSE.md`](../../COMMERCIAL-LICENSE.md).
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## The Fleet Layer *(in development)*
|
|
38
|
+
|
|
39
|
+
The open-source pipeline runs one repo at a time, driven by individual engineers. The fleet layer extends this to the organization level. It is built on the same `FORGE:STATE` and `FORGE:TRAJECTORY` annotation data that the open-source pipeline already writes.
|
|
40
|
+
|
|
41
|
+
**What the fleet layer includes:**
|
|
42
|
+
|
|
43
|
+
- **Org-wide run observability** — a single view across all repos showing every pipeline run, its phase, and its outcome. The same structured annotation data you can already query with `gh` today, surfaced in one place.
|
|
44
|
+
- **Policy controls** — configure which issue labels, branches, or repositories require human approval before the pipeline merges a PR.
|
|
45
|
+
- **Audit-grade provenance** — a signed, queryable record of every autonomous change: what ran, on which issue, from which commit, and whether a human reviewed it.
|
|
46
|
+
|
|
47
|
+
**Availability status**: The fleet layer is in active development in a private repository. It is **not yet shipped**. No production customers are running it. The design-partner program (below) is how we onboard the first organizations.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Design-Partner Program
|
|
52
|
+
|
|
53
|
+
We are onboarding a small group of organizations as design partners for the fleet layer. Design partners get:
|
|
54
|
+
|
|
55
|
+
- **Early access** to the fleet layer as it ships, starting with read-only observability
|
|
56
|
+
- **Direct roadmap influence** — your org's use cases shape the policy controls and audit features
|
|
57
|
+
- **Favorable commercial terms** locked in before general availability
|
|
58
|
+
|
|
59
|
+
Design partnership is appropriate for organizations that are already running ForgeDock in production (or want to start) and have a concrete need for org-level visibility or governance over autonomous merges.
|
|
60
|
+
|
|
61
|
+
**To apply**: [Open a design-partner intake request](https://github.com/RapierCraftStudios/ForgeDock/issues/new?template=design-partner.yml) on GitHub, or email [support@rapiercraftstudios.com](mailto:support@rapiercraftstudios.com) directly.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Procurement Facts
|
|
66
|
+
|
|
67
|
+
Questions procurement teams typically ask, answered directly:
|
|
68
|
+
|
|
69
|
+
**Does ForgeDock run on our infrastructure or yours?**
|
|
70
|
+
ForgeDock runs entirely on your own environment. There is no ForgeDock-operated compute, API proxy, or data relay. The pipeline commands run inside your Claude Code session on your machine, calling the Anthropic API directly with your credentials.
|
|
71
|
+
|
|
72
|
+
**Where does pipeline state live?**
|
|
73
|
+
All pipeline state lives in your GitHub repository: issue comments (FORGE annotations), PR descriptions, and workflow labels. ForgeDock writes nothing to any external system. You own the data; you can query or delete it with standard GitHub tools.
|
|
74
|
+
|
|
75
|
+
**Do you have access to our code or GitHub data?**
|
|
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
|
+
|
|
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`](../../CONTRIBUTING.md) for the full process.
|
|
80
|
+
|
|
81
|
+
**Security policy?**
|
|
82
|
+
See [`SECURITY.md`](../../SECURITY.md) for the vulnerability disclosure policy and contact.
|
|
83
|
+
|
|
84
|
+
**Governance?**
|
|
85
|
+
See [`GOVERNANCE.md`](../../GOVERNANCE.md) for the project's decision-making process and stewardship model.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Contact
|
|
90
|
+
|
|
91
|
+
Commercial licensing, design-partner applications, and enterprise inquiries:
|
|
92
|
+
|
|
93
|
+
- **Email**: [support@rapiercraftstudios.com](mailto:support@rapiercraftstudios.com)
|
|
94
|
+
- **Design-partner intake form**: [Open an intake request on GitHub](https://github.com/RapierCraftStudios/ForgeDock/issues/new?template=design-partner.yml)
|
|
95
|
+
- **Sponsors / early access**: [github.com/sponsors/RapierCraftStudios](https://github.com/sponsors/RapierCraftStudios)
|
|
@@ -1,266 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "The FORGE Annotation Protocol"
|
|
3
|
-
description: "Technical specification for FORGE annotations — the open machine-readable comment protocol for AI agent context passing.
|
|
3
|
+
description: "Technical specification for FORGE annotations — the open machine-readable comment protocol for AI agent context passing."
|
|
4
4
|
keywords: ["ai agent context protocol", "ai agent communication", "forge annotations", "llm agent memory protocol", "ai pipeline protocol", "structured agent context"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# The FORGE Annotation Protocol
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
The naive solution is to re-derive everything from scratch every time. This is:
|
|
20
|
-
|
|
21
|
-
- **Slow** — repeating investigation work already done
|
|
22
|
-
- **Inconsistent** — different agents may reach different conclusions about the same code
|
|
23
|
-
- **Lossy** — nuance from investigation doesn't always survive into implementation
|
|
24
|
-
|
|
25
|
-
FORGE solves this by making agent outputs **persistent**, **structured**, and **queryable** — written to GitHub where they stay forever and can be read by any downstream agent or human.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Protocol Overview
|
|
30
|
-
|
|
31
|
-
A FORGE annotation is a GitHub comment that begins with an HTML comment tag identifying the agent that wrote it:
|
|
32
|
-
|
|
33
|
-
```html
|
|
34
|
-
<!-- FORGE:{AGENT_TYPE} -->
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
The comment may also contain a completion marker:
|
|
38
|
-
|
|
39
|
-
```html
|
|
40
|
-
<!-- {AGENT_TYPE}:COMPLETE -->
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
The completion marker is checked by downstream pipeline phases to determine whether the annotation represents a fully-written result or a partial/interrupted one.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Defined Annotation Types
|
|
48
|
-
|
|
49
|
-
### `FORGE:INVESTIGATOR`
|
|
50
|
-
|
|
51
|
-
Posted by the investigation agent after analyzing an issue.
|
|
52
|
-
|
|
53
|
-
**Contents**:
|
|
54
|
-
- Verdict: CONFIRMED | PARTIAL | INVALID
|
|
55
|
-
- Confidence: HIGH | MEDIUM | LOW
|
|
56
|
-
- Severity: CRITICAL | HIGH | MEDIUM | LOW
|
|
57
|
-
- Root Cause with file:line references
|
|
58
|
-
- Complete Affected Files list
|
|
59
|
-
- Evidence (function names, behavior observed)
|
|
60
|
-
- Decomposition Assessment (YES/NO with rationale)
|
|
61
|
-
|
|
62
|
-
**Completion marker**: `<!-- INVESTIGATION:COMPLETE -->`
|
|
63
|
-
|
|
64
|
-
**Read by**: Builder, Architect, Context Gatherer
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
<!-- FORGE:INVESTIGATOR -->
|
|
68
|
-
## Investigation Report
|
|
69
|
-
|
|
70
|
-
**Verdict**: CONFIRMED
|
|
71
|
-
**Confidence**: HIGH
|
|
72
|
-
**Root Cause**: `services/payments/validator.py:142` — billing profile lookup
|
|
73
|
-
does not guard against None for free-tier users.
|
|
74
|
-
|
|
75
|
-
...
|
|
76
|
-
|
|
77
|
-
<!-- INVESTIGATION:COMPLETE -->
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
### `FORGE:CONTRACT`
|
|
83
|
-
|
|
84
|
-
Posted by the contract agent, establishing the build scope.
|
|
85
|
-
|
|
86
|
-
**Contents**:
|
|
87
|
-
- Task Type (Bug Fix | Feature | Refactor | Maintenance)
|
|
88
|
-
- Proposed Approach
|
|
89
|
-
- Deliverables table: file | change description | why
|
|
90
|
-
- Acceptance Criteria (checkboxes)
|
|
91
|
-
- Quality Considerations
|
|
92
|
-
- Out of Scope
|
|
93
|
-
|
|
94
|
-
**Read by**: Builder, Reviewer
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
### `FORGE:ARCHITECT`
|
|
99
|
-
|
|
100
|
-
Posted by the architecture agent with an implementation plan.
|
|
101
|
-
|
|
102
|
-
**Contents**:
|
|
103
|
-
- Affected Paths table: file | function | change required | why
|
|
104
|
-
- Implementation Order (numbered, with rationale)
|
|
105
|
-
- Consistency Checks (invariants all paths must satisfy)
|
|
106
|
-
- Risk Assessment table: risk | severity | mitigation
|
|
107
|
-
- Files to Read Before Coding
|
|
108
|
-
|
|
109
|
-
**Completion marker**: `<!-- FORGE:ARCHITECT:COMPLETE -->`
|
|
110
|
-
|
|
111
|
-
**Read by**: Builder (follows the implementation order exactly)
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
### `FORGE:CONTEXT`
|
|
116
|
-
|
|
117
|
-
Posted by the context gathering agent with institutional memory.
|
|
118
|
-
|
|
119
|
-
**Contents**:
|
|
120
|
-
- Known Pitfalls for This Area (from past review findings)
|
|
121
|
-
- Historical Findings on These Files
|
|
122
|
-
- Past Bugs in This Module
|
|
123
|
-
- Related Code Paths (callers/importers of changed functions)
|
|
124
|
-
- Patterns That Cause Bugs Here
|
|
125
|
-
- Successful Similar Implementations
|
|
126
|
-
|
|
127
|
-
**Completion marker**: `<!-- FORGE:CONTEXT:COMPLETE -->`
|
|
128
|
-
|
|
129
|
-
**Read by**: Builder (read before touching any code)
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
### `FORGE:BUILDER`
|
|
134
|
-
|
|
135
|
-
Posted by the implementation agent after completing a build.
|
|
136
|
-
|
|
137
|
-
**Contents**:
|
|
138
|
-
- Branch name
|
|
139
|
-
- Commit SHAs
|
|
140
|
-
- Files changed count
|
|
141
|
-
- Approach summary (key decisions)
|
|
142
|
-
- Changes (bulleted file-by-file list)
|
|
143
|
-
- Acceptance Criteria Status (from CONTRACT, marked pass/fail)
|
|
144
|
-
- Testing Checklist
|
|
145
|
-
|
|
146
|
-
**Completion marker**: `<!-- FORGE:BUILDER:COMPLETE -->`
|
|
147
|
-
|
|
148
|
-
**Read by**: Review orchestrator, Phase 6 close agent
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
### `FORGE:REVIEWER`
|
|
153
|
-
|
|
154
|
-
Posted by domain review agents on the PR.
|
|
155
|
-
|
|
156
|
-
**Contents**:
|
|
157
|
-
- Agent type (e.g., SECURITY, LOGIC, FRONTEND, DATABASE)
|
|
158
|
-
- Verdict: APPROVED | CHANGES_REQUESTED | COMMENTED
|
|
159
|
-
- Findings (severity: CRITICAL | HIGH | MEDIUM | LOW)
|
|
160
|
-
- Each finding: description, affected line, suggested fix, prevention rule
|
|
161
|
-
|
|
162
|
-
**Read by**: Review orchestrator (determines merge eligibility), future context agents
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
### `FORGE:TRAJECTORY`
|
|
167
|
-
|
|
168
|
-
Posted as the final annotation on a closed issue. Serves as a permanent audit trail.
|
|
169
|
-
|
|
170
|
-
**Contents**:
|
|
171
|
-
- Phase-by-phase results table
|
|
172
|
-
- Key decisions made during the pipeline
|
|
173
|
-
- Anomalies detected
|
|
174
|
-
- Pipeline completion timestamp
|
|
175
|
-
|
|
176
|
-
**Read by**: `pipeline-health` command for performance analysis, future context agents for pattern mining
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Partial Annotation Detection
|
|
181
|
-
|
|
182
|
-
If a pipeline phase is interrupted mid-run (session ends, compaction, error), the annotation may be present but incomplete — missing its completion marker.
|
|
183
|
-
|
|
184
|
-
The canonical detection pattern:
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
# Check for FORGE:INVESTIGATOR without INVESTIGATION:COMPLETE
|
|
188
|
-
gh api repos/{owner}/{repo}/issues/{number}/comments \
|
|
189
|
-
--jq '.[] | select(
|
|
190
|
-
.body | contains("FORGE:INVESTIGATOR") and
|
|
191
|
-
(contains("INVESTIGATION:COMPLETE") | not)
|
|
192
|
-
) | .id'
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
If a partial annotation is found, the pipeline deletes it and re-runs the phase from scratch. This ensures downstream agents never read incomplete context.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Querying FORGE State with the `gh` CLI
|
|
200
|
-
|
|
201
|
-
FORGE annotations are queryable using standard `gh` CLI JSON filtering:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# Get the investigation report for issue #42
|
|
205
|
-
gh api repos/{owner}/{repo}/issues/42/comments \
|
|
206
|
-
--jq '.[] | select(.body | contains("FORGE:INVESTIGATOR")) | .body'
|
|
207
|
-
|
|
208
|
-
# Check current workflow phase
|
|
209
|
-
gh issue view 42 -R {owner}/{repo} --json labels \
|
|
210
|
-
--jq '[.labels[].name | select(startswith("workflow:"))]'
|
|
211
|
-
|
|
212
|
-
# Find all issues currently in-review
|
|
213
|
-
gh issue list -R {owner}/{repo} \
|
|
214
|
-
--label "workflow:in-review" \
|
|
215
|
-
--json number,title
|
|
216
|
-
|
|
217
|
-
# Check if build is complete (FORGE:BUILDER exists)
|
|
218
|
-
gh api repos/{owner}/{repo}/issues/42/comments \
|
|
219
|
-
--jq '.[] | select(.body | contains("FORGE:BUILDER:COMPLETE")) | .id'
|
|
220
|
-
```
|
|
9
|
+
> **This page has moved.**
|
|
10
|
+
>
|
|
11
|
+
> The normative specification for the FORGE Annotation Protocol is now maintained at:
|
|
12
|
+
>
|
|
13
|
+
> **[`docs/spec/forge-protocol-v1.md`](../spec/forge-protocol-v1.md)**
|
|
14
|
+
>
|
|
15
|
+
> That document is the single source of truth for all FORGE annotation types,
|
|
16
|
+
> syntax rules, the label state machine, conformance requirements, the extension
|
|
17
|
+
> mechanism, and the versioning policy. It is licensed under
|
|
18
|
+
> [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/).
|
|
221
19
|
|
|
222
20
|
---
|
|
223
21
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
FORGE is an open format. You don't need ForgeDock to use it.
|
|
227
|
-
|
|
228
|
-
**Minimum viable adoption**:
|
|
229
|
-
|
|
230
|
-
1. Pick annotation types relevant to your pipeline (INVESTIGATOR + BUILDER is a good start)
|
|
231
|
-
2. Write your agent prompts to post annotated comments after each phase
|
|
232
|
-
3. Write your downstream agent prompts to read those comments before starting
|
|
233
|
-
|
|
234
|
-
The protocol is intentionally minimal — it's just structured text in GitHub comments. Any agent that can run `gh issue comment` and `gh api` can participate.
|
|
235
|
-
|
|
236
|
-
**Extending the protocol**:
|
|
237
|
-
|
|
238
|
-
You can define your own annotation types by following the naming convention:
|
|
239
|
-
|
|
240
|
-
```html
|
|
241
|
-
<!-- FORGE:YOUR_CUSTOM_AGENT -->
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
The only constraint: use a unique name that won't conflict with existing types. Custom types are invisible to ForgeDock agents, which only read the types they know about.
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## Why GitHub Comments (Not a Database)
|
|
249
|
-
|
|
250
|
-
FORGE deliberately uses GitHub comments rather than a dedicated database or vector store because:
|
|
251
|
-
|
|
252
|
-
1. **Zero infrastructure** — no service to deploy, no schema to maintain
|
|
253
|
-
2. **Human-readable** — engineers can read the full context without tooling
|
|
254
|
-
3. **Durable** — GitHub issues are permanent; comments survive repo migrations
|
|
255
|
-
4. **Queryable** — the `gh` CLI provides a complete query interface
|
|
256
|
-
5. **Universal** — any agent that can use `gh` can participate in the pipeline
|
|
257
|
-
|
|
258
|
-
The tradeoff is that querying is text-based (not semantic). For most pipeline coordination use cases, exact-match on annotation type markers is sufficient.
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## Next Steps
|
|
263
|
-
|
|
264
|
-
- [How ForgeDock's Knowledge Graph Works](./how-it-works.md) — see FORGE annotations in the full pipeline context
|
|
265
|
-
- [Complete Command Reference](./command-reference.md) — commands that read and write FORGE annotations
|
|
266
|
-
- [Getting Started with ForgeDock in 5 Minutes](./getting-started.md) — see FORGE annotations appear live on your issues
|
|
22
|
+
*This file is kept as a redirect stub so that existing links and references continue to resolve.*
|
|
@@ -43,13 +43,15 @@ go install github.com/mikefarah/yq/v4@latest
|
|
|
43
43
|
|
|
44
44
|
## Step 1: Install ForgeDock
|
|
45
45
|
|
|
46
|
-
Run the installer with `npx
|
|
46
|
+
Run the installer with `npx` from your project directory:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
npx forgedock
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
This
|
|
52
|
+
This installs all 25+ ForgeDock command specs into the current project (project-scoped by default) — making them available as slash commands in Claude Code sessions for this repo.
|
|
53
|
+
|
|
54
|
+
> **Want commands available across all projects on this machine?** Use `npx forgedock --global` to install into `~/.claude/commands/` instead. Project-scoped is the default for new installs; use `--global` as an explicit opt-in.
|
|
53
55
|
|
|
54
56
|
**Verify the install:**
|
|
55
57
|
|
|
@@ -71,24 +73,31 @@ ForgeDock Doctor — Installation Health Check
|
|
|
71
73
|
All checks passed. ForgeDock installation is healthy.
|
|
72
74
|
```
|
|
73
75
|
|
|
74
|
-
It exits `0` when everything passes and `1` if any check fails, so you can also use it in CI.
|
|
76
|
+
It exits `0` when everything passes and `1` if any check fails, so you can also use it in CI.
|
|
75
77
|
|
|
76
|
-
> Prefer a quick spot-check? `ls
|
|
78
|
+
> Prefer a quick spot-check? `ls .claude/commands/ | grep -E "work-on|review-pr|quality-gate"` should list `work-on.md`, `review-pr.md`, and `quality-gate.md`. (For a `--global` install, use `ls ~/.claude/commands/` instead.)
|
|
77
79
|
|
|
78
80
|
---
|
|
79
81
|
|
|
80
|
-
## Step 2:
|
|
81
|
-
|
|
82
|
-
ForgeDock reads a single `forge.yaml` in your project root. **Start minimal** — only the `project`, `paths`, and `branches` sections are required. Everything else is optional and falls back to sensible defaults; add sections as you need them.
|
|
82
|
+
## Step 2: Your Config Is Already There
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
`npx forgedock` in Step 1 ran the full install journey — including repo detection and a reviewed `forge.yaml` — so there's no separate config step to run. If you need to redo detection later (moved the repo, renamed a branch), or want a leaner config with just the required sections, re-run:
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
87
|
cd /path/to/your/project
|
|
88
88
|
npx forgedock init --minimal
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
**Optional: enrich the config.** Once `forge.yaml` exists, open Claude Code in your project directory and run `/forgedock-init` to fill in the optional sections that plain detection can't infer:
|
|
92
|
+
|
|
93
|
+
- Project board connection (GitHub Projects v2)
|
|
94
|
+
- Satellite repo routing (multi-repo setups)
|
|
95
|
+
- Review context (tech stack, known pitfalls)
|
|
96
|
+
- Service URLs for health checks
|
|
97
|
+
|
|
98
|
+
`/forgedock-init` completes an existing `forge.yaml` — it won't create one from scratch.
|
|
99
|
+
|
|
100
|
+
**Minimal `forge.yaml` example:**
|
|
92
101
|
|
|
93
102
|
```yaml
|
|
94
103
|
project:
|
|
@@ -110,7 +119,7 @@ That's the whole config. Run `npx forgedock doctor` to confirm it's valid.
|
|
|
110
119
|
|
|
111
120
|
> **The three required sections are `project`, `paths`, and `branches`** — `npx forgedock init --minimal` auto-detects `paths` for you (so worktrees land in the right place) and you rarely need to touch it. Everything else (project board, review context, verification commands, multi-repo routing) is optional and falls back to sensible defaults. Browse [`forge.yaml.example`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/forge.yaml.example) and [`docs/CONFIG.md`](https://github.com/RapierCraftStudios/ForgeDock/blob/main/docs/CONFIG.md) when you're ready to customize.
|
|
112
121
|
|
|
113
|
-
**Prefer guided, AI-powered setup?** Open Claude Code in your project directory and run `/forgedock-init` instead — it scans your repo and fills in the optional sections (repo owner/name, worktree path, branch strategy, project board) for you.
|
|
122
|
+
**Prefer guided, AI-powered setup?** Open Claude Code in your project directory and run `/forgedock-init` instead — it scans your repo and fills in the optional sections (repo owner/name, worktree path, branch strategy, project board) for you.
|
|
114
123
|
|
|
115
124
|
---
|
|
116
125
|
|
|
@@ -196,11 +205,11 @@ The quick fixes below cover the most common first-run issues. For the full list
|
|
|
196
205
|
|
|
197
206
|
**`/work-on` not found in Claude Code**
|
|
198
207
|
|
|
199
|
-
The symlink wasn't created. Re-run `npx forgedock` and check `ls ~/.claude/commands
|
|
208
|
+
The symlink wasn't created. Re-run `npx forgedock` and check `ls .claude/commands/` (project-scoped, default) or `ls ~/.claude/commands/` (if you used `--global`).
|
|
200
209
|
|
|
201
210
|
**`forge.yaml` not found**
|
|
202
211
|
|
|
203
|
-
Run
|
|
212
|
+
Run `npx forgedock init` in your project directory to generate it, or copy `forge.yaml.example` from the ForgeDock repo and edit it. Once it exists, `/forgedock-init` inside Claude Code can fill in the optional sections.
|
|
204
213
|
|
|
205
214
|
**`gh` auth errors**
|
|
206
215
|
|
|
@@ -209,3 +218,40 @@ Run `gh auth login` and complete the OAuth flow. ForgeDock uses `gh` for all Git
|
|
|
209
218
|
**Pipeline stops at investigation**
|
|
210
219
|
|
|
211
220
|
The issue may have been marked `workflow:invalid`. Check the issue comments for the investigation report — it will explain why.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Migrating from a global install
|
|
225
|
+
|
|
226
|
+
If you installed ForgeDock before project-scoped became the default (prior to v1.0.22), your commands live in `~/.claude/commands/`. You have two options:
|
|
227
|
+
|
|
228
|
+
**Option A: Keep the global install (no action required)**
|
|
229
|
+
|
|
230
|
+
Add `--global` to all future `npx forgedock install/update/uninstall/doctor` calls. Your existing setup is unchanged.
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
npx forgedock update --global # re-link after a version bump
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Option B: Switch to project-scoped (recommended for per-repo version control)**
|
|
237
|
+
|
|
238
|
+
1. Remove the global install:
|
|
239
|
+
```bash
|
|
240
|
+
npx forgedock uninstall --global
|
|
241
|
+
```
|
|
242
|
+
2. In each repo you want ForgeDock in, run a fresh project-scoped install:
|
|
243
|
+
```bash
|
|
244
|
+
cd /path/to/your-repo
|
|
245
|
+
npx forgedock install
|
|
246
|
+
```
|
|
247
|
+
3. Verify:
|
|
248
|
+
```bash
|
|
249
|
+
npx forgedock doctor # auto-detects project-scoped install
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Detect your current mode:**
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
npx forgedock doctor # prints "Mode: project-scoped" or "Mode: global"
|
|
256
|
+
npx forgedock status # shows install path
|
|
257
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitHub Is Already Your Agents' Memory"
|
|
3
|
+
description: "AI agents re-derive everything from scratch every session. The data they need to avoid that is already in GitHub — commits, PRs, issues, blame. ForgeDock makes it machine-readable."
|
|
4
|
+
keywords: ["ai agent memory", "github knowledge graph", "forge annotation protocol", "deterministic phase engine", "trajectory receipt"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GitHub Is Already Your Agents' Memory
|
|
8
|
+
|
|
9
|
+
Every agent session begins the same way. The model reads the codebase, forms a hypothesis, and starts writing. It does not know that the function it is about to change was shaped by a bug fix filed in issue #347. It does not know that the approach it is about to try was already attempted and reverted in PR #891. It does not know that three other files will need the same change, because a review agent noted that dependency two weeks ago and the note lives in a comment thread the current session never read.
|
|
10
|
+
|
|
11
|
+
This is the memory problem — not context length. Context windows are large enough. The bottleneck is that nothing ever gets written down in a place where the next agent session can find it.
|
|
12
|
+
|
|
13
|
+
The common solution is a sidecar memory store: a vector database, an MCP memory server, a proprietary knowledge base. The agent writes embeddings after a run; the next agent retrieves them at session start. The idea is reasonable. The execution has a consistent flaw: it duplicates structure that already exists in GitHub while being invisible to humans and every tool that is not specifically wired to query it. A human reading the issue thread sees none of it. A `git blame` reveals none of it. A new developer onboarding to the codebase sees none of it.
|
|
14
|
+
|
|
15
|
+
GitHub is already a citation graph. Commits reference issues. Pull requests reference commits. Issues cross-reference related issues. `git blame` traces every line to a commit, which traces to a PR, which traces to an issue thread containing the full reasoning behind the change. That graph is public, auditable, searchable with standard tools, and survives any vendor relationship. Agents just do not use it as one.
|
|
16
|
+
|
|
17
|
+
The question is not whether to give agents memory. The question is whether that memory should live inside proprietary stores that duplicate GitHub, or whether it should live in GitHub itself — where every human and tool on the project can already read it.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## What "machine-readable" means here
|
|
22
|
+
|
|
23
|
+
The GitHub citation graph is human-readable by design. An issue thread mixes prose rationale, code snippets, review comments, and reactions. A commit message is free text. A PR description has whatever structure the author chose to give it.
|
|
24
|
+
|
|
25
|
+
Human-readable is not the same as machine-parseable. A downstream agent cannot reliably extract "the root cause identified in the investigation phase" from a prose paragraph that may or may not contain one. It cannot reliably distinguish a speculative suggestion from a confirmed finding. It cannot know which comment in a 40-comment thread represents the agreed-upon plan.
|
|
26
|
+
|
|
27
|
+
ForgeDock's answer is **FORGE annotations** — structured HTML comments written by each pipeline stage and read by every downstream stage. An annotation looks like this:
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<!-- FORGE:INVESTIGATOR
|
|
31
|
+
verdict: CONFIRMED/HIGH
|
|
32
|
+
root_cause: The co-change query reads a variable populated only by the Layer 5 subsystem, which shipped in PR #1204 three hours before this issue was filed. The variable is never written on the headless path.
|
|
33
|
+
affected_files: commands/orchestrate.md, scripts/layer5-query.sh
|
|
34
|
+
-->
|
|
35
|
+
```
|
|
36
|
+
|
|
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
|
+
|
|
39
|
+
The annotation format is an open standard — the [FORGE Annotation Protocol](../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
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Three terms, defined once
|
|
44
|
+
|
|
45
|
+
**Knowledge graph** — in this context, the set of GitHub issues, pull requests, commits, and their cross-references, treated as a queryable graph rather than a linear history. The `gh` CLI is the query interface. `gh issue view`, `gh pr view`, `gh issue list --search`, and `git log` are the operations. No additional infrastructure is required.
|
|
46
|
+
|
|
47
|
+
**Trajectory receipt** — the `FORGE:TRAJECTORY` annotation written to a GitHub issue at the end of a pipeline run. It records what each phase actually did: the investigation verdict, the architectural decision, the build summary, the quality gate results, the review findings, and the merge commit. It is not a log file on a server; it is a public comment on the issue, readable by any agent that opens that issue in any future session. On this repository, trajectory receipts are the primary mechanism by which the pipeline avoids repeating work.
|
|
48
|
+
|
|
49
|
+
**Deterministic phase engine** — the component that decides what happens next in a pipeline run, based on GitHub state rather than model inference. When a run is interrupted and resumed, the engine reads the annotations present on the issue, determines which phases have completed, and advances to the correct next phase. The model does not decide whether to re-run investigation; the engine reads the `FORGE:INVESTIGATOR` annotation, finds it present and valid, and skips directly to context. Phase selection is a pure rule-based state machine. The engine shipped in [PR #1326](https://github.com/RapierCraftStudios/ForgeDock/pull/1326).
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## What the receipts actually show
|
|
54
|
+
|
|
55
|
+
These are public runs on this repository — the annotation trails are readable on the linked issues.
|
|
56
|
+
|
|
57
|
+
**Citing past bugs by number, before a line is written.** From [issue #1196](https://github.com/RapierCraftStudios/ForgeDock/issues/1196), the context phase produced this output before build began:
|
|
58
|
+
|
|
59
|
+
> "`commands/orchestrate.md` has a dense review-finding history from PR #1081/#1107/#1126… associative-array declaration mistakes (#1113), array-element removal via pattern substitution corrupting partial matches (#1108)… the new Layer 5 subsection should not introduce a competing edge-direction convention that could reintroduce a cycle class."
|
|
60
|
+
|
|
61
|
+
That output came from querying the knowledge graph — the agent read the PR history for `commands/orchestrate.md`, extracted the annotated findings from prior reviews, and synthesized the relevant constraints. It did not come from a vector database. It came from GitHub.
|
|
62
|
+
|
|
63
|
+
**Review catching a bug in the fix itself.** [Issue #1230](https://github.com/RapierCraftStudios/ForgeDock/issues/1230): the pipeline's own staging review identified dead code in a feature the pipeline had shipped three hours earlier (the co-change query read a never-populated variable). A fix was built. The review phase then caught a defect in the fix: stray backticks in the grep pattern meant every `git-log` pathspec silently matched zero commits. The reviewer's finding read: "the fix would not have actually worked." The fix was corrected. Intent to merged: 30 minutes.
|
|
64
|
+
|
|
65
|
+
**Self-invalidation with receipts.** [Issue #952](https://github.com/RapierCraftStudios/ForgeDock/issues/952): the investigation phase closed the pipeline's own proposal as INVALID. The deliverable had already shipped weeks earlier. The trajectory receipt documents the reasoning and links the prior PR. Zero code written. The pipeline did not guess; it queried GitHub, found the prior work, and stopped.
|
|
66
|
+
|
|
67
|
+
These are not selected for drama. They are selected because each one is a case where the pipeline's behavior was downstream of structured data in GitHub — not model intuition, not a sidecar store, not a human prompt.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Why memory that lives where the work lives is different
|
|
72
|
+
|
|
73
|
+
A sidecar memory store requires explicit maintenance. Someone has to decide what gets stored, in what format, with what retention policy. If the store is lost or migrated, the memory is gone. If a new engineer joins the project, they cannot read the memory with their existing tools — they need access to and familiarity with the store.
|
|
74
|
+
|
|
75
|
+
Memory in GitHub requires none of this. Every FORGE annotation is a GitHub comment. It appears in the issue timeline. It is indexed by GitHub search. It is exportable via the standard API. It is archived in every repository clone. A new engineer reading an issue thread encounters the full investigation, architectural rationale, build summary, and review findings as part of the normal issue history — no additional access required.
|
|
76
|
+
|
|
77
|
+
This is what "auditable, portable, and survives any vendor" means in practice. The annotations are machine-readable because they have structure. They are human-readable because they are GitHub comments. They are durable because GitHub is the primary store, not a secondary one.
|
|
78
|
+
|
|
79
|
+
The `gh` CLI as query interface means the memory is queryable from any shell, any CI environment, and any agent session — with no SDK, no API key rotation for a separate service, and no schema migration to manage.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## The compounding property
|
|
84
|
+
|
|
85
|
+
Trajectory receipts compound. When the pipeline works on a module it has touched before, the context phase finds prior trajectory receipts for that module, extracts the review findings they record, and forwards them to the architect and builder as known constraints. Known bugs do not get reintroduced. Known approaches that failed are not re-attempted. Known patterns that the reviewer flagged get applied proactively.
|
|
86
|
+
|
|
87
|
+
In this repository's first 30 days (June 4 through July 4, 2026): 693 issues filed, 605 closed, 603 PRs merged. 49% of all issues filed originated from the pipeline's own review agents — bugs the pipeline found in its own output, filed as issues, and then fixed. That loop runs because each review's findings are annotated on the PR, the trajectory receipt records them on the issue, and the context phase for any subsequent work on the same files reads them. Numbers are point-in-time; a reproducible benchmark is in progress at [#1264](https://github.com/RapierCraftStudios/ForgeDock/issues/1264).
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Two paths forward
|
|
92
|
+
|
|
93
|
+
**Try it end-to-end with ForgeDock:**
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npx forgedock demo
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This spins up a risk-free demo repository and walks the full pipeline — investigate, build, review, merge — so you can read the annotations it produces before pointing it at a production codebase. The full setup:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npx forgedock
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Checks your environment, installs the slash commands into Claude Code, and generates a `forge.yaml` for your repository.
|
|
106
|
+
|
|
107
|
+
**Adopt the protocol without ForgeDock:**
|
|
108
|
+
|
|
109
|
+
The annotation format is the independently useful part. The [FORGE Annotation Protocol](../FORGE-PROTOCOL.md) document describes the philosophy and vocabulary. The [protocol spec](../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
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
The sidecar stores are building a parallel infrastructure for something GitHub already does. The annotations are the part that was missing — the structured layer that makes the existing graph machine-readable. Once that layer exists, the query interface is `gh`, the storage is GitHub, and the memory is wherever the work is.
|
|
@@ -127,19 +127,9 @@ A new agent session running `/work-on 42` should always know what to do next by
|
|
|
127
127
|
|
|
128
128
|
## Labels as State Machine
|
|
129
129
|
|
|
130
|
-
GitHub labels track the workflow state of every issue
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|-------|---------|
|
|
134
|
-
| `workflow:investigating` | Investigator agent is running |
|
|
135
|
-
| `workflow:ready-to-build` | Investigation complete, queued for build |
|
|
136
|
-
| `workflow:building` | Builder agent is running |
|
|
137
|
-
| `workflow:in-review` | PR created, review agents running |
|
|
138
|
-
| `workflow:merged` | PR merged, issue closed |
|
|
139
|
-
| `workflow:invalid` | Issue was not a real problem |
|
|
140
|
-
| `workflow:decomposed` | Split into sub-issues |
|
|
141
|
-
|
|
142
|
-
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.
|
|
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
|
+
|
|
132
|
+
> **Label reference**: [`docs/spec/label-state-machine.md`](../spec/label-state-machine.md) — full state table, transition rules, and terminal labels.
|
|
143
133
|
|
|
144
134
|
---
|
|
145
135
|
|