Skip to content

chore(source-hubspot): DO NOT MERGE - pin prerelease SDM 7.39.0.post5.dev39879313492 (airbyte-python-cdk#1248) - #89697

Closed
devin-ai-integration[bot] wants to merge 1 commit into
masterfrom
pnilan/sdm-prerelease-1248-source-hubspot
Closed

devin-ai-integration[bot] wants to merge 1 commit into
masterfrom
pnilan/sdm-prerelease-1248-source-hubspot

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

🤖 This PR was generated by an AI Agent.

DO NOT MERGE. Test-only PR, requested by Patrick Nilan (@pnilan). It pins source-hubspot to the SDM prerelease built from airbyte-python-cdk#1248 so a connector prerelease can be published and tested.

What

Points connectorBuildOptions.baseImage at airbyte/source-declarative-manifest:7.39.0.post5.dev39879313492. That image was built by CDK publish run 39879313492 from devin/1792688475-check-skip-dynamic-streams.

How

  • metadata.yaml:
    • baseImage changes from SDM 7.37.1 to 7.39.0.post5.dev39879313492@sha256:a45420a851310e75d893c93c73e8a353d610bc214788c39384f7bd776b614d7f.
    • dockerImageTag goes from 6.13.0 to 6.13.1.
  • No manifest, changelog or docs change.

Review guide

  1. airbyte-integrations/connectors/source-hubspot/metadata.yaml

User Impact

None. This is never merged. Use /publish-connectors-prerelease to get a 6.13.1-preview.<sha> image for pinning.

The title contains "DO NOT MERGE", so the semantic-title check fails on purpose. Checks that expect a changelog entry may fail too.

Can this PR be safely reverted and rolled back?

  • YES 💚
  • NO ❌

Link to Devin session: https://app.devin.ai/sessions/a359f078a4634bbab6d79afaaf709c17
Open in Devin Desktop: https://app.devin.ai/desktop/session/a359f078a4634bbab6d79afaaf709c17?variant=devin


Important

Autopilot Progressive Rollout Enabled

Autopilot progressive rollouts are enabled for one or more connector(s) modified in this PR. Check the box below if you need to bypass normal rollout safety processes and release to all users immediately upon merge:

  • ⚡ Release immediately (bypasses automatic progressive rollout)

Note:

  • ⚠️ The above bypass option is for emergency/hotfix use only.
  • 🔗 You can monitor or manually advance a rollout at ops.internal.airbyte.ai.

….dev39879313492 (airbyte-python-cdk#1248)

Co-Authored-By: patrick.nilan@airbyte.io <patrick.nilan@airbyte.io>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@github-actions

Copy link
Copy Markdown
Contributor

👋 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.
    • /ai-breaking-change-review - Step 1 for a connector breaking change. Reviews whether the change needs to be breaking, destination data-loss risk, and whether the migration guide, metadata message, and docs let users upgrade safely. Opens one conversation on the PR for each item the author needs to handle.
    • /ai-breaking-change-ready - Step 2, after you've replied to and resolved each of those conversations. Checks that every one has a reply and is resolved, then pings the breaking-change reviewers in Slack for human review.
  • 📝 AI Documentation:
    • /ai-docs-review - AI-powered documentation review for PRs with connector changes.
    • /ai-create-docs-pr - Creates a documentation PR for connector changes, stacked on the current PR.
  • 🚀 Connector Releases:
    • /publish-connectors-prerelease - Publishes pre-release connector builds (tagged as {version}-preview.{git-sha}) for all modified connectors in the PR.
    • /enable-autopilot-rollouts - Enables autopilot progressive rollouts for the modified connector(s) in the PR, remediating "autopilot rollouts not enabled for {connector-name}" auto-merge blockers. Sets defaultRolloutMode: autopilot and enableProgressiveRollout: true, preserving any existing autopilotConfig.
      • Optional args: connector=<CONNECTOR_NAME> (defaults to the modified connectors in the PR), strategy=fast|slow|default (defaults to fast).
      • Example: /enable-autopilot-rollouts or /enable-autopilot-rollouts connector=source-faker strategy=slow
  • ☕️ 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.

@pnilan

Patrick Nilan (pnilan) commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

/ai-prove-fix specifically want to confirm this stack of PRs functions as expected.

Connector What it exercises Expected result
source-google-ads streams() override; a config with end_date: "" SUCCEEDED after the P0 fix (FAILED on this head)
source-amazon-seller-partner CheckDynamicStream, stream_count: 1, api_budget, spec validators Same status as 7.39.0
source-airtable CheckDynamicStream over dynamic streams only Same status as 7.39.0
source-hubspot HttpComponentsResolver and api_budget Same status as 7.39.0
source-bing-ads Slowest check in the epic benchmark; dynamic streams Same status, faster
source-github config_overrides on the check component Same status as 7.39.0

AI Prove Fix Started

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

✅ Devin AI session created successfully!

@airbyte-support-bot

Airbyte Support Bot (airbyte-support-bot) commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

🧪 Fix Validation Evidence

🟢 Outcome: Fix Proven

source-hubspot 6.13.1 on SDM 7.39.0.post5.dev39879313492 (the airbyte-python-cdk#1248 stack) was compared against 6.13.0 (SDM 7.37.1) using GSM credentials.

  • CHECK: SUCCEEDED on both versions. On the target it only builds the static contacts stream: 3 HTTP flows instead of 4, and none of the 12 stream-build logs the control emits.
  • DISCOVER: the 52-stream catalog, including the dynamic custom-object streams, is byte-identical.
  • READ: the narrowed READ (contacts, pets, cars, owners, deal_pipelines, companies) matched exactly: 4148 records and 152 states on both versions, with 0 PK or value diffs.
  • Invalid token: check still FAILS on the target.

This covers only the source-hubspot row of the requested matrix. The other five connectors are not part of this PR and were not tested.

🚦 Next Steps
  • HubSpot row (HttpComponentsResolver + api_budget, expected "same status"): ✅ confirmed. This PR is test-only and should not be merged.
  • To cover the rest of the matrix, open equivalent SDM-pin test PRs for source-google-ads, source-amazon-seller-partner, source-airtable, source-bing-ads and source-github, and run /ai-prove-fix on each.
  • Specific cases that still need their own runs:
    • google-ads end_date: "", which is expected to FAIL on this head before the P0 fix
    • bing-ads check latency
    • github config_overrides
  • The full all-streams HubSpot READ hit the 180-min harness timeout while the control was still running, so streams outside the narrowed set were not read in comparison.

📋 Connector & PR Details

Connector: source-hubspot
PR: #89697 (pins SDM 7.39.0.post5.dev39879313492, built from airbyte-python-cdk#1248 HEAD 2a09438a784f1f1eb0b6ded2f41360234753190d)
PR HEAD Validated: fbf36fd9b0cf07220b9c5a259e2c7fc6e1c847c9
Pre-release Version Tested: n/a — regression tests built the target from PR HEAD
Comparison Baseline: latest (auto) (airbyte/source-hubspot:6.13.0, SDM 7.37.1)
Evidence Harness: run_regression_tests
Read Result: PASS — 4148 RECORD / 152 STATE
True-Positive Case: PASS — invalid Private App token still rejected on target via local docker check of airbyte/source-declarative-manifest:7.39.0.post5.dev39879313492 with the hubspot manifest + components injected
Detailed Results: https://github.com/airbytehq/airbyte-internal-issues/issues/17934#issuecomment-6357347838

📝 Evidence Plan

Proving Criteria

  • Target SPEC, CHECK, DISCOVER and READ all have the same status as control.
  • CHECK succeeds while building only the static contacts stream.
  • The DISCOVER catalog is unchanged, and the dynamic custom-object streams are still present.
  • READ shows no record-count, PK, field-value or state regressions, including on the dynamic streams.

Disproving Criteria

Any of the following on the target:

  • CHECK fails where control passes.
  • DISCOVER loses streams or changes a schema.
  • READ shows a record-count drop, missing PKs or value diffs.
  • New errors appear, such as rate limiting that would suggest api_budget is no longer applied.

Cases Attempted

  1. Attempt 1 (GSM, all streams):
    • SPEC ✅
    • CHECK ✅ SUCCEEDED/SUCCEEDED (target 3 HTTP flows / 3 LOGs vs control 4 / 15)
    • DISCOVER ✅ identical 52-stream catalog
    • READ ⏱️ timed out at 180 min during the control's live read, so there is no READ verdict.
  2. Attempt 2 (GSM, selected_streams narrowed after the READ timeout):
    • CHECK ✅ with the same flow and log delta as attempt 1
    • READ ✅ with equal per-stream counts: cars 4, companies 141, contacts 3996, deal_pipelines 1, owners 4, pets 2
    • Record comparison PASSED: 0 missing PKs, 0 duplicate PKs, 0 value diffs
    • 73 TRACE messages on each side, all STREAM_STATUS
  3. True-positive (local): check with a bogus Private App token, run against both SDM images.

True-Positive Case

The stack stops check from resolving or building dynamic streams (D2), so check could in principle become more permissive. A local docker run … check with an invalid Private App token was run against both images, using the repo's hubspot manifest and components:

  • Target 7.39.0.post5.dev39879313492: FAILED — Stream contacts is not available: Please, update you Private App access token. Current token is invalid or expired.
  • Control 7.37.1: FAILED — Encountered an error while discovering streams. Error: Please, update you Private App access token…

Invalid credentials are still rejected on the target. The failure now comes from the static contacts availability check rather than from dynamic-stream discovery, as intended.

✅ Pre-flight Checks
  • Viability: Fix addresses the reported issue
  • Safety: No malicious code or dangerous patterns
  • Breaking Change: No breaking changes detected (schema type changes, field removals/renames, PK/cursor changes, spec changes, stream removals, state format changes). If breaking, live connection pinning is blocked pending human approval.
  • Pin Exclusion: All candidate connections verified to be unpinned (exclude_pinned=True used for queries; directly-provided connections checked individually). Any pinned connections were excluded or explicitly approved by a human reviewer. (n/a: no live connections were used or pinned)
  • Reversibility: Can be safely downgraded/reverted (if not reversible, live connection pinning requires human approval)
📊 Detailed Evidence Log
  • 2026-10-23 01:11 UTC: Attempt 1 triggered (GSM, all streams). SPEC, CHECK and DISCOVER passed on both versions by 01:14.
  • 2026-10-23 04:14 UTC: Attempt 1 READ timed out after 180 min with the control live read still running. This is an infra timeout, not a verdict.
  • 2026-10-23 04:15 UTC: Attempt 2 triggered with READ narrowed to the check stream, two dynamic custom-object streams and three static streams. Completed with success at 04:23: 4148 records and 152 states on both versions, record comparison PASSED.
  • 2026-10-23 04:25 UTC: Local true-positive check with an invalid token returned FAILED on both SDM images.

No customer connections were used and no versions were pinned.

Note: Connection IDs and detailed logs are recorded in the linked private issue or Devin session.

Devin session

@github-actions

Copy link
Copy Markdown
Contributor

source-hubspot Connector Test Results

317 tests   287 ✅  37m 8s ⏱️
  2 suites   29 💤
  2 files      1 ❌

For more details on these failures, see this check.

Results for commit fbf36fd.

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

Closing: test-only DO NOT MERGE PR; the /ai-prove-fix run is complete (Fix Proven, see the Fix Validation Evidence comment above). Requested by Patrick Nilan (@pnilan).

Written by Devin

@github-actions

Copy link
Copy Markdown
Contributor

👋 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.
    • /ai-breaking-change-review - Step 1 for a connector breaking change. Reviews whether the change needs to be breaking, destination data-loss risk, and whether the migration guide, metadata message, and docs let users upgrade safely. Opens one conversation on the PR for each item the author needs to handle.
    • /breaking-change-ready - Step 2, after you've replied to and resolved each of those conversations. Checks that every one has a reply and is resolved, then pings the breaking-change reviewers in Slack for human review.
  • 📝 AI Documentation:
    • /ai-docs-review - AI-powered documentation review for PRs with connector changes.
    • /ai-create-docs-pr - Creates a documentation PR for connector changes, stacked on the current PR.
  • 🚀 Connector Releases:
    • /publish-connectors-prerelease - Publishes pre-release connector builds (tagged as {version}-preview.{git-sha}) for all modified connectors in the PR.
    • /enable-autopilot-rollouts - Enables autopilot progressive rollouts for the modified connector(s) in the PR, remediating "autopilot rollouts not enabled for {connector-name}" auto-merge blockers. Sets defaultRolloutMode: autopilot and enableProgressiveRollout: true, preserving any existing autopilotConfig.
      • Optional args: connector=<CONNECTOR_NAME> (defaults to the modified connectors in the PR), strategy=fast|slow|default (defaults to fast).
      • Example: /enable-autopilot-rollouts or /enable-autopilot-rollouts connector=source-faker strategy=slow
  • ☕️ 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.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Pre-release Connector Publish Started

Publishing pre-release build for connector source-hubspot.
PR: #89697

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

View workflow run
⚠️ Pre-release Publish CANCELLED for source-hubspot.

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

Prerelease published from this PR's original head commit, as requested. Closing again (DO NOT MERGE test PR).

Written by Devin

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

Labels

connectors/source/hubspot hyd-prove Hydra: ai-prove-fix stage has run

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants