Found during the LeanerCloud/cloud-commitments-cli#1207 pre-merge review (pre-existing, same bug class LeanerCloud/cloud-commitments-cli#1207 fixes in 5 other clients but out of its arch-04 scope): providers/aws/services/ec2/client.go ~line 630, getDurationValue silently defaults an unrecognized term string to the 1-year duration and feeds buildEC2OfferingQuery on the EC2 RI purchase path - a silent money-path fallback (could purchase a 1yr RI when the config said something else). Fix like LeanerCloud/cloud-commitments-cli#1207: return an explicit error on every unrecognized/empty term, propagate before any API call, regression test with real bad-term inputs ('', '0', '2yr', garbage) proving fail-before/pass-after. Note: SP's normalizeTermString defaults are currently gated upstream by fail-loud convertTermToSeconds - verify and leave a guard test if so. Per feedback_no_silent_fallbacks.
Found during the LeanerCloud/cloud-commitments-cli#1207 pre-merge review (pre-existing, same bug class LeanerCloud/cloud-commitments-cli#1207 fixes in 5 other clients but out of its arch-04 scope): providers/aws/services/ec2/client.go ~line 630, getDurationValue silently defaults an unrecognized term string to the 1-year duration and feeds buildEC2OfferingQuery on the EC2 RI purchase path - a silent money-path fallback (could purchase a 1yr RI when the config said something else). Fix like LeanerCloud/cloud-commitments-cli#1207: return an explicit error on every unrecognized/empty term, propagate before any API call, regression test with real bad-term inputs ('', '0', '2yr', garbage) proving fail-before/pass-after. Note: SP's normalizeTermString defaults are currently gated upstream by fail-loud convertTermToSeconds - verify and leave a guard test if so. Per feedback_no_silent_fallbacks.