RFC 0018: Readiness Conditions and Providers - #33
Conversation
510b525 to
5d3b673
Compare
|
Codex review: needs real behavior proof before merge. Reviewed August 22, 2026, 12:00 PM ET / 16:00 UTC. ClawSweeper reviewWhat this changesThe PR adds a draft RFC and three sidecars defining opt-in, subject-aware Gateway readiness conditions, plugin providers, and shared HTTP/status/CLI projections. Merge readinessKeep open: this is a substantial product and plugin-contract RFC, not an implemented default-branch change. Its required maintainer-discussion thread is still not linked, so it needs that discussion and an explicit product decision before merge. Priority: P2 Review scores
Verification
How this fits togetherThe RFC repository records proposed OpenClaw contracts before they become implementation work. This proposal would collect Gateway and plugin observations into one readiness result consumed by operator probes, diagnostics, and the CLI. flowchart LR
A[Gateway runtime facts] --> C[Readiness conditions]
B[Plugin observations] --> C
D[Operator selection] --> E[Canonical readiness result]
C --> E
E --> F[Readiness probes]
E --> G[Status diagnostics]
E --> H[CLI output]
Decision needed
Why: The RFC defines new public configuration, HTTP/CLI semantics, and a plugin-facing contract; repository policy requires maintainer discussion before accepting that direction. Before merge
Findings
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Open and link the required maintainer discussion, then decide whether the opt-in readiness and provider contract is an accepted OpenClaw direction before moving its upstream implementation stack forward. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a design RFC, not a report of broken current behavior. Is this the best way to solve the issue? Unclear: the design is detailed, but the repository-required maintainer discussion and product decision must precede acceptance of this public contract. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning high; reviewed against af708f0ddb6f. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (131 earlier review cycles; latest 8 shown)
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ab870252-d6a4-454c-8254-b94b3efe2182
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ab870252-d6a4-454c-8254-b94b3efe2182
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ab870252-d6a4-454c-8254-b94b3efe2182
Decision Requested
Should OpenClaw add an opt-in, structured, subject-aware readiness contract around its existing Gateway checker?
This RFC covers Readiness Conditions and Providers. Standard Hosting Profiles remain a separate product/support decision in RFC 0023.
Why
OpenClaw already exposes
/readyand/readyz, but their evaluator is purpose-built around fixed Gateway observations. Operators cannot select which known runtime facts their deployment requires, plugins cannot contribute bounded observations, and a single result cannot identify the different runtime subjects those observations describe.Proposed V1
Each condition has stable
type,subjectRef,status,requirement,reason, andmessagefields, with optional bounded related subjects. RequiredFalseorUnknownconditions fail readiness; advisory conditions remain visible. Activated/ready,/readyz, Gateway health/status projections, andopenclaw readyconsume the same canonical result. HTTP/healthand/healthzremain shallow liveness.Health/status consumers can derive one selected-condition state without changing or re-evaluating conditions:
False->failingUnknownwithout a required failure ->unknownTruewith all required conditions true ->degradedpassingDetailed local or authenticated status reuses each condition's stable
reason, bounded redactedmessage, and subject references. Unauthenticated remote output exposes only the aggregate status and readiness boolean. A separate/statuszmay expose this diagnostic projection while/healthzremains liveness and/readyzremains traffic admission.The result declares its producer and a versioned reconciled subject package once. IDs renew at the lifecycle boundary owned by each subject: optional host workload, process, Gateway serving lifecycle, config, plugin, node, or another resource. A generation revises the same object. Operators can therefore diff
(subjectRef, type)and distinguish a condition transition from replacement or revision.OpenClaw retains no history. Hosts and telemetry systems may store and diff the bounded result. This gives Docker, Kubernetes, OCC, and other operators enough attribution to explain a readiness transition without turning readiness into a resource store or control plane.
Operators select reusable criteria through
gateway.readiness. Registering a criterion never selects it. Plugin providers are namespaced, enumerable, observational, advisory by default, and receive a subject collector. Core owns deadlines, cancellation, coalescing, caching, output bounds, redaction, reconciliation, deterministic ordering, and fail-closed projection.This PR includes the normative
Readiness v1andReadiness Subjects v1sidecars. Its non-normative platform comparison maps the design to Kubernetes, Docker, systemd, ASP.NET Core, Spring Boot, and OpenTelemetry.Proposed Condition Catalog
GatewayStartupComplete,GatewayAcceptingWork,ChannelRuntimeReady,ConfigLoadedChannelRuntimeSuppressed,EventLoopHealthy,PluginsLoadedWorkspaceWritable,ConfigCurrent,ModelRouteReady,SecretsReadyContextEngineReady,ToolCatalogReady,McpRuntimeReady,SandboxReady,HarnessReadySessionStorageReady,StateReady,DeliveryRuntimeReady,SchedulerReadyplugin.<plugin-id>.<criterion-id>ReadinessEvaluationCompleteand remoteGatewayRespondingguard failures keep incomplete evaluation or an unreachable Gateway explicit. Merely implementing or registering a condition never selects it. Outside the universal baseline, onlygateway.readinessconfiguration or a separately accepted Hosting Profile changes what must pass.Compatibility Boundary
gateway.readinessor another accepted activation contract,/readyand/readyzuse the legacy checker.gateway.readiness, including{}, activates bounded canonical evaluation.Unknownconditions.CanonicalReadinessResult; it does not change readiness contract version 1./healthand/healthzremain shallow liveness./statuszis diagnostic and returns200after successful evaluation regardless of condition-health state.Implementation Stack
abbdfa0876f.a7e0df75ff2. It depends on PR 104018./statuszat exact head8cb054a8f47. It is stacked after PR 114636 to avoid reopening the rebased implementation/profile stack, but it has no runtime dependency on Hosting Profiles.The framework and owner PRs are profile-free and independently adoptable. Owner criteria observe existing snapshots. Readiness does not make model calls, acquire credentials, connect MCP servers, start sandboxes or harnesses, open databases, or start schedulers. Active filesystem checks and provider calls are bounded.
Operator Facilities
openclaw ready --watchwith bounded semantic transitions, recovery, and subject-lifetime replacement without changing one-shot behavior.openclaw ready criteria list|inspectwithout invoking providers.openclaw ready --wait [duration]as a bounded startup gate over the canonicalreadyRPC.Package Proof
Exact-head package-installed Docker proof passes over the profile and release-artifact stack. It exercises RFC 0018 readiness surfaces, stable repeated polls, fail-closed transitions, and host-stable/process-and-Gateway-renewing container restart semantics using an immutable no-push package/image artifact.
Maintainer Questions
/statuszthe right diagnostic projection while/healthzremains shallow?