Skip to content

fix(source-tiktok-marketing): add buying_types filter to campaigns stream#76062

Merged
Anatolii Yatsuk (tolik0) merged 6 commits into
masterfrom
devin/1775172450-fix-tiktok-campaigns-buying-types
Apr 29, 2026
Merged

fix(source-tiktok-marketing): add buying_types filter to campaigns stream#76062
Anatolii Yatsuk (tolik0) merged 6 commits into
masterfrom
devin/1775172450-fix-tiktok-campaigns-buying-types

Conversation

@devin-ai-integration
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot commented Apr 2, 2026

What

Resolves https://github.com/airbytehq/oncall/issues/11857

The campaigns stream was only returning AUCTION buying type campaigns because the TikTok Marketing API's /campaign/get/ endpoint defaults to AUCTION-only when no explicit buying_types filter is provided. TopView (RESERVATION_TOP_VIEW) and Reach & Frequency (RESERVATION_RF) campaigns were silently excluded.

How

Added a ListPartitionRouter to the campaigns stream in manifest.yaml that iterates over each buying type (AUCTION, RESERVATION_TOP_VIEW, RESERVATION_RF), making a separate API call per type. This is required because the TikTok API does not allow RESERVATION_TOP_VIEW to be combined with other buying type values in a single request.

The filtering request parameter now references stream_partition.buying_type to include the current partition's buying type:

  • include_deleted=False: sends {"buying_types": ["<buying_type>"]}
  • include_deleted=True: sends {"secondary_status": "CAMPAIGN_STATUS_ALL", "buying_types": ["<buying_type>"]}

The single_id_partition_router ($ref) was inlined into the campaigns stream definition so that the ListPartitionRouter and SingleAdvertiserIdPerPartition router can be composed together (cartesian product of buying_type × advertiser_id).

Version bumped from 5.0.5 → 5.0.6 (patch, non-breaking).

Declarative-First Evaluation

This connector is language:manifest-only. The fix uses only declarative YAML components (ListPartitionRouter + Jinja template) — no custom Python component needed.

Review guide

  1. airbyte-integrations/connectors/source-tiktok-marketing/manifest.yaml — the core fix. The filtering Jinja template (line 281) now references stream_partition.buying_type. The partition_router (lines 286–308) is expanded from a $ref to an inline list containing the new ListPartitionRouter and the existing SingleAdvertiserIdPerPartition.
  2. airbyte-integrations/connectors/source-tiktok-marketing/unit_tests/integration/test_campaigns.py — new integration tests using HttpMocker. Mocks all 3 buying-type requests per advertiser and verifies the exact filtering query parameter for both include_deleted settings.
  3. airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml — version bump.
  4. docs/integrations/sources/tiktok-marketing.md — changelog entry.

Recommended human review checklist

  • Verify that {"buying_types": [stream_partition.buying_type]}|string in Jinja produces the same JSON-formatted output that the API expects. The tests use json.dumps() as the expected value — confirm these match at runtime (the CDK's |string filter behavior on dicts containing variables).
  • The CartesianProductStreamSlicer emits warnings that "Parent state handling is not supported". Verify that incremental sync / state management still works correctly for the campaigns stream with the new partition router composition.
  • This change triples the number of API calls per advertiser (one per buying type instead of one total). Confirm this is acceptable given TikTok's rate limiting behavior (the connector already has rate-limit handling).
  • The single_id_partition_router definition was inlined for the campaigns stream only. If the shared definition changes in the future, the campaigns stream won't automatically inherit those changes.
  • This fix has only been validated with mocked HTTP tests — no live API test was run. Consider a canary prerelease to validate against real TikTok accounts with TopView/R&F campaigns.

Note on CodeQL bot comments: CodeQL flagged state=None in get_source() calls as an unsupported parameter, but this is a false positive — it incorrectly resolved get_source to source-gitlab/unit_tests/conftest.py instead of the local source-tiktok-marketing/unit_tests/conftest.py, which does accept state=None.

User Impact

Users syncing the campaigns stream will now receive TopView and Reach & Frequency campaigns in addition to Auction campaigns. This is additive — no existing data is removed or changed. Sync duration may increase slightly due to additional API calls per advertiser (3× instead of 1×).

Can this PR be safely reverted and rolled back?

  • YES 💚

Link to Devin session: https://app.devin.ai/sessions/868948e6499b40f29a285000146a0b5b

…ream

The TikTok Marketing API /campaign/get/ endpoint defaults to returning
only AUCTION buying type campaigns. This adds an explicit buying_types
filter to include RESERVATION_TOP_VIEW and RESERVATION_REACH_FREQUENCY
campaigns as well.

The filter is always sent regardless of the include_deleted setting,
ensuring all campaign types are returned.

Co-Authored-By: bot_apk <apk@cognition.ai>
@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 2, 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.

devin-ai-integration Bot and others added 2 commits April 2, 2026 23:33
Co-Authored-By: bot_apk <apk@cognition.ai>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 2, 2026

Deploy preview for airbyte-docs ready!

Project:airbyte-docs
Status: ✅  Deploy successful!
Preview URL:https://airbyte-docs-gnuu04syc-airbyte-growth.vercel.app
Latest Commit:6fd83e6

Deployed with vercel-action

github-code-quality[bot]

This comment was marked as resolved.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 3, 2026

source-tiktok-marketing Connector Test Results

53 tests   46 ✅  1m 1s ⏱️
 2 suites   7 💤
 2 files     0 ❌

Results for commit 6fd83e6.

♻️ This comment has been updated with latest results.

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

↪️ Triggering /ai-prove-fix per Hands-Free AI Triage Project triage next step.

Reason: CI is green (35 passed, 0 failed). Fix adds buying_types filter to the campaigns stream manifest to include TopView and R&F campaigns. Ready for pre-release validation.
Linked issue: https://github.com/airbytehq/oncall/issues/11857


Devin session

@octavia-bot
Copy link
Copy Markdown
Contributor

octavia-bot Bot commented Apr 4, 2026

🔍 AI Prove Fix session starting... Running readiness checks and testing against customer connections. View playbook

Devin AI session created successfully!

@octavia-bot
Copy link
Copy Markdown
Contributor

octavia-bot Bot commented Apr 4, 2026

🔍 AI Prove Fix session starting... Running readiness checks and testing against customer connections. View playbook

Devin AI session created successfully!

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

devin-ai-integration Bot commented Apr 4, 2026

Prove-Fix Validation — source-tiktok-marketing v5.0.6

Session: Devin Session
Oncall Issue: #11857
Status: Fix Disproven


Pre-flight Checks

Check Result
Viability PASS — Fix adds buying_types filter to campaigns stream request params
Safety PASS — No malicious code, single-line Jinja template change
Breaking Change PASS — Non-breaking (patch version bump 5.0.5 to 5.0.6)
Reversibility PASS — Can be safely rolled back by removing the filter

Pre-release

  • Docker tag: 5.0.6-preview.a454306
  • Publish workflow: Run #23978190735 — SUCCESS

Regression Tests

  • Comparison mode (target vs control): Run #23978229578
  • Status: In Progress (READ step running)

Evidence: Fix Disproven

BLUF: The fix uses an invalid TikTok API enum value (RESERVATION_REACH_FREQUENCY), causing the campaigns stream to return 0 records.

Local Docker test (side-by-side comparison):

Version Campaign Records Status
v5.0.5 (baseline) 6 records OK
v5.0.6-preview.a454306 (pre-release) 0 records REGRESSION

Root Cause: The TikTok Marketing API returns error code 40002 when RESERVATION_REACH_FREQUENCY is passed in the buying_types filter:

filtering.buying_types.2: one or more value of the param is not acceptable,
correct is ['RESERVATION_RF', 'AUCTION', 'RESERVATION_TOP_VIEW'],
error is RESERVATION_REACH_FREQUENCY

Required Fix: In manifest.yaml line 281, change RESERVATION_REACH_FREQUENCY to RESERVATION_RF.

The valid buying_types values per the TikTok API are:

  • AUCTION (correct in PR)
  • RESERVATION_TOP_VIEW (correct in PR)
  • RESERVATION_RF (NOT RESERVATION_REACH_FREQUENCY as used in PR)

Recommendation

This fix needs a code change before it can be merged. The buying_types array in the Jinja template should use RESERVATION_RF instead of RESERVATION_REACH_FREQUENCY. After the fix, a new pre-release should be published and re-tested.


Last updated: 2026-04-04 13:38 UTC


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

devin-ai-integration Bot commented Apr 4, 2026

Prove-Fix Validation: source-tiktok-marketing v5.0.6

Status: Evidence gathering in progress

Devin session


Pre-flight Checks

Check Result Notes
Viability PASS Fix adds buying_types filter to campaigns stream — addresses root cause (missing TopView/R&F campaigns)
Safety PASS Manifest-only YAML change, no custom Python code, no suspicious patterns
Breaking Change NOT BREAKING Additive filter, no schema changes, no field removals, no state format changes
Reversibility REVERSIBLE Patch version bump (5.0.5 → 5.0.6), no state migration needed

Evidence Plan

Proving evidence (fix works):

  • Regression tests pass in comparison mode (dev vs published baseline)
  • Live connection sync succeeds and campaigns stream returns records including non-AUCTION buying types (TopView, R&F)
  • No new errors or regressions introduced

Disproving evidence (fix does not work):

  • Regression tests fail or show regressions
  • Live sync fails or campaigns stream returns only AUCTION campaigns (same as before fix)
  • New errors appear in sync logs

Workflows Triggered

Workflow Status URL
Pre-release publish (5.0.6-preview.a454306) In progress View
Regression tests (comparison mode) Triggered View

Candidate Connections for Live Testing

  • 2 internal Airbyte org connections with campaigns stream enabled identified
  • Multiple external connections with recent successful syncs available as fallback
  • All candidates: not pinned, active, recent successful syncs

Next Steps

  • Wait for pre-release publish to complete
  • Wait for regression tests to complete and review results
  • Escalate for live connection testing approval
  • Pin candidate connection(s) to pre-release, trigger sync, monitor results
  • Generate final evidence report

Last updated: 2026-04-04 11:48 UTC

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 4, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-tiktok-marketing.
PR: #76062

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

View workflow run
Pre-release Publish: SUCCESS

Docker image (pre-release):
airbyte/source-tiktok-marketing:5.0.6-preview.a454306

Docker Hub: https://hub.docker.com/layers/airbyte/source-tiktok-marketing/5.0.6-preview.a454306

Registry JSON:

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 4, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-tiktok-marketing.
PR: #76062

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

View workflow run
Pre-release Publish: SUCCESS

Docker image (pre-release):
airbyte/source-tiktok-marketing:5.0.6-preview.a454306

Docker Hub: https://hub.docker.com/layers/airbyte/source-tiktok-marketing/5.0.6-preview.a454306

Registry JSON:

$ref: "#/definitions/requester"
request_parameters:
filtering: '{{ {"secondary_status": "CAMPAIGN_STATUS_ALL"}|string if config.get("include_deleted", False) }}'
filtering: '{{ {"secondary_status": "CAMPAIGN_STATUS_ALL", "buying_types": ["AUCTION", "RESERVATION_TOP_VIEW", "RESERVATION_REACH_FREQUENCY"]}|string if config.get("include_deleted", False) else {"buying_types": ["AUCTION", "RESERVATION_TOP_VIEW", "RESERVATION_REACH_FREQUENCY"]}|string }}'
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fix Disproven: The TikTok Marketing API rejects RESERVATION_REACH_FREQUENCY as an invalid buying_types value. The correct enum value is RESERVATION_RF.

Evidence from local Docker testing (pre-release 5.0.6-preview.a454306 vs baseline 5.0.5):

  • Baseline (v5.0.5): 6 campaign records returned
  • Pre-release (v5.0.6-preview): 0 campaign records returned

API error:

filtering.buying_types.2: one or more value of the param is not acceptable,
correct is ['RESERVATION_RF', 'AUCTION', 'RESERVATION_TOP_VIEW'],
error is RESERVATION_REACH_FREQUENCY

Required change: Replace all occurrences of RESERVATION_REACH_FREQUENCY with RESERVATION_RF in the buying_types filter (both in the if and else branches of this Jinja template).

Detailed evidence in oncall issue airbytehq/oncall#11857.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

🔍 Prove-Fix Validation Report

Connector: source-tiktok-marketing | Version: 5.0.55.0.6 | Pre-release: 5.0.6-preview.a454306

⚠️ REGRESSION DETECTED — Fix NOT Ready for Merge


Bottom Line Up Front (BLUF)

The buying_types filter introduced in this PR causes a regression on the campaigns stream: all campaigns with null buying_type are excluded from results, dropping the stream from 5 → 0 records in regression testing. This affects accounts where campaigns were created before TikTok introduced buying type categorization (or where buying type is otherwise unset). Live connection testing was NOT performed due to this finding.


Pre-flight Checks

Check Result
Viability ✅ Fix addresses reported issue (TopView campaigns missing)
Design Intent ✅ Not intentional behavior — TikTok API defaults to AUCTION only
Safety ✅ No malicious code or suspicious patterns
Breaking Change ✅ Non-breaking (patch version bump)
Reversibility ✅ Safely reversible (revert single manifest line)

Regression Test Results

Two independent regression test runs, both in comparison mode (target vs control):

Run Workflow Result Campaigns (Control → Target)
1 23978195556 ⚠️ Both exited 0, but campaigns regressed 5 → 0 (Δ -5)
2 23978229578 REGRESSION DETECTED (target exit code 1) 5 → 0 (Δ -5)

All other streams (33 streams) showed identical record counts between control and target — the regression is isolated to the campaigns stream.

Root Cause Analysis

The test account's 5 campaigns all have buying_type: null (older campaigns created before TikTok introduced buying type categorization). The Jinja filter in the fix:

# When include_deleted=False (default):
filtering: '{"buying_types": ["AUCTION", "RESERVATION_TOP_VIEW", "RESERVATION_REACH_FREQUENCY"]}'

This explicitly restricts the API response to only campaigns matching those buying types. Campaigns with null buying type are excluded by the TikTok API, causing them to disappear from results.

Recommended Fix

The buying_types filter should not be sent when include_deleted is False (the default path), since the original behavior (no filter) already returns all campaign types. Instead, only add the buying_types filter to the include_deleted=True path alongside the secondary_status filter.

Alternatively, investigate whether TikTok's API supports a way to include campaigns with no buying type alongside the explicitly typed ones.

Live Connection Testing

NOT performed. Regression testing revealed the fix introduces a data loss regression. Pinning customer connections to this pre-release would cause campaigns to disappear from sync results.


Devin session

…PI calls per type

- Fix RESERVATION_REACH_FREQUENCY -> RESERVATION_RF (correct enum value)
- RESERVATION_TOP_VIEW cannot be combined with other buying types per API
- Add ListPartitionRouter to make separate API calls per buying type
- Update tests to verify per-buying-type partitioning

Co-Authored-By: bot_apk <apk@cognition.ai>
Copy link
Copy Markdown
Contributor Author

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

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

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 3 additional findings.

Open in Devin Review

Co-Authored-By: bot_apk <apk@cognition.ai>
mock_advertisers_slices(http_mocker, self.config())
self._mock_campaigns_for_all_buying_types(http_mocker, include_deleted=False)

output = read(get_source(config=self.config(), state=None), self.config(), self.catalog())
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This is a false positive — CodeQL is resolving get_source to source-gitlab/unit_tests/conftest.py instead of the local source-tiktok-marketing/unit_tests/conftest.py, which does accept state=None. The import on line 11 (from ..conftest import get_source) resolves to the tiktok-marketing conftest, not gitlab's.

self._mock_campaigns_for_all_buying_types(http_mocker, include_deleted=True)

output = read(
get_source(config=self.config(include_deleted=True), state=None),
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Same false positive as above — CodeQL is resolving to the wrong connector's get_source. The actual get_source imported from source-tiktok-marketing/unit_tests/conftest.py accepts state=None.

@tolik0 Anatolii Yatsuk (tolik0) marked this pull request as ready for review April 9, 2026 15:10
@tolik0
Copy link
Copy Markdown
Contributor

Anatolii Yatsuk (tolik0) commented Apr 9, 2026

/publish-connectors-prerelease

Pre-release Connector Publish Started

Publishing pre-release build for connector source-tiktok-marketing.
PR: #76062

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

View workflow run
Pre-release Publish: SUCCESS

Docker image (pre-release):
airbyte/source-tiktok-marketing:5.0.6-preview.af8a636

Docker Hub: https://hub.docker.com/layers/airbyte/source-tiktok-marketing/5.0.6-preview.af8a636

Registry JSON:

…5.0.7

Co-Authored-By: gl_anatolii.yatsuk <gl_anatolii.yatsuk@airbyte.io>
@tolik0
Copy link
Copy Markdown
Contributor

Anatolii Yatsuk (tolik0) commented Apr 28, 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 Author

Canary Prerelease: Starting

Beginning canary prerelease testing for source-tiktok-marketing.

Plan:

  1. Evaluate change for breaking/reversibility safety
  2. Verify or publish prerelease for latest commit (version 5.0.8)
  3. Select 5-10 canary connections
  4. Request approval and pin connections
  5. Monitor syncs and report results

Devin session

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 28, 2026

Pre-release Connector Publish Started

Publishing pre-release build for connector source-tiktok-marketing.
PR: #76062

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

View workflow run
Pre-release Publish: SUCCESS

Docker image (pre-release):
airbyte/source-tiktok-marketing:5.0.8-preview.6fd83e6

Docker Hub: https://hub.docker.com/layers/airbyte/source-tiktok-marketing/5.0.8-preview.6fd83e6

Registry JSON:

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

Canary Prerelease: Phase 2-4 Update

Prerelease: source-tiktok-marketing 5.0.8-preview.6fd83e6

Phase 2: Breaking Change & Reversibility Gate — PASSED

  • Breaking change check: No breaking signals found. Patch version bump (5.0.7 → 5.0.8), no schema changes, no state format changes, no spec changes. The change is additive — adds buying_types filter via ListPartitionRouter to return previously excluded campaign types.
  • Reversibility check: Passed. Rolling back simply removes the filter, returning to previous behavior. No state or config compatibility issues.

Phase 3: Canary Connection Selection

Selected 8 connections across 6 distinct workspaces with diverse configurations:

Connection Dest Type Region Tier Notes
Customer-A-US-1 BIPROD US Premium Re-pin from prior prerelease 5.0.6-preview.af8a636 (affected customer)
Customer-B-EU-1 BigQuery EU TIER_2 EU region coverage
Customer-C-US-1 Postgres US TIER_2 Postgres dest diversity
Customer-C-US-2 Postgres Atlas US TIER_2 Same workspace, different dest
Partner-D-US-1 BigQuery US TIER_0 Hourly sync frequency
Partner-E-US-1 BigQuery US-Central TIER_0 US-Central dataplane
Partner-F-US-1 BigQuery US-Central TIER_0 US-Central dataplane
Partner-G-US-1 BigQuery US TIER_0 BigQuery dest

Diversity: 3 tiers, 3 dataplanes (US, US-Central, EU), 4 destination types, 6 workspaces.

Phase 4: Awaiting HITL Approval

Approval requested via Slack #human-in-the-loop. Will proceed with pinning once approved.

For full customer details, see the linked private issue.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

/approve-regression-tests


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

Canary Prerelease: Status Update — Awaiting Approval

Status: BLOCKED — awaiting HITL approval

Approval was requested via Slack #human-in-the-loop approximately 2 hours ago (with a follow-up reminder at 1 hour). The canary set of 8 connections and prerelease 5.0.8-preview.6fd83e6 are ready to deploy once approved.

What's ready:

  • Prerelease 5.0.8-preview.6fd83e6 published and verified on Docker Hub
  • 8 canary connections selected (3 tiers, 3 dataplanes, 4 destination types)
  • Breaking change gate passed (non-breaking, reversible patch)

What's needed:

  • Approval from an authorized team member in Slack #human-in-the-loop
  • Once approved, pinning + monitoring will begin immediately

A reminder is set to check back tomorrow morning. If you can approve the canary request in #human-in-the-loop, testing will proceed automatically.

For full customer details, see the linked private issue.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

Canary Prerelease: Phase 4 Complete — All 8 Connections Pinned

Prerelease: source-tiktok-marketing 5.0.8-preview.6fd83e6
Approved by: @gl_anatolii.yatsuk via Slack #human-in-the-loop

All 8 canary connections have been successfully pinned:

Connection Previous Version New Version Pin Type Status
Customer-A-US-1 5.0.6-preview.af8a636 5.0.8-preview.6fd83e6 Re-pin (force) ✅ Pinned
Customer-B-EU-1 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned
Customer-C-US-1 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned
Customer-C-US-2 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned
Partner-D-US-1 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned
Partner-E-US-1 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned
Partner-F-US-1 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned
Partner-G-US-1 5.0.7 5.0.8-preview.6fd83e6 New pin ✅ Pinned

Phase 5: Monitoring now starting. Will trigger syncs for idle connections and post updates every 1-2 hours.

For full customer details, see the linked private issue.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

Canary Monitoring Update (2026-04-29 ~13:00 UTC, +1 hour)

Prerelease: source-tiktok-marketing 5.0.8-preview.6fd83e6
Monitoring duration: ~45 minutes since pinning at 12:12 UTC

Connection Post-Pin Syncs Succeeded Failed Dest Type Notes
Customer-A-US-1 1 1 0 Snowflake Manually triggered; 23K records synced
Customer-B-EU-1 1 1 0 BigQuery Manually triggered; 311 records synced
Customer-C-US-1 0 Postgres Hourly schedule; next sync imminent
Customer-C-US-2 0 Postgres Atlas Hourly schedule; next sync imminent
Partner-D-US-1 4 4 0 BigQuery ~15 min schedule; consistent ~67 records
Partner-E-US-1 3 3 0 BigQuery ~15 min schedule; consistent ~1,349 records
Partner-F-US-1 3 3 0 BigQuery ~15 min schedule; consistent ~1,348 records
Partner-G-US-1 3 3 0 BigQuery ~15 min schedule; consistent ~1 record

Totals: 15 post-pin syncs observed, 15 succeeded, 0 failed (100% success rate)

Overall status: HEALTHY — No errors, no regressions, record counts and byte volumes consistent with pre-pin baselines. Two hourly connections pending their first post-pin sync.

Next update at ~14:00 UTC (+2 hours).

For full customer details, see the linked private issue.


Devin session

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

Canary Prerelease: Final Report

Connector: source-tiktok-marketing
Prerelease Version: 5.0.8-preview.6fd83e6
Monitoring Period: 2026-04-29 12:12 UTC to 13:30 UTC (approximately 1 hour 20 minutes)
Connections Tested: 8

Summary

The prerelease 5.0.8-preview.6fd83e6 performed flawlessly across all 8 canary connections during the monitoring period. A total of 25 post-pin syncs were observed, all succeeding with 100% success rate. Record counts and byte volumes remained consistent with pre-pin baselines, with no errors, regressions, or performance degradation detected. This includes the affected customer (Customer-A-US-1) who was previously pinned to 5.0.6-preview.af8a636.

Detailed Results

Connection Total Post-Pin Syncs Success Rate Dest Type Schedule Notes
Customer-A-US-1 1 100% Snowflake Daily Re-pinned from 5.0.6-preview; 23,484 records synced
Customer-B-EU-1 1 100% BigQuery 8-hourly 311 records synced
Customer-C-US-1 1 100% Postgres Hourly 1 record synced
Customer-C-US-2 1 100% Postgres Atlas Hourly 3 records synced
Partner-D-US-1 6 100% BigQuery 15-min Consistent 67-68 records/sync
Partner-E-US-1 5 100% BigQuery 15-min Consistent 1,349-1,379 records/sync
Partner-F-US-1 5 100% BigQuery 15-min Consistent 1,348-1,378 records/sync
Partner-G-US-1 5 100% BigQuery 15-min Consistent 1 record/sync

Total syncs observed: 25
Overall success rate: 100% (25/25)
Failures: 0

Canary Verdict

Overall Status: PASS

The prerelease performed well across all canary connections. Recommend proceeding to formal release.

Next steps:

  1. Merge the PR to publish the release
  2. Canary pins will be removed after the PR is merged

For full customer details, see the linked private issue.


Devin session

@tolik0 Anatolii Yatsuk (tolik0) merged commit 2cb6294 into master Apr 29, 2026
43 checks passed
@tolik0 Anatolii Yatsuk (tolik0) deleted the devin/1775172450-fix-tiktok-campaigns-buying-types branch April 29, 2026 14:37
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.

3 participants