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
//! **Which config commit governs this conversation** (yog's `docs/REMOTE.md`
//! §9.7, §9.12; bl-b52c).
//!
//! # The shape whose MEANING moved, which is the one drift a corpus cannot see
//!
//! At PROTOCOL 5 (REMOTE §9.12) this reply *"lost `branch` and gained
//! `follows` and `diverged_lineages`, and its `oid` changed meaning"*:
//!
//! > **`oid` was the fork commit and is the resolved one.** Before, it named
//! > the `config/*` ancestor an agent's branch forked off, a commit that never
//! > moved. Now it names the commit control actually reads at every step
//! > boundary: the followed lineage's head. A seat that painted the old value
//! > as *what this conversation runs* would keep painting, and would keep
//! > being wrong, which is why the number has to move even though the key did
//! > not.
//!
//! The bytes stayed well-formed across that bump, so nothing mechanical here
//! could have caught it — which is why the trap is written at `PROTOCOL` and
//! restated at the one reader that spends it. This decoder is the first thing
//! in this crate to read the field at all, and it reads it under the new
//! meaning.
//!
//! # One enum, two keys, and neither is redundant
//!
//! Upstream, verbatim: *"`follows` is the lineage's name and
//! `diverged_lineages` is `0`; or `follows` is `null` and the count is how
//! many distinct lineage tips reached the conversation and therefore held it
//! on its fork commit. The decoder rebuilds the enum off `follows` alone and
//! reads the count only where it can be non-zero, so the pair cannot decode to
//! a state the encoder could not have written."* [`Governance`] is that enum,
//! rebuilt off `follows` alone for exactly that reason.
//!
//! # The sentence is upstream's two wordings, not one composed here
//!
//! REMOTE §9.7 rules it directly — *"a seat renders it through
//! `GoverningConfig::label()`'s two wordings and composes no sentence of its
//! own"* — so [`Governing::label`] is that function's text, and the pane
//! paints what it answers.
use ;
use fields;
/// The kind token this reading answers to.
pub const KIND: &str = "governing";
/// The config commit a conversation resolves its policy from, and the lineage
/// that settled it.
/// **How the policy is settled**: one lineage followed, or several diverged
/// over the fork commit and none may be guessed between.
/// The whole answer, strictly ([`super`]'s rung 1). `follows` is `null` rather
/// than absent, matching the key it replaced, and [`fields::opt_text`] reads
/// both spellings alike.
pub
/// One path out of the governing tree's listing.