Skip to content

ci: make PSL cascade self-merge and carry the domain diff#62

Open
polaz wants to merge 5 commits into
mainfrom
fix/#61
Open

ci: make PSL cascade self-merge and carry the domain diff#62
polaz wants to merge 5 commits into
mainfrom
fix/#61

Conversation

@polaz

@polaz polaz commented Jun 30, 2026

Copy link
Copy Markdown
Member

Summary

Fixes two defects in the PSL data cascade (psl-cascade.yml) that left sync PRs stranded with uninformative messages (observed on #53 and #57).

Problems

  1. Sync never auto-merged → cascade stalled. gh pr merge --auto --merge failed with Pull request is in clean status (enablePullRequestAutoMerge). main has no required status checks, so a fresh cascade PR is immediately mergeable and GitHub refuses to enable auto-merge on an already-clean PR; the step exited 1 and the PR was left open.
  2. No domain diff in the change record. The cut/sync steps wrote a generic bump structured-public-domains to vX line; the actual added/removed domains (already present in the upstream release body) were not propagated.

Changes

  • Robust merge: gh pr merge --merge "$BRANCH" || gh pr merge --auto --merge "$BRANCH" — merge immediately (the bot bypasses branch protection), fall back to auto only when checks are still pending.
  • Domain diff: cut + sync steps fetch the upstream structured-public-domains release body and use its added/removed domain list for the email CHANGELOG entry, GitHub release notes, and the sync PR body.

Testing

  • actionlint clean
  • YAML validates
  • Logic verified against the failed run #28432566878 (exact "clean status" error) and the upstream release body format (e.g. v0.0.12: Domain changes: +0 -1)

Closes #61

Summary by CodeRabbit

  • Bug Fixes
    • Release notes and the “Data” changelog entry now incorporate upstream release details when available, keeping published content and automated notes consistent.
    • If upstream notes can’t be retrieved, a clearer fallback message is used.
    • Sync PR descriptions and recreated baseline release notes now use the same upstream-sourced content.
    • Sync merging now prefers direct merges, waits for merge readiness, and avoids proceeding when the merge state indicates conflicts.

The sync step used 'gh pr merge --auto', which fails with 'clean status'
because main has no required checks: a fresh cascade PR is immediately
mergeable, so GitHub refuses to enable auto-merge and the step exits 1,
stranding the PR. Merge directly (the bot bypasses branch protection),
falling back to auto only when checks are still pending.

The cut and sync steps now fetch the upstream structured-public-domains
release body and use its added/removed domain list for the email CHANGELOG
entry, GitHub release notes, and the sync PR body, instead of a generic
dependency-bump line.
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The workflow now propagates upstream release bodies into temporary notes files for release and PR content, updates the changelog entry with that body text, and changes sync merging to wait for a settled merge state before performing a direct merge.

Changes

PSL Cascade Workflow Updates

Layer / File(s) Summary
Data release cut: upstream notes propagation
.github/workflows/psl-cascade.yml
The cut path fetches the upstream release body, falls back when missing, writes /tmp/upstream-notes.md, updates the CHANGELOG “Data” entry, and passes that file to gh release create.
Sync-to-main: release notes and PR body
.github/workflows/psl-cascade.yml
The sync path writes /tmp/sync-notes.md from the upstream release body, rewrites issue-closing phrases, and reuses that file for baseline release recreation and PR creation.
Sync-to-main: merge-state guarded merge
.github/workflows/psl-cascade.yml
The sync merge step now waits for mergeStateStatus to resolve, fails on DIRTY/CONFLICTING, and merges directly with gh pr merge --merge.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Workflow
  participant GitHubCLI
  participant GitHubPullRequest

  Workflow->>GitHubCLI: gh pr create --body-file /tmp/sync-notes.md
  Workflow->>GitHubPullRequest: poll mergeStateStatus
  GitHubPullRequest-->>Workflow: UNKNOWN / clean / DIRTY / CONFLICTING
  Workflow->>GitHubCLI: gh pr merge --merge
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the two main changes: PSL cascade self-merge and carrying the domain diff.
Linked Issues check ✅ Passed The workflow now merges clean sync PRs without auto-merge and propagates the upstream domain diff into release notes and the CHANGELOG.
Out of Scope Changes check ✅ Passed The changes stay focused on the PSL cascade workflow and related release/sync behavior, with no clearly unrelated additions.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/#61

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/psl-cascade.yml:
- Around line 197-207: The upstream-notes fetch and fallback logic is duplicated
in both workflow steps, so extract it into a single reusable helper such as a
small repo script invoked by the cut and sync jobs. Move the gh release view /
null fallback / printf-to-file behavior out of .github/workflows/psl-cascade.yml
and into one script that accepts the version and output target, then update both
existing steps to call that script instead of inlining the same pattern.
- Around line 197-207: The upstream release notes handling in the workflow can
write the literal null into the notes files because gh release view with --jq
'.body' does not trigger the empty-string fallback; update the release-body
extraction in this block and the duplicated sync-notes block to normalize
missing bodies to an empty string before the -z check, so the fallback message
is used instead. Keep the fix aligned with the existing UPSTREAM_NOTES
assignment and the later write to /tmp/upstream-notes.md and /tmp/sync-notes.md.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 9377c463-06c5-41d1-9f8a-b1fbfc985d6b

📥 Commits

Reviewing files that changed from the base of the PR and between c4a5540 and 0f007a4.

📒 Files selected for processing (1)
  • .github/workflows/psl-cascade.yml

Comment thread .github/workflows/psl-cascade.yml
@greptile-apps

greptile-apps Bot commented Jun 30, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates the PSL cascade workflow so data sync PRs can land and carry useful release text.

  • Fetches upstream release notes for changelog, release notes, and sync PR bodies.
  • Falls back to generic PSL data text when upstream notes are blank or null.
  • Sanitizes sync PR text before using it as a default-branch PR body.
  • Polls mergeability and uses a direct merge path for cascade PRs.

Confidence Score: 5/5

The workflow-only changes are narrow and focused on the PSL cascade path, with no review findings requiring changes before merge.

Only one GitHub Actions workflow changed, and the described logic directly addresses the merge fallback and release-note propagation behavior without touching runtime library code.

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex attempted an auto-merge for psl-cascade-1.2.3, observed the PR was in clean status, and did not perform a direct merge (MERGED_DIRECT=no).
  • T-Rex re-checked mergeability, found it CLEAN, and performed a direct merge for psl-cascade-1.2.3, which completed successfully (MERGED_DIRECT=yes).
  • With the head BLOCKED, T-Rex attempted a merge without auto-merge and received a failure because the required status checks had not passed (AUTO_MERGE_ENABLED=no).
  • T-Rex captured evidence that upstream domain changes are reflected in CHANGELOG, release notes, and PR body, showing Domain changes: +0 -1 and - example.tld, and noted that non-empty fallback strings are produced when upstream notes are unavailable.

View all artifacts

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (1)

  1. General comment

    P1 Pending cascade PRs do not use the claimed auto-merge fallback

    • Bug
      • The updated sync merge logic handles CLEAN PRs correctly, but it contradicts the stated fallback semantics for pending/checks-not-ready PRs. In the demonstrated mergeStateStatus=BLOCKED scenario, the workflow attempts only gh pr merge --merge "$BRANCH"; when the direct merge fails because required checks have not passed, the step exits 1 and never attempts gh pr merge --auto --merge.
    • Cause
      • In .github/workflows/psl-cascade.yml lines 338-345, all non-DIRTY/non-CONFLICTING states are routed to a direct merge. There is no branch for pending/checks-not-ready states such as BLOCKED to enable auto-merge as a fallback.
    • Fix
      • Handle pending/checks-not-ready merge states separately. For CLEAN/HAS_HOOKS or immediately mergeable states, use gh pr merge --merge "$BRANCH"; for states representing pending checks, invoke gh pr merge --auto --merge "$BRANCH" and verify/report that auto-merge was enabled. Keep DIRTY/CONFLICTING as hard failures.

    T-Rex Ran code and verified through T-Rex

Reviews (5): Last reviewed commit: "fix(ci): harden PSL cascade sync merge a..." | Re-trigger Greptile

Comment thread .github/workflows/psl-cascade.yml Outdated
Comment thread .github/workflows/psl-cascade.yml Outdated
polaz added 2 commits July 1, 2026 00:50
gh release view --jq '.body' renders a JSON-null body as the literal string
'null', which is non-empty and slipped past the fallback guard, so a blank
upstream release could publish 'null' as the email CHANGELOG entry, release
notes, and the sync request body. Use '.body // ""' and guard the literal
'null' so the generic fallback line is used instead.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/psl-cascade.yml (1)

303-312: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Add a short mergeability poll before merging
gh pr merge can still race GitHub’s async mergeStateStatus calculation right after gh pr create, so this step can flake on transient UNKNOWN/clean-status transitions. Poll gh pr view --json mergeStateStatus for a bounded window before choosing --merge vs --auto --merge.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/psl-cascade.yml around lines 303 - 312, The merge step in
psl-cascade.yml can race GitHub’s asynchronous mergeability calculation right
after gh pr create, causing transient clean-status or UNKNOWN failures. Update
the PR merge flow around the gh pr merge call to first poll gh pr view --json
mergeStateStatus for a bounded time window, then choose between --merge and
--auto --merge only after mergeStateStatus is stable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.github/workflows/psl-cascade.yml:
- Around line 303-312: The merge step in psl-cascade.yml can race GitHub’s
asynchronous mergeability calculation right after gh pr create, causing
transient clean-status or UNKNOWN failures. Update the PR merge flow around the
gh pr merge call to first poll gh pr view --json mergeStateStatus for a bounded
time window, then choose between --merge and --auto --merge only after
mergeStateStatus is stable.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 63792777-656d-437a-8496-6f7ed78bfd75

📥 Commits

Reviewing files that changed from the base of the PR and between 0f007a4 and 93699c4.

📒 Files selected for processing (1)
  • .github/workflows/psl-cascade.yml

GitHub computes mergeStateStatus asynchronously after the pull request is
created, so it is briefly UNKNOWN and merging in that window can flake on a
transient state. Poll a bounded time (up to ~30s) for the status to settle
before choosing direct merge vs auto-merge.
@polaz

polaz commented Jul 1, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
.github/workflows/psl-cascade.yml (2)

307-322: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

Auto-merge fallback can silently mask real merge conflicts.

If gh pr merge --merge "$BRANCH" fails for a reason other than "checks still pending" (e.g. mergeStateStatus=DIRTY/BLOCKED due to a genuine conflict against main), the fallback gh pr merge --auto --merge "$BRANCH" still exits 0 — it only enables auto-merge, it doesn't guarantee the PR ever actually merges. The step (and the whole workflow run) then reports success even though the data release never lands on main, defeating the stated goal ("a dispatched cascade run lands on main without manual merging").

Consider branching on the polled state instead of blindly falling back: attempt direct merge when clean, use --auto only when checks are genuinely pending, and fail loudly (with the actual mergeStateStatus) when DIRTY/CONFLICTING.

♻️ Suggested refactor
-          gh pr merge --merge "$BRANCH" || gh pr merge --auto --merge "$BRANCH"
+          case "$state" in
+            CLEAN|HAS_HOOKS|UNSTABLE)
+              gh pr merge --merge "$BRANCH"
+              ;;
+            DIRTY|BLOCKED)
+              echo "PR $BRANCH is $state; refusing to silently enable auto-merge." >&2
+              exit 1
+              ;;
+            *)
+              gh pr merge --auto --merge "$BRANCH"
+              ;;
+          esac
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/psl-cascade.yml around lines 307 - 322, The merge logic in
the gh pr merge step can hide real conflicts because it always falls back to gh
pr merge --auto --merge after a failed direct merge. Update the workflow around
the mergeStateStatus polling and gh pr merge invocation so it branches on the
actual state: merge directly only when the PR is clean, use --auto only when the
state shows checks are still pending, and explicitly fail the job for
DIRTY/BLOCKED/CONFLICTING states with the reported mergeStateStatus.

303-306: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Sanitize the PR body before sending upstream release notes to main.

/tmp/sync-notes.md is populated with the raw structured-public-domains release body and passed straight to gh pr create --body-file for a PR targeting main. GitHub processes closing keywords in PR descriptions on the default branch, so stray fixes #... / closes #... text from upstream could close issues in this repo on merge. Escape or strip those keywords before writing the file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/psl-cascade.yml around lines 303 - 306, The PR body passed
through gh pr create in the psl-cascade workflow is using the raw upstream
release notes, which can leak closing keywords into a PR targeting main. Update
the release-note handling around the sync-notes generation and the gh pr create
--body-file step to sanitize /tmp/sync-notes.md before use, either by stripping
or escaping fixes/closes keywords from the structured-public-domains body. Keep
the change localized to the workflow logic that prepares the PR body so the PR
description cannot trigger issue closures on merge.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.github/workflows/psl-cascade.yml:
- Around line 307-322: The merge logic in the gh pr merge step can hide real
conflicts because it always falls back to gh pr merge --auto --merge after a
failed direct merge. Update the workflow around the mergeStateStatus polling and
gh pr merge invocation so it branches on the actual state: merge directly only
when the PR is clean, use --auto only when the state shows checks are still
pending, and explicitly fail the job for DIRTY/BLOCKED/CONFLICTING states with
the reported mergeStateStatus.
- Around line 303-306: The PR body passed through gh pr create in the
psl-cascade workflow is using the raw upstream release notes, which can leak
closing keywords into a PR targeting main. Update the release-note handling
around the sync-notes generation and the gh pr create --body-file step to
sanitize /tmp/sync-notes.md before use, either by stripping or escaping
fixes/closes keywords from the structured-public-domains body. Keep the change
localized to the workflow logic that prepares the PR body so the PR description
cannot trigger issue closures on merge.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 04c10f49-1902-4354-8d93-91c247dbe2f0

📥 Commits

Reviewing files that changed from the base of the PR and between 93699c4 and 61aa59e.

📒 Files selected for processing (1)
  • .github/workflows/psl-cascade.yml

- Branch on the polled mergeStateStatus: fail loudly on a DIRTY/CONFLICTING
  conflict against main instead of silently enabling auto-merge, which exits 0
  without merging and would report false success while the release never lands.
- Backtick-wrap issue-closing keywords in the sync description before it targets
  main, so stray upstream text cannot auto-close issues in this repo on merge.
@polaz

polaz commented Jul 1, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@polaz

polaz commented Jul 1, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@polaz

polaz commented Jul 1, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/psl-cascade.yml:
- Around line 284-296: The sync-PR body sanitization in the inline Python block
still misses colon-form issue-closing phrases like “Closes: `#10`”. Update the
re.sub pattern in the workflow script to also match an optional colon after the
closing keyword before the issue number, so all variants are wrapped in
backticks and cannot auto-close issues when the PR merges.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 710a19d7-5184-41dc-822d-d29a9d8a133f

📥 Commits

Reviewing files that changed from the base of the PR and between 61aa59e and 874e7dc.

📒 Files selected for processing (1)
  • .github/workflows/psl-cascade.yml

Comment on lines +284 to +296
# This text becomes the sync PR body, which targets main — GitHub
# processes issue-closing keywords in PR descriptions on the default
# branch. Wrap any "closes/fixes/resolves #N" in backticks so stray
# upstream text can never close an issue in this repo on merge.
python3 - <<'PY'
import pathlib, re
p = pathlib.Path("/tmp/sync-notes.md")
t = p.read_text(encoding="utf-8")
t = re.sub(
r'(?i)\b(clos(?:e|es|ed)|fix(?:es|ed)?|resolv(?:e|es|ed))(\s+#\d+)',
r'`\1`\2', t)
p.write_text(t, encoding="utf-8")
PY

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate the workflow and inspect the relevant region.
git ls-files '.github/workflows/psl-cascade.yml'
wc -l .github/workflows/psl-cascade.yml
sed -n '260,315p' .github/workflows/psl-cascade.yml

Repository: structured-world/structured-email-address

Length of output: 3172


🌐 Web query:

GitHub issue-closing keywords colon syntax PR description Closes: #10 docs

💡 Result:

Yes, the syntax Closes: #10 is fully supported by GitHub for automatically closing issues [1][2]. GitHub recognizes several closing keywords that can be used in pull request descriptions or commit messages to automatically link and close issues when the PR is merged into the repository's default branch [1][3]. The inclusion of a colon after the keyword is optional and does not affect functionality [1][2]. Key points regarding this syntax: Supported Keywords: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved [1][4]. Syntax Flexibility: Keywords can be written in uppercase or lowercase, and they can optionally be followed by a colon [1][2]. For example, Closes #10, CLOSES #10, Closes: #10, and CLOSES: #10 are all valid [1][2]. Requirement: For these keywords to automatically trigger an issue closure, the pull request must target the repository's default branch [1][2]. If the PR targets any other branch, the keywords are ignored [1][2]. Multi-Issue Support: To close multiple issues, you must use a supported keyword before each issue reference (e.g., Closes #10, closes #11) [1][3]. Cross-Repository Support: You can close issues in different repositories using the syntax KEYWORD OWNER/REPOSITORY#ISSUE-NUMBER (e.g., Fixes octo-org/octo-repo#100) [1][3]. [1] https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue [4] https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests [3] https://docs.github.com/en/enterprise/2.16/user/articles/closing-issues-using-keywords [2] https://github.com/github/docs/blob/main/content/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue.md

Citations:


Wrap colon-form closing keywords too. GitHub treats Closes: #10 the same as `Closes `#10, so the current \s+ pattern still leaves that form unwrapped and can auto-close an issue when the sync PR merges.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/psl-cascade.yml around lines 284 - 296, The sync-PR body
sanitization in the inline Python block still misses colon-form issue-closing
phrases like “Closes: `#10`”. Update the re.sub pattern in the workflow script to
also match an optional colon after the closing keyword before the issue number,
so all variants are wrapped in backticks and cannot auto-close issues when the
PR merges.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(ci): PSL cascade auto-merge fails + release notes lack domain diff

1 participant