Link the commands, API classes, bugs and wishlist items in the changelog
Marco Ricci

Marco Ricci commited on 2025-06-17 20:20:31
Zeige 1 geänderte Dateien mit 144 Einfügungen und 124 Löschungen.


Turn all mentions of a command or subcommand name, or of an API member,
into a link to that command's manpage or API member's API documentation.

Furthermore, if a changelog entry refers to a bug or wishlist item, link
to the respective item as well.

Finally, collect and deduplicate all Markdown references at the bottom
of the page.
... ...
@@ -42,16 +42,15 @@ As an exception, entries partaining to developers of `derivepassphrase` are
42 42
 specifically marked as such.)
43 43
 </small></aside>
44 44
 
45
-  [REFERENCE]: reference/index.md
46
-
47 45
 <!-- scriv changelog start -->
48 46
 
49 47
 ## 0.5 (2025-06-14)  {#v0.5}
50 48
 
51 49
 ### Removed  {#removed-in-v0.5}
52 50
 
53
-  - For `derivepassphrase`, remove support for (automatic) colored output or
54
-    output with embedded text styling.
51
+  - For [`derivepassphrase`][CLI], remove [support for (automatic) colored
52
+    output or output with embedded text styling, as introduced in
53
+    v0.4.0](#added-in-v0.4.0-color-support).
55 54
 
56 55
     This is a stopgap measure.
57 56
     There exist pseudo-standards (the `NO_COLOR` and `FORCE_COLOR`
... ...
@@ -62,6 +61,7 @@ specifically marked as such.)
62 61
     requested or rejected reliably across different terminal programs, we
63 62
     will rather emit only uncolored, unstyled, lowest-common-denominator
64 63
     device-independent output.
64
+    ([`conventional-configurable-text-styling`][WISH_CONVENTIONAL_CONFIGURABLE_TEXT_STYLING])
65 65
 
66 66
 ### Added  {#added-in-v0.5}
67 67
 
... ...
@@ -74,10 +74,10 @@ specifically marked as such.)
74 74
     in vault?][INTERCHANGABLE_PASSPHRASES] for details, including the
75 75
     practical security (non-)implications.
76 76
 
77
-    The `derivepassphrase vault` command-line interface does not address
78
-    this in any manner, mostly because the "non-standard" interchangable
79
-    variants of a given master password tend to be ugly to type in, and
80
-    because they do not have practical security implications.
77
+    The [`derivepassphrase vault`][CLI_VAULT] command-line interface does
78
+    not address this in any manner, mostly because the "non-standard"
79
+    interchangable variants of a given master password tend to be ugly to
80
+    type in, and because they do not have practical security implications.
81 81
 
82 82
   - For the [`Vault`][derivepassphrase.vault.Vault] API, accept arbitrary
83 83
     [Buffer][collections.abc.Buffer] objects as passphrases or service
... ...
@@ -87,23 +87,26 @@ specifically marked as such.)
87 87
     character sets][derivepassphrase.vault.Vault.CHARSETS] as public
88 88
     attributes.
89 89
 
90
-  - For `derivepassphrase vault`, support selecting the [editor
90
+  - For [`derivepassphrase vault`][CLI_VAULT], support selecting the [editor
91 91
     interface](#changed-in-v0.5-editor-interface) when editing notes via the
92 92
     `--modern-editor-interface` and `--vault-legacy-editor-interface`
93 93
     options.
94 94
 
95
-  - For `derivepassphrase vault`, support printing the service notes before
96
-    the passphrase, as an alternative, instead of always printing them
97
-    *after* the passphrase.
95
+  - For [`derivepassphrase vault`][CLI_VAULT], support printing the service
96
+    notes before the passphrase, as an alternative, instead of always
97
+    printing them *after* the passphrase.
98
+    ([`print-service-notes-above`][WISH_PRINT_SERVICE_NOTES_ABOVE])
98 99
 
99
-  - In the `--version` option of `derivepassphrase` and each subcommand,
100
-    additionally report build and environment information, such as
101
-    supported subcommands, derivation schemes, foreign configuration formats
102
-    and active [PEP 508 extras][PEP_508].
100
+  - In the `--version` option of [`derivepassphrase`][CLI] and each
101
+    subcommand, additionally report build and environment information, such
102
+    as supported subcommands, derivation schemes, foreign configuration
103
+    formats and active [PEP 508 extras](https://peps.python.org/pep-0508/).
103 104
     (Each subcommand only reports the items relevant to that subcommand.)
105
+    ([`report-build-flags-and-features`][WISH_REPORT_BUILD_FLAGS_AND_FEATURES])
104 106
 
105
-  - For developers: Rewrite the tests concerning `derivepassphrase vault`
106
-    and `--notes` usage into [hypothesis][]-based tests where feasible.
107
+  - For developers: Rewrite the tests concerning [`derivepassphrase
108
+    vault`][CLI_VAULT] and `--notes` usage into [hypothesis][]-based tests
109
+    where feasible.
107 110
 
108 111
   - For developers: Add scripts to the source tree to ensure consistent code
109 112
     quality: automatic linting, formatting and type checking, and optional
... ...
@@ -111,10 +114,6 @@ specifically marked as such.)
111 114
     The master quality control script doubles as a servicable (but
112 115
     heavyweight) "pre-commit" hook for git.
113 116
 
114
-[INTERCHANGABLE_PASSPHRASES]: explanation/faq-vault-interchangable-passphrases.md
115
-[PEP_508]: https://peps.python.org/pep-0508/
116
-[hypothesis]: https://pypi.org/project/hypothesis/
117
-
118 117
 ### Changed  {#changed-in-v0.5}
119 118
 
120 119
   - Support a new, unified interface
... ...
@@ -148,9 +147,9 @@ specifically marked as such.)
148 147
     This is a **breaking API change** due to the removal of most functions
149 148
     from the [`derivepassphrase.cli`][] module.
150 149
 
151
-  - For `derivepassphrase vault`, change the handling of the notes for
152
-    better compatibility with <i>vault</i>(1) and for better internal
153
-    consistency:
150
+  - For [`derivepassphrase vault`][CLI_VAULT], change the handling of the
151
+    notes for better compatibility with <i>vault</i>(1) and for better
152
+    internal consistency:
154 153
 
155 154
     1.  Correctly require the `--config` option in addition to the `--notes`
156 155
         option to request that the service notes be edited, for
... ...
@@ -161,10 +160,11 @@ specifically marked as such.)
161 160
 
162 161
     3.  Editing the notes successfully in any way, including no-op edits,
163 162
         will register the service name as a known service to
164
-        `derivepassphrase vault`, even if the settings are otherwise empty.
163
+        [`derivepassphrase vault`][CLI_VAULT], even if the settings are
164
+        otherwise empty.
165 165
 
166
-  - For `derivepassphrase vault`, by default, use an <a
167
-    id="changed-in-v0.5-editor-interface">editor interface</a> that matches
166
+  - For [`derivepassphrase vault`][CLI_VAULT], by default, use an <b
167
+    id="changed-in-v0.5-editor-interface">editor interface</b> that matches
168 168
     <i>vault</i>(1): the contents of the edited text file are used directly
169 169
     as the service notes, without interpretation.
170 170
 
... ...
@@ -188,32 +188,34 @@ specifically marked as such.)
188 188
     scheme about sensitivity (or lack thereof) to its inputs and its input
189 189
     formats.
190 190
 
191
-  - For developers: For `derivepassphrase vault`, store our `vault.json`
192
-    data file in pretty-printed form.
191
+  - For developers: For [`derivepassphrase vault`][CLI_VAULT], store our
192
+    `vault.json` data file in pretty-printed form.
193 193
     This is a stopgap measure to ease debugging and introspection until
194 194
     better built-in query functionality for the effective configuration is
195 195
     available, because users should not be rewarded for meddling around in
196
-    data files. ([#20])
197
-
198
-[#20]: https://github.com/the-13th-letter/derivepassphrase/issues/20
199
-[hypothesis]: https://pypi.org/project/hypothesis/
196
+    data files.
197
+    ([`pretty-print-json`][WISH_PRETTY_PRINT_JSON])
200 198
 
201 199
 ### Fixed  {#fixed-in-v0.5}
202 200
 
203 201
   - Fix the misbehaving shell completion for `zsh` in the presence of colons
204 202
     in the completion item.
205 203
     This was due to an overzealous workaround for
206
-    [`pallets/click#2703`][CLICK_2703].
204
+    [`pallets/click#2703`](https://github.com/pallets/click/issues/2703).
207 205
 
208
-  - For `derivepassphrase vault`, when exporting a vault configuration,
209
-    export a pretty-printed configuration, to ease debugging and
210
-    introspection. ([#20])
206
+  - For [`derivepassphrase vault`][CLI_VAULT], when exporting a vault
207
+    configuration, export a pretty-printed configuration, to ease debugging
208
+    and introspection.
209
+    ([`pretty-print-json`][WISH_PRETTY_PRINT_JSON])
211 210
 
212
-  - For `derivepassphrase vault`, also print the service notes (if any) when
213
-    deriving a service passphrase, just like vault(1) does.
211
+  - For [`derivepassphrase vault`][CLI_VAULT], also print the service notes
212
+    (if any) when deriving a service passphrase, just like <i>vault</i>(1)
213
+    does.
214
+    ([`print-service-notes`][BUG_PRINT_SERVICE_NOTES])
214 215
 
215 216
   - Lock our internals and their configuration against concurrent
216
-    modifications. ([#22])
217
+    modifications.
218
+    ([`concurrency-audit`][BUG_CONCURRENCY_AUDIT])
217 219
 
218 220
   - Test against PyPy 3.11.
219 221
 
... ...
@@ -243,22 +245,16 @@ specifically marked as such.)
243 245
     the locking system as a whole, when given functioning locking
244 246
     primitives, correctly serializes access to the facilities it is supposed
245 247
     to guard.
246
-
247
-[^the-annoying-os]: Hat tip---and apologies---to
248
-    [Timothée Mazzucotelli (`@pawamoy`)](https://github.com/pawamoy/) for
249
-    the fitting terminology.
250
-
251
-[#22]: https://github.com/the-13th-letter/derivepassphrase/issues/22
252
-[#23]: https://github.com/the-13th-letter/derivepassphrase/issues/23
253
-[CLICK_2703]: https://github.com/pallets/click/issues/2703
248
+    ([`concurrency-testing-in-test-suite`][BUG_CONCURRENCY_TESTING_IN_TEST_SUITE])
254 249
 
255 250
 ## 0.4.0 (2025-01-07)  {#v0.4.0}
256 251
 
257 252
 ### Added  {#added-in-v0.4.0}
258 253
 
259
-  - For `derivepassphrase vault` and `derivepassphrase export vault`,
260
-    support changing the amount of diagnostic output we emit via new
261
-    command-line options `--debug`, `-v`/`--verbose` and `-q`/`--quiet`.
254
+  - For [`derivepassphrase vault`][CLI_VAULT] and [`derivepassphrase export
255
+    vault`][CLI_EXPORT_VAULT], support changing the amount of diagnostic
256
+    output we emit via new command-line options `--debug`, `-v`/`--verbose`
257
+    and `-q`/`--quiet`.
262 258
     Internally, we use Python's standard [logging][] and [warnings][]
263 259
     systems.
264 260
 
... ...
@@ -266,19 +262,20 @@ specifically marked as such.)
266 262
     which are service-specific.
267 263
     (The `vault.json` configuration file is now rebranded as a data file.)
268 264
     The configuration files are user-editable, the data files are
269
-    `derivepassphrase`-editable.
265
+    [`derivepassphrase`][CLI]-editable.
270 266
 
271 267
     The configuration files are in TOML format, so installing
272 268
     `derivepassphrase` on Python 3.10 and older requires the
273 269
     [`tomli`][tomli] package.
274 270
 
275
-  - For `derivepassphrase vault --config`, support an `--unset` option which
276
-    unsets any given named setting prior to applying any other configuration
277
-    changes.
271
+  - For [`derivepassphrase vault --config`][CLI_VAULT], support an `--unset`
272
+    option which unsets any given named setting prior to applying any other
273
+    configuration changes.
278 274
 
279
-  - For `derivepassphrase vault --export`, support exporting the current
280
-    configuration as a POSIX `sh` script, using the `--export-as=sh` option.
281
-    The default (and previous behavior) is `--export-as=json`.
275
+  - For [`derivepassphrase vault --export`][CLI_VAULT], support exporting
276
+    the current configuration as a POSIX `sh` script, using the
277
+    `--export-as=sh` option.  The default (and previous behavior) is
278
+    `--export-as=json`.
282 279
 
283 280
   - Include basic support for localization: if the necessary translations
284 281
     are installed, then the diagnostics and help texts can be emitted in
... ...
@@ -287,9 +284,9 @@ specifically marked as such.)
287 284
 
288 285
     (As of this version, no translations have actually been prepared yet.)
289 286
 
290
-  - For `derivepassphrase`, explicitly support shell completion, in
291
-    particular filename and service name completion in the `export vault`
292
-    and `vault` subcommands.
287
+  - For [`derivepassphrase`][CLI], explicitly support shell completion, in
288
+    particular filename and service name completion in the [`export
289
+    vault`][CLI_EXPORT_VAULT] and [`vault`][CLI_VAULT] subcommands.
293 290
 
294 291
     However, because of restrictions regarding the exchange of data between
295 292
     `derivepassphrase` and the shell, `derivepassphrase` will not offer any
... ...
@@ -297,11 +294,10 @@ specifically marked as such.)
297 294
     a warning will be issued when importing or configuring such a service.
298 295
     They may still otherwise be used normally.
299 296
 
300
-  - Support the semi-standard `NO_COLOR` and the `FORCE_COLOR` environment
301
-    variables to suppress or force color output from `derivepassphrase`.
302
-    (`FORCE_COLOR` overrides `NO_COLOR` if both are set.)
303
-
304
-[tomli]: https://pypi.org/project/tomli/
297
+  - <b id="added-in-v0.4.0-color-support">Support the semi-standard
298
+    `NO_COLOR` and the `FORCE_COLOR` environment variables</b> to suppress
299
+    or force color output from [`derivepassphrase`][CLI].  (`FORCE_COLOR`
300
+    overrides `NO_COLOR` if both are set.)
305 301
 
306 302
 ### Changed  {#changed-in-v0.4.0}
307 303
 
... ...
@@ -376,12 +372,13 @@ specifically marked as such.)
376 372
   - Add SSH agent spawning support to the test suite.
377 373
     Use this support to test the agent functionality on all known major SSH
378 374
     agent implementations automatically.
379
-    ([#12])
375
+    ([`test-suite-isolated-ssh-agent`][WISH_TEST_SUITE_ISOLATED_SSH_AGENT])
380 376
   - Add [hypothesis][]-based tests to the test suite.
381 377
   - Update README to add explanations for virtual environments and package
382 378
     extras.
383 379
   - Update README to demonstrate configuration storing and SSH agent use.
384 380
     Include comments on Windows support for SSH agents.
381
+    ([`windows-ssh-agent-support`][BUG_WINDOWS_SSH_AGENT_SUPPORT])
385 382
   - Use cross-references in the documentation of function signatures.
386 383
   - Add proper support for Buffer types in the SSH agent client.
387 384
     Any Python object supporting the buffer protocol can be used as input to
... ...
@@ -393,10 +390,6 @@ specifically marked as such.)
393 390
     deserialization from the SSH agent wire format.
394 391
   - Support Python 3.9 and 3.13.
395 392
 
396
-[#12]: https://github.com/the-13th-letter/derivepassphrase/issues/12
397
-[hypothesis]: https://pypi.org/project/hypothesis/
398
-[scriv]: https://pypi.org/project/scriv
399
-
400 393
 ### Changed  {#changed-in-v0.3.0}
401 394
 
402 395
   - Change links to point to public project repositories, if possible.
... ...
@@ -405,11 +398,11 @@ specifically marked as such.)
405 398
   - Use the same filename/URL convention for API reference as the Python
406 399
     standard library does.
407 400
 
408
-  - Rewrite functionality for checking for valid vault(1) configurations:
409
-    include an actual validation function which throws errors upon
410
-    encountering format violations, and which allows specifying which types
411
-    of extensions (unknown settings, `derivepassphrase`-only settings) to
412
-    tolerate during validation.
401
+  - Rewrite functionality for checking for valid <i>vault</i>(1)
402
+    configurations: include an actual validation function which throws
403
+    errors upon encountering format violations, and which allows specifying
404
+    which types of extensions (unknown settings, `derivepassphrase`-only
405
+    settings) to tolerate during validation.
413 406
 
414 407
     This is a **breaking API change** because the function return annotation
415 408
     changed, from [`typing.TypeGuard`][] to [`typing_extensions.TypeIs`][].
... ...
@@ -421,37 +414,39 @@ specifically marked as such.)
421 414
     the SSH agent because Python does not support UNIX domain sockets on
422 415
     this system.
423 416
     In particular, this is the current situation on Windows.
417
+    ([`fail-gracefully-without-af-unix`][BUG_FAIL_GRACEFULLY_WITHOUT_AF_UNIX],
418
+    [`windows-ssh-agent-support`][BUG_WINDOWS_SSH_AGENT_SUPPORT])
424 419
 
425 420
     This adds another failure case to the `SSHAgentClient` constructor, and
426 421
     therefore constitutes a **breaking API change**.
427 422
 
428
-  - In `derivepassphrase vault`, accept `key` and `phrase` entries just like
429
-    vault(1) does: `key` always overrides `phrase` in the configuration, no
430
-    matter the level.
423
+  - In [`derivepassphrase vault`][CLI_VAULT], accept `key` and `phrase`
424
+    entries just like <i>vault</i>(1) does: `key` always overrides `phrase`
425
+    in the configuration, no matter the level.
431 426
 
432 427
     This is a command-line only change.
433 428
 
434
-  - In `derivepassphrase vault`, when importing settings, accept falsy values
435
-    everywhere `vault` does, with a warning.
429
+  - In [`derivepassphrase vault`][CLI_VAULT], when importing settings,
430
+    accept falsy values everywhere `vault` does, with a warning.
436 431
     Depending on the setting, they are equivalent to zero, the empty string,
437 432
     or "not set".
438
-    ([#17])
433
+    ([`falsy-vault-config-values`][BUG_FALSY_VAULT_CONFIG_VALUES])
439 434
 
440 435
     This is a command-line only change, and only affects importing.
441 436
     The API provides a new function to normalize falsy settings, but still
442 437
     otherwise requires settings to be of the correct type.
443 438
     Storing a malformed configuration with such falsy values will still
444
-    generate errors when `derivepassphrase vault` loads the settings from
445
-    disk.
439
+    generate errors when [`derivepassphrase vault`][CLI_VAULT] loads the
440
+    settings from disk.
446 441
 
447
-  - In `derivepassphrase vault`, when importing configurations,
448
-    correctly merge them with the existing one, same as vault(1): keep
449
-    all named services and their settings (and the global settings if
442
+  - In [`derivepassphrase vault`][CLI_VAULT], when importing configurations,
443
+    correctly merge them with the existing one, same as <i>vault</i>(1):
444
+    keep all named services and their settings (and the global settings if
450 445
     applicable) that are not mentioned in the imported configuration.
451 446
     The import procedure is thus more akin to a section-wise import of
452 447
     the configurations, instead of a "full" import, and the resulting
453 448
     configuration generally is a merge of both inputs.
454
-    ([#16])
449
+    ([`amend-vault-config`][BUG_AMEND_VAULT_CONFIG])
455 450
 
456 451
   - The following operations or configuration settings now raise
457 452
     warnings:
... ...
@@ -464,9 +459,6 @@ specifically marked as such.)
464 459
       * using an empty service name on the command-line or in an
465 460
         imported configuration
466 461
 
467
-[#16]: https://github.com/the-13th-letter/derivepassphrase/issues/16
468
-[#17]: https://github.com/the-13th-letter/derivepassphrase/issues/17
469
-
470 462
 ### Fixed  {#fixed-in-v0.3.0}
471 463
 
472 464
   - Fixed the textual description of the return value for
... ...
@@ -482,9 +474,7 @@ specifically marked as such.)
482 474
 
483 475
     This feature requires the `cryptography` Python module, but is available
484 476
     even if `vault` is not installed.
485
-    ([#1])
486
-
487
-[#1]: https://github.com/the-13th-letter/derivepassphrase/1
477
+    ([`export-vault-formats`][WISH_EXPORT_VAULT_FORMATS])
488 478
 
489 479
 ### Fixed  {#fixed-in-v0.2.0}
490 480
 
... ...
@@ -492,8 +482,6 @@ specifically marked as such.)
492 482
     Set up a "latest" tag and the "0.<var>x</var>" version of the
493 483
     documentation with the contents so far.
494 484
 
495
-[mike]: https://pypi.org/project/mike
496
-
497 485
 ### Changed  {#changed-in-v0.2.0}
498 486
 
499 487
   - Changed `sequin` and `ssh_agent_client` to be submodules of
... ...
@@ -501,20 +489,20 @@ specifically marked as such.)
501 489
     Further moved `derivepassphrase.Vault` and
502 490
     `derivepassphrase.AmbiguousByteRepresentation` into a new submodule
503 491
     `vault`, and renamed submodule `ssh_agent_client` to `ssh_agent`.
504
-    ([#3])
492
+    ([`single-toplevel-module`][BUG_SINGLE_TOPLEVEL_MODULE])
505 493
   - Changed internal error handling and error messages, to better work in
506 494
     the context of a command-line tool.
507
-    ([#4])
495
+    ([`better-error-messages`][BUG_BETTER_ERROR_MESSAGES])
508 496
   - Combine and consolidate `derivepassphrase.types` and
509 497
     `derivepassphrase.ssh_agent.types` into a new submodule
510 498
     `derivepassphrase._types`.
511 499
     Despite the name, the module is public.
512
-    ([#7])
500
+    ([`no-stdlib-module-names`][BUG_NO_STDLIB_MODULE_NAMES])
513 501
   - Warn the user when entering (directly, or via configuration
514 502
     editing/importing) a passphrase that is not in the configured Unicode
515 503
     normalization form.
516 504
     (But don't otherwise reject any textual master passphrases.)
517
-    ([#9])
505
+    ([`allow-all-unicode-passphrases`][BUG_ALLOW_ALL_UNICODE_PASSPHRASES])
518 506
   - Move all existing functionality into a subcommand, in anticipation of
519 507
     other passphrase derivation schemes, with different settings.
520 508
     Automatically forward calls without a subcommand to the "vault"
... ...
@@ -524,17 +512,12 @@ specifically marked as such.)
524 512
     instead of globally.
525 513
     Automatically fall back to, and migrate, the old global settings file if
526 514
     no subsystem-specific configuration was found.
527
-    ([#10])
528
-
529
-  - Make `derivepassphrase_export` a subcommand: `derivepassphrase export`.
530
-    ([#11])
515
+    ([`other-derivation-schemes`][WISH_OTHER_DERIVATION_SCHEMES],
516
+    [`scheme-specific-cli-and-config`][WISH_SCHEME_SPECIFIC_CLI_AND_CONFIG])
531 517
 
532
-[#3]: https://github.com/the-13th-letter/derivepassphrase/3
533
-[#4]: https://github.com/the-13th-letter/derivepassphrase/4
534
-[#7]: https://github.com/the-13th-letter/derivepassphrase/7
535
-[#9]: https://github.com/the-13th-letter/derivepassphrase/9
536
-[#10]: https://github.com/the-13th-letter/derivepassphrase/10
537
-[#11]: https://github.com/the-13th-letter/derivepassphrase/11
518
+  - Make `derivepassphrase_export` a subcommand: [`derivepassphrase
519
+    export`][CLI_EXPORT].
520
+    ([`exporter-script-as-subcommand`][WISH_EXPORTER_SCRIPT_AS_SUBCOMMAND])
538 521
 
539 522
 ### Deprecated  {#deprecated-in-v0.2.0}
540 523
 
... ...
@@ -548,22 +531,18 @@ specifically marked as such.)
548 531
 
549 532
   - Do not crash upon selecting a key on the command-line if there already
550 533
     is a key stored in the configuration.
551
-    ([#5])
534
+    ([`one-time-key-override-fails`][BUG_ONE_TIME_KEY_OVERRIDE_FAILS])
552 535
   - Create the configuration directory upon saving, if it does not yet
553 536
     exist.
554
-    ([#6])
537
+    ([`configuration-directory-must-exist`][BUG_CONFIGURATION_DIRECTORY_MUST_EXIST])
555 538
   - Isolate the tests properly and consistently from the user's
556 539
     configuration, so that user configuration problems do not cause
557 540
     unrelated test failures.
558
-    ([#8])
541
+    ([`test-filesystem-isolation`][BUG_TEST_FILESYSTEM_ISOLATION])
559 542
   - Add an alternate MkDocs configuration for building the documentation in
560 543
     offline mode.
561 544
   - Fix typing issues according to `mypy`'s strict mode.
562 545
 
563
-[#5]: https://github.com/the-13th-letter/derivepassphrase/5
564
-[#6]: https://github.com/the-13th-letter/derivepassphrase/6
565
-[#8]: https://github.com/the-13th-letter/derivepassphrase/8
566
-
567 546
 
568 547
 ## 0.1.2 (2024-07-22)  {#v0.1.2}
569 548
 
... ...
@@ -573,14 +552,12 @@ specifically marked as such.)
573 552
     distributions.
574 553
     (Previously, `sdist` contained VCS artifacts, and `wheel` was missing
575 554
     some paths.)
576
-  - Lint and reformat all code using [ruff](https://pypi.org/package/ruff/).
577
-  - Mention
578
-    [`mkdocstrings-python`](https://pypi.org/package/mkdocstrings-python/)
579
-    in the documentation's page footer.
555
+  - Lint and reformat all code using [ruff][].
556
+  - Mention [`mkdocstrings-python`][mkdocstrings-python] in the
557
+    documentation's page footer.
580 558
   - Remove JavaScript and external font loading from documentation website,
581 559
     so that the site works even in restricted browser settings.
582
-  - Set up a changelog, using
583
-    [towncrier](https://pypi.org/package/towncrier).
560
+  - Set up a changelog, using [towncrier][].
584 561
 
585 562
 
586 563
 ## 0.1.1 (2024-07-14)  {#v0.1.1}
... ...
@@ -599,3 +576,46 @@ specifically marked as such.)
599 576
 ### Added  {#added-in-v0.1.0}
600 577
 
601 578
   - Initial release.
579
+
580
+[^the-annoying-os]: Hat tip---and apologies---to
581
+    [Timothée Mazzucotelli (`@pawamoy`)](https://github.com/pawamoy/) for
582
+    the fitting terminology.
583
+
584
+[hypothesis]: https://pypi.org/project/hypothesis/
585
+[mike]: https://pypi.org/project/mike/
586
+[mkdocstrings-python]: https://pypi.org/project/mkdocstrings-python/
587
+[ruff]: https://pypi.org/project/ruff/
588
+[scriv]: https://pypi.org/project/scriv/
589
+[tomli]: https://pypi.org/project/tomli/
590
+[towncrier]: https://pypi.org/project/towncrier/
591
+
592
+[CLI]: reference/derivepassphrase.1.md
593
+[CLI_EXPORT]: reference/derivepassphrase-export.1.md
594
+[CLI_EXPORT_VAULT]: reference/derivepassphrase-export-vault.1.md
595
+[CLI_VAULT]: reference/derivepassphrase-vault.1.md
596
+[INTERCHANGABLE_PASSPHRASES]: explanation/faq-vault-interchangable-passphrases.md
597
+[REFERENCE]: reference/index.md
598
+
599
+[BUG_ALLOW_ALL_UNICODE_PASSPHRASES]: wishlist/allow-all-unicode-passphrases.md "Bug entry: “Allow all Unicode text strings as master passphrases”"
600
+[BUG_AMEND_VAULT_CONFIG]: wishlist/amend-vault-config.md "Bug entry: “derivepassphrase vault --import overwrites config instead of amending it”"
601
+[BUG_BETTER_ERROR_MESSAGES]: wishlist/better-error-messages.md "Bug entry: “Improve common error messages in the command-line interface”"
602
+[BUG_CONCURRENCY_AUDIT]: wishlist/concurrency-audit.md "Bug entry: “Audit derivepassphrase for concurrency/thread-safety issues”"
603
+[BUG_CONCURRENCY_TESTING_IN_TEST_SUITE]: wishlist/concurrency-testing-in-test-suite.md "Bug entry: “Test for concurrency and assert thread-safety in derivepassphrase's test suite”"
604
+[BUG_CONFIGURATION_DIRECTORY_MUST_EXIST]: wishlist/configuration-directory-must-exist.md "Bug entry: “derivepassphrase --config requires configuration directory to exist”"
605
+[BUG_FAIL_GRACEFULLY_WITHOUT_AF_UNIX]: wishlist/fail-gracefully-without-af-unix.md "Bug entry: “Fail gracefully if support for UNIX domain sockets is unavailable”"
606
+[BUG_FALSY_VAULT_CONFIG_VALUES]: wishlist/falsy-vault-config-values.md "Bug entry: “derivepassphrase vault differs from vault(1) behavior with falsy stored configuration values”"
607
+[BUG_NO_STDLIB_MODULE_NAMES]: wishlist/no-stdlib-module-names.md "Bug entry: “Rename types submodules to _types”"
608
+[BUG_ONE_TIME_KEY_OVERRIDE_FAILS]: wishlist/one-time-key-override-fails.md "Bug entry: “derivepassphrase -k fails when overriding the chosen key on the command-line”"
609
+[BUG_PRINT_SERVICE_NOTES]: wishlist/print-service-notes.md "Bug entry: “derivepassphrase vault does not print service notes”"
610
+[BUG_SINGLE_TOPLEVEL_MODULE]: wishlist/single-toplevel-module.md "Bug entry: “Move sequin and ssh_agent_client modules into derivepassphrase package”"
611
+[BUG_TEST_FILESYSTEM_ISOLATION]: wishlist/test-filesystem-isolation.md "Bug entry: “Isolate tests properly from the filesystem”"
612
+[BUG_WINDOWS_SSH_AGENT_SUPPORT]: wishlist/windows-ssh-agent-support.md "Bug entry: “Support PuTTY/Pageant (and maybe OpenSSH/ssh-agent) on Windows”"
613
+[WISH_CONVENTIONAL_CONFIGURABLE_TEXT_STYLING]: wishlist/conventional-configurable-text-styling.md "Wish entry: “derivepassphrase vault should support conventional and configurable text styling”"
614
+[WISH_EXPORTER_SCRIPT_AS_SUBCOMMAND]: wishlist/exporter-script-as-subcommand.md "Wish entry: “Make the exporter a subcommand of derivepassphrase”"
615
+[WISH_EXPORT_VAULT_FORMATS]: wishlist/export-vault-formats.md "Wish entry: “Support data export from vault v0.2, vault v0.3, and storeroom storage formats”"
616
+[WISH_OTHER_DERIVATION_SCHEMES]: wishlist/other-derivation-schemes.md "Wish entry: “Consider implementing passphrase schemes other than vault's”"
617
+[WISH_PRETTY_PRINT_JSON]: wishlist/pretty-print-json.md "Wish entry: “derivepassphrase vault should store and export the vault configuration in pretty-printed JSON”"
618
+[WISH_PRINT_SERVICE_NOTES_ABOVE]: wishlist/print-service-notes-above.md "Wish entry: “derivepassphrase vault should be able to print service notes above the passphrase”"
619
+[WISH_REPORT_BUILD_FLAGS_AND_FEATURES]: wishlist/report-build-flags-and-features.md "Wish entry: “derivepassphrase should report its build flags and supported features”"
620
+[WISH_SCHEME_SPECIFIC_CLI_AND_CONFIG]: wishlist/scheme-specific-cli-and-config.md "Wish entry: “Move vault-specific command-line interface into a separate CLI subcommand and matching configuration file”"
621
+[WISH_TEST_SUITE_ISOLATED_SSH_AGENT]: wishlist/test-suite-isolated-ssh-agent.md "Wish entry: “Support and isolate OpenSSH's ssh-agent and PuTTY's pageant in the test suite”"
602 622