-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathir.go
More file actions
351 lines (307 loc) · 12.5 KB
/
Copy pathir.go
File metadata and controls
351 lines (307 loc) · 12.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
// Package controlprogram defines Boatstack's domain-neutral Control Program IR.
// Domain packages bind the generic declarations to their own observations and
// operators; this package does not know about software delivery.
package controlprogram
import "encoding/json"
const (
SchemaName = "control-program"
SchemaRevision = 7
)
type Document struct {
Schema string `json:"schema"`
SchemaRevision int `json:"schema_revision"`
Program Program `json:"program"`
Declarations Declarations `json:"declarations"`
Facets []Facet `json:"facets"`
Evidence []Evidence `json:"evidence,omitempty"`
Work []WorkContract `json:"work,omitempty"`
Operators []Operator `json:"operators"`
Transitions []Transition `json:"transitions"`
Targets []Target `json:"targets"`
Entries []Entry `json:"entries"`
Description string `json:"description,omitempty"`
}
type Program struct {
ID string `json:"id"`
Version string `json:"version"`
HumanIdentity string `json:"human_identity,omitempty"`
Description string `json:"description,omitempty"`
}
type Declarations struct {
Capabilities []string `json:"capabilities,omitempty"`
Authorities []string `json:"authorities,omitempty"`
Effects []string `json:"effects,omitempty"`
Verifiers []string `json:"verifiers,omitempty"`
InputResolvers []string `json:"input_resolvers,omitempty"`
}
type Facet struct {
ID string `json:"id"`
Kind string `json:"kind"`
Values []string `json:"values,omitempty"`
Description string `json:"description,omitempty"`
}
type Evidence struct {
ID string `json:"id"`
Subject string `json:"subject"`
Kind string `json:"kind"`
Description string `json:"description,omitempty"`
}
// WorkAsset is a repository asset declaration in raw IR and an exact
// content-bound asset in compiled IR. The trusted compiler supplies SHA256 and
// Content; repository Flow source may supply only Path.
type WorkAsset struct {
Path string `json:"path"`
SHA256 string `json:"sha256,omitempty"`
Content string `json:"content,omitempty"`
}
type WorkInput struct {
ID string `json:"id"`
EntryInput string `json:"entry_input"`
}
type WorkOutput struct {
ID string `json:"id"`
Path string `json:"path"`
MediaType string `json:"media_type"`
Required bool `json:"required"`
MaxBytes int64 `json:"max_bytes,omitempty"`
Guidance *WorkAsset `json:"guidance,omitempty"`
Schema *WorkAsset `json:"schema,omitempty"`
}
// WorkContract declares bounded foreground work. It contains no executable
// code, capabilities, authority, effects, or native handlers.
type WorkContract struct {
ID string `json:"id"`
Instructions WorkAsset `json:"instructions"`
Inputs []WorkInput `json:"inputs"`
Outputs []WorkOutput `json:"outputs"`
Description string `json:"description,omitempty"`
}
// Predicate is a closed AST. Exactly one node variant must be present.
type Predicate struct {
All []Predicate `json:"all,omitempty"`
Any []Predicate `json:"any,omitempty"`
Not *Predicate `json:"not,omitempty"`
Fact *FactPredicate `json:"fact,omitempty"`
True *bool `json:"true,omitempty"`
}
type FactPredicate struct {
Facet string `json:"facet"`
Statuses []string `json:"statuses,omitempty"`
Values []string `json:"values,omitempty"`
}
type OperatorBinding struct {
Reference string `json:"reference"`
Version string `json:"version"`
Fingerprint string `json:"fingerprint,omitempty"`
}
type AuthorityRequirement struct {
AnyOf []string `json:"any_of,omitempty"`
AllOf []string `json:"all_of,omitempty"`
}
type ParameterSourceKind string
const (
ParameterSourceEntryInput ParameterSourceKind = "entry-input"
ParameterSourceState ParameterSourceKind = "state"
ParameterSourceReceipt ParameterSourceKind = "receipt"
ParameterSourceStateOrReceipt ParameterSourceKind = "state-or-receipt"
ParameterSourceWorkOutput ParameterSourceKind = "work-output"
ParameterSourceTrustedResolver ParameterSourceKind = "trusted-resolver"
ParameterSourceHostInput ParameterSourceKind = "host-input"
)
type TrustedValidatorBinding struct {
Reference string `json:"reference"`
Version string `json:"version"`
Fingerprint string `json:"fingerprint"`
}
// ValueTypeDefinition is the closed canonical parameter value-type model.
// Only fields owned by the selected kind may be populated.
type ValueTypeDefinition struct {
Kind string `json:"kind"`
Validator *TrustedValidatorBinding `json:"validator,omitempty"`
Minimum *int64 `json:"minimum,omitempty"`
Maximum *int64 `json:"maximum,omitempty"`
Schema *TrustedValidatorBinding `json:"schema,omitempty"`
}
type OperatorParameter struct {
ID string `json:"id"`
Type ValueTypeDefinition `json:"type"`
Required bool `json:"required"`
Secret bool `json:"secret"`
AllowedSources []ParameterSourceKind `json:"allowed_sources"`
Authority AuthorityRequirement `json:"authority"`
}
type ParameterResolverBinding struct {
Reference string `json:"reference"`
Version string `json:"version"`
Fingerprint string `json:"fingerprint,omitempty"`
}
type HostInputRequest struct {
ID string `json:"id"`
Description string `json:"description"`
Authorities []string `json:"authorities"`
Scope string `json:"scope"`
}
// ParameterProducer is a closed tagged union. The compiler rejects fields
// that do not belong to Kind and resolves trusted bindings before publication.
type ParameterProducer struct {
Kind ParameterSourceKind `json:"kind"`
Input string `json:"input,omitempty"`
Facet string `json:"facet,omitempty"`
AvailableWhen *Predicate `json:"available_when,omitempty"`
Transition string `json:"transition,omitempty"`
Field string `json:"field,omitempty"`
Work string `json:"work,omitempty"`
Output string `json:"output,omitempty"`
Binding *ParameterResolverBinding `json:"binding,omitempty"`
Request *HostInputRequest `json:"request,omitempty"`
}
type TransitionParameterBinding struct {
Parameter string `json:"parameter"`
Producer ParameterProducer `json:"producer"`
}
type Operator struct {
ID string `json:"id"`
Binding *OperatorBinding `json:"binding,omitempty"`
Capabilities []string `json:"capabilities,omitempty"`
Authority AuthorityRequirement `json:"authority"`
Effects []string `json:"effects,omitempty"`
Verifier string `json:"verifier,omitempty"`
Recovery string `json:"recovery,omitempty"`
StateEffect *StateEffect `json:"state_effect,omitempty"`
ExecutionContext string `json:"execution_context"`
Parameters []OperatorParameter `json:"parameters,omitempty"`
Outputs []OperatorOutput `json:"outputs,omitempty"`
StateInputs []OperatorStateInput `json:"state_inputs,omitempty"`
ReceiptInputs []OperatorReceiptInput `json:"receipt_inputs,omitempty"`
Description string `json:"description,omitempty"`
}
// OperatorOutput declares a committed transition-receipt field that later
// transitions may consume. Trusted bindings own this metadata.
type OperatorOutput struct {
ID string `json:"id"`
Type ValueTypeDefinition `json:"type"`
}
// OperatorStateInput binds a state-sourced parameter to the exact canonical
// facet and availability predicate owned by a trusted operator adapter.
type OperatorStateInput struct {
Parameter string `json:"parameter"`
Facet string `json:"facet"`
AvailableWhen Predicate `json:"available_when"`
}
// OperatorReceiptInput binds a receipt-capable parameter to one exact
// committed transition output owned by a trusted operator adapter. Guaranteed
// is required when that receipt is the parameter's only source.
type OperatorReceiptInput struct {
Parameter string `json:"parameter"`
Transition string `json:"transition"`
Field string `json:"field"`
Guaranteed bool `json:"guaranteed,omitempty"`
}
type StateEffect struct {
Kind string `json:"kind"`
Preconditions []StatePrecondition `json:"preconditions,omitempty"`
Assignments []StateAssignment `json:"assignments,omitempty"`
NativeHandler string `json:"native_handler,omitempty"`
}
type StatePrecondition struct {
Facet string `json:"facet"`
Values []string `json:"values"`
}
type StateAssignment struct {
Facet string `json:"facet"`
Value *string `json:"value,omitempty"`
ValueFrom *ValueReference `json:"value_from,omitempty"`
}
type ValueReference struct {
Parameter string `json:"parameter,omitempty"`
Admission string `json:"admission,omitempty"`
Invocation string `json:"invocation,omitempty"`
}
type Transition struct {
ID string `json:"id"`
Operator string `json:"operator"`
Guard Predicate `json:"guard"`
Target Predicate `json:"target"`
Priority int `json:"priority"`
Requires TransitionRequirements `json:"requires,omitempty"`
Work string `json:"work,omitempty"`
Parameters []TransitionParameterBinding `json:"parameters,omitempty"`
Description string `json:"description,omitempty"`
}
type TransitionRequirements struct {
Authorities []string `json:"authorities,omitempty"`
}
type Target struct {
ID string `json:"id"`
Predicate Predicate `json:"predicate"`
Description string `json:"description,omitempty"`
}
type Entry struct {
ID string `json:"id"`
Target string `json:"target"`
Requires TransitionRequirements `json:"requires,omitempty"`
Inputs []EntryInput `json:"inputs,omitempty"`
Delegation *DelegationBinding `json:"delegation,omitempty"`
Diagnostics *EntryDiagnostics `json:"diagnostics,omitempty"`
Description string `json:"description,omitempty"`
}
// EntryDiagnostics controls generated host UX only. It is excluded from the
// executable Program fingerprint but remains bound by the source, artifact,
// and generated-projection digests.
type EntryDiagnostics struct {
ExplainOnSuspend bool `json:"explain_on_suspend,omitempty"`
}
type DelegationBinding struct {
Reference string `json:"reference"`
Version string `json:"version"`
Fingerprint string `json:"fingerprint,omitempty"`
Authorities []string `json:"authorities,omitempty"`
}
type EntryInput struct {
ID string `json:"id"`
Type string `json:"type"`
Required bool `json:"required"`
Resolver string `json:"resolver,omitempty"`
Config json.RawMessage `json:"config,omitempty"`
}
// BindingResolver is the only way a domain can add trusted operator
// semantics. The compiler copies the resolved semantics into the canonical IR
// and binds their exact fingerprint.
type BindingResolver interface {
ResolveOperator(reference, version string) (ResolvedOperator, error)
ResolveDelegation(reference, version string) (ResolvedDelegation, error)
ResolveParameterResolver(reference, version string) (ResolvedParameterResolver, error)
ResolveValueValidator(reference, version string) (ResolvedValueValidator, error)
}
type ResolvedOperator struct {
Fingerprint string
Capabilities []string
Authority AuthorityRequirement
Effects []string
Verifier string
Recovery string
StateEffect StateEffect
ExecutionContext string
Parameters []OperatorParameter
Outputs []OperatorOutput
StateInputs []OperatorStateInput
ReceiptInputs []OperatorReceiptInput
}
type ResolvedParameterResolver struct {
Fingerprint string
OutputType ValueTypeDefinition
SourceKind ParameterSourceKind
Authority AuthorityRequirement
Dependencies []string
StabilityScope string
MaySuspend bool
}
type ResolvedValueValidator struct {
Fingerprint string
Type ValueTypeDefinition
}
type ResolvedDelegation struct {
Fingerprint string
Authorities []string
Delegable bool
}