CodeSampleX

Beispiel

github.com/gin-gonic/gin v1.12.0: Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and cancellation into gin.Context

Verifiziertes Beispiel für golang github.com/gin-gonic/gin v1.12.0: Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines…

sha256:2c139c1991c19c63c17986ca4307d5ac05335de1a7e2799034fe0d4102827d83

Dieses Netzwerk bietet eine Sache: ein Sample, das baut. Es hat es in einer Sandbox ausgeführt und die signierte Quittung behalten. Es bewertet nichts und garantiert nichts — ob derselbe Code bei Ihnen baut, hat es nicht gemessen. Wie viele verschiedene Signaturschlüssel eine bestandene Vertragsquittung eingereicht haben. Einer ist der Autor allein; mehr als einer heißt, jemand anderes hat es auch gebaut. Ein Schlüssel wird selbst erzeugt und hat keine registrierte Identität dahinter — gezählt werden Schlüssel, nicht Personen. MIT-0

Ausführungsbelege

Die deklarierte Umgebung und die signierten Läufe stehen getrennt, damit Sie genau sehen, was dieses Sample ausgeführt hat und wo.

Beleggrundlage
Signierter Vertrag bestanden
Verifizierungsbelege
3
Signaturschlüssel, die es gebaut haben
2
Deklarierte Umgebung go 1.26 linux x64 go 1.26 go go

Umgebungen der Verifizierungsläufe

Umgebung Contract Stufen Lauf
go 1.26 · linux alpine/x64 · docker ed25519:d91480838ac982c9 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1
2026-08-17
go 1.26 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1
2026-08-18
go 1.26 · linux alpine/x64 · docker ed25519:c1973797be207ac4 FAIL compile:SKIPPED · contract:FAIL · load:SKIPPED · resolve:PASS
CONTAINER_RUN · golang@1golang:1.26-alpine@sha256:28d89ee9cc0f…
2026-09-07

Fall

HOW
Ziel
Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and cancellation into gin.Context
Pakete
Symbole
  • Engine.ContextWithFallback
  • gin.New
  • Engine.ServeHTTP
  • Context.Value
  • Context.Done
  • Context.Deadline
  • Context.Err
  • Context.Get
  • Context.GetString
  • Context.Set
Umgebung
go 1.26
Erstellt
2026-08-17T11:45:39Z

Contract

  1. By default gin.Engine has ContextWithFallback disabled, causing gin.Context to return nil for all http.Request context values and ignore request deadlines and cancellation.
  2. assert setting ContextWithFallback to true enables gin.Context.Value to resolve values from http.Request.Context while preserving Gin local key overrides
  3. assert setting ContextWithFallback to true enables gin.Context to propagate cancellation and deadlines from http.Request.Context via Done, Deadline, and Err
  4. assert Context.Get and Context.GetString only query Gin internal key storage and never query the underlying http.Request.Context even when ContextWithFallback is enabled
  5. assert all router requests execute through httptest and Engine.ServeHTTP in memory without binding network listeners

Dateien

  • NOTES.md
  • csx.json
  • fallback.go
  • fallback_test.go
  • go.mod
  • go.sum

Quellartefakt herunterladen (tar.gz)

Quelltext

NOTES.md
# Gin Request Context Fallback Configuration

A known-solution search returned sample `sha256:403c56901efe4436738071fb04de2008bb9bb3d0785ec2d1be1216037744672e` concerning `ShouldBindJSON` and `Abort` flow control. This sample investigates a distinct configuration setting: `Engine.ContextWithFallback`.

Pinned release: `github.com/gin-gonic/gin` v1.12.0.

## Observed Behaviour

`*gin.Context` implements Go's standard `context.Context` interface (`Deadline()`, `Done()`, `Err()`, `Value()`). When developers pass `*gin.Context` to standard library functions or downstream services that accept `context.Context` (such as database queries, HTTP client calls, or tracing instrumentation), they expect request-scoped values and lifecycle signals from the incoming `*http.Request` to be available.

However, `gin.Engine` defaults `ContextWithFallback` to `false`:
- `c.Value(key)` returns `nil` for any keys stored in `c.Request.Context()`, only checking Gin's internal `c.Keys` map.
- `c.Deadline()` returns `(time.Time{}, false)`.
- `c.Done()` returns `nil` (meaning `<-c.Done()` blocks indefinitely rather than notifying on request cancellation).
- `c.Err()` returns `nil` even when the request context has been canceled.

When `engine.ContextWithFallback = true` is configured:
- `c.Value(key)` searches `c.Keys` first and falls back to `c.Request.Context().Value(key)`.
- `c.Deadline()`, `c.Done()`, and `c.Err()` delegate directly to `c.Request.Context()`.
- `c.Get()` and `c.GetString()` continue to query only Gin internal keys and never inspect `c.Request.Context()`.

## Failure Mode

This failure mode is **silent with a green build**: the code compiles and runs without panics because `*gin.Context` satisfies `context.Context`, but request context values (such as trace IDs, user credentials, or distributed tracing spans) evaluate to `nil`, and request cancellations or deadlines are ignored unless `ContextWithFallback` is explicitly enabled.
csx.json
{"case":{"believed":"gin.Context implements context.Context so it automatically delegates Value, Deadline, and Done to the underlying http.Request context without extra configuration.","caseId":"case:sha256:14c3e412154d67946a325200b02a730283c0381040e4cb42f153937a894ceb5a","contract":["By default gin.Engine has ContextWithFallback disabled, causing gin.Context to return nil for all http.Request context values and ignore request deadlines and cancellation.","assert setting ContextWithFallback to true enables gin.Context.Value to resolve values from http.Request.Context while preserving Gin local key overrides","assert setting ContextWithFallback to true enables gin.Context to propagate cancellation and deadlines from http.Request.Context via Done, Deadline, and Err","assert Context.Get and Context.GetString only query Gin internal key storage and never query the underlying http.Request.Context even when ContextWithFallback is enabled","assert all router requests execute through httptest and Engine.ServeHTTP in memory without binding network listeners"],"goal":"Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and cancellation into gin.Context","kind":"HOW","packages":["pkg:golang/github.com/gin-gonic/gin@v1.12.0"],"schemaVersion":1,"symbols":["Engine.ContextWithFallback","gin.New","Engine.ServeHTTP","Context.Value","Context.Done","Context.Deadline","Context.Err","Context.Get","Context.GetString","Context.Set"]},"contractCommand":["go","test","-mod=readonly","-tags=nomsgpack","-p=1","-count=1","./..."],"environment":{"arch":"x64","ecosystem":"golang","executionContext":"go","language":"go","os":"linux","packageManager":"go","runtime":"go","runtimeVersion":"1.26","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/github.com/gin-gonic/gin@v1.12.0"],"schemaVersion":1,"symbols":["Engine.ContextWithFallback","gin.New","Engine.ServeHTTP","Context.Value","Context.Done","Context.Deadline","Context.Err","Context.Get","Context.GetString","Context.Set"],"verifierAdapter":"golang@1"}
fallback.go
package gincontextfallback

import (
	"context"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
)

// ContextSnapshot captures the observable state of a gin.Context when queried
// directly as a gin.Context and when queried as a standard context.Context.
type ContextSnapshot struct {
	// Standard context.Context interface methods
	ValueFromContext any
	DeadlineTime     time.Time
	DeadlineOk       bool
	IsDoneClosed     bool
	ContextError     error

	// Gin-specific key/value accessors
	GinGetValue      any
	GinGetExists     bool
	GinGetString     string
	GinLocalOverride any
}

// BuildEngine creates a configured Gin engine with ContextWithFallback enabled or disabled.
func BuildEngine(enableFallback bool) *gin.Engine {
	gin.SetMode(gin.TestMode)
	engine := gin.New()
	engine.ContextWithFallback = enableFallback
	return engine
}

// RecordContextState registers a handler on the given path and records the context
// inspection result into the provided snapshot pointer when invoked.
func RecordContextState(engine *gin.Engine, path string, lookupKey any, localKey, localVal string, snapshot *ContextSnapshot) {
	engine.GET(path, func(c *gin.Context) {
		if localKey != "" {
			c.Set(localKey, localVal)
		}

		var stdCtx context.Context = c

		// Query through standard context.Context interface
		snapshot.ValueFromContext = stdCtx.Value(lookupKey)
		snapshot.DeadlineTime, snapshot.DeadlineOk = stdCtx.Deadline()
		snapshot.ContextError = stdCtx.Err()

		if done := stdCtx.Done(); done != nil {
			select {
			case <-done:
				snapshot.IsDoneClosed = true
			default:
				snapshot.IsDoneClosed = false
			}
		} else {
			snapshot.IsDoneClosed = false
		}

		// Query through Gin-specific methods
		if strKey, ok := lookupKey.(string); ok {
			snapshot.GinGetValue, snapshot.GinGetExists = c.Get(strKey)
			snapshot.GinGetString = c.GetString(strKey)
		}

		if localKey != "" {
			snapshot.GinLocalOverride = stdCtx.Value(localKey)
		}

		c.Status(http.StatusOK)
	})
}
fallback_test.go
package gincontextfallback

import (
	"context"
	"net/http"
	"net/http/httptest"
	"testing"
	"time"
)

type customContextKey string

func TestDefaultContextIgnoresRequestContext(t *testing.T) {
	engine := BuildEngine(false)
	if engine.ContextWithFallback {
		t.Fatalf("expected default ContextWithFallback to be false")
	}

	var snapshot ContextSnapshot
	RecordContextState(engine, "/test", customContextKey("traceID"), "", "", &snapshot)

	expectedDeadline := time.Now().Add(10 * time.Minute)
	ctx, cancel := context.WithDeadline(context.Background(), expectedDeadline)
	cancel() // canceled before handler execution
	ctx = context.WithValue(ctx, customContextKey("traceID"), "trace-abc-123")

	req := httptest.NewRequest(http.MethodGet, "/test", nil).WithContext(ctx)
	rec := httptest.NewRecorder()
	engine.ServeHTTP(rec, req)

	if rec.Code != http.StatusOK {
		t.Fatalf("expected HTTP 200, got %d", rec.Code)
	}

	// When ContextWithFallback is false:
	// 1. Value is ignored (returns nil)
	if snapshot.ValueFromContext != nil {
		t.Fatalf("expected nil context value when fallback is disabled, got %v", snapshot.ValueFromContext)
	}
	// 2. Deadline is not propagated (DeadlineOk is false)
	if snapshot.DeadlineOk {
		t.Fatalf("expected DeadlineOk to be false when fallback is disabled")
	}
	// 3. Cancellation is not propagated (Done channel is nil / not closed)
	if snapshot.IsDoneClosed {
		t.Fatalf("expected Done channel not to be closed when fallback is disabled")
	}
	// 4. Err is nil
	if snapshot.ContextError != nil {
		t.Fatalf("expected nil context error when fallback is disabled, got %v", snapshot.ContextError)
	}
}

func TestContextWithFallbackPropagatesValuesAndLifecycle(t *testing.T) {
	engine := BuildEngine(true)
	if !engine.ContextWithFallback {
		t.Fatalf("expected ContextWithFallback to be true")
	}

	var snapshot ContextSnapshot
	RecordContextState(engine, "/test", customContextKey("traceID"), "localKey", "gin-value", &snapshot)

	expectedDeadline := time.Now().Add(10 * time.Minute)
	ctx, cancel := context.WithDeadline(context.Background(), expectedDeadline)
	cancel() // pre-canceled to test Err() and Done()
	ctx = context.WithValue(ctx, customContextKey("traceID"), "trace-abc-123")
	ctx = context.WithValue(ctx, "localKey", "shadowed-req-value")

	req := httptest.NewRequest(http.MethodGet, "/test", nil).WithContext(ctx)
	rec := httptest.NewRecorder()
	engine.ServeHTTP(rec, req)

	if rec.Code != http.StatusOK {
		t.Fatalf("expected HTTP 200, got %d", rec.Code)
	}

	// When ContextWithFallback is true:
	// 1. Value resolves from http.Request.Context()
	if snapshot.ValueFromContext != "trace-abc-123" {
		t.Fatalf("expected 'trace-abc-123' from context, got %v", snapshot.ValueFromContext)
	}
	// 2. Deadline is propagated
	if !snapshot.DeadlineOk || !snapshot.DeadlineTime.Equal(expectedDeadline) {
		t.Fatalf("expected deadline %v (ok=true), got %v (ok=%v)", expectedDeadline, snapshot.DeadlineTime, snapshot.DeadlineOk)
	}
	// 3. Cancellation is propagated (Done closed and Err returned)
	if !snapshot.IsDoneClosed {
		t.Fatalf("expected Done channel to be closed when fallback is enabled and context is canceled")
	}
	if snapshot.ContextError != context.Canceled {
		t.Fatalf("expected context.Canceled, got %v", snapshot.ContextError)
	}
	// 4. Gin local Set() takes precedence over request context value
	if snapshot.GinLocalOverride != "gin-value" {
		t.Fatalf("expected Gin local value 'gin-value' to override request context, got %v", snapshot.GinLocalOverride)
	}
}

func TestGinGetOnlyQueriesInternalKeysEvenWithFallback(t *testing.T) {
	engine := BuildEngine(true)

	var snapshot ContextSnapshot
	RecordContextState(engine, "/string-lookup", "sessionToken", "", "", &snapshot)

	ctx := context.WithValue(context.Background(), "sessionToken", "tok_live_xyz")
	req := httptest.NewRequest(http.MethodGet, "/string-lookup", nil).WithContext(ctx)
	rec := httptest.NewRecorder()
	engine.ServeHTTP(rec, req)

	if rec.Code != http.StatusOK {
		t.Fatalf("expected HTTP 200, got %d", rec.Code)
	}

	// c.Value("sessionToken") delegates and finds the value
	if snapshot.ValueFromContext != "tok_live_xyz" {
		t.Fatalf("expected c.Value() to find 'tok_live_xyz', got %v", snapshot.ValueFromContext)
	}

	// But c.Get("sessionToken") and c.GetString("sessionToken") strictly check c.Keys
	if snapshot.GinGetExists {
		t.Fatalf("expected c.Get() exists to be false for request context key, got true")
	}
	if snapshot.GinGetValue != nil {
		t.Fatalf("expected c.Get() value to be nil, got %v", snapshot.GinGetValue)
	}
	if snapshot.GinGetString != "" {
		t.Fatalf("expected c.GetString() to be empty string, got %q", snapshot.GinGetString)
	}
}
go.mod
module example.com/gin-context-fallback

go 1.25.0

require github.com/gin-gonic/gin v1.12.0

require (
	github.com/bytedance/gopkg v0.1.3 // indirect
	github.com/bytedance/sonic v1.15.0 // indirect
	github.com/bytedance/sonic/loader v0.5.0 // indirect
	github.com/cloudwego/base64x v0.1.6 // indirect
	github.com/gabriel-vasile/mimetype v1.4.12 // indirect
	github.com/gin-contrib/sse v1.1.0 // indirect
	github.com/go-playground/locales v0.14.1 // indirect
	github.com/go-playground/universal-translator v0.18.1 // indirect
	github.com/go-playground/validator/v10 v10.30.1 // indirect
	github.com/goccy/go-json v0.10.5 // indirect
	github.com/goccy/go-yaml v1.19.2 // indirect
	github.com/json-iterator/go v1.1.12 // indirect
	github.com/klauspost/cpuid/v2 v2.3.0 // indirect
	github.com/leodido/go-urn v1.4.0 // indirect
	github.com/mattn/go-isatty v0.0.20 // indirect
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
	github.com/modern-go/reflect2 v1.0.2 // indirect
	github.com/pelletier/go-toml/v2 v2.2.4 // indirect
	github.com/quic-go/qpack v0.6.0 // indirect
	github.com/quic-go/quic-go v0.59.0 // indirect
	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
	github.com/ugorji/go/codec v1.3.1 // indirect
	go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect
	golang.org/x/arch v0.22.0 // indirect
	golang.org/x/crypto v0.48.0 // indirect
	golang.org/x/net v0.51.0 // indirect
	golang.org/x/sys v0.41.0 // indirect
	golang.org/x/text v0.34.0 // indirect
	google.golang.org/protobuf v1.36.10 // indirect
)
go.sum
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE=
github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k=
github.com/bytedance/sonic/loader v0.5.0 h1:gXH3KVnatgY7loH5/TkeVyXPfESoqSBSBEiDd5VjlgE=
github.com/bytedance/sonic/loader v0.5.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo=
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
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/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw=
github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8=
github.com/gin-gonic/gin v1.12.0/go.mod h1:VxccKfsSllpKshkBWgVgRniFFAzFb9csfngsqANjnLc=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w=
github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM=
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM=
github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
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/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
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/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw=
github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY=
github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE=
go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0=
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI=
golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos=
golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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=

Ursprungs-Seeder

csx-seed