Skip to main content
← Back to list
01Issue
BugShippedExtensionsPublicTeam
Assigneesstack72

Relationships

↔ sibling #3943↔ sibling #3944

#3936 budget type has no Budget argument, so it cannot create a budget

Opened by dr_evil · 10/25/2026· Shipped 10/25/2026

The @swamp/aws/budgets/budget type has no Budget global argument, so it cannot create a budget. AWS::Budgets::Budget lists Budget (a BudgetData object: BudgetType, TimeUnit, BudgetLimit, and so on) as its only required property. The type exposes only NotificationsWithSubscribers and ResourceTags, and the generated source defines no BudgetData schema at all.

Steps to reproduce

In a fresh repo with @swamp/aws/budgets 2026.10.24.1 pulled (budget type version 2026.10.23.1):

swamp behavior create @swamp/aws/budgets/budget monthly \
  --global-arg 'Budget={"BudgetType":"COST","TimeUnit":"MONTHLY","BudgetLimit":{"Amount":20,"Unit":"USD"}}'

Output:

Error: Unknown global argument(s) for type '@swamp/aws/budgets/budget': Budget. Valid arguments are: name, accessKeyId, secretAccessKey, sessionToken, region, NotificationsWithSubscribers, ResourceTags

Leaving Budget out, the definition validates (7/7), but there is then no way to give the budget amount, type or period, which Cloud Control requires to create the resource.

Expected

The type accepts a Budget argument matching the BudgetData definition in the AWS::Budgets::Budget schema (aws cloudformation describe-type --type RESOURCE --type-name AWS::Budgets::Budget), and create can make a budget.

Notes

  • Checked against the current main of swamp-club/swamp-extensions (model/aws/budgets/extensions/models/budget.ts, version 2026.10.23.1): GlobalArgsSchema has no Budget field. Also present in 2026.10.14.1.
  • The file is auto-generated (deno task generate:aws). The update method passes ["BudgetName", "NotificationsWithSubscribers"] as its property names, but no schema in the file defines BudgetName, which lives inside BudgetData. That suggests the generator read the nested BudgetData definition but dropped the top-level Budget property that wraps it. Possibly because the property has the same name as the resource; unconfirmed.
  • The sibling budgets-action type is not affected.
  • Earlier, a local copy of the type with a Budget field added validated and created a real budget through Cloud Control. BudgetLimit.Amount had to be a number, not a string.

Suggested fix

Have the AWS generator emit the top-level Budget property, and its BudgetData sub-schemas, for AWS::Budgets::Budget, then regenerate the type. If the cause is the property-named-like-the-resource case, other generated types with the same pattern may be missing a property too, so a generator-level check would be worth adding: every property in the CloudFormation schema's required list appears in the generated arguments.

Upstream repository: https://github.com/swamp-club/swamp-extensions

Environment

  • Extension: @swamp/aws/budgets@2026.10.24.1
  • swamp: 20261025.171252.0-sha.b6a26393
  • OS: darwin (aarch64)
  • Deno: 2.9.8
  • Shell: /bin/zsh
02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 9 MOREREVIEW+ 9 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

10/25/2026, 10:55:56 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack7210/25/2026, 9:35:51 PM
stack72 linked sibling of #394310/25/2026, 9:48:39 PM
stack72 linked sibling of #394410/25/2026, 9:50:45 PM
Editable. Press Enter to edit.

system commented 10/25/2026, 8:03:29 PM

Classified automatically when this issue was filed.

  • Source: Extensions

If you feel this classification is incorrect, add a ripple to tell us so.

stack72 commented 10/25/2026, 10:56:08 PM

Thanks @dr_evil for reporting this! We shipped: Fix three related AWS codegen defects in one change. #3936: properties the generator cannot type are dropped or mistyped, so resolve refs left unresolved by circular: ignore, keep untyped but valid shapes, flatten allOf, and fail generation (exit 2) when a required property is dropped. #3943: nested createOnly/readOnly pointers are collapsed to their last segment, so keep full paths, prune readOnly by full path, and filter nested create-only patch ops. #3944: nested primary identifiers are read from the top level, so read them from their nested path. Then regenerate all of AWS.. The fix has been merged and a release is on its way. We appreciate your contribution to swamp.

Sign in to post a ripple.