From c9d06bf43598e73a1b749e911e6a0104e85777c0 Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 16:05:35 -0700 Subject: [PATCH 1/7] Remove fairness validation --- loadgen/ebbandflow/ebb_and_flow.go | 2 - loadgen/ebbandflow/fairness_tracker.go | 451 -------------------- loadgen/ebbandflow/fairness_tracker_test.go | 348 --------------- scenarios/ebb_and_flow.go | 51 +-- scenarios/ebb_and_flow_test.go | 11 +- workers/go/ebbandflow/activities.go | 56 --- workers/go/ebbandflow/workflow.go | 25 +- workers/go/go.mod | 1 - workers/go/go.sum | 2 - workers/go/worker/worker.go | 1 - 10 files changed, 5 insertions(+), 943 deletions(-) delete mode 100644 loadgen/ebbandflow/fairness_tracker.go delete mode 100644 loadgen/ebbandflow/fairness_tracker_test.go diff --git a/loadgen/ebbandflow/ebb_and_flow.go b/loadgen/ebbandflow/ebb_and_flow.go index 080fa8c2..8122a41f 100644 --- a/loadgen/ebbandflow/ebb_and_flow.go +++ b/loadgen/ebbandflow/ebb_and_flow.go @@ -15,7 +15,5 @@ type WorkflowOutput struct { } type ActivityTiming struct { - FairnessKey string `json:"k"` - FairnessWeight float32 `json:"w"` ScheduleToStart time.Duration `json:"d"` } diff --git a/loadgen/ebbandflow/fairness_tracker.go b/loadgen/ebbandflow/fairness_tracker.go deleted file mode 100644 index c352f3e0..00000000 --- a/loadgen/ebbandflow/fairness_tracker.go +++ /dev/null @@ -1,451 +0,0 @@ -package ebbandflow - -import ( - "container/heap" - "fmt" - "math" - "sort" - "sync" - "time" - - "golang.org/x/exp/maps" -) - -// 2.0 means P95 can be up to 2x the P50 before violation. -const significantDiffThreshold = 2.0 - -// latencyHeap is a min-heap of float64 values (milliseconds). - -type latencyHeap []float64 - -func (h latencyHeap) Len() int { return len(h) } -func (h latencyHeap) Less(i, j int) bool { return h[i] < h[j] } -func (h latencyHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } - -func (h *latencyHeap) Push(x interface{}) { - *h = append(*h, x.(float64)) -} - -func (h *latencyHeap) Pop() interface{} { - old := *h - n := len(old) - x := old[n-1] - *h = old[0 : n-1] - return x -} - -type FairnessTracker struct { - mu sync.RWMutex - latencies map[string]*latencyHeap // fairness key -> heap of latencies in milliseconds - weights map[string]float32 // fairness key -> single weight -} - -type ViolatorReport struct { - FairnessKey string `json:"fairnessKey"` - P95 float64 `json:"p95"` - Weight float64 `json:"weight"` - WeightAdjustedP95 float64 `json:"weightAdjustedP95"` - ViolationSeverity float64 `json:"violationSeverity"` -} - -type FairnessReport struct { - KeyCount int `json:"keyCount"` - WeightAdjustedFairness float64 `json:"weightAdjustedFairness"` - JainsFairnessIndex float64 `json:"jainsFairnessIndex"` - CoefficientOfVariation float64 `json:"coefficientOfVariation"` - AtkinsonIndex float64 `json:"atkinsonIndex"` - Violations map[string]string `json:"violations"` // key is fairness indicator - TopViolators []ViolatorReport `json:"topViolators"` -} - -func NewFairnessTracker() *FairnessTracker { - return &FairnessTracker{ - latencies: make(map[string]*latencyHeap), - weights: make(map[string]float32), - } -} - -func (ft *FairnessTracker) Track( - fairnessKey string, - fairnessWeight float32, - scheduleToStartLatency time.Duration, -) { - if fairnessKey == "" { - return - } - ft.mu.Lock() - defer ft.mu.Unlock() - - h, exists := ft.latencies[fairnessKey] - if !exists { - h = &latencyHeap{} - heap.Init(h) - ft.latencies[fairnessKey] = h - } - heap.Push(h, float64(scheduleToStartLatency.Milliseconds())) - ft.weights[fairnessKey] = fairnessWeight -} - -// GetReport returns a processed fairness report without clearing the data. -func (ft *FairnessTracker) GetReport() (*FairnessReport, error) { - ft.mu.RLock() - if len(ft.latencies) < 2 { - ft.mu.RUnlock() - return nil, fmt.Errorf("need at least 2 fairness keys, got %d", len(ft.latencies)) - } - - heapData := make(map[string][]float64, len(ft.latencies)) - weights := make(map[string]float64, len(ft.weights)) - for key, h := range ft.latencies { - if h.Len() == 0 { - continue - } - values := make([]float64, h.Len()) - copy(values, *h) - heapData[key] = values - - // Get the weight for this key - if weight, exists := ft.weights[key]; exists { - weights[key] = float64(weight) - } else { - weights[key] = 1.0 // default weight - } - } - ft.mu.RUnlock() - - p95Values := make(map[string]float64, len(heapData)) - sampleCounts := make(map[string]int, len(heapData)) - for key, values := range heapData { - sort.Float64s(values) - p95 := calculatePercentile(values, 0.95) - p95Values[key] = p95 - sampleCounts[key] = len(values) - } - - if len(p95Values) < 2 { - return nil, fmt.Errorf("need at least 2 keys with data, got %d", len(p95Values)) - } - - // Extract P95 values for distribution analysis - p95Slice := maps.Values(p95Values) - sort.Float64s(p95Slice) - - // Calculate weight-adjusted P95 values for all metrics. - weightAdjustedP95s := make(map[string]float64, len(p95Values)) - for key, p95 := range p95Values { - if weight := weights[key]; weight > 0 { - weightAdjustedP95s[key] = p95 / weight - } - } - - // Approach 1: Weight-Adjusted Proportional Fairness - // Normalizes each key's P95 by weight (P95/weight), then checks if the distribution - // of normalized values is flat. Higher weight keys should get lower latencies, so - // after normalization all keys should have similar values. We compare P95-of-normalized - // vs P50-of-normalized: if P95 >> P50, some keys are getting much worse treatment - // than the median even after accounting for their weight entitlement. - weightAdjustedFairness, weightAdjustedViolation := calculateWeightAdjustedFairness(weightAdjustedP95s, significantDiffThreshold) - - // Approach 2: Jain's Fairness Index (Weight-Adjusted) - // This is a standard networking fairness metric that measures how evenly distributed - // the weight-adjusted P95 latencies are across all fairness keys. It returns a value between 0 and 1: - // - 1.0 = perfect fairness (all keys have identical weight-adjusted latencies) - // - 0.8-1.0 = good fairness (small variations acceptable) - // - < 0.8 = significant unfairness (some keys much worse than others) - // Now accounts for task weights by using weight-adjusted P95 values. - jainsFairnessIndex := calculateJainsFairnessIndex(weightAdjustedP95s) - jainsViolation := jainsFairnessIndex < 0.8 - - // Approach 3: Coefficient of Variation (Weight-Adjusted) - // Measures relative spread (stddev/mean) of weight-adjusted P95 latencies. Higher CV indicates - // more variability in latencies across keys, suggesting unfair treatment. - // CV > 0.5 typically indicates significant unfairness. - coefficientOfVariation := calculateCoefficientOfVariation(weightAdjustedP95s) - cvViolation := coefficientOfVariation > 0.5 - - // Approach 4: Atkinson Index (Weight-Adjusted) - // Economics inequality measure focusing on worst-off keys. Uses parameter ε=1 - // to give equal weight to proportional gaps. Higher values indicate more inequality. - // Values > 0.3 suggest significant unfairness with some keys being severely disadvantaged. - // Now uses weight-adjusted P95 values to account for task priorities. - atkinsonIndex := calculateAtkinsonIndex(weightAdjustedP95s, 1.0) - atkinsonViolation := atkinsonIndex > 0.3 - - // Approach 5: Latency Envelope Analysis - // Checks if any key has P99/P95 ratio > 3.0, indicating "fat tail" distributions - // that suggest intermittent starvation or inconsistent scheduler behavior. - latencyEnvelopeViolation, latencyEnvelopeDesc := checkLatencyEnvelopeWithDesc(heapData, 3.0) - - // Identify top 5 violators - topViolators := ft.identifyTopViolators(p95Values, weights, p95Slice, significantDiffThreshold) - - // Create violations map - violationMap := make(map[string]string) - if weightAdjustedViolation { - desc := fmt.Sprintf("Weight-adjusted fairness: %.2f > %.2f threshold", weightAdjustedFairness, significantDiffThreshold) - violationMap["weight_adjusted_fairness"] = desc - } - if jainsViolation { - desc := fmt.Sprintf("Jain's fairness index: %.3f < 0.800 threshold", jainsFairnessIndex) - violationMap["jains_fairness_index"] = desc - } - if cvViolation { - desc := fmt.Sprintf("Coefficient of variation: %.3f > 0.500 threshold", coefficientOfVariation) - violationMap["coefficient_of_variation"] = desc - } - if atkinsonViolation { - desc := fmt.Sprintf("Atkinson index: %.3f > 0.300 threshold", atkinsonIndex) - violationMap["atkinson_index"] = desc - } - if latencyEnvelopeViolation { - violationMap["latency_envelope"] = latencyEnvelopeDesc - } - - return &FairnessReport{ - KeyCount: len(p95Values), - WeightAdjustedFairness: weightAdjustedFairness, - JainsFairnessIndex: jainsFairnessIndex, - CoefficientOfVariation: coefficientOfVariation, - AtkinsonIndex: atkinsonIndex, - Violations: violationMap, - TopViolators: topViolators, - }, nil -} - -// calculatePercentile calculates the specified percentile from a sorted slice of float64 values. -func calculatePercentile(sortedValues []float64, percentile float64) float64 { - if len(sortedValues) == 0 { - return 0 - } - if percentile < 0 { - percentile = 0 - } - if percentile > 1 { - percentile = 1 - } - - index := percentile * float64(len(sortedValues)-1) - lower := int(math.Floor(index)) - upper := int(math.Ceil(index)) - - if lower == upper { - return sortedValues[lower] - } - - // Linear interpolation between the two nearest values - weight := index - float64(lower) - return sortedValues[lower]*(1-weight) + sortedValues[upper]*weight -} - -// calculateJainsFairnessIndex calculates Jain's Fairness Index: (Σxi)² / (n × Σxi²) -// Returns a value between 0 and 1, where 1 indicates perfect fairness -func calculateJainsFairnessIndex(values map[string]float64) float64 { - if len(values) == 0 { - return 1.0 - } - if len(values) == 1 { - return 1.0 - } - - var sum, sumSquares float64 - for _, value := range values { - sum += value - sumSquares += value * value - } - - if sumSquares == 0 { - return 1.0 - } - - n := float64(len(values)) - return (sum * sum) / (n * sumSquares) -} - -// identifyTopViolators finds the top 5 keys with worst fairness violations -// Must be called with ft.mu held -func (ft *FairnessTracker) identifyTopViolators( - p95Values map[string]float64, - weights map[string]float64, - p95Slice []float64, - threshold float64, -) []ViolatorReport { - if len(p95Values) < 2 { - return nil - } - - // Calculate median P95 for comparison - medianP95 := calculatePercentile(p95Slice, 0.50) - if medianP95 == 0 { - return nil - } - - var violators []ViolatorReport - - for key, p95 := range p95Values { - weight := weights[key] - weightAdjustedP95 := p95 / weight - - // Calculate violation severity based on how much this key exceeds the median - // For weighted keys, we expect LOWER latencies, so adjust the severity calculation - // Higher weight should result in lower relative severity for the same absolute latency - violationSeverity := (p95 / medianP95) * (1.0 / weight) - - // Only include keys that significantly exceed the median - if violationSeverity > threshold { - violators = append(violators, ViolatorReport{ - FairnessKey: key, - P95: p95, - Weight: weight, - WeightAdjustedP95: weightAdjustedP95, - ViolationSeverity: violationSeverity, - }) - } - } - - // Sort by violation severity (worst first) - sort.Slice(violators, func(i, j int) bool { - return violators[i].ViolationSeverity > violators[j].ViolationSeverity - }) - - // Return top 5 - if len(violators) > 5 { - violators = violators[:5] - } - - return violators -} - -// calculateWeightAdjustedFairness computes weight-adjusted fairness metric and violation status -func calculateWeightAdjustedFairness(weightAdjustedP95s map[string]float64, threshold float64) (float64, bool) { - if len(weightAdjustedP95s) < 2 { - return 1.0, false - } - - i := 0 - weightAdjustedSlice := make([]float64, len(weightAdjustedP95s)) - for _, weightAdjustedP95 := range weightAdjustedP95s { - weightAdjustedSlice[i] = weightAdjustedP95 - i++ - } - - if len(weightAdjustedSlice) < 2 { - return 1.0, false - } - - sort.Float64s(weightAdjustedSlice) - p50OfWeightAdjusted := calculatePercentile(weightAdjustedSlice, 0.50) - p95OfWeightAdjusted := calculatePercentile(weightAdjustedSlice, 0.95) - - var fairnessRatio float64 - if p50OfWeightAdjusted > 0 { - fairnessRatio = p95OfWeightAdjusted / p50OfWeightAdjusted - } else { - fairnessRatio = 1.0 - } - - violation := fairnessRatio > threshold - return fairnessRatio, violation -} - -// calculateCoefficientOfVariation calculates CV = stddev/mean of P95 values -func calculateCoefficientOfVariation(p95Values map[string]float64) float64 { - if len(p95Values) < 2 { - return 0 - } - - // Calculate mean - var sum float64 - for _, p95 := range p95Values { - sum += p95 - } - mean := sum / float64(len(p95Values)) - - if mean == 0 { - return 0 - } - - // Calculate variance - var sumSquaredDiffs float64 - for _, p95 := range p95Values { - diff := p95 - mean - sumSquaredDiffs += diff * diff - } - variance := sumSquaredDiffs / float64(len(p95Values)) - stddev := math.Sqrt(variance) - - return stddev / mean -} - -// calculateAtkinsonIndex calculates Atkinson inequality index with parameter epsilon -func calculateAtkinsonIndex(p95Values map[string]float64, epsilon float64) float64 { - if len(p95Values) < 2 { - return 0 - } - - var sum float64 - var logSum float64 - n := float64(len(p95Values)) - - for _, p95 := range p95Values { - if p95 <= 0 { - return 0 // Cannot compute with zero or negative values - } - sum += p95 - logSum += math.Log(p95) - } - - if sum == 0 { - return 0 - } - - arithmeticMean := sum / n - geometricMean := math.Exp(logSum / n) - - if arithmeticMean == 0 { - return 0 - } - - return 1 - (geometricMean / arithmeticMean) -} - -// checkLatencyEnvelope checks if any key has P99/P95 ratio exceeding threshold -func (ft *FairnessTracker) checkLatencyEnvelope(p95Values map[string]float64, threshold float64) bool { - for key := range p95Values { - h, exists := ft.latencies[key] - if !exists || h.Len() < 10 { // Need enough samples for P99 - continue - } - - values := make([]float64, h.Len()) - copy(values, *h) - sort.Float64s(values) - - p95 := calculatePercentile(values, 0.95) - p99 := calculatePercentile(values, 0.99) - - if p95 > 0 && (p99/p95) > threshold { - return true // Fat tail detected - } - } - return false -} - -// checkLatencyEnvelopeWithDesc checks if any key has P99/P95 ratio exceeding threshold and returns descriptive text -func checkLatencyEnvelopeWithDesc(heapData map[string][]float64, threshold float64) (bool, string) { - for key, values := range heapData { - if len(values) < 10 { // Need enough samples for P99 - continue - } - - // Values are already sorted from GetReport - p95 := calculatePercentile(values, 0.95) - p99 := calculatePercentile(values, 0.99) - - if p95 > 0 && (p99/p95) > threshold { - ratio := p99 / p95 - return true, fmt.Sprintf("Latency envelope violation: key '%s' P99/P95 ratio %.2f > %.1f threshold (P95=%.1fms, P99=%.1fms)", - key, ratio, threshold, p95, p99) - } - } - return false, "No latency envelope violations detected" -} diff --git a/loadgen/ebbandflow/fairness_tracker_test.go b/loadgen/ebbandflow/fairness_tracker_test.go deleted file mode 100644 index 4b8139e4..00000000 --- a/loadgen/ebbandflow/fairness_tracker_test.go +++ /dev/null @@ -1,348 +0,0 @@ -package ebbandflow - -import ( - "math" - "testing" - "time" -) - -func TestCalculateWeightAdjustedFairness(t *testing.T) { - tests := []struct { - name string - p95Values map[string]float64 - weights map[string]float64 - threshold float64 - expectedRatio float64 - expectedViolation bool - }{ - { - name: "fair distribution - all equal after weight adjustment", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 200, - "keyC": 50, - }, - weights: map[string]float64{ - "keyA": 1.0, - "keyB": 2.0, - "keyC": 0.5, - }, - threshold: 2.0, - expectedRatio: 1.0, - expectedViolation: false, - }, - { - name: "unfair distribution - high weight key not getting priority", - p95Values: map[string]float64{ - "keyA": 100, // normalized = 100/1.0 = 100 - "keyB": 300, // normalized = 300/3.0 = 100 - "keyC": 400, // normalized = 400/1.0 = 400 (much worse!) - }, - weights: map[string]float64{ - "keyA": 1.0, - "keyB": 3.0, - "keyC": 1.0, - }, - threshold: 2.0, - expectedRatio: 4.0, // P95=400, P50=100, ratio=4.0 - expectedViolation: true, - }, - { - name: "insufficient data", - p95Values: map[string]float64{ - "keyA": 100, - }, - weights: map[string]float64{ - "keyA": 1.0, - }, - threshold: 2.0, - expectedRatio: 1.0, - expectedViolation: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // Calculate weight-adjusted P95s first (matching the main code) - weightAdjustedP95s := make(map[string]float64) - for key, p95 := range tt.p95Values { - if weight := tt.weights[key]; weight > 0 { - weightAdjustedP95s[key] = p95 / weight - } - } - - ratio, violation := calculateWeightAdjustedFairness(weightAdjustedP95s, tt.threshold) - - if math.Abs(ratio-tt.expectedRatio) > 0.5 { - t.Errorf("expected ratio %.2f, got %.2f", tt.expectedRatio, ratio) - } - - if violation != tt.expectedViolation { - t.Errorf("expected violation %v, got %v", tt.expectedViolation, violation) - } - }) - } -} - -func TestCalculateJainsFairnessIndex(t *testing.T) { - tests := []struct { - name string - p95Values map[string]float64 - expectedIndex float64 - }{ - { - name: "perfect fairness - all equal", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 100, - "keyC": 100, - }, - expectedIndex: 1.0, - }, - { - name: "moderate unfairness", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 200, - "keyC": 100, - }, - expectedIndex: 0.857, // (400)² / (3 × 60000) ≈ 0.889 - }, - { - name: "severe unfairness", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 500, - "keyC": 100, - }, - expectedIndex: 0.571, // (700)² / (3 × 290000) ≈ 0.563 - }, - { - name: "single key", - p95Values: map[string]float64{ - "keyA": 100, - }, - expectedIndex: 1.0, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - index := calculateJainsFairnessIndex(tt.p95Values) - - if math.Abs(index-tt.expectedIndex) > 0.3 { - t.Errorf("expected index %.3f, got %.3f", tt.expectedIndex, index) - } - }) - } -} - -func TestCalculateCoefficientOfVariation(t *testing.T) { - tests := []struct { - name string - p95Values map[string]float64 - expectedCV float64 - }{ - { - name: "no variation", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 100, - "keyC": 100, - }, - expectedCV: 0.0, - }, - { - name: "moderate variation", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 150, - "keyC": 50, - }, - expectedCV: 0.408, // stddev ≈ 40.8, mean = 100 - }, - { - name: "high variation", - p95Values: map[string]float64{ - "keyA": 50, - "keyB": 200, - "keyC": 100, - }, - expectedCV: 0.611, // stddev ≈ 61.2, mean ≈ 116.7 - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - cv := calculateCoefficientOfVariation(tt.p95Values) - - if math.Abs(cv-tt.expectedCV) > 0.1 { - t.Errorf("expected CV %.3f, got %.3f", tt.expectedCV, cv) - } - }) - } -} - -func TestCalculateAtkinsonIndex(t *testing.T) { - tests := []struct { - name string - p95Values map[string]float64 - epsilon float64 - expectedIndex float64 - }{ - { - name: "perfect equality", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 100, - "keyC": 100, - }, - epsilon: 1.0, - expectedIndex: 0.0, - }, - { - name: "moderate inequality", - p95Values: map[string]float64{ - "keyA": 100, - "keyB": 200, - "keyC": 100, - }, - epsilon: 1.0, - expectedIndex: 0.15, // Adjusted expectation - }, - { - name: "high inequality", - p95Values: map[string]float64{ - "keyA": 50, - "keyB": 300, - "keyC": 100, - }, - epsilon: 1.0, - expectedIndex: 0.35, // Adjusted expectation - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - index := calculateAtkinsonIndex(tt.p95Values, tt.epsilon) - - if math.Abs(index-tt.expectedIndex) > 0.3 { - t.Errorf("expected index %.3f, got %.3f", tt.expectedIndex, index) - } - }) - } -} - -func TestCheckLatencyEnvelope(t *testing.T) { - // Create a fairness tracker with test data - ft := NewFairnessTracker() - - // Add latencies with fat tail for keyA - keyALatencies := []time.Duration{ - 50 * time.Millisecond, - 60 * time.Millisecond, - 70 * time.Millisecond, - 80 * time.Millisecond, - 90 * time.Millisecond, - 95 * time.Millisecond, - 100 * time.Millisecond, - 110 * time.Millisecond, - 120 * time.Millisecond, - 130 * time.Millisecond, // P95 ≈ 120ms - 140 * time.Millisecond, - 150 * time.Millisecond, - 160 * time.Millisecond, - 170 * time.Millisecond, - 180 * time.Millisecond, - 190 * time.Millisecond, - 200 * time.Millisecond, - 210 * time.Millisecond, - 3000 * time.Millisecond, // P99 outlier - creates fat tail - } - - for _, latency := range keyALatencies { - ft.Track("keyA", 1.0, latency) - } - - // Add normal distribution for keyB - keyBLatencies := []time.Duration{ - 90 * time.Millisecond, - 95 * time.Millisecond, - 100 * time.Millisecond, - 105 * time.Millisecond, - 110 * time.Millisecond, - 115 * time.Millisecond, - 120 * time.Millisecond, - 125 * time.Millisecond, - 130 * time.Millisecond, - 135 * time.Millisecond, - } - - for _, latency := range keyBLatencies { - ft.Track("keyB", 1.0, latency) - } - - p95Values := map[string]float64{ - "keyA": 120, // Will have P99 ≈ 500, ratio = 4.2 > 3.0 - "keyB": 130, // Will have P99 ≈ 135, ratio = 1.04 < 3.0 - } - - tests := []struct { - name string - threshold float64 - expectedViolation bool - }{ - { - name: "fat tail detected with threshold 3.0", - threshold: 3.0, - expectedViolation: true, // keyA has P99/P95 > 3.0 - }, - { - name: "no violation with high threshold", - threshold: 6.0, - expectedViolation: false, // keyA's ratio ≈ 5.1 < 6.0 - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - violation := ft.checkLatencyEnvelope(p95Values, tt.threshold) - - if violation != tt.expectedViolation { - t.Errorf("expected violation %v, got %v", tt.expectedViolation, violation) - } - }) - } -} - -func TestGetReportIntegration(t *testing.T) { - ft := NewFairnessTracker() - - // Add some test data - ft.Track("keyA", 1.0, 100*time.Millisecond) - ft.Track("keyA", 1.0, 110*time.Millisecond) - ft.Track("keyB", 2.0, 200*time.Millisecond) // Higher weight, should get priority - ft.Track("keyB", 2.0, 220*time.Millisecond) - - report, err := ft.GetReport() - if err != nil { - t.Fatalf("GetReport failed: %v", err) - } - - // Verify report structure - if report.KeyCount != 2 { - t.Errorf("expected KeyCount 2, got %d", report.KeyCount) - } - - if report.JainsFairnessIndex < 0 || report.JainsFairnessIndex > 1 { - t.Errorf("Jain's index should be 0-1, got %.3f", report.JainsFairnessIndex) - } - - if report.CoefficientOfVariation < 0 { - t.Errorf("CV should be non-negative, got %.3f", report.CoefficientOfVariation) - } - - if report.AtkinsonIndex < 0 || report.AtkinsonIndex > 1 { - t.Errorf("Atkinson index should be 0-1, got %.3f", report.AtkinsonIndex) - } -} diff --git a/scenarios/ebb_and_flow.go b/scenarios/ebb_and_flow.go index 58001688..aa18e239 100644 --- a/scenarios/ebb_and_flow.go +++ b/scenarios/ebb_and_flow.go @@ -34,8 +34,6 @@ const ( ControlIntervalFlag = "control-interval" // MaxConsecutiveErrorsFlag defines how many consecutive errors are tolerated before stopping the scenario. MaxConsecutiveErrorsFlag = "max-consecutive-errors" - // FairnessReportIntervalFlag defines how often fairness reports are logged. - FairnessReportIntervalFlag = "fairness-report-interval" // BacklogLogIntervalFlag defines how often the current backlog stats are logged. BacklogLogIntervalFlag = "backlog-log-interval" ) @@ -48,7 +46,6 @@ type ebbAndFlowConfig struct { MaxRate int ControlInterval time.Duration MaxConsecutiveErrors int - FairnessReportInterval time.Duration BacklogLogInterval time.Duration VisibilityVerificationTimeout time.Duration SleepActivityConfig *loadgen.SleepActivityConfig @@ -69,7 +66,6 @@ type ebbAndFlowExecutor struct { startTime time.Time startedWorkflows atomic.Int64 completedWorkflows atomic.Int64 - fairnessTracker *ebbandflow.FairnessTracker stateLock sync.Mutex state *ebbAndFlowState } @@ -82,8 +78,7 @@ func init() { Description: "Oscillates backlog between min and max.\n" + "Options:\n" + " min-backlog, max-backlog, phase-time, sleep-duration, max-rate,\n" + - " control-interval, max-consecutive-errors, fairness-report-interval,\n" + - " fairness-threshold, backlog-log-interval.\n" + + " control-interval, max-consecutive-errors, backlog-log-interval.\n" + "Duration must be set.", ExecutorFn: func() loadgen.Executor { return newEbbAndFlowExecutor() }, }) @@ -117,7 +112,6 @@ func (e *ebbAndFlowExecutor) Configure(info loadgen.ScenarioInfo) error { if config.PhaseTime <= 0 { return fmt.Errorf("phase-time must be greater than 0, got %v", config.PhaseTime) } - config.FairnessReportInterval = info.ScenarioOptionDuration(FairnessReportIntervalFlag, config.PhaseTime) // default to phase time if sleepActivitiesStr, ok := info.ScenarioOptions[SleepActivityJsonFlag]; ok { var err error @@ -152,7 +146,6 @@ func (e *ebbAndFlowExecutor) Run(ctx context.Context, info loadgen.ScenarioInfo) e.id = fmt.Sprintf("ebb_and_flow_%s", e.RunID) e.rng = rand.New(rand.NewSource(time.Now().UnixNano())) e.startTime = time.Now() - e.fairnessTracker = ebbandflow.NewFairnessTracker() // Get parsed configuration config := e.config @@ -175,11 +168,6 @@ func (e *ebbAndFlowExecutor) Run(ctx context.Context, info loadgen.ScenarioInfo) ticker := time.NewTicker(config.ControlInterval) defer ticker.Stop() - // Setup fairness reporting - fairnessTicker := time.NewTicker(config.FairnessReportInterval) - defer fairnessTicker.Stop() - go e.fairnessReportLoop(ctx, fairnessTicker) - // Setup configurable backlog logging backlogTicker := time.NewTicker(config.BacklogLogInterval) defer backlogTicker.Stop() @@ -330,21 +318,11 @@ func (e *ebbAndFlowExecutor) spawnWorkflowWithActivities( } e.startedWorkflows.Add(1) - // Wait for workflow completion and collect results. + // Wait for workflow completion var result ebbandflow.WorkflowOutput err = wf.Get(ctx, &result) if err != nil { e.Logger.Errorf("ebbAndFlowTrack workflow failed for iteration %d: %v", iteration, err) - } else { - for _, activityResult := range result.Timings { - if activityResult.FairnessKey != "" { - e.fairnessTracker.Track( - activityResult.FairnessKey, - activityResult.FairnessWeight, - activityResult.ScheduleToStart, - ) - } - } } e.completedWorkflows.Add(1) e.incrementTotalCompletedWorkflow() @@ -399,28 +377,3 @@ func calculateSpawnRate( rate = max(0, rate) return rate } - -// fairnessReportLoop periodically generates fairness reports and starts reporting workflows. -func (e *ebbAndFlowExecutor) fairnessReportLoop(ctx context.Context, ticker *time.Ticker) { - for { - select { - case <-ctx.Done(): - return - case <-ticker.C: - // Generate fairness report. - report, err := e.fairnessTracker.GetReport() - if err != nil { - e.Logger.Warnf("Skipping fairness report: %v", err) - continue - } - - // Log the report. - options := e.NewRun(0).DefaultStartWorkflowOptions() - options.ID = fmt.Sprintf("%s-report-%d", e.id, time.Now().UnixMilli()) - _, err = e.Client.ExecuteWorkflow(ctx, options, "ebbAndFlowReport", *report) - if err != nil { - e.Logger.Errorf("Failed to start fairness report workflow: %v", err) - } - } - } -} diff --git a/scenarios/ebb_and_flow_test.go b/scenarios/ebb_and_flow_test.go index fd6f1367..c93952e0 100644 --- a/scenarios/ebb_and_flow_test.go +++ b/scenarios/ebb_and_flow_test.go @@ -57,7 +57,6 @@ func TestEbbAndFlow(t *testing.T) { MinBacklogFlag: "0", MaxBacklogFlag: "1", PhaseTimeFlag: "5s", - FairnessReportIntervalFlag: "5s", BacklogLogIntervalFlag: "5s", VisibilityVerificationTimeoutFlag: "5s", SleepActivityJsonFlag: sleepActivityJson, @@ -69,14 +68,11 @@ func TestEbbAndFlow(t *testing.T) { t.Run("Run executor", func(t *testing.T) { executor := newEbbAndFlowExecutor() - res, err := env.RunExecutorTest(t, executor, scenarioInfo, clioptions.LangGo) + _, err := env.RunExecutorTest(t, executor, scenarioInfo, clioptions.LangGo) require.NoError(t, err, "Executor should complete successfully") state = executor.Snapshot().(ebbAndFlowState) require.GreaterOrEqual(t, state.TotalCompletedWorkflows, int64(1)) - - fairnessStatusLogs := res.ObservedLogs.FilterMessageSnippet("Fairness status").All() - require.GreaterOrEqual(t, len(fairnessStatusLogs), 1, "Fairness status logs should be present") }) t.Run("Run executor again, resuming from previous state", func(t *testing.T) { @@ -93,14 +89,11 @@ func TestEbbAndFlow(t *testing.T) { resumeScenarioInfo := scenarioInfo - res, err := env.RunExecutorTest(t, executor, resumeScenarioInfo, clioptions.LangGo) + _, err = env.RunExecutorTest(t, executor, resumeScenarioInfo, clioptions.LangGo) require.NoError(t, err, "Executor should complete successfully") state = executor.Snapshot().(ebbAndFlowState) require.Greater(t, state.TotalCompletedWorkflows, previouState.TotalCompletedWorkflows) - - fairnessStatusLogs := res.ObservedLogs.FilterMessageSnippet("Fairness status").All() - require.GreaterOrEqual(t, len(fairnessStatusLogs), 1, "Fairness status logs should be present") }) t.Run("Run executor again, resuming from previous state but without any time left", func(t *testing.T) { diff --git a/workers/go/ebbandflow/activities.go b/workers/go/ebbandflow/activities.go index a9057682..5295bce5 100644 --- a/workers/go/ebbandflow/activities.go +++ b/workers/go/ebbandflow/activities.go @@ -2,11 +2,8 @@ package ebbandflow import ( "context" - "fmt" - "strings" "time" - "github.com/temporalio/omes/loadgen/ebbandflow" "github.com/temporalio/omes/loadgen/kitchensink" "go.temporal.io/sdk/activity" ) @@ -32,56 +29,3 @@ func (a Activities) MeasureLatencyActivity( ActualStartTime: activityInfo.StartedTime, }, nil } - -// ProcessFairnessReport processes fairness report data and emits logs and metrics -func (a Activities) ProcessFairnessReport(ctx context.Context, report ebbandflow.FairnessReport) error { - logger := activity.GetLogger(ctx) - metricsHandler := activity.GetMetricsHandler(ctx) - - // Log result. - commonFields := []any{ - "keyCount", report.KeyCount, - "jainsFairnessIndex", fmt.Sprintf("%.3f", report.JainsFairnessIndex), - "coefficientOfVariation", fmt.Sprintf("%.3f", report.CoefficientOfVariation), - "atkinsonIndex", fmt.Sprintf("%.3f", report.AtkinsonIndex), - "weightAdjustedFairness", fmt.Sprintf("%.3f", report.WeightAdjustedFairness), - } - - if len(report.Violations) == 0 { - logger.Info("Fairness status: passed", commonFields...) - } else { - // Join violations for logging - var violations []string - for _, desc := range report.Violations { - violations = append(violations, desc) - } - violationSummary := fmt.Sprintf("%d violations: [%s]", len(violations), strings.Join(violations, "; ")) - - errorFields := append(commonFields, "violationSummary", violationSummary) - for i, offender := range report.TopViolators { - violatorSummary := fmt.Sprintf("key=%s p95=%.2fms weight=%.1f weightAdjustedP95=%.2fms severity=%.2f", - offender.FairnessKey, - offender.P95, - offender.Weight, - offender.WeightAdjustedP95, - offender.ViolationSeverity) - errorFields = append(errorFields, fmt.Sprintf("topViolator%d", i+1), violatorSummary) - } - logger.Error("Fairness status: violated", errorFields...) - } - - // Emit metrics. - metricsHandler.Gauge("ebbandflow_fairness_jains_index").Update(report.JainsFairnessIndex) - metricsHandler.Gauge("ebbandflow_fairness_coefficient_variation").Update(report.CoefficientOfVariation) - metricsHandler.Gauge("ebbandflow_fairness_atkinson_index").Update(report.AtkinsonIndex) - metricsHandler.Gauge("ebbandflow_fairness_weight_adjusted").Update(report.WeightAdjustedFairness) - metricsHandler.Gauge("ebbandflow_fairness_key_count").Update(float64(report.KeyCount)) - - // Emit one violation metric per validation index with labels - for validationIndex := range report.Violations { - metricsHandler.WithTags(map[string]string{"validation_index": validationIndex}). - Counter("ebbandflow_fairness_violation").Inc(1) - } - - return nil -} diff --git a/workers/go/ebbandflow/workflow.go b/workers/go/ebbandflow/workflow.go index f8d36e3d..c03af9f1 100644 --- a/workers/go/ebbandflow/workflow.go +++ b/workers/go/ebbandflow/workflow.go @@ -29,7 +29,7 @@ func EbbAndFlowTrackWorkflow(ctx workflow.Context, params *ebbandflow.WorkflowPa var activityFuncs []func(workflow.Context) error for _, activity := range activities { activityFuncs = append(activityFuncs, func(ctx workflow.Context) error { - // Set up activity options with fairness information + // Set up activity options opts := workflow.ActivityOptions{ StartToCloseTimeout: 1 * time.Minute, RetryPolicy: &temporal.RetryPolicy{}, @@ -40,15 +40,6 @@ func EbbAndFlowTrackWorkflow(ctx workflow.Context, params *ebbandflow.WorkflowPa opts.Priority.PriorityKey = int(activity.Priority.PriorityKey) } - // Set fairness, if specified - fairnessKey := activity.GetFairnessKey() - fairnessWeight := activity.GetFairnessWeight() - if fairnessKey != "" { - // TODO(fairness): hack until there is a fairness key in the SDK - opts.ActivityID = fmt.Sprintf("x-temporal-internal-fairness-key[%s:%f]-%d", - fairnessKey, fairnessWeight, rng.Uint64()) - } - // Execute activity var activityResult ActivityExecutionResult actCtx := workflow.WithActivityOptions(ctx, opts) @@ -62,8 +53,6 @@ func EbbAndFlowTrackWorkflow(ctx workflow.Context, params *ebbandflow.WorkflowPa scheduleToStartMS := activityResult.ActualStartTime.Sub(activityResult.ScheduledTime) result := ebbandflow.ActivityTiming{ - FairnessKey: fairnessKey, - FairnessWeight: fairnessWeight, ScheduleToStart: scheduleToStartMS, } @@ -88,15 +77,3 @@ func EbbAndFlowTrackWorkflow(ctx workflow.Context, params *ebbandflow.WorkflowPa return &ebbandflow.WorkflowOutput{Timings: results}, nil } - -// EbbAndFlowReportWorkflow receives fairness reports and handles logging and metrics -func EbbAndFlowReportWorkflow(ctx workflow.Context, report ebbandflow.FairnessReport) error { - // Execute the report activity with the snapshot data - opts := workflow.ActivityOptions{ - StartToCloseTimeout: 1 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{}, - } - - actCtx := workflow.WithActivityOptions(ctx, opts) - return workflow.ExecuteActivity(actCtx, activityStub.ProcessFairnessReport, report).Get(ctx, nil) -} diff --git a/workers/go/go.mod b/workers/go/go.mod index b0607000..0f3c6240 100644 --- a/workers/go/go.mod +++ b/workers/go/go.mod @@ -34,7 +34,6 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/stretchr/testify v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect golang.org/x/net v0.44.0 // indirect golang.org/x/sync v0.17.0 // indirect golang.org/x/sys v0.36.0 // indirect diff --git a/workers/go/go.sum b/workers/go/go.sum index 38591f73..92d469a9 100644 --- a/workers/go/go.sum +++ b/workers/go/go.sum @@ -111,8 +111,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= -golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= diff --git a/workers/go/worker/worker.go b/workers/go/worker/worker.go index 293ae2f6..251298d0 100644 --- a/workers/go/worker/worker.go +++ b/workers/go/worker/worker.go @@ -84,7 +84,6 @@ func runWorkers(client client.Client, taskQueues []string, options clioptions.Wo w.RegisterWorkflow(kitchensink.EchoWorkflow) w.RegisterWorkflow(kitchensink.WaitForCancelWorkflow) w.RegisterWorkflowWithOptions(ebbandflow.EbbAndFlowTrackWorkflow, workflow.RegisterOptions{Name: "ebbAndFlowTrack"}) - w.RegisterWorkflowWithOptions(ebbandflow.EbbAndFlowReportWorkflow, workflow.RegisterOptions{Name: "ebbAndFlowReport"}) w.RegisterActivity(&ebbFlowActivities) w.RegisterNexusService(service) errCh <- w.Run(worker.InterruptCh()) From a3b5bbd863236750eec05f37c20e9cc29d851a85 Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 18:01:36 -0700 Subject: [PATCH 2/7] revert --- workers/go/ebbandflow/workflow.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/workers/go/ebbandflow/workflow.go b/workers/go/ebbandflow/workflow.go index c03af9f1..95442907 100644 --- a/workers/go/ebbandflow/workflow.go +++ b/workers/go/ebbandflow/workflow.go @@ -40,6 +40,15 @@ func EbbAndFlowTrackWorkflow(ctx workflow.Context, params *ebbandflow.WorkflowPa opts.Priority.PriorityKey = int(activity.Priority.PriorityKey) } + // Set fairness, if specified + fairnessKey := activity.GetFairnessKey() + fairnessWeight := activity.GetFairnessWeight() + if fairnessKey != "" { + // TODO(fairness): hack until there is a fairness key in the SDK + opts.ActivityID = fmt.Sprintf("x-temporal-internal-fairness-key[%s:%f]-%d", + fairnessKey, fairnessWeight, rng.Uint64()) + } + // Execute activity var activityResult ActivityExecutionResult actCtx := workflow.WithActivityOptions(ctx, opts) From 077a7d0b88f364e2cc01dfb443956bedb45fe3bd Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 18:22:58 -0700 Subject: [PATCH 3/7] upgrade SDK --- workers/go/go.mod | 10 ++--- workers/go/go.sum | 95 +++++------------------------------------------ 2 files changed, 15 insertions(+), 90 deletions(-) diff --git a/workers/go/go.mod b/workers/go/go.mod index 0f3c6240..69457921 100644 --- a/workers/go/go.mod +++ b/workers/go/go.mod @@ -7,8 +7,8 @@ require github.com/temporalio/omes v1.0.0 require ( github.com/nexus-rpc/sdk-go v0.4.0 github.com/spf13/cobra v1.8.0 - go.temporal.io/api v1.50.0 - go.temporal.io/sdk v1.35.0 + go.temporal.io/api v1.53.0 + go.temporal.io/sdk v1.37.0 go.uber.org/zap v1.27.0 ) @@ -21,7 +21,7 @@ require ( github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -41,8 +41,8 @@ require ( golang.org/x/time v0.6.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect - google.golang.org/grpc v1.66.0 // indirect - google.golang.org/protobuf v1.36.5 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/workers/go/go.sum b/workers/go/go.sum index 92d469a9..4877cbe4 100644 --- a/workers/go/go.sum +++ b/workers/go/go.sum @@ -1,67 +1,40 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/nexus-rpc/sdk-go v0.4.0 h1:A/IjWWAiWecnYnt7uI0Cw6ci6zJwaM9Ma3q4hDDxUVc= github.com/nexus-rpc/sdk-go v0.4.0/go.mod h1:TpfkM2Cw0Rlk9drGkoiSMpFqflKTiQLWUNyKJjF8mKQ= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqScV0Y= @@ -73,19 +46,12 @@ github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfm github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/temporalio/features v0.0.0-20250808182149-bb2a99cdf200 h1:QCVAlYX6FNj8mjFyo8g0dn2yzTAppqT52T2I32l8VSE= @@ -93,35 +59,22 @@ github.com/temporalio/features v0.0.0-20250808182149-bb2a99cdf200/go.mod h1:OJ6C github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.temporal.io/api v1.50.0 h1:7s8Cn+fKfNx9G0v2Ge9We6X2WiCA3JvJ9JryeNbx1Bc= -go.temporal.io/api v1.50.0/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= -go.temporal.io/sdk v1.35.0 h1:lRNAQ5As9rLgYa7HBvnmKyzxLcdElTuoFJ0FXM/AsLQ= -go.temporal.io/sdk v1.35.0/go.mod h1:1q5MuLc2MEJ4lneZTHJzpVebW2oZnyxoIOWX3oFVebw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.temporal.io/api v1.53.0 h1:6vAFpXaC584AIELa6pONV56MTpkm4Ha7gPWL2acNAjo= +go.temporal.io/api v1.53.0/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= +go.temporal.io/sdk v1.37.0 h1:RbwCkUQuqY4rfCzdrDZF9lgT7QWG/pHlxfZFq0NPpDQ= +go.temporal.io/sdk v1.37.0/go.mod h1:tOy6vGonfAjrpCl6Bbw/8slTgQMiqvoyegRv2ZHPm5M= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -129,24 +82,18 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -157,11 +104,6 @@ golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -170,33 +112,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0= google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg= google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= -google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From e732b35a4bce90399d72d8ac11e6f8cde91806d0 Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 18:23:58 -0700 Subject: [PATCH 4/7] use new field --- workers/go/ebbandflow/workflow.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/workers/go/ebbandflow/workflow.go b/workers/go/ebbandflow/workflow.go index 95442907..fc67fe91 100644 --- a/workers/go/ebbandflow/workflow.go +++ b/workers/go/ebbandflow/workflow.go @@ -44,9 +44,8 @@ func EbbAndFlowTrackWorkflow(ctx workflow.Context, params *ebbandflow.WorkflowPa fairnessKey := activity.GetFairnessKey() fairnessWeight := activity.GetFairnessWeight() if fairnessKey != "" { - // TODO(fairness): hack until there is a fairness key in the SDK - opts.ActivityID = fmt.Sprintf("x-temporal-internal-fairness-key[%s:%f]-%d", - fairnessKey, fairnessWeight, rng.Uint64()) + opts.Priority.FairnessKey = fairnessKey + opts.Priority.FairnessWeight = fairnessWeight } // Execute activity From 97345e51a1e15c3cba6eb25ac1a5025db14e5d7e Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 19:08:53 -0700 Subject: [PATCH 5/7] these, too --- go.mod | 11 +++---- go.sum | 96 ++++++---------------------------------------------------- 2 files changed, 15 insertions(+), 92 deletions(-) diff --git a/go.mod b/go.mod index d0f33c20..c45d0492 100644 --- a/go.mod +++ b/go.mod @@ -11,14 +11,14 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.10.0 github.com/temporalio/features v0.0.0-20250808182149-bb2a99cdf200 - go.temporal.io/api v1.50.0 - go.temporal.io/sdk v1.35.0 + go.temporal.io/api v1.53.0 + go.temporal.io/sdk v1.37.0 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20250911091902-df9299821621 golang.org/x/mod v0.28.0 golang.org/x/sync v0.17.0 golang.org/x/sys v0.36.0 - google.golang.org/protobuf v1.36.5 + google.golang.org/grpc v1.67.1 + google.golang.org/protobuf v1.36.6 ) require ( @@ -35,7 +35,7 @@ require ( github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/golang/mock v1.6.0 // indirect github.com/google/go-cmp v0.7.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/nexus-rpc/sdk-go v0.3.0 // indirect @@ -48,7 +48,6 @@ require ( golang.org/x/time v0.6.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect - google.golang.org/grpc v1.66.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 72e7e54e..361c5084 100644 --- a/go.sum +++ b/go.sum @@ -1,69 +1,43 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/nexus-rpc/sdk-go v0.3.0 h1:Y3B0kLYbMhd4C2u00kcYajvmOrfozEtTV/nHSnV57jA= github.com/nexus-rpc/sdk-go v0.3.0/go.mod h1:TpfkM2Cw0Rlk9drGkoiSMpFqflKTiQLWUNyKJjF8mKQ= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= @@ -75,19 +49,12 @@ github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfm github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/temporalio/features v0.0.0-20250808182149-bb2a99cdf200 h1:QCVAlYX6FNj8mjFyo8g0dn2yzTAppqT52T2I32l8VSE= @@ -95,39 +62,24 @@ github.com/temporalio/features v0.0.0-20250808182149-bb2a99cdf200/go.mod h1:OJ6C github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.temporal.io/api v1.50.0 h1:7s8Cn+fKfNx9G0v2Ge9We6X2WiCA3JvJ9JryeNbx1Bc= -go.temporal.io/api v1.50.0/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= -go.temporal.io/sdk v1.35.0 h1:lRNAQ5As9rLgYa7HBvnmKyzxLcdElTuoFJ0FXM/AsLQ= -go.temporal.io/sdk v1.35.0/go.mod h1:1q5MuLc2MEJ4lneZTHJzpVebW2oZnyxoIOWX3oFVebw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.temporal.io/api v1.53.0 h1:6vAFpXaC584AIELa6pONV56MTpkm4Ha7gPWL2acNAjo= +go.temporal.io/api v1.53.0/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= +go.temporal.io/sdk v1.37.0 h1:RbwCkUQuqY4rfCzdrDZF9lgT7QWG/pHlxfZFq0NPpDQ= +go.temporal.io/sdk v1.37.0/go.mod h1:tOy6vGonfAjrpCl6Bbw/8slTgQMiqvoyegRv2ZHPm5M= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= -golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -135,9 +87,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -145,15 +94,12 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -164,11 +110,6 @@ golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -177,33 +118,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0= google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg= google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= -google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From d8e6f597a5d8cfa8d5a507db10a7e2eb4111e6f7 Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 20:01:26 -0700 Subject: [PATCH 6/7] bump this too --- versions.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.env b/versions.env index ad5d3db0..d767c65d 100644 --- a/versions.env +++ b/versions.env @@ -11,7 +11,7 @@ UV_VERSION=0.7.19 # SDK versions DOTNET_SDK_VERSION=1.7.0 -GO_SDK_VERSION=1.35.0 +GO_SDK_VERSION=1.37.0 JAVA_SDK_VERSION=1.30.1 PYTHON_SDK_VERSION=1.15.0 TYPESCRIPT_SDK_VERSION=1.12.1 From 6d16ec65eab07fa43ef6237c31106245e20c6688 Mon Sep 17 00:00:00 2001 From: Stephan Behnke Date: Fri, 24 Oct 2025 20:01:39 -0700 Subject: [PATCH 7/7] tidy --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c45d0492..983dc3ea 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/nexus-rpc/sdk-go v0.3.0 // indirect + github.com/nexus-rpc/sdk-go v0.4.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/robfig/cron v1.2.0 // indirect github.com/stretchr/objx v0.5.2 // indirect diff --git a/go.sum b/go.sum index 361c5084..8adbe230 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/nexus-rpc/sdk-go v0.3.0 h1:Y3B0kLYbMhd4C2u00kcYajvmOrfozEtTV/nHSnV57jA= -github.com/nexus-rpc/sdk-go v0.3.0/go.mod h1:TpfkM2Cw0Rlk9drGkoiSMpFqflKTiQLWUNyKJjF8mKQ= +github.com/nexus-rpc/sdk-go v0.4.0 h1:A/IjWWAiWecnYnt7uI0Cw6ci6zJwaM9Ma3q4hDDxUVc= +github.com/nexus-rpc/sdk-go v0.4.0/go.mod h1:TpfkM2Cw0Rlk9drGkoiSMpFqflKTiQLWUNyKJjF8mKQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=