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
use crateTask;
use crateLineEnding;
/// A done-task archive: `frame/archive/<track>.md`.
///
/// **An archive is not a track.** `fr clean` writes a `# Archive — <track>`
/// heading and then bare task lines, with no `## Section` headers at all, so
/// walking `TrackNode::Section` finds nothing in one and `parse_track` reads the
/// whole task list as literal text. That mistake has been made twice in this
/// codebase — in `ops/fix.rs`, where the repair reported success and changed
/// nothing, and in `ops/track_ops.rs`, where a prefix rename silently skipped
/// every archived id — which is why the format now has a parse/serialize pair of
/// its own instead of four hand-rolled readers.
///
/// `frame/archive/_tracks/<track>.md` is a *different* file: a whole track that
/// `fr track archive` moved there intact, sections and all. It is a [`Track`],
/// parses with `parse_track`, and must not come near this type.
///
/// [`Track`]: crate::model::track::Track