@warpgogol/forge 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/AGENTS.md +123 -5
  2. package/dist/bin/cli.js +0 -0
  3. package/dist/os/adr/handlers/validate.d.ts.map +1 -1
  4. package/dist/os/adr/handlers/validate.js +31 -3
  5. package/dist/os/adr/handlers/validate.js.map +1 -1
  6. package/dist/os/core/core.module.d.ts.map +1 -1
  7. package/dist/os/core/core.module.js +76 -2
  8. package/dist/os/core/core.module.js.map +1 -1
  9. package/dist/os/core/handlers/knowledge-compact.d.ts +4 -0
  10. package/dist/os/core/handlers/knowledge-compact.d.ts.map +1 -0
  11. package/dist/os/core/handlers/knowledge-compact.js +198 -0
  12. package/dist/os/core/handlers/knowledge-compact.js.map +1 -0
  13. package/dist/os/mission/handlers/archive.d.ts.map +1 -1
  14. package/dist/os/mission/handlers/archive.js +6 -0
  15. package/dist/os/mission/handlers/archive.js.map +1 -1
  16. package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -1
  17. package/dist/os/rfc/handlers/lifecycle.js +3 -4
  18. package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
  19. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  20. package/dist/os/rfc/handlers/validate-rules.js +41 -3
  21. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  22. package/dist/os/spec/spec-schema.d.ts +1 -1
  23. package/dist/src/config/forge-config.d.ts +67 -3
  24. package/dist/src/config/forge-config.d.ts.map +1 -1
  25. package/dist/src/config/forge-config.js +86 -2
  26. package/dist/src/config/forge-config.js.map +1 -1
  27. package/dist/src/index.d.ts +3 -1
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +6 -2
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/knowledge/budgets.d.ts +38 -0
  32. package/dist/src/knowledge/budgets.d.ts.map +1 -0
  33. package/dist/src/knowledge/budgets.js +157 -0
  34. package/dist/src/knowledge/budgets.js.map +1 -0
  35. package/dist/src/knowledge/compact.d.ts +47 -0
  36. package/dist/src/knowledge/compact.d.ts.map +1 -0
  37. package/dist/src/knowledge/compact.js +322 -0
  38. package/dist/src/knowledge/compact.js.map +1 -0
  39. package/dist/src/knowledge/index.d.ts +7 -0
  40. package/dist/src/knowledge/index.d.ts.map +1 -0
  41. package/dist/src/knowledge/index.js +19 -0
  42. package/dist/src/knowledge/index.js.map +1 -0
  43. package/dist/src/knowledge/parse.d.ts +3 -0
  44. package/dist/src/knowledge/parse.d.ts.map +1 -0
  45. package/dist/src/knowledge/parse.js +205 -0
  46. package/dist/src/knowledge/parse.js.map +1 -0
  47. package/dist/src/knowledge/promote.d.ts +37 -0
  48. package/dist/src/knowledge/promote.d.ts.map +1 -0
  49. package/dist/src/knowledge/promote.js +120 -0
  50. package/dist/src/knowledge/promote.js.map +1 -0
  51. package/dist/src/knowledge/schema.d.ts +61 -0
  52. package/dist/src/knowledge/schema.d.ts.map +1 -0
  53. package/dist/src/knowledge/schema.js +64 -0
  54. package/dist/src/knowledge/schema.js.map +1 -0
  55. package/dist/src/knowledge/serialize.d.ts +3 -0
  56. package/dist/src/knowledge/serialize.d.ts.map +1 -0
  57. package/dist/src/knowledge/serialize.js +67 -0
  58. package/dist/src/knowledge/serialize.js.map +1 -0
  59. package/dist/src/onboarding/agents-generate.d.ts +15 -0
  60. package/dist/src/onboarding/agents-generate.d.ts.map +1 -1
  61. package/dist/src/onboarding/agents-generate.js +148 -241
  62. package/dist/src/onboarding/agents-generate.js.map +1 -1
  63. package/dist/src/onboarding/create.d.ts.map +1 -1
  64. package/dist/src/onboarding/create.js +62 -3
  65. package/dist/src/onboarding/create.js.map +1 -1
  66. package/dist/src/onboarding/doctor.d.ts +13 -1
  67. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  68. package/dist/src/onboarding/doctor.js +527 -11
  69. package/dist/src/onboarding/doctor.js.map +1 -1
  70. package/dist/src/onboarding/init.d.ts +8 -1
  71. package/dist/src/onboarding/init.d.ts.map +1 -1
  72. package/dist/src/onboarding/init.js +33 -2
  73. package/dist/src/onboarding/init.js.map +1 -1
  74. package/dist/src/onboarding/memory-scaffold.d.ts +18 -0
  75. package/dist/src/onboarding/memory-scaffold.d.ts.map +1 -0
  76. package/dist/src/onboarding/memory-scaffold.js +151 -0
  77. package/dist/src/onboarding/memory-scaffold.js.map +1 -0
  78. package/dist/src/onboarding/nested-agents-generate.d.ts +6 -2
  79. package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
  80. package/dist/src/onboarding/nested-agents-generate.js +34 -9
  81. package/dist/src/onboarding/nested-agents-generate.js.map +1 -1
  82. package/dist/src/onboarding/nested-agents-templates.d.ts +23 -1
  83. package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -1
  84. package/dist/src/onboarding/nested-agents-templates.js +138 -8
  85. package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
  86. package/dist/src/onboarding/profile-validate.d.ts +13 -0
  87. package/dist/src/onboarding/profile-validate.d.ts.map +1 -0
  88. package/dist/src/onboarding/profile-validate.js +109 -0
  89. package/dist/src/onboarding/profile-validate.js.map +1 -0
  90. package/dist/src/onboarding/upgrade.d.ts +5 -0
  91. package/dist/src/onboarding/upgrade.d.ts.map +1 -1
  92. package/dist/src/onboarding/upgrade.js +27 -1
  93. package/dist/src/onboarding/upgrade.js.map +1 -1
  94. package/dist/src/onboarding/workspace-discovery.d.ts +4 -3
  95. package/dist/src/onboarding/workspace-discovery.d.ts.map +1 -1
  96. package/dist/src/onboarding/workspace-discovery.js +51 -3
  97. package/dist/src/onboarding/workspace-discovery.js.map +1 -1
  98. package/dist/src/profiles/profile-schema.d.ts +116 -0
  99. package/dist/src/profiles/profile-schema.d.ts.map +1 -0
  100. package/dist/src/profiles/profile-schema.js +94 -0
  101. package/dist/src/profiles/profile-schema.js.map +1 -0
  102. package/dist/src/profiles/stack-profile.d.ts +41 -1
  103. package/dist/src/profiles/stack-profile.d.ts.map +1 -1
  104. package/dist/src/profiles/stack-profile.js +9 -0
  105. package/dist/src/profiles/stack-profile.js.map +1 -1
  106. package/dist/src/profiles/terminology-utils.d.ts +8 -0
  107. package/dist/src/profiles/terminology-utils.d.ts.map +1 -0
  108. package/dist/src/profiles/terminology-utils.js +31 -0
  109. package/dist/src/profiles/terminology-utils.js.map +1 -0
  110. package/dist/src/validators/skill-validate.d.ts +15 -0
  111. package/dist/src/validators/skill-validate.d.ts.map +1 -1
  112. package/dist/src/validators/skill-validate.js +204 -2
  113. package/dist/src/validators/skill-validate.js.map +1 -1
  114. package/package.json +71 -163
  115. package/profiles/astro-typescript-turborepo.yaml +87 -0
  116. package/profiles/editframe-html-templates/composition-agents.md +34 -0
  117. package/profiles/editframe-html-templates/composition.html +32 -0
  118. package/profiles/editframe-html.yaml +283 -0
  119. package/profiles/forge-shell.yaml +77 -0
  120. package/profiles/phaser-turborepo.yaml +87 -0
  121. package/skills/fo/fo-doc-audit/SKILL.md +6 -6
  122. package/skills/fo/fo-handoff/SKILL.md +2 -1
  123. package/skills/fo/fo-idea-implement/SKILL.md +44 -2
  124. package/skills/fo/fo-idea-plan/SKILL.md +1 -0
  125. package/skills/fo/fo-knowledge-distill/SKILL.md +170 -0
  126. package/skills/fo/fo-memory-sync/SKILL.md +6 -3
  127. package/skills/fo/fo-memory-sync/fix-patterns.md +38 -4
  128. package/skills/fo/fo-review/SKILL.md +2 -2
  129. package/skills/fo/fo-session-retro/SKILL.md +21 -11
  130. package/skills/fo/fo-session-save/SKILL.md +1 -1
  131. package/skills/fo/fo-session-save/fix-patterns.md +53 -29
  132. package/skills/fo/fo-session-save/learned-principles.md +59 -8
  133. package/skills/meta/forge-bootstrap/SKILL.md +16 -4
  134. package/skills/meta/forge-bootstrap/operator-profile-template.md +1 -0
  135. package/skills/meta/skill-create/SKILL.md +1 -1
  136. package/skills/shared/grilling/SKILL.md +1 -1
  137. package/skills/shared/grilling/learned-principles.md +14 -0
  138. package/skills/shared/grilling/qa-log.md +105 -6
  139. package/skills/shared/knowledge/learned-principles.md +5 -0
  140. package/skills/shared/windows-ai-tooling/SKILL.md +154 -1
  141. package/skills/shared/writing-great-skills/SKILL.md +74 -1
  142. package/src/onboarding/templates/behavioral-layer-core.md +159 -0
  143. package/src/onboarding/templates/behavioral-layer-extended.md +45 -0
  144. package/src/onboarding/templates/root-agents-business.md +32 -0
  145. package/src/onboarding/templates/root-agents-creative.md +32 -0
  146. package/dist/src/onboarding/extended-behavioral-layer.d.ts +0 -10
  147. package/dist/src/onboarding/extended-behavioral-layer.d.ts.map +0 -1
  148. package/dist/src/onboarding/extended-behavioral-layer.js +0 -82
  149. package/dist/src/onboarding/extended-behavioral-layer.js.map +0 -1
package/package.json CHANGED
@@ -1,11 +1,19 @@
1
1
  {
2
2
  "name": "@warpgogol/forge",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "description": "Framework for documenting and implementing ideas — RFC/ADR governance, skills, and project bootstrapping.",
8
- "keywords": ["rfc", "adr", "governance", "skills", "ai-agent", "documentation", "framework"],
8
+ "keywords": [
9
+ "rfc",
10
+ "adr",
11
+ "governance",
12
+ "skills",
13
+ "ai-agent",
14
+ "documentation",
15
+ "framework"
16
+ ],
9
17
  "homepage": "https://github.com/syrokomskyi/warpgogol-4#readme",
10
18
  "repository": {
11
19
  "type": "git",
@@ -15,107 +23,107 @@
15
23
  "bugs": {
16
24
  "url": "https://github.com/syrokomskyi/warpgogol-4/issues"
17
25
  },
18
- "main": "./src/index.ts",
19
- "types": "./src/index.ts",
26
+ "main": "./dist/src/index.js",
27
+ "types": "./dist/src/index.d.ts",
20
28
  "bin": {
21
29
  "forge": "./bin/cli.js"
22
30
  },
23
31
  "exports": {
24
32
  ".": {
25
- "types": "./src/index.ts",
26
- "default": "./src/index.ts"
33
+ "types": "./dist/src/index.d.ts",
34
+ "default": "./dist/src/index.js"
27
35
  },
28
36
  "./types": {
29
- "types": "./src/types.ts",
30
- "default": "./src/types.ts"
37
+ "types": "./dist/src/types.d.ts",
38
+ "default": "./dist/src/types.js"
31
39
  },
32
40
  "./utils": {
33
- "types": "./src/utils/index.ts",
34
- "default": "./src/utils/index.ts"
41
+ "types": "./dist/src/utils/index.d.ts",
42
+ "default": "./dist/src/utils/index.js"
35
43
  },
36
44
  "./config": {
37
- "types": "./src/config/forge-config.ts",
38
- "default": "./src/config/forge-config.ts"
45
+ "types": "./dist/src/config/forge-config.d.ts",
46
+ "default": "./dist/src/config/forge-config.js"
39
47
  },
40
48
  "./os/core": {
41
- "types": "./os/core/core.module.ts",
42
- "default": "./os/core/core.module.ts"
49
+ "types": "./dist/os/core/core.module.d.ts",
50
+ "default": "./dist/os/core/core.module.js"
43
51
  },
44
52
  "./os/compass": {
45
- "types": "./os/compass/index.ts",
46
- "default": "./os/compass/index.ts"
53
+ "types": "./dist/os/compass/index.d.ts",
54
+ "default": "./dist/os/compass/index.js"
47
55
  },
48
56
  "./os/naming": {
49
- "types": "./os/naming/index.ts",
50
- "default": "./os/naming/index.ts"
57
+ "types": "./dist/os/naming/index.d.ts",
58
+ "default": "./dist/os/naming/index.js"
51
59
  },
52
60
  "./os/naming-module": {
53
- "types": "./os/naming/naming.module.ts",
54
- "default": "./os/naming/naming.module.ts"
61
+ "types": "./dist/os/naming/naming.module.d.ts",
62
+ "default": "./dist/os/naming/naming.module.js"
55
63
  },
56
64
  "./os/rfc": {
57
- "types": "./os/rfc/index.ts",
58
- "default": "./os/rfc/index.ts"
65
+ "types": "./dist/os/rfc/index.d.ts",
66
+ "default": "./dist/os/rfc/index.js"
59
67
  },
60
68
  "./os/rfc-module": {
61
- "types": "./os/rfc/rfc.module.ts",
62
- "default": "./os/rfc/rfc.module.ts"
69
+ "types": "./dist/os/rfc/rfc.module.d.ts",
70
+ "default": "./dist/os/rfc/rfc.module.js"
63
71
  },
64
72
  "./os/werkstatt": {
65
- "types": "./os/werkstatt/index.ts",
66
- "default": "./os/werkstatt/index.ts"
73
+ "types": "./dist/os/werkstatt/index.d.ts",
74
+ "default": "./dist/os/werkstatt/index.js"
67
75
  },
68
76
  "./os/workflow": {
69
- "types": "./os/workflow/index.ts",
70
- "default": "./os/workflow/index.ts"
77
+ "types": "./dist/os/workflow/index.d.ts",
78
+ "default": "./dist/os/workflow/index.js"
71
79
  },
72
80
  "./os/workflow-module": {
73
- "types": "./os/workflow/workflow.module.ts",
74
- "default": "./os/workflow/workflow.module.ts"
81
+ "types": "./dist/os/workflow/workflow.module.d.ts",
82
+ "default": "./dist/os/workflow/workflow.module.js"
75
83
  },
76
84
  "./os/spec-module": {
77
- "types": "./os/spec/spec.module.ts",
78
- "default": "./os/spec/spec.module.ts"
85
+ "types": "./dist/os/spec/spec.module.d.ts",
86
+ "default": "./dist/os/spec/spec.module.js"
79
87
  },
80
88
  "./os/adr": {
81
- "types": "./os/adr/index.ts",
82
- "default": "./os/adr/index.ts"
89
+ "types": "./dist/os/adr/index.d.ts",
90
+ "default": "./dist/os/adr/index.js"
83
91
  },
84
92
  "./os/adr-module": {
85
- "types": "./os/adr/adr.module.ts",
86
- "default": "./os/adr/adr.module.ts"
93
+ "types": "./dist/os/adr/adr.module.d.ts",
94
+ "default": "./dist/os/adr/adr.module.js"
87
95
  },
88
96
  "./os/plan": {
89
- "types": "./os/plan/index.ts",
90
- "default": "./os/plan/index.ts"
97
+ "types": "./dist/os/plan/index.d.ts",
98
+ "default": "./dist/os/plan/index.js"
91
99
  },
92
100
  "./os/plan-module": {
93
- "types": "./os/plan/plan.module.ts",
94
- "default": "./os/plan/plan.module.ts"
101
+ "types": "./dist/os/plan/plan.module.d.ts",
102
+ "default": "./dist/os/plan/plan.module.js"
95
103
  },
96
104
  "./os/audit": {
97
- "types": "./os/audit/index.ts",
98
- "default": "./os/audit/index.ts"
105
+ "types": "./dist/os/audit/index.d.ts",
106
+ "default": "./dist/os/audit/index.js"
99
107
  },
100
108
  "./os/audit-module": {
101
- "types": "./os/audit/audit.module.ts",
102
- "default": "./os/audit/audit.module.ts"
109
+ "types": "./dist/os/audit/audit.module.d.ts",
110
+ "default": "./dist/os/audit/audit.module.js"
103
111
  },
104
112
  "./os/session": {
105
- "types": "./os/session/index.ts",
106
- "default": "./os/session/index.ts"
113
+ "types": "./dist/os/session/index.d.ts",
114
+ "default": "./dist/os/session/index.js"
107
115
  },
108
116
  "./os/session-module": {
109
- "types": "./os/session/session.module.ts",
110
- "default": "./os/session/session.module.ts"
117
+ "types": "./dist/os/session/session.module.d.ts",
118
+ "default": "./dist/os/session/session.module.js"
111
119
  },
112
120
  "./os/mission": {
113
- "types": "./os/mission/index.ts",
114
- "default": "./os/mission/index.ts"
121
+ "types": "./dist/os/mission/index.d.ts",
122
+ "default": "./dist/os/mission/index.js"
115
123
  },
116
124
  "./os/mission-module": {
117
- "types": "./os/mission/mission.module.ts",
118
- "default": "./os/mission/mission.module.ts"
125
+ "types": "./dist/os/mission/mission.module.d.ts",
126
+ "default": "./dist/os/mission/mission.module.js"
119
127
  }
120
128
  },
121
129
  "files": [
@@ -123,24 +131,17 @@
123
131
  "bin/cli.js",
124
132
  "skills/",
125
133
  "profiles/",
134
+ "src/onboarding/templates/",
126
135
  "os/rfc/rfc-0000-template.md",
127
136
  "AGENTS.md",
128
137
  "README.md"
129
138
  ],
130
- "scripts": {
131
- "build": "pnpm exec tsc -p tsconfig.json",
132
- "build:check": "pnpm exec tsc -p tsconfig.json --noEmit",
133
- "clean": "rm -rf dist",
134
- "prepublishOnly": "pnpm run clean && pnpm run build && node scripts/publish-check.mjs",
135
- "test": "vitest run --passWithNoTests",
136
- "test:watch": "vitest"
137
- },
138
139
  "dependencies": {
139
140
  "yaml": "^2.9.0",
140
141
  "zod": "^4.4.3"
141
142
  },
142
143
  "devDependencies": {
143
- "@types/node": "^26.1.1",
144
+ "@types/node": "^26.1.2",
144
145
  "fast-check": "^4.9.0",
145
146
  "typescript": "^6.0.3",
146
147
  "vitest": "^4.1.10"
@@ -149,106 +150,13 @@
149
150
  "node": ">=18.0.0"
150
151
  },
151
152
  "publishConfig": {
152
- "access": "public",
153
- "main": "./dist/src/index.js",
154
- "types": "./dist/src/index.d.ts",
155
- "exports": {
156
- ".": {
157
- "types": "./dist/src/index.d.ts",
158
- "default": "./dist/src/index.js"
159
- },
160
- "./types": {
161
- "types": "./dist/src/types.d.ts",
162
- "default": "./dist/src/types.js"
163
- },
164
- "./utils": {
165
- "types": "./dist/src/utils/index.d.ts",
166
- "default": "./dist/src/utils/index.js"
167
- },
168
- "./config": {
169
- "types": "./dist/src/config/forge-config.d.ts",
170
- "default": "./dist/src/config/forge-config.js"
171
- },
172
- "./os/core": {
173
- "types": "./dist/os/core/core.module.d.ts",
174
- "default": "./dist/os/core/core.module.js"
175
- },
176
- "./os/compass": {
177
- "types": "./dist/os/compass/index.d.ts",
178
- "default": "./dist/os/compass/index.js"
179
- },
180
- "./os/naming": {
181
- "types": "./dist/os/naming/index.d.ts",
182
- "default": "./dist/os/naming/index.js"
183
- },
184
- "./os/naming-module": {
185
- "types": "./dist/os/naming/naming.module.d.ts",
186
- "default": "./dist/os/naming/naming.module.js"
187
- },
188
- "./os/rfc": {
189
- "types": "./dist/os/rfc/index.d.ts",
190
- "default": "./dist/os/rfc/index.js"
191
- },
192
- "./os/rfc-module": {
193
- "types": "./dist/os/rfc/rfc.module.d.ts",
194
- "default": "./dist/os/rfc/rfc.module.js"
195
- },
196
- "./os/werkstatt": {
197
- "types": "./dist/os/werkstatt/index.d.ts",
198
- "default": "./dist/os/werkstatt/index.js"
199
- },
200
- "./os/workflow": {
201
- "types": "./dist/os/workflow/index.d.ts",
202
- "default": "./dist/os/workflow/index.js"
203
- },
204
- "./os/workflow-module": {
205
- "types": "./dist/os/workflow/workflow.module.d.ts",
206
- "default": "./dist/os/workflow/workflow.module.js"
207
- },
208
- "./os/spec-module": {
209
- "types": "./dist/os/spec/spec.module.d.ts",
210
- "default": "./dist/os/spec/spec.module.js"
211
- },
212
- "./os/adr": {
213
- "types": "./dist/os/adr/index.d.ts",
214
- "default": "./dist/os/adr/index.js"
215
- },
216
- "./os/adr-module": {
217
- "types": "./dist/os/adr/adr.module.d.ts",
218
- "default": "./dist/os/adr/adr.module.js"
219
- },
220
- "./os/plan": {
221
- "types": "./dist/os/plan/index.d.ts",
222
- "default": "./dist/os/plan/index.js"
223
- },
224
- "./os/plan-module": {
225
- "types": "./dist/os/plan/plan.module.d.ts",
226
- "default": "./dist/os/plan/plan.module.js"
227
- },
228
- "./os/audit": {
229
- "types": "./dist/os/audit/index.d.ts",
230
- "default": "./dist/os/audit/index.js"
231
- },
232
- "./os/audit-module": {
233
- "types": "./dist/os/audit/audit.module.d.ts",
234
- "default": "./dist/os/audit/audit.module.js"
235
- },
236
- "./os/session": {
237
- "types": "./dist/os/session/index.d.ts",
238
- "default": "./dist/os/session/index.js"
239
- },
240
- "./os/session-module": {
241
- "types": "./dist/os/session/session.module.d.ts",
242
- "default": "./dist/os/session/session.module.js"
243
- },
244
- "./os/mission": {
245
- "types": "./dist/os/mission/index.d.ts",
246
- "default": "./dist/os/mission/index.js"
247
- },
248
- "./os/mission-module": {
249
- "types": "./dist/os/mission/mission.module.d.ts",
250
- "default": "./dist/os/mission/mission.module.js"
251
- }
252
- }
153
+ "access": "public"
154
+ },
155
+ "scripts": {
156
+ "build": "pnpm exec tsc -p tsconfig.json",
157
+ "build:check": "pnpm exec tsc -p tsconfig.json --noEmit",
158
+ "clean": "rm -rf dist",
159
+ "test": "vitest run --passWithNoTests",
160
+ "test:watch": "vitest"
253
161
  }
254
- }
162
+ }
@@ -55,6 +55,93 @@ workspace:
55
55
  .turbo
56
56
  .cache
57
57
  operator-profile.md
58
+ - path: .github/workflows/ci.yml
59
+ content: |
60
+ name: CI
61
+
62
+ on:
63
+ pull_request:
64
+ push:
65
+ branches: [main]
66
+ workflow_dispatch:
67
+
68
+ concurrency:
69
+ group: ${{ github.workflow }}-${{ github.ref }}
70
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
71
+
72
+ permissions:
73
+ contents: read
74
+
75
+ jobs:
76
+ ci:
77
+ runs-on: ubuntu-latest
78
+ timeout-minutes: 15
79
+ name: Lint, type-check, build, test
80
+ env:
81
+ TZ: UTC
82
+
83
+ steps:
84
+ - name: Checkout
85
+ uses: actions/checkout@v5
86
+
87
+ - name: Enable Corepack
88
+ run: corepack enable
89
+
90
+ - name: Setup Node.js
91
+ uses: actions/setup-node@v5
92
+ with:
93
+ node-version: "24"
94
+ cache: "pnpm"
95
+
96
+ - name: Install dependencies
97
+ run: pnpm install --frozen-lockfile
98
+
99
+ - name: Format check
100
+ run: pnpm format:check
101
+
102
+ - name: Type check
103
+ run: pnpm build:check
104
+
105
+ - name: Build
106
+ run: pnpm build
107
+
108
+ - name: Test
109
+ run: pnpm test
110
+
111
+ # Windows CI (optional — uncomment if Windows checks are needed):
112
+ #
113
+ # windows-ci:
114
+ # runs-on: windows-latest
115
+ # name: Lint, type-check, build, test (Windows)
116
+ # env:
117
+ # GIT_CONFIG_COUNT: 1
118
+ # GIT_CONFIG_KEY_0: core.longpaths
119
+ # GIT_CONFIG_VALUE_0: "true"
120
+ # steps:
121
+ # - name: Checkout
122
+ # uses: actions/checkout@v5
123
+ # - name: Enable Corepack
124
+ # run: corepack enable
125
+ # - name: Setup Node.js
126
+ # uses: actions/setup-node@v5
127
+ # with:
128
+ # node-version: "24"
129
+ # cache: "pnpm"
130
+ # - name: Install dependencies
131
+ # run: pnpm install --frozen-lockfile
132
+ # - name: Format check
133
+ # run: pnpm format:check
134
+ # - name: Type check
135
+ # run: pnpm build:check
136
+ # - name: Build
137
+ # run: pnpm build
138
+ # - name: Test
139
+ # run: pnpm test
140
+ #
141
+ # The GIT_CONFIG_COUNT env block MUST be set before the checkout step
142
+ # so git can handle long file paths during clone on Windows.
143
+ # Do not add Windows to the matrix "just in case" — it requires
144
+ # separate path-length and platform-specific dependency verification.
58
145
  - path: package.json
59
146
  content: |
60
147
  {
@@ -0,0 +1,34 @@
1
+ # Composition Workspace
2
+
3
+ This workspace contains an Editframe video composition.
4
+
5
+ ## Domain terminology
6
+
7
+ - **Composition** — the artifact this workspace produces (an HTML file using Editframe custom elements).
8
+ - **Scene** — a structural module within a composition (an `ef-timegroup` block).
9
+ - **Director** — the operator who creates and renders the composition.
10
+
11
+ ## Quality invariants
12
+
13
+ - **VIDEO-01**: Composition filenames must use kebab-case (lowercase letters, digits, hyphens only). This ensures consistent naming across the project. Severity: error.
14
+ - **VIDEO-02**: Scene durations must use `contain` fit mode by default to avoid unexpected cropping of video content. Use `cover` or `fill` only when intentionally overriding the default. Severity: warning.
15
+ - **VIDEO-03**: All speech audio elements (`ef-audio` with speech content) must have corresponding `ef-captions` elements for accessibility. Severity: error.
16
+
17
+ ## Workflow
18
+
19
+ 1. Create a `.html` file with Editframe custom elements (`ef-timegroup`, `ef-video`, `ef-audio`, `ef-text`, `ef-captions`).
20
+ 2. Run `editframe preview` to preview the composition in the browser.
21
+ 3. Run `editframe check` to validate the composition structure.
22
+ 4. Run `editframe render -o dist/<name>.mp4` to produce the final video output.
23
+
24
+ ## Reference template
25
+
26
+ A sample composition template is available at `editframe-html-templates/composition.html` in the forge profiles directory. Copy it to start a new composition:
27
+
28
+ ```sh
29
+ cp node_modules/@warpgogol/forge/profiles/editframe-html-templates/composition.html compositions/my-new-video/composition.html
30
+ ```
31
+
32
+ ## File naming
33
+
34
+ Composition files use kebab-case: `my-video.html`, `product-demo.html`, `intro-clip.html`.
@@ -0,0 +1,32 @@
1
+ <!--
2
+ Editframe HTML composition template
3
+ Copy this file to start a new composition. Editframe custom elements:
4
+ - ef-timegroup: groups elements into a timed sequence
5
+ - ef-video: video source with fit mode (contain, cover, fill)
6
+ - ef-audio: audio source
7
+ - ef-text: text overlay with positioning
8
+ - ef-captions: accessibility captions for speech audio
9
+ Run `editframe preview` to preview, `editframe render` to produce output.
10
+ -->
11
+ <ef-timegroup duration="10s">
12
+ <ef-video
13
+ src="assets/background.mp4"
14
+ fit="contain"
15
+ duration="10s"
16
+ ></ef-video>
17
+ <ef-text
18
+ text="Your text here"
19
+ x="50%"
20
+ y="50%"
21
+ font-size="48px"
22
+ color="white"
23
+ text-align="center"
24
+ duration="5s"
25
+ ></ef-text>
26
+ <ef-audio
27
+ src="assets/narration.mp3"
28
+ ></ef-audio>
29
+ <ef-captions
30
+ src="assets/captions.vtt"
31
+ ></ef-captions>
32
+ </ef-timegroup>