@intentius/chant-lexicon-gcp 0.41.20 → 0.44.1

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 (563) hide show
  1. package/dist/composites/index.d.ts +2 -0
  2. package/dist/composites/index.d.ts.map +1 -1
  3. package/dist/composites/landing-zone.d.ts +67 -0
  4. package/dist/composites/landing-zone.d.ts.map +1 -0
  5. package/dist/deep-observe-hooks.d.ts +16 -3
  6. package/dist/deep-observe-hooks.d.ts.map +1 -1
  7. package/dist/deep-observe.d.ts +68 -139
  8. package/dist/deep-observe.d.ts.map +1 -1
  9. package/dist/describe-resources.d.ts +27 -3
  10. package/dist/describe-resources.d.ts.map +1 -1
  11. package/dist/governance.d.ts +101 -0
  12. package/dist/governance.d.ts.map +1 -0
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/integrity.json +5 -2
  16. package/dist/lint/audit-catalog.d.ts.map +1 -1
  17. package/dist/lint/post-synth/index.d.ts.map +1 -1
  18. package/dist/lint/post-synth/wgc501.d.ts +18 -0
  19. package/dist/lint/post-synth/wgc501.d.ts.map +1 -0
  20. package/dist/lint/post-synth/wgc502.d.ts +10 -0
  21. package/dist/lint/post-synth/wgc502.d.ts.map +1 -0
  22. package/dist/lint/post-synth/wgc503.d.ts +11 -0
  23. package/dist/lint/post-synth/wgc503.d.ts.map +1 -0
  24. package/dist/manifest.json +1 -1
  25. package/dist/okf/index.md +519 -0
  26. package/dist/okf/rules/WGC001.md +15 -0
  27. package/dist/okf/rules/WGC002.md +16 -0
  28. package/dist/okf/rules/WGC003.md +15 -0
  29. package/dist/okf/rules/WGC101.md +16 -0
  30. package/dist/okf/rules/WGC102.md +15 -0
  31. package/dist/okf/rules/WGC103.md +15 -0
  32. package/dist/okf/rules/WGC104.md +15 -0
  33. package/dist/okf/rules/WGC105.md +15 -0
  34. package/dist/okf/rules/WGC106.md +15 -0
  35. package/dist/okf/rules/WGC107.md +15 -0
  36. package/dist/okf/rules/WGC108.md +15 -0
  37. package/dist/okf/rules/WGC109.md +11 -0
  38. package/dist/okf/rules/WGC110.md +15 -0
  39. package/dist/okf/rules/WGC111.md +15 -0
  40. package/dist/okf/rules/WGC112.md +15 -0
  41. package/dist/okf/rules/WGC113.md +16 -0
  42. package/dist/okf/rules/WGC201.md +15 -0
  43. package/dist/okf/rules/WGC202.md +11 -0
  44. package/dist/okf/rules/WGC203.md +11 -0
  45. package/dist/okf/rules/WGC204.md +15 -0
  46. package/dist/okf/rules/WGC301.md +15 -0
  47. package/dist/okf/rules/WGC302.md +15 -0
  48. package/dist/okf/rules/WGC303.md +15 -0
  49. package/dist/okf/rules/WGC401.md +15 -0
  50. package/dist/okf/rules/WGC402.md +15 -0
  51. package/dist/okf/rules/WGC403.md +15 -0
  52. package/dist/okf/rules/WGC501.md +15 -0
  53. package/dist/okf/rules/WGC502.md +11 -0
  54. package/dist/okf/rules/WGC503.md +15 -0
  55. package/dist/okf/types/API.md +21 -0
  56. package/dist/okf/types/APIConfig.md +15 -0
  57. package/dist/okf/types/APIQuotaAdjusterSettings.md +15 -0
  58. package/dist/okf/types/APIQuotaPreference.md +15 -0
  59. package/dist/okf/types/AccessBoundaryPolicy.md +15 -0
  60. package/dist/okf/types/AccessLevel.md +15 -0
  61. package/dist/okf/types/AccessLevelCondition.md +15 -0
  62. package/dist/okf/types/AccessPolicy.md +15 -0
  63. package/dist/okf/types/AddonsConfig.md +15 -0
  64. package/dist/okf/types/AgentPool.md +15 -0
  65. package/dist/okf/types/AiplatformModel.md +15 -0
  66. package/dist/okf/types/AistreamsCluster.md +15 -0
  67. package/dist/okf/types/AlertPolicy.md +15 -0
  68. package/dist/okf/types/AlloydbBackup.md +15 -0
  69. package/dist/okf/types/AlloydbCluster.md +15 -0
  70. package/dist/okf/types/AlloydbInstance.md +15 -0
  71. package/dist/okf/types/AnalyticsAccount.md +15 -0
  72. package/dist/okf/types/AndroidApp.md +15 -0
  73. package/dist/okf/types/AnywhereCache.md +15 -0
  74. package/dist/okf/types/ApigatewayGateway.md +15 -0
  75. package/dist/okf/types/ApigeeEnvironment.md +15 -0
  76. package/dist/okf/types/ApigeeInstance.md +15 -0
  77. package/dist/okf/types/ApihubDeployment.md +15 -0
  78. package/dist/okf/types/ApikeysKey.md +15 -0
  79. package/dist/okf/types/AppConnection.md +15 -0
  80. package/dist/okf/types/AppConnector.md +15 -0
  81. package/dist/okf/types/AppGateway.md +15 -0
  82. package/dist/okf/types/AppProfile.md +15 -0
  83. package/dist/okf/types/Application.md +15 -0
  84. package/dist/okf/types/ArtifactRegistryRepository.md +15 -0
  85. package/dist/okf/types/Assignment.md +15 -0
  86. package/dist/okf/types/Attestor.md +15 -0
  87. package/dist/okf/types/AuthorizationPolicy.md +15 -0
  88. package/dist/okf/types/AuthorizedView.md +15 -0
  89. package/dist/okf/types/AutokeyConfig.md +15 -0
  90. package/dist/okf/types/Automation.md +15 -0
  91. package/dist/okf/types/Autoscaler.md +15 -0
  92. package/dist/okf/types/AutoscalingPolicy.md +15 -0
  93. package/dist/okf/types/BQJob.md +15 -0
  94. package/dist/okf/types/BackendBucket.md +15 -0
  95. package/dist/okf/types/BackendBucketSignedURLKey.md +15 -0
  96. package/dist/okf/types/BackendService.md +15 -0
  97. package/dist/okf/types/BackendServiceSignedURLKey.md +15 -0
  98. package/dist/okf/types/BackupPlanAssociation.md +15 -0
  99. package/dist/okf/types/BackupPolicy.md +15 -0
  100. package/dist/okf/types/BackupdrBackupPlan.md +15 -0
  101. package/dist/okf/types/BackupdrBackupVault.md +15 -0
  102. package/dist/okf/types/Batch.md +15 -0
  103. package/dist/okf/types/BatchJob.md +15 -0
  104. package/dist/okf/types/BatchTask.md +15 -0
  105. package/dist/okf/types/BigLakeCatalog.md +15 -0
  106. package/dist/okf/types/BigLakeDatabase.md +15 -0
  107. package/dist/okf/types/BigLakeTable.md +15 -0
  108. package/dist/okf/types/BigQueryDataPolicy.md +15 -0
  109. package/dist/okf/types/BigQueryDataset.md +15 -0
  110. package/dist/okf/types/BigQueryExport.md +15 -0
  111. package/dist/okf/types/BigQueryTable.md +15 -0
  112. package/dist/okf/types/BigqueryconnectionConnection.md +15 -0
  113. package/dist/okf/types/BigquerydatatransferConfig.md +15 -0
  114. package/dist/okf/types/BigqueryreservationReservation.md +15 -0
  115. package/dist/okf/types/BigtableInstance.md +15 -0
  116. package/dist/okf/types/BigtableTable.md +15 -0
  117. package/dist/okf/types/BillingAccount.md +15 -0
  118. package/dist/okf/types/BinaryauthorizationPolicy.md +15 -0
  119. package/dist/okf/types/Brand.md +15 -0
  120. package/dist/okf/types/BtBackup.md +15 -0
  121. package/dist/okf/types/BtCluster.md +15 -0
  122. package/dist/okf/types/Bucket.md +15 -0
  123. package/dist/okf/types/BucketAccessControl.md +15 -0
  124. package/dist/okf/types/Budget.md +15 -0
  125. package/dist/okf/types/CAPool.md +15 -0
  126. package/dist/okf/types/CapacityCommitment.md +15 -0
  127. package/dist/okf/types/CertificateAuthority.md +15 -0
  128. package/dist/okf/types/CertificateIssuanceConfig.md +15 -0
  129. package/dist/okf/types/CertificateMap.md +15 -0
  130. package/dist/okf/types/CertificateMapEntry.md +15 -0
  131. package/dist/okf/types/CertificateTemplate.md +15 -0
  132. package/dist/okf/types/CertificatemanagerCertificate.md +15 -0
  133. package/dist/okf/types/ClientConnectorService.md +15 -0
  134. package/dist/okf/types/ClientTLSPolicy.md +15 -0
  135. package/dist/okf/types/CloudBatchResourceAllowance.md +15 -0
  136. package/dist/okf/types/CloudFunction.md +15 -0
  137. package/dist/okf/types/CloudRunJob.md +15 -0
  138. package/dist/okf/types/CloudRunService.md +15 -0
  139. package/dist/okf/types/CloudbuildTrigger.md +15 -0
  140. package/dist/okf/types/ClouddmsPrivateConnection.md +15 -0
  141. package/dist/okf/types/CloudidentityGroup.md +15 -0
  142. package/dist/okf/types/CloudidentityMembership.md +15 -0
  143. package/dist/okf/types/CloudidsEndpoint.md +15 -0
  144. package/dist/okf/types/CloudschedulerJob.md +15 -0
  145. package/dist/okf/types/ComposerEnvironment.md +15 -0
  146. package/dist/okf/types/ComputeAddress.md +15 -0
  147. package/dist/okf/types/ComputeDisk.md +15 -0
  148. package/dist/okf/types/ComputeFirewallPolicy.md +15 -0
  149. package/dist/okf/types/ComputeHealthCheck.md +15 -0
  150. package/dist/okf/types/ComputeInstance.md +19 -0
  151. package/dist/okf/types/ComputeNetworkPeering.md +15 -0
  152. package/dist/okf/types/ComputeNodeGroup.md +15 -0
  153. package/dist/okf/types/ComputeReservation.md +15 -0
  154. package/dist/okf/types/ComputeRoute.md +15 -0
  155. package/dist/okf/types/ComputeSnapshot.md +15 -0
  156. package/dist/okf/types/ConfigcontrollerInstance.md +15 -0
  157. package/dist/okf/types/ConnectionProfile.md +15 -0
  158. package/dist/okf/types/ConnectivityTest.md +15 -0
  159. package/dist/okf/types/Connector.md +28 -0
  160. package/dist/okf/types/ConsentStore.md +15 -0
  161. package/dist/okf/types/ConsumerGroup.md +15 -0
  162. package/dist/okf/types/ConsumerQuotaOverride.md +15 -0
  163. package/dist/okf/types/Contact.md +15 -0
  164. package/dist/okf/types/ContainerattachedCluster.md +15 -0
  165. package/dist/okf/types/ConversionWorkspace.md +15 -0
  166. package/dist/okf/types/CryptoKeyVersion.md +15 -0
  167. package/dist/okf/types/CustomClass.md +15 -0
  168. package/dist/okf/types/CustomConstraint.md +15 -0
  169. package/dist/okf/types/CustomRole.md +15 -0
  170. package/dist/okf/types/CustomTargetType.md +15 -0
  171. package/dist/okf/types/DICOMStore.md +15 -0
  172. package/dist/okf/types/DNSAuthorization.md +15 -0
  173. package/dist/okf/types/DNSManagedZone.md +15 -0
  174. package/dist/okf/types/DNSRecordSet.md +15 -0
  175. package/dist/okf/types/Dashboard.md +15 -0
  176. package/dist/okf/types/DataExchange.md +15 -0
  177. package/dist/okf/types/DataLabelingJob.md +15 -0
  178. package/dist/okf/types/DataPolicy.md +15 -0
  179. package/dist/okf/types/DataStore.md +15 -0
  180. package/dist/okf/types/DataStoreTargetSite.md +15 -0
  181. package/dist/okf/types/Database.md +15 -0
  182. package/dist/okf/types/DatacatalogEntryGroup.md +15 -0
  183. package/dist/okf/types/DataflowJob.md +15 -0
  184. package/dist/okf/types/DataformRepository.md +15 -0
  185. package/dist/okf/types/DatafusionInstance.md +15 -0
  186. package/dist/okf/types/DataplexEntryGroup.md +15 -0
  187. package/dist/okf/types/DataplexTask.md +15 -0
  188. package/dist/okf/types/DataprocCluster.md +15 -0
  189. package/dist/okf/types/DataprocJob.md +15 -0
  190. package/dist/okf/types/DataprocNodeGroup.md +15 -0
  191. package/dist/okf/types/DataprocSession.md +15 -0
  192. package/dist/okf/types/DatasetAccess.md +15 -0
  193. package/dist/okf/types/DatastoreIndex.md +15 -0
  194. package/dist/okf/types/DatastreamPrivateConnection.md +15 -0
  195. package/dist/okf/types/DatastreamRoute.md +15 -0
  196. package/dist/okf/types/DefaultObjectAccessControl.md +15 -0
  197. package/dist/okf/types/DefaultSupportedIDPConfig.md +15 -0
  198. package/dist/okf/types/DeidentifyTemplate.md +15 -0
  199. package/dist/okf/types/DeliveryPipeline.md +15 -0
  200. package/dist/okf/types/DenyPolicy.md +15 -0
  201. package/dist/okf/types/DeployPolicy.md +15 -0
  202. package/dist/okf/types/DeploymentResourcePool.md +15 -0
  203. package/dist/okf/types/DeploymentmanagerDeployment.md +15 -0
  204. package/dist/okf/types/Device.md +15 -0
  205. package/dist/okf/types/DeviceRegistry.md +15 -0
  206. package/dist/okf/types/DevicestreamingSession.md +15 -0
  207. package/dist/okf/types/DialogflowAgent.md +15 -0
  208. package/dist/okf/types/DialogflowEntityType.md +15 -0
  209. package/dist/okf/types/DialogflowIntent.md +15 -0
  210. package/dist/okf/types/DialogflowcxAgent.md +15 -0
  211. package/dist/okf/types/DialogflowcxEntityType.md +15 -0
  212. package/dist/okf/types/DialogflowcxIntent.md +15 -0
  213. package/dist/okf/types/DiscoveredService.md +15 -0
  214. package/dist/okf/types/DiscoveredWorkload.md +15 -0
  215. package/dist/okf/types/DiskResourcePolicyAttachment.md +15 -0
  216. package/dist/okf/types/DnsPolicy.md +15 -0
  217. package/dist/okf/types/Document.md +15 -0
  218. package/dist/okf/types/DomainMapping.md +15 -0
  219. package/dist/okf/types/EdgeCacheKeyset.md +15 -0
  220. package/dist/okf/types/EdgeCacheOrigin.md +15 -0
  221. package/dist/okf/types/EdgeCacheService.md +15 -0
  222. package/dist/okf/types/EdgecontainerCluster.md +15 -0
  223. package/dist/okf/types/EdgecontainerNodePool.md +15 -0
  224. package/dist/okf/types/EdgenetworkNetwork.md +15 -0
  225. package/dist/okf/types/EndpointAttachment.md +15 -0
  226. package/dist/okf/types/EndpointPolicy.md +15 -0
  227. package/dist/okf/types/Engine.md +15 -0
  228. package/dist/okf/types/Enrollment.md +15 -0
  229. package/dist/okf/types/Entitlement.md +15 -0
  230. package/dist/okf/types/Entry.md +15 -0
  231. package/dist/okf/types/EntryType.md +15 -0
  232. package/dist/okf/types/Envgroup.md +15 -0
  233. package/dist/okf/types/EnvgroupAttachment.md +15 -0
  234. package/dist/okf/types/EventarcChannel.md +15 -0
  235. package/dist/okf/types/EventarcTrigger.md +15 -0
  236. package/dist/okf/types/ExampleStore.md +15 -0
  237. package/dist/okf/types/ExternalAccessRule.md +15 -0
  238. package/dist/okf/types/ExternalAddress.md +15 -0
  239. package/dist/okf/types/ExternalVPNGateway.md +15 -0
  240. package/dist/okf/types/FHIRStore.md +15 -0
  241. package/dist/okf/types/Feature.md +15 -0
  242. package/dist/okf/types/FeatureMembership.md +15 -0
  243. package/dist/okf/types/Featurestore.md +15 -0
  244. package/dist/okf/types/FeaturestoreEntityType.md +15 -0
  245. package/dist/okf/types/FeaturestoreEntityTypeFeature.md +15 -0
  246. package/dist/okf/types/Federation.md +15 -0
  247. package/dist/okf/types/Feed.md +15 -0
  248. package/dist/okf/types/Field.md +15 -0
  249. package/dist/okf/types/FilestoreBackup.md +15 -0
  250. package/dist/okf/types/FilestoreInstance.md +15 -0
  251. package/dist/okf/types/FilestoreSnapshot.md +15 -0
  252. package/dist/okf/types/FirebaseProject.md +15 -0
  253. package/dist/okf/types/FirebasedatabaseInstance.md +15 -0
  254. package/dist/okf/types/FirebasehostingChannel.md +15 -0
  255. package/dist/okf/types/FirestoreBackupSchedule.md +15 -0
  256. package/dist/okf/types/FirestoreIndex.md +15 -0
  257. package/dist/okf/types/Firewall.md +15 -0
  258. package/dist/okf/types/FirewallPolicyAssociation.md +15 -0
  259. package/dist/okf/types/FirewallPolicyRule.md +15 -0
  260. package/dist/okf/types/FirewallRule.md +15 -0
  261. package/dist/okf/types/FlexTemplateJob.md +15 -0
  262. package/dist/okf/types/FlexibleAppVersion.md +15 -0
  263. package/dist/okf/types/Flow.md +15 -0
  264. package/dist/okf/types/FolderFeed.md +15 -0
  265. package/dist/okf/types/ForwardingRule.md +15 -0
  266. package/dist/okf/types/Fulfillment.md +15 -0
  267. package/dist/okf/types/Function.md +15 -0
  268. package/dist/okf/types/FutureReservation.md +15 -0
  269. package/dist/okf/types/GCPServiceAccount.md +15 -0
  270. package/dist/okf/types/GCPUserAccessBinding.md +15 -0
  271. package/dist/okf/types/GCPolicy.md +15 -0
  272. package/dist/okf/types/GKECluster.md +15 -0
  273. package/dist/okf/types/GRPCRoute.md +15 -0
  274. package/dist/okf/types/GcsFolder.md +15 -0
  275. package/dist/okf/types/GkebackupBackup.md +15 -0
  276. package/dist/okf/types/GkebackupBackupPlan.md +15 -0
  277. package/dist/okf/types/GkehubMembership.md +15 -0
  278. package/dist/okf/types/GkehubNamespace.md +15 -0
  279. package/dist/okf/types/GlobalNetworkEndpoint.md +15 -0
  280. package/dist/okf/types/GlobalNetworkEndpointGroup.md +15 -0
  281. package/dist/okf/types/GoogleChannelConfig.md +15 -0
  282. package/dist/okf/types/GuestPolicy.md +15 -0
  283. package/dist/okf/types/HL7V2Store.md +15 -0
  284. package/dist/okf/types/HMACKey.md +15 -0
  285. package/dist/okf/types/HTTPHealthCheck.md +15 -0
  286. package/dist/okf/types/HTTPRoute.md +15 -0
  287. package/dist/okf/types/HTTPSHealthCheck.md +15 -0
  288. package/dist/okf/types/HealthcareDataset.md +15 -0
  289. package/dist/okf/types/Hub.md +15 -0
  290. package/dist/okf/types/IAMAuditConfig.md +20 -0
  291. package/dist/okf/types/IAMPolicy.md +15 -0
  292. package/dist/okf/types/IAMPolicyMember.md +15 -0
  293. package/dist/okf/types/IdentityAwareProxyClient.md +15 -0
  294. package/dist/okf/types/IdentityplatformConfig.md +15 -0
  295. package/dist/okf/types/Image.md +15 -0
  296. package/dist/okf/types/ImportJob.md +15 -0
  297. package/dist/okf/types/InboundSAMLConfig.md +15 -0
  298. package/dist/okf/types/IndexEndpoint.md +15 -0
  299. package/dist/okf/types/InspectTemplate.md +15 -0
  300. package/dist/okf/types/InstanceAttachment.md +15 -0
  301. package/dist/okf/types/InstanceConfig.md +15 -0
  302. package/dist/okf/types/InstanceEndpoint.md +15 -0
  303. package/dist/okf/types/InstanceGroup.md +15 -0
  304. package/dist/okf/types/InstanceGroupManager.md +15 -0
  305. package/dist/okf/types/InstanceGroupNamedPort.md +15 -0
  306. package/dist/okf/types/InstanceTemplate.md +15 -0
  307. package/dist/okf/types/InterceptDeployment.md +15 -0
  308. package/dist/okf/types/InterceptEndpointGroup.md +15 -0
  309. package/dist/okf/types/Interconnect.md +15 -0
  310. package/dist/okf/types/InterconnectAttachment.md +15 -0
  311. package/dist/okf/types/InternalRange.md +15 -0
  312. package/dist/okf/types/JobTrigger.md +15 -0
  313. package/dist/okf/types/KMSCryptoKey.md +19 -0
  314. package/dist/okf/types/KMSKeyRing.md +15 -0
  315. package/dist/okf/types/KeyHandle.md +15 -0
  316. package/dist/okf/types/KeyRingImportJob.md +15 -0
  317. package/dist/okf/types/LBRouteExtension.md +15 -0
  318. package/dist/okf/types/Lake.md +15 -0
  319. package/dist/okf/types/Lien.md +15 -0
  320. package/dist/okf/types/Link.md +15 -0
  321. package/dist/okf/types/Listing.md +15 -0
  322. package/dist/okf/types/LocationTagBinding.md +15 -0
  323. package/dist/okf/types/LogBucket.md +15 -0
  324. package/dist/okf/types/LogExclusion.md +15 -0
  325. package/dist/okf/types/LogMetric.md +15 -0
  326. package/dist/okf/types/LogSink.md +15 -0
  327. package/dist/okf/types/LogView.md +15 -0
  328. package/dist/okf/types/LogicalView.md +15 -0
  329. package/dist/okf/types/Machine.md +15 -0
  330. package/dist/okf/types/MachineImage.md +15 -0
  331. package/dist/okf/types/ManagedFolder.md +15 -0
  332. package/dist/okf/types/ManagedSSLCertificate.md +15 -0
  333. package/dist/okf/types/ManagedkafkaCluster.md +15 -0
  334. package/dist/okf/types/ManagedkafkaTopic.md +15 -0
  335. package/dist/okf/types/ManagementServer.md +15 -0
  336. package/dist/okf/types/MaterializedView.md +15 -0
  337. package/dist/okf/types/MembershipBinding.md +15 -0
  338. package/dist/okf/types/MemcacheInstance.md +15 -0
  339. package/dist/okf/types/MemorystoreInstance.md +15 -0
  340. package/dist/okf/types/Mesh.md +15 -0
  341. package/dist/okf/types/MetadataStore.md +15 -0
  342. package/dist/okf/types/MetastoreBackup.md +15 -0
  343. package/dist/okf/types/MetastoreService.md +15 -0
  344. package/dist/okf/types/MetricDescriptor.md +15 -0
  345. package/dist/okf/types/MigrationJob.md +15 -0
  346. package/dist/okf/types/MlengineModel.md +15 -0
  347. package/dist/okf/types/MonGroup.md +15 -0
  348. package/dist/okf/types/MonService.md +15 -0
  349. package/dist/okf/types/MonitoredProject.md +15 -0
  350. package/dist/okf/types/MuteConfig.md +15 -0
  351. package/dist/okf/types/NATAddress.md +15 -0
  352. package/dist/okf/types/NetappBackupVault.md +15 -0
  353. package/dist/okf/types/NetworkAttachment.md +15 -0
  354. package/dist/okf/types/NetworkEdgeSecurityService.md +15 -0
  355. package/dist/okf/types/NetworkEndpoint.md +15 -0
  356. package/dist/okf/types/NetworkEndpointGroup.md +15 -0
  357. package/dist/okf/types/NetworkFirewallPolicy.md +15 -0
  358. package/dist/okf/types/NetworkFirewallPolicyAssociation.md +15 -0
  359. package/dist/okf/types/NetworkFirewallPolicyRule.md +15 -0
  360. package/dist/okf/types/NetworkPeeringRoutesConfig.md +15 -0
  361. package/dist/okf/types/NetworkPolicy.md +15 -0
  362. package/dist/okf/types/NetworkservicesGateway.md +15 -0
  363. package/dist/okf/types/Node.md +21 -0
  364. package/dist/okf/types/NodePool.md +15 -0
  365. package/dist/okf/types/NodeTemplate.md +15 -0
  366. package/dist/okf/types/Note.md +15 -0
  367. package/dist/okf/types/NotebookInstance.md +15 -0
  368. package/dist/okf/types/NotebooksEnvironment.md +15 -0
  369. package/dist/okf/types/Notification.md +15 -0
  370. package/dist/okf/types/NotificationChannel.md +15 -0
  371. package/dist/okf/types/NotificationConfig.md +15 -0
  372. package/dist/okf/types/OAuthIDPConfig.md +15 -0
  373. package/dist/okf/types/OSPolicyAssignment.md +15 -0
  374. package/dist/okf/types/Occurrence.md +15 -0
  375. package/dist/okf/types/Organization.md +15 -0
  376. package/dist/okf/types/OrganizationFeed.md +15 -0
  377. package/dist/okf/types/OrganizationSecurityPolicy.md +15 -0
  378. package/dist/okf/types/OrganizationSecurityPolicyAssociation.md +15 -0
  379. package/dist/okf/types/OrganizationSecurityPolicyRule.md +15 -0
  380. package/dist/okf/types/OrgpolicyPolicy.md +15 -0
  381. package/dist/okf/types/PacketMirroring.md +15 -0
  382. package/dist/okf/types/Page.md +15 -0
  383. package/dist/okf/types/Parameter.md +15 -0
  384. package/dist/okf/types/ParameterVersion.md +15 -0
  385. package/dist/okf/types/PartialPolicy.md +15 -0
  386. package/dist/okf/types/PatchDeployment.md +15 -0
  387. package/dist/okf/types/PeeredDNSDomain.md +15 -0
  388. package/dist/okf/types/PerInstanceConfig.md +15 -0
  389. package/dist/okf/types/PhraseSet.md +15 -0
  390. package/dist/okf/types/PlatformPolicy.md +15 -0
  391. package/dist/okf/types/PolicyTag.md +15 -0
  392. package/dist/okf/types/PrivateCloud.md +15 -0
  393. package/dist/okf/types/PrivatecaCertificate.md +15 -0
  394. package/dist/okf/types/Processor.md +15 -0
  395. package/dist/okf/types/ProcessorDefaultVersion.md +15 -0
  396. package/dist/okf/types/ProcessorVersion.md +15 -0
  397. package/dist/okf/types/ProjectDefaultConfig.md +15 -0
  398. package/dist/okf/types/ProjectFeed.md +15 -0
  399. package/dist/okf/types/ProjectMetadata.md +15 -0
  400. package/dist/okf/types/PubSubSnapshot.md +15 -0
  401. package/dist/okf/types/PubSubSubscription.md +15 -0
  402. package/dist/okf/types/PubSubTopic.md +15 -0
  403. package/dist/okf/types/PubsubliteReservation.md +15 -0
  404. package/dist/okf/types/PubsubliteTopic.md +15 -0
  405. package/dist/okf/types/RecaptchaenterpriseFirewallPolicy.md +15 -0
  406. package/dist/okf/types/RecaptchaenterpriseKey.md +15 -0
  407. package/dist/okf/types/Recognizer.md +15 -0
  408. package/dist/okf/types/RedisCluster.md +15 -0
  409. package/dist/okf/types/RedisInstance.md +15 -0
  410. package/dist/okf/types/RegionAutoscaler.md +15 -0
  411. package/dist/okf/types/RegionDiskResourcePolicyAttachment.md +15 -0
  412. package/dist/okf/types/RegionNetworkEndpointGroup.md +15 -0
  413. package/dist/okf/types/RegionPerInstanceConfig.md +15 -0
  414. package/dist/okf/types/RegionSSLPolicy.md +15 -0
  415. package/dist/okf/types/RegionalEndpoint.md +15 -0
  416. package/dist/okf/types/ResourceBundle.md +15 -0
  417. package/dist/okf/types/ResourcePolicy.md +15 -0
  418. package/dist/okf/types/ResourcemanagerFolder.md +15 -0
  419. package/dist/okf/types/ResourcemanagerPolicy.md +15 -0
  420. package/dist/okf/types/ResourcemanagerProject.md +15 -0
  421. package/dist/okf/types/ResponsePolicy.md +15 -0
  422. package/dist/okf/types/ResponsePolicyRule.md +15 -0
  423. package/dist/okf/types/Restore.md +15 -0
  424. package/dist/okf/types/RestorePlan.md +15 -0
  425. package/dist/okf/types/Router.md +15 -0
  426. package/dist/okf/types/RouterInterface.md +15 -0
  427. package/dist/okf/types/RouterNAT.md +15 -0
  428. package/dist/okf/types/RouterPeer.md +15 -0
  429. package/dist/okf/types/Routine.md +15 -0
  430. package/dist/okf/types/Runtime.md +15 -0
  431. package/dist/okf/types/RuntimeTemplate.md +15 -0
  432. package/dist/okf/types/SQLDatabase.md +15 -0
  433. package/dist/okf/types/SQLInstance.md +21 -0
  434. package/dist/okf/types/SQLUser.md +15 -0
  435. package/dist/okf/types/SSHPublicKey.md +15 -0
  436. package/dist/okf/types/SSLCert.md +15 -0
  437. package/dist/okf/types/SSLCertificate.md +15 -0
  438. package/dist/okf/types/SSLPolicy.md +15 -0
  439. package/dist/okf/types/SavedQuery.md +15 -0
  440. package/dist/okf/types/Schema.md +15 -0
  441. package/dist/okf/types/Scope.md +15 -0
  442. package/dist/okf/types/ScopeRBACRoleBinding.md +15 -0
  443. package/dist/okf/types/SecretCiphertext.md +15 -0
  444. package/dist/okf/types/SecretManagerSecret.md +15 -0
  445. package/dist/okf/types/SecretManagerSecretVersion.md +15 -0
  446. package/dist/okf/types/SecuresourcemanagerInstance.md +15 -0
  447. package/dist/okf/types/SecuresourcemanagerRepository.md +15 -0
  448. package/dist/okf/types/SecurityPolicy.md +15 -0
  449. package/dist/okf/types/ServerTLSPolicy.md +15 -0
  450. package/dist/okf/types/ServiceAccountKey.md +15 -0
  451. package/dist/okf/types/ServiceAttachment.md +15 -0
  452. package/dist/okf/types/ServiceBinding.md +15 -0
  453. package/dist/okf/types/ServiceConnectionPolicy.md +15 -0
  454. package/dist/okf/types/ServiceIdentity.md +15 -0
  455. package/dist/okf/types/ServiceLevelObjective.md +15 -0
  456. package/dist/okf/types/ServicePerimeter.md +19 -0
  457. package/dist/okf/types/ServicePerimeterResource.md +15 -0
  458. package/dist/okf/types/ServiceProjectAttachment.md +15 -0
  459. package/dist/okf/types/ServiceSplitTraffic.md +15 -0
  460. package/dist/okf/types/ServicedirectoryEndpoint.md +15 -0
  461. package/dist/okf/types/ServicedirectoryNamespace.md +15 -0
  462. package/dist/okf/types/ServicedirectoryService.md +15 -0
  463. package/dist/okf/types/ServicenetworkingConnection.md +15 -0
  464. package/dist/okf/types/ServiceusageService.md +15 -0
  465. package/dist/okf/types/Settings.md +15 -0
  466. package/dist/okf/types/SharedVPCHostProject.md +15 -0
  467. package/dist/okf/types/SharedVPCServiceProject.md +15 -0
  468. package/dist/okf/types/Site.md +15 -0
  469. package/dist/okf/types/Source.md +15 -0
  470. package/dist/okf/types/SourcerepoRepository.md +15 -0
  471. package/dist/okf/types/SpannerBackupSchedule.md +15 -0
  472. package/dist/okf/types/SpannerDatabase.md +15 -0
  473. package/dist/okf/types/SpannerInstance.md +15 -0
  474. package/dist/okf/types/Spoke.md +15 -0
  475. package/dist/okf/types/StandardAppVersion.md +15 -0
  476. package/dist/okf/types/StorageBucket.md +21 -0
  477. package/dist/okf/types/StoragetransferJob.md +15 -0
  478. package/dist/okf/types/StoredInfoType.md +15 -0
  479. package/dist/okf/types/Stream.md +15 -0
  480. package/dist/okf/types/Subnet.md +15 -0
  481. package/dist/okf/types/Subnetwork.md +15 -0
  482. package/dist/okf/types/Subscription.md +15 -0
  483. package/dist/okf/types/SyncAuthorization.md +15 -0
  484. package/dist/okf/types/TCPRoute.md +15 -0
  485. package/dist/okf/types/TLSRoute.md +15 -0
  486. package/dist/okf/types/Tag.md +15 -0
  487. package/dist/okf/types/TagBinding.md +15 -0
  488. package/dist/okf/types/TagKey.md +15 -0
  489. package/dist/okf/types/TagTemplate.md +15 -0
  490. package/dist/okf/types/TagValue.md +15 -0
  491. package/dist/okf/types/Target.md +15 -0
  492. package/dist/okf/types/TargetGRPCProxy.md +15 -0
  493. package/dist/okf/types/TargetHTTPProxy.md +15 -0
  494. package/dist/okf/types/TargetHTTPSProxy.md +15 -0
  495. package/dist/okf/types/TargetInstance.md +15 -0
  496. package/dist/okf/types/TargetPool.md +15 -0
  497. package/dist/okf/types/TargetSSLProxy.md +15 -0
  498. package/dist/okf/types/TargetTCPProxy.md +15 -0
  499. package/dist/okf/types/TargetVPNGateway.md +15 -0
  500. package/dist/okf/types/TasksQueue.md +15 -0
  501. package/dist/okf/types/Taxonomy.md +15 -0
  502. package/dist/okf/types/Tenant.md +15 -0
  503. package/dist/okf/types/TenantDefaultSupportedIDPConfig.md +15 -0
  504. package/dist/okf/types/TenantInboundSAMLConfig.md +15 -0
  505. package/dist/okf/types/TenantOAuthIDPConfig.md +15 -0
  506. package/dist/okf/types/Tensorboard.md +15 -0
  507. package/dist/okf/types/URLMap.md +15 -0
  508. package/dist/okf/types/UptimeCheckConfig.md +15 -0
  509. package/dist/okf/types/User.md +15 -0
  510. package/dist/okf/types/VPCNetwork.md +15 -0
  511. package/dist/okf/types/VPNGateway.md +15 -0
  512. package/dist/okf/types/VPNTunnel.md +15 -0
  513. package/dist/okf/types/VertexaiDataset.md +15 -0
  514. package/dist/okf/types/VertexaiEndpoint.md +15 -0
  515. package/dist/okf/types/VertexaiIndex.md +15 -0
  516. package/dist/okf/types/VirtualMachine.md +15 -0
  517. package/dist/okf/types/VmwareengineNetwork.md +15 -0
  518. package/dist/okf/types/VmwareengineNetworkPeering.md +15 -0
  519. package/dist/okf/types/VpnConnection.md +15 -0
  520. package/dist/okf/types/WasmPlugin.md +15 -0
  521. package/dist/okf/types/WebApp.md +15 -0
  522. package/dist/okf/types/Webhook.md +15 -0
  523. package/dist/okf/types/WorkerPool.md +15 -0
  524. package/dist/okf/types/Workflow.md +15 -0
  525. package/dist/okf/types/WorkflowTemplate.md +15 -0
  526. package/dist/okf/types/WorkflowsExecution.md +15 -0
  527. package/dist/okf/types/WorkforcePool.md +15 -0
  528. package/dist/okf/types/WorkforcePoolProvider.md +15 -0
  529. package/dist/okf/types/Workload.md +15 -0
  530. package/dist/okf/types/WorkloadIdentityPool.md +15 -0
  531. package/dist/okf/types/WorkloadIdentityPoolProvider.md +15 -0
  532. package/dist/okf/types/Workstation.md +15 -0
  533. package/dist/okf/types/WorkstationCluster.md +15 -0
  534. package/dist/okf/types/WorkstationConfig.md +15 -0
  535. package/dist/okf/types/Zone.md +19 -0
  536. package/dist/rules/wgc501.ts +73 -0
  537. package/dist/rules/wgc502.ts +41 -0
  538. package/dist/rules/wgc503.ts +56 -0
  539. package/dist/serializer.d.ts +12 -0
  540. package/dist/serializer.d.ts.map +1 -1
  541. package/package.json +2 -2
  542. package/src/composites/index.ts +6 -0
  543. package/src/composites/landing-zone.test.ts +67 -0
  544. package/src/composites/landing-zone.ts +173 -0
  545. package/src/deep-observe-hooks.ts +87 -21
  546. package/src/deep-observe.test.ts +158 -13
  547. package/src/deep-observe.ts +143 -142
  548. package/src/describe-resources.test.ts +46 -1
  549. package/src/describe-resources.ts +64 -13
  550. package/src/governance.test.ts +59 -0
  551. package/src/governance.ts +179 -0
  552. package/src/index.ts +10 -0
  553. package/src/lifecycle-integration.test.ts +3 -3
  554. package/src/lint/audit-catalog.ts +5 -0
  555. package/src/lint/post-synth/index.ts +6 -0
  556. package/src/lint/post-synth/wgc501.test.ts +87 -0
  557. package/src/lint/post-synth/wgc501.ts +73 -0
  558. package/src/lint/post-synth/wgc502.test.ts +64 -0
  559. package/src/lint/post-synth/wgc502.ts +41 -0
  560. package/src/lint/post-synth/wgc503.test.ts +77 -0
  561. package/src/lint/post-synth/wgc503.ts +56 -0
  562. package/src/plugin.test.ts +4 -1
  563. package/src/serializer.ts +6 -1
@@ -0,0 +1,179 @@
1
+ /**
2
+ * GCP governance authoring (#791, epic #787 C1): the desired-state config
3
+ * shape the GCP cloud warden reconciles, and `landingZoneConfig()` — the
4
+ * typed authoring layer that emits it.
5
+ *
6
+ * This is deliberately NOT a composite. The evaluability rules (EVL002/004,
7
+ * #916/#952) require composites to declare a fixed set of resources, so a
8
+ * data-driven folder tree walker cannot be one. The split mirrors the AWS
9
+ * slice (lexicons/aws/src/governance.ts): authoring emits config (this
10
+ * module, arbitrary cardinality); resources for greenfield bootstrap are the
11
+ * fixed-shape composites in `composites/landing-zone.ts`; the warden
12
+ * consumes only the config.
13
+ *
14
+ * GCP has no OrganizationRoot analog — organizations are created through
15
+ * Cloud Identity / Workspace, never through the resource API.
16
+ */
17
+
18
+ // ---------------------------------------------------------------------------
19
+ // The desired-state config shape the GCP cloud warden consumes
20
+ // ---------------------------------------------------------------------------
21
+
22
+ /** An org-policy definition, keyed by name in `GcpGovernanceConfig.orgPolicies`. */
23
+ export interface OrgPolicyConfig {
24
+ description?: string;
25
+ /** The constraint the policy binds, e.g. "iam.disableServiceAccountKeyCreation". */
26
+ constraint: string;
27
+ /** OrgPolicyPolicy `spec.rules` entries (enforce / values.allowedValues / …). */
28
+ rules: Array<Record<string, unknown>>;
29
+ }
30
+
31
+ /** A project declared inside a folder. */
32
+ export interface ProjectConfig {
33
+ name: string;
34
+ /** Defaults to `name`. */
35
+ projectId?: string;
36
+ }
37
+
38
+ /** One folder: its guardrails, projects, and child folders, keyed by display name. */
39
+ export interface FolderConfig {
40
+ /** Names of org policies (from `orgPolicies`) attached to this folder. */
41
+ orgPolicies?: string[];
42
+ projects?: ProjectConfig[];
43
+ children?: Record<string, FolderConfig>;
44
+ }
45
+
46
+ /**
47
+ * The desired-state governance tree for one GCP organization. This is the
48
+ * shape the GCP cloud warden loads as config — the GCP counterpart of
49
+ * `AwsGovernanceConfig`. Cycles map onto the governance verbs (#790): the
50
+ * folder/project tree is `org-unit`, org policies are `policy-guardrail`,
51
+ * audit configuration is `audit-sink`.
52
+ */
53
+ export interface GcpGovernanceConfig {
54
+ organization: {
55
+ /** Org-policy names enforced at the organization root. */
56
+ orgPolicies?: string[];
57
+ };
58
+ /** Top-level folders under the organization, keyed by display name. */
59
+ folders: Record<string, FolderConfig>;
60
+ /** Org-policy definitions, keyed by the names the tree attaches. */
61
+ orgPolicies: Record<string, OrgPolicyConfig>;
62
+ /** Where audit evidence flows. */
63
+ auditSinks?: {
64
+ auditConfig?: { service: string; logTypes: string[] };
65
+ };
66
+ }
67
+
68
+ // ---------------------------------------------------------------------------
69
+ // Baseline guardrails (shared with the bootstrap composites)
70
+ // ---------------------------------------------------------------------------
71
+
72
+ export const DISABLE_SA_KEY_CREATION: OrgPolicyConfig = {
73
+ description: "User-managed service account keys cannot be created.",
74
+ constraint: "iam.disableServiceAccountKeyCreation",
75
+ rules: [{ enforce: "TRUE" }],
76
+ };
77
+
78
+ export const SKIP_DEFAULT_NETWORK: OrgPolicyConfig = {
79
+ description: "New projects do not get the auto-mode default VPC.",
80
+ constraint: "compute.skipDefaultNetworkCreation",
81
+ rules: [{ enforce: "TRUE" }],
82
+ };
83
+
84
+ /** Allow resource creation only in `locations` (value-group syntax like "in:us-locations" works too). */
85
+ export function resourceLocationRestriction(locations: readonly string[]): OrgPolicyConfig {
86
+ return {
87
+ description: `Resources may only be created in [${locations.join(", ")}].`,
88
+ constraint: "gcp.resourceLocations",
89
+ rules: [{ values: { allowedValues: [...locations] } }],
90
+ };
91
+ }
92
+
93
+ /** The audit-log coverage `auditAllServices` declares. */
94
+ export const AUDIT_ALL_SERVICES = {
95
+ service: "allServices",
96
+ logTypes: ["ADMIN_READ", "DATA_READ", "DATA_WRITE"],
97
+ } as const;
98
+
99
+ /**
100
+ * The recommended foundation folder structure. Exported so callers can
101
+ * extend it rather than restate it.
102
+ */
103
+ export const FOUNDATION_FOLDERS: Record<string, FolderConfig> = {
104
+ Security: {},
105
+ Infrastructure: {},
106
+ Sandbox: {},
107
+ Workloads: {},
108
+ };
109
+
110
+ // ---------------------------------------------------------------------------
111
+ // Authoring
112
+ // ---------------------------------------------------------------------------
113
+
114
+ export interface LandingZoneConfigProps {
115
+ /**
116
+ * Start from the recommended foundation: Security / Infrastructure /
117
+ * Sandbox / Workloads folders with `disable-sa-key-creation` and
118
+ * `skip-default-network` enforced at the organization root. Default true;
119
+ * your `folders`/`orgPolicies` merge over it (same-name keys win).
120
+ */
121
+ foundation?: boolean;
122
+ /** Adds a root resource-location org policy allowing only these locations. */
123
+ allowedLocations?: string[];
124
+ /** Folder tree, merged over the foundation's. Greenfield (full tree) and brownfield (partial subtree) are both just this map. */
125
+ folders?: Record<string, FolderConfig>;
126
+ /** Org-policy definitions, merged over the foundation's. */
127
+ orgPolicies?: Record<string, OrgPolicyConfig>;
128
+ /** Extra org-policy names to enforce at the organization root. */
129
+ rootOrgPolicies?: string[];
130
+ /** Declare organization-wide audit logging (allServices, all three log types). */
131
+ auditAllServices?: boolean;
132
+ }
133
+
134
+ /**
135
+ * Author the desired-state tree the GCP cloud warden reconciles. Pure.
136
+ * Throws when the tree attaches an org-policy name with no definition; only
137
+ * policies the tree actually attaches are included in the output.
138
+ */
139
+ export function landingZoneConfig(props: LandingZoneConfigProps = {}): GcpGovernanceConfig {
140
+ const foundation = props.foundation ?? true;
141
+ const orgPolicies: Record<string, OrgPolicyConfig> = {
142
+ ...(foundation
143
+ ? { "disable-sa-key-creation": DISABLE_SA_KEY_CREATION, "skip-default-network": SKIP_DEFAULT_NETWORK }
144
+ : {}),
145
+ ...(props.allowedLocations?.length
146
+ ? { "resource-location-restriction": resourceLocationRestriction(props.allowedLocations) }
147
+ : {}),
148
+ ...props.orgPolicies,
149
+ };
150
+ const folders = { ...(foundation ? FOUNDATION_FOLDERS : {}), ...props.folders };
151
+ const rootOrgPolicies = [
152
+ ...(foundation ? ["disable-sa-key-creation", "skip-default-network"] : []),
153
+ ...(props.allowedLocations?.length ? ["resource-location-restriction"] : []),
154
+ ...(props.rootOrgPolicies ?? []),
155
+ ];
156
+
157
+ const attached = new Set(rootOrgPolicies);
158
+ const collect = (tree: Record<string, FolderConfig>): void => {
159
+ for (const node of Object.values(tree)) {
160
+ for (const p of node.orgPolicies ?? []) attached.add(p);
161
+ if (node.children) collect(node.children);
162
+ }
163
+ };
164
+ collect(folders);
165
+ for (const name of attached) {
166
+ if (!orgPolicies[name]) {
167
+ throw new Error(`landingZoneConfig: org policy "${name}" is attached but not defined in orgPolicies`);
168
+ }
169
+ }
170
+
171
+ return {
172
+ organization: rootOrgPolicies.length ? { orgPolicies: rootOrgPolicies } : {},
173
+ folders,
174
+ orgPolicies: Object.fromEntries(Object.entries(orgPolicies).filter(([n]) => attached.has(n))),
175
+ ...(props.auditAllServices
176
+ ? { auditSinks: { auditConfig: { service: AUDIT_ALL_SERVICES.service, logTypes: [...AUDIT_ALL_SERVICES.logTypes] } } }
177
+ : {}),
178
+ };
179
+ }
package/src/index.ts CHANGED
@@ -23,6 +23,7 @@ export {
23
23
  GkeCluster, CloudRunServiceComposite, CloudSqlInstance, GcsBucket, VpcNetwork,
24
24
  PubSubPipeline, CloudFunctionWithTrigger, PrivateService, ManagedCertificate, SecureProject,
25
25
  MemorystoreRedis, MultiRegionVpc, GkeCrdbRegion,
26
+ GovernanceFoundation, LocationRestriction, OrganizationAuditConfig,
26
27
  } from "./composites/index";
27
28
  export type {
28
29
  GkeClusterProps,
@@ -38,8 +39,17 @@ export type {
38
39
  MemorystoreRedisProps,
39
40
  MultiRegionVpcConfig, MultiRegionVpcRegion,
40
41
  GkeCrdbRegionConfig, GkeCrdbRegionNodeConfig,
42
+ GovernanceFoundationProps, LocationRestrictionProps, OrganizationAuditConfigProps,
41
43
  } from "./composites/index";
42
44
 
45
+ // GCP governance authoring (#791): the desired-state config the GCP cloud
46
+ // warden reconciles, and the typed landing-zone authoring layer.
47
+ export {
48
+ landingZoneConfig, resourceLocationRestriction,
49
+ DISABLE_SA_KEY_CREATION, SKIP_DEFAULT_NETWORK, AUDIT_ALL_SERVICES, FOUNDATION_FOLDERS,
50
+ } from "./governance";
51
+ export type { GcpGovernanceConfig, LandingZoneConfigProps, FolderConfig, OrgPolicyConfig, ProjectConfig } from "./governance";
52
+
43
53
  // IAM role constants
44
54
  export { StorageRoles, ComputeRoles, ContainerRoles, IAMRoles, SQLRoles, RunRoles, PubSubRoles } from "./actions/index";
45
55
 
@@ -2,9 +2,9 @@
2
2
  * Cross-lexicon lifecycle integration (#163) — GCP row.
3
3
  *
4
4
  * Drives the REAL gcpPlugin through core's live-import driver and the changeset
5
- * path. Two edges are mocked, because since #1209 the plugin has two
6
- * transports: `describeResources` reads GCP REST (stubbed `fetch`), while
7
- * `exportResources` and the deep reader still go through Config Connector
5
+ * path. Two edges are mocked, because the plugin has two transports:
6
+ * `describeResources` and the deep reader read GCP REST (stubbed `fetch`,
7
+ * #1209), while `exportResources` still goes through Config Connector
8
8
  * (stubbed `exec`).
9
9
  */
10
10
  import { describe, test, expect, vi, beforeEach } from "vitest";
@@ -30,4 +30,9 @@ export const gcpAuditCatalog: Record<string, RuleMeta> = {
30
30
  WGC401: auditRule("WGC401", "merge-worthy", "guidance", "Unknown field in resource spec", "Remove the unknown spec field.", { category: "correctness" }),
31
31
  WGC402: auditRule("WGC402", "merge-worthy", "guidance", "Missing required spec field", "Add the required spec field.", { category: "correctness" }),
32
32
  WGC403: auditRule("WGC403", "merge-worthy", "guidance", "Spec field has wrong type/structure", "Fix the field's type/structure.", { category: "correctness" }),
33
+
34
+ // #793 — governance posture regressions (epic #787 C3).
35
+ WGC501: auditRule("WGC501", "merge-worthy", "guidance", "Org Policy guardrail not enforced", "Enable enforce on the rule (or remove the policy deliberately) — a disabled org policy constrains nothing.", { authority: [GCP_SEC] }),
36
+ WGC502: auditRule("WGC502", "merge-worthy", "guidance", "Org Policy guardrail defines no rules", "Add rules to the OrgPolicyPolicy — without them the constraint binds nothing.", { authority: [GCP_SEC] }),
37
+ WGC503: auditRule("WGC503", "merge-worthy", "guidance", "Audit logging dropped or scoped down", "Keep auditLogConfigs populated and remove exemptedMembers from the IAMAuditConfig.", { authority: [GCP_SEC] }),
33
38
  };
@@ -23,6 +23,9 @@ import { wgc303 } from "./wgc303";
23
23
  import { wgc401 } from "./wgc401";
24
24
  import { wgc402 } from "./wgc402";
25
25
  import { wgc403 } from "./wgc403";
26
+ import { wgc501 } from "./wgc501";
27
+ import { wgc502 } from "./wgc502";
28
+ import { wgc503 } from "./wgc503";
26
29
 
27
30
  export const postSynthChecks: PostSynthCheck[] = [
28
31
  wgc101,
@@ -48,4 +51,7 @@ export const postSynthChecks: PostSynthCheck[] = [
48
51
  wgc401,
49
52
  wgc402,
50
53
  wgc403,
54
+ wgc501,
55
+ wgc502,
56
+ wgc503,
51
57
  ];
@@ -0,0 +1,87 @@
1
+ import { describe, test, expect } from "vitest";
2
+ import type { PostSynthContext } from "@intentius/chant/lint/post-synth";
3
+ import { wgc501 } from "./wgc501";
4
+
5
+ function makeCtx(yaml: string): PostSynthContext {
6
+ const outputs = new Map<string, string>([["gcp", yaml]]);
7
+ return {
8
+ outputs,
9
+ entities: new Map(),
10
+ buildResult: { outputs, entities: new Map(), warnings: [], errors: [], sourceFileCount: 0 },
11
+ };
12
+ }
13
+
14
+ describe("WGC501: org policy guardrail not enforced", () => {
15
+ test("flags a rule with enforce disabled (serializer's nested spec.spec)", () => {
16
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
17
+ kind: OrgPolicyPolicy
18
+ metadata:
19
+ name: disable-sa-key-creation
20
+ spec:
21
+ resourceID: iam.disableServiceAccountKeyCreation
22
+ organizationRef:
23
+ external: "123456789012"
24
+ spec:
25
+ rules:
26
+ - enforce: "FALSE"
27
+ `;
28
+ const diags = wgc501.check(makeCtx(yaml));
29
+ expect(diags).toHaveLength(1);
30
+ expect(diags[0].checkId).toBe("WGC501");
31
+ expect(diags[0].severity).toBe("error");
32
+ expect(diags[0].entity).toBe("disable-sa-key-creation");
33
+ });
34
+
35
+ test("flags boolean false and flat spec.rules", () => {
36
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
37
+ kind: OrgPolicyPolicy
38
+ metadata:
39
+ name: skip-default-network
40
+ spec:
41
+ rules:
42
+ - enforce: false
43
+ `;
44
+ expect(wgc501.check(makeCtx(yaml))).toHaveLength(1);
45
+ });
46
+
47
+ test("flags a policy that resets the constraint to default", () => {
48
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
49
+ kind: OrgPolicyPolicy
50
+ metadata:
51
+ name: reset-policy
52
+ spec:
53
+ spec:
54
+ reset: true
55
+ `;
56
+ const diags = wgc501.check(makeCtx(yaml));
57
+ expect(diags).toHaveLength(1);
58
+ expect(diags[0].message).toContain("reset");
59
+ });
60
+
61
+ test("no diagnostic for an enforced policy", () => {
62
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
63
+ kind: OrgPolicyPolicy
64
+ metadata:
65
+ name: disable-sa-key-creation
66
+ spec:
67
+ spec:
68
+ rules:
69
+ - enforce: "TRUE"
70
+ - values:
71
+ allowedValues:
72
+ - in:eu-locations
73
+ `;
74
+ expect(wgc501.check(makeCtx(yaml))).toHaveLength(0);
75
+ });
76
+
77
+ test("ignores other kinds", () => {
78
+ const yaml = `apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
79
+ kind: ResourcemanagerFolder
80
+ metadata:
81
+ name: security
82
+ spec:
83
+ displayName: Security
84
+ `;
85
+ expect(wgc501.check(makeCtx(yaml))).toHaveLength(0);
86
+ });
87
+ });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * WGC501: Org Policy Guardrail Not Enforced (#793, epic #787 C3)
3
+ *
4
+ * Flags OrgPolicyPolicy resources whose rules switch enforcement off or that
5
+ * reset the constraint to its default. A disabled org policy is the GCP
6
+ * shape of a weakened guardrail: the constraint stays visible in the tree
7
+ * while constraining nothing.
8
+ */
9
+
10
+ import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
11
+ import { parseGcpManifests, getResourceName, type GcpManifest } from "./gcp-helpers";
12
+
13
+ /**
14
+ * OrgPolicyPolicy mirrors the API's own `spec` inside the CRD spec, so rules
15
+ * live at `spec.spec.rules`; accept `spec.rules` too for hand-written manifests.
16
+ */
17
+ export function orgPolicySpec(manifest: GcpManifest): Record<string, unknown> {
18
+ const outer = manifest.spec ?? {};
19
+ const inner = outer.spec;
20
+ return typeof inner === "object" && inner !== null ? (inner as Record<string, unknown>) : outer;
21
+ }
22
+
23
+ export function orgPolicyRules(manifest: GcpManifest): Array<Record<string, unknown>> {
24
+ const rules = orgPolicySpec(manifest).rules;
25
+ return Array.isArray(rules) ? (rules as Array<Record<string, unknown>>) : [];
26
+ }
27
+
28
+ function isDisabled(rule: Record<string, unknown>): boolean {
29
+ return rule.enforce === false || rule.enforce === "FALSE";
30
+ }
31
+
32
+ export const wgc501: PostSynthCheck = {
33
+ id: "WGC501",
34
+ description: "Org Policy guardrail not enforced — a disabled policy constrains nothing",
35
+
36
+ check(ctx: PostSynthContext): PostSynthDiagnostic[] {
37
+ const diagnostics: PostSynthDiagnostic[] = [];
38
+
39
+ for (const [, output] of ctx.outputs) {
40
+ if (typeof output !== "string") continue;
41
+
42
+ for (const manifest of parseGcpManifests(output)) {
43
+ if (manifest.kind !== "OrgPolicyPolicy") continue;
44
+ const name = getResourceName(manifest);
45
+
46
+ if (orgPolicySpec(manifest).reset === true) {
47
+ diagnostics.push({
48
+ checkId: "WGC501",
49
+ severity: "error",
50
+ message: `OrgPolicyPolicy "${name}" resets the constraint to its default — the guardrail is switched off`,
51
+ entity: name,
52
+ lexicon: "gcp",
53
+ });
54
+ continue;
55
+ }
56
+
57
+ for (const rule of orgPolicyRules(manifest)) {
58
+ if (isDisabled(rule)) {
59
+ diagnostics.push({
60
+ checkId: "WGC501",
61
+ severity: "error",
62
+ message: `OrgPolicyPolicy "${name}" has a rule with enforce disabled — the guardrail is declared but not enforced`,
63
+ entity: name,
64
+ lexicon: "gcp",
65
+ });
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ return diagnostics;
72
+ },
73
+ };
@@ -0,0 +1,64 @@
1
+ import { describe, test, expect } from "vitest";
2
+ import type { PostSynthContext } from "@intentius/chant/lint/post-synth";
3
+ import { wgc502 } from "./wgc502";
4
+
5
+ function makeCtx(yaml: string): PostSynthContext {
6
+ const outputs = new Map<string, string>([["gcp", yaml]]);
7
+ return {
8
+ outputs,
9
+ entities: new Map(),
10
+ buildResult: { outputs, entities: new Map(), warnings: [], errors: [], sourceFileCount: 0 },
11
+ };
12
+ }
13
+
14
+ describe("WGC502: org policy guardrail defines no rules", () => {
15
+ test("flags a policy with no rules", () => {
16
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
17
+ kind: OrgPolicyPolicy
18
+ metadata:
19
+ name: hollow-guardrail
20
+ spec:
21
+ resourceID: iam.disableServiceAccountKeyCreation
22
+ organizationRef:
23
+ external: "123456789012"
24
+ `;
25
+ const diags = wgc502.check(makeCtx(yaml));
26
+ expect(diags).toHaveLength(1);
27
+ expect(diags[0].checkId).toBe("WGC502");
28
+ expect(diags[0].severity).toBe("error");
29
+ expect(diags[0].entity).toBe("hollow-guardrail");
30
+ });
31
+
32
+ test("flags an empty rules array", () => {
33
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
34
+ kind: OrgPolicyPolicy
35
+ metadata:
36
+ name: empty-rules
37
+ spec:
38
+ spec:
39
+ rules: []
40
+ `;
41
+ expect(wgc502.check(makeCtx(yaml))).toHaveLength(1);
42
+ });
43
+
44
+ test("no diagnostic when rules exist or the policy resets to default", () => {
45
+ const yaml = `apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
46
+ kind: OrgPolicyPolicy
47
+ metadata:
48
+ name: enforced
49
+ spec:
50
+ spec:
51
+ rules:
52
+ - enforce: "TRUE"
53
+ ---
54
+ apiVersion: orgpolicy.cnrm.cloud.google.com/v1beta1
55
+ kind: OrgPolicyPolicy
56
+ metadata:
57
+ name: reset-policy
58
+ spec:
59
+ spec:
60
+ reset: true
61
+ `;
62
+ expect(wgc502.check(makeCtx(yaml))).toHaveLength(0);
63
+ });
64
+ });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WGC502: Org Policy Guardrail Defines No Rules (#793, epic #787 C3)
3
+ *
4
+ * Flags OrgPolicyPolicy resources with no rules (and no reset). A rule-less
5
+ * org policy binds a constraint to nothing — the usual leftover of a
6
+ * guardrail whose rules were removed while the policy object was kept.
7
+ */
8
+
9
+ import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
10
+ import { parseGcpManifests, getResourceName } from "./gcp-helpers";
11
+ import { orgPolicyRules, orgPolicySpec } from "./wgc501";
12
+
13
+ export const wgc502: PostSynthCheck = {
14
+ id: "WGC502",
15
+ description: "Org Policy guardrail defines no rules — it binds its constraint to nothing",
16
+
17
+ check(ctx: PostSynthContext): PostSynthDiagnostic[] {
18
+ const diagnostics: PostSynthDiagnostic[] = [];
19
+
20
+ for (const [, output] of ctx.outputs) {
21
+ if (typeof output !== "string") continue;
22
+
23
+ for (const manifest of parseGcpManifests(output)) {
24
+ if (manifest.kind !== "OrgPolicyPolicy") continue;
25
+ if (orgPolicySpec(manifest).reset === true) continue; // WGC501's finding
26
+ if (orgPolicyRules(manifest).length > 0) continue;
27
+
28
+ const name = getResourceName(manifest);
29
+ diagnostics.push({
30
+ checkId: "WGC502",
31
+ severity: "error",
32
+ message: `OrgPolicyPolicy "${name}" defines no rules — the guardrail constrains nothing`,
33
+ entity: name,
34
+ lexicon: "gcp",
35
+ });
36
+ }
37
+ }
38
+
39
+ return diagnostics;
40
+ },
41
+ };
@@ -0,0 +1,77 @@
1
+ import { describe, test, expect } from "vitest";
2
+ import type { PostSynthContext } from "@intentius/chant/lint/post-synth";
3
+ import { wgc503 } from "./wgc503";
4
+
5
+ function makeCtx(yaml: string): PostSynthContext {
6
+ const outputs = new Map<string, string>([["gcp", yaml]]);
7
+ return {
8
+ outputs,
9
+ entities: new Map(),
10
+ buildResult: { outputs, entities: new Map(), warnings: [], errors: [], sourceFileCount: 0 },
11
+ };
12
+ }
13
+
14
+ describe("WGC503: audit logging dropped or scoped down", () => {
15
+ test("flags an IAMAuditConfig with no auditLogConfigs", () => {
16
+ const yaml = `apiVersion: iam.cnrm.cloud.google.com/v1beta1
17
+ kind: IAMAuditConfig
18
+ metadata:
19
+ name: audit-config
20
+ spec:
21
+ resourceRef:
22
+ kind: Organization
23
+ external: organizations/123456789012
24
+ service: allServices
25
+ `;
26
+ const diags = wgc503.check(makeCtx(yaml));
27
+ expect(diags).toHaveLength(1);
28
+ expect(diags[0].checkId).toBe("WGC503");
29
+ expect(diags[0].severity).toBe("error");
30
+ expect(diags[0].message).toContain("captures nothing");
31
+ });
32
+
33
+ test("flags exempted members", () => {
34
+ const yaml = `apiVersion: iam.cnrm.cloud.google.com/v1beta1
35
+ kind: IAMAuditConfig
36
+ metadata:
37
+ name: audit-config
38
+ spec:
39
+ service: allServices
40
+ auditLogConfigs:
41
+ - logType: ADMIN_READ
42
+ - logType: DATA_WRITE
43
+ exemptedMembers:
44
+ - user:cto@acme.dev
45
+ `;
46
+ const diags = wgc503.check(makeCtx(yaml));
47
+ expect(diags).toHaveLength(1);
48
+ expect(diags[0].message).toContain("DATA_WRITE");
49
+ expect(diags[0].message).toContain("exempts");
50
+ });
51
+
52
+ test("no diagnostic for full coverage without exemptions", () => {
53
+ const yaml = `apiVersion: iam.cnrm.cloud.google.com/v1beta1
54
+ kind: IAMAuditConfig
55
+ metadata:
56
+ name: audit-config
57
+ spec:
58
+ service: allServices
59
+ auditLogConfigs:
60
+ - logType: ADMIN_READ
61
+ - logType: DATA_READ
62
+ - logType: DATA_WRITE
63
+ `;
64
+ expect(wgc503.check(makeCtx(yaml))).toHaveLength(0);
65
+ });
66
+
67
+ test("ignores other kinds", () => {
68
+ const yaml = `apiVersion: storage.cnrm.cloud.google.com/v1beta1
69
+ kind: StorageBucket
70
+ metadata:
71
+ name: my-bucket
72
+ spec:
73
+ location: US
74
+ `;
75
+ expect(wgc503.check(makeCtx(yaml))).toHaveLength(0);
76
+ });
77
+ });
@@ -0,0 +1,56 @@
1
+ /**
2
+ * WGC503: Audit Logging Dropped or Scoped Down (#793, epic #787 C3)
3
+ *
4
+ * Flags IAMAuditConfig resources that capture nothing (no auditLogConfigs)
5
+ * or that carve identities out of the audit trail via exemptedMembers.
6
+ * WGC301 reports the absence of any IAMAuditConfig as hygiene; this check
7
+ * covers the declared-but-weakened sink, which is merge-worthy.
8
+ */
9
+
10
+ import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
11
+ import { parseGcpManifests, getResourceName, getSpec } from "./gcp-helpers";
12
+
13
+ export const wgc503: PostSynthCheck = {
14
+ id: "WGC503",
15
+ description: "IAMAuditConfig captures nothing or exempts members — the audit sink is scoped down",
16
+
17
+ check(ctx: PostSynthContext): PostSynthDiagnostic[] {
18
+ const diagnostics: PostSynthDiagnostic[] = [];
19
+
20
+ for (const [, output] of ctx.outputs) {
21
+ if (typeof output !== "string") continue;
22
+
23
+ for (const manifest of parseGcpManifests(output)) {
24
+ if (manifest.kind !== "IAMAuditConfig") continue;
25
+ const name = getResourceName(manifest);
26
+ const configs = getSpec(manifest)?.auditLogConfigs;
27
+
28
+ if (!Array.isArray(configs) || configs.length === 0) {
29
+ diagnostics.push({
30
+ checkId: "WGC503",
31
+ severity: "error",
32
+ message: `IAMAuditConfig "${name}" has no auditLogConfigs — the audit sink is declared but captures nothing`,
33
+ entity: name,
34
+ lexicon: "gcp",
35
+ });
36
+ continue;
37
+ }
38
+
39
+ for (const config of configs as Array<Record<string, unknown>>) {
40
+ const exempted = config.exemptedMembers;
41
+ if (Array.isArray(exempted) && exempted.length > 0) {
42
+ diagnostics.push({
43
+ checkId: "WGC503",
44
+ severity: "error",
45
+ message: `IAMAuditConfig "${name}" exempts members from ${String(config.logType ?? "audit")} logging — audit evidence is scoped down`,
46
+ entity: name,
47
+ lexicon: "gcp",
48
+ });
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ return diagnostics;
55
+ },
56
+ };
@@ -30,7 +30,7 @@ describe("gcpPlugin", () => {
30
30
 
31
31
  test("returns post-synth checks", () => {
32
32
  const checks = gcpPlugin.postSynthChecks!();
33
- expect(checks).toHaveLength(23);
33
+ expect(checks).toHaveLength(26);
34
34
  const ids = checks.map((c) => c.id);
35
35
  expect(ids).toContain("WGC101");
36
36
  expect(ids).toContain("WGC102");
@@ -55,6 +55,9 @@ describe("gcpPlugin", () => {
55
55
  expect(ids).toContain("WGC401");
56
56
  expect(ids).toContain("WGC402");
57
57
  expect(ids).toContain("WGC403");
58
+ expect(ids).toContain("WGC501");
59
+ expect(ids).toContain("WGC502");
60
+ expect(ids).toContain("WGC503");
58
61
  });
59
62
 
60
63
  // ── Intrinsics / pseudo-parameters ─────────────────────────────────
package/src/serializer.ts CHANGED
@@ -43,8 +43,13 @@ function getGVKMap(): Record<string, GVKEntry> {
43
43
 
44
44
  /**
45
45
  * Resolve entityType to apiVersion and kind.
46
+ *
47
+ * Exported for the read paths (./describe-resources.ts): the CNRM kind is the
48
+ * key into the applier's mapper table, and the packaged map is the only place
49
+ * that knows `GCP::Pubsub::Topic` is `PubSubTopic` rather than the naive
50
+ * `PubsubTopic` the fallback derivation would produce.
46
51
  */
47
- function resolveGVK(entityType: string): { apiVersion: string; kind: string } | null {
52
+ export function resolveGVK(entityType: string): { apiVersion: string; kind: string } | null {
48
53
  const gvkMap = getGVKMap();
49
54
 
50
55
  for (const entry of Object.values(gvkMap)) {