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
{{ message }}
Repository navigation
RC3-014 (P2, DEFERRED — blocked on RC3-004): compare_bom's 4-type enum blocks CUR-native services like DynamoDB #33
Current behavior: compare_bom(workload={"table":{"type":"dynamodb",...}}) returns unsupported workload type "dynamodb" (supported: compute, storage, database, cache) — a hard 4-type allowlist in workloadItemToSpec's default case (compare_bom.go L536). estimate_bom has no type enum, but a DynamoDB-shaped call still fails via the AWS provider's Supports() check inside processBOMItems (bom.go L245). Note: distinct from the DynamoDB PayPerRequest static-catalog gap, which is already fixed — get_price_by_sku already returns correct DynamoDB pricing.
Proposed fix:
Do not extend compare_bom's enum — retire the restriction by building RC3-004 on estimate_bom's open-item substrate. Also accept SKU-string line items, routed through the AWS SKU resolver, for services that fail Supports() under the PricingSpec path.
Dependencies: Depends on RC3-016's scope for full multi-provider coverage. Its own stated fix IS RC3-004 — there is no independent implementation path.
DACI — why this is deferred:
Decision: This item's proposed fix explicitly IS RC3-004 ("retire the restriction by building RC3-004 on estimate_bom's open-item substrate") — there's no scoped fix independent of that new tool. Deferred alongside RC3-004; see that issue's DACI for the full reasoning.
Who should decide: Whoever signs off on RC3-004's design — this is not a separate decision.
Filed from the RC3 engineering roadmap (rc3-engineering-roadmap.md).
Confirmed decision: this stays blocked on #31 (RC3-004, `compare_bom_regions`) rather than patching the existing 4-type enum in `compare_bom.go`. #31 is being scoped as an AWS-only v1 SKU-native tool this pass; once it ships, DynamoDB and other CUR-native services get a real path in rather than another special-cased branch here. Will revisit this issue once #31's v1 lands to decide whether it's superseded outright or still needed for a narrower gap.
Correction to this issue's dependency tracking: it's still legitimately deferred — v1 of RC3-004 shipped AWS-only via #82, but that v1 explicitly omits raw-SKU line items, which is what this issue's fix ("accept SKU-string line items ... routed through the AWS SKU resolver") actually depends on. So the "DEFERRED — blocked on RC3-004" label is still accurate; it's RC3-004's full, non-v1 contract that unblocks this, not v1 itself.
One change worth noting: #75, the earlier design note for that raw-SKU + providers? combination, was closed as superseded (see #31) now that v1 shipped without it — so there's currently no active design thread for the work this issue depends on. Filing a fresh design proposal would be the next step whenever RC3-004's remaining scope gets picked up.
The blocker on RC3-004 (#31) is partially cleared by #96 (merged to main: 3e3e7a7): estimate_bom and compare_bom_regions now both accept raw-SKU line items ({"sku": ..., "region": ..., ...}), resolved via get_price_by_sku's AWS SKU resolver rather than the PricingSpec Supports() path — this is the exact mechanism this issue's proposed fix calls for ("accept SKU-string line items, routed through the AWS SKU resolver, for services that fail Supports()").
So a DynamoDB (or other CUR-native service) line item can now be expressed as a raw-SKU dict in estimate_bom/compare_bom_regions and will resolve correctly, without needing compare_bom's 4-type enum touched at all.
Note compare_bom itself (the older tool referenced in this issue's "Current behavior") is unchanged — its workloadItemToSpec 4-type allowlist still rejects "dynamodb" directly. #96 only extends estimate_bom/compare_bom_regions. Leaving this open for a repo-owner call on whether that's sufficient to close, or whether compare_bom itself should still be addressed.
RC3-004 (#31, merged in PR #96) shipped the substrate this issue's own proposed fix called for: estimate_bom and compare_bom_regions now accept raw-SKU line items, routed through the AWS SKU resolver, for CUR-native services (like DynamoDB) that fail Supports() under the PricingSpec path.
We re-evaluated whether compare_bom's 4-type enum itself also needs to accept raw-SKU items and concluded no: compare_bom's WorkloadItem model fans one workload out across multiple providers/terms for side-by-side comparison — the opposite axis from a raw-SKU-across-regions resolver, and a raw-SKU item has no cross-provider equivalent to compare against. Extending its enum would be architecturally incompatible with that design, whereas this issue's own DACI scoped its fix as building on estimate_bom's substrate — which is now done.
Activity
x7even commentedon Jul 4, 2026
Confirmed decision: this stays blocked on #31 (RC3-004, `compare_bom_regions`) rather than patching the existing 4-type enum in `compare_bom.go`. #31 is being scoped as an AWS-only v1 SKU-native tool this pass; once it ships, DynamoDB and other CUR-native services get a real path in rather than another special-cased branch here. Will revisit this issue once #31's v1 lands to decide whether it's superseded outright or still needed for a narrower gap.
x7even commentedon Jul 5, 2026
Correction to this issue's dependency tracking: it's still legitimately deferred — v1 of RC3-004 shipped AWS-only via #82, but that v1 explicitly omits raw-SKU line items, which is what this issue's fix ("accept SKU-string line items ... routed through the AWS SKU resolver") actually depends on. So the "DEFERRED — blocked on RC3-004" label is still accurate; it's RC3-004's full, non-v1 contract that unblocks this, not v1 itself.
One change worth noting: #75, the earlier design note for that raw-SKU +
providers?combination, was closed as superseded (see #31) now that v1 shipped without it — so there's currently no active design thread for the work this issue depends on. Filing a fresh design proposal would be the next step whenever RC3-004's remaining scope gets picked up.x7even commentedon Jul 7, 2026
The blocker on RC3-004 (#31) is partially cleared by #96 (merged to main: 3e3e7a7):
estimate_bomandcompare_bom_regionsnow both accept raw-SKU line items ({"sku": ..., "region": ..., ...}), resolved viaget_price_by_sku's AWS SKU resolver rather than the PricingSpecSupports()path — this is the exact mechanism this issue's proposed fix calls for ("accept SKU-string line items, routed through the AWS SKU resolver, for services that failSupports()").So a DynamoDB (or other CUR-native service) line item can now be expressed as a raw-SKU dict in
estimate_bom/compare_bom_regionsand will resolve correctly, without needingcompare_bom's 4-type enum touched at all.Note
compare_bomitself (the older tool referenced in this issue's "Current behavior") is unchanged — itsworkloadItemToSpec4-type allowlist still rejects"dynamodb"directly. #96 only extendsestimate_bom/compare_bom_regions. Leaving this open for a repo-owner call on whether that's sufficient to close, or whethercompare_bomitself should still be addressed.x7even commentedon Jul 7, 2026
RC3-004 (#31, merged in PR #96) shipped the substrate this issue's own proposed fix called for:
estimate_bomandcompare_bom_regionsnow accept raw-SKU line items, routed through the AWS SKU resolver, for CUR-native services (like DynamoDB) that failSupports()under thePricingSpecpath.We re-evaluated whether
compare_bom's 4-type enum itself also needs to accept raw-SKU items and concluded no:compare_bom'sWorkloadItemmodel fans one workload out across multiple providers/terms for side-by-side comparison — the opposite axis from a raw-SKU-across-regions resolver, and a raw-SKU item has no cross-provider equivalent to compare against. Extending its enum would be architecturally incompatible with that design, whereas this issue's own DACI scoped its fix as building onestimate_bom's substrate — which is now done.Closing as resolved by RC3-004.