@a5c-ai/krate 5.0.1-staging.f672fe79b

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 (174) hide show
  1. package/Dockerfile +29 -0
  2. package/README.md +183 -0
  3. package/bin/krate-demo.mjs +23 -0
  4. package/bin/krate-server.mjs +14 -0
  5. package/dist/krate-controller-ui.json +2407 -0
  6. package/dist/krate-lifecycle.json +201 -0
  7. package/dist/krate-runtime-snapshot.json +2955 -0
  8. package/dist/krate-summary.json +687 -0
  9. package/docs/README.md +61 -0
  10. package/docs/agents/README.md +83 -0
  11. package/docs/agents/acceptance-test-matrix.md +193 -0
  12. package/docs/agents/agent-mux-adapter-contract.md +167 -0
  13. package/docs/agents/agent-mux-source-map.md +310 -0
  14. package/docs/agents/agent-run-memory-import-spec.md +256 -0
  15. package/docs/agents/agent-stack-management-spec.md +421 -0
  16. package/docs/agents/api-contract-spec.md +309 -0
  17. package/docs/agents/artifacts-writeback-spec.md +145 -0
  18. package/docs/agents/chart-packaging-spec.md +128 -0
  19. package/docs/agents/ci-orchestration-spec.md +140 -0
  20. package/docs/agents/context-assembly-spec.md +219 -0
  21. package/docs/agents/controller-reconciliation-spec.md +255 -0
  22. package/docs/agents/crd-schema-spec.md +315 -0
  23. package/docs/agents/decision-log-open-questions.md +169 -0
  24. package/docs/agents/developer-implementation-checklist.md +329 -0
  25. package/docs/agents/dispatching-design.md +262 -0
  26. package/docs/agents/glossary.md +66 -0
  27. package/docs/agents/implementation-blueprint.md +324 -0
  28. package/docs/agents/implementation-rollout-slices.md +251 -0
  29. package/docs/agents/memory-context-integration-spec.md +194 -0
  30. package/docs/agents/memory-ontology-schema-spec.md +253 -0
  31. package/docs/agents/memory-operations-runbook.md +121 -0
  32. package/docs/agents/mvp-vertical-slice-spec.md +146 -0
  33. package/docs/agents/observability-audit-spec.md +265 -0
  34. package/docs/agents/operator-runbook.md +174 -0
  35. package/docs/agents/org-memory-api-payload-examples.md +333 -0
  36. package/docs/agents/org-memory-controller-sequence-spec.md +181 -0
  37. package/docs/agents/org-memory-e2e-fixture-plan.md +161 -0
  38. package/docs/agents/org-memory-ui-implementation-map.md +114 -0
  39. package/docs/agents/org-memory-vertical-slice-spec.md +168 -0
  40. package/docs/agents/org-resource-model-delta-spec.md +111 -0
  41. package/docs/agents/org-route-resource-model-spec.md +183 -0
  42. package/docs/agents/org-scoping-namespace-spec.md +114 -0
  43. package/docs/agents/rbac-secrets-management-spec.md +406 -0
  44. package/docs/agents/repository-page-integration-spec.md +255 -0
  45. package/docs/agents/resource-contract-examples.md +808 -0
  46. package/docs/agents/resource-relationship-map.md +190 -0
  47. package/docs/agents/security-threat-model.md +188 -0
  48. package/docs/agents/shared-memory-company-brain-spec.md +358 -0
  49. package/docs/agents/storage-migration-spec.md +168 -0
  50. package/docs/agents/subagent-orchestration-spec.md +152 -0
  51. package/docs/agents/system-overview.md +88 -0
  52. package/docs/agents/tools-mcp-skills-spec.md +189 -0
  53. package/docs/agents/traceability-matrix.md +79 -0
  54. package/docs/agents/ui-flow-spec.md +211 -0
  55. package/docs/agents/ui-ux-system-spec.md +426 -0
  56. package/docs/agents/workspace-lifecycle-spec.md +166 -0
  57. package/docs/architecture-spec.md +78 -0
  58. package/docs/components/control-plane.md +78 -0
  59. package/docs/components/data-plane.md +69 -0
  60. package/docs/components/hooks-events.md +67 -0
  61. package/docs/components/identity-rbac-policy.md +73 -0
  62. package/docs/components/kubevela-oam.md +70 -0
  63. package/docs/components/operations-publishing.md +81 -0
  64. package/docs/components/runners-ci.md +66 -0
  65. package/docs/components/web-ui.md +94 -0
  66. package/docs/external/README.md +47 -0
  67. package/docs/external/bidirectional-sync-design.md +134 -0
  68. package/docs/external/cicd-interface.md +64 -0
  69. package/docs/external/external-backend-controllers.md +170 -0
  70. package/docs/external/external-backend-crds.md +234 -0
  71. package/docs/external/external-backend-ui-spec.md +151 -0
  72. package/docs/external/external-backend-ux-flows.md +115 -0
  73. package/docs/external/external-object-mapping.md +125 -0
  74. package/docs/external/git-forge-interface.md +68 -0
  75. package/docs/external/github-integration-design.md +151 -0
  76. package/docs/external/issue-tracking-interface.md +66 -0
  77. package/docs/external/provider-capability-manifests.md +204 -0
  78. package/docs/external/provider-catalog.md +139 -0
  79. package/docs/external/provider-rollout-testing.md +78 -0
  80. package/docs/external/research-results.md +48 -0
  81. package/docs/external/security-auth-permissions.md +81 -0
  82. package/docs/external/sync-state-machines.md +108 -0
  83. package/docs/external/unified-external-backend-model.md +107 -0
  84. package/docs/external/user-facing-changes.md +67 -0
  85. package/docs/gaps.md +161 -0
  86. package/docs/install.md +94 -0
  87. package/docs/krate-design.md +334 -0
  88. package/docs/local-minikube.md +55 -0
  89. package/docs/ontology/README.md +32 -0
  90. package/docs/ontology/bounded-contexts.md +29 -0
  91. package/docs/ontology/events-and-hooks.md +32 -0
  92. package/docs/ontology/oam-kubevela.md +32 -0
  93. package/docs/ontology/operations-and-release.md +25 -0
  94. package/docs/ontology/personas-and-actors.md +32 -0
  95. package/docs/ontology/policies-and-invariants.md +33 -0
  96. package/docs/ontology/problem-space.md +30 -0
  97. package/docs/ontology/resource-contracts.md +40 -0
  98. package/docs/ontology/resource-taxonomy.md +42 -0
  99. package/docs/ontology/runners-and-ci.md +29 -0
  100. package/docs/ontology/solution-space.md +24 -0
  101. package/docs/ontology/storage-and-data-boundaries.md +29 -0
  102. package/docs/ontology/validation-matrix.md +24 -0
  103. package/docs/ontology/web-ui-excellent-flows.md +32 -0
  104. package/docs/ontology/workflows.md +39 -0
  105. package/docs/ontology/world.md +35 -0
  106. package/docs/product-requirements.md +62 -0
  107. package/docs/roadmap-mvp.md +87 -0
  108. package/docs/system-requirements.md +90 -0
  109. package/docs/tests/README.md +53 -0
  110. package/docs/tests/agent-qa-plan.md +63 -0
  111. package/docs/tests/browser-ui-tests.md +62 -0
  112. package/docs/tests/ci-quality-gates.md +48 -0
  113. package/docs/tests/coverage-model.md +64 -0
  114. package/docs/tests/e2e-scenario-tests.md +53 -0
  115. package/docs/tests/fixtures-test-data.md +63 -0
  116. package/docs/tests/observability-reliability-tests.md +54 -0
  117. package/docs/tests/product-test-matrix.md +145 -0
  118. package/docs/tests/qa-adoption-roadmap.md +130 -0
  119. package/docs/tests/qa-automation-plan.md +101 -0
  120. package/docs/tests/security-compliance-tests.md +57 -0
  121. package/docs/tests/test-framework-tools.md +88 -0
  122. package/docs/tests/test-suite-layout.md +121 -0
  123. package/docs/tests/unit-integration-tests.md +48 -0
  124. package/docs/todo-kyverno +714 -0
  125. package/docs/user-stories.md +78 -0
  126. package/examples/minikube-demo.yaml +190 -0
  127. package/examples/oam-application.yaml +23 -0
  128. package/examples/policy-kyverno-pr-title.yaml +18 -0
  129. package/package.json +63 -0
  130. package/scripts/build.mjs +29 -0
  131. package/scripts/setup-minikube.mjs +65 -0
  132. package/scripts/smoke.mjs +37 -0
  133. package/scripts/validate-doc-coverage.mjs +152 -0
  134. package/scripts/validate-package.mjs +93 -0
  135. package/scripts/validate-ui.mjs +207 -0
  136. package/src/agent-approval-controller.js +123 -0
  137. package/src/agent-context-bundles.js +242 -0
  138. package/src/agent-dispatch-controller.js +86 -0
  139. package/src/agent-mux-client.js +280 -0
  140. package/src/agent-permission-review.js +162 -0
  141. package/src/agent-stack-controller.js +296 -0
  142. package/src/agent-trigger-controller.js +108 -0
  143. package/src/api-controller.js +206 -0
  144. package/src/argocd-gitops.js +43 -0
  145. package/src/auth.js +265 -0
  146. package/src/component-catalog.js +41 -0
  147. package/src/control-plane.js +136 -0
  148. package/src/controller-client.js +38 -0
  149. package/src/controller-ui.js +538 -0
  150. package/src/data-plane.js +178 -0
  151. package/src/gitea-backend.js +95 -0
  152. package/src/handoff.js +98 -0
  153. package/src/hooks-events.js +63 -0
  154. package/src/http-server.js +151 -0
  155. package/src/identity-policy.js +86 -0
  156. package/src/index.js +30 -0
  157. package/src/kubernetes-controller.js +812 -0
  158. package/src/kubernetes-resource-gateway.js +48 -0
  159. package/src/operations.js +112 -0
  160. package/src/resource-model.js +203 -0
  161. package/src/runners-ci.js +48 -0
  162. package/src/runtime.js +196 -0
  163. package/src/web-ui.js +40 -0
  164. package/tests/agent-approval-controller.test.js +173 -0
  165. package/tests/agent-context-bundles.test.js +278 -0
  166. package/tests/agent-dispatch-controller.test.js +176 -0
  167. package/tests/agent-mux-client.test.js +204 -0
  168. package/tests/agent-permission-review.test.js +209 -0
  169. package/tests/agent-resources.test.js +212 -0
  170. package/tests/agent-stack-controller.test.js +221 -0
  171. package/tests/agent-trigger-controller.test.js +211 -0
  172. package/tests/deployment.test.js +395 -0
  173. package/tests/e2e/lifecycle.test.js +117 -0
  174. package/tests/krate.test.js +727 -0
@@ -0,0 +1,2407 @@
1
+ {
2
+ "product": "Krate",
3
+ "status": "degraded",
4
+ "namespace": "krate-org-default",
5
+ "platformNamespace": "krate-org-default",
6
+ "org": {
7
+ "name": "default",
8
+ "slug": "default",
9
+ "displayName": "Default org",
10
+ "namespace": "krate-org-default",
11
+ "platformNamespace": "krate-org-default"
12
+ },
13
+ "orgs": [
14
+ {
15
+ "name": "default",
16
+ "slug": "default",
17
+ "displayName": "Default org",
18
+ "namespace": "krate-org-default",
19
+ "platformNamespace": "krate-org-default"
20
+ }
21
+ ],
22
+ "generatedAt": "2026-05-11T20:52:22.916Z",
23
+ "correlationId": null,
24
+ "controller": {
25
+ "mode": "krate-workspace",
26
+ "endpoints": [
27
+ {
28
+ "method": "GET",
29
+ "path": "/healthz",
30
+ "purpose": "container and load-balancer health"
31
+ },
32
+ {
33
+ "method": "GET",
34
+ "path": "/api/controller?org=:org",
35
+ "purpose": "live Krate org model"
36
+ },
37
+ {
38
+ "method": "GET",
39
+ "path": "/api/orgs/:org/resources",
40
+ "purpose": "org-scoped Krate resource listing"
41
+ },
42
+ {
43
+ "method": "POST",
44
+ "path": "/api/orgs/:org/resources",
45
+ "purpose": "org-scoped Krate resource apply flow"
46
+ },
47
+ {
48
+ "method": "GET",
49
+ "path": "/api/orgs/:org/resources/:kind/:name",
50
+ "purpose": "org-scoped Krate resource detail"
51
+ },
52
+ {
53
+ "method": "DELETE",
54
+ "path": "/api/orgs/:org/resources/:kind/:name",
55
+ "purpose": "org-scoped Krate resource delete flow"
56
+ },
57
+ {
58
+ "method": "GET",
59
+ "path": "/api/orgs/:org/repositories",
60
+ "purpose": "list org repositories through Krate"
61
+ },
62
+ {
63
+ "method": "POST",
64
+ "path": "/api/orgs/:org/repositories",
65
+ "purpose": "create org repositories through Krate"
66
+ },
67
+ {
68
+ "method": "GET",
69
+ "path": "/api/orgs/:org/repositories/:name",
70
+ "purpose": "get org repository details through Krate"
71
+ },
72
+ {
73
+ "method": "DELETE",
74
+ "path": "/api/orgs/:org/repositories/:name",
75
+ "purpose": "delete org repositories through Krate"
76
+ },
77
+ {
78
+ "method": "GET",
79
+ "path": "/api/orgs/:org/policies",
80
+ "purpose": "list Krate policy profiles, templates, bindings, Kyverno health, and exception requests"
81
+ },
82
+ {
83
+ "method": "POST",
84
+ "path": "/api/orgs/:org/policies",
85
+ "purpose": "create org policy bindings in audit or enforce mode"
86
+ },
87
+ {
88
+ "method": "GET",
89
+ "path": "/api/orgs/:org/policy-reports",
90
+ "purpose": "list normalized Kyverno policy report results"
91
+ },
92
+ {
93
+ "method": "GET",
94
+ "path": "/api/orgs/:org/policy-exception-requests",
95
+ "purpose": "list pending and approved Krate policy exception requests"
96
+ },
97
+ {
98
+ "method": "POST",
99
+ "path": "/api/orgs/:org/policy-exception-requests",
100
+ "purpose": "request a temporary policy exception through Krate"
101
+ },
102
+ {
103
+ "method": "GET",
104
+ "path": "/api/watch/orgs/:org/*",
105
+ "purpose": "org-scoped Krate live event stream bridged to browser updates"
106
+ },
107
+ {
108
+ "method": "POST",
109
+ "path": "/api/git-proxy",
110
+ "purpose": "repository streaming proxy when configured"
111
+ },
112
+ {
113
+ "method": "GET",
114
+ "path": "/api/orgs/:org/agents/stacks",
115
+ "purpose": "list agent stacks and capability status"
116
+ },
117
+ {
118
+ "method": "GET",
119
+ "path": "/api/orgs/:org/agents/runs",
120
+ "purpose": "list agent dispatch runs with queue and status"
121
+ },
122
+ {
123
+ "method": "GET",
124
+ "path": "/api/orgs/:org/agents/rules",
125
+ "purpose": "list trigger rules and delivery status"
126
+ },
127
+ {
128
+ "method": "GET",
129
+ "path": "/api/orgs/:org/agents/sessions",
130
+ "purpose": "list agent sessions with lifecycle state"
131
+ },
132
+ {
133
+ "method": "GET",
134
+ "path": "/api/orgs/:org/agents/workspaces",
135
+ "purpose": "list agent workspaces with lifecycle state"
136
+ },
137
+ {
138
+ "method": "GET",
139
+ "path": "/api/orgs/:org/agents/approvals",
140
+ "purpose": "list pending and resolved agent approvals"
141
+ },
142
+ {
143
+ "method": "GET",
144
+ "path": "/api/orgs/:org/agents/permissions/review",
145
+ "purpose": "explainable permission check for agent dispatch"
146
+ },
147
+ {
148
+ "method": "GET",
149
+ "path": "/api/orgs/:org/agents/adapters",
150
+ "purpose": "list agent adapters and transport bindings"
151
+ },
152
+ {
153
+ "method": "GET",
154
+ "path": "/api/orgs/:org/agents/providers",
155
+ "purpose": "list model provider configurations"
156
+ },
157
+ {
158
+ "method": "GET",
159
+ "path": "/api/orgs/:org/agents/projects",
160
+ "purpose": "list agent projects with board config"
161
+ },
162
+ {
163
+ "method": "POST",
164
+ "path": "/api/orgs/:org/agents/dispatch",
165
+ "purpose": "create manual agent dispatch run"
166
+ },
167
+ {
168
+ "method": "POST",
169
+ "path": "/api/orgs/:org/agents/approvals/:name/decide",
170
+ "purpose": "approve or deny a pending agent approval request"
171
+ },
172
+ {
173
+ "method": "POST",
174
+ "path": "/api/orgs/:org/agents/triggers/process",
175
+ "purpose": "evaluate an event against trigger rules and dispatch matching agents"
176
+ }
177
+ ],
178
+ "architecture": {
179
+ "apiController": {
180
+ "role": "krate-api-controller",
181
+ "scope": "HTTP route orchestration, request validation, API errors, and workflow affordances; never owns delivery reconciliation loops",
182
+ "owns": [
183
+ "/api/controller",
184
+ "/api/orgs/:org/resources",
185
+ "/api/orgs/:org/repositories",
186
+ "/api/watch/orgs/:org/*"
187
+ ],
188
+ "delegatesTo": [
189
+ "krate-resource-gateway",
190
+ "repository-service"
191
+ ]
192
+ },
193
+ "resourceGateway": {
194
+ "role": "krate-resource-gateway",
195
+ "scope": "Narrow application port translating API controller intent into Krate resource-client calls",
196
+ "namespace": "krate-org-default",
197
+ "delegatesTo": [
198
+ "krate-resource-client"
199
+ ]
200
+ },
201
+ "resourceClient": {
202
+ "role": "krate-resource-client",
203
+ "scope": "Krate resource operations and live streams; no UI flow ownership",
204
+ "namespace": "krate-org-default",
205
+ "owns": [
206
+ "Krate resources",
207
+ "aggregated API resources"
208
+ ]
209
+ },
210
+ "deliveryReconciler": {
211
+ "role": "krate-delivery-reconciler",
212
+ "scope": "Repository status projection, repository hosting intent, policy projection, and data-plane sync intent; never owns HTTP routes or browser flows",
213
+ "namespace": "krate-org-default",
214
+ "delegatesTo": [
215
+ "krate-resource-gateway",
216
+ "repository-service"
217
+ ]
218
+ },
219
+ "repositoryService": {
220
+ "role": "repository-service",
221
+ "scope": "repository streaming and SSH hosting, object storage, and search indexing",
222
+ "boundary": "repository service not configured"
223
+ }
224
+ },
225
+ "storage": {
226
+ "etcd": [
227
+ "Repository",
228
+ "BranchProtection",
229
+ "RefPolicy",
230
+ "RunnerPool",
231
+ "WebhookSubscription",
232
+ "Team",
233
+ "User",
234
+ "IdentityMapping",
235
+ "Invite",
236
+ "AuthProvider",
237
+ "AuthProvider"
238
+ ],
239
+ "postgres": []
240
+ },
241
+ "connection": {
242
+ "available": false,
243
+ "context": null,
244
+ "errors": [
245
+ "runtime snapshot supplied outside the Krate workspace path"
246
+ ]
247
+ },
248
+ "apiService": null,
249
+ "commands": []
250
+ },
251
+ "metrics": {
252
+ "components": 8,
253
+ "resources": 11,
254
+ "events": 11,
255
+ "auditEntries": 0,
256
+ "users": 1,
257
+ "teams": 1,
258
+ "invites": 1,
259
+ "repositories": 1,
260
+ "pullRequests": 0,
261
+ "pipelines": 0,
262
+ "jobs": 0,
263
+ "runnerPools": 1,
264
+ "webhookDeliveries": 0,
265
+ "policyViolations": 0,
266
+ "policyBindings": 0,
267
+ "deployments": 0,
268
+ "releases": 0,
269
+ "agentStacks": 0,
270
+ "agentRuns": 0,
271
+ "agentSessions": 0,
272
+ "greenChecks": 5,
273
+ "totalChecks": 6
274
+ },
275
+ "components": [
276
+ {
277
+ "id": "identity-access",
278
+ "title": "Identity and access",
279
+ "area": "identity",
280
+ "resources": [
281
+ "User",
282
+ "Team",
283
+ "Invite",
284
+ "IdentityMapping",
285
+ "AuthProvider"
286
+ ],
287
+ "docs": "src/auth.js"
288
+ },
289
+ {
290
+ "id": "api-controller",
291
+ "title": "Krate API controller",
292
+ "area": "api",
293
+ "resources": [
294
+ "Repository",
295
+ "PullRequest",
296
+ "Pipeline"
297
+ ],
298
+ "docs": "src/api-controller.js"
299
+ },
300
+ {
301
+ "id": "krate-resource-client",
302
+ "title": "Krate resource client",
303
+ "area": "control-plane",
304
+ "resources": [
305
+ "Repository",
306
+ "BranchProtection",
307
+ "RefPolicy"
308
+ ],
309
+ "docs": "src/kubernetes-controller.js"
310
+ },
311
+ {
312
+ "id": "repository-service",
313
+ "title": "Repository service",
314
+ "area": "data-plane",
315
+ "resources": [
316
+ "Repository",
317
+ "BranchProtection",
318
+ "RefPolicy"
319
+ ],
320
+ "docs": "src/data-plane.js"
321
+ },
322
+ {
323
+ "id": "runners-ci",
324
+ "title": "Runner scheduler",
325
+ "area": "ci",
326
+ "resources": [
327
+ "RunnerPool",
328
+ "Pipeline",
329
+ "Job"
330
+ ],
331
+ "docs": "src/kubernetes-controller.js"
332
+ },
333
+ {
334
+ "id": "hooks-events",
335
+ "title": "Webhook bus",
336
+ "area": "events",
337
+ "resources": [
338
+ "WebhookSubscription",
339
+ "WebhookDelivery"
340
+ ],
341
+ "docs": "src/kubernetes-controller.js"
342
+ },
343
+ {
344
+ "id": "policy-engine",
345
+ "title": "Kyverno policy engine",
346
+ "area": "policy",
347
+ "resources": [
348
+ "PolicyProfile",
349
+ "PolicyTemplate",
350
+ "PolicyBinding",
351
+ "PolicyExceptionRequest"
352
+ ],
353
+ "docs": "docs/todo-kyverno"
354
+ },
355
+ {
356
+ "id": "agent-orchestration",
357
+ "title": "Agent orchestration",
358
+ "area": "agents",
359
+ "resources": [
360
+ "AgentStack",
361
+ "AgentDispatchRun",
362
+ "AgentTriggerRule",
363
+ "AgentSession",
364
+ "AgentWorkspace",
365
+ "AgentApproval",
366
+ "AgentAdapter",
367
+ "AgentProviderConfig",
368
+ "AgentProject"
369
+ ],
370
+ "docs": "docs/agents/"
371
+ }
372
+ ],
373
+ "resources": [
374
+ {
375
+ "kind": "Organization",
376
+ "plural": "organizations",
377
+ "apiResource": "organizations.krate.a5c.ai",
378
+ "count": 0,
379
+ "names": [],
380
+ "items": [],
381
+ "phases": {},
382
+ "storage": "etcd",
383
+ "yaml": null,
384
+ "action": {
385
+ "list": "Open Organization records in krate-org-default",
386
+ "watch": "Watch Organization updates in krate-org-default",
387
+ "apply": "Save resource changes",
388
+ "delete": "Delete Organization in krate-org-default"
389
+ }
390
+ },
391
+ {
392
+ "kind": "OrgNamespaceBinding",
393
+ "plural": "orgnamespacebindings",
394
+ "apiResource": "orgnamespacebindings.krate.a5c.ai",
395
+ "count": 0,
396
+ "names": [],
397
+ "items": [],
398
+ "phases": {},
399
+ "storage": "etcd",
400
+ "yaml": null,
401
+ "action": {
402
+ "list": "Open OrgNamespaceBinding records in krate-org-default",
403
+ "watch": "Watch OrgNamespaceBinding updates in krate-org-default",
404
+ "apply": "Save resource changes",
405
+ "delete": "Delete OrgNamespaceBinding in krate-org-default"
406
+ }
407
+ },
408
+ {
409
+ "kind": "User",
410
+ "plural": "users",
411
+ "apiResource": "users.krate.a5c.ai",
412
+ "count": 1,
413
+ "names": [
414
+ "admin"
415
+ ],
416
+ "items": [
417
+ {
418
+ "apiVersion": "krate.a5c.ai/v1alpha1",
419
+ "kind": "User",
420
+ "metadata": {
421
+ "namespace": "krate-org-default",
422
+ "labels": {
423
+ "role": "admin"
424
+ },
425
+ "annotations": {},
426
+ "name": "admin",
427
+ "resourceVersion": "1"
428
+ },
429
+ "spec": {
430
+ "organizationRef": "default",
431
+ "displayName": "Admin",
432
+ "email": "admin@example.com",
433
+ "username": "admin",
434
+ "teams": [
435
+ "maintainers"
436
+ ],
437
+ "admin": true,
438
+ "disabled": false
439
+ },
440
+ "status": {
441
+ "phase": "Active",
442
+ "lastLoginProvider": "sso",
443
+ "groups": [
444
+ "system:authenticated",
445
+ "krate:users",
446
+ "krate:platform-engineers"
447
+ ],
448
+ "storage": "etcd"
449
+ }
450
+ }
451
+ ],
452
+ "phases": {
453
+ "Active": 1
454
+ },
455
+ "storage": "etcd",
456
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: User\nmetadata:\n namespace: krate-org-default\n labels:\n role: admin\n annotations:\n name: admin\n resourceVersion: 1\nspec:\n organizationRef: default\n displayName: Admin\n email: admin@example.com\n username: admin\n teams:\n - maintainers\n admin: true\n disabled: false\nstatus:\n phase: Active\n lastLoginProvider: sso\n groups:\n - system:authenticated\n - krate:users\n - krate:platform-engineers\n storage: etcd\n",
457
+ "action": {
458
+ "list": "Open User records in krate-org-default",
459
+ "watch": "Watch User updates in krate-org-default",
460
+ "apply": "Save resource changes",
461
+ "delete": "Delete User in krate-org-default"
462
+ }
463
+ },
464
+ {
465
+ "kind": "Team",
466
+ "plural": "teams",
467
+ "apiResource": "teams.krate.a5c.ai",
468
+ "count": 1,
469
+ "names": [
470
+ "maintainers"
471
+ ],
472
+ "items": [
473
+ {
474
+ "apiVersion": "krate.a5c.ai/v1alpha1",
475
+ "kind": "Team",
476
+ "metadata": {
477
+ "namespace": "krate-org-default",
478
+ "labels": {},
479
+ "annotations": {},
480
+ "name": "maintainers",
481
+ "resourceVersion": "1"
482
+ },
483
+ "spec": {
484
+ "organizationRef": "default",
485
+ "displayName": "Maintainers",
486
+ "members": [
487
+ "admin"
488
+ ],
489
+ "maintainers": [
490
+ "admin"
491
+ ],
492
+ "repositoryGrants": [
493
+ {
494
+ "repository": "krate-demo",
495
+ "permission": "admin"
496
+ }
497
+ ]
498
+ },
499
+ "status": {
500
+ "phase": "Active",
501
+ "memberCount": 1,
502
+ "storage": "etcd"
503
+ }
504
+ }
505
+ ],
506
+ "phases": {
507
+ "Active": 1
508
+ },
509
+ "storage": "etcd",
510
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Team\nmetadata:\n namespace: krate-org-default\n labels:\n annotations:\n name: maintainers\n resourceVersion: 1\nspec:\n organizationRef: default\n displayName: Maintainers\n members:\n - admin\n maintainers:\n - admin\n repositoryGrants:\n - repository: krate-demo\n permission: admin\nstatus:\n phase: Active\n memberCount: 1\n storage: etcd\n",
511
+ "action": {
512
+ "list": "Open Team records in krate-org-default",
513
+ "watch": "Watch Team updates in krate-org-default",
514
+ "apply": "Save resource changes",
515
+ "delete": "Delete Team in krate-org-default"
516
+ }
517
+ },
518
+ {
519
+ "kind": "Invite",
520
+ "plural": "invites",
521
+ "apiResource": "invites.krate.a5c.ai",
522
+ "count": 1,
523
+ "names": [
524
+ "new-user-example-com"
525
+ ],
526
+ "items": [
527
+ {
528
+ "apiVersion": "krate.a5c.ai/v1alpha1",
529
+ "kind": "Invite",
530
+ "metadata": {
531
+ "namespace": "krate-org-default",
532
+ "labels": {
533
+ "role": "member"
534
+ },
535
+ "annotations": {},
536
+ "name": "new-user-example-com",
537
+ "resourceVersion": "1"
538
+ },
539
+ "spec": {
540
+ "organizationRef": "default",
541
+ "email": "new-user@example.com",
542
+ "role": "member",
543
+ "teams": [
544
+ "maintainers"
545
+ ],
546
+ "invitedBy": "admin",
547
+ "expiresAt": "2026-05-18T20:52:22.913Z"
548
+ },
549
+ "status": {
550
+ "phase": "Pending",
551
+ "storage": "etcd"
552
+ }
553
+ }
554
+ ],
555
+ "phases": {
556
+ "Pending": 1
557
+ },
558
+ "storage": "etcd",
559
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Invite\nmetadata:\n namespace: krate-org-default\n labels:\n role: member\n annotations:\n name: new-user-example-com\n resourceVersion: 1\nspec:\n organizationRef: default\n email: new-user@example.com\n role: member\n teams:\n - maintainers\n invitedBy: admin\n expiresAt: 2026-05-18T20:52:22.913Z\nstatus:\n phase: Pending\n storage: etcd\n",
560
+ "action": {
561
+ "list": "Open Invite records in krate-org-default",
562
+ "watch": "Watch Invite updates in krate-org-default",
563
+ "apply": "Save resource changes",
564
+ "delete": "Delete Invite in krate-org-default"
565
+ }
566
+ },
567
+ {
568
+ "kind": "IdentityMapping",
569
+ "plural": "identitymappings",
570
+ "apiResource": "identitymappings.krate.a5c.ai",
571
+ "count": 1,
572
+ "names": [
573
+ "sso-admin"
574
+ ],
575
+ "items": [
576
+ {
577
+ "apiVersion": "krate.a5c.ai/v1alpha1",
578
+ "kind": "IdentityMapping",
579
+ "metadata": {
580
+ "namespace": "krate-org-default",
581
+ "labels": {},
582
+ "annotations": {},
583
+ "name": "sso-admin",
584
+ "resourceVersion": "1"
585
+ },
586
+ "spec": {
587
+ "organizationRef": "default",
588
+ "user": "admin",
589
+ "provider": "sso",
590
+ "subject": "user:admin",
591
+ "email": "admin@example.com",
592
+ "workspaceIdentity": {
593
+ "name": "admin@example.com",
594
+ "uid": "user:admin",
595
+ "groups": [
596
+ "system:authenticated",
597
+ "krate:users",
598
+ "krate:platform-engineers"
599
+ ]
600
+ },
601
+ "repositoryIdentity": {
602
+ "username": "admin",
603
+ "email": "admin@example.com"
604
+ }
605
+ },
606
+ "status": {
607
+ "phase": "Synced",
608
+ "storage": "etcd"
609
+ }
610
+ }
611
+ ],
612
+ "phases": {
613
+ "Synced": 1
614
+ },
615
+ "storage": "etcd",
616
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: IdentityMapping\nmetadata:\n namespace: krate-org-default\n labels:\n annotations:\n name: sso-admin\n resourceVersion: 1\nspec:\n organizationRef: default\n user: admin\n provider: sso\n subject: user:admin\n email: admin@example.com\n workspaceIdentity:\n name: admin@example.com\n uid: user:admin\n groups:\n - system:authenticated\n - krate:users\n - krate:platform-engineers\n repositoryIdentity:\n username: admin\n email: admin@example.com\nstatus:\n phase: Synced\n storage: etcd\n",
617
+ "action": {
618
+ "list": "Open IdentityMapping records in krate-org-default",
619
+ "watch": "Watch IdentityMapping updates in krate-org-default",
620
+ "apply": "Save resource changes",
621
+ "delete": "Delete IdentityMapping in krate-org-default"
622
+ }
623
+ },
624
+ {
625
+ "kind": "AuthProvider",
626
+ "plural": "authproviders",
627
+ "apiResource": "authproviders.krate.a5c.ai",
628
+ "count": 2,
629
+ "names": [
630
+ "github",
631
+ "sso"
632
+ ],
633
+ "items": [
634
+ {
635
+ "apiVersion": "krate.a5c.ai/v1alpha1",
636
+ "kind": "AuthProvider",
637
+ "metadata": {
638
+ "namespace": "krate-org-default",
639
+ "labels": {},
640
+ "annotations": {},
641
+ "name": "github",
642
+ "resourceVersion": "1"
643
+ },
644
+ "spec": {
645
+ "organizationRef": "default",
646
+ "type": "github",
647
+ "label": "GitHub",
648
+ "enabled": true,
649
+ "scopes": "read:user user:email",
650
+ "delegatedIdentity": {
651
+ "enabled": false,
652
+ "userHeader": "x-forwarded-user",
653
+ "groupsHeader": "x-forwarded-groups",
654
+ "emailHeader": "x-forwarded-email",
655
+ "localDevelopment": {
656
+ "enabled": true,
657
+ "user": "local-developer",
658
+ "email": "",
659
+ "groups": "krate:repo-admins"
660
+ }
661
+ }
662
+ },
663
+ "status": {
664
+ "phase": "Configured",
665
+ "clientConfigured": false,
666
+ "storage": "etcd"
667
+ }
668
+ },
669
+ {
670
+ "apiVersion": "krate.a5c.ai/v1alpha1",
671
+ "kind": "AuthProvider",
672
+ "metadata": {
673
+ "namespace": "krate-org-default",
674
+ "labels": {},
675
+ "annotations": {},
676
+ "name": "sso",
677
+ "resourceVersion": "1"
678
+ },
679
+ "spec": {
680
+ "organizationRef": "default",
681
+ "type": "oidc",
682
+ "label": "Workspace SSO",
683
+ "enabled": false,
684
+ "scopes": "openid profile email groups",
685
+ "delegatedIdentity": {
686
+ "enabled": false,
687
+ "userHeader": "x-forwarded-user",
688
+ "groupsHeader": "x-forwarded-groups",
689
+ "emailHeader": "x-forwarded-email",
690
+ "localDevelopment": {
691
+ "enabled": true,
692
+ "user": "local-developer",
693
+ "email": "",
694
+ "groups": "krate:repo-admins"
695
+ }
696
+ }
697
+ },
698
+ "status": {
699
+ "phase": "Disabled",
700
+ "clientConfigured": false,
701
+ "storage": "etcd"
702
+ }
703
+ }
704
+ ],
705
+ "phases": {
706
+ "Configured": 1,
707
+ "Disabled": 1
708
+ },
709
+ "storage": "etcd",
710
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: AuthProvider\nmetadata:\n namespace: krate-org-default\n labels:\n annotations:\n name: github\n resourceVersion: 1\nspec:\n organizationRef: default\n type: github\n label: GitHub\n enabled: true\n scopes: read:user user:email\n delegatedIdentity:\n enabled: false\n userHeader: x-forwarded-user\n groupsHeader: x-forwarded-groups\n emailHeader: x-forwarded-email\n localDevelopment:\n enabled: true\n user: local-developer\n email: \n groups: krate:repo-admins\nstatus:\n phase: Configured\n clientConfigured: false\n storage: etcd\n",
711
+ "action": {
712
+ "list": "Open AuthProvider records in krate-org-default",
713
+ "watch": "Watch AuthProvider updates in krate-org-default",
714
+ "apply": "Save resource changes",
715
+ "delete": "Delete AuthProvider in krate-org-default"
716
+ }
717
+ },
718
+ {
719
+ "kind": "Repository",
720
+ "plural": "repositories",
721
+ "apiResource": "repositories.krate.a5c.ai",
722
+ "count": 1,
723
+ "names": [
724
+ "krate-demo"
725
+ ],
726
+ "items": [
727
+ {
728
+ "apiVersion": "krate.a5c.ai/v1alpha1",
729
+ "kind": "Repository",
730
+ "metadata": {
731
+ "namespace": "krate-org-default",
732
+ "labels": {
733
+ "gitBackend": "gitea"
734
+ },
735
+ "annotations": {},
736
+ "name": "krate-demo",
737
+ "resourceVersion": "1"
738
+ },
739
+ "spec": {
740
+ "organizationRef": "default",
741
+ "visibility": "private",
742
+ "gitHosting": {
743
+ "backend": "gitea",
744
+ "owner": "krate",
745
+ "repository": "krate-demo",
746
+ "branch": "main",
747
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
748
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
749
+ "deployKeyTitle": "krate-argocd",
750
+ "organization": {
751
+ "kind": "Organization",
752
+ "name": "krate",
753
+ "delegatedTo": "Gitea /api/v1/orgs"
754
+ },
755
+ "sshKeys": {
756
+ "kind": "SSHKey",
757
+ "scopes": [
758
+ "user",
759
+ "deploy",
760
+ "argocd"
761
+ ],
762
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
763
+ },
764
+ "permissions": {
765
+ "kind": "RepositoryPermission",
766
+ "defaultCollaborator": "write",
767
+ "adminTeam": "maintainers",
768
+ "delegatedTo": "Gitea collaborators and team repository APIs"
769
+ },
770
+ "forgeRecords": {
771
+ "issues": "Gitea /repos/{owner}/{repo}/issues",
772
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
773
+ },
774
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
775
+ "integrationPlan": {
776
+ "backend": "gitea",
777
+ "operations": [
778
+ {
779
+ "action": "createOrganization",
780
+ "owner": "krate"
781
+ },
782
+ {
783
+ "action": "createRepository",
784
+ "owner": "krate",
785
+ "repo": "krate-demo"
786
+ },
787
+ {
788
+ "action": "ensureUserMappings",
789
+ "owner": "krate"
790
+ },
791
+ {
792
+ "action": "addDeployKey",
793
+ "owner": "krate",
794
+ "repo": "krate-demo",
795
+ "title": "krate-argocd",
796
+ "readOnly": false
797
+ },
798
+ {
799
+ "action": "addUserSshKey",
800
+ "owner": "krate",
801
+ "repo": "krate-demo",
802
+ "title": "developer key"
803
+ },
804
+ {
805
+ "action": "addCollaborator",
806
+ "owner": "krate",
807
+ "repo": "krate-demo",
808
+ "permission": "write"
809
+ },
810
+ {
811
+ "action": "addTeamRepository",
812
+ "owner": "krate",
813
+ "repo": "krate-demo",
814
+ "team": "maintainers",
815
+ "permission": "admin"
816
+ },
817
+ {
818
+ "action": "protectBranch",
819
+ "owner": "krate",
820
+ "repo": "krate-demo",
821
+ "branch": "main"
822
+ },
823
+ {
824
+ "action": "createWebhook",
825
+ "owner": "krate",
826
+ "repo": "krate-demo",
827
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
828
+ }
829
+ ]
830
+ }
831
+ },
832
+ "storage": {
833
+ "mode": "gitea",
834
+ "persistentVolumeClaim": "krate-gitea-data",
835
+ "owner": "krate",
836
+ "repository": "krate-demo",
837
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
838
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
839
+ },
840
+ "objectStorage": {
841
+ "lfs": true,
842
+ "artifacts": true
843
+ },
844
+ "search": {
845
+ "provider": "zoekt",
846
+ "enabled": false
847
+ }
848
+ },
849
+ "status": {
850
+ "ready": true,
851
+ "route": {
852
+ "repositoryName": "krate-demo",
853
+ "backend": "gitea",
854
+ "owner": "krate",
855
+ "store": "gitea-primary",
856
+ "receivePackReady": true,
857
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
858
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
859
+ },
860
+ "gitHosting": {
861
+ "backend": "gitea",
862
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
863
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
864
+ "integrationPlan": {
865
+ "backend": "gitea",
866
+ "operations": [
867
+ {
868
+ "action": "createOrganization",
869
+ "owner": "krate"
870
+ },
871
+ {
872
+ "action": "createRepository",
873
+ "owner": "krate",
874
+ "repo": "krate-demo"
875
+ },
876
+ {
877
+ "action": "ensureUserMappings",
878
+ "owner": "krate"
879
+ },
880
+ {
881
+ "action": "addDeployKey",
882
+ "owner": "krate",
883
+ "repo": "krate-demo",
884
+ "title": "krate-argocd",
885
+ "readOnly": false
886
+ },
887
+ {
888
+ "action": "addUserSshKey",
889
+ "owner": "krate",
890
+ "repo": "krate-demo",
891
+ "title": "developer key"
892
+ },
893
+ {
894
+ "action": "addCollaborator",
895
+ "owner": "krate",
896
+ "repo": "krate-demo",
897
+ "permission": "write"
898
+ },
899
+ {
900
+ "action": "addTeamRepository",
901
+ "owner": "krate",
902
+ "repo": "krate-demo",
903
+ "team": "maintainers",
904
+ "permission": "admin"
905
+ },
906
+ {
907
+ "action": "protectBranch",
908
+ "owner": "krate",
909
+ "repo": "krate-demo",
910
+ "branch": "main"
911
+ },
912
+ {
913
+ "action": "createWebhook",
914
+ "owner": "krate",
915
+ "repo": "krate-demo",
916
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
917
+ }
918
+ ]
919
+ }
920
+ },
921
+ "storage": "etcd"
922
+ }
923
+ }
924
+ ],
925
+ "phases": {
926
+ "Ready": 1
927
+ },
928
+ "storage": "etcd",
929
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Repository\nmetadata:\n namespace: krate-org-default\n labels:\n gitBackend: gitea\n annotations:\n name: krate-demo\n resourceVersion: 1\nspec:\n organizationRef: default\n visibility: private\n gitHosting:\n backend: gitea\n owner: krate\n repository: krate-demo\n branch: main\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n deployKeyTitle: krate-argocd\n organization:\n kind: Organization\n name: krate\n delegatedTo: Gitea /api/v1/orgs\n sshKeys:\n kind: SSHKey\n scopes:\n - user\n - deploy\n - argocd\n delegatedTo: Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys\n permissions:\n kind: RepositoryPermission\n defaultCollaborator: write\n adminTeam: maintainers\n delegatedTo: Gitea collaborators and team repository APIs\n forgeRecords:\n issues: Gitea /repos/{owner}/{repo}/issues\n pullRequests: Gitea /repos/{owner}/{repo}/pulls\n webhookUrl: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n integrationPlan:\n backend: gitea\n operations:\n - action: createOrganization\n owner: krate\n - action: createRepository\n owner: krate\n repo: krate-demo\n - action: ensureUserMappings\n owner: krate\n - action: addDeployKey\n owner: krate\n repo: krate-demo\n title: krate-argocd\n readOnly: false\n - action: addUserSshKey\n owner: krate\n repo: krate-demo\n title: developer key\n - action: addCollaborator\n owner: krate\n repo: krate-demo\n permission: write\n - action: addTeamRepository\n owner: krate\n repo: krate-demo\n team: maintainers\n permission: admin\n - action: protectBranch\n owner: krate\n repo: krate-demo\n branch: main\n - action: createWebhook\n owner: krate\n repo: krate-demo\n url: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n storage:\n mode: gitea\n persistentVolumeClaim: krate-gitea-data\n owner: krate\n repository: krate-demo\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n objectStorage:\n lfs: true\n artifacts: true\n search:\n provider: zoekt\n enabled: false\nstatus:\n ready: true\n route:\n repositoryName: krate-demo\n backend: gitea\n owner: krate\n store: gitea-primary\n receivePackReady: true\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n gitHosting:\n backend: gitea\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n integrationPlan:\n backend: gitea\n operations:\n - action: createOrganization\n owner: krate\n - action: createRepository\n owner: krate\n repo: krate-demo\n - action: ensureUserMappings\n owner: krate\n - action: addDeployKey\n owner: krate\n repo: krate-demo\n title: krate-argocd\n readOnly: false\n - action: addUserSshKey\n owner: krate\n repo: krate-demo\n title: developer key\n - action: addCollaborator\n owner: krate\n repo: krate-demo\n permission: write\n - action: addTeamRepository\n owner: krate\n repo: krate-demo\n team: maintainers\n permission: admin\n - action: protectBranch\n owner: krate\n repo: krate-demo\n branch: main\n - action: createWebhook\n owner: krate\n repo: krate-demo\n url: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n storage: etcd\n",
930
+ "action": {
931
+ "list": "Open Repository records in krate-org-default",
932
+ "watch": "Watch Repository updates in krate-org-default",
933
+ "apply": "Save resource changes",
934
+ "delete": "Delete Repository in krate-org-default"
935
+ }
936
+ },
937
+ {
938
+ "kind": "SSHKey",
939
+ "plural": "sshkeys",
940
+ "apiResource": "sshkeys.krate.a5c.ai",
941
+ "count": 0,
942
+ "names": [],
943
+ "items": [],
944
+ "phases": {},
945
+ "storage": "etcd",
946
+ "yaml": null,
947
+ "action": {
948
+ "list": "Open SSHKey records in krate-org-default",
949
+ "watch": "Watch SSHKey updates in krate-org-default",
950
+ "apply": "Save resource changes",
951
+ "delete": "Delete SSHKey in krate-org-default"
952
+ }
953
+ },
954
+ {
955
+ "kind": "RepositoryPermission",
956
+ "plural": "repositorypermissions",
957
+ "apiResource": "repositorypermissions.krate.a5c.ai",
958
+ "count": 0,
959
+ "names": [],
960
+ "items": [],
961
+ "phases": {},
962
+ "storage": "etcd",
963
+ "yaml": null,
964
+ "action": {
965
+ "list": "Open RepositoryPermission records in krate-org-default",
966
+ "watch": "Watch RepositoryPermission updates in krate-org-default",
967
+ "apply": "Save resource changes",
968
+ "delete": "Delete RepositoryPermission in krate-org-default"
969
+ }
970
+ },
971
+ {
972
+ "kind": "BranchProtection",
973
+ "plural": "branchprotections",
974
+ "apiResource": "branchprotections.krate.a5c.ai",
975
+ "count": 1,
976
+ "names": [
977
+ "main-protection"
978
+ ],
979
+ "items": [
980
+ {
981
+ "apiVersion": "krate.a5c.ai/v1alpha1",
982
+ "kind": "BranchProtection",
983
+ "metadata": {
984
+ "namespace": "krate-org-default",
985
+ "labels": {},
986
+ "annotations": {},
987
+ "name": "main-protection",
988
+ "resourceVersion": "1"
989
+ },
990
+ "spec": {
991
+ "organizationRef": "default",
992
+ "refs": [
993
+ "refs/heads/main"
994
+ ],
995
+ "requirePullRequest": true,
996
+ "requiredChecks": [
997
+ "test"
998
+ ],
999
+ "requiredApprovals": 1
1000
+ },
1001
+ "status": {
1002
+ "storage": "etcd"
1003
+ }
1004
+ }
1005
+ ],
1006
+ "phases": {
1007
+ "Unspecified": 1
1008
+ },
1009
+ "storage": "etcd",
1010
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: BranchProtection\nmetadata:\n namespace: krate-org-default\n labels:\n annotations:\n name: main-protection\n resourceVersion: 1\nspec:\n organizationRef: default\n refs:\n - refs/heads/main\n requirePullRequest: true\n requiredChecks:\n - test\n requiredApprovals: 1\nstatus:\n storage: etcd\n",
1011
+ "action": {
1012
+ "list": "Open BranchProtection records in krate-org-default",
1013
+ "watch": "Watch BranchProtection updates in krate-org-default",
1014
+ "apply": "Save resource changes",
1015
+ "delete": "Delete BranchProtection in krate-org-default"
1016
+ }
1017
+ },
1018
+ {
1019
+ "kind": "RefPolicy",
1020
+ "plural": "refpolicies",
1021
+ "apiResource": "refpolicies.krate.a5c.ai",
1022
+ "count": 1,
1023
+ "names": [
1024
+ "deny-internal-refs"
1025
+ ],
1026
+ "items": [
1027
+ {
1028
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1029
+ "kind": "RefPolicy",
1030
+ "metadata": {
1031
+ "namespace": "krate-org-default",
1032
+ "labels": {},
1033
+ "annotations": {},
1034
+ "name": "deny-internal-refs",
1035
+ "resourceVersion": "1"
1036
+ },
1037
+ "spec": {
1038
+ "organizationRef": "default",
1039
+ "deny": [
1040
+ "refs/internal/"
1041
+ ]
1042
+ },
1043
+ "status": {
1044
+ "storage": "etcd"
1045
+ }
1046
+ }
1047
+ ],
1048
+ "phases": {
1049
+ "Unspecified": 1
1050
+ },
1051
+ "storage": "etcd",
1052
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: RefPolicy\nmetadata:\n namespace: krate-org-default\n labels:\n annotations:\n name: deny-internal-refs\n resourceVersion: 1\nspec:\n organizationRef: default\n deny:\n - refs/internal/\nstatus:\n storage: etcd\n",
1053
+ "action": {
1054
+ "list": "Open RefPolicy records in krate-org-default",
1055
+ "watch": "Watch RefPolicy updates in krate-org-default",
1056
+ "apply": "Save resource changes",
1057
+ "delete": "Delete RefPolicy in krate-org-default"
1058
+ }
1059
+ },
1060
+ {
1061
+ "kind": "PolicyProfile",
1062
+ "plural": "policyprofiles",
1063
+ "apiResource": "policyprofiles.krate.a5c.ai",
1064
+ "count": 0,
1065
+ "names": [],
1066
+ "items": [],
1067
+ "phases": {},
1068
+ "storage": "etcd",
1069
+ "yaml": null,
1070
+ "action": {
1071
+ "list": "Open PolicyProfile records in krate-org-default",
1072
+ "watch": "Watch PolicyProfile updates in krate-org-default",
1073
+ "apply": "Save resource changes",
1074
+ "delete": "Delete PolicyProfile in krate-org-default"
1075
+ }
1076
+ },
1077
+ {
1078
+ "kind": "PolicyTemplate",
1079
+ "plural": "policytemplates",
1080
+ "apiResource": "policytemplates.krate.a5c.ai",
1081
+ "count": 0,
1082
+ "names": [],
1083
+ "items": [],
1084
+ "phases": {},
1085
+ "storage": "etcd",
1086
+ "yaml": null,
1087
+ "action": {
1088
+ "list": "Open PolicyTemplate records in krate-org-default",
1089
+ "watch": "Watch PolicyTemplate updates in krate-org-default",
1090
+ "apply": "Save resource changes",
1091
+ "delete": "Delete PolicyTemplate in krate-org-default"
1092
+ }
1093
+ },
1094
+ {
1095
+ "kind": "PolicyBinding",
1096
+ "plural": "policybindings",
1097
+ "apiResource": "policybindings.krate.a5c.ai",
1098
+ "count": 0,
1099
+ "names": [],
1100
+ "items": [],
1101
+ "phases": {},
1102
+ "storage": "etcd",
1103
+ "yaml": null,
1104
+ "action": {
1105
+ "list": "Open PolicyBinding records in krate-org-default",
1106
+ "watch": "Watch PolicyBinding updates in krate-org-default",
1107
+ "apply": "Save resource changes",
1108
+ "delete": "Delete PolicyBinding in krate-org-default"
1109
+ }
1110
+ },
1111
+ {
1112
+ "kind": "PolicyExceptionRequest",
1113
+ "plural": "policyexceptionrequests",
1114
+ "apiResource": "policyexceptionrequests.krate.a5c.ai",
1115
+ "count": 0,
1116
+ "names": [],
1117
+ "items": [],
1118
+ "phases": {},
1119
+ "storage": "etcd",
1120
+ "yaml": null,
1121
+ "action": {
1122
+ "list": "Open PolicyExceptionRequest records in krate-org-default",
1123
+ "watch": "Watch PolicyExceptionRequest updates in krate-org-default",
1124
+ "apply": "Save resource changes",
1125
+ "delete": "Delete PolicyExceptionRequest in krate-org-default"
1126
+ }
1127
+ },
1128
+ {
1129
+ "kind": "WebhookSubscription",
1130
+ "plural": "webhooksubscriptions",
1131
+ "apiResource": "webhooksubscriptions.krate.a5c.ai",
1132
+ "count": 1,
1133
+ "names": [
1134
+ "chatops"
1135
+ ],
1136
+ "items": [
1137
+ {
1138
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1139
+ "kind": "WebhookSubscription",
1140
+ "metadata": {
1141
+ "namespace": "krate-org-default",
1142
+ "labels": {},
1143
+ "annotations": {},
1144
+ "name": "chatops",
1145
+ "resourceVersion": "1"
1146
+ },
1147
+ "spec": {
1148
+ "organizationRef": "default",
1149
+ "url": "https://hooks.example.test/krate",
1150
+ "events": [
1151
+ "pullrequest.created",
1152
+ "pullrequest.merged"
1153
+ ],
1154
+ "signing": {
1155
+ "algorithm": "hmac-sha256",
1156
+ "secretRef": "chatops-secret"
1157
+ },
1158
+ "mode": "active"
1159
+ },
1160
+ "status": {
1161
+ "ready": true,
1162
+ "storage": "etcd"
1163
+ }
1164
+ }
1165
+ ],
1166
+ "phases": {
1167
+ "Ready": 1
1168
+ },
1169
+ "storage": "etcd",
1170
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: WebhookSubscription\nmetadata:\n namespace: krate-org-default\n labels:\n annotations:\n name: chatops\n resourceVersion: 1\nspec:\n organizationRef: default\n url: https://hooks.example.test/krate\n events:\n - pullrequest.created\n - pullrequest.merged\n signing:\n algorithm: hmac-sha256\n secretRef: chatops-secret\n mode: active\nstatus:\n ready: true\n storage: etcd\n",
1171
+ "action": {
1172
+ "list": "Open WebhookSubscription records in krate-org-default",
1173
+ "watch": "Watch WebhookSubscription updates in krate-org-default",
1174
+ "apply": "Save resource changes",
1175
+ "delete": "Delete WebhookSubscription in krate-org-default"
1176
+ }
1177
+ },
1178
+ {
1179
+ "kind": "RunnerPool",
1180
+ "plural": "runnerpools",
1181
+ "apiResource": "runnerpools.krate.a5c.ai",
1182
+ "count": 1,
1183
+ "names": [
1184
+ "trusted-linux"
1185
+ ],
1186
+ "items": [
1187
+ {
1188
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1189
+ "kind": "RunnerPool",
1190
+ "metadata": {
1191
+ "namespace": "krate-org-default",
1192
+ "labels": {
1193
+ "trustTier": "trusted"
1194
+ },
1195
+ "annotations": {},
1196
+ "name": "trusted-linux",
1197
+ "resourceVersion": "1"
1198
+ },
1199
+ "spec": {
1200
+ "organizationRef": "default",
1201
+ "image": "ubuntu:24.04",
1202
+ "warmReplicas": 1,
1203
+ "maxReplicas": 4,
1204
+ "trustTier": "trusted",
1205
+ "cache": {
1206
+ "type": "object-storage"
1207
+ },
1208
+ "scalingMetric": "queueDepth"
1209
+ },
1210
+ "status": {
1211
+ "readyReplicas": 1,
1212
+ "queueDepth": 0,
1213
+ "storage": "etcd"
1214
+ }
1215
+ }
1216
+ ],
1217
+ "phases": {
1218
+ "Unspecified": 1
1219
+ },
1220
+ "storage": "etcd",
1221
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: RunnerPool\nmetadata:\n namespace: krate-org-default\n labels:\n trustTier: trusted\n annotations:\n name: trusted-linux\n resourceVersion: 1\nspec:\n organizationRef: default\n image: ubuntu:24.04\n warmReplicas: 1\n maxReplicas: 4\n trustTier: trusted\n cache:\n type: object-storage\n scalingMetric: queueDepth\nstatus:\n readyReplicas: 1\n queueDepth: 0\n storage: etcd\n",
1222
+ "action": {
1223
+ "list": "Open RunnerPool records in krate-org-default",
1224
+ "watch": "Watch RunnerPool updates in krate-org-default",
1225
+ "apply": "Save resource changes",
1226
+ "delete": "Delete RunnerPool in krate-org-default"
1227
+ }
1228
+ },
1229
+ {
1230
+ "kind": "PullRequest",
1231
+ "plural": "pullrequests",
1232
+ "apiResource": "pullrequests.krate.a5c.ai",
1233
+ "count": 0,
1234
+ "names": [],
1235
+ "items": [],
1236
+ "phases": {},
1237
+ "storage": "postgres",
1238
+ "yaml": null,
1239
+ "action": {
1240
+ "list": "Open PullRequest records in krate-org-default",
1241
+ "watch": "Watch PullRequest updates in krate-org-default",
1242
+ "apply": "Save resource changes",
1243
+ "delete": "Delete PullRequest in krate-org-default"
1244
+ }
1245
+ },
1246
+ {
1247
+ "kind": "Issue",
1248
+ "plural": "issues",
1249
+ "apiResource": "issues.krate.a5c.ai",
1250
+ "count": 0,
1251
+ "names": [],
1252
+ "items": [],
1253
+ "phases": {},
1254
+ "storage": "postgres",
1255
+ "yaml": null,
1256
+ "action": {
1257
+ "list": "Open Issue records in krate-org-default",
1258
+ "watch": "Watch Issue updates in krate-org-default",
1259
+ "apply": "Save resource changes",
1260
+ "delete": "Delete Issue in krate-org-default"
1261
+ }
1262
+ },
1263
+ {
1264
+ "kind": "Review",
1265
+ "plural": "reviews",
1266
+ "apiResource": "reviews.krate.a5c.ai",
1267
+ "count": 0,
1268
+ "names": [],
1269
+ "items": [],
1270
+ "phases": {},
1271
+ "storage": "postgres",
1272
+ "yaml": null,
1273
+ "action": {
1274
+ "list": "Open Review records in krate-org-default",
1275
+ "watch": "Watch Review updates in krate-org-default",
1276
+ "apply": "Save resource changes",
1277
+ "delete": "Delete Review in krate-org-default"
1278
+ }
1279
+ },
1280
+ {
1281
+ "kind": "Pipeline",
1282
+ "plural": "pipelines",
1283
+ "apiResource": "pipelines.krate.a5c.ai",
1284
+ "count": 0,
1285
+ "names": [],
1286
+ "items": [],
1287
+ "phases": {},
1288
+ "storage": "postgres",
1289
+ "yaml": null,
1290
+ "action": {
1291
+ "list": "Open Pipeline records in krate-org-default",
1292
+ "watch": "Watch Pipeline updates in krate-org-default",
1293
+ "apply": "Save resource changes",
1294
+ "delete": "Delete Pipeline in krate-org-default"
1295
+ }
1296
+ },
1297
+ {
1298
+ "kind": "Job",
1299
+ "plural": "jobs",
1300
+ "apiResource": "jobs.krate.a5c.ai",
1301
+ "count": 0,
1302
+ "names": [],
1303
+ "items": [],
1304
+ "phases": {},
1305
+ "storage": "postgres",
1306
+ "yaml": null,
1307
+ "action": {
1308
+ "list": "Open Job records in krate-org-default",
1309
+ "watch": "Watch Job updates in krate-org-default",
1310
+ "apply": "Save resource changes",
1311
+ "delete": "Delete Job in krate-org-default"
1312
+ }
1313
+ },
1314
+ {
1315
+ "kind": "WebhookDelivery",
1316
+ "plural": "webhookdeliveries",
1317
+ "apiResource": "webhookdeliveries.krate.a5c.ai",
1318
+ "count": 0,
1319
+ "names": [],
1320
+ "items": [],
1321
+ "phases": {},
1322
+ "storage": "postgres",
1323
+ "yaml": null,
1324
+ "action": {
1325
+ "list": "Open WebhookDelivery records in krate-org-default",
1326
+ "watch": "Watch WebhookDelivery updates in krate-org-default",
1327
+ "apply": "Save resource changes",
1328
+ "delete": "Delete WebhookDelivery in krate-org-default"
1329
+ }
1330
+ },
1331
+ {
1332
+ "kind": "KubeVelaApplication",
1333
+ "plural": "applications",
1334
+ "apiResource": "applications.core.oam.dev",
1335
+ "count": 0,
1336
+ "names": [],
1337
+ "items": [],
1338
+ "phases": {},
1339
+ "storage": "kubevela",
1340
+ "yaml": null,
1341
+ "action": {
1342
+ "list": "Open KubeVelaApplication records in krate-org-default",
1343
+ "watch": "Watch KubeVelaApplication updates in krate-org-default",
1344
+ "apply": "Save resource changes",
1345
+ "delete": "Delete KubeVelaApplication in krate-org-default"
1346
+ }
1347
+ },
1348
+ {
1349
+ "kind": "KubeVelaApplicationRevision",
1350
+ "plural": "applicationrevisions",
1351
+ "apiResource": "applicationrevisions.core.oam.dev",
1352
+ "count": 0,
1353
+ "names": [],
1354
+ "items": [],
1355
+ "phases": {},
1356
+ "storage": "kubevela",
1357
+ "yaml": null,
1358
+ "action": {
1359
+ "list": "Open KubeVelaApplicationRevision records in krate-org-default",
1360
+ "watch": "Watch KubeVelaApplicationRevision updates in krate-org-default",
1361
+ "apply": "Save resource changes",
1362
+ "delete": "Delete KubeVelaApplicationRevision in krate-org-default"
1363
+ }
1364
+ },
1365
+ {
1366
+ "kind": "KubeVelaComponentDefinition",
1367
+ "plural": "componentdefinitions",
1368
+ "apiResource": "componentdefinitions.core.oam.dev",
1369
+ "count": 0,
1370
+ "names": [],
1371
+ "items": [],
1372
+ "phases": {},
1373
+ "storage": "kubevela",
1374
+ "yaml": null,
1375
+ "action": {
1376
+ "list": "Open KubeVelaComponentDefinition records in krate-org-default",
1377
+ "watch": "Watch KubeVelaComponentDefinition updates in krate-org-default",
1378
+ "apply": "Save resource changes",
1379
+ "delete": "Delete KubeVelaComponentDefinition in krate-org-default"
1380
+ }
1381
+ },
1382
+ {
1383
+ "kind": "KubeVelaWorkloadDefinition",
1384
+ "plural": "workloaddefinitions",
1385
+ "apiResource": "workloaddefinitions.core.oam.dev",
1386
+ "count": 0,
1387
+ "names": [],
1388
+ "items": [],
1389
+ "phases": {},
1390
+ "storage": "kubevela",
1391
+ "yaml": null,
1392
+ "action": {
1393
+ "list": "Open KubeVelaWorkloadDefinition records in krate-org-default",
1394
+ "watch": "Watch KubeVelaWorkloadDefinition updates in krate-org-default",
1395
+ "apply": "Save resource changes",
1396
+ "delete": "Delete KubeVelaWorkloadDefinition in krate-org-default"
1397
+ }
1398
+ },
1399
+ {
1400
+ "kind": "KubeVelaTraitDefinition",
1401
+ "plural": "traitdefinitions",
1402
+ "apiResource": "traitdefinitions.core.oam.dev",
1403
+ "count": 0,
1404
+ "names": [],
1405
+ "items": [],
1406
+ "phases": {},
1407
+ "storage": "kubevela",
1408
+ "yaml": null,
1409
+ "action": {
1410
+ "list": "Open KubeVelaTraitDefinition records in krate-org-default",
1411
+ "watch": "Watch KubeVelaTraitDefinition updates in krate-org-default",
1412
+ "apply": "Save resource changes",
1413
+ "delete": "Delete KubeVelaTraitDefinition in krate-org-default"
1414
+ }
1415
+ },
1416
+ {
1417
+ "kind": "KubeVelaScopeDefinition",
1418
+ "plural": "scopedefinitions",
1419
+ "apiResource": "scopedefinitions.core.oam.dev",
1420
+ "count": 0,
1421
+ "names": [],
1422
+ "items": [],
1423
+ "phases": {},
1424
+ "storage": "kubevela",
1425
+ "yaml": null,
1426
+ "action": {
1427
+ "list": "Open KubeVelaScopeDefinition records in krate-org-default",
1428
+ "watch": "Watch KubeVelaScopeDefinition updates in krate-org-default",
1429
+ "apply": "Save resource changes",
1430
+ "delete": "Delete KubeVelaScopeDefinition in krate-org-default"
1431
+ }
1432
+ },
1433
+ {
1434
+ "kind": "KubeVelaPolicyDefinition",
1435
+ "plural": "policydefinitions",
1436
+ "apiResource": "policydefinitions.core.oam.dev",
1437
+ "count": 0,
1438
+ "names": [],
1439
+ "items": [],
1440
+ "phases": {},
1441
+ "storage": "kubevela",
1442
+ "yaml": null,
1443
+ "action": {
1444
+ "list": "Open KubeVelaPolicyDefinition records in krate-org-default",
1445
+ "watch": "Watch KubeVelaPolicyDefinition updates in krate-org-default",
1446
+ "apply": "Save resource changes",
1447
+ "delete": "Delete KubeVelaPolicyDefinition in krate-org-default"
1448
+ }
1449
+ },
1450
+ {
1451
+ "kind": "KubeVelaPolicy",
1452
+ "plural": "policies",
1453
+ "apiResource": "policies.core.oam.dev",
1454
+ "count": 0,
1455
+ "names": [],
1456
+ "items": [],
1457
+ "phases": {},
1458
+ "storage": "kubevela",
1459
+ "yaml": null,
1460
+ "action": {
1461
+ "list": "Open KubeVelaPolicy records in krate-org-default",
1462
+ "watch": "Watch KubeVelaPolicy updates in krate-org-default",
1463
+ "apply": "Save resource changes",
1464
+ "delete": "Delete KubeVelaPolicy in krate-org-default"
1465
+ }
1466
+ },
1467
+ {
1468
+ "kind": "KubeVelaWorkflowStepDefinition",
1469
+ "plural": "workflowstepdefinitions",
1470
+ "apiResource": "workflowstepdefinitions.core.oam.dev",
1471
+ "count": 0,
1472
+ "names": [],
1473
+ "items": [],
1474
+ "phases": {},
1475
+ "storage": "kubevela",
1476
+ "yaml": null,
1477
+ "action": {
1478
+ "list": "Open KubeVelaWorkflowStepDefinition records in krate-org-default",
1479
+ "watch": "Watch KubeVelaWorkflowStepDefinition updates in krate-org-default",
1480
+ "apply": "Save resource changes",
1481
+ "delete": "Delete KubeVelaWorkflowStepDefinition in krate-org-default"
1482
+ }
1483
+ },
1484
+ {
1485
+ "kind": "KubeVelaWorkflow",
1486
+ "plural": "workflows",
1487
+ "apiResource": "workflows.core.oam.dev",
1488
+ "count": 0,
1489
+ "names": [],
1490
+ "items": [],
1491
+ "phases": {},
1492
+ "storage": "kubevela",
1493
+ "yaml": null,
1494
+ "action": {
1495
+ "list": "Open KubeVelaWorkflow records in krate-org-default",
1496
+ "watch": "Watch KubeVelaWorkflow updates in krate-org-default",
1497
+ "apply": "Save resource changes",
1498
+ "delete": "Delete KubeVelaWorkflow in krate-org-default"
1499
+ }
1500
+ },
1501
+ {
1502
+ "kind": "KubeVelaResourceTracker",
1503
+ "plural": "resourcetrackers",
1504
+ "apiResource": "resourcetrackers.core.oam.dev",
1505
+ "count": 0,
1506
+ "names": [],
1507
+ "items": [],
1508
+ "phases": {},
1509
+ "storage": "kubevela",
1510
+ "yaml": null,
1511
+ "action": {
1512
+ "list": "Open KubeVelaResourceTracker records in krate-org-default",
1513
+ "watch": "Watch KubeVelaResourceTracker updates in krate-org-default",
1514
+ "apply": "Save resource changes",
1515
+ "delete": "Delete KubeVelaResourceTracker in krate-org-default"
1516
+ }
1517
+ },
1518
+ {
1519
+ "kind": "View",
1520
+ "plural": "views",
1521
+ "apiResource": "views.krate.a5c.ai",
1522
+ "count": 0,
1523
+ "names": [],
1524
+ "items": [],
1525
+ "phases": {},
1526
+ "storage": "etcd",
1527
+ "yaml": null,
1528
+ "action": {
1529
+ "list": "Open View records in krate-org-default",
1530
+ "watch": "Watch View updates in krate-org-default",
1531
+ "apply": "Save resource changes",
1532
+ "delete": "Delete View in krate-org-default"
1533
+ }
1534
+ },
1535
+ {
1536
+ "kind": "Selector",
1537
+ "plural": "selectors",
1538
+ "apiResource": "selectors.krate.a5c.ai",
1539
+ "count": 0,
1540
+ "names": [],
1541
+ "items": [],
1542
+ "phases": {},
1543
+ "storage": "etcd",
1544
+ "yaml": null,
1545
+ "action": {
1546
+ "list": "Open Selector records in krate-org-default",
1547
+ "watch": "Watch Selector updates in krate-org-default",
1548
+ "apply": "Save resource changes",
1549
+ "delete": "Delete Selector in krate-org-default"
1550
+ }
1551
+ }
1552
+ ],
1553
+ "events": [
1554
+ {
1555
+ "type": "create",
1556
+ "storage": "kubernetes",
1557
+ "actor": "kubernetes",
1558
+ "allowed": true,
1559
+ "message": ""
1560
+ },
1561
+ {
1562
+ "type": "create",
1563
+ "storage": "kubernetes",
1564
+ "actor": "kubernetes",
1565
+ "allowed": true,
1566
+ "message": ""
1567
+ },
1568
+ {
1569
+ "type": "create",
1570
+ "storage": "kubernetes",
1571
+ "actor": "kubernetes",
1572
+ "allowed": true,
1573
+ "message": ""
1574
+ },
1575
+ {
1576
+ "type": "create",
1577
+ "storage": "kubernetes",
1578
+ "actor": "kubernetes",
1579
+ "allowed": true,
1580
+ "message": ""
1581
+ },
1582
+ {
1583
+ "type": "create",
1584
+ "storage": "kubernetes",
1585
+ "actor": "kubernetes",
1586
+ "allowed": true,
1587
+ "message": ""
1588
+ },
1589
+ {
1590
+ "type": "create",
1591
+ "storage": "kubernetes",
1592
+ "actor": "kubernetes",
1593
+ "allowed": true,
1594
+ "message": ""
1595
+ },
1596
+ {
1597
+ "type": "create",
1598
+ "storage": "kubernetes",
1599
+ "actor": "kubernetes",
1600
+ "allowed": true,
1601
+ "message": ""
1602
+ },
1603
+ {
1604
+ "type": "create",
1605
+ "storage": "kubernetes",
1606
+ "actor": "kubernetes",
1607
+ "allowed": true,
1608
+ "message": ""
1609
+ }
1610
+ ],
1611
+ "auditLog": [],
1612
+ "delivery": {
1613
+ "installed": false,
1614
+ "specVersion": "v0.3.0",
1615
+ "counts": {
1616
+ "applications": 0,
1617
+ "releases": 0,
1618
+ "components": 0,
1619
+ "workloads": 0,
1620
+ "traits": 0,
1621
+ "scopes": 0,
1622
+ "policyDefinitions": 0,
1623
+ "policies": 0,
1624
+ "automationSteps": 0,
1625
+ "automations": 0,
1626
+ "managedResources": 0
1627
+ },
1628
+ "capabilityCatalog": {
1629
+ "components": [],
1630
+ "workloads": [],
1631
+ "traits": [],
1632
+ "scopes": [],
1633
+ "policyDefinitions": [],
1634
+ "policies": [],
1635
+ "automationSteps": []
1636
+ },
1637
+ "applications": [],
1638
+ "runtime": {
1639
+ "releases": [],
1640
+ "automations": [],
1641
+ "policies": [],
1642
+ "managedResources": []
1643
+ }
1644
+ },
1645
+ "policyEngine": {
1646
+ "engine": "kyverno",
1647
+ "mode": "disabled",
1648
+ "health": "disabled",
1649
+ "detected": false,
1650
+ "namespace": "kyverno",
1651
+ "policyNamespace": "krate-org-default",
1652
+ "requireForEnforceMode": true,
1653
+ "org": "default",
1654
+ "profiles": [],
1655
+ "templates": [],
1656
+ "bindings": [],
1657
+ "exceptionRequests": [],
1658
+ "kyvernoResources": {},
1659
+ "controllers": [],
1660
+ "permissions": [],
1661
+ "reports": {
1662
+ "policyReports": 0,
1663
+ "clusterPolicyReports": 0,
1664
+ "results": []
1665
+ },
1666
+ "violations": [],
1667
+ "degraded": [],
1668
+ "emptyState": "Kyverno integration is disabled. Krate native RefPolicy and BranchProtection remain available."
1669
+ },
1670
+ "agents": {
1671
+ "org": "default",
1672
+ "stacks": {
1673
+ "count": 0,
1674
+ "items": []
1675
+ },
1676
+ "runs": {
1677
+ "count": 0,
1678
+ "items": [],
1679
+ "active": []
1680
+ },
1681
+ "rules": {
1682
+ "count": 0,
1683
+ "items": []
1684
+ },
1685
+ "sessions": {
1686
+ "count": 0,
1687
+ "items": []
1688
+ },
1689
+ "workspaces": {
1690
+ "count": 0,
1691
+ "items": []
1692
+ },
1693
+ "approvals": {
1694
+ "count": 0,
1695
+ "items": [],
1696
+ "pending": []
1697
+ },
1698
+ "adapters": {
1699
+ "count": 0,
1700
+ "items": []
1701
+ },
1702
+ "providers": {
1703
+ "count": 0,
1704
+ "items": []
1705
+ },
1706
+ "projects": {
1707
+ "count": 0,
1708
+ "items": []
1709
+ },
1710
+ "gateway": null,
1711
+ "transcripts": {
1712
+ "count": 0,
1713
+ "items": []
1714
+ }
1715
+ },
1716
+ "identity": {
1717
+ "counts": {
1718
+ "users": 1,
1719
+ "teams": 1,
1720
+ "pendingInvites": 1,
1721
+ "mappings": 1,
1722
+ "repositoryGrants": 0,
1723
+ "sshKeys": 0
1724
+ },
1725
+ "providers": [
1726
+ {
1727
+ "name": "github",
1728
+ "label": "GitHub",
1729
+ "type": "github",
1730
+ "enabled": true,
1731
+ "phase": "Configured"
1732
+ },
1733
+ {
1734
+ "name": "sso",
1735
+ "label": "Workspace SSO",
1736
+ "type": "oidc",
1737
+ "enabled": false,
1738
+ "phase": "Disabled"
1739
+ }
1740
+ ],
1741
+ "users": [
1742
+ {
1743
+ "name": "admin",
1744
+ "displayName": "Admin",
1745
+ "email": "admin@example.com",
1746
+ "teams": [
1747
+ "maintainers"
1748
+ ],
1749
+ "admin": true,
1750
+ "disabled": false,
1751
+ "phase": "Active"
1752
+ }
1753
+ ],
1754
+ "teams": [
1755
+ {
1756
+ "name": "maintainers",
1757
+ "displayName": "Maintainers",
1758
+ "members": [
1759
+ "admin"
1760
+ ],
1761
+ "maintainers": [
1762
+ "admin"
1763
+ ],
1764
+ "repositoryGrants": [
1765
+ {
1766
+ "repository": "krate-demo",
1767
+ "permission": "admin"
1768
+ }
1769
+ ]
1770
+ }
1771
+ ],
1772
+ "invites": [
1773
+ {
1774
+ "name": "new-user-example-com",
1775
+ "email": "new-user@example.com",
1776
+ "role": "member",
1777
+ "teams": [
1778
+ "maintainers"
1779
+ ],
1780
+ "phase": "Pending",
1781
+ "expiresAt": "2026-05-18T20:52:22.913Z"
1782
+ }
1783
+ ],
1784
+ "mappings": [
1785
+ {
1786
+ "name": "sso-admin",
1787
+ "user": "admin",
1788
+ "provider": "sso",
1789
+ "workspaceIdentity": "admin@example.com",
1790
+ "repositoryIdentity": "admin",
1791
+ "phase": "Synced"
1792
+ }
1793
+ ],
1794
+ "permissions": [],
1795
+ "sshKeys": [],
1796
+ "reconciliation": {
1797
+ "counts": {
1798
+ "User": 1,
1799
+ "Team": 1,
1800
+ "Invite": 1,
1801
+ "IdentityMapping": 1
1802
+ },
1803
+ "phases": {
1804
+ "Active": 2,
1805
+ "Pending": 1,
1806
+ "Synced": 1
1807
+ },
1808
+ "statuses": [
1809
+ {
1810
+ "kind": "User",
1811
+ "name": "admin",
1812
+ "phase": "Active",
1813
+ "checks": [
1814
+ "User Observed: ready",
1815
+ "Workspace Identity Projected: ready",
1816
+ "Repository Identity Projected: ready"
1817
+ ]
1818
+ },
1819
+ {
1820
+ "kind": "Team",
1821
+ "name": "maintainers",
1822
+ "phase": "Active",
1823
+ "checks": [
1824
+ "Team Observed: ready",
1825
+ "Team Membership Projected: ready",
1826
+ "Repository Grants Projected: ready"
1827
+ ]
1828
+ },
1829
+ {
1830
+ "kind": "Invite",
1831
+ "name": "new-user-example-com",
1832
+ "phase": "Pending",
1833
+ "checks": [
1834
+ "Invite Observed: ready",
1835
+ "Invite Lifecycle Tracked: ready"
1836
+ ]
1837
+ },
1838
+ {
1839
+ "kind": "IdentityMapping",
1840
+ "name": "sso-admin",
1841
+ "phase": "Synced",
1842
+ "checks": [
1843
+ "Identity Mapping Observed: ready",
1844
+ "Workspace Identity Projected: ready",
1845
+ "Repository Identity Projected: ready"
1846
+ ]
1847
+ }
1848
+ ],
1849
+ "nextActions": [
1850
+ "ensure user: admin",
1851
+ "ensure repository user: admin",
1852
+ "sync team membership: maintainers",
1853
+ "sync team repository grant: maintainers",
1854
+ "send invite: workspace access",
1855
+ "link identity: admin",
1856
+ "link repository identity: admin"
1857
+ ]
1858
+ },
1859
+ "org": "default"
1860
+ },
1861
+ "validation": [
1862
+ {
1863
+ "name": "Krate workspace is connected",
1864
+ "passed": false,
1865
+ "evidence": "runtime snapshot supplied outside the Krate workspace path"
1866
+ },
1867
+ {
1868
+ "name": "Krate API surface is discoverable",
1869
+ "passed": true,
1870
+ "evidence": "0 Krate resources discovered"
1871
+ },
1872
+ {
1873
+ "name": "Repository management uses org-scoped Krate actions",
1874
+ "passed": true,
1875
+ "evidence": "/api/orgs/:org/repositories and /api/orgs/:org/resources call src/kubernetes-controller.js"
1876
+ },
1877
+ {
1878
+ "name": "Krate API is separated from delivery execution",
1879
+ "passed": true,
1880
+ "evidence": "src/api-controller.js delegates resource operations through the Krate gateway"
1881
+ },
1882
+ {
1883
+ "name": "Live streams use Krate watch",
1884
+ "passed": true,
1885
+ "evidence": "/api/watch/orgs/:org/* uses Krate live updates"
1886
+ },
1887
+ {
1888
+ "name": "UI renders live and empty states without demo data",
1889
+ "passed": true,
1890
+ "evidence": "apps/web Server Components consume fetchControllerUiModel() only"
1891
+ }
1892
+ ],
1893
+ "permissions": [],
1894
+ "views": {
1895
+ "dashboard": {
1896
+ "repositories": [
1897
+ {
1898
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1899
+ "kind": "Repository",
1900
+ "metadata": {
1901
+ "namespace": "krate-org-default",
1902
+ "labels": {
1903
+ "gitBackend": "gitea"
1904
+ },
1905
+ "annotations": {},
1906
+ "name": "krate-demo",
1907
+ "resourceVersion": "1"
1908
+ },
1909
+ "spec": {
1910
+ "organizationRef": "default",
1911
+ "visibility": "private",
1912
+ "gitHosting": {
1913
+ "backend": "gitea",
1914
+ "owner": "krate",
1915
+ "repository": "krate-demo",
1916
+ "branch": "main",
1917
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
1918
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
1919
+ "deployKeyTitle": "krate-argocd",
1920
+ "organization": {
1921
+ "kind": "Organization",
1922
+ "name": "krate",
1923
+ "delegatedTo": "Gitea /api/v1/orgs"
1924
+ },
1925
+ "sshKeys": {
1926
+ "kind": "SSHKey",
1927
+ "scopes": [
1928
+ "user",
1929
+ "deploy",
1930
+ "argocd"
1931
+ ],
1932
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
1933
+ },
1934
+ "permissions": {
1935
+ "kind": "RepositoryPermission",
1936
+ "defaultCollaborator": "write",
1937
+ "adminTeam": "maintainers",
1938
+ "delegatedTo": "Gitea collaborators and team repository APIs"
1939
+ },
1940
+ "forgeRecords": {
1941
+ "issues": "Gitea /repos/{owner}/{repo}/issues",
1942
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
1943
+ },
1944
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
1945
+ "integrationPlan": {
1946
+ "backend": "gitea",
1947
+ "operations": [
1948
+ {
1949
+ "action": "createOrganization",
1950
+ "owner": "krate"
1951
+ },
1952
+ {
1953
+ "action": "createRepository",
1954
+ "owner": "krate",
1955
+ "repo": "krate-demo"
1956
+ },
1957
+ {
1958
+ "action": "ensureUserMappings",
1959
+ "owner": "krate"
1960
+ },
1961
+ {
1962
+ "action": "addDeployKey",
1963
+ "owner": "krate",
1964
+ "repo": "krate-demo",
1965
+ "title": "krate-argocd",
1966
+ "readOnly": false
1967
+ },
1968
+ {
1969
+ "action": "addUserSshKey",
1970
+ "owner": "krate",
1971
+ "repo": "krate-demo",
1972
+ "title": "developer key"
1973
+ },
1974
+ {
1975
+ "action": "addCollaborator",
1976
+ "owner": "krate",
1977
+ "repo": "krate-demo",
1978
+ "permission": "write"
1979
+ },
1980
+ {
1981
+ "action": "addTeamRepository",
1982
+ "owner": "krate",
1983
+ "repo": "krate-demo",
1984
+ "team": "maintainers",
1985
+ "permission": "admin"
1986
+ },
1987
+ {
1988
+ "action": "protectBranch",
1989
+ "owner": "krate",
1990
+ "repo": "krate-demo",
1991
+ "branch": "main"
1992
+ },
1993
+ {
1994
+ "action": "createWebhook",
1995
+ "owner": "krate",
1996
+ "repo": "krate-demo",
1997
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
1998
+ }
1999
+ ]
2000
+ }
2001
+ },
2002
+ "storage": {
2003
+ "mode": "gitea",
2004
+ "persistentVolumeClaim": "krate-gitea-data",
2005
+ "owner": "krate",
2006
+ "repository": "krate-demo",
2007
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2008
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
2009
+ },
2010
+ "objectStorage": {
2011
+ "lfs": true,
2012
+ "artifacts": true
2013
+ },
2014
+ "search": {
2015
+ "provider": "zoekt",
2016
+ "enabled": false
2017
+ }
2018
+ },
2019
+ "status": {
2020
+ "ready": true,
2021
+ "route": {
2022
+ "repositoryName": "krate-demo",
2023
+ "backend": "gitea",
2024
+ "owner": "krate",
2025
+ "store": "gitea-primary",
2026
+ "receivePackReady": true,
2027
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2028
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
2029
+ },
2030
+ "gitHosting": {
2031
+ "backend": "gitea",
2032
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2033
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
2034
+ "integrationPlan": {
2035
+ "backend": "gitea",
2036
+ "operations": [
2037
+ {
2038
+ "action": "createOrganization",
2039
+ "owner": "krate"
2040
+ },
2041
+ {
2042
+ "action": "createRepository",
2043
+ "owner": "krate",
2044
+ "repo": "krate-demo"
2045
+ },
2046
+ {
2047
+ "action": "ensureUserMappings",
2048
+ "owner": "krate"
2049
+ },
2050
+ {
2051
+ "action": "addDeployKey",
2052
+ "owner": "krate",
2053
+ "repo": "krate-demo",
2054
+ "title": "krate-argocd",
2055
+ "readOnly": false
2056
+ },
2057
+ {
2058
+ "action": "addUserSshKey",
2059
+ "owner": "krate",
2060
+ "repo": "krate-demo",
2061
+ "title": "developer key"
2062
+ },
2063
+ {
2064
+ "action": "addCollaborator",
2065
+ "owner": "krate",
2066
+ "repo": "krate-demo",
2067
+ "permission": "write"
2068
+ },
2069
+ {
2070
+ "action": "addTeamRepository",
2071
+ "owner": "krate",
2072
+ "repo": "krate-demo",
2073
+ "team": "maintainers",
2074
+ "permission": "admin"
2075
+ },
2076
+ {
2077
+ "action": "protectBranch",
2078
+ "owner": "krate",
2079
+ "repo": "krate-demo",
2080
+ "branch": "main"
2081
+ },
2082
+ {
2083
+ "action": "createWebhook",
2084
+ "owner": "krate",
2085
+ "repo": "krate-demo",
2086
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
2087
+ }
2088
+ ]
2089
+ }
2090
+ },
2091
+ "storage": "etcd"
2092
+ }
2093
+ }
2094
+ ],
2095
+ "excellentFlows": [
2096
+ "Create or import a repository",
2097
+ "Browse code and copy clone commands",
2098
+ "Review and merge a pull request",
2099
+ "Debug a failing pipeline run",
2100
+ "Edit runner pool capacity",
2101
+ "Inspect and replay webhook deliveries",
2102
+ "Save a triage View"
2103
+ ],
2104
+ "cards": [
2105
+ {
2106
+ "label": "Repositories",
2107
+ "value": 1,
2108
+ "href": "/repositories"
2109
+ },
2110
+ {
2111
+ "label": "Pull requests",
2112
+ "value": 0,
2113
+ "href": "/inbox"
2114
+ },
2115
+ {
2116
+ "label": "Runs",
2117
+ "value": 0,
2118
+ "href": "/runs"
2119
+ },
2120
+ {
2121
+ "label": "Runner pools",
2122
+ "value": 1,
2123
+ "href": "/runners-ci"
2124
+ },
2125
+ {
2126
+ "label": "Webhook deliveries",
2127
+ "value": 0,
2128
+ "href": "/hooks-events"
2129
+ }
2130
+ ]
2131
+ },
2132
+ "pullRequestReview": null,
2133
+ "failingRun": null,
2134
+ "runnerPoolEditor": {
2135
+ "resource": {
2136
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2137
+ "kind": "RunnerPool",
2138
+ "metadata": {
2139
+ "namespace": "krate-org-default",
2140
+ "labels": {
2141
+ "trustTier": "trusted"
2142
+ },
2143
+ "annotations": {},
2144
+ "name": "trusted-linux",
2145
+ "resourceVersion": "1"
2146
+ },
2147
+ "spec": {
2148
+ "organizationRef": "default",
2149
+ "image": "ubuntu:24.04",
2150
+ "warmReplicas": 1,
2151
+ "maxReplicas": 4,
2152
+ "trustTier": "trusted",
2153
+ "cache": {
2154
+ "type": "object-storage"
2155
+ },
2156
+ "scalingMetric": "queueDepth"
2157
+ },
2158
+ "status": {
2159
+ "readyReplicas": 1,
2160
+ "queueDepth": 0,
2161
+ "storage": "etcd"
2162
+ }
2163
+ },
2164
+ "fields": [
2165
+ "image",
2166
+ "resources",
2167
+ "warmReplicas",
2168
+ "maxReplicas",
2169
+ "trustTier",
2170
+ "cache"
2171
+ ],
2172
+ "saveModes": [
2173
+ "save capacity",
2174
+ "open review"
2175
+ ],
2176
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: RunnerPool\nmetadata:\n namespace: krate-org-default\n labels:\n trustTier: trusted\n annotations:\n name: trusted-linux\n resourceVersion: 1\nspec:\n organizationRef: default\n image: ubuntu:24.04\n warmReplicas: 1\n maxReplicas: 4\n trustTier: trusted\n cache:\n type: object-storage\n scalingMetric: queueDepth\nstatus:\n readyReplicas: 1\n queueDepth: 0\n storage: etcd\n"
2177
+ },
2178
+ "webhookInspector": {
2179
+ "subscription": {
2180
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2181
+ "kind": "WebhookSubscription",
2182
+ "metadata": {
2183
+ "namespace": "krate-org-default",
2184
+ "labels": {},
2185
+ "annotations": {},
2186
+ "name": "chatops",
2187
+ "resourceVersion": "1"
2188
+ },
2189
+ "spec": {
2190
+ "organizationRef": "default",
2191
+ "url": "https://hooks.example.test/krate",
2192
+ "events": [
2193
+ "pullrequest.created",
2194
+ "pullrequest.merged"
2195
+ ],
2196
+ "signing": {
2197
+ "algorithm": "hmac-sha256",
2198
+ "secretRef": "chatops-secret"
2199
+ },
2200
+ "mode": "active"
2201
+ },
2202
+ "status": {
2203
+ "ready": true,
2204
+ "storage": "etcd"
2205
+ }
2206
+ },
2207
+ "deliveries": [],
2208
+ "columns": [
2209
+ "phase",
2210
+ "signature",
2211
+ "attempts",
2212
+ "response",
2213
+ "latency"
2214
+ ],
2215
+ "actions": [
2216
+ "replay",
2217
+ "disable subscription",
2218
+ "copy curl"
2219
+ ]
2220
+ },
2221
+ "triageView": null,
2222
+ "identityAdmin": {
2223
+ "counts": {
2224
+ "users": 1,
2225
+ "teams": 1,
2226
+ "pendingInvites": 1,
2227
+ "mappings": 1,
2228
+ "repositoryGrants": 0,
2229
+ "sshKeys": 0
2230
+ },
2231
+ "providers": [
2232
+ {
2233
+ "name": "github",
2234
+ "label": "GitHub",
2235
+ "type": "github",
2236
+ "enabled": true,
2237
+ "phase": "Configured"
2238
+ },
2239
+ {
2240
+ "name": "sso",
2241
+ "label": "Workspace SSO",
2242
+ "type": "oidc",
2243
+ "enabled": false,
2244
+ "phase": "Disabled"
2245
+ }
2246
+ ],
2247
+ "users": [
2248
+ {
2249
+ "name": "admin",
2250
+ "displayName": "Admin",
2251
+ "email": "admin@example.com",
2252
+ "teams": [
2253
+ "maintainers"
2254
+ ],
2255
+ "admin": true,
2256
+ "disabled": false,
2257
+ "phase": "Active"
2258
+ }
2259
+ ],
2260
+ "teams": [
2261
+ {
2262
+ "name": "maintainers",
2263
+ "displayName": "Maintainers",
2264
+ "members": [
2265
+ "admin"
2266
+ ],
2267
+ "maintainers": [
2268
+ "admin"
2269
+ ],
2270
+ "repositoryGrants": [
2271
+ {
2272
+ "repository": "krate-demo",
2273
+ "permission": "admin"
2274
+ }
2275
+ ]
2276
+ }
2277
+ ],
2278
+ "invites": [
2279
+ {
2280
+ "name": "new-user-example-com",
2281
+ "email": "new-user@example.com",
2282
+ "role": "member",
2283
+ "teams": [
2284
+ "maintainers"
2285
+ ],
2286
+ "phase": "Pending",
2287
+ "expiresAt": "2026-05-18T20:52:22.913Z"
2288
+ }
2289
+ ],
2290
+ "mappings": [
2291
+ {
2292
+ "name": "sso-admin",
2293
+ "user": "admin",
2294
+ "provider": "sso",
2295
+ "workspaceIdentity": "admin@example.com",
2296
+ "repositoryIdentity": "admin",
2297
+ "phase": "Synced"
2298
+ }
2299
+ ],
2300
+ "permissions": [],
2301
+ "sshKeys": [],
2302
+ "reconciliation": {
2303
+ "counts": {
2304
+ "User": 1,
2305
+ "Team": 1,
2306
+ "Invite": 1,
2307
+ "IdentityMapping": 1
2308
+ },
2309
+ "phases": {
2310
+ "Active": 2,
2311
+ "Pending": 1,
2312
+ "Synced": 1
2313
+ },
2314
+ "statuses": [
2315
+ {
2316
+ "kind": "User",
2317
+ "name": "admin",
2318
+ "phase": "Active",
2319
+ "checks": [
2320
+ "User Observed: ready",
2321
+ "Workspace Identity Projected: ready",
2322
+ "Repository Identity Projected: ready"
2323
+ ]
2324
+ },
2325
+ {
2326
+ "kind": "Team",
2327
+ "name": "maintainers",
2328
+ "phase": "Active",
2329
+ "checks": [
2330
+ "Team Observed: ready",
2331
+ "Team Membership Projected: ready",
2332
+ "Repository Grants Projected: ready"
2333
+ ]
2334
+ },
2335
+ {
2336
+ "kind": "Invite",
2337
+ "name": "new-user-example-com",
2338
+ "phase": "Pending",
2339
+ "checks": [
2340
+ "Invite Observed: ready",
2341
+ "Invite Lifecycle Tracked: ready"
2342
+ ]
2343
+ },
2344
+ {
2345
+ "kind": "IdentityMapping",
2346
+ "name": "sso-admin",
2347
+ "phase": "Synced",
2348
+ "checks": [
2349
+ "Identity Mapping Observed: ready",
2350
+ "Workspace Identity Projected: ready",
2351
+ "Repository Identity Projected: ready"
2352
+ ]
2353
+ }
2354
+ ],
2355
+ "nextActions": [
2356
+ "ensure user: admin",
2357
+ "ensure repository user: admin",
2358
+ "sync team membership: maintainers",
2359
+ "sync team repository grant: maintainers",
2360
+ "send invite: workspace access",
2361
+ "link identity: admin",
2362
+ "link repository identity: admin"
2363
+ ]
2364
+ },
2365
+ "org": "default"
2366
+ },
2367
+ "policyCenter": {
2368
+ "engine": "kyverno",
2369
+ "mode": "disabled",
2370
+ "health": "disabled",
2371
+ "detected": false,
2372
+ "namespace": "kyverno",
2373
+ "policyNamespace": "krate-org-default",
2374
+ "requireForEnforceMode": true,
2375
+ "org": "default",
2376
+ "profiles": [],
2377
+ "templates": [],
2378
+ "bindings": [],
2379
+ "exceptionRequests": [],
2380
+ "kyvernoResources": {},
2381
+ "controllers": [],
2382
+ "permissions": [],
2383
+ "reports": {
2384
+ "policyReports": 0,
2385
+ "clusterPolicyReports": 0,
2386
+ "results": []
2387
+ },
2388
+ "violations": [],
2389
+ "degraded": [],
2390
+ "emptyState": "Kyverno integration is disabled. Krate native RefPolicy and BranchProtection remain available."
2391
+ }
2392
+ },
2393
+ "operations": {
2394
+ "image": "ghcr.io/<owner>/<repo>/krate-controller",
2395
+ "chart": "charts/krate",
2396
+ "installCommands": [
2397
+ "Install Krate release package",
2398
+ "Apply the demo workspace configuration"
2399
+ ],
2400
+ "releaseGates": [
2401
+ "npm run check",
2402
+ "docker build",
2403
+ "helm package charts/krate",
2404
+ "npm pack --json"
2405
+ ]
2406
+ }
2407
+ }