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
//! egui widget: the §11 Altitude-2 Steps tab — a headed per-step table plus a
//! tabbed drill-in.
//!
//! A pure function of the [`StepsView`] view-model, the caller's selection
//! (which step, which tab — viewport ephemera, §5.3, passed in), and the
//! drill-in [`StepDetail`] the caller built for the selected step. The one
//! interaction inside the tab is jsonview's collapse toggle (which owns its own
//! click); step- and tab-selection clicks are shell glue, exactly as the
//! transcript tab's Raw toggle is — so this fn stays a headless
//! shape-walk-tested pure render.
//!
//! The list is a **real table**: an [`egui::Grid`] whose header row is
//! [`super::columns::COLUMNS`], one cell per column per step, so a value always
//! sits under the word for it (bl-3ffc). The drill-in tier lives in
//! [`super::drill`].
use HashSet;
use ;
use ;
use crateFraming;
use cratetheme;
/// Which drill-in tab is showing. Selection is viewport ephemera the caller
/// owns (§5.3); the widget renders the chosen tab, and tab-switch clicks live
/// in the shell.
///
/// The first five are the JSON records lernie contracts to write; the last two
/// are the capture logs (bl-83d6), which the picker seats only when they have
/// bytes ([`super::records::seats`]) — a variant is a thing the operator can be
/// looking at, not a claim that the file exists.
/// Render the step table, then — when the caller supplies the selected step's
/// [`StepDetail`] — the tabbed drill-in. `collapsed` is the caller-owned
/// jsonview collapse state (§5.3), threaded into every rendered tree; `raw` is
/// the §11 Raw toggle, which flips the drill-in's records from jsonview trees
/// to the record file's bytes unaltered (S7-T1). The table itself is a
/// projection of those same record files, so Raw belongs to the drill-in: the
/// bytes behind a row are the bytes of the step it names.
/// The headed table. Headers first — each naming its field and carrying the
/// one-line explanation on hover — then one aligned row per step. Absent
/// values still take their cell, so every column stays under its own heading.
/// §11 rule 1 reaching **inside** the table (bl-7414): an even share of the seat
/// the table has, as a CAP and never a width.
///
/// A `Grid` lays every column at its content's natural width and simply
/// overflows the pane when they do not fit, so at 480x1400 — a tiled left third
/// of a portrait monitor, where the centre keeps 224 pt — the `Commit` heading
/// was laid at x 440..478 against a clip that ends at 472. It elided, and the
/// six points that got cut were its own `…`: the operator saw `Com`, an
/// unmarked truncation, which is the one thing rule 1c forbids.
///
/// A cap rather than a width, because a table that fits must not be squeezed:
/// every cell narrower than its share is left exactly as it was, so nothing
/// changes at any size where the table already fits — which is every size but
/// this one.
/// The row's badge — glyph, hue, and the outcome **in words**. The §7.3 wound
/// outranks the framing read, because for both of its classes the framing is
/// the wrong sentence: a no-response step frames `Killed`, which paints the ash
/// "stopped" badge a mid-stream kill gets, and an output-limited one frames
/// `Complete`, which paints `✔ complete` over a turn that was cut off
/// (bl-fb87). Either way the wound's own word ([`Wound::word`], bl-7f2e) is
/// what the row says, in the badge's one seat rather than a second label
/// further along the row.
pub
/// Glyph + colour + **the outcome said in words** for each §4.4 framing — the
/// same visual grammar as the git_tree state badges (✔ good / ✖ error / ■ dead),
/// and the §11 badge-seat pattern's one home for all three carriers of one fact:
/// the match is exhaustive, so a new framing cannot ship glyph-only, and no
/// renderer invents its own wording any more than it restates an RGB triple.
pub