You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Task #28 (CKProject CRD spec gap):
- docs/v3.7/crd.md: expanded from ConceptKernel-only to cover both CRDs.
New structure: intro table + ConceptKernel CRD + CKProject CRD sections.
Published full CKProject OpenAPI schema (group: ck.tech.games, kind:
CKProject, shortname: ckp) with spec (hostname, domain, serving,
storage, gateway, backends, auth, versions[].kernels[].pins.{ck,tool,data})
and status (phase, per-version materialisation state, aggregate proof,
conditions). Printer columns + example + conformance.
- Confirmed intentional API-group split: conceptkernel.org for kernel-
level, ck.tech.games for project-level.
Task #13 (.ckproject pins semantics):
- docs/v3.7/project.md: added "Pin Semantics" subsection under Manifest
Contents clarifying the asymmetry — pins.ck and pins.tool are
REQUIRED and immutable at runtime (ReadOnlyMany organs); pins.data
is OPTIONAL and captures the initial seed state (DATA organ drifts
at runtime by design). deploy.materialise verifies .git-ref matches
the declared pin.
Operator CR drift:
- docs/v3.7/operator.md: CKProject example YAML updated from legacy
kernels[].{ck_ref,tool_ref} shape to the pins-based shape that the
Pass 1 .ckproject manifest model requires. The CR is now consistent
with project.md §Manifest Contents and the new crd.md CKProject CRD
schema.
Build clean.
description: The ConceptKernel CRD makes every kernel a first-class Kubernetes object with proof status, lifecycle phase, and native kubectl visibility.
2
+
title: Custom Resource Definitions (ConceptKernel and CKProject)
3
+
description: The ConceptKernel CRD makes every kernel a first-class Kubernetes object; the CKProject CRD projects the .ckproject manifest onto the Kubernetes control plane. Both provide native kubectl visibility into the CKP fleet.
4
4
---
5
5
6
-
# ConceptKernel Custom Resource Definition
6
+
# Custom Resource Definitions
7
7
8
-
## Purpose
8
+
v3.7 publishes two CRDs:
9
+
10
+
| CRD | API Group / Kind | shortname | Purpose |
11
+
|---|---|---|---|
12
+
|[ConceptKernel](#conceptkernel-crd)|`conceptkernel.org/v1` / `ConceptKernel`|`ck`| One CR per kernel in a deployed project. Carries identity, proof status, and lifecycle phase. |
13
+
|[CKProject](#ckproject-crd)|`ck.tech.games/v1` / `CKProject`|`ckp`| One CR per project. Cluster-side projection of the project's `.ckproject` manifest. Drives CK.Operator reconciliation. |
14
+
15
+
The two groups are intentionally separate: `conceptkernel.org` is the canonical CKP group for kernel-level resources; `ck.tech.games` scopes project-level orchestration resources under a deployment-specific domain. A conformant cluster MUST install both CRDs before any project deploy.
16
+
17
+
## ConceptKernel CRD
18
+
19
+
### Purpose
9
20
10
21
Every Concept Kernel in a deployed project becomes a first-class Kubernetes resource. The ConceptKernel CRD exists because kernels are not mere deployment artifacts -- they are ontological entities with identity, proof status, and lifecycle state. Making them CRDs means standard Kubernetes tooling (`kubectl get ck`, `kubectl describe ck`) provides native visibility into the CKP fleet, and the Kubernetes API becomes a queryable index of kernel state alongside the ontological graph.
11
22
12
-
## CRD Schema
23
+
###CRD Schema
13
24
14
25
```yaml
15
26
apiVersion: apiextensions.k8s.io/v1
@@ -104,7 +115,7 @@ spec:
104
115
shortNames: [ck]
105
116
```
106
117
107
-
## Printer Columns
118
+
### Printer Columns
108
119
109
120
The `additionalPrinterColumns` provide at-a-glance fleet status via `kubectl`:
110
121
@@ -123,7 +134,7 @@ ck-operator node:hot Running 7 3d
123
134
| Checks | `.status.proof.totalPassed` | How many proof checks pass |
124
135
| Age | `.metadata.creationTimestamp` | Standard Kubernetes age |
125
136
126
-
## Status Subresource
137
+
### Status Subresource
127
138
128
139
The status subresource is managed exclusively by [CK.Operator](./operator) via a kopf timer that re-verifies every 60 seconds.
129
140
@@ -137,7 +148,7 @@ The status subresource is managed exclusively by [CK.Operator](./operator) via a
137
148
138
149
This means `kubectl get ck` is always current. If a volume gets accidentally reconfigured or a deployment scales to zero, the CRD status reflects it within 60 seconds.
139
150
140
-
## Per-Kernel Resources
151
+
### Per-Kernel Resources
141
152
142
153
For each kernel declared in a project, CK.Operator creates:
143
154
@@ -146,7 +157,7 @@ For each kernel declared in a project, CK.Operator creates:
146
157
| ConceptKernel CR | `{kernel-lower}` | First-class Kubernetes identity with proof in `.status` |
For the full reconciliation lifecycle that creates these resources, see [Reconciliation Lifecycle](./reconciliation). For proof verification details, see [Proof Verification](./proof).
180
191
:::
181
192
182
-
## Conformance Requirements
193
+
---
194
+
195
+
## CKProject CRD
196
+
197
+
### Purpose
198
+
199
+
The CKProject CR is the cluster-side projection of the project's `.ckproject` manifest (see [CK.Project](./project) for the manifest itself). CK.Operator reconciles this CR: reading `spec.versions` to determine which kernels to materialise at which commits, and writing materialisation state and proof status back to `.status`.
200
+
201
+
There is exactly one CKProject CR per project. It lives in the project's Kubernetes namespace (`ck-{serving.subdomain}`) and is created either by `kubectl apply -f ckproject.yaml` or by CK.Operator from the `.ckproject` manifest at project bootstrap.
Copy file name to clipboardExpand all lines: docs/v3.7/operator.md
+15-9Lines changed: 15 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -111,24 +111,30 @@ spec:
111
111
data: isolated
112
112
kernels:
113
113
- name: Hello.Greeter
114
-
ck_ref: abc123f
115
-
tool_ref: aaa111
114
+
pins:
115
+
ck: "abc123f..."# SHA1 of ck/ organ at this version
116
+
tool: "aaa111..."# SHA1 of tool/ organ at this version
117
+
data: "ccc333..."# SHA1 of initial data/ seed (optional)
116
118
- name: CK.Lib.Py
117
-
ck_ref: eee555
118
-
tool_ref: fff666
119
+
pins:
120
+
ck: "eee555..."
121
+
tool: "fff666..."
119
122
- name: v1.3.19
120
123
route: /next
121
124
data: isolated
122
125
kernels:
123
126
- name: Hello.Greeter
124
-
ck_ref: def4567
125
-
tool_ref: bbb222
127
+
pins:
128
+
ck: "def4567..."
129
+
tool: "bbb222..."
130
+
data: "ccc333..."# same as v1.3.2 when seed is unchanged
126
131
- name: CK.Lib.Py
127
-
ck_ref: eee555 # same as v1.3.2
128
-
tool_ref: fff666 # same as v1.3.2
132
+
pins:
133
+
ck: "eee555..."# same as v1.3.2
134
+
tool: "fff666..."# same as v1.3.2
129
135
```
130
136
131
-
The operator reads `spec.versions`, materialises each version from per-kernel bare repositories on the SeaweedFS filer, and creates per-version deployments, PVs, and HTTPRoute rules. A version promotion is a CK.Project resource update -- `kubectl patch`, NATS command, or operator API. Standard Kubernetes-native workflow with etcd history.
137
+
The operator reads `spec.versions`, materialises each version from per-kernel bare repositories on the SeaweedFS filer, and creates per-version deployments, PVs, and HTTPRoute rules. A version promotion is a CKProject resource update -- `kubectl patch`, NATS command, or operator API. Standard Kubernetes-native workflow with etcd history. The CR is the cluster-side projection of the project's `.ckproject` manifest (see [CK.Project](./project) for the manifest itself).
0 commit comments