Skip to content

Bump Microsoft.AspNetCore.Mvc.Testing from 10.0.2 to 10.0.3 - #41

Merged
github-actions[bot] merged 1 commit into
mainfrom
dependabot/nuget/Microsoft.AspNetCore.Mvc.Testing-10.0.3
Feb 11, 2026
Merged

Bump Microsoft.AspNetCore.Mvc.Testing from 10.0.2 to 10.0.3#41
github-actions[bot] merged 1 commit into
mainfrom
dependabot/nuget/Microsoft.AspNetCore.Mvc.Testing-10.0.3

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Feb 11, 2026

Copy link
Copy Markdown
Contributor

Updated Microsoft.AspNetCore.Mvc.Testing from 10.0.2 to 10.0.3.

Release notes

Sourced from Microsoft.AspNetCore.Mvc.Testing's releases.

10.0.3

Release

Commits viewable in compare view.

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabot dependabot Bot added .NET Pull requests that update .NET code dependencies Pull requests that update a dependency file labels Feb 11, 2026
---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Mvc.Testing
  dependency-version: 10.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/nuget/Microsoft.AspNetCore.Mvc.Testing-10.0.3 branch from 62d5d7b to 7356891 Compare February 11, 2026 15:24
@github-actions
github-actions Bot merged commit 12eae46 into main Feb 11, 2026
8 of 9 checks passed
@dependabot
dependabot Bot deleted the dependabot/nuget/Microsoft.AspNetCore.Mvc.Testing-10.0.3 branch February 11, 2026 15:24
ANcpLua added a commit that referenced this pull request May 25, 2026
…-GCM Keycloak refresh wrap

Foundation for the Path C OAuth/remote-connector plan. The collector will mint
opaque MCP tokens for clients (Claude Desktop, Cursor, etc.) and wrap encrypted
Keycloak refresh tokens behind them, so the IdP token never crosses the wire
to MCP clients. Future phases add the OAuth Authorization Code + PKCE flow
(#33#37), /mcp/{tenant} endpoint (#38#41), legacy SSE dual-endpoint (#42),
and Directory submission (#43#45).

Schema (Storage/DuckDbSchema.McpTokens.cs):
- mcp_tokens(token_hash PK, user_id, tenant_id, scopes, encrypted_refresh,
  refresh_expires_at, created_at, last_used_at, revoked_at) + indexes on
  user_id, tenant_id, refresh_expires_at.
- mcp_pkce_state(state PK, code_verifier, tenant_id, client_redirect_uri,
  nonce, created_at, expires_at) for Phase 2 PKCE.
- Wired into DuckDbStore.InitializeSchema alongside the existing Identity tables.

Store (Storage/McpTokenStore.cs):
- IMcpTokenStore + McpTokenStore against DuckDB.
- Opaque token = 32 random bytes, base64url-encoded; only the SHA-256 hash is
  stored. The plaintext is returned to the client exactly once at mint time.
- CreateAsync, GetByOpaqueTokenAsync (constant-time hash lookup, excludes
  revoked + expired rows), TouchLastUsedAsync, UpdateRefreshAsync, RevokeAsync,
  ListByUserAsync, ListByTenantAsync, CleanupExpiredAsync.
- All writes go through DuckDbStore.ExecuteWriteAsync (two-arg lambda); all
  reads acquire a GetReadConnectionAsync lease. No string interpolation in
  SQL — separate methods per WHERE column to satisfy AL0111.

Encryption (Auth/TokenEncryption.cs):
- ITokenEncryption + AesGcmTokenEncryption.
- AES-256-GCM with 12-byte nonce + 16-byte tag. Envelope format:
  nonce | tag | ciphertext (no separate columns, single BLOB).
- Key from QYL_TOKEN_ENCRYPTION_KEY env var (base64-encoded 32 bytes). Fail-fast
  on construction if missing, malformed, or wrong length — with a generation
  hint ("openssl rand -base64 32").

Cleanup (Auth/McpTokenCleanupService.cs):
- BackgroundService running every 5 min via PeriodicTimer (TimeProvider-driven).
- Deletes tokens past refresh_expires_at OR revoked >7 days ago.
- LoggerMessage partials at Information level for start + cleanup events,
  Error for failure (matches repo convention).

DI (Hosting/CollectorAuthExtensions.cs):
- AddSingleton(TimeProvider.System) for testable time.
- Configure<TokenEncryptionOptions> from config[QYL_TOKEN_ENCRYPTION_KEY].
- AddSingleton<ITokenEncryption, AesGcmTokenEncryption>.
- AddSingleton<IMcpTokenStore, McpTokenStore>.
- AddHostedService<McpTokenCleanupService>.

Tests (tests/qyl.collector.tests/Auth/TokenEncryptionTests.cs):
- 8 unit tests, all passing: roundtrip, nondeterministic ciphertext, tampered
  ciphertext rejection, tampered auth-tag rejection, short-envelope rejection,
  missing-key/bad-base64/wrong-length construction failures.

Build: 0 errors. Tests: 8/8 passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ANcpLua added a commit that referenced this pull request May 25, 2026
…-GCM Keycloak refresh wrap

Foundation for the Path C OAuth/remote-connector plan. The collector will mint
opaque MCP tokens for clients (Claude Desktop, Cursor, etc.) and wrap encrypted
Keycloak refresh tokens behind them, so the IdP token never crosses the wire
to MCP clients. Future phases add the OAuth Authorization Code + PKCE flow
(#33#37), /mcp/{tenant} endpoint (#38#41), legacy SSE dual-endpoint (#42),
and Directory submission (#43#45).

Schema (Storage/DuckDbSchema.McpTokens.cs):
- mcp_tokens(token_hash PK, user_id, tenant_id, scopes, encrypted_refresh,
  refresh_expires_at, created_at, last_used_at, revoked_at) + indexes on
  user_id, tenant_id, refresh_expires_at.
- mcp_pkce_state(state PK, code_verifier, tenant_id, client_redirect_uri,
  nonce, created_at, expires_at) for Phase 2 PKCE.
- Wired into DuckDbStore.InitializeSchema alongside the existing Identity tables.

Store (Storage/McpTokenStore.cs):
- IMcpTokenStore + McpTokenStore against DuckDB.
- Opaque token = 32 random bytes, base64url-encoded; only the SHA-256 hash is
  stored. The plaintext is returned to the client exactly once at mint time.
- CreateAsync, GetByOpaqueTokenAsync (constant-time hash lookup, excludes
  revoked + expired rows), TouchLastUsedAsync, UpdateRefreshAsync, RevokeAsync,
  ListByUserAsync, ListByTenantAsync, CleanupExpiredAsync.
- All writes go through DuckDbStore.ExecuteWriteAsync (two-arg lambda); all
  reads acquire a GetReadConnectionAsync lease. No string interpolation in
  SQL — separate methods per WHERE column to satisfy AL0111.

Encryption (Auth/TokenEncryption.cs):
- ITokenEncryption + AesGcmTokenEncryption.
- AES-256-GCM with 12-byte nonce + 16-byte tag. Envelope format:
  nonce | tag | ciphertext (no separate columns, single BLOB).
- Key from QYL_TOKEN_ENCRYPTION_KEY env var (base64-encoded 32 bytes). Fail-fast
  on construction if missing, malformed, or wrong length — with a generation
  hint ("openssl rand -base64 32").

Cleanup (Auth/McpTokenCleanupService.cs):
- BackgroundService running every 5 min via PeriodicTimer (TimeProvider-driven).
- Deletes tokens past refresh_expires_at OR revoked >7 days ago.
- LoggerMessage partials at Information level for start + cleanup events,
  Error for failure (matches repo convention).

DI (Hosting/CollectorAuthExtensions.cs):
- AddSingleton(TimeProvider.System) for testable time.
- Configure<TokenEncryptionOptions> from config[QYL_TOKEN_ENCRYPTION_KEY].
- AddSingleton<ITokenEncryption, AesGcmTokenEncryption>.
- AddSingleton<IMcpTokenStore, McpTokenStore>.
- AddHostedService<McpTokenCleanupService>.

Tests (tests/qyl.collector.tests/Auth/TokenEncryptionTests.cs):
- 8 unit tests, all passing: roundtrip, nondeterministic ciphertext, tampered
  ciphertext rejection, tampered auth-tag rejection, short-envelope rejection,
  missing-key/bad-base64/wrong-length construction failures.

Build: 0 errors. Tests: 8/8 passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ANcpLua added a commit that referenced this pull request May 26, 2026
…370)

* chore(qyl.mcp): destruction pass — drop Apps, dead tools, HTTP host, stdio-only

Extends the established destruction trajectory (2026-04-20 Qyl.Agents.* triad,
2026-04-21 qyl://manifest, 2026-05-19 fluent-chain extraction). HTTP MCP hosting
moves to qyl.collector under the Path C OAuth/remote-connector plan; qyl.mcp
stays as a stdio NuGet tool for internal dev only.

Deletions:
- services/qyl.mcp/Apps/ entire tree (ErrorExplorer + QueryStudio + TraceExplorer)
  + QylSkillKind.Apps + McpAppsCapability + generator hardcoding + ErrorExplorerJsonContext
- services/qyl.mcp/Tools/ArtifactTools.cs (no [QylSkill] → generator never emitted it;
  orphan AddCollectorToolClient<ArtifactTools>() at QylMcpServiceCollectionExtensions.cs:53)
- services/qyl.mcp/Tools/GitHubMcpTools.cs (3 tools, zero repo-wide refs)
- services/qyl.mcp/Tools/Intelligence/IntelligenceTools.cs (5 tools, unwired
  list→evaluate→suggest→execute pipeline, zero consumers)
- services/qyl.mcp/Hosting/QylMcpHttpHost.cs, QylMcpLlmsTextBuilder.cs
- services/qyl.mcp/Landing/ (HTTP landing page)
- services/qyl.mcp/McpHostOptions.cs (HTTP-only config) + McpTransportMode enum
- services/qyl.mcp/Dockerfile + railway.toml (no more HTTP deployment)
- compose.yaml qyl-mcp service block; BuildInfra.cs qyl-mcp ImageSpecs entry
- QylMcpServerRegistration ConfigureOAuth + JWT events + LoggerMessage partials,
  McpAuthRoles + QylAdminTools (empty FrozenSet — dead since inception),
  WithQylAdminFilter call (canonical 1.3.0 replacement is [Authorize] attribute)
- qyl.mcp.csproj ModelContextProtocol.AspNetCore PackageReference

Refactors:
- Program.cs: single-line stdio dispatch (transport resolution removed)
- QylMcpStdioHost: drop transport/hostOptions args from Configure
- QylMcpServerRegistration: stdio-only, no OAuth/auth filters; transport tag hardcoded
- ErrorFormatter + CollectorHelper: drop McpTransportMode param (always stdio now)
- README: rewritten for stdio-only reality
- internal/qyl.mcp.generators: drop "Apps" from ordinal lookup + label switch

Build: 0 errors, 1 warning. Tests/Formatting/ErrorFormatterTests updated for new
ErrorFormatter signature.

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

* fix(qyl.mcp,qyl.loom): TaskSupport classifications + phantom-tool prompt cleanup

TaskSupport mismatches against the CLAUDE.md guidance:
- qyl.get_system_context (StorageHealthTools): Optional → Forbidden (default).
  CLAUDE.md explicitly lists get_system_context as a Forbidden example.
- qyl.list_trace_logs (StructuredLogTools): Optional → Forbidden. CLAUDE.md
  "Fixed-scope tools skip coaching" rule.

Phantom tool refs in agent prompts (tools referenced by name but never registered):
- Agents/UseQylSystemPrompt.cs dropped 8 phantoms: claude_code_sessions,
  claude_code_timeline, claude_code_tools, list_console_logs, list_console_errors,
  list_build_failures, get_build_failure, search_build_failures.
- services/qyl.loom/Autofix/LoomAutofixPrompts.cs: qyl.get_trace_details →
  get_trace_details (no qyl. prefix — the registered tool is from Traces/
  GetTraceDetailsTool). Deleted the entire qyl.loom.autofix_setup_check prompt
  (referenced 4 phantom tools end-to-end: qyl.get_project_integrations,
  qyl.get_integration_scopes, qyl.derive_code_mappings, qyl.get_run_quota —
  better to delete the misleading prompt than half-fix it).

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

* feat(qyl.collector): Phase 1 — DuckDB opaque MCP token store with AES-GCM Keycloak refresh wrap

Foundation for the Path C OAuth/remote-connector plan. The collector will mint
opaque MCP tokens for clients (Claude Desktop, Cursor, etc.) and wrap encrypted
Keycloak refresh tokens behind them, so the IdP token never crosses the wire
to MCP clients. Future phases add the OAuth Authorization Code + PKCE flow
(#33#37), /mcp/{tenant} endpoint (#38#41), legacy SSE dual-endpoint (#42),
and Directory submission (#43#45).

Schema (Storage/DuckDbSchema.McpTokens.cs):
- mcp_tokens(token_hash PK, user_id, tenant_id, scopes, encrypted_refresh,
  refresh_expires_at, created_at, last_used_at, revoked_at) + indexes on
  user_id, tenant_id, refresh_expires_at.
- mcp_pkce_state(state PK, code_verifier, tenant_id, client_redirect_uri,
  nonce, created_at, expires_at) for Phase 2 PKCE.
- Wired into DuckDbStore.InitializeSchema alongside the existing Identity tables.

Store (Storage/McpTokenStore.cs):
- IMcpTokenStore + McpTokenStore against DuckDB.
- Opaque token = 32 random bytes, base64url-encoded; only the SHA-256 hash is
  stored. The plaintext is returned to the client exactly once at mint time.
- CreateAsync, GetByOpaqueTokenAsync (constant-time hash lookup, excludes
  revoked + expired rows), TouchLastUsedAsync, UpdateRefreshAsync, RevokeAsync,
  ListByUserAsync, ListByTenantAsync, CleanupExpiredAsync.
- All writes go through DuckDbStore.ExecuteWriteAsync (two-arg lambda); all
  reads acquire a GetReadConnectionAsync lease. No string interpolation in
  SQL — separate methods per WHERE column to satisfy AL0111.

Encryption (Auth/TokenEncryption.cs):
- ITokenEncryption + AesGcmTokenEncryption.
- AES-256-GCM with 12-byte nonce + 16-byte tag. Envelope format:
  nonce | tag | ciphertext (no separate columns, single BLOB).
- Key from QYL_TOKEN_ENCRYPTION_KEY env var (base64-encoded 32 bytes). Fail-fast
  on construction if missing, malformed, or wrong length — with a generation
  hint ("openssl rand -base64 32").

Cleanup (Auth/McpTokenCleanupService.cs):
- BackgroundService running every 5 min via PeriodicTimer (TimeProvider-driven).
- Deletes tokens past refresh_expires_at OR revoked >7 days ago.
- LoggerMessage partials at Information level for start + cleanup events,
  Error for failure (matches repo convention).

DI (Hosting/CollectorAuthExtensions.cs):
- AddSingleton(TimeProvider.System) for testable time.
- Configure<TokenEncryptionOptions> from config[QYL_TOKEN_ENCRYPTION_KEY].
- AddSingleton<ITokenEncryption, AesGcmTokenEncryption>.
- AddSingleton<IMcpTokenStore, McpTokenStore>.
- AddHostedService<McpTokenCleanupService>.

Tests (tests/qyl.collector.tests/Auth/TokenEncryptionTests.cs):
- 8 unit tests, all passing: roundtrip, nondeterministic ciphertext, tampered
  ciphertext rejection, tampered auth-tag rejection, short-envelope rejection,
  missing-key/bad-base64/wrong-length construction failures.

Build: 0 errors. Tests: 8/8 passing.

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

* docs(agents): pre-authorize the ANcpLua analyzer rule-ID migration in working tree

Future agents (Claude Code, Codex, aider, Gemini CLI) hitting this repo with
the analyzer migration applied to the working tree would otherwise read the
3-file diff in `.editorconfig` + `.globalconfig` + `Directory.Build.props` as
a dirty state to clean up. That's wrong — the diff is an intentional migration
waiting on the SDK side to ship the renamed rule IDs.

This commit adds a prominent section at the top of AGENTS.md (above the
existing `## ANcpLua.Agents consumption` section, so it's literally the first
content an agent reads after the intro) that:

- Tells agents the working-tree state is pre-authorized — they don't need to
  ask permission, don't need to revert, don't need to be cautious.
- Explains the migration shape: AL0001-AL0027 (flat) → AL10xx quality,
  AL11xx forms, AL16xx packaging, AL17xx style/perf (4-tier semantic).
- Lists the expected fallout (6 `AL0012` warnings on OtlpAttributes.cs) so
  agents can recognise it as steady-state noise instead of a regression.
- Forbids the obvious wrong moves (revert, re-add AL00xx overrides, suppress
  with #pragma or [SuppressMessage], commit migration as part of another PR).
- Lists the right moves (continue normal work, watch build output for
  AL1xxx warnings as the "SDK shipped" signal, commit the migration in its
  own PR when that signal appears).
- Provides an emergency rollback path with explicit stash recovery instructions.

The stash itself is local-only (`stash@{0}`), so this doc commits the
*context* about it. When a future session sees the modified working tree,
this section answers the "wtf is this" reaction before it becomes a wasted
revert + restore cycle.

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

* feat(qyl.collector): Phase 2A — KeycloakClient + PKCE state store

Path C Phase 2 opens. Layers the OIDC discovery / token-exchange / revoke
surface (KeycloakClient) and the single-use PKCE state store (PkceStateStore)
onto Phase 1's foundation. Phases 2B-2E add /auth/* endpoints, refresh +
revoke wiring, and Testcontainers.Keycloak integration tests on this base.

PKCE state store (Storage/PkceStateStore.cs):
- IPkceStateStore + PkceStateStore against DuckDB.
- Uses Phase 1's mcp_pkce_state table (no migration needed).
- StoreAsync writes (state, code_verifier, tenant_id, client_redirect_uri,
  nonce, ttl) via ExecuteWriteAsync (two-arg lambda) per repo discipline.
- ConsumeAsync is atomic via DELETE ... RETURNING — a single statement
  prevents the TOCTOU race that SELECT-then-DELETE would create. Second
  call returns null; replay is impossible. Rows past expires_at are
  filtered in the WHERE clause and swept by CleanupExpiredAsync.

Keycloak client (Auth/KeycloakClient.cs + Auth/KeycloakOptions.cs):
- IKeycloakClient + KeycloakClient + NullKeycloakClient (null-impl returned
  from DI when Keycloak is unconfigured — makes /auth/* registration safe
  without an authority).
- GetDiscoveryDocumentAsync hits {authority}/.well-known/openid-configuration
  with AOT-friendly JsonTypeInfo binding; result cached for
  KeycloakOptions.DiscoveryCacheDuration (default 1h) under a
  System.Threading.Lock.
- InvalidateDiscoveryDocument forces a refetch — invoked when JWKS
  signature validation fails (the key may have rotated).
- ExchangeAuthorizationCodeAsync / ExchangeRefreshTokenAsync (Phase 2C/2D
  surface, scaffolded here so the interface is stable from 2A onward).
- RevokeRefreshTokenAsync (RFC 7009 best-effort — local revoke is the
  source of truth, upstream failures logged + swallowed).
- KeycloakOptions binds from "Keycloak" config section plus env-var
  overrides (QYL_KEYCLOAK_AUTHORITY, _AUDIENCE, _CLIENT_ID, _CLIENT_SECRET,
  QYL_OAUTH_ALLOWED_REDIRECTS comma-separated).

Cleanup extension (Auth/McpTokenCleanupService.cs):
- Same BackgroundService now cleans BOTH mcp_tokens and mcp_pkce_state on
  the same 5-min PeriodicTimer (matches DoD: "Background cleanup deletes
  expired rows on the same PeriodicTimer as McpTokenCleanupService").
- New LoggerMessage at EventId=4 for PKCE deletions; existing token log
  renamed to LogTokensCleanedUp for clarity.

DI (Hosting/CollectorAuthExtensions.cs):
- Configure<KeycloakOptions> binds from config + env vars.
- IPkceStateStore — always registered (no Keycloak dependency).
- IKeycloakClient — KeycloakClient when authority set, otherwise
  NullKeycloakClient.Instance.

Tests:
- Auth/PkceStateStoreTests.cs (5/5 passing): roundtrip, single-use
  semantics, TTL expiration, missing-state null, cleanup-keeps-current.
- Auth/KeycloakClientTests.cs (6/6 passing): full-field parse, well-known
  URL shape, cache hit within TTL, refetch after TTL, InvalidateDiscoveryDocument
  forces refetch, ctor throws on empty authority.
- Auth/TestTimeProvider.cs — minimal TimeProvider stub. Avoids pulling
  Microsoft.Extensions.TimeProvider.Testing into the CPM pinning pass as
  a Phase-2A scope concern; can promote to FakeTimeProvider later.

Build infra:
- internal/qyl.mcp.generators/qyl.mcp.generators.csproj — added
  <Compile Remove> for the new Enumerator.cs in
  ANcpLua.Roslyn.Utilities.Sources 2.2.22 (mirrors the fixes already on
  qyl.instrumentation.generators and qyl.collector.storage.generators).

Build: 0 errors. Tests: 19/19 Auth-suite tests passing
(8 Phase 1 TokenEncryption + 5 PKCE + 6 Keycloak).

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

* chore(deps): qyl cascade catch-up — SDK 3.4.35 / AL 2.0.0 / Roslyn.Utilities 2.2.22 / QYL semconv 3.0.0

After my published Stage C2/C3 work landed (ANcpLua.NET.Sdk 3.4.35 with
AL 2.0.0 pin + bundled AL1xxx editorconfig; Qyl.OpenTelemetry.SemanticConventions
3.0.0 with banded QYL IDs; ANcpLua.Roslyn.Utilities 2.2.22), qyl needs
the consumer-side migration to actually consume the new versions.

Version bumps:
- global.json — ANcpLua.NET.Sdk(/.Web/.Test) 3.4.33 → 3.4.35;
                ANcpLua.Roslyn.Utilities(/.Testing) 2.2.16 → 2.2.22
- Version.props — ANcpLuaAnalyzersVersion 1.29.1 → 2.0.0;
                  ANcpLuaRoslynUtilitiesVersion 2.2.5 → 2.2.22
- Directory.Packages.props — Qyl.OpenTelemetry.SemanticConventions{,
                             .Incubating, .SourceGeneration} 2.0.0 → 3.0.0

Generator csproj fixes (Roslyn.Utilities 2.2.22 source-only changes):
- internal/qyl.instrumentation.generators — Exclude Enumerator.cs from
  Compile set (Sources 2.2.22 added it; needs IAsyncEnumerator<> which
  is netstandard2.1+; cheaper to exclude than pull
  Microsoft.Bcl.AsyncInterfaces); migrate GeneratorPipelineHelpers.cs
  to the new `RegisterCollectedEmitter` extension (the old
  SelectAndReportExceptions+AddSource chain no longer typechecks
  because AddSource lost its IncrementalValueProvider<ResultWithDiagnostics<T>>
  overload).
- internal/qyl.collector.storage.generators — same Enumerator.cs exclusion.

AL renumber consumer cleanups (AL0xxx no longer exists in AL 2.0.0):
- internal/qyl.instrumentation/Instrumentation/Inventory/QylAgentActivityProcessor.cs
  AL0014: `agentName.Length == 0` → `agentName.Length is 0` (pattern style).
- services/qyl.collector/Telemetry/QylLogEnricher.cs — parallel rule
  cleanups.
- services/qyl.mcp/Tools/Debug/DebugTools.cs +
  services/qyl.mcp/Tools/RcaTools.cs — parallel rule cleanups.
- Directory.Build.props + .editorconfig + .globalconfig — severity
  overrides re-mapped to AL1xxx + QYL3xxx IDs.

After this: `dotnet build services/qyl.collector/qyl.collector.csproj
-c Release` is clean (0 warnings, 0 errors) on the new cascade. Pairs
with the Phase 2A commit (5ef4b4e) that wires the KeycloakClient
extension + IPkceStateStore against AL 2.0.0's bundled editorconfig.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file .NET Pull requests that update .NET code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants