feat: add mutation testing and increased test coverage#75
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (3)
📝 WalkthroughWalkthroughAdds Stryker.NET mutation testing configuration and docs; introduces multiple chunk-storage test fakes and new tests (Tar, Large, pointer-only enumeration); changes ChunkStorageService upload progress gating and download stream ownership; updates LocalFileEnumerator to emit logical binary paths for pointer files. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant ChunkStorageService
participant BlobContainer as BlobContainerService
participant Progress as IProgress<long>
Client->>ChunkStorageService: UploadChunkAsync(chunk, progressCallback)
ChunkStorageService->>Progress: wrap callback (CallbackProgress)
loop read loop (multiple reads)
ChunkStorageService->>BlobContainer: OpenWriteAsync(blobName, contentType)
BlobContainer-->>ChunkStorageService: write stream
ChunkStorageService->>BlobContainer: Write(chunkSegment)
ChunkStorageService->>Progress: report bytesRead (if > lastReported)
end
ChunkStorageService->>BlobContainer: SetMetadataAsync(blobName, metadata)
alt metadata race (first time)
BlobContainer-->>ChunkStorageService: throw BlobAlreadyExistsException
ChunkStorageService->>BlobContainer: DeleteAsync(blobName)
ChunkStorageService->>BlobContainer: OpenWriteAsync(...) (retry)
ChunkStorageService->>Progress: report resumed bytes (monotonic)
ChunkStorageService->>BlobContainer: SetMetadataAsync(blobName, metadata)
else metadata success
BlobContainer-->>ChunkStorageService: metadata set
end
ChunkStorageService-->>Client: Upload complete
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 4/5 reviews remaining, refill in 12 minutes. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/Arius.Core/Shared/ChunkStorage/ChunkStorageService.cs (1)
319-322: Unused constructor parameters — consider removing them.The constructor accepts
decryptStream,progressStream, anddownloadStreambut only usesinner. Since disposal now relies on the stream chain cascading through_inner, these parameters are dead code.🔧 Suggested simplification
-public ChunkDownloadStream(Stream inner, Stream decryptStream, Stream progressStream, Stream downloadStream) +public ChunkDownloadStream(Stream inner) { _inner = inner; }And update the call site at line 216:
-return new ChunkDownloadStream(gzipStream, decryptStream, progressOrRawStream, downloadStream); +return new ChunkDownloadStream(gzipStream);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/Arius.Core/Shared/ChunkStorage/ChunkStorageService.cs` around lines 319 - 322, The ChunkDownloadStream constructor currently declares parameters decryptStream, progressStream, and downloadStream but only assigns _inner; remove the unused parameters from the ChunkDownloadStream(Stream inner, ...) signature and delete any unused private fields or assignments related to decryptStream/progressStream/downloadStream; then update all call sites that construct ChunkDownloadStream to pass only the inner Stream (or stop supplying the removed arguments). Ensure no other code references the removed fields so compilation remains clean.src/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cs (1)
316-476: Move inline test doubles to aFakes/folder beside these tests.From Line 316 onward, the helper doubles are embedded in the test file. Extracting them into a local
Fakes/subfolder keeps the test class focused and aligns with the repo’s test-structure rules.As per coding guidelines: “Test projects should mirror the structure of the project they exercise. Put reusable test doubles in
Fakes/directory. Put scenario-specific test doubles in a localFakes/subfolder beside the tests that use them.”🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cs` around lines 316 - 476, The test helper doubles (BlobAlreadyExistsOnSetMetadataOnceBlobContainerService, ThinMetadataRecordingBlobContainerService, ContentTypeCapturingBlobContainerService, EncryptedPassthroughService, ChunkedReadMemoryStream) are embedded inline and should be extracted to separate files in a local Fakes/ folder beside these tests; create one file per class in that Fakes/ folder, give them the same namespace as the test project (or adjust namespace and add appropriate using in the test file), preserve their sealed/internal accessibility so tests can access them, and update the test file to remove the inline definitions and reference the moved types; ensure constructors/signatures remain identical (e.g., ChunkedReadMemoryStream(byte[] buffer, int maxChunkSize)) so no test code changes are required.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/superpowers/plans/2026-04-29-stryker-core.md`:
- Around line 77-95: The outer fenced block around the "Mutation Testing"
section uses ```markdown while it contains inner ```bash fences, which can break
rendering; update the outer fence to use a longer fence (e.g., ````markdown) and
close it with the matching longer fence so the inner ```bash blocks remain
intact—apply this change to the Markdown block that starts with "### Mutation
Testing" and contains the `dotnet tool install --global dotnet-stryker` and
`dotnet stryker --config-file stryker-config.json` examples.
---
Nitpick comments:
In `@src/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cs`:
- Around line 316-476: The test helper doubles
(BlobAlreadyExistsOnSetMetadataOnceBlobContainerService,
ThinMetadataRecordingBlobContainerService,
ContentTypeCapturingBlobContainerService, EncryptedPassthroughService,
ChunkedReadMemoryStream) are embedded inline and should be extracted to separate
files in a local Fakes/ folder beside these tests; create one file per class in
that Fakes/ folder, give them the same namespace as the test project (or adjust
namespace and add appropriate using in the test file), preserve their
sealed/internal accessibility so tests can access them, and update the test file
to remove the inline definitions and reference the moved types; ensure
constructors/signatures remain identical (e.g., ChunkedReadMemoryStream(byte[]
buffer, int maxChunkSize)) so no test code changes are required.
In `@src/Arius.Core/Shared/ChunkStorage/ChunkStorageService.cs`:
- Around line 319-322: The ChunkDownloadStream constructor currently declares
parameters decryptStream, progressStream, and downloadStream but only assigns
_inner; remove the unused parameters from the ChunkDownloadStream(Stream inner,
...) signature and delete any unused private fields or assignments related to
decryptStream/progressStream/downloadStream; then update all call sites that
construct ChunkDownloadStream to pass only the inner Stream (or stop supplying
the removed arguments). Ensure no other code references the removed fields so
compilation remains clean.
🪄 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: CHILL
Plan: Pro
Run ID: a9cf6d43-0002-4f69-9600-876fc2988680
📒 Files selected for processing (10)
README.mddocs/superpowers/plans/2026-04-29-stryker-core.mddocs/superpowers/specs/2026-04-29-stryker-core-design.mddocs/superpowers/specs/2026-04-29-stryker-coverage-improvement-design.mdsrc/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceReadTests.cssrc/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cssrc/Arius.Core.Tests/Shared/LocalFile/LocalFileEnumeratorTests.cssrc/Arius.Core/Shared/ChunkStorage/ChunkStorageService.cssrc/Arius.Core/Shared/LocalFile/LocalFileEnumerator.csstryker-config.json
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md (2)
9-10: Consider increasing iteration count and adding warmup for more reliable benchmark results.The current configuration uses
WarmupCount=0and onlyIterationCount=3, which may produce unstable measurements with high variance. BenchmarkDotNet typically recommends at least 1 warmup iteration for JIT stabilization and 15+ iterations for statistical reliability. The current high StdDev (1.261s on a 40.03s mean, ~3%) suggests some measurement instability.If this minimal configuration is intentional for CI speed, consider documenting that tradeoff or running more thorough benchmarks periodically.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md` around lines 9 - 10, The benchmark config uses WarmupCount=0 and IterationCount=3 which can yield unstable results; update the benchmark configuration to set WarmupCount to at least 1 and increase IterationCount to 15+ (or document the CI-speed tradeoff) so JIT warms up and measurements gain statistical reliability—modify the place where WarmupCount and IterationCount are defined/used (search for the WarmupCount and IterationCount settings in the benchmark run/config) to apply these new values or add a comment explaining why the lower counts are intentional.
1-2: Minor markdown formatting issues flagged by static analysis.The static analysis tool flagged:
- Line 1: Fenced code block missing language specifier (MD040)
- Line 13: Table not surrounded by blank lines (MD058)
Since this is a BenchmarkDotNet-generated file, these issues would need to be addressed either in the BenchmarkDotNet output template or via post-processing. For a historical CI artifact, these formatting issues are cosmetic and can be safely ignored unless the file needs to be consumed by strict markdown parsers.
Also applies to: 13-13
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md` around lines 1 - 2, The Markdown output has minor style issues: a fenced code block at the top is missing a language specifier and a table at line ~13 isn’t surrounded by blank lines; update the generated markdown (or post-process the BenchmarkDotNet output) to add a language tag to the opening triple-backtick fence and insert a blank line before and after the table so it conforms to MD040 and MD058; change the template or post-processing step that produces the top fenced code block and the table region to emit the corrected delimiters.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In
`@src/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md`:
- Around line 9-10: The benchmark config uses WarmupCount=0 and IterationCount=3
which can yield unstable results; update the benchmark configuration to set
WarmupCount to at least 1 and increase IterationCount to 15+ (or document the
CI-speed tradeoff) so JIT warms up and measurements gain statistical
reliability—modify the place where WarmupCount and IterationCount are
defined/used (search for the WarmupCount and IterationCount settings in the
benchmark run/config) to apply these new values or add a comment explaining why
the lower counts are intentional.
- Around line 1-2: The Markdown output has minor style issues: a fenced code
block at the top is missing a language specifier and a table at line ~13 isn’t
surrounded by blank lines; update the generated markdown (or post-process the
BenchmarkDotNet output) to add a language tag to the opening triple-backtick
fence and insert a blank line before and after the table so it conforms to MD040
and MD058; change the template or post-processing step that produces the top
fenced code block and the table region to emit the corrected delimiters.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 28252f4e-9eb8-4b08-aa56-9b402aa929db
⛔ Files ignored due to path filters (3)
src/Arius.Benchmarks/raw/20260429T111639.696Z/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-20260429-111639.logis excluded by!**/*.logsrc/Arius.Benchmarks/raw/20260429T111639.696Z/benchmark-output.logis excluded by!**/*.logsrc/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.csvis excluded by!**/*.csv
📒 Files selected for processing (3)
src/Arius.Benchmarks/benchmark-tail.mdsrc/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.mdsrc/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.html
✅ Files skipped from review due to trivial changes (2)
- src/Arius.Benchmarks/raw/20260429T111639.696Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.html
- src/Arius.Benchmarks/benchmark-tail.md
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md (1)
43-49: Reduce repeated bullet phrasing for readability.Lines 43-49 and Lines 81-84 repeat the same opening pattern, which makes scanning harder. Consider varying phrasing while keeping meaning unchanged.
✍️ Suggested wording cleanup
-* Good, because Arius can use mutation testing immediately in the core archive, restore, list, snapshot, chunk, and tree behavior that matters most. -* Good, because the chosen scope keeps runtime and debugging costs bounded while the team learns where mutation testing pays off. -* Good, because the ADR reflects the repository's real TUnit/MTP setup instead of assuming a standard VSTest-only world. -* Good, because fluctuating scores are treated as diagnostic evidence instead of falsely precise pass/fail gates. -* Bad, because mutation testing is not yet a whole-repository signal. -* Bad, because developers must interpret score movement carefully when the preview MTP runner produces unstable results. -* Bad, because future CI enforcement requires a separate decision once score stability and runtime are better understood. +* Benefit: Arius can apply mutation testing immediately to high-value core archive, restore, list, snapshot, chunk, and tree behavior. +* Benefit: The scoped rollout keeps runtime and debugging costs bounded while the team learns where mutation testing is most effective. +* Benefit: The ADR matches the repository’s actual TUnit/MTP setup instead of assuming a VSTest-only path. +* Benefit: Score fluctuation is treated as diagnostic evidence rather than a brittle pass/fail gate. +* Tradeoff: Mutation testing is not yet a whole-repository signal. +* Tradeoff: Developers must interpret score movement carefully while the preview MTP runner remains unstable. +* Tradeoff: CI enforcement needs a future decision after stability and runtime improve.Also applies to: 81-84
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md` around lines 43 - 49, The repeated bullet openings "Good, because" and "Bad, because" in the ADR bullets make scanning harder; edit the bullets in adr-0005-adopt-scoped-stryker-mutation-testing.md (the "Good" and "Bad" lists) to vary phrasing while preserving meaning—e.g., change some "Good, because..." to "Benefits: ..." or "This enables..." and some "Bad, because..." to "Limitations: ..." or "Drawback: ..." so the list reads more varied and scannable without altering the substantive content.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ChunkedReadMemoryStream.cs`:
- Around line 3-15: ChunkedReadMemoryStream currently accepts any maxChunkSize
which can be zero or negative causing silent EOFs or exceptions; validate the
constructor parameter maxChunkSize in ChunkedReadMemoryStream(byte[] buffer, int
maxChunkSize) and throw an ArgumentOutOfRangeException (or similar) when
maxChunkSize <= 0 with a clear message so tests fail fast and indicate the bad
argument.
---
Nitpick comments:
In `@docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md`:
- Around line 43-49: The repeated bullet openings "Good, because" and "Bad,
because" in the ADR bullets make scanning harder; edit the bullets in
adr-0005-adopt-scoped-stryker-mutation-testing.md (the "Good" and "Bad" lists)
to vary phrasing while preserving meaning—e.g., change some "Good, because..."
to "Benefits: ..." or "This enables..." and some "Bad, because..." to
"Limitations: ..." or "Drawback: ..." so the list reads more varied and
scannable without altering the substantive content.
🪄 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: CHILL
Plan: Pro
Run ID: 8449ada8-bfeb-4957-bc6e-ea79adaf4b25
📒 Files selected for processing (8)
docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.mdsrc/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/BlobAlreadyExistsOnSetMetadataOnceBlobContainerService.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ChunkedReadMemoryStream.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ContentTypeCapturingBlobContainerService.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/EncryptedPassthroughService.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ThinMetadataRecordingBlobContainerService.cssrc/Arius.Core/Shared/ChunkStorage/ChunkStorageService.cs
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@src/Arius.Benchmarks/raw/20260429T113931.866Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md`:
- Around line 1-15: The markdown report starts with an unlabeled fenced code
block and the results table immediately follows without a blank line; update the
opening fence to a labeled block (use ```text) and insert a blank line before
the table so the table is separated from the code block, ensuring the fenced
block ends with ``` and the table (the line beginning with "| Method") is
preceded by an empty line to satisfy markdownlint rules.
🪄 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: CHILL
Plan: Pro
Run ID: dd0f9874-e4c8-4112-8ad9-4d9c15390862
⛔ Files ignored due to path filters (3)
src/Arius.Benchmarks/raw/20260429T113931.866Z/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-20260429-113932.logis excluded by!**/*.logsrc/Arius.Benchmarks/raw/20260429T113931.866Z/benchmark-output.logis excluded by!**/*.logsrc/Arius.Benchmarks/raw/20260429T113931.866Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.csvis excluded by!**/*.csv
📒 Files selected for processing (3)
src/Arius.Benchmarks/benchmark-tail.mdsrc/Arius.Benchmarks/raw/20260429T113931.866Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.mdsrc/Arius.Benchmarks/raw/20260429T113931.866Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.html
✅ Files skipped from review due to trivial changes (1)
- src/Arius.Benchmarks/raw/20260429T113931.866Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.html
🚧 Files skipped from review as they are similar to previous changes (1)
- src/Arius.Benchmarks/benchmark-tail.md
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md (2)
12-16: Fix Markdownlint fence formatting (add language + verify closing fence).The benchmark report includes a fenced block (opening around Line 12) without a language tag, which triggers MD040 (“Fenced code blocks should have a language specified”). Also, the snippet shows the closing backticks may be inconsistent (ends with
````), which can cause the table to be parsed incorrectly and trigger MD058.✅ Proposed fix
-``` +```text | Method | Mean | Error | StdDev | Completed Work Items | Lock Contentions | Gen0 | Gen1 | Allocated | |------------------------------------------------------------------------- |--------:|--------:|--------:|---------------------:|-----------------:|-----------:|----------:|----------:| | 'Canonical_Representative_Workflow_Runs_On_Supported_Backends (Azurite)' | 39.09 s | 0.566 s | 0.031 s | 71650.0000 | 4.0000 | 36000.0000 | 6000.0000 | 613.09 MB | - -```` + +```This should satisfy the linter and avoid accidental Markdown table parsing outside the fence.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md` around lines 12 - 16, Add a language tag to the opening fenced code block and fix the closing fence so it uses three backticks; specifically, update the block that begins with ``` (the benchmark table block including the header row "| Method | Mean | ...") to start with ```text (or ```md) and ensure the closing delimiter is exactly ``` (not four backticks or mismatched), so the table is correctly rendered and MD040/MD058 are resolved.
13-15: Add blank line(s) around the table if it’s parsed as Markdown (MD058).static_analysis_hints report MD058 at Line 13 (“Tables should be surrounded by blank lines”). If the linter is treating the table as real Markdown (e.g., due to a fence parsing issue), adding a blank line immediately before and after the table will make the formatting robust.
✅ Proposed fix
```text + | Method | Mean | Error | StdDev | Completed Work Items | Lock Contentions | Gen0 | Gen1 | Allocated | |------------------------------------------------------------------------- |--------:|--------:|--------:|---------------------:|-----------------:|-----------:|----------:|----------:| | 'Canonical_Representative_Workflow_Runs_On_Supported_Backends (Azurite)' | 39.09 s | 0.566 s | 0.031 s | 71650.0000 | 4.0000 | 36000.0000 | 6000.0000 | 613.09 MB | +</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md
around lines 13 - 15, The Markdown table starting with the header row containing
"Method | Mean | Error ..." and the row for
'Canonical_Representative_Workflow_Runs_On_Supported_Backends (Azurite)' needs
blank lines immediately before and after it to satisfy MD058; edit the report so
there is an empty line above the table header and an empty line after the last
table row to ensure the linter treats it as a proper fenced table.</details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In
@src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md:
- Around line 12-16: Add a language tag to the opening fenced code block and fix
the closing fence so it uses three backticks; specifically, update the block
that begins with(the benchmark table block including the header row "| Method | Mean | ...") to start withtext (ormd) and ensure the closing delimiter is exactly(not four backticks or mismatched), so the table is
correctly rendered and MD040/MD058 are resolved.- Around line 13-15: The Markdown table starting with the header row containing
"Method | Mean | Error ..." and the row for
'Canonical_Representative_Workflow_Runs_On_Supported_Backends (Azurite)' needs
blank lines immediately before and after it to satisfy MD058; edit the report so
there is an empty line above the table header and an empty line after the last
table row to ensure the linter treats it as a proper fenced table.</details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Path: .coderabbit.yaml **Review profile**: CHILL **Plan**: Pro **Run ID**: `6024b083-93b5-4cca-ac50-047cc87b7cf3` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 8b8a38bc385ebb6e72171a5bd402ff8ee8621e90 and 82db171cb9534839536763d23f3e8881ef434663. </details> <details> <summary>⛔ Files ignored due to path filters (3)</summary> * `src/Arius.Benchmarks/raw/20260429T114827.731Z/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-20260429-114827.log` is excluded by `!**/*.log` * `src/Arius.Benchmarks/raw/20260429T114827.731Z/benchmark-output.log` is excluded by `!**/*.log` * `src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.csv` is excluded by `!**/*.csv` </details> <details> <summary>📒 Files selected for processing (3)</summary> * `src/Arius.Benchmarks/benchmark-tail.md` * `src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report-github.md` * `src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.html` </details> <details> <summary>✅ Files skipped from review due to trivial changes (1)</summary> * src/Arius.Benchmarks/raw/20260429T114827.731Z/results/Arius.Benchmarks.RepresentativeWorkflowBenchmarks-report.html </details> <details> <summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary> * src/Arius.Benchmarks/benchmark-tail.md </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md (1)
38-43: Optional readability polish: vary repeated bullet openings.Several consecutive bullets start with identical phrasing (“Good, because …” / “Bad, because …”). Rewording a few openings will improve readability without changing meaning.
Also applies to: 74-77
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md` around lines 38 - 43, The repeated bullet openings ("Good, because …" / "Bad, because …") reduce readability; edit the bullet list in adr-0005-adopt-scoped-stryker-mutation-testing.md to vary the leading phrasing (e.g., replace some "Good, because…" with "Pros:" / "Positive:" / "Works well because…" and some "Bad, because…" with "Concerns:" / "Downside:" / "Needs caution because…") while keeping the original meanings intact; apply the same variation to the later block referenced (the bullets at 74-77).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md`:
- Line 17: Remove the duplicated word "to" in the decision driver sentence that
currently reads "due to to preview Microsoft Testing Platform runner" so it
becomes "due to preview Microsoft Testing Platform runner"; edit the sentence in
adr-0005-adopt-scoped-stryker-mutation-testing.md (the line containing the
decision driver bullet) to remove the extra "to".
---
Nitpick comments:
In `@docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md`:
- Around line 38-43: The repeated bullet openings ("Good, because …" / "Bad,
because …") reduce readability; edit the bullet list in
adr-0005-adopt-scoped-stryker-mutation-testing.md to vary the leading phrasing
(e.g., replace some "Good, because…" with "Pros:" / "Positive:" / "Works well
because…" and some "Bad, because…" with "Concerns:" / "Downside:" / "Needs
caution because…") while keeping the original meanings intact; apply the same
variation to the later block referenced (the bullets at 74-77).
🪄 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: CHILL
Plan: Pro
Run ID: 56ca8ac6-4911-4693-a375-e858b824f8e6
📒 Files selected for processing (10)
README.mddocs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.mdsrc/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceReadTests.cssrc/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/BlobAlreadyExistsOnSetMetadataOnceBlobContainerService.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/BlockingDeleteBlobContainerService.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ChunkedReadMemoryStream.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ContentTypeCapturingBlobContainerService.cssrc/Arius.Core.Tests/Shared/ChunkStorage/Fakes/NonSeekableReadStream.cssrc/Arius.Core/Shared/LocalFile/LocalFileEnumerator.cs
✅ Files skipped from review due to trivial changes (3)
- src/Arius.Core.Tests/Shared/ChunkStorage/Fakes/NonSeekableReadStream.cs
- src/Arius.Core.Tests/Shared/ChunkStorage/Fakes/BlockingDeleteBlobContainerService.cs
- src/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceReadTests.cs
🚧 Files skipped from review as they are similar to previous changes (5)
- README.md
- src/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ChunkedReadMemoryStream.cs
- src/Arius.Core.Tests/Shared/ChunkStorage/Fakes/ContentTypeCapturingBlobContainerService.cs
- src/Arius.Core.Tests/Shared/ChunkStorage/ChunkStorageServiceUploadTests.cs
- src/Arius.Core/Shared/LocalFile/LocalFileEnumerator.cs
|
|
||
| * mutation testing should help identify weak behavior-level tests in core repository logic | ||
| * mutation runs are significantly slower than the normal unit test suite | ||
| * fluctuating mutation scores (due to to preview Microsoft Testing Platform runner) should not become a noisy CI gate before their stability is understood |
There was a problem hiding this comment.
Fix duplicated word in the decision driver sentence.
Line 17 has a typo: “due to to preview Microsoft Testing Platform runner”. Please remove the duplicate “to”.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/decisions/adr-0005-adopt-scoped-stryker-mutation-testing.md` at line 17,
Remove the duplicated word "to" in the decision driver sentence that currently
reads "due to to preview Microsoft Testing Platform runner" so it becomes "due
to preview Microsoft Testing Platform runner"; edit the sentence in
adr-0005-adopt-scoped-stryker-mutation-testing.md (the line containing the
decision driver bullet) to remove the extra "to".
Summary
origin/masterinto this branch while keeping the mutation coverage work greenTest Plan
dotnet test --project src/Arius.Core.Tests/Arius.Core.Tests.csprojdotnet stryker --config-file stryker-config.jsonSummary by CodeRabbit
Tests
Bug Fixes
Documentation
Benchmarks