Skip to content

feat: full Stripe catalog provider support (Phase 1 + 2)#20

Closed
snowmead wants to merge 3 commits into
mainfrom
feat/stripe-catalog-providers
Closed

feat: full Stripe catalog provider support (Phase 1 + 2)#20
snowmead wants to merge 3 commits into
mainfrom
feat/stripe-catalog-providers

Conversation

@snowmead

@snowmead snowmead commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Summary

  • Phase 1: CatalogResource adapters for every remaining Stripe Projects deployable (43 provider families, ~58 refs), following docs/ADDING-A-PROVIDER.md / docs/PROVIDER-WAVES.md. Each family is an isolated module under crates/stackless-integrations/src/providers/<family>/ with gap + hermetic tests.
  • Phase 2: Stripe-provisioned --on substrates for railway, gitlab, laravel-cloud, wordpress, and cloudflare (Workers host). Observe/destroy via Stripe registration; provider REST deploy clients deferred.
  • Exclusions unchanged: Cloudflare containers/registrar/workers plans; squarespace/domain and wordpress.com/domain (non-refundable).

Provider families (one module tree each)

Wave 1: neon, supabase, turso, upstash, auth0, workos, privy, prisma
Wave 2: planetscale, clickhouse, chroma, sentry, posthog, amplitude, mixpanel, algolia
Wave 3: openrouter, exa, firecrawl, parallel, elevenlabs, heygen, huggingface, inngest
Wave 4: e2b, daytona, browserbase, blaxel, runloop, kernel, agentmail, agentphone
Wave 5: railway, gitlab, laravel_cloud, wordpress_com, base44_projects, wix, postalform, metronome, supermemory
Wave 6: render_db (render/postgres), flyio (mpg, sprite)

OUTPUT_FIELDS are provisional (Hyperdrive posture) until mise run discover with live credentials.

Test plan

  • cargo test -p stackless-integrations --lib (143 tests)
  • cargo clippy -D warnings on new crates + stackless
  • cargo test -p stackless error_codes_are_globally_unique
  • Pre-push: fmt + clippy + taplo + nextest
  • Live mise run discover <ref> per family when Stripe + provider links available
  • Live smoke per substrate when credentials available

Note

Medium Risk
Broad surface area for paid provisioning and many new adapters, but behavior mirrors existing substrates/integrations with catalog gap tests; actual provider API deploy is deferred so runtime blast radius is limited until live discover/smoke.

Overview
Adds five new --on cloud substrates (railway, gitlab, laravel-cloud, wordpress, cloudflare) as workspace crates wired through stackless’s substrate registry. Each follows the existing Stripe Projects pattern: provision catalog resources on start, record DNS-safe names and best-effort origins, use Stripe registration for observe/destroy, enforce --confirm-paid where needed, and defer provider REST deploy, health polling, and logs until later phases.

Expands stackless-integrations with many new Stripe catalog deployable adapters (auth, data, analytics, AI, sandboxes, etc.) using the shared CatalogResource / Hostable pattern: typed configs, verify_service against the committed catalog fixture, config validation, and hermetic provision tests. stackless-cloudflare is split from Cloudflare integration resources; integration docs now point deploy hosting at the new host crate.

README capability checklists are updated to mark the new hosts and integrations as implemented (with notes where --on vs catalog-only differs).

Reviewed by Cursor Bugbot for commit 6afe94b. Bugbot is set up for automated code reviews on this repo. Configure here.

snowmead added 3 commits July 11, 2026 13:42
Phase 1 CatalogResource adapters for every unimplemented deployable
(one module tree per provider family), plus wave landing docs and
config helpers. Domain purchases and known Cloudflare exclusions stay out.
…dflare

Phase 2 --on hosts provisioned via Stripe Projects. Observe/destroy key off
Stripe registration; provider REST deploy clients deferred.
Drop unused registry imports and rename clickhouse/clickhouse to cluster
to avoid module_inception.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6afe94b. Configure here.

})?;
let stripe_resource = payload
.map(|p| p.stripe_resource)
.unwrap_or_else(|| checkpoint.resource_id.clone());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Empty payload wrong Stripe ID

Medium Severity

When a cloudflare-worker checkpoint has an empty payload, observe and destroy fall back to checkpoint.resource_id, which holds the derived worker name ({stack}-{instance}-{service}), not the Stripe registration name ({instance}-{service}). Stripe lookups and removals then target the wrong identifier.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 6afe94b. Configure here.

shorten the stack/service name"
),
}));
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DNS check ignores instance length

Medium Severity

validate_definition derives the Cloudflare worker name using a one-character placeholder instance "i", while real instances are often much longer (for example {stack}-{uuid}). Definitions can pass validation yet fail at start when the true {stack}-{instance}-{service} name exceeds the 3–63 character worker rule.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 6afe94b. Configure here.

@snowmead

Copy link
Copy Markdown
Owner Author

Superseded by per-family integration PRs #21#63 and substrates PR (follow-up). Closing the umbrella to avoid duplicate review surface.

@snowmead snowmead closed this Jul 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant