Experimental Celln executable-tool catalogue metadata¶
Historical record
This page records a Celln development milestone (September 2026). Interfaces and limits it describes may since have changed or been replaced by the Celln fleet. For current behaviour see Celln Backend and Celln Fleet Installation.
Implements the first schema/RBAC slice of #335 and epic #426. This is not an executable catalogue yet: an operator review CLI can publish locally verified metadata, but no verifier/distribution controller, lending resolver, API-server submission endpoint or selection UI is connected. Neither resource creation nor status metadata grants Celln execution authority.
Resources and ownership¶
CellnToolSubmission is namespace-scoped user intent. CellnTool is an
operator-managed catalogue revision. Both use an immutable spec and separate
status subresource; creating a submission with forged status does not preserve
that status. There is no default Approved/Ready condition.
Each spec includes a revision, description, support owner, publisher key, executable/closure BLAKE3 references, canonical ASCII guest entry point, invocation ABI, argument/result schema references, platform/lane and bounds. Optional digest-pinned OCI source identity is provenance only; nothing fetches or executes that image. Publisher keys and hashes here are declarations, not verified signatures or behavior admission. Host verification remains necessary.
Schema references identify immutable JSON-schema documents that a future
verifier must fetch, hash-check and validate against the implemented dialect.
This API slice checks reference shape, not JSON-schema semantics or actual tool
arguments. Supported metadata ABIs are celln.argv/v1 and the separately
versioned celln.json-stdio/v1 on Linux/amd64. JSON descriptions and deadlines
must fit the native adapter's 512-character and 30-second schema ceilings;
the resolver additionally enforces description byte length. See the
JSON binding guide for current execution scope.
The current closed profile requires workspace none and refuses nonempty egress
or immutable-input requirements; those need delivery support before expansion.
No requested unsupported authority is silently translated into an execution.
Specs cannot be patched, even to reduce limits. Publish a new revision and resolve its new UID/hash identity explicitly. Revocation will be a separate policy/controller action, not mutation of a frozen executable revision.
The chart renders three unbound ClusterRoles:
| Role suffix | Allowed operations |
|---|---|
celln-tool-submitter |
Create/read/list/watch submissions only |
celln-tool-reviewer |
Read submissions; create/read/list/watch/delete catalogue entries |
celln-tool-verifier |
Read both resources; update/patch their status only |
Administrators may bind these through namespace-scoped RoleBindings. None is automatically granted to API servers, agents, runtimes or existing controllers. Do not use cluster-wide bindings for tenant submission. The verifier role is trusted status authority, not a user role; even its future Ready status must bind observed UID/generation, artifact and policy revisions before use.
Verification¶
The portable API/controller/webhook regressions still apply. The no-model metadata integration test requires an explicit isolated kubeconfig:
CELLN_CATALOGUE_KUBECONFIG=/absolute/path/to/isolated/kubeconfig \
bash test/integration/test-celln-tool-catalogue.sh
It refuses any context other than kind-celln-deployed, applies only the two
catalogue CRDs and chart-rendered unbound roles, creates a fresh test namespace,
and uses service-account impersonation against the real API server. It tests
submission creation with status stripping, self-publication/status denial,
cross-namespace submission denial, reviewer/verifier separation, immutable
revisions, invalid hashes/paths/images and refused egress/zero-memory bounds.
Passed against isolated Kubernetes v1.35.0 on 2026-09-07. Temporary namespaces, catalogue entries, submissions, service accounts, bindings and test roles were removed. CRDs remain installed; no tools, cells, Jobs or model calls were created. Fixture hashes are intentionally dummy metadata, not admitted executable bytes. This is Kubernetes schema/RBAC evidence, not guest-isolation or BYO execution evidence. Operator review and pure authority resolution are now available; conformance, trusted dispatch integration and distribution remain next steps.