RFC 0018: Readiness Conditions and Providers - #33
giodl73-repo wants to merge 102 commits into
Conversation
510b525 to
5d3b673
Compare
|
Codex review: blocked before merge. Reviewed September 9, 2026, 1:20 AM ET / 05:20 UTC (Revision 145). ClawSweeper reviewWhat this changesAdds an RFC and three supporting documents defining opt-in Gateway readiness conditions, plugin observations, runtime subject identity, and shared diagnostic output. Merge readiness⛔ Blocked before merge - 4 items remain The two prior specification findings are resolved. This remains a distinct, useful proposal absent from the default branch; acceptance of the readiness contract still requires the repository’s maintainer discussion and RFC approval process. Priority: P2 Review scores
Verification
How this fits togetherGateway readiness tells operators whether OpenClaw can accept work. The proposed evaluator combines selected runtime and plugin observations into one result for readiness probes, health/status output, and CLI consumers. flowchart TD
A[Operator selection] --> B[Readiness evaluator]
C[Core runtime observations] --> B
D[Activated plugin observations] --> B
B --> E[Bounded conditions and subject identity]
E --> F[Required conditions pass]
F --> G[Readiness probe response]
E --> H[Health status and CLI diagnostics]
Decision needed
Why: The specification issues are resolved, but choosing a permanent plugin/configuration contract and accepting the RFC requires maintainer intent under README’s lifecycle. Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Accept a bounded, explicitly activated readiness contract independently of hosting profiles, preserving legacy probes and assigning upgrade and recovery conformance to the implementation PRs. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a design proposal, and both previously reported specification defects are resolved in the current text. Is this the best way to solve the issue? Yes, the opt-in evaluator and shared projections form a coherent design that preserves existing defaults; final API and product acceptance remain maintainer choices. AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning medium; reviewed against 967d9aac7472. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (144 earlier review cycles; latest 8 shown)
|
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
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Refreshed onto current main at b09eed5 and resolved the two current specification findings. Permanent provider quarantine now has one bounded recovery boundary: it persists across config/plugin reload and clears only when the callback settles or the Gateway process restarts after operator repair, with an explicit conformance case. The health projection now refers to the declared ReadinessResult type. git diff --check passes. @clawsweeper re-review |
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?