Skip to content

fix(history-linker): preserve paused/hibernated session UUID on rescan#118

Merged
tstapler merged 2 commits into
mainfrom
stapler-squad-resume
Jun 19, 2026
Merged

fix(history-linker): preserve paused/hibernated session UUID on rescan#118
tstapler merged 2 commits into
mainfrom
stapler-squad-resume

Conversation

@tstapler

Copy link
Copy Markdown
Owner

Summary

  • Bug: Resuming a paused session picked up the wrong conversation history when other sessions had run in the same directory after the pause
  • Root cause: HistoryLinker.correlateSession() called DetectByPath (returns the most-recently-modified JSONL) for already-linked sessions regardless of status; newer files from other sessions overwrote the correct stored UUID
  • Fix: Gate the path-based fallback so it is skipped for already-linked Paused and Hibernated sessions; their stored UUID is the authoritative value

What changed

session/history_linker.go — 10-line change in correlateSession():

// Before (buggy): always ran path fallback when PID detection found nothing
if info == nil { DetectByPath... }

// After (correct): skip for already-linked paused/hibernated sessions
pathFallbackAllowed := !alreadyLinked || (inst.Status != Paused && inst.Status != Hibernated)
if info == nil && pathFallbackAllowed { DetectByPath... }

Active sessions are unaffected — they still use the path fallback, which is needed so that /clear-triggered UUID changes are detected when PID inspection is unavailable (test environments) or races.

session/history_linker_test.go — 2 regression tests:

  • TestHistoryLinker_CorrelateSession_PausedSession_PreservesUUID
  • TestHistoryLinker_CorrelateSession_HibernatedSession_PreservesUUID

Reproduction scenario

  1. Start session A in a directory without a worktree (e.g., a personal wiki at ~/wiki/)
  2. Pause session A — UUID uuid-A is stored
  3. Start sessions B and C in the same ~/wiki/ directory (creating newer JSONL files)
  4. Resume session A → before fix: launches claude --resume uuid-C (wrong); after fix: launches claude --resume uuid-A (correct)

Test plan

  • TestHistoryLinker_CorrelateSession_PausedSession_PreservesUUID — core regression
  • TestHistoryLinker_CorrelateSession_HibernatedSession_PreservesUUID — same for hibernated
  • TestHistoryLinker_CorrelateSession_Force_UpdatesUUIDAfterClear — existing test; confirms active sessions still update UUID after /clear
  • Full make test — all packages pass

🤖 Generated with Claude Code

HistoryLinker.correlateSession() was calling DetectByPath (path-based
fallback) for already-linked sessions regardless of their state. When a
session was paused and other sessions subsequently ran in the same
directory, their newer JSONL files became the "most recently modified"
candidate. The next ScanAll() call (triggered by fsnotify or on server
restart) then overwrote the paused session's correct conversation UUID
with a different session's UUID, causing resume to launch with --resume
<wrong-uuid> and continue the wrong conversation.

Gate the path fallback so it is skipped for already-linked sessions in
Paused or Hibernated state. Unlinked sessions and Active sessions (where
/clear UUID detection via path heuristic is still needed) are unaffected.

Adds two regression tests:
- TestHistoryLinker_CorrelateSession_PausedSession_PreservesUUID
- TestHistoryLinker_CorrelateSession_HibernatedSession_PreservesUUID

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Registry Validation

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

Building backend scanner...
Scanning backend features...
Wrote 108 feature files to /tmp/tmp.1QATMsjTpW/backend
Wrote 14 feature files to /tmp/tmp.1QATMsjTpW/backend
Wrote 22 feature files to /tmp/tmp.1QATMsjTpW/backend
Wrote 6 feature files to /tmp/tmp.1QATMsjTpW/backend

=== Backend Registry Diff ===
Committed: 143  Generated: 141  Divergence: 1.4%
⚠️  Removed RPCs:
  - backlog:spawn-session-autonomous
  - upload:image
⚠️  101 feature(s) missing // +api: marker (markerFound: false)

⚠️  Divergence 1.4% above warning threshold.

Test Coverage: 97/143 features have testIds (67.8%)

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

@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

E2E RPC Latency

list-sessions-ttfb-mean: 6ms (▼ faster -5.7%; baseline: 6ms)
list-sessions-total-mean: 9ms (▼ faster -1.6%; baseline: 9ms)

@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

📊 Feature E2E Coverage

Feature coverage report unavailable

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

@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Go Benchmarks (Tier 1)

benchmarks/go/tier1-baseline.txt:6: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:2029: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:3999: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:5986: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:7913: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:9843: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:11747: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:13713: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:15695: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:22355: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:29160: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:35689: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:42608: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:49123: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:55905: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:62417: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:69062: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:73747: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:79048: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:84395: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:89944: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:95271: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:100328: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:105863: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:110960: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:117984: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:124863: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:131001: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:138181: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:145000: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:151567: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:158840: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:166468: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:173771: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:180655: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:188171: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:195053: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:202781: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:209879: parsing iteration count: invalid syntax
benchmarks/go/tier1-baseline.txt:217453: parsing iteration count: invalid syntax
tier1-bench.txt:6: parsing iteration count: invalid syntax
tier1-bench.txt:2053: parsing iteration count: invalid syntax
tier1-bench.txt:4134: parsing iteration count: invalid syntax
tier1-bench.txt:6214: parsing iteration count: invalid syntax
tier1-bench.txt:8289: parsing iteration count: invalid syntax
tier1-bench.txt:10349: parsing iteration count: invalid syntax
tier1-bench.txt:12412: parsing iteration count: invalid syntax
tier1-bench.txt:14470: parsing iteration count: invalid syntax
tier1-bench.txt:16543: parsing iteration count: invalid syntax
tier1-bench.txt:22783: parsing iteration count: invalid syntax
tier1-bench.txt:29331: parsing iteration count: invalid syntax
tier1-bench.txt:36724: parsing iteration count: invalid syntax
tier1-bench.txt:43430: parsing iteration count: invalid syntax
tier1-bench.txt:49989: parsing iteration count: invalid syntax
tier1-bench.txt:56762: parsing iteration count: invalid syntax
tier1-bench.txt:62789: parsing iteration count: invalid syntax
tier1-bench.txt:69511: parsing iteration count: invalid syntax
tier1-bench.txt:74549: parsing iteration count: invalid syntax
tier1-bench.txt:79841: parsing iteration count: invalid syntax
tier1-bench.txt:84975: parsing iteration count: invalid syntax
tier1-bench.txt:90305: parsing iteration count: invalid syntax
tier1-bench.txt:95760: parsing iteration count: invalid syntax
tier1-bench.txt:101466: parsing iteration count: invalid syntax
tier1-bench.txt:106852: parsing iteration count: invalid syntax
tier1-bench.txt:112110: parsing iteration count: invalid syntax
tier1-bench.txt:118845: parsing iteration count: invalid syntax
tier1-bench.txt:125982: parsing iteration count: invalid syntax
tier1-bench.txt:132540: parsing iteration count: invalid syntax
tier1-bench.txt:139559: parsing iteration count: invalid syntax
tier1-bench.txt:146446: parsing iteration count: invalid syntax
tier1-bench.txt:152609: parsing iteration count: invalid syntax
tier1-bench.txt:159073: parsing iteration count: invalid syntax
tier1-bench.txt:165973: parsing iteration count: invalid syntax
tier1-bench.txt:173370: parsing iteration count: invalid syntax
tier1-bench.txt:180444: parsing iteration count: invalid syntax
tier1-bench.txt:187479: parsing iteration count: invalid syntax
tier1-bench.txt:194419: parsing iteration count: invalid syntax
tier1-bench.txt:201701: parsing iteration count: invalid syntax
tier1-bench.txt:209652: parsing iteration count: invalid syntax
tier1-bench.txt:217620: parsing iteration count: invalid syntax
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                         83.72n ± 2%
CircularBufferWrite_4KB_Allocs-4                  85.39n ± 2%
CircularBufferGetRecent_4KB-4                     459.5n ± 1%
CircularBufferGetAll-4                            3.568µ ± 2%
GetTimeSinceLastMeaningfulOutput_HotPath-4        65.83n ± 1%
GetTimeSinceLastMeaningfulOutput_ColdPath-4       39.12n ± 0%
geomean                                           176.4n

                                            │ 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          45.57Gi ± 3%
CircularBufferGetRecent_4KB-4      8.303Gi ± 1%
geomean                            19.45Gi

cpu: AMD EPYC 9V74 80-Core Processor                
                                            │ benchmarks/go/tier1-baseline.txt │
                                            │              sec/op              │
CircularBufferWrite_4KB-4                                          80.69n ± 1%
CircularBufferWrite_4KB_Allocs-4                                   80.17n ± 1%
CircularBufferGetRecent_4KB-4                                      501.6n ± 3%
CircularBufferGetAll-4                                             3.734µ ± 1%
GetTimeSinceLastMeaningfulOutput_HotPath-4                         70.53n ± 1%
GetTimeSinceLastMeaningfulOutput_ColdPath-4                        41.91n ± 0%
geomean                                                            181.6n

                                            │ 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                           47.28Gi ± 2%
CircularBufferGetRecent_4KB-4                       7.606Gi ± 2%
geomean                                             18.96Gi

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.871n ± 0%
StripANSI_WithEscapes-4             729.6n ± 1%
ProcessOutput_InactiveState-4       6.052n ± 0%
geomean                             31.19n

                              │ 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: AMD EPYC 9V74 80-Core Processor                
                              │ benchmarks/go/tier1-baseline.txt │
                              │              sec/op              │
StripANSI_PlainText-4                                6.989n ± 5%
StripANSI_WithEscapes-4                              665.8n ± 0%
ProcessOutput_InactiveState-4                        6.620n ± 1%
geomean                                              31.35n

                              │ 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       87.04n ± 2%
ReviewQueue_Add-4                   463.3n ± 1%
geomean                             200.8n

                              │ 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: AMD EPYC 9V74 80-Core Processor                
                              │ benchmarks/go/tier1-baseline.txt │
                              │              sec/op              │
ReviewQueue_ConcurrentReads-4                       82.41n ± 10%
ReviewQueue_Add-4                                   492.9n ±  1%
geomean                                             201.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.304µ ± 1%
CircularBuffer_BurstAppend-4                102.7µ ± 0%
CircularBuffer_GetLastN_LargeBuffer-4       16.60µ ± 4%
CircularBuffer_GetRange_Sequential-4        9.171µ ± 1%
CircularBufferAppend-4                      97.01n ± 0%
CircularBufferGetLastN-4                    1.732µ ± 1%
CircularBufferConcurrentAppend-4            127.4n ± 2%
geomean                                     2.721µ

                                      │ 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      594.3Mi ± 3%

cpu: AMD EPYC 9V74 80-Core Processor                
                                      │ benchmarks/go/tier1-baseline.txt │
                                      │              sec/op              │
CircularBuffer_ConcurrentReadWrite-4                         3.193µ ± 1%
CircularBuffer_BurstAppend-4                                 105.2µ ± 0%
CircularBuffer_GetLastN_LargeBuffer-4                        16.74µ ± 3%
CircularBuffer_GetRange_Sequential-4                         10.22µ ± 2%
CircularBufferAppend-4                                       105.6n ± 0%
CircularBufferGetLastN-4                                     1.897µ ± 2%
CircularBufferConcurrentAppend-4                             137.2n ± 0%
geomean                                                      2.864µ

                                      │ 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                       580.3Mi ± 0%

pkg: github.com/tstapler/stapler-squad/session/tmux
cpu: AMD EPYC 7763 64-Core Processor                
                             │ tier1-bench.txt │
                             │     sec/op      │
StripANSICodes_PlainText-4         6.873n ± 0%
StripANSICodes_WithEscapes-4       728.4n ± 0%
IsBanner_PlainText-4               454.2n ± 0%
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: AMD EPYC 9V74 80-Core Processor                
                             │ benchmarks/go/tier1-baseline.txt │
                             │              sec/op              │
StripANSICodes_PlainText-4                          6.349n ± 2%
StripANSICodes_WithEscapes-4                        600.0n ± 0%
IsBanner_PlainText-4                                450.8n ± 1%
geomean                                             119.7n

                             │ 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.126m ± 1%
DetectCommandsInText/NoSlash-4           7.194n ± 0%
DetectCommandsInText/WithCommand-4       1.605µ ± 1%
geomean                                  3.897µ

                                   │ 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: AMD EPYC 9V74 80-Core Processor                
                                   │ benchmarks/go/tier1-baseline.txt │
                                   │              sec/op              │
TokenParser_ProcessUserEntry-4                            5.538m ± 1%
DetectCommandsInText/NoSlash-4                            6.707n ± 5%
DetectCommandsInText/WithCommand-4                        1.454µ ± 1%
geomean                                                   3.779µ

                                   │ 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.077m ± 1%
DiffShortstat/GoGitVCSReader-4       75.39n ± 0%
DiffShortstatCached-4                76.49n ± 0%
geomean                              2.608µ

                               │ tier1-bench.txt │
                               │      B/op       │
DiffShortstat/GitVCSReader-4      56.58Ki ± 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        368.0 ± 0%
DiffShortstat/GoGitVCSReader-4      0.000 ± 0%
DiffShortstatCached-4               0.000 ± 0%
geomean                                        ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                               │ benchmarks/go/tier1-baseline.txt │
                               │              sec/op              │
DiffShortstat/GitVCSReader-4                          3.456m ± 1%
DiffShortstat/GoGitVCSReader-4                        80.87n ± 1%
DiffShortstatCached-4                                 80.77n ± 0%
geomean                                               2.826µ

                               │ benchmarks/go/tier1-baseline.txt │
                               │               B/op               │
DiffShortstat/GitVCSReader-4                       56.58Ki ± 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                         368.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 Jun 19, 2026

Copy link
Copy Markdown
Contributor

Frontend Terminal Throughput

terminal-throughput-mean: 16 KB/s ▲ +1.2% (baseline: 16 KB/s)
terminal-throughput-p50: 16 KB/s ▲ +1.8% (baseline: 16 KB/s)

Stopped sessions have no live process (terminal state) and are subject
to the same "most recently modified JSONL" misidentification as Paused
and Hibernated sessions. Extend the pathFallbackAllowed guard to include
Stopped, and add a regression test.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Registry Validation

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

Building backend scanner...
Scanning backend features...
Wrote 108 feature files to /tmp/tmp.IQA77ZZLJn/backend
Wrote 14 feature files to /tmp/tmp.IQA77ZZLJn/backend
Wrote 22 feature files to /tmp/tmp.IQA77ZZLJn/backend
Wrote 6 feature files to /tmp/tmp.IQA77ZZLJn/backend

=== Backend Registry Diff ===
Committed: 143  Generated: 141  Divergence: 1.4%
⚠️  Removed RPCs:
  - backlog:spawn-session-autonomous
  - upload:image
⚠️  101 feature(s) missing // +api: marker (markerFound: false)

⚠️  Divergence 1.4% above warning threshold.

Test Coverage: 97/143 features have testIds (67.8%)

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

@tstapler tstapler merged commit fb0e49f into main Jun 19, 2026
20 checks passed
@tstapler tstapler deleted the stapler-squad-resume branch June 19, 2026 06:40
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