@warpgogol/forge 2.9.4 → 2.9.6
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/dist/bin/cli.js +0 -0
- package/dist/os/adr/handlers/implement-stamp.js +1 -1
- package/dist/os/adr/handlers/implement-stamp.js.map +1 -1
- package/dist/os/adr/handlers/list-create.d.ts.map +1 -1
- package/dist/os/adr/handlers/list-create.js +40 -4
- package/dist/os/adr/handlers/list-create.js.map +1 -1
- package/dist/os/adr/handlers/validate.d.ts.map +1 -1
- package/dist/os/adr/handlers/validate.js +10 -4
- package/dist/os/adr/handlers/validate.js.map +1 -1
- package/dist/os/adr/types.d.ts +1 -0
- package/dist/os/adr/types.d.ts.map +1 -1
- package/dist/os/adr/types.js +1 -0
- package/dist/os/adr/types.js.map +1 -1
- package/dist/os/core/handlers/package-health.d.ts.map +1 -1
- package/dist/os/core/handlers/package-health.js +8 -4
- package/dist/os/core/handlers/package-health.js.map +1 -1
- package/dist/os/core/handlers/pinned-validate.d.ts.map +1 -1
- package/dist/os/core/handlers/pinned-validate.js +2 -2
- package/dist/os/core/handlers/pinned-validate.js.map +1 -1
- package/dist/os/program/handlers/complete.js +2 -2
- package/dist/os/program/handlers/complete.js.map +1 -1
- package/dist/os/program/handlers/lease.js +1 -1
- package/dist/os/program/handlers/lease.js.map +1 -1
- package/dist/os/program/handlers/seal.js +2 -2
- package/dist/os/program/handlers/seal.js.map +1 -1
- package/dist/os/program/handlers/validate.js +3 -3
- package/dist/os/program/handlers/validate.js.map +1 -1
- package/dist/os/rfc/dna-trace.js +1 -1
- package/dist/os/rfc/dna-trace.js.map +1 -1
- package/dist/os/rfc/handlers/check.js +3 -3
- package/dist/os/rfc/handlers/check.js.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.js +1 -1
- package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
- package/dist/os/rfc/handlers/index-graph.js +4 -4
- package/dist/os/rfc/handlers/index-graph.js.map +1 -1
- package/dist/os/rfc/handlers/lifecycle.js +1 -1
- package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
- package/dist/os/rfc/handlers/validate.d.ts.map +1 -1
- package/dist/os/rfc/handlers/validate.js +10 -4
- package/dist/os/rfc/handlers/validate.js.map +1 -1
- package/dist/os/session/handlers/validate.d.ts.map +1 -1
- package/dist/os/session/handlers/validate.js +10 -4
- package/dist/os/session/handlers/validate.js.map +1 -1
- package/dist/os/spec/live-spec-validate.js +2 -2
- package/dist/os/spec/live-spec-validate.js.map +1 -1
- package/dist/os/spec/spec-validate.js +1 -1
- package/dist/os/spec/spec-validate.js.map +1 -1
- package/dist/os/workflow/handlers.js +1 -1
- package/dist/os/workflow/handlers.js.map +1 -1
- package/dist/src/onboarding/create.js +1 -1
- package/dist/src/onboarding/create.js.map +1 -1
- package/dist/src/onboarding/doctor.js +1 -1
- package/dist/src/onboarding/doctor.js.map +1 -1
- package/dist/src/onboarding/init.d.ts.map +1 -1
- package/dist/src/onboarding/init.js +31 -1
- package/dist/src/onboarding/init.js.map +1 -1
- package/dist/src/onboarding/profile-validate.js +1 -1
- package/dist/src/onboarding/profile-validate.js.map +1 -1
- package/dist/src/utils/fs-trash.d.ts.map +1 -1
- package/dist/src/utils/fs-trash.js +1 -1
- package/dist/src/utils/fs-trash.js.map +1 -1
- package/dist/src/validators/note-frontmatter-validate.js +1 -1
- package/dist/src/validators/note-frontmatter-validate.js.map +1 -1
- package/dist/src/validators/note-link-validate.js +1 -1
- package/dist/src/validators/note-link-validate.js.map +1 -1
- package/os/adr/adr-0000-template.md +46 -0
- package/os/adr/handlers/implement-stamp.ts +1 -1
- package/os/adr/handlers/list-create.ts +48 -4
- package/os/adr/handlers/validate.ts +8 -4
- package/os/adr/types.ts +1 -0
- package/os/core/handlers/package-health.ts +9 -5
- package/os/core/handlers/pinned-validate.ts +4 -2
- package/os/program/handlers/complete.ts +2 -2
- package/os/program/handlers/lease.ts +1 -1
- package/os/program/handlers/seal.ts +2 -2
- package/os/program/handlers/validate.ts +3 -3
- package/os/rfc/dna-trace.ts +1 -1
- package/os/rfc/handlers/check.ts +3 -3
- package/os/rfc/handlers/implement-stamp.ts +1 -1
- package/os/rfc/handlers/index-graph.ts +4 -4
- package/os/rfc/handlers/lifecycle.ts +1 -1
- package/os/rfc/handlers/validate.ts +8 -4
- package/os/rfc/rfc-0000-template.md +16 -20
- package/os/session/handlers/validate.ts +8 -4
- package/os/spec/live-spec-validate.ts +2 -2
- package/os/spec/spec-validate.ts +1 -1
- package/os/workflow/handlers.ts +1 -1
- package/package.json +72 -194
- package/skills/_shared/fo-pipeline-conventions.md +5 -5
- package/skills/fo/fo-extract-dna/SKILL.md +1 -1
- package/skills/fo/fo-idea-audit/AUDIT-AXES.md +1 -1
- package/skills/fo/fo-idea-create-adr/SKILL.md +1 -1
- package/skills/fo/fo-idea-create-rfc/SKILL.md +3 -3
- package/skills/fo/fo-idea-implement/ADR-FLOW.md +2 -2
- package/skills/fo/fo-idea-implement/SKILL.md +1 -1
- package/skills/fo/fo-idea-plan/SKILL.md +2 -2
- package/skills/fo/fo-step-commit/SKILL.md +2 -2
- package/src/onboarding/create.ts +1 -1
- package/src/onboarding/doctor.ts +1 -1
- package/src/onboarding/init.ts +30 -1
- package/src/onboarding/profile-validate.ts +1 -1
- package/src/utils/fs-trash.ts +1 -1
- package/src/validators/note-frontmatter-validate.ts +1 -1
- package/src/validators/note-link-validate.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warpgogol/forge",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -19,127 +19,127 @@
|
|
|
19
19
|
"type": "git",
|
|
20
20
|
"url": "git+https://github.com/syrokomskyi/forge.git"
|
|
21
21
|
},
|
|
22
|
-
"main": "./src/index.
|
|
23
|
-
"types": "./src/index.ts",
|
|
22
|
+
"main": "./dist/src/index.js",
|
|
23
|
+
"types": "./dist/src/index.d.ts",
|
|
24
24
|
"bin": {
|
|
25
25
|
"forge": "./bin/cli.js"
|
|
26
26
|
},
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
|
-
"types": "./src/index.ts",
|
|
30
|
-
"default": "./src/index.
|
|
29
|
+
"types": "./dist/src/index.d.ts",
|
|
30
|
+
"default": "./dist/src/index.js"
|
|
31
31
|
},
|
|
32
32
|
"./types": {
|
|
33
|
-
"types": "./src/types.ts",
|
|
34
|
-
"default": "./src/types.
|
|
33
|
+
"types": "./dist/src/types.d.ts",
|
|
34
|
+
"default": "./dist/src/types.js"
|
|
35
35
|
},
|
|
36
36
|
"./utils": {
|
|
37
|
-
"types": "./src/utils/index.ts",
|
|
38
|
-
"default": "./src/utils/index.
|
|
37
|
+
"types": "./dist/src/utils/index.d.ts",
|
|
38
|
+
"default": "./dist/src/utils/index.js"
|
|
39
39
|
},
|
|
40
40
|
"./config": {
|
|
41
|
-
"types": "./src/config/forge-config.ts",
|
|
42
|
-
"default": "./src/config/forge-config.
|
|
41
|
+
"types": "./dist/src/config/forge-config.d.ts",
|
|
42
|
+
"default": "./dist/src/config/forge-config.js"
|
|
43
43
|
},
|
|
44
44
|
"./os/core": {
|
|
45
|
-
"types": "./os/core/core.module.ts",
|
|
46
|
-
"default": "./os/core/core.module.
|
|
45
|
+
"types": "./dist/os/core/core.module.d.ts",
|
|
46
|
+
"default": "./dist/os/core/core.module.js"
|
|
47
47
|
},
|
|
48
48
|
"./os/compass": {
|
|
49
|
-
"types": "./os/compass/index.ts",
|
|
50
|
-
"default": "./os/compass/index.
|
|
49
|
+
"types": "./dist/os/compass/index.d.ts",
|
|
50
|
+
"default": "./dist/os/compass/index.js"
|
|
51
51
|
},
|
|
52
52
|
"./os/naming": {
|
|
53
|
-
"types": "./os/naming/index.ts",
|
|
54
|
-
"default": "./os/naming/index.
|
|
53
|
+
"types": "./dist/os/naming/index.d.ts",
|
|
54
|
+
"default": "./dist/os/naming/index.js"
|
|
55
55
|
},
|
|
56
56
|
"./os/naming-module": {
|
|
57
|
-
"types": "./os/naming/naming.module.ts",
|
|
58
|
-
"default": "./os/naming/naming.module.
|
|
57
|
+
"types": "./dist/os/naming/naming.module.d.ts",
|
|
58
|
+
"default": "./dist/os/naming/naming.module.js"
|
|
59
59
|
},
|
|
60
60
|
"./os/rfc": {
|
|
61
|
-
"types": "./os/rfc/index.ts",
|
|
62
|
-
"default": "./os/rfc/index.
|
|
61
|
+
"types": "./dist/os/rfc/index.d.ts",
|
|
62
|
+
"default": "./dist/os/rfc/index.js"
|
|
63
63
|
},
|
|
64
64
|
"./os/rfc-module": {
|
|
65
|
-
"types": "./os/rfc/rfc.module.ts",
|
|
66
|
-
"default": "./os/rfc/rfc.module.
|
|
65
|
+
"types": "./dist/os/rfc/rfc.module.d.ts",
|
|
66
|
+
"default": "./dist/os/rfc/rfc.module.js"
|
|
67
67
|
},
|
|
68
68
|
"./os/werkstatt": {
|
|
69
|
-
"types": "./os/werkstatt/index.ts",
|
|
70
|
-
"default": "./os/werkstatt/index.
|
|
69
|
+
"types": "./dist/os/werkstatt/index.d.ts",
|
|
70
|
+
"default": "./dist/os/werkstatt/index.js"
|
|
71
71
|
},
|
|
72
72
|
"./os/workflow": {
|
|
73
|
-
"types": "./os/workflow/index.ts",
|
|
74
|
-
"default": "./os/workflow/index.
|
|
73
|
+
"types": "./dist/os/workflow/index.d.ts",
|
|
74
|
+
"default": "./dist/os/workflow/index.js"
|
|
75
75
|
},
|
|
76
76
|
"./os/workflow-module": {
|
|
77
|
-
"types": "./os/workflow/workflow.module.ts",
|
|
78
|
-
"default": "./os/workflow/workflow.module.
|
|
77
|
+
"types": "./dist/os/workflow/workflow.module.d.ts",
|
|
78
|
+
"default": "./dist/os/workflow/workflow.module.js"
|
|
79
79
|
},
|
|
80
80
|
"./os/spec-module": {
|
|
81
|
-
"types": "./os/spec/spec.module.ts",
|
|
82
|
-
"default": "./os/spec/spec.module.
|
|
81
|
+
"types": "./dist/os/spec/spec.module.d.ts",
|
|
82
|
+
"default": "./dist/os/spec/spec.module.js"
|
|
83
83
|
},
|
|
84
84
|
"./os/adr": {
|
|
85
|
-
"types": "./os/adr/index.ts",
|
|
86
|
-
"default": "./os/adr/index.
|
|
85
|
+
"types": "./dist/os/adr/index.d.ts",
|
|
86
|
+
"default": "./dist/os/adr/index.js"
|
|
87
87
|
},
|
|
88
88
|
"./os/adr-module": {
|
|
89
|
-
"types": "./os/adr/adr.module.ts",
|
|
90
|
-
"default": "./os/adr/adr.module.
|
|
89
|
+
"types": "./dist/os/adr/adr.module.d.ts",
|
|
90
|
+
"default": "./dist/os/adr/adr.module.js"
|
|
91
91
|
},
|
|
92
92
|
"./os/plan": {
|
|
93
|
-
"types": "./os/plan/index.ts",
|
|
94
|
-
"default": "./os/plan/index.
|
|
93
|
+
"types": "./dist/os/plan/index.d.ts",
|
|
94
|
+
"default": "./dist/os/plan/index.js"
|
|
95
95
|
},
|
|
96
96
|
"./os/plan-module": {
|
|
97
|
-
"types": "./os/plan/plan.module.ts",
|
|
98
|
-
"default": "./os/plan/plan.module.
|
|
97
|
+
"types": "./dist/os/plan/plan.module.d.ts",
|
|
98
|
+
"default": "./dist/os/plan/plan.module.js"
|
|
99
99
|
},
|
|
100
100
|
"./os/audit": {
|
|
101
|
-
"types": "./os/audit/index.ts",
|
|
102
|
-
"default": "./os/audit/index.
|
|
101
|
+
"types": "./dist/os/audit/index.d.ts",
|
|
102
|
+
"default": "./dist/os/audit/index.js"
|
|
103
103
|
},
|
|
104
104
|
"./os/audit-module": {
|
|
105
|
-
"types": "./os/audit/audit.module.ts",
|
|
106
|
-
"default": "./os/audit/audit.module.
|
|
105
|
+
"types": "./dist/os/audit/audit.module.d.ts",
|
|
106
|
+
"default": "./dist/os/audit/audit.module.js"
|
|
107
107
|
},
|
|
108
108
|
"./os/session": {
|
|
109
|
-
"types": "./os/session/index.ts",
|
|
110
|
-
"default": "./os/session/index.
|
|
109
|
+
"types": "./dist/os/session/index.d.ts",
|
|
110
|
+
"default": "./dist/os/session/index.js"
|
|
111
111
|
},
|
|
112
112
|
"./os/session-module": {
|
|
113
|
-
"types": "./os/session/session.module.ts",
|
|
114
|
-
"default": "./os/session/session.module.
|
|
113
|
+
"types": "./dist/os/session/session.module.d.ts",
|
|
114
|
+
"default": "./dist/os/session/session.module.js"
|
|
115
115
|
},
|
|
116
116
|
"./os/mission": {
|
|
117
|
-
"types": "./os/mission/index.ts",
|
|
118
|
-
"default": "./os/mission/index.
|
|
117
|
+
"types": "./dist/os/mission/index.d.ts",
|
|
118
|
+
"default": "./dist/os/mission/index.js"
|
|
119
119
|
},
|
|
120
120
|
"./os/mission-module": {
|
|
121
|
-
"types": "./os/mission/mission.module.ts",
|
|
122
|
-
"default": "./os/mission/mission.module.
|
|
121
|
+
"types": "./dist/os/mission/mission.module.d.ts",
|
|
122
|
+
"default": "./dist/os/mission/mission.module.js"
|
|
123
123
|
},
|
|
124
124
|
"./os/exploration": {
|
|
125
|
-
"types": "./os/exploration/index.ts",
|
|
126
|
-
"default": "./os/exploration/index.
|
|
125
|
+
"types": "./dist/os/exploration/index.d.ts",
|
|
126
|
+
"default": "./dist/os/exploration/index.js"
|
|
127
127
|
},
|
|
128
128
|
"./os/exploration-module": {
|
|
129
|
-
"types": "./os/exploration/exploration.module.ts",
|
|
130
|
-
"default": "./os/exploration/exploration.module.
|
|
129
|
+
"types": "./dist/os/exploration/exploration.module.d.ts",
|
|
130
|
+
"default": "./dist/os/exploration/exploration.module.js"
|
|
131
131
|
},
|
|
132
132
|
"./os/notes": {
|
|
133
|
-
"types": "./os/notes/index.ts",
|
|
134
|
-
"default": "./os/notes/index.
|
|
133
|
+
"types": "./dist/os/notes/index.d.ts",
|
|
134
|
+
"default": "./dist/os/notes/index.js"
|
|
135
135
|
},
|
|
136
136
|
"./os/notes-module": {
|
|
137
|
-
"types": "./os/notes/notes.module.ts",
|
|
138
|
-
"default": "./os/notes/notes.module.
|
|
137
|
+
"types": "./dist/os/notes/notes.module.d.ts",
|
|
138
|
+
"default": "./dist/os/notes/notes.module.js"
|
|
139
139
|
},
|
|
140
140
|
"./os/program": {
|
|
141
|
-
"types": "./os/program/program.module.ts",
|
|
142
|
-
"default": "./os/program/program.module.
|
|
141
|
+
"types": "./dist/os/program/program.module.d.ts",
|
|
142
|
+
"default": "./dist/os/program/program.module.js"
|
|
143
143
|
}
|
|
144
144
|
},
|
|
145
145
|
"files": [
|
|
@@ -154,16 +154,6 @@
|
|
|
154
154
|
"README.md",
|
|
155
155
|
"LICENSE"
|
|
156
156
|
],
|
|
157
|
-
"scripts": {
|
|
158
|
-
"build": "pnpm exec tsc -p tsconfig.json",
|
|
159
|
-
"build:check": "pnpm exec tsc -p tsconfig.json --noEmit",
|
|
160
|
-
"lint": "pnpm exec eslint \"src/**/*.ts\" \"os/**/*.ts\"",
|
|
161
|
-
"typecheck": "pnpm exec tsc -p tsconfig.json --noEmit",
|
|
162
|
-
"test": "vitest run --passWithNoTests",
|
|
163
|
-
"test:watch": "vitest",
|
|
164
|
-
"test:tarball:node24": "node test-fixtures/node24-consumer/smoke.mjs",
|
|
165
|
-
"prepublishOnly": "pnpm exec tsc -p tsconfig.json"
|
|
166
|
-
},
|
|
167
157
|
"dependencies": {
|
|
168
158
|
"@aws-sdk/client-s3": "^3.700.0",
|
|
169
159
|
"trash": "^10.1.1",
|
|
@@ -184,127 +174,15 @@
|
|
|
184
174
|
"node": ">=24 <25"
|
|
185
175
|
},
|
|
186
176
|
"publishConfig": {
|
|
187
|
-
"access": "public"
|
|
188
|
-
"main": "./dist/src/index.js",
|
|
189
|
-
"types": "./dist/src/index.d.ts",
|
|
190
|
-
"exports": {
|
|
191
|
-
".": {
|
|
192
|
-
"types": "./dist/src/index.d.ts",
|
|
193
|
-
"default": "./dist/src/index.js"
|
|
194
|
-
},
|
|
195
|
-
"./types": {
|
|
196
|
-
"types": "./dist/src/types.d.ts",
|
|
197
|
-
"default": "./dist/src/types.js"
|
|
198
|
-
},
|
|
199
|
-
"./utils": {
|
|
200
|
-
"types": "./dist/src/utils/index.d.ts",
|
|
201
|
-
"default": "./dist/src/utils/index.js"
|
|
202
|
-
},
|
|
203
|
-
"./config": {
|
|
204
|
-
"types": "./dist/src/config/forge-config.d.ts",
|
|
205
|
-
"default": "./dist/src/config/forge-config.js"
|
|
206
|
-
},
|
|
207
|
-
"./os/core": {
|
|
208
|
-
"types": "./dist/os/core/core.module.d.ts",
|
|
209
|
-
"default": "./dist/os/core/core.module.js"
|
|
210
|
-
},
|
|
211
|
-
"./os/compass": {
|
|
212
|
-
"types": "./dist/os/compass/index.d.ts",
|
|
213
|
-
"default": "./dist/os/compass/index.js"
|
|
214
|
-
},
|
|
215
|
-
"./os/naming": {
|
|
216
|
-
"types": "./dist/os/naming/index.d.ts",
|
|
217
|
-
"default": "./dist/os/naming/index.js"
|
|
218
|
-
},
|
|
219
|
-
"./os/naming-module": {
|
|
220
|
-
"types": "./dist/os/naming/naming.module.d.ts",
|
|
221
|
-
"default": "./dist/os/naming/naming.module.js"
|
|
222
|
-
},
|
|
223
|
-
"./os/rfc": {
|
|
224
|
-
"types": "./dist/os/rfc/index.d.ts",
|
|
225
|
-
"default": "./dist/os/rfc/index.js"
|
|
226
|
-
},
|
|
227
|
-
"./os/rfc-module": {
|
|
228
|
-
"types": "./dist/os/rfc/rfc.module.d.ts",
|
|
229
|
-
"default": "./dist/os/rfc/rfc.module.js"
|
|
230
|
-
},
|
|
231
|
-
"./os/werkstatt": {
|
|
232
|
-
"types": "./dist/os/werkstatt/index.d.ts",
|
|
233
|
-
"default": "./dist/os/werkstatt/index.js"
|
|
234
|
-
},
|
|
235
|
-
"./os/workflow": {
|
|
236
|
-
"types": "./dist/os/workflow/index.d.ts",
|
|
237
|
-
"default": "./dist/os/workflow/index.js"
|
|
238
|
-
},
|
|
239
|
-
"./os/workflow-module": {
|
|
240
|
-
"types": "./dist/os/workflow/workflow.module.d.ts",
|
|
241
|
-
"default": "./dist/os/workflow/workflow.module.js"
|
|
242
|
-
},
|
|
243
|
-
"./os/spec-module": {
|
|
244
|
-
"types": "./dist/os/spec/spec.module.d.ts",
|
|
245
|
-
"default": "./dist/os/spec/spec.module.js"
|
|
246
|
-
},
|
|
247
|
-
"./os/adr": {
|
|
248
|
-
"types": "./dist/os/adr/index.d.ts",
|
|
249
|
-
"default": "./dist/os/adr/index.js"
|
|
250
|
-
},
|
|
251
|
-
"./os/adr-module": {
|
|
252
|
-
"types": "./dist/os/adr/adr.module.d.ts",
|
|
253
|
-
"default": "./dist/os/adr/adr.module.js"
|
|
254
|
-
},
|
|
255
|
-
"./os/plan": {
|
|
256
|
-
"types": "./dist/os/plan/index.d.ts",
|
|
257
|
-
"default": "./dist/os/plan/index.js"
|
|
258
|
-
},
|
|
259
|
-
"./os/plan-module": {
|
|
260
|
-
"types": "./dist/os/plan/plan.module.d.ts",
|
|
261
|
-
"default": "./dist/os/plan/plan.module.js"
|
|
262
|
-
},
|
|
263
|
-
"./os/audit": {
|
|
264
|
-
"types": "./dist/os/audit/index.d.ts",
|
|
265
|
-
"default": "./dist/os/audit/index.js"
|
|
266
|
-
},
|
|
267
|
-
"./os/audit-module": {
|
|
268
|
-
"types": "./dist/os/audit/audit.module.d.ts",
|
|
269
|
-
"default": "./dist/os/audit/audit.module.js"
|
|
270
|
-
},
|
|
271
|
-
"./os/session": {
|
|
272
|
-
"types": "./dist/os/session/index.d.ts",
|
|
273
|
-
"default": "./dist/os/session/index.js"
|
|
274
|
-
},
|
|
275
|
-
"./os/session-module": {
|
|
276
|
-
"types": "./dist/os/session/session.module.d.ts",
|
|
277
|
-
"default": "./dist/os/session/session.module.js"
|
|
278
|
-
},
|
|
279
|
-
"./os/mission": {
|
|
280
|
-
"types": "./dist/os/mission/index.d.ts",
|
|
281
|
-
"default": "./dist/os/mission/index.js"
|
|
282
|
-
},
|
|
283
|
-
"./os/mission-module": {
|
|
284
|
-
"types": "./dist/os/mission/mission.module.d.ts",
|
|
285
|
-
"default": "./dist/os/mission/mission.module.js"
|
|
286
|
-
},
|
|
287
|
-
"./os/exploration": {
|
|
288
|
-
"types": "./dist/os/exploration/index.d.ts",
|
|
289
|
-
"default": "./dist/os/exploration/index.js"
|
|
290
|
-
},
|
|
291
|
-
"./os/exploration-module": {
|
|
292
|
-
"types": "./dist/os/exploration/exploration.module.d.ts",
|
|
293
|
-
"default": "./dist/os/exploration/exploration.module.js"
|
|
294
|
-
},
|
|
295
|
-
"./os/notes": {
|
|
296
|
-
"types": "./dist/os/notes/index.d.ts",
|
|
297
|
-
"default": "./dist/os/notes/index.js"
|
|
298
|
-
},
|
|
299
|
-
"./os/notes-module": {
|
|
300
|
-
"types": "./dist/os/notes/notes.module.d.ts",
|
|
301
|
-
"default": "./dist/os/notes/notes.module.js"
|
|
302
|
-
},
|
|
303
|
-
"./os/program": {
|
|
304
|
-
"types": "./dist/os/program/program.module.d.ts",
|
|
305
|
-
"default": "./dist/os/program/program.module.js"
|
|
306
|
-
}
|
|
307
|
-
}
|
|
177
|
+
"access": "public"
|
|
308
178
|
},
|
|
309
|
-
"
|
|
310
|
-
|
|
179
|
+
"scripts": {
|
|
180
|
+
"build": "pnpm exec tsc -p tsconfig.json",
|
|
181
|
+
"build:check": "pnpm exec tsc -p tsconfig.json --noEmit",
|
|
182
|
+
"lint": "pnpm exec eslint \"src/**/*.ts\" \"os/**/*.ts\"",
|
|
183
|
+
"typecheck": "pnpm exec tsc -p tsconfig.json --noEmit",
|
|
184
|
+
"test": "vitest run --passWithNoTests",
|
|
185
|
+
"test:watch": "vitest",
|
|
186
|
+
"test:tarball:node24": "node test-fixtures/node24-consumer/smoke.mjs"
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -92,15 +92,15 @@ Every `run_command` call MUST use a 6-minute (360 000 ms) execution budget. This
|
|
|
92
92
|
3. **If completed**: Read the output and proceed normally.
|
|
93
93
|
4. **If still running after 6 min**: Abandon the command — do not wait further. Try an alternative approach (different command, different scope, or skip the step). If no alternative exists, retry the same command once with the same 6-min budget.
|
|
94
94
|
5. **Max retries**: 2 attempts per command. After 2 failed attempts, report to the operator and ask how to proceed.
|
|
95
|
-
6. **No infinite waits**: NEVER call `command_status` with `WaitDurationSeconds` > 60. NEVER use `Blocking: true` for commands that may hang (builds, checks,
|
|
95
|
+
6. **No infinite waits**: NEVER call `command_status` with `WaitDurationSeconds` > 60. NEVER use `Blocking: true` for commands that may hang (builds, checks, long-running CLI commands, `astro check`, `tsc`, `pnpm install`).
|
|
96
96
|
7. **Exceptions**: `Blocking: true` is allowed only for trivially fast commands (e.g., `node --version`, `git log -n 1`, `git status --short`) that are guaranteed to complete in seconds.
|
|
97
97
|
|
|
98
98
|
### Rationale
|
|
99
99
|
|
|
100
100
|
- The `run_command` tool has no built-in timeout parameter. `WaitMsBeforeAsync` is the only mechanism to regain control after a fixed duration.
|
|
101
101
|
- Abandoning a still-running process is acceptable — the process may complete in the background, but the agent is unblocked and can retry or try an alternative.
|
|
102
|
-
- This covers all command classes: `pnpm exec
|
|
103
|
-
-
|
|
102
|
+
- This covers all command classes: `pnpm exec forge ...`, `pnpm --filter <pkg> run build:check`, `astro check`, `git`, `pnpm install`, etc.
|
|
103
|
+
- Project CLI commands may have internal `timeoutMs`, but the agent-side 6-min budget is a safety net for ALL commands, not just project CLI.
|
|
104
104
|
|
|
105
105
|
## Binding resolution and degradation
|
|
106
106
|
|
|
@@ -140,8 +140,8 @@ Skills reference bindings by key, never by value. To resolve a binding:
|
|
|
140
140
|
|
|
141
141
|
A skill needs to run `rfc.validate` for `RFC-XXXX`:
|
|
142
142
|
|
|
143
|
-
1. Read `forge.yaml` → `bindings.commands.validateRfc` = `"
|
|
144
|
-
2. Substitute `{id}` → `"
|
|
143
|
+
1. Read `forge.yaml` → `bindings.commands.validateRfc` = `"forge rfc.validate {id} --json"`
|
|
144
|
+
2. Substitute `{id}` → `"forge rfc.validate RFC-XXXX --json"`
|
|
145
145
|
3. Run the resolved command.
|
|
146
146
|
|
|
147
147
|
If `bindings.commands.validateRfc` were `null`, the skill would skip the step and report: `Degraded: commands.validateRfc — not configured in forge.yaml`.
|
|
@@ -52,7 +52,7 @@ Before proposing any candidate, read `ref(forge.yaml bindings.paths.invariantsFi
|
|
|
52
52
|
- Which invariants are marked "Foundational invariant (pre-RFC)" vs "Established by RFC-XXXX".
|
|
53
53
|
- Which invariants have been "Reclassified to feature".
|
|
54
54
|
|
|
55
|
-
Also read the RFC template (`
|
|
55
|
+
Also read the RFC template (`docs/rfcs/rfc-0000-template.md`) to understand the `satisfies` field and the "DNA-N established by this RFC" marker pattern.
|
|
56
56
|
|
|
57
57
|
### 3. Discover DNA candidates
|
|
58
58
|
|
|
@@ -7,7 +7,7 @@ Load this file when running step 4 of `fo-idea-audit`. For each axis, check ever
|
|
|
7
7
|
Beyond V-13 (required sections exist) and V-14 (≥3 acceptance items), check that each section contains real content, not template placeholders or empty HTML comments:
|
|
8
8
|
|
|
9
9
|
- **Decision** is a single decision in present tense ("The kernel gains…"), not a wishlist or "we should".
|
|
10
|
-
- **CLI surface** shows exact
|
|
10
|
+
- **CLI surface** shows exact project CLI invocations with flags and scope.
|
|
11
11
|
- **TypeScript contracts** are minimal type signatures, not full implementations.
|
|
12
12
|
- **File system responsibilities** table names concrete paths the RFC touches.
|
|
13
13
|
- **Output format** documents the `--json` shape.
|
|
@@ -54,7 +54,7 @@ If any item is false, use `fo-idea-create-rfc` instead and stop.
|
|
|
54
54
|
- **title** (required) — short imperative sentence.
|
|
55
55
|
- **scope** — `package`, `app`, or `workspace`. Default `package`.
|
|
56
56
|
- **decider** — default `architecture`. The named decider is the only role that may move the ADR out of `proposed`.
|
|
57
|
-
- **reviewers** — default empty. When the operator has not specified a reviewer, read the default reviewer(s) from the `reviewers` field comment in `docs/adrs/adr-0000-template.md
|
|
57
|
+
- **reviewers** — default empty. When the operator has not specified a reviewer, read the default reviewer(s) from the `reviewers` field comment in `docs/adrs/adr-0000-template.md`. Set all listed default reviewers.
|
|
58
58
|
- **related** — any RFCs, ADRs, DNA invariants, or specs this decision relates to.
|
|
59
59
|
|
|
60
60
|
### 4. Grill the concept (skip if invoked with an accepted decision)
|
|
@@ -52,7 +52,7 @@ Ask the user for, or infer from context:
|
|
|
52
52
|
- **liveSpec** — for feature-level RFCs (not governance/policy), suggest `liveSpec: true` to auto-derive a living spec domain from `packagesImpacted[0]`, or `liveSpec: <domain>` for an explicit domain. This enables automatic delta-merge into `docs/specs/live/<domain>.md` when the RFC is implemented.
|
|
53
53
|
- **satisfies** — for `architecture` or `contract` RFCs, at least one `DNA-NN` invariant from `ref(forge.yaml bindings.paths.invariantsFile)`.
|
|
54
54
|
- **related** — relevant RFCs, DNA ids, anti-patterns, specs.
|
|
55
|
-
- **reviewer** — if the caller specifies a reviewer identity, use it. If not, default
|
|
55
|
+
- **reviewer** — if the caller specifies a reviewer identity, use it. If not, read the default reviewer(s) from the `reviewers` field comment in `docs/rfcs/rfc-0000-template.md` **only when the skill is also responsible for moving the RFC out of draft**. For a pure draft scaffold, leave `reviewers: []`.
|
|
56
56
|
|
|
57
57
|
### 3. Grill the concept
|
|
58
58
|
|
|
@@ -78,7 +78,7 @@ ref(forge.yaml bindings.commands.validateRfc) --create --title="<title>" --kind=
|
|
|
78
78
|
|
|
79
79
|
### 5. Fill every section
|
|
80
80
|
|
|
81
|
-
Read the generated file and the full template (`
|
|
81
|
+
Read the generated file and the full template (`docs/rfcs/rfc-0000-template.md`) as a guide. Replace placeholder text in every required section:
|
|
82
82
|
|
|
83
83
|
- **Context** — the concrete situation, not a generic preamble.
|
|
84
84
|
- **Problem** — the exact risk or gap this RFC closes.
|
|
@@ -129,7 +129,7 @@ Stage only the RFC file — do not stage unrelated changes. Another agent may be
|
|
|
129
129
|
- Use the **full** RFC template for every RFC. Lightweight local decisions now use ADRs instead.
|
|
130
130
|
- Do not change `status` past `draft`.
|
|
131
131
|
- Do not add self-authorizing language such as "implementation may start before acceptance."
|
|
132
|
-
- Do not default `reviewers` on drafts unless the skill is explicitly performing a status transition and the caller has not supplied a reviewer — in that case
|
|
132
|
+
- Do not default `reviewers` on drafts unless the skill is explicitly performing a status transition and the caller has not supplied a reviewer — in that case read the default reviewer(s) from the `reviewers` field comment in `docs/rfcs/rfc-0000-template.md`.
|
|
133
133
|
- Keep `rfc.validate` clean before presenting the draft.
|
|
134
134
|
- **Commit the RFC draft.** The RFC file must be committed after creation and validation — never left in the working tree.
|
|
135
135
|
- **Never manually determine the RFC number.** Always use `rfc.create` (step 4) to assign the number. The RFC number space includes archived RFCs under `docs/rfcs/archive/` — a top-level-only scan of `docs/rfcs/` misses them and produces duplicate IDs. `rfc.create` scans the full tree recursively and picks the correct next number.
|
|
@@ -18,7 +18,7 @@ If the ADR is `proposed` or `reviewing`, transition it to `accepted`:
|
|
|
18
18
|
|
|
19
19
|
1. Set `status: accepted` in the frontmatter.
|
|
20
20
|
2. Set `updatedAt: <today's date>`.
|
|
21
|
-
3. If `reviewers` is empty, read the default reviewer(s) from the `reviewers` field comment in `docs/adrs/adr-0000-template.md
|
|
21
|
+
3. If `reviewers` is empty, read the default reviewer(s) from the `reviewers` field comment in `docs/adrs/adr-0000-template.md`. Set all listed default reviewers.
|
|
22
22
|
4. Commit:
|
|
23
23
|
|
|
24
24
|
```txt
|
|
@@ -56,7 +56,7 @@ After implementation is complete, run heavy checks for the impacted workspaces o
|
|
|
56
56
|
1. ADR validation:
|
|
57
57
|
|
|
58
58
|
```sh
|
|
59
|
-
|
|
59
|
+
ref(forge.yaml bindings.commands.validateAdr)
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
2. Determine impacted packages/apps from the ADR's `scope` and the files touched during implementation. Build only those workspaces:
|
|
@@ -308,7 +308,7 @@ If the ADR is `proposed` or `reviewing`, transition it to `accepted`:
|
|
|
308
308
|
|
|
309
309
|
1. Set `status: accepted` in the frontmatter.
|
|
310
310
|
2. Set `updatedAt: <today's date>`.
|
|
311
|
-
3. If `reviewers` is empty, read the default reviewer(s) from the `reviewers` field comment in `docs/adrs/adr-0000-template.md
|
|
311
|
+
3. If `reviewers` is empty, read the default reviewer(s) from the `reviewers` field comment in `docs/adrs/adr-0000-template.md`. Set all listed default reviewers.
|
|
312
312
|
4. Commit:
|
|
313
313
|
|
|
314
314
|
```txt
|
|
@@ -60,7 +60,7 @@ If all checks pass, proceed to step 0.3.
|
|
|
60
60
|
If the RFC is `draft` or `reviewing` and has `enhancedAt` — the user's instruction to plan IS the architecture acceptance. Transition the RFC to `accepted`:
|
|
61
61
|
|
|
62
62
|
1. Set `status: accepted`.
|
|
63
|
-
2. Set `reviewers` — if the operator specified a reviewer at invocation, use that. Otherwise, read the default reviewer(s) from the `reviewers` field comment in `
|
|
63
|
+
2. Set `reviewers` — if the operator specified a reviewer at invocation, use that. Otherwise, read the default reviewer(s) from the `reviewers` field comment in `docs/rfcs/rfc-0000-template.md`. Set all listed default reviewers.
|
|
64
64
|
3. Set `updatedAt` to today's date.
|
|
65
65
|
4. Commit:
|
|
66
66
|
|
|
@@ -245,5 +245,5 @@ When an RFC was planned in this session, prefer implementing it in this session
|
|
|
245
245
|
- The plan MUST NOT propose changing DNA invariants without a new superseding RFC.
|
|
246
246
|
- The plan MUST respect RFC-XXXX: only `accepted → implemented` is agent-permitted; all other status transitions are human-only. The `draft → accepted` transition in step 0.3 is an exception authorized by the user's explicit instruction to plan the RFC.
|
|
247
247
|
- The plan MUST reference the RFC's acceptance criteria as the source of truth for completion.
|
|
248
|
-
- **Default reviewer source.** When transitioning `draft → accepted` and the operator has not specified a reviewer, read the default reviewer(s) from the `reviewers` field comment in `
|
|
248
|
+
- **Default reviewer source.** When transitioning `draft → accepted` and the operator has not specified a reviewer, read the default reviewer(s) from the `reviewers` field comment in `docs/rfcs/rfc-0000-template.md`. Set all listed default reviewers.
|
|
249
249
|
- **No pauses for recoverable tool errors.** If a tool call fails with a recoverable error — e.g. `write_to_file` content too long, JSON truncation, line count/character limit exceeded, or similar — do not stop and ask the user. Recover autonomously: split the content into smaller writes, use `edit`/`multi_edit`, decompose oversized files, and retry immediately. The operator's default answer to "Shall I proceed?" is always "yes".
|
|
@@ -34,8 +34,8 @@ After every standalone operator request that produces file changes, perform the
|
|
|
34
34
|
2. **Verify diff before staging.** Run `git diff` (not just `git diff --cached`) on every file the agent touched in this request, in each dirty tree. Confirm the changes are the agent's own work and not foreign changes from another session. If foreign changes are found, exclude them from staging.
|
|
35
35
|
3. **Stage only agent-changed files.** Stage only the files the agent modified in this request. Never use `git add -A` or `git add .` — another agent or session may have unrelated changes in the working tree. Stage files by explicit path: `git add <path1> <path2> ...`.
|
|
36
36
|
4. **Form commit message.** Write a conventional commit message (`fix:`, `feat:`, `refactor:`, `docs:`, `chore:`) based on the work performed in this request. The agent determines the type and description from the context of the request.
|
|
37
|
-
5. **Commit in monorepo.** Use `pnpm exec werkstatt run ecosystem.commit --message
|
|
38
|
-
6. **Commit in mission workpiece (if applicable).** If the agent changed files in the active mission workpiece, commit there via `
|
|
37
|
+
5. **Commit in monorepo.** Use `pnpm exec werkstatt run ecosystem.commit --message "<message>"` to commit in the werkstatt monorepo. This handles platform-scope version bumps and X-Platform-Bump trailers automatically. Stage files with `git add <paths>` first (the pre-commit hook blocks raw `git commit` for platform-scope files). For non-platform-only changes (docs/**), `ecosystem.commit` delegates to a plain `git commit` without version bump.
|
|
38
|
+
6. **Commit in mission workpiece (if applicable).** If the agent changed files in the active mission workpiece, commit there via `git commit` in the workpiece directory.
|
|
39
39
|
7. **Verify clean trees.** After all commits, run `bash scripts/check-clean-trees.sh` again. If any tree is still dirty, report to the operator.
|
|
40
40
|
|
|
41
41
|
## What this skill does NOT do
|
package/src/onboarding/create.ts
CHANGED
|
@@ -297,7 +297,7 @@ export async function runCreate(
|
|
|
297
297
|
|
|
298
298
|
if (initResult.status !== "pass") {
|
|
299
299
|
if (outputFormat === "pretty") {
|
|
300
|
-
logger.error(`Init failed with ${initResult.errors.length} error
|
|
300
|
+
logger.error(`Init failed with ${initResult.errors.length} error${initResult.errors.length === 1 ? "" : "s"}:`);
|
|
301
301
|
for (const err of initResult.errors.slice(0, 5)) {
|
|
302
302
|
logger.error(` ${err}`);
|
|
303
303
|
}
|
package/src/onboarding/doctor.ts
CHANGED
|
@@ -1136,7 +1136,7 @@ export async function runDoctor(
|
|
|
1136
1136
|
|
|
1137
1137
|
const parts: string[] = [];
|
|
1138
1138
|
if (allViolations.length > 0) {
|
|
1139
|
-
parts.push(`${allViolations.length} violation
|
|
1139
|
+
parts.push(`${allViolations.length} violation${allViolations.length === 1 ? "" : "s"}`);
|
|
1140
1140
|
for (const v of allViolations.slice(0, 3)) {
|
|
1141
1141
|
parts.push(`${v.invariantId}: ${v.file} — ${v.message}`);
|
|
1142
1142
|
}
|
package/src/onboarding/init.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
<MODULE_CONTRACT>
|
|
3
|
-
<purpose>forge.init — deploys forge into a project: creates forge.yaml, PREFERENCES.md, copies skills to .agents/skills/, creates docs directories, copies RFC
|
|
3
|
+
<purpose>forge.init — deploys forge into a project: creates forge.yaml, PREFERENCES.md, copies skills to .agents/skills/, creates docs directories, copies RFC and ADR templates. Config-driven via resolveForgeRoot and loadForgeConfig.</purpose>
|
|
4
4
|
<non-goals>
|
|
5
5
|
<item>Do not overwrite existing forge.yaml, PREFERENCES.md, or kernel.config.ts — skip with warning.</item>
|
|
6
6
|
<item>Do not generate AGENTS.md — that is forge.agents.generate's responsibility.</item>
|
|
@@ -334,6 +334,35 @@ export function runInit(
|
|
|
334
334
|
}
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
+
// 5. Copy neutral RFC and ADR templates into the project's docs directories.
|
|
338
|
+
// Templates are copied from the forge package so new projects can create
|
|
339
|
+
// RFCs and ADRs without falling back to the forge package's internal copy.
|
|
340
|
+
// Existing templates are never overwritten.
|
|
341
|
+
const templatesToCopy = [
|
|
342
|
+
{
|
|
343
|
+
src: path.join(forgeRoot, "os", "rfc", "rfc-0000-template.md"),
|
|
344
|
+
destRel: `${config.paths.rfcsDir}/rfc-0000-template.md`,
|
|
345
|
+
label: "docs/rfcs/rfc-0000-template.md",
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
src: path.join(forgeRoot, "os", "adr", "adr-0000-template.md"),
|
|
349
|
+
destRel: `${config.paths.adrsDir}/adr-0000-template.md`,
|
|
350
|
+
label: "docs/adrs/adr-0000-template.md",
|
|
351
|
+
},
|
|
352
|
+
];
|
|
353
|
+
for (const { src, destRel, label } of templatesToCopy) {
|
|
354
|
+
const destPath = path.join(workspaceRoot, destRel);
|
|
355
|
+
if (fs.existsSync(destPath)) {
|
|
356
|
+
skipped.push(`${label} (already exists)`);
|
|
357
|
+
} else if (fs.existsSync(src)) {
|
|
358
|
+
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
359
|
+
fs.writeFileSync(destPath, fs.readFileSync(src, "utf8"), "utf8");
|
|
360
|
+
created.push(label);
|
|
361
|
+
} else {
|
|
362
|
+
errors.push(`Template source not found: ${src}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
337
366
|
return {
|
|
338
367
|
command: "forge.init",
|
|
339
368
|
status: errors.length === 0 ? "pass" : "fail",
|
|
@@ -111,7 +111,7 @@ export async function runProfileValidate(
|
|
|
111
111
|
for (const p of profileResults) {
|
|
112
112
|
const icon = p.valid ? "✓" : "✖";
|
|
113
113
|
const fn = p.valid ? logger.success : logger.error;
|
|
114
|
-
fn(`${icon} ${p.id}: ${p.valid ? "valid" : `${p.errors.length} error
|
|
114
|
+
fn(`${icon} ${p.id}: ${p.valid ? "valid" : `${p.errors.length} error${p.errors.length === 1 ? "" : "s"}`}`);
|
|
115
115
|
for (const err of p.errors) {
|
|
116
116
|
logger.error(` - ${err}`);
|
|
117
117
|
}
|
package/src/utils/fs-trash.ts
CHANGED
|
@@ -16,9 +16,9 @@ Windows.</purpose>
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { existsSync } from "node:fs";
|
|
19
|
-
import trash from "trash";
|
|
20
19
|
|
|
21
20
|
export async function trashPath(targetPath: string): Promise<void> {
|
|
22
21
|
if (!existsSync(targetPath)) return;
|
|
22
|
+
const { default: trash } = await import("trash");
|
|
23
23
|
await trash(targetPath, { glob: false });
|
|
24
24
|
}
|
|
@@ -136,7 +136,7 @@ export function runNoteFrontmatterValidate(
|
|
|
136
136
|
exitCode: violations.length > 0 ? 1 : 0,
|
|
137
137
|
summary:
|
|
138
138
|
violations.length > 0
|
|
139
|
-
? `note.frontmatter.validate: ${violations.length} violation
|
|
139
|
+
? `note.frontmatter.validate: ${violations.length} violation${violations.length === 1 ? "" : "s"} found`
|
|
140
140
|
: "note.frontmatter.validate: OK — 0 violations",
|
|
141
141
|
};
|
|
142
142
|
}
|
|
@@ -139,7 +139,7 @@ export function runNoteLinkValidate(
|
|
|
139
139
|
exitCode: violations.length > 0 ? 1 : 0,
|
|
140
140
|
summary:
|
|
141
141
|
violations.length > 0
|
|
142
|
-
? `note.link.validate: ${violations.length} violation
|
|
142
|
+
? `note.link.validate: ${violations.length} violation${violations.length === 1 ? "" : "s"} found`
|
|
143
143
|
: "note.link.validate: OK — 0 violations",
|
|
144
144
|
};
|
|
145
145
|
}
|