Skip to content

fix(deps): adopt reviewed cloud-commitments-go purchase safeguards #452

Closed

Description

@cristim

Confirmed release gap

Main go.mod still requires all four cloud-commitments-go modules (pkg, providers/aws, providers/azure, providers/gcp) at v0.0.0-20260928214714-ce9513612901, verified on 2026-09-30. The platform therefore does not select the subsequent GCP commitment-family dedupe, AWS reservation-state, ElastiCache engine-dedupe and purchase-cost fixes.

The coordinated old pins compile; this is an adoption gap, not evidence that current platform builds suffer the provider-only compile failure. Library merges do not update an existing platform binary or deployment.

References: library #154, merged provider pin/standalone CI PR #159, and P1 GCP duplicate-purchase issue #144.

Scope

Update the four requirements and corresponding sums together to published merged commit a32fd1a178e971ba48ae7469f5d472e6391c68e2, or a later independently reviewed canonical release containing it. Resolve each canonical public version and verify source hashes. No replacements, vendoring, unrelated dependency upgrades, schema migrations or speculative release automation. Consumer regression coverage is in scope; deployment and real purchases are not authorized by this issue.

Acceptance

  • With the CI-pinned toolchain and GOWORK=off, capture all four resolved module versions with no replacements; build the actual server, run tidy-diff, vet and pinned lint.
  • Run affected API, provider-integration and purchase-engine race/short tests. Use fake cloud boundaries and local database fixtures where the actual path persists purchase results.
  • Trace the actual recommendation/purchase API through filtering and response/storage: recent matching GCP CUDs suppress repeat purchases; applicable AWS/ElastiCache ownership/engine safeguards remain active; nullable and explicit-zero costs preserve the platform's persistence/API behavior.
  • Prove an applicable consumer regression fails on the old pins and passes after upgrade. Verify tenant/account boundaries remain intact. If UI-observable data changes, exercise the affected local UI path.
  • Record exact reviewed SHA and evidence. No production deployment, cloud purchase, migration or live incident is implied by a successful dependency-update PR.

Triage

P2 / medium / this-sprint / few / medium effort: the stale dependency graph is confirmed and adoption crosses API/purchase/persistence boundaries. This tracking task has not established a deployed incident or reproduced a platform-specific duplicate purchase. The upstream P1 financial-risk fix makes adoption worthwhile; raise severity/priority if actual consumer-path reproduction establishes that exposure.

Activity

  1. cristim commented on Oct 8, 2026

    @cristim
    MemberAuthor

    Reopened: PR #671 (merged as 5b68408) only bumps providers/gcp to a32fd1a and used Refs #452; the issue was closed at merge time without a closing keyword in the commit message. The acceptance item 'recent matching GCP CUDs suppress repeat purchases' is not met because the platform never calls the duplicate checker; tracked in #682. Remaining here: the other acceptance items once #682 lands.

  2. reopened this on Oct 8, 2026
  3. IAmJSD commented on Oct 16, 2026

    @IAmJSD
    Collaborator

    Released: pin adoption already done; the rest is blocked on #682 (details below)

  4. self-assigned this
    on Oct 16, 2026
  5. IAmJSD commented on Oct 16, 2026

    @IAmJSD
    Collaborator

    Released: the dependency-adoption part is already done on main, and what's left is #682.

    Two items are still unmet:

    • recent matching GCP CUDs don't suppress repeat purchases;
    • the ElastiCache engine dedupe.

    Outside tests, the platform never calls the library's DuplicateChecker, recfilter or GetExistingCommitments paths, so a consumer regression can't be written yet. That's the work in #682. I'm leaving this issue open, per your reopen note.

  6. removed their assignment
    on Oct 16, 2026
  7. cristim commented on Nov 4, 2026

    @cristim
    MemberAuthor

    Keeping this open, per the owner decision (2026-11-03, option A). The one acceptance item left is GCP duplicate suppression, which is tracked in #682 and will be implemented as a check at purchase execution that fails closed when GetExistingCommitments errors. This issue closes when #682 lands.

  8. cristim commented on Nov 9, 2026

    @cristim
    MemberAuthor

    Claimed by claude-ui-fix-1 (coordinator-assigned).

    Status read: the four go pins on main are 52d66feb616b, past a32fd1a; #682 closed today with the GCP recent-commitment check merged (#1842, #1848); the ElastiCache engine dedupe was split to #1863. So the owner's closing condition for this issue ("closes when #682 lands") has been met.

    Plan: verify each remaining acceptance bullet against current main with evidence (pins and go mod verify with GOWORK=off, no replacements, the consumer regressions that fail on the old pins, nullable and explicit-zero cost handling, tenant boundaries), then either close this with that evidence or file exactly what is missing. No production, deployment or purchase action involved.

  9. cristim commented on Nov 9, 2026

    @cristim
    MemberAuthor

    Verification of the acceptance bullets against main at 5544d25a (read-only; claude-ui-fix-1). Result: not closable yet. One bullet is unmet and is already tracked and claimed under #1863, so I am releasing my claim and leaving this open until that lands.

    Bullet Status Evidence
    Pins contain a32fd1a, no replacements, verify passes MET go.mod:91-94 pins pkg, providers/aws, providers/azure and providers/gcp all at v0.0.0-20261107024538-52d66feb616b; a32fd1a is an ancestor of 52d66feb in the library; 0 replace lines; GOWORK=off go mod verify prints "all modules verified". Pin PRs: #671, #826, #1796 and the bump to 52d66feb.
    CI builds with the pinned toolchain, tidy-diff, vet, pinned lint MET with two small notes Toolchain GO_VERSION 1.26.10 (ci.yml:40); golangci-lint v2.10.1 pinned (ci.yml:64-66); make tidy-check runs GOWORK=off go mod tidy -diff through pre-commit. Notes: ci.yml never sets GOWORK=off (CI vet, test and lint run in workspace mode), and no job runs go build ./cmd/server explicitly (go vet ./... compiles it).
    Recent matching GCP CUDs suppress repeat purchases MET #1848 (merged 49ee7b9, with #1842): preSubmitChecks (internal/purchase/execution.go:1384-1394) runs gcpRecentCommitmentRefusal before PurchaseCommitment; a listing error fails closed (internal/purchase/gcp_recent_check.go:124-143); tests in gcp_recent_check_test.go, with call-site mutation probes recorded in #1848.
    AWS and ElastiCache ownership and engine safeguards active UNMET (ElastiCache) The platform never calls the library's ElastiCache engine dedupe; the only recfilter use in non-test code is the GCP check. Tracked in #1863 (claimed by claude-cc-platform-2). The AWS reservation-state and EC2/Redshift claim safeguards arrive with the pin bump and have no dedicated platform test of their own (a note, not a blocker).
    Nullable and explicit-zero costs keep persistence and API behavior MET internal/api/nullable_purchase_cost_integration_test.go (TestNullablePurchaseCostPostgres, real Postgres: known, zero, unknown, mixed, empty through history, analytics and breakdown); TestSavePurchaseHistory_GCPRecordsNoUpfront pins the GCP zero-upfront behavior.
    A consumer regression fails on the old pins and passes after MET Evidence is in the PR bodies: #671 (TestSavePurchaseHistory_GCPRecordsNoUpfront fails on the old pin), #1796 (two reshape tests failed at the new pin until #1789), #1848 (probes). There is none for ElastiCache, because nothing is wired.
    Tenant and account boundaries intact MET (weak) The GCP check lists through the per-account client and refuses when commitments span more than one project (TestGCPRecentRefusal_CommitmentsFromTwoProjectsFailClosed). No cross-tenant test for the dependency bump itself.

    What remains: only #1863 (wire the ElastiCache dedupe into the purchase path, with a fail-closed decision, an account- and region-scoped listing, and a real-path test that fails without the wiring). This issue closes when it lands. Optional follow-ups, not required for closing: set GOWORK=off on a CI build step, and add a named platform test for the reservation-state and Redshift safeguards.

  10. cristim commented on Nov 9, 2026

    @cristim
    MemberAuthor

    Closing as completed (claude-ui-fix-1, 2026-11-09). My verification table at 18:21 UTC (comment above) found one unmet bullet, the ElastiCache engine dedupe wiring, tracked in #1863. #1863 is now closed: the wiring landed in #1893 and its executor-level coverage in #1897 (merged 2026-11-09 21:42 UTC), so all #452 acceptance items are met on main. The optional notes from the table (CI GOWORK=off for the pin check, named tests for reservation-state and Redshift) remain nice-to-haves and are not blockers. Reopen if a pin or safeguard regresses.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions