lib/machine/src/fabric/transition/schema.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const admission = @import("../../admission/root.zig");
2 const fabric = @import("../root.zig");
3 const fault = @import("../../fault/root.zig");
4 const os = @import("os");
5 const std = @import("std");
6
7 pub const magic = [8]u8{ 'M', 'C', 'H', 'F', 'T', 'R', '1', 0 };
8 pub const version: u16 = 1;
9 pub const flags: u16 = 0;
10 pub const format: u16 = 1;
11 pub const stream_bytes: usize = 1024;
12 pub const digest_bytes: u16 = os.abi.wire.digest_bytes;
13 pub const root_bytes: u16 = 96;
14 pub const record_bytes: u16 = 208;
15 pub const effect_bytes: u16 = 240;
16 pub const fault_effect_bytes: u16 = 88;
17 pub const decision_bytes: u16 = 136;
18 pub const semantic_bytes: u16 = 448;
19
20 pub const Envelope = struct {
21 pub const magic_offset: usize = 0;
22 pub const version_offset: usize = 8;
23 pub const stream_bytes_offset: usize = 10;
24 pub const flags_offset: usize = 12;
25 pub const format_offset: usize = 14;
26 pub const fabric_dialect_offset: usize = 16;
27 pub const fault_dialect_offset: usize = 18;
28 pub const digest_bytes_offset: usize = 20;
29 pub const root_bytes_offset: usize = 22;
30 pub const record_bytes_offset: usize = 24;
31 pub const effect_bytes_offset: usize = 26;
32 pub const fault_effect_bytes_offset: usize = 28;
33 pub const decision_bytes_offset: usize = 30;
34 pub const semantic_bytes_offset: usize = 32;
35 pub const reserved_offset: usize = 34;
36 pub const limit: usize = 64;
37 };
38
39 pub const RootLayout = struct {
40 pub const digest_offset: usize = 0;
41 pub const contract_offset: usize = digest_offset + digest_bytes;
42 pub const entry_frontier_offset: usize = contract_offset + digest_bytes;
43 pub const admission_frontier_offset: usize = entry_frontier_offset + 8;
44 pub const fault_frontier_offset: usize = admission_frontier_offset + 8;
45 pub const dialect_offset: usize = fault_frontier_offset + 8;
46 pub const reserved_offset: usize = dialect_offset + 2;
47 pub const limit: usize = root_bytes;
48 };
49
50 pub const Header = struct {
51 pub const previous_offset: usize = Envelope.limit;
52 pub const result_offset: usize = previous_offset + root_bytes;
53 pub const sequence_offset: usize = result_offset + root_bytes;
54 pub const kind_offset: usize = sequence_offset + 8;
55 pub const reserved_offset: usize = kind_offset + 1;
56 pub const limit: usize = 272;
57 };
58
59 pub const Admission = struct {
60 pub const node_offset: usize = 0;
61 pub const record_kind_offset: usize = node_offset + 16;
62 pub const effect_kind_offset: usize = record_kind_offset + 1;
63 pub const fault_present_offset: usize = effect_kind_offset + 1;
64 pub const reserved_offset: usize = fault_present_offset + 1;
65 pub const record_offset: usize = 24;
66 pub const effect_offset: usize = record_offset + record_bytes;
67 pub const fault_effect_offset: usize = effect_offset + effect_bytes;
68 pub const decision_offset: usize = fault_effect_offset + fault_effect_bytes;
69 pub const limit: usize = decision_offset + decision_bytes;
70 };
71
72 pub const Record = struct {
73 pub const first_offset: usize = 0;
74 pub const second_offset: usize = 8;
75 pub const correlation_offset: usize = 32;
76 pub const status_offset: usize = 40;
77 pub const effect_length_offset: usize = 42;
78 pub const output_root_offset: usize = 44;
79 pub const effect_reserved_offset: usize = 76;
80 pub const effect_storage_offset: usize = 80;
81 pub const effect_limit: usize = 200;
82 pub const payload_length_offset: usize = 8;
83 pub const payload_reserved_offset: usize = 10;
84 pub const payload_storage_offset: usize = 16;
85 pub const payload_limit: usize = 160;
86 pub const limit: usize = record_bytes;
87 };
88
89 pub const Effect = struct {
90 pub const id_offset: usize = 0;
91 pub const source_offset: usize = 8;
92 pub const destination_offset: usize = 24;
93 pub const channel_offset: usize = 40;
94 pub const length_offset: usize = 42;
95 pub const request_receipt_offset: usize = 44;
96 pub const request_correlation_offset: usize = 76;
97 pub const digest_offset: usize = 84;
98 pub const reserved_offset: usize = 116;
99 pub const storage_offset: usize = 120;
100 pub const limit: usize = effect_bytes;
101 };
102
103 pub const FaultEffect = struct {
104 pub const kind_offset: usize = 0;
105 pub const reserved_offset: usize = 1;
106 pub const value_offset: usize = 8;
107 pub const second_offset: usize = 24;
108 pub const third_offset: usize = 56;
109 pub const limit: usize = fault_effect_bytes;
110 };
111
112 pub const Decision = struct {
113 pub const id_offset: usize = 0;
114 pub const dialect_offset: usize = 32;
115 pub const kind_offset: usize = 34;
116 pub const choice_offset: usize = 35;
117 pub const reserved_offset: usize = 36;
118 pub const basis_offset: usize = 40;
119 pub const subject_offset: usize = 72;
120 pub const digest_offset: usize = 104;
121 pub const limit: usize = decision_bytes;
122 };
123
124 pub const Settlement = struct {
125 pub const node_offset: usize = 0;
126 pub const reserved_offset: usize = 16;
127 pub const semantic_offset: usize = 24;
128 pub const limit: usize = semantic_offset + semantic_bytes;
129 };
130
131 pub const Semantic = struct {
132 pub const admission_offset: usize = 0;
133 pub const contract_offset: usize = 32;
134 pub const source_root_offset: usize = 64;
135 pub const input_offset: usize = 96;
136 pub const terminal_input_offset: usize = 104;
137 pub const virtual_time_offset: usize = 112;
138 pub const entropy_offset: usize = 120;
139 pub const effect_offset: usize = 128;
140 pub const image_offset: usize = 136;
141 pub const execution_offset: usize = 168;
142 pub const block_generation_offset: usize = 200;
143 pub const block_digest_offset: usize = 208;
144 pub const request_sequence_offset: usize = 240;
145 pub const semantic_frontier_offset: usize = 248;
146 pub const effect_frontier_offset: usize = 256;
147 pub const terminal_offset: usize = 264;
148 pub const boundary_virtual_time_offset: usize = 272;
149 pub const boundary_entropy_offset: usize = 280;
150 pub const request_consumed_offset: usize = 288;
151 pub const request_produced_offset: usize = 296;
152 pub const event_consumed_offset: usize = 304;
153 pub const event_produced_offset: usize = 312;
154 pub const unresolved_effects_offset: usize = 320;
155 pub const scheduler_offset: usize = 324;
156 pub const first_reserved_offset: usize = 326;
157 pub const boundary_block_offset: usize = 328;
158 pub const boundary_input_offset: usize = 360;
159 pub const boundary_terminal_input_offset: usize = 368;
160 pub const settled_request_offset: usize = 376;
161 pub const settled_event_offset: usize = 384;
162 pub const k0_offset: usize = 392;
163 pub const second_reserved_offset: usize = 393;
164 pub const transcript_offset: usize = 400;
165 pub const third_reserved_offset: usize = 432;
166 pub const limit: usize = semantic_bytes;
167 };
168
169 pub const Fault = struct {
170 pub const effect_offset: usize = 0;
171 pub const decision_offset: usize = effect_offset + fault_effect_bytes;
172 pub const limit: usize = decision_offset + decision_bytes;
173 };
174
175 comptime {
176 std.debug.assert(stream_bytes <= std.math.maxInt(u16));
177 std.debug.assert(admission.terminal_bytes_max == 144);
178 std.debug.assert(admission.entropy_bytes_max == 144);
179 std.debug.assert(admission.effect_result_bytes_max == 120);
180 std.debug.assert(fabric.packet_bytes_max == 120);
181 std.debug.assert(@backingInt(fabric.Dialect.ordered_effect_fabric_v3) == 3);
182 std.debug.assert(@backingInt(fault.Dialect.deterministic_fault_v1) == 1);
183 std.debug.assert(RootLayout.reserved_offset == 90);
184 std.debug.assert(RootLayout.limit == 96);
185 std.debug.assert(Header.limit == 272);
186 std.debug.assert(Admission.limit == 696);
187 std.debug.assert(Header.limit + Admission.limit == 968);
188 std.debug.assert(Header.limit + Settlement.limit == 744);
189 std.debug.assert(Header.limit + Fault.limit == 496);
190 }