@davidahmann/mill 0.1.4

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 (184) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +335 -0
  3. package/dist/audit/repository.d.ts +8 -0
  4. package/dist/audit/repository.d.ts.map +1 -0
  5. package/dist/audit/repository.js +232 -0
  6. package/dist/audit/repository.js.map +1 -0
  7. package/dist/cli-program.d.ts +12 -0
  8. package/dist/cli-program.d.ts.map +1 -0
  9. package/dist/cli-program.js +1020 -0
  10. package/dist/cli-program.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +7 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config/lock.d.ts +12 -0
  16. package/dist/config/lock.d.ts.map +1 -0
  17. package/dist/config/lock.js +83 -0
  18. package/dist/config/lock.js.map +1 -0
  19. package/dist/contracts/canonical.d.ts +7 -0
  20. package/dist/contracts/canonical.d.ts.map +1 -0
  21. package/dist/contracts/canonical.js +30 -0
  22. package/dist/contracts/canonical.js.map +1 -0
  23. package/dist/contracts/schemas.d.ts +2705 -0
  24. package/dist/contracts/schemas.d.ts.map +1 -0
  25. package/dist/contracts/schemas.js +988 -0
  26. package/dist/contracts/schemas.js.map +1 -0
  27. package/dist/doctor.d.ts +21 -0
  28. package/dist/doctor.d.ts.map +1 -0
  29. package/dist/doctor.js +138 -0
  30. package/dist/doctor.js.map +1 -0
  31. package/dist/errors.d.ts +18 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +31 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +20 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/intake/prd.d.ts +14 -0
  40. package/dist/intake/prd.d.ts.map +1 -0
  41. package/dist/intake/prd.js +39 -0
  42. package/dist/intake/prd.js.map +1 -0
  43. package/dist/planning/impact.d.ts +59 -0
  44. package/dist/planning/impact.d.ts.map +1 -0
  45. package/dist/planning/impact.js +400 -0
  46. package/dist/planning/impact.js.map +1 -0
  47. package/dist/planning/specification.d.ts +42 -0
  48. package/dist/planning/specification.d.ts.map +1 -0
  49. package/dist/planning/specification.js +235 -0
  50. package/dist/planning/specification.js.map +1 -0
  51. package/dist/qualification/public-alpha.d.ts +16 -0
  52. package/dist/qualification/public-alpha.d.ts.map +1 -0
  53. package/dist/qualification/public-alpha.js +128 -0
  54. package/dist/qualification/public-alpha.js.map +1 -0
  55. package/dist/recipes/node-typescript-next-web.d.ts +19 -0
  56. package/dist/recipes/node-typescript-next-web.d.ts.map +1 -0
  57. package/dist/recipes/node-typescript-next-web.js +136 -0
  58. package/dist/recipes/node-typescript-next-web.js.map +1 -0
  59. package/dist/repository/integration.d.ts +58 -0
  60. package/dist/repository/integration.d.ts.map +1 -0
  61. package/dist/repository/integration.js +1385 -0
  62. package/dist/repository/integration.js.map +1 -0
  63. package/dist/repository/scan.d.ts +27 -0
  64. package/dist/repository/scan.d.ts.map +1 -0
  65. package/dist/repository/scan.js +388 -0
  66. package/dist/repository/scan.js.map +1 -0
  67. package/dist/result.d.ts +23 -0
  68. package/dist/result.d.ts.map +1 -0
  69. package/dist/result.js +24 -0
  70. package/dist/result.js.map +1 -0
  71. package/dist/runtime/codex.d.ts +28 -0
  72. package/dist/runtime/codex.d.ts.map +1 -0
  73. package/dist/runtime/codex.js +439 -0
  74. package/dist/runtime/codex.js.map +1 -0
  75. package/dist/runtime/context.d.ts +10 -0
  76. package/dist/runtime/context.d.ts.map +1 -0
  77. package/dist/runtime/context.js +151 -0
  78. package/dist/runtime/context.js.map +1 -0
  79. package/dist/runtime/delivery.d.ts +58 -0
  80. package/dist/runtime/delivery.d.ts.map +1 -0
  81. package/dist/runtime/delivery.js +1073 -0
  82. package/dist/runtime/delivery.js.map +1 -0
  83. package/dist/runtime/dependencies.d.ts +19 -0
  84. package/dist/runtime/dependencies.d.ts.map +1 -0
  85. package/dist/runtime/dependencies.js +495 -0
  86. package/dist/runtime/dependencies.js.map +1 -0
  87. package/dist/runtime/github.d.ts +112 -0
  88. package/dist/runtime/github.d.ts.map +1 -0
  89. package/dist/runtime/github.js +510 -0
  90. package/dist/runtime/github.js.map +1 -0
  91. package/dist/runtime/inputs.d.ts +24 -0
  92. package/dist/runtime/inputs.d.ts.map +1 -0
  93. package/dist/runtime/inputs.js +237 -0
  94. package/dist/runtime/inputs.js.map +1 -0
  95. package/dist/runtime/lease.d.ts +11 -0
  96. package/dist/runtime/lease.d.ts.map +1 -0
  97. package/dist/runtime/lease.js +52 -0
  98. package/dist/runtime/lease.js.map +1 -0
  99. package/dist/runtime/lifecycle.d.ts +87 -0
  100. package/dist/runtime/lifecycle.d.ts.map +1 -0
  101. package/dist/runtime/lifecycle.js +1024 -0
  102. package/dist/runtime/lifecycle.js.map +1 -0
  103. package/dist/runtime/process.d.ts +39 -0
  104. package/dist/runtime/process.d.ts.map +1 -0
  105. package/dist/runtime/process.js +304 -0
  106. package/dist/runtime/process.js.map +1 -0
  107. package/dist/runtime/repository.d.ts +36 -0
  108. package/dist/runtime/repository.d.ts.map +1 -0
  109. package/dist/runtime/repository.js +458 -0
  110. package/dist/runtime/repository.js.map +1 -0
  111. package/dist/runtime/state.d.ts +121 -0
  112. package/dist/runtime/state.d.ts.map +1 -0
  113. package/dist/runtime/state.js +1017 -0
  114. package/dist/runtime/state.js.map +1 -0
  115. package/dist/runtime/verifier.d.ts +31 -0
  116. package/dist/runtime/verifier.d.ts.map +1 -0
  117. package/dist/runtime/verifier.js +478 -0
  118. package/dist/runtime/verifier.js.map +1 -0
  119. package/dist/runtime/worker.d.ts +67 -0
  120. package/dist/runtime/worker.d.ts.map +1 -0
  121. package/dist/runtime/worker.js +34 -0
  122. package/dist/runtime/worker.js.map +1 -0
  123. package/dist/security/safe-path.d.ts +3 -0
  124. package/dist/security/safe-path.d.ts.map +1 -0
  125. package/dist/security/safe-path.js +102 -0
  126. package/dist/security/safe-path.js.map +1 -0
  127. package/dist/version.d.ts +4 -0
  128. package/dist/version.d.ts.map +1 -0
  129. package/dist/version.js +4 -0
  130. package/dist/version.js.map +1 -0
  131. package/dist/workflows/founder.d.ts +33 -0
  132. package/dist/workflows/founder.d.ts.map +1 -0
  133. package/dist/workflows/founder.js +422 -0
  134. package/dist/workflows/founder.js.map +1 -0
  135. package/package.json +79 -0
  136. package/recipes/node-typescript-next-web/.github/workflows/ci.yml +34 -0
  137. package/recipes/node-typescript-next-web/.node-version +1 -0
  138. package/recipes/node-typescript-next-web/.tool-versions +1 -0
  139. package/recipes/node-typescript-next-web/AGENTS.md +44 -0
  140. package/recipes/node-typescript-next-web/README.md +16 -0
  141. package/recipes/node-typescript-next-web/WORKFLOW.md +6 -0
  142. package/recipes/node-typescript-next-web/app/api/health/route.ts +5 -0
  143. package/recipes/node-typescript-next-web/app/layout.tsx +19 -0
  144. package/recipes/node-typescript-next-web/app/page.tsx +12 -0
  145. package/recipes/node-typescript-next-web/app/styles.css +21 -0
  146. package/recipes/node-typescript-next-web/docs/development.md +16 -0
  147. package/recipes/node-typescript-next-web/eslint.config.mjs +9 -0
  148. package/recipes/node-typescript-next-web/gitignore.template +5 -0
  149. package/recipes/node-typescript-next-web/next-env.d.ts +7 -0
  150. package/recipes/node-typescript-next-web/next.config.ts +11 -0
  151. package/recipes/node-typescript-next-web/package-lock.json +7540 -0
  152. package/recipes/node-typescript-next-web/package.json +39 -0
  153. package/recipes/node-typescript-next-web/playwright.config.ts +23 -0
  154. package/recipes/node-typescript-next-web/recipe.yaml +71 -0
  155. package/recipes/node-typescript-next-web/scripts/check-package.mjs +3 -0
  156. package/recipes/node-typescript-next-web/src/health.ts +3 -0
  157. package/recipes/node-typescript-next-web/test/browser/home.spec.ts +14 -0
  158. package/recipes/node-typescript-next-web/test/integration/health-route.test.ts +11 -0
  159. package/recipes/node-typescript-next-web/test/unit/health.test.ts +9 -0
  160. package/recipes/node-typescript-next-web/tsconfig.json +33 -0
  161. package/schemas/README.md +64 -0
  162. package/schemas/audit-report.schema.json +59 -0
  163. package/schemas/blueprint.schema.json +34 -0
  164. package/schemas/context-manifest.schema.json +88 -0
  165. package/schemas/delivery-record.schema.json +266 -0
  166. package/schemas/impact-manifest.schema.json +146 -0
  167. package/schemas/managed-repository.schema.json +36 -0
  168. package/schemas/mill-config.schema.json +212 -0
  169. package/schemas/mill-lock.schema.json +96 -0
  170. package/schemas/outcome-plan.schema.json +51 -0
  171. package/schemas/product-contract.schema.json +181 -0
  172. package/schemas/public-alpha-qualification.schema.json +391 -0
  173. package/schemas/recipe-manifest.schema.json +187 -0
  174. package/schemas/release-evidence.schema.json +170 -0
  175. package/schemas/repository-integration-plan.schema.json +156 -0
  176. package/schemas/review-result.schema.json +57 -0
  177. package/schemas/scenario-set.schema.json +84 -0
  178. package/schemas/source-manifest.schema.json +96 -0
  179. package/schemas/specification-proposal.schema.json +406 -0
  180. package/schemas/support-tuple.schema.json +107 -0
  181. package/schemas/task-packet.schema.json +395 -0
  182. package/schemas/validation-evidence.schema.json +125 -0
  183. package/schemas/worker-invocation.schema.json +119 -0
  184. package/schemas/worker-profile.schema.json +53 -0
@@ -0,0 +1,266 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": { "type": "string", "const": "1" },
6
+ "runId": {
7
+ "type": "string",
8
+ "format": "uuid",
9
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
10
+ },
11
+ "deliveryKey": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
12
+ "proposalDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
13
+ "approvalExpiresAt": {
14
+ "type": "string",
15
+ "format": "date-time",
16
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
17
+ },
18
+ "state": {
19
+ "type": "string",
20
+ "enum": [
21
+ "planned",
22
+ "proposing",
23
+ "effect_unknown",
24
+ "awaiting_ci",
25
+ "awaiting_human",
26
+ "merged",
27
+ "post_merge_verified",
28
+ "closed",
29
+ "cancelled",
30
+ "blocked"
31
+ ]
32
+ },
33
+ "target": {
34
+ "type": "object",
35
+ "properties": {
36
+ "forge": { "type": "string", "const": "github" },
37
+ "host": { "type": "string", "const": "github.com" },
38
+ "owner": { "type": "string", "minLength": 1 },
39
+ "repository": { "type": "string", "minLength": 1 },
40
+ "repositoryNodeId": { "type": "string", "minLength": 1 },
41
+ "cloneUrl": { "type": "string", "format": "uri" },
42
+ "remoteName": { "type": "string", "minLength": 1 },
43
+ "baseBranch": { "type": "string", "minLength": 1 },
44
+ "actorLogin": { "type": "string", "minLength": 1 },
45
+ "actorId": {
46
+ "type": "integer",
47
+ "exclusiveMinimum": 0,
48
+ "maximum": 9007199254740991
49
+ }
50
+ },
51
+ "required": [
52
+ "forge",
53
+ "host",
54
+ "owner",
55
+ "repository",
56
+ "repositoryNodeId",
57
+ "cloneUrl",
58
+ "remoteName",
59
+ "baseBranch",
60
+ "actorLogin",
61
+ "actorId"
62
+ ],
63
+ "additionalProperties": false
64
+ },
65
+ "branchName": { "type": "string", "minLength": 1 },
66
+ "candidateCommit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
67
+ "candidateTree": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
68
+ "requiredChecks": {
69
+ "type": "array",
70
+ "items": { "type": "string", "minLength": 1 }
71
+ },
72
+ "reviewPolicy": {
73
+ "type": "object",
74
+ "properties": {
75
+ "mode": { "type": "string", "enum": ["local_only", "github_required"] },
76
+ "requiredReviewerLogins": {
77
+ "type": "array",
78
+ "items": { "type": "string", "minLength": 1 }
79
+ }
80
+ },
81
+ "required": ["mode", "requiredReviewerLogins"],
82
+ "additionalProperties": false,
83
+ "allOf": [
84
+ {
85
+ "if": {
86
+ "properties": { "mode": { "const": "github_required" } },
87
+ "required": ["mode"]
88
+ },
89
+ "then": {
90
+ "properties": {
91
+ "requiredReviewerLogins": { "type": "array", "minItems": 1 }
92
+ }
93
+ }
94
+ }
95
+ ]
96
+ },
97
+ "allowedMergerLogins": {
98
+ "minItems": 1,
99
+ "type": "array",
100
+ "items": { "type": "string", "minLength": 1 }
101
+ },
102
+ "allowedMergeMethods": {
103
+ "minItems": 1,
104
+ "type": "array",
105
+ "items": { "type": "string", "enum": ["merge", "linear_tree_preserving"] }
106
+ },
107
+ "effects": {
108
+ "type": "array",
109
+ "items": {
110
+ "type": "object",
111
+ "properties": {
112
+ "id": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
113
+ "kind": { "type": "string", "enum": ["push", "pull_request"] },
114
+ "candidateCommit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
115
+ "status": {
116
+ "type": "string",
117
+ "enum": [
118
+ "intent",
119
+ "call_started",
120
+ "effect_unknown",
121
+ "retryable_absent",
122
+ "verified",
123
+ "blocked"
124
+ ]
125
+ },
126
+ "attemptCount": { "type": "integer", "minimum": 0, "maximum": 2 },
127
+ "expectedOldCommit": {
128
+ "anyOf": [
129
+ { "type": "string", "pattern": "^[a-f0-9]{40}$" },
130
+ { "type": "null" }
131
+ ]
132
+ },
133
+ "errorCode": {
134
+ "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }]
135
+ },
136
+ "updatedAt": {
137
+ "type": "string",
138
+ "format": "date-time",
139
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
140
+ }
141
+ },
142
+ "required": [
143
+ "id",
144
+ "kind",
145
+ "candidateCommit",
146
+ "status",
147
+ "attemptCount",
148
+ "expectedOldCommit",
149
+ "errorCode",
150
+ "updatedAt"
151
+ ],
152
+ "additionalProperties": false
153
+ }
154
+ },
155
+ "remoteHeadCommit": {
156
+ "anyOf": [
157
+ { "type": "string", "pattern": "^[a-f0-9]{40}$" },
158
+ { "type": "null" }
159
+ ]
160
+ },
161
+ "pullRequest": {
162
+ "anyOf": [
163
+ {
164
+ "type": "object",
165
+ "properties": {
166
+ "number": {
167
+ "type": "integer",
168
+ "exclusiveMinimum": 0,
169
+ "maximum": 9007199254740991
170
+ },
171
+ "nodeId": { "type": "string", "minLength": 1 },
172
+ "url": { "type": "string", "format": "uri" }
173
+ },
174
+ "required": ["number", "nodeId", "url"],
175
+ "additionalProperties": false
176
+ },
177
+ { "type": "null" }
178
+ ]
179
+ },
180
+ "observation": {
181
+ "anyOf": [
182
+ {
183
+ "type": "object",
184
+ "propertyNames": { "type": "string" },
185
+ "additionalProperties": {}
186
+ },
187
+ { "type": "null" }
188
+ ]
189
+ },
190
+ "merge": {
191
+ "anyOf": [
192
+ {
193
+ "type": "object",
194
+ "properties": {
195
+ "commit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
196
+ "tree": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
197
+ "method": {
198
+ "type": "string",
199
+ "enum": ["merge", "linear_tree_preserving"]
200
+ },
201
+ "mergedByLogin": { "type": "string", "minLength": 1 },
202
+ "mergedAt": {
203
+ "type": "string",
204
+ "format": "date-time",
205
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
206
+ },
207
+ "defaultBranchHead": {
208
+ "type": "string",
209
+ "pattern": "^[a-f0-9]{40}$"
210
+ }
211
+ },
212
+ "required": [
213
+ "commit",
214
+ "tree",
215
+ "method",
216
+ "mergedByLogin",
217
+ "mergedAt",
218
+ "defaultBranchHead"
219
+ ],
220
+ "additionalProperties": false
221
+ },
222
+ { "type": "null" }
223
+ ]
224
+ },
225
+ "lastErrorCode": {
226
+ "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }]
227
+ },
228
+ "createdAt": {
229
+ "type": "string",
230
+ "format": "date-time",
231
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
232
+ },
233
+ "updatedAt": {
234
+ "type": "string",
235
+ "format": "date-time",
236
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
237
+ }
238
+ },
239
+ "required": [
240
+ "schemaVersion",
241
+ "runId",
242
+ "deliveryKey",
243
+ "proposalDigest",
244
+ "approvalExpiresAt",
245
+ "state",
246
+ "target",
247
+ "branchName",
248
+ "candidateCommit",
249
+ "candidateTree",
250
+ "requiredChecks",
251
+ "reviewPolicy",
252
+ "allowedMergerLogins",
253
+ "allowedMergeMethods",
254
+ "effects",
255
+ "remoteHeadCommit",
256
+ "pullRequest",
257
+ "observation",
258
+ "merge",
259
+ "lastErrorCode",
260
+ "createdAt",
261
+ "updatedAt"
262
+ ],
263
+ "additionalProperties": false,
264
+ "$id": "https://github.com/davidahmann/mill/schemas/delivery-record.schema.json",
265
+ "title": "DeliveryRecord"
266
+ }
@@ -0,0 +1,146 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": { "type": "string", "const": "1" },
6
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
7
+ "productContractDigest": {
8
+ "type": "string",
9
+ "pattern": "^sha256:[a-f0-9]{64}$"
10
+ },
11
+ "outcomeId": { "type": "string", "pattern": "^OUT-[A-Z0-9][A-Z0-9-]*$" },
12
+ "riskClass": { "type": "string", "enum": ["low", "medium", "high"] },
13
+ "acceptanceIds": {
14
+ "minItems": 1,
15
+ "type": "array",
16
+ "items": { "type": "string", "minLength": 1 }
17
+ },
18
+ "affectedInvariantIds": {
19
+ "type": "array",
20
+ "items": { "type": "string", "pattern": "^INV-[A-Z0-9][A-Z0-9-]*$" }
21
+ },
22
+ "uncertainInvariantIds": {
23
+ "type": "array",
24
+ "items": { "type": "string", "pattern": "^INV-[A-Z0-9][A-Z0-9-]*$" }
25
+ },
26
+ "surfaces": {
27
+ "minItems": 1,
28
+ "type": "array",
29
+ "items": {
30
+ "type": "object",
31
+ "properties": {
32
+ "id": { "type": "string", "minLength": 1 },
33
+ "kind": {
34
+ "type": "string",
35
+ "enum": [
36
+ "user",
37
+ "system",
38
+ "interface",
39
+ "data",
40
+ "operations",
41
+ "design"
42
+ ]
43
+ },
44
+ "change": { "type": "string", "minLength": 1 }
45
+ },
46
+ "required": ["id", "kind", "change"],
47
+ "additionalProperties": false
48
+ }
49
+ },
50
+ "scenarioIds": {
51
+ "minItems": 1,
52
+ "type": "array",
53
+ "items": { "type": "string", "minLength": 1 }
54
+ },
55
+ "commandIds": {
56
+ "minItems": 1,
57
+ "type": "array",
58
+ "items": { "type": "string", "minLength": 1 }
59
+ },
60
+ "materialDecisions": {
61
+ "type": "array",
62
+ "items": { "type": "string", "pattern": "^DEC-[A-Z0-9][A-Z0-9-]*$" }
63
+ },
64
+ "unresolved": {
65
+ "type": "array",
66
+ "items": { "type": "string", "minLength": 1 }
67
+ },
68
+ "exceptions": {
69
+ "type": "array",
70
+ "items": {
71
+ "type": "object",
72
+ "properties": {
73
+ "id": { "type": "string", "minLength": 1 },
74
+ "scopeRefs": {
75
+ "minItems": 1,
76
+ "type": "array",
77
+ "items": { "type": "string", "minLength": 1 }
78
+ },
79
+ "reason": { "type": "string", "minLength": 1 },
80
+ "approvedBy": { "type": "string", "minLength": 1 },
81
+ "approvedAt": {
82
+ "type": "string",
83
+ "format": "date-time",
84
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
85
+ },
86
+ "expiresAt": {
87
+ "type": "string",
88
+ "format": "date-time",
89
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
90
+ }
91
+ },
92
+ "required": [
93
+ "id",
94
+ "scopeRefs",
95
+ "reason",
96
+ "approvedBy",
97
+ "approvedAt",
98
+ "expiresAt"
99
+ ],
100
+ "additionalProperties": false
101
+ }
102
+ },
103
+ "approval": {
104
+ "anyOf": [
105
+ {
106
+ "type": "object",
107
+ "properties": {
108
+ "approvedBy": { "type": "string", "minLength": 1 },
109
+ "approvedAt": {
110
+ "type": "string",
111
+ "format": "date-time",
112
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
113
+ },
114
+ "proposalDigest": {
115
+ "type": "string",
116
+ "pattern": "^sha256:[a-f0-9]{64}$"
117
+ }
118
+ },
119
+ "required": ["approvedBy", "approvedAt", "proposalDigest"],
120
+ "additionalProperties": false
121
+ },
122
+ { "type": "null" }
123
+ ]
124
+ }
125
+ },
126
+ "required": [
127
+ "schemaVersion",
128
+ "id",
129
+ "productContractDigest",
130
+ "outcomeId",
131
+ "riskClass",
132
+ "acceptanceIds",
133
+ "affectedInvariantIds",
134
+ "uncertainInvariantIds",
135
+ "surfaces",
136
+ "scenarioIds",
137
+ "commandIds",
138
+ "materialDecisions",
139
+ "unresolved",
140
+ "exceptions",
141
+ "approval"
142
+ ],
143
+ "additionalProperties": false,
144
+ "$id": "https://github.com/davidahmann/mill/schemas/impact-manifest.schema.json",
145
+ "title": "ImpactManifest"
146
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": { "type": "string", "const": "1" },
6
+ "id": {
7
+ "type": "string",
8
+ "format": "uuid",
9
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
10
+ },
11
+ "forgeHost": { "type": "string", "minLength": 1 },
12
+ "owner": { "type": "string", "minLength": 1 },
13
+ "repository": { "type": "string", "minLength": 1 },
14
+ "canonicalBranch": { "type": "string", "minLength": 1 },
15
+ "remoteName": { "type": "string", "minLength": 1 },
16
+ "remoteUrl": { "type": "string", "format": "uri" },
17
+ "trustCeiling": {
18
+ "type": "string",
19
+ "enum": ["inspect", "build", "propose"]
20
+ }
21
+ },
22
+ "required": [
23
+ "schemaVersion",
24
+ "id",
25
+ "forgeHost",
26
+ "owner",
27
+ "repository",
28
+ "canonicalBranch",
29
+ "remoteName",
30
+ "remoteUrl",
31
+ "trustCeiling"
32
+ ],
33
+ "additionalProperties": false,
34
+ "$id": "https://github.com/davidahmann/mill/schemas/managed-repository.schema.json",
35
+ "title": "ManagedRepository"
36
+ }
@@ -0,0 +1,212 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": { "type": "string", "const": "1" },
6
+ "repositoryId": {
7
+ "type": "string",
8
+ "format": "uuid",
9
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
10
+ },
11
+ "trustCeiling": {
12
+ "type": "string",
13
+ "enum": ["inspect", "build", "propose"]
14
+ },
15
+ "sensitivePaths": {
16
+ "default": [],
17
+ "type": "array",
18
+ "items": {
19
+ "type": "string",
20
+ "pattern": "^(?!\\/)(?!.*(?:^|\\/)\\.\\.(?:\\/|$))[^*?[\\]\\\\]+(?:\\/\\*\\*)?$"
21
+ }
22
+ },
23
+ "verifier": {
24
+ "type": "object",
25
+ "properties": {
26
+ "image": {
27
+ "type": "string",
28
+ "pattern": "^[^@\\s]+@sha256:[a-f0-9]{64}$"
29
+ },
30
+ "network": { "type": "string", "const": "none" },
31
+ "dependencies": {
32
+ "type": "object",
33
+ "properties": {
34
+ "manager": { "type": "string", "const": "npm" },
35
+ "registry": {
36
+ "type": "string",
37
+ "const": "https://registry.npmjs.org"
38
+ },
39
+ "targetPath": { "type": "string", "const": "node_modules" },
40
+ "lockPaths": {
41
+ "minItems": 1,
42
+ "type": "array",
43
+ "items": {
44
+ "type": "string",
45
+ "pattern": "^(?!\\/)(?!.*(?:^|\\/)\\.\\.(?:\\/|$))[^*?[\\]\\\\]+(?:\\/\\*\\*)?$"
46
+ }
47
+ }
48
+ },
49
+ "required": ["manager", "registry", "targetPath", "lockPaths"],
50
+ "additionalProperties": false
51
+ }
52
+ },
53
+ "required": ["image", "network"],
54
+ "additionalProperties": false
55
+ },
56
+ "propose": {
57
+ "type": "object",
58
+ "properties": {
59
+ "forge": { "type": "string", "const": "github" },
60
+ "host": { "type": "string", "const": "github.com" },
61
+ "owner": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+$" },
62
+ "repository": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+$" },
63
+ "repositoryNodeId": { "type": "string", "minLength": 1 },
64
+ "remoteName": { "type": "string", "pattern": "^[A-Za-z0-9._-]+$" },
65
+ "baseBranch": {
66
+ "type": "string",
67
+ "pattern": "^(?!-)(?!.*\\.\\.)[^\\s~^:?*[\\\\]+$"
68
+ },
69
+ "branchPrefix": { "type": "string", "const": "mill/" },
70
+ "allowedActors": {
71
+ "minItems": 1,
72
+ "type": "array",
73
+ "items": { "type": "string", "minLength": 1 }
74
+ },
75
+ "allowedMergerLogins": {
76
+ "minItems": 1,
77
+ "type": "array",
78
+ "items": { "type": "string", "minLength": 1 }
79
+ },
80
+ "requiredChecks": {
81
+ "type": "array",
82
+ "items": { "type": "string", "minLength": 1 }
83
+ },
84
+ "reviewPolicy": {
85
+ "type": "object",
86
+ "properties": {
87
+ "mode": {
88
+ "type": "string",
89
+ "enum": ["local_only", "github_required"]
90
+ },
91
+ "requiredReviewerLogins": {
92
+ "type": "array",
93
+ "items": { "type": "string", "minLength": 1 }
94
+ }
95
+ },
96
+ "required": ["mode", "requiredReviewerLogins"],
97
+ "additionalProperties": false,
98
+ "allOf": [
99
+ {
100
+ "if": {
101
+ "properties": { "mode": { "const": "github_required" } },
102
+ "required": ["mode"]
103
+ },
104
+ "then": {
105
+ "properties": {
106
+ "requiredReviewerLogins": { "type": "array", "minItems": 1 }
107
+ }
108
+ }
109
+ }
110
+ ]
111
+ },
112
+ "allowedMergeMethods": {
113
+ "minItems": 1,
114
+ "type": "array",
115
+ "items": {
116
+ "type": "string",
117
+ "enum": ["merge", "linear_tree_preserving"]
118
+ }
119
+ },
120
+ "approvalTtlSeconds": {
121
+ "default": 900,
122
+ "type": "integer",
123
+ "minimum": 60,
124
+ "maximum": 3600
125
+ },
126
+ "pollTimeoutSeconds": {
127
+ "default": 600,
128
+ "type": "integer",
129
+ "minimum": 1,
130
+ "maximum": 1800
131
+ }
132
+ },
133
+ "required": [
134
+ "forge",
135
+ "host",
136
+ "owner",
137
+ "repository",
138
+ "repositoryNodeId",
139
+ "remoteName",
140
+ "baseBranch",
141
+ "branchPrefix",
142
+ "allowedActors",
143
+ "allowedMergerLogins",
144
+ "requiredChecks",
145
+ "reviewPolicy",
146
+ "allowedMergeMethods"
147
+ ],
148
+ "additionalProperties": false
149
+ },
150
+ "commands": {
151
+ "type": "object",
152
+ "propertyNames": { "type": "string", "minLength": 1 },
153
+ "additionalProperties": {
154
+ "type": "object",
155
+ "properties": {
156
+ "argv": {
157
+ "minItems": 1,
158
+ "type": "array",
159
+ "items": { "type": "string", "minLength": 1 }
160
+ },
161
+ "cwd": { "type": "string", "minLength": 1 },
162
+ "controlPaths": {
163
+ "minItems": 1,
164
+ "type": "array",
165
+ "items": {
166
+ "type": "string",
167
+ "pattern": "^(?!\\/)(?!.*(?:^|\\/)\\.\\.(?:\\/|$))[^*?[\\]\\\\]+(?:\\/\\*\\*)?$"
168
+ }
169
+ },
170
+ "capability": {
171
+ "type": "string",
172
+ "enum": ["read", "build", "test", "package"]
173
+ },
174
+ "required": { "default": true, "type": "boolean" },
175
+ "timeoutSeconds": {
176
+ "default": 600,
177
+ "type": "integer",
178
+ "minimum": 1,
179
+ "maximum": 3600
180
+ },
181
+ "execution": {
182
+ "default": "oci",
183
+ "type": "string",
184
+ "enum": ["oci", "host"]
185
+ },
186
+ "writablePaths": {
187
+ "type": "array",
188
+ "items": {
189
+ "type": "string",
190
+ "pattern": "^(?!\\.\\.?$)(?!.*[,/])[^*?[\\]\\\\]+$"
191
+ }
192
+ }
193
+ },
194
+ "required": ["argv", "cwd", "controlPaths", "capability"],
195
+ "additionalProperties": false
196
+ }
197
+ }
198
+ },
199
+ "required": ["schemaVersion", "repositoryId", "trustCeiling", "commands"],
200
+ "additionalProperties": false,
201
+ "allOf": [
202
+ {
203
+ "if": {
204
+ "properties": { "trustCeiling": { "const": "propose" } },
205
+ "required": ["trustCeiling"]
206
+ },
207
+ "then": { "properties": { "propose": true }, "required": ["propose"] }
208
+ }
209
+ ],
210
+ "$id": "https://github.com/davidahmann/mill/schemas/mill-config.schema.json",
211
+ "title": "MillConfig"
212
+ }