@warpgogol/forge 0.4.0 → 0.5.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 (137) hide show
  1. package/AGENTS.md +116 -4
  2. package/dist/os/adr/handlers/validate.d.ts.map +1 -1
  3. package/dist/os/adr/handlers/validate.js +31 -3
  4. package/dist/os/adr/handlers/validate.js.map +1 -1
  5. package/dist/os/core/core.module.d.ts.map +1 -1
  6. package/dist/os/core/core.module.js +76 -2
  7. package/dist/os/core/core.module.js.map +1 -1
  8. package/dist/os/core/handlers/knowledge-compact.d.ts +4 -0
  9. package/dist/os/core/handlers/knowledge-compact.d.ts.map +1 -0
  10. package/dist/os/core/handlers/knowledge-compact.js +198 -0
  11. package/dist/os/core/handlers/knowledge-compact.js.map +1 -0
  12. package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -1
  13. package/dist/os/rfc/handlers/lifecycle.js +3 -4
  14. package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
  15. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  16. package/dist/os/rfc/handlers/validate-rules.js +41 -3
  17. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  18. package/dist/os/spec/spec-schema.d.ts +1 -1
  19. package/dist/src/config/forge-config.d.ts +67 -3
  20. package/dist/src/config/forge-config.d.ts.map +1 -1
  21. package/dist/src/config/forge-config.js +86 -2
  22. package/dist/src/config/forge-config.js.map +1 -1
  23. package/dist/src/index.d.ts +3 -1
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +6 -2
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/knowledge/budgets.d.ts +38 -0
  28. package/dist/src/knowledge/budgets.d.ts.map +1 -0
  29. package/dist/src/knowledge/budgets.js +157 -0
  30. package/dist/src/knowledge/budgets.js.map +1 -0
  31. package/dist/src/knowledge/compact.d.ts +47 -0
  32. package/dist/src/knowledge/compact.d.ts.map +1 -0
  33. package/dist/src/knowledge/compact.js +322 -0
  34. package/dist/src/knowledge/compact.js.map +1 -0
  35. package/dist/src/knowledge/index.d.ts +7 -0
  36. package/dist/src/knowledge/index.d.ts.map +1 -0
  37. package/dist/src/knowledge/index.js +19 -0
  38. package/dist/src/knowledge/index.js.map +1 -0
  39. package/dist/src/knowledge/parse.d.ts +3 -0
  40. package/dist/src/knowledge/parse.d.ts.map +1 -0
  41. package/dist/src/knowledge/parse.js +205 -0
  42. package/dist/src/knowledge/parse.js.map +1 -0
  43. package/dist/src/knowledge/promote.d.ts +37 -0
  44. package/dist/src/knowledge/promote.d.ts.map +1 -0
  45. package/dist/src/knowledge/promote.js +120 -0
  46. package/dist/src/knowledge/promote.js.map +1 -0
  47. package/dist/src/knowledge/schema.d.ts +61 -0
  48. package/dist/src/knowledge/schema.d.ts.map +1 -0
  49. package/dist/src/knowledge/schema.js +64 -0
  50. package/dist/src/knowledge/schema.js.map +1 -0
  51. package/dist/src/knowledge/serialize.d.ts +3 -0
  52. package/dist/src/knowledge/serialize.d.ts.map +1 -0
  53. package/dist/src/knowledge/serialize.js +67 -0
  54. package/dist/src/knowledge/serialize.js.map +1 -0
  55. package/dist/src/onboarding/agents-generate.d.ts +15 -0
  56. package/dist/src/onboarding/agents-generate.d.ts.map +1 -1
  57. package/dist/src/onboarding/agents-generate.js +118 -58
  58. package/dist/src/onboarding/agents-generate.js.map +1 -1
  59. package/dist/src/onboarding/create.d.ts.map +1 -1
  60. package/dist/src/onboarding/create.js +62 -3
  61. package/dist/src/onboarding/create.js.map +1 -1
  62. package/dist/src/onboarding/doctor.d.ts +13 -1
  63. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  64. package/dist/src/onboarding/doctor.js +527 -11
  65. package/dist/src/onboarding/doctor.js.map +1 -1
  66. package/dist/src/onboarding/init.d.ts +8 -1
  67. package/dist/src/onboarding/init.d.ts.map +1 -1
  68. package/dist/src/onboarding/init.js +33 -2
  69. package/dist/src/onboarding/init.js.map +1 -1
  70. package/dist/src/onboarding/memory-scaffold.d.ts +18 -0
  71. package/dist/src/onboarding/memory-scaffold.d.ts.map +1 -0
  72. package/dist/src/onboarding/memory-scaffold.js +151 -0
  73. package/dist/src/onboarding/memory-scaffold.js.map +1 -0
  74. package/dist/src/onboarding/nested-agents-generate.d.ts +6 -2
  75. package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
  76. package/dist/src/onboarding/nested-agents-generate.js +34 -9
  77. package/dist/src/onboarding/nested-agents-generate.js.map +1 -1
  78. package/dist/src/onboarding/nested-agents-templates.d.ts +23 -1
  79. package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -1
  80. package/dist/src/onboarding/nested-agents-templates.js +138 -8
  81. package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
  82. package/dist/src/onboarding/profile-validate.d.ts +13 -0
  83. package/dist/src/onboarding/profile-validate.d.ts.map +1 -0
  84. package/dist/src/onboarding/profile-validate.js +109 -0
  85. package/dist/src/onboarding/profile-validate.js.map +1 -0
  86. package/dist/src/onboarding/upgrade.d.ts +5 -0
  87. package/dist/src/onboarding/upgrade.d.ts.map +1 -1
  88. package/dist/src/onboarding/upgrade.js +27 -1
  89. package/dist/src/onboarding/upgrade.js.map +1 -1
  90. package/dist/src/onboarding/workspace-discovery.d.ts +4 -3
  91. package/dist/src/onboarding/workspace-discovery.d.ts.map +1 -1
  92. package/dist/src/onboarding/workspace-discovery.js +51 -3
  93. package/dist/src/onboarding/workspace-discovery.js.map +1 -1
  94. package/dist/src/profiles/profile-schema.d.ts +116 -0
  95. package/dist/src/profiles/profile-schema.d.ts.map +1 -0
  96. package/dist/src/profiles/profile-schema.js +94 -0
  97. package/dist/src/profiles/profile-schema.js.map +1 -0
  98. package/dist/src/profiles/stack-profile.d.ts +41 -1
  99. package/dist/src/profiles/stack-profile.d.ts.map +1 -1
  100. package/dist/src/profiles/stack-profile.js +9 -0
  101. package/dist/src/profiles/stack-profile.js.map +1 -1
  102. package/dist/src/profiles/terminology-utils.d.ts +8 -0
  103. package/dist/src/profiles/terminology-utils.d.ts.map +1 -0
  104. package/dist/src/profiles/terminology-utils.js +31 -0
  105. package/dist/src/profiles/terminology-utils.js.map +1 -0
  106. package/dist/src/validators/skill-validate.d.ts +15 -0
  107. package/dist/src/validators/skill-validate.d.ts.map +1 -1
  108. package/dist/src/validators/skill-validate.js +204 -2
  109. package/dist/src/validators/skill-validate.js.map +1 -1
  110. package/package.json +11 -3
  111. package/profiles/astro-typescript-turborepo.yaml +87 -0
  112. package/profiles/editframe-html-templates/composition-agents.md +34 -0
  113. package/profiles/editframe-html-templates/composition.html +32 -0
  114. package/profiles/editframe-html.yaml +283 -0
  115. package/profiles/forge-shell.yaml +77 -0
  116. package/profiles/phaser-turborepo.yaml +87 -0
  117. package/skills/fo/fo-doc-audit/SKILL.md +6 -6
  118. package/skills/fo/fo-handoff/SKILL.md +2 -1
  119. package/skills/fo/fo-idea-implement/SKILL.md +44 -2
  120. package/skills/fo/fo-idea-plan/SKILL.md +1 -0
  121. package/skills/fo/fo-knowledge-distill/SKILL.md +170 -0
  122. package/skills/fo/fo-memory-sync/SKILL.md +6 -3
  123. package/skills/fo/fo-memory-sync/fix-patterns.md +38 -4
  124. package/skills/fo/fo-review/SKILL.md +2 -2
  125. package/skills/fo/fo-session-retro/SKILL.md +21 -11
  126. package/skills/fo/fo-session-save/SKILL.md +1 -1
  127. package/skills/fo/fo-session-save/fix-patterns.md +53 -29
  128. package/skills/fo/fo-session-save/learned-principles.md +59 -8
  129. package/skills/meta/forge-bootstrap/SKILL.md +16 -4
  130. package/skills/meta/forge-bootstrap/operator-profile-template.md +1 -0
  131. package/skills/meta/skill-create/SKILL.md +1 -1
  132. package/skills/shared/grilling/SKILL.md +1 -1
  133. package/skills/shared/grilling/learned-principles.md +14 -0
  134. package/skills/shared/grilling/qa-log.md +105 -6
  135. package/skills/shared/knowledge/learned-principles.md +5 -0
  136. package/skills/shared/windows-ai-tooling/SKILL.md +154 -1
  137. package/skills/shared/writing-great-skills/SKILL.md +74 -1
@@ -0,0 +1,283 @@
1
+ schema: forge/stack-profile@1
2
+ id: editframe-html
3
+ displayName: Editframe HTML Video
4
+ detect:
5
+ anyOf:
6
+ - editframe.config.*
7
+ domain: video
8
+ register: creative
9
+ terminology:
10
+ artifact: composition
11
+ artifactPlural: compositions
12
+ module: scene
13
+ source: composition file
14
+ output: render
15
+ verify: render-verify
16
+ operator: director
17
+ artifacts:
18
+ - id: composition
19
+ extensions:
20
+ - .html
21
+ - .tsx
22
+ produce:
23
+ command: editframe render
24
+ output: dist/{composition}.mp4
25
+ validate:
26
+ command: editframe check
27
+ determinism:
28
+ hashable: true
29
+ inputs:
30
+ - composition files
31
+ - assets
32
+ - editframe version
33
+ workspaceTypes:
34
+ - id: composition
35
+ detect:
36
+ glob: "*.html"
37
+ contains: ef-timegroup
38
+ packageJsonDep: "@editframe/cli"
39
+ skills:
40
+ - ef-composition-review
41
+ - ef-render-verify
42
+ agentsMdTemplate: editframe-html-templates/composition-agents.md
43
+ invariants:
44
+ - id: VIDEO-01
45
+ rule: Composition filenames must use kebab-case (lowercase letters, digits, hyphens only)
46
+ severity: error
47
+ - id: VIDEO-02
48
+ rule: Scene durations must use contain mode by default to avoid unexpected cropping
49
+ severity: warning
50
+ - id: VIDEO-03
51
+ rule: All speech audio elements must have corresponding ef-captions elements for accessibility
52
+ severity: error
53
+ workspace:
54
+ dirs:
55
+ - compositions
56
+ - packages
57
+ - services
58
+ files:
59
+ - path: pnpm-workspace.yaml
60
+ content: |
61
+ packages:
62
+ - "compositions/*"
63
+ - "packages/*"
64
+ - "services/*"
65
+ - path: turbo.json
66
+ content: |
67
+ {
68
+ "$schema": "https://turbo.build/schema.json",
69
+ "tasks": {
70
+ "build": {
71
+ "dependsOn": ["^build"],
72
+ "outputs": ["dist/**"]
73
+ },
74
+ "build:check": {
75
+ "dependsOn": ["^build:check"]
76
+ },
77
+ "test": {
78
+ "dependsOn": ["^build:check"]
79
+ }
80
+ }
81
+ }
82
+ - path: .gitignore
83
+ content: |
84
+ node_modules
85
+ dist
86
+ .turbo
87
+ .cache
88
+ operator-profile.md
89
+ - path: .github/workflows/ci.yml
90
+ content: |
91
+ name: CI
92
+
93
+ on:
94
+ pull_request:
95
+ push:
96
+ branches: [main]
97
+ workflow_dispatch:
98
+
99
+ concurrency:
100
+ group: ${{ github.workflow }}-${{ github.ref }}
101
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
102
+
103
+ permissions:
104
+ contents: read
105
+
106
+ jobs:
107
+ ci:
108
+ runs-on: ubuntu-latest
109
+ timeout-minutes: 15
110
+ name: Lint, type-check, build, test
111
+ env:
112
+ TZ: UTC
113
+
114
+ steps:
115
+ - name: Checkout
116
+ uses: actions/checkout@v5
117
+
118
+ - name: Enable Corepack
119
+ run: corepack enable
120
+
121
+ - name: Setup Node.js
122
+ uses: actions/setup-node@v5
123
+ with:
124
+ node-version: "24"
125
+ cache: "pnpm"
126
+
127
+ - name: Install dependencies
128
+ run: pnpm install --frozen-lockfile
129
+
130
+ - name: Format check
131
+ run: pnpm format:check
132
+
133
+ - name: Type check
134
+ run: pnpm build:check
135
+
136
+ - name: Build
137
+ run: pnpm build
138
+
139
+ - name: Test
140
+ run: pnpm test
141
+
142
+ # Windows CI (optional — uncomment if Windows checks are needed):
143
+ #
144
+ # windows-ci:
145
+ # runs-on: windows-latest
146
+ # name: Lint, type-check, build, test (Windows)
147
+ # env:
148
+ # GIT_CONFIG_COUNT: 1
149
+ # GIT_CONFIG_KEY_0: core.longpaths
150
+ # GIT_CONFIG_VALUE_0: "true"
151
+ # steps:
152
+ # - name: Checkout
153
+ # uses: actions/checkout@v5
154
+ # - name: Enable Corepack
155
+ # run: corepack enable
156
+ # - name: Setup Node.js
157
+ # uses: actions/setup-node@v5
158
+ # with:
159
+ # node-version: "24"
160
+ # cache: "pnpm"
161
+ # - name: Install dependencies
162
+ # run: pnpm install --frozen-lockfile
163
+ # - name: Format check
164
+ # run: pnpm format:check
165
+ # - name: Type check
166
+ # run: pnpm build:check
167
+ # - name: Build
168
+ # run: pnpm build
169
+ # - name: Test
170
+ # run: pnpm test
171
+ #
172
+ # The GIT_CONFIG_COUNT env block MUST be set before the checkout step
173
+ # so git can handle long file paths during clone on Windows.
174
+ # Do not add Windows to the matrix "just in case" — it requires
175
+ # separate path-length and platform-specific dependency verification.
176
+ - path: package.json
177
+ content: |
178
+ {
179
+ "name": "__PROJECT_NAME__",
180
+ "version": "0.1.0",
181
+ "private": true,
182
+ "type": "module",
183
+ "engines": {
184
+ "node": ">=22"
185
+ },
186
+ "scripts": {
187
+ "clean": "node scripts/clean.mjs",
188
+ "format": "prettier --write .",
189
+ "format:check": "prettier --check .",
190
+ "build": "turbo run build",
191
+ "build:check": "turbo run build:check",
192
+ "test": "turbo run test",
193
+ "upgrade-packages": "pnpm -r up"
194
+ }
195
+ }
196
+ - path: scripts/clean.mjs
197
+ content: |
198
+ import { readdir, rm } from "node:fs/promises";
199
+ import { join } from "node:path";
200
+ import { fileURLToPath } from "node:url";
201
+
202
+ const TARGETS = new Set(["node_modules", ".turbo", "dist", ".cache"]);
203
+
204
+ const repoRoot = join(fileURLToPath(import.meta.url), "..", "..");
205
+
206
+ async function walk(dir, toDelete) {
207
+ const entries = await readdir(dir, { withFileTypes: true });
208
+ for (const entry of entries) {
209
+ if (!entry.isDirectory()) continue;
210
+ const name = entry.name;
211
+ const fullPath = join(dir, name);
212
+ if (TARGETS.has(name)) {
213
+ toDelete.push(fullPath);
214
+ continue;
215
+ }
216
+ await walk(fullPath, toDelete);
217
+ }
218
+ }
219
+
220
+ const toDelete = [];
221
+ await walk(repoRoot, toDelete);
222
+
223
+ if (toDelete.length === 0) {
224
+ console.log("Nothing to clean.");
225
+ process.exit(0);
226
+ }
227
+
228
+ await Promise.all(toDelete.map((p) => rm(p, { recursive: true, force: true })));
229
+
230
+ for (const p of toDelete) {
231
+ console.log("deleted", p.replace(repoRoot + "/", ""));
232
+ }
233
+
234
+ console.log(`Cleaned ${toDelete.length} directories.`);
235
+ install:
236
+ - pnpm add -D @editframe/cli @warpgogol/forge turbo prettier
237
+ firstWorkspace:
238
+ path: compositions/my-first-video
239
+ files:
240
+ - path: package.json
241
+ content: |
242
+ {
243
+ "name": "my-first-video",
244
+ "version": "0.1.0",
245
+ "private": true,
246
+ "type": "module",
247
+ "scripts": {
248
+ "preview": "editframe preview",
249
+ "render": "editframe render -o dist/my-first-video.mp4",
250
+ "check": "editframe check"
251
+ }
252
+ }
253
+ - path: composition.html
254
+ content: |
255
+ <!--
256
+ Editframe HTML composition — my-first-video
257
+ This file declares a video composition using Editframe custom elements.
258
+ Run `editframe preview` to preview, `editframe render` to produce output.
259
+ -->
260
+ <ef-timegroup duration="10s">
261
+ <ef-video
262
+ src="assets/background.mp4"
263
+ fit="contain"
264
+ duration="10s"
265
+ ></ef-video>
266
+ <ef-text
267
+ text="Hello, Editframe!"
268
+ x="50%"
269
+ y="50%"
270
+ font-size="48px"
271
+ color="white"
272
+ text-align="center"
273
+ duration="5s"
274
+ ></ef-text>
275
+ <ef-audio
276
+ src="assets/narration.mp3"
277
+ ></ef-audio>
278
+ <ef-captions
279
+ src="assets/captions.vtt"
280
+ ></ef-captions>
281
+ </ef-timegroup>
282
+ install:
283
+ - pnpm add -D vitest
@@ -16,6 +16,83 @@ workspace:
16
16
  .turbo
17
17
  .cache
18
18
  operator-profile.md
19
+ - path: .github/workflows/ci.yml
20
+ content: |
21
+ name: CI
22
+
23
+ on:
24
+ pull_request:
25
+ push:
26
+ branches: [main]
27
+ workflow_dispatch:
28
+
29
+ concurrency:
30
+ group: ${{ github.workflow }}-${{ github.ref }}
31
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
32
+
33
+ permissions:
34
+ contents: read
35
+
36
+ jobs:
37
+ ci:
38
+ runs-on: ubuntu-latest
39
+ timeout-minutes: 15
40
+ name: Lint, type-check, test
41
+ env:
42
+ TZ: UTC
43
+
44
+ steps:
45
+ - name: Checkout
46
+ uses: actions/checkout@v5
47
+
48
+ - name: Enable Corepack
49
+ run: corepack enable
50
+
51
+ - name: Setup Node.js
52
+ uses: actions/setup-node@v5
53
+ with:
54
+ node-version: "24"
55
+ cache: "pnpm"
56
+
57
+ - name: Install dependencies
58
+ run: pnpm install --frozen-lockfile
59
+
60
+ - name: Format check
61
+ run: pnpm format:check
62
+
63
+ - name: Test
64
+ run: pnpm test
65
+
66
+ # Windows CI (optional — uncomment if Windows checks are needed):
67
+ #
68
+ # windows-ci:
69
+ # runs-on: windows-latest
70
+ # name: Lint, type-check, test (Windows)
71
+ # env:
72
+ # GIT_CONFIG_COUNT: 1
73
+ # GIT_CONFIG_KEY_0: core.longpaths
74
+ # GIT_CONFIG_VALUE_0: "true"
75
+ # steps:
76
+ # - name: Checkout
77
+ # uses: actions/checkout@v5
78
+ # - name: Enable Corepack
79
+ # run: corepack enable
80
+ # - name: Setup Node.js
81
+ # uses: actions/setup-node@v5
82
+ # with:
83
+ # node-version: "24"
84
+ # cache: "pnpm"
85
+ # - name: Install dependencies
86
+ # run: pnpm install --frozen-lockfile
87
+ # - name: Format check
88
+ # run: pnpm format:check
89
+ # - name: Test
90
+ # run: pnpm test
91
+ #
92
+ # The GIT_CONFIG_COUNT env block MUST be set before the checkout step
93
+ # so git can handle long file paths during clone on Windows.
94
+ # Do not add Windows to the matrix "just in case" — it requires
95
+ # separate path-length and platform-specific dependency verification.
19
96
  - path: package.json
20
97
  content: |
21
98
  {
@@ -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
  {
@@ -125,8 +125,8 @@ If yes, update the **template** files in `packages/os/site-kernel-onboarding/src
125
125
  If yes, **do not edit the generated file directly**. Update the source registry or generator, then run the regeneration command:
126
126
 
127
127
  ```sh
128
- ref(forge.yaml bindings.commands.scopedBuild) --workspace=ecosystem.manifest.generate
129
- ref(forge.yaml bindings.commands.scopedBuild) --workspace=command.manifest.generate
128
+ ref(forge.yaml bindings.commands.produce) --workspace=ecosystem.manifest.generate
129
+ ref(forge.yaml bindings.commands.produce) --workspace=command.manifest.generate
130
130
  ```
131
131
 
132
132
  Note: if the regeneration command is expensive or unavailable in the current session, document the need to regenerate in the session summary and move on.
@@ -182,8 +182,8 @@ For each surface that needs updating:
182
182
  If any generated artifact needed regeneration (step 2f), run the generator now:
183
183
 
184
184
  ```sh
185
- ref(forge.yaml bindings.commands.scopedBuild) --workspace=ecosystem.manifest.generate
186
- ref(forge.yaml bindings.commands.scopedBuild) --workspace=command.manifest.generate
185
+ ref(forge.yaml bindings.commands.produce) --workspace=ecosystem.manifest.generate
186
+ ref(forge.yaml bindings.commands.produce) --workspace=command.manifest.generate
187
187
  ```
188
188
 
189
189
  If the generator command is unavailable or too expensive for this session, note it in the summary — the operator can regenerate later.
@@ -191,8 +191,8 @@ If the generator command is unavailable or too expensive for this session, note
191
191
  If a generated artifact was regenerated, run the drift guards:
192
192
 
193
193
  ```sh
194
- ref(forge.yaml bindings.commands.scopedBuild) --workspace=ecosystem.manifest.validate
195
- ref(forge.yaml bindings.commands.scopedBuild) --workspace=workspace.surface.validate
194
+ ref(forge.yaml bindings.commands.produce) --workspace=ecosystem.manifest.validate
195
+ ref(forge.yaml bindings.commands.produce) --workspace=workspace.surface.validate
196
196
  ```
197
197
 
198
198
  ### 6. Commit
@@ -34,8 +34,9 @@ Include:
34
34
  - **References to existing artifacts** — specs, plans, ADRs, issues, commits, diffs. Reference them by path or URL instead of duplicating content.
35
35
  - **Current state** — what the codebase looks like now, what's uncommitted, what's in progress.
36
36
  - **Next steps** — concrete, actionable items the next agent should pick up.
37
+ - **Memory layer pointer** — tell the next agent to read `.agents/memory/MEMORY.md` and recent `.agents/memory/daily/` files for project context.
37
38
 
38
- Do not duplicate content already captured in other artifacts (specs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead.
39
+ Do not duplicate content already captured in other artifacts (specs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead. Do not duplicate content from `.agents/memory/` — reference it by path.
39
40
 
40
41
  Redact any sensitive information, such as API keys, passwords, or personally identifiable information.
41
42
 
@@ -107,7 +107,7 @@ After **all** plan steps are complete, run the heavy validation suite in order:
107
107
  2. **Package-level build checks** for each impacted package:
108
108
 
109
109
  ```sh
110
- ref(forge.yaml bindings.commands.typecheck) --workspace=<package>
110
+ ref(forge.yaml bindings.commands.validate) --workspace=<package>
111
111
  ```
112
112
 
113
113
  3. **App-level checks** for each impacted app:
@@ -201,6 +201,26 @@ Transition the RFC to `implemented` using the `rfc.implement.stamp` command. Dir
201
201
 
202
202
  Stage only the RFC file. The implementation commit and the stamp commit MUST be separate.
203
203
 
204
+ #### 3.8b. Regenerate command manifest (MANDATORY)
205
+
206
+ If the RFC added, changed, or removed commands (check `commands.added`, `commands.changed`, `commands.removed` in the RFC frontmatter), regenerate the command manifest so that `rfc.validate` does not report `RFC-CMD-02` (command listed but not registered):
207
+
208
+ 1. Run `ref(forge.yaml bindings.commands.manifestGenerate)`.
209
+
210
+ 2. Commit the regenerated manifest:
211
+
212
+ ```txt
213
+ docs: regenerate command manifest for RFC-XXXX
214
+
215
+ Update docs/command-manifest.generated.yaml after RFC-XXXX command changes.
216
+ ```
217
+
218
+ Stage only `docs/command-manifest.generated.yaml`.
219
+
220
+ If the RFC has no `commands.*` changes (e.g. it only changes schemas, docs, or internal logic), skip this step.
221
+
222
+ This step is MANDATORY for any RFC with `commands.added`, `commands.changed`, or `commands.removed`. A stale manifest causes `RFC-CMD-02` violations that block `rfc.validate` for all implemented RFCs.
223
+
204
224
  #### 3.9. Documentation audit (fo-doc-audit)
205
225
 
206
226
  After implementation is complete and all checks pass, invoke `fo-doc-audit` via the `skill` tool. It analyzes the session's changes, checks all documentation surfaces (AGENTS.md, README, Compass XML, architecture-dna.md, templates, generated artifacts, COMMANDS.md/PACKAGE_GRAPH.md), applies needed updates, and commits them separately. Wait for it to complete.
@@ -229,6 +249,17 @@ If `fo-review` (step 3.10) reported **any** findings (even cosmetic ones on axes
229
249
 
230
250
  If `fo-review` reported truly zero findings (the report explicitly states "No issues." on every axis), skip this step. An `approved` verdict with any finding text on any axis does NOT qualify as zero findings.
231
251
 
252
+ #### 3.11b. Implementation status gate (RFC)
253
+
254
+ Before reporting completion, verify the RFC has been stamped as `implemented`:
255
+
256
+ 1. Read the RFC frontmatter — confirm `status: implemented` and `implementedAt` is set.
257
+ 2. Run `ref(forge.yaml bindings.commands.validateRfc) --id RFC-XXXX --json` — confirm zero errors.
258
+ 3. If status is not `implemented`, go back to step 3.8 (Stamp implemented) and run the stamp command.
259
+ 4. If `rfc.validate` reports errors, fix them before proceeding.
260
+
261
+ This gate is MANDATORY. Do not proceed to step 3.12 (report) until the RFC is `implemented`.
262
+
232
263
  #### 3.12. RFC report
233
264
 
234
265
  After implementation is complete, report in `aiLanguage`. **Translate all labels and headings to `aiLanguage`** — the template below is structural only. Only identifiers (RFC-XXXX, file paths, skill names) stay untranslated.
@@ -310,7 +341,7 @@ After implementation is complete, run heavy checks for the impacted workspaces o
310
341
  2. Determine impacted packages/apps from the ADR's `scope` and the files touched during implementation. Build only those workspaces:
311
342
 
312
343
  ```sh
313
- ref(forge.yaml bindings.commands.typecheck) --workspace=<package>
344
+ ref(forge.yaml bindings.commands.validate) --workspace=<package>
314
345
  ```
315
346
 
316
347
  Or for apps:
@@ -412,6 +443,17 @@ After all checks pass and documentation is updated, transition the ADR to `imple
412
443
 
413
444
  Stage only the ADR file.
414
445
 
446
+ #### 4.10b. Implementation status gate (ADR)
447
+
448
+ Before reporting completion, verify the ADR has been transitioned to `implemented`:
449
+
450
+ 1. Read the ADR frontmatter — confirm `status: implemented` and `implementedAt` is set.
451
+ 2. Run `ref(forge.yaml bindings.commands.validateAdr) --id ADR-XXXX --json` — confirm zero errors.
452
+ 3. If status is not `implemented`, go back to step 4.10 (Stamp implemented) and set `status: implemented`, `implementedAt`, `updatedAt`.
453
+ 4. If `adr.validate` reports errors, fix them before proceeding.
454
+
455
+ This gate is MANDATORY. Do not proceed to step 4.11 (report) until the ADR is `implemented`.
456
+
415
457
  #### 4.11. Report
416
458
 
417
459
  After implementation is complete, report in `aiLanguage`. **Translate all labels and headings to `aiLanguage`** — the template below is structural only.
@@ -141,6 +141,7 @@ Step ordering follows the contract-first pattern:
141
141
  5. **Validation** — run `rfc.validate`, `build:check`, acceptance probes.
142
142
  6. **Evidence** — run `rfc.verification.emit`, commit evidence file.
143
143
  7. **Review & Fix** — `fo-review` on all session code changes, `fo-fix` if findings (MANDATORY — do not omit from the plan).
144
+ 8. **Stamp implemented** — run `rfc.implement.stamp --id RFC-XXXX --implementation-commit <sha>` to transition `accepted → implemented` (RFC). For ADRs, manually set `status: implemented` and `implementedAt` per `fo-idea-implement` step 4.10.
144
145
 
145
146
  Mark **human review points** on steps that:
146
147