Framework native installation qualification — 2026-09-09¶
This is installed-process evidence, not a release announcement or full UI E2E pass. Source work is tracked in Sympozium #470 and Celln #99.
Installed path¶
Framework (192.168.1.237, Linux 7.1.8-100.fc43.x86_64) has five standalone,
operator-signed starter bundles admitted using real guest member checks.
Package identity:
blake3:7114835971abdfbbdb83d800daa69783a55600f56fbf563d190bdc5650d0ad94.
The new non-root native owner listens on loopback port 18787; a separate TLS
edge listens on 19443. The previous celln-dispatcher.service is untouched.
State is /var/lib/sympozium-celln/starter. The parent controller mounts that
dedicated tree, not KVM or model credentials. The general controller excludes
only celln-agents, keeping its existing namespace watches.
The installer created the real Agent/runtime/tool identities and all three
grant layers. Kubernetes model credentials were not created: qualification uses
the user-authorized DeepSeek credential in host-only /etc/celln-native/model-token.
The private publisher seed is not in Kubernetes or an image build context.
Owner authentication without a policy returned 503; after independent client
policy installation, unauthenticated parent requests returned 401 over verified
TLS. A package or grant alone is not execution readiness.
Observed results¶
- YAML-created
celln-starter-9q84h, UID5da9a091-a616-4aab-8875-581c37fa5dec, ran real DeepSeek turns. - Separate, audited children invoked
workspace-writeandworkspace-read:notes.txtbecameamber-57at revision 2, then a fresh tool read returned those bytes. Another audited child invokedhttps-fetchand returned the actualexample.comHTML. Audits include executable/schema hashes and broker counters, not just the model's answer. - The parent incarnation remained
blake3:d3df3c1650e0927429bfc1aea42ea8cf82b4cbae46f519603667a5693f6f4db4across API and parent-controller restarts. Startup was not replayed. - A later long-conversation turn failed; the run reported parent context lost or stopped and did not claim empty-state resumption. Its records remain for diagnosis. This observation alone does not prove the cause was context size.
- API-created
celln-agent-2rpjs, UIDc067ffea-5a1c-4b22-8e1b-757346ce0b1e, completed an initial write. Cancellation after dispatch committedsucceeded: false,Turn cancelled after child teardown.A subsequent child readproof.txt, returningcobalt, revision 1. - Normal API deletion of that second run completed and its finalizer cleared. The owner remained active with zero service restarts; replay journals remain.
- An earlier API attempt was refused before execution because its default five-minute timeout was shorter than the one-hour registered lease. That unexecuted test record was removed after inspection; its request was retained in private qualification evidence. No live authority was reset.
Defects found and corrected¶
- Native catalogue selection incorrectly inherited OCI harness readiness at admission. Native selection is now separate, without fabricating OCI Ready.
- API RBAC lacked turn
watchandupdate, causing stale history and failed cancellation persistence. Chart and incremental-upgrade roles now include both, with a render regression test; no turn-status write authority is added. - Enduring API/UI timeout defaults now follow the requested lease. Explicit shorter timeouts are refused by the API.
- Incompatible SkillPacks are flagged before submission; API/admission reject SkillPacks and Agent MCP connections rather than silently discarding them.
- The glossary and OCI/native guides now state supported tools, permission boundaries and backend-specific persistence limits.
API/UI and webhook revision 8e96f31 was subsequently deployed successfully.
The API returned 400 before persisting an incompatible native request for the
existing foo Agent's SkillPacks. An enduring request with no explicit timeout
was persisted with 1h0m0s, matching its lease.
The ordinary Kubernetes foo-g2669 smoke run succeeded using its existing local
Qwen model and SkillPacks. Runner output was SYMPOZIUM_STANDARD_OK, with zero
tool calls, 6169 input tokens, 73 output tokens and 33831 ms model duration.
Its normal memory integration automatically stored a 170-byte test record;
this was not a test of Kubernetes administration tool effects.
The parent controller pod celln-parent-controller-c99b4ff4f-z4v27 stayed on
the same UID with zero restarts after creation at 09:55:49 UTC. Its projected
credential directory was refreshed at 10:21:54 UTC; a new parent and status
writes succeeded after that refresh, without restarting the controller.
For deliberate owner loss, celln-agent-tq7st first completed a real-model
initial turn. Restarting only the new native owner caused CellnParentReady
to become false with reason ContextLost and message Parent context
unavailable; no automatic reconstruction. The original incarnation and initial
result remained recorded. The old dispatcher stayed active throughout.
These are private local qualification images, not published release artifacts.
Automated regression results¶
- Sympozium
go test ./...passed. Targeted API, webhook, installer and chart race tests passed. Web TypeScript checking and production bundling passed. - Celln
make cipassed, including warning-free clippy. - Four explicit local KVM tests passed: signed closure admission, persistent parent launcher, declared substrate and dispatch outcomes (including hostile guest workspace/exec probes, stop/cancel and invalid-kernel refusal).
- The JSON harness grant-issuance KVM test initially lacked its required package.
After generating that package with
celln-json-harness-proof --package-only, it passed in 3.23 seconds with no model calls. This is not a billable one-shot model E2E or an installed framework router regression.
Remaining release gates¶
- User-performed installed visual acceptance; the user elected to eyeball the UI instead of connecting a browser. This review has not yet been reported.
- Installed Celln direct/Harness one-shot router regressions and legacy-stack migration. The installed OCI persistent-session suite has now passed below.
- Review/merge paired PRs, publish digest-pinned installation images, and verify the documented installation from those published artifacts before tagging.
Private evidence is under the Sympozium worktree's
target/framework-native/evidence/ (run/turn records and nine guest audits).
Guest audits contain conversation/tool data and are deliberately not committed.
Host audit retention is explicitly enabled via the private authority/parent-audit
directory; default production operation need not retain it.
Follow-up technical qualification¶
Final UI revision be3e9e5 is deployed, including the disabled timeout field
which displays the enduring lease instead of a misleading editable five-minute
default. Framework imported image manifest
sha256:f9e73d617c53a1b4057e09c585fe663545b487b61a7b21b185776cbeb16ae442
and serves assets/index-hVwvQ9XS.js. The build used a clean Git archive, not
the dirty local generated assets or private qualification files. Health and
served-asset checks passed after rollout.
Celln revision df59b2b adds pre-launch host process identity and same-boot
process-exit confirmation, preserving the strict stop-response ABI. Installed
run celln-agent-jnhq7, UID 6f5e91c4-9903-4d63-aa3b-ad75c100c617, completed
a DeepSeek turn remembering opal. Its parent incarnation was
blake3:7c71e8690fa2fb9b9ffebc422eba17b6c77793e0e95889aea2c5f52295940552.
After restarting only the new owner, the run reported ContextLost. Normal
API deletion returned 204 and Kubernetes confirmed deletion after the controller
received host teardown acknowledgement. No finalizer was manually removed and
no journal or authority was reset. Older qualification journals intentionally
remain fail-closed because they lack a pre-launch process identity.
The installed OCI Pi session suite passed against published digest
sha256:8c8f0df071dc5307b3b557e0233a70757d8a4be17cb688c1ca725cb41001bbd5
in sympozium-harness-e2e: real DeepSeek conversation across pod restart,
SSE content and [DONE], explicit stop/resume with the same remembered token
and PVC, request audit, disconnect cancellation, idle timeout, actionable
failure status, and deletion of owned resources. Test Agents and credentials
were removed by the suite. The final proof used an SSH TCP tunnel directly to
the API Service: disconnect cancellation did not propagate correctly in the
earlier kubectl port-forward test path. The older runtime digest still bound
in default returned JSON instead of SSE; it was not silently overwritten.
The suite now rejects temporary non-JSON responses when waiting for a replacement
session endpoint and verifies the actual remembered token after resume.
The installed one-shot smoke did not pass. Its legacy v0.4.13 router has a
plaintext URL and predates the current client-authentication/ownership contract.
The updated controller refused before dispatch with router requires HTTPS.
This is an unresolved installation upgrade gate, not a guest execution failure.
The old dispatcher and router were not replaced and insecure HTTP was not enabled.
The qualification TLS server certificate lasts 14 days, its CA 30 days from 2026-09-09. The units were started, not enabled across reboots. Rotate certificates and deliberately provision production credentials before treating this as a long-lived installation. Keep journals stable; never delete them to renew access.