Skip to content

feat(source-stripe)!: fix missing records in invoice/subscription line items (6.0.0)#76095

Merged
Alfredo Garcia (agarctfi) merged 11 commits into
masterfrom
agarctfi/source-stripe/add-record-expander
Apr 13, 2026
Merged

feat(source-stripe)!: fix missing records in invoice/subscription line items (6.0.0)#76095
Alfredo Garcia (agarctfi) merged 11 commits into
masterfrom
agarctfi/source-stripe/add-record-expander

Conversation

@agarctfi
Copy link
Copy Markdown
Contributor

@agarctfi Alfredo Garcia (agarctfi) commented Apr 6, 2026

What

OC: https://github.com/airbytehq/oncall/issues/8683
OC: https://github.com/airbytehq/oncall/issues/10756

The invoice_line_items and subscription_items incremental streams were missing records because the old DpathFlattenFields approach flattened the entire event object into a single record, discarding nested arrays (data.object.lines.data for invoices, data.object.items.data for subscriptions). An event with N line/subscription items would emit only 1 record instead of N.

This is released as a breaking change (6.0.0) to notify affected users that previously synced data may be incomplete, and to provide guidance on full refresh options.

How

The PR upgrades the CDK from 7.14.0 → 7.17.0, following the changes in airbytehq/airbyte-python-cdk#859, which introduces the RecordExpander component.

Key changes in manifest.yaml (applied to both invoice_line_items and subscription_items incremental streams):

  • Replaces the shared events_objects_retriever ref with an inline SimpleRetriever that includes a RecordExpander on the extractor. The expander walks the nested array and emits one record per item, attaching the parent event as original_record (via remain_original_record: true).
    • invoice_line_items expands from: data.object.lines.data
    • subscription_items expands from: data.object.items.data
  • Replaces the old transformation chain (is_deleted AddFields → cursor AddFields → DpathFlattenFields) with:
    • An AddFields step that sets is_deleted: true on .deleted events (now reads event type from original_record)
    • An AddFields step that extracts the cursor field and (for invoices) the invoice_id from record['original_record'], using safe .get() access
    • A RemoveFields step that strips original_record from the final output

Breaking change (6.0.0):

  • metadata.yaml: bumps dockerImageTag to 6.0.0, adds breakingChanges entry with upgradeDeadline: 2026-04-22, scoped to invoice_line_items and subscription_items
  • docs/integrations/sources/stripe-migrations.md: adds migration guide for 6.0.0 explaining full refresh options (Retain vs Clear) and the 30-day Events API retention caveat
  • docs/integrations/sources/stripe.md: changelog entry updated to 6.0.0 with release date 2026-04-08

Review guide

  1. airbyte-integrations/connectors/source-stripe/manifest.yaml — RecordExpander + transformation changes for both invoice_line_items (≈line 1466) and subscription_items (≈line 1634) incremental streams
  2. airbyte-integrations/connectors/source-stripe/metadata.yaml — CDK bump, version bump to 6.0.0, and breakingChanges entry
  3. docs/integrations/sources/stripe-migrations.md — Migration guide for 6.0.0
  4. docs/integrations/sources/stripe.md — Changelog entry for 6.0.0

Human review checklist

  • Stripe event payload structure — Verify that subscription events actually nest items at data.object.items.data. Invoice events use data.object.lines.data. If the path is wrong, RecordExpander will silently produce no expanded records.
  • is_deleted on expanded records — Each expanded line item gets is_deleted: true when the parent event is a .deleted type. Confirm this is the desired behavior (marking every child item as deleted when the parent entity is deleted).
  • Cursor fallback or chain — The invoice_updated / subscription_updated value uses a long or chain that would skip a hypothetical timestamp of 0. This is safe for Stripe (timestamps are always positive) but worth noting as a known tradeoff for readability.
  • scopedImpact stream names — Verify that invoice_line_items and subscription_items are the correct internal stream identifiers the platform uses for scoped breaking change notifications.
  • Breaking change message clarity — Review the breakingChanges.6.0.0.message in metadata.yaml for user-facing clarity (this message is emailed to affected users).
  • Migration guide anchor link — The changelog and metadata link to #upgrading-to-600 — confirm the Docusaurus-generated anchor matches.

User Impact

Users syncing the invoice_line_items or subscription_items streams in incremental mode will now receive all individual items from each event, rather than a single flattened record per event. This fixes missing records reported in the linked oncall issues.

Users of these streams will receive a breaking change notification (email + in-app) with an upgrade deadline of 2026-04-22. They can choose to:

  1. Leave syncs alone — future syncs will be correct; historical data remains incomplete.
  2. Full Refresh and Retain — recapture all data while keeping existing destination records.
  3. Full Refresh and Clear — replace destination data, but lose event-based updates older than 30 days due to the Stripe Events API retention limit.

Can this PR be safely reverted and rolled back?

  • YES 💚
  • NO ❌

Link to Devin session: https://app.devin.ai/sessions/a28807b26e9744bd97ac3aebbc532f7f
Requested by: Alfredo Garcia (@agarctfi)

@octavia-bot
Copy link
Copy Markdown
Contributor

octavia-bot Bot commented Apr 6, 2026

Note

📝 PR Converted to Draft

More info...

Thank you for creating this PR. As a policy to protect our engineers' time, Airbyte requires all PRs to be created first in draft status. Your PR has been automatically converted to draft status in respect for this policy.

As soon as your PR is ready for formal review, you can proceed to convert the PR to "ready for review" status by clicking the "Ready for review" button at the bottom of the PR page.

To skip draft status in future PRs, please include [ready] in your PR title or add the skip-draft-status label when creating your PR.

@octavia-bot octavia-bot Bot marked this pull request as draft April 6, 2026 14:52
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

💡 Show Tips and Tricks

PR Slash Commands

Airbyte Maintainers (that's you!) can execute the following slash commands on your PR:

  • 🛠️ Quick Fixes
    • /format-fix - Fixes most formatting issues.
    • /bump-version - Bumps connector versions, scraping changelog description from the PR title.
      • Bump types: patch (default), minor, major, major_rc, rc, promote.
      • The rc type is a smart default: applies minor_rc if stable, or bumps the RC number if already RC.
      • The promote type strips the RC suffix to finalize a release.
      • Example: /bump-version type=rc or /bump-version type=minor
    • /bump-progressive-rollout-version - Alias for /bump-version type=rc. Bumps with an RC suffix and enables progressive rollout.
  • ❇️ AI Testing and Review (internal link: AI-SDLC Docs):
    • /ai-prove-fix - Runs prerelease readiness checks, including testing against customer connections.
    • /ai-canary-prerelease - Rolls out prerelease to 5-10 connections for canary testing.
    • /ai-review - AI-powered PR review for connector safety and quality gates.
  • 🚀 Connector Releases:
    • /publish-connectors-prerelease - Publishes pre-release connector builds (tagged as {version}-preview.{git-sha}) for all modified connectors in the PR.
  • ☕️ JVM connectors:
    • /update-connector-cdk-version connector=<CONNECTOR_NAME> - Updates the specified connector to the latest CDK version.
      Example: /update-connector-cdk-version connector=destination-bigquery
  • 🐍 Python connectors:
    • /poe connector source-example lock - Run the Poe lock task on the source-example connector, committing the results back to the branch.
    • /poe source example lock - Alias for /poe connector source-example lock.
    • /poe source example use-cdk-branch my/branch - Pin the source-example CDK reference to the branch name specified.
    • /poe source example use-cdk-latest - Update the source-example CDK dependency to the latest available version.
  • ⚙️ Admin commands:
    • /force-merge reason="<REASON>" - Force merges the PR using admin privileges, bypassing CI checks. Requires a reason.
      Example: /force-merge reason="CI is flaky, tests pass locally"
📚 Show Repo Guidance

Helpful Resources

📝 Edit this welcome message.

Co-Authored-By: alfredo.garcia@airbyte.io <freddy.garcia7.fg@gmail.com>
@devin-ai-integration
Copy link
Copy Markdown
Contributor

Code Review Summary

Pushed the changelog entry for 5.15.24 and updated the PR description with full context. Here are a few items to consider:

1. is_deleted handling removed

The old incremental stream set is_deleted: true on invoice.deleted events via the events_based_stream base transformation. The new code drops this entirely. If downstream consumers of invoice_line_items rely on is_deleted to detect deleted invoices, this is a behavioral change. Worth confirming this is intentional.

2. subscription_items stream — same fix needed?

The PR title says "Invoice/Subscription Line Item" but only invoice_line_items was updated. The subscription_items incremental stream (≈line 1623) still uses the old events_objects_retriever + DpathFlattenFields pattern. If subscription items also have nested arrays that need expansion, the same RecordExpander treatment may be needed there too. If it's out of scope for this PR, might be worth noting in a follow-up issue.

3. invoice_id extraction — KeyError risk

value: "{{ record['original_record']['data']['object']['id'] }}"

This uses direct dict access at every level. If any intermediate key is missing, it raises a KeyError. The guard condition (record.get('original_record')) only checks the top level. Consider using .get() for the nested path or adding a more robust condition.

4. Cursor fallback chain — falsy value edge case

value: "{{ (record['original_record'].get('updated') or record['original_record'].get('created') or ...) | int }}"

The or chain treats 0 (and other falsy values) as missing. A timestamp of 0 (epoch) would be skipped in favor of the next fallback. In practice this is unlikely for Stripe timestamps but worth noting.

Overall the approach is sound — RecordExpander is the correct solution for expanding nested line items from event payloads. The CDK bump to 7.17.0 brings in the needed component.


Devin session

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Deploy preview for airbyte-docs ready!

✅ Preview
https://airbyte-docs-l2ridqyoc-airbyte-growth.vercel.app

Built with commit f8567b5.
This pull request is being automatically deployed with vercel-action

…uard invoice_id extraction

Co-Authored-By: alfredo.garcia@airbyte.io <freddy.garcia7.fg@gmail.com>
@devin-ai-integration
Copy link
Copy Markdown
Contributor

Point 4 — Cursor fallback chain and falsy values (detailed explanation)

The invoice_updated cursor value is computed using a Python or chain:

{{ (record['original_record'].get('updated')
    or record['original_record'].get('created')
    or record['original_record'].get('data', {}).get('object', {}).get('updated')
    or record['original_record'].get('data', {}).get('object', {}).get('created')
    or now_utc().timestamp()) | int }}

In Python/Jinja2, or returns the first truthy value. The issue is that or treats all falsy values the same — None, 0, "", False, [], {} are all skipped.

Concrete scenario: If record['original_record'].get('updated') returned 0 (Unix epoch, January 1, 1970 00:00:00 UTC), the or chain would skip it and fall through to created, then to the nested paths, and ultimately to now_utc().timestamp(). The record would get the current wall-clock time as its cursor instead of the actual updated=0 value.

In practice for Stripe: This is a very low-risk edge case because:

  • Stripe timestamps are always positive integers (seconds since epoch, all well after 1970)
  • Stripe always populates created on events
  • The now_utc() final fallback is a safe catch-all

So while the pattern isn't technically correct for arbitrary inputs, it's safe for Stripe's data model. A "correct" fix would use something like:

{{ (record['original_record'].get('updated') if record['original_record'].get('updated') is not none else record['original_record'].get('created') if record['original_record'].get('created') is not none else now_utc().timestamp()) | int }}

But that's significantly less readable for minimal practical benefit. I'd recommend keeping the current or chain as-is and noting this as an accepted tradeoff.


Devin session

…ption Items

Co-Authored-By: alfredo.garcia@airbyte.io <freddy.garcia7.fg@gmail.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

source-stripe Connector Test Results

209 tests   206 ✅  20m 45s ⏱️
  2 suites    3 💤
  2 files      0 ❌

Results for commit f8567b5.

♻️ This comment has been updated with latest results.

@agarctfi
Copy link
Copy Markdown
Contributor Author

Alfredo Garcia (agarctfi) commented Apr 6, 2026

/ai-canary-prerelease

AI Canary Prerelease Started

Rolling out to 5-10 connections, watching results, and reporting findings.
View workflow run
🐤 AI Canary Prerelease session starting... Rolling out to 5-10 connections, watching results, and reporting findings. View playbook

Devin AI session created successfully!

@devin-ai-integration
Copy link
Copy Markdown
Contributor

🐤 Canary Prerelease Testing — Starting

Starting canary prerelease testing for source-stripe. Gathering context from the PR diff and linked oncall issues, then will evaluate for breaking changes before selecting 5-10 connections.

Session: https://app.devin.ai/sessions/c23b96b68e6f47ce9fa4082676cec4b8

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.24f3308
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@devin-ai-integration
Copy link
Copy Markdown
Contributor

🔄 Canary Prerelease — Phase 3 Complete

Prerelease published: 5.15.24-preview.24f3308 (workflow)

Breaking change evaluation: ✅ NOT BREAKING, REVERSIBLE

  • No schema changes, no spec changes, no state format changes
  • CDK upgrade 7.14.0 → 7.17.0 is backward-compatible
  • RecordExpander addition is additive (expands nested arrays that were previously returned as parent objects)

Connection selection (8 connections):

Label Tier Region Destination Notes
Internal-A-US-1 Internal US Re-pin from prior canary (5.15.17-preview.a37b952)
Customer-B-EU-1 TIER_0 EU S3/ClickHouse
Customer-C-US-1 TIER_0 US Snowflake
Customer-D-US-1 TIER_0 US BigQuery
Customer-E-US-1 TIER_2 US Postgres
Customer-F-EU-1 TIER_2 EU BigQuery
Customer-G-US-1 TIER_2 US Snowflake Incremental sync pattern relevant to fix
Customer-H-US-1 TIER_2 US ClickHouse

Status: ⏳ Awaiting approval to pin connections (Slack HITL request sent)

Devin session

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.24f3308
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.24f3308
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@devin-ai-integration
Copy link
Copy Markdown
Contributor

🔴 Canary Prerelease — BLOCKED on Publish Failure

Status: The prerelease publish workflow for source-stripe 5.15.24-preview.24f3308 has failed 3 consecutive times due to an ARM64 QEMU emulation error during Docker image build.

Error: Invalid ELF image for this architecture in the linux/arm64 build step. This is a transient CI infrastructure issue, not related to the PR code.

Failed workflow runs:

What is ready:

  • ✅ Approval received from Alfredo Garcia (@agarctfi) for canary pinning
  • ✅ 8 connections selected (1 internal + 3 TIER_0 + 4 TIER_2, US/EU mix)
  • ⏳ Waiting for successful prerelease publish to proceed with pinning

Will retry the publish and proceed with canary testing once the image is available.


Devin session

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.24f3308
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@devin-ai-integration
Copy link
Copy Markdown
Contributor

Canary Prerelease — Update: Persistent Publish Failure

The prerelease publish for source-stripe 5.15.24-preview.24f3308 has now failed 4 consecutive times with the same ARM64 QEMU emulation error (Invalid ELF image for this architecture).

This is a CI infrastructure issue affecting the multi-architecture Docker build, not related to the PR code.

Failed workflow runs:

  1. Run 1
  2. Run 2
  3. Run 3
  4. Run 4

Per debugging guidelines, I'm stopping retries and escalating for human assistance to resolve the CI infrastructure issue.

Canary status: Everything else is ready — approval received, 8 connections selected. Will proceed with pinning as soon as the prerelease image is published successfully.


Devin session

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.825cff4
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.825cff4
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@devin-ai-integration
Copy link
Copy Markdown
Contributor

Canary Prerelease — BLOCKED

Verdict: BLOCKED — Unable to publish prerelease image due to persistent CI infrastructure failure.

Full Details

Prerelease version: 5.15.24-preview.825cff4

Issue: The pre-release publish workflow has failed 6 consecutive times over approximately 2 hours. All failures occur in the same step: "Build and publish Python and Manifest-Only connectors images" with error Invalid ELF image for this architecture during the linux/arm64 Docker build (QEMU emulation).

Failed workflow runs:

  1. Run 15.15.24-preview.24f3308
  2. Run 25.15.24-preview.24f3308
  3. Run 35.15.24-preview.24f3308
  4. Run 45.15.24-preview.24f3308
  5. Run 55.15.24-preview.825cff4
  6. Run 65.15.24-preview.825cff4

Docker Hub verification: Neither 5.15.24-preview.24f3308 nor 5.15.24-preview.825cff4 tags exist on Docker Hub — confirming no partial publish occurred.

Root cause: ARM64 QEMU emulation failure in the CI runner environment. This is a CI infrastructure issue, not related to this PR's code.

What is ready (will proceed immediately once prerelease is published):

  • Canary pinning approval received from Alfredo Garcia (@agarctfi)
  • 8 connections selected (1 internal re-pin + 3 TIER_0 + 4 TIER_2, US/EU mix, diverse destinations)

Next steps: A reminder is set to retry the publish. Once the CI infrastructure issue is resolved and the prerelease image is available, canary testing will proceed immediately with the pre-approved pinning plan.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor

Root Cause: Pre-release publish failure

The pre-release publish is failing because the @sha256: digest pinned in metadata.yaml for the source-declarative-manifest:7.17.0 base image points to the amd64 platform-specific image digest instead of the manifest list (index) digest.

Show/Hide Detailed Report

Evidence

The pinned digest sha256:6a1903ff4fc317b66314f302aafb1e5a343e4072b6dfa0230caad7db9ffc2489 resolves to a single-platform manifest (application/vnd.oci.image.manifest.v1+json) — specifically the amd64 variant:

$ docker manifest inspect ...@sha256:6a1903ff...
{
  "schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.manifest.v1+json",  # single platform (amd64)
  ...
}

For comparison, the previous base image digests (7.14.0 and 7.15.0) correctly pin to manifest list digests (application/vnd.oci.image.index.v1+json):

$ docker manifest inspect ...@sha256:5b95dd9e...   # 7.14.0
{
  "schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.index.v1+json",  # multi-arch manifest list
  ...
}

What happens at build time

When Docker buildx builds the arm64 variant of source-stripe, it pulls the base image by the pinned @sha256: digest. Since that digest resolves to the amd64-only image (not the manifest list), the arm64 build context receives amd64 binaries. QEMU then tries to execute an amd64 /bin/sh on an arm64 platform context, producing:

.buildkit_qemu_emulator: /bin/sh: Invalid ELF image for this architecture

The amd64 build succeeds because it happens to get the correct architecture by coincidence (the pinned digest is the amd64 image).

Digest comparison

  • 7.14.0 pin sha256:5b95dd9e...image.index (manifest list) — correct, multi-arch
  • 7.15.0 pin sha256:eecde84a...image.index (manifest list) — correct, multi-arch
  • 7.17.0 pin sha256:6a1903ff...image.manifest (amd64 only) — WRONG, single platform

Correct digest for 7.17.0

The manifest list (index) digest for source-declarative-manifest:7.17.0 is:

sha256:85621b892f41ad06b1c00ca1e5bbfbc506e6961a8d6293e5e60c31050ace3b33

Fix

Update metadata.yaml line:

- baseImage: docker.io/airbyte/source-declarative-manifest:7.17.0@sha256:6a1903ff4fc317b66314f302aafb1e5a343e4072b6dfa0230caad7db9ffc2489
+ baseImage: docker.io/airbyte/source-declarative-manifest:7.17.0@sha256:85621b892f41ad06b1c00ca1e5bbfbc506e6961a8d6293e5e60c31050ace3b33

How this likely happened

The wrong digest was introduced in the first commit of this PR (ade29df). The Devin session that created the PR likely resolved the digest using docker pull or docker inspect on an amd64 machine, which returns the platform-specific digest rather than the manifest list digest. The correct way to obtain the multi-arch digest is via docker buildx imagetools inspect or the registry HTTP API.


Devin session

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.825cff4
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish FAILED for source-stripe.

@agarctfi
Copy link
Copy Markdown
Contributor Author

Alfredo Garcia (agarctfi) commented Apr 6, 2026

/publish-connectors-prerelease

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.c71f851
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish: SUCCESS

Docker image (pre-release):
airbyte/source-stripe:5.15.24-preview.c71f851

Docker Hub: https://hub.docker.com/layers/airbyte/source-stripe/5.15.24-preview.c71f851

Registry JSON:

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 6, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-stripe.
PR: #76095

Pre-release versions will be tagged as {version}-preview.c71f851
and are available for version pinning via the scoped_configuration API.

View workflow run
Pre-release Publish: SUCCESS

Docker image (pre-release):
airbyte/source-stripe:5.15.24-preview.c71f851

Docker Hub: https://hub.docker.com/layers/airbyte/source-stripe/5.15.24-preview.c71f851

Registry JSON:

@devin-ai-integration
Copy link
Copy Markdown
Contributor

🔬 Canary Prerelease — Phase 4 Complete: Pins Deployed

Approval: Received from Alfredo Garcia (@agarctfi) via Slack HITL

7 connections pinned to source-stripe:5.15.24-preview.c71f851:

# Label Tier Region Destination Previous Version Pin Status
1 Customer-B-EU-1 TIER_0 EU S3/ClickHouse 5.15.23 ✅ Pinned
2 Customer-C-US-1 TIER_0 US Snowflake 5.15.23 ✅ Pinned
3 Customer-D-US-1 TIER_2 US Redshift 5.15.23 ✅ Pinned
4 Customer-E-EU-1 TIER_2 EU BigQuery 5.15.23 ✅ Pinned
5 Customer-F-US-1 TIER_2 US ClickHouse 5.15.23 ✅ Pinned
6 Customer-G-US-1 TIER_2 US Postgres 5.15.23 ✅ Pinned
7 Customer-H-EU-1 TIER_2 EU Snowflake 5.15.23 ✅ Pinned

Note: Skipped 1 candidate (Customer-A-US-1) — it has a pre-existing workspace-level pin from a different source that I cannot safely override.

Next: Entering monitoring phase. Will track sync executions over the next 2-4 hours and post periodic updates.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor

Canary Prerelease Report — source-stripe:5.15.24-preview.c71f851

Verdict: PASS

Summary

7 connections pinned to 5.15.24-preview.c71f851 across 4 customer workspaces (2 TIER_0, 5 TIER_2; 4 US, 3 EU). Monitoring window: ~3 hours (20:10–23:20 UTC, Apr 6 2026).

Results

Connection Tier Region Post-Pin Syncs Status Records Range
Customer-A-EU-1 TIER_0 EU 3 All SUCCEEDED 113–201
Customer-A-US-1 TIER_0 US 3 All SUCCEEDED 7
Customer-B-US-1 TIER_2 US 3 All SUCCEEDED 78–100
Customer-B-EU-1 TIER_2 EU 1 SUCCEEDED 1
Customer-C-US-1 TIER_2 US 1 SUCCEEDED 298
Customer-D-US-1 TIER_2 US 3 All SUCCEEDED 481–490
Customer-D-EU-1 TIER_2 EU 3 All SUCCEEDED 50–102

Totals:

  • 17 syncs across 7 connections
  • 0 failures — 100% success rate
  • No new error patterns detected
  • Record counts and byte volumes consistent with pre-pin baselines

Observations

  • All connections continued syncing normally after the version pin was applied
  • Record counts are consistent with historical patterns (no unexpected spikes or drops)
  • Diverse destination types exercised: S3, Snowflake, Redshift, BigQuery, ClickHouse, Postgres

Recommendation

Canary results are clean. This PR is safe to proceed to merge and GA release. Pins will remain in place until the GA version is published, at which point they will be removed.

Rollback Plan

If issues emerge before GA release, all 7 connections can be reverted to their original versions (all were on the default/unpinned version before this canary).


Devin session

Comment thread airbyte-integrations/connectors/source-stripe/metadata.yaml Outdated
…line_items and subscription_items

- Bump dockerImageTag from 5.15.24 to 6.0.0 (major version)
- Add breakingChanges entry for 6.0.0 with upgradeDeadline 2026-04-22
- Scope impact to invoice_line_items and subscription_items streams
- Update changelog with release date 2026-04-08
- Add migration guide for 6.0.0 with full refresh options

Co-Authored-By: alfredo.garcia@airbyte.io <freddy.garcia7.fg@gmail.com>
@devin-ai-integration devin-ai-integration Bot requested a review from a team as a code owner April 7, 2026 18:44
@devin-ai-integration devin-ai-integration Bot changed the title fix(source-Stripe): Missing Records - Invoice/Subscription Line Item with RecordExpander feat(source-stripe)!: fix missing records in invoice/subscription line items (6.0.0) Apr 7, 2026
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Comment thread docs/integrations/sources/stripe-migrations.md Outdated
devin-ai-integration Bot and others added 2 commits April 9, 2026 16:58
…date

Co-Authored-By: alfredo.garcia@airbyte.io <freddy.garcia7.fg@gmail.com>
Copy link
Copy Markdown
Contributor

@katmarkham Kat Wilson (katmarkham) left a comment

Choose a reason for hiding this comment

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

reviewed IRL with Alfredo

Copy link
Copy Markdown
Contributor

@pnilan Patrick Nilan (pnilan) left a comment

Choose a reason for hiding this comment

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

Just one nit.

Thanks!

Comment thread docs/integrations/sources/stripe-migrations.md Outdated
@agarctfi Alfredo Garcia (agarctfi) merged commit 7cda9b0 into master Apr 13, 2026
43 checks passed
@agarctfi Alfredo Garcia (agarctfi) deleted the agarctfi/source-stripe/add-record-expander branch April 13, 2026 19:39
@devin-ai-integration
Copy link
Copy Markdown
Contributor

Canary Prerelease Cleanup — Complete

PR has been merged. All 7 canary connections have been unpinned from 5.15.24-preview.c71f851 and returned to the default/GA version.

# Label Previous Pin Status
1 Customer-A-EU-1 5.15.24-preview.c71f851 Unpinned
2 Customer-A-US-1 5.15.24-preview.c71f851 Unpinned
3 Customer-B-US-1 5.15.24-preview.c71f851 Unpinned
4 Customer-B-EU-1 5.15.24-preview.c71f851 Unpinned
5 Customer-C-US-1 5.15.24-preview.c71f851 Unpinned
6 Customer-D-US-1 5.15.24-preview.c71f851 Unpinned
7 Customer-D-EU-1 5.15.24-preview.c71f851 Unpinned

Canary prerelease lifecycle complete. No further action needed.


Devin session

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants