@warpgogol/forge 2.9.2 → 2.9.5
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 +14 -8
- package/README.uk.md +14 -0
- package/dist/bin/cli.js +0 -0
- package/dist/os/adr/handlers/implement-stamp.d.ts.map +1 -1
- package/dist/os/adr/handlers/implement-stamp.js +7 -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 +17 -3
- 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/compass/handlers/compass-audit-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-audit-handler.js +22 -0
- package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.js +6 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-inventory-handler.js +19 -0
- package/dist/os/compass/handlers/compass-inventory-handler.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/exploration/handlers/archive.d.ts.map +1 -1
- package/dist/os/exploration/handlers/archive.js +6 -0
- package/dist/os/exploration/handlers/archive.js.map +1 -1
- package/dist/os/exploration/handlers/list.d.ts.map +1 -1
- package/dist/os/exploration/handlers/list.js +8 -0
- package/dist/os/exploration/handlers/list.js.map +1 -1
- package/dist/os/exploration/handlers/show.d.ts.map +1 -1
- package/dist/os/exploration/handlers/show.js +6 -0
- package/dist/os/exploration/handlers/show.js.map +1 -1
- package/dist/os/program/handlers/complete.d.ts.map +1 -1
- package/dist/os/program/handlers/complete.js +19 -1
- package/dist/os/program/handlers/complete.js.map +1 -1
- package/dist/os/program/handlers/lease.js +7 -1
- package/dist/os/program/handlers/lease.js.map +1 -1
- package/dist/os/program/handlers/seal.d.ts.map +1 -1
- package/dist/os/program/handlers/seal.js +13 -1
- package/dist/os/program/handlers/seal.js.map +1 -1
- package/dist/os/program/handlers/validate.js +8 -2
- package/dist/os/program/handlers/validate.js.map +1 -1
- package/dist/os/rfc/acceptance.d.ts.map +1 -1
- package/dist/os/rfc/acceptance.js +8 -0
- package/dist/os/rfc/acceptance.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.d.ts.map +1 -1
- package/dist/os/rfc/handlers/check.js +10 -2
- package/dist/os/rfc/handlers/check.js.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.js +7 -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/list-create.d.ts.map +1 -1
- package/dist/os/rfc/handlers/list-create.js +20 -0
- package/dist/os/rfc/handlers/list-create.js.map +1 -1
- package/dist/os/rfc/handlers/validate.d.ts.map +1 -1
- package/dist/os/rfc/handlers/validate.js +17 -3
- 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 +17 -3
- package/dist/os/session/handlers/validate.js.map +1 -1
- package/dist/os/spec/live-spec-list.d.ts.map +1 -1
- package/dist/os/spec/live-spec-list.js +8 -0
- package/dist/os/spec/live-spec-list.js.map +1 -1
- package/dist/os/spec/live-spec-merge.js +2 -2
- package/dist/os/spec/live-spec-merge.js.map +1 -1
- package/dist/os/spec/live-spec-show.d.ts.map +1 -1
- package/dist/os/spec/live-spec-show.js +6 -0
- package/dist/os/spec/live-spec-show.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-materialize.d.ts.map +1 -1
- package/dist/os/spec/spec-materialize.js +6 -0
- package/dist/os/spec/spec-materialize.js.map +1 -1
- package/dist/os/spec/spec-status.d.ts.map +1 -1
- package/dist/os/spec/spec-status.js +6 -0
- package/dist/os/spec/spec-status.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/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +8 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js +8 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js.map +1 -1
- package/dist/os/workflow/handlers.d.ts.map +1 -1
- package/dist/os/workflow/handlers.js +9 -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 +7 -1
- package/os/adr/handlers/list-create.ts +48 -4
- package/os/adr/handlers/validate.ts +15 -3
- package/os/adr/types.ts +1 -0
- package/os/compass/handlers/compass-audit-handler.ts +24 -0
- package/os/compass/handlers/compass-change-summary-handler.ts +6 -0
- package/os/compass/handlers/compass-inventory-handler.ts +19 -0
- package/os/core/handlers/package-health.ts +9 -5
- package/os/core/handlers/pinned-validate.ts +4 -2
- package/os/exploration/handlers/archive.ts +6 -0
- package/os/exploration/handlers/list.ts +9 -0
- package/os/exploration/handlers/show.ts +6 -0
- package/os/program/handlers/complete.ts +19 -1
- package/os/program/handlers/lease.ts +7 -1
- package/os/program/handlers/seal.ts +13 -1
- package/os/program/handlers/validate.ts +8 -2
- package/os/rfc/acceptance.ts +9 -0
- package/os/rfc/dna-trace.ts +1 -1
- package/os/rfc/handlers/check.ts +10 -2
- package/os/rfc/handlers/implement-stamp.ts +7 -1
- package/os/rfc/handlers/index-graph.ts +4 -4
- package/os/rfc/handlers/lifecycle.ts +1 -1
- package/os/rfc/handlers/list-create.ts +21 -0
- package/os/rfc/handlers/validate.ts +15 -3
- package/os/rfc/rfc-0000-template.md +16 -20
- package/os/session/handlers/validate.ts +15 -3
- package/os/spec/live-spec-list.ts +8 -0
- package/os/spec/live-spec-merge.ts +2 -2
- package/os/spec/live-spec-show.ts +6 -0
- package/os/spec/live-spec-validate.ts +2 -2
- package/os/spec/spec-materialize.ts +6 -0
- package/os/spec/spec-status.ts +6 -0
- package/os/spec/spec-validate.ts +1 -1
- package/os/werkstatt/handlers/werkstatt-lock-recover.ts +9 -0
- package/os/werkstatt/handlers/werkstatt-lock-status.ts +9 -0
- package/os/workflow/handlers.ts +10 -1
- package/package.json +73 -195
- package/skills/_shared/fo-pipeline-conventions.md +44 -5
- package/skills/_shared/fo-prerequisites.md +81 -0
- package/skills/fo/fo-extract-dna/SKILL.md +1 -1
- package/skills/fo/fo-idea-audit/AUDIT-AXES.md +66 -0
- package/skills/fo/fo-idea-audit/SKILL.md +2 -2
- 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-enhance/SKILL.md +2 -2
- package/skills/fo/fo-idea-implement/ADR-FLOW.md +179 -0
- package/skills/fo/fo-idea-implement/SKILL.md +1 -1
- package/skills/fo/fo-idea-plan/SKILL.md +4 -2
- package/skills/fo/fo-review/AXES.md +70 -0
- package/skills/fo/fo-session-retro/learned-principles.md +15 -0
- package/skills/fo/fo-step-commit/SKILL.md +2 -2
- package/skills/shared/windows-ai-tooling/.gitattributes.template +49 -0
- package/skills/shared/windows-ai-tooling/AGENTS_WINDOWS.md.template +42 -0
- package/skills/shared/writing-great-skills/GLOSSARY.md +201 -0
- 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/tests/package-files.test.ts +5 -2
- package/src/tests/stack-profile.test.ts +4 -0
- 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.5",
|
|
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",
|
|
@@ -173,7 +163,7 @@
|
|
|
173
163
|
"devDependencies": {
|
|
174
164
|
"@types/node": "^24.0.0",
|
|
175
165
|
"@warpgogol/werkstatt-shared": "*",
|
|
176
|
-
"@warpgogol/werkstatt": "
|
|
166
|
+
"@warpgogol/werkstatt": "*",
|
|
177
167
|
"eslint": "^10.8.0",
|
|
178
168
|
"fast-check": "^4.9.0",
|
|
179
169
|
"typescript": "^6.0.3",
|
|
@@ -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`.
|
|
@@ -276,6 +276,45 @@ When a pipeline step fails and cannot be auto-fixed within 2 attempts (per §Com
|
|
|
276
276
|
|
|
277
277
|
The error checkpoint doubles as a resume marker: when resuming an interrupted session, scan for the last error checkpoint. If found, resume from the failed step using the partialState and resumePoint fields.
|
|
278
278
|
|
|
279
|
+
## Pipeline continuation
|
|
280
|
+
|
|
281
|
+
When a pipeline step completes (audit, enhance, plan), the agent MUST proactively suggest the next step and offer to proceed. This is NOT automatic chaining — the agent asks the operator first. This applies when the operator is manually driving the pipeline step by step.
|
|
282
|
+
|
|
283
|
+
### After audit completes
|
|
284
|
+
|
|
285
|
+
The audit report is persisted and committed. The agent MUST:
|
|
286
|
+
|
|
287
|
+
1. Present the audit summary.
|
|
288
|
+
2. State: "The next pipeline step is `fo-idea-enhance` — it applies the audit findings to the RFC."
|
|
289
|
+
3. Ask: "Proceed to enhance?" using `ask_user_question` with "Yes, enhance" as the recommended option.
|
|
290
|
+
4. If the operator says yes, invoke `fo-idea-enhance` via the `skill` tool.
|
|
291
|
+
|
|
292
|
+
### After enhance completes
|
|
293
|
+
|
|
294
|
+
The enhanced RFC is committed. The agent MUST:
|
|
295
|
+
|
|
296
|
+
1. Present the enhancement summary.
|
|
297
|
+
2. State: "The next pipeline step is `fo-idea-plan` — it transitions the RFC to accepted and creates the implementation plan."
|
|
298
|
+
3. Ask: "Proceed to plan?" using `ask_user_question` with "Yes, plan" as the recommended option.
|
|
299
|
+
4. If the operator says yes, invoke `fo-idea-plan` via the `skill` tool.
|
|
300
|
+
|
|
301
|
+
### After plan completes
|
|
302
|
+
|
|
303
|
+
The plan is committed. The agent MUST:
|
|
304
|
+
|
|
305
|
+
1. Present the plan summary.
|
|
306
|
+
2. State: "The next pipeline step is `fo-idea-implement` — it executes the plan and stamps the RFC as implemented."
|
|
307
|
+
3. Ask: "Proceed to implement?" using `ask_user_question` with "Yes, implement" as the recommended option.
|
|
308
|
+
4. If the operator says yes, invoke `fo-idea-implement` via the `skill` tool.
|
|
309
|
+
|
|
310
|
+
### Exception: orchestrator skills
|
|
311
|
+
|
|
312
|
+
When the pipeline is driven by `fo-idea-i-just-want-to-see-the-result` or `fo-idea-i-just-want-to-see-the-plan`, the orchestrator handles chaining automatically. The continuation suggestion is NOT emitted — the orchestrator's "no pauses between pipeline steps" rule applies.
|
|
313
|
+
|
|
314
|
+
### Exception: operator declines
|
|
315
|
+
|
|
316
|
+
If the operator declines the continuation suggestion, the agent stops. The operator can invoke the next step manually later. Do not re-ask.
|
|
317
|
+
|
|
279
318
|
## Batch plan preview
|
|
280
319
|
|
|
281
320
|
When the orchestrator skill processes multiple documents (>=2), emit a batch plan preview before starting the first document. The preview is a table showing: processing order, document id, type, complexity estimate, dependencies, and notes.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# WG Pipeline Prerequisites & Batch Processing
|
|
2
|
+
|
|
3
|
+
Reference for `fo-idea-audit`, `fo-idea-enhance`, `fo-idea-plan`, `fo-idea-implement`. These skills share identical input parsing, prerequisite checks, and batch loop behavior.
|
|
4
|
+
|
|
5
|
+
## Input parsing
|
|
6
|
+
|
|
7
|
+
The operator may provide:
|
|
8
|
+
|
|
9
|
+
- **A single id**: `RFC-0362`, `ADR-0003`, a filename, or a path.
|
|
10
|
+
- **A comma-separated list**: `RFC-0355, RFC-0356, RFC-0357` — process each in order.
|
|
11
|
+
- **A range**: `RFC-0355..RFC-0360` or `от RFC-0355 до RFC-0360` — discover all files in `docs/rfcs/` whose numeric id falls within the inclusive range, sort ascending, and process each in order. Ranges are only valid within a single document type (RFC or ADR).
|
|
12
|
+
- **Nothing**: if a document file is open in the IDE, use it. Otherwise, ask.
|
|
13
|
+
|
|
14
|
+
## Common prerequisite checks
|
|
15
|
+
|
|
16
|
+
Run these **in order** for each document. If any check fails, record the document as **skipped** in the batch summary with the reason, and immediately proceed to the next document. Do not stop the entire batch — skip and report.
|
|
17
|
+
|
|
18
|
+
1. **Prefix check** — if the id starts with `ADR-` and this skill handles RFCs only, skip with: `ADR-XXXX is an ADR, not an RFC. ADRs do not have <this step>. The ADR pipeline is: create → implement (includes review → fix). Run /fo-idea-implement ADR-XXXX to implement.`
|
|
19
|
+
|
|
20
|
+
If the id starts with `RFC-` and this skill handles ADRs only, skip with: `RFC-XXXX is an RFC, not an ADR. Use the RFC pipeline: create → audit → enhance → plan → implement (includes review → fix).`
|
|
21
|
+
|
|
22
|
+
2. **File exists** — look for `docs/rfcs/rfc-XXXX-*.md` (or `docs/adrs/adr-XXXX-*.md` for ADRs). If no file is found, skip with: `RFC-XXXX not found in docs/rfcs/. Run /fo-idea-create-rfc first.`
|
|
23
|
+
|
|
24
|
+
3. **Terminal status check** — read the document's `status` frontmatter. If the status is `implemented`, skip with: `RFC-XXXX is already implemented. Nothing to do.` If the status is `rejected` or `superseded`, skip with: `RFC-XXXX is <status> (terminal). Terminal RFCs cannot be <this action>. To change this decision, create a new RFC with supersedes: [RFC-XXXX] via /fo-idea-create-rfc.`
|
|
25
|
+
|
|
26
|
+
## Skill-specific prerequisite checks
|
|
27
|
+
|
|
28
|
+
After the common checks, each skill adds its own:
|
|
29
|
+
|
|
30
|
+
### fo-idea-audit
|
|
31
|
+
|
|
32
|
+
No additional checks.
|
|
33
|
+
|
|
34
|
+
### fo-idea-enhance
|
|
35
|
+
|
|
36
|
+
4. **Accepted status check** — if the status is `accepted`, skip with: `RFC-XXXX is accepted. Accepted RFCs cannot be edited in place. Run /fo-idea-create-rfc with amends: [RFC-XXXX] to create an amending RFC, or supersedes: [RFC-XXXX] to create a superseding RFC.`
|
|
37
|
+
|
|
38
|
+
### fo-idea-plan
|
|
39
|
+
|
|
40
|
+
4. **Audit check** — look for `docs/audits/audit-rfc-XXXX-*.md`. If no audit file exists, skip with: `No audit report found for RFC-XXXX in docs/audits/. Run /fo-idea-audit RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement (includes review → fix).`
|
|
41
|
+
|
|
42
|
+
5. **Enhance check** — read the RFC's frontmatter and look for the `enhancedAt` field. If `enhancedAt` is absent, skip with: `RFC-XXXX has not been enhanced (no enhancedAt in frontmatter). Run /fo-idea-enhance RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement (includes review → fix).`
|
|
43
|
+
|
|
44
|
+
6. **Accepted status check** — if the status is `accepted` and both audit and enhance are done, prerequisites are met. If the status is `draft` or `reviewing` and has `enhancedAt`, the user's instruction to plan IS the architecture acceptance — proceed to the draft→accepted transition.
|
|
45
|
+
|
|
46
|
+
### fo-idea-implement
|
|
47
|
+
|
|
48
|
+
4. **Audit check** — look for `docs/audits/audit-rfc-XXXX-*.md`. If no audit file exists, skip with: `No audit report found for RFC-XXXX in docs/audits/. Run /fo-idea-audit RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement (includes review → fix).`
|
|
49
|
+
|
|
50
|
+
5. **Enhance check** — read the RFC's frontmatter and look for the `enhancedAt` field. If `enhancedAt` is absent, skip with: `RFC-XXXX has not been enhanced (no enhancedAt in frontmatter). Run /fo-idea-enhance RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement (includes review → fix).`
|
|
51
|
+
|
|
52
|
+
6. **Accepted status check** — if the status is not `accepted` (e.g. `draft` or `reviewing`), skip with: `RFC-XXXX is <status>, not accepted. Run /fo-idea-plan RFC-XXXX first — it will transition the RFC to accepted and create the plan. The pipeline is: create → audit → enhance → plan → implement (includes review → fix).`
|
|
53
|
+
|
|
54
|
+
7. **Plan check** — look for `docs/plans/plan-rfc-XXXX-*.md`. If no plan file exists, skip with: `No plan file found for RFC-XXXX in docs/plans/. Run /fo-idea-plan RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement (includes review → fix).`
|
|
55
|
+
|
|
56
|
+
## Batch processing
|
|
57
|
+
|
|
58
|
+
When multiple documents are identified, **loop through each one** and run the full skill process for each sequentially **without pauses between documents**. Do not stop, present a summary, or ask the user between documents — once the work for one document is committed (or it is skipped), immediately proceed to the next document. **Do not emit transition messages such as "Moving to RFC-XXXX next" or per-document status reports during the loop.** Internal status is fine, but nothing is shown to the user until the very end. Only after all documents are processed, print a single final batch summary.
|
|
59
|
+
|
|
60
|
+
**Exception:** Interactive steps within a skill (grilling, resolving open questions) are inherently interactive — they may require user responses. This is not a "pause between documents" but a required step within one document's processing. Resolve all interactions for the current document before proceeding to the next.
|
|
61
|
+
|
|
62
|
+
## Batch summary format
|
|
63
|
+
|
|
64
|
+
After all documents are processed, present a single batch summary:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
## Batch <Action> Summary
|
|
68
|
+
|
|
69
|
+
### Documents requested: <N>
|
|
70
|
+
### Documents processed: <N>
|
|
71
|
+
### Documents skipped: <list with reason>
|
|
72
|
+
|
|
73
|
+
| ID | Type | Status | <action-specific columns> |
|
|
74
|
+
|---|---|---|---|
|
|
75
|
+
| RFC-0355 | RFC | <result> | ... |
|
|
76
|
+
| ADR-0003 | ADR | <result> | ... |
|
|
77
|
+
|
|
78
|
+
### Total commits: <count>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Do not output per-document summaries or "Moving to XXXX next" messages during the loop; they belong here, at the very end.
|
|
@@ -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
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Audit Axes
|
|
2
|
+
|
|
3
|
+
Load this file when running step 4 of `fo-idea-audit`. For each axis, check every item. An item either **passes**, **fails** (specific finding with evidence), or is **not applicable** (state why). Skip N/A items silently — do not pad the report.
|
|
4
|
+
|
|
5
|
+
## Axis A — Structural completeness
|
|
6
|
+
|
|
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
|
+
|
|
9
|
+
- **Decision** is a single decision in present tense ("The kernel gains…"), not a wishlist or "we should".
|
|
10
|
+
- **CLI surface** shows exact project CLI invocations with flags and scope.
|
|
11
|
+
- **TypeScript contracts** are minimal type signatures, not full implementations.
|
|
12
|
+
- **File system responsibilities** table names concrete paths the RFC touches.
|
|
13
|
+
- **Output format** documents the `--json` shape.
|
|
14
|
+
- **Failure modes** specifies exit codes and warn-vs-fail behavior.
|
|
15
|
+
- **Rollout** describes default behavior, adoption path for existing apps, and new-app compliance.
|
|
16
|
+
- **Alternatives considered** is honest — at least one real alternative with a rejection reason.
|
|
17
|
+
- **Risks** includes agent misinterpretation risk and false-positive rate for validators.
|
|
18
|
+
- **Acceptance criteria** items are checkable (can an agent or human verify each one?) and sufficient (do they cover the decision's full scope?).
|
|
19
|
+
- **Implementation notes for agents** are explicit behavioral rules, not vague guidance.
|
|
20
|
+
|
|
21
|
+
## Axis B — DNA alignment
|
|
22
|
+
|
|
23
|
+
- Each entry in `satisfies[]` is a real DNA invariant in `docs/architecture-dna.md`, and the RFC body explains **how** it enforces, protects, or extends that invariant — not just that it's "related".
|
|
24
|
+
- If the RFC establishes a new DNA invariant (body says "DNA-N established by this RFC"), the audit confirms `docs/architecture-dna.md` will need a new `## DNA-N` entry and the RFC's `satisfies[]` includes it.
|
|
25
|
+
- The RFC does not silently conflict with any existing DNA invariant. If it changes a DNA invariant, it must `supersede` the establishing RFC — not amend it.
|
|
26
|
+
- `related[]` DNA references are relevant and not decorative.
|
|
27
|
+
|
|
28
|
+
## Axis C — Ecosystem fit
|
|
29
|
+
|
|
30
|
+
- **Package boundaries**: imports flow `apps/* → packages/*` and `services/* → packages/*`, never `apps/* → apps/*` or `apps/* → services/*` (DNA-1). If the RFC proposes a new package, it belongs in `packages/*`.
|
|
31
|
+
- **Pipeline placement**: the RFC names the correct pipeline for each new check — `build.prepare`, `build.check`, `sites-check`, `sites-check-postbuild` — and the choice is justified (blocking vs. advisory).
|
|
32
|
+
- **Compass sync**: if the RFC changes repository-wide requirements, shared package contracts, or app-package relationships, it identifies which `docs/*.xml` files need synchronization (root AGENTS.md Compass document duties).
|
|
33
|
+
- **AGENTS.md updates**: the RFC identifies which `AGENTS.md` files need rule updates (root, `apps/`, `packages/`, `services/`, or site-specific).
|
|
34
|
+
- **Cosmic naming**: if the RFC touches manifests or component/section/page contracts, it addresses the three-way alignment (manifest `cosmicName` ↔ `PLANET_IMPORT_PATHS`/`MOON_IMPORT_PATHS` ↔ `system.md` pins).
|
|
35
|
+
- **Command lifecycle**: `commands.proposed/added/changed/removed` buckets are internally consistent — proposed commands that the RFC introduces will land in `added` upon implementation; changed commands are existing registered commands; removed commands are explicitly deprecated.
|
|
36
|
+
|
|
37
|
+
## Axis D — Forward-only compliance
|
|
38
|
+
|
|
39
|
+
This ecosystem is forward-only — no backward compatibility layers, no expand-then-contract migrations. Check:
|
|
40
|
+
|
|
41
|
+
- The RFC does not propose a compatibility shim, bridge, or dual-path that keeps legacy behavior alive alongside the new one.
|
|
42
|
+
- Deprecation means removal in the same RFC wave, not an indefinite grace period.
|
|
43
|
+
- If the RFC amends another RFC, it changes the amended RFC's contract directly — it does not add a parallel interpretation.
|
|
44
|
+
- Legacy code paths are deleted, not maintained behind a flag.
|
|
45
|
+
|
|
46
|
+
## Axis E — Agent-facing policy
|
|
47
|
+
|
|
48
|
+
- **Status gate**: the RFC does not contain self-authorizing language ("may proceed while draft", "implementation can start before acceptance"). Draft RFCs cannot grant implementation permission.
|
|
49
|
+
- **Implementation notes** reference the correct governance rules: RFC-0224 (accepted→implemented transition), RFC-0230 (if touching agent surface), RFC-0334 (supersede escalation on invariant conflict), RFC-0330 (verification evidence for probe-bearing RFCs).
|
|
50
|
+
- **Anti-fabrication**: if the RFC's acceptance criteria include content authoring (prose, business records, claims), the criteria distinguish between code changes an agent can make and content that requires human authoring. The RFC must not claim content will be "auto-generated" when it requires human authoring.
|
|
51
|
+
- **Storage policy**: if the RFC touches persistence, it does not introduce cookies (`document.cookie`, `Set-Cookie`). Client-side persistence is `localStorage` only; server-side is `unstorage`.
|
|
52
|
+
|
|
53
|
+
## Axis F — Pragmatism
|
|
54
|
+
|
|
55
|
+
- **Minimal command surface**: each proposed command earns its existence — no command that could be a flag on an existing command, no command that duplicates an existing command's scope.
|
|
56
|
+
- **Lean contracts**: TypeScript types are the minimum needed to understand the shape — no speculative generality, no unused optional fields, no abstraction for needs the RFC doesn't have.
|
|
57
|
+
- **Existing patterns**: the RFC checks whether an existing command, schema, or pattern can be extended before proposing a new one. If a new one is proposed, the alternatives section explains why extension was insufficient.
|
|
58
|
+
- **Scope discipline**: `appsImpacted` and `packagesImpacted` list only what's actually impacted. `nonGoals` are explicit and meaningful, not boilerplate.
|
|
59
|
+
|
|
60
|
+
## Axis G — Blind spots
|
|
61
|
+
|
|
62
|
+
- **Performance**: build-time commands specify their cost (file scan count, regex complexity, I/O patterns). A command that scans all `apps/**` on every `build.check` is a bottleneck.
|
|
63
|
+
- **False positives**: validators estimate their false-positive rate and describe how to suppress noise during migration.
|
|
64
|
+
- **Edge cases**: the RFC considers empty states (new app with no content, package with no manifests), concurrent execution (two builds, two agents), and interrupted operations (crash mid-write).
|
|
65
|
+
- **Migration path**: existing apps' path to compliance is documented — do they pass without changes, or is there a documented migration window?
|
|
66
|
+
- **Security/privacy**: if the RFC touches user data, PII, or external services, it addresses GDPR/privacy implications and secret management (no hardcoded keys, env vars documented in `.env.example` per DNA-40).
|
|
@@ -236,9 +236,9 @@ Semantic audit of RFC-XXXX (<title>). Verdict: <approved | needs-revision | reje
|
|
|
236
236
|
|
|
237
237
|
Stage only the audit file — do not stage unrelated changes. Another agent may be working in a different session; `git add -A` or `git add .` is forbidden.
|
|
238
238
|
|
|
239
|
-
### 8. Stop
|
|
239
|
+
### 8. Stop and suggest next step
|
|
240
240
|
|
|
241
|
-
Do not modify the RFC or any other file.
|
|
241
|
+
Do not modify the RFC or any other file. Present the report. Then follow the pipeline continuation protocol per `_shared/fo-pipeline-conventions.md` §Pipeline continuation — proactively suggest the next step (`fo-idea-enhance`) and offer to proceed via `ask_user_question`. Do not automatically run the next skill — ask the operator first. The full pipeline is: create → audit → enhance → plan → implement.
|
|
242
242
|
|
|
243
243
|
## Constraints
|
|
244
244
|
|
|
@@ -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)
|