Skip to content

skill(apm-integrations): additional rules from recent HTTP-category PR reviews#11927

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 9 commits into
masterfrom
feat/skill-http-followup-rules
Jul 16, 2026
Merged

skill(apm-integrations): additional rules from recent HTTP-category PR reviews#11927
gh-worker-dd-mergequeue-cf854d[bot] merged 9 commits into
masterfrom
feat/skill-http-followup-rules

Conversation

@jordan-wong

@jordan-wong jordan-wong commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Extends the add-apm-integrations skill with additional rules derived from reviewer feedback and CI-fix commits across recent HTTP-category PRs (#11708 sparkjava-2.3, #11709 feign-10.8, #11717 commons-httpclient-2.0). Also reconciles a conflict between two maintainer positions on super(...) naming.

Follow-on to #11760.

What's added

Rules from reviewer comments (in the referenced PRs):

Area Rule Source
Async wrapping (advice-class.md) Do not open a span on an async wrapper when the sync delegate is already instrumented — produces two spans per request @ValentinZakharov on #11709
Helper anti-pattern (advice-class.md) Do not extract advice logic into a per-instrumentation helper just to shorten the advice body — inline unless genuinely shared @ygree on #11717
Framework-in-framework (advice-class.md) When an inner framework (Spark routes, JAX-RS handlers) runs inside an outer HTTP server (Jetty/Netty/Undertow), enrich the active span with HTTP_RESOURCE_DECORATOR.withRoute(...) — do NOT create a new span, Decorator, or AgentScope. Null-check activeSpan() first. @codex on #11708
CompletableFuture (context-tracking.md) Do not reassign future = future.whenComplete(...)whenComplete produces a dependent stage, and cancelling that stage does not cancel the original request @codex on #11709
Test hygiene (tests.md) No Thread.sleep(); embedded servers as static fields, not per-test; shared scaffolding in a base class; ForkedTest requires a justified isolation reason; no default jvmArgs in test tasks @PerfectSlayer on #11708
Module preservation (instrumenter-module.md) When rewriting or refactoring an existing module, preserve every override from master (super(...), defaultEnabled(), helperClassNames(), contextStore(), orderPriority(), muzzleDirective()) — silent loss of defaultEnabled()=false on an opt-in integration ships it on by default Recurring theme across #11708 / #11709
Duplicate modules (instrumenter-module.md) Before creating dd-java-agent/instrumentation/$framework/$framework-$version/, list the parent directory to check for existing coverage; do not create parallel duplicate modules @PerfectSlayer historically on #10941
testImplementation version (muzzle.md) Default to matching the module's declared minimum; document justified deviations (e.g. sparkjava-2.3's compile-against-2.3 / test-against-2.4 with a build.gradle header comment) @PerfectSlayer on #11708

Rules from CI-fix commit history on #11708:

Area Rule
advice-class.md No non-constant static fields in *Advice.java (muzzle contract — advice methods are inlined and non-constant statics get pulled into every callsite)
supported-configurations.md Registry uses canonical type names — boolean, int (NOT integer), decimal (NOT double), string, array, map. Every super(...) name needs a matching _ENABLED entry; every _ANALYTICS_SAMPLE_RATE needs a matching _ANALYTICS_ENABLED.
instrumenter-module.md Any helper class called from advice must be declared in helperClassNames() — otherwise the target classloader lacks it and the advice throws NoClassDefFoundError at runtime

super(...) naming reconciliation (instrumenter-module.md)

Two maintainer positions were in tension:

Empirical check of the codebase: single-name is the norm even for versioned modules — freemarker-2.3.9 + freemarker-2.3.24 both super("freemarker"); liberty-20.0 + liberty-23.0 both super("liberty"). The multi-name form appears when frameworks have real cross-version group switches: okhttp (super("okhttp", "okhttp-3") because okhttp-2.0/ sibling exists).

Also worth noting: the prior skill example for the version-alias pattern used super("jedis", "jedis-3.0"), but the shipping jedis-3.0 module actually uses super("jedis", "redis"), and DD_TRACE_JEDIS_3_0_ENABLED does not exist in metadata/supported-configurations.json.

Resolution: encode as conditional guidance — pass ONE name unless multiple version-specific sibling directories genuinely exist. sparkjava-2.3's super("sparkjava", "sparkjava-2.4") is included as a nuanced counter-example (the -2.4 alias reflects the version exercised by tests, not the directory name — see the build.gradle header comment on that module).

Both maintainer positions are correct in their respective situations; the reconciled guidance in this PR distinguishes them explicitly.

Files changed

  • .agents/skills/apm-integrations/references/advice-class.md
  • .agents/skills/apm-integrations/references/context-tracking.md
  • .agents/skills/apm-integrations/references/instrumenter-module.md
  • .agents/skills/apm-integrations/references/muzzle.md
  • .agents/skills/apm-integrations/references/supported-configurations.md
  • .agents/skills/apm-integrations/references/tests.md

Not in scope

Five rules distilled from HTTP-client and HTTP-server PR reviews
(feign #11709, commons-httpclient #11717, sparkjava #11708) that were
NOT covered by the R13-R33 additions in #11760.

- advice-class.md: async double-span (do not wrap an async client with
  advice when the sync delegate is already instrumented; produces two
  spans per request). Source: @ValentinZakharov on PR #11709.
- advice-class.md: HelperMethods refactor anti-pattern (do not extract
  advice logic into a per-instrumentation helper class just to shorten
  the advice body — inline unless genuinely shared). Source: @ygree on
  PR #11717.
- instrumenter-module.md: regeneration must preserve every override the
  master version has — not just super(...), but also defaultEnabled(),
  helperClassNames(), contextStore(), orderPriority(), etc. Source:
  Codex reviews on PRs #11709 and #11708 (recurring pattern).
- instrumenter-module.md: scan dd-java-agent/instrumentation/$framework/
  before generating; do not create parallel duplicate modules. Source:
  @PerfectSlayer's historical review on #10941, still an unencoded gap.
- muzzle.md: base testImplementation dep version must match the module's
  declared minimum, not the latest — extends the existing latestDep
  parity rule to base tests. Source: @PerfectSlayer on PR #11708.

3 files, +44 lines. No changes to existing rules.

Reviewers: @mcculls (skill hygiene, reviewed #11760), @PerfectSlayer
(HTTP domain, contributed rules from #10941 + #11708).
Adds 9 rules across 5 files based on extended audit of PR #11708 (sparkjava),
PR #11709 (feign), and the sparkjava CI-fix commit history:

- context-tracking: CompletableFuture cancellation preservation (codex, #11709)
- advice-class: framework-inside-framework span identity (codex, #11708)
- advice-class: no non-constant static fields in advice (CI-fix commit f6d1263)
- tests: 5 test-hygiene rules (PerfectSlayer, #11708) — no Thread.sleep, static
  server field, shared test bases, ForkedTest justification, no default jvmArgs
- supported-configurations: registry type correctness (CI-fix commits 53836a0, 48a84c0)
- instrumenter-module: helperClassNames() for enrichment helpers (CI-fix commit 2c372a3)
…ture

Reconciles two conflicting maintainer positions on the constructor pattern:
- Stuart McCulloch (PR #11760 comment 3552616459) — new instrumentations
  should adopt the version-alias pattern
- Valentin Zakharov (PR #11709 comment 3532152120) — single-module frameworks
  should pass one name; extra names mint DD_TRACE_<NAME>_ENABLED flags with
  no counterpart to gate against

The empirical convention in dd-trace-java confirms Valentin's rule for
single-module frameworks (feign, freemarker, liberty, sparkjava all pass one
name; freemarker and liberty do so even with real version siblings) and
McCulloch's rule for frameworks with real sibling versions (okhttp shipping
okhttp-2.0 and okhttp-3.0 with a shared 'okhttp' group flag).

Also fixes the previous jedis example which claimed 'jedis-3.0' alias but
the shipping jedis-3.0 module actually passes super("jedis", "redis").
@datadog-prod-us1-3

This comment has been minimized.

@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

🟢 Java Benchmark SLOs — All performance SLOs passed

Suite Status
Startup 🟢 pass

SLO thresholds are defined here based on automatically generated metrics. A warning is raised when results are within 5% of the threshold.

PR vs. master results
Scenario Candidate master Δ (95% CI of mean)
startup:insecure-bank:iast:Agent 13.99 s 13.95 s [-0.3%; +1.0%] (no difference)
startup:insecure-bank:tracing:Agent 12.91 s 13.00 s [-1.3%; -0.1%] (maybe better)
startup:petclinic:appsec:Agent 16.90 s 16.82 s [-0.5%; +1.5%] (no difference)
startup:petclinic:iast:Agent 16.90 s 16.98 s [-1.3%; +0.3%] (no difference)
startup:petclinic:profiling:Agent 16.48 s 16.84 s [-3.4%; -1.0%] (maybe better)
startup:petclinic:sca:Agent 16.93 s 16.82 s [-0.4%; +1.7%] (no difference)
startup:petclinic:tracing:Agent 15.42 s 15.72 s [-8.9%; +5.0%] (unstable)

Commit: 9359a0e1 · CI Pipeline · Benchmarking Platform UI


Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion.

@jordan-wong

jordan-wong commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

Behaviour check — how the current draft affects generated output

Update (2026-07-13 pm) — original findings retracted. After posting this comment I extracted the compile-step agent trace and discovered the blind regens did NOT actually load the draft skill content in this PR. The toolkit's skill-loader first-match preferred the target repo's in-tree .claude/skills/apm-integrations/ (a symlink to the merged, pre-#11927 .agents/skills/ on the target checkout) over the toolkit-bundled copy that was synced from this branch. So every "rule was in the skill and the model violated it" claim below is wrong — the agent was faithfully following the older pre-#11927 rules, which say the OPPOSITE of what this PR proposes for super(...) naming.

Preserving the original observations below for the record, but with corrections:

Two candidates:

  • commons-httpclient-2.0 (existing on master)
  • sparkjava-2.3 (existing on master)

Static-verification results — corrected classification:

Rule (in this PR) Original claim Corrected classification
Preserve overrides from master (narrow super(...) verbatim) Both FAILED Real failure (commons + sparkjava, narrow case) — Jul-10 rule DID say copy super(...) verbatim; commons added -2.0 alias, sparkjava changed -2.4 to -2.3
Preserve overrides (broader: defaultEnabled, muzzle range, group flag) Both FAILED Not tested — this broader rule was only added in this PR draft; the Jul-10 skill had only the narrow super(...) clause
super(...) single-name for single-module frameworks (F2) Both FAILED Retracted — Jul-10 rule said the OPPOSITE (super("jedis", "jedis-3.0") as CORRECT for new modules). Output is textbook compliance with Jul-10
Framework-inside-framework: enrich, do not replace (S1) Sparkjava FAILED critically Retracted — S1 was drafted in this PR from @codex's #11708 review. Jul-10 skill had no such guidance.
metadata/supported-configurations.json correctness Sparkjava FAILED (dropped group flag) Partial — general rule existed in a Jul-10 reference file the agent didn't Read; specific per-name _ENABLED requirement was only in this PR draft
No non-constant static fields in *Advice.java Both PASSED Passed (rule wasn't in Jul-10 either — the output happens to be correct)
HelperMethods anti-pattern (no wrapper helpers) Both PASSED Passed (rule wasn't in Jul-10 either)

Corrected reading: the rule content in this PR is unchanged and still worth reviewing on its merits. The empirical validation evidence in my original comment is retracted pending a re-run against a properly-loaded skill. I'm setting up that re-run now on an async-category cycle (rxjava-3.0) with the skill correctly loaded via a target-repo branch that has the draft in-tree; results will follow if useful.

Sorry for the noise on the earlier reading.

Copilot AI 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.

Pull request overview

Extends the canonical apm-integrations skill reference docs with additional rules extracted from recent HTTP-category review/CI feedback, and refines guidance around integration naming via super(...) based on version-sibling structure.

Changes:

  • Adds “test hygiene” rules for instrumentation tests (deterministic waits, embedded server lifecycle, base-class factoring, forked-test justification, avoiding default JVM args).
  • Adds registry population guidance for metadata/supported-configurations.json (required _ENABLED entries, analytics key shapes, common mistakes).
  • Expands integration authoring guidance around module discovery, super(...) naming choices, async wrapper double-span avoidance, CompletableFuture cancellation preservation, and advice-class constraints.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
.agents/skills/apm-integrations/references/tests.md Adds test-hygiene rules intended to reduce flakiness and CI cost.
.agents/skills/apm-integrations/references/supported-configurations.md Adds common-mistake guidance for correctly registering new configuration entries.
.agents/skills/apm-integrations/references/muzzle.md Adds a rule tying test dependency versions to declared module ranges/min versions.
.agents/skills/apm-integrations/references/instrumenter-module.md Adds “scan first” guidance, reconciles super(...) naming rules, and adds helper declaration guidance.
.agents/skills/apm-integrations/references/context-tracking.md Adds guidance to preserve cancellation semantics for async return types.
.agents/skills/apm-integrations/references/advice-class.md Adds rules for async double-span avoidance, helper-method anti-pattern, framework-in-framework enrichment, and advice static-field constraints.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .agents/skills/apm-integrations/references/tests.md Outdated
Comment thread .agents/skills/apm-integrations/references/supported-configurations.md Outdated
Comment thread .agents/skills/apm-integrations/references/instrumenter-module.md Outdated
Comment thread .agents/skills/apm-integrations/references/instrumenter-module.md Outdated
Comment thread .agents/skills/apm-integrations/references/muzzle.md Outdated
Comment thread .agents/skills/apm-integrations/references/context-tracking.md Outdated
Comment thread .agents/skills/apm-integrations/references/advice-class.md
7 findings, all verified against master:

- tests.md: waitForTraces(N) waits for >=N (not exactly N) with 20s
  bounded timeout per ListWriter.java
- supported-configurations.md: fix internal contradiction — registry
  uses "decimal" (rates) and "int" (counts), NOT "double"/"integer"
  (matches canonical guidance earlier in same doc, line 52)
- instrumenter-module.md: replace non-existent super("feign") example
  with freemarker (real, verifiable); replace misleading single-name
  list with an accurate one; add sparkjava-2.3 counter-example
  explaining why super("sparkjava","sparkjava-2.4") uses the -2.4
  alias despite living in the -2.3/ directory (compile against 2.3,
  test against 2.4 for JettyHandler)
- muzzle.md: reframe testImplementation=min as default preference,
  not absolute rule; document justified deviation with sparkjava-2.3
  build.gradle as the canonical example
- context-tracking.md: reframe CompletableFuture pattern to emphasize
  that the correct (non-reassigning) pattern does NOT require
  @Advice.Return(readOnly=false); only add readOnly=false if you
  have a documented reason to substitute the return value
- advice-class.md: S1 framework-in-framework example now includes
  the null-check on activeSpan(), matching sparkjava's
  RoutesInstrumentation.java:52-55 (withRoute() does not guard)

Copilot's citations were checked against master before applying.
…tent

- Reword "regenerating an existing module" as "rewriting or refactoring" —
  the guidance applies whenever an existing module is being changed, not
  just to automated regeneration flows.
- Remove the "Rationale traceable to reviewer comments (PR/comment IDs)"
  footnote. That attribution belongs in commit messages and PR descriptions,
  not in the shipping skill; readers of the skill just need the rule.
@jordan-wong jordan-wong changed the title skill(apm-integrations): HTTP feedback cycle rules + super(...) reconciliation skill(apm-integrations): additional rules from recent HTTP-category PR reviews Jul 13, 2026
@jordan-wong jordan-wong marked this pull request as ready for review July 13, 2026 19:01
@jordan-wong jordan-wong requested a review from a team as a code owner July 13, 2026 19:01
@jordan-wong jordan-wong requested a review from mhlidd July 13, 2026 19:01
@jordan-wong jordan-wong self-assigned this Jul 13, 2026
@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Hi! 👋 Thanks for your pull request! 🎉

To help us review it, please make sure to:

  • Add at least one type, and one component or instrumentation label to the pull request

If you need help, please check our contributing guidelines.

@jordan-wong jordan-wong requested review from mcculls and removed request for mhlidd July 13, 2026 19:01

@datadog-prod-us1-3 datadog-prod-us1-3 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.

Datadog Autotest: PASS

More details

Documentation-only PR extending APM integration guidance with rules from recent reviewer feedback. All code examples verified against actual module implementations (sparkjava-2.3, jedis, okhttp, freemarker, liberty); naming reconciliation is empirically grounded and consistent; cross-references validated. No executable code changes — no regressions possible.

Was this helpful? React 👍 or 👎

Open Bits AI session

🤖 Datadog Autotest · Commit 04a0719 · What is Autotest? · Any feedback? Reach out in #autotest

@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: 04a07191ee

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .agents/skills/apm-integrations/references/context-tracking.md Outdated
Comment thread .agents/skills/apm-integrations/references/advice-class.md Outdated
Comment thread .agents/skills/apm-integrations/references/context-tracking.md Outdated
Comment thread .agents/skills/apm-integrations/references/advice-class.md Outdated
Four findings, all P2, all verified against master:

- advice-class.md (framework-in-framework): narrow the rule to route-only
  enrichers (SparkJava). JAX-RS annotations and Ratpack legitimately create
  handler/controller spans in addition to the outer server span
  (jax-rs-annotations-2.0/JaxRsAnnotationsInstrumentation.java:128;
  ratpack-1.5/TracingHandler.java:41). Original blanket wording would
  cause future JAX-RS/Ratpack instrumentation to drop expected child spans.

- advice-class.md (async wrapper): completion-only propagation is not
  enough when the sync delegate runs on a worker thread — the sync
  client's advice creates its span BEFORE the future completes. Document
  the two supported approaches: (1) rely on executor instrumentation,
  or (2) reactivate around the delegate submission via a shared wrapper.
  Reference java-concurrent-1.8's existing patterns.

- context-tracking.md (CompletableFuture): the CORRECT example was
  itself wrong on two counts caught by Codex:
    (a) missing onThrowable = Throwable.class means the exit advice
        skips when the instrumented method throws before returning
        the future — any span started on enter would leak
    (b) used a lambda body, which the "no lambdas in advice methods"
        rule in advice-class.md:111 explicitly forbids — lambdas
        compile to synthetic classes that are not helper-injected

  Rewrite the CORRECT example with @Advice.Thrown handling, a named
  BiConsumer helper (ClientCompletionCallback) instead of a lambda,
  and helperClassNames() implications.
jordan-wong added a commit that referenced this pull request Jul 14, 2026
Automated integration-authoring pass on rxjava-3.0, produced against the
draft skill in #11927 (which was in-tree on the target checkout at
generation time — using the skill-loading precedence fix from the
2026-07-13 HTTP cycle correction). Reference for #11927 reviewers to
see concrete output the current skill draft produces.

Not intended to be merged as-is.

Base: master @ 05671ce (rebased from original bd134f3; the original
branch inherited a stash-merge revert of #11852 during eval branch setup
that dropped DD_TRACE_ROBOLECTRIC_ENABLED from metadata plus 172 unrelated
files. This rebased version cherry-picks ONLY the rxjava-3.0 module output
onto current master, preserving all unrelated upstream changes.)

Cost: \$43.23, wall time ~3.5h, reviewer approved with 0 todos remaining.
Diff scope: dd-java-agent/instrumentation/rxjava/rxjava-3.0/ only.
Metadata: no change (all rxjava3 entries already present on master).
jordan-wong added a commit that referenced this pull request Jul 14, 2026
…skill

Automated integration-authoring pass on reactor-core-3.1, produced against
the draft skill in #11927. Reference for #11927 reviewers to see concrete
output the current skill draft produces.

Not intended to be merged as-is.

Base: master @ 05671ce (rebased from original 2e1d2b9; the original
branch inherited a stash-merge revert of #11852 during eval branch setup
that dropped DD_TRACE_ROBOLECTRIC_ENABLED from metadata plus 172 unrelated
files. This rebased version cherry-picks ONLY the reactor-core-3.1 module
output onto current master, preserving all unrelated upstream changes.)

Cost: \$13, reviewer approved with 0 todos remaining.
Diff scope: dd-java-agent/instrumentation/reactor-core-3.1/ only.
Metadata: no change (all reactor entries already present on master).

Note: the toolkit reorganized the package layout from
'datadog.trace.instrumentation.reactor.core' (master) to
'datadog.trace.instrumentation.reactorcore' (eval). This is a
regen-preservation Rule #2 concern; documented for reviewer consideration.
The version alias (e.g. `"jedis-3.0"`) maps to `DD_TRACE_JEDIS_3_0_ENABLED`. Do NOT add version aliases to the decorator's `instrumentationNames()` — that method is for analytics keys only.
Users can then set `DD_TRACE_OKHTTP_ENABLED=false` (group off) OR `DD_TRACE_OKHTTP_3_ENABLED=false` (this version only).

**New module you expect will imminently sibling** — add the alias upfront and document why in the commit message. If no sibling appears, drop the alias in a follow-up.

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.

Suggested change
**New module you expect will imminently sibling** — add the alias upfront and document why in the commit message. If no sibling appears, drop the alias in a follow-up.
**New module you expect will soon have a sibling** — add the alias upfront and document why in the commit message. If no sibling appears, drop the alias in a follow-up.

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.

Applied your suggestion verbatim in 3c2214d6f2 — "soon have a sibling."


**Existing module** (modifying, refactoring, or splitting): read the existing module's `super(...)` and copy it verbatim. Integration names are public config API — renaming one silently breaks customer `DD_TRACE_*_ENABLED` settings.

Before choosing, run `ls dd-java-agent/instrumentation/$framework/` — the directory contents are the ground truth for whether siblings exist.

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.

Suggested change
Before choosing, run `ls dd-java-agent/instrumentation/$framework/` — the directory contents are the ground truth for whether siblings exist.
Before choosing, list the `dd-java-agent/instrumentation/$framework/` directory — the contents are the ground truth for whether siblings exist.

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.

Applied your suggestion verbatim in 3c2214d6f2 — "list the dd-java-agent/instrumentation/$framework/ directory — the contents are the ground truth for whether siblings exist."


## Enrichment helpers must be declared in `helperClassNames()`

If your advice delegates to a helper class (e.g. `SparkJavaRouteEnricher.enrich(...)` from inside `RoutesAdvice`), the helper's fully-qualified class name MUST be listed in `helperClassNames()` on the `InstrumenterModule`:

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.

caveat: unless the helper is supplied on the boot-class-path, such as by agent-bootstrap

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 in 3c2214d6f2 — the requirement now reads "MUST be listed in helperClassNames() on the InstrumenterModule — unless the helper is supplied on the boot-class-path (e.g. from agent-bootstrap), in which case it is already available without injection."

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

LGTM

@jordan-wong jordan-wong added this pull request to the merge queue Jul 15, 2026
@dd-octo-sts

dd-octo-sts Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

/merge

@gh-worker-devflow-routing-ef8351

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

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-15 19:04:55 UTC ℹ️ Start processing command /merge


2026-07-15 19:05:01 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in master is approximately 2h (p90).


2026-07-15 19:26:58 UTCMergeQueue: The build pipeline contains failing jobs for this merge request

Build pipeline has failing jobs for 3b64d3e:

⚠️ Do NOT retry failed jobs directly (why?).

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.
Details

Since those jobs are not marked as being allowed to fail, the pipeline will most likely fail.
Therefore, and to allow other builds to be processed, this merge request has been rejected and the pipeline got canceled.

@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 15, 2026
@jordan-wong jordan-wong added this pull request to the merge queue Jul 16, 2026
@dd-octo-sts

dd-octo-sts Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

/merge

@gh-worker-devflow-routing-ef8351

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

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-16 13:58:56 UTC ℹ️ Start processing command /merge


2026-07-16 13:59:01 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in master is approximately 2h (p90).


2026-07-16 14:10:12 UTC 🚨 MergeQueue: This merge request is in error because of DDCI

DDCI pipeline didn't start (sourcing_failed)... Please retry.

DDCI Change Request: 1961309463999665824
You can get help from #ci-infra-support

@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 16, 2026
@jordan-wong jordan-wong enabled auto-merge July 16, 2026 14:29
@jordan-wong jordan-wong added this pull request to the merge queue Jul 16, 2026
@dd-octo-sts

dd-octo-sts Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

/merge

@gh-worker-devflow-routing-ef8351

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

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-16 15:04:21 UTC ℹ️ Start processing command /merge


2026-07-16 15:04:27 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in master is approximately 2h (p90).


2026-07-16 15:22:40 UTCMergeQueue: The build pipeline contains failing jobs for this merge request

Build pipeline has failing jobs for 9e3b9f0:

⚠️ Do NOT retry failed jobs directly (why?).

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.
Details

Since those jobs are not marked as being allowed to fail, the pipeline will most likely fail.
Therefore, and to allow other builds to be processed, this merge request has been rejected and the pipeline got canceled.

@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 16, 2026
@mcculls mcculls added this pull request to the merge queue Jul 16, 2026
@dd-octo-sts

dd-octo-sts Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

/merge

@gh-worker-devflow-routing-ef8351

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

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-16 15:43:26 UTC ℹ️ Start processing command /merge


2026-07-16 15:43:31 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in master is approximately 2h (p90).


2026-07-16 16:12:16 UTCMergeQueue: The build pipeline contains failing jobs for this merge request

Build pipeline has failing jobs for 8605c11:

⚠️ Do NOT retry failed jobs directly (why?).

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.
Details

Since those jobs are not marked as being allowed to fail, the pipeline will most likely fail.
Therefore, and to allow other builds to be processed, this merge request has been rejected and the pipeline got canceled.

@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 16, 2026
@sarahchen6

Copy link
Copy Markdown
Contributor

/merge

@gh-worker-devflow-routing-ef8351

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

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-16 16:24:22 UTC ℹ️ Start processing command /merge


2026-07-16 16:24:27 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in master is approximately 2h (p90).


2026-07-16 17:29:13 UTC ℹ️ MergeQueue: This merge request was merged

@PerfectSlayer PerfectSlayer added the tag: no release notes Changes to exclude from release notes label Jul 16, 2026
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d Bot merged commit 084b01b into master Jul 16, 2026
590 checks passed
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d Bot deleted the feat/skill-http-followup-rules branch July 16, 2026 17:29
@github-actions github-actions Bot added this to the 1.65.0 milestone Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: tooling Build & Tooling tag: no release notes Changes to exclude from release notes type: documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants