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
//! **The ops trail** — every action that crossed the engine's boundary, what
//! it did, and where its alarm stands (yog's `docs/REMOTE.md` §9.17, PROTOCOL
//! 11; bl-4c48).
//!
//! It is the engine's own record of what it RAN: one row per child process the
//! boundary spawned, newest last, with the classification the engine already
//! made rather than the integer a reader would have to classify itself.
//!
//! # The classification crosses, so this seat does not make one
//!
//! REMOTE §9.17 is explicit about why [`OpRow::standing`], [`OpRow::failed`]
//! and [`OpRow::exit_label`] are on the wire at all: a seat that wanted the
//! failure banner would otherwise have to re-implement the sentinel table, the
//! `128 + n` signal reading, the retirement key, the ack scan and the origin
//! grouping — *"five derivations this document names one home for apiece, and
//! whose failure mode is a seat quietly disagreeing rather than failing to
//! build"*. So nothing here reads [`OpRow::exit`] to decide anything; the
//! integer is carried because it is what an operator asks for after the label,
//! and the words are what the pane paints.
//!
//! # And the row says WHO, because nothing later can (PROTOCOL 16)
//!
//! REMOTE §9.20 put [`OpRow::client`] on the row for the reason presence is
//! not on it: *"presence is a point-in-time observation by design, so nothing
//! after the fact can say who a row belonged to"*. Two seats depositing into
//! one conversation in the same second left two rows spelling `argv`, `cwd`,
//! `origin` and `exit` and nothing that told them apart. The vocabulary is the
//! registry's own — a certificate common name, or the reserved `local` for the
//! window, the gestures inbox and yog's own loops — so a trail row and a
//! roster row spell one identity one way.
//!
//! # The standing is total, and rides verbatim
//!
//! `clean` / `detached` / `live` / `retired` / `acked` — the outcome folded
//! with the ack watermark, present on every row rather than only on failures,
//! *"which would leave a reader telling ran clean from handed off, no exit
//! observed by re-reading the exit integer"*. It is a [`String`] and not an
//! enum for [`super`]'s rung 3: a word this build has never seen paints as
//! itself, exactly as a step's `wound` does, and the one word this module has
//! a reading for is [`CLEAN`] — which it reads as *nothing to say*.
use ;
use fields;
/// The kind token this reading answers to.
pub const KIND: &str = "ops";
/// **The standing of a row with no alarm on it.** The one word this module
/// tests for, and it is tested for in order to say NOTHING: a clean run is the
/// ordinary case and a badge on every one of them would bury the rows that are
/// standing. Every other standing — the handoff, the alarm, and the two ways
/// an alarm comes down — paints as its own word.
pub const CLEAN: &str = "clean";
/// One action that crossed the boundary.
/// One row, strictly ([`super`]'s rung 1: every refusal names its field).
pub