Skip to content

chore: Configure Renovate - #4

Closed
renovate[bot] wants to merge 173 commits into
mainfrom
renovate/configure
Closed

chore: Configure Renovate#4
renovate[bot] wants to merge 173 commits into
mainfrom
renovate/configure

Conversation

@renovate

@renovate renovate Bot commented Jun 14, 2026

Copy link
Copy Markdown

Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.

📚 See our Reading List for relevant documentation you may be interested in reading.

🔡 Do you want to change how Renovate upgrades your dependencies? Add your custom config to renovate.json in this branch. Renovate will update the Pull Request description the next time it runs.


Detected Package Files

  • .github/workflows/nuget-publish.yml (github-actions)
  • .github/workflows/otlp-collector-fixtures.yml (github-actions)
  • .github/workflows/smoketest.yml (github-actions)
  • .github/workflows/verify-real-demos.yml (github-actions)
  • .github/workflows/verify.yml (github-actions)
  • .github/workflows/webapi-aot-demo.yml (github-actions)
  • Directory.Build.props (nuget)
  • benchmarks/Qyl.AutoInstrumentation.Benchmarks/Qyl.AutoInstrumentation.Benchmarks.csproj (nuget)
  • demos/Qyl.LiveInstrumentationDemo/Qyl.LiveInstrumentationDemo.csproj (nuget)
  • demos/Qyl.RealAspNetCoreMetricsDemo/Qyl.RealAspNetCoreMetricsDemo.csproj (nuget)
  • demos/Qyl.RealAzureDemo/Qyl.RealAzureDemo.csproj (nuget)
  • demos/Qyl.RealEfCoreDemo/Qyl.RealEfCoreDemo.csproj (nuget)
  • demos/Qyl.RealElasticTransportDemo/Qyl.RealElasticTransportDemo.csproj (nuget)
  • demos/Qyl.RealElasticsearchDemo/Qyl.RealElasticsearchDemo.csproj (nuget)
  • demos/Qyl.RealGraphQlDemo/Qyl.RealGraphQlDemo.csproj (nuget)
  • demos/Qyl.RealGrpcClientDemo/Qyl.RealGrpcClientDemo.csproj (nuget)
  • demos/Qyl.RealILoggerDemo/Qyl.RealILoggerDemo.csproj (nuget)
  • demos/Qyl.RealKafkaDemo/Qyl.RealKafkaDemo.csproj (nuget)
  • demos/Qyl.RealLog4NetDemo/Qyl.RealLog4NetDemo.csproj (nuget)
  • demos/Qyl.RealMassTransitDemo/Qyl.RealMassTransitDemo.csproj (nuget)
  • demos/Qyl.RealMongoDbDemo/Qyl.RealMongoDbDemo.csproj (nuget)
  • demos/Qyl.RealMySqlConnectorDemo/Qyl.RealMySqlConnectorDemo.csproj (nuget)
  • demos/Qyl.RealMySqlDataDemo/Qyl.RealMySqlDataDemo.csproj (nuget)
  • demos/Qyl.RealNLogDemo/Qyl.RealNLogDemo.csproj (nuget)
  • demos/Qyl.RealNServiceBusDemo/Qyl.RealNServiceBusDemo.csproj (nuget)
  • demos/Qyl.RealNetRuntimeMetricsDemo/Qyl.RealNetRuntimeMetricsDemo.csproj (nuget)
  • demos/Qyl.RealNpgsqlDemo/Qyl.RealNpgsqlDemo.csproj (nuget)
  • demos/Qyl.RealOracleMdaDemo/Qyl.RealOracleMdaDemo.csproj (nuget)
  • demos/Qyl.RealQuartzDemo/Qyl.RealQuartzDemo.csproj (nuget)
  • demos/Qyl.RealRabbitMqDemo/Qyl.RealRabbitMqDemo.csproj (nuget)
  • demos/Qyl.RealRedisDemo/Qyl.RealRedisDemo.csproj (nuget)
  • demos/Qyl.RealSqlClientDemo/Qyl.RealSqlClientDemo.csproj (nuget)
  • demos/Qyl.RealSqliteDemo/Qyl.RealSqliteDemo.csproj (nuget)
  • demos/Qyl.RealWcfClientDemo/Qyl.RealWcfClientDemo.csproj (nuget)
  • global.json (nuget)
  • src/Qyl.AutoInstrumentation.EntityFrameworkCore/Qyl.AutoInstrumentation.EntityFrameworkCore.csproj (nuget)
  • src/Qyl.AutoInstrumentation.Hosting/Qyl.AutoInstrumentation.Hosting.csproj (nuget)
  • src/Qyl.AutoInstrumentation.SourceGenerators/Qyl.AutoInstrumentation.SourceGenerators.csproj (nuget)
  • src/Qyl.AutoInstrumentation.SqlClient/Qyl.AutoInstrumentation.SqlClient.csproj (nuget)
  • src/Qyl.AutoInstrumentation/Qyl.AutoInstrumentation.csproj (nuget)
  • tests/Qyl.AutoInstrumentation.SourceGenerators.Snapshots/Fixture/Qyl.AutoInstrumentation.SourceGenerators.Snapshots.Fixture.csproj (nuget)
  • tools/requirements.txt (pip_requirements)
  • renovate.json (renovate-config)

Configuration Summary

Based on the default config's presets, Renovate will:

  • Start dependency updates only once this onboarding PR is merged
  • Hopefully safe environment variables to allow users to configure.
  • Show all Merge Confidence badges for pull requests.
  • Enable Renovate Dependency Dashboard creation.
  • Use semantic commit type fix for dependencies and chore for all others if semantic commits are in use.
  • Ignore node_modules, bower_components, vendor and various test/tests (except for nuget) directories.
  • Group known monorepo packages together.
  • Use curated list of recommended non-monorepo package groupings.
  • Show only the Age and Confidence Merge Confidence badges for pull requests.
  • Apply crowd-sourced package replacement rules.
  • Apply crowd-sourced workarounds for known problems with packages.
  • Ensure that every dependency pinned by digest and sourced from Forgejo contains a link to the commit-to-commit diff
  • Ensure that every dependency pinned by digest and sourced from Gitea contains a link to the commit-to-commit diff
  • Ensure that every dependency pinned by digest and sourced from GitHub.com and Github enterprise contains a link to the commit-to-commit diff
  • Ensure that every dependency pinned by digest and sourced from GitLab.com contains a link to the commit-to-commit diff
  • Correctly link to the source code for golang.org/x packages
  • Link to pkg.go.dev/... for golang.org/x packages' title
  • Provide a link to octochangelog's improved breakdown for Renovate's changelogs
  • Pin Docker digests.
  • Pin github-action digests.
  • Enable Renovate configuration migration PRs when needed.
  • Pin dependency versions for development dependencies.
  • Recommended configuration for abandoned packages, treating packages without a release for 1 year as abandoned, while taking into account community-sourced overrides.
  • Wait until the npm package is three days old before raising the update. This a) introduces a short delay to allow for malware researchers and scanners to (possibly) detect any malicious behaviour in packages, and b) prevents the maintainer and/or NPM from unpublishing a package you already upgraded to, breaking builds.
  • Run lock file maintenance (updates) early Monday mornings.
  • Use semantic prefixes for commit messages and PR titles.
  • Raise PR when vulnerability alerts are detected.
  • ANcpLua framework — shared Renovate baseline (used by ANcpLua.NET.Sdk, ANcpLua.Roslyn.Utilities, ANcpLua.Analyzers, ANcpLua.Agents)

What to Expect

With your current configuration, Renovate will create 21 Pull Requests:

deps: Pin dependencies
  • Schedule: ["at any time"]
  • Branch name: renovate/pin-dependencies
  • Merge into: main
  • Upgrade actions/checkout to 34e114876b0b11c390a56381ad16ebd13914f8d5
  • Upgrade actions/setup-dotnet to 67a3573c9a986a3f9c594539f4ab511d57bb3ce9
deps: Update dependency Elastic.Transport to 0.17.3
  • Schedule: ["at any time"]
  • Branch name: renovate/elastic.transport-0.x
  • Merge into: main
  • Upgrade Elastic.Transport to 0.17.3
deps: Update dependency NLog to 5.5.1
  • Schedule: ["at any time"]
  • Branch name: renovate/nlog-5.x
  • Merge into: main
  • Upgrade NLog to 5.5.1
deps: Update dotnet monorepo
deps: Update microsoft-extensions to 10.0.9
deps: Update azure azure-sdk-for-net monorepo to 12.29.0
  • Schedule: ["at any time"]
  • Branch name: renovate/azure-azure-sdk-for-net-monorepo
  • Merge into: main
  • Upgrade Azure.Storage.Blobs to 12.29.0
deps: Update dependency Elastic.Clients.Elasticsearch to 8.19.23
  • Schedule: ["at any time"]
  • Branch name: renovate/elastic.clients.elasticsearch-8.x
  • Merge into: main
  • Upgrade Elastic.Clients.Elasticsearch to 8.19.23
deps: Update dependency GraphQL to 7.9.0
  • Schedule: ["at any time"]
  • Branch name: renovate/graphql-7.x
  • Merge into: main
  • Upgrade GraphQL to 7.9.0
deps: Update dependency Oracle.ManagedDataAccess.Core to 23.26.200
  • Schedule: ["at any time"]
  • Branch name: renovate/oracle.manageddataaccess.core-23.x
  • Merge into: main
  • Upgrade Oracle.ManagedDataAccess.Core to 23.26.200
deps: Update grpc-dotnet monorepo to 2.80.0
  • Schedule: ["at any time"]
  • Branch name: renovate/grpc-dotnet-monorepo
  • Merge into: main
  • Upgrade Grpc.Core.Api to 2.80.0
deps: Update opentelemetry to 1.16.0
deps: Update actions/checkout action to v6
  • Schedule: ["at any time"]
  • Branch name: renovate/actions-checkout-6.x
  • Merge into: main
  • Upgrade actions/checkout to df4cb1c069e1874edd31b4311f1884172cec0e10
deps: Update actions/setup-dotnet action to v5
  • Schedule: ["at any time"]
  • Branch name: renovate/actions-setup-dotnet-5.x
  • Merge into: main
  • Upgrade actions/setup-dotnet to 9a946fdbd5fb07b82b2f5a4466058b876ab72bb2
deps: Update dependency Elastic.Clients.Elasticsearch to v9
  • Schedule: ["at any time"]
  • Branch name: renovate/elastic.clients.elasticsearch-9.x
  • Merge into: main
  • Upgrade Elastic.Clients.Elasticsearch to 9.4.2
deps: Update dependency Elastic.Transport to v1
  • Schedule: ["at any time"]
  • Branch name: renovate/elastic.transport-1.x
  • Merge into: main
  • Upgrade Elastic.Transport to 1.0.0
deps: Update dependency GraphQL to v8
  • Schedule: ["at any time"]
  • Branch name: renovate/graphql-8.x
  • Merge into: main
  • Upgrade GraphQL to 8.8.4
deps: Update dependency MassTransit.RabbitMQ to v9
  • Schedule: ["at any time"]
  • Branch name: renovate/masstransit.rabbitmq-9.x
  • Merge into: main
  • Upgrade MassTransit.RabbitMQ to 9.1.2
deps: Update dependency NLog to v6
  • Schedule: ["at any time"]
  • Branch name: renovate/nlog-6.x
  • Merge into: main
  • Upgrade NLog to 6.1.3
deps: Update dependency NServiceBus to v10
  • Schedule: ["at any time"]
  • Branch name: renovate/nservicebus-10.x
  • Merge into: main
  • Upgrade NServiceBus to 10.2.5
deps: Update dependency NServiceBus.Extensions.Hosting to v4
deps: Lock file maintenance
  • Schedule: ["* 0-3 * * 1"]
  • Branch name: renovate/lock-file-maintenance
  • Merge into: main
  • Regenerate lock files to use latest dependency versions

🚸 PR creation will be limited to maximum 2 per hour, so it doesn't swamp any CI resources or overwhelm the project. See docs for prHourlyLimit for details.


❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section.
If you need any further assistance then you can also request help here.


This PR was generated by Mend Renovate. View the repository job log.

ANcpLua and others added 30 commits June 9, 2026 05:18
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Prove the source-generated Confluent.Kafka producer/consumer,
RabbitMQ.Client BasicPublishAsync, and MongoDB.Driver collection
interceptors against real Docker-backed services under managed and
NativeAOT runs, with pinned error-path spans and explicit app-side
TrimmerRootAssembly boundaries for Confluent.Kafka and MongoDB.Driver.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Complete the source-interceptor demo surface: StackExchange.Redis runs
NativeAOT warning-free, Quartz proves source-visible IJob.Execute
delegation under a real scheduler (trimmer-rooted for AOT), MassTransit
8.x publishes to real RabbitMQ under NativeAOT via an app-side
source-generated JsonSerializerContext, and NServiceBus 10 is a
documented managed-only boundary because endpoint creation requires
Reflection.Emit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fix two incremental-caching equality defects in the generator models:
InterceptorTarget carried ImmutableArray<ParameterSpec> and string[]
fields whose record equality compared array references, so pipeline
models never compared equal. Both now use EquatableArray<T> from
ANcpLua.Roslyn.Utilities.Sources (source-only, analyzer-safe embed).
Drop the manual IsExternalInit polyfill the package now supplies and
apply the AL1210 ordinal string-comparison fixes its extensions unlock.
DataReaderExtensions.cs is excluded from the embed: it is a runtime
data-reader helper that is irrelevant inside a Roslyn generator and
trips this repo's stricter ErrorProne.NET gate (ERP022).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The NServiceBus 10.2.0 announcement (discuss.particular.net topic 4626)
confirms full AOT and trimming compliance is not yet available, which is
a stronger source for the managed-only boundary than the source-code
reference alone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sets

The slim-history rebuild of main (PR #2) orphaned the original working
branch, which then received nine more commits (2026-06-09 → 06-11 04:02)
that never reached the new main: HttpClient effective-request metadata
resolution, header-capture fallback path (new QylCaptureHelpers),
status-handling tightening, verifier simplification into shared
verify_helpers.py, and the extracted WebApiAotDemo Program.cs that the
rebuild had dropped while keeping its golden report.

Three-way merged the two genuinely diverged files: ModuleInitializerBoot
(night listener-table refactor + main's sober XML docs) and the source
generator (night dispatch-table refactor + main's ANcpLua.Roslyn.Utilities
adoption).

Skipped docs/pr1-remaining.md — completed-checklist evidence for the
already-merged PR #1; its tracked changes land with this commit.

Also filed the drafted NServiceBus AOT upstream issue under
docs/upstream/ instead of leaving it untracked at the repo root.

Verified: dotnet build (0 warnings), verify-generator-snapshots,
verify-public-api-baseline, verify-source-interceptor-consumer all ok.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ceBus#7817

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
OTEL_DOTNET_EXPERIMENTAL_*_DISABLE_URL_QUERY_REDACTION alone no longer
emits anything: upstream OTel .NET defines those flags as a redaction
toggle on an already-emitted value, but qyl's gate treated them as an
emission enable, so the weakest flag produced the strongest exposure —
a fully unredacted url.full (HttpClient/HttpWebRequest) and raw
url.query (ASP.NET Core) without QYL_AUTOINSTRUMENTATION_CAPTURE_SENSITIVE_VALUES.

Now CaptureSensitiveValues gates emission everywhere and the redaction
flags only upgrade redacted -> raw when emission is already on, which
matches both RUNTIME_SEMANTICS.md and the upstream flag semantics.

Verified: dotnet build (0 warnings); RealHttpClientDemo run with only
OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION=true
emits no url.full tag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Commits 6237ff7 and 23c56fb bounded span names by flattening them to
fixed literals, which overshot: the inputs were already bounded by
construction (closed-set normalized HTTP methods, route templates, RPC
method identifiers, normalized DB operation tokens). Replace the
QylActivityNames constants with composer helpers and use them at every
StartActivity site:

- HTTP client: "{method}" ("GET"), "HTTP" when _OTHER/unknown
- HTTP server: "{method} {route}", method alone without a route
- gRPC client: "{rpc.service}/{rpc.method}" per RPC semconv
- DB: "DB {operation}" (generic + EFCore), "SQL {operation}" (SqlClient)

Demo assertions updated to the semconv shapes (they had been red since
the flattening; the salvaged night-work assertions expected the old
composed names). All goldens regenerated through their tooling, never
by hand: WebApiAotDemo report (NativeAOT run), OTLP golden fixtures,
OTLP collector fixtures, smoketest stdout (proven by full smoketest
managed + NativeAOT diff).

Verified: dotnet build 0 warnings; verify-generator-snapshots,
verify-public-api-baseline, verify-contract-coverage-report,
verify-source-interceptor-consumer, verify-nativeaot-consumer-golden,
verify-otlp-golden-fixtures, verify-otlp-collector-fixtures,
tools/smoketest.sh all ok; RealHttpClientDemo and RealAspNetCoreDemo
Pass=true. RealEfCoreDemo/RealGrpcClientDemo name checks now pass; their
remaining failures (missing db.system / rpc.system) pre-exist on main
and are fixed separately.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The runtime emits the current semconv registry keys (DbAttributes.SystemName,
RpcAttributes.SystemName), but the salvaged demo assertions and the
WebApiAotDemo report keep-list still used the old db.system / rpc.system
keys — keeping RealEfCoreDemo and RealGrpcClientDemo red and silently
dropping db.system.name from the WebApiAotDemo golden. Also aligns the
RUNTIME_SEMANTICS gRPC matrix row.

Verified: dotnet build 0 warnings; RealHttpClientDemo, RealAspNetCoreDemo,
RealGrpcClientDemo, RealEfCoreDemo (compiled model) all Pass=true;
verify-webapi-aot-demo (NativeAOT, qyl_warnings=0) and
verify-otlp-golden-fixtures regenerated and green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
QYL_AUTOINSTRUMENTATION_CAPTURE_SENSITIVE_VALUES is gone (option,
env-var, public-API baseline, and the Sensitive concept in the listener
semantic layer). url.full is always emitted on client spans and
url.path/url.query on server spans, with query values redacted per key
("?token=Redacted", keys stay) — the exact upstream OpenTelemetry .NET
algorithm; the OTEL_DOTNET_EXPERIMENTAL_*_DISABLE_URL_QUERY_REDACTION
flags only switch redacted to raw. db.namespace is always emitted;
db.query.text sits solely behind the upstream SET_DBSTATEMENT_FOR_TEXT
flags (double gate removed). Bootstrap sets the
System.Net.Http.DisableUriRedaction AppContext switch because the BCL
otherwise collapses query strings to "*" before qyl can redact values,
which would break upstream-shaped listener-path output.

url.query is emitted without the leading "?" that QueryString.Value
carries, matching the semconv url.query component shape.

Verified: dotnet build 0 warnings; full verifier suite green
(env-options, generator-snapshots, public-api-baseline, xml-doc,
contract-coverage, contract-invariants, conformance-opt-in,
package-layout, source-interceptor-consumer, projectreference,
consumer-behavior, nativeaot-consumer-golden, smoketest,
otlp-golden, otlp-collector); WebApiAotDemo golden regenerated via
NativeAOT run (qyl_warnings=0); RealHttpClientDemo, RealAspNetCoreDemo,
RealGrpcClientDemo, RealEfCoreDemo all Pass=true with
"?sample=Redacted"-shaped url.full observed live.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The twelve newer interceptors (Kafka, Redis, RabbitMQ, MongoDB, Quartz,
MassTransit, NServiceBus, GraphQL, Azure, WCF, CoreWCF, ILogger) carried
their span names as inline literals at the StartActivity call sites,
bypassing the QylActivityNames single source of truth that already owns
the composed HTTP/gRPC/DB/SQL names. They are now internal consts there,
keeping the bounded low-cardinality name set greppable in one place.

While touching every call site, applied the live analyzer hints:
AL1012 (combine activity declaration with the null check) across the
same twelve files, RCS1235 (builder.AddRange over a foreach Add) and
IDE0301 (collection expressions for SemConvRegistryModel.Empty) in
SemConvRegistryGenerator.

Also removed a stray invalid experiment line ("private static const
OperationName") from QylInterceptedKafka that broke the build.

Verified: dotnet build (0 warnings, 0 errors), generator-snapshots-ok,
consumer-behavior-ok.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
One term for approved reference artifacts repo-wide: verify-* scripts
check verified/ directories, matching the existing generator snapshot
convention. Renames the golden/ fixture dirs, verify-otlp-golden-fixtures
to verify-otlp-fixtures, verify-nativeaot-consumer-golden to
verify-nativeaot-consumer, and the --update-golden flags to
--update-verified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…essions

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ANcpLua and others added 23 commits June 12, 2026 21:55
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The C# hackathon lane must not have a Python script emitting C#.
tools/generate-contract-artifacts.py previously rendered two C# files
(InstrumentationContract.cs and the interceptor catalog). Both are now
ordinary owned source: the // <auto-generated/> header is stripped and the
catalog is renamed .g.cs -> .cs (nothing special-cases *.g.cs in the
.csproj). The C# bodies are byte-identical otherwise.

Generator: deleted render_contract_cs, render_interceptor_catalog_cs, their
two CONTRACT_CS_PATH/INTERCEPTOR_CATALOG_CS_PATH constants, the two
expected_outputs entries, and the now-orphaned C#-string helpers
(render_csharp_string_array, render_contract_item_ctor, pascal,
cs_immutable_array, cs_string, flatten_libraries, promise_text). All data
artifacts (resolved.yaml, schema.json, conformance-plan.json, matrix,
coverage report, README) still generate; --write and --check pass.

Because expected_outputs no longer lists the two .cs files, the shared
verify_generated_files() regen/diff no longer demands C# regeneration, so
both verify-contract-* gates stop failing on owned-source drift. Updated the
invariants verifier's catalog path to the new .cs filename so it still scans
the catalog for invariants.

Release build of the SourceGenerators project is green with
TreatWarningsAsErrors on.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ion scratch

The per-directory SKILL.md files are not real Claude Code skills (those live
in .claude/skills/) and are referenced by no build/CI. ULTRA-EMITTER-BACKLOG
and CONTINUATION were session scratch whose work is done. Load-bearing docs
(RUNTIME_SEMANTICS, generated coverage-matrix) kept.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
OPEN-QUESTIONS Q1 (catalog-as-Python-strings) marked answered:a359782 — the
catalog/contract are now owned C#. Remove the stale CHANGELOG 'added SKILL.md
files' line; those signpost stubs were deleted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* coderabbit: maxed advisory config — telemetry-focused path tuning

* fix(coderabbit): remove duplicate knowledge_base key that broke config parsing

Same latent bug as ancplua-skills PR #4: two top-level `knowledge_base:` mappings
(lines 263 + 302). YAML forbids duplicate mapping keys, so CodeRabbit could not
parse the file and silently fell back to the stale Organization-UI config — the
maxed advisory config was inert on every PR.

ajv passed earlier because YAML→JSON collapses the duplicate (last-key-wins)
before the schema ever sees it; only CodeRabbit's strict YAML parser rejects it.

Merged the second block's unique settings into the canonical block
(`COVERAGE_LEDGER.md` filePattern + `automatic_repository_linking: true`), then
deleted the duplicate. Validated: parses with zero duplicate keys, passes
schema.v2.json.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Two confirmed defects from an adversarial generator audit (each
independently refuted, the Azure one reproduced by building the
generator against an out-param consumer):

- HIGH: the Azure client matcher emitted interceptors that dropped
  out/ref/ref-readonly keywords from both signature and forwarding
  call (AppendParameterList/AppendArgumentList only handle in/params),
  breaking consumer builds with CS1620/CS9144. Its sibling matchers
  (Elastic/WCF/Redis/EFCore) already guard with
  CanEmitByValueOrInParameters; Azure was missing it. Add the same
  guard so by-ref Azure methods are not intercepted — consistent with
  the established convention. Proven: an Azure.*Client with an out
  parameter now builds clean with no broken interceptor emitted.

- MEDIUM: interceptor emission order and the _N name indices rode on
  Roslyn's unsorted cross-tree syntax-visitation order, so generated
  output was not byte-reproducible for consumers with 2+ matched call
  sites (the repo sets Deterministic=true and already sorts the other
  generator's output). Sort the collected invocations by a stable
  content key (InterceptableLocation.Data, Target tie-break) before
  the index loop. Snapshot stays byte-identical (single call site);
  managed + NativeAOT consumer gate stays green.

Also honor the SourceProductionContext CancellationToken in the emit
loop.

Verified: generator builds 0/0 under TreatWarningsAsErrors;
verify-generator-snapshots.py and verify-source-interceptor-consumer.py
(managed + NativeAOT) both green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
slnx-sync drift: three .csproj on disk were unregistered in the
solution. RealILoggerDemo was the lone missing demo (28/29 present);
the benchmark project and the source-generator snapshot Fixture had
no section yet. Add all three, keeping the file path-sorted
(benchmarks -> demos -> src -> tests). All three build 0/0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an explicit agent policy that scopes the old all-or-nothing "don't
touch the stack" posture. The blanket prohibition was the root cause of
agents freezing on CI (they couldn't tell a safe scoped fix from a
dangerous topology change, so they froze all of it — and never built
the cleanup that fixes a wedged host).

New policy: ci up/down/reset/run and bouncing a runner are
pre-authorized routine; extending the ci tool with scoped reversible
verbs is fine; let Linux jobs queue unless the change actually needs
them. Only two edges stay gated (explicit ok): runner topology /
workflow mapping / repo visibility, and deleting anything outside the
testcontainers label.

Pairs with the new ci verbs (ci reset = scoped self-heal, ci run =
Ryuk-style up/run/teardown), both filtered to label=org.testcontainers
so named volumes are unreachable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Same positive-register pass as the global config: reframe the 5 rules
that led with a prohibition (clean-slate, CI-private, architecture
invariants, package boundaries, generated files) to lead with the
accepted mechanism / capability, with each banned thing kept explicitly
"out of bounds". The architecture-invariants block now opens with the
6 accepted mechanisms and frames the 8 banned substrate mechanisms (CLR
profiler, IL rewriting, ReJIT, ALC plugins, …) as "the old substrate
this repo deliberately replaced" — all 8 kept verbatim.

Left crisp on purpose (adversarial teeth-check flagged the word as
load-bearing): "Missing values stay missing; never synthesize", "don't
claim a tag/Release current without checking its target commit", and
"--force-with-lease … never rewrite remote history by accident".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rdenings

Three confirmed-but-deferred findings from the adversarial generator audit:

- (MEDIUM, test) Pin the determinism fix. The OrderBy(Location.Data) sort
  had no coverage — the snapshot fixture was a single call site in a
  single file, where ordering is trivially stable. Add Probe.cs: a second
  ILogger.Log site in a second file, so the verified snapshot now carries
  two interceptors whose _N indices + emission order are decided by the
  sort, not by Roslyn's cross-tree visitation order. Delete the sort and
  this byte-compare flips red. Snapshot re-baselined (2 interceptors).

- (LOW) Broaden the self-interception guard from the single core assembly
  name to the precise set of qyl runtime packages, so a forwarding helper
  relocating to a sibling (per the documented package-boundary moves)
  stays protected. Behaviorally inert today; future-proofing. Uses an
  explicit set, NOT StartsWith — the snapshot fixture assembly is named
  Qyl.AutoInstrumentation.SourceGenerators.Snapshots.Fixture and must stay
  instrumented. Left SemConvRegistryGenerator's guard alone (it is an
  only-run-in-core check, opposite semantics, not a duplicate).

- (LOW) Tighten the Azure matcher: require the *Client type's assembly to
  start with "Azure." (real SDK: Azure.Storage.Blobs, Azure.Messaging.*),
  not merely its namespace, so a user-authored *Client parked in the
  reserved Azure.* root namespace no longer mints a false-positive Azure
  span.

Verified: generator 0/0; verify-generator-snapshots.py green;
verify-source-interceptor-consumer.py (managed + NativeAOT) green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@renovate

renovate Bot commented Jun 15, 2026

Copy link
Copy Markdown
Author

Renovate is disabled

Renovate is disabled because there is no Renovate configuration file. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.

@ANcpLua
ANcpLua deleted the renovate/configure branch June 16, 2026 02:17
ANcpLua added a commit that referenced this pull request Jul 1, 2026
…trument (CODE RED #1/#2/#10) (#22)

An adversarial OTel-compliance + honesty audit rated this code 3/10. This lands the
verified subset of the confirmed HIGH/MEDIUM defects.

#1 (HIGH, ~0-duration lie): the HttpClient/AspNetCore/gRPC DiagnosticListeners created
their span on the framework's *.Stop event via the 2-arg StartActivity (StartTimeUtc=now)
and immediately disposed it, so every emitted span had ~0 duration instead of the real
operation latency. New internal QylActivitySource.StartAtAmbientStart(name, kind) stamps
the span to the ambient framework Activity's real StartTimeUtc (parented to it for trace
correlation), with a now-stamped fallback when there is no ambient activity. All three
listeners switched to it.

#2 (HIGH, dishonest doc): DiagnosticListenerSubscriber claimed it "publishes the same span
shapes" — false while durations were fabricated. Doc now states the actual mechanism
(reacts on *.Stop, stamps to ambient start for real duration).

#10 (MEDIUM, metrics-semconv): dotnet.thread_pool.thread.count was an unitless
ObservableGauge<int>; per OTel semconv it is an (Observable)UpDownCounter with UCUM unit
{thread}. Switched instrument type + added unit.

Verified: core.slnf Release 0/0; verify-webapi-aot-demo passes (fixture unchanged — the
attribute shape is identical; note the fixture is duration-insensitive, which is itself
tracked as a separate finding). No PublicAPI change (all internal/private).

NOT in this commit (separate verified increments): #3 double-count between the listener
and interceptor lanes (+ the fixture that masks it), #4/#11 OTLP Events/Links/Status.Message
dropped on ingest, #6 url.scheme, #7 http.request.method_original on the interceptor path,
#9 Azure span name ignores methodName.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

1 participant