You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Issue #111 verified that per-account account_service_overrides are read by ZERO call sites in the recommendations / scheduling pipeline (every override row is decorative until consumed). The user-approved fix landed in PR #193 — overrides now pre-populate the purchase forms (sub-options ii + iii: per-bucket Payment in the fan-out modal, and per-row Term/Payment in the single-bucket modal). Recommendations themselves stay unfiltered, by design.
That leaves the other override fields still decorative:
enabled (when set to false, recs for that account/service should be hidden)
coverage (per-account target % — affects what's "remaining" to recommend)
include_engines / exclude_engines
include_regions / exclude_regions
include_types / exclude_types
ramp_schedule
These all shape what the engine should list / aggregate for an account — not what to do at purchase time. Pre-populating purchase forms with payment doesn't move the needle for any of them.
What needs to happen
Wire per-account override lookup into the recommendations read path (option B from the issue #111 architectural fork):
Extend RecommendationFilter (internal/api/recommendations.go and friends) with account-aware predicates.
ListStoredRecommendations (and any sibling that backs the dashboard aggregator) consults account_service_overrides per row's cloud_account_id and applies:
enabled = false → skip the account's recs entirely for that service.
include_engines / exclude_engines (and the region / type pairs) → drop non-matching rows.
coverage → cap the headline "potential savings" to the configured target (related to follow-up issue on dashboard accuracy).
Frontend: when the user has the per-account-override panel open and changes a filter field, trigger a recommendations refresh (or invalidate the cached visible set).
internal/config/resolver.go::ResolveServiceConfig — the merge helper that's currently dead code; this is the function the read path should consult per-account
internal/api/handler_recommendations.go::ListRecommendations — likely main edit point
internal/scheduler/scheduler.go:585-598 — collection-time read of globalCfg.DefaultTerm/DefaultPayment (out of scope for this issue; option A territory)
Context
Issue #111 verified that per-account
account_service_overridesare read by ZERO call sites in the recommendations / scheduling pipeline (every override row is decorative until consumed). The user-approved fix landed in PR #193 — overrides now pre-populate the purchase forms (sub-options ii + iii: per-bucket Payment in the fan-out modal, and per-row Term/Payment in the single-bucket modal). Recommendations themselves stay unfiltered, by design.That leaves the other override fields still decorative:
enabled(when set tofalse, recs for that account/service should be hidden)coverage(per-account target % — affects what's "remaining" to recommend)include_engines/exclude_enginesinclude_regions/exclude_regionsinclude_types/exclude_typesramp_scheduleThese all shape what the engine should list / aggregate for an account — not what to do at purchase time. Pre-populating purchase forms with payment doesn't move the needle for any of them.
What needs to happen
Wire per-account override lookup into the recommendations read path (option B from the issue #111 architectural fork):
RecommendationFilter(internal/api/recommendations.goand friends) with account-aware predicates.ListStoredRecommendations(and any sibling that backs the dashboard aggregator) consultsaccount_service_overridesper row'scloud_account_idand applies:enabled = false→ skip the account's recs entirely for that service.include_engines/exclude_engines(and the region / type pairs) → drop non-matching rows.coverage→ cap the headline "potential savings" to the configured target (related to follow-up issue on dashboard accuracy).References
internal/config/resolver.go::ResolveServiceConfig— the merge helper that's currently dead code; this is the function the read path should consult per-accountinternal/api/handler_recommendations.go::ListRecommendations— likely main edit pointinternal/scheduler/scheduler.go:585-598— collection-time read ofglobalCfg.DefaultTerm/DefaultPayment(out of scope for this issue; option A territory)Effort & priority
paymentdoes anything)Out of scope