Part of #138. Raised (major) by the #138 sweep; the divergence is documented in crates/cow-venue/data/classification.toml but should be ratified.
Problem. shepherd-sdk already depends on cowprotocol, which ships a canonical ApiError::retry_hint() classifier. #236's classification.toml reimplements it by hand and materially diverges (e.g. InvalidEip1271Signature drop-vs-upstream-Retry; balance/allowance/app-data drop-vs-Backoff). It faithfully preserves prior shepherd behaviour (no regression), but reuse-vs-divergence should be a deliberate decision — and PriceExceedsMarketPrice in the table is not in the real CoW errorType enum (dead data).
Scope. Decide: delegate to retry_hint() with shepherd overrides, or keep the table as shepherd's conservative data-of-record with an explicit rationale. Prune dead rows; reconcile against the real cowprotocol error enum.
Acceptance. Classification source-of-truth ratified in an ADR or the table header; no phantom errorTypes remain.
Part of #138. Raised (major) by the #138 sweep; the divergence is documented in
crates/cow-venue/data/classification.tomlbut should be ratified.Problem.
shepherd-sdkalready depends oncowprotocol, which ships a canonicalApiError::retry_hint()classifier. #236'sclassification.tomlreimplements it by hand and materially diverges (e.g.InvalidEip1271Signaturedrop-vs-upstream-Retry; balance/allowance/app-data drop-vs-Backoff). It faithfully preserves prior shepherd behaviour (no regression), but reuse-vs-divergence should be a deliberate decision — andPriceExceedsMarketPricein the table is not in the real CoW errorType enum (dead data).Scope. Decide: delegate to
retry_hint()with shepherd overrides, or keep the table as shepherd's conservative data-of-record with an explicit rationale. Prune dead rows; reconcile against the realcowprotocolerror enum.Acceptance. Classification source-of-truth ratified in an ADR or the table header; no phantom errorTypes remain.