Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Fix cron expression display for Day-of-Month and Day-of-Week conflicts by shreyaskj-0710 · Pull Request #54644 · apache/airflow · GitHub
Skip to content

Fix cron expression display for Day-of-Month and Day-of-Week conflicts - #54644

Merged
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482
Sep 30, 2025
Merged

Fix cron expression display for Day-of-Month and Day-of-Week conflicts#54644
pierrejeambrun merged 14 commits into
apache:mainfrom
shreyaskj-0710:Issue_fix_54482

Conversation

@shreyaskj-0710

@shreyaskj-0710shreyaskj-0710 commented Aug 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#54482

Description
📌 Day-of-Month (DOM) and Day-of-Week (DOW) Conflict in Cron

In cron syntax, both Day-of-Month (DOM) and Day-of-Week (DOW) fields are evaluated independently.
If both are specified, the schedule runs when either condition matches (logical OR), not when both are true together.

Example

Cron expression : * * */1 * 5

*/1 → effectively means every day of the month

5 → every Friday

Together → Every minute (or) Every minute, only on Friday (but since */1 means every day, the Friday part becomes
redundant).

⚠️ This often causes confusion because users may expect it to mean “every Friday only” when in reality it matches “every day”.

Approach

  • Detect when both DOM (Day of the month) and DOW (Day of the week) are restricted (i.e., not "*").
  • Then split the expression into two variants:
  • One ignoring DOW (DOM only)
  • One ignoring DOM (DOW only)

Each variant is described independently, and the final description combines them using “(or)”, which matches actual cron semantics.

In UI Timetable description will be as follows
Screenshot from 2025-08-19 11-55-59

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @uranusjr ,

can you please review the code changes.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

Hi @pierrejeambrun , @kaxil

can you please review the changes

@eladkaleladkal added this to the Airflow 3.0.7 milestone Aug 28, 2025
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Aug 28, 2025

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

At first I'm not in favor of this change. I don't really understand why this is needed. I would keep the standard cron description, if users cannot read cron expressions, they should go check the documentation. (I'm not strongly against it if this helps users)

Can you add relevant tests please.

Hi @pierrejeambrun ,
Have added the tests

@pierrejeambrun

pierrejeambrun commented Sep 4, 2025

Copy link
Copy Markdown
Member

@bbovenzi@uranusjr I would love your opinion on that

@bbovenzi

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

@RNHTTR

RNHTTR commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

I mean if this is a more accurate description then sure. I also see the cron-descriptor has the same bug. Looks like we need to rebase and fix some tests though.

The existing description is objectively incorrect. It's not just more accurate; the existing implementation is broken and the proposed fix makes it not broken.

@pierrejeambrun

pierrejeambrun commented Sep 17, 2025

Copy link
Copy Markdown
Member

OK I get it now. Current default description is wrong when both are specified. (I tested on other tools and they all do the same mistake).

Yes the tooltip needs to be fixed

Is that the only known 'bug' in the cron description?

  • If that's the only one issue with cron description, we can just handle the edge case as suggested in this PR.
  • If there are other instances of such common problem with cron description, maybe we shouldn't use the description at all, and let the user read the cron expression instead.

@RNHTTR

Copy link
Copy Markdown
Contributor

Is that the only known 'bug' in the cron description?

This is the only bug that I'm aware of. Other descriptions appear accurate.

@pierrejeambrun

Copy link
Copy Markdown
Member

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

@shreyaskj-0710

Copy link
Copy Markdown
ContributorAuthor

This is the only bug that I'm aware of. Other descriptions appear accurate.

Glad to hear. I think we can move forward then.

@shreyaskj-0710 Do you mind rebasing the PR and fixing the CI please.

Hi @pierrejeambrun ,

Have updated the PR and fixed the CI

@pierrejeambrun
pierrejeambrun merged commit c6531bb into apache:mainSep 30, 2025
61 checks passed
github-actionsBot pushed a commit that referenced this pull request Sep 30, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-1-test

StatusBranchResult
v3-1-testPR Link

pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
pierrejeambrun pushed a commit that referenced this pull request Oct 1, 2025
…eek conflicts (#54644) (#56255)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
(cherry picked from commit c6531bb)
Co-authored-by: shreyaskj-0710 <shreyas.kj@zemosolabs.com>
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
dabla pushed a commit to dabla/airflow that referenced this pull request Oct 12, 2025
apache#54644)
* Fix cron expression display for Day-of-Month and Day-of-Week conflicts
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
* Add test case for CronMixin description attribute
---------
Co-authored-by: Ryan Hatter <25823361+RNHTTR@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow UI incorrectly interprets some cron expressions like 0 0 */1 * 5

6 participants

@shreyaskj-0710@pierrejeambrun@bbovenzi@RNHTTR@kaxil@eladkal