Skip to content

fix(trace-utils)!: serialize v0.5 span links and events into meta#980

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 5 commits into
mainfrom
paullgdc/trace-util/v05_event_span_links_ser
Jul 11, 2026
Merged

fix(trace-utils)!: serialize v0.5 span links and events into meta#980
gh-worker-dd-mergequeue-cf854d[bot] merged 5 commits into
mainfrom
paullgdc/trace-util/v05_event_span_links_ser

Conversation

@paullegranddc

@paullegranddc paullegranddc commented Mar 27, 2025

Copy link
Copy Markdown
Contributor

What does this PR do?

The v0.5 trace format is a fixed 12-element positional span array with no dedicated slots for span links, span events, or meta_struct. The v0.5 conversion previously dropped span links and span events. The Datadog agent/backend read them back from the meta field as JSON strings, so this PR serializes them there:

  • Span linksmeta["_dd.span_links"], matching the agent's OTLP transform.MarshalLinks: a hex-encoded 128-bit trace_id (high 64 bits then low), hex-encoded 64-bit span_id, and optional tracestate/attributes. The v0.4 flags field is intentionally omitted to match the agent, the canonical producer of this key.
  • Span eventsmeta["events"], matching the agent's MarshalEvents ({time_unix_nano, name, attributes}, attributes rendered as natural JSON rather than the v0.4 msgpack tagged form).

Both keys are only emitted when non-empty.

span_links fallback format spec
event fallback format spec

Motivation

Ensure the v0.5 format carries the same span data as v0.4. Without these fallbacks span links and events are silently dropped on the v0.5 path.

Additional Notes

Reworked on top of current main, which had refactored the span types to be generic over a TraceData/SpanText abstraction with a zero-copy borrowed variant.

Carrying links/events requires interning dynamically-built JSON strings, which a borrowed (&str) dictionary cannot own. The v0.5 shared dictionary therefore always owns its strings (SharedDictBytes), via a new SpanText::to_bytes_string conversion: borrowed input text is copied, owned text is reference-counted. Tradeoff: the zero-copy decode path now copies span text into the v0.5 dictionary; owned-BytesString callers are unaffected.

meta_struct still has no v0.5 representation (arbitrary binary blobs, no agent-side meta-key convention) and is documented as dropped; callers needing it must use the v0.4 output format.

How to test the change?

cargo nextest run -p libdd-trace-utils -p libdd-data-pipeline -E '!test(tracing_integration_tests::)'

Unit tests cover: the _dd.span_links/events JSON shapes; 128-bit hex trace_id encoding; conditional key emission; flags omission; all scalar attribute types plus arrays and multi-attribute events; the meta_struct drop; multi-link and partial-field link serialization; and preserved dictionary interning order.

Breaking changes

This is an API-breaking change (Rust API; libdatadog callers pin versions). The v0.5 shared dictionary is now always owned (SharedDictBytes) so it can intern dynamically-built JSON:

  • v05::from_v04_span now takes &mut SharedDictBytes (was &mut SharedDict<T::Text>).
  • TraceChunks::V05 now holds SharedDictBytes (was SharedDict<T::Text>).

@paullegranddc
paullegranddc requested review from a team as code owners March 27, 2025 12:54
@pr-commenter

pr-commenter Bot commented Mar 27, 2025

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-07-10 17:44:31

Comparing candidate commit b2dda5c in PR branch paullgdc/trace-util/v05_event_span_links_ser with baseline commit ffd3e80 in branch main.

Found 1 performance improvements and 6 performance regressions! Performance is the same for 68 metrics, 10 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:datadog_sample_span/complex_rule_partial_match/wall_time

  • 🟩 execution_time [-10.726ns; -10.566ns] or [-4.346%; -4.281%]

scenario:datadog_sample_span/multiple_rules_last_match/wall_time

  • 🟥 execution_time [+8.741ns; +8.841ns] or [+4.435%; +4.486%]

scenario:glob_matcher/ascii_case_insensitive_match/wall_time

  • 🟥 execution_time [+1.903ns; +1.959ns] or [+6.889%; +7.093%]

scenario:glob_matcher/ascii_exact_match/wall_time

  • 🟥 execution_time [+1.800ns; +1.868ns] or [+6.489%; +6.734%]

scenario:glob_matcher/ascii_exact_miss/wall_time

  • 🟥 execution_time [+2.333ns; +2.378ns] or [+19.597%; +19.973%]

scenario:trace_buffer/4_senders/no_delay

  • 🟥 execution_time [+169.054µs; +198.480µs] or [+7.293%; +8.563%]
  • 🟥 throughput [-124305.349op/s; -105443.399op/s] or [-7.994%; -6.781%]

Candidate

Omitted due to size.

Baseline

Omitted due to size.

@paullegranddc paullegranddc changed the title fix(trace-utils: v05 events and span links serialization fix(trace-utils): v05 events and span links serialization Mar 27, 2025

@hoolioh hoolioh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Couple of comments. Additionally it'd be great to add spanlinks and spanevents support to v05 snapshots in data-pipeline/tests/ to have them covered.

Comment thread trace-utils/src/span/v05/mod.rs Outdated
Comment on lines +149 to +150
if !span.span_links.is_empty() {
let serialized_span_links = serde_json::to_string(&span.span_links)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we should check here for the 25kb limit on the tag value, right?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Yes, anything beyond 25KB limits is dropped. the implementation should try to stuff as many as links possible under the limit and drop the others.

There used to be dropped_attributes_count to count the dropped attributes in case of oversized span links which i didn't see our implementation.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Good question — I looked into it and concluded we shouldn't add a guard here. Reasoning:

The 25 KB cap (traceutil.MaxMetaValLen = 25000) lives agent-side in truncator.go, applied uniformly to every meta value as the final normalization step (Truncate(span) in agent/agent.go), regardless of which key or source produced it. The agent is the arbiter of this limit — it normalizes whatever it receives.

Given that, a check here:

  • couldn't improve the outcome — truncating a JSON string to fit 25 KB produces invalid JSON (exactly what the agent's truncator does anyway), and dropping the key would instead diverge from what the agent does with an oversized value (keep it, truncated). Either way the agent re-applies its own 25 KB cap as its last step, so a client-side guard can't change the result;
  • would be inconsistent — libdatadog caps no other meta value's length anywhere in the v0.4/v0.5 conversion; it defers meta-value length normalization to the agent. Guarding only these two keys would be the lone exception.

So I've left it to the agent's existing uniform truncation. Happy to revisit if you'd rather we drop oversized link/event blobs client-side (a deliberate divergence from the agent's normalization).

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.

Agreed on not doing truncation for now. That could be followup PR, with valid JSON truncation or we could just ignore that since v05 is going to be deprecated in the not so far future

Comment thread trace-utils/src/span/v05/mod.rs Outdated

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

a few minor comments around tests and one major around tag size limit

overall looks good.

Comment thread trace-utils/src/span/v05/mod.rs Outdated
Comment thread trace-utils/src/span/v05/mod.rs Outdated
Comment thread trace-utils/src/span/v05/mod.rs Outdated
Comment on lines +149 to +150
if !span.span_links.is_empty() {
let serialized_span_links = serde_json::to_string(&span.span_links)?;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Yes, anything beyond 25KB limits is dropped. the implementation should try to stuff as many as links possible under the limit and drop the others.

There used to be dropped_attributes_count to count the dropped attributes in case of oversized span links which i didn't see our implementation.

@danielsn
danielsn requested a review from a team as a code owner June 24, 2025 21:31
@dd-devflow dd-devflow Bot closed this Jun 27, 2025
@dd-devflow
dd-devflow Bot deleted the paullgdc/trace-util/v05_event_span_links_ser branch June 27, 2025 00:00
@ekump
ekump restored the paullgdc/trace-util/v05_event_span_links_ser branch June 27, 2025 13:37
@ekump ekump reopened this Jun 27, 2025
@dd-devflow dd-devflow Bot closed this Jun 28, 2025
@dd-devflow
dd-devflow Bot deleted the paullgdc/trace-util/v05_event_span_links_ser branch June 28, 2025 00:00
@paullegranddc
paullegranddc restored the paullgdc/trace-util/v05_event_span_links_ser branch June 30, 2025 08:13
@paullegranddc paullegranddc reopened this Jun 30, 2025
@dd-devflow dd-devflow Bot closed this Jul 1, 2025
@dd-devflow
dd-devflow Bot deleted the paullgdc/trace-util/v05_event_span_links_ser branch July 1, 2025 00:00
@bengl bengl reopened this Jun 26, 2026
@datadog-datadog-prod-us1-2

datadog-datadog-prod-us1-2 Bot commented Jun 26, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 98.67%
Overall Coverage: 74.45% (+0.13%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: b2dda5c | Docs | Datadog PR Page | Give us feedback!

@ekump
ekump dismissed ganeshnj’s stale review June 27, 2026 19:20

The 25KB tag-value truncation concern is being handled separately in #2161. The other points from this March 2025 review round are addressed in the updated PR, so dismissing to unblock re-review.

@bengl
bengl force-pushed the paullgdc/trace-util/v05_event_span_links_ser branch from b19c492 to a88e3a7 Compare June 29, 2026 17:47
@github-actions

Copy link
Copy Markdown
Contributor

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/paullgdc/trace-util/v05_event_span_links_ser

Summary by Rule

Rule Base Branch PR Branch Change
unimplemented 1 1 No change (0%)
Total 1 1 No change (0%)

Annotation Counts by File

File Base Branch PR Branch Change
libdd-trace-utils/src/tracer_payload.rs 1 1 No change (0%)

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 22 22 No change (0%)
datadog-live-debugger 4 4 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-sidecar 45 45 No change (0%)
libdd-common 13 13 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-data-pipeline 6 6 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-remote-config 3 3 No change (0%)
libdd-telemetry 20 20 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 3 3 No change (0%)
libdd-trace-stats 1 1 No change (0%)
libdd-trace-utils 11 11 No change (0%)
Total 182 182 No change (0%)

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality.

@bengl
bengl force-pushed the paullgdc/trace-util/v05_event_span_links_ser branch 2 times, most recently from b7d6356 to bf07b8c Compare June 29, 2026 18:06
@bengl bengl changed the title fix(trace-utils): v05 events and span links serialization fix(trace-utils)!: serialize v0.5 span links and events into meta Jun 29, 2026
The v0.5 trace format is a fixed 12-element positional span array with no
slots for span links, span events, or meta_struct. Previously the v0.5
conversion dropped span links and span events entirely. The agent and
backend read them back from `meta` as JSON strings, so serialize them
there:

- span links under the "_dd.span_links" key, matching the agent's OTLP
  `transform.MarshalLinks`: a hex-encoded 128-bit trace_id (high then low
  64 bits), hex-encoded 64-bit span_id, and optional tracestate and
  attributes. The v0.4 flags field is intentionally omitted to match the
  agent, the canonical producer of this key.
- span events under the "events" key, matching the agent's
  `MarshalEvents` (time_unix_nano, name, attributes as natural JSON).

Both keys are only emitted when non-empty.

Event and link attributes are emitted with keys in sorted order, matching
Go's encoding/json (used by the agent), so the output is deterministic
despite the HashMap source. The v0.5 exporter snapshot is updated to carry
the new events / _dd.span_links meta keys.

Carrying these requires interning dynamically-built JSON strings, which a
borrowed text dictionary cannot own. The v0.5 shared dictionary therefore
always owns its strings (SharedDictBytes) via a new SpanText::to_bytes_string
conversion: borrowed input text is copied, owned text is reference-counted.

meta_struct still has no v0.5 representation (arbitrary binary blobs, no
agent-side meta-key convention) and is documented as dropped; callers that
need it must use the v0.4 output format.

Co-authored-by: paullegranddc <[email protected]>

BREAKING CHANGE: the v0.5 shared dictionary is now always owned
(`SharedDictBytes`). `v05::from_v04_span` takes `&mut SharedDictBytes`
instead of `&mut SharedDict<T::Text>`, and the `TraceChunks::V05` variant
holds `SharedDictBytes` instead of `SharedDict<T::Text>`.
@bengl
bengl force-pushed the paullgdc/trace-util/v05_event_span_links_ser branch from bf07b8c to f82a230 Compare June 29, 2026 18:22
@dd-octo-sts

dd-octo-sts Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 7.88 MB 7.88 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 85.88 MB 86.07 MB +.21% (+191.64 KB) 🔍
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.61 MB 10.61 MB +.03% (+3.61 KB) 🔍
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 97.10 MB 97.29 MB +.19% (+191.63 KB) 🔍
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 25.45 MB 25.56 MB +.42% (+109.50 KB) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 88.44 KB 88.44 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 184.55 MB 185.13 MB +.31% (+592.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 946.77 MB 948.55 MB +.18% (+1.78 MB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.32 MB 8.34 MB +.24% (+20.50 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 88.44 KB 88.44 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 24.62 MB 24.68 MB +.25% (+64.00 KB) 🔍
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 49.03 MB 49.13 MB +.20% (+104.57 KB) 🔍
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 22.05 MB 22.14 MB +.40% (+92.50 KB) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 89.82 KB 89.82 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 188.76 MB 189.35 MB +.31% (+608.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 935.45 MB 937.29 MB +.19% (+1.84 MB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.43 MB 6.45 MB +.24% (+16.00 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 89.82 KB 89.82 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 26.43 MB 26.50 MB +.26% (+72.00 KB) 🔍
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 46.66 MB 46.75 MB +.20% (+98.10 KB) 🔍
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 76.58 MB 76.76 MB +.23% (+188.06 KB) 🔍
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.78 MB 8.79 MB +.17% (+16.00 KB) 🔍
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 92.10 MB 92.29 MB +.20% (+192.42 KB) 🔍
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.69 MB 10.71 MB +.21% (+23.01 KB) 🔍

@paullegranddc
paullegranddc dismissed hoolioh’s stale review July 10, 2026 14:20

Comments have been adress

@paullegranddc

Copy link
Copy Markdown
Contributor Author

Approved, but I cannot approve since this is technically my PR

@paullegranddc

Copy link
Copy Markdown
Contributor Author

There is some redundant code with the agentless endpoint here https://github.com/DataDog/libdatadog/blob/main/libdd-trace-utils/src/agentless_encoder/mod.rs#L322 but we can do the unification in a followup PR

@Aaalibaba42 Aaalibaba42 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Idk the protocol well, but rust side seems reasonable o/

@iunanua iunanua left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Second! 😆

Comment thread libdd-trace-utils/src/span/v05/mod.rs Outdated

// Intern fields in the same order as the base conversion to keep dictionary indices
// stable; the span links / events keys are appended to `meta` afterwards.
let service = dict.get_or_insert(span.service.to_bytes_string())?;

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.

I'm ok with doing this in a follow-up PR (let's make sure to create a Jira ticket if we do) - But should we have something like SharedDIctBytes::get_or_insert_with() that takes a &str instead so we don't do the ByteString allocation so frequently for what is most often going to be a "hit" and not an "insert" and defer the to_bytes_string() to only inserts?

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.

This is a topic we have been discussing with @VianneyRuhlmann for a while. Taking references to the v04 span string might not be possible in all cases as it requires keeping the v04 spans alive and pinned to the stack.

The solution would probably to add a from_string function to the SpanText trait, which would allow both:

  • Create new dynamic SpanText strings for cases like this where we modify meta attributes in the exporter
  • not having to convert ByteString and instead taking ownership of existing Spantext objects

but that requires non trivial changes to how we implement the trait in python (because we cannot python string in rust because no GIL).
I think a Jira ticket with refactoring of this after we implement dynamic SpanText creation in the exporter situation is the best course of action

Comment thread libdd-trace-utils/src/span/v05/mod.rs Outdated
Comment thread libdd-trace-utils/src/span/v05/mod.rs Outdated
/// low 64 bits).
/// - `span_id` is the 64-bit id hex-encoded as 16 lowercase chars.
/// - `tracestate` and `attributes` are only emitted when non-empty.
/// - The v0.4 `flags` field is intentionally not emitted: it is not part of the `_dd.span_links`

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.

I'm slightly confused by this comment and behavior. The RFC states that flags should only be omitted if not set. Is the RFC wrong?

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.

I'm not sure what my original intention was.
It looks like the agent does not emit flags but that it's a bug in the agent, not an actual thing 🤔

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.

added flags serialization

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

I have a question around dropping flags, but LGTM

@paullegranddc

Copy link
Copy Markdown
Contributor Author

/merge

@gh-worker-devflow-routing-ef8351

gh-worker-devflow-routing-ef8351 Bot commented Jul 10, 2026

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-10 17:19:09 UTC ℹ️ Start processing command /merge


2026-07-10 17:19:17 UTC ℹ️ MergeQueue: waiting for PR to be ready

This pull request is not mergeable according to GitHub. Common reasons include pending required checks, missing approvals, or merge conflicts — but it could also be blocked by other repository rules or settings.
It will be added to the queue as soon as checks pass and/or get approvals. View in MergeQueue UI.
Note: if you pushed new commits since the last approval, you may need additional approval.
You can remove it from the waiting list with /remove command.


2026-07-10 18:00:08 UTC ℹ️ MergeQueue: merge request added to the queue

The expected merge time in main is approximately 1h (p90).


2026-07-10 18:46:07 UTCMergeQueue: The checks failed on this merge request

Tests failed on this commit ccebacd:

What to do next?

  • Investigate the failures and when ready, re-add your pull request to the queue!
  • If your PR checks are green, try to rebase/merge. It might be because the CI run is a bit old.
  • Any question, go check the FAQ.

@paullegranddc

Copy link
Copy Markdown
Contributor Author

/merge

@gh-worker-devflow-routing-ef8351

gh-worker-devflow-routing-ef8351 Bot commented Jul 10, 2026

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-10 23:29:46 UTC ℹ️ Start processing command /merge


2026-07-10 23:29:50 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in main is approximately 1h (p90).


2026-07-11 00:12:37 UTC ℹ️ MergeQueue: This merge request was merged

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants