From 0b3aed47a5c22d6f1a603623038d212a65ab2663 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:26:00 -0400 Subject: [PATCH 01/12] fix(deps): point the Go client replace at v1_6_0 tmi-clients regenerated its Go clients to 1.3.0/1.6.0 and removed the v1_5_0 directory this module's `replace` pointed at, so `go build ./cmd/dbtool` failed with "replacement directory ... does not exist". That broke `make cats-seed` and therefore every CATS campaign. v1_6_0 is a drop-in: only the import path changes, no call sites move, and the version now matches the server it is generated from. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- cmd/dbtool/data_api.go | 2 +- go.mod | 4 ++-- go.sum | 30 ------------------------------ 3 files changed, 3 insertions(+), 33 deletions(-) diff --git a/cmd/dbtool/data_api.go b/cmd/dbtool/data_api.go index 920f2812..da205d1a 100644 --- a/cmd/dbtool/data_api.go +++ b/cmd/dbtool/data_api.go @@ -12,7 +12,7 @@ import ( "strings" "time" - tmiclient "github.com/ericfitz/tmi-clients/go-client-generated/v1_5_0" + tmiclient "github.com/ericfitz/tmi-clients/go-client-generated/v1_6_0" "github.com/ericfitz/tmi/internal/slogging" "github.com/ericfitz/tmi/test/testdb" ) diff --git a/go.mod b/go.mod index a17bc858..67a3eeae 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.26.2 toolchain go1.26.5 -replace github.com/ericfitz/tmi-clients/go-client-generated/v1_5_0 => ../tmi-clients/go-client-generated/v1_5_0 +replace github.com/ericfitz/tmi-clients/go-client-generated/v1_6_0 => ../tmi-clients/go-client-generated/v1_6_0 require ( github.com/DATA-DOG/go-sqlmock v1.5.2 @@ -14,7 +14,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.1 github.com/coreos/go-oidc/v3 v3.20.0 github.com/crewjam/saml v0.5.1 - github.com/ericfitz/tmi-clients/go-client-generated/v1_5_0 v0.0.0-20260701025703-ad400e64ba0c + github.com/ericfitz/tmi-clients/go-client-generated/v1_6_0 v0.0.0-20260701025703-ad400e64ba0c github.com/evanphx/json-patch v5.9.11+incompatible github.com/fsnotify/fsnotify v1.10.1 github.com/getkin/kin-openapi v0.145.0 diff --git a/go.sum b/go.sum index 82f8542f..3bc8538d 100644 --- a/go.sum +++ b/go.sum @@ -43,60 +43,32 @@ github.com/alicebob/miniredis/v2 v2.38.0 h1:nZAzCR+Lj+Vxk4ZXzm2NuKq2O33RXj1XxJ2e github.com/alicebob/miniredis/v2 v2.38.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= -github.com/aws/aws-sdk-go-v2 v1.43.0 h1:fharf/WhbRAVZ1du0QL7roNFxZ6T/sWr+4Ni617bwSI= -github.com/aws/aws-sdk-go-v2 v1.43.0/go.mod h1:5pKeft2eJj+gElQ38Jqg4ibCqh+/AK33/0X3hip7IjM= github.com/aws/aws-sdk-go-v2 v1.43.1 h1:t6AQIB1uQ7HJA+0CDRWjOYG5MfwnOyyDsN4vRDHcwIY= github.com/aws/aws-sdk-go-v2 v1.43.1/go.mod h1:WEzLKBh/mEjXvx1FtQMWgSxMSTVqxQzjkRtk5fa3wkg= -github.com/aws/aws-sdk-go-v2/config v1.32.31 h1:n4nY9O3QKoHIkL85EX+V8RcMFtOhlpTFhGArg915PXk= -github.com/aws/aws-sdk-go-v2/config v1.32.31/go.mod h1:PN0NYDCCoOpGGsZ2+elDUidmHfQBPyYzN2GCgl8HEBs= github.com/aws/aws-sdk-go-v2/config v1.32.32 h1:CcYdrcIjulT7xbTSqeEInh/PqUWv10LMznfdbNRwHBM= github.com/aws/aws-sdk-go-v2/config v1.32.32/go.mod h1:Rk+LRPrR2oLWLOqUbhNOKYOJ8chU2aZ/R+Sdi/Bc/+4= -github.com/aws/aws-sdk-go-v2/credentials v1.19.30 h1:TTCvvzFU6gXa4iJecNG/0F/B0oYTiazoRECr2XyLHrY= -github.com/aws/aws-sdk-go-v2/credentials v1.19.30/go.mod h1:jKxAp2AEncnliinzpgOSZDFv6+VjvWhjw/AtbfsWT9U= github.com/aws/aws-sdk-go-v2/credentials v1.19.31 h1:olhkNt+ZMx+X40XxeyrflmdBx145TP+3DqaS4s8GsbI= github.com/aws/aws-sdk-go-v2/credentials v1.19.31/go.mod h1:twHrsQY+gUmkTOsDqYwBBrdP41FvzO86qjiRbj7GXcw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.31 h1:kfVL5wAunCJycL6MOQ6aNh6PlAYEymflcjuKmrWUA0o= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.31/go.mod h1:nWfRNDAppujCQgOUd43lKT4yeLv9z3nJ3bw1G3BgQKo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.32 h1:zheY8iDNNzOHGS2aBJ5GWjeRbhsGuSg4+s20NZ0AywQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.32/go.mod h1:bkw+ZoqafHSo/3lQBm+xzWf4kh79hqP9M2kPtmOFZIY= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.31 h1:Z8F3hfCY33IGpJjFAnv0wvtv1FIKj1GHmRDEYqy64tw= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.31/go.mod h1:aVyUoytEyOViR6jhq6jula0xkc5NfBE2hgeF6BvOrao= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.32 h1:PqiNS1QVFVctiMX30IwaY6pM3cUUfZFe+HPKmlZVY4I= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.32/go.mod h1:jqisrvz2jliDnF3dW4wO9ZT1lHz1d6pXjftFyyZyqjY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.31 h1:hyOxUyXdh3AyjE93gBgsfziJag9ACwcs+ZpDBLzi8mw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.31/go.mod h1:OERqI9k0draSLB8O8woxY3q25ZWTELRK4RRoLMuMZFo= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.32 h1:bWzam6cUCb/BRiZYmmdwPg+FvZy3/QygB9u6z7BIlnM= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.32/go.mod h1:VGTWlYbW4qvz9djYt2lj35gSAZS5aZ2xKn85wXziw6A= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.32 h1:0MrUL35H/Y4kdFfItoR5jCgtDQ4Z/8LudAoIHRfA4hE= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.32/go.mod h1:2tNZkuWz54arj8mHVf+8Y7cKkcD8Wr/fBpENgEXpjLc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.33 h1:J4GttOtoayrtx24b8NODgSvJTAQ2qj/E5YPEeaYrYh0= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.33/go.mod h1:G8G6DL9QyBO/vuHXJ/JG29qy2hBNYrQxDYJmqMStWJ4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 h1:mbRIur/BiHK6SKPjoBIXSE/hJ6g6JGRLuxQy1jGjlN4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13/go.mod h1:ITg9em2KbJx1s0y4aqRX5OYWG6HBZ5TVR//OdpEZ2CQ= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.14 h1:SA43nfaY7+1jjMNIc2ywu99JLJLButtIdLP6j+bT870= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.14/go.mod h1:Du3llKcwbQvHsTXSLzTOGQz0DTDBMEzdg7DAGu7inrY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.31 h1:w2SIhW92DZPFrSL4ksVCr8IYff5OZwIcxg8+95tzvAI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.31/go.mod h1:wAhpCQbkov+IcvjozJbd2xRCoZybUEHNkcFunssNACg= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.32 h1:dWFHhQpbf7Yui4fsy+bJUy54JrmpJHIyAuUkcadqwMo= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.32/go.mod h1:oN4Iix8rAbyTx6tFMP9mS8RFLJnDeZSbSsHwXYSs3tE= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.0 h1:pFFG4fjjuxCrCnAQJg/O33h947MBR8dvQb+FX93Ed+k= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.0/go.mod h1:62iixi6C/4RcKklwtnn+LATl9ZyisVjf6ahGmITBpYA= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.1 h1:TpALnO2Chp6wQOihK/v+qoPN80YOyu3hG/MQ9dG+DGo= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.1/go.mod h1:nfho2mqRsESddA8OHQiiqhNKaZtGW1Pe1sf6RJFYnfE= -github.com/aws/aws-sdk-go-v2/service/signin v1.5.0 h1:OHH5iTQvVGmfHjX/5Q+vFuA/Rf2x6/95aJ/75QCQSm4= -github.com/aws/aws-sdk-go-v2/service/signin v1.5.0/go.mod h1:mCF3AK9PpL49oOrhniUXWAfhVBVQ/XbytoE5eccZUIs= github.com/aws/aws-sdk-go-v2/service/signin v1.5.1 h1:i7p1pinRrWxJp+sD+u2pCWYdcB9vL1VNIPKWssNOp4o= github.com/aws/aws-sdk-go-v2/service/signin v1.5.1/go.mod h1:gtQTy/o93W5Sx0IFdAkn7Usa+Qg7ydG2+9GC7MoKqPU= -github.com/aws/aws-sdk-go-v2/service/sso v1.33.0 h1:CaJyYhxBE0M/HJX/YvSaSmQlsI91VHB0lKU8LtLxL3A= -github.com/aws/aws-sdk-go-v2/service/sso v1.33.0/go.mod h1:+e6BMRMPjBQoCw/WovYR9GLy2IU0z4Q77smOB1DraSg= github.com/aws/aws-sdk-go-v2/service/sso v1.33.1 h1:GBLnqpnDEn/+vnBGlxAJ4+jopfzW7vVT0++jLPgWN9A= github.com/aws/aws-sdk-go-v2/service/sso v1.33.1/go.mod h1:RK3AEzTbSEbGLQDd3qPA5ZLXm6mfB9shq5sbiuaF7AU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.0 h1:tC323YV77QdafeBr6LUhLDTsboyuyHLNRwAyCP44kGU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.0/go.mod h1:SfLK1sgviHmbI+MozR9iDwDjL4cdCVZtahsjoR+z7wg= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.1 h1:1DWsRED+rRzFQ1rDWpwkipw67tp4kyQByQg9POWYl80= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.1/go.mod h1:nadMS3uTrTANeD214BBuPg/SJpJ/UhBiNuqN1Z2Ay4c= -github.com/aws/aws-sdk-go-v2/service/sts v1.45.0 h1:Pd6PNlp4t8PTXxqzstICl52Wsy78vpjFZ7PRUj44mJc= -github.com/aws/aws-sdk-go-v2/service/sts v1.45.0/go.mod h1:rmQ0TnHzuLPmabgjPcsywhsSOmaBDgzR4zvDxSPsGdg= github.com/aws/aws-sdk-go-v2/service/sts v1.45.1 h1:JugCuomdxnZwjp5xvqSuPgeWRecAvkno7EwXmR/ZXWE= github.com/aws/aws-sdk-go-v2/service/sts v1.45.1/go.mod h1:dtViDu/XqU2gq1eeTFz7Ijb7xCHoso8CaBOqYVshoqc= github.com/aws/smithy-go v1.27.5 h1:d1ro7KpYOYwP6m73YFa+Kc/A130VsAdX68SpsJwARMM= @@ -356,8 +328,6 @@ github.com/onsi/gomega v1.42.1 h1:iN1rCUX+44NZ1Dc97MPoeFYbFR0vh8zxoxMFwKdyZ6I= github.com/onsi/gomega v1.42.1/go.mod h1:REff/hsDsodHoKlWsP2mAPhu1+5/6hVYNf9rIEBpeSg= github.com/oracle-samples/gorm-oracle v1.1.3 h1:B9Ij8EqYt+WQgeayIB9H9mjRTXnEc+xPYUEvRmFcoIU= github.com/oracle-samples/gorm-oracle v1.1.3/go.mod h1:HP3O55zJhHKDL38yd6DjGv5+uEa0OS1nG0sII0tzEbc= -github.com/oracle/oci-go-sdk/v65 v65.121.1 h1:nXrE3r1qmBULT6Zp2koM2bJGDvsFtMX/be/NV9MS3Bw= -github.com/oracle/oci-go-sdk/v65 v65.121.1/go.mod h1:Pzy+BpgkDesvGZXEHgslwhIYobHCPHg6wRta1mWnlqQ= github.com/oracle/oci-go-sdk/v65 v65.122.0 h1:yB587yZUGe/syyyp1CHlW74EXo38Rfye5vD3Ox4Cdq4= github.com/oracle/oci-go-sdk/v65 v65.122.0/go.mod h1:Pzy+BpgkDesvGZXEHgslwhIYobHCPHg6wRta1mWnlqQ= github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= From f6b281cc2d93eea5b290fdc41b7b57fad45a1587 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:26:09 -0400 Subject: [PATCH 02/12] fix(test): tidy the nested integration module test/integration is its own module and `replace`s the parent to ../.., so the root module's dependency bumps raise its minimum versions too. Its go.mod had drifted behind, and Go refused to run the suite at all: "updates to go.mod needed; to update it: go mod tidy". The failure was quiet in the worst way. `make test-integration` still reported "22 passed, 0 failed" because the api/ package ran fine; the workflows package -- 60 tests across workflows, tier2_features and tier3_edge_cases -- never compiled. Only the skip-is-a-failure gate added in 41abfe54 turned that into a non-zero exit. Versions only, no code changes. With this the full suite runs: 82 passed, 0 failed, 9 skipped. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- test/integration/go.mod | 42 ++++++++++---------- test/integration/go.sum | 88 ++++++++++++++++++++--------------------- 2 files changed, 65 insertions(+), 65 deletions(-) diff --git a/test/integration/go.mod b/test/integration/go.mod index 46387a68..6100e985 100644 --- a/test/integration/go.mod +++ b/test/integration/go.mod @@ -23,21 +23,21 @@ require ( github.com/VictoriaMetrics/easyproto v1.2.0 // indirect github.com/alicebob/miniredis/v2 v2.38.0 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aws/aws-sdk-go-v2 v1.43.0 // indirect - github.com/aws/aws-sdk-go-v2/config v1.32.31 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.30 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.31 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.31 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.31 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.32 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.31 // indirect - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.0 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.5.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.33.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.45.0 // indirect - github.com/aws/smithy-go v1.27.4 // indirect + github.com/aws/aws-sdk-go-v2 v1.43.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.32 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.31 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.32 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.32 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.32 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.33 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.14 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.32 // indirect + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.1 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.5.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.33.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.45.1 // indirect + github.com/aws/smithy-go v1.27.5 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/beevik/etree v1.7.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -76,7 +76,7 @@ require ( github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.18 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.19 // indirect github.com/googleapis/gax-go/v2 v2.23.0 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/gorilla/mux v1.8.1 // indirect @@ -109,7 +109,7 @@ require ( github.com/oasdiff/yaml v0.1.1 // indirect github.com/oasdiff/yaml3 v0.0.14 // indirect github.com/oracle-samples/gorm-oracle v1.1.3 // indirect - github.com/oracle/oci-go-sdk/v65 v65.121.1 // indirect + github.com/oracle/oci-go-sdk/v65 v65.122.0 // indirect github.com/pelletier/go-toml/v2 v2.4.3 // indirect github.com/pkoukk/tiktoken-go v0.1.8 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -119,7 +119,7 @@ require ( github.com/prometheus/otlptranslator v1.0.0 // indirect github.com/prometheus/procfs v0.21.1 // indirect github.com/quic-go/qpack v0.6.0 // indirect - github.com/quic-go/quic-go v0.60.0 // indirect + github.com/quic-go/quic-go v0.61.0 // indirect github.com/redis/go-redis/extra/rediscmd/v9 v9.21.0 // indirect github.com/redis/go-redis/extra/redisotel/v9 v9.21.0 // indirect github.com/richardlehane/mscfb v1.0.7 // indirect @@ -156,15 +156,15 @@ require ( go.uber.org/atomic v1.11.0 // indirect golang.org/x/arch v0.29.0 // indirect golang.org/x/crypto v0.54.0 // indirect - golang.org/x/exp v0.0.0-20260718201538-764159d718ef // indirect + golang.org/x/exp v0.0.0-20260727155853-b88d891fe743 // indirect golang.org/x/net v0.57.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.40.0 // indirect google.golang.org/api v0.290.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260720211330-0afa2a65878a // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260720211330-0afa2a65878a // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260727163830-6c54dddc4772 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260727163830-6c54dddc4772 // indirect google.golang.org/grpc v1.82.1 // indirect google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect diff --git a/test/integration/go.sum b/test/integration/go.sum index 4cfda281..f203094d 100644 --- a/test/integration/go.sum +++ b/test/integration/go.sum @@ -41,36 +41,36 @@ github.com/alicebob/miniredis/v2 v2.38.0 h1:nZAzCR+Lj+Vxk4ZXzm2NuKq2O33RXj1XxJ2e github.com/alicebob/miniredis/v2 v2.38.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= -github.com/aws/aws-sdk-go-v2 v1.43.0 h1:fharf/WhbRAVZ1du0QL7roNFxZ6T/sWr+4Ni617bwSI= -github.com/aws/aws-sdk-go-v2 v1.43.0/go.mod h1:5pKeft2eJj+gElQ38Jqg4ibCqh+/AK33/0X3hip7IjM= -github.com/aws/aws-sdk-go-v2/config v1.32.31 h1:n4nY9O3QKoHIkL85EX+V8RcMFtOhlpTFhGArg915PXk= -github.com/aws/aws-sdk-go-v2/config v1.32.31/go.mod h1:PN0NYDCCoOpGGsZ2+elDUidmHfQBPyYzN2GCgl8HEBs= -github.com/aws/aws-sdk-go-v2/credentials v1.19.30 h1:TTCvvzFU6gXa4iJecNG/0F/B0oYTiazoRECr2XyLHrY= -github.com/aws/aws-sdk-go-v2/credentials v1.19.30/go.mod h1:jKxAp2AEncnliinzpgOSZDFv6+VjvWhjw/AtbfsWT9U= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.31 h1:kfVL5wAunCJycL6MOQ6aNh6PlAYEymflcjuKmrWUA0o= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.31/go.mod h1:nWfRNDAppujCQgOUd43lKT4yeLv9z3nJ3bw1G3BgQKo= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.31 h1:Z8F3hfCY33IGpJjFAnv0wvtv1FIKj1GHmRDEYqy64tw= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.31/go.mod h1:aVyUoytEyOViR6jhq6jula0xkc5NfBE2hgeF6BvOrao= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.31 h1:hyOxUyXdh3AyjE93gBgsfziJag9ACwcs+ZpDBLzi8mw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.31/go.mod h1:OERqI9k0draSLB8O8woxY3q25ZWTELRK4RRoLMuMZFo= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.32 h1:0MrUL35H/Y4kdFfItoR5jCgtDQ4Z/8LudAoIHRfA4hE= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.32/go.mod h1:2tNZkuWz54arj8mHVf+8Y7cKkcD8Wr/fBpENgEXpjLc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 h1:mbRIur/BiHK6SKPjoBIXSE/hJ6g6JGRLuxQy1jGjlN4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13/go.mod h1:ITg9em2KbJx1s0y4aqRX5OYWG6HBZ5TVR//OdpEZ2CQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.31 h1:w2SIhW92DZPFrSL4ksVCr8IYff5OZwIcxg8+95tzvAI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.31/go.mod h1:wAhpCQbkov+IcvjozJbd2xRCoZybUEHNkcFunssNACg= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.0 h1:pFFG4fjjuxCrCnAQJg/O33h947MBR8dvQb+FX93Ed+k= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.0/go.mod h1:62iixi6C/4RcKklwtnn+LATl9ZyisVjf6ahGmITBpYA= -github.com/aws/aws-sdk-go-v2/service/signin v1.5.0 h1:OHH5iTQvVGmfHjX/5Q+vFuA/Rf2x6/95aJ/75QCQSm4= -github.com/aws/aws-sdk-go-v2/service/signin v1.5.0/go.mod h1:mCF3AK9PpL49oOrhniUXWAfhVBVQ/XbytoE5eccZUIs= -github.com/aws/aws-sdk-go-v2/service/sso v1.33.0 h1:CaJyYhxBE0M/HJX/YvSaSmQlsI91VHB0lKU8LtLxL3A= -github.com/aws/aws-sdk-go-v2/service/sso v1.33.0/go.mod h1:+e6BMRMPjBQoCw/WovYR9GLy2IU0z4Q77smOB1DraSg= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.0 h1:tC323YV77QdafeBr6LUhLDTsboyuyHLNRwAyCP44kGU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.0/go.mod h1:SfLK1sgviHmbI+MozR9iDwDjL4cdCVZtahsjoR+z7wg= -github.com/aws/aws-sdk-go-v2/service/sts v1.45.0 h1:Pd6PNlp4t8PTXxqzstICl52Wsy78vpjFZ7PRUj44mJc= -github.com/aws/aws-sdk-go-v2/service/sts v1.45.0/go.mod h1:rmQ0TnHzuLPmabgjPcsywhsSOmaBDgzR4zvDxSPsGdg= -github.com/aws/smithy-go v1.27.4 h1:JQcphmBN4f0q/sPqXqROIItRNV/hy10cgu7CsFy616M= -github.com/aws/smithy-go v1.27.4/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/aws-sdk-go-v2 v1.43.1 h1:t6AQIB1uQ7HJA+0CDRWjOYG5MfwnOyyDsN4vRDHcwIY= +github.com/aws/aws-sdk-go-v2 v1.43.1/go.mod h1:WEzLKBh/mEjXvx1FtQMWgSxMSTVqxQzjkRtk5fa3wkg= +github.com/aws/aws-sdk-go-v2/config v1.32.32 h1:CcYdrcIjulT7xbTSqeEInh/PqUWv10LMznfdbNRwHBM= +github.com/aws/aws-sdk-go-v2/config v1.32.32/go.mod h1:Rk+LRPrR2oLWLOqUbhNOKYOJ8chU2aZ/R+Sdi/Bc/+4= +github.com/aws/aws-sdk-go-v2/credentials v1.19.31 h1:olhkNt+ZMx+X40XxeyrflmdBx145TP+3DqaS4s8GsbI= +github.com/aws/aws-sdk-go-v2/credentials v1.19.31/go.mod h1:twHrsQY+gUmkTOsDqYwBBrdP41FvzO86qjiRbj7GXcw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.32 h1:zheY8iDNNzOHGS2aBJ5GWjeRbhsGuSg4+s20NZ0AywQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.32/go.mod h1:bkw+ZoqafHSo/3lQBm+xzWf4kh79hqP9M2kPtmOFZIY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.32 h1:PqiNS1QVFVctiMX30IwaY6pM3cUUfZFe+HPKmlZVY4I= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.32/go.mod h1:jqisrvz2jliDnF3dW4wO9ZT1lHz1d6pXjftFyyZyqjY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.32 h1:bWzam6cUCb/BRiZYmmdwPg+FvZy3/QygB9u6z7BIlnM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.32/go.mod h1:VGTWlYbW4qvz9djYt2lj35gSAZS5aZ2xKn85wXziw6A= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.33 h1:J4GttOtoayrtx24b8NODgSvJTAQ2qj/E5YPEeaYrYh0= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.33/go.mod h1:G8G6DL9QyBO/vuHXJ/JG29qy2hBNYrQxDYJmqMStWJ4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.14 h1:SA43nfaY7+1jjMNIc2ywu99JLJLButtIdLP6j+bT870= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.14/go.mod h1:Du3llKcwbQvHsTXSLzTOGQz0DTDBMEzdg7DAGu7inrY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.32 h1:dWFHhQpbf7Yui4fsy+bJUy54JrmpJHIyAuUkcadqwMo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.32/go.mod h1:oN4Iix8rAbyTx6tFMP9mS8RFLJnDeZSbSsHwXYSs3tE= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.1 h1:TpALnO2Chp6wQOihK/v+qoPN80YOyu3hG/MQ9dG+DGo= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.44.1/go.mod h1:nfho2mqRsESddA8OHQiiqhNKaZtGW1Pe1sf6RJFYnfE= +github.com/aws/aws-sdk-go-v2/service/signin v1.5.1 h1:i7p1pinRrWxJp+sD+u2pCWYdcB9vL1VNIPKWssNOp4o= +github.com/aws/aws-sdk-go-v2/service/signin v1.5.1/go.mod h1:gtQTy/o93W5Sx0IFdAkn7Usa+Qg7ydG2+9GC7MoKqPU= +github.com/aws/aws-sdk-go-v2/service/sso v1.33.1 h1:GBLnqpnDEn/+vnBGlxAJ4+jopfzW7vVT0++jLPgWN9A= +github.com/aws/aws-sdk-go-v2/service/sso v1.33.1/go.mod h1:RK3AEzTbSEbGLQDd3qPA5ZLXm6mfB9shq5sbiuaF7AU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.1 h1:1DWsRED+rRzFQ1rDWpwkipw67tp4kyQByQg9POWYl80= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.1/go.mod h1:nadMS3uTrTANeD214BBuPg/SJpJ/UhBiNuqN1Z2Ay4c= +github.com/aws/aws-sdk-go-v2/service/sts v1.45.1 h1:JugCuomdxnZwjp5xvqSuPgeWRecAvkno7EwXmR/ZXWE= +github.com/aws/aws-sdk-go-v2/service/sts v1.45.1/go.mod h1:dtViDu/XqU2gq1eeTFz7Ijb7xCHoso8CaBOqYVshoqc= +github.com/aws/smithy-go v1.27.5 h1:d1ro7KpYOYwP6m73YFa+Kc/A130VsAdX68SpsJwARMM= +github.com/aws/smithy-go v1.27.5/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/beevik/etree v1.7.0 h1:xjBk9O4p4x7D1YajePjfLzdaFC4/uYUENA7P0pv6gXA= @@ -176,8 +176,8 @@ github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0 github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/googleapis/enterprise-certificate-proxy v0.3.18 h1:hvVi34VucdrV1IIsiWuqYM8kutw/92MxNEFxCJZEh0k= -github.com/googleapis/enterprise-certificate-proxy v0.3.18/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k= +github.com/googleapis/enterprise-certificate-proxy v0.3.19 h1:mMOE7DN2+p76/EdIrmAy9B9bH+yC4563vmnJ34QR8i4= +github.com/googleapis/enterprise-certificate-proxy v0.3.19/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k= github.com/googleapis/gax-go/v2 v2.23.0 h1:Tchl7qkvE7Ip3y+ztvNufYFvkfqTe7NfLTYGIdJRLuE= github.com/googleapis/gax-go/v2 v2.23.0/go.mod h1:rBQKOVJCdb8IFEzg+FCwlt1LP/xMDGuqUXhUG+XMXEg= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= @@ -273,12 +273,12 @@ github.com/oasdiff/yaml v0.1.1/go.mod h1:EYJNoyktvWMJ0Hmhx+6qTaqMOsalUaRGT8Sj1hN github.com/oasdiff/yaml3 v0.0.14 h1:aLJee3hxBK2H5wdXd9iPcIXb93Nty1Ge0pT171eHtkw= github.com/oasdiff/yaml3 v0.0.14/go.mod h1:csto2xfDjYccdUn/yw/bPjj/cYTdp6HtFA0J4TWG+gg= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= -github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s= -github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= +github.com/oklog/ulid/v2 v2.1.2 h1:IEclFb9JNvzYA6MW2SCxbLzcHTVsfqm3PrqGQJH5zec= +github.com/oklog/ulid/v2 v2.1.2/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/oracle-samples/gorm-oracle v1.1.3 h1:B9Ij8EqYt+WQgeayIB9H9mjRTXnEc+xPYUEvRmFcoIU= github.com/oracle-samples/gorm-oracle v1.1.3/go.mod h1:HP3O55zJhHKDL38yd6DjGv5+uEa0OS1nG0sII0tzEbc= -github.com/oracle/oci-go-sdk/v65 v65.121.1 h1:nXrE3r1qmBULT6Zp2koM2bJGDvsFtMX/be/NV9MS3Bw= -github.com/oracle/oci-go-sdk/v65 v65.121.1/go.mod h1:Pzy+BpgkDesvGZXEHgslwhIYobHCPHg6wRta1mWnlqQ= +github.com/oracle/oci-go-sdk/v65 v65.122.0 h1:yB587yZUGe/syyyp1CHlW74EXo38Rfye5vD3Ox4Cdq4= +github.com/oracle/oci-go-sdk/v65 v65.122.0/go.mod h1:Pzy+BpgkDesvGZXEHgslwhIYobHCPHg6wRta1mWnlqQ= github.com/pelletier/go-toml/v2 v2.4.3 h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdDPYVpY= github.com/pelletier/go-toml/v2 v2.4.3/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= @@ -306,8 +306,8 @@ github.com/quic-go/go-ossfuzz-seeds v0.1.0 h1:APacT+iIaNF6fd8AGEiN3bT/Jtkd2jz4v4 github.com/quic-go/go-ossfuzz-seeds v0.1.0/go.mod h1:3IOHRbJIc+L6YKMwfDtJAM9Vj9k0YY4muhuyUYk5tbk= 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.60.0 h1:xcQioE8OM66UQLeUMHltK1CCcOu3JbVB4JAQdDQSB+0= -github.com/quic-go/quic-go v0.60.0/go.mod h1:wpKpjmPpftl30sL6pFh7REVpjbcCVy4zt2vDyK1TuJk= +github.com/quic-go/quic-go v0.61.0 h1:ui88A53s8MSVYLC56en0KQ17HARk+9986Dn0SBfKNvA= +github.com/quic-go/quic-go v0.61.0/go.mod h1:9So2anK4Tp22URSQq00k+Vo2PNkle96ycDPDHL4s9vs= github.com/redis/go-redis/extra/rediscmd/v9 v9.21.0 h1:jsV3tyMeJrEoc2f3EhNf7qoBW3NEZW7l/4ziT3M+OJI= github.com/redis/go-redis/extra/rediscmd/v9 v9.21.0/go.mod h1:e5t17bY9cEpVV+xw2U7jsPOKkXBtL5IQmNVABShnHUk= github.com/redis/go-redis/extra/redisotel/v9 v9.21.0 h1:36qq3rbF2If2CP0zGHHF8o/4XDluErn6DD0c9/L2iNI= @@ -430,8 +430,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= -golang.org/x/exp v0.0.0-20260718201538-764159d718ef h1:LkZ48HFgy/TvhTI0bcWkjgFkgLyKUwcTbDjS0DUjw+A= -golang.org/x/exp v0.0.0-20260718201538-764159d718ef/go.mod h1:EdfpwwqSu+0Li0mzskwHU6FWDV3t9Q+RZDo3QMUtL3Q= +golang.org/x/exp v0.0.0-20260727155853-b88d891fe743 h1:ex206bKw+v3K0dm3andkrIF+ijyQKJG1pLgwQ2PYdQM= +golang.org/x/exp v0.0.0-20260727155853-b88d891fe743/go.mod h1:EdfpwwqSu+0Li0mzskwHU6FWDV3t9Q+RZDo3QMUtL3Q= golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -536,10 +536,10 @@ google.golang.org/api v0.290.0 h1:eMw0Xo+IfbbMlKmW7aHvpyQRv9RCXuWx/vs8AD+0x9A= google.golang.org/api v0.290.0/go.mod h1:weJZ3lldHFYI0DBFNKpJelUDNnusTt5YaOEgxvt8ci8= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= -google.golang.org/genproto/googleapis/api v0.0.0-20260720211330-0afa2a65878a h1:97PfJ4tCxY5C7NzzgGqQEMZmXbISdvSArNNEOoUGKBg= -google.golang.org/genproto/googleapis/api v0.0.0-20260720211330-0afa2a65878a/go.mod h1:1brfde68Npq6+WA75c1EHWPijZEG1kMus61ygPZfn4A= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260720211330-0afa2a65878a h1:qI/YMH1ep2qQtqcp00gMQyoU7mjvbhg88GJKCvfoLj0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260720211330-0afa2a65878a/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260727163830-6c54dddc4772 h1:4namukbyF7JY83aWHQwi9J5ugNTnDReLJ9ZcpqOpRB4= +google.golang.org/genproto/googleapis/api v0.0.0-20260727163830-6c54dddc4772/go.mod h1:1brfde68Npq6+WA75c1EHWPijZEG1kMus61ygPZfn4A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260727163830-6c54dddc4772 h1:zuslGE3FGxH0hC6veLvSLME3TZzun9MQzjYwo1CBN+k= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260727163830-6c54dddc4772/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI= From 283d31520bdda6996853c6cef4b0392bb1802348 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:26:17 -0400 Subject: [PATCH 03/12] test(api): tolerate clock skew in the modified_at assertion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The assertion compared the server's modified_at against the test runner's own clock with no tolerance: pm.expect(new Date(responseData.modified_at)).to.be.at.most(new Date()) That holds only while the server shares a clock with the runner. Against CLUSTER=k3s the server is a different host, and the check failed deterministically by ~2ms (…27.065Z vs …27.063Z) on every run -- normal NTP drift, not a server fault. Allow 5s of skew. Still catches a timestamp that is genuinely wrong (unset, epoch, or far-future) while surviving a remote server. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- test/postman/comprehensive-test-collection.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/postman/comprehensive-test-collection.json b/test/postman/comprehensive-test-collection.json index 730c7613..71ab37ca 100644 --- a/test/postman/comprehensive-test-collection.json +++ b/test/postman/comprehensive-test-collection.json @@ -1029,7 +1029,11 @@ "pm.test('Modified timestamp is updated', function () {", " const responseData = pm.response.json();", " pm.expect(responseData.modified_at).to.exist;", - " pm.expect(new Date(responseData.modified_at)).to.be.at.most(new Date());", + " // Allow for clock skew: the server may run on a different host than", + " // the test runner (e.g. CLUSTER=k3s), so modified_at can read a few ms", + " // ahead of the local clock. Still catches a genuinely wrong timestamp.", + " const skewToleranceMs = 5000;", + " pm.expect(new Date(responseData.modified_at).getTime()).to.be.at.most(Date.now() + skewToleranceMs);", "});" ] } From ef5369a55a424b407db3908dc15d68144ffaa9bb Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:26:28 -0400 Subject: [PATCH 04/12] fix(dbtool): decoy the team-note and webhook fixtures so CATS stops eating them Run 20260730T153736Z destroyed 15 of its own seeded fixtures and the #625 integrity gate correctly marked it INVALID. Two of the losses were leaves with no decoy at all: an ordinary DELETE on /teams/{team_id}/notes/{team_note_id} and /admin/webhooks/subscriptions/{webhook_id} consumed the only seeded record, and every test nested under them then ran against a 404. Decoys existed only for anchors, on the theory that leaves are not fuzzed destructively. They are. Seed a throwaway note and webhook, and point each leaf path at them. The note hangs off the REAL team on purpose: only the /teams/{team_id} anchor is overridden, so the nested path still substitutes the real team_id and a note under the throwaway team would just 404. Both globals had to be pinned by name as well. teamNoteID and webhookID resolved via findRefByKind, which ranges over a map -- with a second record seeded it could return either one, and returning the decoy would leave the real fixture unfuzzed while the decoy absorbed both roles. This is the hazard the survey-response:0 lookup already guards against. Adds teamNoteRef/teamNotePrefix so the ref prefix and the lookup cannot drift; transformTeams now builds its prefix from the same helper. TestFixtureManifestMarksDecoyedAnchors asserted these two were undecoyed, which is exactly what this inverts. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- cmd/dbtool/reference.go | 25 +++++++++++++++++++++++-- cmd/dbtool/reference_fixtures_test.go | 10 +++++++--- cmd/dbtool/seedspec_transform.go | 14 +++++++++++++- test/seeds/cats-seed-data.json | 12 ++++++++++++ 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/cmd/dbtool/reference.go b/cmd/dbtool/reference.go index ab3548b8..23b5291a 100644 --- a/cmd/dbtool/reference.go +++ b/cmd/dbtool/reference.go @@ -115,7 +115,11 @@ func writeYAMLReference(path string, refs RefMap, user, provider string) error { documentID := findRefByKind(refs, "document") assetID := findRefByKind(refs, "asset") noteID := findRefByKind(refs, "note") - teamNoteID := findRefByKind(refs, kindTeamNote) + // Index 0 explicitly, for the same reason as survey-response:0 below: team + // notes are seeded positionally and findRefByKind ranges over a map, so once + // the #608 decoy note exists this could return either one — and the decoy is + // the one DELETE consumes. + teamNoteID := findRefByName(refs, teamNoteRef(realTeamName, 0), kindTeamNote) projectNoteID := findRefByKind(refs, kindProjectNote) feedbackID := findRefByKind(refs, kindFeedback) // TriageNote.id is a per-survey-response sequential INTEGER, not a UUID, so @@ -126,7 +130,10 @@ func writeYAMLReference(path string, refs RefMap, user, provider string) error { triageNoteID = "0" } repoID := findRefByKind(refs, "repository") - webhookID := findRefByKind(refs, "webhook") + // By name, not by kind: the #608 decoy webhook makes a map-ranging lookup + // nondeterministic, and returning the decoy here would leave the real + // subscription unfuzzed while the decoy absorbed both roles. + webhookID := findRefByName(refs, webhookRef(realWebhookName), "webhook") deliveryID := findRefByKind(refs, "webhook_test_delivery") addonID := findRefByKind(refs, "addon") credID := findRefByKind(refs, "client_credential") @@ -197,6 +204,16 @@ func writeYAMLReference(path string, refs RefMap, user, provider string) error { // Survey responses are seeded positionally; index 1 is the decoy. {"/intake/survey_responses/{survey_response_id}", "survey_response_id", findRefByName(refs, "survey-response:1", "")}, + // Run 20260730T153736Z lost team_note_id and webhook_id to ordinary + // (non-collapsed) DELETEs: both paths are leaves with no decoy, so the + // fuzzer consumed the only seeded record. Team notes are positional like + // survey responses, so index 1 is the decoy; it must hang off the REAL + // team, because only the /teams/{team_id} anchor is overridden and the + // nested path keeps the real team_id. + {"/teams/{team_id}/notes/{team_note_id}", "team_note_id", + findRefByName(refs, teamNoteRef(realTeamName, 1), "")}, + {"/admin/webhooks/subscriptions/{webhook_id}", "webhook_id", + findRefByName(refs, webhookRef(throwawayWebhookName), "")}, } decoySections := "" for _, d := range decoys { @@ -449,6 +466,8 @@ func writeFixtureManifest(path string, ids fixtureIDs) error { "/admin/groups/{group_id}": true, "/admin/users/{user_id}": true, "/intake/survey_responses/{survey_response_id}": true, + "/teams/{team_id}/notes/{team_note_id}": true, + "/admin/webhooks/subscriptions/{webhook_id}": true, } candidates := []referenceFixture{ @@ -528,7 +547,9 @@ const ( throwawayProjectName = "CATS Throwaway Project" throwawayGroupName = "CATS Throwaway Group" throwawayThreatModelName = "CATS Throwaway Threat Model" + throwawayWebhookName = "CATS Throwaway Webhook" realTeamName = "CATS Test Team" + realWebhookName = "CATS Test Webhook" realProjectName = "CATS Test Project" realGroupName = "CATS Test Group" realThreatModelName = "CATS Test Threat Model" diff --git a/cmd/dbtool/reference_fixtures_test.go b/cmd/dbtool/reference_fixtures_test.go index 670bbe4e..006c9f08 100644 --- a/cmd/dbtool/reference_fixtures_test.go +++ b/cmd/dbtool/reference_fixtures_test.go @@ -83,9 +83,13 @@ func TestFixtureManifestMarksDecoyedAnchors(t *testing.T) { decoyed := map[string]bool{ "threat_model_id": true, "team_id": true, "project_id": true, "group_id": true, "user_id": true, "survey_response_id": true, - // Nested fixtures have no anchor decoy. - "threat_id": false, "note_id": false, "team_note_id": false, - "survey_id": false, "webhook_id": false, + // team_note_id and webhook_id are leaves rather than anchors, but run + // 20260730T153736Z showed an undecoyed leaf is consumed just as readily: + // an ordinary DELETE took the only seeded record and the run went INVALID. + // They now get decoys of their own. + "team_note_id": true, "webhook_id": true, + // Nested fixtures with no decoy. + "threat_id": false, "note_id": false, "survey_id": false, } for _, f := range m.Fixtures { want, tracked := decoyed[f.Key] diff --git a/cmd/dbtool/seedspec_transform.go b/cmd/dbtool/seedspec_transform.go index 5bebcdcc..2adbe276 100644 --- a/cmd/dbtool/seedspec_transform.go +++ b/cmd/dbtool/seedspec_transform.go @@ -222,7 +222,7 @@ func transformTeams(teams []SeedSpecTeam) []SeedEntry { Data: data, }) seeds = append(seeds, transformTeamProjectNotes( - t.Notes, kindTeamNote, "team_ref", teamRef(t.Name), "team-note:"+sanitizeName(t.Name), + t.Notes, kindTeamNote, "team_ref", teamRef(t.Name), teamNotePrefix(t.Name), )...) } return seeds @@ -911,6 +911,18 @@ func surveyRef(name string) string { return "survey:" + sanitizeName(name) } // SEM@a34497eeb7ed839ce3929a9839d3329bae19642a: build a stable lookup key for a webhook by sanitized name (pure) func webhookRef(name string) string { return "webhook:" + sanitizeName(name) } +// teamNotePrefix is the ref prefix transformTeams passes for a team's notes. +// SEM@0: build the seed ref prefix for a team's notes (pure) +func teamNotePrefix(teamName string) string { return "team-note:" + sanitizeName(teamName) } + +// teamNoteRef addresses one of a team's notes by its position in the seed file. +// Team notes are seeded positionally, so the index is the only stable handle; +// reference.go relies on that to tell the real fixture (0) from the #608 decoy (1). +// SEM@0: build a deterministic seed ref key for a team note by team name and index (pure) +func teamNoteRef(teamName string, i int) string { + return fmt.Sprintf("%s:%d", teamNotePrefix(teamName), i) +} + // SEM@a34497eeb7ed839ce3929a9839d3329bae19642a: build a scoped lookup key for a threat-model child entity by kind, threat model, and child name (pure) func childRef(kind, tmName, childName string) string { return fmt.Sprintf("%s:%s:%s", kind, sanitizeName(tmName), sanitizeName(childName)) diff --git a/test/seeds/cats-seed-data.json b/test/seeds/cats-seed-data.json index 15cc60b3..2cb0f4f0 100644 --- a/test/seeds/cats-seed-data.json +++ b/test/seeds/cats-seed-data.json @@ -47,6 +47,11 @@ "name": "CATS Test Team Note", "content": "Team note for CATS fuzzing coverage of team_note_id.", "description": "Seeded for CATS" + }, + { + "name": "CATS Throwaway Team Note", + "content": "Destructive-fuzz decoy for team_note_id (#608). Index 1; DELETE consumes this instead of the real note.", + "description": "Seeded for CATS" } ] }, @@ -242,6 +247,13 @@ "threat_model.created", "threat.created" ] + }, + { + "name": "CATS Throwaway Webhook", + "url": "https://webhook.site/cats-throwaway-webhook", + "events": [ + "threat_model.created" + ] } ], "webhook_test_deliveries": [ From 9096396ef28c66f5269f9778d38da62154e3b9ed Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:26:37 -0400 Subject: [PATCH 05/12] feat(scripts): add a CLI for reading and writing system settings Drives GET/PUT/DELETE on /admin/settings/{key} against a running server, authenticating through a browser PKCE flow. Interactive auth is required by design: service-account tokens are denied on /admin/* (#399). Secrets go in via --value-file rather than argv, and the tool never echoes a value back after a write. Note what it cannot do. Settings supplied through the environment or a config file outrank the database, and the server returns 409 for a PUT to any such key. On Kubernetes deployments that inject config via envFrom that includes every OAuth provider key, so this is not a way to rotate provider credentials -- see #631. The 409 handler says so explicitly rather than leaving the caller to guess. Not yet exercised end to end; see the follow-up issue for reworking it onto the generated Python client. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- scripts/set-server-setting.py | 304 ++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) create mode 100644 scripts/set-server-setting.py diff --git a/scripts/set-server-setting.py b/scripts/set-server-setting.py new file mode 100644 index 00000000..f6f7986c --- /dev/null +++ b/scripts/set-server-setting.py @@ -0,0 +1,304 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["requests>=2.32"] +# /// +"""Read and write system settings on a running TMI server. + +Authenticates interactively via a browser OAuth flow (PKCE, RFC 7636) against +any configured provider, then drives GET/PUT/DELETE on /admin/settings/{key}. +Interactive auth is required by design: service-account (client-credentials) +tokens are categorically denied on /admin/* routes, see #399. + +Usage: + scripts/set-server-setting.py list + scripts/set-server-setting.py get auth.oauth.providers.google.client_id + scripts/set-server-setting.py set timmy.enabled true --type bool + scripts/set-server-setting.py set some.key --value-file /path/to/secret + scripts/set-server-setting.py delete some.key + + # against a remote deployment, with a different provider + scripts/set-server-setting.py --server https://api.tmi.dev --idp microsoft \ + get auth.oauth.providers.google.client_id + +Secret values: pass --value-file rather than putting the value on the command +line, so it never lands in argv, shell history, or process listings. + +A caveat this tool cannot work around: settings supplied through the +environment or a config file outrank the database (env > config > DB, see +api/settings_service.go). The server returns 409 for a PUT to any such key, +naming the source. On Kubernetes deployments that inject config via envFrom, +that includes every OAuth provider key -- change those at the source (e.g. +scripts/set-oauth-secret.sh) instead. +""" + +from __future__ import annotations + +import argparse +import base64 +import hashlib +import http.server +import json +import secrets +import socket +import sys +import threading +import urllib.parse +import webbrowser +from typing import Any + +import requests + +DEFAULT_SERVER = "http://localhost:8080" +DEFAULT_IDP = "google" +CALLBACK_HOST = "localhost" +AUTH_TIMEOUT_SECONDS = 300 + + +# --- OAuth (PKCE) ------------------------------------------------------------ + + +def _pkce_pair() -> tuple[str, str]: + """Return (verifier, challenge) for PKCE S256.""" + verifier = secrets.token_urlsafe(64)[:128] + digest = hashlib.sha256(verifier.encode("ascii")).digest() + challenge = base64.urlsafe_b64encode(digest).decode("ascii").rstrip("=") + return verifier, challenge + + +def _free_port() -> int: + with socket.socket() as s: + s.bind((CALLBACK_HOST, 0)) + return s.getsockname()[1] + + +class _CallbackHandler(http.server.BaseHTTPRequestHandler): + """Single-shot handler capturing the redirect back from TMI.""" + + result: dict[str, str] = {} + done = threading.Event() + + def do_GET(self) -> None: # noqa: N802 - stdlib naming + params = urllib.parse.parse_qs(urllib.parse.urlparse(self.path).query) + flat = {k: v[0] for k, v in params.items() if v} + # TMI may hand back either an authorization code or, when it has + # already completed the exchange itself, the tokens directly. + if "code" in flat or "access_token" in flat or "error" in flat: + _CallbackHandler.result = flat + body = ( + b"

Authentication complete.

" + b"

You can close this tab and return to the terminal.

" + b"" + ) + self.send_response(200) + self.send_header("Content-Type", "text/html") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + _CallbackHandler.done.set() + else: + self.send_response(404) + self.end_headers() + + def log_message(self, *_args: Any) -> None: + """Silence the default stderr access log.""" + + +def authenticate(server: str, idp: str) -> str: + """Run the browser OAuth flow and return a TMI access token.""" + port = _free_port() + callback = f"http://{CALLBACK_HOST}:{port}/" + verifier, challenge = _pkce_pair() + state = secrets.token_urlsafe(32) + + query = urllib.parse.urlencode( + { + "idp": idp, + "client_callback": callback, + "state": state, + "code_challenge": challenge, + "code_challenge_method": "S256", + } + ) + authorize_url = f"{server.rstrip('/')}/oauth2/authorize?{query}" + + _CallbackHandler.result = {} + _CallbackHandler.done = threading.Event() + httpd = http.server.HTTPServer((CALLBACK_HOST, port), _CallbackHandler) + thread = threading.Thread(target=httpd.serve_forever, daemon=True) + thread.start() + + print(f"Opening browser to authenticate with '{idp}'...", file=sys.stderr) + print(f" If it does not open, visit:\n {authorize_url}\n", file=sys.stderr) + webbrowser.open(authorize_url) + + completed = _CallbackHandler.done.wait(timeout=AUTH_TIMEOUT_SECONDS) + httpd.shutdown() + if not completed: + raise SystemExit(f"Timed out after {AUTH_TIMEOUT_SECONDS}s waiting for login.") + + result = _CallbackHandler.result + if "error" in result: + raise SystemExit( + f"Authentication failed: {result['error']} " + f"{result.get('error_description', '')}".strip() + ) + if result.get("state") not in (None, state): + raise SystemExit("State mismatch on OAuth callback -- aborting.") + + if "access_token" in result: + return result["access_token"] + + resp = requests.post( + f"{server.rstrip('/')}/oauth2/token", + params={"idp": idp}, + json={ + "grant_type": "authorization_code", + "code": result["code"], + "code_verifier": verifier, + "redirect_uri": callback, + "state": state, + }, + timeout=30, + ) + if resp.status_code != 200: + raise SystemExit(f"Token exchange failed: {resp.status_code} {resp.text}") + token = resp.json().get("access_token") + if not token: + raise SystemExit(f"No access_token in token response: {resp.text}") + return token + + +# --- Settings API ------------------------------------------------------------ + + +def _explain(resp: requests.Response) -> str: + """Turn an error response into something an operator can act on.""" + try: + body = resp.json() + except ValueError: + return f"HTTP {resp.status_code}: {resp.text}" + message = body.get("message") or body.get("error") or json.dumps(body) + if resp.status_code == 409: + message += ( + "\n\nThis key is supplied by the environment or a config file, which " + "outranks the database. Change it at that source instead -- for " + "Kubernetes OAuth keys, scripts/set-oauth-secret.sh." + ) + elif resp.status_code == 403: + message += "\n\nAdmin privileges are required, and /admin/* rejects service-account tokens (#399)." + return f"HTTP {resp.status_code}: {message}" + + +def cmd_list(server: str, token: str, args: argparse.Namespace) -> int: + resp = requests.get( + f"{server}/admin/settings", + headers={"Authorization": f"Bearer {token}"}, + timeout=30, + ) + if resp.status_code != 200: + print(_explain(resp), file=sys.stderr) + return 1 + payload = resp.json() + rows = payload if isinstance(payload, list) else payload.get("settings", payload) + print(json.dumps(rows, indent=2)) + return 0 + + +def cmd_get(server: str, token: str, args: argparse.Namespace) -> int: + resp = requests.get( + f"{server}/admin/settings/{urllib.parse.quote(args.key, safe='')}", + headers={"Authorization": f"Bearer {token}"}, + timeout=30, + ) + if resp.status_code != 200: + print(_explain(resp), file=sys.stderr) + return 1 + print(json.dumps(resp.json(), indent=2)) + return 0 + + +def cmd_set(server: str, token: str, args: argparse.Namespace) -> int: + if args.value_file: + with open(args.value_file, encoding="utf-8") as fh: + value = fh.read().rstrip("\n") + elif args.value is not None: + value = args.value + else: + print("error: provide a VALUE or --value-file", file=sys.stderr) + return 2 + + body: dict[str, Any] = {"value": value, "type": args.type} + if args.description: + body["description"] = args.description + + resp = requests.put( + f"{server}/admin/settings/{urllib.parse.quote(args.key, safe='')}", + headers={"Authorization": f"Bearer {token}"}, + json=body, + timeout=30, + ) + if resp.status_code not in (200, 201): + print(_explain(resp), file=sys.stderr) + return 1 + # Never echo the value back -- it may be a secret. + print(f"Set '{args.key}' (type={args.type}, {len(value)} chars). Value not shown.") + return 0 + + +def cmd_delete(server: str, token: str, args: argparse.Namespace) -> int: + resp = requests.delete( + f"{server}/admin/settings/{urllib.parse.quote(args.key, safe='')}", + headers={"Authorization": f"Bearer {token}"}, + timeout=30, + ) + if resp.status_code not in (200, 204): + print(_explain(resp), file=sys.stderr) + return 1 + print(f"Deleted '{args.key}'.") + return 0 + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Read and write system settings on a running TMI server.", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__, + ) + parser.add_argument("--server", default=DEFAULT_SERVER, help=f"TMI base URL (default: {DEFAULT_SERVER})") + parser.add_argument("--idp", default=DEFAULT_IDP, help=f"OAuth provider id (default: {DEFAULT_IDP})") + parser.add_argument("--token", help="Existing bearer token; skips the browser login") + + sub = parser.add_subparsers(dest="command", required=True) + + sub.add_parser("list", help="List all system settings") + + p_get = sub.add_parser("get", help="Get one setting") + p_get.add_argument("key") + + p_set = sub.add_parser("set", help="Create or update one setting") + p_set.add_argument("key") + p_set.add_argument("value", nargs="?", help="Value (omit when using --value-file)") + p_set.add_argument("--value-file", help="Read the value from this file (use for secrets)") + p_set.add_argument("--type", default="string", choices=["string", "int", "bool", "json"]) + p_set.add_argument("--description", help="Human-readable description") + + p_del = sub.add_parser("delete", help="Delete one setting") + p_del.add_argument("key") + + args = parser.parse_args() + server = args.server.rstrip("/") + + token = args.token or authenticate(server, args.idp) + + handlers = { + "list": cmd_list, + "get": cmd_get, + "set": cmd_set, + "delete": cmd_delete, + } + return handlers[args.command](server, token, args) + + +if __name__ == "__main__": + sys.exit(main()) From f9078862a73185b9e1bdca5d303738acc3f235b8 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:29:27 -0400 Subject: [PATCH 06/12] fix(api): document the status codes the bulk and webhook-test handlers return CATS run 20260730T174620Z flagged 63 undocumented-response-code true positives across three operations. In every case the handler is right and the spec was incomplete, so document the behaviour rather than change it (per the documented-status-code policy). POST /admin/webhooks/subscriptions/{webhook_id}/test -> 202 (39 hits) webhook_handlers.go:358 returns StatusAccepted: the delivery is created and queued, and its outcome is reported separately via the deliveries endpoints. 202 is the honest code for that. PUT /threat_models/{threat_model_id}/assets/bulk -> 200 (23) PUT /threat_models/{threat_model_id}/repositories/bulk -> 200 (1) Both bulk upsert handlers return StatusOK unconditionally (asset_sub_resource_handlers.go:647, repository_sub_resource_handlers.go:640). Only 201 was documented. 201 is left in place on the bulk PUTs. Those handlers never actually emit it, so it looks like dead documentation, but removing a documented code is a contract change for clients rather than a spec correction -- worth a separate look. Version 1.6.0 -> 1.6.1 (manual bump, #627). Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- .version | 2 +- api-schema/tmi-openapi.json | 152 ++- api/api.go | 2003 ++++++++++++++++++----------------- 3 files changed, 1156 insertions(+), 1001 deletions(-) diff --git a/.version b/.version index d30ee6c7..1cc65297 100644 --- a/.version +++ b/.version @@ -1,6 +1,6 @@ { "major": 1, "minor": 6, - "patch": 0, + "patch": 1, "prerelease": "" } diff --git a/api-schema/tmi-openapi.json b/api-schema/tmi-openapi.json index c736dcfa..0d268704 100644 --- a/api-schema/tmi-openapi.json +++ b/api-schema/tmi-openapi.json @@ -3,7 +3,7 @@ "info": { "title": "TMI (Threat Modeling Improved) API", "description": "A RESTful API for collaborative threat modeling with full X6 graph library compatibility. This API provides schemas that align with AntV X6 cell object models for seamless integration with modern diagramming libraries. Supports OAuth 2.0 authentication with client callback integration for seamless single-page application authentication flows.\n\n## API Design v1.1.0\n\n### Authorization Model\nTMI uses hierarchical authorization: access control is defined at the ThreatModel level via the authorization field (readers, writers, owners). All child resources (Assets, Diagrams, Documents, Notes, Repositories, Threats) inherit permissions from their parent ThreatModel. This simplifies permission management and ensures consistent access control.\n\n### Bulk Operations\nNotes and Diagrams do not support bulk operations due to their unique creation workflows and lack of valid bulk use cases. All other resources (Threats, Assets, Documents, Repositories) support full bulk operations: POST (create), PUT (upsert), PATCH (partial update), DELETE (batch delete).\n\nAll resources support bulk metadata operations regardless of resource-level bulk support.\n\n### List Response Strategy\n- ThreatModels return summary information (TMListItem) because they contain many child objects that can be large.\n- Diagrams return summary information (DiagramListItem) because diagram data (cells, images) can be large.\n- Notes return summary information (NoteListItem) because the content field can be large.\n- Threats, Assets, Documents, Repositories return full schemas as they are relatively small and static.\n\n### PATCH Support\nAll resources support PATCH for partial updates using JSON Patch (RFC 6902). This is particularly useful for:\n- Assets: Array field updates (affected_assets, trust_boundaries) ensuring no duplicates\n- Notes: Updating name/description without changing content field\n- All resources: Efficient updates without full object replacement\n", - "version": "1.6.0", + "version": "1.6.1", "contact": { "name": "TMI Development Team", "url": "https://github.com/ericfitz/tmi", @@ -25581,6 +25581,76 @@ }, "404": { "$ref": "#/components/responses/Error" + }, + "200": { + "description": "Repositories upserted successfully. Returned when the bulk upsert completes; the handler returns 200 for PUT regardless of how many items were newly created.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Repository" + }, + "maxItems": 1000 + }, + "examples": { + "bulkCreatedSources": { + "summary": "Successfully created sources with generated IDs", + "value": [ + { + "name": "User Authentication Module", + "description": "Core user authentication logic", + "created_at": "2025-04-06T12:00:00Z", + "modified_at": "2025-04-06T12:00:00Z", + "uri": "https://github.com/company/repo/blob/main/oauth2/user.go", + "id": "990e8400-e29b-41d4-a716-446655440023" + }, + { + "id": "650e8400-e29b-41d4-a716-446655440002", + "name": "Database Connection Pool", + "description": "Database connection management", + "metadata": [ + { + "key": "type", + "value": "infrastructure" + }, + { + "key": "criticality", + "value": "high" + } + ], + "created_at": "2025-04-06T12:00:00Z", + "modified_at": "2025-04-06T12:00:00Z", + "uri": "https://github.com/company/repo/blob/main/db/pool.go" + } + ] + } + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "description": "Maximum number of requests allowed in the current time window", + "schema": { + "type": "integer", + "example": 1000 + } + }, + "X-RateLimit-Remaining": { + "description": "Number of requests remaining in the current time window", + "schema": { + "type": "integer", + "example": 999 + } + }, + "X-RateLimit-Reset": { + "description": "Unix epoch seconds when the rate limit window resets", + "schema": { + "type": "integer", + "example": 1735689600 + } + } + } } }, "x-rate-limit": { @@ -32366,6 +32436,53 @@ }, "404": { "$ref": "#/components/responses/Error" + }, + "200": { + "description": "Assets upserted successfully. Returned when the bulk upsert completes; the handler returns 200 for PUT regardless of how many items were newly created.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Asset" + }, + "maxItems": 1000 + }, + "example": [ + { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "API Gateway Updated", + "type": "software", + "description": "Updated gateway service", + "created_at": "2026-01-17T10:00:00Z", + "modified_at": "2026-01-17T11:00:00Z" + } + ] + } + }, + "headers": { + "X-RateLimit-Limit": { + "description": "Maximum number of requests allowed in the current time window", + "schema": { + "type": "integer", + "example": 1000 + } + }, + "X-RateLimit-Remaining": { + "description": "Number of requests remaining in the current time window", + "schema": { + "type": "integer", + "example": 999 + } + }, + "X-RateLimit-Reset": { + "description": "Unix epoch seconds when the rate limit window resets", + "schema": { + "type": "integer", + "example": 1735689600 + } + } + } } }, "x-rate-limit": { @@ -59335,6 +59452,39 @@ }, "503": { "$ref": "#/components/responses/ServiceUnavailable" + }, + "202": { + "description": "Test delivery accepted and queued for asynchronous sending. The response carries the delivery id; delivery outcome is reported separately via the deliveries endpoints.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookTestResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "description": "Maximum number of requests allowed in the current time window", + "schema": { + "type": "integer", + "example": 1000 + } + }, + "X-RateLimit-Remaining": { + "description": "Number of requests remaining in the current time window", + "schema": { + "type": "integer", + "example": 999 + } + }, + "X-RateLimit-Reset": { + "description": "Unix epoch seconds when the rate limit window resets", + "schema": { + "type": "integer", + "example": 1735689600 + } + } + } } }, "x-rate-limit": { diff --git a/api/api.go b/api/api.go index a5e6bc76..ffbaa55a 100644 --- a/api/api.go +++ b/api/api.go @@ -25725,1005 +25725,1010 @@ var swaggerSpec = []string{ "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", + "bd/4fv39fwIAAP//", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, From afeb803e59126127101fed9802fa6daf8c04ae3e Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:33:38 -0400 Subject: [PATCH 07/12] test(cats): classify reflected team/project uri payloads as false positives SSRFInUrlFields sets the uri field to an internal address and flags the value coming back in the response body. For teams and projects that echo is not evidence of a request the server made: the field is persisted and serialized (team_store_gorm.go:954) and nothing dereferences it. Scoped deliberately to the four team/project contract paths. URIs are genuinely fetched elsewhere -- Timmy pulls document and diagram content over HTTP (timmy_content_provider_http.go) through SafeHTTPClient and URIValidator -- and an SSRF finding there would be real, so the rule must not reach those paths. Suppresses 172 findings, 5.46% of the run's true positives. That is above the 5% review threshold, confirmed with the maintainer before adding; the share reflects how many tests the fuzzer aimed at these four paths, not a loose condition. Verified against run 20260730T174620Z: dry run and live reclassification both moved exactly 172 (3152 -> 2980 true positives), and the rule matched no 5xx. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- test/cats/false-positives.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/cats/false-positives.yaml b/test/cats/false-positives.yaml index 7d46e4ef..3f6587b7 100644 --- a/test/cats/false-positives.yaml +++ b/test/cats/false-positives.yaml @@ -834,3 +834,17 @@ rules: path: { starts_with: /admin/users/, contains: client_credentials } json_body.error_description: contains: only available for automation accounts + + # rule 49 of 49: Team/project uri field is stored, never fetched (#608 run 20260730T174620Z) + # SSRFInUrlFields sets uri to an internal address and flags the echo in the + # response body. Teams and projects only persist and serialize that field + # (team_store_gorm.go:954) -- nothing dereferences it. Deliberately scoped to + # these four contract paths: URIs ARE fetched for Timmy document/diagram + # content (timmy_content_provider_http.go), and those findings must stay live. + - id: TEAM_PROJECT_URI_REFLECTED_NOT_FETCHED + why: Teams and projects store the user-supplied uri field and echo it back without ever dereferencing it, so a reflected SSRF payload is not a request the server made. Scoped to team/project paths only; Timmy content URIs are fetched and stay in scope. + when: + fuzzer: SSRFInUrlFields + result_reason: { contains: SSRF payload reflected in response } + contract_path: + in: ["/teams", "/teams/{team_id}", "/projects", "/projects/{project_id}"] From 8299ba0efa78c881296b6695aea8c3e5c0a12c54 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:52:45 -0400 Subject: [PATCH 08/12] fix(api): scope negotiated media types to the routes that produce them AcceptHeaderValidation kept a coarse server-wide allowlist that included four representations only two operations actually produce: text/csv and application/x-ndjson (system-audit export), application/yaml and application/graphml+xml (diagram model). The comment acknowledged the gate was blunt and assumed per-endpoint negotiation would make the precise choice -- but endpoints that do no negotiation of their own never make that choice. They passed the gate and answered 200 with JSON to a client that asked for CSV. RFC 9110 calls for 406 there, and the spec documents 406 on those operations, so this was a contract violation as well as a correctness one. CATS run 20260730T174620Z hit it 93 times, all with `Accept: text/csv`, across 83 paths that have nothing to do with CSV. Scope each type to the routes that produce it. The two handlers that call negotiateContentType still return 406 themselves for a type they do not offer, so this gate only has to stop the type being waved through everywhere else. Verified by hand before the change: application/xml, text/plain, text/html, image/png and nonsense/type were already 406, while text/csv passed the gate alongside application/json -- which is what singled out the negotiated types as the cause. Four existing subtests asserted the old server-wide behaviour on an arbitrary route. They now assert 406 there, which is the behaviour change stated as a test. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- api/middleware.go | 69 +++++++++++++++++++++++++++-------- api/security_headers_test.go | 70 +++++++++++++++++++++++++++++++++--- 2 files changed, 121 insertions(+), 18 deletions(-) diff --git a/api/middleware.go b/api/middleware.go index ef6d7db9..707b3745 100644 --- a/api/middleware.go +++ b/api/middleware.go @@ -1057,6 +1057,41 @@ func JSONErrorHandler() gin.HandlerFunc { } } +// negotiatedMediaTypeRoutes maps a media type only some operations produce to +// the Gin routes ("METHOD /path") that produce it. Kept in step with the +// handlers that call negotiateContentType (admin_audit_handlers.go, +// diagram_model_transform.go) and with the response content types declared in +// api-schema/tmi-openapi.json. +var negotiatedMediaTypeRoutes = map[string]map[string]bool{ + // System-audit export. + "text/csv": { + "GET /admin/audit/system": true, + }, + "application/x-ndjson": { + "GET /admin/audit/system": true, + }, + // Diagram model representations. + "application/yaml": { + "GET /threat_models/:threat_model_id/diagrams/:diagram_id/model": true, + }, + "application/graphml+xml": { + "GET /threat_models/:threat_model_id/diagrams/:diagram_id/model": true, + }, +} + +// acceptsAnyOf reports whether the Accept header mentions any of the media +// types. Substring matching, so it tolerates quality parameters and multi-type +// headers. +// SEM@0: report whether an Accept header mentions any of the given media types (pure) +func acceptsAnyOf(acceptHeader string, mediaTypes []string) bool { + for _, t := range mediaTypes { + if strings.Contains(acceptHeader, t) { + return true + } + } + return false +} + // AcceptHeaderValidation middleware validates that the Accept header is application/json // Returns 406 Not Acceptable for unsupported media types // SEM@29f63eb500c26288d0d3fe23737adf6fd94bdf9c: build middleware that rejects requests with unsupported Accept media types @@ -1080,29 +1115,35 @@ func AcceptHeaderValidation() gin.HandlerFunc { return } - // Coarse server-wide allowlist of producible media types. This is a - // blunt gate; per-endpoint content negotiation (e.g. the diagram model - // and system-audit export) does the precise selection and may still - // return 406 for a type it doesn't offer. Substring matching keeps it + // Media types every operation can produce. Substring matching keeps this // lenient about quality parameters and multi-type Accept headers. supportedAcceptTypes := []string{ "application/json", "*/*", "application/*", "text/event-stream", - // Content-negotiated representations (see negotiateContentType): - "application/yaml", // diagram model (YAML) - "application/graphml+xml", // diagram model (GraphML) - "text/csv", // system-audit export (CSV) - "application/x-ndjson", // system-audit export (NDJSON) } - acceptsSupported := false - for _, t := range supportedAcceptTypes { - if strings.Contains(acceptHeader, t) { - acceptsSupported = true - break + // Representations only specific operations offer. These used to sit in + // the list above, which made the gate accept them server-wide: an + // endpoint that does no negotiation of its own passed the check and then + // returned JSON with 200, where RFC 9110 (and the spec, which documents + // 406 on these operations) calls for 406. CATS run 20260730T174620Z hit + // that 93 times with `Accept: text/csv` across 83 unrelated paths. + // + // Scope each type to the routes that actually produce it. The handlers + // there call negotiateContentType and return 406 themselves for a type + // they don't offer, so this gate only has to stop the type from being + // waved through everywhere else. + if !acceptsAnyOf(acceptHeader, supportedAcceptTypes) { + route := c.Request.Method + " " + c.FullPath() + for mediaType, routes := range negotiatedMediaTypeRoutes { + if strings.Contains(acceptHeader, mediaType) && routes[route] { + c.Next() + return + } } } + acceptsSupported := acceptsAnyOf(acceptHeader, supportedAcceptTypes) if !acceptsSupported { logger.Debug("Rejecting request with unsupported Accept header: %s", acceptHeader) diff --git a/api/security_headers_test.go b/api/security_headers_test.go index e8ae6b7f..3083238b 100644 --- a/api/security_headers_test.go +++ b/api/security_headers_test.go @@ -533,6 +533,64 @@ func TestAcceptHeaderValidation(t *testing.T) { assert.Equal(t, http.StatusNotAcceptable, w.Code) }) + // A media type only some operations produce must not be accepted on an + // operation that does not produce it. This used to pass the gate + // server-wide and the handler then answered 200 with JSON to a client that + // asked for CSV -- 93 CATS findings in run 20260730T174620Z. + t.Run("rejects a negotiated media type on a route that does not offer it", func(t *testing.T) { + for _, mediaType := range []string{ + "text/csv", "application/x-ndjson", "application/yaml", "application/graphml+xml", + } { + router := gin.New() + router.Use(AcceptHeaderValidation()) + router.GET("/threat_models/:threat_model_id", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + + req := httptest.NewRequest("GET", "/threat_models/abc", nil) + req.Header.Set("Accept", mediaType) + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusNotAcceptable, w.Code, + "Accept: %s should be 406 on a route that does not produce it", mediaType) + } + }) + + // ...but the routes that do produce it still reach their handler, which runs + // negotiateContentType and picks the representation. + t.Run("allows a negotiated media type on the route that offers it", func(t *testing.T) { + cases := []struct{ mediaType, pattern, url string }{ + {"text/csv", "/admin/audit/system", "/admin/audit/system"}, + {"application/x-ndjson", "/admin/audit/system", "/admin/audit/system"}, + { + "application/yaml", + "/threat_models/:threat_model_id/diagrams/:diagram_id/model", + "/threat_models/tm1/diagrams/d1/model", + }, + { + "application/graphml+xml", + "/threat_models/:threat_model_id/diagrams/:diagram_id/model", + "/threat_models/tm1/diagrams/d1/model", + }, + } + for _, tc := range cases { + router := gin.New() + router.Use(AcceptHeaderValidation()) + router.GET(tc.pattern, func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + + req := httptest.NewRequest("GET", tc.url, nil) + req.Header.Set("Accept", tc.mediaType) + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code, + "Accept: %s should reach the handler on %s", tc.mediaType, tc.pattern) + } + }) + t.Run("accepts application/json with quality parameter", func(t *testing.T) { router := gin.New() router.Use(AcceptHeaderValidation()) @@ -578,15 +636,19 @@ func TestAcceptHeaderValidation(t *testing.T) { assert.Equal(t, http.StatusOK, w.Code) }) - // Content-negotiated representations are now allowed through the coarse - // gate so the diagram-model and audit-export endpoints can serve them. + // Content-negotiated representations used to be allowed through this gate + // server-wide, so that the diagram-model and audit-export endpoints could + // serve them. That let every other endpoint accept them too and answer 200 + // with JSON. They are now scoped to the routes that produce them (see + // negotiatedMediaTypeRoutes and the two subtests above), so on an arbitrary + // route they are correctly Not Acceptable. for _, ct := range []string{ "application/yaml", "application/graphml+xml", "text/csv", "application/x-ndjson", } { - t.Run("accepts "+ct, func(t *testing.T) { + t.Run("rejects "+ct+" on a route that does not produce it", func(t *testing.T) { router := gin.New() router.Use(AcceptHeaderValidation()) router.GET("/test", func(c *gin.Context) { @@ -598,7 +660,7 @@ func TestAcceptHeaderValidation(t *testing.T) { w := httptest.NewRecorder() router.ServeHTTP(w, req) - assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, http.StatusNotAcceptable, w.Code) }) } } From be50092f1cbcf239e759d00e04cbccb26548298b Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 16:57:33 -0400 Subject: [PATCH 09/12] fix(api): close the JSON-escape bypass of Unicode validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UnicodeNormalizationMiddleware scanned the request body as raw text. In raw text a \uXXXX escape is six ASCII bytes, so every check it performs -- dangerous zero-width, BiDi overrides, Hangul fillers, fullwidth structural characters, control characters, excessive combining marks -- could be evaded simply by escaping the character instead of emitting it literally. Confirmed against a running server. POST /teams with a literal U+200B in the name is rejected 400 by this middleware. The byte-identical character sent as ​ returns 201, and reading the team back shows the zero-width space stored in the database. Re-run the same checks on the decoded strings, walking object keys as well as values. Keys matter independently: a zero-width character inside a field name makes the field unrecognized, so it is silently dropped and the request still succeeds -- which is how CATS's ZeroWidthCharsInNamesFields got 96 2xx responses in run 20260730T174620Z by sending "responsib​le_parties". The raw-text scan stays: it catches literal characters, and it still runs first. The new pass only adds rejections. A body that does not parse is left to ordinary request validation rather than being rejected here. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- api/unicode_validation_middleware.go | 64 +++++++++++++++++++- api/unicode_validation_middleware_test.go | 73 +++++++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/api/unicode_validation_middleware.go b/api/unicode_validation_middleware.go index f0919269..512bc19a 100644 --- a/api/unicode_validation_middleware.go +++ b/api/unicode_validation_middleware.go @@ -50,7 +50,8 @@ func UnicodeNormalizationMiddleware() gin.HandlerFunc { bodyStr := string(bodyBytes) normalizedStr := norm.NFC.String(bodyStr) - // Check for problematic Unicode characters on the normalized form + // Check for problematic Unicode characters on the normalized form. + // This catches characters written literally in the body bytes. if hasProblematicUnicode(normalizedStr) { logger.Warn("Request contains problematic Unicode characters") c.JSON(http.StatusBadRequest, Error{ @@ -61,6 +62,29 @@ func UnicodeNormalizationMiddleware() gin.HandlerFunc { return } + // The check above scans the body as raw text, where a character written + // as a JSON \uXXXX escape is just ASCII -- so every check it performs + // could be evaded by escaping the character instead of emitting it + // literally. A team name of "Team​Name" was created with a stored + // zero-width space while the byte-identical literal form was rejected. + // Re-run the same checks on the decoded strings, covering object keys as + // well as values (CATS's ZeroWidthCharsInNamesFields injects into keys, + // where an unrecognized field is otherwise silently dropped). + // + // A body that does not parse is left to the normal request validation to + // reject; this pass only adds checks, it never accepts. + if decoded, ok := decodeJSONForUnicodeScan(normalizedStr); ok { + if hasProblematicUnicodeDeep(decoded) { + logger.Warn("Request contains problematic Unicode characters in escaped form") + c.JSON(http.StatusBadRequest, Error{ + Error: "invalid_request", + ErrorDescription: "Request contains unsupported Unicode characters (zero-width, bidirectional overrides, excessive combining marks, or control characters)", + }) + c.Abort() + return + } + } + // Reset the request body with normalized content c.Request.Body = io.NopCloser(bytes.NewBufferString(normalizedStr)) c.Request.ContentLength = int64(len(normalizedStr)) @@ -82,6 +106,44 @@ func hasProblematicUnicode(s string) bool { unicodecheck.HasExcessiveCombiningMarks(s, 3) } +// decodeJSONForUnicodeScan parses a request body so its strings can be checked +// after JSON escape sequences have been resolved. Reports false when the body is +// not valid JSON, in which case the caller skips the deep scan and lets ordinary +// request validation reject it. +// SEM@0: parse a JSON request body for post-unescape Unicode scanning (pure) +func decodeJSONForUnicodeScan(body string) (any, bool) { + var decoded any + if err := json.Unmarshal([]byte(body), &decoded); err != nil { + return nil, false + } + return decoded, true +} + +// hasProblematicUnicodeDeep walks a decoded JSON value and reports whether any +// object key or string value contains problematic Unicode. Keys matter as much +// as values: a zero-width character inside a field name makes the field +// unrecognized, so it is silently dropped and the request still succeeds. +// SEM@0: report whether any decoded JSON key or string value contains problematic Unicode (pure) +func hasProblematicUnicodeDeep(v any) bool { + switch t := v.(type) { + case string: + return hasProblematicUnicode(t) + case map[string]any: + for key, val := range t { + if hasProblematicUnicode(key) || hasProblematicUnicodeDeep(val) { + return true + } + } + case []any: + for _, val := range t { + if hasProblematicUnicodeDeep(val) { + return true + } + } + } + return false +} + // ContentTypeValidationMiddleware validates Content-Type header and rejects unsupported types // SEM@c3d5e1776058ac335ccda141ec46f5a36de89f9f: validate request Content-Type against per-endpoint OpenAPI accepted types, rejecting unsupported media types func ContentTypeValidationMiddleware() gin.HandlerFunc { diff --git a/api/unicode_validation_middleware_test.go b/api/unicode_validation_middleware_test.go index 509f1ddd..4622c2c9 100644 --- a/api/unicode_validation_middleware_test.go +++ b/api/unicode_validation_middleware_test.go @@ -29,6 +29,79 @@ func TestUnicodeNormalizationMiddleware(t *testing.T) { assert.Equal(t, http.StatusOK, w.Code) }) + // The middleware used to scan only the raw body text, where a \uXXXX escape + // is plain ASCII -- so every check it performs could be evaded by escaping + // the character instead of emitting it literally. Verified against a running + // server: the literal form was rejected 400 while the escaped form created a + // team whose stored name contained U+200B. + // + // The bodies below carry the escape as six ASCII bytes; the JSON decoder + // turns it into the real character. Writing the character literally here + // would exercise the check that already worked. + t.Run("rejects problematic Unicode written as a JSON escape", func(t *testing.T) { + cases := []struct{ name, body string }{ + {"zero-width space in a value", "{\"name\": \"Team\\u200bName\"}"}, + {"zero-width space in a key", "{\"responsib\\u200ble_parties\": []}"}, + {"BOM in a value", "{\"name\": \"Team\\ufeffName\"}"}, + {"RLM in a value", "{\"name\": \"Team\\u200fName\"}"}, + {"nested in an array of objects", "{\"items\": [{\"na\\u200bme\": \"x\"}]}"}, + {"nested in an object value", "{\"outer\": {\"inner\": \"a\\u200bb\"}}"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + router := gin.New() + router.Use(UnicodeNormalizationMiddleware()) + router.POST("/test", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + + req := httptest.NewRequest("POST", "/test", bytes.NewBufferString(tc.body)) + req.Header.Set("Content-Type", "application/json") + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusBadRequest, w.Code, + "escaped form must be rejected just like the literal one") + }) + } + }) + + // A body that does not parse must still reach the handler, so ordinary + // request validation produces the error rather than this middleware. + t.Run("malformed JSON is left to normal validation", func(t *testing.T) { + router := gin.New() + router.Use(UnicodeNormalizationMiddleware()) + router.POST("/test", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + + req := httptest.NewRequest("POST", "/test", bytes.NewBufferString(`{"name": "unterminated`)) + req.Header.Set("Content-Type", "application/json") + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + }) + + // Escaped characters that are not problematic must still pass, so the deep + // scan does not start rejecting ordinary international text. + t.Run("benign escapes still pass", func(t *testing.T) { + router := gin.New() + router.Use(UnicodeNormalizationMiddleware()) + router.POST("/test", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + + // Accented Latin, CJK, and an emoji, all written as escapes. + body := "{\"name\": \"caf\\u00e9 \\u6771\\u4eac \\ud83d\\ude80\"}" + req := httptest.NewRequest("POST", "/test", bytes.NewBufferString(body)) + req.Header.Set("Content-Type", "application/json") + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + }) + t.Run("GET requests bypass validation", func(t *testing.T) { router := gin.New() router.Use(UnicodeNormalizationMiddleware()) From a9bbd3febbcf35b858ecc20d707b4038c29c1625 Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 17:00:42 -0400 Subject: [PATCH 10/12] test(cats): classify verified-correct 4xx rejections as false positives Ten rules covering findings from run 20260730T174620Z where the server did the right thing and CATS expected otherwise. Security-flavoured findings, all disproved by evidence rather than assumption: AUTH_ERROR_CODE_IS_NOT_A_DETAILS_LEAK (39) -- the "leaked" keyword is "unauthorized", the RFC 6749 error code, in the standard 401 body. SSTI_PAYLOAD_REFLECTED_NOT_EVALUATED (33) -- 0 of 33 responses contained 8051, the evaluated form of the 83*97 payload; all 33 contained the payload verbatim. CATS's "engine" keyword matched our own seeded member role "engineering_lead". Requiring the unevaluated payload keeps a real evaluation surfacing. SSRF_URI_VALIDATION_REJECTS_UNRESOLVABLE_400 (117) -- this is the SSRF control reporting itself. ssrf_validator.go resolves the host and checks every IP against the blocklist, and safe_http_client.go dials the validated IP instead of re-resolving, so the lookup cannot be raced by a DNS rebind. Correct rejections of mangled payloads (600 + 46 + 18) and genuine state conflicts (230 + 87 + 15): nested schema violations, undecodable base64, corrupted pagination cursors, duplicate metadata keys, restoring a non-deleted entity, and a second threat model from one survey response. Each is keyed on the error the server actually returned rather than on the fuzzer name, so an unrelated 400/409 on the same path still surfaces. Together with the MassAssignment rule this takes the run from 2,980 true positives to 1,134. Nothing matched a 5xx. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- test/cats/false-positives.yaml | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/test/cats/false-positives.yaml b/test/cats/false-positives.yaml index 3f6587b7..5d89bd03 100644 --- a/test/cats/false-positives.yaml +++ b/test/cats/false-positives.yaml @@ -848,3 +848,99 @@ rules: result_reason: { contains: SSRF payload reflected in response } contract_path: in: ["/teams", "/teams/{team_id}", "/projects", "/projects/{project_id}"] + + # rule 50: "unauthorized" is an error code, not leaked internals (run 20260730T174620Z) + # All 39 hits are /saml/providers/{idp}/users returning the standard 401 body. + # CATS's leak heuristic matched the word "unauthorized" in it. + - id: AUTH_ERROR_CODE_IS_NOT_A_DETAILS_LEAK + why: CATS flags the keyword "unauthorized" as a possible error-details leak, but that is the RFC 6749 error code itself and the body is the generic {"error":"unauthorized","error_description":"Authentication required"}. No internals are disclosed. + when: + result_reason: { contains: Error details leak } + response_code: 401 + json_body.error: { equals: unauthorized } + + # rule 51: SSTI payload stored verbatim, never evaluated (run 20260730T174620Z) + # 0 of 33 responses contained 8051 (the evaluated 83*97); all 33 contained the + # literal payload. CATS's "engine" keyword matched our seeded member role + # "engineering_lead". Requiring the unevaluated payload is what keeps this rule + # honest: if a template engine ever does evaluate it, the body carries the + # computed value instead, the rule stops matching, and the finding surfaces. + - id: SSTI_PAYLOAD_REFLECTED_NOT_EVALUATED + why: The SSTI payload comes back verbatim, so no template engine evaluated it. CATS matches its "engine" keyword against our own seeded member role engineering_lead. Requiring the unevaluated payload in the body keeps a genuine evaluation (which would show the computed value instead) surfacing. + when: + fuzzer: SstiInjectionInStringFields + result_reason: { contains: SSTI injection error detected } + response_code: { in: [200, 201] } + response_body: { contains: "83*97" } + + # rule 52: unknown request fields are dropped, not bound (run 20260730T174620Z) + # MassAssignment injects fields like price/discountPercent and flags the 2xx. + # TMI ignores unknown fields rather than binding them: 0 of 661 responses + # echoed the injected field, so nothing was assigned and there is no mass + # assignment. Staying permissive about unknown fields is the deliberate policy + # choice here (the alternative, additionalProperties:false plus 400, is a + # breaking change for clients). + # + # The /admin/ exclusion is forward-looking: no /admin/ path appears in this + # bucket today, but silently accepting an undeclared field on a + # privilege-bearing endpoint is exactly the case worth hearing about, so it + # must not be swept up by this rule later. + - id: UNDECLARED_FIELD_DROPPED_NOT_BOUND + why: TMI ignores unknown request fields rather than binding them, so MassAssignment's injected fields are dropped, not assigned. Verified on run 20260730T174620Z - 0 of 661 responses echoed the injected field. Excludes /admin/ so silent acceptance on privilege-bearing endpoints still surfaces. + when: + fuzzer: MassAssignment + result_reason: { equals: Undeclared field accepted } + contract_path: { matches: "^(?!/admin/)" } + + # rules 53-59: correct 4xx rejections the fuzzer expected to succeed + # (run 20260730T174620Z). Each is keyed on the specific error the server + # returned rather than on the fuzzer name, so an unrelated 400/409 on the same + # path still surfaces. CATS expects 2xx from these fuzzers because it does not + # model nested schema constraints or resource state. + + - id: NESTED_SCHEMA_VALIDATION_400 + why: The fuzzer mangled a nested object (color_palette colour pattern, cvss score range, diagram cells) and the server rejected it against the schema. A 400 is correct; CATS expected 2xx because it does not model nested constraints. + when: + response_code: 400 + json_body.error_description: { contains: 'multiple errors encountered: Error at "/' } + + - id: SCREENSHOT_BASE64_INVALID_400 + why: The fuzzer corrupted the base64 screenshot payload and the server rejected it. A 400 is the correct response to undecodable base64. + when: + response_code: 400 + json_body.error_description: { contains: "screenshot base64 body is not valid" } + + # This one is the SSRF protection reporting itself. api/ssrf_validator.go + # resolves the host and checks every returned IP against the blocklist, and + # api/safe_http_client.go then dials the validated IP rather than re-resolving, + # so the lookup cannot be raced. Refusing a host it cannot resolve is the + # control working, not a finding. + - id: SSRF_URI_VALIDATION_REJECTS_UNRESOLVABLE_400 + why: The URI validator refuses a host it cannot resolve, which is the SSRF protection working (api/ssrf_validator.go resolves and checks every IP against the blocklist). The fuzzer supplies random hostnames, so a 400 is correct. + when: + response_code: 400 + json_body.error_description: { contains: "invalid uri: cannot resolve hostname" } + + - id: PAGINATION_CURSOR_INVALID_400 + why: The fuzzer corrupted an opaque pagination cursor; rejecting it with 400 is correct. + when: + response_code: 400 + json_body.error_description: { contains: "Invalid pagination cursor" } + + - id: METADATA_KEY_CONFLICT_409 + why: The fuzzer reuses one metadata key across repeated requests, so the second write is a genuine conflict. 409 is the correct optimistic-concurrency outcome. + when: + response_code: 409 + json_body.error_description: { contains: "Metadata key already exists" } + + - id: RESTORE_NON_DELETED_ENTITY_409 + why: Restore only applies to a soft-deleted entity; calling it on a live one is a state conflict, and 409 is correct. + when: + response_code: 409 + json_body.error_description: { contains: "not in a deleted state" } + + - id: SURVEY_THREAT_MODEL_ALREADY_CREATED_409 + why: A survey response yields at most one threat model; a second creation attempt is a genuine conflict and 409 is correct. + when: + response_code: 409 + json_body.error_description: { contains: "already been created from this survey" } From 3b56a18b75027ac8eb6c6ad870db70ccfd221fae Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 17:10:10 -0400 Subject: [PATCH 11/12] test(cats): classify SSE responses validated as JSON schema as false positives POST /threat_models/{threat_model_id}/chat/sessions streams text/event-stream, the only content type its 200 response declares. CATS wraps the non-JSON body in a notAJson envelope and then reports that it "does not match the corresponding schema" -- there is no application/json schema for it to match, which is correct and intentional. Found while diagnosing the "Not matching response schema" bucket: this was the one operation of 23 with no application/json schema declared, and its own evidence settles it (response_content_type is text/event-stream, exactly as documented). 12 findings. The remaining 409 in that bucket do not reproduce as schema violations and are deliberately left unsuppressed pending a fresh run -- see the analysis notes on the branch. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- test/cats/false-positives.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/cats/false-positives.yaml b/test/cats/false-positives.yaml index 5d89bd03..ae6a1d3c 100644 --- a/test/cats/false-positives.yaml +++ b/test/cats/false-positives.yaml @@ -944,3 +944,14 @@ rules: when: response_code: 409 json_body.error_description: { contains: "already been created from this survey" } + + # rule 60: SSE stream validated against a JSON schema (run 20260730T174620Z) + # POST /threat_models/{id}/chat/sessions streams text/event-stream, which is + # the only content type its 200 declares. CATS wraps the non-JSON body in a + # notAJson envelope and then reports it does not match "the corresponding + # schema" -- there is no application/json schema for it to match. + - id: SSE_STREAM_VALIDATED_AS_JSON_SCHEMA + why: "The endpoint streams text/event-stream exactly as the spec declares, and declares no application/json schema. CATS wraps the non-JSON body in a notAJson envelope and then reports it does not match a JSON schema that does not exist." + when: + result_reason: { equals: Not matching response schema } + response_content_type: { contains: text/event-stream } From e658845c20c4291e33c8e07dd1acf49fed45c55c Mon Sep 17 00:00:00 2001 From: Eric Fitzgerald Date: Thu, 30 Jul 2026 17:21:00 -0400 Subject: [PATCH 12/12] fix(scripts): bind the OAuth callback to this flow and keep tokens out of argv Security review of the new settings CLI found three problems in its browser login. All are in code added earlier on this branch. State was effectively optional. The check read if result.get("state") not in (None, state): so a callback carrying no state at all satisfied it -- the parameter was only validated when the sender chose to supply it. Worse, the branch below returned any access_token found in the callback without the state having constrained anything. Together that meant a page open in the operator's browser could issue a cross-origin GET to the listener and hand the tool an identity of its choosing for the rest of the run. The ephemeral port raises the cost of finding the listener but does not prevent it, and the window stays open for the full five-minute timeout. Now: - The handler compares state with secrets.compare_digest before it looks at anything else, so a callback that is not bound to this flow is 400'd and never even captured. A missing state fails exactly like a wrong one. - authenticate() re-checks rather than trusting a check made far away in the file. - A token delivered straight to the callback is refused. It is not bound to the PKCE verifier this process generated, so accepting it would defeat the point of using PKCE. Only a token the server mints in exchange for our code and verifier is used. - The listener binds 127.0.0.1 explicitly instead of the "localhost" name. Verified by driving the handler directly: forged callbacks with no state, with a token and no state, and with a wrong state all return 400 and capture nothing; the correctly-stated callback returns 200 and is captured. Separately, --token is replaced by --token-file. A bearer token in argv is readable by any local process via ps and lands in shell history, which is the same reason setting values already use --value-file. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WnrVyySuyJFqcMxB8q3pNc --- scripts/set-server-setting.py | 67 +++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/scripts/set-server-setting.py b/scripts/set-server-setting.py index f6f7986c..c00ea511 100644 --- a/scripts/set-server-setting.py +++ b/scripts/set-server-setting.py @@ -21,8 +21,14 @@ scripts/set-server-setting.py --server https://api.tmi.dev --idp microsoft \ get auth.oauth.providers.google.client_id -Secret values: pass --value-file rather than putting the value on the command -line, so it never lands in argv, shell history, or process listings. +Secrets never go on the command line. Pass a setting's value with --value-file +and an existing bearer token with --token-file, so neither lands in argv, shell +history, or another user's `ps` output. + +The browser login requires the callback to carry back the exact `state` this +process issued, and requires an authorization code: a token delivered straight +to the callback is not bound to this flow's PKCE verifier, so it is refused +rather than used. A caveat this tool cannot work around: settings supplied through the environment or a config file outrank the database (env > config > DB, see @@ -51,7 +57,9 @@ DEFAULT_SERVER = "http://localhost:8080" DEFAULT_IDP = "google" -CALLBACK_HOST = "localhost" +# Bind the loopback address explicitly rather than the "localhost" name, so the +# listener cannot end up on a non-loopback interface if the name resolves oddly. +CALLBACK_HOST = "127.0.0.1" AUTH_TIMEOUT_SECONDS = 300 @@ -78,9 +86,23 @@ class _CallbackHandler(http.server.BaseHTTPRequestHandler): result: dict[str, str] = {} done = threading.Event() + # The state this flow issued. A callback that does not carry it back is not + # this flow's callback and is ignored outright, so a forged request cannot + # even reach the exchange logic. + expected_state: str = "" + def do_GET(self) -> None: # noqa: N802 - stdlib naming params = urllib.parse.parse_qs(urllib.parse.urlparse(self.path).query) flat = {k: v[0] for k, v in params.items() if v} + + # Reject anything not bound to this flow before looking at its contents. + # secrets.compare_digest over a value we generated ourselves, so the + # comparison is constant-time and a missing state fails like a wrong one. + if not secrets.compare_digest(flat.get("state", ""), _CallbackHandler.expected_state): + self.send_response(400) + self.end_headers() + return + # TMI may hand back either an authorization code or, when it has # already completed the exchange itself, the tokens directly. if "code" in flat or "access_token" in flat or "error" in flat: @@ -124,6 +146,7 @@ def authenticate(server: str, idp: str) -> str: _CallbackHandler.result = {} _CallbackHandler.done = threading.Event() + _CallbackHandler.expected_state = state httpd = http.server.HTTPServer((CALLBACK_HOST, port), _CallbackHandler) thread = threading.Thread(target=httpd.serve_forever, daemon=True) thread.start() @@ -143,11 +166,22 @@ def authenticate(server: str, idp: str) -> str: f"Authentication failed: {result['error']} " f"{result.get('error_description', '')}".strip() ) - if result.get("state") not in (None, state): - raise SystemExit("State mismatch on OAuth callback -- aborting.") - - if "access_token" in result: - return result["access_token"] + # The handler already refused anything whose state did not match, so reaching + # here means the callback is bound to this flow. Re-check rather than trust + # that, since the two are far apart in the file. + if not secrets.compare_digest(result.get("state", ""), state): + raise SystemExit("State missing or mismatched on OAuth callback -- aborting.") + + # Only accept a token the server minted in exchange for OUR code and + # verifier. A token arriving in the callback is not bound to the PKCE + # verifier this process generated, so taking it on trust would let anyone + # who reaches the listener choose the identity the rest of the run acts as. + if "code" not in result: + raise SystemExit( + "OAuth callback carried no authorization code. Refusing to use a " + "token handed straight to the callback: it is not bound to this " + "flow's PKCE verifier." + ) resp = requests.post( f"{server.rstrip('/')}/oauth2/token", @@ -267,7 +301,13 @@ def main() -> int: ) parser.add_argument("--server", default=DEFAULT_SERVER, help=f"TMI base URL (default: {DEFAULT_SERVER})") parser.add_argument("--idp", default=DEFAULT_IDP, help=f"OAuth provider id (default: {DEFAULT_IDP})") - parser.add_argument("--token", help="Existing bearer token; skips the browser login") + # A token is a credential, so it is read from a file rather than argv: argv + # is world-readable via ps and lands in shell history. Same reasoning as + # --value-file below. + parser.add_argument( + "--token-file", + help="File containing an existing bearer token; skips the browser login", + ) sub = parser.add_subparsers(dest="command", required=True) @@ -289,7 +329,14 @@ def main() -> int: args = parser.parse_args() server = args.server.rstrip("/") - token = args.token or authenticate(server, args.idp) + if args.token_file: + with open(args.token_file, encoding="utf-8") as fh: + token = fh.read().strip() + if not token: + print(f"error: {args.token_file} is empty", file=sys.stderr) + return 2 + else: + token = authenticate(server, args.idp) handlers = { "list": cmd_list,