502327678f
praxisItemAction.handle returned a hardcoded per-verb constant on any error, so a Praxis outage, a refused token, a contract mismatch and a decode failure all said the same thing and none of them said "Praxis". The information already existed: praxisClient embeds ecosystemHTTP, so the error is an *ecosystemError with working classifiers, and handle() logged it, traced it and threw it away. servicePraxis joins the two service constants and the failure goes through ecosystemGap, which is what Nexus and Hexis already use. The per-verb string is kept in front of it rather than replaced: it carries which operation did not happen, and the trace is the only other place that exists. No new Russian is added — both halves are lines that already ship. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>