The vocabulary in #4 is a decision. This is where it becomes true of the code. It
is also where the vocabulary gets its first honest test, because a real server
produces shapes nobody predicted.
What this produces
One mapping point every failure passes through. A transport failure, a status
code, a server-supplied error body, and a response the core could not parse all
arrive as a named kind.
A named kind for the shape that matches nothing, carrying enough detail for a bug
report and nothing that identifies a person or a server address a person did not
type.
No raw status code, no library exception type, and no server-supplied sentence
reaching a caller unmapped, since each of those is how a client ends up switching
on a number.
Done when
Every failure in the repository leaves through the mapping point, a test drives
the fake server through at least a dozen hostile responses and asserts the named
kind for each, and no test finds an unmapped value reaching a caller. Blocked on
#4 and #21.
The vocabulary in #4 is a decision. This is where it becomes true of the code. It
is also where the vocabulary gets its first honest test, because a real server
produces shapes nobody predicted.
What this produces
One mapping point every failure passes through. A transport failure, a status
code, a server-supplied error body, and a response the core could not parse all
arrive as a named kind.
A named kind for the shape that matches nothing, carrying enough detail for a bug
report and nothing that identifies a person or a server address a person did not
type.
No raw status code, no library exception type, and no server-supplied sentence
reaching a caller unmapped, since each of those is how a client ends up switching
on a number.
Done when
Every failure in the repository leaves through the mapping point, a test drives
the fake server through at least a dozen hostile responses and asserts the named
kind for each, and no test finds an unmapped value reaching a caller. Blocked on
#4 and #21.