### Changed

 - use `git-config-value` crate

### New Features

 - `protocol::Context::to_bstring()`, and use it in `example/git-credential-lite`
 - an example implementing a custom credential helper program
 - `helper::main` to easily create credential helper implementations
 - add `helper::Action::get_for_url(…)`
 - `helper::invoke(helper, action, context)` function that allows for more flexible helper invocation

### Other

 - <csr-id-d95029eac0e9179a7cd730d1d60a08696584bfd1/> :main::Action::as_str()`

### Changed (BREAKING)

 - upgrade `bstr` to `1.0.1`
 - rename `git()` to `builtin()`
 - rename `Program::Custom*` variants to `Program::External*`
   It's more true to what it is.
 - differentiate between top-level functions and those which are invoked
   That way it's easier to use as it can assure an account was actually
   provided.
 - invoke::Outcome can now represent partial identities
   That way these can be assembled by multiple helpers called in a row.
 - move `helper::(Next)Action` into `helper::invoke::` module
   These are only relevant for invoke, hence the change.
 - rename `helper::NextAction` variants to `store` and `erase`
 - rename `helper::Action` variants to 'Get', 'Store', 'Erase'
   It's more obvious what it does and is more typical for what credentials
   helpers do.
 - Use `helper::Context` in `helper::Action::Fill()`
   That way additional information, like from configuration, can be passed
   as well.
 - move `helper::invoke()` related types into `helper::invoke` module.
   Also allow to pass arbitrary bytes (more or less) as context by not
   forcing it all into a string. Values can now be everything, which
   helps with passing paths or other values.
 - use `thiserror` instead of `quickerror`
 - hide `helper::action()` in favor of single path via `helper()`

### Other (BREAKING)

 - <csr-id-b8c54f03fdb6060caf9c04557c0530c090e7a975/> `helper::Kind` to `program::Kind`
 - <csr-id-4c39521a47419bb4b0f0edbe51aa509fb4e2a7f1/> `helper::(encode|decode)_message(…)` to `::message::(encode|decode)(…)`

### Commit Statistics

 - 115 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 21 commits were understood as [conventional](https://www.conventionalcommits.org).
 - 2 unique issues were worked on: #450, #470

### Thanks Clippy

[Clippy](https://github.com/rust-lang/rust-clippy) helped 5 times to make code idiomatic. 

### Commit Details

 * **#450**
    - upgrade `bstr` to `1.0.1` (99905ba)
    - :main::Action::as_str()` (d95029e)
    - `protocol::Context::to_bstring()`, and use it in `example/git-credential-lite` (15f1afc)
    - assure that protocol::Context::to_url() never shows passwords (e9f4d40)
    - Make sure the helper::Cascade never sends the URL to helper programs (9059de8)
    - fix docs (9a5ec7b)
    - move `program::Cascade` to `helper::Cascade` which is what it is (6149a14)
    - An example on how to invoke the git credential helper driver (be0f834)
    - Context has to serialize url or else the builtin credential helper may not work. (87ae404)
    - credential context won't send url and quit fields to helpers (337a53b)
    - Cascade supports `use_http_path` and respects it when setting up the context (959c0bd)
    - make it less easy to start a cascade with platform_defaults() (4b5d63f)
    - make clearer what platform builtins actually are (9788e30)
    - credential-cascade now passes on prompt options (baad8a0)
    - refactor (c8f1b41)
    - always compile prompting support in (bd0ea68)
    - set version of git-prompt to 0.1 and turn prompting on (7657693)
    - fix warnings (e011242)
    - more helpful prompt error messages when asking for credentials (b0c6863)
    - use `git-config-value` crate (43656d5)
    - proper prompt generation (63ee38d)
    - remove rustyline in favor of `git-prompt` (b3e5e59)
    - add interactive example for prompt, but… (a3fadea)
    - blindly implement prompting if it is allowed (c78f4b8)
    - frame to support prompting (as compile-time feature) (afaae28)
    - another test (569b7bc)
    - remove unnecessary `Helper` trait (19b84f0)
    - use fixtures in all tests (24da911)
    - fix tests on linux (89db8ee)
    - more tests (57e9060)
    - refactor (561bb35)
    - another test (52d2e54)
    - fix CI (d526c6d)
    - improve path normalization; a new ignored test (ece5a3f)
    - parse 'quit' according to spec (5e260da)
    - Allow disabling stderr on credential programs (4abec50)
    - refactor (cdfcea4)
    - url-preprocessing for scripts (c00cc35)
    - breaking credential helpers don't stop everything (0cdbde7)
    - refactor; try harder not to spill secrets in errors (525fa97)
    - first step towards our own `git credential` -like implementation (1d1622a)
    - refactor (ce16f51)
    - Platform specific defaults for the program cascade (b66258f)
    - refactor (85f8cd9)
    - refactor (23fb302)
    - A sketch of how a custom 'git credential' could look like (4767a14)
    - make 'quit' handler request representable and raise it to an error (39b6514)
    - rename `git()` to `builtin()` (783a1a7)
    - fix docs (f86364c)
    - rename `Program::Custom*` variants to `Program::External*` (bfa2545)
    - refactor (52e958d)
    - fix build (99958c6)
    - differentiate between top-level functions and those which are invoked (811985a)
    - invoke::Outcome can now represent partial identities (49b9bd5)
    - make clear what `helper()` does by renaming it to `git` (2edb58b)
    - Make clear in the error type that the helper program couldn't be started (c09d223)
    - improved error when identity could not be obtained (08c1287)
    - support for `quit` field in context (5a50528)
    - refactor (7487b5a)
    - support for non-consuming operation of `Program` (bcfe5ca)
    - disable test that seems to fail on linux (419ca56)
    - More tests for custom helper scripts (b396032)
    - Support for script invocations (377cf14)
    - use git_path::is_absolute() (2ba836f)
    - fix tests on windows (f4bc860)
    - also fill in the git credential command prefix (b2f4fe8)
    - initial version of parsing of custom helper definitions (2b2cd00)
    - `helper::Kind` to `program::Kind` (b8c54f0)
    - sketch additional credentials programs (46e3045)
    - first test for launching the git credential helper (4d7b1dd)
    - an example implementing a custom credential helper program (b1d528a)
    - add docs (a360594)
    - `helper::main` to easily create credential helper implementations (eaff67c)
    - move `helper::(Next)Action` into `helper::invoke::` module (4b7d0b6)
    - sketch for helper::invoke (get) test (c48eb39)
    - refactor (cb9d32a)
    - rename `helper::NextAction` variants to `store` and `erase` (ddd5398)
    - fix docs (d9b4ba5)
    - add `helper::Action::get_for_url(…)` (a253d30)
    - rename `helper::Action` variants to 'Get', 'Store', 'Erase' (2073b58)
    - Use `helper::Context` in `helper::Action::Fill()` (9c6f024)
    - remaining decode tests (0e76efe)
    - test context value validation (20dde9e)
    - basic round-tripping of fully fleshed-out context (280e4a3)
    - flesh out `helper::Context` as it will soon be used. (0cb1ed4)
    - move `helper::invoke()` related types into `helper::invoke` module. (71f6519)
    - refactor (03bf747)
    - express `helper()` in terms of `helper::invoke()` (f2a2c5e)
    - `helper::invoke(helper, action, context)` function that allows for more flexible helper invocation (64bc2ec)
    - refactor (af27d20)
    - prepare for more additional implementations of helpers (486ef98)
    - refactor (167b521)
    - fix docs (db46b60)
    - re-add `Result` type (de92fce)
    - use `thiserror` instead of `quickerror` (4c1a1a2)
    - hide `helper::action()` in favor of single path via `helper()` (081934c)
    - `helper::(encode|decode)_message(…)` to `::message::(encode|decode)(…)` (4c39521)
    - refactor (a395308)
 * **#470**
    - update changelogs prior to release (caa7a1b)
 * **Uncategorized**
    - Release git-hash v0.9.10, git-features v0.22.5, git-date v0.2.0, git-actor v0.12.0, git-glob v0.4.0, git-path v0.5.0, git-quote v0.3.0, git-attributes v0.4.0, git-config-value v0.8.0, git-tempfile v2.0.5, git-validate v0.6.0, git-object v0.21.0, git-ref v0.16.0, git-sec v0.4.0, git-config v0.8.0, git-discover v0.5.0, git-traverse v0.17.0, git-index v0.5.0, git-worktree v0.5.0, git-testtools v0.9.0, git-command v0.1.0, git-prompt v0.1.0, git-url v0.9.0, git-credentials v0.5.0, git-diff v0.19.0, git-mailmap v0.4.0, git-chunk v0.3.2, git-pack v0.23.0, git-odb v0.33.0, git-packetline v0.13.0, git-transport v0.20.0, git-protocol v0.20.0, git-revision v0.5.0, git-refspec v0.2.0, git-repository v0.24.0, git-commitgraph v0.9.0, gitoxide-core v0.18.0, gitoxide v0.16.0, safety bump 28 crates (29a043b)
    - Merge branch 'index-from-tree' (172f73c)
    - make fmt (535e967)
    - Merge branch 'main' into filter-refs-by-spec (9aa1d3d)
    - Merge branch 'main' into filter-refs-by-spec (1f6e5ab)
    - Merge branch 'main' into filter-refs-by-spec (51dc828)
    - Merge branch 'main' into filter-refs-by-spec (56ba481)
    - Merge branch 'main' into filter-refs-by-spec (a36c05d)
    - Release git-path v0.4.2, git-config-value v0.7.0 (c48fb31)
    - Merge branch 'main' into filter-refs-by-spec (cef0b51)
    - thanks clippy (c1399d1)
    - thanks clippy (e8e80f5)
    - Merge branch 'main' into filter-refs-by-spec (dbfa328)
    - thanks clippy (9b8a6d6)
    - thanks clippy (8317b46)
    - thanks clippy (01efe88)