Tier: Medium
Description: validate_milestone_symbols calls validate_symbol at validation.rs:203 (returns InvalidSymbol/#65 on failure), then calls the same deterministic check again at line 210 mapped to InvalidPaymentMilestoneName/#62 — which can never fire since line 203 already short-circuits. Closed issue #584's resulting tests actually assert Error(Contract, #65), confirming the bug rather than catching it.
Files: contracts/shipment/src/validation.rs:203, 210
Tasks:
Tier: Medium
Description:
validate_milestone_symbolscallsvalidate_symbolat validation.rs:203 (returnsInvalidSymbol/#65 on failure), then calls the same deterministic check again at line 210 mapped toInvalidPaymentMilestoneName/#62 — which can never fire since line 203 already short-circuits. Closed issue #584's resulting tests actually assertError(Contract, #65), confirming the bug rather than catching it.Files:
contracts/shipment/src/validation.rs:203, 210Tasks:
InvalidPaymentMilestoneNameis actually reachable for its intended condition, and correct the [CONTRACT] Add tests for InvalidPaymentMilestoneName error variant #584 testsAcceptance Criteria:
InvalidPaymentMilestoneNameis returned for the condition it was designed to catch, verified by a passing test that doesn't merely re-assert the bug