@intentius/chant-lexicon-k8s 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 (156) hide show
  1. package/dist/components/kubectl-apply.d.ts +5 -0
  2. package/dist/components/kubectl-apply.d.ts.map +1 -1
  3. package/dist/composites/flux-app.d.ts +12 -0
  4. package/dist/composites/flux-app.d.ts.map +1 -1
  5. package/dist/composites/index.d.ts +6 -0
  6. package/dist/composites/index.d.ts.map +1 -1
  7. package/dist/composites/inference-service.d.ts +86 -0
  8. package/dist/composites/inference-service.d.ts.map +1 -0
  9. package/dist/composites/model.d.ts +80 -0
  10. package/dist/composites/model.d.ts.map +1 -0
  11. package/dist/composites/vllm-serving-runtime.d.ts +100 -0
  12. package/dist/composites/vllm-serving-runtime.d.ts.map +1 -0
  13. package/dist/crd/crd-sources.d.ts.map +1 -1
  14. package/dist/deep-observe-hooks.d.ts.map +1 -1
  15. package/dist/generated/index.d.ts +167 -40
  16. package/dist/generated/index.d.ts.map +1 -1
  17. package/dist/group-namespace.d.ts.map +1 -1
  18. package/dist/index.d.ts +3 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/integrity.json +13 -5
  21. package/dist/kube/apply.d.ts.map +1 -1
  22. package/dist/lint/audit-catalog.d.ts.map +1 -1
  23. package/dist/lint/post-synth/index.d.ts.map +1 -1
  24. package/dist/lint/post-synth/k8s-helpers.d.ts +28 -1
  25. package/dist/lint/post-synth/k8s-helpers.d.ts.map +1 -1
  26. package/dist/lint/post-synth/sops-helpers.d.ts +38 -0
  27. package/dist/lint/post-synth/sops-helpers.d.ts.map +1 -0
  28. package/dist/lint/post-synth/wk8404.d.ts +12 -0
  29. package/dist/lint/post-synth/wk8404.d.ts.map +1 -0
  30. package/dist/lint/post-synth/wk8405.d.ts +13 -0
  31. package/dist/lint/post-synth/wk8405.d.ts.map +1 -0
  32. package/dist/lint/post-synth/wk8406.d.ts +12 -0
  33. package/dist/lint/post-synth/wk8406.d.ts.map +1 -0
  34. package/dist/lint/post-synth/wk8407.d.ts +21 -0
  35. package/dist/lint/post-synth/wk8407.d.ts.map +1 -0
  36. package/dist/lint/post-synth/wk8503.d.ts +39 -0
  37. package/dist/lint/post-synth/wk8503.d.ts.map +1 -0
  38. package/dist/lint/post-synth/wk8504.d.ts +28 -0
  39. package/dist/lint/post-synth/wk8504.d.ts.map +1 -0
  40. package/dist/lint/post-synth/wk8505.d.ts +28 -0
  41. package/dist/lint/post-synth/wk8505.d.ts.map +1 -0
  42. package/dist/manifest.json +1 -1
  43. package/dist/meta.json +1039 -68
  44. package/dist/okf/index.md +26 -2
  45. package/dist/okf/rules/FLUX002.md +0 -1
  46. package/dist/okf/rules/WK8404.md +11 -0
  47. package/dist/okf/rules/WK8405.md +17 -0
  48. package/dist/okf/rules/WK8406.md +11 -0
  49. package/dist/okf/rules/WK8407.md +15 -0
  50. package/dist/okf/rules/WK8503.md +17 -0
  51. package/dist/okf/rules/WK8504.md +11 -0
  52. package/dist/okf/rules/WK8505.md +15 -0
  53. package/dist/okf/types/AWSClusterControllerIdentity.md +14 -0
  54. package/dist/okf/types/AWSManagedCluster.md +14 -0
  55. package/dist/okf/types/AWSManagedControlPlane.md +14 -0
  56. package/dist/okf/types/AWSManagedMachinePool.md +14 -0
  57. package/dist/okf/types/CAPICluster.md +14 -0
  58. package/dist/okf/types/Certificate.md +1 -0
  59. package/dist/okf/types/ClusterResourceSet.md +14 -0
  60. package/dist/okf/types/ClusterServingRuntime.md +14 -0
  61. package/dist/okf/types/{Cluster.md → CnpgCluster.md} +2 -2
  62. package/dist/okf/types/DBInstance.md +14 -0
  63. package/dist/okf/types/{Bucket.md → FluxBucket.md} +2 -6
  64. package/dist/okf/types/HelmChartProxy.md +14 -0
  65. package/dist/okf/types/IamRole.md +14 -0
  66. package/dist/okf/types/InferenceService.md +19 -0
  67. package/dist/okf/types/InfisicalDynamicSecret.md +4 -0
  68. package/dist/okf/types/InfisicalSecret.md +4 -0
  69. package/dist/okf/types/Kustomization.md +1 -0
  70. package/dist/okf/types/MachinePool.md +14 -0
  71. package/dist/okf/types/PDB.md +1 -0
  72. package/dist/okf/types/PodIdentityAssociation.md +14 -0
  73. package/dist/okf/types/Policy.md +14 -0
  74. package/dist/okf/types/S3Bucket.md +14 -0
  75. package/dist/okf/types/ServingRuntime.md +14 -0
  76. package/dist/okf/types/StatefulSet.md +1 -0
  77. package/dist/okf/types/User.md +14 -0
  78. package/dist/op/activities/ensure-secret.d.ts +41 -0
  79. package/dist/op/activities/ensure-secret.d.ts.map +1 -0
  80. package/dist/op/activities/index.d.ts +2 -0
  81. package/dist/op/activities/index.d.ts.map +1 -1
  82. package/dist/op/activities/kubectl.d.ts +9 -0
  83. package/dist/op/activities/kubectl.d.ts.map +1 -1
  84. package/dist/op/activities/wait-for-ready.d.ts.map +1 -1
  85. package/dist/plugin.d.ts.map +1 -1
  86. package/dist/rules/k8s-helpers.ts +55 -1
  87. package/dist/rules/sops-helpers.ts +76 -0
  88. package/dist/rules/wk8404.ts +55 -0
  89. package/dist/rules/wk8405.ts +88 -0
  90. package/dist/rules/wk8406.ts +60 -0
  91. package/dist/rules/wk8407.ts +71 -0
  92. package/dist/rules/wk8503.ts +220 -0
  93. package/dist/rules/wk8504.ts +51 -0
  94. package/dist/rules/wk8505.ts +63 -0
  95. package/dist/secret-labels.d.ts +31 -0
  96. package/dist/secret-labels.d.ts.map +1 -0
  97. package/dist/secret-store.d.ts +73 -0
  98. package/dist/secret-store.d.ts.map +1 -0
  99. package/dist/serializer.d.ts.map +1 -1
  100. package/dist/sops/encrypted-secret-file.d.ts +52 -0
  101. package/dist/sops/encrypted-secret-file.d.ts.map +1 -0
  102. package/dist/sops/entity.d.ts +31 -0
  103. package/dist/sops/entity.d.ts.map +1 -0
  104. package/dist/teardown.d.ts.map +1 -1
  105. package/dist/types/index.d.ts +261 -9
  106. package/package.json +4 -4
  107. package/src/components/kubectl-apply.ts +5 -0
  108. package/src/composites/composites.test.ts +273 -0
  109. package/src/composites/flux-app.ts +23 -0
  110. package/src/composites/index.ts +11 -0
  111. package/src/composites/inference-service.ts +140 -0
  112. package/src/composites/model.ts +150 -0
  113. package/src/composites/vllm-serving-runtime.test.ts +167 -0
  114. package/src/composites/vllm-serving-runtime.ts +196 -0
  115. package/src/crd/cnpg.test.ts +8 -3
  116. package/src/crd/crd-sources.ts +183 -0
  117. package/src/crd/parser.test.ts +14 -0
  118. package/src/deep-observe-hooks.ts +24 -0
  119. package/src/deep-observe.test.ts +89 -0
  120. package/src/generated/index.d.ts +261 -9
  121. package/src/generated/index.ts +167 -40
  122. package/src/generated/lexicon-k8s.json +1039 -68
  123. package/src/generated/operations.json +272 -0
  124. package/src/group-namespace.test.ts +31 -0
  125. package/src/group-namespace.ts +13 -0
  126. package/src/index.ts +6 -0
  127. package/src/kube/apply.ts +5 -0
  128. package/src/lint/audit-catalog.ts +7 -0
  129. package/src/lint/post-synth/index.ts +14 -0
  130. package/src/lint/post-synth/k8s-helpers.ts +55 -1
  131. package/src/lint/post-synth/post-synth.test.ts +826 -0
  132. package/src/lint/post-synth/sops-helpers.ts +76 -0
  133. package/src/lint/post-synth/wk8404.ts +55 -0
  134. package/src/lint/post-synth/wk8405.ts +88 -0
  135. package/src/lint/post-synth/wk8406.ts +60 -0
  136. package/src/lint/post-synth/wk8407.ts +71 -0
  137. package/src/lint/post-synth/wk8503.ts +220 -0
  138. package/src/lint/post-synth/wk8504.ts +51 -0
  139. package/src/lint/post-synth/wk8505.ts +63 -0
  140. package/src/op/activities/ensure-secret.ts +71 -0
  141. package/src/op/activities/index.ts +7 -0
  142. package/src/op/activities/kubectl.test.ts +32 -0
  143. package/src/op/activities/kubectl.ts +28 -5
  144. package/src/op/activities/wait-for-ready.test.ts +34 -0
  145. package/src/op/activities/wait-for-ready.ts +26 -0
  146. package/src/plugin.ts +21 -2
  147. package/src/secret-labels.ts +36 -0
  148. package/src/secret-store.test.ts +184 -0
  149. package/src/secret-store.ts +165 -0
  150. package/src/serializer.ts +33 -2
  151. package/src/sops/encrypted-secret-file.test.ts +333 -0
  152. package/src/sops/encrypted-secret-file.ts +264 -0
  153. package/src/sops/entity.ts +53 -0
  154. package/src/teardown.test.ts +36 -0
  155. package/src/teardown.ts +14 -0
  156. package/src/testdata/sops/db-credentials.sops.yaml +23 -0
package/dist/okf/index.md CHANGED
@@ -15,24 +15,30 @@ okf_version: '0.2'
15
15
  * [Application](/types/Application.md) - K8s::Argo::Application
16
16
  * [ApplicationSet](/types/ApplicationSet.md) - K8s::Argo::ApplicationSet
17
17
  * [AppProject](/types/AppProject.md) - K8s::Argo::AppProject
18
+ * [AWSClusterControllerIdentity](/types/AWSClusterControllerIdentity.md) - K8s::Infrastructure::AWSClusterControllerIdentity
19
+ * [AWSManagedCluster](/types/AWSManagedCluster.md) - K8s::Infrastructure::AWSManagedCluster
20
+ * [AWSManagedControlPlane](/types/AWSManagedControlPlane.md) - K8s::Controlplane::AWSManagedControlPlane
21
+ * [AWSManagedMachinePool](/types/AWSManagedMachinePool.md) - K8s::Infrastructure::AWSManagedMachinePool
18
22
  * [Backup](/types/Backup.md) - K8s::Cnpg::Backup
19
23
  * [BatchJob](/types/BatchJob.md) - K8s::Batch::Job
20
24
  * [Binding](/types/Binding.md) - K8s::Core::Binding
21
- * [Bucket](/types/Bucket.md) - K8s::Flux::Bucket
25
+ * [CAPICluster](/types/CAPICluster.md) - K8s::CAPI::Cluster
22
26
  * [Certificate](/types/Certificate.md) - K8s::CertManager::Certificate
23
27
  * [CertificateRequest](/types/CertificateRequest.md) - K8s::CertManager::CertificateRequest
24
28
  * [CertificateSigningRequest](/types/CertificateSigningRequest.md) - K8s::Certificates::CertificateSigningRequest
25
29
  * [CertificateSigningRequestList](/types/CertificateSigningRequestList.md) - K8s::Certificates::CertificateSigningRequestList
26
30
  * [Challenge](/types/Challenge.md) - K8s::Acme::Challenge
27
- * [Cluster](/types/Cluster.md) - K8s::Cnpg::Cluster
28
31
  * [ClusterIssuer](/types/ClusterIssuer.md) - K8s::CertManager::ClusterIssuer
32
+ * [ClusterResourceSet](/types/ClusterResourceSet.md) - K8s::Addons::ClusterResourceSet
29
33
  * [ClusterRole](/types/ClusterRole.md) - K8s::Rbac::ClusterRole
30
34
  * [ClusterRoleBinding](/types/ClusterRoleBinding.md) - K8s::Rbac::ClusterRoleBinding
31
35
  * [ClusterRoleBindingList](/types/ClusterRoleBindingList.md) - K8s::Rbac::ClusterRoleBindingList
32
36
  * [ClusterRoleList](/types/ClusterRoleList.md) - K8s::Rbac::ClusterRoleList
37
+ * [ClusterServingRuntime](/types/ClusterServingRuntime.md) - K8s::KServe::ClusterServingRuntime
33
38
  * [ClusterTrustBundle](/types/ClusterTrustBundle.md) - K8s::Certificates::ClusterTrustBundle
34
39
  * [ClusterTrustBundleList](/types/ClusterTrustBundleList.md) - K8s::Certificates::ClusterTrustBundleList
35
40
  * [CM](/types/CM.md) - K8s::Core::ConfigMap
41
+ * [CnpgCluster](/types/CnpgCluster.md) - K8s::Cnpg::Cluster
36
42
  * [ComponentStatus](/types/ComponentStatus.md) - K8s::Core::ComponentStatus
37
43
  * [ComponentStatusList](/types/ComponentStatusList.md) - K8s::Core::ComponentStatusList
38
44
  * [ConfigMapList](/types/ConfigMapList.md) - K8s::Core::ConfigMapList
@@ -52,6 +58,7 @@ okf_version: '0.2'
52
58
  * [CustomResourceDefinitionList](/types/CustomResourceDefinitionList.md) - K8s::Apiextensions::CustomResourceDefinitionList
53
59
  * [DaemonSet](/types/DaemonSet.md) - K8s::Apps::DaemonSet
54
60
  * [DaemonSetList](/types/DaemonSetList.md) - K8s::Apps::DaemonSetList
61
+ * [DBInstance](/types/DBInstance.md) - K8s::Rds::DBInstance
55
62
  * [DeleteOptions](/types/DeleteOptions.md) - K8s::Core::DeleteOptions
56
63
  * [Deploy](/types/Deploy.md) - K8s::Apps::Deployment
57
64
  * [DeploymentList](/types/DeploymentList.md) - K8s::Apps::DeploymentList
@@ -69,6 +76,7 @@ okf_version: '0.2'
69
76
  * [Eviction](/types/Eviction.md) - K8s::Policy::Eviction
70
77
  * [FlowSchema](/types/FlowSchema.md) - K8s::Flowcontrol::FlowSchema
71
78
  * [FlowSchemaList](/types/FlowSchemaList.md) - K8s::Flowcontrol::FlowSchemaList
79
+ * [FluxBucket](/types/FluxBucket.md) - K8s::Flux::Bucket
72
80
  * [FluxHelmChart](/types/FluxHelmChart.md) - K8s::Flux::HelmChart
73
81
  * [FluxInstance](/types/FluxInstance.md) - K8s::Flux::FluxInstance
74
82
  * [FluxReport](/types/FluxReport.md) - K8s::Flux::FluxReport
@@ -77,14 +85,17 @@ okf_version: '0.2'
77
85
  * [GitRepository](/types/GitRepository.md) - K8s::Flux::GitRepository
78
86
  * [GRPCRoute](/types/GRPCRoute.md) - K8s::Gateway::GRPCRoute
79
87
  * [HelmChartConfig](/types/HelmChartConfig.md) - K8s::K3s::HelmChartConfig
88
+ * [HelmChartProxy](/types/HelmChartProxy.md) - K8s::Addons::HelmChartProxy
80
89
  * [HelmRelease](/types/HelmRelease.md) - K8s::Flux::HelmRelease
81
90
  * [HelmRepository](/types/HelmRepository.md) - K8s::Flux::HelmRepository
82
91
  * [HorizontalPodAutoscaler](/types/HorizontalPodAutoscaler.md) - K8s::Autoscaling::HorizontalPodAutoscaler
83
92
  * [HorizontalPodAutoscalerList](/types/HorizontalPodAutoscalerList.md) - K8s::Autoscaling::HorizontalPodAutoscalerList
84
93
  * [HTTPRoute](/types/HTTPRoute.md) - K8s::Gateway::HTTPRoute
94
+ * [IamRole](/types/IamRole.md) - K8s::Iam::Role
85
95
  * [ImagePolicy](/types/ImagePolicy.md) - K8s::Flux::ImagePolicy
86
96
  * [ImageRepository](/types/ImageRepository.md) - K8s::Flux::ImageRepository
87
97
  * [ImageUpdateAutomation](/types/ImageUpdateAutomation.md) - K8s::Flux::ImageUpdateAutomation
98
+ * [InferenceService](/types/InferenceService.md) - K8s::KServe::InferenceService
88
99
  * [InfisicalDynamicSecret](/types/InfisicalDynamicSecret.md) - K8s::Infisical::InfisicalDynamicSecret
89
100
  * [InfisicalPushSecret](/types/InfisicalPushSecret.md) - K8s::Infisical::InfisicalPushSecret
90
101
  * [InfisicalSecret](/types/InfisicalSecret.md) - K8s::Infisical::InfisicalSecret
@@ -108,6 +119,7 @@ okf_version: '0.2'
108
119
  * [LimitRange](/types/LimitRange.md) - K8s::Core::LimitRange
109
120
  * [LimitRangeList](/types/LimitRangeList.md) - K8s::Core::LimitRangeList
110
121
  * [LocalSubjectAccessReview](/types/LocalSubjectAccessReview.md) - K8s::Authorization::LocalSubjectAccessReview
122
+ * [MachinePool](/types/MachinePool.md) - K8s::CAPI::MachinePool
111
123
  * [MicroVM](/types/MicroVM.md) - K8s::KubeMicroVM::MicroVM
112
124
  * [MicroVMClass](/types/MicroVMClass.md) - K8s::KubeMicroVM::MicroVMClass
113
125
  * [MicroVMImage](/types/MicroVMImage.md) - K8s::KubeMicroVM::MicroVMImage
@@ -139,9 +151,11 @@ okf_version: '0.2'
139
151
  * [PodCertificateRequest](/types/PodCertificateRequest.md) - K8s::Certificates::PodCertificateRequest
140
152
  * [PodCertificateRequestList](/types/PodCertificateRequestList.md) - K8s::Certificates::PodCertificateRequestList
141
153
  * [PodDisruptionBudgetList](/types/PodDisruptionBudgetList.md) - K8s::Policy::PodDisruptionBudgetList
154
+ * [PodIdentityAssociation](/types/PodIdentityAssociation.md) - K8s::Eks::PodIdentityAssociation
142
155
  * [PodList](/types/PodList.md) - K8s::Core::PodList
143
156
  * [PodTemplate](/types/PodTemplate.md) - K8s::Core::PodTemplate
144
157
  * [PodTemplateList](/types/PodTemplateList.md) - K8s::Core::PodTemplateList
158
+ * [Policy](/types/Policy.md) - K8s::Iam::Policy
145
159
  * [Pooler](/types/Pooler.md) - K8s::Cnpg::Pooler
146
160
  * [PriorityClass](/types/PriorityClass.md) - K8s::Scheduling::PriorityClass
147
161
  * [PriorityClassList](/types/PriorityClassList.md) - K8s::Scheduling::PriorityClassList
@@ -174,6 +188,7 @@ okf_version: '0.2'
174
188
  * [RoleList](/types/RoleList.md) - K8s::Rbac::RoleList
175
189
  * [RuntimeClass](/types/RuntimeClass.md) - K8s::Node::RuntimeClass
176
190
  * [RuntimeClassList](/types/RuntimeClassList.md) - K8s::Node::RuntimeClassList
191
+ * [S3Bucket](/types/S3Bucket.md) - K8s::S3::Bucket
177
192
  * [SA](/types/SA.md) - K8s::Core::ServiceAccount
178
193
  * [Scale](/types/Scale.md) - K8s::Autoscaling::Scale
179
194
  * [ScheduledBackup](/types/ScheduledBackup.md) - K8s::Cnpg::ScheduledBackup
@@ -190,6 +205,7 @@ okf_version: '0.2'
190
205
  * [ServiceCIDRList](/types/ServiceCIDRList.md) - K8s::Networking::ServiceCIDRList
191
206
  * [ServiceList](/types/ServiceList.md) - K8s::Core::ServiceList
192
207
  * [ServiceMonitor](/types/ServiceMonitor.md) - K8s::Monitoring::ServiceMonitor
208
+ * [ServingRuntime](/types/ServingRuntime.md) - K8s::KServe::ServingRuntime
193
209
  * [StatefulSet](/types/StatefulSet.md) - K8s::Apps::StatefulSet
194
210
  * [StatefulSetList](/types/StatefulSetList.md) - K8s::Apps::StatefulSetList
195
211
  * [Status](/types/Status.md) - K8s::Core::Status
@@ -203,6 +219,7 @@ okf_version: '0.2'
203
219
  * [TokenRequest](/types/TokenRequest.md) - K8s::Authentication::TokenRequest
204
220
  * [TokenReview](/types/TokenReview.md) - K8s::Authentication::TokenReview
205
221
  * [TraefikService](/types/TraefikService.md) - K8s::Traefik::TraefikService
222
+ * [User](/types/User.md) - K8s::Iam::User
206
223
  * [ValidatingAdmissionPolicy](/types/ValidatingAdmissionPolicy.md) - K8s::Admissionregistration::ValidatingAdmissionPolicy
207
224
  * [ValidatingAdmissionPolicyBinding](/types/ValidatingAdmissionPolicyBinding.md) - K8s::Admissionregistration::ValidatingAdmissionPolicyBinding
208
225
  * [ValidatingAdmissionPolicyBindingList](/types/ValidatingAdmissionPolicyBindingList.md) - K8s::Admissionregistration::ValidatingAdmissionPolicyBindingList
@@ -254,5 +271,12 @@ okf_version: '0.2'
254
271
  * [WK8401](/rules/WK8401.md) - shmSize must not exceed the container memory limit — pod will not schedule if it does
255
272
  * [WK8402](/rules/WK8402.md) - RayCluster should set spec.rayVersion so KubeRay selects the correct autoscaler image
256
273
  * [WK8403](/rules/WK8403.md) - spec.rayVersion should match the Ray version in the head container image tag
274
+ * [WK8404](/rules/WK8404.md) - GPU request without a matching nvidia.com/gpu toleration
275
+ * [WK8405](/rules/WK8405.md) - Serving workload (InferenceService / serving Deployment) has no PodDisruptionBudget
276
+ * [WK8406](/rules/WK8406.md) - GPU-requesting container has no cpu/memory resource limits
277
+ * [WK8407](/rules/WK8407.md) - InferenceService model storageUri has no explicit version segment
257
278
  * [WK8501](/rules/WK8501.md) - Custom resource spec contains a field its CRD schema does not declare
258
279
  * [WK8502](/rules/WK8502.md) - Custom resource spec field has the wrong type or a value outside its enum
280
+ * [WK8503](/rules/WK8503.md) - Workload consumes a Secret nothing in the output produces — produce it (Secret, ExternalSecret, InfisicalSecret, Certificate) or declare its provenance with...
281
+ * [WK8504](/rules/WK8504.md) - committed-encrypted secret declaration does not resolve — the declared file is missing, is not the named Secret, or is not encrypted
282
+ * [WK8505](/rules/WK8505.md) - committed-encrypted secret with no Flux decryption wiring — add decryption: 'sops' to the FluxAppFor reconciling the path that carries it
@@ -12,7 +12,6 @@ Kustomization.spec.sourceRef must reference a declared source (or the bootstrap
12
12
 
13
13
  ## Applies to
14
14
 
15
- - [Bucket](/types/Bucket.md)
16
15
  - [GitRepository](/types/GitRepository.md)
17
16
  - [Kustomization](/types/Kustomization.md)
18
17
  - [Namespace](/types/Namespace.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8404
4
+ description: GPU request without a matching nvidia.com/gpu toleration
5
+ id: WK8404
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ GPU request without a matching nvidia.com/gpu toleration
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8405
4
+ description: Serving workload (InferenceService / serving Deployment) has no PodDisruptionBudget
5
+ id: WK8405
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ Serving workload (InferenceService / serving Deployment) has no PodDisruptionBudget
12
+
13
+ ## Applies to
14
+
15
+ - [InferenceService](/types/InferenceService.md)
16
+ - [PDB](/types/PDB.md)
17
+ - [StatefulSet](/types/StatefulSet.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8406
4
+ description: GPU-requesting container has no cpu/memory resource limits
5
+ id: WK8406
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ GPU-requesting container has no cpu/memory resource limits
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8407
4
+ description: InferenceService model storageUri has no explicit version segment
5
+ id: WK8407
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ InferenceService model storageUri has no explicit version segment
12
+
13
+ ## Applies to
14
+
15
+ - [InferenceService](/types/InferenceService.md)
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8503
4
+ description: Workload consumes a Secret nothing in the output produces — produce it (Secret, ExternalSecret, InfisicalSecret, Certificate) or declare its provenance with declareSecret()
5
+ id: WK8503
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ Workload consumes a Secret nothing in the output produces — produce it (Secret, ExternalSecret, InfisicalSecret, Certificate) or declare its provenance with declareSecret()
12
+
13
+ ## Applies to
14
+
15
+ - [Certificate](/types/Certificate.md)
16
+ - [InfisicalDynamicSecret](/types/InfisicalDynamicSecret.md)
17
+ - [InfisicalSecret](/types/InfisicalSecret.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8504
4
+ description: committed-encrypted secret declaration does not resolve — the declared file is missing, is not the named Secret, or is not encrypted
5
+ id: WK8504
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ committed-encrypted secret declaration does not resolve — the declared file is missing, is not the named Secret, or is not encrypted
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WK8505
4
+ description: 'committed-encrypted secret with no Flux decryption wiring — add decryption: ''sops'' to the FluxAppFor reconciling the path that carries it'
5
+ id: WK8505
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: k8s
9
+ docs: https://intentius.io/chant/lexicons/k8s/rules/
10
+ ---
11
+ committed-encrypted secret with no Flux decryption wiring — add decryption: 'sops' to the FluxAppFor reconciling the path that carries it
12
+
13
+ ## Applies to
14
+
15
+ - [Kustomization](/types/Kustomization.md)
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: AWSClusterControllerIdentity
4
+ description: k8s resource type K8s::Infrastructure::AWSClusterControllerIdentity
5
+ name: AWSClusterControllerIdentity
6
+ lexicon: k8s
7
+ resource_type: K8s::Infrastructure::AWSClusterControllerIdentity
8
+ ---
9
+ `K8s::Infrastructure::AWSClusterControllerIdentity`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): Spec for this AWSClusterControllerIdentity.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: AWSManagedCluster
4
+ description: k8s resource type K8s::Infrastructure::AWSManagedCluster
5
+ name: AWSManagedCluster
6
+ lexicon: k8s
7
+ resource_type: K8s::Infrastructure::AWSManagedCluster
8
+ ---
9
+ `K8s::Infrastructure::AWSManagedCluster`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): AWSManagedClusterSpec defines the desired state of AWSManagedCluster
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: AWSManagedControlPlane
4
+ description: k8s resource type K8s::Controlplane::AWSManagedControlPlane
5
+ name: AWSManagedControlPlane
6
+ lexicon: k8s
7
+ resource_type: K8s::Controlplane::AWSManagedControlPlane
8
+ ---
9
+ `K8s::Controlplane::AWSManagedControlPlane`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): AWSManagedControlPlaneSpec defines the desired state of an Amazon EKS Cluster.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: AWSManagedMachinePool
4
+ description: k8s resource type K8s::Infrastructure::AWSManagedMachinePool
5
+ name: AWSManagedMachinePool
6
+ lexicon: k8s
7
+ resource_type: K8s::Infrastructure::AWSManagedMachinePool
8
+ ---
9
+ `K8s::Infrastructure::AWSManagedMachinePool`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): AWSManagedMachinePoolSpec defines the desired state of AWSManagedMachinePool.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: CAPICluster
4
+ description: k8s resource type K8s::CAPI::Cluster
5
+ name: CAPICluster
6
+ lexicon: k8s
7
+ resource_type: K8s::CAPI::Cluster
8
+ ---
9
+ `K8s::CAPI::Cluster`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `spec` (`Record<string, unknown>`, required): spec is the desired state of Cluster.
14
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
@@ -16,3 +16,4 @@ resource_type: K8s::CertManager::Certificate
16
16
  ## Governed by
17
17
 
18
18
  - [WK8304](/rules/WK8304.md): SSL redirect without certificate — ssl-redirect annotation requires a valid certificate-arn and HTTPS listen-ports
19
+ - [WK8503](/rules/WK8503.md): Workload consumes a Secret nothing in the output produces — produce it (Secret, ExternalSecret, InfisicalSecret, Certificate) or declare its provenance with declareSecret()
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: ClusterResourceSet
4
+ description: k8s resource type K8s::Addons::ClusterResourceSet
5
+ name: ClusterResourceSet
6
+ lexicon: k8s
7
+ resource_type: K8s::Addons::ClusterResourceSet
8
+ ---
9
+ `K8s::Addons::ClusterResourceSet`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `spec` (`Record<string, unknown>`, required): spec is the desired state of ClusterResourceSet.
14
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: ClusterServingRuntime
4
+ description: k8s resource type K8s::KServe::ClusterServingRuntime
5
+ name: ClusterServingRuntime
6
+ lexicon: k8s
7
+ resource_type: K8s::KServe::ClusterServingRuntime
8
+ ---
9
+ `K8s::KServe::ClusterServingRuntime`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional)
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  type: resource-type
3
- title: Cluster
3
+ title: CnpgCluster
4
4
  description: k8s resource type K8s::Cnpg::Cluster
5
- name: Cluster
5
+ name: CnpgCluster
6
6
  lexicon: k8s
7
7
  resource_type: K8s::Cnpg::Cluster
8
8
  ---
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: DBInstance
4
+ description: k8s resource type K8s::Rds::DBInstance
5
+ name: DBInstance
6
+ lexicon: k8s
7
+ resource_type: K8s::Rds::DBInstance
8
+ ---
9
+ `K8s::Rds::DBInstance`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): DBInstanceSpec defines the desired state of DBInstance. Contains the details of an Amazon RDS DB instance. This data type is used as a response element in the operations CreateDBInstance, CreateDBInstanceReadReplica, DeleteDBInstance, DescribeDBInstances, ModifyDBInstance, PromoteReadReplica, RebootDBInstance, RestoreDBInstanceFromDBSnapshot, RestoreDBInstanceFromS3, RestoreDBInstanceToPointInTime, StartDBInstance, and StopDBInstance.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  type: resource-type
3
- title: Bucket
3
+ title: FluxBucket
4
4
  description: k8s resource type K8s::Flux::Bucket
5
- name: Bucket
5
+ name: FluxBucket
6
6
  lexicon: k8s
7
7
  resource_type: K8s::Flux::Bucket
8
8
  ---
@@ -12,7 +12,3 @@ resource_type: K8s::Flux::Bucket
12
12
 
13
13
  - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
14
  - `spec` (`Record<string, unknown>`, optional): BucketSpec specifies the required configuration to produce an Artifact for an object storage bucket.
15
-
16
- ## Governed by
17
-
18
- - [FLUX002](/rules/FLUX002.md): Kustomization.spec.sourceRef must reference a declared source (or the bootstrap flux-system repo)
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: HelmChartProxy
4
+ description: k8s resource type K8s::Addons::HelmChartProxy
5
+ name: HelmChartProxy
6
+ lexicon: k8s
7
+ resource_type: K8s::Addons::HelmChartProxy
8
+ ---
9
+ `K8s::Addons::HelmChartProxy`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): HelmChartProxySpec defines the desired state of HelmChartProxy.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: IamRole
4
+ description: k8s resource type K8s::Iam::Role
5
+ name: IamRole
6
+ lexicon: k8s
7
+ resource_type: K8s::Iam::Role
8
+ ---
9
+ `K8s::Iam::Role`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): RoleSpec defines the desired state of Role. Contains information about an IAM role. This structure is returned as a response element in several API operations that interact with roles.
@@ -0,0 +1,19 @@
1
+ ---
2
+ type: resource-type
3
+ title: InferenceService
4
+ description: k8s resource type K8s::KServe::InferenceService
5
+ name: InferenceService
6
+ lexicon: k8s
7
+ resource_type: K8s::KServe::InferenceService
8
+ ---
9
+ `K8s::KServe::InferenceService`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional)
15
+
16
+ ## Governed by
17
+
18
+ - [WK8405](/rules/WK8405.md): Serving workload (InferenceService / serving Deployment) has no PodDisruptionBudget
19
+ - [WK8407](/rules/WK8407.md): InferenceService model storageUri has no explicit version segment
@@ -12,3 +12,7 @@ resource_type: K8s::Infisical::InfisicalDynamicSecret
12
12
 
13
13
  - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
14
  - `spec` (`Record<string, unknown>`, optional): InfisicalDynamicSecretSpec defines the desired state of InfisicalDynamicSecret.
15
+
16
+ ## Governed by
17
+
18
+ - [WK8503](/rules/WK8503.md): Workload consumes a Secret nothing in the output produces — produce it (Secret, ExternalSecret, InfisicalSecret, Certificate) or declare its provenance with declareSecret()
@@ -12,3 +12,7 @@ resource_type: K8s::Infisical::InfisicalSecret
12
12
 
13
13
  - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
14
  - `spec` (`Record<string, unknown>`, optional): InfisicalSecretSpec defines the desired state of InfisicalSecret
15
+
16
+ ## Governed by
17
+
18
+ - [WK8503](/rules/WK8503.md): Workload consumes a Secret nothing in the output produces — produce it (Secret, ExternalSecret, InfisicalSecret, Certificate) or declare its provenance with declareSecret()
@@ -18,3 +18,4 @@ resource_type: K8s::Flux::Kustomization
18
18
  - [FLUX001](/rules/FLUX001.md): GitRepository must pin spec.ref
19
19
  - [FLUX002](/rules/FLUX002.md): Kustomization.spec.sourceRef must reference a declared source (or the bootstrap flux-system repo)
20
20
  - [FLUX003](/rules/FLUX003.md): Kustomization.spec.dependsOn entries should name Kustomizations declared in the build
21
+ - [WK8505](/rules/WK8505.md): committed-encrypted secret with no Flux decryption wiring — add decryption: 'sops' to the FluxAppFor reconciling the path that carries it
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: MachinePool
4
+ description: k8s resource type K8s::CAPI::MachinePool
5
+ name: MachinePool
6
+ lexicon: k8s
7
+ resource_type: K8s::CAPI::MachinePool
8
+ ---
9
+ `K8s::CAPI::MachinePool`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `spec` (`Record<string, unknown>`, required): spec is the desired state of MachinePool.
14
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
@@ -16,3 +16,4 @@ resource_type: K8s::Policy::PodDisruptionBudget
16
16
  ## Governed by
17
17
 
18
18
  - [WK8303](/rules/WK8303.md): PDB recommended for HA Deployments — ensures availability during voluntary disruptions
19
+ - [WK8405](/rules/WK8405.md): Serving workload (InferenceService / serving Deployment) has no PodDisruptionBudget
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: PodIdentityAssociation
4
+ description: k8s resource type K8s::Eks::PodIdentityAssociation
5
+ name: PodIdentityAssociation
6
+ lexicon: k8s
7
+ resource_type: K8s::Eks::PodIdentityAssociation
8
+ ---
9
+ `K8s::Eks::PodIdentityAssociation`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): PodIdentityAssociationSpec defines the desired state of PodIdentityAssociation. Amazon EKS Pod Identity associations provide the ability to manage credentials for your applications, similar to the way that Amazon EC2 instance profiles provide credentials to Amazon EC2 instances.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: Policy
4
+ description: k8s resource type K8s::Iam::Policy
5
+ name: Policy
6
+ lexicon: k8s
7
+ resource_type: K8s::Iam::Policy
8
+ ---
9
+ `K8s::Iam::Policy`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): PolicySpec defines the desired state of Policy. Contains information about a managed policy. This data type is used as a response element in the CreatePolicy, GetPolicy, and ListPolicies operations. For more information about managed policies, refer to Managed policies and inline policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: S3Bucket
4
+ description: k8s resource type K8s::S3::Bucket
5
+ name: S3Bucket
6
+ lexicon: k8s
7
+ resource_type: K8s::S3::Bucket
8
+ ---
9
+ `K8s::S3::Bucket`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): BucketSpec defines the desired state of Bucket. In terms of implementation, a Bucket is a resource.
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: ServingRuntime
4
+ description: k8s resource type K8s::KServe::ServingRuntime
5
+ name: ServingRuntime
6
+ lexicon: k8s
7
+ resource_type: K8s::KServe::ServingRuntime
8
+ ---
9
+ `K8s::KServe::ServingRuntime`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional)
@@ -17,3 +17,4 @@ resource_type: K8s::Apps::StatefulSet
17
17
 
18
18
  - [WK8002](/rules/WK8002.md): Latest Image Tag
19
19
  - [WK8003](/rules/WK8003.md): Missing Resource Limits
20
+ - [WK8405](/rules/WK8405.md): Serving workload (InferenceService / serving Deployment) has no PodDisruptionBudget
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: resource-type
3
+ title: User
4
+ description: k8s resource type K8s::Iam::User
5
+ name: User
6
+ lexicon: k8s
7
+ resource_type: K8s::Iam::User
8
+ ---
9
+ `K8s::Iam::User`, a resource type of the k8s lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `metadata` (`ObjectMeta`, optional): Standard object's metadata.
14
+ - `spec` (`Record<string, unknown>`, optional): UserSpec defines the desired state of User. Contains information about an IAM user entity. This data type is used as a response element in the following operations: CreateUser GetUser ListUsers
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `ensureSecret` — the activity behind core's `ensureSecret(...)` op step
3
+ * builder (#1829), provided by the store's lexicon as that builder promises
4
+ * (#1830). Registered by name through the activity registry when a project's
5
+ * `chant.config.ts` lists the `k8s` lexicon, exactly like `kubectlApply`.
6
+ *
7
+ * All it does is connect (the same environment→cluster binding every k8s
8
+ * path uses), build the namespace-scoped store adapter, and run core's one
9
+ * materialization engine over it. The contract — present means done, never
10
+ * mint over an existing value, mismatches fail naming key names only, no
11
+ * output carries material — lives in core (`secret-materialization.ts`) and
12
+ * in the adapter (../../secret-store.ts), not here.
13
+ */
14
+ import { type EnsureSecretOutcome } from "@intentius/chant/secret-materialization";
15
+ import { type K8sConnector } from "../../api/connect.js";
16
+ export interface EnsureSecretActivityArgs {
17
+ /** The Secret's `metadata.name`. */
18
+ name: string;
19
+ /** The declared key-set. Creation mints one value per key; verification compares names only. */
20
+ keys: string[];
21
+ /** Declared metadata (labels/annotations) an existing Secret must carry. Mismatches name the KEY. */
22
+ metadata?: Record<string, string>;
23
+ /** Target namespace. Omitted uses the connected context's default namespace. */
24
+ namespace?: string;
25
+ /** chant environment, resolved through `k8s.profiles.<env>.context`. */
26
+ environment?: string;
27
+ /** Explicit kubectl context — same precedence as `kubectlApply`. */
28
+ context?: string;
29
+ /** Project directory whose `chant.config.ts` carries the k8s profiles. */
30
+ cwd?: string;
31
+ /** Ownership stack to stamp on a minted Secret (with `env`, the full marker). */
32
+ stack?: string;
33
+ /** Ownership env to stamp alongside `stack`. */
34
+ env?: string;
35
+ }
36
+ /**
37
+ * Ensure a `generated-once` Secret exists in the target cluster. Returns
38
+ * names only — see core's `EnsureSecretOutcome`.
39
+ */
40
+ export declare function ensureSecret(args: EnsureSecretActivityArgs, _signal?: AbortSignal, connect?: K8sConnector): Promise<EnsureSecretOutcome>;
41
+ //# sourceMappingURL=ensure-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-secret.d.ts","sourceRoot":"","sources":["../../../src/op/activities/ensure-secret.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG3E,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qGAAqG;IACrG,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,wBAAwB,EAC9B,OAAO,CAAC,EAAE,WAAW,EACrB,OAAO,GAAE,YAAkC,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CAmB9B"}