Skip to content

Rework the Dispatcher PR comment into the target-first layout - #25240

Merged
HadhemiDD merged 3 commits into
masterfrom
hs/dispatcher-pr-comment-target-first
Sep 22, 2026
Merged

HadhemiDD merged 3 commits into
masterfrom
hs/dispatcher-pr-comment-target-first

Conversation

@HadhemiDD

@HadhemiDD HadhemiDD commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

What does this PR do?

Reworks the Dispatcher PR comment layout. The new layout is in the comments below.

Motivation

The previous layout was job-first, and on a large run that made it unreadable: an HTML table of
batches followed by one entry per failed job, so a reader had to scan dozens of near-identical rows
to work out which integrations were actually broken.

Review checklist (to be filled by reviewers)

  • Feature or bugfix MUST have appropriate tests (unit, integration, e2e)
  • Add qa/required if this PR needs QA validation, or qa/skip-qa if it does not. Exactly one of the two is required.
  • If you need to backport this PR to another branch, you can add the backport/<branch-name> label to the PR and it will automatically open a backport PR once this one is merged

🤖 Generated with Claude Code

@HadhemiDD HadhemiDD added the qa/skip-qa Automatically skip this PR for the next QA label Sep 16, 2026
@dd-octo-sts dd-octo-sts Bot added the ddev label Sep 16, 2026
@dd-octo-sts

dd-octo-sts Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

❌ Dispatcher tests · failed

Dispatcher beta: informational only

Dispatcher is running alongside existing CI while we validate it. You can ignore this report and its statuses. Existing CI remains the merge signal.

Caution

Dispatcher tests failed. See the failures below.

  855/855 jobs
✅ 851 passed · ❌ 4 failed

Batches

BatchStateJobsWorkflow
batch-01❌ failed240/240run 35617942872
batch-02❌ failed217/217run 35617942497
batch-03✅ passed220/220run 35617942847
batch-04✅ passed178/178run 35617942669

❌ Failures

cert_manager / py3.13 / linux   view job

1 failed test
  • cert_manager.tests.test_e2e::test_check_ok

glusterfs / py3.13-7.1 / linux   view job

1 failed test
  • glusterfs.tests.test_integration::test_version_metadata

glusterfs / py3.13-7.1 / linux / minimum base package   view job

1 failed test
  • glusterfs.tests.test_integration::test_version_metadata

kafka_consumer / py3.13-3.3-noauth / linux / minimum base package   view job

1 failed step
  • Run the tests

⚠️ Unavailable results

  • kafka_consumer / py3.13-3.3-noauth / linux / minimum base package — no artifacts were downloaded for this job
Dispatcher finished on bf63de2 — GitHub Run.

@cit-pr-commenter-54b7da

cit-pr-commenter-54b7da Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

evalya-impact-summary

evalya impact analysis
Impact analysis: RUN-ALL — every test task will run
Trigger:         empty diff (default branch, scheduled run, or shallow-clone fallback)
Test tasks:      0 (all selected)
Publish tasks:   2 (always emitted)
Diff:            empty (no diff information)

Learn more about CI impact filtering

@datadog-datadog-prod-us1

datadog-datadog-prod-us1 Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Tests  Code Coverage

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
• Patch Coverage: 96.54%
• Overall Coverage: 89.28% (+0.11%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: f5353af | Docs | View more details | Give us feedback!

@HadhemiDD

HadhemiDD commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor Author

Rendered layouts

The four comments below are the actual output of this branch's renderer, posted so the layout can be reviewed as GitHub renders it rather than as source.

There were thirteen of these, and nine are gone. Most of them existed to show the comment changing shape: the compressed one-line form a group switched to at its fifth target, the nested Show N more disclosure the eleventh integration went behind, the pointer line that accounted for what it hid, and the last tier that dropped every target's job link. None of that exists any more. The layout no longer changes with target or integration counts at all, so those previews were either the same shape as another or a picture of behaviour that has been deleted. The remainder — queued, collecting, passed, and the run summary — are run states or a different surface, not layout decisions.

Unlike the previous set, each preview has its own snapshot, chosen for the shape it demonstrates rather than derived from one shared run. They come from a committed module, so they are reproducible and cannot drift from the tested code:

cd ddev
PYTHONPATH=. hatch run python -m tests.cli.ci.tests.preview_pr_comment /tmp/dispatcher-preview

What to look for, in the order the design puts it:

  • One section order, every state. Heading, beta notice, alert, bar and job totals, batch strip, affected integrations, batch-level problems, footer. A section is absent when it has nothing to report and never moves, so a reader who has learnt where the batch links live does not have to find them again because the run finished.
  • A linked row per affected target, at any count. The job link is the way into the run that failed, so nothing folds targets onto a shared line — not at five targets, not at thirty.
  • A failed test stays under the target that failed it. The one list above that level is the tests that failed in every one of a group's targets, listed once with each target's remainder labelled as an additional failure. That is lossless: a target's failures are the common list plus its own. It is claimed only where every target has reports to intersect, so a group holding a target that lost its artifacts keeps its tests where they can be believed.
  • Collection problems sit on the target's own row and are counted apart from failures — in targets and batches separately, never summed into one number spanning both. A batch-level note appears only where no target's row already accounts for the same problem.
  • Terminal states are one sentence. No paragraph about cancellation propagation or partial snapshots.

The size fallbacks are not previewed here. Truncation only begins once the rows without any test names still exceed the byte budget, so the only faithful preview of it is a ~61 kB body, which is not worth a reviewer's scrollbar. The order it gives things up is the point, and it is pinned by tests: the test and step names go first, then rows are dropped with a notice saying exactly how many, and a target's job link is the last thing to go.

A few notes so nothing here is mistaken for a real report:

  • The <!-- ddev-dispatcher-tests --> marker is stripped from each one. The run reporter finds its comment with body.startswith(COMMENT_MARKER), so leaving it in would let the real Dispatcher adopt and overwrite one of these previews.
  • Run and job links point at plausible but non-existent ids, so they will 404. The progress-bar images are the real pinned assets on master and do load.
  • Each preview comes from a real DispatcherProgress snapshot, so within any one of them the totals, the bar, the batch strip and the groups all agree with each other.

@HadhemiDD

HadhemiDD commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor Author

Layout 1 — running, with failures already known

One batch has finished and failed, one is still running, one is collecting its artifacts. The alert counts what is outstanding in batches, because a batch is the unit that actually finishes — a retrying batch has every job reported while the batch runs on, so a pending-jobs count alone can read as 0 on a run that is far from done.

Worth noting in the postgres group: both of its targets failed the same single test, so that test is the group's whole intersection and is listed once below the rows. The rows then carry nothing beyond their link and their batch, because neither target failed anything the other did not. A remainder would have been labelled additional failed test, which is what stops a list of one from reading as a target's only failure.


🔄 Dispatcher tests: in progress

Dispatcher beta: informational only
Existing CI remains the merge signal.

Note

Tests are still running. 2 of 3 batches have not finished yet. 1 of 9 jobs have not reported. This comment updates automatically.

  8/9 jobs

✅ 5 passed · ❌ 3 failed · ⏳ 1 pending

Batches · ❌ batch-01 4/4 · 🔄 batch-02 3/4 · 📥 batch-03 1/1

❌ postgres: 2 failed targets

Tests failed in every target:

  • tests.test_check::test_connection
❌ redisdb: 1 failed target

⏳ Dispatcher running on ff9caa5 — GitHub Run.

@HadhemiDD

HadhemiDD commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor Author

Layout 2 — finished, with an arbitrary target-to-test matrix

The layout that matters, and the one the redesign is really about: three groups whose targets failed in three different relationships to each other.

  • base, six targets. Two tests failed in all six, so they are listed once under Tests failed in every target:, and each target keeps the one test only it failed as 1 additional failed test. Any target's full set is the common list plus its own — nothing was discarded to get here. Six targets also used to be past the point where the group collapsed onto a single run-on line and four of these links disappeared behind + 2 more.
  • sqlserver, two targets. They share nothing, so there is no intersection to factor out and every test stays under the target that reported it — one named inline, two as a count with the names beneath.
  • kuma, one target, two failed steps. Steps are never factored out across targets, and they are named only when no test result explains the failure, since the step that ran a failing test says nothing the test does not.

The group summaries count targets rather than tests. A test count over a group whose targets failed differently describes none of them, and it put a number nobody navigates by where the outcome belongs.


❌ Dispatcher tests: failed

Dispatcher beta: informational only
Existing CI remains the merge signal.

Caution

3 integrations failed. 9 of 9 jobs failed.

  9/9 jobs

❌ 9 failed

Batches · ❌ batch-01 6/6 · ❌ batch-02 3/3

❌ base: 6 failed targets

Tests failed in every target:

  • tests.test_check::test_metadata_manager
  • tests.test_check::test_persistent_cache
❌ sqlserver: 2 failed targets
  • py3.13-2019 / linux · batch-02 · test tests.test_check::test_query_timeout
  • py3.13-2022 / linux · batch-02 · 2 failed tests
    • tests.test_check::test_custom_metrics
    • tests.test_check::test_ao
❌ kuma: 1 failed target
  • py3.12 / linux · batch-02 · 2 failed steps
    • Run the tests
    • Upload coverage

Dispatcher finished on ff9caa5 — GitHub Run.

@dd-octo-sts

dd-octo-sts Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Disk usage change

Commit 726d574 compared against 0984ac3.

No integration or dependency changed size.

@HadhemiDD

HadhemiDD commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor Author

Layout 3 — problems with no failing target behind them

Two bodies, because the two cases they cover are what the comment used to conflate into a single count called results.

First: workflows that passed while their reports went missing. Neither failed nor a clean pass, so the heading is ⚠️ rather than ❌ or ✅ and the group is a warning. A job's status is the workflow's own conclusion, while its error says whether the Dispatcher managed to collect its results afterwards — the two are independent, so a job can conclude success and still carry NO_ARTIFACTS. The reason sits on each affected target's own row, next to the link it applies to, rather than once below all of them where a reader would have to work out which targets it was about. The totals deliberately do not say nothing failed here: alongside results that never arrived, that is the sentence a reader would remember and it would be wrong.

The two counts in the alert are in different units and are never added together: 3 targets is three configurations across two integrations, 2 batches is two whole workflows.

The three batches show the whole deduplication rule, which the header and the notes now apply identically. batch-01 has no note and is not counted: both of its affected targets already say on their own rows that their artifacts went missing, and those rows carry the job links. batch-02 has a note because none of its targets reported anything. batch-03 has a note even though its one target lost its artifacts, because the batch timed out — a different problem, and suppressing it would have hidden a real event behind an unrelated one. So each underlying problem is explained exactly once, and nothing is explained zero times.

Second: a workflow that failed outside its integration test jobs. A setup step, an upload, the workflow itself — a real failure with no target to attribute it to, so it is reported against the batch and linked to its run. Every job in the run passed, and the totals say so without adding nothing failed: the heading calls this run failed, and a totals line calling it clean beside it is the contradiction, not the summary. batch-02 passed, so the two batches are distinguishable at a glance.


⚠️ Dispatcher tests: results incomplete

Dispatcher beta: informational only
Existing CI remains the merge signal.

Warning

Results are incomplete. Dispatcher could not collect test results for 3 targets. Dispatcher could not collect results for 2 batches.

  7/7 jobs

✅ 7 passed

Batches · ✅ batch-01 5/5 · ✅ batch-02 1/1 · ✅ batch-03 1/1

⚠️ mysql: results unavailable for 2 targets
⚠️ vault: result unavailable for 1 target

⚠️ batch-02: test results could not be collected

⚠️ batch-03: timed out

Dispatcher finished on ff9caa5 — GitHub Run.


❌ Dispatcher tests: failed

Dispatcher beta: informational only
Existing CI remains the merge signal.

Caution

Dispatcher tests failed. See the failures below.

  4/4 jobs

✅ 4 passed

Batches · ❌ batch-01 3/3 · ✅ batch-02 1/1

❌ batch-01: failed outside its integration test jobs

Dispatcher finished on ff9caa5 — GitHub Run.

@HadhemiDD

HadhemiDD commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor Author

Layout 4 — the terminal states

Four bodies: cancelled, stopped on a fatal error, timed out, and last a run that stopped before any batch reported at all.

Each is one sentence. The previous versions explained that unfinished batches had been asked to stop and that anything below was what had been gathered by then — mechanics the reader cannot act on, in a place where what they need to know is that the run ended early. The report below the alert is already only what arrived before the stop, so saying so added nothing.

Only the fatal error carries a reason, bounded to one line and rendered as literal text so an error string containing backticks cannot break out of it. A deadline explains itself, so the timeout does not repeat it; the reason stays in the logs.

The last body is the one case with no snapshot behind it, so it has no totals and no batch strip by construction rather than by omission.


🚫 Dispatcher tests: cancelled

Dispatcher beta: informational only
Existing CI remains the merge signal.

Caution

The Dispatcher run and its unfinished batches were cancelled.

  8/9 jobs

✅ 5 passed · ❌ 3 failed · ⏳ 1 pending

Batches · ❌ batch-01 4/4 · 🔄 batch-02 3/4 · 📥 batch-03 1/1

❌ postgres: 2 failed targets

Tests failed in every target:

  • tests.test_check::test_connection
❌ redisdb: 1 failed target

Dispatcher cancelled on ff9caa5 — GitHub Run.


🛑 Dispatcher tests: stopped

Dispatcher beta: informational only
Existing CI remains the merge signal.

Caution

Dispatcher stopped before completion: a batch response failed validation.

  8/9 jobs

✅ 5 passed · ❌ 3 failed · ⏳ 1 pending

Batches · ❌ batch-01 4/4 · 🔄 batch-02 3/4 · 📥 batch-03 1/1

❌ postgres: 2 failed targets

Tests failed in every target:

  • tests.test_check::test_connection
❌ redisdb: 1 failed target

Dispatcher failed on ff9caa5 — GitHub Run.


🛑 Dispatcher tests: timed out

Dispatcher beta: informational only
Existing CI remains the merge signal.

Caution

Dispatcher timed out before completion.

  8/9 jobs

✅ 5 passed · ❌ 3 failed · ⏳ 1 pending

Batches · ❌ batch-01 4/4 · 🔄 batch-02 3/4 · 📥 batch-03 1/1

❌ postgres: 2 failed targets

Tests failed in every target:

  • tests.test_check::test_connection
❌ redisdb: 1 failed target

Dispatcher timed out on ff9caa5 — GitHub Run.


🚫 Dispatcher tests: cancelled

Dispatcher beta: informational only
Existing CI remains the merge signal.

Caution

The Dispatcher run and its unfinished batches were cancelled.

Dispatcher cancelled on ff9caa5 — GitHub Run.

@HadhemiDD

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 726d57478f

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines 477 to +480
attempt = job.latest
if attempt is None or attempt.status is not Status.FAILURE:
if attempt is None or (attempt.status is not Status.FAILURE and attempt.error is None):
continue
entries.append(_failed_job_entry(job, attempt, detail=detail))
# A batch whose workflow failed without any tracked job failing is a real failure with nothing
# to list; saying so beats an empty section or a silent omission.
entries += [
f"<code>{html.escape(batch.batch_id)}</code> — the workflow failed with no tracked job failure"
for batch in progress.batches
if batch.status is Status.FAILURE
and all(job.complete for job in batch.jobs_progress)
and not any(_is_failed(job) for job in batch.jobs_progress)
]
if not entries:
grouped.setdefault(job.job.target, []).append(FailedTarget(job, attempt, batch.batch_id))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Distinguish unknown results from failed integrations

When a job completed successfully but has an error such as NO_ARTIFACTS, this condition still puts its integration in _failure_groups. If another job genuinely failed, _alert consequently counts the unknown-only group as an integration that failed; with more than GROUP_LIMIT unknown groups, the overflow pointer likewise says they failed even when the alert says nothing failed. Keep unavailable-only groups out of failure counts and failure-worded pointers while still rendering them as warnings.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The failed + warn groups are now sorted to show the failed first.

Comment on lines +599 to +604
targets = _compressed_targets(group) if len(group.targets) > TARGET_PREVIEW else _target_bullets(group)
paragraphs = ["\n".join(targets)]
if shared := _shared_tests(group):
paragraphs.append("\n".join(shared))
if warnings := _group_warnings(group):
paragraphs.append("\n".join(warnings))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Render every failed step name

When a target has two or more failed workflow steps, _target_qualifier returns no qualifier and this body builder only adds shared tests and warnings. The summary therefore reports, for example, 2 steps, but both step names are discarded even though the gatherer deliberately collects multiple failing steps when on-failure steps also fail. Add the distinct _group_steps details to the group body, analogous to the failed-test list.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed: now listing them under the targets the way _shared_tests already lists failed tests

@HadhemiDD
HadhemiDD force-pushed the hs/dispatcher-pr-comment-target-first branch from e74145a to f53a288 Compare September 17, 2026 12:53
@HadhemiDD
HadhemiDD marked this pull request as ready for review September 17, 2026 13:07
@HadhemiDD
HadhemiDD requested a review from a team as a code owner September 17, 2026 13:07

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f53a2885d1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".



def _join_names(names: list[str]) -> str:
"""Names in prose: ``a``, ``a and b``, ``a, b and c``."""

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Replace reStructuredText literals in new docstrings

This newly added docstring, along with several others in this change, uses reStructuredText double-backtick literals. Repository prose explicitly requires Markdown single-backtick literals in docstrings and comments, so convert the newly introduced occurrences to single backticks.

AGENTS.md reference: AGENTS.md:L296-L299

Useful? React with 👍 / 👎.

Comment on lines +684 to +686
tests = _group_tests(group)
if len(tests) < 2:
return []

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve the sole test name in compressed groups

When an integration has more than four failed targets, _compressed_targets omits qualifiers unless every target has the same one. If those targets collectively report exactly one failed test but another target fails during setup or has no test detail, this early return also prevents _shared_tests from listing that test, so the group says 1 test without ever naming it. Render the sole test whenever the compressed target line could not carry it.

Useful? React with 👍 / 👎.

@HadhemiDD
HadhemiDD force-pushed the hs/dispatcher-pr-comment-target-first branch 3 times, most recently from 23fbe66 to 5572946 Compare September 18, 2026 10:04
…layout

Group failures into one collapsed disclosure per integration instead of one
entry per failed job, and replace the batch table with a single batch strip.
Every report uses the same section order, so a queued run and a failed one
differ in what they say rather than in where they say it.

A target's job link is the way into the run that failed, so every affected
target keeps a row of its own carrying that link, whatever the counts. No
cardinality threshold changes the shape of anything: the shape changes only
when the body does not fit GitHub's limit, through one renderer with an
explicit detail level. The names under each target go first and the links go
last, and the tier that drops rows says exactly how many it omitted and
leaves the failed batch links to reach them.

A failed test stays under the target that failed it. The one list above that
level is the tests that failed in every one of a group's targets, listed once
with each target's remainder labelled as additional failures, which is
lossless: a target's failures are the common list plus its own. It is claimed
only where every target has reports to intersect, so a group holding a target
that lost its artifacts keeps its tests where they can be believed.

The standalone "Unavailable results" and "Retried jobs" sections go: a result
Dispatcher could not collect joins its integration's group, on the target's
own row, drawn as a warning rather than a failure. A job's status is the
workflow's own conclusion while its error says whether the Dispatcher managed
to collect its results afterwards, so the two are independent and a job can
conclude `success` while carrying `NO_ARTIFACTS`. Only the integrations that
really failed are counted in the alert; what could not be collected is
counted apart from them, in targets and batches separately rather than summed
into one number over both units. A batch-level problem is reported only where
no target's row already accounts for it, so one underlying problem produces
one user-facing explanation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@HadhemiDD
HadhemiDD force-pushed the hs/dispatcher-pr-comment-target-first branch from ac007d0 to e5984dd Compare September 21, 2026 14:40
HadhemiDD and others added 2 commits September 21, 2026 15:54
The suite runs inside a workflow, so a running report's footer named whichever
commit CI was testing and the whole-body goldens differed between a laptop and
CI. The autouse fixture now unsets it; a test that wants a commit asks for one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dd-octo-sts

dd-octo-sts Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Validation Report

All 21 validations passed.

Show details
Validation Description Status
agent-reqs Verify check versions match the Agent requirements file ✅
ci Validate CI configuration and code coverage settings ✅
codeowners Validate every integration has a CODEOWNERS entry ✅
config Validate default configuration files against spec.yaml ✅
dep Verify dependency pins are consistent and Agent-compatible ✅
http Validate integrations use the HTTP wrapper correctly ✅
imports Validate check imports do not use deprecated modules ✅
integration-style Validate check code style conventions ✅
jmx-metrics Validate JMX metrics definition files and config ✅
labeler Validate PR labeler config matches integration directories ✅
legacy-signature Validate no integration uses the legacy Agent check signature ✅
license-headers Validate Python files have proper license headers ✅
licenses Validate third-party license attribution list ✅
metadata Validate metadata.csv metric definitions ✅
models Validate configuration data models match spec.yaml ✅
openmetrics Validate OpenMetrics integrations disable the metric limit ✅
package Validate Python package metadata and naming ✅
qa-label Validate the pull request declares whether it needs QA for the next Agent release ✅
readmes Validate README files have required sections ✅
saved-views Validate saved view JSON file structure and fields ✅
version Validate version consistency between package and changelog ✅

View full run

@HadhemiDD
HadhemiDD requested a review from AAraKKe September 21, 2026 15:54

@AAraKKe AAraKKe left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Lets go! 🚀🚀🚀

Thanks for addressing all the findings sent in slack.

@HadhemiDD
HadhemiDD added this pull request to the merge queue Sep 22, 2026
Merged via the queue into master with commit a68d266 Sep 22, 2026
388 of 392 checks passed
@HadhemiDD
HadhemiDD deleted the hs/dispatcher-pr-comment-target-first branch September 22, 2026 10:06
@dd-octo-sts dd-octo-sts Bot added this to the 7.85.0 milestone Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ddev qa/skip-qa Automatically skip this PR for the next QA team/agent-integrations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants