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
//! **Enrollment's executor** (REMOTE §1.4 as amended, §4.2, §8; bl-f4e3) —
//! beside [`advertise`](super::advertise) and [`delete_exec`](super::delete_exec)
//! for their reason: everything else in the chokepoint routes, and these
//! *gate*.
//!
//! **The grade gate is already spent, one layer up, and this file adds none**
//! (REMOTE §4.2). A foot may say three gestures — `advertise`, `invocations`,
//! `complete` — and the set is *enumerated* in
//! [`Grade::admits`](crate::registry::Grade::admits) rather than subtracted
//! from the operator's roster, so an [`Action`](crate::boundary::Action) added
//! today is operator-only by construction: `answer_as` refuses it in band,
//! naming the grade, ahead of the dispatch and ahead of the auto-registration.
//! That is why nothing here asks what grade the caller is. A check written
//! again here would be a second authority for one fact, and the second one is
//! the one that drifts.
//!
//! **An in-world caller is admitted, and that is the act's own class.** The
//! `gestures/` inbox and `yog gesture` carry no certificate (§4.1) and are the
//! world's own residents — the operator, at a terminal, on the box that holds
//! the CA. Enrolling from there is `yog wire-certs WIRE_LEAF=…` reached through
//! the boundary, which is exactly what §3 asks for: one surface, every face.
//!
//! **Nothing here dials anything.** The material is answered, never delivered;
//! §1.4 stands because the new device performs no channel act — holding no
//! certificate, it could not open a connection at all — and the bytes reach it
//! out of channel, in the operator's hand.
use Path;
use crateOrigin;
use crate;
use crate;
use crate;
use Deps;
use crateReply;
/// The trail's word for this act (§4.2) — `["yog-step","enroll"]` at exit 0.
/// **The row names no material**: an ops line is `argv`, `cwd` and a status,
/// and the fact worth recording is that an enrollment happened here.
const STEP: &str = "enroll";
/// **What a name whose leaf already exists means** (bl-bd48) — the one question
/// asked before the act runs, in its own file at §12's budget.
/// Mint or adopt, read, shred, seat, log — each step refusing with its own
/// sentence.
///
/// The order is the fail-closed one. The identity is parsed first, so an
/// unusable name refuses before `openssl` runs; the address second, because
/// material a device cannot dial is not worth minting, and the rendezvous
/// hand-off with it (bl-9043); the mint third, being the only step that can fail for a reason outside yog; and the registration
/// last, its input already validated by the chokepoint's own resolution.
///
/// **The third step mints OR adopts** ([`stance`], bl-bd48): a name whose leaf
/// `wire-certs` already issued is registered rather than refused, because
/// registering is not issuing — it mints nothing, distrusts nothing and leaves
/// one certificate under one identity. That is what makes this door the repair
/// for the leaf `WIRE_LEAF` strands, which was reachable before only by hand or
/// by a rotation. The grade the reply carries is then the one the CA wrote into
/// the subject, read back off the certificate, rather than the word the gesture
/// asked with.
/// Neither half-landing is a hazard — a registration with no certificate grants
/// nothing and a certificate with no registration sees nothing — but a mint
/// whose material never reached the answer would leave a live key on disk, and
/// [`carry`] closes that by shredding whether or not the reads succeeded.
pub
/// The address a device will dial (§8), or the refusal naming the remedy.
///
/// `wire/address` is that fact's one home, so it is the one read — and a
/// **`:0` port refuses**. A boot that provisioned this box itself wrote
/// `127.0.0.1:0`, which is a *request* the listener answers with whatever was
/// free (bl-dc14): only the listener knows the number, and it is a different
/// number after the next boot. Putting that in a QR would mint a code that was
/// stale before it was scanned. The remedy is the operator's own statement of
/// intent, which is the act §8 has always named.
///
/// **The remedy is spelled the way it must be typed HERE** (bl-a6b7, amended
/// bl-98ef). Reaching this arm means the material was read, so a bare re-run
/// refuses ("already holds material …") — a box that can produce this sentence
/// is, by construction, a box the bare remedy turns away. What it is NOT any
/// more is a rotation: a stated host and port over standing material re-issues
/// the server leaf and writes the address, over the CA already here, distrusting
/// nothing ([`provision::state`](crate::wire::provision)). The sentence said
/// `FORCE=1` while that was the only spelling, and told an operator whose one
/// complaint was a `:0` to distrust every leaf they had carried anywhere. The
/// other half stands: the address is read at bind time, so the engine standing
/// on the `:0` listener keeps it until it is restarted, and the restart is
/// named beside the act.
///
/// It reads the **server** end because that is the end a client dials, and
/// reading it as material rather than as a file is what makes a
/// half-provisioned box say so in `material`'s own words.
/// One `host:port` a device can be handed, or the refusal naming its remedy —
/// the judgement both the file's address and a stated one pass through, so
/// there is one rule for what an envelope may carry.
///
/// A **`:0` port refuses**, whichever said it: it is a request the listener
/// answers in RAM, and its answer is a different number after the next boot.
/// The three PEMs the device carries away — anchors, its certificate, its key —
/// with the key **shredded** before they are handed back, so this box retains
/// none of it. The shred is unconditional on the reads, which is what makes a
/// failed read leave no key behind either.
///
/// The **certificate stays**, deliberately. It is public material, and its
/// presence on disk is what makes a second enrollment under one name refuse
/// ([`provision::issue`]) — re-issuing distrusts nothing, so two live
/// certificates under one identity would be the result. Keeping it is the
/// guard; keeping the key would be the leak.
/// One PEM off disk, or the refusal naming the file it could not read.
/// Remove the minted key, or refuse loudly. A key that could not be shredded is
/// a key still on the box, so it is an error and never a warning — and the
/// sentence names the file, because the remaining act is the operator's.