Skip to content

RC3-014 (P2, DEFERRED — blocked on RC3-004): compare_bom's 4-type enum blocks CUR-native services like DynamoDB #33

Closed

Description

@x7even

Citation: customer-feedback §1 (Line-item shape row)

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.

Effort: M

Files: opencloudcosts-go/internal/tools/compare_bom.go, bom.go, sku_lookup.go

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).

Activity

  1. added
    bugSomething isn't working
    rc3-roadmapRC3 engineering roadmap backlog item
    needs-decisionDeferred pending a DACI decision, not auto-merged
    on Jul 3, 2026
  2. x7even commented on Jul 4, 2026

    @x7even
    OwnerAuthor

    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.

  3. removed
    needs-decisionDeferred pending a DACI decision, not auto-merged
    on Jul 4, 2026
  4. x7even commented on Jul 5, 2026

    @x7even
    OwnerAuthor

    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.

  5. x7even commented on Jul 7, 2026

    @x7even
    OwnerAuthor

    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.

  6. x7even commented on Jul 7, 2026

    @x7even
    OwnerAuthor

    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.

    Closing as resolved by RC3-004.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingrc3-roadmapRC3 engineering roadmap backlog item

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions