Skip to content

fix(source-pylon): switch issues stream to POST /issues/search with updated_at cursor#76085

Draft
devin-ai-integration[bot] wants to merge 3 commits into
masterfrom
devin/1775257404-fix-source-pylon-issues-updated-at
Draft

fix(source-pylon): switch issues stream to POST /issues/search with updated_at cursor#76085
devin-ai-integration[bot] wants to merge 3 commits into
masterfrom
devin/1775257404-fix-source-pylon-issues-updated-at

Conversation

@devin-ai-integration
Copy link
Copy Markdown
Contributor

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

What

Fixes the source-pylon issues stream so incremental syncs capture modified issues, not just newly created ones.

Resolves: https://github.com/airbytehq/oncall/issues/11880
Related: #76084

The previous implementation used GET /issues with start_time/end_time query parameters that filter by created_at. This meant incremental syncs missed all modifications to existing issues (status changes, reassignments, new messages, tag updates, CSAT responses, etc.).

How

All changes are YAML-only (manifest-only connector, no custom Python).

  1. Switched endpoint: GET /issuesPOST /issues/search which supports filtering on updated_at
  2. Changed cursor field: created_atupdated_at
  3. Replaced query param injection with request body filter: Removed start_time_option/end_time_option (query param injection) and added request_body_json with a Jinja-templated nested Pylon filter structure using time_is_after/time_is_before operators on updated_at
  4. Added dedicated issues_paginator: POST endpoint requires cursor/limit in the request body (inject_into: body_json) rather than query parameters
  5. Added updated_at to issues schema
  6. Bumped version: 0.0.5 → 0.0.6

Review guide

  1. manifest.yaml — Core fix. Focus on the request_body_json filter template (lines 80-97) and the new issues_paginator definition (lines 510-527).
  2. unit_tests/test_manifest.py — 19 new manifest structure tests.
  3. metadata.yaml, pylon.md, sample_state.json, configured_catalog.json — Version bump, docs, and test fixture updates.

Items for reviewer attention:

  • request_body_json filter template: The filter value is a YAML block scalar (|) containing Jinja-templated JSON. Verify the CDK correctly evaluates Jinja and parses this as a JSON object in the request body (not a raw string). The "field": "updated_at" at the top level of the compound "and" filter may be extraneous — the Pylon Filter schema uses field on leaf filters, not compound ones. Confirm the API accepts or ignores this.
  • stream_interval availability: The start_time_option/end_time_option were removed since the filter now references {{ stream_interval.start_time }} and {{ stream_interval.end_time }} directly. Verify the CDK still populates stream_interval for the DatetimeBasedCursor when these options are absent.
  • Test coverage: Tests validate manifest YAML structure only. There are no mocked HTTP tests exercising the actual request body the CDK produces at runtime. CI acceptance tests will be the primary validation that the rendered requests are correct.

User Impact

  • Incremental syncs for the issues stream will now detect and sync modified issues, not just newly created ones.
  • Existing state using created_at cursor will be invalidated — users will need to reset the issues stream. This is acceptable for an alpha (0.0.x) connector with a patch bump.
  • Child streams (issue_messages, issue_threads) are unaffected since the POST /issues/search response format matches GET /issues.

Can this PR be safely reverted and rolled back?

  • YES 💚

Link to Devin session: https://app.devin.ai/sessions/514d69b5ee1840da8803308ae8afe885

…pdated_at cursor

Switch the issues stream from GET /issues (filtered by created_at) to
POST /issues/search (filtered by updated_at) so that incremental syncs
capture both newly created and recently modified issues.

Changes:
- Change HTTP method from GET to POST with path issues/search
- Replace query parameter injection with request_body_json containing
  nested Pylon filter structure (time_is_after / time_is_before on
  updated_at field)
- Add dedicated issues_paginator using body_json injection for cursor
  and limit (POST endpoint requires body params, not query params)
- Update cursor_field from created_at to updated_at
- Add updated_at field to issues schema
- Remove start_time_option/end_time_option (replaced by request_body_json)
- Add unit tests validating manifest structure
- Bump version 0.0.5 -> 0.0.6
- Update docs and changelog

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

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

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 3, 2026

source-pylon Connector Test Results

3 tests   1 ✅  3s ⏱️
1 suites  2 💤
1 files    0 ❌

Results for commit 4c0e8c2.

♻️ This comment has been updated with latest results.

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

github-actions Bot commented Apr 3, 2026

Deploy preview for airbyte-docs ready!

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

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

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

⚠️ Duplicate PR notice per Hands-Free AI Triage Project triage.

A human-authored PR targeting the same fix exists: airbytehq/airbyte#76083 by Henry Bogardus (@usbogie)feat(source-pylon): true incremental sync via POST /issues/search on updated_at.

Both PRs switch the issues stream from GET /issues to POST /issues/search with updated_at cursor. Recommend advancing the human-authored PR (#76083) as the preferred candidate.

Linked issue: https://github.com/airbytehq/oncall/issues/11880


Devin session

1 similar comment
@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

⚠️ Duplicate PR notice per Hands-Free AI Triage Project triage.

A human-authored PR targeting the same fix exists: airbytehq/airbyte#76083 by Henry Bogardus (@usbogie)feat(source-pylon): true incremental sync via POST /issues/search on updated_at.

Both PRs switch the issues stream from GET /issues to POST /issues/search with updated_at cursor. Recommend advancing the human-authored PR (#76083) as the preferred candidate.

Linked issue: https://github.com/airbytehq/oncall/issues/11880


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.

1 participant