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
#[allow(clippy::wildcard_imports)]
use super::*;
#[derive(Subcommand)]
pub enum TriageAction {
/// Read the inbox queue: one row per entry (FR-001)
List {
/// Sort by entry age, oldest first; an unknown age sorts last
#[arg(long)]
age: bool,
/// Print the counts only, with no entries
#[arg(long)]
count: bool,
},
/// Read the inbox summary: decision counts and the age histogram (FR-005)
Status,
/// Accept: move into the normal workflow, validated by #183's transition policy
Accept {
/// Issue number, filename fragment or unique title fragment
issue: String,
/// Reason recorded in History; accept records one when supplied
#[arg(long)]
reason: Option<String>,
/// Target column; defaults to `[triage].accepted_status`
#[arg(long, value_name = "COLUMN")]
to: Option<String>,
/// Who decided; defaults to the git identity
#[arg(long)]
actor: Option<String>,
},
/// Decline: move to `[triage].declined_status`; never deletes or archives
Decline {
/// Issue number, filename fragment or unique title fragment
issue: String,
/// Why it is declined (required)
#[arg(long)]
reason: Option<String>,
/// Who decided; defaults to the git identity
#[arg(long)]
actor: Option<String>,
},
/// Duplicate: record a typed `duplicates` relation; never merges files
Duplicate {
/// Issue number, filename fragment or unique title fragment
issue: String,
/// The issue this one duplicates
#[arg(long, value_name = "ISSUE")]
of: String,
/// Why it is a duplicate (required)
#[arg(long)]
reason: Option<String>,
/// Who decided; defaults to the git identity
#[arg(long)]
actor: Option<String>,
},
/// Defer: stay in the inbox with a refreshed entry time
Defer {
/// Issue number, filename fragment or unique title fragment
issue: String,
/// Why it is deferred (required)
#[arg(long)]
reason: Option<String>,
/// Who decided; defaults to the git identity
#[arg(long)]
actor: Option<String>,
},
/// One decision across a selection: preview by default, `--apply` to write
Batch {
/// Comma-separated selectors: number, filename or title fragment
#[arg(long, value_name = "LIST")]
select: Option<String>,
/// A `tix list --filter` query selecting the issues
#[arg(long, value_name = "QUERY")]
filter: Option<String>,
/// Which decision to make: accept | decline | duplicate | defer
#[arg(long, value_name = "KIND")]
decision: String,
/// Reason recorded on every applied event; required for three of four
#[arg(long)]
reason: Option<String>,
/// Who decided; defaults to the git identity
#[arg(long)]
actor: Option<String>,
/// The duplicate target selector, for `--decision duplicate`
#[arg(long, value_name = "ISSUE")]
of: Option<String>,
/// The accept target column, for `--decision accept`
#[arg(long, value_name = "COLUMN")]
to: Option<String>,
/// Apply the previewed plan; without it nothing is written
#[arg(long)]
apply: bool,
},
}