ripr 0.6.0

Find static mutation-exposure gaps before expensive mutation testing
Documentation
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
const HELP: &str = r#"ripr — find changed Rust code where nearby tests may not actually catch the changed behavior.

Usage:
  ripr init [--root PATH] [--ci github] [--dry-run] [--force]
  ripr pilot [--root PATH] [--out PATH] [--mode draft] [--max-seams 5] [--timeout-ms 30000]
  ripr outcome --before PATH --after PATH [--format md|json] [--out PATH]
  ripr evidence-health [--root PATH] [--out PATH] [--out-md PATH] [--mutation-calibration PATH]
  ripr review-comments --root . --base SHA --head SHA [--out target/ripr/review/comments.json]
  ripr gate evaluate --pr-guidance PATH [--mode visible-only] [--out target/ripr/reports/gate-decision.json]
  ripr baseline create --from target/ripr/reports/gate-decision.json [--out .ripr/gate-baseline.json] [--dry-run] [--force]
  ripr baseline diff --baseline .ripr/gate-baseline.json --current target/ripr/reports/gate-decision.json [--out target/ripr/reports/baseline-debt-delta.json] [--out-md target/ripr/reports/baseline-debt-delta.md]
  ripr baseline update --baseline .ripr/gate-baseline.json --current target/ripr/reports/gate-decision.json --remove-resolved [--out .ripr/gate-baseline.json]
  ripr zero status --delta target/ripr/reports/baseline-debt-delta.json [--baseline .ripr/gate-baseline.json] [--gap-ledger target/ripr/reports/gap-decision-ledger.json] [--gate target/ripr/reports/gate-decision.json] [--out target/ripr/reports/ripr-zero-status.json] [--out-md target/ripr/reports/ripr-zero-status.md]
  ripr policy readiness [--gate-decision target/ripr/reports/gate-decision.json] [--baseline-delta target/ripr/reports/baseline-debt-delta.json] [--out target/ripr/reports/policy-readiness.json] [--out-md target/ripr/reports/policy-readiness.md]
  ripr policy operations --policy-readiness target/ripr/reports/policy-readiness.json [--waiver-aging target/ripr/reports/waiver-aging.json] [--suppression-health target/ripr/reports/suppression-health.json] [--out target/ripr/reports/policy-operations.json] [--out-md target/ripr/reports/policy-operations.md]
  ripr policy history --current target/ripr/reports/policy-operations.json [--history .ripr/policy-history.jsonl] [--commit HEAD] [--pr-number 123] [--out target/ripr/reports/policy-history.json] [--out-md target/ripr/reports/policy-history.md]
  ripr policy promote --to baseline-check --operations target/ripr/reports/policy-operations.json [--history target/ripr/reports/policy-history.json] [--out target/ripr/reports/policy-promotion-baseline-check.json] [--out-md target/ripr/reports/policy-promotion-baseline-check.md]
  ripr policy preview-promote --language typescript --class boundary_gap [--evidence target/ripr/reports/preview-promotion-evidence.json] [--out target/ripr/reports/preview-promotion-typescript-boundary-gap.json] [--out-md target/ripr/reports/preview-promotion-typescript-boundary-gap.md]
  ripr policy waiver-aging [--ledger target/ripr/reports/pr-evidence-ledger.json] [--history .ripr/pr-evidence-ledger.jsonl] [--out target/ripr/reports/waiver-aging.json] [--out-md target/ripr/reports/waiver-aging.md]
  ripr policy suppression-health [--root .] [--manifest .ripr/suppressions.toml] [--out target/ripr/reports/suppression-health.json] [--out-md target/ripr/reports/suppression-health.md]
  ripr pr-ledger record --pr-number 123 --base SHA --head SHA [--gate target/ripr/reports/gate-decision.json] [--baseline-delta target/ripr/reports/baseline-debt-delta.json] [--zero-status target/ripr/reports/ripr-zero-status.json] [--out target/ripr/reports/pr-evidence-ledger.json]
  ripr pr-comments plan --pr-guidance target/ripr/review/comments.json [--existing-comments target/ripr/review/existing-comments.json] [--mode off|plan|inline] [--out target/ripr/review/comment-publish-plan.json]
  ripr pr-review front-panel [--pr-guidance target/ripr/review/comments.json] [--first-action target/ripr/reports/first-useful-action.json] [--assistant-proof target/ripr/reports/test-oracle-assistant-proof.json] [--assistant-health target/ripr/reports/assistant-loop-health.json] [--ledger target/ripr/reports/pr-evidence-ledger.json] [--out target/ripr/reports/pr-review-front-panel.json]
  ripr coverage-grip frontier (--ledger target/ripr/reports/pr-evidence-ledger.json|--baseline-delta target/ripr/reports/baseline-debt-delta.json|--zero-status target/ripr/reports/ripr-zero-status.json) [--coverage target/ripr/reports/coverage-summary.json] [--out target/ripr/reports/coverage-grip-frontier.json]
  ripr assistant-loop proof --pr-guidance target/ripr/review/comments.json --agent-packet target/ripr/workflow/agent-brief.json --before target/ripr/pilot/repo-exposure.json --after target/ripr/pilot/after.repo-exposure.json --receipt target/ripr/reports/agent-receipt.json [--out target/ripr/reports/test-oracle-assistant-proof.json]
  ripr assistant-loop health --proof target/ripr/reports/test-oracle-assistant-proof.json [--out target/ripr/reports/assistant-loop-health.json]
  ripr first-pr [--root .] [--base origin/main] [--head HEAD] [--gap-ledger target/ripr/reports/gap-decision-ledger.json] [--out-dir target/ripr/reports] [--check]
  ripr first-action [--root .] [--pr-guidance target/ripr/review/comments.json] [--assistant-proof target/ripr/reports/test-oracle-assistant-proof.json] [--gap-ledger target/ripr/reports/gap-decision-ledger.json] [--ledger target/ripr/reports/pr-evidence-ledger.json] [--out target/ripr/reports/first-useful-action.json]
  ripr reports index [--reports-dir target/ripr/reports] [--review-dir target/ripr/review] [--out target/ripr/reports/index.json]
  ripr reports gap-ledger --records fixtures/gap-decision-ledger/corpus.json [--out target/ripr/reports/gap-decision-ledger.json]
  ripr calibrate cargo-mutants --mutants-json PATH --repo-exposure-json PATH [--format md|json] [--out PATH]
  ripr agent start --root . --seam-id ID [--out target/ripr/workflow]
  ripr agent brief --root . (--diff PATH|--base REV|--files PATHS|--seam-id ID) --json
  ripr agent packet --root . --seam-id ID --json
  ripr agent verify --root . --before before.json --after after.json --json
  ripr agent receipt --root . --verify-json agent-verify.json --seam-id ID --json
  ripr agent status --root . [--json]
  ripr agent review-summary --root . [--json]
  ripr check [--base origin/main] [--diff PATH] [--mode draft] [--format FORMAT]
  ripr explain [--base REV|--diff PATH] <finding-id|file:line>
  ripr context [--base REV|--diff PATH] --at <finding-id|file:line>
  ripr lsp [--stdio]
  ripr doctor

What it does:
  Reads changed Rust code, creates mutation-like probes, and estimates whether
  tests appear to reach, infect, propagate, and reveal the changed behavior
  through meaningful oracles. It does not run mutants.

Quick start:
  ripr doctor
  ripr pilot
  ripr outcome --before target/ripr/pilot/repo-exposure.json --after target/ripr/pilot/after.repo-exposure.json
  ripr evidence-health --root .
  ripr review-comments --root . --base origin/main --head HEAD --out target/ripr/review/comments.json
  ripr gate evaluate --pr-guidance target/ripr/review/comments.json --mode visible-only
  ripr baseline create --from target/ripr/reports/gate-decision.json --out .ripr/gate-baseline.json
  ripr baseline diff --baseline .ripr/gate-baseline.json --current target/ripr/reports/gate-decision.json
  ripr baseline update --baseline .ripr/gate-baseline.json --current target/ripr/reports/gate-decision.json --remove-resolved
  ripr zero status --baseline .ripr/gate-baseline.json --delta target/ripr/reports/baseline-debt-delta.json --gate target/ripr/reports/gate-decision.json
  ripr policy readiness --gate-decision target/ripr/reports/gate-decision.json --baseline-delta target/ripr/reports/baseline-debt-delta.json
  ripr policy operations --policy-readiness target/ripr/reports/policy-readiness.json --waiver-aging target/ripr/reports/waiver-aging.json --suppression-health target/ripr/reports/suppression-health.json
  ripr policy history --current target/ripr/reports/policy-operations.json --history .ripr/policy-history.jsonl
  ripr policy promote --to baseline-check --operations target/ripr/reports/policy-operations.json --history target/ripr/reports/policy-history.json
  ripr policy preview-promote --language typescript --class boundary_gap
  ripr policy waiver-aging --ledger target/ripr/reports/pr-evidence-ledger.json --history .ripr/pr-evidence-ledger.jsonl
  ripr policy suppression-health
  ripr pr-ledger record --pr-number 123 --base origin/main --head HEAD --baseline-delta target/ripr/reports/baseline-debt-delta.json --zero-status target/ripr/reports/ripr-zero-status.json
  ripr pr-comments plan --pr-guidance target/ripr/review/comments.json --mode plan
  ripr pr-review front-panel --pr-guidance target/ripr/review/comments.json --first-action target/ripr/reports/first-useful-action.json --ledger target/ripr/reports/pr-evidence-ledger.json
  ripr coverage-grip frontier --ledger target/ripr/reports/pr-evidence-ledger.json --coverage target/ripr/reports/coverage-summary.json
  ripr assistant-loop proof --pr-guidance target/ripr/review/comments.json --agent-packet target/ripr/workflow/agent-brief.json --before target/ripr/pilot/repo-exposure.json --after target/ripr/pilot/after.repo-exposure.json --receipt target/ripr/reports/agent-receipt.json
  ripr assistant-loop health --proof target/ripr/reports/test-oracle-assistant-proof.json
  ripr first-pr --root . --base origin/main --head HEAD
  ripr first-action --pr-guidance target/ripr/review/comments.json --assistant-proof target/ripr/reports/test-oracle-assistant-proof.json --ledger target/ripr/reports/pr-evidence-ledger.json
  ripr reports index
  ripr reports gap-ledger --records fixtures/gap-decision-ledger/corpus.json
  ripr calibrate cargo-mutants --mutants-json target/mutants/outcomes.json --repo-exposure-json target/ripr/pilot/after.repo-exposure.json
  ripr agent start --root . --seam-id f3c9e4d21a0b7c88
  ripr agent brief --root . --diff change.diff --json
  ripr agent packet --root . --seam-id f3c9e4d21a0b7c88 --json
  ripr agent verify --root . --before target/ripr/workflow/before.repo-exposure.json --after target/ripr/workflow/after.repo-exposure.json --json
  ripr agent receipt --root . --verify-json target/ripr/workflow/agent-verify.json --seam-id f3c9e4d21a0b7c88 --json
  ripr agent status --root .
  ripr agent review-summary --root .
  ripr check --diff crates/ripr/examples/sample/example.diff
  ripr check --diff crates/ripr/examples/sample/example.diff --json
  ripr explain --diff crates/ripr/examples/sample/example.diff <finding-id>
"#;

const INIT_HELP: &str = r#"Write an optional repo policy file (ripr.toml) and, with --ci github, a non-blocking advisory workflow.

Usage: ripr init [--root PATH] [--ci github] [--dry-run] [--force]

`ripr init` is optional. It writes the built-in defaults to a repo-local
ripr.toml so teams can commit, review, and tune policy. Missing ripr.toml is
the normal first-run state and uses the same defaults. Running `ripr init` does
not unlock basic CLI, editor, or pilot usefulness.

Options:
  --root PATH      Workspace root where ripr.toml should be written. Defaults to current directory.
  --ci github      Also write .github/workflows/ripr.yml with advisory reports and optional SARIF rendering/upload.
  --dry-run        Print the generated config without writing.
  --force          Overwrite an existing ripr.toml or generated workflow.

Generated config:
  - uses draft analysis mode and includes unchanged tests
  - shows actionable weak or missing seams with default severities
  - hides seams whose configured severity is off
  - records the built-in saved-workspace LSP seam diagnostic default
  - remains advisory and does not configure CI blocking or mutation execution

Generated GitHub workflow:
  - installs ripr and writes a pilot packet plus repo report artifacts
  - uploads report artifacts and writes a reviewer-oriented advisory summary
  - surfaces future PR test guidance reports as non-blocking check annotations
  - renders and uploads diff/repo SARIF only while RIPR_UPLOAD_SARIF is true
  - uses continue-on-error for advisory RIPR work and upload steps
  - does not enable baseline failure policy by default
"#;

const PILOT_HELP: &str = r#"Find the top test gap in this repo and write a packet you can act on.

Usage: ripr pilot [--root PATH] [--out PATH] [--mode MODE] [--max-seams N] [--timeout-ms MS]

Options:
  --root PATH       Workspace root to analyze. Defaults to current directory.
  --out PATH        Output directory for the pilot packet. Defaults to target/ripr/pilot.
  --mode MODE       instant, draft, fast, deep, or ready. Defaults to draft unless ripr.toml sets one.
  --max-seams N     Maximum ranked seams in the pilot summary. Defaults to 5.
  --timeout-ms MS   Maximum analysis budget before writing a partial summary. Defaults to 30000.

Outputs:
  - repo-exposure.json and repo-exposure.md
  - agent-seam-packets.json
  - pilot-summary.json and pilot-summary.md

The pilot packet is advisory. It reports saved-workspace static seam evidence
and points to one next focused test action; it does not run mutation testing,
edit source files, or configure CI policy. If analysis exceeds the timeout,
pilot-summary.json and pilot-summary.md are written with status=partial and an
explicit retry command.
"#;

const OUTCOME_HELP: &str = r#"Compare before/after static evidence after adding a focused test.

Usage: ripr outcome --before PATH --after PATH [--format md|json] [--out PATH]

Options:
  --before PATH    Repo-exposure JSON snapshot before the focused test.
  --after PATH     Repo-exposure JSON snapshot after the focused test.
  --format FORMAT  md, markdown, text, or json. Defaults to md.
  --out PATH       Write the rendered receipt to a file instead of stdout.

The outcome receipt is advisory. It compares static repo-exposure snapshots by
seam_id and reports moved, unchanged, regressed, new, and removed seams; it
does not run analysis, mutation testing, or CI policy.
"#;

const EVIDENCE_HEALTH_HELP: &str = r#"Summarize how strong the current static evidence looks across the workspace.

Usage: ripr evidence-health [--root PATH] [--out PATH] [--out-md PATH] [--mutation-calibration PATH]

Options:
  --root PATH                    Workspace root to summarize. Defaults to current directory.
  --out PATH                     JSON output path. Defaults to target/ripr/reports/evidence-health.json.
  --out-md PATH                  Markdown output path. Defaults to target/ripr/reports/evidence-health.md.
  --mutation-calibration PATH    Optional imported mutation-calibration JSON for calibration availability counts.

The evidence-health report is an advisory Lane 1 analyzer-health view. It
summarizes seam grip classes, missing discriminators, observed values, related
test confidence, oracle strength, unknown static stages, and optional imported
calibration availability. It does not change analyzer behavior, run mutation
testing, edit source files, configure CI policy, or make gate decisions.
"#;

const REVIEW_COMMENTS_HELP: &str = r#"Write advisory PR test guidance on changed lines (does not post to GitHub).

Usage: ripr review-comments [--root PATH] --base SHA --head SHA [--gap-ledger PATH] [--out PATH]

Options:
  --root PATH    Workspace root. Defaults to current directory.
  --base SHA     Pull-request base revision.
  --head SHA     Pull-request head revision.
  --gap-ledger PATH
                 Optional gap decision ledger JSON; when supplied, changed-line
                 repair cards come only from `projection_eligibility.pr_comment`
                 GapRecord targets.
  --out PATH     JSON output path. Defaults to target/ripr/review/comments.json.

The review-comments command writes a bounded advisory PR guidance report as
JSON plus a sibling Markdown file. It joins existing static seam evidence with
the changed-line diff by default and only places line guidance on changed
lines. When `--gap-ledger` is supplied, it does not rerun analysis; it renders
only eligible PR-local repair cards from explicit GapRecord records. It does
not post to GitHub, edit source, generate tests, run mutation testing, or make
CI blocking by default.
"#;

const GATE_HELP: &str = r#"Evaluate the optional pass/fail gate against existing PR guidance (advisory unless explicitly enabled).

Usage: ripr gate evaluate [--pr-guidance PATH | --gap-ledger PATH] [--mode MODE] [--out PATH] [--out-md PATH]

Options:
  --root PATH                         Workspace root. Defaults to current directory.
  --repo-exposure PATH                Optional repo-exposure JSON input.
  --pr-guidance PATH                  Optional PR guidance JSON from `ripr review-comments`.
  --gap-ledger PATH                   Optional gap decision ledger JSON; when supplied, gate candidates come from repairable GapRecord projection targets.
  --sarif-policy PATH                 Optional SARIF policy JSON input.
  --labels-json PATH                  Optional JSON array or object with labels.
  --label LABEL                       Repeatable current PR label input.
  --agent-verify PATH                 Optional agent verify JSON input.
  --agent-receipt PATH                Optional agent receipt JSON input.
  --recommendation-calibration PATH   Optional recommendation calibration JSON input.
  --mutation-calibration PATH         Optional imported mutation calibration JSON input.
  --baseline PATH                     Explicit baseline for baseline-check or calibrated-gate.
  --mode MODE                         visible-only, acknowledgeable, baseline-check, or calibrated-gate. Defaults to visible-only.
  --acknowledgement-label LABEL       Repeatable acknowledgement label. Defaults to ripr-waive.
  --out PATH                          JSON output path. Defaults to target/ripr/reports/gate-decision.json.
  --out-md PATH                       Markdown output path. Defaults to --out with .md extension.

The gate evaluator is read-only policy over existing RIPR evidence. It writes
JSON and Markdown before returning a non-zero exit for `blocked` or
`config_error` decisions. It does not post comments, edit source, generate
tests, run mutation testing, upload SARIF, mutate GitHub state, or change
generated workflow defaults.
"#;

const BASELINE_HELP: &str = r#"Create, diff, and shrink a reviewed baseline of acknowledged test gaps.

Usage:
  ripr baseline create --from PATH [--out PATH] [--dry-run] [--force]
  ripr baseline diff --baseline PATH --current PATH [--out PATH] [--out-md PATH]
  ripr baseline update --baseline PATH --current PATH --remove-resolved [--out PATH]

Create options:
  --from PATH    Gate-decision JSON from `ripr gate evaluate`.
  --out PATH     Baseline ledger path. Defaults to .ripr/gate-baseline.json.
  --dry-run      Print the baseline ledger JSON without writing.
  --force        Overwrite an existing baseline ledger.

Diff options:
  --baseline PATH    Reviewed baseline ledger. Defaults are supplied by callers.
  --current PATH     Current gate-decision JSON from `ripr gate evaluate`.
  --out PATH         JSON output path. Defaults to target/ripr/reports/baseline-debt-delta.json.
  --out-md PATH      Markdown output path. Defaults to target/ripr/reports/baseline-debt-delta.md.

Update options:
  --baseline PATH       Reviewed baseline ledger to refresh.
  --current PATH        Current gate-decision JSON from `ripr gate evaluate`.
  --remove-resolved     Required shrink-only mode; remove identities absent from current evidence.
  --out PATH            Updated baseline path. Defaults to --baseline.

The baseline create command writes a stable reviewed historical-debt ledger
from existing gate-decision evidence. It includes advisory, acknowledged, and
blocking identities; skips suppressed, configured-off, not-applicable, and
malformed decisions; and refuses to overwrite by default. It does not edit
source, run analysis, run mutation testing, generate tests, change gate policy,
or make CI blocking by default.

The baseline diff command compares a reviewed baseline ledger with current
gate-decision evidence and writes advisory JSON/Markdown debt movement. It
reports still-present, resolved, new policy-eligible, acknowledged, suppressed,
stale, invalid, and missing-input identities. It does not update baselines,
edit source, run analysis, run mutation testing, generate tests, change gate
policy, or make CI blocking by default.

The baseline update command refreshes a reviewed baseline ledger in shrink-only
mode. `--remove-resolved` removes reviewed identities that are absent from the
current gate-decision evidence, preserves malformed or ambiguous entries for
manual review, and never adopts new current debt. Generated CI should not use
this command to rewrite checked-in baselines automatically.
"#;

const ZERO_HELP: &str = r#"Summarize current RIPR Zero progress over existing baselines and gate decisions.

Usage: ripr zero status --delta PATH [--baseline PATH] [--gap-ledger PATH] [--gate PATH] [--pr-guidance PATH] [--recommendation-calibration PATH] [--out PATH] [--out-md PATH]

Status options:
  --baseline PATH                       Optional reviewed gate baseline ledger.
  --delta PATH                          Required baseline-debt-delta JSON from `ripr baseline diff`.
  --gap-ledger PATH                     Optional gap decision ledger JSON whose ripr_zero_count targets define the visible target count.
  --gate PATH                           Optional gate-decision JSON from `ripr gate evaluate`.
  --pr-guidance PATH                    Optional PR guidance JSON from `ripr review-comments`.
  --recommendation-calibration PATH     Optional recommendation calibration JSON.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/ripr-zero-status.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/ripr-zero-status.md.

The RIPR Zero status report is read-only advisory progress evidence over
existing baselines, baseline debt deltas, gap decision ledgers, gate decisions, PR guidance, and
optional calibration artifacts. It reports visible unresolved debt, baseline
movement, metadata health, top debt areas, and bounded repair routes. It does
not run analysis, mutate baselines, edit source, generate tests, call an LLM,
run mutation testing, change gate policy, or make CI blocking by default.
"#;

const POLICY_HELP: &str = r#"Summarize which RIPR policy posture is safe for the current repo.

Usage: ripr policy readiness [--root PATH] [--gate-decision PATH] [--baseline-delta PATH] [--recommendation-calibration PATH] [--mutation-calibration PATH] [--waiver-aging PATH] [--suppression-health PATH] [--repo-config PATH] [--previous-readiness PATH] [--out PATH] [--out-md PATH]
       ripr policy operations [--root PATH] --policy-readiness PATH [--waiver-aging PATH] [--suppression-health PATH] [--baseline-delta PATH] [--gate-decision PATH] [--recommendation-calibration PATH] [--mutation-calibration PATH] [--preview-boundary PATH] [--out PATH] [--out-md PATH]
       ripr policy history [--root PATH] --current PATH [--history PATH] [--commit REV] [--pr-number NUMBER] [--out PATH] [--out-md PATH]
       ripr policy promote [--root PATH] --to MODE --operations PATH [--history PATH] [--out PATH] [--out-md PATH]
       ripr policy preview-promote [--root PATH] --language LANGUAGE --class CLASS [--evidence PATH] [--out PATH] [--out-md PATH]
       ripr policy waiver-aging [--root PATH] [--ledger PATH] [--history PATH] [--out PATH] [--out-md PATH]
       ripr policy suppression-health [--root PATH] [--manifest PATH] [--out PATH] [--out-md PATH]

Readiness options:
  --root PATH                           Display root for the report. Defaults to current directory.
  --gate-decision PATH                  Optional gate-decision JSON from `ripr gate evaluate`.
  --baseline-delta PATH                 Optional baseline-debt-delta JSON from `ripr baseline diff`.
  --recommendation-calibration PATH     Optional recommendation calibration JSON.
  --mutation-calibration PATH           Optional imported mutation calibration JSON.
  --waiver-aging PATH                   Optional waiver-aging JSON.
  --suppression-health PATH             Optional suppression-health JSON.
  --repo-config PATH                    Optional repo config summary JSON.
  --previous-readiness PATH             Optional prior policy-readiness JSON.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/policy-readiness.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/policy-readiness.md.

Operations options:
  --root PATH                           Display root for the report. Defaults to current directory.
  --policy-readiness PATH               Policy-readiness JSON from `ripr policy readiness`.
  --waiver-aging PATH                   Optional waiver-aging JSON.
  --suppression-health PATH             Optional suppression-health JSON.
  --baseline-delta PATH                 Optional baseline-debt-delta JSON.
  --gate-decision PATH                  Optional gate-decision JSON.
  --recommendation-calibration PATH     Optional recommendation calibration JSON.
  --mutation-calibration PATH           Optional imported mutation calibration JSON.
  --preview-boundary PATH               Optional preview-boundary JSON.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/policy-operations.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/policy-operations.md.

History options:
  --root PATH                           Display root for the report. Defaults to current directory.
  --current PATH                        Policy-operations JSON from `ripr policy operations`.
  --history PATH                        Optional policy history JSONL.
  --commit REV                          Optional current snapshot commit identity.
  --pr-number NUMBER                    Optional current snapshot PR number.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/policy-history.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/policy-history.md.

Promotion options:
  --root PATH                           Display root for the report. Defaults to current directory.
  --to MODE                             Target mode: visible-only, acknowledgeable, baseline-check, or calibrated-gate.
  --operations PATH                     Policy-operations JSON from `ripr policy operations`.
  --history PATH                        Optional policy-history JSON from `ripr policy history`.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/policy-promotion-<mode>.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/policy-promotion-<mode>.md.

Preview promotion options:
  --root PATH                           Display root for the report. Defaults to current directory.
  --language LANGUAGE                   Preview language under review: typescript or python.
  --class CLASS                         Preview evidence class under review, for example boundary_gap.
  --evidence PATH                       Optional explicit preview promotion evidence receipts JSON.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/preview-promotion-<language>-<class>.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/preview-promotion-<language>-<class>.md.

Waiver aging options:
  --root PATH                           Display root for the report. Defaults to current directory.
  --ledger PATH                         Optional current PR evidence ledger JSON.
  --history PATH                        Optional PR evidence ledger JSONL history.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/waiver-aging.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/waiver-aging.md.

Suppression health options:
  --root PATH                           Workspace root for reading the manifest. Defaults to current directory.
  --manifest PATH                       Suppression manifest path. Defaults to .ripr/suppressions.toml.
  --out PATH                            JSON output path. Defaults to target/ripr/reports/suppression-health.json.
  --out-md PATH                         Markdown output path. Defaults to target/ripr/reports/suppression-health.md.

The policy readiness report is read-only advisory governance over explicit
existing artifacts. It recommends advisory-only, visible-only, acknowledgeable,
baseline-check, or calibrated-gate posture without executing a gate. Preview
language evidence stays visible and advisory by default. The policy operations
report composes existing policy artifacts into current ceiling, next safe
action, safe/not-safe promotion modes, blockers, and input health without
promoting anything. The policy history report shows whether readiness, waivers,
suppressions, baseline debt, calibration, and preview boundaries are improving
or decaying without appending history. The policy promotion packet reads policy
operations plus optional policy history and writes manual-review promotion
evidence without changing config. The preview promotion packet writes default
blocked evidence accounting for TypeScript and Python preview classes while
keeping preview evidence visible, advisory, non-gating, outside RIPR Zero, and
outside calibrated confidence until a later explicit policy is reviewed. The
waiver-aging report keeps repeated waivers visible as repair or policy-review
signals. The suppression-health report flags durable exception metadata gaps
while keeping suppressed findings visible. These commands do not run analysis,
mutate baselines or suppressions, post comments, edit source, generate tests,
run mutation testing, change gate policy, promote preview evidence, or make CI
blocking.
"#;

const PR_LEDGER_HELP: &str = r#"Record a read-only PR evidence ledger entry over existing reports.

Usage: ripr pr-ledger record --pr-number VALUE --base REV --head REV [--gate PATH] [--baseline-delta PATH] [--zero-status PATH] [--pr-guidance PATH] [--gap-ledger PATH] [--recommendation-calibration PATH] [--agent-receipt PATH] [--coverage PATH] [--history PATH] [--out PATH] [--out-md PATH]

Record options:
  --pr-number VALUE                    Pull request number or local identifier.
  --base REV                           Pull request base revision.
  --head REV                           Pull request head revision.
  --label LABEL                        Repeatable PR label to preserve in the record.
  --gate PATH                          Optional gate-decision JSON from `ripr gate evaluate`.
  --baseline-delta PATH                Optional baseline-debt-delta JSON from `ripr baseline diff`.
  --zero-status PATH                   Optional RIPR Zero status JSON from `ripr zero status`.
  --pr-guidance PATH                   Optional PR guidance JSON from `ripr review-comments`.
  --gap-ledger PATH                    Optional gap decision ledger JSON with policy-targeted repairable gap records.
  --recommendation-calibration PATH    Optional recommendation calibration JSON.
  --agent-receipt PATH                 Optional agent receipt JSON.
  --coverage PATH                      Optional coverage summary JSON.
  --history PATH                       Optional previous PR evidence ledger JSONL history.
  --out PATH                           JSON output path. Defaults to target/ripr/reports/pr-evidence-ledger.json.
  --out-md PATH                        Markdown output path. Defaults to target/ripr/reports/pr-evidence-ledger.md.

The PR evidence ledger is read-only advisory history over existing RIPR
artifacts. It records PR-local movement, waiver visibility, suppressions,
repair receipts, and optional coverage/grip frontier signals. It does not run
analysis, mutate baselines, post comments, edit source, generate tests, call an
LLM, run mutation testing, change gate policy, or make CI blocking by default.
"#;

const PR_COMMENTS_HELP: &str = r#"Plan or publish bounded inline PR comments (off / plan / inline).

Usage: ripr pr-comments plan [--root PATH] [--pr-guidance PATH] [--existing-comments PATH] [--mode off|plan|inline] [--pull-request N] [--event-name NAME] [--head-repo OWNER/REPO] [--base-repo OWNER/REPO] [--token-available] [--no-write-permission] [--out PATH] [--out-md PATH]

Plan options:
  --root PATH                 Workspace root label. Defaults to current directory.
  --pr-guidance PATH          PR guidance JSON from `ripr review-comments`.
  --existing-comments PATH    Optional existing RIPR comment metadata.
  --mode MODE                 off, plan, or inline. Defaults to off.
  --pull-request N            Pull request number for inline safety checks.
  --event-name NAME           GitHub event name, usually pull_request.
  --head-repo OWNER/REPO      Pull request head repository.
  --base-repo OWNER/REPO      Pull request base repository.
  --token-available           Mark a pull-request write token as available.
  --no-token                  Mark the token as unavailable. This is the default.
  --write-permission          Mark pull-request write permission as available. This is the default.
  --no-write-permission       Mark pull-request write permission as unavailable.
  --max-inline-comments N     Maximum publishable inline comments. Defaults to 3.
  --out PATH                  JSON output path. Defaults to target/ripr/review/comment-publish-plan.json.
  --out-md PATH               Markdown output path. Defaults to target/ripr/review/comment-publish-plan.md.

The PR comments plan is a read-only advisory projection over existing
`ripr review-comments` output and optional existing-comment metadata. It emits
create/update/keep/delete/skip/blocked operations for a later explicit
publisher, but it never posts comments, calls GitHub, edits source, generates
tests, runs mutation testing, changes gate authority, or makes CI blocking by
default.
"#;

const PR_REVIEW_HELP: &str = r#"Compose the first-screen PR review summary from existing review artifacts.

Usage: ripr pr-review front-panel [--root PATH] [--pr-guidance PATH] [--first-action PATH] [--assistant-proof PATH] [--assistant-health PATH] [--ledger PATH] [--baseline-delta PATH] [--zero-status PATH] [--gate-decision PATH] [--recommendation-calibration PATH] [--mutation-calibration PATH] [--coverage-frontier PATH] [--receipt PATH] [--out PATH] [--out-md PATH]

Front-panel options:
  --root PATH                         Workspace root label. Defaults to current directory.
  --pr-guidance PATH                  Optional PR guidance JSON from `ripr review-comments`.
  --first-action PATH                 Optional first-useful-action JSON.
  --assistant-proof PATH              Optional proof JSON from `ripr assistant-loop proof`.
  --assistant-health PATH             Optional health JSON from `ripr assistant-loop health`.
  --ledger PATH                       Optional PR evidence ledger JSON.
  --baseline-delta PATH               Optional baseline-debt-delta JSON.
  --zero-status PATH                  Optional RIPR Zero status JSON.
  --gate-decision PATH                Optional gate-decision JSON; gate remains pass/fail authority.
  --recommendation-calibration PATH   Optional recommendation calibration JSON.
  --mutation-calibration PATH         Optional imported mutation calibration JSON.
  --coverage-frontier PATH            Optional coverage/grip frontier JSON.
  --receipt PATH                      Optional agent or targeted-test receipt JSON.
  --out PATH                          JSON output path. Defaults to target/ripr/reports/pr-review-front-panel.json.
  --out-md PATH                       Markdown output path. Defaults to target/ripr/reports/pr-review-front-panel.md.

The PR review front panel is a read-only advisory first-screen report over
explicit existing RIPR artifacts. It shows the top issue or fallback, policy
state, movement, repair route, receipt state, calibration context, and artifact
groups. It does not rerun analysis, edit source, generate tests, call a
provider, run mutation testing, publish inline comments, or make CI blocking by
default.
"#;

const REPORTS_HELP: &str = r#"Write reviewer-first report projections from explicit artifacts.

Usage:
  ripr reports index [--root PATH] [--reports-dir PATH] [--review-dir PATH] [--receipts-dir PATH] [--workflow-dir PATH] [--agent-dir PATH] [--pilot-dir PATH] [--ci-dir PATH] [--out PATH] [--out-md PATH]
  ripr reports gap-ledger --records PATH [--root PATH] [--out PATH] [--out-md PATH]
  ripr reports gap-ledger --check-output PATH [--root PATH] [--out PATH] [--out-md PATH]

Index options:
  --root PATH           Workspace root label. Defaults to current directory.
  --reports-dir PATH    Directory containing report artifacts. Defaults to target/ripr/reports.
  --review-dir PATH     Directory containing PR guidance artifacts. Defaults to target/ripr/review.
  --receipts-dir PATH   Directory containing receipt artifacts. Defaults to target/ripr/receipts.
  --workflow-dir PATH   Directory containing workflow repair artifacts. Defaults to target/ripr/workflow.
  --agent-dir PATH      Directory containing agent handoff artifacts. Defaults to target/ripr/agent.
  --pilot-dir PATH      Directory containing pilot artifacts. Defaults to target/ripr/pilot.
  --ci-dir PATH         Directory containing CI context artifacts. Defaults to target/ci.
  --out PATH            JSON output path. Defaults to target/ripr/reports/index.json.
  --out-md PATH         Markdown output path. Defaults to target/ripr/reports/index.md.

Gap ledger options:
  --records PATH        Explicit GapRecord JSON, gap_records JSON, or fixture corpus JSON.
  --repo-exposure PATH  Derive repo-scoped Rust GapRecords from seams[].evidence_record.
  --check-output PATH   Derive PR-local presentation/output contract gaps from finding_alignment.items.
  --root PATH           Workspace root label. Defaults to current directory.
  --out PATH            JSON output path. Defaults to target/ripr/reports/gap-decision-ledger.json.
  --out-md PATH         Markdown output path. Defaults to target/ripr/reports/gap-decision-ledger.md.

The report-packet index is a read-only advisory map over explicit existing
RIPR artifacts. It groups reports by reviewer use, names the start-here
artifact, preserves gate-decision as the configured pass/fail authority,
lists missing expected surfaces with regeneration commands when known, and
does not rerun analysis, edit source, generate tests, call providers, run
mutation testing, publish inline comments, or make CI blocking by default.

The gap decision ledger command is a read-only advisory renderer for explicit
GapRecord input or existing repo-exposure evidence records. It normalizes
supplied or derived gap records into JSON and Markdown,
summarizes projection eligibility, preserves gate-decision as the configured
pass/fail authority, and does not rerun hidden analysis, publish comments,
edit source, generate tests, call providers, run mutation testing, or change
default CI blocking.
"#;

const COVERAGE_GRIP_HELP: &str = r#"Report whether line coverage and behavior evidence moved together.

Usage: ripr coverage-grip frontier (--ledger PATH|--baseline-delta PATH|--zero-status PATH) [--coverage PATH] [--out PATH] [--out-md PATH]

Frontier options:
  --coverage PATH          Optional coverage summary JSON.
  --ledger PATH            Optional PR evidence ledger JSON from `ripr pr-ledger record`.
  --baseline-delta PATH    Optional baseline-debt-delta JSON from `ripr baseline diff`.
  --zero-status PATH       Optional RIPR Zero status JSON from `ripr zero status`.
  --out PATH               JSON output path. Defaults to target/ripr/reports/coverage-grip-frontier.json.
  --out-md PATH            Markdown output path. Defaults to target/ripr/reports/coverage-grip-frontier.md.

The coverage/grip frontier report is read-only advisory evidence. It keeps
line execution coverage and RIPR behavioral grip movement as separate axes. It
does not treat coverage as adequacy, run mutation testing, change gate policy,
or make CI blocking by default.
"#;

const ASSISTANT_LOOP_HELP: &str = r#"Produce or summarize advisory agent proof and proof-loop health.

Usage:
  ripr assistant-loop proof [--pr-guidance PATH] [--agent-packet PATH] [--before PATH] [--after PATH] [--receipt PATH] [--ledger PATH] [--coverage-frontier PATH] [--gate-decision PATH] [--out PATH] [--out-md PATH]
  ripr assistant-loop health --proof PATH [--proof PATH ...] [--out PATH] [--out-md PATH]

Proof options:
  --root PATH                 Workspace root label. Defaults to current directory.
  --pr-guidance PATH          Optional PR guidance JSON from `ripr review-comments`.
  --agent-packet PATH         Optional editor/agent handoff JSON from `ripr agent brief`.
  --before PATH               Optional before repo-exposure JSON snapshot.
  --after PATH                Optional after repo-exposure JSON snapshot.
  --receipt PATH              Optional agent receipt JSON from `ripr agent receipt`.
  --ledger PATH               Optional PR evidence ledger JSON from `ripr pr-ledger record`.
  --coverage-frontier PATH    Optional coverage/grip frontier JSON.
  --gate-decision PATH        Optional gate-decision JSON from `ripr gate evaluate`.
  --out PATH                  JSON output path. Defaults to target/ripr/reports/test-oracle-assistant-proof.json.
  --out-md PATH               Markdown output path. Defaults to target/ripr/reports/test-oracle-assistant-proof.md.

The assistant-loop proof report is read-only advisory evidence over explicit
Campaign 20 artifacts. It requires at least one supplied artifact input, joins
PR guidance, agent handoff packets, before and after static evidence, receipts,
and optional CI projection artifacts, and marks missing proof pieces as
incomplete or unknown. It does not rerun analysis, post comments, edit source,
generate tests, call a provider, run mutation testing, change gate policy, or
make CI blocking by default.

Health options:
  --root PATH                 Workspace root label. Defaults to current directory.
  --proof PATH                Explicit test-oracle assistant proof JSON. Repeatable.
  --out PATH                  JSON output path. Defaults to target/ripr/reports/assistant-loop-health.json.
  --out-md PATH               Markdown output path. Defaults to target/ripr/reports/assistant-loop-health.md.

The assistant-loop health report is read-only advisory evidence over explicit
test-oracle assistant proof JSON artifacts. It summarizes proof completeness,
missing inputs, static movement, recurring warnings, and bounded repair queues.
It does not rerun analysis, inspect source to infer missing data, edit source,
generate tests, call a provider, run mutation testing, change gate policy, or
make CI blocking by default.
"#;

const FIRST_ACTION_HELP: &str = r#"Recommend the next focused test to add from existing review artifacts.

Usage: ripr first-action [--root PATH] [--pr-guidance PATH] [--assistant-proof PATH] [--gap-ledger PATH] [--ledger PATH] [--baseline-delta PATH] [--receipt PATH] [--gate-decision PATH] [--coverage-frontier PATH] [--editor-context PATH] [--out PATH] [--out-md PATH]

Options:
  --root PATH                Workspace root label. Defaults to current directory.
  --pr-guidance PATH         Optional PR guidance JSON from `ripr review-comments`.
  --assistant-proof PATH     Optional proof JSON from `ripr assistant-loop proof`.
  --gap-ledger PATH          Optional gap decision ledger JSON from `ripr reports gap-ledger`.
  --ledger PATH              Optional PR evidence ledger JSON from `ripr pr-ledger record`.
  --baseline-delta PATH      Optional baseline-debt-delta JSON from `ripr baseline diff`.
  --receipt PATH             Optional agent receipt JSON from `ripr agent receipt`.
  --gate-decision PATH       Optional gate-decision JSON from `ripr gate evaluate`.
  --coverage-frontier PATH   Optional coverage/grip frontier JSON.
  --editor-context PATH      Optional editor evidence context packet JSON.
  --out PATH                 JSON output path. Defaults to target/ripr/reports/first-useful-action.json.
  --out-md PATH              Markdown output path. Defaults to target/ripr/reports/first-useful-action.md.

The first-action report is a read-only advisory router over explicit existing
RIPR artifacts. It writes one next useful test action or one fallback reason
for developers, reviewers, or coding agents. It does not rerun analysis, post
comments, edit source, generate tests, call a provider, run mutation testing,
invent policy, or make CI blocking by default.
"#;

const CALIBRATE_HELP: &str = r#"Import cargo-mutants outcomes as advisory calibration over static evidence.

Usage: ripr calibrate cargo-mutants --mutants-json PATH --repo-exposure-json PATH [--format md|json] [--out PATH]

Options:
  --mutants-json PATH          cargo-mutants JSON file, or directory containing outcomes.json and/or mutants.json.
  --repo-exposure-json PATH    RIPR repo-exposure-json snapshot to join against.
  --format FORMAT             md, markdown, text, or json. Defaults to md.
  --out PATH                  Write the rendered calibration report to a file instead of stdout.

The calibration report is advisory. It imports already-produced runtime
mutation data and joins it to static seam evidence by seam_id first, then by
unambiguous file/line. It does not run mutation testing, alter static
classifications, or configure CI policy.
"#;

const AGENT_HELP: &str = r#"Create a bounded packet for a coding agent and verify what it did.

Usage: ripr agent <subcommand>

Subcommands:
  start      Write a source-edit-free workflow manifest for one seam.
  brief      Rank a working-set brief for the agent-active router.
  packet     Expand one visible seam into the existing agent seam packet JSON.
  verify     Compare before/after repo-exposure JSON for agent verification.
  receipt    Summarize one seam from agent verify JSON for review handoff.
  status     Report existing agent-loop artifacts and the next missing command.
  review-summary
             Join agent-loop artifacts into a compact review packet.

Run `ripr agent start --help` for the workflow manifest, `ripr agent brief
--help`, `ripr agent packet --help`, or `ripr agent verify --help` for
JSON-only agent surfaces. Run `ripr agent receipt --help` for the verification
receipt surface, `ripr agent status --help` for the artifact status lens, and
`ripr agent review-summary --help` for the PR-review packet.
"#;

const AGENT_START_HELP: &str = r#"Start a source-edit-free workflow packet for one selected change.

Usage: ripr agent start [--root PATH] --seam-id ID [--out PATH]

Options:
  --root PATH      Workspace root. Defaults to current directory.
  --seam-id ID     Select one visible seam by ID.
  --out PATH       Workflow output directory. Defaults to target/ripr/workflow.

The start command writes a source-edit-free workflow packet for one seam:
workflow.json, commands.md, and agent-brief.json. The packet contains artifact
paths and shared command templates for the before snapshot, packet, brief,
after snapshot, verify, and receipt steps. It remains advisory and static; it
does not call an LLM API, run mutation testing, generate tests, edit files,
change cache behavior, or touch LSP/MCP surfaces.
"#;

const AGENT_BRIEF_HELP: &str = r#"Write a bounded brief for a coding agent over the current diff or change.

Usage: ripr agent brief [--root PATH] (--diff PATH|--base REV|--files PATHS|--seam-id ID) --json [--max-seams N]

Options:
  --root PATH      Workspace root. Defaults to current directory.
  --diff PATH      Select a diff file and line-level working set.
  --base REV       Derive the working set from a base revision.
  --files PATHS    Comma-separated repo-relative file paths.
  --seam-id ID     Select one visible seam by ID.
  --json           Required until a human brief surface exists.
  --max-seams N    Requested seam cap. Defaults to 3 and cannot exceed 10.

This parser is the first implementation seam for RIPR-SPEC-0010. The brief
router remains advisory and static; it does not run mutation testing, generate
tests, edit files, change cache behavior, or touch LSP/MCP surfaces.
"#;

const AGENT_PACKET_HELP: &str = r#"Write a per-change handoff packet for a coding agent.

Usage: ripr agent packet [--root PATH] --seam-id ID --json
       ripr agent packet [--root PATH] --gap-ledger PATH --gap-id ID --json

Options:
  --root PATH        Workspace root. Defaults to current directory.
  --seam-id ID       Select one visible seam by ID.
  --gap-ledger PATH  Explicit gap decision ledger JSON.
  --gap-id ID        Select a GapRecord by gap_id or canonical_gap_id.
  --json             Required until a human packet surface exists.

The packet command expands a seam selected by `ripr agent brief` into the
existing agent-seam-packets-json envelope with one packet. With `--gap-ledger`,
it renders one agent packet from an explicit agent-packet-eligible GapRecord
without rerunning analysis. It remains advisory and static; it does not run
mutation testing, generate tests, edit files, change cache behavior, or touch
LSP/MCP surfaces.
"#;

const AGENT_VERIFY_HELP: &str = r#"Verify static-evidence movement between a before and after snapshot.

Usage: ripr agent verify [--root PATH] --before PATH --after PATH --json

Options:
  --root PATH      Workspace root. Defaults to current directory.
  --before PATH    Before `repo-exposure-json` snapshot.
  --after PATH     After `repo-exposure-json` snapshot.
  --json           Required until a human verify surface exists.

The verify command compares two saved static repo-exposure artifacts and emits
an agent-focused before/after summary. Snapshot paths must resolve under
`--root`. The command remains advisory and static; it does not run analysis,
mutation testing, generate tests, edit files, change cache behavior, or touch
LSP/MCP surfaces.
"#;

const AGENT_RECEIPT_HELP: &str = r#"Write a provenance receipt with bounded next-action guidance for one change.

Usage: ripr agent receipt [--root PATH] --verify-json PATH --seam-id ID --json [--test NAME] [--command CMD] [--out PATH]

Options:
  --root PATH         Workspace root. Defaults to current directory.
  --verify-json PATH  JSON emitted by `ripr agent verify`.
  --seam-id ID        Select one seam from the verify JSON.
  --json              Required until a human receipt surface exists.
  --test NAME         Optional focused test added or changed by the agent.
  --command CMD       Optional verification command that was run. Repeatable.
  --out PATH          Write the JSON receipt to a file instead of stdout.

The receipt command narrows a saved agent verify artifact to one seam and adds
handoff metadata for review. The verify JSON path and the before/after snapshot
paths named inside it must resolve under `--root`; receipt provenance hashes
those three artifacts without rerunning analysis. It remains advisory and
static; it does not run analysis, mutation testing, generate tests, edit files,
change cache behavior, or touch LSP/MCP surfaces.
"#;

const AGENT_STATUS_HELP: &str = r#"Report local agent-loop artifact state and the next command to run.

Usage: ripr agent status [--root PATH] [--json]

Options:
  --root PATH      Workspace root. Defaults to current directory.
  --json           Emit the machine-readable status report. Human Markdown is the default.

The status command reads existing agent-loop artifacts under target/ripr only
and reports which before snapshot, after snapshot, brief, packet, verify, and
receipt files are present or missing. It may recover a seam_id from those
artifacts and emits the next command to run for missing inputs. It remains
advisory and static; it does not run analysis, mutation testing, generate
tests, edit files, change cache behavior, or touch LSP/MCP surfaces.
"#;

const AGENT_REVIEW_SUMMARY_HELP: &str = r#"Summarize agent-loop artifacts into a compact review packet.

Usage: ripr agent review-summary [--root PATH] [--json]

Options:
  --root PATH      Workspace root. Defaults to current directory.
  --json           Emit the machine-readable review summary. Human Markdown is the default.

The review-summary command reads existing agent-loop artifacts and joins agent
status, receipt, workflow, operator cockpit, repo exposure, LSP cockpit when
present, and local CI artifact state into a compact review packet. It remains
advisory and static; it does not run analysis, mutation testing, generate
tests, edit files, change cache behavior, or touch LSP/MCP surfaces.
"#;

const CHECK_HELP: &str = r#"Analyze a diff or workspace and emit findings in human, JSON, SARIF, or badge form.

Usage: ripr check [OPTIONS]

Options:
  --root PATH              Workspace root. Defaults to current directory.
  --base REV               Base revision for git diff. Defaults to origin/main.
  --diff PATH              Read a unified diff file instead of running git diff.
  --mode MODE              instant, draft, fast, deep, or ready. Defaults to draft.
  --format FORMAT          human, json, github, sarif, badge-json, badge-shields,
                           badge-plus-json, badge-plus-shields, repo-badge-json,
                           repo-badge-shields, repo-badge-plus-json,
                           repo-badge-plus-shields, repo-seams-json,
                           repo-seams-md, repo-exposure-json, repo-exposure-md,
                           repo-sarif, agent-seam-packets-json. Defaults to human.
                           badge-plus-* and repo-badge-plus-* formats require
                           target/ripr/reports/test-efficiency.json (run
                           `cargo xtask test-efficiency-report` first).
                           repo-* and agent-seam-packets-json formats render
                           against the full repo baseline; the non-repo badge-*
                           formats remain diff-scoped.
  --gap-ledger PATH        For repo-badge-* formats only, render badge counts
                           from explicit gap-decision-ledger projection targets
                           instead of seam-native/test-efficiency counts.
  --json                   Shortcut for --format json.
  --no-unchanged-tests     Limit the index to changed Rust files.

Examples:
  ripr check
  ripr check --base HEAD~1
  ripr check --diff crates/ripr/examples/sample/example.diff --format github
  ripr check --mode ready --json
"#;

const EXPLAIN_HELP: &str = r#"Print why ripr flagged a specific change.

Usage: ripr explain [--root PATH] [--base REV|--diff PATH] <finding-id|file:line>
"#;
const CONTEXT_HELP: &str = r#"Print the per-change context packet for one finding or location.

Usage: ripr context [--root PATH] [--base REV|--diff PATH] --at <finding-id|file:line> [--max-related-tests N] [--json]
"#;
const DOCTOR_HELP: &str = r#"Diagnose the local ripr setup (Rust toolchain, workspace, paths).

Usage: ripr doctor [--root PATH]

Checks:
  - root directory exists
  - Cargo.toml is present at the selected root
  - ripr.toml load status and effective defaults are visible
  - git, cargo, and rustc are available
"#;
const LSP_HELP: &str = r#"Start the experimental ripr LSP server over stdio.

Usage: ripr lsp [--stdio] [--version]

Options:
  --stdio       Run the language server over stdio LSP framing. This is the default.
  --version     Print the language server version.
"#;

pub(super) fn print_help() {
    println!("{HELP}");
}

pub(super) fn print_check_help() {
    println!("{CHECK_HELP}");
}

pub(super) fn print_init_help() {
    println!("{INIT_HELP}");
}

pub(super) fn print_pilot_help() {
    println!("{PILOT_HELP}");
}

pub(super) fn print_outcome_help() {
    println!("{OUTCOME_HELP}");
}

pub(super) fn print_evidence_health_help() {
    println!("{EVIDENCE_HEALTH_HELP}");
}

pub(super) fn print_review_comments_help() {
    println!("{REVIEW_COMMENTS_HELP}");
}

pub(super) fn print_gate_help() {
    println!("{GATE_HELP}");
}

pub(super) fn print_baseline_help() {
    println!("{BASELINE_HELP}");
}

pub(super) fn print_zero_help() {
    println!("{ZERO_HELP}");
}

pub(super) fn print_policy_help() {
    println!("{POLICY_HELP}");
}

pub(super) fn print_pr_ledger_help() {
    println!("{PR_LEDGER_HELP}");
}

pub(super) fn print_pr_comments_help() {
    println!("{PR_COMMENTS_HELP}");
}

pub(super) fn print_pr_review_help() {
    println!("{PR_REVIEW_HELP}");
}

pub(super) fn print_coverage_grip_help() {
    println!("{COVERAGE_GRIP_HELP}");
}

pub(super) fn print_assistant_loop_help() {
    println!("{ASSISTANT_LOOP_HELP}");
}

pub(super) fn print_first_action_help() {
    println!("{FIRST_ACTION_HELP}");
}

pub(super) fn print_reports_help() {
    println!("{REPORTS_HELP}");
}

pub(super) fn print_calibrate_help() {
    println!("{CALIBRATE_HELP}");
}

pub(super) fn print_agent_help() {
    println!("{AGENT_HELP}");
}

pub(super) fn print_agent_start_help() {
    println!("{AGENT_START_HELP}");
}

pub(super) fn print_agent_brief_help() {
    println!("{AGENT_BRIEF_HELP}");
}

pub(super) fn print_agent_packet_help() {
    println!("{AGENT_PACKET_HELP}");
}

pub(super) fn print_agent_verify_help() {
    println!("{AGENT_VERIFY_HELP}");
}

pub(super) fn print_agent_receipt_help() {
    println!("{AGENT_RECEIPT_HELP}");
}

pub(super) fn print_agent_status_help() {
    println!("{AGENT_STATUS_HELP}");
}

pub(super) fn print_agent_review_summary_help() {
    println!("{AGENT_REVIEW_SUMMARY_HELP}");
}

pub(super) fn print_explain_help() {
    println!("{EXPLAIN_HELP}");
}

pub(super) fn print_context_help() {
    println!("{CONTEXT_HELP}");
}

pub(super) fn print_doctor_help() {
    println!("{DOCTOR_HELP}");
}

pub(super) fn print_lsp_help() {
    println!("{LSP_HELP}");
}

#[cfg(test)]
mod tests {
    use super::{
        AGENT_BRIEF_HELP, AGENT_HELP, AGENT_PACKET_HELP, AGENT_RECEIPT_HELP,
        AGENT_REVIEW_SUMMARY_HELP, AGENT_START_HELP, AGENT_STATUS_HELP, AGENT_VERIFY_HELP,
        ASSISTANT_LOOP_HELP, BASELINE_HELP, CALIBRATE_HELP, CHECK_HELP, CONTEXT_HELP,
        COVERAGE_GRIP_HELP, DOCTOR_HELP, EVIDENCE_HEALTH_HELP, EXPLAIN_HELP, FIRST_ACTION_HELP,
        GATE_HELP, HELP, INIT_HELP, LSP_HELP, OUTCOME_HELP, PILOT_HELP, POLICY_HELP,
        PR_COMMENTS_HELP, PR_LEDGER_HELP, PR_REVIEW_HELP, REPORTS_HELP, REVIEW_COMMENTS_HELP,
        ZERO_HELP,
    };

    #[test]
    fn top_level_help_mentions_supported_commands() {
        assert!(HELP.contains("ripr init"));
        assert!(HELP.contains("ripr pilot"));
        assert!(HELP.contains("ripr outcome"));
        assert!(HELP.contains("ripr evidence-health"));
        assert!(HELP.contains("ripr review-comments"));
        assert!(HELP.contains("ripr gate evaluate"));
        assert!(HELP.contains("ripr baseline create"));
        assert!(HELP.contains("ripr baseline diff"));
        assert!(HELP.contains("ripr baseline update"));
        assert!(HELP.contains("ripr zero status"));
        assert!(HELP.contains("ripr policy readiness"));
        assert!(HELP.contains("ripr policy operations"));
        assert!(HELP.contains("ripr policy history"));
        assert!(HELP.contains("ripr policy promote"));
        assert!(HELP.contains("ripr policy preview-promote"));
        assert!(HELP.contains("ripr policy waiver-aging"));
        assert!(HELP.contains("ripr pr-ledger record"));
        assert!(HELP.contains("ripr pr-comments plan"));
        assert!(HELP.contains("ripr pr-review front-panel"));
        assert!(HELP.contains("ripr coverage-grip frontier"));
        assert!(HELP.contains("ripr assistant-loop proof"));
        assert!(HELP.contains("ripr assistant-loop health"));
        assert!(HELP.contains("ripr first-pr"));
        assert!(HELP.contains("ripr first-action"));
        assert!(HELP.contains("ripr reports index"));
        assert!(HELP.contains("ripr reports gap-ledger"));
        assert!(HELP.contains("ripr calibrate"));
        assert!(HELP.contains("ripr agent start"));
        assert!(HELP.contains("ripr agent brief"));
        assert!(HELP.contains("ripr agent packet"));
        assert!(HELP.contains("ripr agent verify"));
        assert!(HELP.contains("ripr agent receipt"));
        assert!(HELP.contains("ripr agent status"));
        assert!(HELP.contains("ripr agent review-summary"));
        assert!(HELP.contains("ripr check"));
        assert!(HELP.contains("ripr explain"));
        assert!(HELP.contains("ripr context"));
        assert!(HELP.contains("ripr doctor"));
    }

    #[test]
    fn check_help_mentions_repo_badge_formats_and_examples() {
        assert!(CHECK_HELP.contains("repo-badge-plus-shields"));
        assert!(CHECK_HELP.contains("repo-exposure-json"));
        assert!(CHECK_HELP.contains("agent-seam-packets-json"));
        assert!(CHECK_HELP.contains("repo-sarif"));
        assert!(CHECK_HELP.contains("test-efficiency-report"));
        assert!(CHECK_HELP.contains("--mode ready --json"));
    }

    #[test]
    fn command_specific_help_usage_lines_are_stable() {
        // Each subcommand help block leads with a one-line action-oriented opener,
        // followed by a blank line and the canonical `Usage: ripr <cmd>` line.
        // Tests check both surfaces so the user-facing copy and the syntax stay aligned.
        assert!(INIT_HELP.starts_with("Write an optional repo policy file"));
        assert!(INIT_HELP.contains("Usage: ripr init"));
        assert!(INIT_HELP.contains("--ci github"));
        assert!(INIT_HELP.contains("--dry-run"));
        assert!(INIT_HELP.contains("--force"));
        assert!(PILOT_HELP.starts_with("Find the top test gap in this repo"));
        assert!(PILOT_HELP.contains("Usage: ripr pilot"));
        assert!(PILOT_HELP.contains("pilot-summary.json"));
        assert!(PILOT_HELP.contains("--timeout-ms MS"));
        assert!(OUTCOME_HELP.starts_with("Compare before/after static evidence"));
        assert!(OUTCOME_HELP.contains("Usage: ripr outcome"));
        assert!(OUTCOME_HELP.contains("--before PATH"));
        assert!(
            EVIDENCE_HEALTH_HELP.starts_with("Summarize how strong the current static evidence")
        );
        assert!(EVIDENCE_HEALTH_HELP.contains("Usage: ripr evidence-health"));
        assert!(EVIDENCE_HEALTH_HELP.contains("--mutation-calibration PATH"));
        assert!(REVIEW_COMMENTS_HELP.starts_with("Write advisory PR test guidance"));
        assert!(REVIEW_COMMENTS_HELP.contains("Usage: ripr review-comments"));
        assert!(REVIEW_COMMENTS_HELP.contains("target/ripr/review/comments.json"));
        assert!(GATE_HELP.starts_with("Evaluate the optional pass/fail gate"));
        assert!(GATE_HELP.contains("Usage: ripr gate evaluate"));
        assert!(GATE_HELP.contains("visible-only"));
        assert!(GATE_HELP.contains("ripr-waive"));
        assert!(BASELINE_HELP.starts_with("Create, diff, and shrink a reviewed baseline"));
        assert!(BASELINE_HELP.contains("Usage:"));
        assert!(BASELINE_HELP.contains("ripr baseline create"));
        assert!(BASELINE_HELP.contains("ripr baseline diff"));
        assert!(BASELINE_HELP.contains("ripr baseline update"));
        assert!(BASELINE_HELP.contains(".ripr/gate-baseline.json"));
        assert!(BASELINE_HELP.contains("baseline-debt-delta.json"));
        assert!(BASELINE_HELP.contains("--remove-resolved"));
        assert!(ZERO_HELP.starts_with("Summarize current RIPR Zero progress"));
        assert!(ZERO_HELP.contains("Usage: ripr zero status"));
        assert!(ZERO_HELP.contains("baseline-debt-delta JSON"));
        assert!(ZERO_HELP.contains("RIPR Zero status report"));
        assert!(POLICY_HELP.starts_with("Summarize which RIPR policy posture"));
        assert!(POLICY_HELP.contains("Usage: ripr policy readiness"));
        assert!(POLICY_HELP.contains("ripr policy operations"));
        assert!(POLICY_HELP.contains("ripr policy history"));
        assert!(POLICY_HELP.contains("ripr policy promote"));
        assert!(POLICY_HELP.contains("ripr policy preview-promote"));
        assert!(POLICY_HELP.contains("ripr policy waiver-aging"));
        assert!(POLICY_HELP.contains("ripr policy suppression-health"));
        assert!(POLICY_HELP.contains("policy-readiness.json"));
        assert!(POLICY_HELP.contains("policy-operations.json"));
        assert!(POLICY_HELP.contains("policy-history.json"));
        assert!(POLICY_HELP.contains("policy-promotion-<mode>.json"));
        assert!(POLICY_HELP.contains("preview-promotion-<language>-<class>.json"));
        assert!(POLICY_HELP.contains("waiver-aging.json"));
        assert!(POLICY_HELP.contains("suppression-health.json"));
        assert!(POLICY_HELP.contains("read-only advisory governance"));
        assert!(PR_LEDGER_HELP.starts_with("Record a read-only PR evidence ledger"));
        assert!(PR_LEDGER_HELP.contains("Usage: ripr pr-ledger record"));
        assert!(PR_LEDGER_HELP.contains("pr-evidence-ledger.json"));
        assert!(PR_LEDGER_HELP.contains("read-only advisory history"));
        assert!(PR_COMMENTS_HELP.starts_with("Plan or publish bounded inline PR comments"));
        assert!(PR_COMMENTS_HELP.contains("Usage: ripr pr-comments plan"));
        assert!(PR_COMMENTS_HELP.contains("comment-publish-plan.json"));
        assert!(PR_COMMENTS_HELP.contains("read-only advisory projection"));
        assert!(PR_REVIEW_HELP.starts_with("Compose the first-screen PR review summary"));
        assert!(PR_REVIEW_HELP.contains("Usage: ripr pr-review front-panel"));
        assert!(PR_REVIEW_HELP.contains("pr-review-front-panel.json"));
        assert!(PR_REVIEW_HELP.contains("read-only advisory first-screen report"));
        assert!(
            COVERAGE_GRIP_HELP.starts_with("Report whether line coverage and behavior evidence")
        );
        assert!(COVERAGE_GRIP_HELP.contains("Usage: ripr coverage-grip frontier"));
        assert!(COVERAGE_GRIP_HELP.contains("coverage-grip-frontier.json"));
        assert!(COVERAGE_GRIP_HELP.contains("separate axes"));
        assert!(ASSISTANT_LOOP_HELP.starts_with("Produce or summarize advisory agent proof"));
        assert!(ASSISTANT_LOOP_HELP.contains("Usage:"));
        assert!(ASSISTANT_LOOP_HELP.contains("ripr assistant-loop proof"));
        assert!(ASSISTANT_LOOP_HELP.contains("ripr assistant-loop health"));
        assert!(ASSISTANT_LOOP_HELP.contains("test-oracle-assistant-proof.json"));
        assert!(ASSISTANT_LOOP_HELP.contains("assistant-loop-health.json"));
        assert!(ASSISTANT_LOOP_HELP.contains("Campaign 20 artifacts"));
        assert!(FIRST_ACTION_HELP.starts_with("Recommend the next focused test"));
        assert!(FIRST_ACTION_HELP.contains("Usage: ripr first-action"));
        assert!(FIRST_ACTION_HELP.contains("--gap-ledger PATH"));
        assert!(FIRST_ACTION_HELP.contains("first-useful-action.json"));
        assert!(FIRST_ACTION_HELP.contains("read-only advisory router"));
        assert!(REPORTS_HELP.starts_with("Write reviewer-first report projections"));
        assert!(REPORTS_HELP.contains("Usage:"));
        assert!(REPORTS_HELP.contains("ripr reports index"));
        assert!(REPORTS_HELP.contains("ripr reports gap-ledger"));
        assert!(REPORTS_HELP.contains("target/ripr/reports/index.json"));
        assert!(REPORTS_HELP.contains("gap-decision-ledger.json"));
        assert!(REPORTS_HELP.contains("read-only advisory map"));
        assert!(CALIBRATE_HELP.starts_with("Import cargo-mutants outcomes"));
        assert!(CALIBRATE_HELP.contains("Usage: ripr calibrate cargo-mutants"));
        assert!(CALIBRATE_HELP.contains("--mutants-json PATH"));
        assert!(AGENT_HELP.starts_with("Create a bounded packet for a coding agent"));
        assert!(AGENT_HELP.contains("Usage: ripr agent"));
        assert!(AGENT_START_HELP.starts_with("Start a source-edit-free workflow packet"));
        assert!(AGENT_START_HELP.contains("Usage: ripr agent start"));
        assert!(AGENT_START_HELP.contains("workflow.json"));
        assert!(AGENT_BRIEF_HELP.starts_with("Write a bounded brief for a coding agent"));
        assert!(AGENT_BRIEF_HELP.contains("Usage: ripr agent brief"));
        assert!(AGENT_BRIEF_HELP.contains("--max-seams N"));
        assert!(AGENT_BRIEF_HELP.contains("RIPR-SPEC-0010"));
        assert!(AGENT_PACKET_HELP.starts_with("Write a per-change handoff packet"));
        assert!(AGENT_PACKET_HELP.contains("Usage: ripr agent packet"));
        assert!(AGENT_PACKET_HELP.contains("agent-seam-packets-json"));
        assert!(AGENT_VERIFY_HELP.starts_with("Verify static-evidence movement"));
        assert!(AGENT_VERIFY_HELP.contains("Usage: ripr agent verify"));
        assert!(AGENT_VERIFY_HELP.contains("repo-exposure-json"));
        assert!(AGENT_RECEIPT_HELP.starts_with("Write a provenance receipt"));
        assert!(AGENT_RECEIPT_HELP.contains("Usage: ripr agent receipt"));
        assert!(AGENT_RECEIPT_HELP.contains("--verify-json PATH"));
        assert!(AGENT_STATUS_HELP.starts_with("Report local agent-loop artifact state"));
        assert!(AGENT_STATUS_HELP.contains("Usage: ripr agent status"));
        assert!(AGENT_STATUS_HELP.contains("before snapshot"));
        assert!(AGENT_REVIEW_SUMMARY_HELP.starts_with("Summarize agent-loop artifacts"));
        assert!(AGENT_REVIEW_SUMMARY_HELP.contains("Usage: ripr agent review-summary"));
        assert!(AGENT_REVIEW_SUMMARY_HELP.contains("Human Markdown is the default"));
        assert!(EXPLAIN_HELP.starts_with("Print why ripr flagged"));
        assert!(EXPLAIN_HELP.contains("Usage: ripr explain"));
        assert!(CONTEXT_HELP.starts_with("Print the per-change context packet"));
        assert!(CONTEXT_HELP.contains("Usage: ripr context"));
        assert!(DOCTOR_HELP.starts_with("Diagnose the local ripr setup"));
        assert!(DOCTOR_HELP.contains("Usage: ripr doctor [--root PATH]"));
        assert!(DOCTOR_HELP.contains("Cargo.toml"));
        assert!(LSP_HELP.starts_with("Start the experimental ripr LSP server"));
        assert!(LSP_HELP.contains("--stdio"));
        assert!(LSP_HELP.contains("--version"));
    }
}