Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
866 commits
Select commit Hold shift + click to select a range
b485945
chore(beads): close gopherstack-rh77, file gopherstack-iook
Sep 7, 2026
a4b6162
organizations: seed the default FullAWSAccess SCP and protect AWS-man…
Sep 7, 2026
57aad13
chore(beads): close gopherstack-hg4i
Sep 7, 2026
e0ee0f1
chore(beads): file gopherstack-3hov
Sep 7, 2026
799caaf
kinesisanalytics: record CodeValidationException and UnsupportedOpera…
Sep 7, 2026
8116c0e
chore(beads): close gopherstack-725q
Sep 7, 2026
0d3569c
sagemaker: migrate the remaining Eventually polls to synctest
Sep 7, 2026
8471a02
chore(beads): close gopherstack-iook, file gopherstack-k3ae
Sep 7, 2026
cf4efac
route53: audit backendErrorTable across all 71 ops
Sep 7, 2026
f2ac9a6
chore(beads): close gopherstack-ns7j
Sep 7, 2026
3a465fd
pkgs/lockmetrics: aggregate live metrics per label tuple
Sep 7, 2026
ceca51e
chore(beads): close gopherstack-koq4, file gopherstack-lf8p
Sep 7, 2026
9e175f5
chore(pgo): refresh default.pgo profile
agbishop Sep 7, 2026
0f0c343
cmd/errtargetaudit: see data-driven error tables, and say when it cannot
Sep 7, 2026
57b49d7
chore(beads): close gopherstack-yn2o, file gopherstack-jkma/8u3f/opzq
Sep 7, 2026
b5c0ae4
glacier: distinguish an absent inventory snapshot from a zero one
Sep 7, 2026
7b6c06e
chore(beads): close gopherstack-c8sa
Sep 7, 2026
77f8174
sqs: pin ChangeMessageVisibilityBatch's per-entry failure shape
Sep 7, 2026
d4b4fab
chore(beads): close gopherstack-opzq
Sep 7, 2026
b7d6bc2
chore(beads): close gopherstack-opzq, record calibration on gophersta…
Sep 7, 2026
6583db7
kms: emit declared error codes from four wrong-state and MAC paths
Sep 7, 2026
3383b82
chore(beads): close gopherstack-8u3f, file gopherstack-k3ww/h88p
Sep 7, 2026
0e31bc0
chore(beads): file gopherstack-ftkd/lmkr from the errtargetaudit corpus
Sep 7, 2026
46d0d01
acm: emit declared error codes from ACME and tag paths
Sep 7, 2026
58f2f2c
cloudfront: use InvalidArgument for FunctionConfig quantity mismatches
Sep 7, 2026
aed8870
chore(beads): close gopherstack-ftkd and gopherstack-lmkr, file gophe…
Sep 7, 2026
b658337
chore(beads): file gopherstack-hp83 and gopherstack-33jc from the corpus
Sep 7, 2026
b6a143a
workmail: make the two documented idempotent deletes actually idempotent
Sep 7, 2026
8e4c61f
chore(beads): close gopherstack-hp83
Sep 7, 2026
f968ffe
rds: emit declared error codes from five wrong-sentinel paths
Sep 7, 2026
67069cf
chore(beads): close gopherstack-33jc, file gopherstack-fm1e/l20u
Sep 7, 2026
1cbbc44
chore(beads): file gopherstack-yr88 and gopherstack-3djp from the corpus
Sep 7, 2026
8c18d54
iot: record the errtargetaudit verdicts, no code change
Sep 7, 2026
ce7fb79
chore(beads): close gopherstack-yr88, file gopherstack-y3om/il42
Sep 7, 2026
2992191
codepipeline: record seven undeclared-code findings, no fix
Sep 7, 2026
76fe32b
chore(beads): close gopherstack-3djp, file gopherstack-wlab
Sep 7, 2026
75250ea
chore(beads): file the codedeploy block, raise gopherstack-il42 to P2
Sep 7, 2026
5ddfb73
codedeploy: return InstanceNotRegisteredException from GetOnPremisesI…
Sep 7, 2026
215dcfb
chore(beads): close gopherstack-3pz8, file gopherstack-l81f
Sep 7, 2026
5bda69f
cmd/errtargetaudit: resolve override codes passed as call-site arguments
Sep 7, 2026
b1bbadd
chore(beads): close gopherstack-il42
Sep 7, 2026
319c5f2
chore(beads): file the acmpca and stepfunctions corpus blocks
Sep 7, 2026
c9f69b7
acmpca: third confirmation that six findings have no safe remedy
Sep 7, 2026
38121c3
chore(beads): close gopherstack-qrnq, add a screening rule to gophers…
Sep 7, 2026
891cb6e
stepfunctions: record the errtargetaudit verdicts, one landmine, no fix
Sep 7, 2026
6027cfb
chore(beads): file the elasticsearch tag bug and the memorydb block
Sep 7, 2026
11bd9ce
elasticsearch: cross-reference the tag-error deferral to its fix
Sep 7, 2026
b7dd510
chore(beads): close gopherstack-8h57 as already fixed, sharpen the jk…
Sep 7, 2026
0f1de3a
memorydb: record the errtargetaudit verdicts, one landmine
Sep 7, 2026
d968d25
chore(beads): file the shield and elb corpus blocks
Sep 7, 2026
a1fb3cc
elb: make DeleteLoadBalancer idempotent, as its doc requires
Sep 7, 2026
01215e1
shield: emit per-op declared codes instead of one global mapping
Sep 7, 2026
f54d511
chore(beads): close gopherstack-g2l5, file gopherstack-hdvu
Sep 7, 2026
e00bd67
chore(beads): file the codecommit and cloudcontrol corpus blocks
Sep 7, 2026
f365f47
codecommit: split two sentinels whose codes differ per op
Sep 7, 2026
c706018
cloudcontrol: stop emitting InvalidRequestException from ops that nev…
Sep 7, 2026
c60365d
chore(beads): close gopherstack-v5eb
Sep 7, 2026
b7500b1
chore(beads): file the ecr and firehose corpus blocks
Sep 7, 2026
2277245
firehose: stop rejecting a filter value on an op that declares no errors
Sep 7, 2026
2746dc1
chore(beads): close gopherstack-t2wb
Sep 7, 2026
8fc5562
ecr: stop erroring on lookups whose ops declare no not-found code
Sep 7, 2026
9eb5d31
chore(beads): close gopherstack-jqxg
Sep 7, 2026
d3ded4c
chore(beads): file the resourcegroups and lakeformation corpus blocks
Sep 7, 2026
790552b
lakeformation: record both findings as batch per-entry false positives
Sep 7, 2026
f01b0c5
chore(beads): close gopherstack-4lvy
Sep 7, 2026
2b57ea1
resourcegroups: stop erroring on an unknown group in ListGroupingStat…
Sep 7, 2026
bf252d3
chore(beads): close gopherstack-m4k0, file gopherstack-t3uf
Sep 7, 2026
c1825ac
chore(beads): file the resiliencehub and dax corpus blocks
Sep 7, 2026
7bb8080
resiliencehub: drop not-found gates from two drift List ops
Sep 7, 2026
fa462f0
chore(beads): close gopherstack-ulsj
Sep 7, 2026
101b76c
dax: stop emitting InvalidParameterValueException from the subnet-gro…
Sep 7, 2026
482d0cf
chore(beads): close gopherstack-dkr8
Sep 7, 2026
0ceefb6
chore(beads): file the cleanrooms block, claim gopherstack-2kud
Sep 7, 2026
ef7f53f
cleanrooms: pin the deliberate undeclared code on the Collaboration trio
Sep 7, 2026
6575de1
chore(beads): close gopherstack-b76t, file gopherstack-a2bp
Sep 7, 2026
e6a167d
cmd/errtargetaudit: count ground truth from assigned modules, not eve…
Sep 7, 2026
948cee8
chore(beads): close gopherstack-2kud, file gopherstack-zkpi/g7to
Sep 7, 2026
0678c24
chore(beads): raise gopherstack-zkpi to P2, claim it and gopherstack-…
Sep 7, 2026
6103a24
sagemaker: record why the last Eventually stays
Sep 7, 2026
25950a9
chore(beads): close gopherstack-k3ae
Sep 7, 2026
4200bd3
cmd/errtargetaudit: report a module with no per-op error functions as…
Sep 7, 2026
35f4afd
chore(beads): close gopherstack-zkpi, file gopherstack-84mn
Sep 7, 2026
79abf6e
chore(beads): claim gopherstack-l20u and gopherstack-h88p
Sep 7, 2026
84ba612
rds: fault on an unknown DBClusterIdentifier in DescribeDBClusterEndp…
Sep 7, 2026
06268ef
chore(beads): close gopherstack-l20u
Sep 7, 2026
e98fcdc
kms: emit declared codes from ImportKeyMaterial's four rejection paths
Sep 7, 2026
cb47053
chore(beads): close gopherstack-h88p, file gopherstack-i4q8/5rjn
Sep 7, 2026
a52c984
chore(beads): file the module-unknown-code check, claim it and gopher…
Sep 7, 2026
3b06f1f
kms: fix four ValidationException sites, landmine the other thirty-two
Sep 7, 2026
5b1e348
chore(beads): close gopherstack-i4q8, file gopherstack-4ra7/jyi3
Sep 7, 2026
90e44c1
errtargetaudit: add orphan-code class and fix two code-extraction bugs
Sep 7, 2026
fc179c7
chore(beads): close zofv; file udkm, yatn
Sep 7, 2026
ea08b6d
cloudfront,codecommit: emit declared error codes, not invented ones
Sep 7, 2026
809a989
errtargetaudit: consult genericProtocolCodes only when the service mo…
Sep 7, 2026
38a9a24
chore(beads): close mq6m (mgn probe: shared-helper artifact, no fix);…
Sep 7, 2026
12343ef
chore(beads): file the ValidationException-vs-kms-landmines question
Sep 7, 2026
773fc2e
eventbridge,stepfunctions: emit declared error codes, not invented ones
Sep 7, 2026
24e4c34
kms: MAC algorithm mismatch is InvalidKeyUsageException, not an inven…
Sep 7, 2026
05f3785
glue: record the BatchStopJobRun orphan-code screen in PARITY.md
Sep 7, 2026
98bdada
ses,sts: emit declared error codes, not invented ones
Sep 7, 2026
b9aece8
chore(beads): close yatn (orphan-code class fully triaged)
Sep 7, 2026
9052099
kms: ValidationException is a real pre-dispatch fault; drop the 32 la…
Sep 7, 2026
b9fb89e
ssm: PutParameter's input checks use its own declared exceptions
Sep 7, 2026
8495edd
stepfunctions: record pickRoutedVersion's empty-routing branch as unr…
Sep 7, 2026
4456f5e
errtargetaudit: group findings by emission site, not by operation
Sep 7, 2026
6e160e4
awsconfig,efs: emit declared error codes for input validation
Sep 7, 2026
014062b
kms: CreateKey KeySpec/KeyUsage uses a declared code; HMAC multi-Regi…
Sep 7, 2026
87ce820
chore(beads): file cloudfront (03rb) and acm (bzyl) audit slices
Sep 7, 2026
1fe0cd1
chore(beads): close 03rb (cloudfront unreachable-guard shape); file s…
Sep 7, 2026
9e73a17
acm: RequestCertificate and RevokeCertificate emit codes they do not …
Sep 7, 2026
84f956e
chore(beads): claim s0dw; file hntj (workmail+stepfunctions slice)
Sep 7, 2026
eb76a5f
chore(beads): close hntj as a duplicate of hp83/2hdk/yatn
Sep 7, 2026
9037be8
memorydb,elb: sharpen two no-remedy landmines with what was ruled out
Sep 7, 2026
026042f
errtargetaudit: mark definition-site rows as rollups so totals are no…
Sep 7, 2026
59c8902
organizations: FullAWSAccess carries the AWS-owned ARN authority
Sep 7, 2026
76ac705
codedeploy: ListDeployments honours the externalId filter instead of …
Sep 7, 2026
b619d1b
chore(beads): close g7to (tool blindness, not thin services); file th…
Sep 7, 2026
626f177
errtargetaudit,errcodeaudit: drop InternalServerException from the sh…
Sep 7, 2026
d2d3df4
chore(beads): close qgo1 (superseded by bzyl); claim sgbw, fm1e, l81f
Sep 7, 2026
d48cb57
rds: ModifyActivityStream returns DBInstanceNotFound, the code it dec…
Sep 7, 2026
adbe691
errtargetaudit: trace three dispatch shapes the tracer could not see
Sep 7, 2026
119e5cd
kms: DescribeKey stops emitting a grant-token code it never declared
Sep 7, 2026
fc86340
persistence: refresh the snapshot inventory golden for two additive f…
Sep 7, 2026
c560527
eks: honour CreateAddon's NamespaceConfig instead of always using kub…
Sep 7, 2026
131d491
forecast,comprehend: record why the newly-visible findings are not de…
Sep 7, 2026
09e3e71
codecommit: BatchGetCommits reports CommitIdDoesNotExistException per…
Sep 7, 2026
a509513
errtargetaudit: stop resolving Go builtin calls to same-named methods
Sep 7, 2026
b22ed56
Merge remote-tracking branch 'origin/main' into chore/parity-sweep-20…
Sep 7, 2026
7ef1d97
chore(beads): claim hdvu and inmm
Sep 7, 2026
7aebefd
chore(beads): close hdvu (shield already fixed; residual findings are…
Sep 7, 2026
72abb9b
organizations: CreateOrganization with FeatureSet=ALL enables SCP on …
Sep 7, 2026
be1c8ee
chore(beads): claim g2eo and mial
Sep 7, 2026
345e66b
directoryservice: record the unreachable TrustState and SnapshotStatu…
Sep 7, 2026
d3452dd
rds: point the ModifyActivityStream handler at its scoping landmine
Sep 7, 2026
9a4d1cb
rds: ModifyActivityStream state conflicts emit InvalidDBInstanceState
Sep 7, 2026
0567ae7
chore(beads): re-baseline jkma; file and claim 0zxv
Sep 7, 2026
bbe2ac4
chore(beads): close 0zxv (both sibling services already declined, ver…
Sep 7, 2026
8678952
chore(beads): file and claim 3sbi (appsync) and w4kf (elasticache)
Sep 7, 2026
5cd5081
chore(beads): close 3sbi (elasticache attribution is a mixed false po…
Sep 7, 2026
5b6bbb8
appsync: GetIntrospectionSchema reports GraphQLSchemaException for an…
Sep 7, 2026
6c4ae88
docs: regenerate the READMEs derived from two PARITY.md edits
Sep 7, 2026
9d18b83
Merge branches 'pgo/auto-refresh' and 'dependabot/github_actions/all-…
Sep 8, 2026
073ac05
build: move to Go 1.27 and golangci-lint 2.13.2
Sep 8, 2026
4030a96
chore(beads): record the 9 services needing declared-set re-verificat…
Sep 8, 2026
c56c2ff
build: upgrade all dependencies; declare 62 new SDK operations unimpl…
Sep 8, 2026
b2b7bca
chore(beads): file the services/ lint backlog from the 2.13.2 upgrade
Sep 8, 2026
33457ff
chore(beads): record the SA4023 investigation on y8jd -- intentional,…
Sep 8, 2026
3130464
docs: regenerate READMEs and the Go badge after the toolchain and SDK…
Sep 8, 2026
3735ffa
services: clear the A-F half of the golangci-lint 2.13.2 findings
Sep 8, 2026
67a874f
services,pkgs: clear the remaining golangci-lint 2.13.2 findings
Sep 8, 2026
2996a2d
chore(beads): close k1z0 -- all campaign claims survive the SDK bump
Sep 8, 2026
c743213
rekognition: record the confirmed-negative doc search for ResourceInU…
Sep 8, 2026
5611472
sagemaker: DeletePipeline refuses while an execution is still running
Sep 8, 2026
2faf79a
docs(support): record CaseDetails.Status reachability as a modelling gap
Sep 8, 2026
631f7cd
docs(amplify): record JobStatus/DomainStatus reachability as a modell…
Sep 8, 2026
9cd74b3
fix(account): ap-southeast-1 and ap-northeast-1 are enabled-by-defaul…
Sep 8, 2026
5c8bf90
chore(networkmonitor): drop dead PENDING consts, record quota-oracle …
Sep 8, 2026
ca8c024
chore(beads): export issue state
Sep 8, 2026
002a0c3
test(networkmonitor): pin ProbeState PENDING reachability via UpdateP…
Sep 8, 2026
80d7974
chore(beads): export issue state
Sep 8, 2026
db8e86c
fix(appconfig): validate the DeletionProtectionCheck header on deletes
Sep 8, 2026
3b45eb7
fix(emrserverless): enforce AutoStopConfig idleTimeoutMinutes bounds
Sep 8, 2026
b39638c
docs: regenerate service READMEs after the amplify and support gap en…
Sep 8, 2026
fb58d6f
chore(beads): export issue state
Sep 8, 2026
083c608
docs(s3control): record DeleteBucket's empty-bucket precondition as v…
Sep 8, 2026
d91014f
docs(account): record the primary-email OTP audit; no TTL in either o…
Sep 8, 2026
33a74e9
test(account): pin primary-email OTP single-use and re-Start invalida…
Sep 8, 2026
6c216be
fix(quicksight): make a targeted dashboard version delete observable
Sep 8, 2026
c868a60
docs: regenerate READMEs after the s3control gap entry
Sep 8, 2026
87f3ba9
docs(mediastore): record the DeleteContainer empty-container gap as s…
Sep 8, 2026
30fe21e
refactor(detective): remove dead severity-gated indicator branches
Sep 8, 2026
631f292
docs: regenerate READMEs after the mediastore and detective entries
Sep 8, 2026
de7160c
fix(ram): reject malformed resourceArns on create and associate
Sep 8, 2026
1923056
fix(ssm): validate MaxConcurrency and MaxErrors on SendCommand and Cr…
Sep 8, 2026
5578225
docs: regenerate READMEs after the ram and ssm entries
Sep 8, 2026
6ead16a
fix(elasticache): reject a final snapshot on Memcached at DeleteCache…
Sep 8, 2026
a26efae
fix(apigateway): validate deploymentId on UpdateStage
Sep 8, 2026
fb90da8
docs: regenerate READMEs after the apigateway and elasticache entries
Sep 8, 2026
0a63979
fix(cloudfront): stop rejecting a CallerReference collision on FLE co…
Sep 8, 2026
15ace1a
chore(beads): export issue state
Sep 8, 2026
9eb1d5d
fix(elasticache): wire CreateCacheCluster's ReplicationGroupId
Sep 8, 2026
8eb0f4c
fix(cloudfront): scan for FLE CallerReference collisions instead of a…
Sep 8, 2026
4a14230
chore(beads): export issue state
Sep 8, 2026
fe10061
docs(cleanrooms): correct a self-contradictory verdict on the Collabo…
Sep 8, 2026
13a1342
docs(cloudfront): audit xmlResp for the nil-on-write fall-through; no…
Sep 8, 2026
221e362
fix(elasticache): stop rejections falling through after the response …
Sep 8, 2026
35985f2
docs(elasticache): set last_audit_commit and regenerate README
Sep 8, 2026
6e27729
docs: audit six services for the nil-on-write rejection fall-through;…
Sep 8, 2026
f4977f1
fix(pinpoint): stop a rejected template update writing a second response
Sep 8, 2026
81ffe93
docs: audit five more services for the nil-on-write fall-through; all…
Sep 8, 2026
dd6aebf
docs: regenerate READMEs after the 246v sweep entries
Sep 8, 2026
149bec6
chore(beads): file bfo9 sweep findings
Sep 8, 2026
7b0e853
fix(apigatewayv2): stop throttled and unauthorized requests reaching …
Sep 8, 2026
265bff1
fix(stepfunctions): model the DELETING window so StateMachineDeleting…
Sep 8, 2026
5cb6970
docs: regenerate apigatewayv2 README after the wsvb entry
Sep 8, 2026
491ba45
fix(identitystore): stop mutations proceeding after an IdentityStoreI…
Sep 8, 2026
1cde76a
fix(securityhub): a malformed JSON body no longer enables SecurityHub V2
Sep 8, 2026
edb4f8e
fix(lambda): a rejected Invoke no longer runs the function
Sep 8, 2026
fc99352
fix(organizations): a rejected CreateAccount no longer creates the ac…
Sep 8, 2026
e742c68
chore(beads): export issue state
Sep 8, 2026
06886c1
fix(pinpoint): UpdateJourney on an ACTIVE journey returns ConflictExc…
Sep 8, 2026
b47ee58
fix(codeartifact): a rejected package-version request no longer queri…
Sep 8, 2026
75bf2ac
fix(resourcegroups): a rejected Untag no longer reaches the backend
Sep 8, 2026
1256c85
fix(eks): return the VPC-endpoint update error instead of swallowing it
Sep 8, 2026
f6a7d4a
docs: regenerate READMEs after the 7opw and os7o entries
Sep 8, 2026
7366f7d
docs: regenerate operations badge
Sep 8, 2026
0cef2c0
test(errtargetaudit): pin worthReporting's warnings branch against th…
Sep 8, 2026
d5e2353
chore(beads): export issue state
Sep 8, 2026
4399c81
fix(s3): restored buckets and objects report lock metrics under the l…
Sep 8, 2026
8ec2f22
fix(codecommit): record and filter on actorArn using the caller alrea…
Sep 8, 2026
043edc0
docs: regenerate after the lf8p and a7tx entries
Sep 8, 2026
e882872
docs(mgn): record the ChangeServerLifeCycleState audit; premise was w…
Sep 8, 2026
3580c80
fix(ses): validate receipt-rule actions and stop a malformed action t…
Sep 8, 2026
5568a3f
docs: regenerate READMEs after the ses and mgn entries
Sep 8, 2026
de3564e
fix(persistence): refresh the snapshot inventory for codecommit's Act…
Sep 8, 2026
226ee88
fix(ses): drop the fabricated SQS receipt action from the wire surface
Sep 8, 2026
38960ea
fix(mgn): enforce ChangeServerLifeCycleState's documented launchable …
Sep 8, 2026
a8961d6
docs: regenerate ses README after the SQS action removal
Sep 8, 2026
2682f67
fix(redshift): reject Modify on a cluster that is not available
Sep 8, 2026
3bfda2b
fix(cloudwatch): clean up tags when deleting metric streams and insig…
Sep 8, 2026
2f630c9
docs: regenerate after the cloudwatch and redshift audits
Sep 8, 2026
b996f95
docs(stepfunctions): record why DescribeStateMachineForExecution's co…
Sep 8, 2026
ed653c3
docs(resourcegroups): record why CancelTagSyncTask's not-found code s…
Sep 8, 2026
f82d9e9
docs(codepipeline): correct the undeclared-error-code rationale; no c…
Sep 8, 2026
1e487c6
docs: regenerate after the codepipeline, stepfunctions and resourcegr…
Sep 8, 2026
3c6b24f
test(iot): pin that the four Delete ops' not-found code reaches its S…
Sep 8, 2026
42c910b
feat(errtargetaudit): warn when a service mixes schema-based and clas…
Sep 8, 2026
ce33157
docs: regenerate after the iot entry
Sep 8, 2026
1138248
docs(ce): record why DataUnavailableException stays unmodelled
Sep 8, 2026
4055305
fix(route53resolver): honour CreatorRequestId idempotency on three Cr…
Sep 8, 2026
1904c72
docs: regenerate after the route53resolver and ce entries
Sep 8, 2026
5ece5c6
fix(ce): validate Granularity and TimePeriod on GetCostAndUsage
Sep 8, 2026
f78b1dc
fix(guardduty): only reject member removal for accounts still in the …
Sep 8, 2026
dcffdaa
docs: regenerate after the guardduty and ce entries
Sep 8, 2026
ea4515e
docs: name the cross-service backend lookup where three audits missed it
Sep 8, 2026
8f74976
fix(appconfig): enforce DeletionProtectionCheck against GetLatestConf…
Sep 8, 2026
f2de67d
docs: regenerate after the appconfig deletion-protection fix
Sep 8, 2026
381246e
docs: correct four more records claiming cross-service lookup does no…
Sep 8, 2026
9713c4d
fix(fsx): reject more than 50 tags on the eleven Create ops that decl…
Sep 8, 2026
059b58b
docs: regenerate after the fsx and cross-service correction entries
Sep 8, 2026
7a3b5c6
fix(managedblockchain): mark an approved proposal ACTION_FAILED when …
Sep 8, 2026
b27a0b9
docs(kms): record why XksKeyId validation was attempted and reverted
Sep 8, 2026
ffb62a4
docs: regenerate after the kms and managedblockchain entries
Sep 8, 2026
1b7385a
fix(managedblockchain): enforce the 50-tag limit AWS declares
Sep 8, 2026
2e07912
docs: regenerate after the managedblockchain tag-limit fix
Sep 8, 2026
468f42f
fix(e2e): pass CreateCluster's two added arguments
Sep 8, 2026
8b9465b
test(errtargetaudit): skip the mixed-governance corpus test when sche…
Sep 8, 2026
7562f33
chore(beads): export issue state
Sep 8, 2026
29ed681
fix: apply the Go 1.27 modernizers so `go fix -diff ./...` is clean
Sep 8, 2026
8114e15
chore(beads): file CI triage findings
Sep 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .badges/go.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions .badges/operations.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1,982 changes: 922 additions & 1,060 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

118 changes: 118 additions & 0 deletions .claude/skills/gopherstack-gates/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
---
name: gopherstack-gates
description: Pick the narrowest correct build/test/lint command for a gopherstack change and decode golangci-lint/CI failures without trial and error. Use whenever about to run tests or lint, before pushing, when a linter fires (fieldalignment, cyclop, gocognit, exhaustive, mnd, gochecknoglobals, depguard, forbidigo, sloglint, nolintlint), when writing a test that waits on async state, or when integration tests fail mysteriously (missing build-linux). Also use to predict what CI will do before opening a PR.
---

# gopherstack gates

## What changed → narrowest command

| change | command |
|---|---|
| One service's Go code | `go test -race ./services/<svc>/...` |
| One service's lint | `golangci-lint run ./services/<svc>/...` |
| Wire-shape confidence | `go test -race -run TestSDKCompleteness ./services/<svc>/...` plus that service's roundtrip tests |
| Shared type in `pkgs/` changed | add `go build ./...` to the above — catches breaks in every consumer |
| Anything touching persistence/snapshot | run that service's `persistence_test.go` explicitly |
| Full gate before push | `make lint` → `make test` → `make build-linux` → `make integration-test`, in that order |

## Makefile targets

| target | runs | prereq |
|---|---|---|
| `build` | `go build` with UI embed | `ui-build` |
| `build-linux` | `CGO_ENABLED=0 GOOS=linux go build -o bin/gopherstack` | none |
| `lint` | `golangci-lint run --timeout 20m ./...` + `go vet -vettool=$(go tool -n mulint-vet) ./...` + `go tool govulncheck ./...` | `install-deps ui-lint ui-fmt ui-check` |
| `lint-fix` | `fieldalignment -fix ./...` then `golangci-lint run --fix ./...` | `install-deps ui-lint-fix ui-fmt-fix` |
| `test` | `go tool gotestsum --format pkgname -- -race -shuffle on -short ./...` | none |
| `integration-test` | `gotestsum ... -race -shuffle on -timeout 10m ./test/integration/...` | **`build-linux`** — the Docker image copies `bin/gopherstack`, so a stale/missing binary makes integration tests fail against old code with no obvious error |
| `terraform-test` | `gotestsum -v -race -parallel 8 -timeout 45m ./test/terraform/...` | `install-tofu` |
| `e2e-test` | `gotestsum ... -tags=e2e ./test/e2e/...` | `ui-build` |
| `total-coverage` | unit+integration+terraform+e2e merged into coverage.out/.html | `build-linux` |
| `docs` | `go run ./cmd/gendocs` — regenerates per-service README.md, root README table, `.badges/*.svg` | none |
| `all` | `make lint-fix && make total-coverage` | — |

If you edit code and then run `make integration-test` without `make build-linux`
first, you are testing the OLD binary. Always rebuild first, or just run
`make integration-test` (it depends on `build-linux` already) rather than
invoking gotestsum directly.

## golangci-lint gotchas that actually bite

`.golangci.yml` is a large (~65 linter) config. These are the ones that
routinely surprise agents:

| gotcha | detail |
|---|---|
| `fieldalignment` | force-enabled via `settings.govet.enable: [fieldalignment]` on top of `enable-all: true`. Bites on every new struct. Fix: `fieldalignment -fix ./...` (also runs as part of `make lint-fix`), don't hand-reorder fields |
| golines, not `lll` | max line length is **120**, enforced by the `golines` formatter, not a linter check. Run `gofmt`/the formatter rather than manually wrapping |
| `exhaustive` | fires on both `switch` AND `map` literals over enum-like types. A `default:` case satisfies it — add one instead of enumerating every case if the switch isn't meant to be exhaustive |
| `mnd` (magic numbers) | bare numeric literals need a named const, even small ones in non-test files |
| `gochecknoglobals` | package-level `var` needs `//nolint:gochecknoglobals // <reason>` — see account's `operationNames` map for the accepted pattern |
| `depguard` | bans `github.com/golang/protobuf`, `satori/go.uuid`, `gofrs/uuid` (pre-v5), `math/rand` in non-test files, `log` in non-main files |
| `forbidigo` | bans `fmt.Print*` and ad-hoc `slog.Default()`/`slog.New()` outside `pkgs/logger` — route all logging through `pkgs/logger` |
| `sloglint` | `no-global: all`, `context: scope` — no global loggers, pass context-scoped ones |
| `nolintlint` | any `//nolint:` needs an explanation AND names a specific linter (`require-explanation: true`, `require-specific: true`). Only `funlen`/`gocognit`/`golines` may skip the explanation (`allow-no-explanation`) |
| `_test.go` files | broadly waive ireturn/bodyclose/cyclop/dupl/errcheck/funlen/gocognit/goconst/gosec/noctx/wrapcheck — don't fight these in tests |

**Disabled — don't waste time appeasing them**: `nlreturn` ("too strict") and
`lll` (superseded by golines). If a linter output mentions either, something
is misconfigured in your local run, not a real gate.

## Banned-nolint rule

`//nolint:cyclop`, `//nolint:gocyclo`, `//nolint:gocognit`, `//nolint:funlen`
are banned by project convention (not CI-enforced — a human/agent convention).
Current count is 0; keep it that way. Verify:

```bash
grep -rn "nolint:cyclop\|nolint:gocyclo\|nolint:gocognit\|nolint:funlen" --include="*.go" .
```

When one of these linters fires, decompose — never re-suppress. Patterns
used in this repo:

- flat routing switch too complex → `map[routeKey]string` built via `sync.OnceValue`
- long validate-then-build function → extract `validateXInput`/`resolveXLocked` helpers
- big test function → `t.Helper()` sub-helpers

## synctest / require.Eventually rule

`time.Sleep` **inside** a `synctest.Test(t, func(t *testing.T){...})` bubble
is fine — the bubble has a fake clock that advances instantly. The banned
pattern is an *unbubbled* `time.Sleep` used to await async state outside a
bubble. Real Docker/loopback I/O can't run in a bubble (not durably
blocking), so those use `require.Eventually(t, condFn, timeout, tick, msg)`
instead.

```go
synctest.Test(t, func(t *testing.T) {
b := NewInMemoryBackend(t.Context(), "123456789012", "us-east-1")
created, _ := b.CreateCluster(...)
time.Sleep(clusterTransitionDelay + time.Millisecond) // fake clock inside bubble
// assert ACTIVE
})
```

(services/eks/async_lifecycle_test.go:35-58)

`mulint` (declared as a go.mod `tool`, invoked separately by `make lint` via
`go vet -vettool=...`, NOT a golangci-lint plugin) catches mutex misuse —
recursive locks, copied locks — relevant given the coarse-lock convention in
`pkgs-catalog.md`.

## What CI runs (predict failures before opening a PR)

`.github/workflows/ci.yml`: `ui-lint` → `lint` → `modernize` (`go fix -diff
./...`) → `govulncheck` → `codeql` → `unit-tests` (4-way sharded:
`-race -shuffle on -short -timeout 5m`, split by `awk "NR % 4 == chunk"` over
`go list ./...`) → `build` (static linux binary, tags `netgo osusergo
static_build`) → `integration-tests` (needs `build`; downloads the built
artifact, never builds inline, 4-way sharded by discovered `^func Test`
names, `-timeout 10m`) → `terraform-tests`.

Branch protection on `main`: 12 required contexts (lint, unit, e2e, ui-lint,
ui-test, integration, terraform, modernize, govulncheck, build, CodeFactor,
CodeQL), `enforce_admins=true`, no bypass. If your change doesn't pass
locally with `make lint && make test && make build-linux &&
make integration-test`, it will not pass CI either.
151 changes: 151 additions & 0 deletions .claude/skills/gopherstack-map/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
---
name: gopherstack-map
description: Navigate the gopherstack repo (161 AWS service emulators under services/, plus pkgs/, cli.go, test/, ui/) without re-discovering structure via Glob/Grep every session. Use whenever asked to find where a service is registered, what operations it supports, its routing style, its parity grade, which pkgs/ package to reuse, or generally "where is X" / "how does service Y work" / "map this service" for any gopherstack service. Trigger before opening a service directory cold, and run scripts/svcmap.sh <service> for a compact structural summary instead of manually listing+grepping files.
---

# gopherstack map

161 per-service dirs share a small set of shapes. Reading this table beats
re-deriving it with Glob/Grep.

## Directory taxonomy

| path | contents |
|---|---|
| `services/<svc>/` | one emulator: `handler.go` + `store.go` + op-family files + `PARITY.md` + generated `README.md` |
| `pkgs/` | 32 shared infra packages (table below) |
| `cmd/gendocs` | regenerates per-service READMEs + `.badges/*.svg` from PARITY.md (`make docs`) |
| `test/e2e/` | SDK-driven e2e |
| `test/integration/` | SDK-driven, Docker-container-backed — the real parity proof |
| `test/terraform/` | terraform-provider-aws acceptance-style |
| `ui/` | Svelte console source, `ui/src/routes/<service>/` |
| `dashboard/static/spa/` | built UI output (gitignored but `.keep`-protected, load-bearing) |
| `.beads/` | beads/Dolt issue tracker data |
| `.badges/` | 5 committed SVGs regenerated by `make docs` |
| `docs/` | hand-written narrative (architecture/, services/, docker.md, migration.md, quickstart.md) — distinct from generated per-service READMEs |
| root `parity.md` | 1773-line live audit punch-list/planning doc — NOT a per-service manifest |
| `services/_PARITY_TEMPLATE.md` | the PARITY.md schema |

Also present: `internal/`, `modules/`, `proto/`, `examples/`, `bench/`, `scripts/`,
`assets/`, `demo/`, `bin/` (build output).

## Entry points

- `main.go` — 5 lines, calls `Run()`.
- `cli.go` (~9160 lines): `Run()` at line 1747 (Kong CLI parsing, then service
wiring). `echo.New()` at 2110. `initializeServices` at 2628,
`initIndependentServices` at 2660 — this is where every provider is
constructed. Chaos middleware `registry.Use(chaos.Middleware(faultStore))`
at 7626; IAM enforcement middleware at 7639.
- Cross-service wiring (e.g. `wireTaggingGrafana` at 6992) happens in `Run()`
AFTER all providers exist. That's why a service needing a sibling backend
resolves it lazily on first request (see `cross_service.go`/`crossservice.go`
below), not at Init time.

## Where do I look for X

| question | answer |
|---|---|
| Is service X registered, and how? | `cli.go`, `initIndependentServices` (2660) — grep the service name |
| What ops does X support? | `GetSupportedOperations()` in `services/X/handler.go` |
| What's X's parity status? | `services/X/PARITY.md` frontmatter, `overall: A|B` field |
| What's X's wire shape for op Y? | `services/X/wire.go` — doc comment cites the SDK source line that confirms it |
| How does X convert domain↔wire? | `services/X/wire_convert.go` |
| Where does X validate + mutate state? | the family file, e.g. `workspaces.go`, not `handler_workspaces.go` |
| Where does X register its in-memory tables? | `services/X/store_setup.go`, `registerAllTables` |
| Does X support tagging? | `services/X/tags.go` + `handler_tags.go`, or absent |
| Does X reach into another service's backend? | `services/X/cross_service.go` or `crossservice.go` — a structurally-matched `siblingServices` interface |
| Does X have chaos-injectable async transitions? | `services/X/chaos_transitions.go` |
| Quick structural summary of X | run `scripts/svcmap.sh X` (below) |

## Service file-role table

Verified against grafana, networkmanager, account.

| file | role |
|---|---|
| `handler.go` | `Handler` struct, `NewHandler`, `service.Registerable` methods (`Name`/`GetSupportedOperations`/`Reset`/`RouteMatcher`/`MatchPriority`/`ExtractOperation`/`ExtractResource`), route dispatch, `Handler()` echo entrypoint, `handleError`/`classifyError`, path+query helpers |
| `handler_<family>.go` | HTTP handlers for one resource family: decode → call backend → marshal. Pure translation, no business logic |
| `<family>.go` (e.g. `workspaces.go`) | backend methods `(b *InMemoryBackend) CreateWorkspace(...)`: validate, lock, mutate state |
| `store.go` | `InMemoryBackend` struct, `NewInMemoryBackend`, `Reset`, ID generators, ARN builders |
| `store_setup.go` | `registerAllTables` — one `store.Register(b.registry, "name", store.New(keyFn))` + `AddIndex` per collection |
| `wire.go` | wire-shape DTO structs mirroring SDK field names/casing, doc-comment citing the SDK source |
| `wire_convert.go` | `toXWire`/`fromXWire` mappers |
| `errors.go` | sentinel errors, `apiError` struct, constructors (`notFoundError`/`conflictError`/`validationError`/`quotaError`) |
| `consts.go` | path-segment and JSON-key literals reused 3+ times (goconst-driven) |
| `provider.go` | `Provider` implementing `service.Provider` (Name, Init) — what `cli.go` registers |
| `persistence.go` | `backendSnapshot` struct + Snapshot/Restore |
| `tags.go` / `handler_tags.go` | TagResource/UntagResource/ListTagsForResource/TaggedResources |
| `cross_service.go` / `crossservice.go` | lazy sibling-service lookups |
| `chaos_transitions.go` | fault-injection hooks for async state-machine transitions |

Older services may instead have `interfaces.go` (a `StorageBackend` interface)
and a flat `operationHandlers` map instead of family-file backend methods.

## Three routing shapes

Detect by grepping `handler.go`:

| shape | example | detect | how it works |
|---|---|---|---|
| nested path-segment switch | grafana | `routeRequest(` in handler.go | `routeRequest` returns `(op, dispatchFunc)` from a switch on path segments |
| declarative route table | networkmanager | `routeTable()` in handler.go | `[]route{fn, op, method, pattern}` with `:Param` wildcard capture; one `<family>Routes()` per handler file, concatenated by `routeTable()` |
| fixed-path op map | account | `operationHandlers[` in handler.go | `POST /OperationName`; `operationNames` + `operationHandlers` are method-expression maps keyed by path |

## pkgs/ catalog (32 packages)

**Locking rule** (the one that matters): lock granularity follows INVARIANT
granularity, not data-structure granularity. Use one coarse
`lockmetrics.RWMutex` per service backend, `mu.Lock("OpName")` labelled for
metrics — AWS ops are cross-map transactions (FK validation + resource write
+ index update atomically; `Snapshot()` needs one consistent view).
`safemap.Map[K,V]` is ONLY for genuinely isolated single-map state (token
stores, caches, janitor-swept stores) — never backend resource maps, since
per-map locks risk torn cross-map state. Never scatter raw `sync.Mutex`.

| pkg | use for |
|---|---|
| arn | build AWS ARNs |
| awserr | shared sentinel errors |
| awsmeta | request-scoped AWS metadata |
| awstime | wire-format timestamps (`Epoch()` for epoch-seconds) |
| chaos | fault-injection middleware |
| collections | type-safe slice/map helpers |
| config | centralized AWS config |
| container | runtime-agnostic container layer |
| ctxval | type-safe context values |
| dns | embedded DNS server |
| docker | Docker integration |
| dynamoattr | DynamoDB attribute values |
| events | event system |
| handler | HTTP helpers (WriteJSON, operation-context keys) |
| httputils | body read/caching |
| inithooks | startup user-script hooks |
| lockmetrics | instrumented RWMutex |
| logger | project-wide slog wrapper — ALL logging goes here |
| page | generic `Page[T]` pagination + opaque tokens |
| persistence | pluggable snapshot/restore |
| portalloc | central port allocator |
| ptrconv | nil-safe pointer deref |
| safemap | isolated concurrency-safe map |
| sdkcheck | SDK op-surface completeness |
| service | registry/middleware, CloudTrail-capture chokepoint |
| store | generic keyed collection `Table[V]` |
| strs | case-fold string helpers |
| tags | concurrency-safe resource tag map |
| telemetry | observability observers |
| testleak | goroutine-leak detection for tests |
| version | build-time version info |
| worker | standard background-work primitive |

## scripts/svcmap.sh

`scripts/svcmap.sh <service>` prints a ~20-line structural summary: file
list with line counts, detected routing shape, op count, PARITY.md
`overall:` grade + audit date, which of persistence/tags/cross_service/
chaos_transitions files exist, and test files. Run it before reading a
service cold:

```bash
.claude/skills/gopherstack-map/scripts/svcmap.sh grafana
```
Loading
Loading