Skip to content

Commit 8dcdc32

Browse files
committed
docs: rename storage/ → data/ to match DATA-loop terminology
Aligns v3.6 spec docs and ontology with the three-loop discipline where the writable loop is named DATA (not storage). 28 files updated across docs/v3.6/ and docs/public/ontology/v3.6/.
1 parent e4fa021 commit 8dcdc32

28 files changed

Lines changed: 330 additions & 150 deletions

docs/public/ontology/v3.6/core.ttl

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,92 @@ ckp:criticalGap a owl:AnnotationProperty ;
587587
rdfs:label "critical gap"@en ;
588588
rdfs:comment "A critical missing feature or integration"@en .
589589

590+
#################################################################
591+
# Version Materialisation (v3.6.1)
592+
#################################################################
593+
594+
### VersionDeclaration — a named version with per-kernel git refs
595+
### Grounded as GenericallyDependentContinuant (depends on CK.Project)
596+
597+
ckp:VersionDeclaration a owl:Class ;
598+
rdfs:subClassOf bfo:0000031 ; # bfo:GenericallyDependentContinuant
599+
rdfs:label "Version Declaration"@en ;
600+
rdfs:comment "A named version with per-kernel git refs, mapped to a URL route. Each version materialises three sibling directories per kernel: ck/ (identity, ReadOnly), tool/ (code, ReadOnly), data/ (state, ReadWrite). No nested mounts — three independent PVs mounted as siblings under /ck/{kernel}/."@en .
601+
602+
ckp:hasVersionName a owl:DatatypeProperty ;
603+
rdfs:domain ckp:VersionDeclaration ;
604+
rdfs:range xsd:string ;
605+
rdfs:label "version name"@en ;
606+
rdfs:comment "Version tag (v1.0.0, v1.3.2) — used in filer paths, PV names, HTTPRoute rules"@en .
607+
608+
ckp:hasRoute a owl:DatatypeProperty ;
609+
rdfs:domain ckp:VersionDeclaration ;
610+
rdfs:range xsd:string ;
611+
rdfs:label "route"@en ;
612+
rdfs:comment "URL path prefix on project hostname (e.g. /, /next)"@en .
613+
614+
ckp:hasDataIsolation a owl:ObjectProperty ;
615+
rdfs:domain ckp:VersionDeclaration ;
616+
rdfs:range ckp:DataIsolationMode ;
617+
rdfs:label "data isolation mode"@en ;
618+
rdfs:comment "Controls whether this version gets its own DATA directory or shares with another version"@en .
619+
620+
ckp:hasKernelRef a owl:ObjectProperty ;
621+
rdfs:domain ckp:VersionDeclaration ;
622+
rdfs:range ckp:KernelVersionRef ;
623+
rdfs:label "kernel version ref"@en ;
624+
rdfs:comment "Per-kernel git refs for this version"@en .
625+
626+
### KernelVersionRef — per-kernel, per-loop git references
627+
628+
ckp:KernelVersionRef a owl:Class ;
629+
rdfs:subClassOf bfo:0000031 ; # bfo:GenericallyDependentContinuant
630+
rdfs:label "Kernel Version Ref"@en ;
631+
rdfs:comment "Per-kernel, per-loop git references for version materialisation. Each concept kernel has three independently versioned storage concerns: CK loop (ck_ref from ck.git), TOOL loop (tool_ref from tool.git), DATA loop (directory-based, no git ref). Full-tree git archive produces loop content directly — no subtree filtering."@en .
632+
633+
ckp:refKernelName a owl:DatatypeProperty ;
634+
rdfs:domain ckp:KernelVersionRef ;
635+
rdfs:range xsd:string ;
636+
rdfs:label "kernel name"@en ;
637+
rdfs:comment "Concept kernel name. Maps to registry {name}/ck.git and {name}/tool.git, filer /ck/{name}/ck.git/ and /ck/{name}/tool.git/"@en .
638+
639+
ckp:ckRef a owl:DatatypeProperty ;
640+
rdfs:domain ckp:KernelVersionRef ;
641+
rdfs:range xsd:string ;
642+
rdfs:label "CK loop ref"@en ;
643+
rdfs:comment "Git commit hash for CK loop. Full-tree archive from per-kernel CK bare repo. Extracted to /ck/{kernel}/{version}/ck/ on filer. Mounted at /ck/{kernel}/ck/ in pod (ReadOnlyMany)."@en .
644+
645+
ckp:toolRef a owl:DatatypeProperty ;
646+
rdfs:domain ckp:KernelVersionRef ;
647+
rdfs:range xsd:string ;
648+
rdfs:label "TOOL loop ref"@en ;
649+
rdfs:comment "Git commit hash for TOOL loop. Full-tree archive from per-kernel TOOL bare repo. Extracted to /ck/{kernel}/{version}/tool/ on filer. Mounted at /ck/{kernel}/tool/ in pod (ReadOnlyMany or ReadWriteMany for hot-reload)."@en .
650+
651+
ckp:hasAutoUpdate a owl:ObjectProperty ;
652+
rdfs:domain ckp:KernelVersionRef ;
653+
rdfs:range ckp:AutoUpdatePolicy ;
654+
rdfs:label "auto-update policy"@en ;
655+
rdfs:comment "Policy for webhook-driven ref updates from the git registry"@en .
656+
657+
### GitRegistryConfig — registry connection for a project
658+
659+
ckp:GitRegistryConfig a owl:Class ;
660+
rdfs:subClassOf bfo:0000031 ; # bfo:GenericallyDependentContinuant
661+
rdfs:label "Git Registry Config"@en ;
662+
rdfs:comment "Git registry connection configuration. The operator discovers this from the CK.Project ontology at runtime via the COMPOSES edge — not hardcoded."@en .
663+
664+
ckp:registryUrl a owl:DatatypeProperty ;
665+
rdfs:domain ckp:GitRegistryConfig ;
666+
rdfs:range xsd:anyURI ;
667+
rdfs:label "registry URL"@en ;
668+
rdfs:comment "Registry base URL (e.g. http://soft-serve-http.git.svc)"@en .
669+
670+
ckp:authSecret a owl:DatatypeProperty ;
671+
rdfs:domain ckp:GitRegistryConfig ;
672+
rdfs:range xsd:string ;
673+
rdfs:label "auth secret"@en ;
674+
rdfs:comment "K8s Secret name containing registry credentials. Optional for cluster-internal registries."@en .
675+
590676
#################################################################
591677
# Coverage Summary (as OWL Individuals)
592678
#################################################################

docs/public/ontology/v3.6/kernel-metadata.ttl

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,52 @@ ckp:TemplateKernel a owl:Class ;
341341
rdfs:label "Template Kernel"@en ;
342342
rdfs:comment "Template kernel for creating new kernels via forking"@en .
343343

344+
#################################################################
345+
# Version Materialisation Enums (v3.6.1)
346+
#################################################################
347+
348+
### DataIsolationMode — controls DATA directory scoping per version
349+
350+
ckp:DataIsolationMode a owl:Class ;
351+
rdfs:subClassOf bfo:0000019 ; # bfo:Quality
352+
rdfs:label "Data Isolation Mode"@en ;
353+
rdfs:comment "Controls whether a version gets its own DATA directory or shares with another version"@en .
354+
355+
ckp:DataIsolation-Isolated a ckp:DataIsolationMode ;
356+
rdfs:label "Isolated"@en ;
357+
rdfs:comment "Version gets its own DATA directory at /ck-data/{hostname}/{kernel}/{version}/"@en .
358+
359+
ckp:DataIsolation-Shared a ckp:DataIsolationMode ;
360+
rdfs:label "Shared"@en ;
361+
rdfs:comment "Version shares DATA directory with another version"@en .
362+
363+
### AutoUpdatePolicy — webhook-driven ref update behaviour
364+
365+
ckp:AutoUpdatePolicy a owl:Class ;
366+
rdfs:subClassOf bfo:0000019 ; # bfo:Quality
367+
rdfs:label "Auto Update Policy"@en ;
368+
rdfs:comment "Policy for handling ref-update webhooks from the git registry"@en .
369+
370+
ckp:AutoUpdate-Auto a ckp:AutoUpdatePolicy ;
371+
rdfs:label "Auto"@en ;
372+
rdfs:comment "Operator auto-patches CR with new ref on webhook. Triggers reconcile."@en .
373+
374+
ckp:AutoUpdate-Manual a ckp:AutoUpdatePolicy ;
375+
rdfs:label "Manual"@en ;
376+
rdfs:comment "Operator emits ref-update.available event. Requires manual CR patch."@en .
377+
378+
### StorageMedium additions (v3.6.1)
379+
380+
ckp:StorageMedium-GIT_BARE_REPO a ckp:StorageMedium ;
381+
rdfs:label "Git Bare Repository"@en ;
382+
rdfs:comment "Per-loop bare git repository on filer. CK loop at /ck/{kernel}/ck.git/, TOOL loop at /ck/{kernel}/tool.git/. Source of truth for git archive materialisation."@en .
383+
384+
### DeploymentMethod additions (v3.6.1)
385+
386+
ckp:DeploymentMethod-THREE_SIBLING a ckp:DeploymentMethod ;
387+
rdfs:label "Three Sibling Mounts"@en ;
388+
rdfs:comment "v3.6.1 Option A: three independent PVs mounted as siblings under /ck/{kernel}/. No nested volumes. Avoids runc EROFS constraint on ReadOnly parent overlays."@en .
389+
344390
#################################################################
345391
# Status Individuals
346392
#################################################################

docs/public/ontology/v3.6/shapes.ttl

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,69 @@ ckp:KernelReferenceIntegrityShape
301301
""" ;
302302
] .
303303

304+
# ----------------------------------------------------------------------------
305+
# Version Declaration Shape (v3.6.1)
306+
# ----------------------------------------------------------------------------
307+
ckp:VersionDeclarationShape
308+
a sh:NodeShape ;
309+
sh:targetClass ckp:VersionDeclaration ;
310+
311+
sh:property [
312+
sh:path ckp:hasVersionName ;
313+
sh:datatype xsd:string ;
314+
sh:minCount 1 ;
315+
sh:maxCount 1 ;
316+
sh:pattern "^[a-zA-Z0-9][a-zA-Z0-9._-]*$" ;
317+
sh:message "Version name must be alphanumeric with dots, hyphens, underscores" ;
318+
] ;
319+
320+
sh:property [
321+
sh:path ckp:hasRoute ;
322+
sh:datatype xsd:string ;
323+
sh:minCount 1 ;
324+
sh:maxCount 1 ;
325+
sh:pattern "^/" ;
326+
sh:message "Route must start with /" ;
327+
] ;
328+
329+
sh:property [
330+
sh:path ckp:hasKernelRef ;
331+
sh:node ckp:KernelVersionRefShape ;
332+
sh:minCount 1 ;
333+
sh:message "Version must declare at least one kernel ref" ;
334+
] .
335+
336+
# ----------------------------------------------------------------------------
337+
# Kernel Version Ref Shape (v3.6.1)
338+
# ----------------------------------------------------------------------------
339+
ckp:KernelVersionRefShape
340+
a sh:NodeShape ;
341+
sh:targetClass ckp:KernelVersionRef ;
342+
343+
sh:property [
344+
sh:path ckp:refKernelName ;
345+
sh:datatype xsd:string ;
346+
sh:minCount 1 ;
347+
sh:maxCount 1 ;
348+
sh:message "Kernel name is required" ;
349+
] ;
350+
351+
sh:property [
352+
sh:path ckp:ckRef ;
353+
sh:datatype xsd:string ;
354+
sh:maxCount 1 ;
355+
sh:pattern "^[0-9a-f]{7,40}$" ;
356+
sh:message "ck_ref must be a hex commit hash (7-40 chars)" ;
357+
] ;
358+
359+
sh:property [
360+
sh:path ckp:toolRef ;
361+
sh:datatype xsd:string ;
362+
sh:maxCount 1 ;
363+
sh:pattern "^[0-9a-f]{7,40}$" ;
364+
sh:message "tool_ref must be a hex commit hash (7-40 chars)" ;
365+
] .
366+
304367
# EOF - ConceptKernel SHACL Shapes v1.3.20
305368
# Creator: Peter Styk <peter@conceptkernel.org>
306369
# Project: https://conceptkernel.org

docs/v3.6/agent-teams.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ Each agent in the team loads its own CK loop, following the same awakening seque
5555
| 2 | `CLAUDE.md` | Behavioral instructions |
5656
| 3 | `SKILL.md` | Action catalog |
5757
| 4 | `ontology.yaml` | Data schema |
58-
| 5 | `storage/memory/MEMORY.md` | Persistent memory |
58+
| 5 | `data/memory/MEMORY.md` | Persistent memory |
5959

6060
Each agent operates under three-loop discipline:
6161
- **CK loop**: Read-only -- the agent reads its identity but cannot modify it
6262
- **TOOL loop**: Read-only -- the agent can read `tool/processor.py` to understand capabilities
63-
- **DATA loop**: Writable -- the agent writes to `storage/` (instances, proof, memory)
63+
- **DATA loop**: Writable -- the agent writes to `data/` (instances, proof, memory)
6464

6565
Each agent works within its kernel directory. There is no shared writable path between agents.
6666

@@ -105,7 +105,7 @@ Parent collects results from all agents as they complete. Agents may finish at d
105105

106106
### 4. Memory Merge
107107

108-
Parent persists each agent's memory updates to their respective `storage/memory/MEMORY.md`. Each kernel's memory is updated independently -- there is no shared memory across agents.
108+
Parent persists each agent's memory updates to their respective `data/memory/MEMORY.md`. Each kernel's memory is updated independently -- there is no shared memory across agents.
109109

110110
### 5. Unified Report
111111

@@ -135,7 +135,7 @@ Each kernel's `CLAUDE.md` must declare inter-kernel communication patterns for t
135135

136136
**Question:** How do agents avoid conflicting DATA loop writes?
137137

138-
**Answer:** Each agent writes to its OWN kernel's DATA loop. ComplianceCheck writes to `CK.ComplianceCheck/storage/`, Operator writes to `CK.Operator/storage/`, Core writes to `Delvinator.Core/storage/`. There is no shared writable path. Cross-kernel communication goes through NATS, not filesystem.
138+
**Answer:** Each agent writes to its OWN kernel's DATA loop. ComplianceCheck writes to `CK.ComplianceCheck/data/`, Operator writes to `CK.Operator/data/`, Core writes to `Delvinator.Core/data/`. There is no shared writable path. Cross-kernel communication goes through NATS, not filesystem.
139139

140140
**Question:** Can agents in a team use EXTENDS?
141141

docs/v3.6/bfo-grounding.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ The TBox and ABox mappings are rigorous. The RBox mapping is approximate -- the
9999
|--------|----------|----------|---------------------|-----------|
100100
| TBox | CK Loop | `conceptkernel.yaml`, `ontology.yaml`, `rules.shacl`, `serving.json` | Volume `ck-{guid}-ck`, ReadOnly | Rigorous |
101101
| RBox | TOOL Loop | `tool/processor.py`, scripts, services, build artifacts | Volume `ck-{guid}-tool`, ReadOnly | Approximate |
102-
| ABox | DATA Loop | `storage/instances/`, `proof/`, `ledger/`, `index/`, `llm/`, `web/` | Volume `ck-{guid}-storage`, ReadWrite | Rigorous |
102+
| ABox | DATA Loop | `data/instances/`, `proof/`, `ledger/`, `index/`, `llm/`, `web/` | Volume `ck-{guid}-storage`, ReadWrite | Rigorous |
103103

104104
:::warning
105105
The RBox mapping is deliberately approximate. The TOOL loop contains executable code -- Python handlers, scripts, build artifacts -- not Description Logic role axioms. Do not attempt to reason about TOOL loop contents using DL tools. The analogy is structural (the TOOL loop governs *how the kernel relates* to other things), not formal.

docs/v3.6/changelog.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,11 @@ All notable changes in the development increments that compose v3.6. Each versio
168168
- Updated ck-agent skill (`~/.claude/skills/ck-agent/SKILL.md`) for CKP v3.5 layout
169169
- CLAUDE.md at root (not llm/), SKILL.md loading, ontology.yaml summary
170170
- Three-loop discipline enforced: CK read-only, TOOL read-only, DATA writable
171-
- Memory persistence: `storage/memory/MEMORY.md` (DATA loop)
171+
- Memory persistence: `data/memory/MEMORY.md` (DATA loop)
172172
- Multi-root search: `$CK_CONCEPTS_DIR`, `./concepts/`, `~/git/delve_workspace/concepts/`
173173
- Fuzzy kernel resolution: `CK.*`, `Delvinator.*`, `CS.*`, `Hello.*`
174174
- NATS bridge: optional dispatch to live kernel via `nats pub`
175-
- `storage/memory/` directories created for all kernels
175+
- `data/memory/` directories created for all kernels
176176

177177
### v3.5.7 -- Hello.Greeter Kernel <Badge type="tip" text="DEPLOYED" />
178178

docs/v3.6/ck-loop.md

Lines changed: 21 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: CK Loop -- Identity and Awakening
3-
description: The CK loop is the identity organ of every Concept Kernel. It holds the awakening sequence, conceptkernel.yaml, serving.json, and defines what the kernel IS.
3+
description: The CK loop is the identity organ of every Concept Kernel. It holds the awakening sequence, conceptkernel.yaml, and defines what the kernel IS.
44
---
55

66
# CK Loop -- Identity and Awakening
@@ -29,7 +29,7 @@ When a Concept Kernel wakes, it MUST read its identity files in **strict order**
2929
| 5a | **SPIRE agent** | Am I cryptographically who I claim? | **Fatal** for non-LOCAL kernels; skip for `LOCAL.*` prefix |
3030
| 6 | `ontology.yaml` | How is my world shaped? | **Fatal** -- kernel has no data schema |
3131
| 7 | `rules.shacl` | What constraints bind me? | Warning -- permissive stub mode (all writes accepted) |
32-
| 8 | `serving.json` | Which version am I? | **Fatal** -- kernel cannot determine active version |
32+
| 8 | ~~`serving.json`~~ | ~~Which version am I?~~ | **Retired (v3.6.1)** -- version state in CK.Project CR |
3333
| 8a | `.ck-guid` | What is my canonical SPID? | Warning -- fallback to `kernel_id` from YAML |
3434

3535
::: danger Fatal Failure Points
@@ -46,7 +46,7 @@ graph TD
4646
S5a["5a. SPIRE Agent<br/><em>Am I who I claim?</em>"]
4747
S6["6. ontology.yaml<br/><em>How is my world shaped?</em>"]
4848
S7["7. rules.shacl<br/><em>What constraints bind me?</em>"]
49-
S8["8. serving.json<br/><em>Which version am I?</em>"]
49+
S8["8. (retired v3.6.1)<br/><em>serving.json removed</em>"]
5050
S8a["8a. .ck-guid<br/><em>Canonical SPID</em>"]
5151
FAIL["HALT -- Kernel does not start"]
5252
READY["Kernel READY"]
@@ -62,9 +62,7 @@ graph TD
6262
S5a -->|FAIL non-LOCAL| FAIL
6363
S6 -->|OK| S7
6464
S6 -->|FAIL| FAIL
65-
S7 -->|OK or WARN| S8
66-
S8 -->|OK| S8a
67-
S8 -->|FAIL| FAIL
65+
S7 -->|OK or WARN| S8a
6866
S8a -->|OK or WARN| READY
6967
7068
style FAIL fill:#cc3333,color:#fff
@@ -148,49 +146,27 @@ ckp://Kernel#{namespace_prefix}.{kernel_class}:v{major}.{minor}
148146

149147
Example: `ckp://Kernel#ACME.Finance.Employee:v1.0`
150148

151-
## serving.json -- Active Version Routing
152-
153-
`serving.json` declares which version of the CK loop (and by extension which `tool/` commit) is currently active. It supports two schema modes.
154-
155-
### Mode 1: Canary Routing
156-
157-
Traffic splitting across versions using `ck_ref`, `tool_ref`, and `weight` fields:
158-
159-
```json
160-
{
161-
"kernel_class": "Finance.Employee",
162-
"versions": [
163-
{ "name": "stable", "ck_ref": "refs/heads/stable",
164-
"tool_ref": "refs/heads/stable", "weight": 95 },
165-
{ "name": "canary", "ck_ref": "refs/heads/canary",
166-
"tool_ref": "refs/heads/canary", "weight": 5 },
167-
{ "name": "develop", "ck_ref": "refs/heads/develop",
168-
"tool_ref": "refs/heads/develop", "weight": 0 }
169-
],
170-
"routing": {
171-
"default": "stable",
172-
"by_header_X-Kernel-Version": { "canary": "canary", "dev": "develop" }
173-
}
174-
}
175-
```
149+
## Version Materialisation (v3.6.1)
176150

177-
### Mode 2: Explicit Version
151+
::: info serving.json Retired
152+
`serving.json` was retired in v3.6.1. Version state now lives entirely in the **CK.Project custom resource** (`spec.versions`). The CK loop volume is purely ReadOnlyMany with **no exceptions**. No write-through hack, no sidecar mechanism. See [Version Materialisation](./versioning) for the full model.
153+
:::
178154

179-
Version directory management using `active`, `current`, and `deprecated_at` fields:
155+
Version declarations are part of the CK.Project custom resource. Each version specifies per-kernel git commit hashes for CK and TOOL loops independently:
180156

181-
```json
182-
{
183-
"versions": [
184-
{ "name": "v1", "active": true },
185-
{ "name": "v2", "active": true, "current": true },
186-
{ "name": "v3", "active": false, "deprecated_at": "2026-04-01" }
187-
]
188-
}
157+
```yaml
158+
spec:
159+
versions:
160+
- name: v1.3.2
161+
route: /
162+
data: isolated
163+
kernels:
164+
- name: Hello.Greeter
165+
ck_ref: abc123f # commit hash from CK repo
166+
tool_ref: def4567 # commit hash from TOOL repo
189167
```
190168
191-
::: warning Platform Write Exception
192-
`serving.json` is the **sole exception** to CK loop read-only policy. The platform holds write authority to this file via a volume sub-path mount or sidecar mechanism. The CK loop volume remains ReadOnlyMany for all other files. CK.Operator implementations MUST document the write-through mechanism used for `serving.json`.
193-
:::
169+
The operator materialises each version by streaming `git archive` from per-kernel bare repositories to the filer. Each loop has its own bare repo — full-tree archive produces the loop content directly. No subtree filtering.
194170

195171
## CK Loop NATS Topics
196172

@@ -220,4 +196,4 @@ Cross-project access from `LOCAL.*` to non-`LOCAL.*` still REQUIRES SPIFFE. Loca
220196
| L-2 | Kernel MUST NOT proceed past a failed fatal awakening step | Core |
221197
| L-3 | SPIFFE verification MUST occur at position 5a in the awakening sequence | Core |
222198
| L-4 | `conceptkernel.yaml` MUST pass the five validation rules | Core |
223-
| L-5 | `serving.json` is the sole CK loop file with platform write authority | Core |
199+
| L-5 | CK loop volume is purely ReadOnlyMany — no writable exceptions (v3.6.1: `serving.json` retired) | Core |

0 commit comments

Comments
 (0)