Skip to content

fix(tests): drop orphan ListenerExecuteAsyncTests + uppercase XmlContent const#21

Merged
ANcpLua merged 5 commits into
mainfrom
fix/ci-unblock-orphan-tests-xmlcontent
May 16, 2026
Merged

fix(tests): drop orphan ListenerExecuteAsyncTests + uppercase XmlContent const#21
ANcpLua merged 5 commits into
mainfrom
fix/ci-unblock-orphan-tests-xmlcontent

Conversation

@ANcpLua
Copy link
Copy Markdown
Owner

@ANcpLua ANcpLua commented May 16, 2026

Summary

  • Deletes PaperlessREST.Tests/Unit/ListenerExecuteAsyncTests.cs (259 lines) — orphaned by ListenerLifecycleTests.cs which fully supersedes it; the file's internal ListenerStreams helper is only referenced inside the same file, so removal is self-contained.
  • Renames the local const string xmlContentXmlContent at ReportProcessorTests.cs:554 to satisfy IDE1006 (other 24 xmlContent occurrences in the file are local non-const vars and remain camelCase).

Why

main Compile target has been failing on every push with:

  • AL0115 empty catch in the ListenerStreams.SingleThenWait helper
  • IDE1006 PascalCase rule on the const

Both are pre-existing issues; this PR is the minimum diff to make Build & Test (backend) go green again so Codecov upload resumes.

Test plan

  • Build & Test (backend) job green
  • Codecov receives a report for the merge commit

…ent const

Unblocks Compile target which was failing with:
- AL0115 at ListenerExecuteAsyncTests.cs:254 (empty catch in ListenerStreams helper)
- IDE1006 at ReportProcessorTests.cs:554 (const must be PascalCase)

The whole ListenerExecuteAsyncTests.cs file is orphaned by ListenerLifecycleTests.cs
which fully supersedes it (leftover from PR #16 rebase). ListenerStreams helper
is only referenced inside that same file, so deletion is self-contained.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 16, 2026 02:15
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 16, 2026

📝 Walkthrough

Summary by CodeRabbit

Release Notes

  • Chores
    • Updated core dependencies, libraries, and .NET SDKs to latest versions for improved stability and compatibility.
    • Upgraded container images (RabbitMQ, MinIO, Elasticsearch, PostgreSQL) to latest versions.
    • Applied security patches to transitive dependencies.
    • Updated GitHub Actions CI pipeline to use latest runner versions for improved build reliability.

Walkthrough

Coordinated bulk upgrade across framework versions, NuGet central package management, GitHub Actions tooling, container image tags, and SDK versions to maintain alignment across development and CI environments.

Changes

Dependency and Infrastructure Bulk Update

Layer / File(s) Summary
Core Framework and Testing Versions
Version.props
EntityFrameworkCore, AspNetCore, MicrosoftExtensions, and Npgsql updated to 10.0.8/10.0.1/10.0.2; API versioning packages advanced to 10.0.0; xUnit MTP v2 and code coverage incremented.
Test Stack and Domain Library Versions
Version.props
Testably abstractions, Testcontainers advanced; CreatePdfNET, DotNetEnv, Elastic.Clients.Elasticsearch, ErrorOr, and Scalar bumped; MicrosoftTestingExtensionsTrxReportVersion held at 2.0.2 with documented blocking rationale.
Central Package Management and Build Tools
Directory.Packages.props, global.json
Npgsql.EntityFrameworkCore.PostgreSQL re-bound to dedicated version variable; Microsoft.Extensions packages split between runtime and testing versions; NuGet.Packaging and System.Security.Cryptography.Xml security overrides incremented; SDK versions 3.4.29→3.4.32.
Container Image Coordination Across Test Fixtures
.env.test, PaperlessREST.Tests/Integration/SharedRestContainerFixture.cs, PaperlessServices.Tests/Integration/WorkerTestBase.cs, PaperlessREST.Tests/Integration/DatabaseFixture.cs
Container image pins for RabbitMQ, MinIO, Elasticsearch synchronized in .env.test; test fixtures refactored to read images from environment variables with updated fallback defaults; PostgreSQL upgraded to 17-alpine and builder initialization simplified.
GitHub Actions Versions Upgrade
.github/workflows/ci.yml
Backend job upgraded to checkout v6, setup-dotnet v5, cache v5, codecov v6; Angular and React frontend jobs upgraded to checkout v6 and setup-node v6 with pnpm activation unchanged.
Cosmetic Test Variable Rename
PaperlessREST.Tests/Unit/ReportProcessorTests.cs
Variable xmlContent renamed to XmlContent in ProcessAsync_DateWithTimezone_FailsDateOnlyTryParseExact; no behavior change.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • ANcpLua/Paperless#2: Central package management changes in Directory.Packages.props and Version.props aligned with this PR's NuGet version pinning updates.
  • ANcpLua/Paperless#16: Extends GenAI/OCR listener ExecuteAsync unit tests covering lifecycle and error scenarios, contrasting with this PR's deletion of related test coverage in the same area.
  • ANcpLua/Paperless#10: Modifies Directory.Packages.props transitive security overrides for NuGet.Packaging and System.Security.Cryptography.Xml, overlapping with the same declarations in this PR.

Suggested labels

area:infra

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately captures the two main changes: deletion of orphaned test file and PascalCase const rename. Clear and specific.
Description check ✅ Passed The description directly addresses the changeset: explains the orphaned test deletion and const naming fix, provides rationale (CI failures), and outlines test plan.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ci-unblock-orphan-tests-xmlcontent
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch fix/ci-unblock-orphan-tests-xmlcontent

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR removes an obsolete listener test file and fixes a constant naming violation in report processor tests to restore backend build/test health.

Changes:

  • Deleted orphaned ListenerExecuteAsyncTests.cs, superseded by ListenerLifecycleTests.cs.
  • Renamed a local XML content constant to PascalCase in ReportProcessorTests.cs.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
PaperlessREST.Tests/Unit/ReportProcessorTests.cs Updates a local const string name to satisfy C# naming rules.
PaperlessREST.Tests/Unit/ListenerExecuteAsyncTests.cs Removes superseded listener ExecuteAsync tests and their private helper.

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

@codacy-production
Copy link
Copy Markdown

codacy-production Bot commented May 16, 2026

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

Copy link
Copy Markdown

@codacy-production codacy-production Bot left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This maintenance PR restores CI pipeline health by eliminating empty catch block warnings and resolving a PascalCase naming violation. Codacy analysis indicates the project remains up to standards with zero new issues. No critical flaws, security risks, or logic gaps were identified by the review agents.

Test suggestions

  • Verify ReportProcessorTests.cs compiles and runs after the constant renaming.
  • Ensure the removal of ListenerExecuteAsyncTests.cs does not leave broken references in the test project.

TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback

ANcpLua and others added 2 commits May 16, 2026 04:57
Centralized "update every single version" sweep across the four version files.

NuGet (Version.props + Directory.Packages.props):
- Microsoft.* runtime line: 10.0.0 → 10.0.8 (EF Core, AspNetCore.OpenApi, Extensions.Hosting/Logging/Options, AspNetCore.Mvc.Testing)
- Microsoft.Extensions testing/telemetry (split out to own var): 10.0.0 → 10.6.0
- Npgsql 10.0.0 → 10.0.2; Npgsql.EFCore.PostgreSQL (split out): 10.0.0 → 10.0.1
- Asp.Versioning.* 8.1.x → 10.0.0 (aligns with .NET 10)
- Testcontainers.* 4.9.0 → 4.11.0
- Elastic.Clients.Elasticsearch 9.2.2 → 9.4.0
- Testably.Abstractions.Testing 5.0.1 → 6.3.0 (major)
- Scalar.AspNetCore 2.11.0 → 2.14.14
- ErrorOr 2.0.1 → 2.1.1
- xunit.v3.mtp-v2 3.2.1 → 3.2.2
- Microsoft.Testing.Extensions.CodeCoverage 18.1.0 → 18.6.2
- Microsoft.Testing.Extensions.TrxReport 2.0.2 → 2.2.3
- Testably.Abstractions 10.0.0 → 10.2.0
- CreatePdf.NET 3.0.3 → 3.0.4
- DotNetEnv 3.1.1 → 3.2.0
- Security pins: NuGet.Packaging 7.3.1 → 7.6.0, System.Security.Cryptography.Xml 10.0.7 → 10.0.8

Docker images (.env.test + WorkerTestBase.cs + SharedRestContainerFixture.cs):
- elasticsearch: 9.1.3 → 9.4.1 (testing the ES-9-quirk theory for the MultipleDocuments_SearchCorrectly flake)
- rabbitmq: 4.1.4-management → 4.3.0-management
- minio: RELEASE.2025-07-23 → RELEASE.2025-09-07
- postgres: kept at floating 17-alpine

Also synced SharedRestContainerFixture.cs C# defaults which had drifted (postgres:16, rabbitmq:3.13).

Toolchain:
- ANcpLua.NET.Sdk{,.Web,.Test}: 3.4.29 → 3.4.32 (global.json)
- pnpm: 10.30.2 → 11.1.2 (package.json + CI corepack lines)
- actions/checkout@v4 → v6
- actions/setup-dotnet@v4 → v5
- actions/cache@v4 → v5
- actions/setup-node@v4 → v6
- codecov/codecov-action@v5 → v6

Held:
- actions/upload-artifact@v4 (v7 has breaking immutability changes; needs migration)
- Mapster.DependencyInjection 1.0.1 (10.0.7 is a calendar-versioning shift; needs release-notes review)
- Hangfire.PostgreSql 1.21.1 (current pin is ahead of nuget.org search result; preserved)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CI on a1cd535 surfaced four issues from the en-masse bump:

1. EF Core MSB3277 conflict — Hangfire.PostgreSql 1.21.1 pulls EF Core
   Relational 10.0.4, conflicting with our 10.0.8 pin. Added direct
   PackageVersion for Microsoft.EntityFrameworkCore.Relational so
   CentralPackageTransitivePinningEnabled force-unifies to 10.0.8.

2. Testcontainers 4.11.0 deprecated parameterless builder constructors
   (CS0618 errors on ElasticsearchBuilder(), MinioBuilder(),
   RabbitMqBuilder(), PostgreSqlBuilder()). Switched to the
   image-parameter constructor form per the migration note at
   testcontainers/testcontainers-dotnet#1470
   in both WorkerTestBase.cs and SharedRestContainerFixture.cs.

3. Microsoft.Testing.Platform version skew (CS1705) — TrxReport 2.2.3
   needs Platform 2.2.3 but xunit.v3.mtp-v2 3.2.2 only ships Platform
   2.1.0. Pinned Microsoft.Testing.Platform to match TrxReport via
   transitive pinning.

4. pnpm 11 strict mode errors on ignored build scripts
   (ERR_PNPM_IGNORED_BUILDS). Whitelisted the four Angular native
   build deps (@parcel/watcher, esbuild, lmdb, msgpackr-extract) via
   pnpm.onlyBuiltDependencies in PaperlessUI.Angular/package.json.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 16, 2026 03:01
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment thread Version.props
Comment on lines +5 to +12
<MicrosoftEntityFrameworkCoreVersion>10.0.8</MicrosoftEntityFrameworkCoreVersion>
<MicrosoftAspNetCoreVersion>10.0.8</MicrosoftAspNetCoreVersion>
<MicrosoftAspNetCoreMvcTestingVersion>10.0.8</MicrosoftAspNetCoreMvcTestingVersion>
<MicrosoftExtensionsVersion>10.0.8</MicrosoftExtensionsVersion>
<!-- Testing/telemetry extensions follow a faster cadence than the runtime -->
<MicrosoftExtensionsTestingVersion>10.6.0</MicrosoftExtensionsTestingVersion>
<NpgsqlVersion>10.0.2</NpgsqlVersion>
<NpgsqlEntityFrameworkCoreVersion>10.0.1</NpgsqlEntityFrameworkCoreVersion>
Two bumps were incompatible with the SDK / ecosystem state and got reverted:

- Microsoft.Testing.Extensions.TrxReport 2.2.3 → 2.0.2.
  TrxReport 2.2.3 needs Microsoft.Testing.Platform 2.2.3, but the .NET 10
  SDK (10.0.300) implicitly references Platform 2.1.0, and NU1009 blocks
  any attempt to add a PackageVersion override for an implicitly-referenced
  package under Central Package Management. Held until xunit.v3.mtp-v2 ships
  with Platform 2.2.3+ or the SDK band moves.

- pnpm 10.30.2 → 11.1.2 reverted; the pnpm.onlyBuiltDependencies whitelist
  I added did not satisfy pnpm 11's now-fatal ERR_PNPM_IGNORED_BUILDS for
  @parcel/watcher / esbuild / lmdb / msgpackr-extract. Held until the
  Angular toolchain is reapproved end-to-end (post-install approve-builds
  flow + lockfile regen) on a quiet branch.

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

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Directory.Packages.props`:
- Around line 41-43: Directory.Packages.props currently uses LF line endings but
must use CRLF per guidelines; update the file so its line endings are CRLF
(CR+LF) without changing the content (keep the PackageVersion entries for
Microsoft.Extensions.Diagnostics.Testing,
Microsoft.Extensions.Telemetry.Abstractions,
Microsoft.Extensions.TimeProvider.Testing and the use of
$(MicrosoftExtensionsTestingVersion) intact). Ensure your editor or git config
converts the file to CRLF (or commit a conversion) so the repository enforces
CRLF for this file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 499ded42-a1fa-459d-9472-be9d6c006364

📥 Commits

Reviewing files that changed from the base of the PR and between a1cd535 and 07594d8.

📒 Files selected for processing (4)
  • Directory.Packages.props
  • PaperlessREST.Tests/Integration/SharedRestContainerFixture.cs
  • PaperlessServices.Tests/Integration/WorkerTestBase.cs
  • PaperlessUI.Angular/package.json
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: copilot-pull-request-reviewer
  • GitHub Check: Codacy Static Code Analysis
🧰 Additional context used
📓 Path-based instructions (4)
**/package.json

📄 CodeRabbit inference engine (CLAUDE.md)

In pnpm scripts, omit the -- separator; pass framework-native flags by editing package.json scripts or setting framework defaults (pnpm 10 passes -- literally)

Files:

  • PaperlessUI.Angular/package.json
**/*.cs

📄 CodeRabbit inference engine (.editorconfig)

**/*.cs: Do not qualify event, field, method, and property access with 'this.' in C# code
Use predefined types (like int, string) instead of BCL types (like Int32, String) in C#
Always use parentheses for clarity in arithmetic and relational binary operators in C#
Require explicit accessibility modifiers for non-interface members in C#
Prefer coalesce expressions, collection initializers, null propagation, and object initializers in C#
Prefer auto-properties and compound assignments in C#
Prefer conditional expressions over assignment and return statements in C#
Mark fields as readonly when possible in C#
Treat all unused parameters as code quality issues in C#
Use explicit types instead of 'var' in C# unless type is apparent
Prefer expression-bodied members for accessors, indexers, lambdas, methods, and properties in C#
Use pattern matching instead of 'as' with null checks and 'is' with cast checks in C#
Prefer switch expressions over traditional switch statements in C#
Use conditional delegate calls in C# to avoid null reference exceptions
Prefer static local functions over instance local functions in C#
Use modifier order: public, private, protected, internal, file, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, required, volatile, async in C#
Always use braces for code blocks in C#
Prefer file-scoped namespaces in C#
Prefer implicit object creation when type is apparent in C#
Prefer index and range operators in C#
Place 'using' directives outside of namespace declarations in C#
Always place opening brace on new line before catch, else, finally, and members in C#
Indent block contents and case contents in C#
Add space after comma, before and after binary operators, and after colon in inheritance clause in C#
Do not add space after dot, cast, or before open square brackets in C#
Name interfaces with 'I' prefix using PascalCase in C#
Name types (classes, structs, enums) using PascalCase in C#
Name non-field members (properties, events...

Files:

  • PaperlessREST.Tests/Integration/SharedRestContainerFixture.cs
  • PaperlessServices.Tests/Integration/WorkerTestBase.cs
PaperlessServices.Tests/Integration/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

Mock ITextSummarizer in integration tests with FakeTextSummarizer; do not use the real Gemini API even with placeholder keys

Files:

  • PaperlessServices.Tests/Integration/WorkerTestBase.cs
*

📄 CodeRabbit inference engine (.editorconfig)

*: Use tab indentation with size of 4 spaces for all files
Use CRLF line endings and insert a final newline in all files

Files:

  • Directory.Packages.props
🔇 Additional comments (5)
PaperlessServices.Tests/Integration/WorkerTestBase.cs (1)

31-46: LGTM!

Directory.Packages.props (2)

28-30: ⚡ Quick win

Rebinding is intentional. NpgsqlVersion (10.0.2) and NpgsqlEntityFrameworkCoreVersion (10.0.1) track different version lines in Version.props.


27-28: ⚡ Quick win

Verify that Version.props defines MicrosoftEntityFrameworkCoreVersion to 10.0.8.

Line 27-28 pins MicrosoftEntityFrameworkCoreVersion correctly to 10.0.8 (confirmed in Version.props). However, the second transitive pin target requires clarification: MicrosoftTestingExtensionsTrxReportVersion is currently set to 2.0.2 in Version.props, not 2.2.3. Confirm whether this version is correct or whether a version conflict exists that mirrors the EF Core situation on line 27-28.

PaperlessREST.Tests/Integration/SharedRestContainerFixture.cs (1)

30-48: ⚡ Quick win

Constructor-based image specification is the current standard Testcontainers API.

The pattern used here (new PostgreSqlBuilder(postgresImage), etc.) is the recommended approach in recent Testcontainers .NET versions. Parameterless constructors have been deprecated to encourage explicit image pinning for supply chain security and reproducibility. The codebase is correctly aligned with this API design.

PaperlessUI.Angular/package.json (1)

16-24: 🏗️ Heavy lift

The referenced code snippet does not exist in the current package.json.

The file currently specifies pnpm@10.30.2 (line 17), not 11.1.2, and contains no onlyBuiltDependencies configuration at lines 16–24. The snippet provided does not match the actual file content. If this is reviewing a pending change, resubmit with the actual package.json state or clarify the target state.

			> Likely an incorrect or invalid review comment.

Comment thread Directory.Packages.props
Comment on lines +41 to +43
<PackageVersion Include="Microsoft.Extensions.Diagnostics.Testing" Version="$(MicrosoftExtensionsTestingVersion)" />
<PackageVersion Include="Microsoft.Extensions.Telemetry.Abstractions" Version="$(MicrosoftExtensionsTestingVersion)" />
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="$(MicrosoftExtensionsTestingVersion)" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check Version.props for the split Microsoft.Extensions version properties

echo "=== MicrosoftExtensionsVersion and MicrosoftExtensionsTestingVersion in Version.props ==="
rg -n '(MicrosoftExtensionsVersion|MicrosoftExtensionsTestingVersion)' Version.props

echo ""
echo "=== Verify they have different version cadences ==="
cat Version.props | grep -E '<(MicrosoftExtensionsVersion|MicrosoftExtensionsTestingVersion)>'

Repository: ANcpLua/Paperless

Length of output: 509


🏁 Script executed:

#!/bin/bash
# Verify Directory.Packages.props structure and lines around 41-43
echo "=== Directory.Packages.props lines 38-45 ==="
sed -n '38,45p' Directory.Packages.props | cat -A

echo ""
echo "=== Check file line ending type ==="
file Directory.Packages.props

echo ""
echo "=== Verify the full context of PackageVersion entries ==="
sed -n '40,43p' Directory.Packages.props

Repository: ANcpLua/Paperless

Length of output: 1489


Fix line ending compliance: Directory.Packages.props uses LF but requires CRLF.

The version split is justified. Version.props defines MicrosoftExtensionsTestingVersion as 10.6.0, distinct from MicrosoftExtensionsVersion (10.0.8), supporting the documented faster cadence. However, the file currently uses Unix LF line endings instead of the required CRLF per coding guidelines.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Directory.Packages.props` around lines 41 - 43, Directory.Packages.props
currently uses LF line endings but must use CRLF per guidelines; update the file
so its line endings are CRLF (CR+LF) without changing the content (keep the
PackageVersion entries for Microsoft.Extensions.Diagnostics.Testing,
Microsoft.Extensions.Telemetry.Abstractions,
Microsoft.Extensions.TimeProvider.Testing and the use of
$(MicrosoftExtensionsTestingVersion) intact). Ensure your editor or git config
converts the file to CRLF (or commit a conversion) so the repository enforces
CRLF for this file.

Missed in the previous Testcontainers migration pass — DatabaseFixture
still used the deprecated PostgreSqlBuilder() parameterless ctor (CS0618).
Also sync the postgres default tag with .env.test (17-alpine instead of
the stale 16-alpine).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 16, 2026 03:06
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment thread Version.props
Comment on lines +5 to +12
<MicrosoftEntityFrameworkCoreVersion>10.0.8</MicrosoftEntityFrameworkCoreVersion>
<MicrosoftAspNetCoreVersion>10.0.8</MicrosoftAspNetCoreVersion>
<MicrosoftAspNetCoreMvcTestingVersion>10.0.8</MicrosoftAspNetCoreMvcTestingVersion>
<MicrosoftExtensionsVersion>10.0.8</MicrosoftExtensionsVersion>
<!-- Testing/telemetry extensions follow a faster cadence than the runtime -->
<MicrosoftExtensionsTestingVersion>10.6.0</MicrosoftExtensionsTestingVersion>
<NpgsqlVersion>10.0.2</NpgsqlVersion>
<NpgsqlEntityFrameworkCoreVersion>10.0.1</NpgsqlEntityFrameworkCoreVersion>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Line 35: Add documentation comments in the CI workflow near the uses:
actions/setup-dotnet@v5 and uses: actions/cache@v5 steps stating the minimum
GitHub Actions runner requirement (v2.327.1+) so the dependency is explicit; in
the frontend jobs where uses: actions/setup-node@v6 is used, verify and either
disable setup-node's automatic npm caching or explicitly configure it so it does
not conflict with your explicit cache: pnpm configuration (ensure the cache
key/strategy for pnpm remains the authoritative cache); lastly add a short note
that actions/checkout@v6 and codecov/codecov-action@v6 have no breaking changes.

In `@Directory.Packages.props`:
- Around line 27-30: The modified XML lines that add PackageVersion entries for
Microsoft.EntityFrameworkCore.Relational, Npgsql, and
Npgsql.EntityFrameworkCore.PostgreSQL are space-indented; update those changed
lines (and the other reported blocks around the same change) to use a single tab
character for each indent level instead of spaces so the file adheres to the
repo rule "Use tab indentation"; ensure you replace leading spaces with tabs
only on the modified XML elements (the <PackageVersion Include="..."
Version="..."/> lines) and leave the rest unchanged.

In `@PaperlessREST.Tests/Integration/DatabaseFixture.cs`:
- Line 24: The code currently sets postgresImage from
Environment.GetEnvironmentVariable("POSTGRES_IMAGE") but only falls back on
null; update the assignment so blank or whitespace values are treated as unset
(use string.IsNullOrWhiteSpace on the environment value) and fall back to
"postgres:17-alpine". Locate the variable postgresImage (in the DatabaseFixture
constructor/initialization) and replace the direct GetEnvironmentVariable usage
with a check that uses string.IsNullOrWhiteSpace to decide whether to use the
default image name.

In `@Version.props`:
- Line 33: The TestablyAbstractionsTestingVersion property is set to a
non-existent 6.3.0 which will break NuGet restore; update the
TestablyAbstractionsTestingVersion value to a published release (e.g., 6.0.1)
that supports the test dependencies, then run a restore and the tests that
reference MockFileSystem in ReportProcessorTests.cs and
BatchOrchestratorTests.cs to confirm compatibility; if features used by those
tests require a newer release, pick the correct published version instead and
update the single TestablyAbstractionsTestingVersion entry accordingly.
- Around line 15-16: Add or verify the Asp.Versioning.OpenApi package entry in
Version.props because Asp.Versioning 10.0.0 requires Asp.Versioning.OpenApi to
bridge API versioning with ASP.NET Core 10; either add a new MSBuild property
like AspVersioningOpenApiVersion set to the compatible rc.1 version to be
consumed by package references, or confirm that OpenAPI documents are already
correctly tagged with API version metadata without that package; update
references that use AspVersioningHttpClientVersion and
AspVersioningMvcApiExplorerVersion to also consume the new
AspVersioningOpenApiVersion property.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 94d7ac6a-76b5-4d6f-85b1-cfae9e11c166

📥 Commits

Reviewing files that changed from the base of the PR and between 07594d8 and ed9f3b5.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • Directory.Packages.props
  • PaperlessREST.Tests/Integration/DatabaseFixture.cs
  • Version.props
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: copilot-pull-request-reviewer
  • GitHub Check: Codacy Static Code Analysis
  • GitHub Check: Build & Test (backend)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.cs

📄 CodeRabbit inference engine (.editorconfig)

**/*.cs: Do not qualify event, field, method, and property access with 'this.' in C# code
Use predefined types (like int, string) instead of BCL types (like Int32, String) in C#
Always use parentheses for clarity in arithmetic and relational binary operators in C#
Require explicit accessibility modifiers for non-interface members in C#
Prefer coalesce expressions, collection initializers, null propagation, and object initializers in C#
Prefer auto-properties and compound assignments in C#
Prefer conditional expressions over assignment and return statements in C#
Mark fields as readonly when possible in C#
Treat all unused parameters as code quality issues in C#
Use explicit types instead of 'var' in C# unless type is apparent
Prefer expression-bodied members for accessors, indexers, lambdas, methods, and properties in C#
Use pattern matching instead of 'as' with null checks and 'is' with cast checks in C#
Prefer switch expressions over traditional switch statements in C#
Use conditional delegate calls in C# to avoid null reference exceptions
Prefer static local functions over instance local functions in C#
Use modifier order: public, private, protected, internal, file, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, required, volatile, async in C#
Always use braces for code blocks in C#
Prefer file-scoped namespaces in C#
Prefer implicit object creation when type is apparent in C#
Prefer index and range operators in C#
Place 'using' directives outside of namespace declarations in C#
Always place opening brace on new line before catch, else, finally, and members in C#
Indent block contents and case contents in C#
Add space after comma, before and after binary operators, and after colon in inheritance clause in C#
Do not add space after dot, cast, or before open square brackets in C#
Name interfaces with 'I' prefix using PascalCase in C#
Name types (classes, structs, enums) using PascalCase in C#
Name non-field members (properties, events...

Files:

  • PaperlessREST.Tests/Integration/DatabaseFixture.cs
.github/workflows/*.yml

📄 CodeRabbit inference engine (CLAUDE.md)

Omit the token: ${{ secrets.CODECOV_TOKEN }} line in codecov CI action for public repos with tokenless OIDC upload

Files:

  • .github/workflows/ci.yml
*

📄 CodeRabbit inference engine (.editorconfig)

*: Use tab indentation with size of 4 spaces for all files
Use CRLF line endings and insert a final newline in all files

Files:

  • Directory.Packages.props
  • Version.props
🔇 Additional comments (1)
Version.props (1)

28-28: ⚡ Quick win

Verify SDK pinning claim for TrxReport.

The comment asserts that the .NET 10 SDK implicitly pins Microsoft.Testing.Platform at 2.1.0, preventing upgrade to TrxReport 2.2.3 via NU1009. This specific claim should be verified against current SDK behavior.

.NET 10 SDK Microsoft.Testing.Platform implicit version pin 2.1.0
#!/bin/bash
# Description: Check for NU1009 conflicts and Testing.Platform version constraints

# Search for Testing.Platform references
rg -nP --type=xml 'Microsoft\.Testing\.Platform' --iglob '**/Directory.*.props' --iglob '**/*.csproj'

# Check global.json for SDK version
cat global.json

Comment thread .github/workflows/ci.yml
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🌐 Web query:

GitHub Actions checkout v6 breaking changes

💡 Result:

The release of actions/checkout v6 introduced a change in how credentials are persisted, but it is generally not a breaking change for most standard workflows [1][2]. The primary change in v6 is that the persist-credentials feature now stores credentials in a separate file under $RUNNER_TEMP instead of directly in the local.git/config file [3][4][2]. This update was implemented to improve credential security [2]. For the vast majority of users, no workflow changes are required [2]. Standard git commands such as git fetch and git push will continue to work automatically because the action automatically configures the necessary git includeIf directives to point to the new credential location [1][2]. There is one specific scenario where this change requires an update: if you are running authenticated git commands from within a Docker container action, you must use Actions Runner version v2.329.0 or later to ensure the runner can access the persisted credentials [4][2].

Citations:


🌐 Web query:

GitHub Actions setup-dotnet v5 breaking changes

💡 Result:

The transition to setup-dotnet v5 introduced several breaking changes that require attention to ensure workflow compatibility [1][2]. Key breaking changes in v5 include: 1. Node.js Version Upgrade: The action was upgraded from Node.js 20 to Node.js 24 [2]. 2. Runner Compatibility: Due to the Node.js upgrade, workflows must run on GitHub Actions runners version v2.327.1 or later [1][2]. If your self-hosted runners are older than this version, the action will fail [1]. 3. Removal of Older.NET Versions: Support for certain older.NET versions was removed, and installation scripts were updated [1]. To ensure a smooth transition, verify that your runner environment meets the minimum version requirement (v2.327.1+) before updating to v5 [1][2]. For further details, you can review the full release notes on the official GitHub repository [1][3].

Citations:


🌐 Web query:

GitHub Actions setup-node v6 breaking changes

💡 Result:

The transition to actions/setup-node v6 introduced several breaking changes and updates to improve workflow performance and configuration [1][2]. Key breaking changes in v6 include: 1. Automatic Caching for npm: Caching is now automatically enabled for npm projects when the packageManager field (either top-level or within devEngines) is set to npm in your package.json [2]. For other package managers like Yarn or pnpm, caching remains disabled by default and must be configured manually using the cache input [2]. 2. Removal of always-auth: The always-auth input has been removed [2]. This input was previously deprecated, and users should remove any references to it from their workflow configurations to avoid potential errors [2]. Additionally, users upgrading to v6 should be aware of the following: - Node.js Version Compatibility: As of mid-2026, GitHub Actions are transitioning to Node.js 24 [3]. While v6 is compatible with newer Node.js environments, ensure your workflows are updated to support these requirements, as older Node.js versions (such as Node 20) are being deprecated [3]. - Configuration Preferences: When using node-version-file: package.json, setup-node now prioritizes devEngines.runtime over engines.node [4][5]. To disable the new automatic caching behavior, you can explicitly set the cache input to false in your workflow file [2]: steps: - uses: actions/setup-node@v6 with: package-manager-cache: false

Citations:


🌐 Web query:

GitHub Actions cache v5 breaking changes

💡 Result:

The transition to actions/cache@v5 does not introduce breaking changes to workflow logic, as the release is designed to be fully backward compatible [1][2]. However, there are critical infrastructure requirements that must be met to ensure the action functions correctly [1][2]. Key requirements for actions/cache@v5 include: 1. Node.js Runtime: The action runs on the Node.js 24 runtime [1][2]. 2. Runner Version: It requires a minimum Actions Runner version of 2.327.1 [1][2]. If you are using self-hosted runners, you must update them to this version or newer before upgrading to v5 to avoid workflow failures [1][2]. The v5 release was part of a broader update to the GitHub Actions cache backend service (v2 APIs), which was rolled out in early 2025 [1][2]. While the action itself is backward compatible, failing to meet the runner version requirement will result in errors [1][2]. Additionally, users should be aware that older versions of actions/cache (specifically v1 and v2) have been retired, and workflows using them will fail [3]. It is recommended to use the latest v5 releases to ensure compatibility with ongoing platform updates, such as the deprecation of Node.js 20 on GitHub Actions runners [4].

Citations:


🌐 Web query:

codecov-action v6 breaking changes and migration guide

💡 Result:

The v6 release of the codecov-action is primarily a major version update to support Node.js 24 [1]. There are no complex migration steps or functional breaking changes to the action's inputs or usage patterns; the primary consideration is environment compatibility [1]. Key details regarding the v6 release: 1. Node.js 24 Support: The primary change in v6 is the transition to Node.js 24 [1]. This may cause issues for users on older environments, such as certain versions of GitHub Enterprise Server (GHES) that do not yet support Node.js 24 [2]. If your environment does not support Node.js 24, you should remain on the v5 release [2]. 2. Migration Guide: There is no extensive migration guide required for v6 because it does not introduce changes to the action's arguments or configuration schema [3][1]. Users can update their workflow files by simply changing the version tag from @v5 to @v6 [4][3]. 3. Context on v5: If you are migrating from an older version (e.g., v4 or earlier) to v6, you should be aware of the changes introduced in v5, which include: - The use of the Codecov Wrapper to encapsulate the CLI [5][6]. - Deprecation of the file argument in favor of files [5][6]. - Deprecation of the plugin argument in favor of plugins [5][6]. - The addition of several new arguments, including binary, gcov_args, gcov_executable, gcov_ignore, gcov_include, report_type, skip_validation, and swift_project [5][6]. If you encounter issues after upgrading to v6, verify that your runner environment supports Node.js 24 [2][1]. If it does not, you can safely revert to the latest v5.x release [2].

Citations:


🏁 Script executed:

cat -n .github/workflows/ci.yml | head -150

Repository: ANcpLua/Paperless

Length of output: 5983


Document minimum Actions Runner requirement for setup-dotnet and cache upgrades.

Both actions/setup-dotnet@v5 and actions/cache@v5 require Actions Runner v2.327.1 or later, but this dependency is not documented in the workflow. GitHub-hosted ubuntu-latest runners satisfy this requirement, but the silent dependency on a specific runner version should be documented. Additionally, actions/setup-node@v6 enables automatic npm caching when package.json contains a packageManager field—silent behavior change that requires verification this won't interfere with the explicit cache: pnpm configuration in the frontend jobs.

For reference: actions/checkout@v6 and codecov/codecov-action@v6 introduce no functional breaking changes and are straightforward upgrades.

Applies to: lines 40 (setup-dotnet), 45 (cache), 110, 131 (setup-node automatic caching).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 35, Add documentation comments in the CI
workflow near the uses: actions/setup-dotnet@v5 and uses: actions/cache@v5 steps
stating the minimum GitHub Actions runner requirement (v2.327.1+) so the
dependency is explicit; in the frontend jobs where uses: actions/setup-node@v6
is used, verify and either disable setup-node's automatic npm caching or
explicitly configure it so it does not conflict with your explicit cache: pnpm
configuration (ensure the cache key/strategy for pnpm remains the authoritative
cache); lastly add a short note that actions/checkout@v6 and
codecov/codecov-action@v6 have no breaking changes.

Comment thread Directory.Packages.props
Comment on lines +27 to +30
<!-- Transitive pin: Hangfire.PostgreSql 1.21.1 pulls EF Core Relational 10.0.4 — force-unify to 10.0.8 via CentralPackageTransitivePinningEnabled -->
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="$(MicrosoftEntityFrameworkCoreVersion)" />
<PackageVersion Include="Npgsql" Version="$(NpgsqlVersion)" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="$(NpgsqlVersion)" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="$(NpgsqlEntityFrameworkCoreVersion)" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use tab indentation on modified XML lines.

The modified entries are space-indented; this file must use tab indentation per repo rules. Please convert leading spaces to tabs on the changed lines to stay compliant.

As per coding guidelines "Use tab indentation with size of 4 spaces for all files".

Also applies to: 36-43, 85-86

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Directory.Packages.props` around lines 27 - 30, The modified XML lines that
add PackageVersion entries for Microsoft.EntityFrameworkCore.Relational, Npgsql,
and Npgsql.EntityFrameworkCore.PostgreSQL are space-indented; update those
changed lines (and the other reported blocks around the same change) to use a
single tab character for each indent level instead of spaces so the file adheres
to the repo rule "Use tab indentation"; ensure you replace leading spaces with
tabs only on the modified XML elements (the <PackageVersion Include="..."
Version="..."/> lines) and leave the rest unchanged.

public DatabaseFixture()
{
string postgresImage = Environment.GetEnvironmentVariable("POSTGRES_IMAGE") ?? "postgres:16-alpine";
string postgresImage = Environment.GetEnvironmentVariable("POSTGRES_IMAGE") ?? "postgres:17-alpine";
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Handle blank POSTGRES_IMAGE the same as unset.

Line 24 only falls back on null. If CI defines POSTGRES_IMAGE as empty/whitespace, this passes an invalid image name and container startup fails.

Suggested fix
-		string postgresImage = Environment.GetEnvironmentVariable("POSTGRES_IMAGE") ?? "postgres:17-alpine";
+		string? configuredPostgresImage = Environment.GetEnvironmentVariable("POSTGRES_IMAGE");
+		string postgresImage = string.IsNullOrWhiteSpace(configuredPostgresImage)
+			? "postgres:17-alpine"
+			: configuredPostgresImage;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
string postgresImage = Environment.GetEnvironmentVariable("POSTGRES_IMAGE") ?? "postgres:17-alpine";
string? configuredPostgresImage = Environment.GetEnvironmentVariable("POSTGRES_IMAGE");
string postgresImage = string.IsNullOrWhiteSpace(configuredPostgresImage)
? "postgres:17-alpine"
: configuredPostgresImage;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@PaperlessREST.Tests/Integration/DatabaseFixture.cs` at line 24, The code
currently sets postgresImage from
Environment.GetEnvironmentVariable("POSTGRES_IMAGE") but only falls back on
null; update the assignment so blank or whitespace values are treated as unset
(use string.IsNullOrWhiteSpace on the environment value) and fall back to
"postgres:17-alpine". Locate the variable postgresImage (in the DatabaseFixture
constructor/initialization) and replace the direct GetEnvironmentVariable usage
with a check that uses string.IsNullOrWhiteSpace to decide whether to use the
default image name.

Comment thread Version.props
Comment on lines +15 to +16
<AspVersioningHttpClientVersion>10.0.0</AspVersioningHttpClientVersion>
<AspVersioningMvcApiExplorerVersion>10.0.0</AspVersioningMvcApiExplorerVersion>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Find API versioning usage patterns and check for deprecated members

# Search for API versioning attribute usage
rg -nP --type=cs -C3 '\[ApiVersion\(|ApiVersionNeutral|MapToApiVersion'

# Search for versioning configuration in Program.cs or Startup.cs
rg -nP --type=cs -C5 'AddApiVersioning|WithApiVersioning'

Repository: ANcpLua/Paperless

Length of output: 1109


🌐 Web query:

Asp.Versioning.Http.Client 10.0.0 breaking changes and migration guide

💡 Result:

The release of Asp.Versioning.Http.Client 10.0.0 introduces breaking changes primarily driven by the adoption of C# 14 extension properties, which replace several previous extension methods to provide more succinct and idiomatic code [1][2]. Breaking Changes in 10.0.0 The primary breaking change affecting the Http.Client library is the conversion of specific extension methods into extension properties [1]. If your code relies on these methods, you will need to update your syntax to use the new property accessors [1]. Specifically for Asp.Versioning.Http.Client: - The extension method ReadSunsetPolicy on HttpResponseMessage has been replaced by the extension property SunsetPolicy { get; } [1]. General Migration Notes - Extension Members: This change is part of a broader effort in the 10.0.0 release to align with.NET 10 and C# 14 capabilities [1]. While these changes are binary and source incompatible, they are generally straightforward to resolve by updating the syntax from method calls to property access [1][3]. - OpenAPI Changes: If you are also using the associated OpenAPI extensions, note that the x-api-versioning extension schema was updated between Preview 1 and Preview 2 to use a nested links property rather than a simple array [4]. - General Upgrade Path: As with any major version upgrade, ensure your project file references are updated to version 10.0.0 [5]. Because this release aligns with the.NET 10 LTS strategy, it is recommended to review the official release notes on the project's GitHub repository for any additional, highly specific customizations you may have implemented [1]. For most users, these changes will not require significant architectural refactoring unless you are performing deep customization or extending the API versioning library itself [1].

Citations:


🌐 Web query:

Asp.Versioning.Mvc.ApiExplorer 10.0.0 breaking changes and migration guide

💡 Result:

The release of Asp.Versioning.Mvc.ApiExplorer 10.0.0 introduces significant changes aligned with.NET 10, primarily focused on leveraging C# 14 extension properties and integrating deeply with the built-in ASP.NET Core OpenAPI support [1][2]. Breaking Changes The majority of breaking changes involve the conversion of extension methods to extension properties, which provides more succinct code [1][3]. Unless you are performing deep customization or extending the API Versioning library, these changes may not impact standard usage [1]. Key API Explorer changes include: - Extension methods such as GetApiVersion, SetApiVersion, IsDeprecated, GetSunsetPolicy, and SetSunsetPolicy have been replaced by extension properties (e.g., ApiVersion { get; set; }, IsDeprecated { get; }, SunsetPolicy { get; set; }) [1][3]. - Removal of obsolete types and members, including DefaultApiVersionGroupDescriptionProvider and the IServiceCollectionExtensions.EnableApiVersionBinding extension method (which is now supported without explicit registration) [1][3]. Migration and OpenAPI Integration The most significant architectural change in version 10.0.0 is the new, native integration with ASP.NET Core OpenAPI [2][4]. - New Package Requirement: You must now use the Asp.Versioning.OpenApi package to bridge API versioning with the built-in OpenAPI document transformer pipeline [5][2]. - Service Registration: You should call.AddOpenApi from the Asp.Versioning namespace after configuring API versioning [5][4]. Ensure.AddApiExplorer is called after.AddApiVersioning to ensure versioning information is correctly included in OpenAPI documents [5][4]. - Endpoint Configuration: Use app.MapOpenApi.WithDocumentPerVersion to automatically generate and register one OpenAPI document per API version [2][4]. - Swashbuckle Migration: If migrating from Swashbuckle, remove existing IConfigureOptions implementations that manually loop through IApiVersionDescriptionProvider, as well as AddSwaggerGen and UseSwagger calls [4]. When configuring, ensure your GroupNameFormat (e.g., "'v'VVV") is consistent with the URL patterns expected by your documentation UI (such as Scalar or Swagger UI) [4]. Note that Asp.Versioning.OpenAPI is currently released as a release candidate (rc.1) [6].

Citations:


🏁 Script executed:

# Search for extension method usage that changed in 10.0.0
rg -nP --type=cs 'ReadSunsetPolicy|GetApiVersion\(|SetApiVersion\(|IsDeprecated|GetSunsetPolicy|SetSunsetPolicy' -C2

# Search for Swashbuckle usage (may need migration with new OpenAPI integration)
rg -nP --type=cs 'UseSwagger|AddSwaggerGen|SwaggerGen' -C2

# Search for removed types/members
rg -nP --type=cs 'DefaultApiVersionGroupDescriptionProvider|EnableApiVersionBinding' -C2

Repository: ANcpLua/Paperless

Length of output: 43


🏁 Script executed:

# Check if Asp.Versioning.OpenApi is referenced in Version.props or project files
rg -nP 'Asp\.Versioning\.OpenApi|AspVersioningOpenApi' 

# Check the full Version.props file to understand the complete versioning context
cat -n Version.props | head -60

Repository: ANcpLua/Paperless

Length of output: 3605


🏁 Script executed:

# Get the complete AddApiExplorer configuration
rg -nP --type=cs -A20 'AddApiExplorer\(opts'

# Search for OpenAPI/Swagger endpoint registration
rg -nP --type=cs 'MapOpenApi|UseSwagger|MapSwagger|app\.Swagger|UseSwaggerUI' -C3

# Check for any Scalar or other OpenAPI documentation UI usage
rg -nP --type=cs 'UseScalar|MapScalar|AddScalar' -C2

Repository: ANcpLua/Paperless

Length of output: 2517


Verify Asp.Versioning.OpenApi integration for API versioning 10.0.0.

The jump to 10.0.0 does introduce breaking changes (extension methods converted to properties, removal of obsolete types), but the codebase does not use the affected APIs. However, the 10.0.0 release requires the Asp.Versioning.OpenApi package to bridge API versioning with ASP.NET Core 10's native OpenAPI integration. This package is missing from Version.props. Add it with a compatible version (currently rc.1), or verify that OpenAPI documents are correctly tagged with versioning information without it.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Version.props` around lines 15 - 16, Add or verify the Asp.Versioning.OpenApi
package entry in Version.props because Asp.Versioning 10.0.0 requires
Asp.Versioning.OpenApi to bridge API versioning with ASP.NET Core 10; either add
a new MSBuild property like AspVersioningOpenApiVersion set to the compatible
rc.1 version to be consumed by package references, or confirm that OpenAPI
documents are already correctly tagged with API version metadata without that
package; update references that use AspVersioningHttpClientVersion and
AspVersioningMvcApiExplorerVersion to also consume the new
AspVersioningOpenApiVersion property.

Comment thread Version.props
<TestablyAbstractionsVersion>10.0.0</TestablyAbstractionsVersion>
<TestablyAbstractionsTestingVersion>5.0.1</TestablyAbstractionsTestingVersion>
<TestablyAbstractionsVersion>10.2.0</TestablyAbstractionsVersion>
<TestablyAbstractionsTestingVersion>6.3.0</TestablyAbstractionsTestingVersion>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Find Testably.Abstractions.Testing usage patterns

# Search for Testably testing usage (MockFileSystem, etc.)
rg -nP --type=cs -C3 'MockFileSystem|IFileSystem.*Mock|Testably\.Abstractions\.Testing'

Repository: ANcpLua/Paperless

Length of output: 4867


🌐 Web query:

Testably.Abstractions.Testing 6.3.0 changelog breaking changes from 5.0.1

💡 Result:

As of May 16, 2026, there is no version 6.3.0 of the Testably.Abstractions.Testing NuGet package. The latest available version is 6.0.1, which was released on March 30, 2026 [1]. Because version 6.3.0 does not exist, there is no changelog or list of breaking changes for it. The library is currently in its 6.x release cycle, which followed the 5.x series [2][3][1]. If you are planning an upgrade from 5.0.1 to the current 6.x version, you should consult the official repository's release notes and migration guides for the 6.0.0 major release, as major version increments typically contain the breaking changes [2][4].

Citations:


TestablyAbstractionsTestingVersion 6.3.0 does not exist.

Version 6.3.0 is not published. The latest available version is 6.0.1 (March 30, 2026). This version specification will fail NuGet restore. Confirm the intended version and update accordingly. The codebase has active test dependencies on MockFileSystem in ReportProcessorTests.cs and BatchOrchestratorTests.cs, so ensure the corrected version supports existing usage patterns.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Version.props` at line 33, The TestablyAbstractionsTestingVersion property is
set to a non-existent 6.3.0 which will break NuGet restore; update the
TestablyAbstractionsTestingVersion value to a published release (e.g., 6.0.1)
that supports the test dependencies, then run a restore and the tests that
reference MockFileSystem in ReportProcessorTests.cs and
BatchOrchestratorTests.cs to confirm compatibility; if features used by those
tests require a newer release, pick the correct published version instead and
update the single TestablyAbstractionsTestingVersion entry accordingly.

@ANcpLua ANcpLua merged commit fcea8a7 into main May 16, 2026
6 of 7 checks passed
@ANcpLua ANcpLua deleted the fix/ci-unblock-orphan-tests-xmlcontent branch May 16, 2026 03:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants