@intentius/chant-lexicon-aws 0.57.0 → 0.59.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 (44) hide show
  1. package/dist/agentcore/trace-fetch.d.ts +5 -4
  2. package/dist/agentcore/trace-fetch.d.ts.map +1 -1
  3. package/dist/codegen/enum-overlay.d.ts +113 -0
  4. package/dist/codegen/enum-overlay.d.ts.map +1 -0
  5. package/dist/codegen/enum-overlay.json +1843 -0
  6. package/dist/codegen/generate.d.ts.map +1 -1
  7. package/dist/integrity.json +4 -4
  8. package/dist/lint/audit-catalog.d.ts.map +1 -1
  9. package/dist/lint/audit-lineage.d.ts +10 -0
  10. package/dist/lint/audit-lineage.d.ts.map +1 -0
  11. package/dist/manifest.json +1 -1
  12. package/dist/meta.json +1613 -0
  13. package/dist/okf/types/DbCluster.md +1 -1
  14. package/dist/okf/types/DbInstance.md +1 -1
  15. package/dist/okf/types/EC2Volume.md +1 -1
  16. package/dist/okf/types/Function.md +1 -1
  17. package/dist/okf/types/Instance.md +2 -2
  18. package/dist/okf/types/LoadBalancer.md +1 -1
  19. package/dist/okf/types/ScalableTarget.md +2 -2
  20. package/dist/okf/types/Subscription.md +1 -1
  21. package/dist/okf/types/Table.md +1 -1
  22. package/dist/okf/types/TargetGroup.md +2 -2
  23. package/dist/op/activities/aws-apply.d.ts.map +1 -1
  24. package/dist/op/activities/floci.d.ts +3 -2
  25. package/dist/op/activities/floci.d.ts.map +1 -1
  26. package/dist/op/builders.d.ts +4 -4
  27. package/dist/types/index.d.ts +1587 -18
  28. package/package.json +2 -2
  29. package/src/agentcore/trace-fetch.ts +5 -4
  30. package/src/codegen/docs.ts +3 -3
  31. package/src/codegen/enum-overlay.json +1843 -0
  32. package/src/codegen/enum-overlay.test.ts +298 -0
  33. package/src/codegen/enum-overlay.ts +245 -0
  34. package/src/codegen/generate.ts +40 -2
  35. package/src/deep-observe.test.ts +23 -15
  36. package/src/deep-topology.test.ts +7 -3
  37. package/src/generated/index.d.ts +1587 -18
  38. package/src/generated/lexicon-aws.json +1613 -0
  39. package/src/index.ts +3 -3
  40. package/src/lint/audit-catalog.ts +5 -1
  41. package/src/lint/audit-lineage.ts +159 -0
  42. package/src/op/activities/aws-apply.ts +1 -3
  43. package/src/op/activities/floci.ts +3 -2
  44. package/src/op/builders.ts +4 -4
package/src/index.ts CHANGED
@@ -28,9 +28,9 @@ export type { AwsReceiptStoreOptions, ReceiptRowObservation } from "./receipt-st
28
28
  // Typed Op step-builder wrappers (chant #1288 Stage 2) — awsApply/awsDelete/
29
29
  // flociUp/flociDown with authoring-time types derived from this lexicon's
30
30
  // own *Args interfaces (see ./op/builders.ts's module doc for why these live
31
- // here rather than in core or the temporal barrel). Opt-in:
32
- // `@intentius/chant-lexicon-temporal`'s same-named exports are core's
33
- // original untyped builders, unchanged, for cloud-agnostic authoring.
31
+ // here rather than in core). Opt-in: `@intentius/chant/op`'s same-named
32
+ // exports are core's original untyped builders, unchanged, for
33
+ // cloud-agnostic authoring.
34
34
  export { awsApply, awsDelete, flociUp, flociDown } from "./op/builders";
35
35
 
36
36
  // Serializer
@@ -5,7 +5,8 @@
5
5
  * #350); core keeps only the generic catalog machinery + cross-cutting ids.
6
6
  */
7
7
 
8
- import { auditRule, type RuleMeta, type Authority } from "@intentius/chant/audit/catalog";
8
+ import { auditRule, type RuleMeta, type Authority, applyLineage } from "@intentius/chant/audit/catalog";
9
+ import { awsAuditLineage } from "./audit-lineage";
9
10
 
10
11
  /** AWS Well-Architected Security Pillar — the authority chant cites for AWS security findings. */
11
12
  const AWS_SEC: Authority = {
@@ -90,3 +91,6 @@ export const awsAuditCatalog: Record<string, RuleMeta> = {
90
91
  WAW068: auditRule("WAW068", "report-only", "guidance", "VPN Gateway or Transit Gateway has only one attached VPN Connection", "Attach a second VPNConnection (ideally to a separate Customer Gateway) for redundancy.", { category: "best-practice" }),
91
92
  WAW069: auditRule("WAW069", "merge-worthy", "guidance", "Template references a condition it never declares", "Declare the condition in the Conditions section (new Condition(...)), or fix the referenced name.", { category: "correctness" }),
92
93
  };
94
+
95
+ // Prior art credits live beside the rules in ./audit-lineage.ts (see core audit/prior-art.ts).
96
+ applyLineage(awsAuditCatalog, awsAuditLineage);
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Prior art for these audit rules: the open-source tools whose checks cover the
3
+ * same condition, credited per rule. See packages/core/src/audit/prior-art.ts for
4
+ * the registry, the relation vocabulary, and why this is credit rather than
5
+ * authority. Kept by hand; the prior-art sweep (scripts/prior-art-sweep.ts) reports
6
+ * when a credited tool's index no longer lists a rule cited here.
7
+ */
8
+ import type { Lineage } from "@intentius/chant/audit/catalog";
9
+
10
+ export const awsAuditLineage: Record<string, Lineage[]> = {
11
+ WAW010: [
12
+ { tool: "cfn-lint", rule: "W3005", url: "https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md#W3005", relation: "equivalent" },
13
+ ],
14
+ WAW011: [
15
+ { tool: "cfn-lint", rule: "W2531", url: "https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md#W2531", relation: "equivalent" },
16
+ { tool: "checkov", rule: "CKV_AWS_363", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
17
+ ],
18
+ WAW017: [
19
+ { tool: "kics", rule: "Lambda Function Without Tags", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/8df8e857-bd59-44fa-9f4c-d77594b95b46/", relation: "extends" },
20
+ { tool: "kics", rule: "EFS Without Tags", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/08e39832-5e42-4304-98a0-aa5b43393162/", relation: "extends" },
21
+ ],
22
+ WAW018: [
23
+ { tool: "guard-rules-registry", rule: "S3_BUCKET_LEVEL_PUBLIC_ACCESS_PROHIBITED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_s3/s3_bucket_level_public_access_prohibited.guard", relation: "equivalent" },
24
+ { tool: "checkov", rule: "CKV_AWS_53", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "extends" },
25
+ { tool: "checkov", rule: "CKV_AWS_56", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "extends" },
26
+ ],
27
+ WAW019: [
28
+ { tool: "guard-rules-registry", rule: "RESTRICTED_INCOMING_TRAFFIC", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_ec2/restricted_common_ports.guard", relation: "overlaps" },
29
+ { tool: "kics", rule: "EC2 Sensitive Port Is Publicly Exposed", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/494b03d3-bf40-4464-8524-7c56ad0700ed/", relation: "overlaps" },
30
+ { tool: "checkov", rule: "CKV_AWS_24", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "extends" },
31
+ ],
32
+ WAW020: [
33
+ { tool: "checkov", rule: "CKV_AWS_63", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
34
+ { tool: "cfn-nag", rule: "F4", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/IamPolicyWildcardActionRule.rb", relation: "overlaps" },
35
+ { tool: "guard-rules-registry", rule: "IAM_ROLE_NO_WILDCARD_ACTIONS_ON_PERMISSIONS", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/iam/iam_role_no_wildcard_actions_on_permissions.guard", relation: "overlaps" },
36
+ ],
37
+ WAW021: [
38
+ { tool: "cfn-nag", rule: "F27", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/RDSDBInstanceStorageEncryptedRule.rb", relation: "equivalent" },
39
+ { tool: "checkov", rule: "CKV_AWS_16", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
40
+ { tool: "guard-rules-registry", rule: "RDS_STORAGE_ENCRYPTED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_rds/rds_storage_encrypted.guard", relation: "equivalent" },
41
+ ],
42
+ WAW022: [
43
+ { tool: "cfn-nag", rule: "W89", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/LambdaFunctionInsideVPCRule.rb", relation: "equivalent" },
44
+ { tool: "checkov", rule: "CKV_AWS_117", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
45
+ { tool: "guard-rules-registry", rule: "LAMBDA_INSIDE_VPC", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/lambda/lambda_inside_vpc.guard", relation: "equivalent" },
46
+ ],
47
+ WAW023: [
48
+ { tool: "checkov", rule: "CKV_AWS_68", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
49
+ { tool: "kics", rule: "CloudFront Without WAF", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/0f139403-303f-467c-96bd-e717e6cfd62d/", relation: "equivalent" },
50
+ ],
51
+ WAW024: [
52
+ { tool: "cfn-nag", rule: "W52", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/ElasticLoadBalancerV2AccessLoggingRule.rb", relation: "equivalent" },
53
+ { tool: "checkov", rule: "CKV_AWS_91", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
54
+ { tool: "kics", rule: "ELBv2 ALB Access Log Disabled", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/c62e8b7d-1fdf-4050-ac4c-76ba9e1d9621/", relation: "equivalent" },
55
+ ],
56
+ WAW025: [
57
+ { tool: "cfn-nag", rule: "W47", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/SnsTopicKmsMasterKeyIdRule.rb", relation: "equivalent" },
58
+ { tool: "checkov", rule: "CKV_AWS_26", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
59
+ { tool: "guard-rules-registry", rule: "SNS_ENCRYPTED_KMS", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_sns/sns_encrypted_kms.guard", relation: "equivalent" },
60
+ ],
61
+ WAW026: [
62
+ { tool: "checkov", rule: "CKV_AWS_27", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
63
+ { tool: "kics", rule: "SQS With SSE Disabled", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/12726829-93ed-4d51-9cbe-13423f4299e1/", relation: "equivalent" },
64
+ { tool: "cfn-nag", rule: "W48", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/SqsQueueKmsMasterKeyIdRule.rb", relation: "overlaps" },
65
+ ],
66
+ WAW027: [
67
+ { tool: "cfn-nag", rule: "W78", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/DynamoDBBackupRule.rb", relation: "equivalent" },
68
+ { tool: "checkov", rule: "CKV_AWS_28", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
69
+ { tool: "guard-rules-registry", rule: "DYNAMODB_PITR_ENABLED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/dynamodb/dynamodb_pitr_enabled.guard", relation: "equivalent" },
70
+ ],
71
+ WAW028: [
72
+ { tool: "cfn-nag", rule: "F1", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/EbsVolumeHasSseRule.rb", relation: "equivalent" },
73
+ { tool: "checkov", rule: "CKV_AWS_3", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
74
+ { tool: "guard-rules-registry", rule: "ENCRYPTED_VOLUMES", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_ec2/encrypted_volumes.guard", relation: "equivalent" },
75
+ ],
76
+ WAW029: [
77
+ { tool: "cfn-lint", rule: "E3005", url: "https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md#E3005", relation: "equivalent" },
78
+ ],
79
+ WAW032: [
80
+ { tool: "checkov", rule: "CKV_AWS_97", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
81
+ { tool: "kics", rule: "EFS Volume With Disabled Transit Encryption", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/c1282e03-b285-4637-aee7-eefe3a7bb658/", relation: "equivalent" },
82
+ ],
83
+ WAW038: [
84
+ { tool: "cfn-nag", rule: "F22", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/RDSInstancePubliclyAccessibleRule.rb", relation: "equivalent" },
85
+ { tool: "checkov", rule: "CKV_AWS_17", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
86
+ { tool: "kics", rule: "RDS DB Instance Publicly Accessible", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/de38e1d5-54cb-4111-a868-6f7722695007/", relation: "equivalent" },
87
+ ],
88
+ WAW039: [
89
+ { tool: "cfn-nag", rule: "W75", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/RDSInstanceBackupRetentionPeriodRule.rb", relation: "equivalent" },
90
+ { tool: "guard-rules-registry", rule: "DB_INSTANCE_BACKUP_ENABLED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_rds/db_instance_backup_enabled.guard", relation: "equivalent" },
91
+ { tool: "kics", rule: "RDS With Backup Disabled", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/8c415f6f-7b90-4a27-a44a-51047e1506f9/", relation: "equivalent" },
92
+ ],
93
+ WAW040: [
94
+ { tool: "cfn-nag", rule: "F80", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/RDSInstanceDeletionProtectionRule.rb", relation: "equivalent" },
95
+ { tool: "guard-rules-registry", rule: "RDS_INSTANCE_DELETION_PROTECTION_ENABLED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_rds/rds_instance_deletion_protection_enabled.guard", relation: "equivalent" },
96
+ { tool: "kics", rule: "RDS DB Instance With Deletion Protection Disabled", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/2c161e58-cb52-454f-abea-6470c37b5e6e/", relation: "equivalent" },
97
+ ],
98
+ WAW042: [
99
+ { tool: "guard-rules-registry", rule: "S3_BUCKET_SSL_REQUESTS_ONLY", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_s3/s3_bucket_ssl_requests_only.guard", relation: "equivalent" },
100
+ { tool: "kics", rule: "S3 Bucket Without SSL In Write Actions", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/38c64e76-c71e-4d92-a337-60174d1de1c9/", relation: "overlaps" },
101
+ ],
102
+ WAW043: [
103
+ { tool: "cfn-nag", rule: "F19", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/KMSKeyRotationRule.rb", relation: "equivalent" },
104
+ { tool: "checkov", rule: "CKV_AWS_7", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
105
+ { tool: "guard-rules-registry", rule: "CMK_BACKING_KEY_ROTATION_ENABLED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/aws_kms/cmk_backing_key_rotation_enabled.guard", relation: "equivalent" },
106
+ ],
107
+ WAW044: [
108
+ { tool: "checkov", rule: "CKV_AWS_2", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "overlaps" },
109
+ { tool: "cfn-nag", rule: "W56", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/ElasticLoadBalancerV2ListenerProtocolRule.rb", relation: "overlaps" },
110
+ ],
111
+ WAW045: [
112
+ { tool: "cfn-nag", rule: "W55", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/ElasticLoadBalancerV2ListenerSslPolicyRule.rb", relation: "equivalent" },
113
+ { tool: "checkov", rule: "CKV_AWS_103", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
114
+ { tool: "guard-rules-registry", rule: "ELBV2_LISTENER_SSL_POLICY_RULE", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/elastic_load_balancing_v2/elbv2_listener_ssl_policy_rule.guard", relation: "equivalent" },
115
+ ],
116
+ WAW049: [
117
+ { tool: "cfn-nag", rule: "W2", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/SecurityGroupIngressOpenToWorldRule.rb", relation: "overlaps" },
118
+ { tool: "guard-rules-registry", rule: "EC2_SECURITY_GROUP_INGRESS_OPEN_TO_WORLD_RULE", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/amazon_ec2/ec2_security_group_ingress_open_to_world_rule.guard", relation: "overlaps" },
119
+ { tool: "kics", rule: "Unrestricted Security Group Ingress", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/4a1e6b34-1008-4e61-a5f2-1f7c276f8d14/", relation: "overlaps" },
120
+ ],
121
+ WAW052: [
122
+ { tool: "cfn-nag", rule: "F78", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/CognitoUserPoolMfaConfigurationOnorOptionalRule.rb", relation: "overlaps" },
123
+ { tool: "guard-rules-registry", rule: "COGNITO_USER_POOL_MFA_CONFIGURATION_RULE", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/aws_cognito/cognito_user_pool_mfa_configuration_rule.guard", relation: "overlaps" },
124
+ { tool: "kics", rule: "Cognito UserPool Without MFA", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/74a18d1a-cf02-4a31-8791-ed0967ad7fdc/", relation: "overlaps" },
125
+ ],
126
+ WAW053: [
127
+ { tool: "cfn-nag", rule: "W79", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/ECRRepositoryScanOnPushRule.rb", relation: "equivalent" },
128
+ { tool: "checkov", rule: "CKV_AWS_163", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
129
+ { tool: "guard-rules-registry", rule: "ECR_REPO_SCAN_ON_PUSH", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/aws_ecr/ecr_repo_scan_on_push_rule.guard", relation: "equivalent" },
130
+ ],
131
+ WAW054: [
132
+ { tool: "checkov", rule: "CKV_AWS_51", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
133
+ { tool: "kics", rule: "ECR Image Tag Not Immutable", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/33f41d31-86b1-46a4-81f7-9c9a671f59ac/", relation: "equivalent" },
134
+ ],
135
+ WAW055: [
136
+ { tool: "cfn-nag", rule: "W86", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/LogsLogGroupRetentionRule.rb", relation: "equivalent" },
137
+ { tool: "checkov", rule: "CKV_AWS_66", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "equivalent" },
138
+ { tool: "guard-rules-registry", rule: "CW_LOGGROUP_RETENTION_PERIOD_CHECK", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/cloudwatch/cw_loggroup_retention_period_check.guard", relation: "equivalent" },
139
+ ],
140
+ WAW058: [
141
+ { tool: "guard-rules-registry", rule: "MULTI_REGION_CLOUD_TRAIL_ENABLED", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/cloudtrail/multi_region_cloud_trail_enabled.guard", relation: "overlaps" },
142
+ { tool: "checkov", rule: "CKV_AWS_67", url: "https://www.checkov.io/5.Policy%20Index/cloudformation.html", relation: "overlaps" },
143
+ { tool: "kics", rule: "CloudTrail Logging Disabled", url: "https://docs.kics.io/latest/queries/cloudformation-queries/aws/5c0b06d5-b7a4-484c-aeb0-75a836269ff0/", relation: "overlaps" },
144
+ ],
145
+ WAW059: [
146
+ { tool: "cfn-nag", rule: "W12", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/IamPolicyWildcardResourceRule.rb", relation: "overlaps" },
147
+ { tool: "cfn-nag", rule: "W11", url: "https://github.com/stelligent/cfn_nag/blob/master/lib/cfn-nag/custom_rules/IamRoleWildcardResourceOnPermissionsPolicyRule.rb", relation: "overlaps" },
148
+ { tool: "guard-rules-registry", rule: "IAM_POLICYDOCUMENT_NO_WILDCARD_RESOURCE", url: "https://github.com/aws-cloudformation/aws-guard-rules-registry/blob/main/rules/aws/iam/iam_policydocument_no_wildcard_resource.guard", relation: "overlaps" },
149
+ ],
150
+ WAW061: [
151
+ { tool: "cfn-lint", rule: "E3059", url: "https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md#E3059", relation: "equivalent" },
152
+ ],
153
+ WAW062: [
154
+ { tool: "cfn-lint", rule: "E3019", url: "https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md#E3019", relation: "overlaps" },
155
+ ],
156
+ WAW069: [
157
+ { tool: "cfn-lint", rule: "E8002", url: "https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md#E8002", relation: "equivalent" },
158
+ ],
159
+ };
@@ -1,5 +1,5 @@
1
1
  import { readFileSync } from "node:fs";
2
- import { safeHeartbeat, sleep } from "@intentius/chant/op";
2
+ import { sleep } from "@intentius/chant/op";
3
3
  import { awsDeployCapabilitiesForBody } from "../../components/cloud-executor.js";
4
4
  import { resolveEndpointOverride } from "../../api/read-client.js";
5
5
  import { ownershipStackTagsForBody } from "../../ownership.js";
@@ -128,7 +128,6 @@ export async function waitForStackSettled(
128
128
  const deadline = Date.now() + opts.timeoutMs;
129
129
  while (Date.now() < deadline) {
130
130
  if (signal?.aborted) throw new Error("awsApply aborted");
131
- safeHeartbeat({ step: "awsApply", stack: stackName });
132
131
  const res = await http(url, cfnForm("DescribeStacks", { StackName: stackName }), signal);
133
132
  const status = stackStatus(res.text);
134
133
  if (status && isTerminalStatus(status)) return status;
@@ -231,7 +230,6 @@ export async function awsDelete(
231
230
  const deadline = Date.now() + timeoutMs;
232
231
  while (Date.now() < deadline) {
233
232
  if (signal?.aborted) throw new Error("awsDelete aborted");
234
- safeHeartbeat({ step: "awsDelete", stack: args.stackName });
235
233
  const d = await http(url, cfnForm("DescribeStacks", { StackName: args.stackName }), signal);
236
234
  if (d.status >= 300 && isStackMissing(d.text)) return { stackName: args.stackName, deleted: true };
237
235
  const status = stackStatus(d.text);
@@ -101,8 +101,9 @@ export function flociRunCommand(args: FlociUpArgs = {}): string {
101
101
  * Idempotent: reuses a running container of the same name. Waits for the health
102
102
  * endpoint to report `readyService`, then sets `AWS_ENDPOINT_URL` + test creds in
103
103
  * the process environment so a following `nativeApply`/`cfn-deploy` targets the
104
- * emulator. Env injection assumes the in-process local executor; under a
105
- * distributed Temporal worker, pass the endpoint explicitly instead.
104
+ * emulator. Env injection works because the local executor runs every step of a
105
+ * run in this process; a step that runs anywhere else needs the endpoint passed
106
+ * to it explicitly.
106
107
  */
107
108
  export async function flociUp(args: FlociUpArgs = {}, signal?: AbortSignal): Promise<{ endpoint: string }> {
108
109
  const region = args.region ?? DEFAULT_REGION;
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Typed step-builder wrappers for this lexicon's activities (chant #1288
3
3
  * Stage 2). See `lexicons/k8s/src/op/builders.ts`'s module doc for why these
4
- * live beside their `*Args` interfaces rather than in core or the temporal
5
- * barrel: core cannot import a lexicon's types (lexicons depend on core, not
6
- * the reverse), and wiring them into the cloud-agnostic temporal barrel
7
- * would make it depend on every cloud lexicon at runtime. `opts`'s type in
4
+ * live beside their `*Args` interfaces rather than in core: core cannot
5
+ * import a lexicon's types (lexicons depend on core, not the reverse), so a
6
+ * wrapper whose `opts` IS the activity's own `*Args` interface can only sit
7
+ * in the lexicon that declares that interface. `opts`'s type in
8
8
  * each wrapper below IS the activity's own `*Args` interface (via
9
9
  * `Omit`/`WithStepRefs`) — never restated. `core`'s own
10
10
  * `awsApply`/`awsDelete`/`flociUp`/`flociDown` are unchanged and produce