Skip to content

feat(source-monday): add timeline column fields to items.column_values - #83271

Draft
devin-ai-integration[bot] wants to merge 2 commits into
masterfrom
devin/1785442234-monday-timeline-columns
Draft

feat(source-monday): add timeline column fields to items.column_values#83271
devin-ai-integration[bot] wants to merge 2 commits into
masterfrom
devin/1785442234-monday-timeline-columns

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

What

Requested by Gary Yang (@gary-yang-airbyte?) for a prospect evaluating Airbyte as a Fivetran replacement: the items stream returns timeline columns, but only as the generic ColumnValue fields (text, plus a raw JSON value), so consumers have to parse JSON downstream to get the date range.

timeline columns are returned as TimelineValue, a concrete implementation of the ColumnValue interface, so its fields (from, to, visualization_type, updated_at) are only queryable through an inline fragment — verified against the live API:

Cannot query field "from" on type "ColumnValue".

Additionally, per Monday's timeline docs, columns with rollup capability on multi-level boards return an empty column_values array unless calculated values are requested explicitly, so those boards currently sync no column values at all.

How

MondayGraphqlRequester._build_query() already rewrites column_values to move interface-specific fields into inline fragments (MirrorValue, BoardRelationValue, DependencyValue). This extends the same mechanism:

timeline_fields = [field for field in self.TIMELINE_VALUE_FIELDS if field in fields]
for field in timeline_fields:
    fields.remove(field)
...
if timeline_fields:
    fields.append("... on TimelineValue{" + ",".join(timeline_fields) + "}")

and adds capabilities:[CALCULATED] as an argument to the nested column_values object. Resulting query for items:

column_values(capabilities:[CALCULATED]){id,text,type,value,is_leaf,... on MirrorValue{display_value},... on BoardRelationValue{display_value,linked_item_ids},... on DependencyValue{display_value,linked_item_ids},... on TimelineValue{from,to,visualization_type,updated_at}}

The fragment is driven by the schema (fields are only requested if present in items.column_values), so removing a timeline field from the schema removes it from the query.

Review guide

  1. components.pyTIMELINE_VALUE_FIELDS, the fragment construction, and the capabilities argument.
  2. manifest.yaml — new items.column_values properties: from, to, visualization_type, updated_at (date-time) and is_leaf (boolean, a field on the ColumnValue interface itself).
  3. unit_tests/test_graphql_requester.py — new parametrized test_build_column_values_query covering no/partial/full timeline fields.
  4. unit_tests/integrations/monday_requests/items_request_builder.py and integration_tests/expected_records.jsonl — updated for the new query and the added is_leaf field.

Verified against a live Monday account (the connector's own integration-test workspace) rather than only against mocks:

  • The full generated items query is accepted by API version 2026-01.
  • On a temporary board created with a timeline column and then deleted, the fragment returns from: "2026-03-01T00:00:00+00:00", to: "2026-03-15T00:00:00+00:00", text: "2026-03-01 - 2026-03-15", updated_at, and visualization_type: null.
  • capabilities:[CALCULATED] and is_leaf are accepted on boards without rollup columns, so the change is not gated on multi-level boards.
  • poetry run pytest in unit_tests: 36 passed, 2 skipped.

Not covered locally: an account that actually has multi-level boards with rollup timeline columns — the sandbox has none, so the empty-array behaviour that capabilities:[CALCULATED] addresses was not reproduced first-hand.

User Impact

items records now include typed timeline fields on timeline column values instead of only the raw JSON blob, and boards using rollup columns should return column values where they previously returned an empty array. Additive schema change (minor bump to 2.6.0); no existing field changes type or disappears.

Can this PR be safely reverted and rolled back?

  • YES 💚
  • NO ❌

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

Requests TimelineValue fields via an inline GraphQL fragment and asks for calculated column values so rollup columns are not returned empty.
@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, CI, and merge conflict monitoring

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Devin AI seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@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 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

Copy link
Copy Markdown
Contributor

Note

Autopilot progressive rollouts are not enabled for the following modified connector(s):

  • source-monday

This is a courtesy heads-up only — it does not block merge or fail any check.
To enable automatic progressive rollouts for the connector(s) above, comment
/enable-autopilot-rollouts on this PR. This sets defaultRolloutMode: autopilot
and enableProgressiveRollout: true in each connector's metadata.yaml,
preserving any existing autopilotConfig.

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Deploy preview for airbyte-docs ready!

Project:airbyte-docs
Status: ✅  Deploy successful!
Preview URL:https://airbyte-docs-q00p2rc0z-airbyte-growth.vercel.app
Latest Commit:5b4edc8

Deployed with vercel-action

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

source-monday Connector Test Results

47 tests   39 ✅  24s ⏱️
 2 suites   8 💤
 2 files     0 ❌

Results for commit 7a38bf6.

♻️ This comment has been updated with latest results.

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.

2 participants