CHW-2306 PublishPolicyBlocked

publish blocked by policy; the rule that fired is named in the response payload's policy_id / rule_id field

Default message: publish blocked by policy; the rule that fired is named in the response payload’s policy_id / rule_id field
HTTP status: 403 (client)
Reason: POLICY_BLOCK

Problem. A PUT/POST upload to a hosted repository returned 403. Cause. The policy engine evaluating input.surface == "publish" returned block. The matching rule id (or native policy id) and violation reason are in the response payload’s policy_id / rule_id and reason fields. Fix. Either ship a version that satisfies the rule, or ask an operator to amend the policy. The publish hook fail-opens on engine errors, so this code only fires on a deliberate block decision — not a buggy custom rule. HTTP 403.