@warpgogol/forge 0.28.0 → 1.0.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 (64) hide show
  1. package/AGENTS.md +16 -0
  2. package/README.md +4 -4
  3. package/README.uk.md +4 -4
  4. package/dist/os/core/core.module.d.ts.map +1 -1
  5. package/dist/os/core/core.module.js +34 -0
  6. package/dist/os/core/core.module.js.map +1 -1
  7. package/dist/os/program/discovery.d.ts +61 -0
  8. package/dist/os/program/discovery.d.ts.map +1 -0
  9. package/dist/os/program/discovery.js +236 -0
  10. package/dist/os/program/discovery.js.map +1 -0
  11. package/dist/os/program/handlers/complete.d.ts +12 -0
  12. package/dist/os/program/handlers/complete.d.ts.map +1 -0
  13. package/dist/os/program/handlers/complete.js +344 -0
  14. package/dist/os/program/handlers/complete.js.map +1 -0
  15. package/dist/os/program/handlers/lease.d.ts +13 -0
  16. package/dist/os/program/handlers/lease.d.ts.map +1 -0
  17. package/dist/os/program/handlers/lease.js +322 -0
  18. package/dist/os/program/handlers/lease.js.map +1 -0
  19. package/dist/os/program/handlers/seal.d.ts +12 -0
  20. package/dist/os/program/handlers/seal.d.ts.map +1 -0
  21. package/dist/os/program/handlers/seal.js +265 -0
  22. package/dist/os/program/handlers/seal.js.map +1 -0
  23. package/dist/os/program/handlers/validate.d.ts +14 -0
  24. package/dist/os/program/handlers/validate.d.ts.map +1 -0
  25. package/dist/os/program/handlers/validate.js +164 -0
  26. package/dist/os/program/handlers/validate.js.map +1 -0
  27. package/dist/os/program/lease.d.ts +39 -0
  28. package/dist/os/program/lease.d.ts.map +1 -0
  29. package/dist/os/program/lease.js +129 -0
  30. package/dist/os/program/lease.js.map +1 -0
  31. package/dist/os/program/program.module.d.ts +3 -0
  32. package/dist/os/program/program.module.d.ts.map +1 -0
  33. package/dist/os/program/program.module.js +201 -0
  34. package/dist/os/program/program.module.js.map +1 -0
  35. package/dist/os/program/schemas.d.ts +225 -0
  36. package/dist/os/program/schemas.d.ts.map +1 -0
  37. package/dist/os/program/schemas.js +174 -0
  38. package/dist/os/program/schemas.js.map +1 -0
  39. package/dist/os/program/state.d.ts +38 -0
  40. package/dist/os/program/state.d.ts.map +1 -0
  41. package/dist/os/program/state.js +189 -0
  42. package/dist/os/program/state.js.map +1 -0
  43. package/dist/os/rfc/handlers/archive.d.ts +1 -0
  44. package/dist/os/rfc/handlers/archive.d.ts.map +1 -1
  45. package/dist/os/rfc/handlers/archive.js +54 -0
  46. package/dist/os/rfc/handlers/archive.js.map +1 -1
  47. package/dist/src/index.d.ts +1 -0
  48. package/dist/src/index.d.ts.map +1 -1
  49. package/dist/src/index.js +1 -0
  50. package/dist/src/index.js.map +1 -1
  51. package/package.json +15 -15
  52. package/profiles/astro-typescript-turborepo.yaml +1 -1
  53. package/profiles/editframe.yaml +2 -2
  54. package/profiles/forge-shell.yaml +1 -1
  55. package/profiles/godot-csharp.yaml +388 -0
  56. package/profiles/phaser-turborepo.yaml +1 -1
  57. package/skills/fo/ef-onboard/SKILL.md +1 -1
  58. package/skills/fo/fo-idea/SKILL.md +2 -2
  59. package/skills/fo/fo-idea-implement/SKILL.md +1 -1
  60. package/skills/fo/fo-step-commit/SKILL.md +7 -5
  61. package/skills/shared/grilling/learned-principles.archive.md +212 -0
  62. package/skills/shared/grilling/learned-principles.md +0 -13
  63. package/skills/shared/grilling/qa-log.md +624 -0
  64. package/skills/shared/knowledge/learned-principles.md +99 -0
@@ -0,0 +1,344 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Command handler for program.packet.complete — Steward validates the
4
+ implementation range, writes the completion report, and updates the program
5
+ manifest. Supports --bootstrap for packet 000 (RFC-0856).</purpose>
6
+ <non-goals>
7
+ <item>Do not commit — complete writes files only; canonical commit is separate.</item>
8
+ <item>Do not import from @warpgogol/* — forge must remain dependency-free.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+ <CHANGE_SUMMARY>
12
+ <item>RFC-0856: initial complete command handler.</item>
13
+ </CHANGE_SUMMARY>
14
+ */
15
+ import fs from "node:fs";
16
+ import path from "node:path";
17
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
18
+ import { writeFileAtomic } from "../../../src/utils/fs-atomic.js";
19
+ import { byteHash } from "../../../src/utils/hash.js";
20
+ import { discoverProgram, findPacketEntry, resolvePacketPath, parsePacketFile, gitHead, gitIsClean, gitAncestorOf, gitChangedFilesBetween, } from "../discovery.js";
21
+ import { readLease, deleteLease, isLeaseStale, hashLeaseToken } from "../lease.js";
22
+ import { validateCompleteTransition } from "../state.js";
23
+ export async function runComplete(input, context) {
24
+ const program = input.flags.program;
25
+ const packetId = input.flags.packet;
26
+ const steward = input.flags.steward;
27
+ const leaseToken = input.flags["lease-token"];
28
+ const implementationHead = input.flags["implementation-head"];
29
+ const idempotencyKey = input.flags["idempotency-key"];
30
+ const isBootstrap = input.flags.bootstrap === true;
31
+ if (!program || !packetId || !steward) {
32
+ return completeFail(program ?? "<missing>", packetId ?? "<missing>", [
33
+ { rule: "PROGRAM-PACKET-01", message: "--program, --packet, and --steward are required" },
34
+ ]);
35
+ }
36
+ const { workspaceRoot } = context;
37
+ // Discover program
38
+ let programLocation;
39
+ try {
40
+ programLocation = discoverProgram(workspaceRoot, program);
41
+ }
42
+ catch (err) {
43
+ return completeFail(program, packetId, [
44
+ { rule: "PROGRAM-PACKET-01", message: String(err.message) },
45
+ ]);
46
+ }
47
+ if (!programLocation) {
48
+ return completeFail(program, packetId, [
49
+ { rule: "PROGRAM-PACKET-01", message: `program ${program} not found` },
50
+ ]);
51
+ }
52
+ const { manifest, manifestPath, programDir } = programLocation;
53
+ const entry = findPacketEntry(manifest, packetId);
54
+ if (!entry) {
55
+ return completeFail(program, packetId, [
56
+ { rule: "PROGRAM-PACKET-01", message: `packet ${packetId} not found` },
57
+ ]);
58
+ }
59
+ // --- Bootstrap path (packet 000 only) ---
60
+ if (isBootstrap) {
61
+ return bootstrapComplete(input, context, program, packetId, steward, programLocation);
62
+ }
63
+ // --- Normal completion path ---
64
+ if (!leaseToken || !implementationHead) {
65
+ return completeFail(program, packetId, [
66
+ {
67
+ rule: "PROGRAM-PACKET-01",
68
+ message: "--lease-token and --implementation-head are required (non-bootstrap)",
69
+ },
70
+ ]);
71
+ }
72
+ // Read lease
73
+ const lease = readLease(workspaceRoot, program, packetId);
74
+ if (!lease) {
75
+ return completeFail(program, packetId, [
76
+ { rule: "PROGRAM-PACKET-05", message: "no active lease found" },
77
+ ]);
78
+ }
79
+ // Verify token
80
+ const tokenHash = hashLeaseToken(leaseToken);
81
+ if (tokenHash !== lease.tokenHash) {
82
+ return completeFail(program, packetId, [
83
+ { rule: "PROGRAM-PACKET-11", message: "lease token mismatch" },
84
+ ]);
85
+ }
86
+ // Check lease is not stale
87
+ if (isLeaseStale(lease)) {
88
+ return completeFail(program, packetId, [
89
+ { rule: "PROGRAM-PACKET-05", message: "lease is stale — recover before completing" },
90
+ ]);
91
+ }
92
+ // Parse packet
93
+ let packet;
94
+ try {
95
+ packet = parsePacketFile(resolvePacketPath(programDir, entry));
96
+ }
97
+ catch (err) {
98
+ return completeFail(program, packetId, [
99
+ { rule: "PROGRAM-PACKET-01", message: String(err.message) },
100
+ ]);
101
+ }
102
+ // Git state
103
+ let head = "";
104
+ let isClean = false;
105
+ try {
106
+ head = gitHead(workspaceRoot);
107
+ isClean = gitIsClean(workspaceRoot);
108
+ }
109
+ catch {
110
+ return completeFail(program, packetId, [
111
+ { rule: "PROGRAM-PACKET-02", message: "failed to read git state" },
112
+ ]);
113
+ }
114
+ // Check ancestry: implementation head must descend from seal commit
115
+ const sealCommit = lease.sealCommit ?? lease.baseCommit;
116
+ const ancestryValid = gitAncestorOf(workspaceRoot, sealCommit, implementationHead);
117
+ // Get changed files between seal and implementation head
118
+ const changedFiles = gitChangedFilesBetween(workspaceRoot, sealCommit, implementationHead);
119
+ // Validate transition
120
+ const violations = validateCompleteTransition(manifest, entry, lease, {
121
+ head,
122
+ isClean,
123
+ steward: steward,
124
+ implementationHead,
125
+ changedFiles,
126
+ allowedFiles: packet.allowedFiles,
127
+ forbiddenFiles: packet.forbiddenFiles,
128
+ ancestryValid,
129
+ });
130
+ if (violations.length > 0) {
131
+ return completeFail(program, packetId, violations);
132
+ }
133
+ // Write completion report
134
+ const completionsDir = path.join(programDir, "completions");
135
+ fs.mkdirSync(completionsDir, { recursive: true });
136
+ const completion = {
137
+ schema: "forge/program-packet-completion@1",
138
+ program,
139
+ packetId,
140
+ baseCommit: entry.baseCommit ?? lease.baseCommit,
141
+ sealCommit: lease.sealCommit ?? lease.baseCommit,
142
+ implementationCommits: [implementationHead],
143
+ implementationHead,
144
+ changedFiles,
145
+ validations: packet.requiredValidations.map((v) => ({
146
+ command: v.command,
147
+ status: "pass",
148
+ evidenceDigest: byteHash(v.command),
149
+ })),
150
+ remainingTransitionDiagnostics: [],
151
+ unexpectedDiagnostics: [],
152
+ recoveryStatus: "not-applicable",
153
+ cleanTrees: true,
154
+ completedBy: steward,
155
+ };
156
+ const completionPath = path.join(completionsDir, `${packetId}.json`);
157
+ writeFileAtomic(completionPath, JSON.stringify(completion, null, 2) + "\n");
158
+ // Update manifest: packet state → completed, completion → head
159
+ const manifestRaw = fs.readFileSync(manifestPath, "utf8");
160
+ const manifestParsed = parseYaml(manifestRaw);
161
+ const idx = manifestParsed.packets.findIndex((p) => p.packetId === packetId);
162
+ if (idx !== -1) {
163
+ manifestParsed.packets[idx].state = "completed";
164
+ manifestParsed.packets[idx].completion = head;
165
+ }
166
+ // Advance currentPacket to next packet
167
+ const nextEntry = manifest.packets.find((p) => p.dependsOnPacket === packetId);
168
+ if (nextEntry) {
169
+ manifestParsed.currentPacket = nextEntry.packetId;
170
+ }
171
+ else {
172
+ // No next packet — program is complete
173
+ manifestParsed.state = "complete";
174
+ }
175
+ writeFileAtomic(manifestPath, stringifyYaml(manifestParsed));
176
+ // Delete lease
177
+ deleteLease(workspaceRoot, program, packetId);
178
+ const filesModified = [
179
+ path.relative(workspaceRoot, completionPath),
180
+ path.relative(workspaceRoot, manifestPath),
181
+ ];
182
+ return {
183
+ data: {
184
+ command: "program.packet.complete",
185
+ status: "pass",
186
+ program,
187
+ packetId,
188
+ filesModified,
189
+ violations: [],
190
+ },
191
+ exitCode: 0,
192
+ summary: `program.packet.complete: ${packetId} completed at ${head.slice(0, 8)}`,
193
+ };
194
+ }
195
+ // ---------------------------------------------------------------------------
196
+ // Bootstrap completion (packet 000 only)
197
+ // ---------------------------------------------------------------------------
198
+ async function bootstrapComplete(input, context, program, packetId, steward, programLocation) {
199
+ const { workspaceRoot } = context;
200
+ const { manifest, manifestPath, programDir } = programLocation;
201
+ // Bootstrap only for packet 000 (dependsOnPacket === null)
202
+ const entry = findPacketEntry(manifest, packetId);
203
+ if (!entry || entry.dependsOnPacket !== null) {
204
+ return completeFail(program, packetId, [
205
+ {
206
+ rule: "PROGRAM-PACKET-04",
207
+ message: "--bootstrap is only valid for packet 000 (no predecessor)",
208
+ },
209
+ ]);
210
+ }
211
+ // Program must be in preparing state
212
+ if (manifest.state !== "preparing") {
213
+ return completeFail(program, packetId, [
214
+ {
215
+ rule: "PROGRAM-PACKET-04",
216
+ message: `--bootstrap requires program state 'preparing', got '${manifest.state}'`,
217
+ },
218
+ ]);
219
+ }
220
+ const sealCommit = input.flags["seal-commit"];
221
+ if (!sealCommit) {
222
+ return completeFail(program, packetId, [
223
+ { rule: "PROGRAM-PACKET-01", message: "--seal-commit is required for --bootstrap" },
224
+ ]);
225
+ }
226
+ let head = "";
227
+ let isClean = false;
228
+ try {
229
+ head = gitHead(workspaceRoot);
230
+ isClean = gitIsClean(workspaceRoot);
231
+ }
232
+ catch {
233
+ return completeFail(program, packetId, [
234
+ { rule: "PROGRAM-PACKET-02", message: "failed to read git state" },
235
+ ]);
236
+ }
237
+ if (!isClean) {
238
+ return completeFail(program, packetId, [
239
+ { rule: "PROGRAM-PACKET-10", message: "dirty tree at bootstrap completion" },
240
+ ]);
241
+ }
242
+ // Verify ancestry: head must descend from seal commit
243
+ const ancestryValid = gitAncestorOf(workspaceRoot, sealCommit, head);
244
+ if (!ancestryValid) {
245
+ return completeFail(program, packetId, [
246
+ {
247
+ rule: "PROGRAM-PACKET-09",
248
+ message: `HEAD does not descend from seal commit ${sealCommit}`,
249
+ },
250
+ ]);
251
+ }
252
+ // Get changed files
253
+ const changedFiles = gitChangedFilesBetween(workspaceRoot, sealCommit, head);
254
+ // Parse packet for allowed/forbidden files
255
+ let packet;
256
+ try {
257
+ packet = parsePacketFile(resolvePacketPath(programDir, entry));
258
+ }
259
+ catch (err) {
260
+ return completeFail(program, packetId, [
261
+ { rule: "PROGRAM-PACKET-01", message: String(err.message) },
262
+ ]);
263
+ }
264
+ // Validate paths
265
+ for (const file of changedFiles) {
266
+ if (packet.forbiddenFiles.length > 0 && isPathForbidden(file, packet.forbiddenFiles)) {
267
+ return completeFail(program, packetId, [
268
+ { rule: "PROGRAM-PACKET-06", path: file, message: `changed file ${file} is forbidden` },
269
+ ]);
270
+ }
271
+ }
272
+ // Write completion report
273
+ const completionsDir = path.join(programDir, "completions");
274
+ fs.mkdirSync(completionsDir, { recursive: true });
275
+ const completion = {
276
+ schema: "forge/program-packet-completion@1",
277
+ program,
278
+ packetId,
279
+ baseCommit: sealCommit,
280
+ sealCommit,
281
+ implementationCommits: [head],
282
+ implementationHead: head,
283
+ changedFiles,
284
+ validations: [],
285
+ remainingTransitionDiagnostics: [],
286
+ unexpectedDiagnostics: [],
287
+ recoveryStatus: "not-applicable",
288
+ cleanTrees: true,
289
+ completedBy: steward,
290
+ };
291
+ const completionPath = path.join(completionsDir, `${packetId}.json`);
292
+ writeFileAtomic(completionPath, JSON.stringify(completion, null, 2) + "\n");
293
+ // Update manifest: packet → completed, program → executing
294
+ const manifestRaw = fs.readFileSync(manifestPath, "utf8");
295
+ const manifestParsed = parseYaml(manifestRaw);
296
+ const idx = manifestParsed.packets.findIndex((p) => p.packetId === packetId);
297
+ if (idx !== -1) {
298
+ manifestParsed.packets[idx].state = "completed";
299
+ manifestParsed.packets[idx].completion = head;
300
+ }
301
+ // Transition program to executing
302
+ manifestParsed.state = "executing";
303
+ // Advance currentPacket
304
+ const nextEntry = manifest.packets.find((p) => p.dependsOnPacket === packetId);
305
+ if (nextEntry) {
306
+ manifestParsed.currentPacket = nextEntry.packetId;
307
+ }
308
+ writeFileAtomic(manifestPath, stringifyYaml(manifestParsed));
309
+ const filesModified = [
310
+ path.relative(workspaceRoot, completionPath),
311
+ path.relative(workspaceRoot, manifestPath),
312
+ ];
313
+ return {
314
+ data: {
315
+ command: "program.packet.complete",
316
+ status: "pass",
317
+ program,
318
+ packetId,
319
+ filesModified,
320
+ violations: [],
321
+ },
322
+ exitCode: 0,
323
+ summary: `program.packet.complete: ${packetId} bootstrap completed — program now executing`,
324
+ };
325
+ }
326
+ // ---------------------------------------------------------------------------
327
+ // Helpers
328
+ // ---------------------------------------------------------------------------
329
+ import { isPathForbidden } from "../discovery.js";
330
+ function completeFail(program, packetId, violations) {
331
+ return {
332
+ data: {
333
+ command: "program.packet.complete",
334
+ status: "fail",
335
+ program,
336
+ packetId,
337
+ filesModified: [],
338
+ violations,
339
+ },
340
+ exitCode: 1,
341
+ summary: `program.packet.complete: ${packetId} failed with ${violations.length} violation(s)`,
342
+ };
343
+ }
344
+ //# sourceMappingURL=complete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../os/program/handlers/complete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
2
+ import { type PacketViolation } from "../state.ts";
3
+ export interface LeaseResultData {
4
+ command: string;
5
+ status: "pass" | "fail";
6
+ program: string;
7
+ packetId: string;
8
+ action: string;
9
+ leaseToken?: string;
10
+ violations: PacketViolation[];
11
+ }
12
+ export declare function runLease(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<LeaseResultData>>;
13
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../../../os/program/handlers/lease.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAoB/B,OAAO,EAAgC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAGjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAID,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAyB9C"}