RFC 0018: Readiness Conditions and Providers - #33
Conversation
510b525 to
5d3b673
Compare
|
Codex review: needs real behavior proof before merge. Reviewed August 15, 2026, 4:45 AM ET / 08:45 UTC. ClawSweeper reviewWhat this changesAdds RFC 0018 and three sidecar specifications for an opt-in, structured Gateway readiness contract with selectable conditions, plugin providers, subject identity, and shared endpoint and CLI projections. Merge readinessKeep open for maintainer product review: this RFC proposes new configuration, plugin-provider, endpoint, and CLI contracts, and its required maintainer-discussion record is not linked. Priority: P2 Review scores
Verification
How this fits togetherGateway readiness determines whether OpenClaw is ready to accept work. Runtime owners and activated plugins would contribute bounded observations, configuration would select requirements, and Gateway HTTP/status/CLI consumers would project one canonical result. flowchart LR
A[Runtime owners] --> C[Readiness conditions]
B[Activated plugins] --> C
D[Operator readiness configuration] --> E[Condition selection]
C --> F[Canonical readiness result]
E --> F
F --> G[Gateway ready endpoints]
F --> H[Health status and CLI]
Decision needed
Why: These are new public configuration and plugin API commitments; repository policy requires a maintainer-discussion record for a draft RFC, and the RFC cannot choose their long-term product direction on its own. Before merge
Findings
Agent review detailsSecurityNone. Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Record a maintainer discussion that decides the opt-in activation boundary, required-versus-advisory semantics, plugin extension contract, and diagnostic endpoint scope before merging the RFC. 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? No—the RFC needs a recorded maintainer decision before it can be the accepted solution for a new public readiness and plugin-extension 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 (129 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?