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
//! **The binding seam** (ARCH §3.4 "Process effects stay at the
//! binding"): the three types a binding speaks to a verb in — the
//! injections it supplies ([`Fx`]), the one product it performs
//! ([`Outcome`]) and the uniform failure it prints ([`Error`]).
//!
//! Split from [`super`], which keeps the verb set — the [`Cli`](super::Cli)
//! surface, the [`Command`](super::Command) enum and its one entry per
//! verb. Two different things live at that boundary and only one of them
//! grows with the verb list; a module that held both grew past the
//! repo's per-file cap on the verb that arrived next
//! (`docs/DESIGN_LEARNING_LOOP.md` §3's `litany proposal`, bl-9a65).
//! The three types stay re-exported at `cmd::*`, which is the path every
//! consumer and the parity checker's seam ledger name.
use ToolInjection;
use ;
use AtomicBool;
/// The §3.3 stdio-contract variable [`Fx::conv_branch`] carries,
/// re-exported beside the field a binding fills from it. `prompt::tool`
/// is crate-private, so without this an exec binding would have to
/// spell the name a second time — and a variable named in two places is
/// a variable that gets renamed in one.
pub use crateENV_CONV_BRANCH;
/// The §3.3 contract variable [`Fx::tool_id`] carries, re-exported for
/// the same reason and beside the same field.
pub use crateENV_TOOL_ID;
/// A verb's one product (ARCH §3.4 one-product convention). The binding
/// performs it: [`Line`](Outcome::Line) is the verb's single stdout
/// product; [`Quiet`](Outcome::Quiet) is a product-less success;
/// [`Exec`](Outcome::Exec) is the §6 advance successor handoff the exec
/// binding `execve`s; [`Code`](Outcome::Code) is the exit status the
/// `tool` and `invoke` verbs end on (§3.3 is_error contract).
/// The binding's injections (ARCH §3.4 "Process effects stay at the
/// binding"). Every process-global or terminal effect a verb needs is a
/// field here, supplied by the binding — the library reaches for none of
/// its own.
/// A verb's uniform failure. `Display` renders the stderr shape
/// `litany <verb-prefix>: <error>` (dispatch's is `dispatch <role>`,
/// tool's `tool <name>`), which the binding prints before a non-zero exit.