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
//! **The engine's shape ledger, vendored** (yog's `docs/REMOTE.md` §3.2) — the
//! edition every field path of every shape a foot speaks appeared at.
//!
//! §3.2's ruling: `PROTOCOL` is a **major**, moved only by a breaking change,
//! and every *addition* — a field, a word, an op, a reply kind — ships with no
//! bump and is stamped an **edition** instead. The old integer line continued,
//! so the stamps 1..18 in [`shapes`] are the versions this crate already
//! vendored; what is new is that they are per PATH rather than per shape, and
//! that they are read rather than recited.
//!
//! **[`FLOOR`] is what makes a stamp actionable.** It is the edition the
//! current major was cut at: every path stamped at or below it is present on
//! every engine speaking this major, so a reader may require it — which is what
//! every reader here does today. Every path stamped ABOVE it is optional to
//! read, because an engine of an older edition does not write it, and that is
//! the one class this crate has no member of yet (its newest stamp is 8, ten
//! editions under the floor). The replay in [`replay`](super::replay) is what
//! keeps that true rather than accidental.
//!
//! **It is `.rs` rather than yog's `.json`, for [`corpus`](super)'s reason**: a
//! vendored JSON file would have to be ruled into `Cargo.toml`'s `include`
//! allowlist to survive a build from the registry, and would then ship a test
//! fixture inside a released crate. The text is copied out of
//! `corpus/shapes.json`, key for key, so a re-vendor is a diff.
/// The vendored table itself.
pub use SHAPES;
/// **The edition the current major was cut at** (`shapes.json`'s `floor`).
///
/// A path stamped at or below it is required; above it, optional to read. It
/// moves in the one regeneration that raises `PROTOCOL`, and never after.
pub const FLOOR: u32 = 18;
/// **What yog has listed for removal** (`shapes.json`'s `deprecated`), which is
/// nothing. §3.2's window rule: a path is removed only at a major, only after
/// being listed here in a *published* release, and never within three releases
/// of that listing — so a consumer that reads this list is told before a field
/// it depends on can go.
pub const DEPRECATED: = ;
/// One vendored shape: its name in `corpus/`, and every field path it carries
/// stamped with the edition that path appeared at.
///
/// A path is spelled exactly as `shapes.json` spells it — `"<path>:<type>"`,
/// segments separated by `/`, `[]` for every element of an array, the empty
/// path for the frame itself — because a re-spelling is a second copy of the
/// engine's fact and this file exists to hold exactly one.
pub
/// **This vendored corpus's edition: its newest stamp**, computed and never
/// stored (§3.2). It is what [`hello::EDITION`](crate::channel::hello::EDITION)
/// states on the wire, and the two agreeing is a test rather than a tautology —
/// the same discipline the protocol pin keeps (`corpus::tests`).
///
/// **It is 8 rather than the engine's 18, and that is honest.** An edition is a
/// statement about what this end can READ, and a foot reads nothing stamped
/// past 8: every field added since is on a seat-facing shape it never decodes.
/// A field added at 14 to a shape this crate has no decoder for cannot make
/// this crate newer.
pub
/// One shape's signature, by name. `None` is a shape this foot does not speak.
pub
/// **The paths of one JSON type**, spelled without the type suffix.
///
/// The mutation replay asks for `"string"`: every place a frame carries a word,
/// which is where a vocabulary that grew a word this build has not heard of
/// would arrive.
pub
/// **The path an entry names**, with its type suffix cut off — the half a
/// projector walks a frame by.
pub