@intentius/chant-lexicon-aws 0.46.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/api/read-client.d.ts +10 -2
  2. package/dist/api/read-client.d.ts.map +1 -1
  3. package/dist/composites/agentcore-agent.d.ts +26 -1
  4. package/dist/composites/agentcore-agent.d.ts.map +1 -1
  5. package/dist/composites/bucket-deployment.d.ts +82 -0
  6. package/dist/composites/bucket-deployment.d.ts.map +1 -0
  7. package/dist/composites/dynamodb-table.d.ts +45 -0
  8. package/dist/composites/dynamodb-table.d.ts.map +1 -0
  9. package/dist/composites/ec2-instance-bundle.d.ts +61 -0
  10. package/dist/composites/ec2-instance-bundle.d.ts.map +1 -0
  11. package/dist/composites/ecr-repository.d.ts +49 -0
  12. package/dist/composites/ecr-repository.d.ts.map +1 -0
  13. package/dist/composites/fargate-service.d.ts +16 -0
  14. package/dist/composites/fargate-service.d.ts.map +1 -1
  15. package/dist/composites/index.d.ts +16 -2
  16. package/dist/composites/index.d.ts.map +1 -1
  17. package/dist/composites/monitoring-stack.d.ts +99 -0
  18. package/dist/composites/monitoring-stack.d.ts.map +1 -0
  19. package/dist/composites/nlb-service.d.ts +48 -0
  20. package/dist/composites/nlb-service.d.ts.map +1 -0
  21. package/dist/composites/step-functions-workflow.d.ts +36 -0
  22. package/dist/composites/step-functions-workflow.d.ts.map +1 -0
  23. package/dist/deep-observe.d.ts +45 -0
  24. package/dist/deep-observe.d.ts.map +1 -1
  25. package/dist/deep-topology.d.ts +104 -0
  26. package/dist/deep-topology.d.ts.map +1 -0
  27. package/dist/effect-receipt-row.d.ts +92 -0
  28. package/dist/effect-receipt-row.d.ts.map +1 -0
  29. package/dist/index.d.ts +6 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/integrity.json +7 -4
  32. package/dist/lint/audit-catalog.d.ts.map +1 -1
  33. package/dist/lint/post-synth/cf-refs.d.ts +17 -0
  34. package/dist/lint/post-synth/cf-refs.d.ts.map +1 -1
  35. package/dist/lint/post-synth/index.d.ts.map +1 -1
  36. package/dist/lint/post-synth/waw061.d.ts +19 -0
  37. package/dist/lint/post-synth/waw061.d.ts.map +1 -0
  38. package/dist/lint/post-synth/waw062.d.ts +19 -0
  39. package/dist/lint/post-synth/waw062.d.ts.map +1 -0
  40. package/dist/lint/post-synth/waw063.d.ts +35 -0
  41. package/dist/lint/post-synth/waw063.d.ts.map +1 -0
  42. package/dist/manifest.json +1 -1
  43. package/dist/okf/index.md +3 -0
  44. package/dist/okf/rules/WAW061.md +17 -0
  45. package/dist/okf/rules/WAW062.md +27 -0
  46. package/dist/okf/rules/WAW063.md +19 -0
  47. package/dist/okf/types/Action.md +1 -0
  48. package/dist/okf/types/AutoScalingGroup.md +1 -0
  49. package/dist/okf/types/Bucket.md +1 -0
  50. package/dist/okf/types/ECRRepository.md +1 -0
  51. package/dist/okf/types/Function.md +1 -0
  52. package/dist/okf/types/IamPolicy.md +1 -0
  53. package/dist/okf/types/LaunchTemplate.md +1 -0
  54. package/dist/okf/types/LoadBalancer.md +1 -0
  55. package/dist/okf/types/ManagedPolicy.md +2 -0
  56. package/dist/okf/types/Map.md +1 -0
  57. package/dist/okf/types/Role.md +2 -0
  58. package/dist/okf/types/SecurityGroup.md +1 -0
  59. package/dist/okf/types/StateMachine.md +4 -0
  60. package/dist/okf/types/Subnet.md +4 -0
  61. package/dist/okf/types/Table.md +1 -0
  62. package/dist/okf/types/Type.md +3 -0
  63. package/dist/okf/types/Vpc.md +1 -0
  64. package/dist/op/activities/index.d.ts +6 -0
  65. package/dist/op/activities/index.d.ts.map +1 -1
  66. package/dist/plugin.d.ts.map +1 -1
  67. package/dist/receipt-store.d.ts +109 -0
  68. package/dist/receipt-store.d.ts.map +1 -0
  69. package/dist/rules/cf-refs.ts +40 -0
  70. package/dist/rules/waw061.ts +67 -0
  71. package/dist/rules/waw062.ts +0 -0
  72. package/dist/rules/waw063.ts +0 -0
  73. package/dist/serializer.d.ts.map +1 -1
  74. package/dist/skills/chant-aws-carve-terraform.md +26 -23
  75. package/package.json +3 -3
  76. package/src/api/read-client.test.ts +9 -0
  77. package/src/api/read-client.ts +15 -2
  78. package/src/composites/agentcore-agent.ts +35 -13
  79. package/src/composites/bucket-deployment.test.ts +84 -0
  80. package/src/composites/bucket-deployment.ts +153 -0
  81. package/src/composites/composites.test.ts +325 -0
  82. package/src/composites/dynamodb-table.test.ts +154 -0
  83. package/src/composites/dynamodb-table.ts +124 -0
  84. package/src/composites/ec2-instance-bundle.ts +134 -0
  85. package/src/composites/ecr-repository.test.ts +118 -0
  86. package/src/composites/ecr-repository.ts +117 -0
  87. package/src/composites/fargate-service.ts +19 -3
  88. package/src/composites/index.ts +21 -2
  89. package/src/composites/monitoring-stack.test.ts +130 -0
  90. package/src/composites/monitoring-stack.ts +164 -0
  91. package/src/composites/nlb-service.ts +117 -0
  92. package/src/composites/step-functions-workflow.ts +127 -0
  93. package/src/deep-observe.test.ts +201 -1
  94. package/src/deep-observe.ts +204 -0
  95. package/src/deep-topology.test.ts +392 -0
  96. package/src/deep-topology.ts +237 -0
  97. package/src/effect-receipt-row.test.ts +164 -0
  98. package/src/effect-receipt-row.ts +147 -0
  99. package/src/index.ts +28 -7
  100. package/src/lint/audit-catalog.ts +6 -0
  101. package/src/lint/post-synth/cf-refs.ts +40 -0
  102. package/src/lint/post-synth/index.ts +6 -0
  103. package/src/lint/post-synth/waw061.test.ts +99 -0
  104. package/src/lint/post-synth/waw061.ts +67 -0
  105. package/src/lint/post-synth/waw062.test.ts +109 -0
  106. package/src/lint/post-synth/waw062.ts +0 -0
  107. package/src/lint/post-synth/waw063.test.ts +220 -0
  108. package/src/lint/post-synth/waw063.ts +0 -0
  109. package/src/op/activities/index.ts +15 -0
  110. package/src/plugin.ts +41 -10
  111. package/src/receipt-store.test.ts +204 -0
  112. package/src/receipt-store.ts +315 -0
  113. package/src/serializer.ts +105 -2
  114. package/src/skills/chant-aws-carve-terraform.md +26 -23
@@ -0,0 +1,36 @@
1
+ import { type Value } from "@intentius/chant";
2
+ import { Role, Role_Policy, LogGroup, StateMachine } from "../generated/index.js";
3
+ export interface StepFunctionsWorkflowProps {
4
+ /** `Value<string>`: a name is routinely built with `Sub`/`Ref` (#1366). */
5
+ name?: Value<string>;
6
+ /**
7
+ * ASL state machine definition, authored as a plain object. Passed to
8
+ * CloudFormation's `Definition` property rather than `DefinitionString`:
9
+ * CFN accepts the definition as a native JSON value (verified against
10
+ * Floci — both forms round-trip), so a task's `Resource` can carry a
11
+ * `Ref`/`Fn::GetAtt` intrinsic — e.g. `Resource: someFunc.Arn` — directly,
12
+ * with no `Fn::Sub` string templating needed to splice ARNs into a JSON
13
+ * string. Same `Value<T>`-over-string-building bias as #1366, one level up.
14
+ */
15
+ definition: Record<string, unknown>;
16
+ /** ARNs of the Lambda functions this workflow's tasks invoke; grants `lambda:InvokeFunction` on each. */
17
+ lambdaFunctionArns?: Value<string>[];
18
+ stateMachineType?: "STANDARD" | "EXPRESS";
19
+ /** CloudWatch Logs retention for the auto-created log group. Default 14. */
20
+ logRetentionDays?: number;
21
+ /** `LoggingConfiguration` level. Default `"ALL"` — set `"OFF"` to skip execution logging. */
22
+ loggingLevel?: "ALL" | "ERROR" | "FATAL" | "OFF";
23
+ ManagedPolicyArns?: string[];
24
+ Policies?: InstanceType<typeof Role_Policy>[];
25
+ defaults?: {
26
+ role?: Partial<ConstructorParameters<typeof Role>[0]>;
27
+ logGroup?: Partial<ConstructorParameters<typeof LogGroup>[0]>;
28
+ stateMachine?: Partial<ConstructorParameters<typeof StateMachine>[0]>;
29
+ };
30
+ }
31
+ export declare const StepFunctionsWorkflow: import("@intentius/chant").CompositeDefinition<StepFunctionsWorkflowProps, {
32
+ role: import("@intentius/chant").Declarable & Record<string, string>;
33
+ logGroup: import("@intentius/chant").Declarable & Record<string, string>;
34
+ stateMachine: import("@intentius/chant").Declarable & Record<string, string>;
35
+ }>;
36
+ //# sourceMappingURL=step-functions-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-functions-workflow.d.ts","sourceRoot":"","sources":["../../src/composites/step-functions-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,EAIb,MAAM,cAAc,CAAC;AAuCtB,MAAM,WAAW,0BAA0B;IACzC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB;;;;;;;;OAQG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,yGAAyG;IACzG,kBAAkB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC1C,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,YAAY,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACvE,CAAC;CACH;AAED,eAAO,MAAM,qBAAqB;;;;EAiDP,CAAC"}
@@ -74,6 +74,51 @@ export declare const DEEP_SOURCES: Record<string, DeepSource>;
74
74
  * cannot drift apart — the shape of bug #1280 is about.
75
75
  */
76
76
  export declare const DEEP_READABLE_TYPES: ReadonlySet<string>;
77
+ /**
78
+ * A child type this reader enumerates under one declared parent (#1015's
79
+ * out-of-band case) — the console-added SNS subscription or inline role
80
+ * policy that no property diff can see, because it is not a property of
81
+ * anything declared: it is a whole resource CloudFormation never made.
82
+ *
83
+ * Cloud Control's `ListResources` takes the parent as a `ResourceModel`
84
+ * scope, which is what `model` builds from the physical id the stack read
85
+ * already resolved. Every listed child is then sorted into declared (it is
86
+ * some stack resource's physical id, or some declared entity's spelled
87
+ * identity) or out-of-band; the out-of-band ones ride into the observation
88
+ * as live resources nobody declared, which the deep diff reports as
89
+ * undeclared entities.
90
+ */
91
+ export interface DeepChildSource {
92
+ /** The child's CloudFormation type — what `ListResources` is asked for. */
93
+ childType: string;
94
+ /** The `ResourceModel` scoping the listing to one parent. */
95
+ model: (parentPhysicalId: string) => Record<string, unknown>;
96
+ /**
97
+ * Legacy declared forms of the same live child. `AWS::IAM::Policy` attached
98
+ * to a role creates the same inline policy `AWS::IAM::RolePolicy` lists, but
99
+ * under its own physical id — the policy name, which is the second part of
100
+ * the RolePolicy identifier. Without this leg every legacy inline policy
101
+ * reads as out-of-band on a stack that declared it.
102
+ */
103
+ declaredVia?: Array<{
104
+ type: string;
105
+ /** The part of the child identifier that carries that type's physical id. */
106
+ part: (identifier: string) => string | undefined;
107
+ }>;
108
+ }
109
+ /**
110
+ * Parent type → the child types worth listing under it. Scoped like
111
+ * {@link DEEP_SOURCES}: the high-signal cases first — the issue's own
112
+ * examples — and widened per type, not by wildcard. A child type Cloud
113
+ * Control cannot list parent-scoped does not belong here.
114
+ */
115
+ export declare const DEEP_CHILD_SOURCES: Record<string, readonly DeepChildSource[]>;
116
+ /**
117
+ * The name an out-of-band child reports under. There is no chant entity name
118
+ * to use — nobody declared it — so the name has to carry the finding on its
119
+ * own: what kind of thing, and which one.
120
+ */
121
+ export declare function outOfBandChildName(childType: string, identifier: string): string;
77
122
  /**
78
123
  * `describe-security-groups` -> the `AWS::EC2::SecurityGroup` resource model.
79
124
  *
@@ -1 +1 @@
1
- {"version":3,"file":"deep-observe.d.ts","sourceRoot":"","sources":["../src/deep-observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAGV,sBAAsB,EACtB,qBAAqB,EAItB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAQ3B;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE,GACxB;IACE,GAAG,EAAE,KAAK,CAAC;IACX,wDAAwD;IACxD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpE,CAAC;AAEN,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAenD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAsC,CAAC;AAE3F;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe1F;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAkBlD,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBxE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAEnE,CAAC;AAWF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAU9E;AA6BD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,sBAmEvC,CAAC;AAMF,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAmED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAI/E;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;kDAG8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sGAAsG;IACtG,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAoIhC"}
1
+ {"version":3,"file":"deep-observe.d.ts","sourceRoot":"","sources":["../src/deep-observe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Deep-read sources for the EC2 topology types (#1269).
3
+ *
4
+ * chant's distinguishing answers are folds over topology: `internetFacing`
5
+ * resolves subnet -> route table -> internet gateway, `effectiveIngress`
6
+ * resolves rules across attached security groups, and the default-VPC
7
+ * classification (`defaults.ts`) reads the provider's own markers. The inputs
8
+ * to all of them are the types this file covers — with only the original four
9
+ * kinds readable, a deep snapshot of an EC2 estate carried almost no
10
+ * properties, and a snapshot-backed query could answer identity questions but
11
+ * not a single fold question.
12
+ *
13
+ * Two sources, chosen per type:
14
+ *
15
+ * - The container types (VPC, subnet, route table, internet gateway) read
16
+ * through the EC2 describes. The fold facts live there and nowhere else:
17
+ * `IsDefault`, `DefaultForAz` and a subnet's live `MapPublicIpOnLaunch` are
18
+ * not part of the CloudFormation resource model, so Cloud Control cannot
19
+ * report them. The describes are also bulk (one call per type for the whole
20
+ * stack) and are implemented by the emulators that do not serve Cloud
21
+ * Control's `GetResource`.
22
+ *
23
+ * - The join types (route, association, gateway attachment) and the two whose
24
+ * describes do not fit a flat bulk join (instance rows nest inside
25
+ * reservations; launch-template data lives in a separate versions call) read
26
+ * through Cloud Control, which returns their model in the declared side's
27
+ * own shape.
28
+ *
29
+ * Each type carries its normalization entries alongside (#1269's note: adding
30
+ * a type without them trades a hole for a false positive, which is worse).
31
+ * They are merged into the tables in `deep-observe.ts`.
32
+ */
33
+ import type { DeepSource } from "./deep-observe.js";
34
+ /**
35
+ * `describe-vpcs` -> the `AWS::EC2::VPC` resource model, plus `IsDefault`.
36
+ *
37
+ * `IsDefault` is the provider's own marker for the VPC nobody wrote — the fact
38
+ * the default classification reads — and it exists only on this surface.
39
+ * Carried even though the model does not name it; the diff subtracts it as a
40
+ * service default (`false`, gated on source silence) so a CloudFormation-made
41
+ * VPC does not report it as undeclared drift.
42
+ */
43
+ export declare function vpcToModel(row: Record<string, unknown>): Record<string, unknown>;
44
+ /**
45
+ * `describe-subnets` -> the `AWS::EC2::Subnet` resource model, plus
46
+ * `DefaultForAz`.
47
+ *
48
+ * `MapPublicIpOnLaunch` is half of `internetFacing`; `DefaultForAz` is the
49
+ * provider's default-subnet marker, off the model for the same reason as a
50
+ * VPC's `IsDefault` and handled the same way.
51
+ */
52
+ export declare function subnetToModel(row: Record<string, unknown>): Record<string, unknown>;
53
+ /**
54
+ * `describe-route-tables` -> the `AWS::EC2::RouteTable` resource model.
55
+ *
56
+ * The row also carries `Routes` and `Associations`, and this mapping drops
57
+ * them on purpose: a template declares each route as its own
58
+ * `AWS::EC2::Route` and each association as its own
59
+ * `AWS::EC2::SubnetRouteTableAssociation`, both covered below, so carrying
60
+ * them here would report every declared route twice — once as an undeclared
61
+ * array on the table and once through its own resource.
62
+ */
63
+ export declare function routeTableToModel(row: Record<string, unknown>): Record<string, unknown>;
64
+ /** `describe-internet-gateways` -> the `AWS::EC2::InternetGateway` model, which is tags and nothing else. */
65
+ export declare function internetGatewayToModel(row: Record<string, unknown>): Record<string, unknown>;
66
+ /**
67
+ * The topology types' entries for `DEEP_SOURCES`.
68
+ *
69
+ * The routing-chain joins are addressed by their physical id — for a
70
+ * registry-backed type CloudFormation's physical id *is* the Cloud Control
71
+ * identifier (`rtb-…|0.0.0.0/0` for a route) — so Cloud Control's
72
+ * one-get-per-resource shape fits them exactly and returns the declared
73
+ * model's own field names.
74
+ */
75
+ export declare const EC2_TOPOLOGY_SOURCES: Record<string, DeepSource>;
76
+ /**
77
+ * Service defaults for the topology types, merged into
78
+ * `AWS_SERVICE_DEFAULTS`. Subtracted on the live side only where source never
79
+ * declared the property — which is how the fold facts (`IsDefault`,
80
+ * `DefaultForAz`, a live `MapPublicIpOnLaunch`) stay in the snapshot for a
81
+ * query to read while never surfacing as drift on a resource CloudFormation
82
+ * itself created.
83
+ */
84
+ export declare const EC2_TOPOLOGY_SERVICE_DEFAULTS: Record<string, Record<string, unknown>>;
85
+ /**
86
+ * Values the service picks when the template does not supply one, merged into
87
+ * `AWS_GENERATED_NAMES`. A subnet that names no availability zone gets one
88
+ * assigned — a different one is real placement drift only when the template
89
+ * had an opinion, which is exactly the counterpart gate.
90
+ */
91
+ export declare const EC2_TOPOLOGY_GENERATED_NAMES: Record<string, ReadonlySet<string>>;
92
+ /**
93
+ * Declared properties a type's source cannot see (#1269).
94
+ *
95
+ * `describe-vpcs` does not return the DNS attributes — they live behind
96
+ * `describe-vpc-attribute` — and neither describe returns the IPAM inputs,
97
+ * which are consumed at creation. A declared value for one of these has
98
+ * nothing live to stand against, so the diff would report `value -> <absent>`
99
+ * on every clean apply: a blind spot rendered as drift. Pruned on the
100
+ * declared side, and only where the live tree is silent, so a source that
101
+ * does report the field (Cloud Control, some day) is still compared.
102
+ */
103
+ export declare const AWS_DEEP_BLIND_SPOTS: Record<string, ReadonlySet<string>>;
104
+ //# sourceMappingURL=deep-topology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-topology.d.ts","sourceRoot":"","sources":["../src/deep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAShF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMvF;AAED,6GAA6G;AAC7G,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK5F;AAYD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA2C3D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBjF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAG5E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAcpE,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * The aws effect-receipt materialization row (#1835, epic #1703): an effect
3
+ * receipt stored as an `AWS::SSM::Parameter`, plain `String`, at
4
+ * `/chant-receipts/<stack>/<env>/<effect>`.
5
+ *
6
+ * Core's `EffectReceipt` factory (#1831) declares a receipt under the `chant`
7
+ * pseudo-lexicon, which no serializer claims — the designed shape until a
8
+ * lexicon materializes it. This module is that materialization for aws: the
9
+ * {@link EffectReceipt} factory here produces the same declaration shape but
10
+ * under `lexicon: "aws"`, so the build partitions it to the aws serializer,
11
+ * #1832's write-exclusion seam withholds it from the apply-bound entity set,
12
+ * and the serializer renders it for visibility through
13
+ * `SerializeContext.receipts` (see ./serializer.ts).
14
+ *
15
+ * Path identity (epic decision 4): the parameter name derives from the SAME
16
+ * ownership-block fields that stamp markers — `ownership.stack` and an
17
+ * explicit `ownership.env` — plus the receipt's `effect`. One derivation,
18
+ * {@link receiptParameterName}, shared by the serializer (the rendered row),
19
+ * the receipt store (../receipt-store.ts — what `receiptRead`/`receiptWrite`
20
+ * actually touch), and the observation leg (plan's live read). No env, no
21
+ * path: the callers error rather than guessing a segment.
22
+ *
23
+ * Plain store (epic decision 7, #1833's COR023): the parameter type is pinned
24
+ * to `String` at the source — the factory does not take a type, and the
25
+ * declared `props.Type` is the literal `"String"`. A receipt value is a
26
+ * witness (an existence marker or a `sha256:` digest), never a secret; a
27
+ * `SecureString` invites masking and rotation semantics that defeat the
28
+ * observe-and-compare loop, and the lint guard fails it.
29
+ */
30
+ import { type Declarable } from "@intentius/chant/declarable";
31
+ import { EFFECT_RECEIPT_MARKER, type EffectReceiptFlavor, type EffectReceiptOptions } from "@intentius/chant/effect-receipt";
32
+ /** The entityType of the aws materialization row — the real resource kind the
33
+ * receipt is stored as, which is what lint's plain-store guard checks. */
34
+ export declare const AWS_EFFECT_RECEIPT_ENTITY_TYPE = "AWS::SSM::Parameter";
35
+ /** Template-level `Metadata` key the serializer renders receipt rows under.
36
+ * Beside `chant:ownership` (./ownership.ts) and like it deliberately outside
37
+ * `Resources` — the applier writes from `Resources`, and a receipt must never
38
+ * enter the apply-bound document (#1832; the `effect()` step is the sole
39
+ * writer, epic decision 3). */
40
+ export declare const EFFECT_RECEIPTS_METADATA_KEY = "chant:effect-receipts";
41
+ /** Every receipt parameter lives under this prefix, so read-only IAM can be
42
+ * scoped to `arn:…:parameter/chant-receipts/*` and nothing else. */
43
+ export declare const RECEIPT_PATH_PREFIX = "/chant-receipts";
44
+ /**
45
+ * The rendered `Value` of a hash-flavor receipt that still carries reference
46
+ * inputs at synthesis. References resolve at plan and at run, never at
47
+ * synthesis (epic decision 5) — so the row carries this note instead of a
48
+ * digest hashed over placeholders.
49
+ */
50
+ export declare const RECEIPT_UNRESOLVED_VALUE_NOTE = "unresolved at synthesis \u2014 reference inputs; the expectation resolves at plan and at run (chant #1703, decision 5)";
51
+ /**
52
+ * The SSM parameter name of one effect's receipt:
53
+ * `/chant-receipts/<stack>/<env>/<effect>`, from the resolved ownership
54
+ * marker fields (epic decision 4). The single source of the path identity —
55
+ * the serializer's rendered row, the receipt store's reads and writes, and
56
+ * the observation leg all call this.
57
+ */
58
+ export declare function receiptParameterName(stack: string, env: string, effect: string): string;
59
+ /**
60
+ * An aws-materialized effect receipt: core's declaration shape (so
61
+ * `isEffectReceipt`, `effect(...)`, lint, and the plan engine all recognize it
62
+ * through the marker), under the aws lexicon and the real resource kind, with
63
+ * the store variant pinned plain.
64
+ */
65
+ export interface AwsEffectReceiptDeclaration extends Declarable {
66
+ readonly [EFFECT_RECEIPT_MARKER]: true;
67
+ readonly lexicon: "aws";
68
+ readonly entityType: typeof AWS_EFFECT_RECEIPT_ENTITY_TYPE;
69
+ /** The receipt's own name (the export-level identity of the witness). */
70
+ readonly name: string;
71
+ /** The effect this receipt witnesses — the path's final segment. */
72
+ readonly effect: string;
73
+ /** How the receipt is compared: mere presence, or a digest of the inputs. */
74
+ readonly flavor: EffectReceiptFlavor;
75
+ /** The effect's inputs as recorded at synthesis (references as placeholders). */
76
+ readonly inputs: Readonly<Record<string, unknown>>;
77
+ /** The declared parameter variant — pinned `String` at the source, which is
78
+ * the concrete half of #1833's plain-store guard. */
79
+ readonly props: {
80
+ readonly Type: "String";
81
+ };
82
+ }
83
+ /**
84
+ * Declare an aws-materialized effect receipt. Same signature and semantics as
85
+ * core's `EffectReceipt` (#1831) — the options are validated and frozen by the
86
+ * core factory — but the declaration lands in the aws partition, so the aws
87
+ * serializer renders the `AWS::SSM::Parameter` row and the receipt store
88
+ * (../receipt-store.ts) is its writer. Pass the returned const straight to the
89
+ * `effect(...)` op step.
90
+ */
91
+ export declare function EffectReceipt(name: string, options: EffectReceiptOptions): AwsEffectReceiptDeclaration;
92
+ //# sourceMappingURL=effect-receipt-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-receipt-row.d.ts","sourceRoot":"","sources":["../src/effect-receipt-row.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAEL,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,iCAAiC,CAAC;AAEzC;0EAC0E;AAC1E,eAAO,MAAM,8BAA8B,wBAAwB,CAAC;AAEpE;;;;+BAI+B;AAC/B,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AAEpE;oEACoE;AACpE,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,2HAC2E,CAAC;AAkBtH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,UAAU;IAC7D,QAAQ,CAAC,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,8BAA8B,CAAC;IAC3D,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD;yDACqD;IACrD,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,2BAA2B,CA0BtG"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,10 @@ export { defaultTags, isDefaultTags, DEFAULT_TAGS_MARKER } from "./default-tags.
3
3
  export type { DefaultTags, TagEntry } from "./default-tags.js";
4
4
  export { templateTransform, isTemplateTransform, TEMPLATE_TRANSFORM_MARKER } from "./template-transform.js";
5
5
  export type { TemplateTransform } from "./template-transform.js";
6
+ export { EffectReceipt, receiptParameterName, AWS_EFFECT_RECEIPT_ENTITY_TYPE, EFFECT_RECEIPTS_METADATA_KEY, RECEIPT_PATH_PREFIX, RECEIPT_UNRESOLVED_VALUE_NOTE, } from "./effect-receipt-row.js";
7
+ export type { AwsEffectReceiptDeclaration } from "./effect-receipt-row.js";
8
+ export { awsReceiptStore, observeReceiptRows, ssmGetParameter, ssmPutParameter } from "./receipt-store.js";
9
+ export type { AwsReceiptStoreOptions, ReceiptRowObservation } from "./receipt-store.js";
6
10
  export { awsSerializer } from "./serializer.js";
7
11
  export { nestedStack, isNestedStackInstance, NestedStackOutputRef, isNestedStackOutputRef, NESTED_STACK_MARKER } from "./nested-stack.js";
8
12
  export type { NestedStackOptions, NestedStackInstance } from "./nested-stack.js";
@@ -24,8 +28,8 @@ export type { CFNSchema, SchemaProperty, SchemaDefinition } from "./spec/fetch.j
24
28
  export { parseCFNSchema, cfnShortName, cfnServiceName } from "./spec/parse.js";
25
29
  export type { SchemaParseResult, ParsedResource, ParsedProperty, ParsedAttribute, ParsedPropertyType, ParsedEnum, PropertyConstraints } from "./spec/parse.js";
26
30
  export { S3Actions, LambdaActions, DynamoDBActions, SQSActions, SNSActions, IAMActions, ECRActions, LogsActions, ECSActions } from "./actions/index.js";
27
- export { LambdaFunction, LambdaNode, LambdaPython, NodeLambda, PythonLambda, LambdaApi, LambdaScheduled, ScheduledLambda, LambdaSqs, LambdaEventBridge, LambdaDynamoDB, LambdaS3, LambdaSns, VpcDefault, FargateAlb, AlbShared, FargateService, RdsInstance, RdsPostgres, EfsWithAccessPoint, Ec2InstanceRole, MinimalVpc, EksCluster, SolrFargateService, MicrovmApp, MICROVM_LIMITS, AgentCoreAgent, agentCoreDefaultEndpointArn, OrganizationRoot, GovernanceFoundation, RegionRestriction, OrganizationTrail, } from "./composites/index.js";
28
- export type { LambdaFunctionProps, LambdaApiProps, ScheduledLambdaProps, LambdaSqsProps, LambdaEventBridgeProps, LambdaDynamoDBProps, LambdaS3Props, LambdaSnsProps, VpcDefaultProps, FargateAlbProps, AlbSharedProps, FargateServiceProps, RdsInstanceProps, RdsPostgresProps, EfsWithAccessPointProps, Ec2InstanceRoleProps, MinimalVpcProps, EksClusterProps, SolrFargateServiceProps, MicrovmAppProps, MicrovmAppResult, MicrovmAppBuildConnectorProps, MicrovmMemoryMiB, AgentCoreAgentProps, AgentCoreAgentResult, OrganizationRootProps, GovernanceFoundationProps, RegionRestrictionProps, OrganizationTrailProps, } from "./composites/index.js";
31
+ export { LambdaFunction, LambdaNode, LambdaPython, NodeLambda, PythonLambda, LambdaApi, LambdaScheduled, ScheduledLambda, LambdaSqs, LambdaEventBridge, LambdaDynamoDB, DynamoDBTable, EcrRepository, LambdaS3, LambdaSns, VpcDefault, FargateAlb, AlbShared, FargateService, FARGATE_SERVICE_LIMITS, NlbService, RdsInstance, RdsPostgres, EfsWithAccessPoint, Ec2InstanceRole, Ec2InstanceBundle, MinimalVpc, EksCluster, SolrFargateService, MicrovmApp, MICROVM_LIMITS, AgentCoreAgent, agentCoreDefaultEndpointArn, AGENTCORE_LIMITS, OrganizationRoot, GovernanceFoundation, RegionRestriction, OrganizationTrail, StepFunctionsWorkflow, MonitoringStack, BucketDeployment, } from "./composites/index.js";
32
+ export type { LambdaFunctionProps, LambdaApiProps, ScheduledLambdaProps, LambdaSqsProps, LambdaEventBridgeProps, LambdaDynamoDBProps, DynamoDBTableProps, DynamoDBKey, DynamoDBCapacity, DynamoDBGlobalSecondaryIndex, EcrRepositoryProps, EcrLifecycleRule, EcrEncryption, LambdaS3Props, LambdaSnsProps, VpcDefaultProps, FargateAlbProps, AlbSharedProps, FargateServiceProps, NlbServiceProps, RdsInstanceProps, RdsPostgresProps, EfsWithAccessPointProps, Ec2InstanceRoleProps, Ec2InstanceBundleProps, Ec2InstanceBundleIngressRule, MinimalVpcProps, EksClusterProps, SolrFargateServiceProps, MicrovmAppProps, MicrovmAppResult, MicrovmAppBuildConnectorProps, MicrovmMemoryMiB, AgentCoreAgentProps, AgentCoreAgentResult, OrganizationRootProps, GovernanceFoundationProps, RegionRestrictionProps, OrganizationTrailProps, StepFunctionsWorkflowProps, MonitoringStackProps, MonitoringMetricSpec, BucketDeploymentProps, BucketDeploymentResult, } from "./composites/index.js";
29
33
  export { generate, writeGeneratedFiles } from "./codegen/generate.js";
30
34
  export { packageLexicon } from "./codegen/package.js";
31
35
  export type { PackageOptions, PackageResult } from "./codegen/package.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "algorithm": "sha256",
3
3
  "artifacts": {
4
- "manifest.json": "df6e137cd4b191fed64b7a1f64d9478f0ff8c0a997dcee3a52ee3156e94d8911",
4
+ "manifest.json": "73f13702a63ae229fbc2ca77dc23d1fb98a22f2a7a101e8ddf4ec66749527440",
5
5
  "meta.json": "2e4cae67cbc2eb2962c3dd0aa57008ae96fb725dd0118af7b04b2b44eab7722a",
6
6
  "types/index.d.ts": "6d6b37bd14a9b40fb3ff5c66e1cb49be1ae1032de47a4e167cf5f411c943b7f5",
7
7
  "rules/hardcoded-region.ts": "5a0eaf7ab391231fe6cd51426ece29539cb4b36f31c8dd060956638fed55722a",
8
8
  "rules/iam-wildcard.ts": "135d7217d278fef50939e605c5da32603ba35674b8c4b5c4d66a06c77903e945",
9
9
  "rules/s3-encryption.ts": "c4f9f8aa8dc382ed98c7b04e820a600590cc75335a8db2e087cbfbfe4003d09e",
10
- "rules/cf-refs.ts": "ec83a98348c9ff418230523bea1de1a08bb6e6c72bbb255ab9bca57191ff5fef",
10
+ "rules/cf-refs.ts": "3ca38a822b75db5b6370a5507f6a1c088e5419c9f8f5a3c9631468064842ba12",
11
11
  "rules/cor020.ts": "915bbb4c083c7b3b84b93e8e891b5ffffe5a138fdccda32ecfdda91b8685798c",
12
12
  "rules/ext001.ts": "f8703f37a50ab23d0ecaef539c0215a71269d420fa5e09a3d0454b18b7350b34",
13
13
  "rules/waw010.ts": "41c58aaedb8f9fe266f4b40f1a076f762796427fdf9b317b8a4a50c713e45571",
@@ -60,9 +60,12 @@
60
60
  "rules/waw058.ts": "fbcfde64bbf81abe919f4e60a7e283a1b2ff30454b2c1cec2e0e099e7ad187e6",
61
61
  "rules/waw059.ts": "abaa8b31e5e50837be8d8ebe124b6e2156e0bbb8699e93e60eb63f623db37f24",
62
62
  "rules/waw060.ts": "0fd439ba658b44ae16454bc850948d97ebf81739ff5ef0a46de69fcc0c4ac705",
63
+ "rules/waw061.ts": "5e25d1cd07c5ff0c918d84995cf37a8fa22294242de6b421c1eef37f4fb6521d",
64
+ "rules/waw062.ts": "8051ac5cbc3e53fc1e664bb8e6ffd54a75fac0b6e9e802bd0d244dfec59d82a0",
65
+ "rules/waw063.ts": "c64f86e7cea5363c42d6aa59c06c4343b7c6cad20aeb9fbf4fec69de5e63ee87",
63
66
  "skills/chant-aws.md": "4d65eb160e001f2af42eb7c622a5b498c2fd1f5afbd6c8155615c010fb265c63",
64
67
  "skills/chant-aws-eks.md": "8789255709ff004ad0a875fd5999edcdc66fc6e33d710db058d9f42703bcfdfe",
65
- "skills/chant-aws-carve-terraform.md": "52dc7a8a10156d236266cc8dbf75614fabb6e2fa4caf31c13cca348e167a58b5"
68
+ "skills/chant-aws-carve-terraform.md": "0ae4376590db47979be144d3ac6cdcfd56c9640d0536421aacf7330459d38e52"
66
69
  },
67
- "composite": "6784c3bcfe687d1f0736330b975673c4a8bd900227234e864329fc7863cd521b"
70
+ "composite": "0863289514a6e704688b98dd03fd728b10c1763269f46a0591689f19bc8f9e24"
68
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAkB,MAAM,gCAAgC,CAAC;AAQ1F,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA0DpD,CAAC"}
1
+ {"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAkB,MAAM,gCAAgC,CAAC;AAQ1F,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAgEpD,CAAC"}
@@ -68,6 +68,23 @@ export declare function getContainerDefinitions(resource: CFResource): Array<Rec
68
68
  * project that never sets `--env`/`ownership.env` isn't unexpectedly hard-failed.
69
69
  */
70
70
  export declare function isFullTierEnv(env: string | undefined): boolean;
71
+ /**
72
+ * Parse an IPv4 CIDR literal ("10.0.0.0/16") into its numeric base address
73
+ * and prefix length. Returns null for anything that isn't a plain IPv4 CIDR
74
+ * (IPv6, malformed octets, out-of-range prefix) — callers treat that as
75
+ * "can't prove statically" rather than an error.
76
+ */
77
+ export declare function parseIpv4Cidr(cidr: string): {
78
+ base: number;
79
+ prefix: number;
80
+ } | null;
81
+ /**
82
+ * Whether `inner` (an IPv4 CIDR literal) falls entirely within `outer`.
83
+ * Returns null — not false — when either literal isn't a plain, parseable
84
+ * IPv4 CIDR (e.g. IPv6, or a CloudFormation intrinsic already stringified
85
+ * elsewhere); a null means "statically unprovable", not "violation".
86
+ */
87
+ export declare function ipv4CidrContains(outer: string, inner: string): boolean | null;
71
88
  /**
72
89
  * Check if a port range [fromPort, toPort] contains any of the sensitive ports.
73
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cf-refs.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/cf-refs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,GAAG,IAAI,CAWvF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAcnF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAInD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,GACnB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoBhC;AAiBD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,UAAU,GACnB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAahC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK5F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAgBT"}
1
+ {"version":3,"file":"cf-refs.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/cf-refs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,GAAG,IAAI,CAWvF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAcnF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAInD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,GACnB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoBhC;AAiBD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,UAAU,GACnB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAahC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK5F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASnF;AAUD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAO7E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAgBT"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAsDvE,eAAO,MAAM,eAAe,EAAE,cAAc,EAqD3C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAyDvE,eAAO,MAAM,eAAe,EAAE,cAAc,EAwD3C,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * WAW061: Subnet CIDR Not Contained In VPC CIDR
3
+ *
4
+ * A subnet's CidrBlock must fall entirely inside its VPC's CidrBlock.
5
+ * Stock CDK does not check this — CloudFormation accepts the template and
6
+ * only fails the `AWS::EC2::Subnet` resource at deploy time
7
+ * ("The CIDR ... is invalid" / "does not fall within the CIDR range of the
8
+ * VPC"), after the rest of the stack may have already started rolling out.
9
+ * This is a cheap static graph check: follow the subnet's VpcId Ref to a
10
+ * declared VPC in the same template and do IPv4 CIDR-range math.
11
+ *
12
+ * Stays quiet whenever the graph can't prove it: intrinsic CIDR blocks,
13
+ * IPv6, a VpcId that isn't a simple Ref to a declared AWS::EC2::VPC, or a
14
+ * VPC whose own CidrBlock isn't a literal string.
15
+ */
16
+ import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
17
+ export declare function checkSubnetCidrContainment(ctx: PostSynthContext): PostSynthDiagnostic[];
18
+ export declare const waw061: PostSynthCheck;
19
+ //# sourceMappingURL=waw061.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waw061.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/waw061.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAG9G,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,CAsCvF;AAED,eAAO,MAAM,MAAM,EAAE,cAOpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * WAW062: Duplicate Name Or Export Within A Template
3
+ *
4
+ * CloudFormation requires certain names to be unique within a single
5
+ * template/stack: `Outputs.*.Export.Name`, and several resource-level
6
+ * "explicit name" properties (LaunchTemplateName, AutoScalingGroupName,
7
+ * GroupName, ...). Stock CDK doesn't catch a collision here — synth
8
+ * succeeds and the stack fails at CloudFormation deploy/changeset time.
9
+ * A duplicate is easy to introduce by copy-pasting a composite invocation
10
+ * (e.g. two EcrRepository or NlbService composites) without varying the
11
+ * explicit name.
12
+ *
13
+ * Only literal string values are compared — anything built from an
14
+ * intrinsic (Fn::Sub, Ref, ...) is statically unprovable and skipped.
15
+ */
16
+ import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
17
+ export declare function checkDuplicateNamesAndExports(ctx: PostSynthContext): PostSynthDiagnostic[];
18
+ export declare const waw062: PostSynthCheck;
19
+ //# sourceMappingURL=waw062.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waw062.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/waw062.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAqF9G,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,CAY1F;AAED,eAAO,MAAM,MAAM,EAAE,cAOpB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * WAW063: IAM Policy Denies An Action It Also Allows
3
+ *
4
+ * IAM evaluates an explicit Deny as an absolute veto: it wins over any
5
+ * Allow granted to the same principal, from any attached policy, no matter
6
+ * how the Allow got there. When a role ends up with both an Allow and a
7
+ * Deny for the same action (over an overlapping resource scope) —
8
+ * typically because a broad guardrail policy and a feature-specific policy
9
+ * were attached to the same role independently — CloudFormation deploys
10
+ * the stack without complaint and the contradiction only surfaces as a
11
+ * runtime 403, the most expensive class of error to trace back to its
12
+ * source. This is IAM-reasoning static analysis over the declared graph:
13
+ * collect every Allow/Deny statement attached to each declared IAM::Role
14
+ * (inline, standalone IAM::Policy, and IAM::ManagedPolicy) and flag a
15
+ * literal action+resource collision between an Allow and a Deny.
16
+ *
17
+ * Deliberately conservative to avoid flagging the common intentional
18
+ * "broad Allow + narrow safety-Deny" guardrail pattern (e.g. `Allow ec2:*`
19
+ * plus `Deny ec2:TerminateInstances`):
20
+ * - both statements' Action lists are compared string-by-string; a match
21
+ * requires either the literal same action on both sides, or a
22
+ * wildcarded Deny action that matches a literal (non-wildcarded) Allow
23
+ * action. A wildcarded Allow paired with a literal Deny is exactly the
24
+ * guardrail pattern and is never flagged;
25
+ * - resources are compared the same way: `Resource: "*"` on the Deny
26
+ * side always overlaps, or a literal exact match; a wildcarded Allow
27
+ * resource paired with a narrower literal Deny is not flagged;
28
+ * - any statement carrying a Condition, NotAction, NotResource,
29
+ * Principal, or an intrinsic Action/Resource is skipped — the rule
30
+ * can't prove those statically, so it stays quiet.
31
+ */
32
+ import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
33
+ export declare function checkDenyAllowContradiction(ctx: PostSynthContext): PostSynthDiagnostic[];
34
+ export declare const waw063: PostSynthCheck;
35
+ //# sourceMappingURL=waw063.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waw063.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/waw063.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAyG9G,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,CA8CxF;AAED,eAAO,MAAM,MAAM,EAAE,cAOpB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aws",
3
- "version": "0.46.0",
3
+ "version": "0.49.0",
4
4
  "chantVersion": ">=0.1.0",
5
5
  "namespace": "AWS",
6
6
  "intrinsics": [
package/dist/okf/index.md CHANGED
@@ -1724,3 +1724,6 @@ okf_version: '0.2'
1724
1724
  * [WAW058](/rules/WAW058.md) - Organization audit trail missing, not logging, or scoped down to a single region
1725
1725
  * [WAW059](/rules/WAW059.md) - Wildcard Resource where the declared graph enumerates the touched set — tighten to the consumers' declared Arns
1726
1726
  * [WAW060](/rules/WAW060.md) - IAM policy attached to no principal — it grants nothing
1727
+ * [WAW061](/rules/WAW061.md) - Subnet CidrBlock falls outside its VPC's CidrBlock — fails at deploy time
1728
+ * [WAW062](/rules/WAW062.md) - Duplicate export name or explicit resource name within a template — fails at deploy time
1729
+ * [WAW063](/rules/WAW063.md) - IAM policy denies an action another attached policy on the same role allows — explicit Deny wins, runtime 403
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WAW061
4
+ description: Subnet CidrBlock falls outside its VPC's CidrBlock — fails at deploy time
5
+ id: WAW061
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: aws
9
+ docs: https://intentius.io/chant/lexicons/aws/rules/
10
+ ---
11
+ Subnet CidrBlock falls outside its VPC's CidrBlock — fails at deploy time
12
+
13
+ ## Applies to
14
+
15
+ - [Subnet](/types/Subnet.md)
16
+ - [Type](/types/Type.md)
17
+ - [Vpc](/types/Vpc.md)
@@ -0,0 +1,27 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WAW062
4
+ description: Duplicate export name or explicit resource name within a template — fails at deploy time
5
+ id: WAW062
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: aws
9
+ docs: https://intentius.io/chant/lexicons/aws/rules/
10
+ ---
11
+ Duplicate export name or explicit resource name within a template — fails at deploy time
12
+
13
+ ## Applies to
14
+
15
+ - [AutoScalingGroup](/types/AutoScalingGroup.md)
16
+ - [Bucket](/types/Bucket.md)
17
+ - [ECRRepository](/types/ECRRepository.md)
18
+ - [Function](/types/Function.md)
19
+ - [LaunchTemplate](/types/LaunchTemplate.md)
20
+ - [LoadBalancer](/types/LoadBalancer.md)
21
+ - [ManagedPolicy](/types/ManagedPolicy.md)
22
+ - [Map](/types/Map.md)
23
+ - [Role](/types/Role.md)
24
+ - [SecurityGroup](/types/SecurityGroup.md)
25
+ - [StateMachine](/types/StateMachine.md)
26
+ - [Table](/types/Table.md)
27
+ - [Type](/types/Type.md)
@@ -0,0 +1,19 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WAW063
4
+ description: IAM policy denies an action another attached policy on the same role allows — explicit Deny wins, runtime 403
5
+ id: WAW063
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: aws
9
+ docs: https://intentius.io/chant/lexicons/aws/rules/
10
+ ---
11
+ IAM policy denies an action another attached policy on the same role allows — explicit Deny wins, runtime 403
12
+
13
+ ## Applies to
14
+
15
+ - [Action](/types/Action.md)
16
+ - [IamPolicy](/types/IamPolicy.md)
17
+ - [ManagedPolicy](/types/ManagedPolicy.md)
18
+ - [Role](/types/Role.md)
19
+ - [Type](/types/Type.md)
@@ -32,3 +32,4 @@ resource_type: AWS::SageMaker::Action
32
32
 
33
33
  - [WAW020](/rules/WAW020.md): IAM policy uses wildcard Action — use specific actions following least privilege
34
34
  - [WAW059](/rules/WAW059.md): Wildcard Resource where the declared graph enumerates the touched set — tighten to the consumers' declared Arns
35
+ - [WAW063](/rules/WAW063.md): IAM policy denies an action another attached policy on the same role allows — explicit Deny wins, runtime 403