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
//! **The sentence** (VISION §4.11 items 5–6, DESIGN §8.6): what a hold hands
//! the operator, and what a refusal hands the model. One file, because the two
//! are the same sentence with one paragraph more, and because the hold's text
//! is read back later to learn what class was parked.
//!
//! The hold's half names the tool, **what it was about to do**, the class it
//! landed in and the evidence that put it there. Never a section number — the
//! reader has the window, not the document. The input summary lives here rather
//! than at the attention item because the control is the only thing that sees
//! the invocation: the mark carries the sentence, so the parked drone's whole
//! story is one fact with one home and the operator never opens a transcript.
//!
//! **The refusal's half is stated, once, and it closes three loopholes**
//! (bl-94a5). What the model received before was the hold's sentence and
//! nothing else — a classification, which reads as a correctable error, and a
//! measured run answered it by probing the confinement over three steps and
//! finding a spelling that passed. So a refusal now says who decided, **how far
//! the decision stands** ([`Scope::stands_for`]), and that retrying,
//! rephrasing and reaching the same outcome another way are all inside it. It
//! never invites a rephrasing and it never offers a way round: the one way
//! forward is the operator's, and the model is told to say what it needed and
//! stop.
//!
//! **The class is read back out of the sentence** ([`class_of`]) because the
//! hold mark is litany's blob and carries three fields — id, tool, reason —
//! and the reason is the one of them yog wrote. A scope wider than the call
//! stands over a *class*, so the answer gesture must know which class it is
//! releasing; parsing our own sentence beats asking upstream for a fourth
//! field, and the two directions are one file with one test holding them equal.
use ;
use ;
use ;
/// How many `char`s of the invocation's input the reason carries. Enough to
/// recognise the command; bounded because the sentence rides a git blob an
/// operator reads at a glance.
const SUMMARY_MAX: usize = 160;
/// The clause the class sits in, spelled once — [`reason`] writes it and
/// [`class_of`] reads it, so the two cannot drift.
/// The sentence a hold hands the operator: the tool, what it was about to do,
/// the class it landed in, and the evidence that put it there.
/// The class a hold's sentence names, or `None` when no clause of ours is in
/// it. The **last** clause wins: an input summary or an evidence clause may
/// quote one, and the sentence's own is the one at the end.
/// The verdict one adjudication answers with: a pass carries no reason at all
/// (litany's parser rejects one), a hold carries the operator's sentence, and a
/// refusal carries it plus the paragraph above.
/// The standing paragraph a refusal hands the model. Three loopholes named in
/// one breath — retry, rephrase, and the same outcome by another route — then
/// the one thing left to do.
/// `text` bounded to [`SUMMARY_MAX`] chars, saying so when it was cut.