You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/bug-fixes.md
+60Lines changed: 60 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,66 @@ Each bug fix entry should include:
12
12
13
13
## Bug Fixes
14
14
15
+
### 2026-07-22: Reachable infinite-loop vulnerability in `golang.org/x/text`
16
+
17
+
**Description:**
18
+
The `govulncheck` gate on PR #76 reported GO-2026-5970, an infinite loop on invalid input in `golang.org/x/text`. Itemize resolved `v0.37.0`, and the scanner found a reachable path through the CLI's Sentry-backed telemetry dependencies.
19
+
20
+
**Test Case:**
21
+
```bash
22
+
go run golang.org/x/vuln/cmd/govulncheck@v1.3.0 ./...
23
+
# Before: reports reachable GO-2026-5970 and exits nonzero.
24
+
# After: reports zero reachable vulnerabilities.
25
+
```
26
+
27
+
**Root Cause:**
28
+
The module graph selected `golang.org/x/text v0.37.0`, which predates the upstream fix in `v0.39.0`.
29
+
30
+
**Fix Applied:**
31
+
Upgraded the indirect `golang.org/x/text` dependency to `v0.39.0`.
32
+
33
+
**Verification:**
34
+
- The same `govulncheck` command that failed in CI passes locally.
35
+
- Full pre-commit and race suites pass.
36
+
37
+
---
38
+
39
+
### 2026-07-22: Transient Walmart and Monarch timeouts caused avoidable order failures
40
+
41
+
**Description:**
42
+
A production Walmart sync hit one 30-second Monarch update timeout and one 30-second Walmart ledger timeout. The Monarch multi-delivery consolidation stopped after its first idempotent update attempt. The Walmart handler then triggered a second ledger request while checking refunds; that request succeeded, but the original charge lookup had already returned an error, so the order fell back to its summary total and failed to match. The CLI nevertheless ended with `Sync completed successfully.` while reporting two errors.
The Walmart adapter relied on the upstream client's retry policy, which retries rate limits but not HTTP client timeouts. Consolidation made only one Monarch update attempt even though it sets the same amount and note on every attempt. Summary wording depended only on whether at least one order was processed, not whether any other order failed.
62
+
63
+
**Fix Applied:**
64
+
Walmart ledger reads and the idempotent Monarch consolidation update now retry once for network timeouts, while respecting caller cancellation and returning permanent errors immediately. Every Monarch update attempt remains in the API audit log. If an update reached Monarch but its response timed out, a later run recognizes the exact original consolidation note, finds any still-posted component transactions, preserves the note, and finishes deleting those extras before applying splits. Production summaries now say `Sync completed with N errors.` whenever the result contains errors and reserve the success message for error-free runs.
65
+
66
+
**Verification:**
67
+
- All five regression tests failed before the fix and pass after it.
68
+
-`go test ./...` passes.
69
+
- A rebuilt live dry-run recognized the interrupted `$70.28` consolidation and identified its still-posted `$64.22` component transaction.
70
+
- The authorized production repair preserved the `$70.28` primary, deleted its `$64.22` leftover, and applied two splits. It also consolidated the `$75.66` order from `$6.16 + $9.51 + $58.99`, deleted both extras, and applied two splits.
71
+
- Direct Monarch read-back returned both primary amounts, notes, and two splits each; all three deleted component IDs returned `ErrNotFound`.
72
+
73
+
---
74
+
15
75
### 2026-07-16: Completed Walmart in-store receipts were treated as payment pending
0 commit comments