| service | codebuild | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_module | aws-sdk-go-v2/service/codebuild@v1.68.11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| last_audit_commit | 0627d5d3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| last_audit_date | 2026-07-25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| overall | A | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ops |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| families |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| items_still_open |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| gaps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| deferred |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| leaks |
|
Protocol: awsjson1.1 (single POST endpoint, X-Amz-Target: CodeBuild_20161006.<Op>).
Route matcher (RouteMatcher) is a simple X-Amz-Target prefix check — verified every
op in GetSupportedOperations() round-trips through doRequest's header-based dispatch
in the existing handler_test.go/codebuild_ops_test.go/aws_accuracy_test.go suites, not just
via Handler() direct calls that could bypass the matcher.
Timestamps (created, lastModified, startTime, endTime, etc.) are plain float64
Unix-seconds fields that marshal as bare JSON numbers — this is wire-compatible with the
real deserializer's case "created": ... jtv.(json.Number) -> smithytime.ParseEpochSeconds
path (confirmed by reading codebuild@v1.68.11/deserializers.go), even though the field
isn't typed via pkgs/awstime.Epoch. Not a bug; noted so a future auditor doesn't "fix" it.
Pagination: services/codebuild/pagination.go's paginateIDs applies nextToken/maxResults/
sortOrder uniformly across every List* op, using pkgs/page.New for the opaque-offset token
(matching the pattern already used by e.g. services/acm). defaultListPageSize = 100 matches
real AWS's documented page cap. ListProjects/ListFleets/ListReportGroups additionally
support sortBy (NAME|CREATED_TIME|LAST_MODIFIED_TIME) via dedicated
List*SortedBy(sortBy string) backend methods, since real AWS's request shape for exactly
these three ops includes a sortBy field (confirmed by field-diffing
api_op_ListProjects.go/api_op_ListFleets.go/api_op_ListReportGroups.go
against api_op_ListBuilds.go et al, which have no sortBy). ListBuildBatches(ForProject)/
ListReports(ForReportGroup) additionally support filter.status, matching real AWS's
BuildBatchFilter/ReportFilter request shapes (each a single optional status field).
TagResource / UntagResource / ListTagsForResource were gopherstack inventions, not real AWS
CodeBuild operations. Field-diffed against aws-sdk-go-v2/service/codebuild@v1.68.11: the
module directory has no api_op_TagResource.go, api_op_UntagResource.go, or
api_op_ListTagsForResource.go, and grepping every func (c *Client) ... across all
api_op_*.go files in the module yields exactly 59 operations — none of which are these three.
Real CodeBuild only exposes tagging inline via the tags field on CreateProject/
UpdateProject/CreateReportGroup/CreateFleet (cross-service ARN-based tag discovery is the
job of the separate resourcegroupstaggingapi service on real AWS, which CodeBuild does not
duplicate). Deleted tags.go (backend TagResource/UntagResource/ListTagsForResource
methods), handler_tags.go (the three op handlers), and tags_test.go (12 tests exercising the
invented API). Removed the three names from GetSupportedOperations()/dispatchTable() in
handler.go. TestHandler_GetSupportedOperations now asserts these three are absent, so a
future accidental reintroduction gets caught immediately. janitor_test.go's
TestJanitor_SweepCleansARNIndex (which used TagResource on an evicted build's ARN purely as
a convenient "does an ARN-based op see this as gone" probe) was rewritten to use BatchGetBuilds
instead — same assertion (no ghost row after eviction), real op.
-
Missing pagination wire shape on every List* operation (
services/codebuild/pagination.go,handler_projects.go,handler_builds.go,handler_build_batches.go,handler_reports.go,handler_fleets.go,handler_sandboxes.go). Every List* op previously accepted but silently ignorednextToken/sortBy/sortOrder/maxResults, always returning the full unpaginated result set withnextTokenalways omitted. A real client relying on the SDK paginator'sHasMorePages()(which checks the returnednextToken, not result-set size) would still terminate correctly, but a client testing "at least 100 items on this page then a token" load-testing/pagination-contract scenario, or a client usingsortOrder=DESCENDINGto see newest-first results, would silently get wrong data. Fixed by adding a sharedpaginateIDs(all []string, nextToken, sortOrder string, maxResults int32) (page.Page[string], error)helper (usingpkgs/page, matching the pattern inservices/acm) and wiring it into every List* handler.ListProjects/ListFleets/ListReportGroups(the three ops whose real request shape hassortBy) got newList*SortedBy(sortBy string)backend methods;ListFleets's default order was also corrected from ARN-string-ascending (an internal implementation artifact) to NAME-ascending, consistent withListProjects/ListReportGroupsand withsortBy=NAME. -
Projectmissing the top-levelsourceVersionfield (services/codebuild/models.go,projects.go,handler_projects.go). Real AWS'sProjectshape has asourceVersionfield distinct fromsecondarySourceVersions(confirmed viacodebuild@v1.68.11/types/types.go);CreateProjectInput/UpdateProjectInputalso carry it. Nothing threaded it through before — a client settingsourceVersiononCreateProjectwould silently have it dropped. Fixed by addingProject.SourceVersion,ProjectConfig.SourceVersion, and wiring it throughCreateProject/UpdateProject/applyProjectOptionalFields(update semantics: non-empty value overwrites, matching every other optional string field on this resource) and thecreateProjectInput/updateProjectInputwire structs. -
Webhookmissingstatus/statusMessage/manualCreation/lastModifiedSecret/secret/pullRequestBuildPolicy/scopeConfiguration(services/codebuild/models.go,webhooks.go,handler_webhooks.go). Field-diffed againstcodebuild@v1.68.11/types/types.go'sWebhookstruct. Since this emulator never performs a real GitHub/GitLab/Bitbucket round-trip,CreateWebhooknow synthesizes a terminalstatus: "ACTIVE"immediately (the state a client would eventually observe on real AWS after webhook provisioning completes) plus a generatedsecretandlastModifiedSecrettimestamp;manualCreation/scopeConfigurationare accepted onCreateWebhookand echoed back;pullRequestBuildPolicyis accepted on bothCreateWebhookandUpdateWebhook;UpdateWebhookalso gainedrotateSecret(regeneratessecret+ bumpslastModifiedSecretwhen true, leaves both untouched otherwise, matching real AWS'sUpdateWebhookInput.rotateSecretsemantics).
Covered by new table-driven tests: TestHandler_ListProjects_SortOrderDescending,
TestHandler_ListProjects_InvalidNextToken, TestHandler_ListProjects_SortByCreatedTime,
TestHandler_ListFleets_MaxResultsPagination, TestHandler_ListBuildBatches_FilterByStatus,
TestHandler_ListReports_FilterByStatus (pagination_test.go); TestHandler_Project_SourceVersion
(projects_test.go); TestHandler_CreateWebhook_ExtendedFields,
TestHandler_UpdateWebhook_RotateSecret (webhooks_test.go).
Prior-pass fixes (builds/build batches stuck IN_PROGRESS forever; Project.Webhook not mirrored
after CreateWebhook) remain in place and are covered by TestJanitor_AdvanceInProgressBuilds /
TestJanitor_AdvanceInProgressBuilds_LeavesTerminalBuildsAlone (janitor_test.go) and
TestHandler_Webhook_MirroredOnProject (webhooks_test.go).
Field-diffed Fleet/CreateFleetInput/UpdateFleetInput against
aws-sdk-go-v2/service/codebuild@v1.68.11/types/types.go and
awsAwsjson11_deserializeDocumentFleet directly (not against gopherstack's own
output, per parity-principles.md rule 2). Found and fixed a real, previously-unflagged
gap: Fleet had no id field at all (a real, separate field from name/arn on
types.Fleet), and CreateFleetInput/UpdateFleetInput's wire structs had no
overflowBehavior/imageId/fleetServiceRole members, so a real client setting any
of these had them silently dropped on create and had no way at all to change them
(or computeType/environmentType) after creation via UpdateFleet, which previously
only ever touched baseCapacity. Fixed by adding Fleet.ID/Fleet.ImageID, generating
a UUID id at CreateFleet time (mirroring how other resources in this service
generate IDs), and refactoring CreateFleet/UpdateFleet's backend signatures to take
CreateFleetOptions/UpdateFleetOptions structs (the growing flat-positional-parameter
lists were becoming unwieldy) wired through from new createFleetInput/
updateFleetInput JSON fields. UpdateFleet's "empty string leaves field unchanged"
semantics mirror the existing applyProjectOptionalFields convention for optional
string-field updates on this service.
Also found, NOT fixed in this pass: Fleet.ComputeConfiguration/ProxyConfiguration/
VpcConfig/ScalingConfiguration (all real fields on types.Fleet) remained entirely
unmodeled -- these are nested objects (attribute-based-compute vCPU/memory/disk specs,
subnet/security-group VPC config, scaling-type semantics) that would require real design
work, not a wire-shape passthrough fix. Documented as a new gaps: entry rather than
silently left unflagged like the id/overflowBehavior/imageId/fleetServiceRole gap was
before this pass. Closed in the second 2026-07-25 pass immediately below.
Covered by new tests: TestHandler_CreateFleet_ExtendedFields,
TestHandler_UpdateFleet_ExtendedFields (fleets_test.go).
Implemented ComputeConfiguration/ProxyConfiguration/VpcConfig/ScalingConfiguration
end to end, field-diffed against aws-sdk-go-v2/service/codebuild@v1.68.11's
types.ComputeConfiguration/types.ProxyConfiguration/types.VpcConfig/
types.FleetProxyRule/types.TargetTrackingScalingConfiguration/
types.ScalingConfigurationInput/types.ScalingConfigurationOutput directly (go doc
plus reading serializers.go's awsAwsjson11_serializeOpDocumentCreateFleetInput/
UpdateFleetInput for exact request field names, and deserializers.go's
awsAwsjson11_deserializeDocumentFleet for the response). Added new model types
(models.go): ComputeConfiguration, ProxyConfiguration, FleetProxyRule,
TargetTrackingScalingConfig; extended the existing (previously dead-field) ScalingConfiguration
type with TargetTrackingScalingConfigs. Fleet.VpcConfig deliberately reuses the
existing VpcConfig type already defined for Project -- the real
aws-sdk-go-v2/service/codebuild/types.VpcConfig used by both Fleet and Project has
the identical shape (securityGroupIds/subnets/vpcId), so a second, duplicate type
would have been pure duplication.
Wired through CreateFleetOptions/UpdateFleetOptions (fleets.go) -- extending the
existing options structs from the prior pass rather than inventing a parallel path, per
this pass's instructions -- and the createFleetInput/updateFleetInput JSON wire
structs (handler_fleets.go). UpdateFleet's nested-object semantics: a non-nil pointer
overwrites, nil (absent from the request) leaves the existing value unchanged, matching
real UpdateFleetInput's partial-update contract (distinct from the string fields' "empty
string leaves unchanged" convention, since a nested object has no equivalent "empty"
sentinel).
ScalingConfiguration.DesiredCapacity is response-only on real AWS (types. ScalingConfigurationOutput has it; types.ScalingConfigurationInput, the request shape,
does not) -- confirmed by diffing the two types separately in types/types.go. Since this
emulator does not model live auto-scaling telemetry, outputScalingConfiguration
(fleets.go) populates it with the fleet's baseCapacity on every Create/UpdateFleet
response, matching real AWS's own value immediately after a create/update, before any
scaling event has occurred -- not a fabricated number, the literal correct value for that
moment.
Disguised-stub pattern found and fixed while doing this: Fleet.ScalingConfiguration
already existed as a model field (with a real JSON tag) before this pass, but nothing
anywhere ever set it -- a stray leftover from an earlier partial attempt, matching the
"field exists, no write-sites" bug class documented in parity-principles.md. It is now
genuinely wired end to end.
Covered by a new table test, TestHandler_Fleet_NestedConfiguration (fleets_test.go,
cases: create_computeConfiguration, create_proxyConfiguration, create_vpcConfig,
create_scalingConfiguration_desiredCapacityMatchesBase,
update_overwrites_nested_configuration,
update_without_nested_configuration_leaves_it_unchanged).