Skip to content

fix(mcp): close report_duplicate's CAS-race test flake via shared read seam - #332

Merged
tstapler merged 1 commit into
mainfrom
fix/report-duplicate-cas-race-test-flake
Aug 4, 2026
Merged

fix(mcp): close report_duplicate's CAS-race test flake via shared read seam#332
tstapler merged 1 commit into
mainfrom
fix/report-duplicate-cas-race-test-flake

Conversation

@tstapler

@tstapler tstapler commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Summary

TestReportDuplicate_ReportsDistinctMessage_WhenCASPreconditionFails was flagged as failing during a full-suite go test -short ./... run today. Reproduced it deterministically (not merely intermittently) under GOMAXPROCS=1 / -cpu=1: successes=2 instead of the expected 1 success + 1 CAS failure.

Root cause

reportDuplicate (server/mcp/tools_backlog.go) read the backlog item via h.storage.GetBacklogItem directly, instead of the overridable h.getBacklogItemFor seam requestReview already uses. That seam exists specifically so tests can inject a readBarrier forcing both racing goroutines' pre-transition reads to land before either's write.

Without it, under scheduling delay (exactly what a CPU-contended full -short ./... run produces), the "loser" goroutine can execute its entire read step after the "winner" has already committed its status transition + VerificationNotes. Because both racers in this test share one session UUID and an identical duplicate_ref/reason, the loser then matches reportDuplicate's own idempotency short-circuit and returns a plain success instead of racing the CAS write — producing 2 successes where the test expects exactly 1.

This is the identical race shape already discovered and fixed for request_review in #308 (a4793c1d6), which added the getBacklogItemFn hook + readBarrier to close it. report_duplicate was added in that same PR but never wired onto the same seam, so its equivalent test was left exposed to the same race.

Fix

  • reportDuplicate now reads the item via h.getBacklogItemFor(ctx, itemID) instead of h.storage.GetBacklogItem directly (no new interface — reuses the existing seam).
  • TestReportDuplicate_ReportsDistinctMessage_WhenCASPreconditionFails now injects the same readBarrier-backed getBacklogItemFn, mirroring TestRequestReview_ReportsDistinctMessage_WhenCASPreconditionFails.

Test plan

  • go test ./server/mcp/... -run TestReportDuplicate_ReportsDistinctMessage_WhenCASPreconditionFails -count=200 -cpu=1,2,4 -race — previously failed deterministically at -cpu=1; now 200/200 pass across all three GOMAXPROCS settings
  • go test ./server/mcp/... -count=10 -race — clean
  • make build && make test — only pre-existing failures are session/tmux's TestEnsureServerRunning_NoOp / TestKillOrphanedControlModeClients, both explicitly documented in .claude/rules/fix-flaky-tests-dont-defer.md as known sandboxed-worktree tmux-availability issues, unrelated to this change
  • make lint — clean

🤖 Generated with Claude Code

https://claude.ai/code/session_01W3683CH7Fs9zYR2yP3Dpba

…d seam

TestReportDuplicate_ReportsDistinctMessage_WhenCASPreconditionFails failed
deterministically under GOMAXPROCS=1 (successes=2 instead of 1): reportDuplicate
read the backlog item via h.storage.GetBacklogItem directly instead of the
overridable h.getBacklogItemFor seam requestReview already uses, so the test
had no way to force both racers' pre-transition reads to land before either's
write. Under scheduling delay, the loser could observe the winner's already-
committed status + VerificationNotes and take the idempotency short-circuit
instead of racing the CAS write.

This is the identical race shape already found and fixed for request_review
in #308 (a4793c1), which added the getBacklogItemFn hook + readBarrier —
reportDuplicate was never migrated onto that same seam. Fix: route
reportDuplicate through h.getBacklogItemFor and add the matching readBarrier
to its test, mirroring TestRequestReview_ReportsDistinctMessage_WhenCASPreconditionFails.

Verified: 200 runs at -cpu=1,2,4 -race, previously failing reliably at cpu=1,
now pass; server/mcp package clean at -count=10 -race.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W3683CH7Fs9zYR2yP3Dpba
@tstapler
tstapler marked this pull request as ready for review August 4, 2026 05:47
Copilot AI lite review requested due to automatic review settings August 4, 2026 05:47

Copilot AI 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.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Fixes a deterministic CAS-race test failure in report_duplicate by routing its pre-transition read through the existing overridable getBacklogItemFor seam, enabling the same read-barrier approach already used by request_review.

Changes:

  • Route reportDuplicate’s backlog-item read through h.getBacklogItemFor(...) instead of h.storage.GetBacklogItem(...).
  • Add a readBarrier-backed getBacklogItemFn in TestReportDuplicate_ReportsDistinctMessage_WhenCASPreconditionFails to deterministically synchronize competing reads.
  • Update getBacklogItemFor documentation to reflect its usage for both tools.

Reviewed changes

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

File Description
server/mcp/tools_backlog_test.go Adds a read barrier and injects getBacklogItemFn to make the CAS precondition race deterministic in the test.
server/mcp/tools_backlog.go Switches reportDuplicate to the shared getBacklogItemFor seam and updates comments accordingly.

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

Comment on lines +921 to +929
// Routed through the same overridable getBacklogItemFor seam request_review
// uses (not h.storage.GetBacklogItem directly) so tests can inject a
// readBarrier to deterministically force two racing report_duplicate calls'
// pre-transition reads to both land before either's write — see
// TestReportDuplicate_ReportsDistinctMessage_WhenCASPreconditionFails and its
// request_review analogue for why this matters: without it, a sufficiently
// delayed loser can observe the winner's already-committed status+notes and
// take the idempotency short-circuit above instead of racing the CAS write.
item, getErr := h.getBacklogItemFor(ctx, itemID)
// VerificationNotes and takes reportDuplicate's idempotency short-circuit
// (same duplicate_ref/reason, same session) instead of racing the CAS
// write — producing two successes instead of one success + one CAS
// failure. Mirrors TestRequestReview_ReportsDistinctMessage_WhenCASPreconditionFails's
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

✅ Registry Validation

Registry Validation
===================

Building backend scanner...
Scanning backend features...
Wrote 117 feature files to /tmp/tmp.ChEHPFEb42/backend
Wrote 15 feature files to /tmp/tmp.ChEHPFEb42/backend
Wrote 45 feature files to /tmp/tmp.ChEHPFEb42/backend
Wrote 8 feature files to /tmp/tmp.ChEHPFEb42/backend
Wrote 12 feature files to /tmp/tmp.ChEHPFEb42/backend

=== Backend Registry Diff ===
Committed: 181  Generated: 181  Divergence: 0.0%
⚠️  109 feature(s) missing // +api: marker (markerFound: false)

✅ Registry validation passed. Divergence: 0.0%

Test Coverage: 25/181 features have testIds (13.8%)

Divergence > 2% blocks merges. Coverage reporting is advisory only.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Go Benchmarks (Tier 1)

benchmarks/go/tier1-baseline.txt:96: missing iteration count
benchmarks/go/tier1-baseline.txt:195: missing iteration count
tier1-bench.txt:98: missing iteration count
tier1-bench.txt:197: missing iteration count
goos: linux
goarch: amd64
pkg: github.com/tstapler/stapler-squad/session
cpu: AMD EPYC 7763 64-Core Processor                
                                            │ tier1-bench.txt │
                                            │     sec/op      │
CircularBufferWrite_4KB-4                         81.65n ± 1%
CircularBufferWrite_4KB_Allocs-4                  82.66n ± 1%
CircularBufferGetRecent_4KB-4                     494.6n ± 2%
CircularBufferGetAll-4                            3.927µ ± 2%
GetTimeSinceLastMeaningfulOutput_HotPath-4        65.79n ± 0%
GetTimeSinceLastMeaningfulOutput_ColdPath-4       32.75n ± 0%
geomean                                           174.5n

                                            │ tier1-bench.txt │
                                            │      B/op       │
CircularBufferWrite_4KB-4                        0.000 ± 0%
CircularBufferWrite_4KB_Allocs-4                 0.000 ± 0%
CircularBufferGetRecent_4KB-4                  4.000Ki ± 0%
CircularBufferGetAll-4                         40.00Ki ± 0%
GetTimeSinceLastMeaningfulOutput_HotPath-4       0.000 ± 0%
GetTimeSinceLastMeaningfulOutput_ColdPath-4      0.000 ± 0%
geomean                                                     ¹
¹ summaries must be >0 to compute geomean

                                            │ tier1-bench.txt │
                                            │    allocs/op    │
CircularBufferWrite_4KB-4                        0.000 ± 0%
CircularBufferWrite_4KB_Allocs-4                 0.000 ± 0%
CircularBufferGetRecent_4KB-4                    1.000 ± 0%
CircularBufferGetAll-4                           1.000 ± 0%
GetTimeSinceLastMeaningfulOutput_HotPath-4       0.000 ± 0%
GetTimeSinceLastMeaningfulOutput_ColdPath-4      0.000 ± 0%
geomean                                                     ¹
¹ summaries must be >0 to compute geomean

                              │ tier1-bench.txt │
                              │       B/s       │
CircularBufferWrite_4KB-4          46.73Gi ± 1%
CircularBufferGetRecent_4KB-4      7.713Gi ± 2%
geomean                            18.98Gi

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                            │ benchmarks/go/tier1-baseline.txt │
                                            │              sec/op              │
CircularBufferWrite_4KB-4                                         194.3n ± 10%
CircularBufferWrite_4KB_Allocs-4                                  192.5n ±  7%
CircularBufferGetRecent_4KB-4                                     725.6n ± 13%
CircularBufferGetAll-4                                            5.138µ ±  3%
GetTimeSinceLastMeaningfulOutput_HotPath-4                        50.32n ±  0%
GetTimeSinceLastMeaningfulOutput_ColdPath-4                       25.50n ±  3%
geomean                                                           237.4n

                                            │ benchmarks/go/tier1-baseline.txt │
                                            │               B/op               │
CircularBufferWrite_4KB-4                                         0.000 ± 0%
CircularBufferWrite_4KB_Allocs-4                                  0.000 ± 0%
CircularBufferGetRecent_4KB-4                                   4.000Ki ± 0%
CircularBufferGetAll-4                                          40.00Ki ± 0%
GetTimeSinceLastMeaningfulOutput_HotPath-4                        0.000 ± 0%
GetTimeSinceLastMeaningfulOutput_ColdPath-4                       0.000 ± 0%
geomean                                                                      ¹
¹ summaries must be >0 to compute geomean

                                            │ benchmarks/go/tier1-baseline.txt │
                                            │            allocs/op             │
CircularBufferWrite_4KB-4                                         0.000 ± 0%
CircularBufferWrite_4KB_Allocs-4                                  0.000 ± 0%
CircularBufferGetRecent_4KB-4                                     1.000 ± 0%
CircularBufferGetAll-4                                            1.000 ± 0%
GetTimeSinceLastMeaningfulOutput_HotPath-4                        0.000 ± 0%
GetTimeSinceLastMeaningfulOutput_ColdPath-4                       0.000 ± 0%
geomean                                                                      ¹
¹ summaries must be >0 to compute geomean

                              │ benchmarks/go/tier1-baseline.txt │
                              │               B/s                │
CircularBufferWrite_4KB-4                          19.65Gi ±  8%
CircularBufferGetRecent_4KB-4                      5.258Gi ± 15%
geomean                                            10.16Gi

pkg: github.com/tstapler/stapler-squad/session/detection/ratelimit
cpu: AMD EPYC 7763 64-Core Processor                
                              │ tier1-bench.txt │
                              │     sec/op      │
StripANSI_PlainText-4               6.877n ± 0%
StripANSI_WithEscapes-4             748.0n ± 0%
ProcessOutput_InactiveState-4       6.339n ± 0%
geomean                             31.95n

                              │ tier1-bench.txt │
                              │      B/op       │
StripANSI_PlainText-4              0.000 ± 0%
StripANSI_WithEscapes-4            136.0 ± 0%
ProcessOutput_InactiveState-4      0.000 ± 0%
geomean                                       ¹
¹ summaries must be >0 to compute geomean

                              │ tier1-bench.txt │
                              │    allocs/op    │
StripANSI_PlainText-4              0.000 ± 0%
StripANSI_WithEscapes-4            5.000 ± 0%
ProcessOutput_InactiveState-4      0.000 ± 0%
geomean                                       ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                              │ benchmarks/go/tier1-baseline.txt │
                              │              sec/op              │
StripANSI_PlainText-4                                6.832n ± 0%
StripANSI_WithEscapes-4                              705.1n ± 1%
ProcessOutput_InactiveState-4                        17.04n ± 0%
geomean                                              43.46n

                              │ benchmarks/go/tier1-baseline.txt │
                              │               B/op               │
StripANSI_PlainText-4                               0.000 ± 0%
StripANSI_WithEscapes-4                             136.0 ± 0%
ProcessOutput_InactiveState-4                       0.000 ± 0%
geomean                                                        ¹
¹ summaries must be >0 to compute geomean

                              │ benchmarks/go/tier1-baseline.txt │
                              │            allocs/op             │
StripANSI_PlainText-4                               0.000 ± 0%
StripANSI_WithEscapes-4                             5.000 ± 0%
ProcessOutput_InactiveState-4                       0.000 ± 0%
geomean                                                        ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/queue
cpu: AMD EPYC 7763 64-Core Processor                
                              │ tier1-bench.txt │
                              │     sec/op      │
ReviewQueue_ConcurrentReads-4       84.77n ± 3%
ReviewQueue_Add-4                   508.9n ± 1%
geomean                             207.7n

                              │ tier1-bench.txt │
                              │      B/op       │
ReviewQueue_ConcurrentReads-4      0.000 ± 0%
ReviewQueue_Add-4                  640.0 ± 0%
geomean                                       ¹
¹ summaries must be >0 to compute geomean

                              │ tier1-bench.txt │
                              │    allocs/op    │
ReviewQueue_ConcurrentReads-4      0.000 ± 0%
ReviewQueue_Add-4                  4.000 ± 0%
geomean                                       ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                              │ benchmarks/go/tier1-baseline.txt │
                              │              sec/op              │
ReviewQueue_ConcurrentReads-4                        87.73n ± 1%
ReviewQueue_Add-4                                    486.2n ± 1%
geomean                                              206.5n

                              │ benchmarks/go/tier1-baseline.txt │
                              │               B/op               │
ReviewQueue_ConcurrentReads-4                       0.000 ± 0%
ReviewQueue_Add-4                                   640.0 ± 0%
geomean                                                        ¹
¹ summaries must be >0 to compute geomean

                              │ benchmarks/go/tier1-baseline.txt │
                              │            allocs/op             │
ReviewQueue_ConcurrentReads-4                       0.000 ± 0%
ReviewQueue_Add-4                                   4.000 ± 0%
geomean                                                        ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/scrollback
cpu: AMD EPYC 7763 64-Core Processor                
                                      │ tier1-bench.txt │
                                      │     sec/op      │
CircularBuffer_ConcurrentReadWrite-4        3.829µ ± 3%
CircularBuffer_BurstAppend-4                101.5µ ± 0%
CircularBuffer_GetLastN_LargeBuffer-4       20.06µ ± 1%
CircularBuffer_GetRange_Sequential-4        14.22µ ± 8%
CircularBufferAppend-4                      99.16n ± 0%
CircularBufferGetLastN-4                    2.609µ ± 3%
CircularBufferConcurrentAppend-4            127.5n ± 0%
geomean                                     3.228µ

                                      │ tier1-bench.txt │
                                      │      B/op       │
CircularBuffer_ConcurrentReadWrite-4       6.062Ki ± 0%
CircularBuffer_BurstAppend-4               62.50Ki ± 0%
CircularBuffer_GetLastN_LargeBuffer-4      56.00Ki ± 0%
CircularBuffer_GetRange_Sequential-4       28.00Ki ± 0%
CircularBufferAppend-4                       24.00 ± 0%
CircularBufferGetLastN-4                   6.000Ki ± 0%
CircularBufferConcurrentAppend-4             32.00 ± 0%
geomean                                    3.077Ki

                                      │ tier1-bench.txt │
                                      │    allocs/op    │
CircularBuffer_ConcurrentReadWrite-4         2.000 ± 0%
CircularBuffer_BurstAppend-4                1.000k ± 0%
CircularBuffer_GetLastN_LargeBuffer-4        1.000 ± 0%
CircularBuffer_GetRange_Sequential-4         1.000 ± 0%
CircularBufferAppend-4                       1.000 ± 0%
CircularBufferGetLastN-4                     1.000 ± 0%
CircularBufferConcurrentAppend-4             1.000 ± 0%
geomean                                      2.962

                             │ tier1-bench.txt │
                             │       B/s       │
CircularBuffer_BurstAppend-4      601.6Mi ± 0%

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                      │ benchmarks/go/tier1-baseline.txt │
                                      │              sec/op              │
CircularBuffer_ConcurrentReadWrite-4                         3.347µ ± 1%
CircularBuffer_BurstAppend-4                                 115.2µ ± 1%
CircularBuffer_GetLastN_LargeBuffer-4                        21.17µ ± 1%
CircularBuffer_GetRange_Sequential-4                         10.14µ ± 1%
CircularBufferAppend-4                                       111.4n ± 1%
CircularBufferGetLastN-4                                     2.263µ ± 2%
CircularBufferConcurrentAppend-4                             153.8n ± 2%
geomean                                                      3.168µ

                                      │ benchmarks/go/tier1-baseline.txt │
                                      │               B/op               │
CircularBuffer_ConcurrentReadWrite-4                        6.062Ki ± 0%
CircularBuffer_BurstAppend-4                                62.50Ki ± 0%
CircularBuffer_GetLastN_LargeBuffer-4                       56.00Ki ± 0%
CircularBuffer_GetRange_Sequential-4                        28.00Ki ± 0%
CircularBufferAppend-4                                        24.00 ± 0%
CircularBufferGetLastN-4                                    6.000Ki ± 0%
CircularBufferConcurrentAppend-4                              32.00 ± 0%
geomean                                                     3.077Ki

                                      │ benchmarks/go/tier1-baseline.txt │
                                      │            allocs/op             │
CircularBuffer_ConcurrentReadWrite-4                          2.000 ± 0%
CircularBuffer_BurstAppend-4                                 1.000k ± 0%
CircularBuffer_GetLastN_LargeBuffer-4                         1.000 ± 0%
CircularBuffer_GetRange_Sequential-4                          1.000 ± 0%
CircularBufferAppend-4                                        1.000 ± 0%
CircularBufferGetLastN-4                                      1.000 ± 0%
CircularBufferConcurrentAppend-4                              1.000 ± 0%
geomean                                                       2.962

                             │ benchmarks/go/tier1-baseline.txt │
                             │               B/s                │
CircularBuffer_BurstAppend-4                       529.9Mi ± 1%

pkg: github.com/tstapler/stapler-squad/session/tmux
cpu: AMD EPYC 7763 64-Core Processor                
                             │ tier1-bench.txt │
                             │     sec/op      │
StripANSICodes_PlainText-4         6.893n ± 1%
StripANSICodes_WithEscapes-4       687.9n ± 0%
IsBanner_PlainText-4               479.5n ± 1%
geomean                            131.5n

                             │ tier1-bench.txt │
                             │      B/op       │
StripANSICodes_PlainText-4        0.000 ± 0%
StripANSICodes_WithEscapes-4      56.00 ± 0%
IsBanner_PlainText-4              0.000 ± 0%
geomean                                      ¹
¹ summaries must be >0 to compute geomean

                             │ tier1-bench.txt │
                             │    allocs/op    │
StripANSICodes_PlainText-4        0.000 ± 0%
StripANSICodes_WithEscapes-4      4.000 ± 0%
IsBanner_PlainText-4              0.000 ± 0%
geomean                                      ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                             │ benchmarks/go/tier1-baseline.txt │
                             │              sec/op              │
StripANSICodes_PlainText-4                          6.952n ± 1%
StripANSICodes_WithEscapes-4                        669.3n ± 1%
IsBanner_PlainText-4                                456.9n ± 0%
geomean                                             128.6n

                             │ benchmarks/go/tier1-baseline.txt │
                             │               B/op               │
StripANSICodes_PlainText-4                         0.000 ± 0%
StripANSICodes_WithEscapes-4                       56.00 ± 0%
IsBanner_PlainText-4                               0.000 ± 0%
geomean                                                       ¹
¹ summaries must be >0 to compute geomean

                             │ benchmarks/go/tier1-baseline.txt │
                             │            allocs/op             │
StripANSICodes_PlainText-4                         0.000 ± 0%
StripANSICodes_WithEscapes-4                       4.000 ± 0%
IsBanner_PlainText-4                               0.000 ± 0%
geomean                                                       ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/tokens
cpu: AMD EPYC 7763 64-Core Processor                
                                   │ tier1-bench.txt │
                                   │     sec/op      │
TokenParser_ProcessUserEntry-4           5.269m ± 1%
DetectCommandsInText/NoSlash-4           7.496n ± 0%
DetectCommandsInText/WithCommand-4       1.661µ ± 1%
geomean                                  4.033µ

                                   │ tier1-bench.txt │
                                   │      B/op       │
TokenParser_ProcessUserEntry-4        11.02Mi ± 0%
DetectCommandsInText/NoSlash-4          0.000 ± 0%
DetectCommandsInText/WithCommand-4      433.0 ± 0%
geomean                                            ¹
¹ summaries must be >0 to compute geomean

                                   │ tier1-bench.txt │
                                   │    allocs/op    │
TokenParser_ProcessUserEntry-4          34.00 ± 0%
DetectCommandsInText/NoSlash-4          0.000 ± 0%
DetectCommandsInText/WithCommand-4      6.000 ± 0%
geomean                                            ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                   │ benchmarks/go/tier1-baseline.txt │
                                   │              sec/op              │
TokenParser_ProcessUserEntry-4                            4.907m ± 2%
DetectCommandsInText/NoSlash-4                            6.635n ± 0%
DetectCommandsInText/WithCommand-4                        1.643µ ± 1%
geomean                                                   3.768µ

                                   │ benchmarks/go/tier1-baseline.txt │
                                   │               B/op               │
TokenParser_ProcessUserEntry-4                         11.02Mi ± 0%
DetectCommandsInText/NoSlash-4                           0.000 ± 0%
DetectCommandsInText/WithCommand-4                       433.0 ± 0%
geomean                                                             ¹
¹ summaries must be >0 to compute geomean

                                   │ benchmarks/go/tier1-baseline.txt │
                                   │            allocs/op             │
TokenParser_ProcessUserEntry-4                           34.00 ± 0%
DetectCommandsInText/NoSlash-4                           0.000 ± 0%
DetectCommandsInText/WithCommand-4                       6.000 ± 0%
geomean                                                             ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/tstapler/stapler-squad/session/unfinished
cpu: AMD EPYC 7763 64-Core Processor                
                               │ tier1-bench.txt │
                               │     sec/op      │
DiffShortstat/GitVCSReader-4         3.143m ± 0%
DiffShortstat/GoGitVCSReader-4       76.79n ± 0%
DiffShortstatCached-4                75.79n ± 1%
geomean                              2.635µ

                               │ tier1-bench.txt │
                               │      B/op       │
DiffShortstat/GitVCSReader-4      62.57Ki ± 0%
DiffShortstat/GoGitVCSReader-4      0.000 ± 0%
DiffShortstatCached-4               0.000 ± 0%
geomean                                        ¹
¹ summaries must be >0 to compute geomean

                               │ tier1-bench.txt │
                               │    allocs/op    │
DiffShortstat/GitVCSReader-4        360.0 ± 0%
DiffShortstat/GoGitVCSReader-4      0.000 ± 0%
DiffShortstatCached-4               0.000 ± 0%
geomean                                        ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                               │ benchmarks/go/tier1-baseline.txt │
                               │              sec/op              │
DiffShortstat/GitVCSReader-4                          2.341m ± 1%
DiffShortstat/GoGitVCSReader-4                        61.70n ± 3%
DiffShortstatCached-4                                 60.49n ± 0%
geomean                                               2.060µ

                               │ benchmarks/go/tier1-baseline.txt │
                               │               B/op               │
DiffShortstat/GitVCSReader-4                       62.57Ki ± 0%
DiffShortstat/GoGitVCSReader-4                       0.000 ± 0%
DiffShortstatCached-4                                0.000 ± 0%
geomean                                                         ¹
¹ summaries must be >0 to compute geomean

                               │ benchmarks/go/tier1-baseline.txt │
                               │            allocs/op             │
DiffShortstat/GitVCSReader-4                         360.0 ± 0%
DiffShortstat/GoGitVCSReader-4                       0.000 ± 0%
DiffShortstatCached-4                                0.000 ± 0%
geomean                                                         ¹
¹ summaries must be >0 to compute geomean

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

E2E RPC Latency

list-sessions-ttfb-mean: 7ms (▲ slower +22.9%; baseline: 6ms)
list-sessions-total-mean: 10ms (▲ slower +5.1%; baseline: 9ms)

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Frontend Terminal Throughput

terminal-throughput-mean: 12 KB/s ▼ -27.5% (baseline: 16 KB/s)
terminal-throughput-p50: 15 KB/s ▼ -7.9% (baseline: 17 KB/s)

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

📊 Feature E2E Coverage

Feature coverage report unavailable

Run make e2e-report locally to view the full Allure report.

@tstapler
tstapler merged commit dcc939e into main Aug 4, 2026
23 checks passed
@tstapler
tstapler deleted the fix/report-duplicate-cas-race-test-flake branch August 4, 2026 06:01
tstapler added a commit that referenced this pull request Aug 4, 2026
PR #332 merged to main with an independent fix for reportDuplicate's
CAS-race test flake (same getBacklogItemFor + readBarrier fix this
branch also arrived at independently, since this worktree branched
before #332 merged). Resolved by keeping main's version for the
reportDuplicate parts (tools_backlog.go's read + doc comment,
tools_backlog_test.go's readBarrier + struct field ordering) rather
than reintroducing a second, divergent copy of the same fix — this
branch's genuinely new work (reportPRCreated's getBacklogItemFor
migration, SetBacklogItemPRAndTransition's atomic-UPDATE fix, and
BUG-058) is unaffected.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants