@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,225 @@
1
+ import { z } from "zod/v4";
2
+ export declare const programActorSchema: z.ZodString;
3
+ export declare const programStateSchema: z.ZodEnum<{
4
+ preparing: "preparing";
5
+ executing: "executing";
6
+ blocked: "blocked";
7
+ complete: "complete";
8
+ }>;
9
+ export declare const packetStateSchema: z.ZodEnum<{
10
+ active: "active";
11
+ draft: "draft";
12
+ completed: "completed";
13
+ blocked: "blocked";
14
+ sealed: "sealed";
15
+ }>;
16
+ export declare const recoveryStatusSchema: z.ZodEnum<{
17
+ verified: "verified";
18
+ "not-applicable": "not-applicable";
19
+ }>;
20
+ export declare const programLeasePhaseSchema: z.ZodEnum<{
21
+ preparation: "preparation";
22
+ execution: "execution";
23
+ }>;
24
+ export declare const programPacketIndexEntrySchema: z.ZodObject<{
25
+ order: z.ZodNumber;
26
+ packetId: z.ZodString;
27
+ file: z.ZodString;
28
+ state: z.ZodEnum<{
29
+ active: "active";
30
+ draft: "draft";
31
+ completed: "completed";
32
+ blocked: "blocked";
33
+ sealed: "sealed";
34
+ }>;
35
+ governingDecision: z.ZodString;
36
+ decisionKind: z.ZodEnum<{
37
+ rfc: "rfc";
38
+ "spec-amendment": "spec-amendment";
39
+ "spec-node": "spec-node";
40
+ }>;
41
+ resolvedRfc: z.ZodNullable<z.ZodString>;
42
+ dependsOnPacket: z.ZodNullable<z.ZodString>;
43
+ baseCommit: z.ZodNullable<z.ZodString>;
44
+ sealCommit: z.ZodNullable<z.ZodString>;
45
+ completion: z.ZodNullable<z.ZodString>;
46
+ }, z.core.$strip>;
47
+ export declare const programManifestSchema: z.ZodObject<{
48
+ schema: z.ZodLiteral<"forge/program@1">;
49
+ program: z.ZodString;
50
+ title: z.ZodString;
51
+ branch: z.ZodString;
52
+ state: z.ZodEnum<{
53
+ preparing: "preparing";
54
+ executing: "executing";
55
+ blocked: "blocked";
56
+ complete: "complete";
57
+ }>;
58
+ currentPacket: z.ZodString;
59
+ steward: z.ZodString;
60
+ sequential: z.ZodLiteral<true>;
61
+ parallelism: z.ZodLiteral<1>;
62
+ packets: z.ZodArray<z.ZodObject<{
63
+ order: z.ZodNumber;
64
+ packetId: z.ZodString;
65
+ file: z.ZodString;
66
+ state: z.ZodEnum<{
67
+ active: "active";
68
+ draft: "draft";
69
+ completed: "completed";
70
+ blocked: "blocked";
71
+ sealed: "sealed";
72
+ }>;
73
+ governingDecision: z.ZodString;
74
+ decisionKind: z.ZodEnum<{
75
+ rfc: "rfc";
76
+ "spec-amendment": "spec-amendment";
77
+ "spec-node": "spec-node";
78
+ }>;
79
+ resolvedRfc: z.ZodNullable<z.ZodString>;
80
+ dependsOnPacket: z.ZodNullable<z.ZodString>;
81
+ baseCommit: z.ZodNullable<z.ZodString>;
82
+ sealCommit: z.ZodNullable<z.ZodString>;
83
+ completion: z.ZodNullable<z.ZodString>;
84
+ }, z.core.$strip>>;
85
+ }, z.core.$strict>;
86
+ export declare const normativeSourceSchema: z.ZodObject<{
87
+ path: z.ZodString;
88
+ sha256: z.ZodString;
89
+ }, z.core.$strip>;
90
+ export declare const requiredValidationSchema: z.ZodObject<{
91
+ command: z.ZodString;
92
+ expectedStatus: z.ZodLiteral<"pass">;
93
+ expectedDiagnostics: z.ZodArray<z.ZodString>;
94
+ }, z.core.$strip>;
95
+ export declare const programPacketSchema: z.ZodObject<{
96
+ schema: z.ZodLiteral<"forge/program-packet@1">;
97
+ program: z.ZodString;
98
+ packetId: z.ZodString;
99
+ state: z.ZodEnum<{
100
+ draft: "draft";
101
+ sealed: "sealed";
102
+ }>;
103
+ governingDecision: z.ZodString;
104
+ decisionKind: z.ZodEnum<{
105
+ rfc: "rfc";
106
+ "spec-amendment": "spec-amendment";
107
+ "spec-node": "spec-node";
108
+ }>;
109
+ resolvedRfc: z.ZodNullable<z.ZodString>;
110
+ dependsOnPacket: z.ZodNullable<z.ZodString>;
111
+ baseCommit: z.ZodNullable<z.ZodString>;
112
+ branch: z.ZodString;
113
+ steward: z.ZodString;
114
+ normativeSources: z.ZodArray<z.ZodObject<{
115
+ path: z.ZodString;
116
+ sha256: z.ZodString;
117
+ }, z.core.$strip>>;
118
+ allowedFiles: z.ZodArray<z.ZodString>;
119
+ forbiddenFiles: z.ZodArray<z.ZodString>;
120
+ permittedTransitionDiagnostics: z.ZodArray<z.ZodString>;
121
+ requiredValidations: z.ZodArray<z.ZodObject<{
122
+ command: z.ZodString;
123
+ expectedStatus: z.ZodLiteral<"pass">;
124
+ expectedDiagnostics: z.ZodArray<z.ZodString>;
125
+ }, z.core.$strip>>;
126
+ }, z.core.$strict>;
127
+ export declare const programPacketLeaseSchema: z.ZodObject<{
128
+ schema: z.ZodLiteral<"forge/program-packet-lease@1">;
129
+ program: z.ZodString;
130
+ packetId: z.ZodString;
131
+ phase: z.ZodEnum<{
132
+ preparation: "preparation";
133
+ execution: "execution";
134
+ }>;
135
+ actor: z.ZodString;
136
+ baseCommit: z.ZodString;
137
+ sealCommit: z.ZodNullable<z.ZodString>;
138
+ tokenHash: z.ZodString;
139
+ startedAt: z.ZodString;
140
+ heartbeatAt: z.ZodString;
141
+ timeoutSeconds: z.ZodNumber;
142
+ }, z.core.$strict>;
143
+ export declare const preparationValidationSchema: z.ZodObject<{
144
+ command: z.ZodString;
145
+ status: z.ZodLiteral<"pass">;
146
+ evidenceDigest: z.ZodString;
147
+ }, z.core.$strip>;
148
+ export declare const programPacketPreparationSchema: z.ZodObject<{
149
+ schema: z.ZodLiteral<"forge/program-packet-preparation@1">;
150
+ program: z.ZodString;
151
+ packetId: z.ZodString;
152
+ baseCommit: z.ZodString;
153
+ preparationCommits: z.ZodArray<z.ZodString>;
154
+ preparationHead: z.ZodString;
155
+ changedFiles: z.ZodArray<z.ZodString>;
156
+ governingDecision: z.ZodString;
157
+ resolvedRfc: z.ZodString;
158
+ materializationCommit: z.ZodString;
159
+ validations: z.ZodArray<z.ZodObject<{
160
+ command: z.ZodString;
161
+ status: z.ZodLiteral<"pass">;
162
+ evidenceDigest: z.ZodString;
163
+ }, z.core.$strip>>;
164
+ cleanTrees: z.ZodLiteral<true>;
165
+ preparedBy: z.ZodString;
166
+ }, z.core.$strict>;
167
+ export declare const completionValidationSchema: z.ZodObject<{
168
+ command: z.ZodString;
169
+ status: z.ZodLiteral<"pass">;
170
+ evidenceDigest: z.ZodString;
171
+ }, z.core.$strip>;
172
+ export declare const programPacketCompletionSchema: z.ZodObject<{
173
+ schema: z.ZodLiteral<"forge/program-packet-completion@1">;
174
+ program: z.ZodString;
175
+ packetId: z.ZodString;
176
+ baseCommit: z.ZodString;
177
+ sealCommit: z.ZodString;
178
+ implementationCommits: z.ZodArray<z.ZodString>;
179
+ implementationHead: z.ZodString;
180
+ changedFiles: z.ZodArray<z.ZodString>;
181
+ validations: z.ZodArray<z.ZodObject<{
182
+ command: z.ZodString;
183
+ status: z.ZodLiteral<"pass">;
184
+ evidenceDigest: z.ZodString;
185
+ }, z.core.$strip>>;
186
+ remainingTransitionDiagnostics: z.ZodArray<z.ZodString>;
187
+ unexpectedDiagnostics: z.ZodArray<z.ZodString>;
188
+ recoveryStatus: z.ZodEnum<{
189
+ verified: "verified";
190
+ "not-applicable": "not-applicable";
191
+ }>;
192
+ cleanTrees: z.ZodLiteral<true>;
193
+ completedBy: z.ZodString;
194
+ }, z.core.$strict>;
195
+ export declare const recoveryRecordSchema: z.ZodObject<{
196
+ schema: z.ZodLiteral<"forge/program-packet-recovery@1">;
197
+ program: z.ZodString;
198
+ packetId: z.ZodString;
199
+ previousLeaseDigest: z.ZodString;
200
+ reason: z.ZodString;
201
+ actor: z.ZodString;
202
+ observedHead: z.ZodString;
203
+ target: z.ZodEnum<{
204
+ blocked: "blocked";
205
+ sealed: "sealed";
206
+ }>;
207
+ recoveredAt: z.ZodString;
208
+ }, z.core.$strict>;
209
+ export type ProgramActor = z.infer<typeof programActorSchema>;
210
+ export type ProgramState = z.infer<typeof programStateSchema>;
211
+ export type PacketState = z.infer<typeof packetStateSchema>;
212
+ export type RecoveryStatus = z.infer<typeof recoveryStatusSchema>;
213
+ export type ProgramManifest = z.infer<typeof programManifestSchema>;
214
+ export type ProgramPacketIndexEntry = z.infer<typeof programPacketIndexEntrySchema>;
215
+ export type ProgramPacket = z.infer<typeof programPacketSchema>;
216
+ export type NormativeSource = z.infer<typeof normativeSourceSchema>;
217
+ export type RequiredValidation = z.infer<typeof requiredValidationSchema>;
218
+ export type ProgramLeasePhase = z.infer<typeof programLeasePhaseSchema>;
219
+ export type ProgramPacketLease = z.infer<typeof programPacketLeaseSchema>;
220
+ export type PreparationValidation = z.infer<typeof preparationValidationSchema>;
221
+ export type ProgramPacketPreparation = z.infer<typeof programPacketPreparationSchema>;
222
+ export type ProgramPacketCompletion = z.infer<typeof programPacketCompletionSchema>;
223
+ export type CompletionValidation = z.infer<typeof completionValidationSchema>;
224
+ export type RecoveryRecord = z.infer<typeof recoveryRecordSchema>;
225
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../os/program/schemas.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAM3B,eAAO,MAAM,kBAAkB,aAEuC,CAAC;AAEvE,eAAO,MAAM,kBAAkB;;;;;EAA4D,CAAC;AAE5F,eAAO,MAAM,iBAAiB;;;;;;EAAgE,CAAC;AAE/F,eAAO,MAAM,oBAAoB;;;EAAyC,CAAC;AAE3E,eAAO,MAAM,uBAAuB;;;EAAuC,CAAC;AAM5E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;iBAYxC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAavB,CAAC;AAMZ,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmBrB,CAAC;AAMZ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;kBAc1B,CAAC;AAMZ,eAAO,MAAM,2BAA2B;;;;iBAItC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;kBAgBhC,CAAC;AAMZ,eAAO,MAAM,0BAA0B;;;;iBAIrC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;kBAiB/B,CAAC;AAMZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;kBAYtB,CAAC;AAMZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACtF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,174 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Zod schemas for the forge/program@1 control plane — program manifest,
4
+ packet, lease, completion, and recovery records. All schemas are strict and
5
+ reject unknown fields (RFC-0856).</purpose>
6
+ <non-goals>
7
+ <item>Do not import from @warpgogol/* — forge must remain dependency-free.</item>
8
+ <item>Do not add command logic here — schemas only.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+ <CHANGE_SUMMARY>
12
+ <item>RFC-0856: initial program control-plane schemas.</item>
13
+ <item>RFC-0857: phase-aware lease schema (preparation | execution) and preparation report schema.</item>
14
+ </CHANGE_SUMMARY>
15
+ */
16
+ import { z } from "zod/v4";
17
+ // ---------------------------------------------------------------------------
18
+ // Shared primitives
19
+ // ---------------------------------------------------------------------------
20
+ export const programActorSchema = z
21
+ .string()
22
+ .regex(/^(human|agent):.+$/, "Must be 'human:<id>' or 'agent:<id>'");
23
+ export const programStateSchema = z.enum(["preparing", "executing", "blocked", "complete"]);
24
+ export const packetStateSchema = z.enum(["draft", "sealed", "active", "completed", "blocked"]);
25
+ export const recoveryStatusSchema = z.enum(["verified", "not-applicable"]);
26
+ export const programLeasePhaseSchema = z.enum(["preparation", "execution"]);
27
+ // ---------------------------------------------------------------------------
28
+ // Program manifest: forge/program@1
29
+ // ---------------------------------------------------------------------------
30
+ export const programPacketIndexEntrySchema = z.object({
31
+ order: z.number().int().min(0),
32
+ packetId: z.string().min(1),
33
+ file: z.string().min(1),
34
+ state: packetStateSchema,
35
+ governingDecision: z.string().min(1),
36
+ decisionKind: z.enum(["rfc", "spec-amendment", "spec-node"]),
37
+ resolvedRfc: z.string().nullable(),
38
+ dependsOnPacket: z.string().nullable(),
39
+ baseCommit: z.string().nullable(),
40
+ sealCommit: z.string().nullable(),
41
+ completion: z.string().nullable(),
42
+ });
43
+ export const programManifestSchema = z
44
+ .object({
45
+ schema: z.literal("forge/program@1"),
46
+ program: z.string().min(1),
47
+ title: z.string().min(1),
48
+ branch: z.string().min(1),
49
+ state: programStateSchema,
50
+ currentPacket: z.string().min(1),
51
+ steward: programActorSchema,
52
+ sequential: z.literal(true),
53
+ parallelism: z.literal(1),
54
+ packets: z.array(programPacketIndexEntrySchema).min(1),
55
+ })
56
+ .strict();
57
+ // ---------------------------------------------------------------------------
58
+ // Program packet: forge/program-packet@1
59
+ // ---------------------------------------------------------------------------
60
+ export const normativeSourceSchema = z.object({
61
+ path: z.string().min(1),
62
+ sha256: z.string().regex(/^[0-9a-f]{64}$/, "Must be a SHA-256 hex digest"),
63
+ });
64
+ export const requiredValidationSchema = z.object({
65
+ command: z.string().min(1),
66
+ expectedStatus: z.literal("pass"),
67
+ expectedDiagnostics: z.array(z.string()),
68
+ });
69
+ export const programPacketSchema = z
70
+ .object({
71
+ schema: z.literal("forge/program-packet@1"),
72
+ program: z.string().min(1),
73
+ packetId: z.string().min(1),
74
+ state: z.enum(["draft", "sealed"]),
75
+ governingDecision: z.string().min(1),
76
+ decisionKind: z.enum(["rfc", "spec-amendment", "spec-node"]),
77
+ resolvedRfc: z.string().nullable(),
78
+ dependsOnPacket: z.string().nullable(),
79
+ baseCommit: z.string().nullable(),
80
+ branch: z.string().min(1),
81
+ steward: programActorSchema,
82
+ normativeSources: z.array(normativeSourceSchema),
83
+ allowedFiles: z.array(z.string().min(1)).min(1),
84
+ forbiddenFiles: z.array(z.string().min(1)),
85
+ permittedTransitionDiagnostics: z.array(z.string()),
86
+ requiredValidations: z.array(requiredValidationSchema),
87
+ })
88
+ .strict();
89
+ // ---------------------------------------------------------------------------
90
+ // Program packet lease: forge/program-packet-lease@1
91
+ // ---------------------------------------------------------------------------
92
+ export const programPacketLeaseSchema = z
93
+ .object({
94
+ schema: z.literal("forge/program-packet-lease@1"),
95
+ program: z.string().min(1),
96
+ packetId: z.string().min(1),
97
+ phase: programLeasePhaseSchema,
98
+ actor: programActorSchema,
99
+ baseCommit: z.string().min(1),
100
+ sealCommit: z.string().nullable(),
101
+ tokenHash: z.string().regex(/^[0-9a-f]{64}$/, "Must be a SHA-256 hex digest"),
102
+ startedAt: z.string().min(1),
103
+ heartbeatAt: z.string().min(1),
104
+ timeoutSeconds: z.number().int().positive(),
105
+ })
106
+ .strict();
107
+ // ---------------------------------------------------------------------------
108
+ // Program packet preparation: forge/program-packet-preparation@1 (RFC-0857)
109
+ // ---------------------------------------------------------------------------
110
+ export const preparationValidationSchema = z.object({
111
+ command: z.string().min(1),
112
+ status: z.literal("pass"),
113
+ evidenceDigest: z.string().min(1),
114
+ });
115
+ export const programPacketPreparationSchema = z
116
+ .object({
117
+ schema: z.literal("forge/program-packet-preparation@1"),
118
+ program: z.string().min(1),
119
+ packetId: z.string().min(1),
120
+ baseCommit: z.string().min(1),
121
+ preparationCommits: z.array(z.string().min(1)),
122
+ preparationHead: z.string().min(1),
123
+ changedFiles: z.array(z.string().min(1)),
124
+ governingDecision: z.string().min(1),
125
+ resolvedRfc: z.string().min(1),
126
+ materializationCommit: z.string().min(1),
127
+ validations: z.array(preparationValidationSchema),
128
+ cleanTrees: z.literal(true),
129
+ preparedBy: programActorSchema,
130
+ })
131
+ .strict();
132
+ // ---------------------------------------------------------------------------
133
+ // Program packet completion: forge/program-packet-completion@1
134
+ // ---------------------------------------------------------------------------
135
+ export const completionValidationSchema = z.object({
136
+ command: z.string().min(1),
137
+ status: z.literal("pass"),
138
+ evidenceDigest: z.string().min(1),
139
+ });
140
+ export const programPacketCompletionSchema = z
141
+ .object({
142
+ schema: z.literal("forge/program-packet-completion@1"),
143
+ program: z.string().min(1),
144
+ packetId: z.string().min(1),
145
+ baseCommit: z.string().min(1),
146
+ sealCommit: z.string().min(1),
147
+ implementationCommits: z.array(z.string().min(1)),
148
+ implementationHead: z.string().min(1),
149
+ changedFiles: z.array(z.string().min(1)),
150
+ validations: z.array(completionValidationSchema),
151
+ remainingTransitionDiagnostics: z.array(z.string()),
152
+ unexpectedDiagnostics: z.array(z.string()).length(0),
153
+ recoveryStatus: recoveryStatusSchema,
154
+ cleanTrees: z.literal(true),
155
+ completedBy: programActorSchema,
156
+ })
157
+ .strict();
158
+ // ---------------------------------------------------------------------------
159
+ // Recovery record: forge/program-packet-recovery@1
160
+ // ---------------------------------------------------------------------------
161
+ export const recoveryRecordSchema = z
162
+ .object({
163
+ schema: z.literal("forge/program-packet-recovery@1"),
164
+ program: z.string().min(1),
165
+ packetId: z.string().min(1),
166
+ previousLeaseDigest: z.string().min(1),
167
+ reason: z.string().min(1),
168
+ actor: programActorSchema,
169
+ observedHead: z.string().min(1),
170
+ target: z.enum(["blocked", "sealed"]),
171
+ recoveredAt: z.string().min(1),
172
+ })
173
+ .strict();
174
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../os/program/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ProgramManifest, ProgramPacket, ProgramPacketIndexEntry, ProgramPacketLease, ProgramActor } from "./schemas.ts";
2
+ export interface PacketViolation {
3
+ rule: string;
4
+ path?: string;
5
+ message: string;
6
+ }
7
+ /**
8
+ * Validate that a seal transition is allowed.
9
+ */
10
+ export declare function validateSealTransition(manifest: ProgramManifest, entry: ProgramPacketIndexEntry, packet: ProgramPacket, options: {
11
+ branch: string;
12
+ head: string;
13
+ isClean: boolean;
14
+ hasActiveLease: boolean;
15
+ }): PacketViolation[];
16
+ /**
17
+ * Validate that a lease start transition is allowed.
18
+ */
19
+ export declare function validateLeaseStartTransition(manifest: ProgramManifest, entry: ProgramPacketIndexEntry, packet: ProgramPacket, options: {
20
+ head: string;
21
+ steward: ProgramActor;
22
+ actor: ProgramActor;
23
+ hasActiveLease: boolean;
24
+ }): PacketViolation[];
25
+ /**
26
+ * Validate that a completion transition is allowed.
27
+ */
28
+ export declare function validateCompleteTransition(manifest: ProgramManifest, entry: ProgramPacketIndexEntry, lease: ProgramPacketLease, options: {
29
+ head: string;
30
+ isClean: boolean;
31
+ steward: ProgramActor;
32
+ implementationHead: string;
33
+ changedFiles: string[];
34
+ allowedFiles: string[];
35
+ forbiddenFiles: string[];
36
+ ancestryValid: boolean;
37
+ }): PacketViolation[];
38
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../os/program/state.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACb,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,uBAAuB,EAC9B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB,GACA,eAAe,EAAE,CAmFnB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,uBAAuB,EAC9B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB,GACA,eAAe,EAAE,CAoCnB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB,GACA,eAAe,EAAE,CAsDnB"}
@@ -0,0 +1,189 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>State machine logic for program packet transitions.
4
+ Validates allowed transitions and produces violation records.</purpose>
5
+ <non-goals>
6
+ <item>Do not mutate files — state validation only.</item>
7
+ <item>Do not import from @warpgogol/* — forge must remain dependency-free.</item>
8
+ </non-goals>
9
+ </MODULE_CONTRACT>
10
+ <CHANGE_SUMMARY>
11
+ <item>RFC-0856: initial state machine logic.</item>
12
+ <item>RFC-0857: spec-node resolvedRfc validation at seal boundary (PROGRAM-PACKET-12).</item>
13
+ </CHANGE_SUMMARY>
14
+ */
15
+ // ---------------------------------------------------------------------------
16
+ // Transition validation
17
+ // ---------------------------------------------------------------------------
18
+ /**
19
+ * Validate that a seal transition is allowed.
20
+ */
21
+ export function validateSealTransition(manifest, entry, packet, options) {
22
+ const violations = [];
23
+ // PROGRAM-PACKET-02: wrong branch
24
+ if (options.branch !== manifest.branch) {
25
+ violations.push({
26
+ rule: "PROGRAM-PACKET-02",
27
+ message: `wrong branch: expected ${manifest.branch}, got ${options.branch}`,
28
+ });
29
+ }
30
+ // PROGRAM-PACKET-10: dirty tree at sealed boundary
31
+ if (!options.isClean) {
32
+ violations.push({
33
+ rule: "PROGRAM-PACKET-10",
34
+ message: "dirty tree at seal boundary — commit or stash changes first",
35
+ });
36
+ }
37
+ // PROGRAM-PACKET-05: active or stale lease exists
38
+ if (options.hasActiveLease) {
39
+ violations.push({
40
+ rule: "PROGRAM-PACKET-05",
41
+ message: "active or stale lease exists — recover before sealing",
42
+ });
43
+ }
44
+ // Packet must be in draft state
45
+ if (packet.state !== "draft") {
46
+ violations.push({
47
+ rule: "PROGRAM-PACKET-04",
48
+ message: `packet state is ${packet.state}, expected draft`,
49
+ });
50
+ }
51
+ // PROGRAM-PACKET-03: predecessor must be completed (unless bootstrap)
52
+ if (entry.dependsOnPacket !== null) {
53
+ const predecessor = manifest.packets.find((p) => p.packetId === entry.dependsOnPacket);
54
+ if (!predecessor) {
55
+ violations.push({
56
+ rule: "PROGRAM-PACKET-03",
57
+ message: `predecessor packet ${entry.dependsOnPacket} not found in manifest`,
58
+ });
59
+ }
60
+ else if (predecessor.state !== "completed") {
61
+ violations.push({
62
+ rule: "PROGRAM-PACKET-03",
63
+ message: `predecessor packet ${entry.dependsOnPacket} is ${predecessor.state}, expected completed`,
64
+ });
65
+ }
66
+ else if (predecessor.completion && entry.baseCommit !== predecessor.completion) {
67
+ violations.push({
68
+ rule: "PROGRAM-PACKET-09",
69
+ message: `baseCommit ${entry.baseCommit} does not match predecessor completion ${predecessor.completion}`,
70
+ });
71
+ }
72
+ }
73
+ // baseCommit must be set for sealed packet (unless bootstrap with null predecessor)
74
+ if (entry.dependsOnPacket !== null && entry.baseCommit === null) {
75
+ violations.push({
76
+ rule: "PROGRAM-PACKET-09",
77
+ message: "baseCommit is null for a non-bootstrap packet",
78
+ });
79
+ }
80
+ // allowedFiles must be non-empty
81
+ if (packet.allowedFiles.length === 0) {
82
+ violations.push({
83
+ rule: "PROGRAM-PACKET-06",
84
+ message: "allowedFiles is empty — packet must define at least one allowed path",
85
+ });
86
+ }
87
+ // RFC-0857: spec-node packets require a resolved RFC that is accepted or implemented
88
+ if (entry.decisionKind === "spec-node") {
89
+ if (entry.resolvedRfc === null) {
90
+ violations.push({
91
+ rule: "PROGRAM-PACKET-12",
92
+ message: `spec-node packet ${entry.packetId} has resolvedRfc: null — materialize and accept the governing RFC before sealing`,
93
+ });
94
+ }
95
+ }
96
+ return violations;
97
+ }
98
+ /**
99
+ * Validate that a lease start transition is allowed.
100
+ */
101
+ export function validateLeaseStartTransition(manifest, entry, packet, options) {
102
+ const violations = [];
103
+ // PROGRAM-PACKET-04: role collision
104
+ if (options.steward === options.actor) {
105
+ violations.push({
106
+ rule: "PROGRAM-PACKET-04",
107
+ message: `role collision: steward and actor are the same (${options.steward})`,
108
+ });
109
+ }
110
+ // Packet must be sealed
111
+ if (packet.state !== "sealed") {
112
+ violations.push({
113
+ rule: "PROGRAM-PACKET-04",
114
+ message: `packet state is ${packet.state}, expected sealed`,
115
+ });
116
+ }
117
+ // PROGRAM-PACKET-05: active or stale lease exists
118
+ if (options.hasActiveLease) {
119
+ violations.push({
120
+ rule: "PROGRAM-PACKET-05",
121
+ message: "active or stale lease already exists for this packet",
122
+ });
123
+ }
124
+ // PROGRAM-PACKET-02: HEAD must match sealCommit
125
+ if (entry.sealCommit && options.head !== entry.sealCommit) {
126
+ violations.push({
127
+ rule: "PROGRAM-PACKET-02",
128
+ message: `HEAD ${options.head} does not match sealCommit ${entry.sealCommit}`,
129
+ });
130
+ }
131
+ return violations;
132
+ }
133
+ /**
134
+ * Validate that a completion transition is allowed.
135
+ */
136
+ export function validateCompleteTransition(manifest, entry, lease, options) {
137
+ const violations = [];
138
+ // PROGRAM-PACKET-04: steward must differ from actor
139
+ if (options.steward === lease.actor) {
140
+ violations.push({
141
+ rule: "PROGRAM-PACKET-04",
142
+ message: "completion steward must differ from lease actor",
143
+ });
144
+ }
145
+ // PROGRAM-PACKET-10: dirty tree
146
+ if (!options.isClean) {
147
+ violations.push({
148
+ rule: "PROGRAM-PACKET-10",
149
+ message: "dirty tree at completion boundary",
150
+ });
151
+ }
152
+ // PROGRAM-PACKET-09: ancestry
153
+ if (!options.ancestryValid) {
154
+ violations.push({
155
+ rule: "PROGRAM-PACKET-09",
156
+ message: "implementation commits do not descend from seal commit",
157
+ });
158
+ }
159
+ // PROGRAM-PACKET-09: implementation head must match
160
+ if (options.head !== options.implementationHead) {
161
+ violations.push({
162
+ rule: "PROGRAM-PACKET-09",
163
+ message: `HEAD ${options.head} does not match declared implementationHead ${options.implementationHead}`,
164
+ });
165
+ }
166
+ // PROGRAM-PACKET-06: path validation
167
+ for (const file of options.changedFiles) {
168
+ if (options.forbiddenFiles.length > 0 && isPathForbidden(file, options.forbiddenFiles)) {
169
+ violations.push({
170
+ rule: "PROGRAM-PACKET-06",
171
+ path: file,
172
+ message: `changed file ${file} is in forbidden list`,
173
+ });
174
+ }
175
+ if (!isPathAllowed(file, options.allowedFiles)) {
176
+ violations.push({
177
+ rule: "PROGRAM-PACKET-06",
178
+ path: file,
179
+ message: `changed file ${file} is not in allowed list`,
180
+ });
181
+ }
182
+ }
183
+ return violations;
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // Path helpers (imported from discovery for convenience)
187
+ // ---------------------------------------------------------------------------
188
+ import { isPathAllowed, isPathForbidden } from "./discovery.js";
189
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../os/program/state.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export interface RfcArchiveResult {
19
19
  moved: ArchiveMove[];
20
20
  skipped: ArchiveSkip[];
21
21
  dryRun: boolean;
22
+ indexRefreshed: boolean;
22
23
  }
23
24
  export declare function runRfcArchive(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<RfcArchiveResult>>;
24
25
  //# sourceMappingURL=archive.d.ts.map