@izkac/forgekit 0.3.11 → 0.3.13
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/bin/forge.mjs +107 -107
- package/bin/forgekit.mjs +83 -83
- package/bin/review.mjs +81 -81
- package/package.json +1 -1
- package/scripts/prepack.mjs +78 -78
- package/scripts/run-tests.mjs +50 -50
- package/src/adr.mjs +236 -236
- package/src/adr.test.mjs +170 -170
- package/src/change.mjs +327 -234
- package/src/change.test.mjs +145 -83
- package/src/cleanup-sessions.mjs +84 -84
- package/src/config.mjs +103 -103
- package/src/defer.mjs +75 -75
- package/src/doctor.mjs +350 -341
- package/src/doctor.test.mjs +114 -114
- package/src/init.mjs +680 -621
- package/src/install.mjs +815 -815
- package/src/install.test.mjs +180 -180
- package/src/integrity-check.mjs +60 -60
- package/src/integrity.mjs +682 -682
- package/src/integrity.test.mjs +566 -566
- package/src/lib.mjs +143 -143
- package/src/models.defaults.json +41 -41
- package/src/new-session.mjs +99 -99
- package/src/openspec-overlays/README.md +19 -19
- package/src/openspec-overlays/openspec-apply-change-footer.md +14 -14
- package/src/openspec-overlays/opsx-apply-completion-step.md +1 -1
- package/src/openspec-overlays/opsx-apply-implement-step.md +11 -11
- package/src/paths.mjs +92 -92
- package/src/plan-engine.mjs +321 -278
- package/src/plan-engine.test.mjs +447 -283
- package/src/preferences.defaults.json +78 -78
- package/src/preferences.mjs +438 -438
- package/src/preferences.test.mjs +174 -174
- package/src/record-evidence.mjs +204 -204
- package/src/resolve-model.mjs +312 -312
- package/src/resolve-model.test.mjs +194 -194
- package/src/review/cli.test.mjs +117 -117
- package/src/review/export.mjs +172 -172
- package/src/review/export.test.mjs +197 -197
- package/src/review/fixtures/valid-review.json +42 -42
- package/src/review/lib.mjs +894 -894
- package/src/review/lib.test.mjs +266 -266
- package/src/review/schema.json +196 -196
- package/src/review/signals.test.mjs +62 -62
- package/src/score-cli.mjs +68 -68
- package/src/score.mjs +568 -566
- package/src/score.test.mjs +366 -340
- package/src/session-reminder.mjs +207 -207
- package/src/session-status.mjs +70 -70
- package/src/set-models.mjs +186 -186
- package/src/set-phase.mjs +205 -205
- package/src/set-prefs.mjs +294 -294
- package/src/specs-sync.mjs +234 -0
- package/src/specs-sync.test.mjs +114 -0
- package/src/spine.mjs +93 -93
- package/src/triage-prompt.mjs +175 -175
- package/src/triage-prompt.test.mjs +50 -50
- package/src/vendor-openspec-overlays.mjs +176 -176
- package/src/vendor-openspec-overlays.test.mjs +62 -62
- package/vendor/skills/archive-to-adr/SKILL.md +149 -149
- package/vendor/skills/forge/SKILL.md +136 -136
- package/vendor/skills/forge/docs/forge.md +650 -647
- package/vendor/skills/forge/phases/brainstorm.md +23 -23
- package/vendor/skills/forge/phases/finish.md +90 -87
- package/vendor/skills/forge/phases/implement.md +77 -77
- package/vendor/skills/forge/phases/plan-openspec.md +60 -60
- package/vendor/skills/forge/phases/plan-specs.md +163 -117
- package/vendor/skills/forge/phases/review.md +25 -25
- package/vendor/skills/forge/phases/verify.md +124 -124
- package/vendor/skills/forge/references/forge-layout.md +85 -85
- package/vendor/skills/forge/references/pace.md +115 -115
- package/vendor/skills/forge/references/plan-routing.md +52 -51
- package/vendor/skills/forge/references/runtime-integrity.md +232 -225
- package/vendor/skills/forge/references/substantial-work.md +37 -37
- package/vendor/skills/forge/references/test-evidence.md +30 -30
- package/vendor/skills/forge/references/test-strategy.md +68 -68
- package/vendor/skills/forge/skills/subagent-driven-development/SKILL.md +87 -87
- package/vendor/skills/forge/subagents/final-reviewer-prompt.md +56 -56
- package/vendor/skills/forge/subagents/implementer-prompt.md +38 -38
- package/vendor/skills/git-resolve-adr-conflict/SKILL.md +132 -132
- package/vendor/skills/thorough-code-review/SKILL.md +290 -290
- package/vendor/skills/thorough-code-review/examples.md +133 -133
- package/vendor/skills/thorough-code-review/reference/accepted-risks.md +26 -26
- package/vendor/skills/thorough-code-review/reference/lenses.md +96 -96
- package/vendor/skills/thorough-code-review/reference/phase1-scout.md +62 -62
- package/vendor/skills/thorough-code-review/reference/phase2-skeptic.md +105 -105
- package/vendor/skills/thorough-code-review/reference/report-schema.json +222 -222
- package/vendor/skills/thorough-code-review/reference/report-template.md +115 -115
- package/vendor/skills/thorough-code-review/reference/severity-rubric.md +49 -49
- package/vendor/skills/thorough-code-review/reference/signals-preflight.md +55 -55
- package/vendor/templates/adr/README.md +7 -7
- package/vendor/templates/adr/decisions.md +141 -141
- package/vendor/templates/adr/hooks/check-pending-adrs.mjs +74 -74
- package/vendor/templates/adr/hooks/check-pending-adrs.sh +3 -3
- package/vendor/templates/adr/hooks/openspec-archive-agent-message.mjs +52 -52
- package/vendor/templates/adr/hooks/openspec-archive-agent-message.sh +3 -3
- package/vendor/templates/project/claude/commands/forge-apply.md +75 -75
- package/vendor/templates/project/claude/commands/forge-brainstorm.md +7 -7
- package/vendor/templates/project/claude/commands/forge-build.md +17 -17
- package/vendor/templates/project/claude/commands/forge-plan.md +12 -12
- package/vendor/templates/project/claude/commands/forge-skip.md +14 -14
- package/vendor/templates/project/claude/commands/forge-status.md +16 -16
- package/vendor/templates/project/claude/commands/forge.md +16 -16
- package/vendor/templates/project/claude/hooks/forge-prompt-hook.mjs +73 -73
- package/vendor/templates/project/claude/hooks/forge-session-start.mjs +19 -19
- package/vendor/templates/project/claude/hooks/forge-triage-hook.mjs +77 -77
- package/vendor/templates/project/cursor/commands/forge-apply.md +75 -75
- package/vendor/templates/project/cursor/commands/forge-brainstorm.md +10 -10
- package/vendor/templates/project/cursor/commands/forge-build.md +17 -17
- package/vendor/templates/project/cursor/commands/forge-plan.md +15 -15
- package/vendor/templates/project/cursor/commands/forge-skip.md +14 -14
- package/vendor/templates/project/cursor/commands/forge-status.md +16 -16
- package/vendor/templates/project/cursor/commands/forge.md +16 -16
- package/vendor/templates/project/cursor/hooks/forge-session-start.mjs +30 -30
- package/vendor/templates/project/cursor/hooks/forge-session-start.sh +3 -3
|
@@ -1,149 +1,149 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: archive-to-adr
|
|
3
|
-
description: >-
|
|
4
|
-
Create or update Architecture Decision Records (ADRs) from an archived OpenSpec
|
|
5
|
-
change. Fire after archive-shaped Bash completes (hooks wrap `openspec archive`
|
|
6
|
-
plus `mv` into dated `openspec/changes/archive/…`). Also use when sessionStart
|
|
7
|
-
reports pending archives, the user says `/archive-to-adr`, or they ask to
|
|
8
|
-
generate ADRs from an archive. Skip entirely when the project has ADRs disabled
|
|
9
|
-
(`.forge/config.json` → `adr.enabled: false`).
|
|
10
|
-
disable-model-invocation: false
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Archive to ADR
|
|
14
|
-
|
|
15
|
-
Turn a **completed and archived** OpenSpec change into one or more ADRs, following
|
|
16
|
-
the project's decisions doc (scaffolded as `docs/decisions.md` by default via
|
|
17
|
-
`forge init --adr`).
|
|
18
|
-
|
|
19
|
-
This skill is **decoupled** from OpenSpec itself: archive hooks inject a reminder
|
|
20
|
-
after successful archive-shaped shells; you judge whether an ADR is warranted.
|
|
21
|
-
|
|
22
|
-
## Project config
|
|
23
|
-
|
|
24
|
-
Read **`.forge/config.json`** at the repo root (written by `forge init` / optional
|
|
25
|
-
`forgekit install` project scaffold):
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"adr": {
|
|
30
|
-
"enabled": true,
|
|
31
|
-
"dir": "docs/adr",
|
|
32
|
-
"decisionsDoc": "docs/decisions.md"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
| Field | Default | Meaning |
|
|
38
|
-
|-------|---------|---------|
|
|
39
|
-
| `adr.enabled` | `true` if file missing and `docs/adr/` exists; else follow install | When `false`, do **not** run this skill — no ADR, no "No ADR" stamp |
|
|
40
|
-
| `adr.dir` | `docs/adr` | Directory for `NNNN-short-topic.md` + status `README.md` |
|
|
41
|
-
| `adr.decisionsDoc` | sibling `decisions.md` of `adr.dir` | Process / template (when to write, format, hooks) |
|
|
42
|
-
| `plan.engine` | `openspec` | `specs` = built-in engine; archives live under `<plan.dir>/changes/archive/` instead of `openspec/changes/archive/` |
|
|
43
|
-
|
|
44
|
-
Below, **`{adrDir}`** and **`{decisionsDoc}`** mean those configured paths, and
|
|
45
|
-
**`{archiveRoot}`** means `openspec/changes/archive` (OpenSpec engine) or
|
|
46
|
-
`<plan.dir>/changes/archive` (specs engine, default `specs/changes/archive`).
|
|
47
|
-
|
|
48
|
-
If `adr.enabled` is `false`, stop and tell the user ADRs are disabled for this project.
|
|
49
|
-
|
|
50
|
-
## When to skip entirely (ADRs enabled)
|
|
51
|
-
|
|
52
|
-
If the change is a bug fix, copy tweak, docs-only edit, or refactor with no
|
|
53
|
-
architectural choice, **do not** create an ADR. Instead add this **single line**
|
|
54
|
-
to the archived `proposal.md`:
|
|
55
|
-
|
|
56
|
-
```text
|
|
57
|
-
No ADR — non-architectural change
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
That silences the session-start pending-ADR backstop.
|
|
61
|
-
|
|
62
|
-
## Input
|
|
63
|
-
|
|
64
|
-
**Required:** the archive directory path, e.g.
|
|
65
|
-
`{archiveRoot}/2026-05-15-payment-add-service/`.
|
|
66
|
-
|
|
67
|
-
If the user only gives the change name, resolve it: list `{archiveRoot}/`
|
|
68
|
-
and pick the matching dated folder.
|
|
69
|
-
|
|
70
|
-
## Steps
|
|
71
|
-
|
|
72
|
-
1. **Confirm ADRs are enabled** — read `.forge/config.json` as above.
|
|
73
|
-
|
|
74
|
-
2. **Read the archived artifacts**
|
|
75
|
-
- `proposal.md` — Why, What Changes, Capabilities, Impact
|
|
76
|
-
- `design.md` — Context, Decisions, Risks, Migration
|
|
77
|
-
- `specs/**/*.md` in the archive (capability deltas)
|
|
78
|
-
|
|
79
|
-
3. **Apply the ADR gate** (`{decisionsDoc}` § "When to write an ADR")
|
|
80
|
-
- Write an ADR when the change establishes/revises a **boundary**, picks one
|
|
81
|
-
approach over a **real** alternative, introduces a **constraint** future code
|
|
82
|
-
must respect, picks a **vendor/protocol/library** that is expensive to swap,
|
|
83
|
-
or codifies a **repo-wide** convention.
|
|
84
|
-
- Skip when it's purely implementation detail inside an existing decision.
|
|
85
|
-
|
|
86
|
-
4. **Pick the next ADR number**
|
|
87
|
-
- List `{adrDir}/*.md` (four-digit prefix pattern `NNNN-*.md`).
|
|
88
|
-
- Use **the next sequential integer**; never reuse a number.
|
|
89
|
-
- If multiple distinct architectural decisions warrant separate ADRs in one
|
|
90
|
-
archive, create multiple files (`NNNN-…`, `NNNN+1-…`), each with one sharp decision.
|
|
91
|
-
|
|
92
|
-
5. **Author the ADR file** at `{adrDir}/NNNN-short-topic.md` using the **exact
|
|
93
|
-
section structure** from `{decisionsDoc}`:
|
|
94
|
-
- Title: `# NNNN. <Short, decision-shaped title>`
|
|
95
|
-
- Frontmatter lines: **Status**, **Date**, **Area**, **Related** (link the
|
|
96
|
-
archive path, sibling ADRs)
|
|
97
|
-
- Body: Context, Decision, Alternatives considered, Consequences
|
|
98
|
-
(Positive / Negative / Neutral), References
|
|
99
|
-
|
|
100
|
-
Keep it terse (target ~80–200 lines total across all new ADRs for the change).
|
|
101
|
-
Link to the archive for forensic detail; don't paste the whole design.
|
|
102
|
-
|
|
103
|
-
6. **Update the status index** `{adrDir}/README.md` — add or amend the table
|
|
104
|
-
row(s). If `README.md` is missing, create it with the table scaffold from
|
|
105
|
-
`{decisionsDoc}`.
|
|
106
|
-
|
|
107
|
-
7. **Cross-reference from the archive**
|
|
108
|
-
- In `{archiveRoot}/<dated-change>/proposal.md`, add (or extend):
|
|
109
|
-
|
|
110
|
-
```markdown
|
|
111
|
-
## Decision record
|
|
112
|
-
|
|
113
|
-
This change is recorded as ADR-NNNN ({adrDir}/NNNN-short-topic.md).
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Use `ADR-NNNN` text so pending-ADR hooks (`grep 'ADR-[0-9]'`) recognize the link.
|
|
117
|
-
|
|
118
|
-
8. **If capability specs were promoted** during archive: consider a one-line
|
|
119
|
-
pointer in the ADR **References** to `openspec/specs/<capability>/spec.md`
|
|
120
|
-
(optional but valuable).
|
|
121
|
-
|
|
122
|
-
## Output
|
|
123
|
-
|
|
124
|
-
- Paths of created/updated `{adrDir}/*.md`
|
|
125
|
-
- Confirmation `{adrDir}/README.md` was updated
|
|
126
|
-
- Confirmation the archived `proposal.md` now references `ADR-NNNN`
|
|
127
|
-
- One-sentence summary per ADR written
|
|
128
|
-
|
|
129
|
-
## Guardrails
|
|
130
|
-
|
|
131
|
-
- Naming: **`NNNN-short-topic.md`**, not date-only filenames.
|
|
132
|
-
- **Never** add `{adrDir}/` to `.cursorindexignore` (or equivalent ignore that
|
|
133
|
-
blocks agent retrieval).
|
|
134
|
-
- Don't duplicate content that belongs only in OpenSpec — the archive remains
|
|
135
|
-
the verbose record; the ADR is the distilled "why."
|
|
136
|
-
- If unsure whether to write an ADR, re-read the decisions gate; when still
|
|
137
|
-
ambiguous, ask the user once rather than inventing ceremony.
|
|
138
|
-
|
|
139
|
-
## Relationship to hooks
|
|
140
|
-
|
|
141
|
-
Project hooks (from `forge init --adr`) may:
|
|
142
|
-
|
|
143
|
-
- Remind agents to run **archive-to-adr** after `openspec archive` / an archive
|
|
144
|
-
move (either engine)
|
|
145
|
-
- At session start, list archives (both `openspec/changes/archive/` and
|
|
146
|
-
`specs/changes/archive/`) whose `proposal.md` lacks `ADR-*` **and** lacks
|
|
147
|
-
the `No ADR — non-architectural change` stamp
|
|
148
|
-
|
|
149
|
-
Neither hook writes ADR files; **this skill** does.
|
|
1
|
+
---
|
|
2
|
+
name: archive-to-adr
|
|
3
|
+
description: >-
|
|
4
|
+
Create or update Architecture Decision Records (ADRs) from an archived OpenSpec
|
|
5
|
+
change. Fire after archive-shaped Bash completes (hooks wrap `openspec archive`
|
|
6
|
+
plus `mv` into dated `openspec/changes/archive/…`). Also use when sessionStart
|
|
7
|
+
reports pending archives, the user says `/archive-to-adr`, or they ask to
|
|
8
|
+
generate ADRs from an archive. Skip entirely when the project has ADRs disabled
|
|
9
|
+
(`.forge/config.json` → `adr.enabled: false`).
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Archive to ADR
|
|
14
|
+
|
|
15
|
+
Turn a **completed and archived** OpenSpec change into one or more ADRs, following
|
|
16
|
+
the project's decisions doc (scaffolded as `docs/decisions.md` by default via
|
|
17
|
+
`forge init --adr`).
|
|
18
|
+
|
|
19
|
+
This skill is **decoupled** from OpenSpec itself: archive hooks inject a reminder
|
|
20
|
+
after successful archive-shaped shells; you judge whether an ADR is warranted.
|
|
21
|
+
|
|
22
|
+
## Project config
|
|
23
|
+
|
|
24
|
+
Read **`.forge/config.json`** at the repo root (written by `forge init` / optional
|
|
25
|
+
`forgekit install` project scaffold):
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"adr": {
|
|
30
|
+
"enabled": true,
|
|
31
|
+
"dir": "docs/adr",
|
|
32
|
+
"decisionsDoc": "docs/decisions.md"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
| Field | Default | Meaning |
|
|
38
|
+
|-------|---------|---------|
|
|
39
|
+
| `adr.enabled` | `true` if file missing and `docs/adr/` exists; else follow install | When `false`, do **not** run this skill — no ADR, no "No ADR" stamp |
|
|
40
|
+
| `adr.dir` | `docs/adr` | Directory for `NNNN-short-topic.md` + status `README.md` |
|
|
41
|
+
| `adr.decisionsDoc` | sibling `decisions.md` of `adr.dir` | Process / template (when to write, format, hooks) |
|
|
42
|
+
| `plan.engine` | `openspec` | `specs` = built-in engine; archives live under `<plan.dir>/changes/archive/` instead of `openspec/changes/archive/` |
|
|
43
|
+
|
|
44
|
+
Below, **`{adrDir}`** and **`{decisionsDoc}`** mean those configured paths, and
|
|
45
|
+
**`{archiveRoot}`** means `openspec/changes/archive` (OpenSpec engine) or
|
|
46
|
+
`<plan.dir>/changes/archive` (specs engine, default `specs/changes/archive`).
|
|
47
|
+
|
|
48
|
+
If `adr.enabled` is `false`, stop and tell the user ADRs are disabled for this project.
|
|
49
|
+
|
|
50
|
+
## When to skip entirely (ADRs enabled)
|
|
51
|
+
|
|
52
|
+
If the change is a bug fix, copy tweak, docs-only edit, or refactor with no
|
|
53
|
+
architectural choice, **do not** create an ADR. Instead add this **single line**
|
|
54
|
+
to the archived `proposal.md`:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
No ADR — non-architectural change
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
That silences the session-start pending-ADR backstop.
|
|
61
|
+
|
|
62
|
+
## Input
|
|
63
|
+
|
|
64
|
+
**Required:** the archive directory path, e.g.
|
|
65
|
+
`{archiveRoot}/2026-05-15-payment-add-service/`.
|
|
66
|
+
|
|
67
|
+
If the user only gives the change name, resolve it: list `{archiveRoot}/`
|
|
68
|
+
and pick the matching dated folder.
|
|
69
|
+
|
|
70
|
+
## Steps
|
|
71
|
+
|
|
72
|
+
1. **Confirm ADRs are enabled** — read `.forge/config.json` as above.
|
|
73
|
+
|
|
74
|
+
2. **Read the archived artifacts**
|
|
75
|
+
- `proposal.md` — Why, What Changes, Capabilities, Impact
|
|
76
|
+
- `design.md` — Context, Decisions, Risks, Migration
|
|
77
|
+
- `specs/**/*.md` in the archive (capability deltas)
|
|
78
|
+
|
|
79
|
+
3. **Apply the ADR gate** (`{decisionsDoc}` § "When to write an ADR")
|
|
80
|
+
- Write an ADR when the change establishes/revises a **boundary**, picks one
|
|
81
|
+
approach over a **real** alternative, introduces a **constraint** future code
|
|
82
|
+
must respect, picks a **vendor/protocol/library** that is expensive to swap,
|
|
83
|
+
or codifies a **repo-wide** convention.
|
|
84
|
+
- Skip when it's purely implementation detail inside an existing decision.
|
|
85
|
+
|
|
86
|
+
4. **Pick the next ADR number**
|
|
87
|
+
- List `{adrDir}/*.md` (four-digit prefix pattern `NNNN-*.md`).
|
|
88
|
+
- Use **the next sequential integer**; never reuse a number.
|
|
89
|
+
- If multiple distinct architectural decisions warrant separate ADRs in one
|
|
90
|
+
archive, create multiple files (`NNNN-…`, `NNNN+1-…`), each with one sharp decision.
|
|
91
|
+
|
|
92
|
+
5. **Author the ADR file** at `{adrDir}/NNNN-short-topic.md` using the **exact
|
|
93
|
+
section structure** from `{decisionsDoc}`:
|
|
94
|
+
- Title: `# NNNN. <Short, decision-shaped title>`
|
|
95
|
+
- Frontmatter lines: **Status**, **Date**, **Area**, **Related** (link the
|
|
96
|
+
archive path, sibling ADRs)
|
|
97
|
+
- Body: Context, Decision, Alternatives considered, Consequences
|
|
98
|
+
(Positive / Negative / Neutral), References
|
|
99
|
+
|
|
100
|
+
Keep it terse (target ~80–200 lines total across all new ADRs for the change).
|
|
101
|
+
Link to the archive for forensic detail; don't paste the whole design.
|
|
102
|
+
|
|
103
|
+
6. **Update the status index** `{adrDir}/README.md` — add or amend the table
|
|
104
|
+
row(s). If `README.md` is missing, create it with the table scaffold from
|
|
105
|
+
`{decisionsDoc}`.
|
|
106
|
+
|
|
107
|
+
7. **Cross-reference from the archive**
|
|
108
|
+
- In `{archiveRoot}/<dated-change>/proposal.md`, add (or extend):
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
## Decision record
|
|
112
|
+
|
|
113
|
+
This change is recorded as ADR-NNNN ({adrDir}/NNNN-short-topic.md).
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Use `ADR-NNNN` text so pending-ADR hooks (`grep 'ADR-[0-9]'`) recognize the link.
|
|
117
|
+
|
|
118
|
+
8. **If capability specs were promoted** during archive: consider a one-line
|
|
119
|
+
pointer in the ADR **References** to `openspec/specs/<capability>/spec.md`
|
|
120
|
+
(optional but valuable).
|
|
121
|
+
|
|
122
|
+
## Output
|
|
123
|
+
|
|
124
|
+
- Paths of created/updated `{adrDir}/*.md`
|
|
125
|
+
- Confirmation `{adrDir}/README.md` was updated
|
|
126
|
+
- Confirmation the archived `proposal.md` now references `ADR-NNNN`
|
|
127
|
+
- One-sentence summary per ADR written
|
|
128
|
+
|
|
129
|
+
## Guardrails
|
|
130
|
+
|
|
131
|
+
- Naming: **`NNNN-short-topic.md`**, not date-only filenames.
|
|
132
|
+
- **Never** add `{adrDir}/` to `.cursorindexignore` (or equivalent ignore that
|
|
133
|
+
blocks agent retrieval).
|
|
134
|
+
- Don't duplicate content that belongs only in OpenSpec — the archive remains
|
|
135
|
+
the verbose record; the ADR is the distilled "why."
|
|
136
|
+
- If unsure whether to write an ADR, re-read the decisions gate; when still
|
|
137
|
+
ambiguous, ask the user once rather than inventing ceremony.
|
|
138
|
+
|
|
139
|
+
## Relationship to hooks
|
|
140
|
+
|
|
141
|
+
Project hooks (from `forge init --adr`) may:
|
|
142
|
+
|
|
143
|
+
- Remind agents to run **archive-to-adr** after `openspec archive` / an archive
|
|
144
|
+
move (either engine)
|
|
145
|
+
- At session start, list archives (both `openspec/changes/archive/` and
|
|
146
|
+
`specs/changes/archive/`) whose `proposal.md` lacks `ADR-*` **and** lacks
|
|
147
|
+
the `No ADR — non-architectural change` stamp
|
|
148
|
+
|
|
149
|
+
Neither hook writes ADR files; **this skill** does.
|
|
@@ -1,136 +1,136 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: forge
|
|
3
|
-
description: >-
|
|
4
|
-
Forge — self-contained disciplined development workflow. Triage substantial work,
|
|
5
|
-
brainstorm, tracked plan (OpenSpec or built-in specs engine), subagent-driven TDD
|
|
6
|
-
implementation, verify, review, and finish.
|
|
7
|
-
Use when building features, fixing non-trivial bugs, or when the user invokes /forge.
|
|
8
|
-
Skip only when user says /forge:skip or work is trivial.
|
|
9
|
-
disable-model-invocation: false
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Forge
|
|
13
|
-
|
|
14
|
-
Spec-tracked development pipeline. Planning engine is per-project
|
|
15
|
-
(`.forge/config.json` → `plan.engine`): **OpenSpec** (vendor CLI) or the
|
|
16
|
-
**built-in specs engine** (`specs/changes/`, same layout). **Self-contained** —
|
|
17
|
-
all workflow skills live under `./skills/` (vendored from Superpowers MIT; see
|
|
18
|
-
[skills/NOTICE.md](./skills/NOTICE.md)).
|
|
19
|
-
|
|
20
|
-
Full reference: [docs/forge.md](./docs/forge.md) (ships with this skill).
|
|
21
|
-
|
|
22
|
-
**Announce at start:** "Using Forge for this work." Include effective pace from
|
|
23
|
-
`forge status` (e.g. `Pace: auto → brisk (…)`) — see [references/pace.md](./references/pace.md).
|
|
24
|
-
|
|
25
|
-
## Instruction priority
|
|
26
|
-
|
|
27
|
-
1. User explicit instructions (including `/forge:skip` and pace overrides)
|
|
28
|
-
2. This skill + `./phases/`, `./references/`, and `./skills/`
|
|
29
|
-
3. Project OpenSpec skills (`openspec-propose`, `openspec-apply-change`) — do not edit vendor copies (OpenSpec-engine projects only)
|
|
30
|
-
|
|
31
|
-
## Pace (thoroughness)
|
|
32
|
-
|
|
33
|
-
Checkout-local prefs control review/verify ceremony. Default pace is **`auto`**
|
|
34
|
-
(resolves once per session from risk signals).
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
forge prefs # print effective pace (does NOT write a file)
|
|
38
|
-
forge prefs brisk # WRITE .forge/preferences.local.json
|
|
39
|
-
forge prefs --session-set lite
|
|
40
|
-
forge models # print billing (does NOT write); set: included|metered
|
|
41
|
-
forge doctor # plan-engine readiness (OpenSpec CLI or specs/ layout)
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Honor [references/pace.md](./references/pace.md) in implement / verify / review.
|
|
45
|
-
Hard floor: money/auth/contracts/migrations always get per-task review (even under `standard` mid-group / `brisk` / `lite`).
|
|
46
|
-
Local overlays: [docs/forge.md](./docs/forge.md) § Checkout-local overrides.
|
|
47
|
-
|
|
48
|
-
## Bundled skills
|
|
49
|
-
|
|
50
|
-
| Skill | Path | When |
|
|
51
|
-
| ----- | ---- | ---- |
|
|
52
|
-
| Brainstorming | [skills/brainstorming/SKILL.md](./skills/brainstorming/SKILL.md) | brainstorm phase |
|
|
53
|
-
| TDD | [skills/test-driven-development/SKILL.md](./skills/test-driven-development/SKILL.md) | every implement task |
|
|
54
|
-
| Subagent-driven dev | [skills/subagent-driven-development/SKILL.md](./skills/subagent-driven-development/SKILL.md) | implement phase |
|
|
55
|
-
| Systematic debugging | [skills/systematic-debugging/SKILL.md](./skills/systematic-debugging/SKILL.md) | blockers / test failures |
|
|
56
|
-
| Verification | [skills/verification-before-completion/SKILL.md](./skills/verification-before-completion/SKILL.md) | verify phase |
|
|
57
|
-
| Code review | [skills/requesting-code-review/SKILL.md](./skills/requesting-code-review/SKILL.md) | review phase |
|
|
58
|
-
|
|
59
|
-
## Step 0 — Triage (default)
|
|
60
|
-
|
|
61
|
-
Before coding on any non-trivial request, run triage per
|
|
62
|
-
[references/substantial-work.md](./references/substantial-work.md).
|
|
63
|
-
|
|
64
|
-
- **Substantial (tracked-change-worthy)** → continue Forge (bootstrap session if needed)
|
|
65
|
-
- **Too small for a tracked change** → execute directly, no session
|
|
66
|
-
- **`/forge:skip`** → mark session `phase: skipped` if one exists; execute directly
|
|
67
|
-
|
|
68
|
-
Bootstrap session when entering Forge:
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
forge new <kebab-slug>
|
|
72
|
-
# optional: forge new <slug> --signal "add stripe refund"
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
`forge new` resolves pace (default `auto`) onto the session and runs the
|
|
76
|
-
plan-engine doctor in warn-only mode (missing OpenSpec CLI does not block
|
|
77
|
-
session creation; specs-engine projects skip the CLI check).
|
|
78
|
-
|
|
79
|
-
Resume: read `.forge/active.json` → `forge status`.
|
|
80
|
-
|
|
81
|
-
Update phase as you progress:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
forge phase <phase> [--plan-type openspec|specs] [--openspec <change>]
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Valid phases: `triage`, `brainstorm`, `plan`, `implement`, `verify`, `review`, `finish`, `done`, `skipped`.
|
|
88
|
-
|
|
89
|
-
## Phase flow
|
|
90
|
-
|
|
91
|
-
| Phase | Action |
|
|
92
|
-
| ----- | ------ |
|
|
93
|
-
| brainstorm | [phases/brainstorm.md](./phases/brainstorm.md) → **skills/brainstorming** |
|
|
94
|
-
| plan | [references/plan-routing.md](./references/plan-routing.md) → engine from `.forge/config.json`: **OpenSpec** ([plan-openspec.md](./phases/plan-openspec.md)) or **specs** ([plan-specs.md](./phases/plan-specs.md)) |
|
|
95
|
-
| implement | [phases/implement.md](./phases/implement.md) → **subagent-driven-development** + **TDD** |
|
|
96
|
-
| verify | [phases/verify.md](./phases/verify.md) → **verification-before-completion** |
|
|
97
|
-
| review | [phases/review.md](./phases/review.md) → **requesting-code-review** |
|
|
98
|
-
| finish | [phases/finish.md](./phases/finish.md) |
|
|
99
|
-
|
|
100
|
-
<HARD-GATE>
|
|
101
|
-
Do NOT write implementation code during brainstorm or plan phases until the user approves the tracked change (OpenSpec or specs).
|
|
102
|
-
</HARD-GATE>
|
|
103
|
-
|
|
104
|
-
<HARD-GATE>
|
|
105
|
-
Subagent dispatch: NEVER pass a model slug you picked yourself (including any from the host's model list). Run `forge resolve-model --tier <fast|standard|capable>` and honor its JSON — omit the `model` parameter when `omitModel` is true, else pass `model` exactly. Metered/API models only on explicit user request. This applies to retries and fallbacks too: if a dispatch fails, re-resolve — do not hand-pick a replacement slug.
|
|
106
|
-
</HARD-GATE>
|
|
107
|
-
|
|
108
|
-
## Session artefacts
|
|
109
|
-
|
|
110
|
-
Layout: [references/forge-layout.md](./references/forge-layout.md)
|
|
111
|
-
|
|
112
|
-
Testing: [references/test-strategy.md](./references/test-strategy.md) — tier 1 scoped TDD per task, tier 2 narrow evidence per task, tier 3 full workspace once at verify.
|
|
113
|
-
|
|
114
|
-
## Guardrails (every phase)
|
|
115
|
-
|
|
116
|
-
- No autonomous `git commit` / push unless the user explicitly asks
|
|
117
|
-
- Tests required for behavior changes
|
|
118
|
-
- Trace ecosystem consumers when contracts change
|
|
119
|
-
- Honor `openspec/config.yaml` prefixes when the project uses them (OpenSpec engine)
|
|
120
|
-
- **Runtime integrity** — [references/runtime-integrity.md](./references/runtime-integrity.md): **spine.json mandatory every change** (rows or `notApplicable` — not keyword-gated); no stubs / false success; capability specs beat narrow task wording; every claimed capability needs a named production caller; when spine has rows the product loop must be **executed** — `e2e.json` steps + green `forge e2e run` (or BLOCKED), prose does not satisfy the gate; deferred wiring only via `forge defer` — `forge phase done` mechanically refuses on `forge integrity-check` failures
|
|
121
|
-
|
|
122
|
-
## Agent surfaces
|
|
123
|
-
|
|
124
|
-
| Agent | Skill (after `forgekit install`) | Project wiring (`forge init`) |
|
|
125
|
-
| ----- | ----------------------------- | ----------------------------- |
|
|
126
|
-
| **Cursor** | `~/.cursor/skills/forge/` | commands, `forge.mdc`, SessionStart hook |
|
|
127
|
-
| **Claude Code** | `~/.claude/skills/forge/` | commands, `forge.md`, SessionStart + prompt hooks |
|
|
128
|
-
| **Codex CLI** | `~/.codex/skills/forge/` | thin rule |
|
|
129
|
-
|
|
130
|
-
**Planning (all agents):** after brainstorm, proceed directly to the configured engine — no plan-mode prompt. See [references/plan-routing.md](./references/plan-routing.md). Hooks remind agents to run the propose flow when `planType` is unset.
|
|
131
|
-
|
|
132
|
-
**Distribute:** edit `skills/forge/` in forgekit, then `forgekit install --skills forge --force` on each machine. The bundled skills are a maintained fork (see [skills/NOTICE.md](./skills/NOTICE.md)) — do not re-vendor from Superpowers.
|
|
133
|
-
|
|
134
|
-
## Do not edit vendor OpenSpec skills
|
|
135
|
-
|
|
136
|
-
OpenSpec vendor skills upgrade in place. Forge behaviour lives in this tree and [docs/forge.md](./docs/forge.md). Re-apply vendor patches with `forge overlay` after OpenSpec upgrades.
|
|
1
|
+
---
|
|
2
|
+
name: forge
|
|
3
|
+
description: >-
|
|
4
|
+
Forge — self-contained disciplined development workflow. Triage substantial work,
|
|
5
|
+
brainstorm, tracked plan (OpenSpec or built-in specs engine), subagent-driven TDD
|
|
6
|
+
implementation, verify, review, and finish.
|
|
7
|
+
Use when building features, fixing non-trivial bugs, or when the user invokes /forge.
|
|
8
|
+
Skip only when user says /forge:skip or work is trivial.
|
|
9
|
+
disable-model-invocation: false
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Forge
|
|
13
|
+
|
|
14
|
+
Spec-tracked development pipeline. Planning engine is per-project
|
|
15
|
+
(`.forge/config.json` → `plan.engine`): **OpenSpec** (vendor CLI) or the
|
|
16
|
+
**built-in specs engine** (`specs/changes/`, same layout). **Self-contained** —
|
|
17
|
+
all workflow skills live under `./skills/` (vendored from Superpowers MIT; see
|
|
18
|
+
[skills/NOTICE.md](./skills/NOTICE.md)).
|
|
19
|
+
|
|
20
|
+
Full reference: [docs/forge.md](./docs/forge.md) (ships with this skill).
|
|
21
|
+
|
|
22
|
+
**Announce at start:** "Using Forge for this work." Include effective pace from
|
|
23
|
+
`forge status` (e.g. `Pace: auto → brisk (…)`) — see [references/pace.md](./references/pace.md).
|
|
24
|
+
|
|
25
|
+
## Instruction priority
|
|
26
|
+
|
|
27
|
+
1. User explicit instructions (including `/forge:skip` and pace overrides)
|
|
28
|
+
2. This skill + `./phases/`, `./references/`, and `./skills/`
|
|
29
|
+
3. Project OpenSpec skills (`openspec-propose`, `openspec-apply-change`) — do not edit vendor copies (OpenSpec-engine projects only)
|
|
30
|
+
|
|
31
|
+
## Pace (thoroughness)
|
|
32
|
+
|
|
33
|
+
Checkout-local prefs control review/verify ceremony. Default pace is **`auto`**
|
|
34
|
+
(resolves once per session from risk signals).
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
forge prefs # print effective pace (does NOT write a file)
|
|
38
|
+
forge prefs brisk # WRITE .forge/preferences.local.json
|
|
39
|
+
forge prefs --session-set lite
|
|
40
|
+
forge models # print billing (does NOT write); set: included|metered
|
|
41
|
+
forge doctor # plan-engine readiness (OpenSpec CLI or specs/ layout)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Honor [references/pace.md](./references/pace.md) in implement / verify / review.
|
|
45
|
+
Hard floor: money/auth/contracts/migrations always get per-task review (even under `standard` mid-group / `brisk` / `lite`).
|
|
46
|
+
Local overlays: [docs/forge.md](./docs/forge.md) § Checkout-local overrides.
|
|
47
|
+
|
|
48
|
+
## Bundled skills
|
|
49
|
+
|
|
50
|
+
| Skill | Path | When |
|
|
51
|
+
| ----- | ---- | ---- |
|
|
52
|
+
| Brainstorming | [skills/brainstorming/SKILL.md](./skills/brainstorming/SKILL.md) | brainstorm phase |
|
|
53
|
+
| TDD | [skills/test-driven-development/SKILL.md](./skills/test-driven-development/SKILL.md) | every implement task |
|
|
54
|
+
| Subagent-driven dev | [skills/subagent-driven-development/SKILL.md](./skills/subagent-driven-development/SKILL.md) | implement phase |
|
|
55
|
+
| Systematic debugging | [skills/systematic-debugging/SKILL.md](./skills/systematic-debugging/SKILL.md) | blockers / test failures |
|
|
56
|
+
| Verification | [skills/verification-before-completion/SKILL.md](./skills/verification-before-completion/SKILL.md) | verify phase |
|
|
57
|
+
| Code review | [skills/requesting-code-review/SKILL.md](./skills/requesting-code-review/SKILL.md) | review phase |
|
|
58
|
+
|
|
59
|
+
## Step 0 — Triage (default)
|
|
60
|
+
|
|
61
|
+
Before coding on any non-trivial request, run triage per
|
|
62
|
+
[references/substantial-work.md](./references/substantial-work.md).
|
|
63
|
+
|
|
64
|
+
- **Substantial (tracked-change-worthy)** → continue Forge (bootstrap session if needed)
|
|
65
|
+
- **Too small for a tracked change** → execute directly, no session
|
|
66
|
+
- **`/forge:skip`** → mark session `phase: skipped` if one exists; execute directly
|
|
67
|
+
|
|
68
|
+
Bootstrap session when entering Forge:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
forge new <kebab-slug>
|
|
72
|
+
# optional: forge new <slug> --signal "add stripe refund"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`forge new` resolves pace (default `auto`) onto the session and runs the
|
|
76
|
+
plan-engine doctor in warn-only mode (missing OpenSpec CLI does not block
|
|
77
|
+
session creation; specs-engine projects skip the CLI check).
|
|
78
|
+
|
|
79
|
+
Resume: read `.forge/active.json` → `forge status`.
|
|
80
|
+
|
|
81
|
+
Update phase as you progress:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
forge phase <phase> [--plan-type openspec|specs] [--openspec <change>]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Valid phases: `triage`, `brainstorm`, `plan`, `implement`, `verify`, `review`, `finish`, `done`, `skipped`.
|
|
88
|
+
|
|
89
|
+
## Phase flow
|
|
90
|
+
|
|
91
|
+
| Phase | Action |
|
|
92
|
+
| ----- | ------ |
|
|
93
|
+
| brainstorm | [phases/brainstorm.md](./phases/brainstorm.md) → **skills/brainstorming** |
|
|
94
|
+
| plan | [references/plan-routing.md](./references/plan-routing.md) → engine from `.forge/config.json`: **OpenSpec** ([plan-openspec.md](./phases/plan-openspec.md)) or **specs** ([plan-specs.md](./phases/plan-specs.md)) |
|
|
95
|
+
| implement | [phases/implement.md](./phases/implement.md) → **subagent-driven-development** + **TDD** |
|
|
96
|
+
| verify | [phases/verify.md](./phases/verify.md) → **verification-before-completion** |
|
|
97
|
+
| review | [phases/review.md](./phases/review.md) → **requesting-code-review** |
|
|
98
|
+
| finish | [phases/finish.md](./phases/finish.md) |
|
|
99
|
+
|
|
100
|
+
<HARD-GATE>
|
|
101
|
+
Do NOT write implementation code during brainstorm or plan phases until the user approves the tracked change (OpenSpec or specs).
|
|
102
|
+
</HARD-GATE>
|
|
103
|
+
|
|
104
|
+
<HARD-GATE>
|
|
105
|
+
Subagent dispatch: NEVER pass a model slug you picked yourself (including any from the host's model list). Run `forge resolve-model --tier <fast|standard|capable>` and honor its JSON — omit the `model` parameter when `omitModel` is true, else pass `model` exactly. Metered/API models only on explicit user request. This applies to retries and fallbacks too: if a dispatch fails, re-resolve — do not hand-pick a replacement slug.
|
|
106
|
+
</HARD-GATE>
|
|
107
|
+
|
|
108
|
+
## Session artefacts
|
|
109
|
+
|
|
110
|
+
Layout: [references/forge-layout.md](./references/forge-layout.md)
|
|
111
|
+
|
|
112
|
+
Testing: [references/test-strategy.md](./references/test-strategy.md) — tier 1 scoped TDD per task, tier 2 narrow evidence per task, tier 3 full workspace once at verify.
|
|
113
|
+
|
|
114
|
+
## Guardrails (every phase)
|
|
115
|
+
|
|
116
|
+
- No autonomous `git commit` / push unless the user explicitly asks
|
|
117
|
+
- Tests required for behavior changes
|
|
118
|
+
- Trace ecosystem consumers when contracts change
|
|
119
|
+
- Honor `openspec/config.yaml` prefixes when the project uses them (OpenSpec engine)
|
|
120
|
+
- **Runtime integrity** — [references/runtime-integrity.md](./references/runtime-integrity.md): **spine.json mandatory every change** (rows or `notApplicable` — not keyword-gated); no stubs / false success; capability specs beat narrow task wording; every claimed capability needs a named production caller; when spine has rows the product loop must be **executed** — `e2e.json` steps + green `forge e2e run` (or BLOCKED), prose does not satisfy the gate; deferred wiring only via `forge defer` — `forge phase done` mechanically refuses on `forge integrity-check` failures
|
|
121
|
+
|
|
122
|
+
## Agent surfaces
|
|
123
|
+
|
|
124
|
+
| Agent | Skill (after `forgekit install`) | Project wiring (`forge init`) |
|
|
125
|
+
| ----- | ----------------------------- | ----------------------------- |
|
|
126
|
+
| **Cursor** | `~/.cursor/skills/forge/` | commands, `forge.mdc`, SessionStart hook |
|
|
127
|
+
| **Claude Code** | `~/.claude/skills/forge/` | commands, `forge.md`, SessionStart + prompt hooks |
|
|
128
|
+
| **Codex CLI** | `~/.codex/skills/forge/` | thin rule |
|
|
129
|
+
|
|
130
|
+
**Planning (all agents):** after brainstorm, proceed directly to the configured engine — no plan-mode prompt. See [references/plan-routing.md](./references/plan-routing.md). Hooks remind agents to run the propose flow when `planType` is unset.
|
|
131
|
+
|
|
132
|
+
**Distribute:** edit `skills/forge/` in forgekit, then `forgekit install --skills forge --force` on each machine. The bundled skills are a maintained fork (see [skills/NOTICE.md](./skills/NOTICE.md)) — do not re-vendor from Superpowers.
|
|
133
|
+
|
|
134
|
+
## Do not edit vendor OpenSpec skills
|
|
135
|
+
|
|
136
|
+
OpenSpec vendor skills upgrade in place. Forge behaviour lives in this tree and [docs/forge.md](./docs/forge.md). Re-apply vendor patches with `forge overlay` after OpenSpec upgrades.
|