Repository navigation
Closed
Labels
effort/sHoursHoursimpact/fewLimited audienceLimited audiencepriority/p1Next up; this sprintNext up; this sprintseverity/mediumModerate harmModerate harmtriagedItem has been triagedItem has been triagedtype/featNew capabilityNew capabilityurgency/this-sprintWithin the current sprintWithin the current sprint
Description
Problem
The ladder sizes the Compute Savings Plan layer from Cost Explorer's account-wide blended rate (cloud-commitments-go#698). That sizing is accepted only because a per-run cap bounds it. The upcoming go pin bump adds a run-time refusal in executeLadderRun: an AWS ladder config with no max_hourly_commit_per_run gets an errored run, with an error naming the field.
Saving still accepts such a config:
LadderConfigDB.validateLadderRunLimits(internal/config/validation.go) treats a nil cap as "no cap", and it is valid.- The ladder form (
frontend/src/ladder.ts) sendsnullfor a blank cap.
So a user can save a config that every run will then refuse, and only finds out from the run result.
Proposed change
- Validation: an AWS ladder config requires
max_hourly_commit_per_run. Mirror the provider-keyed rule inladderMinLookbackDaysand return a 400 that names the field. Update the "nil = no cap (valid)" fixtures invalidation_ladder_test.goand the API tests that save uncapped AWS configs. - Frontend: make the cap required for AWS configs in the ladder form, with an inline error. Update
ladder.test.tsand the e2e fixtures that usemax_hourly_commit_per_run: null. - Keep the run-time refusal. Stored rows can already be uncapped, so the save check is an addition, not a replacement.
Acceptance
- Saving an uncapped AWS ladder config returns 400 naming
max_hourly_commit_per_run, and the form blocks it. - Capped AWS configs and non-AWS configs save as before.
- The ladder config page shows why runs stop for an existing uncapped AWS config. For example, it can say "Runs are refused until max_hourly_commit_per_run is set", based on the saved config, or show the errored run's reason if the page shows runs. Owners of rows saved before this check then see the cause without reading the logs.
No data migration or default cap: existing rows stay uncapped until an owner sets a value.
Metadata
Metadata
Assignees
Labels
effort/sHoursHoursimpact/fewLimited audienceLimited audiencepriority/p1Next up; this sprintNext up; this sprintseverity/mediumModerate harmModerate harmtriagedItem has been triagedItem has been triagedtype/featNew capabilityNew capabilityurgency/this-sprintWithin the current sprintWithin the current sprint
Activity
cristim commentedon Nov 6, 2026
Raised to p1. Once #1817 merges, every daily ladder run of an existing AWS ladder config without max_hourly_commit_per_run errors until someone sets a cap. Requiring the cap at save time and in the form stops new uncapped configs. Existing uncapped configs keep erroring until a cap is set. I'll pick this up right after #1817 merges.
chore(deps): pin cloud-commitments-go at c83aef8 and require a cap fo…
cristim commentedon Nov 6, 2026
Claimed by claude-cc-platform-2, now that #1817 has merged. The plan has three parts:
LadderConfigDBvalidation (400, namingmax_hourly_commit_per_run).