Add message IDs (and missing entries) to the manpage diagnostics listings
Marco Ricci

Marco Ricci commited on 2025-02-09 20:47:17
Zeige 4 geänderte Dateien mit 146 Einfügungen und 35 Löschungen.


Using the new quality control scripts, add message IDs to all diagnostic
messages described in the manpages, and add the entries missing from the
manpages as well.
... ...
@@ -70,6 +70,31 @@ If <i>PATH</i> is explicitly given as `VAULT_PATH`, then use the `VAULT_PATH` en
70 70
 `LOGNAME`, `USER`, `USERNAME`
71 71
 :   Fallback values for `VAULT_KEY`.
72 72
 
73
+## DIAGNOSTICS
74
+
75
+The <b>derivepassphrase export vault</b> utility exits 0 on success, and >0 if an error occurs.
76
+
77
+### Fatal error messsages on standard error
78
+
79
+(`%s` indicates a variable part of the message.)
80
+
81
+<!-- Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG -->
82
+<!-- Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR -->
83
+??? failure "`Cannot parse %s as a valid vault-native configuration file/directory`"
84
+
85
+    The file or directory is not a valid vault-native configuration.
86
+    Alternatively, the wrong format was assumed and/or the wrong master key was provided.
87
+
88
+<!-- Message-ID: ErrMsgTemplate.INVALID_VAULT_CONFIG -->
89
+??? failure "`Invalid vault config: %s`"
90
+
91
+    The file or directory was successfully decrypted and decoded, but the resulting contents are not valid as a vault configuration.
92
+
93
+<!-- Message-ID: ErrMsgTemplate.MISSING_MODULE -->
94
+??? failure "`Cannot load the required Python module %s`"
95
+
96
+    (Exactly what it says.)
97
+
73 98
 ## COMPATIBILITY
74 99
 
75 100
 ### With other software
... ...
@@ -288,121 +288,135 @@ The <b>derivepassphrase vault</b> utility exits 0 on success, and >0 if an error
288 288
 
289 289
 (`%s` indicates a variable part of the message.)
290 290
 
291
+<!-- Message-ID: ErrMsgTemplate.PARAMS_MUTUALLY_EXCLUSIVE -->
291 292
 ??? failure "`%s is mutually exclusive with %s.`"
292 293
 
293 294
     The two indicated options must not be used at the same time.
294 295
 
296
+<!-- Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE_OR_CONFIG -->
295 297
 ??? failure "`%s requires a SERVICE or --config.`"
296 298
 
297 299
     Using the indicated passphrase generation option requires the <var>SERVICE</var> argument or the `--config` option.
298 300
 
301
+<!-- Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE -->
299 302
 ??? failure "`%s requires a SERVICE.`"
300 303
 
301 304
     Using the indicated option requires the <var>SERVICE</var> argument.
302 305
 
306
+<!-- Message-ID: ErrMsgTemplate.PARAMS_NO_SERVICE -->
303 307
 ??? failure "`%s does not take a SERVICE argument.`"
304 308
 
305 309
     The indicated option must not be specified together with the <var>SERVICE</var> argument.
306 310
 
311
+<!-- Message-ID: ErrMsgTemplate.CANNOT_LOAD_VAULT_SETTINGS -->
307 312
 ??? failure "`Cannot load vault settings: %s.`"
308 313
 
309 314
     There was a fatal problem loading the stored vault configuration data.
310 315
     Further details are contained in the variable part of the message.
311 316
 
317
+<!-- Message-ID: ErrMsgTemplate.CANNOT_STORE_VAULT_SETTINGS -->
312 318
 ??? failure "`Cannot store vault settings: %s.`"
313 319
 
314 320
     There was a fatal problem saving the vault configuration data.
315 321
     Further details are contained in the variable part of the message.
316 322
 
323
+<!-- Message-ID: ErrMsgTemplate.CANNOT_DECODEIMPORT_VAULT_SETTINGS -->
324
+<!-- Message-ID: ErrMsgTemplate.CANNOT_IMPORT_VAULT_SETTINGS -->
317 325
 ??? failure "`Cannot import vault settings: %s.`"
318 326
 
319 327
     There was a fatal problem loading the imported vault configuration data.
320 328
     Further details are contained in the variable part of the message.
321 329
 
330
+<!-- Message-ID: ErrMsgTemplate.CANNOT_EXPORT_VAULT_SETTINGS -->
322 331
 ??? failure "`Cannot export vault settings: %s.`"
323 332
 
324 333
     There was a fatal problem saving the exported vault configuration data.
325 334
     Further details are contained in the variable part of the message.
326 335
 
336
+<!-- Message-ID: ErrMsgTemplate.CANNOT_LOAD_USER_CONFIG -->
327 337
 ??? failure "`Cannot load user config: %s.`"
328 338
 
329 339
     There was a fatal problem loading the central user configuration file.
330 340
     Further details are contained in the variable part of the message.
331 341
 
342
+<!-- Message-ID: ErrMsgTemplate.INVALID_USER_CONFIG -->
332 343
 ??? failure "`The user configuration file is invalid.`"
333 344
 
334 345
     (Exactly what it says.)
335 346
 
336
-??? failure "`No usable SSH keys were found`"
337
-
338
-    The running SSH agent does not contain any suitable SSH keys.
339
-
340
-??? failure "`No valid SSH key selected`"
341
-
342
-    We requested that an SSH key be selected, but we got an invalid selection.
343
-
347
+<!-- Message-ID: ErrMsgTemplate.SSH_KEY_NOT_LOADED -->
344 348
 ??? failure "`The requested SSH key is not loaded into the agent.`"
345 349
 
346 350
     The running SSH agent does not contain the necessary SSH key.
347 351
 
352
+<!-- Message-ID: ErrMsgTemplate.NO_SSH_AGENT_FOUND -->
348 353
 ??? failure "`Cannot find any running SSH agent because SSH_AUTH_SOCK is not set.`"
349 354
 
350 355
     We require a running SSH agent, but cannot locate its communication channel, which is normally indicated by the `SSH_AUTH_SOCK` environment variable.
351 356
 
357
+<!-- Message-ID: ErrMsgTemplate.NO_AF_UNIX -->
352 358
 ??? failure "`Cannot connect to an SSH agent because this Python version does not support UNIX domain sockets.`"
353 359
 
354 360
     This Python installation does not support the communication mechanism necessary to talk to SSH agents.
355 361
 
362
+<!-- Message-ID: ErrMsgTemplate.CANNOT_CONNECT_TO_AGENT -->
356 363
 ??? failure "`Cannot connect to the SSH agent: %s.`"
357 364
 
358 365
     We cannot connect to the SSH agent indicated by the `SSH_AUTH_SOCK` environment variable.
359 366
     Further details are contained in the variable part of the message.
360 367
 
368
+<!-- Message-ID: ErrMsgTemplate.AGENT_REFUSED_LIST_KEYS -->
361 369
 ??? failure "`The SSH agent failed to or refused to supply a list of loaded keys.`"
362 370
 
363 371
     The SSH agent---while responsive in principle---did not fulfill the request.
364 372
 
373
+<!-- Message-ID: ErrMsgTemplate.AGENT_REFUSED_SIGNATURE -->
365 374
 ??? failure "`The SSH agent failed to or refused to issue a signature with the selected key, necessary for deriving a service passphrase.`"
366 375
 
367 376
     The SSH agent---while responsive in principle---failed to cooperate with deriving a service passphrase from the selected master SSH key.
368 377
 
378
+<!-- Message-ID: ErrMsgTemplate.NO_SUITABLE_SSH_KEYS -->
369 379
 ??? failure "`The SSH agent contains no keys suitable for derivepassphrase.`"
370 380
 
371 381
     None of the keys loaded into the SSH agent (if any) are suitable for use with <b>derivepassphrase vault</b>.  See the ["SSH KEY SUITABILITY"](#ssh-key-suitability) section for the requirements the SSH key and the SSH agent must fulfill to be suitable.
372 382
 
373
-??? failure "`Error communicating with the SSH agent`"
374
-
375
-    There was a system error communicating with the SSH agent.
376
-
383
+<!-- Message-ID: ErrMsgTemplate.CANNOT_UNDERSTAND_AGENT -->
377 384
 ??? failure "`Cannot understand the SSH agent's response because it violates the communication protocol.`"
378 385
 
379 386
     (Exactly what it says.)
380 387
 
388
+<!-- Message-ID: ErrMsgTemplate.USER_ABORTED_EDIT -->
381 389
 ??? failure "`Not saving any new notes: the user aborted the request.`"
382 390
 
383 391
     (Exactly what it says.)
384 392
 
385
-??? failure "`Cannot update the %s settings without actual settings.`"
393
+<!-- Message-ID: ErrMsgTemplate.CANNOT_UPDATE_SETTINGS_NO_SETTINGS -->
394
+??? failure "`Cannot update the %s settings without any given settings.`"
386 395
 
387 396
     Using `--config` requires at least one of the `--phrase`, `--key`, `--length`, etc. options.
388 397
 
398
+<!-- Message-ID: ErrMsgTemplate.SET_AND_UNSET_SAME_SETTING -->
389 399
 ??? failure "`Attempted to unset and set %s at the same time.`"
390 400
 
391 401
     While handling `--config`, the same configuration setting was passed as an option and as an argument to `--unset`.
392 402
 
393
-??? failure "`Generating a passphrase requires a SERVICE.`"
403
+<!-- Message-ID: ErrMsgTemplate.SERVICE_REQUIRED -->
404
+??? failure "`Deriving a passphrase requires a SERVICE.`"
394 405
 
395 406
     (Exactly what it says.)
396 407
 
408
+<!-- Message-ID: ErrMsgTemplate.NO_KEY_OR_PHRASE -->
397 409
 ??? failure "`No passphrase or key was given in the configuration.`"
398 410
 
399 411
     <b>derivepassphrase vault</b> does not know whether to use a master SSH key or a master passphrase.
400 412
 
401
-??? failure "`No passphrase was given: the user aborted the request.`"
413
+<!-- Message-ID: ErrMsgTemplate.USER_ABORTED_PASSPHRASE -->
414
+??? failure "`No passphrase was given; the user aborted the request.`"
402 415
 
403 416
     (Exactly what it says.)
404 417
 
405
-??? failure "`No SSH key was selected: the user aborted the request.`"
418
+<!-- Message-ID: ErrMsgTemplate.USER_ABORTED_SSH_KEY_SELECTION -->
419
+??? failure "`No SSH key was selected; the user aborted the request.`"
406 420
 
407 421
     (Exactly what it says.)
408 422
 
... ...
@@ -410,55 +424,68 @@ The <b>derivepassphrase vault</b> utility exits 0 on success, and >0 if an error
410 424
 
411 425
 (`%s` indicates a variable part of the message.)
412 426
 
427
+<!-- Message-ID: WarnMsgTemplate.PASSPHRASE_NOT_NORMALIZED -->
413 428
 ??? warning "`The %s passphrase is not %s-normalized.`"
414 429
 
415 430
     The indicated passphrase---as a Unicode string---is not properly normalized according to the preferred Unicode normalization form (as specified in the central configuration file).
416 431
     It is therefore possible that the passphrase---as a byte string---is not the same byte string as you expect it to be (even though it *looks* correct), and that the derived passphrases thus do not match their expected values either.
417 432
     Please double-check.
418 433
 
434
+<!-- Message-ID: WarnMsgTemplate.EMPTY_SERVICE_NOT_SUPPORTED -->
435
+<!-- Message-ID: WarnMsgTemplate.EMPTY_SERVICE_SETTINGS_INACCESSIBLE -->
419 436
 ??? warning "`An empty SERVICE is not supported by vault(1).`"
420 437
 
421 438
     <i>vault</i>(1) does not support the empty string as a value for <var>SERVICE</var>; it will treat the <var>SERVICE</var> as missing.
422 439
     For compatibility, <b>derivepassphrase vault</b> will do the same.
423 440
     In particular, if the empty service is imported in a configuration via `--import`, then this service cannot be accessed via the <b>derivepassphrase vault</b> command-line.
424 441
 
442
+<!-- Message-ID: WarnMsgTemplate.STEP_REPLACE_INVALID_VALUE -->
425 443
 ??? warning "`Replacing invalid value %s for key %s with %s.`"
426 444
 
427 445
     When importing a configuration, the indicated invalid value has been replaced with the indicated replacement value.
428 446
     (The "interpretation" of the configuration doesn’t change).
429 447
 
448
+<!-- Message-ID: WarnMsgTemplate.STEP_REMOVE_INEFFECTIVE_VALUE -->
430 449
 ??? warning "`Removing ineffective setting %s = %s.`"
431 450
 
432 451
     When importing a configuration, the indicated ineffective setting has been removed.
433 452
     (The "interpretation" of the configuration doesn’t change).
434 453
 
454
+<!-- Message-ID: WarnMsgTemplate.SERVICE_NAME_INCOMPLETABLE -->
435 455
 ??? warning "`The service name %s contains an ASCII control character, which is not supported by our shell completion code.`"
436 456
 
437 457
     Because of limitations in the shell completion code, this specific service name will not be available as a suggestion in tab completion.
438 458
     (This *only* affects tab completion, not other functionality.)
439 459
 
440
-??? warning "`Setting a %s passphrase is ineffective because a key is also set.`"
460
+<!-- Message-ID: WarnMsgTemplate.GLOBAL_PASSPHRASE_INEFFECTIVE -->
461
+<!-- Message-ID: WarnMsgTemplate.SERVICE_PASSPHRASE_INEFFECTIVE -->
462
+??? warning "`Setting a %s passphrase is ineffective because a key is also set`"
441 463
 
442 464
     The configuration (global or key-specific) contains both a stored master passphrase and an SSH key.
443 465
     The master passphrase will not take effect.
444 466
 
445
-??? warning "`A subcommand will be required in v1.0.`"
467
+<!-- Message-ID: WarnMsgTemplate.V10_SUBCOMMAND_REQUIRED -->
468
+??? warning "`A subcommand will be required here in v1.0.`"
446 469
 
447 470
     [Since v0.2.0, until v1.0.]
448 471
     This command now requires a subcommand.
449 472
     For compatibility, it currently defaults to "vault".
450 473
 
474
+<!-- Message-ID: WarnMsgTemplate.V01_STYLE_CONFIG -->
475
+<!-- Message-ID (mark only): WarnMsgTemplate.FAILED_TO_MIGRATE_CONFIG -->
451 476
 ??? warning "`Using deprecated v0.1-style config file %s, instead of v0.2-style %s.`"
452 477
 
453 478
     [Since v0.2.0, until v1.0.]
454 479
     A configuration file has been renamed.
455 480
     <b>derivepassphrase vault</b> will attempt to rename the file itself (`Successfully migrated to %s.`), or complain if it cannot rename it (`Failed to migrate to %s: %s`).
456 481
 
482
+<!-- Message-ID: WarnMsgTemplate.EDITING_NOTES_BUT_NOT_STORING_CONFIG -->
457 483
 ??? warning "`Specifying --notes without --config is ineffective.`"
458 484
 
459 485
     (Exactly what it says.)
460 486
 
461
-??? warning "`A backup copy of the notes was saved to %s.`"
487
+<!-- Message-ID: WarnMsgTemplate.LEGACY_EDITOR_INTERFACE_NOTES_BACKUP -->
488
+??? warning "`A backup copy of the old notes was saved to %s.`"
462 489
 
463 490
     The <i>vault</i>(1) legacy editor interface is in use, which carries a high risk of accidentally losing or corrupting the old notes because a notes editing session cannot be aborted mid-editing.
464 491
     To guard against such accidental data loss, a backup copy of the old notes was saved to the <b>derivepassphrase</b> configuration directory.
... ...
@@ -155,6 +155,35 @@ Fallback values for
155 155
 .
156 156
 .El
157 157
 .
158
+.Sh DIAGNOSTICS
159
+.
160
+.Ex -std "derivepassphrase export vault"
161
+.Pp
162
+.
163
+.Ss Fatal error messages on standard error
164
+.
165
+.Pq Li %s Ns No " indicates a variable part of the message."
166
+.
167
+.Bl -diag
168
+.
169
+.\" Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG
170
+.\" Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR
171
+.It Cannot parse %s as a valid vault-native configuration file/directory
172
+The file or directory is not a valid vault-native configuration.
173
+Alternatively, the wrong format was assumed and/or the wrong master key was
174
+provided.
175
+.
176
+.\" Message-ID: ErrMsgTemplate.INVALID_VAULT_CONFIG
177
+.It Invalid vault config: %s
178
+The file or directory was successfully decrypted and decoded, but the
179
+resulting contents are not valid as a vault configuration.
180
+.
181
+.\" Message-ID: ErrMsgTemplate.MISSING_MODULE
182
+.It Cannot load the required Python module %s
183
+(Exactly what it says.)
184
+.
185
+.El
186
+.
158 187
 .Sh COMPATIBILITY
159 188
 .
160 189
 .Ss With other software
... ...
@@ -744,9 +744,11 @@ key or to type in a master passphrase.
744 744
 .
745 745
 .Bl -diag
746 746
 .
747
+.\" Message-ID: ErrMsgTemplate.PARAMS_MUTUALLY_EXCLUSIVE
747 748
 .It %s is mutually exclusive with %s.
748 749
 The two indicated options must not be used at the same time.
749 750
 .
751
+.\" Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE_OR_CONFIG
750 752
 .It %s requires a SERVICE or \-\-config.
751 753
 Using the indicated passphrase generation option requires the
752 754
 .Ar SERVICE
... ...
@@ -754,74 +756,84 @@ argument or the
754 756
 .Fl \-config
755 757
 option.
756 758
 .
759
+.\" Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE
757 760
 .It %s requires a SERVICE.
758 761
 Using the indicated option requires the
759 762
 .Ar SERVICE
760 763
 argument.
761 764
 .
765
+.\" Message-ID: ErrMsgTemplate.PARAMS_NO_SERVICE
762 766
 .It %s does not take a SERVICE argument.
763 767
 The indicated option must not be specified together with the
764 768
 .Ar SERVICE
765 769
 argument.
766 770
 .
771
+.\" Message-ID: ErrMsgTemplate.CANNOT_LOAD_VAULT_SETTINGS
767 772
 .It Cannot load vault settings: %s.
768 773
 There was a fatal problem loading the stored vault configuration data.
769 774
 Further details are contained in the variable part of the message.
770 775
 .
776
+.\" Message-ID: ErrMsgTemplate.CANNOT_STORE_VAULT_SETTINGS
771 777
 .It Cannot store vault settings: %s.
772 778
 There was a fatal problem saving the vault configuration data.
773 779
 Further details are contained in the variable part of the message.
774 780
 .
781
+.\" Message-ID: ErrMsgTemplate.CANNOT_DECODEIMPORT_VAULT_SETTINGS
782
+.\" Message-ID: ErrMsgTemplate.CANNOT_IMPORT_VAULT_SETTINGS
775 783
 .It Cannot import vault settings: %s.
776 784
 There was a fatal problem loading the imported vault configuration data.
777 785
 Further details are contained in the variable part of the message.
778 786
 .
787
+.\" Message-ID: ErrMsgTemplate.CANNOT_EXPORT_VAULT_SETTINGS
779 788
 .It Cannot export vault settings: %s.
780 789
 There was a fatal problem saving the exported vault configuration data.
781 790
 Further details are contained in the variable part of the message.
782 791
 .
792
+.\" Message-ID: ErrMsgTemplate.CANNOT_LOAD_USER_CONFIG
783 793
 .It Cannot load user config: %s.
784 794
 There was a fatal problem loading the central user configuration file.
785 795
 Further details are contained in the variable part of the message.
786 796
 .
797
+.\" Message-ID: ErrMsgTemplate.INVALID_USER_CONFIG
787 798
 .It The user configuration file is invalid.
788 799
 (Exactly what it says.)
789 800
 .
790
-.It No usable SSH keys were found
791
-The running SSH agent does not contain any suitable SSH keys.
792
-.
793
-.It No valid SSH key selected
794
-We requested that an SSH key be selected, but we got an invalid selection.
795
-.
801
+.\" Message-ID: ErrMsgTemplate.SSH_KEY_NOT_LOADED
796 802
 .It The requested SSH key is not loaded into the agent.
797 803
 The running SSH agent does not contain the necessary SSH key.
798 804
 .
805
+.\" Message-ID: ErrMsgTemplate.NO_SSH_AGENT_FOUND
799 806
 .It Cannot find any running SSH agent because SSH_AUTH_SOCK is not set.
800 807
 We require a running SSH agent, but cannot locate its communication channel,
801 808
 which is normally indicated by the
802 809
 .Ev SSH_AUTH_SOCK
803 810
 environment variable.
804 811
 .
812
+.\" Message-ID: ErrMsgTemplate.NO_AF_UNIX
805 813
 .It Cannot connect to an SSH agent because this Python version does not support UNIX domain sockets.
806 814
 This Python installation does not support the communication mechanism
807 815
 necessary to talk to SSH agents.
808 816
 .
817
+.\" Message-ID: ErrMsgTemplate.CANNOT_CONNECT_TO_AGENT
809 818
 .It Cannot connect to the SSH agent: %s.
810 819
 We cannot connect to the SSH agent indicated by the
811 820
 .Ev SSH_AUTH_SOCK
812 821
 environment variable.
813 822
 Further details are contained in the variable part of the message.
814 823
 .
824
+.\" Message-ID: ErrMsgTemplate.AGENT_REFUSED_LIST_KEYS
815 825
 .It The SSH agent failed to or refused to supply a list of loaded keys.
816 826
 The SSH agent \(em while responsive in principle \(em did not fulfill the
817 827
 request.
818 828
 .
829
+.\" Message-ID: ErrMsgTemplate.AGENT_REFUSED_SIGNATURE
819 830
 .It "The SSH agent failed to or refused to" "issue a signature with the selected key," "necessary for deriving a service passphrase."
820 831
 The SSH agent \(em while responsive in principle \(em failed to cooperate with
821 832
 deriving a service passphrase from the selected master
822 833
 .Tn SSH
823 834
 key.
824 835
 .
836
+.\" Message-ID: ErrMsgTemplate.NO_SUITABLE_SSH_KEYS
825 837
 .It The SSH agent contains no keys suitable for derivepassphrase.
826 838
 .
827 839
 None of the keys loaded into the
... ...
@@ -836,40 +848,45 @@ key and the
836 848
 .Tn SSH
837 849
 agent must fulfill to be suitable.
838 850
 .
839
-.It Error communicating with the SSH agent
840
-There was a system error communicating with the SSH agent.
841
-.
851
+.\" Message-ID: ErrMsgTemplate.CANNOT_UNDERSTAND_AGENT
842 852
 .It Cannot understand the SSH agent's response because it violates the communication protocol.
843 853
 .
844 854
 (Exactly what it says.)
845 855
 .
856
+.\" Message-ID: ErrMsgTemplate.USER_ABORTED_EDIT
846 857
 .It Not saving any new notes: the user aborted the request.
847 858
 (Exactly what it says.)
848 859
 .
849
-.It Cannot update the %s settings without actual settings.
860
+.\" Message-ID: ErrMsgTemplate.CANNOT_UPDATE_SETTINGS_NO_SETTINGS
861
+.It Cannot update the %s settings without any given settings.
850 862
 Using
851 863
 .Fl \-config
852 864
 requires at least one of the
853 865
 .Fl \-phrase , \-key , \-length , No etc.\&
854 866
 options.
855 867
 .
868
+.\" Message-ID: ErrMsgTemplate.SET_AND_UNSET_SAME_SETTING
856 869
 .It Attempted to unset and set %s at the same time.
857 870
 While handling
858 871
 .Fl \-config ,
859 872
 the same configuration setting was passed as an option and as an argument to
860 873
 .Fl \-unset .
861 874
 .
862
-.It Generating a passphrase requires a SERVICE.
875
+.\" Message-ID: ErrMsgTemplate.SERVICE_REQUIRED
876
+.It Deriving a passphrase requires a SERVICE.
863 877
 (Exactly what it says.)
864 878
 .
879
+.\" Message-ID: ErrMsgTemplate.NO_KEY_OR_PHRASE
865 880
 .It No passphrase or key was given in the configuration.
866 881
 .Nm derivepassphrase vault
867 882
 does not know whether to use a master SSH key or a master passphrase.
868 883
 .
869
-.It No passphrase was given: the user aborted the request.
884
+.\" Message-ID: ErrMsgTemplate.USER_ABORTED_PASSPHRASE
885
+.It No passphrase was given; the user aborted the request.
870 886
 (Exactly what it says.)
871 887
 .
872
-.It No SSH key was selected: the user aborted the request.
888
+.\" Message-ID: ErrMsgTemplate.USER_ABORTED_SSH_KEY_SELECTION
889
+.It No SSH key was selected; the user aborted the request.
873 890
 (Exactly what it says.)
874 891
 .
875 892
 .El
... ...
@@ -881,6 +898,7 @@ does not know whether to use a master SSH key or a master passphrase.
881 898
 .
882 899
 .Bl -diag
883 900
 .
901
+.\" Message-ID: WarnMsgTemplate.PASSPHRASE_NOT_NORMALIZED
884 902
 .It The %s passphrase is not %s-normalized.
885 903
 The indicated passphrase \(em as a Unicode string \(em is not properly
886 904
 normalized according to the preferred Unicode normalization form
... ...
@@ -892,6 +910,8 @@ and that the derived passphrases thus do not match their expected values
892 910
 either.
893 911
 Please double-check.
894 912
 .
913
+.\" Message-ID: WarnMsgTemplate.EMPTY_SERVICE_NOT_SUPPORTED
914
+.\" Message-ID: WarnMsgTemplate.EMPTY_SERVICE_SETTINGS_INACCESSIBLE
895 915
 .It An empty SERVICE is not supported by vault(1).
896 916
 .Xr vault 1
897 917
 does not support the empty string as a value for
... ...
@@ -908,16 +928,19 @@ then this service cannot be accessed via the
908 928
 .Nm derivepassphrase vault
909 929
 command-line.
910 930
 .
931
+.\" Message-ID: WarnMsgTemplate.STEP_REPLACE_INVALID_VALUE
911 932
 .It Replacing invalid value %s for key %s with %s.
912 933
 When importing a configuration, the indicated invalid value has been
913 934
 replaced with the indicated replacement value.
914 935
 .Pq The Do interpretation Dc of the configuration doesn't change .
915 936
 .
937
+.\" Message-ID: WarnMsgTemplate.STEP_REMOVE_INEFFECTIVE_VALUE
916 938
 .It Removing ineffective setting %s = %s.
917 939
 When importing a configuration, the indicated ineffective setting has been
918 940
 removed.
919 941
 .Pq The Do interpretation Dc of the configuration doesn't change .
920 942
 .
943
+.\" Message-ID: WarnMsgTemplate.SERVICE_NAME_INCOMPLETABLE
921 944
 .It "The service name %s" "contains an ASCII control character," "which is not supported" "by our shell completion code."
922 945
 Because of limitations in the shell completion code, this specific service name
923 946
 will not be available as a suggestion in tab completion.
... ...
@@ -927,12 +950,15 @@ This
927 950
 affects tab completion, not other functionality.
928 951
 .Pc
929 952
 .
930
-.It Setting a %s passphrase is ineffective because a key is also set.
953
+.\" Message-ID: WarnMsgTemplate.GLOBAL_PASSPHRASE_INEFFECTIVE
954
+.\" Message-ID: WarnMsgTemplate.SERVICE_PASSPHRASE_INEFFECTIVE
955
+.It Setting a %s passphrase is ineffective because a key is also set
931 956
 The configuration (global or key-specific) contains both a stored master
932 957
 passphrase and an SSH key.
933 958
 The master passphrase will not take effect.
934 959
 .
935
-.It A subcommand will be required in v1.0.
960
+.\" Message-ID: WarnMsgTemplate.V10_SUBCOMMAND_REQUIRED
961
+.It A subcommand will be required here in v1.0.
936 962
 .Bo
937 963
 Since v0.2.0, until v1.0.
938 964
 .Bc
... ...
@@ -940,6 +966,8 @@ This command now requires a subcommand.
940 966
 For compatibility, it currently defaults to
941 967
 .Dq vault .
942 968
 .
969
+.\" Message-ID: WarnMsgTemplate.V01_STYLE_CONFIG
970
+.\" Message-ID (mark only): WarnMsgTemplate.FAILED_TO_MIGRATE_CONFIG
943 971
 .It Using deprecated v0.1-style config file %s, instead of v0.2-style %s.
944 972
 .Bo
945 973
 Since v0.2.0, until v1.0.
... ...
@@ -951,10 +979,12 @@ will attempt to rename the file itself
951 979
 or complain if it cannot rename it
952 980
 .Pq Qq Li Failed to migrate to %s: %s .
953 981
 .
982
+.\" Message-ID: WarnMsgTemplate.EDITING_NOTES_BUT_NOT_STORING_CONFIG
954 983
 .It Specifying \-\-notes without \-\-config is ineffective.
955 984
 (Exactly what it says.)
956 985
 .
957
-.It A backup copy of the notes was saved to %s.
986
+.\" Message-ID: WarnMsgTemplate.LEGACY_EDITOR_INTERFACE_NOTES_BACKUP
987
+.It A backup copy of the old notes was saved to %s.
958 988
 The
959 989
 .Xr vault 1
960 990
 legacy editor interface is in use, which carries a high risk of
961 991