The session record in #5 says the core never writes a credential to its own cache
or log, and that a platform keychain is the only acceptable place at rest. That
makes storage a client responsibility, and a responsibility with no interface is
a responsibility nobody has.
What this produces
A named interface with two operations, storing and retrieving a secret for a
named server, and one for forgetting it.
Documentation stating that the implementation has to be the platform's own
protected storage, and naming what each platform family offers, so that a client
author does not reach for a file.
Behaviour when the client supplies no implementation at all: the core works and
the session lives only as long as the process. This is the correct default,
because a core that silently falls back to a file has made the decision the
record forbids.
A test double for the suite that keeps secrets in memory and is never written to
disk.
Done when
The interface exists, the core compiles and passes its suite with no
implementation supplied, and a test proves that with none supplied nothing
secret reaches the cache directory or any log. Blocked on #5.
The session record in #5 says the core never writes a credential to its own cache
or log, and that a platform keychain is the only acceptable place at rest. That
makes storage a client responsibility, and a responsibility with no interface is
a responsibility nobody has.
What this produces
A named interface with two operations, storing and retrieving a secret for a
named server, and one for forgetting it.
Documentation stating that the implementation has to be the platform's own
protected storage, and naming what each platform family offers, so that a client
author does not reach for a file.
Behaviour when the client supplies no implementation at all: the core works and
the session lives only as long as the process. This is the correct default,
because a core that silently falls back to a file has made the decision the
record forbids.
A test double for the suite that keeps secrets in memory and is never written to
disk.
Done when
The interface exists, the core compiles and passes its suite with no
implementation supplied, and a test proves that with none supplied nothing
secret reaches the cache directory or any log. Blocked on #5.