README stated that a crate may only depend on layers to its left, but
nothing checked it, and the wording was self contradicting: the example
given for a cross layer jump was a reverse dependency. Clarify the rule,
add scripts/check-layers.sh to enforce it, run it in CI, and record the
boundary cases in docs/design/layers.md.
apsis-core described Error and Result as the workspace's single error
surface, but no crate uses them: every layer with a domain specific failure
defines its own Error and ErrorKind, whose variants name the concrete
conditions a caller matches on. Correct the doc comment and record the
strategy, including the Option versus Result split and the tolerance
conventions.