100 Commits
Author SHA1 Message Date
Alan Parra 3ff50a057a Fix improper userca.pem concatenation by kinitProvider (#69582)
* Test improper concatenation of userca.pem

* Fix improper PEM concatenation

* Use string-writing methods
2026-08-12 18:34:22 +00:00
Alan Parra 5f58d19a6d Mark the Sub CA RFD as implemented (#69471)
* Mark the Sub CA RFD as implemented

* Mention the initial release version
2026-08-07 17:06:27 +00:00
Alan Parra 5dacf73a10 chore: Bump github.com/klauspost/compress to v1.18.7 (#69146)
* chore: Bump github.com/klauspost/compress to v1.18.7

* tidy
2026-07-29 17:08:53 +00:00
Alan Parra dd55b4113a Tweak the required/documented CreateCSR permissions (#68978)
* Tweak the required/documented CreateCSR permissions

* make grpc
2026-07-29 16:26:00 +00:00
Alan Parra 90f4d2d85a Update CA override docs with async-CSR collection (#69071) 2026-07-28 19:04:53 +00:00
Alan Parra 0e69d15b4c chore: Bump oras.land/oras-go/v2 to v2.6.2 (#69060) 2026-07-27 17:16:08 +00:00
Alan Parra c18ebda366 Adapt tctl auth create-override-csr to recent RPC changes (#69018)
* Adapt `tctl auth create-override-csr` to recent RPC changes

* make cli-docs
2026-07-24 20:20:57 +00:00
Alan Parra c0000f34d9 chore: Bump e/ (#68945) 2026-07-23 14:35:15 +00:00
Alan ParraandTyler Richardson 7ac7642cde Implement the PendingCSRRequest storage service (#68774)
* Define and implement PendingCSRRequestService

* Add cache/events support

* Wire to server init

* Use the proto Opaque API

* Move marshal/unmarshal funcs to lib/services/local, unexpose

* Remove extraneous "(" from error message

Co-authored-by: Tyler Richardson <[email protected]>

* s/ListPendingCSRRequest/ListPendingCSRRequests/

---------

Co-authored-by: Tyler Richardson <[email protected]>
2026-07-23 13:46:31 +00:00
Alan Parra 97dd0829dc chore: Bump /x/net and /x/text (#68893)
* chore: Bump golang.org/x/net to v0.57.0

* chore: Bump golang.org/x/text to v0.40.0

* tidy

* Fix TestSSHKeysEqual
2026-07-22 20:29:28 +00:00
Alan Parra 72f16df250 Add the PendingCSRRequest proto (#68759)
* Document CRL changes, fix typos

* Add the PendingCSRRequest proto

* Add PendingCSRRequest to client/proto.Event

* make grpc

* Document that a successful CreateCSRResponse always has a CSR

* make grpc
2026-07-21 16:46:33 +00:00
Alan Parra bec3e5afac chore: Bump golangci-lint to v2.12.2 (#68802)
* Use reflect.Pointer

* Fix sloglint offenders

* Bump golangci-lint to v2.12.2
2026-07-20 15:27:00 +00:00
Alan Parra 6b78c83d36 Fix non-snake-case logging key (#68772) 2026-07-17 20:38:15 +00:00
Alan ParraandPaul Gottschling 935a3afbe0 Update the CA override guide with new features and commands (#68402)
* Fold db_client and windows section using <details>

* Fix incorrect heading reference

* Update the CA override guide with new features and commands

* s/Auth instances/Auth Service instances/

Co-authored-by: Paul Gottschling <[email protected]>

* Revert "Fold db_client and windows section using <details>"

This reverts commit 427e05fbf4.

* Move "disabled overrides" to their own section

* Use "multi-Auth clusters with per-instance HSM keys"

* Adjust multi-Auth language

* Split commands into blocks

* Mention "each certificate" in step 4

---------

Co-authored-by: Paul Gottschling <[email protected]>
2026-07-17 11:15:43 +00:00
Alan Parra 6ce338c3e3 Forbid uses of golang.org/x/crypto/openpgp (#68732) 2026-07-16 21:30:14 +00:00
Alan Parra 5b440e79d9 chore: Bump helm.sh/helm/v3 to v3.21.3 (#68595)
* chore: Bump helm.sh/helm/v3 to v3.21.3

* tidy
2026-07-16 20:12:35 +00:00
Alan Parra 500aed1dbf chore: Update k8s modules to v0.36.2 (#68645)
* Bump k8s modules to v0.36.2

* Bumo sigs.k8s.io/controller-runtime and controller-tools

* make go-mod-tidy-all

* make grpc

* Address import deprecations

* Address scheme.Builder deprecation

* Fix integration/ build

* make fix-imports
2026-07-15 19:01:47 +00:00
Alan Parra b69f23b0d3 Document CA override metrics (#68428) 2026-07-15 13:48:53 +00:00
Alan Parra f53ec067da Add the CA overrides test plan (#68404) 2026-07-13 22:09:08 +00:00
Alan Parra 2727803f41 chore: Bump github.com/google/go-attestation to v0.6.1 (#68596)
* chore: Bump github.com/google/go-attestation to v0.6.1

* tidy
2026-07-13 22:05:08 +00:00
Alan Parra 20cd762002 Record Sub CA prometheus metrics (#68426)
* Record Sub CA prometheus metrics

* Register metrics on Auth startup
2026-07-13 21:00:36 +00:00
Alan Parra f4abeccdc0 chore: Bump github.com/sigstore/timestamp-authority/v2 to v2.1.2 (#68467)
* chore: Bump github.com/sigstore/timestamp-authority/v2 to v2.1.2

* tidy
2026-07-09 13:02:12 +00:00
Alan Parra c9855cccd3 chore: Bump github.com/yuin/goldmark to v1.7.17 (#68466)
* chore: Bump github.com/yuin/goldmark to v1.7.17

* tidy
2026-07-08 23:47:16 +00:00
Alan Parra f82d5b4ed8 chore: Bump github.com/sigstore/timestamp-authority/v2 to v2.1.0 (#68446)
* chore: Bump github.com/sigstore/timestamp-authority/v2 to v2.1.0

* tidy
2026-07-08 13:21:57 +00:00
Alan Parra 8a8916d436 Remove unused CertAuthorityOverride event codes (#68319) 2026-07-02 13:35:07 +00:00
Alan Parra 686de23118 Improve Sub CA Windows docs (#67768)
* Improve Sub CA Windows docs

* Improve db_client trust chain documentation
2026-06-29 15:01:45 +00:00
Alan Parra ff63bc8499 Add the tctl auth update-override command (#68024)
* Add the `tctl auth update-override` command

* make cli-docs

* Use proto opaque API

* Use subca.NormalizePublicKey
2026-06-29 12:09:15 +00:00
Alan Parra 4727457dfb chore: Address the latest govulncheck findings (#68149)
* chore: Bump /x/image and go-pkcs12

* chore: Bump github.com/sigstore/cosign/v3 to v3.0.6

* make go-mod-tidy-all

* make grpc

* Keep k8s.io/ modules in lockstep

* make go-mod-tidy-all
2026-06-26 16:18:34 +00:00
Alan Parra 72ba9740ef Add the subca.NormalizePublicKey method (#68059) 2026-06-26 13:37:29 +00:00
Alan Parra 4a778e724a Bump e/ (#68061) 2026-06-23 19:41:45 +00:00
Alan Parra 4edb720912 Add a field mask to UpdateCertificateOverrideRequest (#68018)
* Add a field mask to UpdateCertificateOverrideRequest

* make grpc
2026-06-23 11:03:58 +00:00
Alan Parra 76aad3bbcf Add the tctl auth delete-override command (#67923)
* Add the `tctl auth delete-override` command

* make cli-docs

* Use proto opaque API
2026-06-19 18:05:00 +00:00
Alan Parra 72d22e600a Add the tctl auth create-override command (#67907)
* Add the `tctl auth create-override` command

* Improve add help strings

* make cli-docs

* Use proto opaque API
2026-06-19 16:19:20 +00:00
Alan Parra d5feb757cd Add ConditionalDelete to CA overrides and generic.Service (#67870)
* Add SubCAService.ConditionalDeleteCertAuthorityOverride

* Add ConditionalDelete to lib/services interface

* Add ConditionalDelete to generic.Service and ServiceWrapper
2026-06-18 16:09:41 +00:00
Alan Parra 54ce80d125 Fix command name in debug logs (#67853) 2026-06-16 17:18:58 +00:00
Alan Parra 9e4afcfb96 chore: Bump e/ (#67802) 2026-06-15 13:45:31 +00:00
Alan Parraandrosstimothy fbc47e7d37 Add public docs for the CA override feature (#67403)
* Add public docs for the CA override feature

* Use `code` blocks instead of `shell`

* Number steps as n/d. Move alternatives to H3.

* Move intro paragraphs to "How it works"

* Remove "Supported CAs" section, move its contents to other sections

* Mention specific commands in the info box

* Emphasize future growth

Co-authored-by: rosstimothy <[email protected]>

---------

Co-authored-by: rosstimothy <[email protected]>
2026-06-09 14:00:58 +00:00
Alan Parra 34354310c7 Migrate subca protos using open2opaque (#67559) 2026-06-08 18:33:16 +00:00
Alan Parra e71f2d11a4 Update Sub CA proto comments (#67390)
* Document that public_key_hash_to_crl keys are lowercased

* Fix pseudocode on DatabaseCertResponse

* make grpc
2026-06-03 13:25:19 +00:00
Alan Parra cbf2e3031c Clarify CalculateTrustedDeviceRequirement godoc (#67389) 2026-06-03 12:54:47 +00:00
Alan Parra d18d0cb3a0 Update RFD 0237 with implementation changes (#67341)
* Update cache behavior

* Document create-override-csr behavioral changes (outputs to stdout)

* Favor "O=" over the custom OID

* Document "start session" event changes

* Drop --subject use in a multi-key scenario

* Appease cspell

* Drop types.X509Certificate, update TrustChain comments

* Update example public keys to match implementation
2026-06-02 15:42:54 +00:00
Alan Parra 049a635379 Refactor duplicated CA override logic into lib/subca (#67023)
* Refactor duplicated CA override logic into lib/subca

* Make getClientCert resilient to trailing PEM whitespace

* Drop a.subCAEnabled from lib/auth/ca_override.go
2026-05-27 14:32:19 +00:00
Alan Parra 982315065e Remove the subca.Enabled() feature guard (#66916)
* Remove subca.Enabled() checks

* nit: Sort the resources.Handlers() map

* Remove feature checks from lib/auth

* Remove feature flag from subca.NewCAOverrideResolver()

* Delete lib/subca/feature.go

* Update godoc on NewCAOverrideResolver
2026-05-27 13:43:58 +00:00
Alan Parra 60dc84987d Enable the Sub CA feature (#66495) 2026-05-26 14:58:57 +00:00
Alan Parra eadd080306 Fix TestConnectivityDuringAuthRestart flakiness (#67039) 2026-05-26 09:33:38 +00:00
Alan Parra a6b9e2fd49 chore: Bump golang.org/x/ dependencies (#67011)
* chore: Bump golang.org/x/ dependencies

* tidy

* Fix TestTCPIPForward (close resources in the correct order)
2026-05-25 14:27:42 +00:00
Alan Parra 31074c2661 Calculate CA overrides on GenerateDatabaseCert (#66770)
* lib/subca includes override CA in chain

* Calculate CA overrides on GenerateDatabaseCert

* Propagate CA override details to DatabaseSessionStart events

* Fix breakage on ./lib/srv/db

* Include only known CAs on CACerts

* Tweak getDatabaseCACerts error wrapping message

* Add godoc to dbAuth.WithSession

* Review: Deterministic PEM ordering

* Review: Fix session.caOverrideDetails assertion

* Review: Fix comment typo

* Review: Explain lack of TrustChain/CAOverride on generateDatabaseServerCert

* Remove unused func

* Fix build and tests after rebase
2026-05-20 14:21:22 +00:00
Alan Parra d99dc46cf6 Add TrustChain and CAOverrideDetails to DB Access protos (#66767)
* Add TrustChain and CAOverrideDetails to DB Access protos

* make grpc
2026-05-20 13:27:47 +00:00
Alan Parra d638173c1b Deny watchers for cert_authority_override on OSS Auth (#66644)
* Make the cache resilient CA override NotImplemented

* Don't apply overrides on OSS builds

* Use modulestest.EnterpriseModules()

* Revert "Make the cache resilient CA override NotImplemented"

This reverts commit d07c9db8e0.

* Deny watchers for cert_authority_override in OSS Auth

* Tweak watcher debug message

* Re-create watcher on events other than OpPut or OpDelete

* Fix verifyOpInitKindsForCAEvents return when `e.Resource==nil`

* Mention older control plane in comments

* Add SubKind to Windows CA override watchers

* Restore ForWindows watcher

* Revert "Add SubKind to Windows CA override watchers"

This reverts commit 458f93f5fd.
2026-05-15 20:56:52 +00:00
Alan Parra d63277ed90 chore: Bump e/ (#66666) 2026-05-12 14:30:13 +00:00
Alan Parra 6bd8a571f2 Match tctl auth export --type in create-override-csr (#66589) 2026-05-11 17:14:56 +00:00
Alan Parra 86efcb30c2 Apply overrides to Windows certificates (#66411)
* Apply overrides to Windows certificates

* Add lib/subca.CalculateOverrideResult.ToClientOverrideDetailsProto

* Propagate CA override details to audit
2026-05-11 17:03:50 +00:00
Alan Parra 02c315e31e chore: Bump /x/net in api/ and auxiliary modules (#66619)
* Update all Go modules to 1.25.10

* chore: Bump golang.org/x/net to v0.53.0

* Tidy modules
2026-05-11 17:03:45 +00:00
Alan Parra e73b836e5b chore: Bump e/ (#66586) 2026-05-08 21:16:42 +00:00
Alan Parra 309a83b0ad Watch and publish CA override CRLs to LDAP (#66487)
* Watch and publish CA override CRLs to LDAP

* Remove CN==ClusterName assumption from CA CRL publishing

* nit: Fix slog key on ./lib/winpki/ldap.go
2026-05-07 20:42:53 +00:00
Alan Parra 843333343e Implement CA override resolver logic (#66333) 2026-05-07 16:32:09 +00:00
Alan Parra 033367212c Fix TestSessionCache_watcher flakiness (#66442) 2026-05-06 18:01:10 +00:00
Alan Parra 13134bc98a Ignore "*.tftest.hcl" files on addlicense (#66481)
* Ignore "*.tftest.hcl" files on addlicense

* Ignore 'web/packages/teleterm/build/**'
2026-05-06 17:27:38 +00:00
Alan Parra fbd2c0dc28 Set the force flag for CA overrides on "tctl create -f" (#66334) 2026-05-04 14:11:56 +00:00
Alan Parra d9fbe37ac7 Fix flakiness in test certificate override creation (#66306) 2026-04-30 06:19:28 +00:00
Alan Parra 2c00ba55a1 Add the subca.ParseCAOverride helper (#66169)
* Add the subca.ParseCAOverride helper

* Add the parseCertificateAndPublicKey private helper

* nit: Comment spacing
2026-04-28 17:58:16 +00:00
Alan Parra 67aee15737 Add the "tctl auth create-override-csr" command (#65902)
* Add lib/subca.SupportedCATypes()

* Add the "tctl auth create-override-csr" command

* Rephrase comment on InitFunc

* Find min hash length before writing files

* Use slices.Clone

* Harden against unexpectedly small/uneven sized hashes

* Avoid using labels

* Output to stdout by default
2026-04-24 21:24:36 +00:00
Alan Parra 3126a84d00 Add CAOverride details to WindowsDesktopSessionStart events (#65862)
* Add CAOverride details to WindowsDesktopSessionStart events

* make grpc
2026-04-24 20:52:06 +00:00
Alan Parra 7978205fdc Validate OID components on DN conversions (#66018)
* Validate OID components on DN conversions

* Don't shadow the `i` variable

* Add missing t.Parallel()
2026-04-23 14:28:01 +00:00
Alan Parra fd2e58696d Add DistinguishedName proto conversions (#65900)
* Add DistinguishedName proto conversions

* Mention asn1.parseBase128Int validation of OIDs
2026-04-22 14:29:01 +00:00
Alan Parra 4d4e04eccd Add Web UI support for CA override audit events (#65850)
* Add Web UI support for CA override audit events

* make audit-event-reference

* Update web/README.md
2026-04-22 14:19:57 +00:00
Alan Parra 2edfe25ada Add dynamic marshalers for CertAuthorityOverride (#65858) 2026-04-17 14:44:02 +00:00
Alan Parra 93b1b583f0 Wire CertAuthorityOverride resources to the cache (#65805)
* Add CertAuthorityOverride to EventTo/FromGRPC

* Implement SubCAServiceGetter in lib/cache.Cache

* Implement SubCAServiceGetter in lib/auth/authclient.Cache

* Add dynamic marshalers for CertAuthOverride

* Drop dynamic marshalers

* Mimic backend keys in cache keys

* Test newAccessCacheForClient wiring

* Fix error message

* Return CertAuthorityOverride instead of ResourceHeader on OpDelete
2026-04-17 13:22:02 +00:00
Alan Parra b68cae7226 Fix ./lib/tpm tests using -tags=tpmsimulator (#65807)
* Fix ./lib/tpm tests using -tags=tpmsimulator

* Lint the `tpmsimulator` tag in CI
2026-04-16 15:07:00 +00:00
Alan ParraandTiago Silva 035aa48cd0 Implement SubCAServiceGetter in lib/auth/authclient.ClientI (#65759)
* Add SubCAService interfaces to lib/services

* Implement SubCAServiceGetter in lib/auth/authclient.ClientI

* Use GetCaOverride()

Co-authored-by: Tiago Silva <[email protected]>

* Rename DisplayName to FullName

---------

Co-authored-by: Tiago Silva <[email protected]>
2026-04-16 13:40:52 +00:00
Alan Parra 2e39551e1e Add override certificate validation (#65715) 2026-04-14 20:55:05 +00:00
Alan Parra 4ddbf66552 chore: Bump e/ (#65756) 2026-04-14 18:12:13 +00:00
Alan Parra 91beb189eb Add CertAuthorityOverride to the cache Event proto (#65538)
* Add CertAuthorityOverride to the cache Event proto

* make grpc
2026-04-08 21:26:31 +00:00
Alan Parra c91288e1ed Add tctl resource support for ca_overrides (#65281)
* Add the api/client.Client.SubCAClient() method

* Implement tctl resource support for cert_authority_override

* Remove `false` booleans

* Change "tctl create" message according to action

* Add support for all 3 forms of "tctl get"
2026-04-06 13:44:30 +00:00
Alan Parra 49aa67e90c Don't t.Parallel() new "tctl edit" subtests (#65346) 2026-04-06 13:41:13 +00:00
Alan Parra 5abac2131f Add the "tctl auth pub-key-hash" command (#65189)
* Add the "tctl auth pub-key-hash" command

* Rename test so it's clearly specific to the pub-key-hash command

* Rename prepareFlags to prepareCommand

* Fix typo on commandState.Stderr
2026-04-01 21:43:31 +00:00
Alan Parra 22956d8984 Fix "tctl edit" multiple resource bugs (#65268)
* tctl edit: Test multi-CA edit

* tctl edit: Fix edit/create fallback

* tctl edit: Key resources by subkind

* Add missing `defer f.Close()`

* Verify keying of new resources

* Remove nolint

* Remove yaml import alias

* Replace inline comment with const

* Use string concatenation
2026-04-01 21:01:40 +00:00
Alan Parra 3bfb11a811 Display a friendly resource name on SubCAService.Get/Delete errors (#65278)
* Display a friendly resource name on SubCAService.Get/Delete errors

* Use string concatenation. Comments.
2026-04-01 20:54:46 +00:00
Alan Parra 94aa26a705 Add godocs to tool/tctl/common/resources.Handler (#65238)
* Add godocs to tool/tctl/common/resources.Handler

* Change error to mention "tctl rm"
2026-04-01 11:58:20 +00:00
Alan Parra 49874e4ead Add a feature guard API to lib/subca (#65178) 2026-03-31 13:49:02 +00:00
Alan Parra 0670b3c650 Add "App Access" to the Device Trust session MFA test (#65111) 2026-03-27 16:48:54 +00:00
Alan Parra c20bc3e46f Update Device Trust reference config (#65000) 2026-03-25 13:08:52 +00:00
Alan Parra 457306ac51 Implement local.SubCAService CRUD operations (#64320)
* Implement local.SubCAService CRUD operations

* Test wrong revision on Update. Use correct context.
2026-03-24 19:43:30 +00:00
Alan Parra c7a98a6c72 Add Sub CA event codes (#64452)
* Add CertAuthOverrideEvent to "OneOf"

* make grpc

* Add Sub CA event codes

* Trim CertAuthorityOverrideEvent
2026-03-13 16:50:09 +00:00
Alan Parra 1925fec14b Refactor subca validation to lib/subca (#64563)
* Copy validation functions to parsed.go

* Add parsed types and adjust code

* Copy tests to parsed_test.go

* Adjust tests, test parsed resource

* Use lib/subca validation in storage, simplify testing
2026-03-13 16:45:22 +00:00
Alan Parra 7fd764a918 Fix watcher race on TestCRLUpdateSchedule (#64530) 2026-03-11 18:53:26 +00:00
Alan Parra 0e9ed4ef01 Update RFD 0237 with implementation findings (#64204)
* fix: "Subject requirements" link

* fix: `tctl auth delete-override` requires the public key

* fix: Event repeated proto tag

* Update audit event definitions

* Remove tlsca.ClusterName refactor details

* Update key space

* Change key prefix to "/cluster"
2026-03-05 22:24:25 +00:00
Alan Parra 6d6b344e5c Implement local.SubCAService Create and Get (#64223)
* Add KindCertAuthorityOverride

* Add lib/subca.ParseCertificateOverrideCertificate

* Add a minimal local.SubCAService creation API

* Add the Sub CA storage testenv

* Implement local.SubCAService create and get

* Refactor caOverridesPrefix to a func

* Replace inline comment with const

* Fix after generic.Service merge

* Change key prefix to "/cluster"

* Drop lateral validation

* Simplify validation

* Validate chain cryptographically
2026-03-05 15:40:05 +00:00
Alan Parra cf41c0e926 Document RemoveCertificateOverride's non-idempotent behavior (#64209)
* Document RemoveCertificateOverride's non-idempotent behavior

* make grpc
2026-03-05 15:39:34 +00:00
Alan Parra 2f2181f83c chore: Bump e/ (#64281) 2026-03-04 21:59:19 +00:00
Alan Parra f7ab9b0a99 Add composite key support to generic.Service (#64115)
* Refactor reusable generic.Service state into its own struct

* Refactor NameKeyFunc to allow composite keys

* Drop the `name` param from NameKeyFunc
2026-03-04 17:13:46 +00:00
Alan Parra a0fdbaf18d Add the tlscatest.GenerateSelfSignedCA helper (#64113)
* Add the tlsca.GenerateSelfSignedCAForTesting helper

* Move to tlscatest

* Assert cluster name
2026-03-02 16:29:45 +00:00
Alan Parra 0834a01360 Add api/utils/tlsutils.ParseCertificatePEMStrict (#64114) 2026-03-02 16:29:35 +00:00
Alan Parra 6df9b03f0c Add lib/subca.HashPublicKey (#64116) 2026-02-27 14:05:27 +00:00
Alan Parra 6a09a757b3 chore: Bump Buf to v1.66.0 (#64107) 2026-02-27 13:24:54 +00:00
Alan Parra 3697eac6d2 chore: Bump github.com/sigstore/cosign/v3 to v3.0.5 (#64069) 2026-02-25 13:51:53 +00:00
Alan Parra 8fcb072902 chore: Bump opentelemetry to v1.40.0 (#64014)
* chore: Bump otel packages to v1.40.0

* Bump otel contrib packages

* Tidy modules

* Bump otel in examples

* fix: Use a local copy of otelhttp.DefaultClient

* Move otelhttp to lib/observability/
2026-02-20 18:45:30 +00:00
Alan Parra 3622a40e17 Add event protos for Sub CAs (#63777)
* Add event protos for Sub CAs

* make grpc
2026-02-19 14:28:26 +00:00
Alan Parra b027f00abe Add proto definitions for the Sub CA feature (#63737)
* Add proto definitions for the Sub CA feature

* make grpc

* Add license

* Document print format of PublicKeyHash

* Simplify comment on ATV.value

* Document CreateCSR behavior on HSMs

* make grpc

* Use an optional value for ATV

* make grpc

* List doesn't take an ID

* Print public key hashes in hex

* Mention that each Auth signs all its keys in CreateCSR

* make grpc

* Add Create and Update RPCs

* make grpc

* Fix typos and Get/List responses

* make grpc
2026-02-19 14:22:26 +00:00
Alan Parra 1b96139023 chore: Bump golangci-lint to v2.10.1 (#63939)
* Fix "builder.WriteString(fmt.Sprintf(...))" calls

* chore: Bump golangci-lint to v2.10.1

* Bump e/

* Fix a few more WriteString/Sprintf occurrences
2026-02-19 13:04:57 +00:00