-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtrace.go
More file actions
104 lines (92 loc) · 4.45 KB
/
Copy pathtrace.go
File metadata and controls
104 lines (92 loc) · 4.45 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
package kernel
// DecisionTrace is a read-only projection of the exact evaluation that fed
// the canonical relation. It contains identities and bounded reasons, never
// domain observation payloads or objective references.
type DecisionTrace struct {
SchemaVersion int `json:"schema_version"`
InstanceID string `json:"instance_id"`
StateRevision uint64 `json:"state_revision"`
CurrentMode string `json:"current_mode"`
Program ProgramIdentity `json:"program"`
StateProgram *ProgramIdentity `json:"state_program,omitempty"`
ObservationFingerprint string `json:"observation_fingerprint"`
Objective ObjectiveTrace `json:"objective"`
AuthorityFingerprint string `json:"authority_fingerprint,omitempty"`
RequestedTransition string `json:"requested_transition,omitempty"`
Marked bool `json:"marked"`
Recovery *RecoveryTrace `json:"recovery,omitempty"`
Decision DecisionTraceValue `json:"decision"`
Candidates []CandidateTrace `json:"candidates,omitempty"`
}
const DecisionTraceSchemaVersion = 1
type DecisionTraceValue struct {
Kind string `json:"kind"`
Transition string `json:"transition,omitempty"`
Candidates []string `json:"candidates,omitempty"`
Reason string `json:"reason"`
}
func TraceDecision(decision Decision) DecisionTraceValue {
return DecisionTraceValue{
Kind: string(decision.Kind), Transition: decision.Transition,
Candidates: append([]string(nil), decision.Candidates...), Reason: decision.Reason,
}
}
type ObjectiveTrace struct {
Binding *ObjectiveIdentity `json:"binding,omitempty"`
Requested *ObjectiveIdentity `json:"requested,omitempty"`
}
type ObjectiveIdentity struct {
ID string `json:"id"`
Revision uint64 `json:"revision"`
Fingerprint string `json:"fingerprint"`
}
type RecoveryTrace struct {
Active bool `json:"active"`
PrescriptionID string `json:"prescription_id,omitempty"`
TransitionID string `json:"transition_id,omitempty"`
Reason string `json:"reason,omitempty"`
}
type EvaluationTrace struct {
Evaluated bool `json:"evaluated"`
Satisfied bool `json:"satisfied"`
Reason string `json:"reason,omitempty"`
}
type CandidateDisposition string
const (
DispositionSelected CandidateDisposition = "selected"
DispositionSourceModeRejected CandidateDisposition = "source-mode-rejected"
DispositionRecoveryRejected CandidateDisposition = "recovery-rejected"
DispositionObjectiveRejected CandidateDisposition = "objective-rejected"
DispositionDomainRejected CandidateDisposition = "domain-rejected"
DispositionAuthorityFrontier CandidateDisposition = "authority-frontier"
DispositionShadowed CandidateDisposition = "shadowed"
DispositionAmbiguous CandidateDisposition = "ambiguous"
DispositionExplicitlyRefused CandidateDisposition = "explicitly-refused"
DispositionIrrelevantToRequest CandidateDisposition = "irrelevant-to-request"
)
type CandidateTrace struct {
TransitionID string `json:"transition_id"`
SourceMode EvaluationTrace `json:"source_mode"`
RecoveryCompatible EvaluationTrace `json:"recovery_compatible"`
ObjectiveScope EvaluationTrace `json:"objective_scope"`
ObjectiveMutation EvaluationTrace `json:"objective_mutation"`
DomainAdmissible EvaluationTrace `json:"domain_admissible"`
Selection EvaluationTrace `json:"selection"`
Selectable bool `json:"selectable"`
SelectionClass string `json:"selection_class,omitempty"`
Rank int `json:"rank"`
Priority int `json:"priority"`
Authority AuthorityTrace `json:"authority"`
Survived bool `json:"survived"`
Disposition CandidateDisposition `json:"disposition"`
}
type AuthorityTrace struct {
Available []Capability `json:"available,omitempty"`
RequiredAll []Capability `json:"required_all,omitempty"`
RequiredAny []Capability `json:"required_any,omitempty"`
MissingAll []Capability `json:"missing_all,omitempty"`
MissingAny []Capability `json:"missing_any,omitempty"`
AllSatisfied bool `json:"all_satisfied"`
AnySatisfied bool `json:"any_satisfied"`
Satisfied bool `json:"satisfied"`
}