Skip to content

RFC-0024: Optional RuntimeClass for dedicated Harnesses - #3893

Closed
cooktheryan wants to merge 13 commits into
openclaw:mainfrom
cooktheryan:codex/kata-harness-runtime
Closed

cooktheryan wants to merge 13 commits into
openclaw:mainfrom
cooktheryan:codex/kata-harness-runtime

Conversation

@cooktheryan

@cooktheryan cooktheryan commented Oct 27, 2026 •

Copy link
Copy Markdown

Human merge required. Agents must not merge this RFC or enable automatic merging. A human must manually click Merge.

Summary

  • Propose RFC-0024 to let an Installation select an operator-installed RuntimeClass for Compute-owned dedicated Harnesses.
  • Keep the current runtime, Pod template, and mounts when runtime.harnessRuntimeClassName is absent, empty, or whitespace-only; no alternate runtime installation is required. A nonblank selection must retain the named class through readiness; an unavailable class leaves the Agent unready without fallback.
  • Give operators a way to run Codex tools behind Kata's separate guest kernel and VM boundary, while keeping Gateway, embedded Agent, and Sandbox-owned Harness behavior outside the change. OCE does not install Kata or treat a class name as proof of isolation.
  • Add only the proposal files: specs/rfcs/0024-optional-harness-runtime-class.md, specs/plans/0024-optional-harness-runtime-class.md, and the specs/README.md index entry. The plan remains Planned; this PR changes no product code.

Research

OpenShell’s Sandbox Driver already sets the RuntimeClass for provider-owned Harness Pods. The RFC records how a future Kata qualification can reuse that setting and the same operator-installed RuntimeClass. The Compute setting applies only to Compute-owned Pods. OpenShell’s current layout also uses subPath mounts, so that path still needs mount compatibility and provider-owned Agent qualification.

Current Kubernetes Compute leaves runtimeClassName unset and uses subPath mounts in its dedicated Harness. Kata does not support Kubernetes subPath mounts, so selecting a class alone would not make that Pod compatible. The proposal confines a whole-volume layout to explicitly selected Harnesses. Kata is the first qualification target. The selector is runtime-neutral, but it does not qualify every handler: the earlier gVisor proposal closed unmerged, and gVisor needs its own Harness checks before support is claimed. Kata's VM architecture offers a separate guest kernel and another isolation layer; OCE's Secret, network, and tenant controls remain necessary.

A disposable AWS M7i/k3d trial booted a Kata 4.3.1 QEMU smoke Pod with a different guest kernel and active guest seccomp. An isolated prototype then ran a real dedicated Harness Pod with the selected class and no subPath mounts. The Agent completed a model turn, native file read/write, attachment continuation, and a separate Skill source upload/update/denied-write case. The broader workflow failed remote Memory retrieval, expected Skill discovery path, and paired-node reconnect after restart; optional repository projection, replacement persistence, missing-class behavior, and Codex localhost seccomp remain unproved. Symlink aliases for persistent state and workspace failed OpenClaw path checks, so the RFC now requires real private state directories and canonical workspace mapping. Host /dev/shm was needed in the k3d node, and enforcing Fedora SELinux for virtiofsd remains unqualified. These are trial findings, not a support claim.

Verification

  • git diff --check and file-scoped Prettier passed for the proposal files. The RFC is under 1,500 words and the plan under 1,500 words by wc -w, including Markdown syntax.
  • pnpm docs:check-length, pnpm docs:check, and node scripts/check-specs.mjs could not run on the final revision because the installed dependency graph lacks @sindresorhus/slugify; no dependency installation was performed as a verification side effect.
  • The AWS test outcomes above are limited to the isolated prototype. The failed broader Agent workflow and remaining qualification gates stay in the plan. No product code is in this PR.

Review focus

  • Should Kubernetes Compute own this fully optional Installation setting and a second, compatible Harness mount layout?
  • Do the unchanged defaults, selected-class readiness check, and no-fallback behavior set the right failure boundary?
  • What installed-runtime, guest seccomp, network, storage, and KVM CI evidence must pass before claiming support?

RFC numbering

The current base, 222d2266842db457415e146b70a30abf430480aa, ends at RFC-0023, so this proposal uses RFC-0024. Concurrent unmerged proposals, including PR #3137, also use RFC-0024; unmerged proposals do not reserve IDs. Reconcile the number and file names against main before merge. This draft requests architectural feedback and does not claim acceptance.

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on maintainer Only explicit maintainer approvals or decisions remain; merge is still blocked. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 27, 2026
@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: blocked before merge.

What this changes

This PR proposes an optional RuntimeClass selector and compatible volume layout for Compute-owned dedicated Harnesses.

Example: An operator wants a dedicated Codex Harness to use an installed RuntimeClass named kata-qemu.

  • Before: Compute provides no RuntimeClass selector, and its Harness uses subPath mounts.
  • After: The proposed implementation would select kata-qemu with whole-volume mounts and leave the Agent unready if that class cannot run.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The proposal is grounded in current owners and documented runtime constraints; readiness remains limited by the unresolved product direction.
Proof confidence 🐚 platinum hermit (4/6) This PR changes proposal documents only; its prototype outcomes are explicitly limited feasibility observations, and the plan retains the failed and unproved runtime scenarios as delivery gates.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Feature · Worth it: Needs a maintainer decision · Fix scope: Complete
User problem: Operators cannot select an installed VM-backed RuntimeClass for Compute-owned dedicated Harnesses, and their current mounts conflict with Kata's documented limitation.
Reason: The RFC identifies a concrete operator use case, respects separate Compute and Sandbox ownership, and records qualification limits, but introduces an unapproved configuration and maintenance commitment.

Merge readiness

⛔ Blocked before merge - 1 item remains

Keep open for Compute-owner direction: this is a coherent RFC-only proposal, with no concrete patch defect found.

Priority: P3
Reviewed head: 1293ab8de3496c21d689eb525f451843089c2f32
Owner decision: Required. See Decision needed.

Decision needed

  • Question: Should Kubernetes Compute own an optional Installation RuntimeClass selector and a second dedicated Harness mount layout?
  • Recommendation: Accept the bounded proposal: Approve the Compute-owned selector and opt-in layout, preserving unchanged defaults and requiring the recorded qualification before claiming support.
  • Why: The proposal introduces a Driver configuration contract and ongoing layout maintenance; the author requests this decision, and no responsible owner's approval is recorded.

Before merge

  • Resolve maintainer decision - Resolve the maintainer decision shown above before merge.

Findings

None.

Agent review details

How this fits together

Kubernetes Compute turns admitted Agent requirements and Installation configuration into workloads and readiness observations; OpenShell separately owns provider-created Harnesses.

flowchart TB
  Installation[Installation configuration]
  Compute[Kubernetes Compute]
  Harness[Compute-owned Harness]
  Runtime[Operator-installed RuntimeClass]
  Readiness[Agent readiness]
  Installation -. proposed selector .-> Compute
  Compute -. proposed compatible layout .-> Harness
  Harness -. selected class .-> Runtime
  Compute -. class and Pod checks .-> Readiness
Loading

Technical review

Best possible solution:

Have Compute owners accept or defer the optional contract while retaining the plan's real Agent workflow and installed-Kata qualification requirements.

Do we have a high-confidence way to reproduce the issue?

This proposes a capability rather than reporting a bug; source inspection confirms the Compute selector is absent and its current mounts use subPath.

Is this the best way to solve the issue?

The proposal uses existing workload owners and preserves defaults, but maintaining a conditional layout requires the requested Compute-owner decision.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against d409e3c8a311.

Provenance checked

  • Specification index keeps the original intent (3115679: The existing index tracks RFC implementation status separately from decision status; this PR increments the unimplemented count and appends a proposed RFC.)

Security

None.

Evidence

What I checked:

  • Proposal scope and unresolved decision: The pinned introduced diff changes only the specification index, RFC, and plan; the RFC remains Proposed and explicitly requests Compute-owner approval. (specs/rfcs/0024-optional-harness-runtime-class.md:33, 1293ab8de349)
  • Current Compute implementation: Current main mounts persistent Harness workspace categories with subPath and has no runtimeClassName or harnessRuntimeClassName setting in the Kubernetes Compute implementation. (apps/controller/src/drivers/compute/kubernetes/index.ts:14243, d409e3c8a311)
  • Existing provider-owned path: OpenShell already forwards its Sandbox Driver runtimeClassName into runtime_class_name; the proposal correctly excludes those provider-owned Pods. (apps/controller/src/drivers/sandbox/openshell.ts:2194, d409e3c8a311)
  • Mount compatibility rationale: Kata's documented lack of volumeMount.subPath support substantiates the proposed mount change; the RFC expressly depends on this runtime contract. (docs/Limitations.md:195, 040f133f6240)
  • Discussion and earlier review: The author's discussion explicitly distinguishes the recommendation from Compute-owner approval. No owner approval appears in the retrieved discussion or reviews, so the previous review's owner-decision request remains unresolved. The retrieved body matches the supplied sourceRevision 4687c6b505785196fb7812b375527d885d07c0618a1961cdaf525cbdcbd93f61. (1293ab8de349)
  • Prior isolation proposal: docs(rfc): propose gvisor container support #248 closed unmerged. Its discussion places gVisor in proposed 1.x work and supplies no approval for this Compute contract.

Labels

Label changes:

No label changes.

Label justifications:

  • P3: This is an optional architecture proposal with no product behavior change or demonstrated current regression.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: ⏳ waiting on maintainer: Only explicit maintainer approvals or decisions remain; merge is still blocked.

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Obtain a Compute-owner decision on the optional selector and conditional Harness mount layout.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (4 earlier review cycles)
  • reviewed 2026-10-27T19:26:59.793Z sha 3ece0cf :: blocked before merge. :: none
  • reviewed 2026-10-27T20:12:51.336Z sha 5b5cd8c :: blocked before merge. :: none
  • reviewed 2026-10-27T21:45:35.843Z sha 1f7a1c0 :: blocked before merge. :: none
  • reviewed 2026-10-27T22:00:17.923Z sha 631c913 :: blocked before merge. :: none

Reviewed October 27, 2026, 8:50 PM ET / October 28, 2026, 00:50 UTC (Revision 5).

@cooktheryan cooktheryan changed the title RFC: optional RuntimeClass for dedicated Harnesses RFC and implementation: optional dedicated Harness RuntimeClass Oct 27, 2026
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added the clawsweeper:intake:feature Preliminary submission classification; full source review pending. label Oct 27, 2026
@cooktheryan cooktheryan changed the title RFC and implementation: optional dedicated Harness RuntimeClass RFC-0024: Optional RuntimeClass for dedicated Harnesses Oct 27, 2026
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@cooktheryan

Copy link
Copy Markdown
Author

On the decision question: I recommend the bounded optional contract for Compute-owned dedicated Harnesses. It addresses Kata's documented subPath limitation while keeping the current Pod template, mounts, and cluster default runtime when the field is absent, empty, or whitespace-only. A nonblank selection must retain that class through readiness; an unavailable class must leave the Agent unready. Kata installation, class scheduling, and guest-VM verification remain operator responsibilities.

This is the proposer's rationale, not a recorded Compute-owner approval. Please keep the maintainer decision open. RFC-0024 remains Proposed, and this draft PR contains only the RFC, its planned delivery record, and the index entry. The required Agent integration and Kata qualification remain future delivery gates.

@clawsweeper clawsweeper Bot added clawsweeper:intake:docs Preliminary submission classification; full source review pending. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 27, 2026
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot removed the clawsweeper:intake:feature Preliminary submission classification; full source review pending. label Oct 27, 2026
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review

I updated RFC-0024 and its plan with the isolated AWS Kata trial. The proposed contract remains fully optional: unset/blank values keep the current behavior; a selected class must not fall back. The real dedicated Harness reached Ready under Kata with zero subPath mounts, and model/tool, attachment, and focused Skill source lifecycle checks passed. The broader Agent workflow still failed remote Memory retrieval, Skill discovery path expectations, and paired-node reconnect after restart. The RFC and plan now record these as delivery blockers, along with unproved replacement persistence, optional repository projection, unavailable-class behavior, Codex localhost seccomp, and enforcing SELinux. No implementation code is in this PR. The Compute-owner decision remains open.

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 27, 2026
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review — I clarified that Kata is the first qualification target, linked the closed gVisor proposal, and made the unset/blank default explicit: no alternate runtime installation or Pod layout change is required. This remains an RFC-only PR; other handlers need separate qualification before support is claimed.

@clawsweeper

clawsweeper Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 27, 2026
@cooktheryan
cooktheryan marked this pull request as ready for review October 27, 2026 22:13
@cooktheryan
cooktheryan requested a review from a team as a code owner October 27, 2026 22:13
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review

The RFC now explains the future OpenShell path: OCE's Sandbox Driver already puts its kubernetes.runtimeClassName on the provider-owned Harness Sandbox template. This Compute-owned setting does not control those Pods. OpenShell's current OCE layout uses PVC subPath mounts, so Kata still needs a compatible layout and separate provider-owned Agent qualification before support is claimed. I aligned the plan and PR description; this remains proposal-only.

@clawsweeper

clawsweeper Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added the clawsweeper:intake:feature Preliminary submission classification; full source review pending. label Oct 28, 2026
@cooktheryan

Copy link
Copy Markdown
Author

@clawsweeper re-review — I clarified that a future OpenShell Kata path reuses its existing Sandbox Driver RuntimeClass setting and the same operator-installed RuntimeClass. The RFC Compute setting only applies to Compute-owned Pods. The current OpenShell subPath layout and provider-owned workflow still need separate compatibility and qualification.

@clawsweeper

clawsweeper Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:docs Preliminary submission classification; full source review pending. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. clawsweeper:intake:docs Preliminary submission classification; full source review pending. labels Oct 28, 2026
jhjaggars added a commit to jhjaggars/openclaw-enterprise that referenced this pull request Oct 28, 2026
0024 is taken by the pending Harness RuntimeClass RFC (openclaw#3893), per
review. The continuity check in docs:check will report the resulting gap
on this branch until openclaw#3893 lands and this PR rebases onto it.
jhjaggars added a commit to jhjaggars/openclaw-enterprise that referenced this pull request Oct 30, 2026
0024 is taken by the pending Harness RuntimeClass RFC (openclaw#3893), per
review. The continuity check in docs:check will report the resulting gap
on this branch until openclaw#3893 lands and this PR rebases onto it.
jhjaggars added a commit to jhjaggars/openclaw-enterprise that referenced this pull request Nov 2, 2026
0024 is taken by the pending Harness RuntimeClass RFC (openclaw#3893), per
review. The continuity check in docs:check will report the resulting gap
on this branch until openclaw#3893 lands and this PR rebases onto it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on maintainer Only explicit maintainer approvals or decisions remain; merge is still blocked.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant