Error-legibility (functional-honesty) fixes surfaced by clean-room dogfooding: an error must
say what it knows, and a hint that doesn't point at the real fix misdirects. Additive and
backward-compatible — the weft.plainweave.error.v1 envelope and the ErrorCode vocabulary
are unchanged.
Fixed
- Version-conflict errors now disclose the actual version. A
CONFLICTon a requirement
version or a draft revision previously reported only"expected version does not match current version"with emptydetails, forcing callers to probe for the real value. Both optimistic-
concurrency guards now name the expected and current values in the message, in structured
details({expected_version, current_version}/{expected_draft_revision, current_draft_revision}), and in a hint that names the recovery
(e.g.Retry with --expected-version 0.). - Cause-specific error hints; dropped the misleading blanket hint.
_errorno longer stamps
"Refresh local Plainweave state and retry."on every error — it misdirected, e.g. a missing
--actorVALIDATION error, down a dead path. Each error now carries a cause-appropriate hint
from a per-ErrorCodemap (VALIDATION/NOT_FOUND never claim staleness;CONFLICTlegitimately
suggests a refetch), with precise hints for the missing-actor, verification-method /
evidence-status, and trace-relation cases, plus an honest INTERNAL hint on the MCP
preflight-severity guard.