@a5c-ai/krate 5.0.1-staging.00fa5317c

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 (256) hide show
  1. package/Dockerfile +31 -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 +3205 -0
  6. package/dist/krate-lifecycle.json +201 -0
  7. package/dist/krate-runtime-snapshot.json +3125 -0
  8. package/dist/krate-summary.json +724 -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/gaps-agent-mux-to-krate-crds.md +298 -0
  27. package/docs/agents/glossary.md +66 -0
  28. package/docs/agents/implementation-blueprint.md +324 -0
  29. package/docs/agents/implementation-rollout-slices.md +251 -0
  30. package/docs/agents/memory-context-integration-spec.md +194 -0
  31. package/docs/agents/memory-ontology-schema-spec.md +253 -0
  32. package/docs/agents/memory-operations-runbook.md +121 -0
  33. package/docs/agents/mvp-vertical-slice-spec.md +146 -0
  34. package/docs/agents/observability-audit-spec.md +265 -0
  35. package/docs/agents/operator-runbook.md +174 -0
  36. package/docs/agents/org-memory-api-payload-examples.md +333 -0
  37. package/docs/agents/org-memory-controller-sequence-spec.md +181 -0
  38. package/docs/agents/org-memory-e2e-fixture-plan.md +161 -0
  39. package/docs/agents/org-memory-ui-implementation-map.md +114 -0
  40. package/docs/agents/org-memory-vertical-slice-spec.md +168 -0
  41. package/docs/agents/org-resource-model-delta-spec.md +111 -0
  42. package/docs/agents/org-route-resource-model-spec.md +183 -0
  43. package/docs/agents/org-scoping-namespace-spec.md +114 -0
  44. package/docs/agents/rbac-secrets-management-spec.md +406 -0
  45. package/docs/agents/repository-page-integration-spec.md +255 -0
  46. package/docs/agents/resource-contract-examples.md +808 -0
  47. package/docs/agents/resource-relationship-map.md +190 -0
  48. package/docs/agents/security-threat-model.md +188 -0
  49. package/docs/agents/shared-memory-company-brain-spec.md +358 -0
  50. package/docs/agents/storage-migration-spec.md +168 -0
  51. package/docs/agents/subagent-orchestration-spec.md +152 -0
  52. package/docs/agents/system-overview.md +88 -0
  53. package/docs/agents/tools-mcp-skills-spec.md +189 -0
  54. package/docs/agents/traceability-matrix.md +79 -0
  55. package/docs/agents/ui-flow-spec.md +211 -0
  56. package/docs/agents/ui-ux-system-spec.md +426 -0
  57. package/docs/agents/workspace-lifecycle-spec.md +166 -0
  58. package/docs/architecture-spec.md +78 -0
  59. package/docs/components/control-plane.md +78 -0
  60. package/docs/components/data-plane.md +69 -0
  61. package/docs/components/hooks-events.md +67 -0
  62. package/docs/components/identity-rbac-policy.md +73 -0
  63. package/docs/components/kubevela-oam.md +70 -0
  64. package/docs/components/operations-publishing.md +81 -0
  65. package/docs/components/runners-ci.md +66 -0
  66. package/docs/components/web-ui.md +94 -0
  67. package/docs/external/README.md +47 -0
  68. package/docs/external/bidirectional-sync-design.md +134 -0
  69. package/docs/external/cicd-interface.md +64 -0
  70. package/docs/external/external-backend-controllers.md +170 -0
  71. package/docs/external/external-backend-crds.md +234 -0
  72. package/docs/external/external-backend-ui-spec.md +151 -0
  73. package/docs/external/external-backend-ux-flows.md +115 -0
  74. package/docs/external/external-object-mapping.md +125 -0
  75. package/docs/external/git-forge-interface.md +68 -0
  76. package/docs/external/github-integration-design.md +151 -0
  77. package/docs/external/issue-tracking-interface.md +66 -0
  78. package/docs/external/provider-capability-manifests.md +204 -0
  79. package/docs/external/provider-catalog.md +139 -0
  80. package/docs/external/provider-rollout-testing.md +78 -0
  81. package/docs/external/research-results.md +48 -0
  82. package/docs/external/security-auth-permissions.md +81 -0
  83. package/docs/external/sync-state-machines.md +108 -0
  84. package/docs/external/unified-external-backend-model.md +107 -0
  85. package/docs/external/user-facing-changes.md +67 -0
  86. package/docs/gaps.md +161 -0
  87. package/docs/install.md +94 -0
  88. package/docs/krate-design.md +334 -0
  89. package/docs/local-minikube.md +55 -0
  90. package/docs/ontology/README.md +32 -0
  91. package/docs/ontology/bounded-contexts.md +29 -0
  92. package/docs/ontology/events-and-hooks.md +32 -0
  93. package/docs/ontology/oam-kubevela.md +32 -0
  94. package/docs/ontology/operations-and-release.md +25 -0
  95. package/docs/ontology/personas-and-actors.md +32 -0
  96. package/docs/ontology/policies-and-invariants.md +33 -0
  97. package/docs/ontology/problem-space.md +30 -0
  98. package/docs/ontology/resource-contracts.md +40 -0
  99. package/docs/ontology/resource-taxonomy.md +42 -0
  100. package/docs/ontology/runners-and-ci.md +29 -0
  101. package/docs/ontology/solution-space.md +24 -0
  102. package/docs/ontology/storage-and-data-boundaries.md +29 -0
  103. package/docs/ontology/validation-matrix.md +24 -0
  104. package/docs/ontology/web-ui-excellent-flows.md +32 -0
  105. package/docs/ontology/workflows.md +39 -0
  106. package/docs/ontology/world.md +35 -0
  107. package/docs/openapi.yaml +1275 -0
  108. package/docs/product-requirements.md +62 -0
  109. package/docs/roadmap-mvp.md +87 -0
  110. package/docs/system-requirements.md +90 -0
  111. package/docs/tests/README.md +53 -0
  112. package/docs/tests/agent-qa-plan.md +63 -0
  113. package/docs/tests/browser-ui-tests.md +62 -0
  114. package/docs/tests/ci-quality-gates.md +48 -0
  115. package/docs/tests/coverage-model.md +64 -0
  116. package/docs/tests/e2e-scenario-tests.md +53 -0
  117. package/docs/tests/fixtures-test-data.md +63 -0
  118. package/docs/tests/observability-reliability-tests.md +54 -0
  119. package/docs/tests/product-test-matrix.md +145 -0
  120. package/docs/tests/qa-adoption-roadmap.md +130 -0
  121. package/docs/tests/qa-automation-plan.md +101 -0
  122. package/docs/tests/security-compliance-tests.md +57 -0
  123. package/docs/tests/test-framework-tools.md +88 -0
  124. package/docs/tests/test-suite-layout.md +121 -0
  125. package/docs/tests/unit-integration-tests.md +48 -0
  126. package/docs/todo-kyverno +714 -0
  127. package/docs/todos.md +4 -0
  128. package/docs/user-stories.md +78 -0
  129. package/examples/minikube-demo.yaml +190 -0
  130. package/examples/oam-application.yaml +23 -0
  131. package/examples/policy-kyverno-pr-title.yaml +18 -0
  132. package/package.json +63 -0
  133. package/scripts/build.mjs +29 -0
  134. package/scripts/setup-minikube.mjs +65 -0
  135. package/scripts/smoke.mjs +37 -0
  136. package/scripts/validate-doc-coverage.mjs +152 -0
  137. package/scripts/validate-package.mjs +93 -0
  138. package/scripts/validate-ui.mjs +278 -0
  139. package/src/agent-adapter-controller.js +169 -0
  140. package/src/agent-approval-controller.js +170 -0
  141. package/src/agent-context-bundles.js +242 -0
  142. package/src/agent-dispatch-controller.js +209 -0
  143. package/src/agent-gateway-config-controller.js +147 -0
  144. package/src/agent-memory-controller.js +357 -0
  145. package/src/agent-memory-import.js +327 -0
  146. package/src/agent-memory-query.js +292 -0
  147. package/src/agent-memory-repository-source-controller.js +255 -0
  148. package/src/agent-mux-client.js +280 -0
  149. package/src/agent-permission-review.js +250 -0
  150. package/src/agent-project-controller.js +117 -0
  151. package/src/agent-provider-config-controller.js +150 -0
  152. package/src/agent-secret-config-grant-controller.js +282 -0
  153. package/src/agent-session-transcript-controller.js +189 -0
  154. package/src/agent-stack-controller.js +347 -0
  155. package/src/agent-subagent-controller.js +160 -0
  156. package/src/agent-transport-binding-controller.js +121 -0
  157. package/src/agent-trigger-controller.js +381 -0
  158. package/src/agent-workspace-controller.js +702 -0
  159. package/src/agent-writeback-controller.js +302 -0
  160. package/src/api-controller.js +541 -0
  161. package/src/argocd-gitops.js +43 -0
  162. package/src/async-controller.js +207 -0
  163. package/src/audit-controller.js +191 -0
  164. package/src/auth.js +307 -0
  165. package/src/component-catalog.js +41 -0
  166. package/src/control-plane.js +136 -0
  167. package/src/controller-client.js +72 -0
  168. package/src/controller-ui.js +617 -0
  169. package/src/data-plane.js +179 -0
  170. package/src/event-bus.js +61 -0
  171. package/src/external/conflict-controller.js +225 -0
  172. package/src/external/github/auth.js +96 -0
  173. package/src/external/github/cicd.js +180 -0
  174. package/src/external/github/git-forge.js +240 -0
  175. package/src/external/github/index.js +144 -0
  176. package/src/external/github/issue-tracking.js +163 -0
  177. package/src/external/provider-adapter.js +161 -0
  178. package/src/external/provider-resource-factory.js +161 -0
  179. package/src/external/sync-controller.js +235 -0
  180. package/src/external/webhook-controller.js +144 -0
  181. package/src/external/write-controller.js +283 -0
  182. package/src/gitea-backend.js +131 -0
  183. package/src/gitea-service.js +173 -0
  184. package/src/handoff.js +98 -0
  185. package/src/hooks-events.js +63 -0
  186. package/src/http-server.js +377 -0
  187. package/src/identity-policy.js +86 -0
  188. package/src/index.js +57 -0
  189. package/src/kubernetes-controller-async.js +511 -0
  190. package/src/kubernetes-controller.js +878 -0
  191. package/src/kubernetes-resource-gateway.js +48 -0
  192. package/src/notification-controller.js +178 -0
  193. package/src/operations.js +112 -0
  194. package/src/org-scoping.js +5 -0
  195. package/src/resource-model.js +221 -0
  196. package/src/runner-controller.js +272 -0
  197. package/src/runners-ci.js +48 -0
  198. package/src/runtime.js +196 -0
  199. package/src/snapshot-cache.js +157 -0
  200. package/src/web-ui.js +40 -0
  201. package/tests/agent-adapter-controller.test.js +361 -0
  202. package/tests/agent-approval-controller.test.js +173 -0
  203. package/tests/agent-context-bundles.test.js +278 -0
  204. package/tests/agent-dispatch-controller.test.js +315 -0
  205. package/tests/agent-gateway-config-controller.test.js +386 -0
  206. package/tests/agent-memory-controller.test.js +308 -0
  207. package/tests/agent-memory-import-snapshot.test.js +477 -0
  208. package/tests/agent-memory-query.test.js +404 -0
  209. package/tests/agent-memory-repository-source.test.js +514 -0
  210. package/tests/agent-mux-client.test.js +204 -0
  211. package/tests/agent-permission-review-v2.test.js +317 -0
  212. package/tests/agent-permission-review.test.js +209 -0
  213. package/tests/agent-project-controller.test.js +302 -0
  214. package/tests/agent-provider-config-controller.test.js +376 -0
  215. package/tests/agent-resources.test.js +228 -0
  216. package/tests/agent-secret-config-grant.test.js +231 -0
  217. package/tests/agent-session-transcript-controller.test.js +499 -0
  218. package/tests/agent-stack-controller.test.js +221 -0
  219. package/tests/agent-subagent-controller.test.js +201 -0
  220. package/tests/agent-transport-binding-controller.test.js +294 -0
  221. package/tests/agent-trigger-controller.test.js +211 -0
  222. package/tests/agent-trigger-routes.test.js +190 -0
  223. package/tests/agent-trigger-sources.test.js +245 -0
  224. package/tests/agent-workspace-controller.test.js +181 -0
  225. package/tests/agent-writeback.test.js +292 -0
  226. package/tests/approval-persistence.test.js +171 -0
  227. package/tests/async-controller.test.js +252 -0
  228. package/tests/audit-controller.test.js +227 -0
  229. package/tests/codespace-controller.test.js +318 -0
  230. package/tests/deployment.test.js +407 -0
  231. package/tests/e2e/lifecycle.test.js +117 -0
  232. package/tests/event-bus-integration.test.js +190 -0
  233. package/tests/external-github-forge.test.js +560 -0
  234. package/tests/external-github-issues-cicd.test.js +520 -0
  235. package/tests/external-integration.test.js +470 -0
  236. package/tests/external-persistence.test.js +340 -0
  237. package/tests/external-provider-adapter.test.js +365 -0
  238. package/tests/external-resource-model.test.js +215 -0
  239. package/tests/external-webhook-sync.test.js +287 -0
  240. package/tests/external-write-conflict.test.js +353 -0
  241. package/tests/gitea-service.test.js +253 -0
  242. package/tests/health-check-real.test.js +165 -0
  243. package/tests/integration/full-flow.test.js +266 -0
  244. package/tests/krate.test.js +756 -0
  245. package/tests/memory-search-wiring.test.js +270 -0
  246. package/tests/notification-controller.test.js +196 -0
  247. package/tests/notification-integration.test.js +179 -0
  248. package/tests/org-scoping.test.js +687 -0
  249. package/tests/runner-controller.test.js +327 -0
  250. package/tests/runner-integration.test.js +231 -0
  251. package/tests/session-cookie-hmac.test.js +151 -0
  252. package/tests/snapshot-performance.test.js +247 -0
  253. package/tests/sse-events.test.js +107 -0
  254. package/tests/webhook-trigger.test.js +198 -0
  255. package/tests/workspace-volumes.test.js +312 -0
  256. package/tests/writeback-persistence.test.js +207 -0
@@ -0,0 +1,3125 @@
1
+ {
2
+ "namespace": "krate-org-default",
3
+ "export": {
4
+ "apiVersion": "krate.a5c.ai/v1alpha1",
5
+ "kind": "KrateRuntimeSnapshot",
6
+ "namespace": "krate-org-default",
7
+ "organizationRef": "default",
8
+ "seeded": true,
9
+ "controlPlane": {
10
+ "apiVersion": "krate.a5c.ai/v1alpha1",
11
+ "kind": "ControlPlaneSnapshot",
12
+ "stores": {
13
+ "etcd": [
14
+ {
15
+ "apiVersion": "krate.a5c.ai/v1alpha1",
16
+ "kind": "Repository",
17
+ "metadata": {
18
+ "namespace": "krate-org-default",
19
+ "labels": {
20
+ "gitBackend": "gitea"
21
+ },
22
+ "annotations": {},
23
+ "name": "krate-demo",
24
+ "resourceVersion": "1"
25
+ },
26
+ "spec": {
27
+ "organizationRef": "default",
28
+ "visibility": "private",
29
+ "gitHosting": {
30
+ "backend": "gitea",
31
+ "owner": "krate",
32
+ "repository": "krate-demo",
33
+ "branch": "main",
34
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
35
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
36
+ "deployKeyTitle": "krate-argocd",
37
+ "organization": {
38
+ "kind": "Organization",
39
+ "name": "krate",
40
+ "delegatedTo": "Gitea /api/v1/orgs"
41
+ },
42
+ "sshKeys": {
43
+ "kind": "SSHKey",
44
+ "scopes": [
45
+ "user",
46
+ "deploy",
47
+ "argocd"
48
+ ],
49
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
50
+ },
51
+ "permissions": {
52
+ "kind": "RepositoryPermission",
53
+ "defaultCollaborator": "write",
54
+ "adminTeam": "maintainers",
55
+ "delegatedTo": "Gitea collaborators and team repository APIs"
56
+ },
57
+ "forgeRecords": {
58
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
59
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
60
+ },
61
+ "issueSync": {
62
+ "backend": "gitea",
63
+ "owner": "krate-org-default",
64
+ "repo": "_krate-org-default_",
65
+ "issue": "<issue>",
66
+ "project": null,
67
+ "repositoryRefs": [
68
+ "krate-demo"
69
+ ],
70
+ "metadataKeys": [
71
+ "krate.a5c.ai/project",
72
+ "krate.a5c.ai/repositories"
73
+ ],
74
+ "actions": [
75
+ {
76
+ "action": "ensureOrgMemoryRepository",
77
+ "owner": "krate-org-default",
78
+ "repo": "_krate-org-default_"
79
+ },
80
+ {
81
+ "action": "syncIssue",
82
+ "owner": "krate-org-default",
83
+ "repo": "_krate-org-default_",
84
+ "issue": "<issue>"
85
+ },
86
+ {
87
+ "action": "writeIssueRepositoryMetadata",
88
+ "issue": "<issue>",
89
+ "repositories": [
90
+ "krate-demo"
91
+ ]
92
+ }
93
+ ]
94
+ },
95
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
96
+ "integrationPlan": {
97
+ "backend": "gitea",
98
+ "operations": [
99
+ {
100
+ "action": "createOrganization",
101
+ "owner": "krate"
102
+ },
103
+ {
104
+ "action": "createRepository",
105
+ "owner": "krate",
106
+ "repo": "krate-demo"
107
+ },
108
+ {
109
+ "action": "ensureUserMappings",
110
+ "owner": "krate"
111
+ },
112
+ {
113
+ "action": "addDeployKey",
114
+ "owner": "krate",
115
+ "repo": "krate-demo",
116
+ "title": "krate-argocd",
117
+ "readOnly": false
118
+ },
119
+ {
120
+ "action": "addUserSshKey",
121
+ "owner": "krate",
122
+ "repo": "krate-demo",
123
+ "title": "developer key"
124
+ },
125
+ {
126
+ "action": "addCollaborator",
127
+ "owner": "krate",
128
+ "repo": "krate-demo",
129
+ "permission": "write"
130
+ },
131
+ {
132
+ "action": "addTeamRepository",
133
+ "owner": "krate",
134
+ "repo": "krate-demo",
135
+ "team": "maintainers",
136
+ "permission": "admin"
137
+ },
138
+ {
139
+ "action": "protectBranch",
140
+ "owner": "krate",
141
+ "repo": "krate-demo",
142
+ "branch": "main"
143
+ },
144
+ {
145
+ "action": "createWebhook",
146
+ "owner": "krate",
147
+ "repo": "krate-demo",
148
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
149
+ }
150
+ ]
151
+ }
152
+ },
153
+ "storage": {
154
+ "mode": "gitea",
155
+ "persistentVolumeClaim": "krate-gitea-data",
156
+ "owner": "krate",
157
+ "repository": "krate-demo",
158
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
159
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
160
+ },
161
+ "objectStorage": {
162
+ "lfs": true,
163
+ "artifacts": true
164
+ },
165
+ "search": {
166
+ "provider": "zoekt",
167
+ "enabled": false
168
+ }
169
+ },
170
+ "status": {
171
+ "ready": true,
172
+ "route": {
173
+ "repositoryName": "krate-demo",
174
+ "backend": "gitea",
175
+ "owner": "krate",
176
+ "store": "gitea-primary",
177
+ "receivePackReady": true,
178
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
179
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
180
+ },
181
+ "gitHosting": {
182
+ "backend": "gitea",
183
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
184
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
185
+ "integrationPlan": {
186
+ "backend": "gitea",
187
+ "operations": [
188
+ {
189
+ "action": "createOrganization",
190
+ "owner": "krate"
191
+ },
192
+ {
193
+ "action": "createRepository",
194
+ "owner": "krate",
195
+ "repo": "krate-demo"
196
+ },
197
+ {
198
+ "action": "ensureUserMappings",
199
+ "owner": "krate"
200
+ },
201
+ {
202
+ "action": "addDeployKey",
203
+ "owner": "krate",
204
+ "repo": "krate-demo",
205
+ "title": "krate-argocd",
206
+ "readOnly": false
207
+ },
208
+ {
209
+ "action": "addUserSshKey",
210
+ "owner": "krate",
211
+ "repo": "krate-demo",
212
+ "title": "developer key"
213
+ },
214
+ {
215
+ "action": "addCollaborator",
216
+ "owner": "krate",
217
+ "repo": "krate-demo",
218
+ "permission": "write"
219
+ },
220
+ {
221
+ "action": "addTeamRepository",
222
+ "owner": "krate",
223
+ "repo": "krate-demo",
224
+ "team": "maintainers",
225
+ "permission": "admin"
226
+ },
227
+ {
228
+ "action": "protectBranch",
229
+ "owner": "krate",
230
+ "repo": "krate-demo",
231
+ "branch": "main"
232
+ },
233
+ {
234
+ "action": "createWebhook",
235
+ "owner": "krate",
236
+ "repo": "krate-demo",
237
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
238
+ }
239
+ ]
240
+ }
241
+ },
242
+ "storage": "etcd"
243
+ }
244
+ },
245
+ {
246
+ "apiVersion": "krate.a5c.ai/v1alpha1",
247
+ "kind": "BranchProtection",
248
+ "metadata": {
249
+ "namespace": "krate-org-default",
250
+ "labels": {},
251
+ "annotations": {},
252
+ "name": "main-protection",
253
+ "resourceVersion": "1"
254
+ },
255
+ "spec": {
256
+ "organizationRef": "default",
257
+ "refs": [
258
+ "refs/heads/main"
259
+ ],
260
+ "requirePullRequest": true,
261
+ "requiredChecks": [
262
+ "test"
263
+ ],
264
+ "requiredApprovals": 1
265
+ },
266
+ "status": {
267
+ "storage": "etcd"
268
+ }
269
+ },
270
+ {
271
+ "apiVersion": "krate.a5c.ai/v1alpha1",
272
+ "kind": "RefPolicy",
273
+ "metadata": {
274
+ "namespace": "krate-org-default",
275
+ "labels": {},
276
+ "annotations": {},
277
+ "name": "deny-internal-refs",
278
+ "resourceVersion": "1"
279
+ },
280
+ "spec": {
281
+ "organizationRef": "default",
282
+ "deny": [
283
+ "refs/internal/"
284
+ ]
285
+ },
286
+ "status": {
287
+ "storage": "etcd"
288
+ }
289
+ },
290
+ {
291
+ "apiVersion": "krate.a5c.ai/v1alpha1",
292
+ "kind": "RunnerPool",
293
+ "metadata": {
294
+ "namespace": "krate-org-default",
295
+ "labels": {
296
+ "trustTier": "trusted"
297
+ },
298
+ "annotations": {},
299
+ "name": "trusted-linux",
300
+ "resourceVersion": "1"
301
+ },
302
+ "spec": {
303
+ "organizationRef": "default",
304
+ "image": "ubuntu:24.04",
305
+ "warmReplicas": 1,
306
+ "maxReplicas": 4,
307
+ "trustTier": "trusted",
308
+ "cache": {
309
+ "type": "object-storage"
310
+ },
311
+ "scalingMetric": "queueDepth"
312
+ },
313
+ "status": {
314
+ "readyReplicas": 1,
315
+ "queueDepth": 0,
316
+ "storage": "etcd"
317
+ }
318
+ },
319
+ {
320
+ "apiVersion": "krate.a5c.ai/v1alpha1",
321
+ "kind": "WebhookSubscription",
322
+ "metadata": {
323
+ "namespace": "krate-org-default",
324
+ "labels": {},
325
+ "annotations": {},
326
+ "name": "chatops",
327
+ "resourceVersion": "1"
328
+ },
329
+ "spec": {
330
+ "organizationRef": "default",
331
+ "url": "https://hooks.example.test/krate",
332
+ "events": [
333
+ "pullrequest.created",
334
+ "pullrequest.merged"
335
+ ],
336
+ "signing": {
337
+ "algorithm": "hmac-sha256",
338
+ "secretRef": "chatops-secret"
339
+ },
340
+ "mode": "active"
341
+ },
342
+ "status": {
343
+ "ready": true,
344
+ "storage": "etcd"
345
+ }
346
+ },
347
+ {
348
+ "apiVersion": "krate.a5c.ai/v1alpha1",
349
+ "kind": "Team",
350
+ "metadata": {
351
+ "namespace": "krate-org-default",
352
+ "labels": {},
353
+ "annotations": {},
354
+ "name": "maintainers",
355
+ "resourceVersion": "1"
356
+ },
357
+ "spec": {
358
+ "organizationRef": "default",
359
+ "displayName": "Maintainers",
360
+ "members": [
361
+ "admin"
362
+ ],
363
+ "maintainers": [
364
+ "admin"
365
+ ],
366
+ "repositoryGrants": [
367
+ {
368
+ "repository": "krate-demo",
369
+ "permission": "admin"
370
+ }
371
+ ]
372
+ },
373
+ "status": {
374
+ "phase": "Active",
375
+ "memberCount": 1,
376
+ "storage": "etcd"
377
+ }
378
+ },
379
+ {
380
+ "apiVersion": "krate.a5c.ai/v1alpha1",
381
+ "kind": "User",
382
+ "metadata": {
383
+ "namespace": "krate-org-default",
384
+ "labels": {
385
+ "role": "admin"
386
+ },
387
+ "annotations": {},
388
+ "name": "admin",
389
+ "resourceVersion": "1"
390
+ },
391
+ "spec": {
392
+ "organizationRef": "default",
393
+ "displayName": "Admin",
394
+ "email": "admin@example.com",
395
+ "username": "admin",
396
+ "teams": [
397
+ "maintainers"
398
+ ],
399
+ "admin": true,
400
+ "disabled": false
401
+ },
402
+ "status": {
403
+ "phase": "Active",
404
+ "lastLoginProvider": "sso",
405
+ "groups": [
406
+ "system:authenticated",
407
+ "krate:users",
408
+ "krate:platform-engineers"
409
+ ],
410
+ "storage": "etcd"
411
+ }
412
+ },
413
+ {
414
+ "apiVersion": "krate.a5c.ai/v1alpha1",
415
+ "kind": "IdentityMapping",
416
+ "metadata": {
417
+ "namespace": "krate-org-default",
418
+ "labels": {},
419
+ "annotations": {},
420
+ "name": "sso-admin",
421
+ "resourceVersion": "1"
422
+ },
423
+ "spec": {
424
+ "organizationRef": "default",
425
+ "user": "admin",
426
+ "provider": "sso",
427
+ "subject": "user:admin",
428
+ "email": "admin@example.com",
429
+ "workspaceIdentity": {
430
+ "name": "admin@example.com",
431
+ "uid": "user:admin",
432
+ "groups": [
433
+ "system:authenticated",
434
+ "krate:users",
435
+ "krate:platform-engineers"
436
+ ]
437
+ },
438
+ "repositoryIdentity": {
439
+ "username": "admin",
440
+ "email": "admin@example.com"
441
+ }
442
+ },
443
+ "status": {
444
+ "phase": "Synced",
445
+ "storage": "etcd"
446
+ }
447
+ },
448
+ {
449
+ "apiVersion": "krate.a5c.ai/v1alpha1",
450
+ "kind": "Invite",
451
+ "metadata": {
452
+ "namespace": "krate-org-default",
453
+ "labels": {
454
+ "role": "member"
455
+ },
456
+ "annotations": {},
457
+ "name": "new-user-example-com",
458
+ "resourceVersion": "1"
459
+ },
460
+ "spec": {
461
+ "organizationRef": "default",
462
+ "email": "new-user@example.com",
463
+ "role": "member",
464
+ "teams": [
465
+ "maintainers"
466
+ ],
467
+ "invitedBy": "admin",
468
+ "expiresAt": "2026-05-23T10:16:57.569Z"
469
+ },
470
+ "status": {
471
+ "phase": "Pending",
472
+ "storage": "etcd"
473
+ }
474
+ },
475
+ {
476
+ "apiVersion": "krate.a5c.ai/v1alpha1",
477
+ "kind": "AuthProvider",
478
+ "metadata": {
479
+ "namespace": "krate-org-default",
480
+ "labels": {},
481
+ "annotations": {},
482
+ "name": "github",
483
+ "resourceVersion": "1"
484
+ },
485
+ "spec": {
486
+ "organizationRef": "default",
487
+ "type": "github",
488
+ "label": "GitHub",
489
+ "enabled": true,
490
+ "scopes": "read:user user:email",
491
+ "delegatedIdentity": {
492
+ "enabled": false,
493
+ "userHeader": "x-forwarded-user",
494
+ "groupsHeader": "x-forwarded-groups",
495
+ "emailHeader": "x-forwarded-email",
496
+ "localDevelopment": {
497
+ "enabled": true,
498
+ "user": "local-developer",
499
+ "email": "",
500
+ "groups": "krate:repo-admins"
501
+ }
502
+ }
503
+ },
504
+ "status": {
505
+ "phase": "Configured",
506
+ "clientConfigured": false,
507
+ "storage": "etcd"
508
+ }
509
+ },
510
+ {
511
+ "apiVersion": "krate.a5c.ai/v1alpha1",
512
+ "kind": "AuthProvider",
513
+ "metadata": {
514
+ "namespace": "krate-org-default",
515
+ "labels": {},
516
+ "annotations": {},
517
+ "name": "sso",
518
+ "resourceVersion": "1"
519
+ },
520
+ "spec": {
521
+ "organizationRef": "default",
522
+ "type": "oidc",
523
+ "label": "Workspace SSO",
524
+ "enabled": false,
525
+ "scopes": "openid profile email groups",
526
+ "delegatedIdentity": {
527
+ "enabled": false,
528
+ "userHeader": "x-forwarded-user",
529
+ "groupsHeader": "x-forwarded-groups",
530
+ "emailHeader": "x-forwarded-email",
531
+ "localDevelopment": {
532
+ "enabled": true,
533
+ "user": "local-developer",
534
+ "email": "",
535
+ "groups": "krate:repo-admins"
536
+ }
537
+ }
538
+ },
539
+ "status": {
540
+ "phase": "Disabled",
541
+ "clientConfigured": false,
542
+ "storage": "etcd"
543
+ }
544
+ }
545
+ ],
546
+ "postgres": []
547
+ },
548
+ "auditLog": [
549
+ {
550
+ "at": "2026-05-16T10:16:57.567Z",
551
+ "operation": "create",
552
+ "user": "admin@example.com",
553
+ "groups": [
554
+ "system:authenticated",
555
+ "krate:repo-admins"
556
+ ],
557
+ "resource": "Repository/krate-org-default/krate-demo",
558
+ "warnings": [],
559
+ "allowed": true
560
+ },
561
+ {
562
+ "at": "2026-05-16T10:16:57.567Z",
563
+ "operation": "create",
564
+ "user": "admin@example.com",
565
+ "groups": [
566
+ "system:authenticated",
567
+ "krate:repo-admins"
568
+ ],
569
+ "resource": "BranchProtection/krate-org-default/main-protection",
570
+ "warnings": [],
571
+ "allowed": true
572
+ },
573
+ {
574
+ "at": "2026-05-16T10:16:57.567Z",
575
+ "operation": "create",
576
+ "user": "admin@example.com",
577
+ "groups": [
578
+ "system:authenticated",
579
+ "krate:repo-admins"
580
+ ],
581
+ "resource": "RefPolicy/krate-org-default/deny-internal-refs",
582
+ "warnings": [],
583
+ "allowed": true
584
+ },
585
+ {
586
+ "at": "2026-05-16T10:16:57.568Z",
587
+ "operation": "create",
588
+ "user": "platform@example.com",
589
+ "groups": [
590
+ "system:authenticated",
591
+ "krate:platform-engineers"
592
+ ],
593
+ "resource": "RunnerPool/krate-org-default/trusted-linux",
594
+ "warnings": [],
595
+ "allowed": true
596
+ },
597
+ {
598
+ "at": "2026-05-16T10:16:57.568Z",
599
+ "operation": "create",
600
+ "user": "admin@example.com",
601
+ "groups": [
602
+ "system:authenticated",
603
+ "krate:repo-admins"
604
+ ],
605
+ "resource": "WebhookSubscription/krate-org-default/chatops",
606
+ "warnings": [],
607
+ "allowed": true
608
+ },
609
+ {
610
+ "at": "2026-05-16T10:16:57.568Z",
611
+ "operation": "create",
612
+ "user": "platform@example.com",
613
+ "groups": [
614
+ "system:authenticated",
615
+ "krate:platform-engineers"
616
+ ],
617
+ "resource": "Team/krate-org-default/maintainers",
618
+ "warnings": [],
619
+ "allowed": true
620
+ },
621
+ {
622
+ "at": "2026-05-16T10:16:57.568Z",
623
+ "operation": "create",
624
+ "user": "platform@example.com",
625
+ "groups": [
626
+ "system:authenticated",
627
+ "krate:platform-engineers"
628
+ ],
629
+ "resource": "User/krate-org-default/admin",
630
+ "warnings": [],
631
+ "allowed": true
632
+ },
633
+ {
634
+ "at": "2026-05-16T10:16:57.568Z",
635
+ "operation": "create",
636
+ "user": "platform@example.com",
637
+ "groups": [
638
+ "system:authenticated",
639
+ "krate:platform-engineers"
640
+ ],
641
+ "resource": "IdentityMapping/krate-org-default/sso-admin",
642
+ "warnings": [],
643
+ "allowed": true
644
+ },
645
+ {
646
+ "at": "2026-05-16T10:16:57.569Z",
647
+ "operation": "create",
648
+ "user": "admin@example.com",
649
+ "groups": [
650
+ "system:authenticated",
651
+ "krate:repo-admins"
652
+ ],
653
+ "resource": "Invite/krate-org-default/new-user-example-com",
654
+ "warnings": [],
655
+ "allowed": true
656
+ },
657
+ {
658
+ "at": "2026-05-16T10:16:57.569Z",
659
+ "operation": "create",
660
+ "user": "platform@example.com",
661
+ "groups": [
662
+ "system:authenticated",
663
+ "krate:platform-engineers"
664
+ ],
665
+ "resource": "AuthProvider/krate-org-default/github",
666
+ "warnings": [],
667
+ "allowed": true
668
+ },
669
+ {
670
+ "at": "2026-05-16T10:16:57.569Z",
671
+ "operation": "create",
672
+ "user": "platform@example.com",
673
+ "groups": [
674
+ "system:authenticated",
675
+ "krate:platform-engineers"
676
+ ],
677
+ "resource": "AuthProvider/krate-org-default/sso",
678
+ "warnings": [],
679
+ "allowed": true
680
+ }
681
+ ],
682
+ "events": [
683
+ {
684
+ "type": "create",
685
+ "storage": "etcd",
686
+ "resource": {
687
+ "apiVersion": "krate.a5c.ai/v1alpha1",
688
+ "kind": "Repository",
689
+ "metadata": {
690
+ "namespace": "krate-org-default",
691
+ "labels": {
692
+ "gitBackend": "gitea"
693
+ },
694
+ "annotations": {},
695
+ "name": "krate-demo",
696
+ "resourceVersion": "1"
697
+ },
698
+ "spec": {
699
+ "organizationRef": "default",
700
+ "visibility": "private",
701
+ "gitHosting": {
702
+ "backend": "gitea",
703
+ "owner": "krate",
704
+ "repository": "krate-demo",
705
+ "branch": "main",
706
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
707
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
708
+ "deployKeyTitle": "krate-argocd",
709
+ "organization": {
710
+ "kind": "Organization",
711
+ "name": "krate",
712
+ "delegatedTo": "Gitea /api/v1/orgs"
713
+ },
714
+ "sshKeys": {
715
+ "kind": "SSHKey",
716
+ "scopes": [
717
+ "user",
718
+ "deploy",
719
+ "argocd"
720
+ ],
721
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
722
+ },
723
+ "permissions": {
724
+ "kind": "RepositoryPermission",
725
+ "defaultCollaborator": "write",
726
+ "adminTeam": "maintainers",
727
+ "delegatedTo": "Gitea collaborators and team repository APIs"
728
+ },
729
+ "forgeRecords": {
730
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
731
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
732
+ },
733
+ "issueSync": {
734
+ "backend": "gitea",
735
+ "owner": "krate-org-default",
736
+ "repo": "_krate-org-default_",
737
+ "issue": "<issue>",
738
+ "project": null,
739
+ "repositoryRefs": [
740
+ "krate-demo"
741
+ ],
742
+ "metadataKeys": [
743
+ "krate.a5c.ai/project",
744
+ "krate.a5c.ai/repositories"
745
+ ],
746
+ "actions": [
747
+ {
748
+ "action": "ensureOrgMemoryRepository",
749
+ "owner": "krate-org-default",
750
+ "repo": "_krate-org-default_"
751
+ },
752
+ {
753
+ "action": "syncIssue",
754
+ "owner": "krate-org-default",
755
+ "repo": "_krate-org-default_",
756
+ "issue": "<issue>"
757
+ },
758
+ {
759
+ "action": "writeIssueRepositoryMetadata",
760
+ "issue": "<issue>",
761
+ "repositories": [
762
+ "krate-demo"
763
+ ]
764
+ }
765
+ ]
766
+ },
767
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
768
+ "integrationPlan": {
769
+ "backend": "gitea",
770
+ "operations": [
771
+ {
772
+ "action": "createOrganization",
773
+ "owner": "krate"
774
+ },
775
+ {
776
+ "action": "createRepository",
777
+ "owner": "krate",
778
+ "repo": "krate-demo"
779
+ },
780
+ {
781
+ "action": "ensureUserMappings",
782
+ "owner": "krate"
783
+ },
784
+ {
785
+ "action": "addDeployKey",
786
+ "owner": "krate",
787
+ "repo": "krate-demo",
788
+ "title": "krate-argocd",
789
+ "readOnly": false
790
+ },
791
+ {
792
+ "action": "addUserSshKey",
793
+ "owner": "krate",
794
+ "repo": "krate-demo",
795
+ "title": "developer key"
796
+ },
797
+ {
798
+ "action": "addCollaborator",
799
+ "owner": "krate",
800
+ "repo": "krate-demo",
801
+ "permission": "write"
802
+ },
803
+ {
804
+ "action": "addTeamRepository",
805
+ "owner": "krate",
806
+ "repo": "krate-demo",
807
+ "team": "maintainers",
808
+ "permission": "admin"
809
+ },
810
+ {
811
+ "action": "protectBranch",
812
+ "owner": "krate",
813
+ "repo": "krate-demo",
814
+ "branch": "main"
815
+ },
816
+ {
817
+ "action": "createWebhook",
818
+ "owner": "krate",
819
+ "repo": "krate-demo",
820
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
821
+ }
822
+ ]
823
+ }
824
+ },
825
+ "storage": {
826
+ "mode": "gitea",
827
+ "persistentVolumeClaim": "krate-gitea-data",
828
+ "owner": "krate",
829
+ "repository": "krate-demo",
830
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
831
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
832
+ },
833
+ "objectStorage": {
834
+ "lfs": true,
835
+ "artifacts": true
836
+ },
837
+ "search": {
838
+ "provider": "zoekt",
839
+ "enabled": false
840
+ }
841
+ },
842
+ "status": {
843
+ "ready": true,
844
+ "route": {
845
+ "repositoryName": "krate-demo",
846
+ "backend": "gitea",
847
+ "owner": "krate",
848
+ "store": "gitea-primary",
849
+ "receivePackReady": true,
850
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
851
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
852
+ },
853
+ "gitHosting": {
854
+ "backend": "gitea",
855
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
856
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
857
+ "integrationPlan": {
858
+ "backend": "gitea",
859
+ "operations": [
860
+ {
861
+ "action": "createOrganization",
862
+ "owner": "krate"
863
+ },
864
+ {
865
+ "action": "createRepository",
866
+ "owner": "krate",
867
+ "repo": "krate-demo"
868
+ },
869
+ {
870
+ "action": "ensureUserMappings",
871
+ "owner": "krate"
872
+ },
873
+ {
874
+ "action": "addDeployKey",
875
+ "owner": "krate",
876
+ "repo": "krate-demo",
877
+ "title": "krate-argocd",
878
+ "readOnly": false
879
+ },
880
+ {
881
+ "action": "addUserSshKey",
882
+ "owner": "krate",
883
+ "repo": "krate-demo",
884
+ "title": "developer key"
885
+ },
886
+ {
887
+ "action": "addCollaborator",
888
+ "owner": "krate",
889
+ "repo": "krate-demo",
890
+ "permission": "write"
891
+ },
892
+ {
893
+ "action": "addTeamRepository",
894
+ "owner": "krate",
895
+ "repo": "krate-demo",
896
+ "team": "maintainers",
897
+ "permission": "admin"
898
+ },
899
+ {
900
+ "action": "protectBranch",
901
+ "owner": "krate",
902
+ "repo": "krate-demo",
903
+ "branch": "main"
904
+ },
905
+ {
906
+ "action": "createWebhook",
907
+ "owner": "krate",
908
+ "repo": "krate-demo",
909
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
910
+ }
911
+ ]
912
+ }
913
+ },
914
+ "storage": "etcd"
915
+ }
916
+ },
917
+ "audit": {
918
+ "at": "2026-05-16T10:16:57.567Z",
919
+ "operation": "create",
920
+ "user": "admin@example.com",
921
+ "groups": [
922
+ "system:authenticated",
923
+ "krate:repo-admins"
924
+ ],
925
+ "resource": "Repository/krate-org-default/krate-demo",
926
+ "warnings": [],
927
+ "allowed": true
928
+ }
929
+ },
930
+ {
931
+ "type": "create",
932
+ "storage": "etcd",
933
+ "resource": {
934
+ "apiVersion": "krate.a5c.ai/v1alpha1",
935
+ "kind": "BranchProtection",
936
+ "metadata": {
937
+ "namespace": "krate-org-default",
938
+ "labels": {},
939
+ "annotations": {},
940
+ "name": "main-protection",
941
+ "resourceVersion": "1"
942
+ },
943
+ "spec": {
944
+ "organizationRef": "default",
945
+ "refs": [
946
+ "refs/heads/main"
947
+ ],
948
+ "requirePullRequest": true,
949
+ "requiredChecks": [
950
+ "test"
951
+ ],
952
+ "requiredApprovals": 1
953
+ },
954
+ "status": {
955
+ "storage": "etcd"
956
+ }
957
+ },
958
+ "audit": {
959
+ "at": "2026-05-16T10:16:57.567Z",
960
+ "operation": "create",
961
+ "user": "admin@example.com",
962
+ "groups": [
963
+ "system:authenticated",
964
+ "krate:repo-admins"
965
+ ],
966
+ "resource": "BranchProtection/krate-org-default/main-protection",
967
+ "warnings": [],
968
+ "allowed": true
969
+ }
970
+ },
971
+ {
972
+ "type": "create",
973
+ "storage": "etcd",
974
+ "resource": {
975
+ "apiVersion": "krate.a5c.ai/v1alpha1",
976
+ "kind": "RefPolicy",
977
+ "metadata": {
978
+ "namespace": "krate-org-default",
979
+ "labels": {},
980
+ "annotations": {},
981
+ "name": "deny-internal-refs",
982
+ "resourceVersion": "1"
983
+ },
984
+ "spec": {
985
+ "organizationRef": "default",
986
+ "deny": [
987
+ "refs/internal/"
988
+ ]
989
+ },
990
+ "status": {
991
+ "storage": "etcd"
992
+ }
993
+ },
994
+ "audit": {
995
+ "at": "2026-05-16T10:16:57.567Z",
996
+ "operation": "create",
997
+ "user": "admin@example.com",
998
+ "groups": [
999
+ "system:authenticated",
1000
+ "krate:repo-admins"
1001
+ ],
1002
+ "resource": "RefPolicy/krate-org-default/deny-internal-refs",
1003
+ "warnings": [],
1004
+ "allowed": true
1005
+ }
1006
+ },
1007
+ {
1008
+ "type": "create",
1009
+ "storage": "etcd",
1010
+ "resource": {
1011
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1012
+ "kind": "RunnerPool",
1013
+ "metadata": {
1014
+ "namespace": "krate-org-default",
1015
+ "labels": {
1016
+ "trustTier": "trusted"
1017
+ },
1018
+ "annotations": {},
1019
+ "name": "trusted-linux",
1020
+ "resourceVersion": "1"
1021
+ },
1022
+ "spec": {
1023
+ "organizationRef": "default",
1024
+ "image": "ubuntu:24.04",
1025
+ "warmReplicas": 1,
1026
+ "maxReplicas": 4,
1027
+ "trustTier": "trusted",
1028
+ "cache": {
1029
+ "type": "object-storage"
1030
+ },
1031
+ "scalingMetric": "queueDepth"
1032
+ },
1033
+ "status": {
1034
+ "readyReplicas": 1,
1035
+ "queueDepth": 0,
1036
+ "storage": "etcd"
1037
+ }
1038
+ },
1039
+ "audit": {
1040
+ "at": "2026-05-16T10:16:57.568Z",
1041
+ "operation": "create",
1042
+ "user": "platform@example.com",
1043
+ "groups": [
1044
+ "system:authenticated",
1045
+ "krate:platform-engineers"
1046
+ ],
1047
+ "resource": "RunnerPool/krate-org-default/trusted-linux",
1048
+ "warnings": [],
1049
+ "allowed": true
1050
+ }
1051
+ },
1052
+ {
1053
+ "type": "create",
1054
+ "storage": "etcd",
1055
+ "resource": {
1056
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1057
+ "kind": "WebhookSubscription",
1058
+ "metadata": {
1059
+ "namespace": "krate-org-default",
1060
+ "labels": {},
1061
+ "annotations": {},
1062
+ "name": "chatops",
1063
+ "resourceVersion": "1"
1064
+ },
1065
+ "spec": {
1066
+ "organizationRef": "default",
1067
+ "url": "https://hooks.example.test/krate",
1068
+ "events": [
1069
+ "pullrequest.created",
1070
+ "pullrequest.merged"
1071
+ ],
1072
+ "signing": {
1073
+ "algorithm": "hmac-sha256",
1074
+ "secretRef": "chatops-secret"
1075
+ },
1076
+ "mode": "active"
1077
+ },
1078
+ "status": {
1079
+ "ready": true,
1080
+ "storage": "etcd"
1081
+ }
1082
+ },
1083
+ "audit": {
1084
+ "at": "2026-05-16T10:16:57.568Z",
1085
+ "operation": "create",
1086
+ "user": "admin@example.com",
1087
+ "groups": [
1088
+ "system:authenticated",
1089
+ "krate:repo-admins"
1090
+ ],
1091
+ "resource": "WebhookSubscription/krate-org-default/chatops",
1092
+ "warnings": [],
1093
+ "allowed": true
1094
+ }
1095
+ },
1096
+ {
1097
+ "type": "create",
1098
+ "storage": "etcd",
1099
+ "resource": {
1100
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1101
+ "kind": "Team",
1102
+ "metadata": {
1103
+ "namespace": "krate-org-default",
1104
+ "labels": {},
1105
+ "annotations": {},
1106
+ "name": "maintainers",
1107
+ "resourceVersion": "1"
1108
+ },
1109
+ "spec": {
1110
+ "organizationRef": "default",
1111
+ "displayName": "Maintainers",
1112
+ "members": [
1113
+ "admin"
1114
+ ],
1115
+ "maintainers": [
1116
+ "admin"
1117
+ ],
1118
+ "repositoryGrants": [
1119
+ {
1120
+ "repository": "krate-demo",
1121
+ "permission": "admin"
1122
+ }
1123
+ ]
1124
+ },
1125
+ "status": {
1126
+ "phase": "Active",
1127
+ "memberCount": 1,
1128
+ "storage": "etcd"
1129
+ }
1130
+ },
1131
+ "audit": {
1132
+ "at": "2026-05-16T10:16:57.568Z",
1133
+ "operation": "create",
1134
+ "user": "platform@example.com",
1135
+ "groups": [
1136
+ "system:authenticated",
1137
+ "krate:platform-engineers"
1138
+ ],
1139
+ "resource": "Team/krate-org-default/maintainers",
1140
+ "warnings": [],
1141
+ "allowed": true
1142
+ }
1143
+ },
1144
+ {
1145
+ "type": "create",
1146
+ "storage": "etcd",
1147
+ "resource": {
1148
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1149
+ "kind": "User",
1150
+ "metadata": {
1151
+ "namespace": "krate-org-default",
1152
+ "labels": {
1153
+ "role": "admin"
1154
+ },
1155
+ "annotations": {},
1156
+ "name": "admin",
1157
+ "resourceVersion": "1"
1158
+ },
1159
+ "spec": {
1160
+ "organizationRef": "default",
1161
+ "displayName": "Admin",
1162
+ "email": "admin@example.com",
1163
+ "username": "admin",
1164
+ "teams": [
1165
+ "maintainers"
1166
+ ],
1167
+ "admin": true,
1168
+ "disabled": false
1169
+ },
1170
+ "status": {
1171
+ "phase": "Active",
1172
+ "lastLoginProvider": "sso",
1173
+ "groups": [
1174
+ "system:authenticated",
1175
+ "krate:users",
1176
+ "krate:platform-engineers"
1177
+ ],
1178
+ "storage": "etcd"
1179
+ }
1180
+ },
1181
+ "audit": {
1182
+ "at": "2026-05-16T10:16:57.568Z",
1183
+ "operation": "create",
1184
+ "user": "platform@example.com",
1185
+ "groups": [
1186
+ "system:authenticated",
1187
+ "krate:platform-engineers"
1188
+ ],
1189
+ "resource": "User/krate-org-default/admin",
1190
+ "warnings": [],
1191
+ "allowed": true
1192
+ }
1193
+ },
1194
+ {
1195
+ "type": "create",
1196
+ "storage": "etcd",
1197
+ "resource": {
1198
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1199
+ "kind": "IdentityMapping",
1200
+ "metadata": {
1201
+ "namespace": "krate-org-default",
1202
+ "labels": {},
1203
+ "annotations": {},
1204
+ "name": "sso-admin",
1205
+ "resourceVersion": "1"
1206
+ },
1207
+ "spec": {
1208
+ "organizationRef": "default",
1209
+ "user": "admin",
1210
+ "provider": "sso",
1211
+ "subject": "user:admin",
1212
+ "email": "admin@example.com",
1213
+ "workspaceIdentity": {
1214
+ "name": "admin@example.com",
1215
+ "uid": "user:admin",
1216
+ "groups": [
1217
+ "system:authenticated",
1218
+ "krate:users",
1219
+ "krate:platform-engineers"
1220
+ ]
1221
+ },
1222
+ "repositoryIdentity": {
1223
+ "username": "admin",
1224
+ "email": "admin@example.com"
1225
+ }
1226
+ },
1227
+ "status": {
1228
+ "phase": "Synced",
1229
+ "storage": "etcd"
1230
+ }
1231
+ },
1232
+ "audit": {
1233
+ "at": "2026-05-16T10:16:57.568Z",
1234
+ "operation": "create",
1235
+ "user": "platform@example.com",
1236
+ "groups": [
1237
+ "system:authenticated",
1238
+ "krate:platform-engineers"
1239
+ ],
1240
+ "resource": "IdentityMapping/krate-org-default/sso-admin",
1241
+ "warnings": [],
1242
+ "allowed": true
1243
+ }
1244
+ },
1245
+ {
1246
+ "type": "create",
1247
+ "storage": "etcd",
1248
+ "resource": {
1249
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1250
+ "kind": "Invite",
1251
+ "metadata": {
1252
+ "namespace": "krate-org-default",
1253
+ "labels": {
1254
+ "role": "member"
1255
+ },
1256
+ "annotations": {},
1257
+ "name": "new-user-example-com",
1258
+ "resourceVersion": "1"
1259
+ },
1260
+ "spec": {
1261
+ "organizationRef": "default",
1262
+ "email": "new-user@example.com",
1263
+ "role": "member",
1264
+ "teams": [
1265
+ "maintainers"
1266
+ ],
1267
+ "invitedBy": "admin",
1268
+ "expiresAt": "2026-05-23T10:16:57.569Z"
1269
+ },
1270
+ "status": {
1271
+ "phase": "Pending",
1272
+ "storage": "etcd"
1273
+ }
1274
+ },
1275
+ "audit": {
1276
+ "at": "2026-05-16T10:16:57.569Z",
1277
+ "operation": "create",
1278
+ "user": "admin@example.com",
1279
+ "groups": [
1280
+ "system:authenticated",
1281
+ "krate:repo-admins"
1282
+ ],
1283
+ "resource": "Invite/krate-org-default/new-user-example-com",
1284
+ "warnings": [],
1285
+ "allowed": true
1286
+ }
1287
+ },
1288
+ {
1289
+ "type": "create",
1290
+ "storage": "etcd",
1291
+ "resource": {
1292
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1293
+ "kind": "AuthProvider",
1294
+ "metadata": {
1295
+ "namespace": "krate-org-default",
1296
+ "labels": {},
1297
+ "annotations": {},
1298
+ "name": "github",
1299
+ "resourceVersion": "1"
1300
+ },
1301
+ "spec": {
1302
+ "organizationRef": "default",
1303
+ "type": "github",
1304
+ "label": "GitHub",
1305
+ "enabled": true,
1306
+ "scopes": "read:user user:email",
1307
+ "delegatedIdentity": {
1308
+ "enabled": false,
1309
+ "userHeader": "x-forwarded-user",
1310
+ "groupsHeader": "x-forwarded-groups",
1311
+ "emailHeader": "x-forwarded-email",
1312
+ "localDevelopment": {
1313
+ "enabled": true,
1314
+ "user": "local-developer",
1315
+ "email": "",
1316
+ "groups": "krate:repo-admins"
1317
+ }
1318
+ }
1319
+ },
1320
+ "status": {
1321
+ "phase": "Configured",
1322
+ "clientConfigured": false,
1323
+ "storage": "etcd"
1324
+ }
1325
+ },
1326
+ "audit": {
1327
+ "at": "2026-05-16T10:16:57.569Z",
1328
+ "operation": "create",
1329
+ "user": "platform@example.com",
1330
+ "groups": [
1331
+ "system:authenticated",
1332
+ "krate:platform-engineers"
1333
+ ],
1334
+ "resource": "AuthProvider/krate-org-default/github",
1335
+ "warnings": [],
1336
+ "allowed": true
1337
+ }
1338
+ },
1339
+ {
1340
+ "type": "create",
1341
+ "storage": "etcd",
1342
+ "resource": {
1343
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1344
+ "kind": "AuthProvider",
1345
+ "metadata": {
1346
+ "namespace": "krate-org-default",
1347
+ "labels": {},
1348
+ "annotations": {},
1349
+ "name": "sso",
1350
+ "resourceVersion": "1"
1351
+ },
1352
+ "spec": {
1353
+ "organizationRef": "default",
1354
+ "type": "oidc",
1355
+ "label": "Workspace SSO",
1356
+ "enabled": false,
1357
+ "scopes": "openid profile email groups",
1358
+ "delegatedIdentity": {
1359
+ "enabled": false,
1360
+ "userHeader": "x-forwarded-user",
1361
+ "groupsHeader": "x-forwarded-groups",
1362
+ "emailHeader": "x-forwarded-email",
1363
+ "localDevelopment": {
1364
+ "enabled": true,
1365
+ "user": "local-developer",
1366
+ "email": "",
1367
+ "groups": "krate:repo-admins"
1368
+ }
1369
+ }
1370
+ },
1371
+ "status": {
1372
+ "phase": "Disabled",
1373
+ "clientConfigured": false,
1374
+ "storage": "etcd"
1375
+ }
1376
+ },
1377
+ "audit": {
1378
+ "at": "2026-05-16T10:16:57.569Z",
1379
+ "operation": "create",
1380
+ "user": "platform@example.com",
1381
+ "groups": [
1382
+ "system:authenticated",
1383
+ "krate:platform-engineers"
1384
+ ],
1385
+ "resource": "AuthProvider/krate-org-default/sso",
1386
+ "warnings": [],
1387
+ "allowed": true
1388
+ }
1389
+ }
1390
+ ]
1391
+ },
1392
+ "git": {
1393
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1394
+ "kind": "GiteaGitServiceSnapshot",
1395
+ "backend": {
1396
+ "type": "gitea",
1397
+ "baseUrl": "http://krate-gitea-http:3000",
1398
+ "sshDomain": "krate-gitea-ssh",
1399
+ "owner": "krate",
1400
+ "webhookBaseUrl": "http://krate-webhook-worker"
1401
+ },
1402
+ "integrationPlans": {
1403
+ "krate-demo": {
1404
+ "backend": "gitea",
1405
+ "operations": [
1406
+ {
1407
+ "action": "createOrganization",
1408
+ "owner": "krate"
1409
+ },
1410
+ {
1411
+ "action": "createRepository",
1412
+ "owner": "krate",
1413
+ "repo": "krate-demo"
1414
+ },
1415
+ {
1416
+ "action": "ensureUserMappings",
1417
+ "owner": "krate"
1418
+ },
1419
+ {
1420
+ "action": "addDeployKey",
1421
+ "owner": "krate",
1422
+ "repo": "krate-demo",
1423
+ "title": "krate-argocd",
1424
+ "readOnly": false
1425
+ },
1426
+ {
1427
+ "action": "addUserSshKey",
1428
+ "owner": "krate",
1429
+ "repo": "krate-demo",
1430
+ "title": "developer key"
1431
+ },
1432
+ {
1433
+ "action": "addCollaborator",
1434
+ "owner": "krate",
1435
+ "repo": "krate-demo",
1436
+ "permission": "write"
1437
+ },
1438
+ {
1439
+ "action": "addTeamRepository",
1440
+ "owner": "krate",
1441
+ "repo": "krate-demo",
1442
+ "team": "maintainers",
1443
+ "permission": "admin"
1444
+ },
1445
+ {
1446
+ "action": "protectBranch",
1447
+ "owner": "krate",
1448
+ "repo": "krate-demo",
1449
+ "branch": "main"
1450
+ },
1451
+ {
1452
+ "action": "createWebhook",
1453
+ "owner": "krate",
1454
+ "repo": "krate-demo",
1455
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
1456
+ }
1457
+ ]
1458
+ }
1459
+ },
1460
+ "stores": [
1461
+ {
1462
+ "name": "gitea-primary",
1463
+ "receivePackReady": true,
1464
+ "capacity": 1000,
1465
+ "repositories": {
1466
+ "krate-demo": {
1467
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1468
+ "kind": "Repository",
1469
+ "metadata": {
1470
+ "namespace": "krate-org-default",
1471
+ "labels": {
1472
+ "gitBackend": "gitea"
1473
+ },
1474
+ "annotations": {},
1475
+ "name": "krate-demo",
1476
+ "resourceVersion": "1"
1477
+ },
1478
+ "spec": {
1479
+ "organizationRef": "default",
1480
+ "visibility": "private",
1481
+ "gitHosting": {
1482
+ "backend": "gitea",
1483
+ "owner": "krate",
1484
+ "repository": "krate-demo",
1485
+ "branch": "main",
1486
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
1487
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
1488
+ "deployKeyTitle": "krate-argocd",
1489
+ "organization": {
1490
+ "kind": "Organization",
1491
+ "name": "krate",
1492
+ "delegatedTo": "Gitea /api/v1/orgs"
1493
+ },
1494
+ "sshKeys": {
1495
+ "kind": "SSHKey",
1496
+ "scopes": [
1497
+ "user",
1498
+ "deploy",
1499
+ "argocd"
1500
+ ],
1501
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
1502
+ },
1503
+ "permissions": {
1504
+ "kind": "RepositoryPermission",
1505
+ "defaultCollaborator": "write",
1506
+ "adminTeam": "maintainers",
1507
+ "delegatedTo": "Gitea collaborators and team repository APIs"
1508
+ },
1509
+ "forgeRecords": {
1510
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
1511
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
1512
+ },
1513
+ "issueSync": {
1514
+ "backend": "gitea",
1515
+ "owner": "krate-org-default",
1516
+ "repo": "_krate-org-default_",
1517
+ "issue": "<issue>",
1518
+ "project": null,
1519
+ "repositoryRefs": [
1520
+ "krate-demo"
1521
+ ],
1522
+ "metadataKeys": [
1523
+ "krate.a5c.ai/project",
1524
+ "krate.a5c.ai/repositories"
1525
+ ],
1526
+ "actions": [
1527
+ {
1528
+ "action": "ensureOrgMemoryRepository",
1529
+ "owner": "krate-org-default",
1530
+ "repo": "_krate-org-default_"
1531
+ },
1532
+ {
1533
+ "action": "syncIssue",
1534
+ "owner": "krate-org-default",
1535
+ "repo": "_krate-org-default_",
1536
+ "issue": "<issue>"
1537
+ },
1538
+ {
1539
+ "action": "writeIssueRepositoryMetadata",
1540
+ "issue": "<issue>",
1541
+ "repositories": [
1542
+ "krate-demo"
1543
+ ]
1544
+ }
1545
+ ]
1546
+ },
1547
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
1548
+ "integrationPlan": {
1549
+ "backend": "gitea",
1550
+ "operations": [
1551
+ {
1552
+ "action": "createOrganization",
1553
+ "owner": "krate"
1554
+ },
1555
+ {
1556
+ "action": "createRepository",
1557
+ "owner": "krate",
1558
+ "repo": "krate-demo"
1559
+ },
1560
+ {
1561
+ "action": "ensureUserMappings",
1562
+ "owner": "krate"
1563
+ },
1564
+ {
1565
+ "action": "addDeployKey",
1566
+ "owner": "krate",
1567
+ "repo": "krate-demo",
1568
+ "title": "krate-argocd",
1569
+ "readOnly": false
1570
+ },
1571
+ {
1572
+ "action": "addUserSshKey",
1573
+ "owner": "krate",
1574
+ "repo": "krate-demo",
1575
+ "title": "developer key"
1576
+ },
1577
+ {
1578
+ "action": "addCollaborator",
1579
+ "owner": "krate",
1580
+ "repo": "krate-demo",
1581
+ "permission": "write"
1582
+ },
1583
+ {
1584
+ "action": "addTeamRepository",
1585
+ "owner": "krate",
1586
+ "repo": "krate-demo",
1587
+ "team": "maintainers",
1588
+ "permission": "admin"
1589
+ },
1590
+ {
1591
+ "action": "protectBranch",
1592
+ "owner": "krate",
1593
+ "repo": "krate-demo",
1594
+ "branch": "main"
1595
+ },
1596
+ {
1597
+ "action": "createWebhook",
1598
+ "owner": "krate",
1599
+ "repo": "krate-demo",
1600
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
1601
+ }
1602
+ ]
1603
+ }
1604
+ },
1605
+ "storage": {
1606
+ "mode": "gitea",
1607
+ "persistentVolumeClaim": "krate-gitea-data",
1608
+ "owner": "krate",
1609
+ "repository": "krate-demo",
1610
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
1611
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
1612
+ },
1613
+ "objectStorage": {
1614
+ "lfs": true,
1615
+ "artifacts": true
1616
+ },
1617
+ "search": {
1618
+ "provider": "zoekt",
1619
+ "enabled": false
1620
+ }
1621
+ },
1622
+ "status": {
1623
+ "ready": true,
1624
+ "route": {
1625
+ "repositoryName": "krate-demo",
1626
+ "backend": "gitea",
1627
+ "owner": "krate",
1628
+ "store": "gitea-primary",
1629
+ "receivePackReady": true,
1630
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
1631
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
1632
+ },
1633
+ "gitHosting": {
1634
+ "backend": "gitea",
1635
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
1636
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
1637
+ "integrationPlan": {
1638
+ "backend": "gitea",
1639
+ "operations": [
1640
+ {
1641
+ "action": "createOrganization",
1642
+ "owner": "krate"
1643
+ },
1644
+ {
1645
+ "action": "createRepository",
1646
+ "owner": "krate",
1647
+ "repo": "krate-demo"
1648
+ },
1649
+ {
1650
+ "action": "ensureUserMappings",
1651
+ "owner": "krate"
1652
+ },
1653
+ {
1654
+ "action": "addDeployKey",
1655
+ "owner": "krate",
1656
+ "repo": "krate-demo",
1657
+ "title": "krate-argocd",
1658
+ "readOnly": false
1659
+ },
1660
+ {
1661
+ "action": "addUserSshKey",
1662
+ "owner": "krate",
1663
+ "repo": "krate-demo",
1664
+ "title": "developer key"
1665
+ },
1666
+ {
1667
+ "action": "addCollaborator",
1668
+ "owner": "krate",
1669
+ "repo": "krate-demo",
1670
+ "permission": "write"
1671
+ },
1672
+ {
1673
+ "action": "addTeamRepository",
1674
+ "owner": "krate",
1675
+ "repo": "krate-demo",
1676
+ "team": "maintainers",
1677
+ "permission": "admin"
1678
+ },
1679
+ {
1680
+ "action": "protectBranch",
1681
+ "owner": "krate",
1682
+ "repo": "krate-demo",
1683
+ "branch": "main"
1684
+ },
1685
+ {
1686
+ "action": "createWebhook",
1687
+ "owner": "krate",
1688
+ "repo": "krate-demo",
1689
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
1690
+ }
1691
+ ]
1692
+ }
1693
+ },
1694
+ "storage": "etcd"
1695
+ }
1696
+ }
1697
+ },
1698
+ "objects": {},
1699
+ "searchIndex": {}
1700
+ }
1701
+ ]
1702
+ }
1703
+ },
1704
+ "storage": {
1705
+ "etcd": [
1706
+ "Repository",
1707
+ "BranchProtection",
1708
+ "RefPolicy",
1709
+ "RunnerPool",
1710
+ "WebhookSubscription",
1711
+ "Team",
1712
+ "User",
1713
+ "IdentityMapping",
1714
+ "Invite",
1715
+ "AuthProvider",
1716
+ "AuthProvider"
1717
+ ],
1718
+ "postgres": []
1719
+ },
1720
+ "resources": {
1721
+ "Organization": [],
1722
+ "User": [
1723
+ {
1724
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1725
+ "kind": "User",
1726
+ "metadata": {
1727
+ "namespace": "krate-org-default",
1728
+ "labels": {
1729
+ "role": "admin"
1730
+ },
1731
+ "annotations": {},
1732
+ "name": "admin",
1733
+ "resourceVersion": "1"
1734
+ },
1735
+ "spec": {
1736
+ "organizationRef": "default",
1737
+ "displayName": "Admin",
1738
+ "email": "admin@example.com",
1739
+ "username": "admin",
1740
+ "teams": [
1741
+ "maintainers"
1742
+ ],
1743
+ "admin": true,
1744
+ "disabled": false
1745
+ },
1746
+ "status": {
1747
+ "phase": "Active",
1748
+ "lastLoginProvider": "sso",
1749
+ "groups": [
1750
+ "system:authenticated",
1751
+ "krate:users",
1752
+ "krate:platform-engineers"
1753
+ ],
1754
+ "storage": "etcd"
1755
+ }
1756
+ }
1757
+ ],
1758
+ "Team": [
1759
+ {
1760
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1761
+ "kind": "Team",
1762
+ "metadata": {
1763
+ "namespace": "krate-org-default",
1764
+ "labels": {},
1765
+ "annotations": {},
1766
+ "name": "maintainers",
1767
+ "resourceVersion": "1"
1768
+ },
1769
+ "spec": {
1770
+ "organizationRef": "default",
1771
+ "displayName": "Maintainers",
1772
+ "members": [
1773
+ "admin"
1774
+ ],
1775
+ "maintainers": [
1776
+ "admin"
1777
+ ],
1778
+ "repositoryGrants": [
1779
+ {
1780
+ "repository": "krate-demo",
1781
+ "permission": "admin"
1782
+ }
1783
+ ]
1784
+ },
1785
+ "status": {
1786
+ "phase": "Active",
1787
+ "memberCount": 1,
1788
+ "storage": "etcd"
1789
+ }
1790
+ }
1791
+ ],
1792
+ "Invite": [
1793
+ {
1794
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1795
+ "kind": "Invite",
1796
+ "metadata": {
1797
+ "namespace": "krate-org-default",
1798
+ "labels": {
1799
+ "role": "member"
1800
+ },
1801
+ "annotations": {},
1802
+ "name": "new-user-example-com",
1803
+ "resourceVersion": "1"
1804
+ },
1805
+ "spec": {
1806
+ "organizationRef": "default",
1807
+ "email": "new-user@example.com",
1808
+ "role": "member",
1809
+ "teams": [
1810
+ "maintainers"
1811
+ ],
1812
+ "invitedBy": "admin",
1813
+ "expiresAt": "2026-05-23T10:16:57.569Z"
1814
+ },
1815
+ "status": {
1816
+ "phase": "Pending",
1817
+ "storage": "etcd"
1818
+ }
1819
+ }
1820
+ ],
1821
+ "IdentityMapping": [
1822
+ {
1823
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1824
+ "kind": "IdentityMapping",
1825
+ "metadata": {
1826
+ "namespace": "krate-org-default",
1827
+ "labels": {},
1828
+ "annotations": {},
1829
+ "name": "sso-admin",
1830
+ "resourceVersion": "1"
1831
+ },
1832
+ "spec": {
1833
+ "organizationRef": "default",
1834
+ "user": "admin",
1835
+ "provider": "sso",
1836
+ "subject": "user:admin",
1837
+ "email": "admin@example.com",
1838
+ "workspaceIdentity": {
1839
+ "name": "admin@example.com",
1840
+ "uid": "user:admin",
1841
+ "groups": [
1842
+ "system:authenticated",
1843
+ "krate:users",
1844
+ "krate:platform-engineers"
1845
+ ]
1846
+ },
1847
+ "repositoryIdentity": {
1848
+ "username": "admin",
1849
+ "email": "admin@example.com"
1850
+ }
1851
+ },
1852
+ "status": {
1853
+ "phase": "Synced",
1854
+ "storage": "etcd"
1855
+ }
1856
+ }
1857
+ ],
1858
+ "AuthProvider": [
1859
+ {
1860
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1861
+ "kind": "AuthProvider",
1862
+ "metadata": {
1863
+ "namespace": "krate-org-default",
1864
+ "labels": {},
1865
+ "annotations": {},
1866
+ "name": "github",
1867
+ "resourceVersion": "1"
1868
+ },
1869
+ "spec": {
1870
+ "organizationRef": "default",
1871
+ "type": "github",
1872
+ "label": "GitHub",
1873
+ "enabled": true,
1874
+ "scopes": "read:user user:email",
1875
+ "delegatedIdentity": {
1876
+ "enabled": false,
1877
+ "userHeader": "x-forwarded-user",
1878
+ "groupsHeader": "x-forwarded-groups",
1879
+ "emailHeader": "x-forwarded-email",
1880
+ "localDevelopment": {
1881
+ "enabled": true,
1882
+ "user": "local-developer",
1883
+ "email": "",
1884
+ "groups": "krate:repo-admins"
1885
+ }
1886
+ }
1887
+ },
1888
+ "status": {
1889
+ "phase": "Configured",
1890
+ "clientConfigured": false,
1891
+ "storage": "etcd"
1892
+ }
1893
+ },
1894
+ {
1895
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1896
+ "kind": "AuthProvider",
1897
+ "metadata": {
1898
+ "namespace": "krate-org-default",
1899
+ "labels": {},
1900
+ "annotations": {},
1901
+ "name": "sso",
1902
+ "resourceVersion": "1"
1903
+ },
1904
+ "spec": {
1905
+ "organizationRef": "default",
1906
+ "type": "oidc",
1907
+ "label": "Workspace SSO",
1908
+ "enabled": false,
1909
+ "scopes": "openid profile email groups",
1910
+ "delegatedIdentity": {
1911
+ "enabled": false,
1912
+ "userHeader": "x-forwarded-user",
1913
+ "groupsHeader": "x-forwarded-groups",
1914
+ "emailHeader": "x-forwarded-email",
1915
+ "localDevelopment": {
1916
+ "enabled": true,
1917
+ "user": "local-developer",
1918
+ "email": "",
1919
+ "groups": "krate:repo-admins"
1920
+ }
1921
+ }
1922
+ },
1923
+ "status": {
1924
+ "phase": "Disabled",
1925
+ "clientConfigured": false,
1926
+ "storage": "etcd"
1927
+ }
1928
+ }
1929
+ ],
1930
+ "Repository": [
1931
+ {
1932
+ "apiVersion": "krate.a5c.ai/v1alpha1",
1933
+ "kind": "Repository",
1934
+ "metadata": {
1935
+ "namespace": "krate-org-default",
1936
+ "labels": {
1937
+ "gitBackend": "gitea"
1938
+ },
1939
+ "annotations": {},
1940
+ "name": "krate-demo",
1941
+ "resourceVersion": "1"
1942
+ },
1943
+ "spec": {
1944
+ "organizationRef": "default",
1945
+ "visibility": "private",
1946
+ "gitHosting": {
1947
+ "backend": "gitea",
1948
+ "owner": "krate",
1949
+ "repository": "krate-demo",
1950
+ "branch": "main",
1951
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
1952
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
1953
+ "deployKeyTitle": "krate-argocd",
1954
+ "organization": {
1955
+ "kind": "Organization",
1956
+ "name": "krate",
1957
+ "delegatedTo": "Gitea /api/v1/orgs"
1958
+ },
1959
+ "sshKeys": {
1960
+ "kind": "SSHKey",
1961
+ "scopes": [
1962
+ "user",
1963
+ "deploy",
1964
+ "argocd"
1965
+ ],
1966
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
1967
+ },
1968
+ "permissions": {
1969
+ "kind": "RepositoryPermission",
1970
+ "defaultCollaborator": "write",
1971
+ "adminTeam": "maintainers",
1972
+ "delegatedTo": "Gitea collaborators and team repository APIs"
1973
+ },
1974
+ "forgeRecords": {
1975
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
1976
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
1977
+ },
1978
+ "issueSync": {
1979
+ "backend": "gitea",
1980
+ "owner": "krate-org-default",
1981
+ "repo": "_krate-org-default_",
1982
+ "issue": "<issue>",
1983
+ "project": null,
1984
+ "repositoryRefs": [
1985
+ "krate-demo"
1986
+ ],
1987
+ "metadataKeys": [
1988
+ "krate.a5c.ai/project",
1989
+ "krate.a5c.ai/repositories"
1990
+ ],
1991
+ "actions": [
1992
+ {
1993
+ "action": "ensureOrgMemoryRepository",
1994
+ "owner": "krate-org-default",
1995
+ "repo": "_krate-org-default_"
1996
+ },
1997
+ {
1998
+ "action": "syncIssue",
1999
+ "owner": "krate-org-default",
2000
+ "repo": "_krate-org-default_",
2001
+ "issue": "<issue>"
2002
+ },
2003
+ {
2004
+ "action": "writeIssueRepositoryMetadata",
2005
+ "issue": "<issue>",
2006
+ "repositories": [
2007
+ "krate-demo"
2008
+ ]
2009
+ }
2010
+ ]
2011
+ },
2012
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
2013
+ "integrationPlan": {
2014
+ "backend": "gitea",
2015
+ "operations": [
2016
+ {
2017
+ "action": "createOrganization",
2018
+ "owner": "krate"
2019
+ },
2020
+ {
2021
+ "action": "createRepository",
2022
+ "owner": "krate",
2023
+ "repo": "krate-demo"
2024
+ },
2025
+ {
2026
+ "action": "ensureUserMappings",
2027
+ "owner": "krate"
2028
+ },
2029
+ {
2030
+ "action": "addDeployKey",
2031
+ "owner": "krate",
2032
+ "repo": "krate-demo",
2033
+ "title": "krate-argocd",
2034
+ "readOnly": false
2035
+ },
2036
+ {
2037
+ "action": "addUserSshKey",
2038
+ "owner": "krate",
2039
+ "repo": "krate-demo",
2040
+ "title": "developer key"
2041
+ },
2042
+ {
2043
+ "action": "addCollaborator",
2044
+ "owner": "krate",
2045
+ "repo": "krate-demo",
2046
+ "permission": "write"
2047
+ },
2048
+ {
2049
+ "action": "addTeamRepository",
2050
+ "owner": "krate",
2051
+ "repo": "krate-demo",
2052
+ "team": "maintainers",
2053
+ "permission": "admin"
2054
+ },
2055
+ {
2056
+ "action": "protectBranch",
2057
+ "owner": "krate",
2058
+ "repo": "krate-demo",
2059
+ "branch": "main"
2060
+ },
2061
+ {
2062
+ "action": "createWebhook",
2063
+ "owner": "krate",
2064
+ "repo": "krate-demo",
2065
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
2066
+ }
2067
+ ]
2068
+ }
2069
+ },
2070
+ "storage": {
2071
+ "mode": "gitea",
2072
+ "persistentVolumeClaim": "krate-gitea-data",
2073
+ "owner": "krate",
2074
+ "repository": "krate-demo",
2075
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2076
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
2077
+ },
2078
+ "objectStorage": {
2079
+ "lfs": true,
2080
+ "artifacts": true
2081
+ },
2082
+ "search": {
2083
+ "provider": "zoekt",
2084
+ "enabled": false
2085
+ }
2086
+ },
2087
+ "status": {
2088
+ "ready": true,
2089
+ "route": {
2090
+ "repositoryName": "krate-demo",
2091
+ "backend": "gitea",
2092
+ "owner": "krate",
2093
+ "store": "gitea-primary",
2094
+ "receivePackReady": true,
2095
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2096
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
2097
+ },
2098
+ "gitHosting": {
2099
+ "backend": "gitea",
2100
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2101
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
2102
+ "integrationPlan": {
2103
+ "backend": "gitea",
2104
+ "operations": [
2105
+ {
2106
+ "action": "createOrganization",
2107
+ "owner": "krate"
2108
+ },
2109
+ {
2110
+ "action": "createRepository",
2111
+ "owner": "krate",
2112
+ "repo": "krate-demo"
2113
+ },
2114
+ {
2115
+ "action": "ensureUserMappings",
2116
+ "owner": "krate"
2117
+ },
2118
+ {
2119
+ "action": "addDeployKey",
2120
+ "owner": "krate",
2121
+ "repo": "krate-demo",
2122
+ "title": "krate-argocd",
2123
+ "readOnly": false
2124
+ },
2125
+ {
2126
+ "action": "addUserSshKey",
2127
+ "owner": "krate",
2128
+ "repo": "krate-demo",
2129
+ "title": "developer key"
2130
+ },
2131
+ {
2132
+ "action": "addCollaborator",
2133
+ "owner": "krate",
2134
+ "repo": "krate-demo",
2135
+ "permission": "write"
2136
+ },
2137
+ {
2138
+ "action": "addTeamRepository",
2139
+ "owner": "krate",
2140
+ "repo": "krate-demo",
2141
+ "team": "maintainers",
2142
+ "permission": "admin"
2143
+ },
2144
+ {
2145
+ "action": "protectBranch",
2146
+ "owner": "krate",
2147
+ "repo": "krate-demo",
2148
+ "branch": "main"
2149
+ },
2150
+ {
2151
+ "action": "createWebhook",
2152
+ "owner": "krate",
2153
+ "repo": "krate-demo",
2154
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
2155
+ }
2156
+ ]
2157
+ }
2158
+ },
2159
+ "storage": "etcd"
2160
+ }
2161
+ }
2162
+ ],
2163
+ "SSHKey": [],
2164
+ "RepositoryPermission": [],
2165
+ "BranchProtection": [
2166
+ {
2167
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2168
+ "kind": "BranchProtection",
2169
+ "metadata": {
2170
+ "namespace": "krate-org-default",
2171
+ "labels": {},
2172
+ "annotations": {},
2173
+ "name": "main-protection",
2174
+ "resourceVersion": "1"
2175
+ },
2176
+ "spec": {
2177
+ "organizationRef": "default",
2178
+ "refs": [
2179
+ "refs/heads/main"
2180
+ ],
2181
+ "requirePullRequest": true,
2182
+ "requiredChecks": [
2183
+ "test"
2184
+ ],
2185
+ "requiredApprovals": 1
2186
+ },
2187
+ "status": {
2188
+ "storage": "etcd"
2189
+ }
2190
+ }
2191
+ ],
2192
+ "RefPolicy": [
2193
+ {
2194
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2195
+ "kind": "RefPolicy",
2196
+ "metadata": {
2197
+ "namespace": "krate-org-default",
2198
+ "labels": {},
2199
+ "annotations": {},
2200
+ "name": "deny-internal-refs",
2201
+ "resourceVersion": "1"
2202
+ },
2203
+ "spec": {
2204
+ "organizationRef": "default",
2205
+ "deny": [
2206
+ "refs/internal/"
2207
+ ]
2208
+ },
2209
+ "status": {
2210
+ "storage": "etcd"
2211
+ }
2212
+ }
2213
+ ],
2214
+ "RunnerPool": [
2215
+ {
2216
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2217
+ "kind": "RunnerPool",
2218
+ "metadata": {
2219
+ "namespace": "krate-org-default",
2220
+ "labels": {
2221
+ "trustTier": "trusted"
2222
+ },
2223
+ "annotations": {},
2224
+ "name": "trusted-linux",
2225
+ "resourceVersion": "1"
2226
+ },
2227
+ "spec": {
2228
+ "organizationRef": "default",
2229
+ "image": "ubuntu:24.04",
2230
+ "warmReplicas": 1,
2231
+ "maxReplicas": 4,
2232
+ "trustTier": "trusted",
2233
+ "cache": {
2234
+ "type": "object-storage"
2235
+ },
2236
+ "scalingMetric": "queueDepth"
2237
+ },
2238
+ "status": {
2239
+ "readyReplicas": 1,
2240
+ "queueDepth": 0,
2241
+ "storage": "etcd"
2242
+ }
2243
+ }
2244
+ ],
2245
+ "PullRequest": [],
2246
+ "Issue": [],
2247
+ "Review": [],
2248
+ "Pipeline": [],
2249
+ "Job": [],
2250
+ "WebhookSubscription": [
2251
+ {
2252
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2253
+ "kind": "WebhookSubscription",
2254
+ "metadata": {
2255
+ "namespace": "krate-org-default",
2256
+ "labels": {},
2257
+ "annotations": {},
2258
+ "name": "chatops",
2259
+ "resourceVersion": "1"
2260
+ },
2261
+ "spec": {
2262
+ "organizationRef": "default",
2263
+ "url": "https://hooks.example.test/krate",
2264
+ "events": [
2265
+ "pullrequest.created",
2266
+ "pullrequest.merged"
2267
+ ],
2268
+ "signing": {
2269
+ "algorithm": "hmac-sha256",
2270
+ "secretRef": "chatops-secret"
2271
+ },
2272
+ "mode": "active"
2273
+ },
2274
+ "status": {
2275
+ "ready": true,
2276
+ "storage": "etcd"
2277
+ }
2278
+ }
2279
+ ],
2280
+ "WebhookDelivery": []
2281
+ },
2282
+ "events": [
2283
+ {
2284
+ "type": "create",
2285
+ "storage": "etcd",
2286
+ "resource": {
2287
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2288
+ "kind": "Repository",
2289
+ "metadata": {
2290
+ "namespace": "krate-org-default",
2291
+ "labels": {
2292
+ "gitBackend": "gitea"
2293
+ },
2294
+ "annotations": {},
2295
+ "name": "krate-demo",
2296
+ "resourceVersion": "1"
2297
+ },
2298
+ "spec": {
2299
+ "organizationRef": "default",
2300
+ "visibility": "private",
2301
+ "gitHosting": {
2302
+ "backend": "gitea",
2303
+ "owner": "krate",
2304
+ "repository": "krate-demo",
2305
+ "branch": "main",
2306
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2307
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
2308
+ "deployKeyTitle": "krate-argocd",
2309
+ "organization": {
2310
+ "kind": "Organization",
2311
+ "name": "krate",
2312
+ "delegatedTo": "Gitea /api/v1/orgs"
2313
+ },
2314
+ "sshKeys": {
2315
+ "kind": "SSHKey",
2316
+ "scopes": [
2317
+ "user",
2318
+ "deploy",
2319
+ "argocd"
2320
+ ],
2321
+ "delegatedTo": "Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys"
2322
+ },
2323
+ "permissions": {
2324
+ "kind": "RepositoryPermission",
2325
+ "defaultCollaborator": "write",
2326
+ "adminTeam": "maintainers",
2327
+ "delegatedTo": "Gitea collaborators and team repository APIs"
2328
+ },
2329
+ "forgeRecords": {
2330
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
2331
+ "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
2332
+ },
2333
+ "issueSync": {
2334
+ "backend": "gitea",
2335
+ "owner": "krate-org-default",
2336
+ "repo": "_krate-org-default_",
2337
+ "issue": "<issue>",
2338
+ "project": null,
2339
+ "repositoryRefs": [
2340
+ "krate-demo"
2341
+ ],
2342
+ "metadataKeys": [
2343
+ "krate.a5c.ai/project",
2344
+ "krate.a5c.ai/repositories"
2345
+ ],
2346
+ "actions": [
2347
+ {
2348
+ "action": "ensureOrgMemoryRepository",
2349
+ "owner": "krate-org-default",
2350
+ "repo": "_krate-org-default_"
2351
+ },
2352
+ {
2353
+ "action": "syncIssue",
2354
+ "owner": "krate-org-default",
2355
+ "repo": "_krate-org-default_",
2356
+ "issue": "<issue>"
2357
+ },
2358
+ {
2359
+ "action": "writeIssueRepositoryMetadata",
2360
+ "issue": "<issue>",
2361
+ "repositories": [
2362
+ "krate-demo"
2363
+ ]
2364
+ }
2365
+ ]
2366
+ },
2367
+ "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
2368
+ "integrationPlan": {
2369
+ "backend": "gitea",
2370
+ "operations": [
2371
+ {
2372
+ "action": "createOrganization",
2373
+ "owner": "krate"
2374
+ },
2375
+ {
2376
+ "action": "createRepository",
2377
+ "owner": "krate",
2378
+ "repo": "krate-demo"
2379
+ },
2380
+ {
2381
+ "action": "ensureUserMappings",
2382
+ "owner": "krate"
2383
+ },
2384
+ {
2385
+ "action": "addDeployKey",
2386
+ "owner": "krate",
2387
+ "repo": "krate-demo",
2388
+ "title": "krate-argocd",
2389
+ "readOnly": false
2390
+ },
2391
+ {
2392
+ "action": "addUserSshKey",
2393
+ "owner": "krate",
2394
+ "repo": "krate-demo",
2395
+ "title": "developer key"
2396
+ },
2397
+ {
2398
+ "action": "addCollaborator",
2399
+ "owner": "krate",
2400
+ "repo": "krate-demo",
2401
+ "permission": "write"
2402
+ },
2403
+ {
2404
+ "action": "addTeamRepository",
2405
+ "owner": "krate",
2406
+ "repo": "krate-demo",
2407
+ "team": "maintainers",
2408
+ "permission": "admin"
2409
+ },
2410
+ {
2411
+ "action": "protectBranch",
2412
+ "owner": "krate",
2413
+ "repo": "krate-demo",
2414
+ "branch": "main"
2415
+ },
2416
+ {
2417
+ "action": "createWebhook",
2418
+ "owner": "krate",
2419
+ "repo": "krate-demo",
2420
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
2421
+ }
2422
+ ]
2423
+ }
2424
+ },
2425
+ "storage": {
2426
+ "mode": "gitea",
2427
+ "persistentVolumeClaim": "krate-gitea-data",
2428
+ "owner": "krate",
2429
+ "repository": "krate-demo",
2430
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2431
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
2432
+ },
2433
+ "objectStorage": {
2434
+ "lfs": true,
2435
+ "artifacts": true
2436
+ },
2437
+ "search": {
2438
+ "provider": "zoekt",
2439
+ "enabled": false
2440
+ }
2441
+ },
2442
+ "status": {
2443
+ "ready": true,
2444
+ "route": {
2445
+ "repositoryName": "krate-demo",
2446
+ "backend": "gitea",
2447
+ "owner": "krate",
2448
+ "store": "gitea-primary",
2449
+ "receivePackReady": true,
2450
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2451
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git"
2452
+ },
2453
+ "gitHosting": {
2454
+ "backend": "gitea",
2455
+ "httpUrl": "http://krate-gitea-http:3000/krate/krate-demo.git",
2456
+ "sshUrl": "ssh://git@krate-gitea-ssh/krate/krate-demo.git",
2457
+ "integrationPlan": {
2458
+ "backend": "gitea",
2459
+ "operations": [
2460
+ {
2461
+ "action": "createOrganization",
2462
+ "owner": "krate"
2463
+ },
2464
+ {
2465
+ "action": "createRepository",
2466
+ "owner": "krate",
2467
+ "repo": "krate-demo"
2468
+ },
2469
+ {
2470
+ "action": "ensureUserMappings",
2471
+ "owner": "krate"
2472
+ },
2473
+ {
2474
+ "action": "addDeployKey",
2475
+ "owner": "krate",
2476
+ "repo": "krate-demo",
2477
+ "title": "krate-argocd",
2478
+ "readOnly": false
2479
+ },
2480
+ {
2481
+ "action": "addUserSshKey",
2482
+ "owner": "krate",
2483
+ "repo": "krate-demo",
2484
+ "title": "developer key"
2485
+ },
2486
+ {
2487
+ "action": "addCollaborator",
2488
+ "owner": "krate",
2489
+ "repo": "krate-demo",
2490
+ "permission": "write"
2491
+ },
2492
+ {
2493
+ "action": "addTeamRepository",
2494
+ "owner": "krate",
2495
+ "repo": "krate-demo",
2496
+ "team": "maintainers",
2497
+ "permission": "admin"
2498
+ },
2499
+ {
2500
+ "action": "protectBranch",
2501
+ "owner": "krate",
2502
+ "repo": "krate-demo",
2503
+ "branch": "main"
2504
+ },
2505
+ {
2506
+ "action": "createWebhook",
2507
+ "owner": "krate",
2508
+ "repo": "krate-demo",
2509
+ "url": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo"
2510
+ }
2511
+ ]
2512
+ }
2513
+ },
2514
+ "storage": "etcd"
2515
+ }
2516
+ },
2517
+ "audit": {
2518
+ "at": "2026-05-16T10:16:57.567Z",
2519
+ "operation": "create",
2520
+ "user": "admin@example.com",
2521
+ "groups": [
2522
+ "system:authenticated",
2523
+ "krate:repo-admins"
2524
+ ],
2525
+ "resource": "Repository/krate-org-default/krate-demo",
2526
+ "warnings": [],
2527
+ "allowed": true
2528
+ }
2529
+ },
2530
+ {
2531
+ "type": "create",
2532
+ "storage": "etcd",
2533
+ "resource": {
2534
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2535
+ "kind": "BranchProtection",
2536
+ "metadata": {
2537
+ "namespace": "krate-org-default",
2538
+ "labels": {},
2539
+ "annotations": {},
2540
+ "name": "main-protection",
2541
+ "resourceVersion": "1"
2542
+ },
2543
+ "spec": {
2544
+ "organizationRef": "default",
2545
+ "refs": [
2546
+ "refs/heads/main"
2547
+ ],
2548
+ "requirePullRequest": true,
2549
+ "requiredChecks": [
2550
+ "test"
2551
+ ],
2552
+ "requiredApprovals": 1
2553
+ },
2554
+ "status": {
2555
+ "storage": "etcd"
2556
+ }
2557
+ },
2558
+ "audit": {
2559
+ "at": "2026-05-16T10:16:57.567Z",
2560
+ "operation": "create",
2561
+ "user": "admin@example.com",
2562
+ "groups": [
2563
+ "system:authenticated",
2564
+ "krate:repo-admins"
2565
+ ],
2566
+ "resource": "BranchProtection/krate-org-default/main-protection",
2567
+ "warnings": [],
2568
+ "allowed": true
2569
+ }
2570
+ },
2571
+ {
2572
+ "type": "create",
2573
+ "storage": "etcd",
2574
+ "resource": {
2575
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2576
+ "kind": "RefPolicy",
2577
+ "metadata": {
2578
+ "namespace": "krate-org-default",
2579
+ "labels": {},
2580
+ "annotations": {},
2581
+ "name": "deny-internal-refs",
2582
+ "resourceVersion": "1"
2583
+ },
2584
+ "spec": {
2585
+ "organizationRef": "default",
2586
+ "deny": [
2587
+ "refs/internal/"
2588
+ ]
2589
+ },
2590
+ "status": {
2591
+ "storage": "etcd"
2592
+ }
2593
+ },
2594
+ "audit": {
2595
+ "at": "2026-05-16T10:16:57.567Z",
2596
+ "operation": "create",
2597
+ "user": "admin@example.com",
2598
+ "groups": [
2599
+ "system:authenticated",
2600
+ "krate:repo-admins"
2601
+ ],
2602
+ "resource": "RefPolicy/krate-org-default/deny-internal-refs",
2603
+ "warnings": [],
2604
+ "allowed": true
2605
+ }
2606
+ },
2607
+ {
2608
+ "type": "create",
2609
+ "storage": "etcd",
2610
+ "resource": {
2611
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2612
+ "kind": "RunnerPool",
2613
+ "metadata": {
2614
+ "namespace": "krate-org-default",
2615
+ "labels": {
2616
+ "trustTier": "trusted"
2617
+ },
2618
+ "annotations": {},
2619
+ "name": "trusted-linux",
2620
+ "resourceVersion": "1"
2621
+ },
2622
+ "spec": {
2623
+ "organizationRef": "default",
2624
+ "image": "ubuntu:24.04",
2625
+ "warmReplicas": 1,
2626
+ "maxReplicas": 4,
2627
+ "trustTier": "trusted",
2628
+ "cache": {
2629
+ "type": "object-storage"
2630
+ },
2631
+ "scalingMetric": "queueDepth"
2632
+ },
2633
+ "status": {
2634
+ "readyReplicas": 1,
2635
+ "queueDepth": 0,
2636
+ "storage": "etcd"
2637
+ }
2638
+ },
2639
+ "audit": {
2640
+ "at": "2026-05-16T10:16:57.568Z",
2641
+ "operation": "create",
2642
+ "user": "platform@example.com",
2643
+ "groups": [
2644
+ "system:authenticated",
2645
+ "krate:platform-engineers"
2646
+ ],
2647
+ "resource": "RunnerPool/krate-org-default/trusted-linux",
2648
+ "warnings": [],
2649
+ "allowed": true
2650
+ }
2651
+ },
2652
+ {
2653
+ "type": "create",
2654
+ "storage": "etcd",
2655
+ "resource": {
2656
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2657
+ "kind": "WebhookSubscription",
2658
+ "metadata": {
2659
+ "namespace": "krate-org-default",
2660
+ "labels": {},
2661
+ "annotations": {},
2662
+ "name": "chatops",
2663
+ "resourceVersion": "1"
2664
+ },
2665
+ "spec": {
2666
+ "organizationRef": "default",
2667
+ "url": "https://hooks.example.test/krate",
2668
+ "events": [
2669
+ "pullrequest.created",
2670
+ "pullrequest.merged"
2671
+ ],
2672
+ "signing": {
2673
+ "algorithm": "hmac-sha256",
2674
+ "secretRef": "chatops-secret"
2675
+ },
2676
+ "mode": "active"
2677
+ },
2678
+ "status": {
2679
+ "ready": true,
2680
+ "storage": "etcd"
2681
+ }
2682
+ },
2683
+ "audit": {
2684
+ "at": "2026-05-16T10:16:57.568Z",
2685
+ "operation": "create",
2686
+ "user": "admin@example.com",
2687
+ "groups": [
2688
+ "system:authenticated",
2689
+ "krate:repo-admins"
2690
+ ],
2691
+ "resource": "WebhookSubscription/krate-org-default/chatops",
2692
+ "warnings": [],
2693
+ "allowed": true
2694
+ }
2695
+ },
2696
+ {
2697
+ "type": "create",
2698
+ "storage": "etcd",
2699
+ "resource": {
2700
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2701
+ "kind": "Team",
2702
+ "metadata": {
2703
+ "namespace": "krate-org-default",
2704
+ "labels": {},
2705
+ "annotations": {},
2706
+ "name": "maintainers",
2707
+ "resourceVersion": "1"
2708
+ },
2709
+ "spec": {
2710
+ "organizationRef": "default",
2711
+ "displayName": "Maintainers",
2712
+ "members": [
2713
+ "admin"
2714
+ ],
2715
+ "maintainers": [
2716
+ "admin"
2717
+ ],
2718
+ "repositoryGrants": [
2719
+ {
2720
+ "repository": "krate-demo",
2721
+ "permission": "admin"
2722
+ }
2723
+ ]
2724
+ },
2725
+ "status": {
2726
+ "phase": "Active",
2727
+ "memberCount": 1,
2728
+ "storage": "etcd"
2729
+ }
2730
+ },
2731
+ "audit": {
2732
+ "at": "2026-05-16T10:16:57.568Z",
2733
+ "operation": "create",
2734
+ "user": "platform@example.com",
2735
+ "groups": [
2736
+ "system:authenticated",
2737
+ "krate:platform-engineers"
2738
+ ],
2739
+ "resource": "Team/krate-org-default/maintainers",
2740
+ "warnings": [],
2741
+ "allowed": true
2742
+ }
2743
+ },
2744
+ {
2745
+ "type": "create",
2746
+ "storage": "etcd",
2747
+ "resource": {
2748
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2749
+ "kind": "User",
2750
+ "metadata": {
2751
+ "namespace": "krate-org-default",
2752
+ "labels": {
2753
+ "role": "admin"
2754
+ },
2755
+ "annotations": {},
2756
+ "name": "admin",
2757
+ "resourceVersion": "1"
2758
+ },
2759
+ "spec": {
2760
+ "organizationRef": "default",
2761
+ "displayName": "Admin",
2762
+ "email": "admin@example.com",
2763
+ "username": "admin",
2764
+ "teams": [
2765
+ "maintainers"
2766
+ ],
2767
+ "admin": true,
2768
+ "disabled": false
2769
+ },
2770
+ "status": {
2771
+ "phase": "Active",
2772
+ "lastLoginProvider": "sso",
2773
+ "groups": [
2774
+ "system:authenticated",
2775
+ "krate:users",
2776
+ "krate:platform-engineers"
2777
+ ],
2778
+ "storage": "etcd"
2779
+ }
2780
+ },
2781
+ "audit": {
2782
+ "at": "2026-05-16T10:16:57.568Z",
2783
+ "operation": "create",
2784
+ "user": "platform@example.com",
2785
+ "groups": [
2786
+ "system:authenticated",
2787
+ "krate:platform-engineers"
2788
+ ],
2789
+ "resource": "User/krate-org-default/admin",
2790
+ "warnings": [],
2791
+ "allowed": true
2792
+ }
2793
+ },
2794
+ {
2795
+ "type": "create",
2796
+ "storage": "etcd",
2797
+ "resource": {
2798
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2799
+ "kind": "IdentityMapping",
2800
+ "metadata": {
2801
+ "namespace": "krate-org-default",
2802
+ "labels": {},
2803
+ "annotations": {},
2804
+ "name": "sso-admin",
2805
+ "resourceVersion": "1"
2806
+ },
2807
+ "spec": {
2808
+ "organizationRef": "default",
2809
+ "user": "admin",
2810
+ "provider": "sso",
2811
+ "subject": "user:admin",
2812
+ "email": "admin@example.com",
2813
+ "workspaceIdentity": {
2814
+ "name": "admin@example.com",
2815
+ "uid": "user:admin",
2816
+ "groups": [
2817
+ "system:authenticated",
2818
+ "krate:users",
2819
+ "krate:platform-engineers"
2820
+ ]
2821
+ },
2822
+ "repositoryIdentity": {
2823
+ "username": "admin",
2824
+ "email": "admin@example.com"
2825
+ }
2826
+ },
2827
+ "status": {
2828
+ "phase": "Synced",
2829
+ "storage": "etcd"
2830
+ }
2831
+ },
2832
+ "audit": {
2833
+ "at": "2026-05-16T10:16:57.568Z",
2834
+ "operation": "create",
2835
+ "user": "platform@example.com",
2836
+ "groups": [
2837
+ "system:authenticated",
2838
+ "krate:platform-engineers"
2839
+ ],
2840
+ "resource": "IdentityMapping/krate-org-default/sso-admin",
2841
+ "warnings": [],
2842
+ "allowed": true
2843
+ }
2844
+ },
2845
+ {
2846
+ "type": "create",
2847
+ "storage": "etcd",
2848
+ "resource": {
2849
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2850
+ "kind": "Invite",
2851
+ "metadata": {
2852
+ "namespace": "krate-org-default",
2853
+ "labels": {
2854
+ "role": "member"
2855
+ },
2856
+ "annotations": {},
2857
+ "name": "new-user-example-com",
2858
+ "resourceVersion": "1"
2859
+ },
2860
+ "spec": {
2861
+ "organizationRef": "default",
2862
+ "email": "new-user@example.com",
2863
+ "role": "member",
2864
+ "teams": [
2865
+ "maintainers"
2866
+ ],
2867
+ "invitedBy": "admin",
2868
+ "expiresAt": "2026-05-23T10:16:57.569Z"
2869
+ },
2870
+ "status": {
2871
+ "phase": "Pending",
2872
+ "storage": "etcd"
2873
+ }
2874
+ },
2875
+ "audit": {
2876
+ "at": "2026-05-16T10:16:57.569Z",
2877
+ "operation": "create",
2878
+ "user": "admin@example.com",
2879
+ "groups": [
2880
+ "system:authenticated",
2881
+ "krate:repo-admins"
2882
+ ],
2883
+ "resource": "Invite/krate-org-default/new-user-example-com",
2884
+ "warnings": [],
2885
+ "allowed": true
2886
+ }
2887
+ },
2888
+ {
2889
+ "type": "create",
2890
+ "storage": "etcd",
2891
+ "resource": {
2892
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2893
+ "kind": "AuthProvider",
2894
+ "metadata": {
2895
+ "namespace": "krate-org-default",
2896
+ "labels": {},
2897
+ "annotations": {},
2898
+ "name": "github",
2899
+ "resourceVersion": "1"
2900
+ },
2901
+ "spec": {
2902
+ "organizationRef": "default",
2903
+ "type": "github",
2904
+ "label": "GitHub",
2905
+ "enabled": true,
2906
+ "scopes": "read:user user:email",
2907
+ "delegatedIdentity": {
2908
+ "enabled": false,
2909
+ "userHeader": "x-forwarded-user",
2910
+ "groupsHeader": "x-forwarded-groups",
2911
+ "emailHeader": "x-forwarded-email",
2912
+ "localDevelopment": {
2913
+ "enabled": true,
2914
+ "user": "local-developer",
2915
+ "email": "",
2916
+ "groups": "krate:repo-admins"
2917
+ }
2918
+ }
2919
+ },
2920
+ "status": {
2921
+ "phase": "Configured",
2922
+ "clientConfigured": false,
2923
+ "storage": "etcd"
2924
+ }
2925
+ },
2926
+ "audit": {
2927
+ "at": "2026-05-16T10:16:57.569Z",
2928
+ "operation": "create",
2929
+ "user": "platform@example.com",
2930
+ "groups": [
2931
+ "system:authenticated",
2932
+ "krate:platform-engineers"
2933
+ ],
2934
+ "resource": "AuthProvider/krate-org-default/github",
2935
+ "warnings": [],
2936
+ "allowed": true
2937
+ }
2938
+ },
2939
+ {
2940
+ "type": "create",
2941
+ "storage": "etcd",
2942
+ "resource": {
2943
+ "apiVersion": "krate.a5c.ai/v1alpha1",
2944
+ "kind": "AuthProvider",
2945
+ "metadata": {
2946
+ "namespace": "krate-org-default",
2947
+ "labels": {},
2948
+ "annotations": {},
2949
+ "name": "sso",
2950
+ "resourceVersion": "1"
2951
+ },
2952
+ "spec": {
2953
+ "organizationRef": "default",
2954
+ "type": "oidc",
2955
+ "label": "Workspace SSO",
2956
+ "enabled": false,
2957
+ "scopes": "openid profile email groups",
2958
+ "delegatedIdentity": {
2959
+ "enabled": false,
2960
+ "userHeader": "x-forwarded-user",
2961
+ "groupsHeader": "x-forwarded-groups",
2962
+ "emailHeader": "x-forwarded-email",
2963
+ "localDevelopment": {
2964
+ "enabled": true,
2965
+ "user": "local-developer",
2966
+ "email": "",
2967
+ "groups": "krate:repo-admins"
2968
+ }
2969
+ }
2970
+ },
2971
+ "status": {
2972
+ "phase": "Disabled",
2973
+ "clientConfigured": false,
2974
+ "storage": "etcd"
2975
+ }
2976
+ },
2977
+ "audit": {
2978
+ "at": "2026-05-16T10:16:57.569Z",
2979
+ "operation": "create",
2980
+ "user": "platform@example.com",
2981
+ "groups": [
2982
+ "system:authenticated",
2983
+ "krate:platform-engineers"
2984
+ ],
2985
+ "resource": "AuthProvider/krate-org-default/sso",
2986
+ "warnings": [],
2987
+ "allowed": true
2988
+ }
2989
+ }
2990
+ ],
2991
+ "auditLog": [
2992
+ {
2993
+ "at": "2026-05-16T10:16:57.567Z",
2994
+ "operation": "create",
2995
+ "user": "admin@example.com",
2996
+ "groups": [
2997
+ "system:authenticated",
2998
+ "krate:repo-admins"
2999
+ ],
3000
+ "resource": "Repository/krate-org-default/krate-demo",
3001
+ "warnings": [],
3002
+ "allowed": true
3003
+ },
3004
+ {
3005
+ "at": "2026-05-16T10:16:57.567Z",
3006
+ "operation": "create",
3007
+ "user": "admin@example.com",
3008
+ "groups": [
3009
+ "system:authenticated",
3010
+ "krate:repo-admins"
3011
+ ],
3012
+ "resource": "BranchProtection/krate-org-default/main-protection",
3013
+ "warnings": [],
3014
+ "allowed": true
3015
+ },
3016
+ {
3017
+ "at": "2026-05-16T10:16:57.567Z",
3018
+ "operation": "create",
3019
+ "user": "admin@example.com",
3020
+ "groups": [
3021
+ "system:authenticated",
3022
+ "krate:repo-admins"
3023
+ ],
3024
+ "resource": "RefPolicy/krate-org-default/deny-internal-refs",
3025
+ "warnings": [],
3026
+ "allowed": true
3027
+ },
3028
+ {
3029
+ "at": "2026-05-16T10:16:57.568Z",
3030
+ "operation": "create",
3031
+ "user": "platform@example.com",
3032
+ "groups": [
3033
+ "system:authenticated",
3034
+ "krate:platform-engineers"
3035
+ ],
3036
+ "resource": "RunnerPool/krate-org-default/trusted-linux",
3037
+ "warnings": [],
3038
+ "allowed": true
3039
+ },
3040
+ {
3041
+ "at": "2026-05-16T10:16:57.568Z",
3042
+ "operation": "create",
3043
+ "user": "admin@example.com",
3044
+ "groups": [
3045
+ "system:authenticated",
3046
+ "krate:repo-admins"
3047
+ ],
3048
+ "resource": "WebhookSubscription/krate-org-default/chatops",
3049
+ "warnings": [],
3050
+ "allowed": true
3051
+ },
3052
+ {
3053
+ "at": "2026-05-16T10:16:57.568Z",
3054
+ "operation": "create",
3055
+ "user": "platform@example.com",
3056
+ "groups": [
3057
+ "system:authenticated",
3058
+ "krate:platform-engineers"
3059
+ ],
3060
+ "resource": "Team/krate-org-default/maintainers",
3061
+ "warnings": [],
3062
+ "allowed": true
3063
+ },
3064
+ {
3065
+ "at": "2026-05-16T10:16:57.568Z",
3066
+ "operation": "create",
3067
+ "user": "platform@example.com",
3068
+ "groups": [
3069
+ "system:authenticated",
3070
+ "krate:platform-engineers"
3071
+ ],
3072
+ "resource": "User/krate-org-default/admin",
3073
+ "warnings": [],
3074
+ "allowed": true
3075
+ },
3076
+ {
3077
+ "at": "2026-05-16T10:16:57.568Z",
3078
+ "operation": "create",
3079
+ "user": "platform@example.com",
3080
+ "groups": [
3081
+ "system:authenticated",
3082
+ "krate:platform-engineers"
3083
+ ],
3084
+ "resource": "IdentityMapping/krate-org-default/sso-admin",
3085
+ "warnings": [],
3086
+ "allowed": true
3087
+ },
3088
+ {
3089
+ "at": "2026-05-16T10:16:57.569Z",
3090
+ "operation": "create",
3091
+ "user": "admin@example.com",
3092
+ "groups": [
3093
+ "system:authenticated",
3094
+ "krate:repo-admins"
3095
+ ],
3096
+ "resource": "Invite/krate-org-default/new-user-example-com",
3097
+ "warnings": [],
3098
+ "allowed": true
3099
+ },
3100
+ {
3101
+ "at": "2026-05-16T10:16:57.569Z",
3102
+ "operation": "create",
3103
+ "user": "platform@example.com",
3104
+ "groups": [
3105
+ "system:authenticated",
3106
+ "krate:platform-engineers"
3107
+ ],
3108
+ "resource": "AuthProvider/krate-org-default/github",
3109
+ "warnings": [],
3110
+ "allowed": true
3111
+ },
3112
+ {
3113
+ "at": "2026-05-16T10:16:57.569Z",
3114
+ "operation": "create",
3115
+ "user": "platform@example.com",
3116
+ "groups": [
3117
+ "system:authenticated",
3118
+ "krate:platform-engineers"
3119
+ ],
3120
+ "resource": "AuthProvider/krate-org-default/sso",
3121
+ "warnings": [],
3122
+ "allowed": true
3123
+ }
3124
+ ]
3125
+ }