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
//! The manager-note delivery seam: one note that reaches whichever party of a
//! node's live dispatch is speaking, and reaches the other with its response.
//!
//! A manager correcting a node in flight has had two levers and neither did both
//! halves of the job. [`Context`](crate::channel::Command::Context) is delivered by
//! interrupting the live agent turn, so it reaches the worker and never the judge,
//! and it binds nothing. [`Amend`](crate::channel::Command::Amend) replaces the
//! node's binding amendment and so binds the judge, but composes the task of the
//! *next* dispatch and cannot reach the turn running now. A manager who needed a
//! correction to reach both had to kill a running dispatch to get it: one ruling
//! delivered at 15:50:23Z was contradicted by that node's own judge at 15:57:19Z,
//! reviewing against a task that never mentioned it.
//!
//! A **note** is the lever that does both, and none of its routing is this crate's:
//! the two-party conversation belongs to `onejudge`, the member running it to
//! `oneagentgraph`, and the shapes below are that seam's own re-exported rather
//! than restated. What this crate owns is which node a note is for, getting it to
//! that node's live member, and putting what came back into the run's record.
//!
//! * It is delivered to **whoever is live** — the worker's turn, the judge's turn,
//! or, between turns, the next turn to open — and the other party receives it
//! with that party's response.
//! * The party that receives it is told **which role it is for** ([`Addressee`]),
//! so a judge handed an update to the *worker's* task does not take the worker's
//! job on.
//! * A note may carry a [`Criterion`], and a delivered one enters the acceptance
//! criteria the judge evaluates against rather than appearing only as narration.
//! * **Undelivered is an error.** A note arriving once the node's dispatch has
//! completed does not settle quietly into a record nobody reads: it is refused,
//! naming that it was not delivered and why, so the caller chooses relaunch,
//! tweak, or follow-up. That refusal is the same treatment `deliver: live`
//! already gives a note it cannot deliver, extended to the case that was silent.
//!
//! `context` and `amend` keep their names and their meanings: a caller using
//! either today is answered exactly as it was.
//!
//! # What a note does *not* do
//!
//! It does not move the node's stored bar. A criterion it binds is in force for the
//! conversation it was delivered into, which is the conversation whose verdict the
//! manager is correcting; [`Amend`](crate::channel::Command::Amend) is still the
//! lever for a bar that has to survive a re-dispatch, and the two are deliberately
//! not the same op.
use Accepted;
use ;
pub use ;
use crate;
use crate;
use crateRunPaths;
/// Which party of the node's conversation took a note, as the run records it.
///
/// This crate's own spelling of [`oneagentgraph::note::Accepted`], and it exists
/// for one reason: the answer is written into the run's journal, and that library's
/// enum is deliberately not serializable — what crosses a boundary is the
/// transport's decision rather than the conversation's. The mapping below is
/// exhaustive in both directions, so a disposition added upstream fails this build
/// instead of being dropped on the way into the record.
/// What one [`deliver`] answered.
/// Deliver one note to a node of `run`, and answer what became of it.
///
/// The seam on this crate's own surface, so a caller composing this engine reaches
/// it without composing a reply envelope by hand — and so the two spellings cannot
/// mean different things, since this one *is* the envelope's `note` op, submitted
/// through the same channel and judged by the same reconciler.
///
/// # Errors
///
/// [`Error::Refused`] when the note was **not delivered**, carrying the
/// conversation's own [`Undelivered`] sentence and what the caller can do instead;
/// or when the ask itself was not one this run can act on — no such node, a run
/// this process cannot read.
/// The refusal a note that reached nobody is answered with.
///
/// One sentence for both transports — the envelope's op and [`deliver`] — because
/// they are one delivery: the conversation's own words about why it will never be
/// read, under the node it was addressed to.
pub
/// The note one `note` op carries, built through the seam's own constructors.
///
/// The op spells its fields rather than nesting the sibling's struct, because the
/// wire shape a planner types is this crate's to declare — but the *value* it
/// becomes is built here, through constructors that re-check text and criterion, so
/// no path assembles a note the conversation would have refused.
pub