@@ -110,6 +110,42 @@ def register(sub: argparse._SubParsersAction) -> None:
110110 default = None ,
111111 help = "Explicit runs directory for run ids. Defaults to .brigade/runs under --cwd." ,
112112 )
113+ p_runs_redact = runs_sub .add_parser (
114+ "redact" ,
115+ help = "Run the explicit operator procedure for lifecycle journal redaction." ,
116+ )
117+ p_runs_redact .add_argument ("run" , help = "Run directory path, run id under --runs-dir, or 'latest'." )
118+ p_runs_redact .add_argument (
119+ "--cwd" ,
120+ type = Path ,
121+ default = Path ("." ),
122+ help = "Workspace whose default .brigade/runs directory should be used for run ids." ,
123+ )
124+ p_runs_redact .add_argument (
125+ "--runs-dir" ,
126+ type = Path ,
127+ default = None ,
128+ help = "Explicit runs directory for run ids. Defaults to .brigade/runs under --cwd." ,
129+ )
130+ p_runs_redact .add_argument ("--from-sequence" , dest = "sequence_start" , type = int , default = None )
131+ p_runs_redact .add_argument ("--to-sequence" , dest = "sequence_end" , type = int , default = None )
132+ p_runs_redact .add_argument (
133+ "--reason" ,
134+ default = None ,
135+ help = "Closed incident reason code; never include the private value." ,
136+ )
137+ p_runs_redact .add_argument (
138+ "--cleanup-quarantine" ,
139+ dest = "cleanup_operation" ,
140+ default = None ,
141+ metavar = "OPERATION_ID" ,
142+ help = "Explicitly remove a previously verified quarantine." ,
143+ )
144+ p_runs_redact .add_argument (
145+ "--operator-confirm" ,
146+ action = "store_true" ,
147+ help = "Confirm this operator-only incident procedure." ,
148+ )
113149 p_runs_resume = runs_sub .add_parser (
114150 "resume" , help = "Re-attach interrupted app-server workers from a run and re-synthesize."
115151 )
@@ -148,6 +184,17 @@ def dispatch(args) -> int:
148184 return _control_request (args .run , cwd = args .cwd , runs_dir = args .runs_dir , payload = payload )
149185 if args .runs_command == "recover" :
150186 return runs_cmd .recover (args .run , cwd = args .cwd , runs_dir = args .runs_dir )
187+ if args .runs_command == "redact" :
188+ return runs_cmd .redact (
189+ args .run ,
190+ cwd = args .cwd ,
191+ runs_dir = args .runs_dir ,
192+ sequence_start = args .sequence_start ,
193+ sequence_end = args .sequence_end ,
194+ reason = args .reason ,
195+ operator_confirmed = args .operator_confirm ,
196+ cleanup_operation = args .cleanup_operation ,
197+ )
151198 if args .runs_command == "resume" :
152199 return runs_cmd .resume (args .run_dir )
153200 args ._brigade_parser .error (f"unknown runs command: { args .runs_command } " )
0 commit comments