Skip to content

Add complete Redis and Valkey command surface - #76

Merged
thomhurst merged 13 commits into
mainfrom
agent/full-command-surface
Aug 9, 2026
Merged

thomhurst merged 13 commits into
mainfrom
agent/full-command-surface

Conversation

@thomhurst

@thomhurst thomhurst commented Aug 9, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • add 622 generated, pre-encoded command descriptors covering the audited Redis 8.10.0 and Valkey 9.1.1 references, Redis integrated modules, Valkey optional modules, and documented KeyDB/Dragonfly extensions
  • add typed Bitmap, HyperLogLog, and Geo facets with natural .NET results and up-front option validation
  • serialize catalog verbs and GEOSEARCH directly, avoiding per-call command splitting and temporary argument collections
  • add reproducible catalog generation and command-coverage documentation

Coverage

  • Redis reference: 597 descriptors
  • Valkey reference: 464 descriptors
  • unique catalog: 622 descriptors
  • catalog test serializes and verifies every descriptor independently
  • focused tests cover every new typed command, option form, parser, validation failure, and server-error path
  • real Redis integration tests cover all new typed command families plus catalog execution

Source provenance is exposed through RespireCommand.Sources; it intentionally records documentation provenance, not runtime feature negotiation.

Validation

  • dotnet build Respire.slnx -c Release --no-restore
  • dotnet test Respire.slnx -c Release --no-build --no-restore — 624 passed across .NET 8 and .NET 10
  • targeted dotnet format --verify-no-changes
  • npm run build in website
  • deterministic regeneration check

Breaking change

Custom IRespireClient implementations must add the Bitmap, HyperLogLog, and Geo facet properties and the ExecuteAsync(RespireCommand, ...) overload.

Summary by CodeRabbit

  • New Features

    • Added typed bitmap, HyperLogLog, and geospatial command support.
    • Added a complete catalog of pre-encoded Redis-compatible commands.
    • Added raw catalog execution with blocking-command handling and cancellation support.
    • Added command metadata covering Redis, Valkey, and compatible server commands.
  • Documentation

    • Expanded command catalog, API design, collections, and raw-command documentation with usage examples and coverage details.
  • Tests

    • Added comprehensive coverage for typed commands, catalog execution, validation, blocking behavior, and cancellation.

Cover audited Redis, Valkey, module, KeyDB, and Dragonfly commands with pre-encoded descriptors. Add typed bitmap, HyperLogLog, and geo facets with wire and integration tests.

BREAKING CHANGE: IRespireClient implementers must expose the new facets and descriptor ExecuteAsync overload.
@coderabbitai

coderabbitai Bot commented Aug 9, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The change adds a generated RespireCommands catalog, catalog execution routing, bitmap, geo, and HyperLogLog facets, command-generation tooling, tests, benchmarks, and documentation.

Changes

Typed command platform

Layer / File(s) Summary
Catalog contracts and generation
src/Respire/RespireCommand.cs, src/Respire/Commands/*, tools/Generate-CommandCatalog.ps1
Adds command descriptors, execution classifications, pre-encoded verbs, catalog serialization, provider metadata, and catalog source generation.
Catalog execution and routing
src/Respire/IRespireClient.cs, src/Respire/RespireClient.cs, src/Respire/Internal/*, src/Respire/RespireValue.cs, tests/Respire.Extensions.Caching.Tests/*, tests/Respire.IntegrationTests/*, benchmarks/Respire.Benchmarks/*
Adds catalog execution overloads, command routing, response parsing, client forwarding, integration coverage, and benchmarks.
Bitmap command facet
src/Respire/Facets/BitmapCommands.cs, tests/Respire.Tests/Networking/BitmapCommandTests.cs, tests/Respire.IntegrationTests/TypedCommandIntegrationTests.cs
Adds typed bitmap operations, bit-field models, validation, serialization, reply handling, and Redis coverage.
Geo command facet
src/Respire/Facets/GeoCommands.cs, tests/Respire.Tests/Networking/GeoCommandTests.cs, tests/Respire.IntegrationTests/TypedCommandIntegrationTests.cs
Adds typed geo models and GEO operations with validation, serialization, response parsing, and Redis coverage.
HyperLogLog command facet
src/Respire/Facets/HyperLogLogCommands.cs, tests/Respire.Tests/Networking/HyperLogLogCommandTests.cs, tests/Respire.IntegrationTests/TypedCommandIntegrationTests.cs
Adds typed PFADD, PFCOUNT, and PFMERGE operations with validation and tests.
Catalog validation and documentation
tests/Respire.Tests/Networking/CommandCatalogTests.cs, README.md, docs/*, website/docs/*
Verifies catalog completeness, serialization, classification, and error handling. Documents catalog usage, typed facets, execution constraints, regeneration, and command coverage.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Application
  participant RespireClient
  participant RespireCommand
  participant DedicatedConnection
  participant Redis
  Application->>RespireClient: ExecuteAsync(command, args)
  RespireClient->>RespireCommand: classify command behavior
  RespireClient->>DedicatedConnection: route blocking command
  DedicatedConnection->>Redis: send command
  Redis-->>DedicatedConnection: return response
  DedicatedConnection-->>RespireClient: return result
  RespireClient-->>Application: return RespireResult
Loading

Possibly related PRs

Poem

A rabbit sends PING through the catalog,
Bits and geo commands join the jog.
HyperLogLogs count with care,
Typed replies travel everywhere.
Tests record each command’s flight—
The catalog now runs right.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.72% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the pull request's main change: adding complete Redis and Valkey command coverage.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/full-command-surface

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

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:24:54.391Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:25:08.007Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net8.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 109.46 μs 111.60 μs 6.117 μs 104.85 μs 116.4 μs 107.1 μs 115.5 μs 1.00 0.07 168 B 1.00
StackExchange_Ping 99.74 μs 112.81 μs 6.184 μs 92.89 μs 104.9 μs 101.4 μs 104.6 μs 0.91 0.07 390 B 2.32
Respire_Set_Small 120.10 μs 305.14 μs 16.726 μs 102.56 μs 135.9 μs 121.9 μs 134.5 μs 1.10 0.14 164 B 0.98
StackExchange_Set_Small 118.72 μs 143.30 μs 7.855 μs 110.22 μs 125.7 μs 120.2 μs 125.2 μs 1.09 0.08 407 B 2.42
Respire_Set_Medium 116.07 μs 140.21 μs 7.685 μs 107.63 μs 122.7 μs 117.9 μs 122.2 μs 1.06 0.08 161 B 0.96
StackExchange_Set_Medium 120.60 μs 84.92 μs 4.655 μs 115.66 μs 124.9 μs 121.2 μs 124.5 μs 1.10 0.06 400 B 2.38
Respire_Set_Large 136.67 μs 138.02 μs 7.565 μs 128.60 μs 143.6 μs 137.8 μs 143.0 μs 1.25 0.08 153 B 0.91
StackExchange_Set_Large 133.42 μs 48.45 μs 2.656 μs 130.42 μs 135.5 μs 134.4 μs 135.3 μs 1.22 0.06 398 B 2.37
Respire_Get 111.27 μs 155.51 μs 8.524 μs 102.22 μs 119.2 μs 112.4 μs 118.5 μs 1.02 0.08 217 B 1.29
StackExchange_Get 118.34 μs 142.80 μs 7.827 μs 109.32 μs 123.3 μs 122.4 μs 123.2 μs 1.08 0.08 411 B 2.45
StackExchange_MGet 125.11 μs 95.03 μs 5.209 μs 119.21 μs 129.1 μs 127.1 μs 128.9 μs 1.15 0.07 642 B 3.82
StackExchange_Pipeline_5_Sets 166.98 μs 44.01 μs 2.412 μs 164.39 μs 169.2 μs 167.4 μs 169.0 μs 1.53 0.07 2887 B 17.18
Respire_Exists 116.02 μs 87.53 μs 4.798 μs 110.86 μs 120.4 μs 116.8 μs 120.0 μs 1.06 0.06 156 B 0.93
StackExchange_Exists 114.40 μs 104.31 μs 5.718 μs 108.74 μs 120.2 μs 114.3 μs 119.6 μs 1.05 0.07 391 B 2.33
Respire_Del 227.55 μs 140.12 μs 7.680 μs 219.57 μs 234.9 μs 228.2 μs 234.2 μs 2.08 0.12 199 B 1.18
StackExchange_Del 224.87 μs 448.69 μs 24.594 μs 210.51 μs 253.3 μs 210.8 μs 249.0 μs 2.06 0.22 648 B 3.86
Respire_Incr 114.82 μs 75.20 μs 4.122 μs 110.30 μs 118.4 μs 115.8 μs 118.1 μs 1.05 0.06 168 B 1.00
StackExchange_Incr 118.32 μs 115.78 μs 6.346 μs 114.44 μs 125.6 μs 114.9 μs 124.6 μs 1.08 0.07 380 B 2.26
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean      | Error     | StdDev    | Min       | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |----------:|----------:|----------:|----------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 109.46 μs | 111.60 μs |  6.117 μs | 104.85 μs | 116.4 μs | 107.1 μs | 115.5 μs |  1.00 |    0.07 |     168 B |        1.00 |
StackExchange_Ping            |  99.74 μs | 112.81 μs |  6.184 μs |  92.89 μs | 104.9 μs | 101.4 μs | 104.6 μs |  0.91 |    0.07 |     390 B |        2.32 |
Respire_Set_Small             | 120.10 μs | 305.14 μs | 16.726 μs | 102.56 μs | 135.9 μs | 121.9 μs | 134.5 μs |  1.10 |    0.14 |     164 B |        0.98 |
StackExchange_Set_Small       | 118.72 μs | 143.30 μs |  7.855 μs | 110.22 μs | 125.7 μs | 120.2 μs | 125.2 μs |  1.09 |    0.08 |     407 B |        2.42 |
Respire_Set_Medium            | 116.07 μs | 140.21 μs |  7.685 μs | 107.63 μs | 122.7 μs | 117.9 μs | 122.2 μs |  1.06 |    0.08 |     161 B |        0.96 |
StackExchange_Set_Medium      | 120.60 μs |  84.92 μs |  4.655 μs | 115.66 μs | 124.9 μs | 121.2 μs | 124.5 μs |  1.10 |    0.06 |     400 B |        2.38 |
Respire_Set_Large             | 136.67 μs | 138.02 μs |  7.565 μs | 128.60 μs | 143.6 μs | 137.8 μs | 143.0 μs |  1.25 |    0.08 |     153 B |        0.91 |
StackExchange_Set_Large       | 133.42 μs |  48.45 μs |  2.656 μs | 130.42 μs | 135.5 μs | 134.4 μs | 135.3 μs |  1.22 |    0.06 |     398 B |        2.37 |
Respire_Get                   | 111.27 μs | 155.51 μs |  8.524 μs | 102.22 μs | 119.2 μs | 112.4 μs | 118.5 μs |  1.02 |    0.08 |     217 B |        1.29 |
StackExchange_Get             | 118.34 μs | 142.80 μs |  7.827 μs | 109.32 μs | 123.3 μs | 122.4 μs | 123.2 μs |  1.08 |    0.08 |     411 B |        2.45 |
StackExchange_MGet            | 125.11 μs |  95.03 μs |  5.209 μs | 119.21 μs | 129.1 μs | 127.1 μs | 128.9 μs |  1.15 |    0.07 |     642 B |        3.82 |
StackExchange_Pipeline_5_Sets | 166.98 μs |  44.01 μs |  2.412 μs | 164.39 μs | 169.2 μs | 167.4 μs | 169.0 μs |  1.53 |    0.07 |    2887 B |       17.18 |
Respire_Exists                | 116.02 μs |  87.53 μs |  4.798 μs | 110.86 μs | 120.4 μs | 116.8 μs | 120.0 μs |  1.06 |    0.06 |     156 B |        0.93 |
StackExchange_Exists          | 114.40 μs | 104.31 μs |  5.718 μs | 108.74 μs | 120.2 μs | 114.3 μs | 119.6 μs |  1.05 |    0.07 |     391 B |        2.33 |
Respire_Del                   | 227.55 μs | 140.12 μs |  7.680 μs | 219.57 μs | 234.9 μs | 228.2 μs | 234.2 μs |  2.08 |    0.12 |     199 B |        1.18 |
StackExchange_Del             | 224.87 μs | 448.69 μs | 24.594 μs | 210.51 μs | 253.3 μs | 210.8 μs | 249.0 μs |  2.06 |    0.22 |     648 B |        3.86 |
Respire_Incr                  | 114.82 μs |  75.20 μs |  4.122 μs | 110.30 μs | 118.4 μs | 115.8 μs | 118.1 μs |  1.05 |    0.06 |     168 B |        1.00 |
StackExchange_Incr            | 118.32 μs | 115.78 μs |  6.346 μs | 114.44 μs | 125.6 μs | 114.9 μs | 124.6 μs |  1.08 |    0.07 |     380 B |        2.26 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net10.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 183.2 μs 17.10 μs 0.94 μs 182.3 μs 184.2 μs 183.1 μs 184.1 μs 1.00 0.01 182 B 1.00
StackExchange_Ping 185.4 μs 18.60 μs 1.02 μs 184.2 μs 186.2 μs 185.7 μs 186.1 μs 1.01 0.01 408 B 2.24
Respire_Set_Small 185.5 μs 21.23 μs 1.16 μs 184.7 μs 186.9 μs 185.0 μs 186.7 μs 1.01 0.01 176 B 0.97
StackExchange_Set_Small 188.2 μs 19.60 μs 1.07 μs 187.5 μs 189.5 μs 187.8 μs 189.3 μs 1.03 0.01 416 B 2.29
Respire_Set_Medium 187.1 μs 9.08 μs 0.50 μs 186.8 μs 187.7 μs 186.9 μs 187.6 μs 1.02 0.01 176 B 0.97
StackExchange_Set_Medium 188.8 μs 32.67 μs 1.79 μs 186.9 μs 190.4 μs 189.2 μs 190.3 μs 1.03 0.01 416 B 2.29
Respire_Set_Large 196.0 μs 22.23 μs 1.22 μs 194.6 μs 197.0 μs 196.3 μs 196.9 μs 1.07 0.01 176 B 0.97
StackExchange_Set_Large 197.8 μs 9.19 μs 0.50 μs 197.3 μs 198.2 μs 198.1 μs 198.2 μs 1.08 0.01 416 B 2.29
Respire_Get 184.0 μs 12.63 μs 0.69 μs 183.3 μs 184.6 μs 184.0 μs 184.6 μs 1.00 0.01 223 B 1.23
StackExchange_Get 186.9 μs 24.66 μs 1.35 μs 186.0 μs 188.5 μs 186.4 μs 188.3 μs 1.02 0.01 424 B 2.33
StackExchange_MGet 190.1 μs 17.69 μs 0.97 μs 189.1 μs 191.0 μs 190.2 μs 191.0 μs 1.04 0.01 656 B 3.60
StackExchange_Pipeline_5_Sets 224.7 μs 328.80 μs 18.02 μs 210.7 μs 245.0 μs 218.3 μs 242.4 μs 1.23 0.09 2888 B 15.87
Respire_Exists 183.1 μs 20.48 μs 1.12 μs 182.3 μs 184.4 μs 182.6 μs 184.2 μs 1.00 0.01 176 B 0.97
StackExchange_Exists 186.7 μs 31.25 μs 1.71 μs 185.0 μs 188.4 μs 186.6 μs 188.3 μs 1.02 0.01 400 B 2.20
Respire_Del 354.8 μs 39.46 μs 2.16 μs 352.8 μs 357.1 μs 354.7 μs 356.8 μs 1.94 0.01 200 B 1.10
StackExchange_Del 357.4 μs 43.10 μs 2.36 μs 355.5 μs 360.0 μs 356.7 μs 359.7 μs 1.95 0.01 648 B 3.56
Respire_Incr 181.4 μs 99.46 μs 5.45 μs 175.1 μs 184.7 μs 184.3 μs 184.7 μs 0.99 0.03 184 B 1.01
StackExchange_Incr 185.1 μs 45.98 μs 2.52 μs 182.2 μs 186.8 μs 186.3 μs 186.7 μs 1.01 0.01 400 B 2.20
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error     | StdDev   | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|----------:|---------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 183.2 μs |  17.10 μs |  0.94 μs | 182.3 μs | 184.2 μs | 183.1 μs | 184.1 μs |  1.00 |    0.01 |     182 B |        1.00 |
StackExchange_Ping            | 185.4 μs |  18.60 μs |  1.02 μs | 184.2 μs | 186.2 μs | 185.7 μs | 186.1 μs |  1.01 |    0.01 |     408 B |        2.24 |
Respire_Set_Small             | 185.5 μs |  21.23 μs |  1.16 μs | 184.7 μs | 186.9 μs | 185.0 μs | 186.7 μs |  1.01 |    0.01 |     176 B |        0.97 |
StackExchange_Set_Small       | 188.2 μs |  19.60 μs |  1.07 μs | 187.5 μs | 189.5 μs | 187.8 μs | 189.3 μs |  1.03 |    0.01 |     416 B |        2.29 |
Respire_Set_Medium            | 187.1 μs |   9.08 μs |  0.50 μs | 186.8 μs | 187.7 μs | 186.9 μs | 187.6 μs |  1.02 |    0.01 |     176 B |        0.97 |
StackExchange_Set_Medium      | 188.8 μs |  32.67 μs |  1.79 μs | 186.9 μs | 190.4 μs | 189.2 μs | 190.3 μs |  1.03 |    0.01 |     416 B |        2.29 |
Respire_Set_Large             | 196.0 μs |  22.23 μs |  1.22 μs | 194.6 μs | 197.0 μs | 196.3 μs | 196.9 μs |  1.07 |    0.01 |     176 B |        0.97 |
StackExchange_Set_Large       | 197.8 μs |   9.19 μs |  0.50 μs | 197.3 μs | 198.2 μs | 198.1 μs | 198.2 μs |  1.08 |    0.01 |     416 B |        2.29 |
Respire_Get                   | 184.0 μs |  12.63 μs |  0.69 μs | 183.3 μs | 184.6 μs | 184.0 μs | 184.6 μs |  1.00 |    0.01 |     223 B |        1.23 |
StackExchange_Get             | 186.9 μs |  24.66 μs |  1.35 μs | 186.0 μs | 188.5 μs | 186.4 μs | 188.3 μs |  1.02 |    0.01 |     424 B |        2.33 |
StackExchange_MGet            | 190.1 μs |  17.69 μs |  0.97 μs | 189.1 μs | 191.0 μs | 190.2 μs | 191.0 μs |  1.04 |    0.01 |     656 B |        3.60 |
StackExchange_Pipeline_5_Sets | 224.7 μs | 328.80 μs | 18.02 μs | 210.7 μs | 245.0 μs | 218.3 μs | 242.4 μs |  1.23 |    0.09 |    2888 B |       15.87 |
Respire_Exists                | 183.1 μs |  20.48 μs |  1.12 μs | 182.3 μs | 184.4 μs | 182.6 μs | 184.2 μs |  1.00 |    0.01 |     176 B |        0.97 |
StackExchange_Exists          | 186.7 μs |  31.25 μs |  1.71 μs | 185.0 μs | 188.4 μs | 186.6 μs | 188.3 μs |  1.02 |    0.01 |     400 B |        2.20 |
Respire_Del                   | 354.8 μs |  39.46 μs |  2.16 μs | 352.8 μs | 357.1 μs | 354.7 μs | 356.8 μs |  1.94 |    0.01 |     200 B |        1.10 |
StackExchange_Del             | 357.4 μs |  43.10 μs |  2.36 μs | 355.5 μs | 360.0 μs | 356.7 μs | 359.7 μs |  1.95 |    0.01 |     648 B |        3.56 |
Respire_Incr                  | 181.4 μs |  99.46 μs |  5.45 μs | 175.1 μs | 184.7 μs | 184.3 μs | 184.7 μs |  0.99 |    0.03 |     184 B |        1.01 |
StackExchange_Incr            | 185.1 μs |  45.98 μs |  2.52 μs | 182.2 μs | 186.8 μs | 186.3 μs | 186.7 μs |  1.01 |    0.01 |     400 B |        2.20 |

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 97faa51946

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

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

Comment thread src/Respire/RespireClient.cs Outdated
var storedProcedureName = StoredProcedureName(command.Name, args);
var commandValue = new CatalogCommand(command, args);
var response = await (storedProcedureName is null
? SendAsync(command.Name, commandValue, CancellationToken.None)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Reject connection-scoped descriptors on the shared send path

When callers execute catalog entries such as RespireCommands.Transaction.MULTI, WATCH, SELECT, or SUBSCRIBE, this routes them through a multiplexed connection without reserving that connection. With concurrent traffic, unrelated commands can be captured by a transaction or affected by changed connection state; with multiple configured connections, subsequent EXEC/UNWATCH calls may instead reach another socket. These descriptors need a connection-scoped execution mechanism or must be rejected in this overload.

Useful? React with 👍 / 👎.

Comment thread src/Respire/RespireClient.cs Outdated
Comment on lines +138 to +139
? SendAsync(command.Name, commandValue, CancellationToken.None)
: SendStoredProcedureAsync(command.Name, commandValue, CancellationToken.None, storedProcedureName))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Route blocking descriptors through the dedicated pool

When a catalog descriptor for a blocking command is used, for example ExecuteAsync(RespireCommands.List.BLPOP, "jobs", 0), it goes through the ordinary multiplexed SendAsync path with CancellationToken.None. With the default null command timeout, the shared socket can remain blocked indefinitely and every pipelined command behind it stalls, bypassing the isolation and cancellation behavior implemented by SendBlockingAsync for typed blocking commands.

Useful? React with 👍 / 👎.

Comment on lines +135 to +136
({ } from, null) => client.IntegerAsync(
"BITPOS", new Cmd3(RespireCommands.Bitmap.BITPOS.Verb, client.Key(in key), value, from), cancellationToken),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Honor BIT indexing when end is omitted

When a caller supplies start and unit: BitIndexUnit.Bit but leaves end null, this branch emits only BITPOS key bit start; Redis interprets that start as a byte offset because the BYTE|BIT token can only be sent after an end argument. The method therefore silently searches from the wrong position; it should either emit an appropriate end before BIT or reject this option combination.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:47:52.240Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:48:12.076Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net8.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 104.3 μs 116.74 μs 6.40 μs 97.20 μs 109.5 μs 106.3 μs 109.2 μs 1.00 0.08 173 B 1.00
Respire_Catalog_Ping 103.6 μs 22.14 μs 1.21 μs 102.60 μs 105.0 μs 103.3 μs 104.8 μs 1.00 0.06 547 B 3.16
StackExchange_Ping 115.6 μs 55.05 μs 3.02 μs 112.38 μs 118.3 μs 116.2 μs 118.1 μs 1.11 0.07 388 B 2.24
Respire_Set_Small 103.1 μs 58.77 μs 3.22 μs 100.52 μs 106.7 μs 102.0 μs 106.2 μs 0.99 0.06 150 B 0.87
StackExchange_Set_Small 108.7 μs 87.32 μs 4.79 μs 103.34 μs 112.6 μs 110.1 μs 112.4 μs 1.04 0.07 378 B 2.18
Respire_Set_Medium 119.7 μs 203.78 μs 11.17 μs 107.40 μs 129.2 μs 122.6 μs 128.5 μs 1.15 0.11 156 B 0.90
StackExchange_Set_Medium 118.0 μs 199.12 μs 10.91 μs 105.55 μs 126.1 μs 122.2 μs 125.7 μs 1.13 0.11 407 B 2.35
Respire_Set_Large 126.2 μs 131.35 μs 7.20 μs 119.30 μs 133.7 μs 125.6 μs 132.9 μs 1.21 0.09 172 B 0.99
StackExchange_Set_Large 137.0 μs 115.92 μs 6.35 μs 130.78 μs 143.5 μs 136.9 μs 142.8 μs 1.32 0.09 406 B 2.35
Respire_Get 100.3 μs 253.29 μs 13.88 μs 84.39 μs 109.9 μs 106.6 μs 109.6 μs 0.96 0.13 213 B 1.23
StackExchange_Get 114.8 μs 258.35 μs 14.16 μs 104.73 μs 131.0 μs 108.7 μs 128.8 μs 1.10 0.13 414 B 2.39
StackExchange_MGet 125.3 μs 56.09 μs 3.07 μs 122.58 μs 128.7 μs 124.8 μs 128.3 μs 1.20 0.07 644 B 3.72
StackExchange_Pipeline_5_Sets 155.2 μs 84.54 μs 4.63 μs 152.20 μs 160.5 μs 152.9 μs 159.8 μs 1.49 0.09 2886 B 16.68
Respire_Exists 105.1 μs 155.78 μs 8.54 μs 95.32 μs 110.8 μs 109.3 μs 110.7 μs 1.01 0.09 152 B 0.88
StackExchange_Exists 113.8 μs 78.38 μs 4.30 μs 108.89 μs 116.9 μs 115.6 μs 116.7 μs 1.09 0.07 385 B 2.23
Respire_Del 207.7 μs 143.80 μs 7.88 μs 201.70 μs 216.6 μs 204.7 μs 215.4 μs 2.00 0.13 198 B 1.14
StackExchange_Del 217.2 μs 411.93 μs 22.58 μs 191.67 μs 234.7 μs 225.1 μs 233.7 μs 2.09 0.22 646 B 3.73
Respire_Incr 113.9 μs 110.50 μs 6.06 μs 106.96 μs 118.1 μs 116.7 μs 118.0 μs 1.09 0.08 180 B 1.04
StackExchange_Incr 110.7 μs 135.60 μs 7.43 μs 102.29 μs 116.5 μs 113.3 μs 116.1 μs 1.06 0.08 363 B 2.10
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error     | StdDev   | Min       | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|----------:|---------:|----------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 104.3 μs | 116.74 μs |  6.40 μs |  97.20 μs | 109.5 μs | 106.3 μs | 109.2 μs |  1.00 |    0.08 |     173 B |        1.00 |
Respire_Catalog_Ping          | 103.6 μs |  22.14 μs |  1.21 μs | 102.60 μs | 105.0 μs | 103.3 μs | 104.8 μs |  1.00 |    0.06 |     547 B |        3.16 |
StackExchange_Ping            | 115.6 μs |  55.05 μs |  3.02 μs | 112.38 μs | 118.3 μs | 116.2 μs | 118.1 μs |  1.11 |    0.07 |     388 B |        2.24 |
Respire_Set_Small             | 103.1 μs |  58.77 μs |  3.22 μs | 100.52 μs | 106.7 μs | 102.0 μs | 106.2 μs |  0.99 |    0.06 |     150 B |        0.87 |
StackExchange_Set_Small       | 108.7 μs |  87.32 μs |  4.79 μs | 103.34 μs | 112.6 μs | 110.1 μs | 112.4 μs |  1.04 |    0.07 |     378 B |        2.18 |
Respire_Set_Medium            | 119.7 μs | 203.78 μs | 11.17 μs | 107.40 μs | 129.2 μs | 122.6 μs | 128.5 μs |  1.15 |    0.11 |     156 B |        0.90 |
StackExchange_Set_Medium      | 118.0 μs | 199.12 μs | 10.91 μs | 105.55 μs | 126.1 μs | 122.2 μs | 125.7 μs |  1.13 |    0.11 |     407 B |        2.35 |
Respire_Set_Large             | 126.2 μs | 131.35 μs |  7.20 μs | 119.30 μs | 133.7 μs | 125.6 μs | 132.9 μs |  1.21 |    0.09 |     172 B |        0.99 |
StackExchange_Set_Large       | 137.0 μs | 115.92 μs |  6.35 μs | 130.78 μs | 143.5 μs | 136.9 μs | 142.8 μs |  1.32 |    0.09 |     406 B |        2.35 |
Respire_Get                   | 100.3 μs | 253.29 μs | 13.88 μs |  84.39 μs | 109.9 μs | 106.6 μs | 109.6 μs |  0.96 |    0.13 |     213 B |        1.23 |
StackExchange_Get             | 114.8 μs | 258.35 μs | 14.16 μs | 104.73 μs | 131.0 μs | 108.7 μs | 128.8 μs |  1.10 |    0.13 |     414 B |        2.39 |
StackExchange_MGet            | 125.3 μs |  56.09 μs |  3.07 μs | 122.58 μs | 128.7 μs | 124.8 μs | 128.3 μs |  1.20 |    0.07 |     644 B |        3.72 |
StackExchange_Pipeline_5_Sets | 155.2 μs |  84.54 μs |  4.63 μs | 152.20 μs | 160.5 μs | 152.9 μs | 159.8 μs |  1.49 |    0.09 |    2886 B |       16.68 |
Respire_Exists                | 105.1 μs | 155.78 μs |  8.54 μs |  95.32 μs | 110.8 μs | 109.3 μs | 110.7 μs |  1.01 |    0.09 |     152 B |        0.88 |
StackExchange_Exists          | 113.8 μs |  78.38 μs |  4.30 μs | 108.89 μs | 116.9 μs | 115.6 μs | 116.7 μs |  1.09 |    0.07 |     385 B |        2.23 |
Respire_Del                   | 207.7 μs | 143.80 μs |  7.88 μs | 201.70 μs | 216.6 μs | 204.7 μs | 215.4 μs |  2.00 |    0.13 |     198 B |        1.14 |
StackExchange_Del             | 217.2 μs | 411.93 μs | 22.58 μs | 191.67 μs | 234.7 μs | 225.1 μs | 233.7 μs |  2.09 |    0.22 |     646 B |        3.73 |
Respire_Incr                  | 113.9 μs | 110.50 μs |  6.06 μs | 106.96 μs | 118.1 μs | 116.7 μs | 118.0 μs |  1.09 |    0.08 |     180 B |        1.04 |
StackExchange_Incr            | 110.7 μs | 135.60 μs |  7.43 μs | 102.29 μs | 116.5 μs | 113.3 μs | 116.1 μs |  1.06 |    0.08 |     363 B |        2.10 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net10.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.89GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 187.6 μs 22.98 μs 1.26 μs 186.2 μs 188.7 μs 187.8 μs 188.6 μs 1.00 0.01 182 B 1.00
Respire_Catalog_Ping 185.8 μs 25.40 μs 1.39 μs 184.2 μs 186.8 μs 186.5 μs 186.7 μs 0.99 0.01 576 B 3.16
StackExchange_Ping 190.5 μs 10.48 μs 0.57 μs 190.1 μs 191.2 μs 190.4 μs 191.1 μs 1.02 0.01 407 B 2.24
Respire_Set_Small 190.4 μs 6.01 μs 0.33 μs 190.1 μs 190.7 μs 190.5 μs 190.7 μs 1.02 0.01 176 B 0.97
StackExchange_Set_Small 192.1 μs 19.00 μs 1.04 μs 191.1 μs 193.2 μs 192.2 μs 193.1 μs 1.02 0.01 416 B 2.29
Respire_Set_Medium 193.3 μs 11.73 μs 0.64 μs 192.9 μs 194.1 μs 193.0 μs 194.0 μs 1.03 0.01 176 B 0.97
StackExchange_Set_Medium 195.5 μs 27.31 μs 1.50 μs 193.8 μs 196.4 μs 196.4 μs 196.4 μs 1.04 0.01 416 B 2.29
Respire_Set_Large 201.6 μs 6.48 μs 0.36 μs 201.2 μs 201.8 μs 201.7 μs 201.8 μs 1.07 0.01 176 B 0.97
StackExchange_Set_Large 202.5 μs 28.15 μs 1.54 μs 201.1 μs 204.2 μs 202.1 μs 204.0 μs 1.08 0.01 416 B 2.29
Respire_Get 189.1 μs 34.02 μs 1.86 μs 186.9 μs 190.3 μs 190.0 μs 190.2 μs 1.01 0.01 224 B 1.23
StackExchange_Get 193.7 μs 23.88 μs 1.31 μs 192.2 μs 194.7 μs 194.2 μs 194.6 μs 1.03 0.01 424 B 2.33
StackExchange_MGet 194.9 μs 20.32 μs 1.11 μs 193.7 μs 195.9 μs 195.1 μs 195.8 μs 1.04 0.01 656 B 3.60
StackExchange_Pipeline_5_Sets 215.7 μs 13.84 μs 0.76 μs 215.0 μs 216.5 μs 215.7 μs 216.4 μs 1.15 0.01 2888 B 15.87
Respire_Exists 188.6 μs 9.49 μs 0.52 μs 188.0 μs 189.0 μs 188.7 μs 189.0 μs 1.01 0.01 176 B 0.97
StackExchange_Exists 190.0 μs 21.35 μs 1.17 μs 188.7 μs 190.8 μs 190.5 μs 190.8 μs 1.01 0.01 400 B 2.20
Respire_Del 366.6 μs 69.62 μs 3.82 μs 363.1 μs 370.7 μs 366.0 μs 370.2 μs 1.95 0.02 200 B 1.10
StackExchange_Del 370.5 μs 30.46 μs 1.67 μs 368.6 μs 371.7 μs 371.2 μs 371.6 μs 1.98 0.01 648 B 3.56
Respire_Incr 186.0 μs 62.23 μs 3.41 μs 182.0 μs 188.2 μs 187.6 μs 188.2 μs 0.99 0.02 184 B 1.01
StackExchange_Incr 192.0 μs 18.64 μs 1.02 μs 191.2 μs 193.2 μs 191.8 μs 193.0 μs 1.02 0.01 400 B 2.20
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.89GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error    | StdDev  | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|---------:|--------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 187.6 μs | 22.98 μs | 1.26 μs | 186.2 μs | 188.7 μs | 187.8 μs | 188.6 μs |  1.00 |    0.01 |     182 B |        1.00 |
Respire_Catalog_Ping          | 185.8 μs | 25.40 μs | 1.39 μs | 184.2 μs | 186.8 μs | 186.5 μs | 186.7 μs |  0.99 |    0.01 |     576 B |        3.16 |
StackExchange_Ping            | 190.5 μs | 10.48 μs | 0.57 μs | 190.1 μs | 191.2 μs | 190.4 μs | 191.1 μs |  1.02 |    0.01 |     407 B |        2.24 |
Respire_Set_Small             | 190.4 μs |  6.01 μs | 0.33 μs | 190.1 μs | 190.7 μs | 190.5 μs | 190.7 μs |  1.02 |    0.01 |     176 B |        0.97 |
StackExchange_Set_Small       | 192.1 μs | 19.00 μs | 1.04 μs | 191.1 μs | 193.2 μs | 192.2 μs | 193.1 μs |  1.02 |    0.01 |     416 B |        2.29 |
Respire_Set_Medium            | 193.3 μs | 11.73 μs | 0.64 μs | 192.9 μs | 194.1 μs | 193.0 μs | 194.0 μs |  1.03 |    0.01 |     176 B |        0.97 |
StackExchange_Set_Medium      | 195.5 μs | 27.31 μs | 1.50 μs | 193.8 μs | 196.4 μs | 196.4 μs | 196.4 μs |  1.04 |    0.01 |     416 B |        2.29 |
Respire_Set_Large             | 201.6 μs |  6.48 μs | 0.36 μs | 201.2 μs | 201.8 μs | 201.7 μs | 201.8 μs |  1.07 |    0.01 |     176 B |        0.97 |
StackExchange_Set_Large       | 202.5 μs | 28.15 μs | 1.54 μs | 201.1 μs | 204.2 μs | 202.1 μs | 204.0 μs |  1.08 |    0.01 |     416 B |        2.29 |
Respire_Get                   | 189.1 μs | 34.02 μs | 1.86 μs | 186.9 μs | 190.3 μs | 190.0 μs | 190.2 μs |  1.01 |    0.01 |     224 B |        1.23 |
StackExchange_Get             | 193.7 μs | 23.88 μs | 1.31 μs | 192.2 μs | 194.7 μs | 194.2 μs | 194.6 μs |  1.03 |    0.01 |     424 B |        2.33 |
StackExchange_MGet            | 194.9 μs | 20.32 μs | 1.11 μs | 193.7 μs | 195.9 μs | 195.1 μs | 195.8 μs |  1.04 |    0.01 |     656 B |        3.60 |
StackExchange_Pipeline_5_Sets | 215.7 μs | 13.84 μs | 0.76 μs | 215.0 μs | 216.5 μs | 215.7 μs | 216.4 μs |  1.15 |    0.01 |    2888 B |       15.87 |
Respire_Exists                | 188.6 μs |  9.49 μs | 0.52 μs | 188.0 μs | 189.0 μs | 188.7 μs | 189.0 μs |  1.01 |    0.01 |     176 B |        0.97 |
StackExchange_Exists          | 190.0 μs | 21.35 μs | 1.17 μs | 188.7 μs | 190.8 μs | 190.5 μs | 190.8 μs |  1.01 |    0.01 |     400 B |        2.20 |
Respire_Del                   | 366.6 μs | 69.62 μs | 3.82 μs | 363.1 μs | 370.7 μs | 366.0 μs | 370.2 μs |  1.95 |    0.02 |     200 B |        1.10 |
StackExchange_Del             | 370.5 μs | 30.46 μs | 1.67 μs | 368.6 μs | 371.7 μs | 371.2 μs | 371.6 μs |  1.98 |    0.01 |     648 B |        3.56 |
Respire_Incr                  | 186.0 μs | 62.23 μs | 3.41 μs | 182.0 μs | 188.2 μs | 187.6 μs | 188.2 μs |  0.99 |    0.02 |     184 B |        1.01 |
StackExchange_Incr            | 192.0 μs | 18.64 μs | 1.02 μs | 191.2 μs | 193.2 μs | 191.8 μs | 193.0 μs |  1.02 |    0.01 |     400 B |        2.20 |

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: abc104f4a5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

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

Comment thread src/Respire/RespireCommand.cs Outdated
"CLIENT NO-EVICT" or "CLIENT NO-TOUCH" or "CLIENT REPLY" or "CLIENT SETINFO" or
"CLIENT SETNAME" or "CLIENT TRACKING" or "DISCARD" or "EXEC" or "HELLO" or
"MONITOR" or "MULTI" or "PSUBSCRIBE" or "PSYNC" or "PUNSUBSCRIBE" or "QUIT" or
"READONLY" or "READWRITE" or "REPLCONF" or "RESET" or "SCRIPT DEBUG" or "SELECT" or

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Reject SCRIPT DEBUG through the parent descriptor

When callers execute RespireCommands.Scripting.SCRIPT with arguments such as "DEBUG", "SYNC", classification sees only the parent name SCRIPT and routes it through the multiplexed connection, even though the equivalent SCRIPT DEBUG descriptor is correctly connection-scoped. This fresh parent-descriptor path bypasses the new rejection and can put the shared socket into Lua-debugging state, causing a subsequent script on that socket to disrupt unrelated traffic; inspect the first argument for DEBUG or reject the parent SCRIPT descriptor.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 `@docs/API_DESIGN.md`:
- Around line 292-295: Update the three raw-command examples in the surrounding
catalog section to use distinct result variable names and dispose each
RespireResult with using. Separate the alternatives into individual code blocks
if they share scope, preserving each command’s existing behavior while ensuring
the examples compile and pooled memory is released.

In `@src/Respire/Facets/BitmapCommands.cs`:
- Around line 68-72: Update ValueOperation to validate the complete BITFIELD
encoding and offset grammar before constructing BitFieldOperation: accept signed
widths 1–64, unsigned widths 1–63, and only non-negative numeric offsets
(including valid # offsets). Reject malformed encodings and offsets such as u64,
i0, x8, -1, and `#-1`, and add pre-send tests covering invalid widths and offsets.

In `@src/Respire/Facets/GeoCommands.cs`:
- Around line 314-317: Extend the validation near the existing Count check in
the Geo command options handling to throw ArgumentException when options.Any is
true and options.Sort is not GeoSortOrder.Unsorted. Update GeoCommandTests.cs to
assert this local validation and stop expecting the invalid command to be sent
to Redis.
- Around line 293-301: Update the shape validation in the
GEOSEARCH/GEOSEARCHSTORE path around shape.IsRadius to reject non-finite
dimensions: validate radius for circles and width and height for boxes with
double.IsFinite before issuing either command, while preserving the existing
positive-value checks. Add no-request tests covering NaN and positive infinity
for both circle and box dimensions.

In `@tests/Respire.Tests/Networking/BitmapCommandTests.cs`:
- Around line 33-40: Update the BITFIELD assertion using FieldAsync to pass
CollectionOrdering.Matching to IsEquivalentTo, ensuring results are validated in
the same order as the input operations. Leave the expected values and the
separate FieldReadOnlyAsync assertion unchanged.
🪄 Autofix

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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 61a6a3b6-3856-4e5b-9e8f-dc5a245c88f7

📥 Commits

Reviewing files that changed from the base of the PR and between 29dcfa5 and abc104f.

📒 Files selected for processing (26)
  • README.md
  • benchmarks/Respire.Benchmarks/RedisContainerBenchmarks.cs
  • docs/API_DESIGN.md
  • docs/COMMAND_COVERAGE.md
  • docs/WHY_RESPIRE.md
  • src/Respire/Commands/CommandStructs.cs
  • src/Respire/Commands/Verbs.cs
  • src/Respire/Facets/BitmapCommands.cs
  • src/Respire/Facets/GeoCommands.cs
  • src/Respire/Facets/HyperLogLogCommands.cs
  • src/Respire/IRespireClient.cs
  • src/Respire/Internal/ResponseReader.cs
  • src/Respire/RespireClient.cs
  • src/Respire/RespireCommand.cs
  • src/Respire/RespireCommands.g.cs
  • src/Respire/RespireValue.cs
  • tests/Respire.Extensions.Caching.Tests/RespireDistributedCacheTests.cs
  • tests/Respire.IntegrationTests/TypedCommandIntegrationTests.cs
  • tests/Respire.Tests/Networking/BitmapCommandTests.cs
  • tests/Respire.Tests/Networking/CommandCatalogTests.cs
  • tests/Respire.Tests/Networking/GeoCommandTests.cs
  • tests/Respire.Tests/Networking/HyperLogLogCommandTests.cs
  • tools/Generate-CommandCatalog.ps1
  • website/docs/commands/collections.md
  • website/docs/guides/raw-commands.md
  • website/docs/roadmap.md

Comment thread docs/API_DESIGN.md Resolved
Comment thread src/Respire/Facets/BitmapCommands.cs Resolved
Comment thread src/Respire/Facets/GeoCommands.cs Resolved
Comment thread src/Respire/Facets/GeoCommands.cs Resolved
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:53:27.864Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:53:48.905Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net8.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 174.8 μs 11.82 μs 0.65 μs 174.4 μs 175.6 μs 174.5 μs 175.5 μs 1.00 0.00 183 B 1.00
Respire_Catalog_Ping 173.8 μs 46.73 μs 2.56 μs 170.9 μs 175.6 μs 174.8 μs 175.6 μs 0.99 0.01 576 B 3.15
StackExchange_Ping 177.6 μs 25.55 μs 1.40 μs 176.1 μs 178.9 μs 177.9 μs 178.8 μs 1.02 0.01 408 B 2.23
Respire_Set_Small 177.9 μs 30.66 μs 1.68 μs 176.6 μs 179.8 μs 177.4 μs 179.6 μs 1.02 0.01 176 B 0.96
StackExchange_Set_Small 181.4 μs 11.58 μs 0.63 μs 180.8 μs 182.0 μs 181.5 μs 182.0 μs 1.04 0.00 416 B 2.27
Respire_Set_Medium 179.0 μs 17.42 μs 0.96 μs 178.3 μs 180.1 μs 178.6 μs 179.9 μs 1.02 0.01 176 B 0.96
StackExchange_Set_Medium 181.4 μs 31.72 μs 1.74 μs 179.4 μs 182.7 μs 182.1 μs 182.6 μs 1.04 0.01 416 B 2.27
Respire_Set_Large 186.4 μs 17.92 μs 0.98 μs 185.7 μs 187.6 μs 186.1 μs 187.4 μs 1.07 0.01 176 B 0.96
StackExchange_Set_Large 193.5 μs 22.24 μs 1.22 μs 192.3 μs 194.7 μs 193.5 μs 194.6 μs 1.11 0.01 416 B 2.27
Respire_Get 177.3 μs 50.44 μs 2.76 μs 174.2 μs 179.4 μs 178.5 μs 179.3 μs 1.01 0.01 224 B 1.22
StackExchange_Get 179.0 μs 27.95 μs 1.53 μs 177.3 μs 180.2 μs 179.5 μs 180.1 μs 1.02 0.01 424 B 2.32
StackExchange_MGet 182.6 μs 12.94 μs 0.71 μs 181.9 μs 183.3 μs 182.7 μs 183.2 μs 1.04 0.00 656 B 3.58
StackExchange_Pipeline_5_Sets 198.6 μs 52.59 μs 2.88 μs 195.4 μs 201.0 μs 199.5 μs 200.8 μs 1.14 0.01 2888 B 15.78
Respire_Exists 176.1 μs 18.12 μs 0.99 μs 175.0 μs 176.8 μs 176.5 μs 176.8 μs 1.01 0.01 176 B 0.96
StackExchange_Exists 178.3 μs 17.28 μs 0.95 μs 177.2 μs 179.0 μs 178.7 μs 179.0 μs 1.02 0.01 400 B 2.19
Respire_Del 340.7 μs 27.29 μs 1.50 μs 339.0 μs 341.9 μs 341.2 μs 341.8 μs 1.95 0.01 200 B 1.09
StackExchange_Del 341.0 μs 70.43 μs 3.86 μs 336.7 μs 344.1 μs 342.3 μs 343.9 μs 1.95 0.02 648 B 3.54
Respire_Incr 177.9 μs 8.00 μs 0.44 μs 177.4 μs 178.3 μs 178.0 μs 178.3 μs 1.02 0.00 183 B 1.00
StackExchange_Incr 180.4 μs 26.80 μs 1.47 μs 179.0 μs 181.9 μs 180.3 μs 181.8 μs 1.03 0.01 400 B 2.19
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error    | StdDev  | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|---------:|--------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 174.8 μs | 11.82 μs | 0.65 μs | 174.4 μs | 175.6 μs | 174.5 μs | 175.5 μs |  1.00 |    0.00 |     183 B |        1.00 |
Respire_Catalog_Ping          | 173.8 μs | 46.73 μs | 2.56 μs | 170.9 μs | 175.6 μs | 174.8 μs | 175.6 μs |  0.99 |    0.01 |     576 B |        3.15 |
StackExchange_Ping            | 177.6 μs | 25.55 μs | 1.40 μs | 176.1 μs | 178.9 μs | 177.9 μs | 178.8 μs |  1.02 |    0.01 |     408 B |        2.23 |
Respire_Set_Small             | 177.9 μs | 30.66 μs | 1.68 μs | 176.6 μs | 179.8 μs | 177.4 μs | 179.6 μs |  1.02 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Small       | 181.4 μs | 11.58 μs | 0.63 μs | 180.8 μs | 182.0 μs | 181.5 μs | 182.0 μs |  1.04 |    0.00 |     416 B |        2.27 |
Respire_Set_Medium            | 179.0 μs | 17.42 μs | 0.96 μs | 178.3 μs | 180.1 μs | 178.6 μs | 179.9 μs |  1.02 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Medium      | 181.4 μs | 31.72 μs | 1.74 μs | 179.4 μs | 182.7 μs | 182.1 μs | 182.6 μs |  1.04 |    0.01 |     416 B |        2.27 |
Respire_Set_Large             | 186.4 μs | 17.92 μs | 0.98 μs | 185.7 μs | 187.6 μs | 186.1 μs | 187.4 μs |  1.07 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Large       | 193.5 μs | 22.24 μs | 1.22 μs | 192.3 μs | 194.7 μs | 193.5 μs | 194.6 μs |  1.11 |    0.01 |     416 B |        2.27 |
Respire_Get                   | 177.3 μs | 50.44 μs | 2.76 μs | 174.2 μs | 179.4 μs | 178.5 μs | 179.3 μs |  1.01 |    0.01 |     224 B |        1.22 |
StackExchange_Get             | 179.0 μs | 27.95 μs | 1.53 μs | 177.3 μs | 180.2 μs | 179.5 μs | 180.1 μs |  1.02 |    0.01 |     424 B |        2.32 |
StackExchange_MGet            | 182.6 μs | 12.94 μs | 0.71 μs | 181.9 μs | 183.3 μs | 182.7 μs | 183.2 μs |  1.04 |    0.00 |     656 B |        3.58 |
StackExchange_Pipeline_5_Sets | 198.6 μs | 52.59 μs | 2.88 μs | 195.4 μs | 201.0 μs | 199.5 μs | 200.8 μs |  1.14 |    0.01 |    2888 B |       15.78 |
Respire_Exists                | 176.1 μs | 18.12 μs | 0.99 μs | 175.0 μs | 176.8 μs | 176.5 μs | 176.8 μs |  1.01 |    0.01 |     176 B |        0.96 |
StackExchange_Exists          | 178.3 μs | 17.28 μs | 0.95 μs | 177.2 μs | 179.0 μs | 178.7 μs | 179.0 μs |  1.02 |    0.01 |     400 B |        2.19 |
Respire_Del                   | 340.7 μs | 27.29 μs | 1.50 μs | 339.0 μs | 341.9 μs | 341.2 μs | 341.8 μs |  1.95 |    0.01 |     200 B |        1.09 |
StackExchange_Del             | 341.0 μs | 70.43 μs | 3.86 μs | 336.7 μs | 344.1 μs | 342.3 μs | 343.9 μs |  1.95 |    0.02 |     648 B |        3.54 |
Respire_Incr                  | 177.9 μs |  8.00 μs | 0.44 μs | 177.4 μs | 178.3 μs | 178.0 μs | 178.3 μs |  1.02 |    0.00 |     183 B |        1.00 |
StackExchange_Incr            | 180.4 μs | 26.80 μs | 1.47 μs | 179.0 μs | 181.9 μs | 180.3 μs | 181.8 μs |  1.03 |    0.01 |     400 B |        2.19 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net10.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 185.0 μs 34.99 μs 1.92 μs 183.3 μs 187.1 μs 184.6 μs 186.8 μs 1.00 0.01 184 B 1.00
Respire_Catalog_Ping 183.0 μs 19.74 μs 1.08 μs 181.8 μs 183.7 μs 183.6 μs 183.7 μs 0.99 0.01 576 B 3.13
StackExchange_Ping 186.8 μs 41.66 μs 2.28 μs 184.2 μs 188.6 μs 187.5 μs 188.5 μs 1.01 0.01 408 B 2.22
Respire_Set_Small 186.6 μs 23.41 μs 1.28 μs 185.1 μs 187.3 μs 187.3 μs 187.3 μs 1.01 0.01 176 B 0.96
StackExchange_Set_Small 189.5 μs 15.70 μs 0.86 μs 188.7 μs 190.4 μs 189.5 μs 190.3 μs 1.02 0.01 415 B 2.26
Respire_Set_Medium 187.7 μs 20.05 μs 1.10 μs 186.5 μs 188.7 μs 188.0 μs 188.6 μs 1.01 0.01 176 B 0.96
StackExchange_Set_Medium 189.8 μs 7.56 μs 0.41 μs 189.4 μs 190.1 μs 190.0 μs 190.1 μs 1.03 0.01 416 B 2.26
Respire_Set_Large 195.8 μs 26.67 μs 1.46 μs 194.1 μs 196.8 μs 196.4 μs 196.8 μs 1.06 0.01 176 B 0.96
StackExchange_Set_Large 197.5 μs 24.10 μs 1.32 μs 196.1 μs 198.7 μs 197.7 μs 198.6 μs 1.07 0.01 416 B 2.26
Respire_Get 183.9 μs 7.16 μs 0.39 μs 183.5 μs 184.3 μs 183.9 μs 184.2 μs 0.99 0.01 222 B 1.21
StackExchange_Get 187.6 μs 25.99 μs 1.42 μs 186.0 μs 188.6 μs 188.3 μs 188.5 μs 1.01 0.01 424 B 2.30
StackExchange_MGet 189.7 μs 7.86 μs 0.43 μs 189.2 μs 190.1 μs 189.7 μs 190.0 μs 1.03 0.01 656 B 3.57
StackExchange_Pipeline_5_Sets 224.9 μs 273.26 μs 14.98 μs 212.2 μs 241.4 μs 221.2 μs 239.4 μs 1.22 0.07 2888 B 15.70
Respire_Exists 184.0 μs 16.13 μs 0.88 μs 183.2 μs 184.9 μs 184.0 μs 184.8 μs 0.99 0.01 176 B 0.96
StackExchange_Exists 187.3 μs 16.81 μs 0.92 μs 186.4 μs 188.2 μs 187.4 μs 188.1 μs 1.01 0.01 400 B 2.17
Respire_Del 356.7 μs 30.48 μs 1.67 μs 354.9 μs 358.2 μs 357.0 μs 358.1 μs 1.93 0.02 200 B 1.09
StackExchange_Del 361.3 μs 53.13 μs 2.91 μs 358.0 μs 363.4 μs 362.5 μs 363.3 μs 1.95 0.02 648 B 3.52
Respire_Incr 184.2 μs 16.69 μs 0.91 μs 183.2 μs 185.0 μs 184.4 μs 184.9 μs 1.00 0.01 184 B 1.00
StackExchange_Incr 187.6 μs 38.31 μs 2.10 μs 185.5 μs 189.7 μs 187.6 μs 189.5 μs 1.01 0.01 400 B 2.17
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error     | StdDev   | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|----------:|---------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 185.0 μs |  34.99 μs |  1.92 μs | 183.3 μs | 187.1 μs | 184.6 μs | 186.8 μs |  1.00 |    0.01 |     184 B |        1.00 |
Respire_Catalog_Ping          | 183.0 μs |  19.74 μs |  1.08 μs | 181.8 μs | 183.7 μs | 183.6 μs | 183.7 μs |  0.99 |    0.01 |     576 B |        3.13 |
StackExchange_Ping            | 186.8 μs |  41.66 μs |  2.28 μs | 184.2 μs | 188.6 μs | 187.5 μs | 188.5 μs |  1.01 |    0.01 |     408 B |        2.22 |
Respire_Set_Small             | 186.6 μs |  23.41 μs |  1.28 μs | 185.1 μs | 187.3 μs | 187.3 μs | 187.3 μs |  1.01 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Small       | 189.5 μs |  15.70 μs |  0.86 μs | 188.7 μs | 190.4 μs | 189.5 μs | 190.3 μs |  1.02 |    0.01 |     415 B |        2.26 |
Respire_Set_Medium            | 187.7 μs |  20.05 μs |  1.10 μs | 186.5 μs | 188.7 μs | 188.0 μs | 188.6 μs |  1.01 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Medium      | 189.8 μs |   7.56 μs |  0.41 μs | 189.4 μs | 190.1 μs | 190.0 μs | 190.1 μs |  1.03 |    0.01 |     416 B |        2.26 |
Respire_Set_Large             | 195.8 μs |  26.67 μs |  1.46 μs | 194.1 μs | 196.8 μs | 196.4 μs | 196.8 μs |  1.06 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Large       | 197.5 μs |  24.10 μs |  1.32 μs | 196.1 μs | 198.7 μs | 197.7 μs | 198.6 μs |  1.07 |    0.01 |     416 B |        2.26 |
Respire_Get                   | 183.9 μs |   7.16 μs |  0.39 μs | 183.5 μs | 184.3 μs | 183.9 μs | 184.2 μs |  0.99 |    0.01 |     222 B |        1.21 |
StackExchange_Get             | 187.6 μs |  25.99 μs |  1.42 μs | 186.0 μs | 188.6 μs | 188.3 μs | 188.5 μs |  1.01 |    0.01 |     424 B |        2.30 |
StackExchange_MGet            | 189.7 μs |   7.86 μs |  0.43 μs | 189.2 μs | 190.1 μs | 189.7 μs | 190.0 μs |  1.03 |    0.01 |     656 B |        3.57 |
StackExchange_Pipeline_5_Sets | 224.9 μs | 273.26 μs | 14.98 μs | 212.2 μs | 241.4 μs | 221.2 μs | 239.4 μs |  1.22 |    0.07 |    2888 B |       15.70 |
Respire_Exists                | 184.0 μs |  16.13 μs |  0.88 μs | 183.2 μs | 184.9 μs | 184.0 μs | 184.8 μs |  0.99 |    0.01 |     176 B |        0.96 |
StackExchange_Exists          | 187.3 μs |  16.81 μs |  0.92 μs | 186.4 μs | 188.2 μs | 187.4 μs | 188.1 μs |  1.01 |    0.01 |     400 B |        2.17 |
Respire_Del                   | 356.7 μs |  30.48 μs |  1.67 μs | 354.9 μs | 358.2 μs | 357.0 μs | 358.1 μs |  1.93 |    0.02 |     200 B |        1.09 |
StackExchange_Del             | 361.3 μs |  53.13 μs |  2.91 μs | 358.0 μs | 363.4 μs | 362.5 μs | 363.3 μs |  1.95 |    0.02 |     648 B |        3.52 |
Respire_Incr                  | 184.2 μs |  16.69 μs |  0.91 μs | 183.2 μs | 185.0 μs | 184.4 μs | 184.9 μs |  1.00 |    0.01 |     184 B |        1.00 |
StackExchange_Incr            | 187.6 μs |  38.31 μs |  2.10 μs | 185.5 μs | 189.7 μs | 187.6 μs | 189.5 μs |  1.01 |    0.01 |     400 B |        2.17 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T12:59:50.510Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T13:00:06.004Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T13:00:34.471Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T13:01:00.882Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T15:12:35.692Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net10.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 182.8 μs 13.67 μs 0.75 μs 182.1 μs 183.6 μs 182.7 μs 183.5 μs 1.00 0.01 184 B 1.00
Respire_Catalog_Ping 182.5 μs 30.50 μs 1.67 μs 180.9 μs 184.2 μs 182.4 μs 184.0 μs 1.00 0.01 576 B 3.13
StackExchange_Ping 187.3 μs 33.32 μs 1.83 μs 185.8 μs 189.3 μs 186.8 μs 189.1 μs 1.02 0.01 407 B 2.21
Respire_Set_Small 185.4 μs 8.10 μs 0.44 μs 184.9 μs 185.8 μs 185.5 μs 185.8 μs 1.01 0.00 176 B 0.96
StackExchange_Set_Small 187.7 μs 25.14 μs 1.38 μs 186.7 μs 189.3 μs 187.2 μs 189.1 μs 1.03 0.01 416 B 2.26
Respire_Set_Medium 187.8 μs 18.70 μs 1.02 μs 186.7 μs 188.7 μs 188.0 μs 188.6 μs 1.03 0.01 176 B 0.96
StackExchange_Set_Medium 191.1 μs 14.75 μs 0.81 μs 190.2 μs 191.8 μs 191.3 μs 191.7 μs 1.05 0.01 416 B 2.26
Respire_Set_Large 196.8 μs 15.66 μs 0.86 μs 196.1 μs 197.7 μs 196.6 μs 197.6 μs 1.08 0.01 176 B 0.96
StackExchange_Set_Large 198.2 μs 15.18 μs 0.83 μs 197.4 μs 199.1 μs 198.1 μs 199.0 μs 1.08 0.01 416 B 2.26
Respire_Get 184.4 μs 34.48 μs 1.89 μs 182.3 μs 186.0 μs 184.9 μs 185.9 μs 1.01 0.01 224 B 1.22
StackExchange_Get 187.4 μs 31.70 μs 1.74 μs 185.4 μs 188.6 μs 188.2 μs 188.5 μs 1.03 0.01 424 B 2.30
StackExchange_MGet 189.6 μs 26.80 μs 1.47 μs 188.6 μs 191.3 μs 189.0 μs 191.1 μs 1.04 0.01 656 B 3.57
StackExchange_Pipeline_5_Sets 228.6 μs 299.11 μs 16.40 μs 214.8 μs 246.7 μs 224.2 μs 244.4 μs 1.25 0.08 2888 B 15.70
Respire_Exists 185.0 μs 11.74 μs 0.64 μs 184.3 μs 185.6 μs 185.0 μs 185.5 μs 1.01 0.00 176 B 0.96
StackExchange_Exists 187.0 μs 32.61 μs 1.79 μs 185.7 μs 189.1 μs 186.4 μs 188.8 μs 1.02 0.01 400 B 2.17
Respire_Del 356.0 μs 60.98 μs 3.34 μs 352.6 μs 359.3 μs 356.1 μs 359.0 μs 1.95 0.02 200 B 1.09
StackExchange_Del 361.6 μs 47.98 μs 2.63 μs 358.7 μs 363.6 μs 362.6 μs 363.5 μs 1.98 0.01 648 B 3.52
Respire_Incr 185.0 μs 10.53 μs 0.58 μs 184.6 μs 185.7 μs 184.8 μs 185.6 μs 1.01 0.00 183 B 0.99
StackExchange_Incr 187.5 μs 44.25 μs 2.43 μs 184.9 μs 189.6 μs 188.1 μs 189.5 μs 1.03 0.01 399 B 2.17
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error     | StdDev   | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|----------:|---------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 182.8 μs |  13.67 μs |  0.75 μs | 182.1 μs | 183.6 μs | 182.7 μs | 183.5 μs |  1.00 |    0.01 |     184 B |        1.00 |
Respire_Catalog_Ping          | 182.5 μs |  30.50 μs |  1.67 μs | 180.9 μs | 184.2 μs | 182.4 μs | 184.0 μs |  1.00 |    0.01 |     576 B |        3.13 |
StackExchange_Ping            | 187.3 μs |  33.32 μs |  1.83 μs | 185.8 μs | 189.3 μs | 186.8 μs | 189.1 μs |  1.02 |    0.01 |     407 B |        2.21 |
Respire_Set_Small             | 185.4 μs |   8.10 μs |  0.44 μs | 184.9 μs | 185.8 μs | 185.5 μs | 185.8 μs |  1.01 |    0.00 |     176 B |        0.96 |
StackExchange_Set_Small       | 187.7 μs |  25.14 μs |  1.38 μs | 186.7 μs | 189.3 μs | 187.2 μs | 189.1 μs |  1.03 |    0.01 |     416 B |        2.26 |
Respire_Set_Medium            | 187.8 μs |  18.70 μs |  1.02 μs | 186.7 μs | 188.7 μs | 188.0 μs | 188.6 μs |  1.03 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Medium      | 191.1 μs |  14.75 μs |  0.81 μs | 190.2 μs | 191.8 μs | 191.3 μs | 191.7 μs |  1.05 |    0.01 |     416 B |        2.26 |
Respire_Set_Large             | 196.8 μs |  15.66 μs |  0.86 μs | 196.1 μs | 197.7 μs | 196.6 μs | 197.6 μs |  1.08 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Large       | 198.2 μs |  15.18 μs |  0.83 μs | 197.4 μs | 199.1 μs | 198.1 μs | 199.0 μs |  1.08 |    0.01 |     416 B |        2.26 |
Respire_Get                   | 184.4 μs |  34.48 μs |  1.89 μs | 182.3 μs | 186.0 μs | 184.9 μs | 185.9 μs |  1.01 |    0.01 |     224 B |        1.22 |
StackExchange_Get             | 187.4 μs |  31.70 μs |  1.74 μs | 185.4 μs | 188.6 μs | 188.2 μs | 188.5 μs |  1.03 |    0.01 |     424 B |        2.30 |
StackExchange_MGet            | 189.6 μs |  26.80 μs |  1.47 μs | 188.6 μs | 191.3 μs | 189.0 μs | 191.1 μs |  1.04 |    0.01 |     656 B |        3.57 |
StackExchange_Pipeline_5_Sets | 228.6 μs | 299.11 μs | 16.40 μs | 214.8 μs | 246.7 μs | 224.2 μs | 244.4 μs |  1.25 |    0.08 |    2888 B |       15.70 |
Respire_Exists                | 185.0 μs |  11.74 μs |  0.64 μs | 184.3 μs | 185.6 μs | 185.0 μs | 185.5 μs |  1.01 |    0.00 |     176 B |        0.96 |
StackExchange_Exists          | 187.0 μs |  32.61 μs |  1.79 μs | 185.7 μs | 189.1 μs | 186.4 μs | 188.8 μs |  1.02 |    0.01 |     400 B |        2.17 |
Respire_Del                   | 356.0 μs |  60.98 μs |  3.34 μs | 352.6 μs | 359.3 μs | 356.1 μs | 359.0 μs |  1.95 |    0.02 |     200 B |        1.09 |
StackExchange_Del             | 361.6 μs |  47.98 μs |  2.63 μs | 358.7 μs | 363.6 μs | 362.6 μs | 363.5 μs |  1.98 |    0.01 |     648 B |        3.52 |
Respire_Incr                  | 185.0 μs |  10.53 μs |  0.58 μs | 184.6 μs | 185.7 μs | 184.8 μs | 185.6 μs |  1.01 |    0.00 |     183 B |        0.99 |
StackExchange_Incr            | 187.5 μs |  44.25 μs |  2.43 μs | 184.9 μs | 189.6 μs | 188.1 μs | 189.5 μs |  1.03 |    0.01 |     399 B |        2.17 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net8.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 182.6 μs 15.68 μs 0.86 μs 181.6 μs 183.3 μs 182.8 μs 183.3 μs 1.00 0.01 184 B 1.00
Respire_Catalog_Ping 182.1 μs 31.17 μs 1.71 μs 180.1 μs 183.3 μs 182.8 μs 183.3 μs 1.00 0.01 576 B 3.13
StackExchange_Ping 184.5 μs 38.43 μs 2.11 μs 182.9 μs 186.9 μs 183.7 μs 186.6 μs 1.01 0.01 407 B 2.21
Respire_Set_Small 184.3 μs 19.50 μs 1.07 μs 183.5 μs 185.5 μs 183.9 μs 185.3 μs 1.01 0.01 176 B 0.96
StackExchange_Set_Small 187.4 μs 34.97 μs 1.92 μs 185.7 μs 189.5 μs 187.0 μs 189.2 μs 1.03 0.01 414 B 2.25
Respire_Set_Medium 186.4 μs 4.78 μs 0.26 μs 186.2 μs 186.7 μs 186.3 μs 186.7 μs 1.02 0.00 176 B 0.96
StackExchange_Set_Medium 188.4 μs 9.97 μs 0.55 μs 187.8 μs 188.9 μs 188.4 μs 188.9 μs 1.03 0.00 415 B 2.26
Respire_Set_Large 194.9 μs 12.29 μs 0.67 μs 194.1 μs 195.3 μs 195.2 μs 195.3 μs 1.07 0.01 176 B 0.96
StackExchange_Set_Large 197.7 μs 10.08 μs 0.55 μs 197.2 μs 198.3 μs 197.7 μs 198.2 μs 1.08 0.01 416 B 2.26
Respire_Get 182.0 μs 11.36 μs 0.62 μs 181.5 μs 182.7 μs 181.7 μs 182.6 μs 1.00 0.01 224 B 1.22
StackExchange_Get 184.2 μs 26.73 μs 1.46 μs 182.7 μs 185.6 μs 184.4 μs 185.5 μs 1.01 0.01 424 B 2.30
StackExchange_MGet 188.0 μs 18.64 μs 1.02 μs 186.9 μs 188.8 μs 188.4 μs 188.8 μs 1.03 0.01 656 B 3.57
StackExchange_Pipeline_5_Sets 213.8 μs 47.54 μs 2.61 μs 211.8 μs 216.7 μs 212.9 μs 216.3 μs 1.17 0.01 2888 B 15.70
Respire_Exists 184.8 μs 22.11 μs 1.21 μs 183.4 μs 185.5 μs 185.4 μs 185.5 μs 1.01 0.01 176 B 0.96
StackExchange_Exists 186.1 μs 25.97 μs 1.42 μs 184.5 μs 187.2 μs 186.5 μs 187.1 μs 1.02 0.01 400 B 2.17
Respire_Del 357.1 μs 30.31 μs 1.66 μs 355.4 μs 358.7 μs 357.3 μs 358.5 μs 1.96 0.01 200 B 1.09
StackExchange_Del 358.4 μs 63.58 μs 3.49 μs 354.5 μs 361.1 μs 359.7 μs 361.0 μs 1.96 0.02 648 B 3.52
Respire_Incr 184.0 μs 5.76 μs 0.32 μs 183.8 μs 184.3 μs 183.8 μs 184.3 μs 1.01 0.00 184 B 1.00
StackExchange_Incr 185.9 μs 40.23 μs 2.21 μs 183.4 μs 187.4 μs 187.0 μs 187.3 μs 1.02 0.01 400 B 2.17
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error    | StdDev  | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|---------:|--------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 182.6 μs | 15.68 μs | 0.86 μs | 181.6 μs | 183.3 μs | 182.8 μs | 183.3 μs |  1.00 |    0.01 |     184 B |        1.00 |
Respire_Catalog_Ping          | 182.1 μs | 31.17 μs | 1.71 μs | 180.1 μs | 183.3 μs | 182.8 μs | 183.3 μs |  1.00 |    0.01 |     576 B |        3.13 |
StackExchange_Ping            | 184.5 μs | 38.43 μs | 2.11 μs | 182.9 μs | 186.9 μs | 183.7 μs | 186.6 μs |  1.01 |    0.01 |     407 B |        2.21 |
Respire_Set_Small             | 184.3 μs | 19.50 μs | 1.07 μs | 183.5 μs | 185.5 μs | 183.9 μs | 185.3 μs |  1.01 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Small       | 187.4 μs | 34.97 μs | 1.92 μs | 185.7 μs | 189.5 μs | 187.0 μs | 189.2 μs |  1.03 |    0.01 |     414 B |        2.25 |
Respire_Set_Medium            | 186.4 μs |  4.78 μs | 0.26 μs | 186.2 μs | 186.7 μs | 186.3 μs | 186.7 μs |  1.02 |    0.00 |     176 B |        0.96 |
StackExchange_Set_Medium      | 188.4 μs |  9.97 μs | 0.55 μs | 187.8 μs | 188.9 μs | 188.4 μs | 188.9 μs |  1.03 |    0.00 |     415 B |        2.26 |
Respire_Set_Large             | 194.9 μs | 12.29 μs | 0.67 μs | 194.1 μs | 195.3 μs | 195.2 μs | 195.3 μs |  1.07 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Large       | 197.7 μs | 10.08 μs | 0.55 μs | 197.2 μs | 198.3 μs | 197.7 μs | 198.2 μs |  1.08 |    0.01 |     416 B |        2.26 |
Respire_Get                   | 182.0 μs | 11.36 μs | 0.62 μs | 181.5 μs | 182.7 μs | 181.7 μs | 182.6 μs |  1.00 |    0.01 |     224 B |        1.22 |
StackExchange_Get             | 184.2 μs | 26.73 μs | 1.46 μs | 182.7 μs | 185.6 μs | 184.4 μs | 185.5 μs |  1.01 |    0.01 |     424 B |        2.30 |
StackExchange_MGet            | 188.0 μs | 18.64 μs | 1.02 μs | 186.9 μs | 188.8 μs | 188.4 μs | 188.8 μs |  1.03 |    0.01 |     656 B |        3.57 |
StackExchange_Pipeline_5_Sets | 213.8 μs | 47.54 μs | 2.61 μs | 211.8 μs | 216.7 μs | 212.9 μs | 216.3 μs |  1.17 |    0.01 |    2888 B |       15.70 |
Respire_Exists                | 184.8 μs | 22.11 μs | 1.21 μs | 183.4 μs | 185.5 μs | 185.4 μs | 185.5 μs |  1.01 |    0.01 |     176 B |        0.96 |
StackExchange_Exists          | 186.1 μs | 25.97 μs | 1.42 μs | 184.5 μs | 187.2 μs | 186.5 μs | 187.1 μs |  1.02 |    0.01 |     400 B |        2.17 |
Respire_Del                   | 357.1 μs | 30.31 μs | 1.66 μs | 355.4 μs | 358.7 μs | 357.3 μs | 358.5 μs |  1.96 |    0.01 |     200 B |        1.09 |
StackExchange_Del             | 358.4 μs | 63.58 μs | 3.49 μs | 354.5 μs | 361.1 μs | 359.7 μs | 361.0 μs |  1.96 |    0.02 |     648 B |        3.52 |
Respire_Incr                  | 184.0 μs |  5.76 μs | 0.32 μs | 183.8 μs | 184.3 μs | 183.8 μs | 184.3 μs |  1.01 |    0.00 |     184 B |        1.00 |
StackExchange_Incr            | 185.9 μs | 40.23 μs | 2.21 μs | 183.4 μs | 187.4 μs | 187.0 μs | 187.3 μs |  1.02 |    0.01 |     400 B |        2.17 |

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c924acfc15

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

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

Comment thread tools/Generate-CommandCatalog.ps1 Outdated
Add-Commands $commands 'cms' 'Redis' 'CMS.INCRBY,CMS.INFO,CMS.INITBYDIM,CMS.INITBYPROB,CMS.MERGE,CMS.QUERY'
Add-Commands $commands 'topk' 'Redis' 'TOPK.ADD,TOPK.COUNT,TOPK.INCRBY,TOPK.INFO,TOPK.LIST,TOPK.QUERY,TOPK.RESERVE'
Add-Commands $commands 'tdigest' 'Redis' 'TDIGEST.ADD,TDIGEST.BYRANK,TDIGEST.BYREVRANK,TDIGEST.CDF,TDIGEST.CREATE,TDIGEST.INFO,TDIGEST.MAX,TDIGEST.MERGE,TDIGEST.MIN,TDIGEST.QUANTILE,TDIGEST.RANK,TDIGEST.RESET,TDIGEST.REVRANK,TDIGEST.TRIMMED_MEAN'
Add-Commands $commands 'json' 'Redis' 'JSON.ARRAPPEND,JSON.ARRINDEX,JSON.ARRINSERT,JSON.ARRLEN,JSON.ARRPOP,JSON.ARRTRIM,JSON.CLEAR,JSON.DEBUG,JSON.DEBUG MEMORY,JSON.DEL,JSON.FORGET,JSON.GET,JSON.MERGE,JSON.MGET,JSON.MSET,JSON.NUMINCRBY,JSON.NUMMULTBY,JSON.OBJKEYS,JSON.OBJLEN,JSON.RESP,JSON.SET,JSON.STRAPPEND,JSON.STRLEN,JSON.TOGGLE,JSON.TYPE'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Add JSON.NUMPOWBY to the Redis catalog

The manually maintained Redis JSON list includes the related JSON.NUMMULTBY command but omits the documented JSON.NUMPOWBY command. A repo-wide search confirms it is absent from both this generator and RespireCommands.g.cs, so callers cannot discover or execute it through the advertised complete Redis 8.10 catalog; add it here and regenerate the output and coverage counts.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T15:43:25.911Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T15:44:02.952Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net10.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v4
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v4

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 80.43 μs 49.14 μs 2.693 μs 77.42 μs 82.63 μs 81.23 μs 82.49 μs 1.00 0.04 163 B 1.00
Respire_Catalog_Ping 80.81 μs 21.95 μs 1.203 μs 79.43 μs 81.65 μs 81.34 μs 81.62 μs 1.01 0.03 561 B 3.44
StackExchange_Ping 76.83 μs 143.33 μs 7.857 μs 68.42 μs 83.97 μs 78.11 μs 83.39 μs 0.96 0.09 389 B 2.39
Respire_Set_Small 70.99 μs 36.17 μs 1.983 μs 69.58 μs 73.26 μs 70.14 μs 72.95 μs 0.88 0.03 155 B 0.95
StackExchange_Set_Small 78.79 μs 62.11 μs 3.404 μs 76.05 μs 82.60 μs 77.71 μs 82.11 μs 0.98 0.05 397 B 2.44
Respire_Set_Medium 87.29 μs 35.32 μs 1.936 μs 85.81 μs 89.49 μs 86.58 μs 89.20 μs 1.09 0.04 160 B 0.98
StackExchange_Set_Medium 88.07 μs 72.80 μs 3.990 μs 83.78 μs 91.68 μs 88.76 μs 91.38 μs 1.10 0.05 402 B 2.47
Respire_Set_Large 99.01 μs 178.74 μs 9.798 μs 91.32 μs 110.04 μs 95.67 μs 108.60 μs 1.23 0.11 169 B 1.04
StackExchange_Set_Large 110.14 μs 316.87 μs 17.369 μs 90.14 μs 121.43 μs 118.85 μs 121.17 μs 1.37 0.19 415 B 2.55
Respire_Get 80.58 μs 113.94 μs 6.245 μs 73.64 μs 85.76 μs 82.32 μs 85.42 μs 1.00 0.07 196 B 1.20
StackExchange_Get 86.29 μs 57.28 μs 3.139 μs 83.31 μs 89.57 μs 86.00 μs 89.21 μs 1.07 0.05 387 B 2.37
StackExchange_MGet 83.85 μs 45.08 μs 2.471 μs 81.20 μs 86.10 μs 84.26 μs 85.91 μs 1.04 0.04 622 B 3.82
StackExchange_Pipeline_5_Sets 113.01 μs 179.30 μs 9.828 μs 101.82 μs 120.21 μs 117.01 μs 119.89 μs 1.41 0.11 2886 B 17.71
Respire_Exists 85.74 μs 52.95 μs 2.902 μs 82.82 μs 88.63 μs 85.77 μs 88.34 μs 1.07 0.04 146 B 0.90
StackExchange_Exists 78.40 μs 38.77 μs 2.125 μs 76.72 μs 80.79 μs 77.70 μs 80.48 μs 0.98 0.04 380 B 2.33
Respire_Del 162.85 μs 132.98 μs 7.289 μs 157.50 μs 171.15 μs 159.88 μs 170.02 μs 2.03 0.10 195 B 1.20
StackExchange_Del 167.41 μs 129.10 μs 7.076 μs 159.40 μs 172.84 μs 169.98 μs 172.55 μs 2.08 0.10 643 B 3.94
Respire_Incr 74.20 μs 99.00 μs 5.427 μs 67.96 μs 77.84 μs 76.79 μs 77.74 μs 0.92 0.06 143 B 0.88
StackExchange_Incr 80.60 μs 110.35 μs 6.049 μs 76.00 μs 87.45 μs 78.35 μs 86.54 μs 1.00 0.07 373 B 2.29
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v4
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v4

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean      | Error     | StdDev    | Min       | Max       | Median    | P95       | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |----------:|----------:|----------:|----------:|----------:|----------:|----------:|------:|--------:|----------:|------------:|
Respire_Ping                  |  80.43 μs |  49.14 μs |  2.693 μs |  77.42 μs |  82.63 μs |  81.23 μs |  82.49 μs |  1.00 |    0.04 |     163 B |        1.00 |
Respire_Catalog_Ping          |  80.81 μs |  21.95 μs |  1.203 μs |  79.43 μs |  81.65 μs |  81.34 μs |  81.62 μs |  1.01 |    0.03 |     561 B |        3.44 |
StackExchange_Ping            |  76.83 μs | 143.33 μs |  7.857 μs |  68.42 μs |  83.97 μs |  78.11 μs |  83.39 μs |  0.96 |    0.09 |     389 B |        2.39 |
Respire_Set_Small             |  70.99 μs |  36.17 μs |  1.983 μs |  69.58 μs |  73.26 μs |  70.14 μs |  72.95 μs |  0.88 |    0.03 |     155 B |        0.95 |
StackExchange_Set_Small       |  78.79 μs |  62.11 μs |  3.404 μs |  76.05 μs |  82.60 μs |  77.71 μs |  82.11 μs |  0.98 |    0.05 |     397 B |        2.44 |
Respire_Set_Medium            |  87.29 μs |  35.32 μs |  1.936 μs |  85.81 μs |  89.49 μs |  86.58 μs |  89.20 μs |  1.09 |    0.04 |     160 B |        0.98 |
StackExchange_Set_Medium      |  88.07 μs |  72.80 μs |  3.990 μs |  83.78 μs |  91.68 μs |  88.76 μs |  91.38 μs |  1.10 |    0.05 |     402 B |        2.47 |
Respire_Set_Large             |  99.01 μs | 178.74 μs |  9.798 μs |  91.32 μs | 110.04 μs |  95.67 μs | 108.60 μs |  1.23 |    0.11 |     169 B |        1.04 |
StackExchange_Set_Large       | 110.14 μs | 316.87 μs | 17.369 μs |  90.14 μs | 121.43 μs | 118.85 μs | 121.17 μs |  1.37 |    0.19 |     415 B |        2.55 |
Respire_Get                   |  80.58 μs | 113.94 μs |  6.245 μs |  73.64 μs |  85.76 μs |  82.32 μs |  85.42 μs |  1.00 |    0.07 |     196 B |        1.20 |
StackExchange_Get             |  86.29 μs |  57.28 μs |  3.139 μs |  83.31 μs |  89.57 μs |  86.00 μs |  89.21 μs |  1.07 |    0.05 |     387 B |        2.37 |
StackExchange_MGet            |  83.85 μs |  45.08 μs |  2.471 μs |  81.20 μs |  86.10 μs |  84.26 μs |  85.91 μs |  1.04 |    0.04 |     622 B |        3.82 |
StackExchange_Pipeline_5_Sets | 113.01 μs | 179.30 μs |  9.828 μs | 101.82 μs | 120.21 μs | 117.01 μs | 119.89 μs |  1.41 |    0.11 |    2886 B |       17.71 |
Respire_Exists                |  85.74 μs |  52.95 μs |  2.902 μs |  82.82 μs |  88.63 μs |  85.77 μs |  88.34 μs |  1.07 |    0.04 |     146 B |        0.90 |
StackExchange_Exists          |  78.40 μs |  38.77 μs |  2.125 μs |  76.72 μs |  80.79 μs |  77.70 μs |  80.48 μs |  0.98 |    0.04 |     380 B |        2.33 |
Respire_Del                   | 162.85 μs | 132.98 μs |  7.289 μs | 157.50 μs | 171.15 μs | 159.88 μs | 170.02 μs |  2.03 |    0.10 |     195 B |        1.20 |
StackExchange_Del             | 167.41 μs | 129.10 μs |  7.076 μs | 159.40 μs | 172.84 μs | 169.98 μs | 172.55 μs |  2.08 |    0.10 |     643 B |        3.94 |
Respire_Incr                  |  74.20 μs |  99.00 μs |  5.427 μs |  67.96 μs |  77.84 μs |  76.79 μs |  77.74 μs |  0.92 |    0.06 |     143 B |        0.88 |
StackExchange_Incr            |  80.60 μs | 110.35 μs |  6.049 μs |  76.00 μs |  87.45 μs |  78.35 μs |  86.54 μs |  1.00 |    0.07 |     373 B |        2.29 |

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
tests/Respire.Tests/Networking/GeoCommandTests.cs (1)

38-41: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve ordered protocol assertions.

Pass CollectionOrdering.Matching to the IsEquivalentTo assertions for HashAsync, PositionAsync, and server.ReceivedCommands. These results are positional, so reordered replies or commands must fail the test.

🤖 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 `@tests/Respire.Tests/Networking/GeoCommandTests.cs` around lines 38 - 41,
Update the IsEquivalentTo assertions for Geo.HashAsync and Geo.PositionAsync to
pass CollectionOrdering.Matching, and apply the same ordering option to the
server.ReceivedCommands assertion in the surrounding test. Preserve the existing
expected values while ensuring reordered replies or commands fail validation.
tests/Respire.Tests/Networking/CommandCatalogTests.cs (1)

133-144: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Assert RESP token boundaries, not only the rendered command string.

FakeRespServer.RecordCommand joins parsed values with spaces. A four-token frame and a five-token frame can therefore produce the same ReceivedCommands value. Capture the parsed arguments or raw RESP frame, and assert four bulk strings with the JSON value as one argument.

🤖 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 `@tests/Respire.Tests/Networking/CommandCatalogTests.cs` around lines 133 -
144, Update CatalogCommand_PreservesArgumentsAsSingleTokens to validate parsed
RESP token boundaries rather than only server.ReceivedCommands. Capture the
server’s parsed arguments or raw frame through the existing FakeRespServer API,
then assert the request contains exactly four bulk-string arguments, with the
JSON value represented as one argument.
tools/Generate-CommandCatalog.ps1 (1)

137-161: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Sort groups by the source group key.

$allReferences inherits the loop order, but sorting by generated class names can place generic (Key) out of group order. Use Sort-Object Name to preserve the documented ordering.

🤖 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 `@tools/Generate-CommandCatalog.ps1` around lines 137 - 161, Update the outer
group iteration that builds `$allReferences` to sort each grouped result by its
original `Name` key, rather than by `Get-ClassName $_.Name`. Preserve the
existing command-name sorting and generated class-name logic so `All` remains
ordered by source group and command name.
🤖 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.

Outside diff comments:
In `@tests/Respire.Tests/Networking/CommandCatalogTests.cs`:
- Around line 133-144: Update CatalogCommand_PreservesArgumentsAsSingleTokens to
validate parsed RESP token boundaries rather than only server.ReceivedCommands.
Capture the server’s parsed arguments or raw frame through the existing
FakeRespServer API, then assert the request contains exactly four bulk-string
arguments, with the JSON value represented as one argument.

In `@tests/Respire.Tests/Networking/GeoCommandTests.cs`:
- Around line 38-41: Update the IsEquivalentTo assertions for Geo.HashAsync and
Geo.PositionAsync to pass CollectionOrdering.Matching, and apply the same
ordering option to the server.ReceivedCommands assertion in the surrounding
test. Preserve the existing expected values while ensuring reordered replies or
commands fail validation.

In `@tools/Generate-CommandCatalog.ps1`:
- Around line 137-161: Update the outer group iteration that builds
`$allReferences` to sort each grouped result by its original `Name` key, rather
than by `Get-ClassName $_.Name`. Preserve the existing command-name sorting and
generated class-name logic so `All` remains ordered by source group and command
name.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e55e8bfe-1854-4c1c-8428-fdbf2bb56520

📥 Commits

Reviewing files that changed from the base of the PR and between 987dd48 and cac6848.

📒 Files selected for processing (10)
  • benchmarks/Respire.Benchmarks/CommandInputBenchmarks.cs
  • docs/COMMAND_COVERAGE.md
  • src/Respire/Facets/GeoCommands.cs
  • src/Respire/Facets/HyperLogLogCommands.cs
  • src/Respire/RespireCommand.cs
  • src/Respire/RespireCommands.g.cs
  • tests/Respire.Tests/Networking/CommandCatalogTests.cs
  • tests/Respire.Tests/Networking/GeoCommandTests.cs
  • tests/Respire.Tests/Networking/HyperLogLogCommandTests.cs
  • tools/Generate-CommandCatalog.ps1
🚧 Files skipped from review as they are similar to previous changes (6)
  • tests/Respire.Tests/Networking/HyperLogLogCommandTests.cs
  • docs/COMMAND_COVERAGE.md
  • src/Respire/RespireCommand.cs
  • src/Respire/Facets/GeoCommands.cs
  • src/Respire/Facets/HyperLogLogCommands.cs
  • benchmarks/Respire.Benchmarks/CommandInputBenchmarks.cs

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cac6848a67

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

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

Comment thread src/Respire/RespireCommand.cs Outdated
"BLMOVE" or "BLMOVEM" or "BLMPOP" or "BLPOP" or "BRPOP" or "BRPOPLPUSH" or
"BZMPOP" or "BZPOPMAX" or "BZPOPMIN" => RespireCommandBehavior.Blocking,

"XREAD" or "XREADGROUP" => RespireCommandBehavior.BlockingWhenRequested,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Route blocking TS.READ calls through the dedicated pool

When RespireCommands.TimeSeries.TS_READ is invoked with its BLOCK option, especially an unbounded timeout, it falls through to Multiplexed because only XREAD and XREADGROUP are classified as conditionally blocking. The command can therefore hold a shared socket and stall every pipelined request behind it; classify TS.READ as BlockingWhenRequested so catalog execution uses SendBlockingAsync.

Useful? React with 👍 / 👎.

Comment thread src/Respire/Facets/GeoCommands.cs Outdated
Comment on lines +33 to +34
public readonly record struct GeoSearchResult(
string Member,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve binary members in geo search results

When a member added through GeoEntry.Member contains non-UTF-8 bytes, ParseSearch converts the returned bytes with AsString(), which replaces invalid sequences and makes GeoSearchResult.Member unable to identify or round-trip the stored member; distinct binary members can even collapse to the same string. Keep this result member in a binary-preserving representation such as byte[] rather than declaring it as string.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net8.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 184.7 μs 19.26 μs 1.06 μs 183.6 μs 185.7 μs 184.7 μs 185.6 μs 1.00 0.01 184 B 1.00
Respire_Catalog_Ping 181.6 μs 59.43 μs 3.26 μs 177.8 μs 183.5 μs 183.3 μs 183.5 μs 0.98 0.02 575 B 3.12
StackExchange_Ping 185.5 μs 26.53 μs 1.45 μs 183.8 μs 186.4 μs 186.3 μs 186.4 μs 1.00 0.01 408 B 2.22
Respire_Set_Small 185.4 μs 4.44 μs 0.24 μs 185.2 μs 185.7 μs 185.5 μs 185.6 μs 1.00 0.01 176 B 0.96
StackExchange_Set_Small 188.0 μs 13.44 μs 0.74 μs 187.2 μs 188.7 μs 188.1 μs 188.6 μs 1.02 0.01 416 B 2.26
Respire_Set_Medium 187.9 μs 30.50 μs 1.67 μs 186.2 μs 189.6 μs 187.8 μs 189.4 μs 1.02 0.01 176 B 0.96
StackExchange_Set_Medium 187.9 μs 47.41 μs 2.60 μs 185.2 μs 190.4 μs 188.2 μs 190.2 μs 1.02 0.01 416 B 2.26
Respire_Set_Large 196.5 μs 21.78 μs 1.19 μs 195.6 μs 197.9 μs 196.1 μs 197.7 μs 1.06 0.01 176 B 0.96
StackExchange_Set_Large 198.0 μs 38.45 μs 2.11 μs 195.6 μs 199.6 μs 198.7 μs 199.5 μs 1.07 0.01 416 B 2.26
Respire_Get 184.7 μs 25.03 μs 1.37 μs 183.1 μs 185.6 μs 185.3 μs 185.6 μs 1.00 0.01 224 B 1.22
StackExchange_Get 186.1 μs 23.36 μs 1.28 μs 185.0 μs 187.5 μs 185.7 μs 187.3 μs 1.01 0.01 424 B 2.30
StackExchange_MGet 191.1 μs 12.41 μs 0.68 μs 190.4 μs 191.8 μs 191.1 μs 191.7 μs 1.03 0.01 656 B 3.57
StackExchange_Pipeline_5_Sets 221.7 μs 268.11 μs 14.70 μs 212.2 μs 238.7 μs 214.4 μs 236.2 μs 1.20 0.07 2888 B 15.70
Respire_Exists 185.2 μs 4.94 μs 0.27 μs 184.8 μs 185.3 μs 185.3 μs 185.3 μs 1.00 0.01 175 B 0.95
StackExchange_Exists 185.0 μs 56.77 μs 3.11 μs 181.4 μs 187.2 μs 186.3 μs 187.1 μs 1.00 0.02 400 B 2.17
Respire_Del 356.1 μs 34.16 μs 1.87 μs 354.0 μs 357.5 μs 356.7 μs 357.4 μs 1.93 0.01 200 B 1.09
StackExchange_Del 361.9 μs 24.92 μs 1.37 μs 360.6 μs 363.3 μs 361.7 μs 363.1 μs 1.96 0.01 648 B 3.52
Respire_Incr 183.6 μs 31.18 μs 1.71 μs 182.1 μs 185.5 μs 183.3 μs 185.2 μs 0.99 0.01 184 B 1.00
StackExchange_Incr 187.0 μs 27.27 μs 1.49 μs 185.5 μs 188.5 μs 186.9 μs 188.3 μs 1.01 0.01 400 B 2.17
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error     | StdDev   | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|----------:|---------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 184.7 μs |  19.26 μs |  1.06 μs | 183.6 μs | 185.7 μs | 184.7 μs | 185.6 μs |  1.00 |    0.01 |     184 B |        1.00 |
Respire_Catalog_Ping          | 181.6 μs |  59.43 μs |  3.26 μs | 177.8 μs | 183.5 μs | 183.3 μs | 183.5 μs |  0.98 |    0.02 |     575 B |        3.12 |
StackExchange_Ping            | 185.5 μs |  26.53 μs |  1.45 μs | 183.8 μs | 186.4 μs | 186.3 μs | 186.4 μs |  1.00 |    0.01 |     408 B |        2.22 |
Respire_Set_Small             | 185.4 μs |   4.44 μs |  0.24 μs | 185.2 μs | 185.7 μs | 185.5 μs | 185.6 μs |  1.00 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Small       | 188.0 μs |  13.44 μs |  0.74 μs | 187.2 μs | 188.7 μs | 188.1 μs | 188.6 μs |  1.02 |    0.01 |     416 B |        2.26 |
Respire_Set_Medium            | 187.9 μs |  30.50 μs |  1.67 μs | 186.2 μs | 189.6 μs | 187.8 μs | 189.4 μs |  1.02 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Medium      | 187.9 μs |  47.41 μs |  2.60 μs | 185.2 μs | 190.4 μs | 188.2 μs | 190.2 μs |  1.02 |    0.01 |     416 B |        2.26 |
Respire_Set_Large             | 196.5 μs |  21.78 μs |  1.19 μs | 195.6 μs | 197.9 μs | 196.1 μs | 197.7 μs |  1.06 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Large       | 198.0 μs |  38.45 μs |  2.11 μs | 195.6 μs | 199.6 μs | 198.7 μs | 199.5 μs |  1.07 |    0.01 |     416 B |        2.26 |
Respire_Get                   | 184.7 μs |  25.03 μs |  1.37 μs | 183.1 μs | 185.6 μs | 185.3 μs | 185.6 μs |  1.00 |    0.01 |     224 B |        1.22 |
StackExchange_Get             | 186.1 μs |  23.36 μs |  1.28 μs | 185.0 μs | 187.5 μs | 185.7 μs | 187.3 μs |  1.01 |    0.01 |     424 B |        2.30 |
StackExchange_MGet            | 191.1 μs |  12.41 μs |  0.68 μs | 190.4 μs | 191.8 μs | 191.1 μs | 191.7 μs |  1.03 |    0.01 |     656 B |        3.57 |
StackExchange_Pipeline_5_Sets | 221.7 μs | 268.11 μs | 14.70 μs | 212.2 μs | 238.7 μs | 214.4 μs | 236.2 μs |  1.20 |    0.07 |    2888 B |       15.70 |
Respire_Exists                | 185.2 μs |   4.94 μs |  0.27 μs | 184.8 μs | 185.3 μs | 185.3 μs | 185.3 μs |  1.00 |    0.01 |     175 B |        0.95 |
StackExchange_Exists          | 185.0 μs |  56.77 μs |  3.11 μs | 181.4 μs | 187.2 μs | 186.3 μs | 187.1 μs |  1.00 |    0.02 |     400 B |        2.17 |
Respire_Del                   | 356.1 μs |  34.16 μs |  1.87 μs | 354.0 μs | 357.5 μs | 356.7 μs | 357.4 μs |  1.93 |    0.01 |     200 B |        1.09 |
StackExchange_Del             | 361.9 μs |  24.92 μs |  1.37 μs | 360.6 μs | 363.3 μs | 361.7 μs | 363.1 μs |  1.96 |    0.01 |     648 B |        3.52 |
Respire_Incr                  | 183.6 μs |  31.18 μs |  1.71 μs | 182.1 μs | 185.5 μs | 183.3 μs | 185.2 μs |  0.99 |    0.01 |     184 B |        1.00 |
StackExchange_Incr            | 187.0 μs |  27.27 μs |  1.49 μs | 185.5 μs | 188.5 μs | 186.9 μs | 188.3 μs |  1.01 |    0.01 |     400 B |        2.17 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: failure
  • Timestamp: 2026-08-09T15:56:47.454Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: failure
  • Timestamp: 2026-08-09T15:56:50.132Z

Automated integration testing with Redis containers using TUnit

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
tests/Respire.Tests/Networking/GeoCommandTests.cs (1)

38-41: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the sequence assertions order-sensitive.

IsEquivalentTo ignores order by default. Pass TUnit.Assertions.Enums.CollectionOrdering.Matching to the hash, position, and ReceivedCommands assertions.

🤖 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 `@tests/Respire.Tests/Networking/GeoCommandTests.cs` around lines 38 - 41,
Update the assertions in the Geo command tests to pass
CollectionOrdering.Matching to IsEquivalentTo for the hash, position, and
ReceivedCommands sequences, ensuring each expected element is validated in
order.
benchmarks/Respire.Benchmarks/CommandInputBenchmarks.cs (1)

2-26: 🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick win

Use a Valkey catalog command in ClassifyCatalogCommand. BLMOVEM is cataloged as Redis-only. Use BLMOVE or another command with the Valkey source flag.

🤖 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 `@benchmarks/Respire.Benchmarks/CommandInputBenchmarks.cs` around lines 2 - 26,
Update CommandInputBenchmarks.ClassifyCatalogCommand to classify a command
cataloged for Valkey, replacing the Redis-only BLMOVEM input with BLMOVE or
another command whose RespireCommandSource.Valkey flag is valid.
🤖 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.

Outside diff comments:
In `@benchmarks/Respire.Benchmarks/CommandInputBenchmarks.cs`:
- Around line 2-26: Update CommandInputBenchmarks.ClassifyCatalogCommand to
classify a command cataloged for Valkey, replacing the Redis-only BLMOVEM input
with BLMOVE or another command whose RespireCommandSource.Valkey flag is valid.

In `@tests/Respire.Tests/Networking/GeoCommandTests.cs`:
- Around line 38-41: Update the assertions in the Geo command tests to pass
CollectionOrdering.Matching to IsEquivalentTo for the hash, position, and
ReceivedCommands sequences, ensuring each expected element is validated in
order.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f529bb28-3f21-498b-8ce9-b668e8a4d8a2

📥 Commits

Reviewing files that changed from the base of the PR and between cac6848 and f039fe0.

📒 Files selected for processing (5)
  • benchmarks/Respire.Benchmarks/CommandInputBenchmarks.cs
  • src/Respire/Facets/GeoCommands.cs
  • src/Respire/RespireCommand.cs
  • tests/Respire.Tests/Networking/CommandCatalogTests.cs
  • tests/Respire.Tests/Networking/GeoCommandTests.cs
🚧 Files skipped from review as they are similar to previous changes (3)
  • tests/Respire.Tests/Networking/CommandCatalogTests.cs
  • src/Respire/RespireCommand.cs
  • src/Respire/Facets/GeoCommands.cs

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net10.0)

ℹ️ Execution Details

  • Framework: net10.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T16:03:44.708Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🧪 Integration Test Results (net8.0)

ℹ️ Execution Details

  • Framework: net8.0
  • Test Runner: TUnit
  • Runner: Linux - X64
  • Status: success
  • Timestamp: 2026-08-09T16:04:10.073Z

Automated integration testing with Redis containers using TUnit

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net8.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.87GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 106.60 μs 140.71 μs 7.713 μs 99.83 μs 115.0 μs 104.97 μs 113.99 μs 1.00 0.09 162 B 1.00
Respire_Catalog_Ping 97.95 μs 42.18 μs 2.312 μs 95.52 μs 100.1 μs 98.18 μs 99.93 μs 0.92 0.06 550 B 3.40
StackExchange_Ping 106.44 μs 61.65 μs 3.379 μs 104.45 μs 110.3 μs 104.52 μs 109.76 μs 1.00 0.07 389 B 2.40
Respire_Set_Small 102.94 μs 147.22 μs 8.070 μs 93.79 μs 109.0 μs 105.99 μs 108.73 μs 0.97 0.09 143 B 0.88
StackExchange_Set_Small 105.16 μs 242.81 μs 13.309 μs 95.11 μs 120.3 μs 100.13 μs 118.24 μs 0.99 0.12 396 B 2.44
Respire_Set_Medium 110.07 μs 63.34 μs 3.472 μs 106.06 μs 112.1 μs 112.07 μs 112.08 μs 1.04 0.07 163 B 1.01
StackExchange_Set_Medium 118.17 μs 78.76 μs 4.317 μs 113.79 μs 122.4 μs 118.29 μs 122.01 μs 1.11 0.08 411 B 2.54
Respire_Set_Large 130.55 μs 30.17 μs 1.654 μs 128.65 μs 131.7 μs 131.27 μs 131.67 μs 1.23 0.08 170 B 1.05
StackExchange_Set_Large 130.08 μs 51.83 μs 2.841 μs 126.96 μs 132.5 μs 130.77 μs 132.33 μs 1.22 0.08 402 B 2.48
Respire_Get 115.88 μs 56.98 μs 3.123 μs 112.64 μs 118.9 μs 116.14 μs 118.59 μs 1.09 0.07 204 B 1.26
StackExchange_Get 112.07 μs 86.97 μs 4.767 μs 108.77 μs 117.5 μs 109.90 μs 116.77 μs 1.05 0.08 411 B 2.54
StackExchange_MGet 120.62 μs 74.43 μs 4.080 μs 115.91 μs 123.1 μs 122.83 μs 123.09 μs 1.14 0.08 637 B 3.93
StackExchange_Pipeline_5_Sets 154.60 μs 30.07 μs 1.648 μs 153.10 μs 156.4 μs 154.32 μs 156.16 μs 1.46 0.09 2885 B 17.81
Respire_Exists 110.19 μs 96.12 μs 5.269 μs 104.35 μs 114.6 μs 111.61 μs 114.30 μs 1.04 0.08 156 B 0.96
StackExchange_Exists 102.70 μs 181.20 μs 9.932 μs 94.98 μs 113.9 μs 99.21 μs 112.43 μs 0.97 0.10 377 B 2.33
Respire_Del 207.78 μs 123.12 μs 6.749 μs 200.09 μs 212.7 μs 210.57 μs 212.48 μs 1.96 0.13 187 B 1.15
StackExchange_Del 209.20 μs 18.91 μs 1.037 μs 208.12 μs 210.2 μs 209.29 μs 210.09 μs 1.97 0.12 644 B 3.98
Respire_Incr 98.70 μs 63.04 μs 3.456 μs 94.86 μs 101.6 μs 99.66 μs 101.38 μs 0.93 0.06 157 B 0.97
StackExchange_Incr 115.89 μs 144.77 μs 7.935 μs 107.88 μs 123.7 μs 116.04 μs 122.98 μs 1.09 0.09 377 B 2.33
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.87GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean      | Error     | StdDev    | Min       | Max      | Median    | P95       | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |----------:|----------:|----------:|----------:|---------:|----------:|----------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 106.60 μs | 140.71 μs |  7.713 μs |  99.83 μs | 115.0 μs | 104.97 μs | 113.99 μs |  1.00 |    0.09 |     162 B |        1.00 |
Respire_Catalog_Ping          |  97.95 μs |  42.18 μs |  2.312 μs |  95.52 μs | 100.1 μs |  98.18 μs |  99.93 μs |  0.92 |    0.06 |     550 B |        3.40 |
StackExchange_Ping            | 106.44 μs |  61.65 μs |  3.379 μs | 104.45 μs | 110.3 μs | 104.52 μs | 109.76 μs |  1.00 |    0.07 |     389 B |        2.40 |
Respire_Set_Small             | 102.94 μs | 147.22 μs |  8.070 μs |  93.79 μs | 109.0 μs | 105.99 μs | 108.73 μs |  0.97 |    0.09 |     143 B |        0.88 |
StackExchange_Set_Small       | 105.16 μs | 242.81 μs | 13.309 μs |  95.11 μs | 120.3 μs | 100.13 μs | 118.24 μs |  0.99 |    0.12 |     396 B |        2.44 |
Respire_Set_Medium            | 110.07 μs |  63.34 μs |  3.472 μs | 106.06 μs | 112.1 μs | 112.07 μs | 112.08 μs |  1.04 |    0.07 |     163 B |        1.01 |
StackExchange_Set_Medium      | 118.17 μs |  78.76 μs |  4.317 μs | 113.79 μs | 122.4 μs | 118.29 μs | 122.01 μs |  1.11 |    0.08 |     411 B |        2.54 |
Respire_Set_Large             | 130.55 μs |  30.17 μs |  1.654 μs | 128.65 μs | 131.7 μs | 131.27 μs | 131.67 μs |  1.23 |    0.08 |     170 B |        1.05 |
StackExchange_Set_Large       | 130.08 μs |  51.83 μs |  2.841 μs | 126.96 μs | 132.5 μs | 130.77 μs | 132.33 μs |  1.22 |    0.08 |     402 B |        2.48 |
Respire_Get                   | 115.88 μs |  56.98 μs |  3.123 μs | 112.64 μs | 118.9 μs | 116.14 μs | 118.59 μs |  1.09 |    0.07 |     204 B |        1.26 |
StackExchange_Get             | 112.07 μs |  86.97 μs |  4.767 μs | 108.77 μs | 117.5 μs | 109.90 μs | 116.77 μs |  1.05 |    0.08 |     411 B |        2.54 |
StackExchange_MGet            | 120.62 μs |  74.43 μs |  4.080 μs | 115.91 μs | 123.1 μs | 122.83 μs | 123.09 μs |  1.14 |    0.08 |     637 B |        3.93 |
StackExchange_Pipeline_5_Sets | 154.60 μs |  30.07 μs |  1.648 μs | 153.10 μs | 156.4 μs | 154.32 μs | 156.16 μs |  1.46 |    0.09 |    2885 B |       17.81 |
Respire_Exists                | 110.19 μs |  96.12 μs |  5.269 μs | 104.35 μs | 114.6 μs | 111.61 μs | 114.30 μs |  1.04 |    0.08 |     156 B |        0.96 |
StackExchange_Exists          | 102.70 μs | 181.20 μs |  9.932 μs |  94.98 μs | 113.9 μs |  99.21 μs | 112.43 μs |  0.97 |    0.10 |     377 B |        2.33 |
Respire_Del                   | 207.78 μs | 123.12 μs |  6.749 μs | 200.09 μs | 212.7 μs | 210.57 μs | 212.48 μs |  1.96 |    0.13 |     187 B |        1.15 |
StackExchange_Del             | 209.20 μs |  18.91 μs |  1.037 μs | 208.12 μs | 210.2 μs | 209.29 μs | 210.09 μs |  1.97 |    0.12 |     644 B |        3.98 |
Respire_Incr                  |  98.70 μs |  63.04 μs |  3.456 μs |  94.86 μs | 101.6 μs |  99.66 μs | 101.38 μs |  0.93 |    0.06 |     157 B |        0.97 |
StackExchange_Incr            | 115.89 μs | 144.77 μs |  7.935 μs | 107.88 μs | 123.7 μs | 116.04 μs | 122.98 μs |  1.09 |    0.09 |     377 B |        2.33 |

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Redis Container Benchmark Results (net10.0)

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.66GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0 IterationCount=3 WarmupCount=1

Method Mean Error StdDev Min Max Median P95 Ratio RatioSD Allocated Alloc Ratio
Respire_Ping 182.7 μs 10.36 μs 0.57 μs 182.0 μs 183.0 μs 182.9 μs 183.0 μs 1.00 0.00 184 B 1.00
Respire_Catalog_Ping 182.0 μs 57.00 μs 3.12 μs 178.5 μs 184.6 μs 182.9 μs 184.4 μs 1.00 0.02 576 B 3.13
StackExchange_Ping 184.0 μs 29.87 μs 1.64 μs 182.8 μs 185.9 μs 183.5 μs 185.7 μs 1.01 0.01 408 B 2.22
Respire_Set_Small 181.9 μs 44.82 μs 2.46 μs 179.8 μs 184.6 μs 181.3 μs 184.3 μs 1.00 0.01 176 B 0.96
StackExchange_Set_Small 184.4 μs 52.90 μs 2.90 μs 181.7 μs 187.5 μs 184.0 μs 187.1 μs 1.01 0.01 416 B 2.26
Respire_Set_Medium 185.8 μs 6.09 μs 0.33 μs 185.6 μs 186.2 μs 185.6 μs 186.1 μs 1.02 0.00 176 B 0.96
StackExchange_Set_Medium 187.9 μs 39.01 μs 2.14 μs 186.2 μs 190.3 μs 187.2 μs 190.0 μs 1.03 0.01 416 B 2.26
Respire_Set_Large 194.3 μs 7.86 μs 0.43 μs 193.9 μs 194.7 μs 194.4 μs 194.7 μs 1.06 0.00 175 B 0.95
StackExchange_Set_Large 195.0 μs 30.30 μs 1.66 μs 193.1 μs 196.1 μs 195.9 μs 196.1 μs 1.07 0.01 416 B 2.26
Respire_Get 181.5 μs 41.19 μs 2.26 μs 179.8 μs 184.0 μs 180.6 μs 183.7 μs 0.99 0.01 224 B 1.22
StackExchange_Get 184.2 μs 20.61 μs 1.13 μs 183.4 μs 185.5 μs 183.7 μs 185.3 μs 1.01 0.01 424 B 2.30
StackExchange_MGet 186.3 μs 27.34 μs 1.50 μs 184.8 μs 187.8 μs 186.4 μs 187.6 μs 1.02 0.01 656 B 3.57
StackExchange_Pipeline_5_Sets 227.2 μs 299.41 μs 16.41 μs 209.8 μs 242.4 μs 229.3 μs 241.1 μs 1.24 0.08 2888 B 15.70
Respire_Exists 182.8 μs 18.09 μs 0.99 μs 181.8 μs 183.7 μs 183.0 μs 183.6 μs 1.00 0.01 175 B 0.95
StackExchange_Exists 184.5 μs 22.88 μs 1.25 μs 183.3 μs 185.8 μs 184.5 μs 185.7 μs 1.01 0.01 400 B 2.17
Respire_Del 351.6 μs 28.24 μs 1.55 μs 349.9 μs 352.8 μs 352.2 μs 352.7 μs 1.93 0.01 200 B 1.09
StackExchange_Del 354.8 μs 25.46 μs 1.40 μs 353.5 μs 356.3 μs 354.7 μs 356.1 μs 1.94 0.01 648 B 3.52
Respire_Incr 181.3 μs 14.87 μs 0.81 μs 180.5 μs 182.1 μs 181.3 μs 182.0 μs 0.99 0.00 182 B 0.99
StackExchange_Incr 185.4 μs 35.45 μs 1.94 μs 184.1 μs 187.6 μs 184.4 μs 187.3 μs 1.01 0.01 400 B 2.17
View raw benchmark output

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.66GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
[Host]     : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-YBPNYS : .NET 8.0.29 (8.0.29, 8.0.2926.32403), X64 RyuJIT x86-64-v3

Runtime=.NET 8.0  IterationCount=3  WarmupCount=1  

Method                        | Mean     | Error     | StdDev   | Min      | Max      | Median   | P95      | Ratio | RatioSD | Allocated | Alloc Ratio |
------------------------------ |---------:|----------:|---------:|---------:|---------:|---------:|---------:|------:|--------:|----------:|------------:|
Respire_Ping                  | 182.7 μs |  10.36 μs |  0.57 μs | 182.0 μs | 183.0 μs | 182.9 μs | 183.0 μs |  1.00 |    0.00 |     184 B |        1.00 |
Respire_Catalog_Ping          | 182.0 μs |  57.00 μs |  3.12 μs | 178.5 μs | 184.6 μs | 182.9 μs | 184.4 μs |  1.00 |    0.02 |     576 B |        3.13 |
StackExchange_Ping            | 184.0 μs |  29.87 μs |  1.64 μs | 182.8 μs | 185.9 μs | 183.5 μs | 185.7 μs |  1.01 |    0.01 |     408 B |        2.22 |
Respire_Set_Small             | 181.9 μs |  44.82 μs |  2.46 μs | 179.8 μs | 184.6 μs | 181.3 μs | 184.3 μs |  1.00 |    0.01 |     176 B |        0.96 |
StackExchange_Set_Small       | 184.4 μs |  52.90 μs |  2.90 μs | 181.7 μs | 187.5 μs | 184.0 μs | 187.1 μs |  1.01 |    0.01 |     416 B |        2.26 |
Respire_Set_Medium            | 185.8 μs |   6.09 μs |  0.33 μs | 185.6 μs | 186.2 μs | 185.6 μs | 186.1 μs |  1.02 |    0.00 |     176 B |        0.96 |
StackExchange_Set_Medium      | 187.9 μs |  39.01 μs |  2.14 μs | 186.2 μs | 190.3 μs | 187.2 μs | 190.0 μs |  1.03 |    0.01 |     416 B |        2.26 |
Respire_Set_Large             | 194.3 μs |   7.86 μs |  0.43 μs | 193.9 μs | 194.7 μs | 194.4 μs | 194.7 μs |  1.06 |    0.00 |     175 B |        0.95 |
StackExchange_Set_Large       | 195.0 μs |  30.30 μs |  1.66 μs | 193.1 μs | 196.1 μs | 195.9 μs | 196.1 μs |  1.07 |    0.01 |     416 B |        2.26 |
Respire_Get                   | 181.5 μs |  41.19 μs |  2.26 μs | 179.8 μs | 184.0 μs | 180.6 μs | 183.7 μs |  0.99 |    0.01 |     224 B |        1.22 |
StackExchange_Get             | 184.2 μs |  20.61 μs |  1.13 μs | 183.4 μs | 185.5 μs | 183.7 μs | 185.3 μs |  1.01 |    0.01 |     424 B |        2.30 |
StackExchange_MGet            | 186.3 μs |  27.34 μs |  1.50 μs | 184.8 μs | 187.8 μs | 186.4 μs | 187.6 μs |  1.02 |    0.01 |     656 B |        3.57 |
StackExchange_Pipeline_5_Sets | 227.2 μs | 299.41 μs | 16.41 μs | 209.8 μs | 242.4 μs | 229.3 μs | 241.1 μs |  1.24 |    0.08 |    2888 B |       15.70 |
Respire_Exists                | 182.8 μs |  18.09 μs |  0.99 μs | 181.8 μs | 183.7 μs | 183.0 μs | 183.6 μs |  1.00 |    0.01 |     175 B |        0.95 |
StackExchange_Exists          | 184.5 μs |  22.88 μs |  1.25 μs | 183.3 μs | 185.8 μs | 184.5 μs | 185.7 μs |  1.01 |    0.01 |     400 B |        2.17 |
Respire_Del                   | 351.6 μs |  28.24 μs |  1.55 μs | 349.9 μs | 352.8 μs | 352.2 μs | 352.7 μs |  1.93 |    0.01 |     200 B |        1.09 |
StackExchange_Del             | 354.8 μs |  25.46 μs |  1.40 μs | 353.5 μs | 356.3 μs | 354.7 μs | 356.1 μs |  1.94 |    0.01 |     648 B |        3.52 |
Respire_Incr                  | 181.3 μs |  14.87 μs |  0.81 μs | 180.5 μs | 182.1 μs | 181.3 μs | 182.0 μs |  0.99 |    0.00 |     182 B |        0.99 |
StackExchange_Incr            | 185.4 μs |  35.45 μs |  1.94 μs | 184.1 μs | 187.6 μs | 184.4 μs | 187.3 μs |  1.01 |    0.01 |     400 B |        2.17 |

This branch was previously deployed

1 inactive deployment
Pull Requests — bef1d562 Deployed Aug 9, 2026 by thomhurst via modularpipeline #390
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.

1 participant