OpenWOP openwop.dev

Last updated: 2026-06-09. A live record of OpenWOP-compatible hosts — their advertised compatibility profiles and the conformance evidence behind each claim. A row is a claim plus evidence: the claim is the host's advertised profile; the evidence is the conformance result published with the host (or under conformance.md).

Hosts

HostUse caseRepo / PathCompatibility profile claimScale claimProduction profile claimConformance link
In-memory (reference example)Local development / fastest boot / no persistenceexamples/hosts/in-memory/openwop-core · openwop-stream-sse · openwop-stream-pollminimalNot claimedconformance.md
SQLite (reference example)Single-machine durability / process-restart-safeexamples/hosts/sqlite/openwop-core · openwop-stream-sse · openwop-stream-poll · openwop-audit-log-integrity · openwop-interrupt-quorum · openwop-interrupt-auth-required · openwop-interrupt-external-event · openwop-interrupt-cascade-cancel · openwop-auth-api-key-rotation · openwop-discovery-auth-scopedminimalNot claimedconformance.md
Python in-memory (reference example)Cross-language portability — Python 3.11 stdlib-only portexamples/hosts/python/openwop-core · openwop-stream-sse · openwop-stream-pollminimalNot claimedconformance.md
Postgres (reference example)Multi-process durability + first production-profile hostexamples/hosts/postgres/openwop-core · openwop-stream-poll · openwop-stream-sse · openwop-audit-log-integrity · openwop-interrupt-quorum · openwop-interrupt-auth-required · openwop-interrupt-external-event · openwop-interrupt-cascade-cancel · openwop-production · openwop-auth-oauth2-client-credentials · openwop-auth-oidc-user-bearer · openwop-auth-mtls · openwop-auth-api-key-rotation · openwop-discovery-auth-scoped (auth profiles conditional on env)minimalClaimed (since 2026-05-11)conformance-full.md
MyndHyve workflow-runtime (steward-affiliated sibling host — separate deployment, same maintainer org; not an independent-organization host, per the GOVERNANCE.md §"Acceptance evidence tiers" taxonomy this is tier-2 evidence)Production agent-platform deployment whose live advertisements drove the RFC 0078–0094 Active → Accepted graduationsClosed source; live discovery: https://api.myndhyve.ai/.well-known/openwopopenwop-core · openwop-interrupts · openwop-stream-sse · plus the operational-annex claims openwop-core-standard (RFC 0088) and openwop-agent-platform full (RFC 0085) in its live profiles[]Not publishedNot claimedPer-RFC graduation evidence in the Updated fields of RFCS/00780094 + the CHANGELOG.md 1.1.7/1.1.8 graduation entries (RFC 0093/0094: revision 00476-xuv, suite 1.22.0, 2026-06-11) (gated scenarios pass non-vacuously under OPENWOP_REQUIRE_BEHAVIOR=true; steward-curl-verified; the steward independently re-derived the profile predicates from the public discovery document); also drove the token-economy Active → Accepted graduations of RFC 0112 / 0113 / 0115 (2026-06-27, suite 1.43.0, tier-2 revs 00511-len / 00512-pej / 00510-jiv, steward-curl-verified) — RFC 0114 + 0116 honestly opted out (headless runtime emits no a2ui surface; durable path runs no provider prompt-caching)

Agent Platform profile (RFC 0085 — openwop-agent-platform)

The aggregate platform profile defined in spec/v1/agent-platform-profile.md (RFC 0085, Accepted 2026-06-01). A host populates the status column when it reaches partial/full. MyndHyve — the steward-affiliated sibling host whose graduation evidence accepted the RFC — derives full; no example reference host claims it yet (honest).

Hostopenwop-agent-platform statusNotes
MyndHyve workflow-runtimefullAdvertises the profile in its live profiles[]; the steward independently re-derived isAgentPlatformFull from the public discovery doc (all 16 §B terms) and the aggregate-evidence scenario passes non-vacuously at tier full — see RFC 0085's Updated field. Steward-affiliated sibling host (same maintainer org).
In-memorynoneAdvertises feedback + several floor constituents, not the full floor set.
SQLitenone
Pythonnone
Postgresnone (candidate)Already production-profile-satisfying and advertises memory / authorization / httpClient — the natural first partial/full candidate.

Connection packs (RFC 0095 — capabilities.connections.packsSupported)

The portable provider-definition pack kind defined in spec/v1/connection-packs.md (RFC 0095, Accepted 2026-06-12). A host populates the status column when it advertises connections.packsSupported: true and implements the §Manifest clause 6 resolution contract; verification is the two capability-gated behavioral scenarios (connection-provider-resolution + connection-pack-write-reconsent) run non-vacuously against the published suite.

Hostconnections.packsSupported statusNotes
openwop-app referencelive + strict-verified§B.6 loader-path resolution (openwop-app#178) + §10 test seams (#194) deployed rev 00160-kjq; connections.packsSupported advertised live (steward curl-verified on the direct run.app URL; seams correctly 404 in production). All five 1.23.0 scenarios pass NON-VACUOUSLY (OPENWOP_REQUIRE_BEHAVIOR=true) against a seam-enabled instance at the deployed code.
MyndHyve workflow-runtimelive + strict-verified§B.6 publish-path resolution (myndhyve#167/#168) + §10 seams (#169) serving on api.myndhyve.ai (revision workflow-runtime-00268-x9l); connections.packsSupported advertised live (steward curl-verified). All five 1.23.0 scenarios pass NON-VACUOUSLY (OPENWOP_REQUIRE_BEHAVIOR=true) over the live seams — the RFC 0095 Active → Accepted non-steward evidence.
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Multi-party group conversation (RFC 0101 — capabilities.multiPartyConversation)

The shared-transcript / speaker-attribution surface defined in RFC 0101 (Accepted 2026-06-22). A host populates the status column when it advertises multiPartyConversation.supported: true, emits the optional participants: AgentRef[] on conversation.opened, stamps speakerId on role:'agent' turns, and rejects a turn from a non-participant. The always-on leg of multi-party-conversation-shape.test.ts verifies the schema shapes server-free; the capability-gated behavioral leg (isMultiPartyConversationSupported()) verifies live roster + attribution + non-participant rejection against an advertising host.

HostmultiPartyConversation statusNotes
openwop-app referenceadvertised live — steward-curl-verified (rev 00291-l8v)First advertising host (Board of Advisors councils, ADR 0040 Phase 6). multiPartyConversation { supported:true, maxParticipants:8 } advertised on the live discovery doc — steward-curl-verified 2026-06-22 on the deployed Cloud Run revision openwop-app-backend-00291-l8v (curl https://app.openwop.dev/api/.well-known/openwopsupported:true, maxParticipants:8). Host emits the participants roster on conversation.opened, stamps the advisor-instance speakerId on every agent turn, and rejects a non-participant turn (422) — host-side enforcement covered by multi-party-conversation.test.ts (openwop-app#666); the always-on conformance shape leg passes. Remaining for full strict-verified: a non-vacuous behavioral conformance scenario — deferred at the suite level (a multi-party council is not a standard-wire-triggerable flow, so it can't be driven host-agnostically yet; the same Active → Accepted staging RFC 0086 used for its behavioral leg).
MyndHyve workflow-runtimenone
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Localized content surface (RFC 0103 — capabilities.content.supported)

The capability-gated authored-content surface defined in spec/v1/localized-content.md (RFC 0103, Accepted 2026-06-17). A host populates the status column when it advertises content.supported: true (requires i18n.supported) and serves GET /v1/content/pages/{slug} with the §C resolveSection merge; the always-on legs of localized-content-delivery.test.ts verify the schemas + merge + capability coherence server-free, and the gated legs verify live delivery + tenant isolation.

Hostcontent.supported statusNotes
openwop-app referencelive + non-vacuousHOST-1 i18n.md annex (Accept-Language/Content-Language/capabilities.i18n) + HOST-2 content surface (content/resolve.ts resolveSection, /v1/content/*, SQLite/Postgres-backed, §F tenant-scoped); content { baseLocale:'en', supportedLocales:['es','pt-BR','fr'] } advertised on prod rev 00234-mg8 (app.openwop.dev, steward-curl-verified; main 999bfd0f, PR #412 / ADR 0064). Ran localized-content-delivery 18/18 NON-VACUOUSLY (incl. the live §A-coherence leg) — the second non-steward witness, closing the RFC 0103 content dual-witness bar.
MyndHyve workflow-runtimelive + non-vacuousLayer 1 (annex) + Layer 2 (content/resolveSection.ts + /v1/content/* over the Firestore CMS, credential-derived tenant per §F); content { baseLocale:'en', supportedLocales:['es','pt-BR','fr'] } advertised at doc root on prod rev 00273-6rf (api.myndhyve.ai, steward-curl-verified). Ran localized-content-delivery 18/18 NON-VACUOUSLY (incl. the live §A-coherence leg) + i18n-negotiation 4/4 — the Active → Accepted non-steward witness leg.
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Multi-turn conversation primitive (RFC 0005 — capabilities.conversationPrimitive)

The multi-turn conversation suspend variant defined in RFC 0005 (Accepted 2026-05-11), wiring the core.conversationGate typeId + the conversation.start / conversation.exchange / conversation.close suspend variants (normative surface in spec/v1/interrupt.md + spec/v1/capabilities.md). A host populates the status column when it advertises conversationPrimitive: true and takes the conversation path over the clarification.requested fallback; verification is the capability-gated conversationLifecycle / conversationReplayDeterminism / conversationVsLegacySuspend scenarios run non-vacuously, with conversationCapabilityNegotiation covering the negative refusal contract on hosts that do not advertise.

HostconversationPrimitive statusNotes
openwop-app referencelive + non-vacuousADR 0067 Phase-6 cutover: chat suspends ONLY via core.conversationGate (the per-turn fallback is retired). conversationPrimitive: true + the conversation.start/conversation.exchange/conversation.close interrupt kinds advertised at the discovery root on prod rev openwop-app-backend-00265-wtx (steward-curl-verified on the direct run.app URL; discovery-doc SHA-256 d098c9c4…c89f4c114). Ran the three positive scenarios — conversationLifecycle, conversationReplayDeterminism (incl. the §G replay/:fork byte-equal leg), conversationVsLegacySuspend — 3/3 NON-VACUOUSLY (OPENWOP_REQUIRE_BEHAVIOR=true) against suite 1.29.0 at the deployed code, 2026-06-21. conversationCapabilityNegotiation is correctly inapplicable here — it is the inverted gate, running only when the primitive is unadvertised.
MyndHyve workflow-runtimelive + non-vacuousconversationPrimitive: true advertised at the discovery root (+ a capabilities mirror) on prod rev workflow-runtime-00281-j8f (counter-reset by an unrelated stale-YAML rollback recovered same-day; serving code is current main) — api.myndhyve.ai, steward-curl-verified, discovery-doc SHA-256 d7d7ed32…18cd528. Ran the three positive scenarios — conversationLifecycle, conversationReplayDeterminism (the :fork returned 201, so the §G byte-equal leg ran), conversationVsLegacySuspend — 3/3 NON-VACUOUSLY (OPENWOP_REQUIRE_BEHAVIOR=true, serial) against suite 1.29.0, 2026-06-21; conversationCapabilityNegotiation correctly skipped (inverted gate). The conversation. suspend variants are proven on the wire by conversationVsLegacySuspend (emits conversation., zero clarification.*), not discovery-enumerated — MyndHyve ships no interrupts.kinds array. The second non-steward witness, closing the RFC 0005 dual-witness bar.
In-memorynone
SQLitenoneWires only the negative refusal contract (GATED_TYPEID_MAPcore.conversationGate refused when referenced); deliberately does not advertise the primitive.
PythonnoneDoes not claim conversationPrimitive; the refusal contract is unwired (conformance.md).
Postgresnone

Self-hosted / OpenAI-compatible provider class (RFC 0108 — aiProviders.selfHosted[])

The operator-/tenant-configured OpenAI-compatible endpoint class defined in spec/v1/capabilities.md §aiProviders.selfHosted (RFC 0108, Active 2026-06-24). A host populates the status column when it advertises aiProviders.selfHosted: string[] (a subset of supported[]) for a configured, reachable endpoint — honestly (§A.2, under OPENWOP_REQUIRE_BEHAVIOR), with an opaque non-URL id (§A.3), keeping the endpoint location off every wire surface (self-hosted-endpoint-no-disclosure). The always-on aiproviders-selfhosted-shape.test.ts verifies the §A field shape + the §A.1 subset / §A.3 no-URL rules server-free; the gated aiproviders-selfhosted-honesty.test.ts (lands at Active → Accepted) verifies a real dispatch against a selfHosted id with no endpoint-URL leak.

HostaiProviders.selfHosted statusNotes
openwop-app referenceharness-witnessed (non-vacuous)ADR 0121 (PR #725 merged): compat dispatch case + per-connection base-URL Connection (ADR 0024) + modelCapabilityProbe (§B). Advertises aiProviders { supported:[…,"compat"], selfHosted:["compat"] } and passes aiproviders-selfhosted-shape + aiproviders-selfhosted-honesty non-vacuously under OPENWOP_REQUIRE_BEHAVIOR=true vs conformance 1.37.0 — the honesty leg dispatches against compat, reaches a real loopback OpenAI-compatible endpoint (HTTP 200, not capability_not_provided → §A.2 honest), the id is non-URL (§A.3), and the endpoint location leaks into no response/error payload (§D). Witness = the host's conformance harness (conformance/run.ts stands up the real mock + sets OPENWOP_TEST_COMPAT_ENDPOINT), production-dark (OPENWOP_COMPAT_PROVIDER_ENABLED unset ⇒ selfHosted:[]) — the appropriate evidence tier for an operator-private surface §D says MUST NOT be publicly exposed (mirrors the RFC 0035 harness-graduation precedent; no deployed public discovery doc by design). Steward-verified by code-inspecting the honesty-gated emission + the real-mock setup. The RFC 0108 Active → Accepted single-witness close under the bootstrap steward waiver (2026-06-24).
MyndHyve workflow-runtimenone
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Parallel sub-workflow fan-out and join (RFC 0118 — capabilities.dispatch.fanOutSupported)

RFC 0118 graduated Active → Accepted on 2026-06-28. Both legs are now dual-witness and steward-verified (2026-06-28): the discovery/advertisement leg by /.well-known/openwop curl of each host, and the behavioral leg by a direct steward probe of each host's seam-enabled POST /v1/host/sample/dispatch/fanout returning a real, non-vacuous coordinator+fold. (At the original flip the behavioral leg was single-witness host-self-reported with a steward cross-check deferred; the deferred cross-check was subsequently run once both hosts stood up auth-exempt conf-fanout seam revisions — see the rows below. The full @openwop/openwop-conformance harness against openwop-app's tag URL tripped that host's per-IP 429 read budget during its multi-file discovery burst and soft-skipped the gated legs, so the direct seam probe is the steward behavioral artifact, alongside each host's own harness runs.) Per GOVERNANCE.md §"Acceptance evidence tiers" this remains a tier-2 (steward-affiliated sibling) + reference-host graduation — not independent-organization dual-witness.

HostStatusEvidence
openwop-app referencediscovery + behavioral both live + non-vacuous (steward-verified)Discovery: prod app.openwop.dev/api advertises dispatch { supported:true, fanOutSupported:true, fanOutPolicies:["sequential","reject","parallel"], joinModes:["wait-all"], onChildFailureModes:["collect","absorb"], maxFanOut:16 }steward-curl-verified 2026-06-28 (HTTP 200). Honest narrower advertisement: joinModes is ["wait-all"]-only and fail-fast is omitted from onChildFailureModes because the host cannot cancel in-flight siblings honestly (host/dispatchFanOut.ts, ENG-9). Behavioral: the /v1/host/sample/dispatch/fanout seam stays dark in prod by posture (OPENWOP_TEST_SEAM_ENABLED off, RFC 0117 parity), but the host stood up an auth-exempt seam-enabled tag revision 00355-zag (--no-traffic --tag conf-fanout, same image as prod 00348-mzh, code main@c2abc784 / #997). Steward direct probe 2026-06-28 (wait-all/collect ×3) → { joinOutcome:"satisfied", children:[3×completed], mergeOrder:[3], completedCount:3, failedCount:0, cancelledCount:0 } — real coordinator+fold, non-vacuous (no auth header). The always-on dispatch-fanout-parallel schema legs also pass server-free.
MyndHyve workflow-runtimediscovery + behavioral both live + non-vacuous (steward-verified)Tier-2 steward-affiliated sibling. Seam-enabled conformance revision 00513-qib (--no-traffic --tag conf-fanout from main@66fc108e with OPENWOP_CONFORMANCE_FIXTURES=1; prod traffic untouched on 00508-qis). Discovery: GET /.well-known/openwop advertises the full dispatch { fanOutSupported:true, fanOutPolicies:["sequential","reject","parallel"], joinModes:["wait-all","quorum","first","race"], onChildFailureModes:["collect","fail-fast","absorb"], maxFanOut:16 }steward-curl-verified 2026-06-28 (HTTP 200). Behavioral: steward direct probe 2026-06-28 of the auth-exempt seam (wait-all/collect ×3) → { joinOutcome:"satisfied", children:[3×completed], mergeOrder:[3], completedCount:3, failedCount:0, cancelledCount:0 } — non-vacuous; corroborated by the host's own @openwop/openwop-conformance@1.45.0 … --filter dispatch-fanoutdispatch-fanout-parallel.test.ts 10/10 exit 0 (OPENWOP_REQUIRE_BEHAVIOR=true).
In-memorynone
SQLitenone
Pythonnone
Postgresnone

The joinModes / onChildFailureModes divergence between the two witnesses (["wait-all"] + ["collect","absorb"] vs the full four-mode + three-mode sets) is the intended, discoverable outcome of the capability gating — a portable workflow pinning joinPolicy.mode:'quorum' or onChildFailure:'fail-fast' registers on MyndHyve and is honestly rejected at registration on openwop-app, and the author can see exactly that from each host's /.well-known/openwop at edit time (the gap RFC 0118's joinModes + openwop#789's onChildFailureModes descriptors close).

Subscription-reuse provider auth mode (RFC 0121 — aiProviders.authModes: "subscription")

The subscription auth mode defined in spec/v1/capabilities.md §aiProviders.authModes (RFC 0121, Active 2026-07-01; conformance 1.47.0). A host advertises subscription when it accepts a credential derived from reusing the caller's personal consumer subscription (Claude Pro/Max, ChatGPT Plus) — the mode is a BYOK path (§B.7, MUST be in byok), its credential MUST bind at host.credentials scope:"user" and MUST reject a tenant/workspace binding with credential_scope_forbidden (§B.8, the protocol-tier subscription-credential-user-scope-only invariant), and it MUST be advertised only when a real acquisition mechanism is configured (§B.9, truthful-advertisement). The always-on aiproviders-subscription-scope.test.ts verifies the enum shape server-free; the §B.7 leg is advertisement-gated; the §B.8 leg is bind-seam-gated (POST /v1/host/sample/credentials/bind, soft-skip on 404) so the user-scope safety rail is witnessable without a live subscription advertisement.

Partial graduation (2026-07-01): scope-safety rail only; 0121 stays Active. UQ1 (does any provider's consumer ToS permit third-party API-shaped reuse?) is UNRESOLVED — no citation exists; the steward issued an at-own-risk waiver (RFC 0121 Status history) of the acquisition-bearing gate. No host advertises subscription on a live discovery doc — the reference host is the scope-safety / reference-impl witness, not a full-advertisement witness. A full Active → Accepted graduation remains open, pending a deploy-model-compatible + UQ1-cleared advertising host (candidate: MyndHyve tier-2, per steward direction).

HostaiProviders.authModes: subscription statusNotes
openwop-app reference§B.8 request-scope REJECTION rail steward-curl-verified on the wire; storage-resolvability half host-test-covered (openwop-app#1444); advertisement dark by designScope of the wire witness (precise): §B.8 has TWO clauses — (a) a subscription credential MUST bind at scope:"user", and (b) it MUST NOT be resolvable at tenant/workspace scope (a STORAGE property, not just the request field). The steward-curl-verified legs prove clause (a)'s request-scope rejection only. The bind seam is served under /api/** (POST /v1/host/openwop-app/credentials/bind, + /v1/host/sample/ alias; assertSubscriptionScopeAllowed in byok/subscriptionCredentialScope.ts, called unconditionally before any consent/acquisition). Steward-curl-verified 2026-07-07 on app.openwop.dev/api (unauthed): {provider,mode:"subscription",scope:"tenant"}403 credential_scope_forbidden; scope:"workspace"403 same; scope:"user"200 {bound:true,scope:"user"}; mode:"api_key"400 (seam binds subscription only, so the 403s aren't a blanket tenant block). Clause (b) — storage-resolvability — is black-box-invisible on the wire and was host-buggy until openwop-app#1444: the accepted scope:"user" credential was written at req.tenantId = the active* workspace (may be a shared ws: tenant, ADR 0015), so a user acting inside a shared workspace passed the request-scope rail yet had their personal token stored at a workspace-shared row → resolvable at workspace scope. Fixed in #1444 (store at the caller's own user:-scoped personal tenant personalTenantOf + fail-closed assertSubscriptionStorageTenant; host-test-covered: user:→ok, ws:→403, anon/default/undefined→403). Clause (b) is inherently host-test territory — see docs/KNOWN-LIMITS.md §"Behavior tests too coarse". Host unit tests subscriptionCredentialScope.test.ts (#1439) + the #1444 storage-tenant test + the pinned conformance aiproviders-subscription-scope.test.ts §B.8 request-scope leg. Discovery dark by default (no subscription authMode emitted — §B.9), acquisition mechanism-only (drift-guard test asserts no login code). Evidence tier = steward wire witness of the §B.8 request-scope rejection rail (advert UQ1-gated + dark; storage half host-test-covered).
MyndHyve workflow-runtimenoneCandidate full-advertisement witness (tier-2) if/when an at-own-risk advertising path is stood up; not yet advertised.
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Anonymous-actor authorization (RFC 0132 — capabilities.anonymousActor)

The anonymous-actor model defined in spec/v1/capabilities.md §anonymousActor + spec/v1/auth.md §"Anonymous actors" (RFC 0132, Active 2026-07-22). A host advertises anonymousActor { supported:true, tiers, writeEgressControls?, failClosed:true } when it honors authorization for a caller on a public agent surface who authenticated no identity: an opaque, origin-bound, ephemeral, non-cross-linkable, non-PII principal (owner.principalKind:"anonymous") whose authority is a default-deny, explicit per-surface tool grant — never a role, never the ADR 0315-style default-on tool baseline. The read tier is tenant-scoped with no egress and no secret/BYOK reach; the bounded-write-egress tier is permitted only behind a mandatory HITL/approval (RFC 0051) or rate-limit + per-session cap, over the RFC 0076/0079 SSRF-guarded, audience-bound egress path. Every anon tool call audits via the existing RFC 0049 authorization.decided event (no new event type). The always-on anonymous-actor-shape.test.ts verifies the advert shape + the §B.2 conditional + owner.principalKind + the audit reuse server-free; the five gated behavioral scenarios (anonymous-actor-default-deny, -no-secret-reach, -egress-guarded, -write-gated, -audit-opaque) drive the POST /v1/host/sample/anon-surface/dispatch + GET /v1/host/sample/anon-surface/tools seam and soft-skip until a host wires a tool-enabled public surface.

Graduated Active → Accepted 2026-07-22 on the openwop-app tier-1 reference witness. The five SECURITY invariants landed at reference-impl tier at Active and GRADUATED to protocol tier at Active → Accepted once openwop-app wired the surface and passed all five behavioral scenarios non-vacuously under OPENWOP_REQUIRE_BEHAVIOR=true (RFC 0079 egress-credential-audience-bound precedent). The host ships the surface gated behind OPENWOP_ANON_ACTOR_ENABLED (default OFF) — honest-off, not advertised on the live production discovery doc until an operator opts in.

Hostcapabilities.anonymousActor statusEvidence
openwop-app referencediscovery + behavioral non-vacuous (tier-1 reference witness; gated OFF by default)PR openwop-app#2403 merged, rev 03d06d1f2. host/anonymousActor.ts mints the opaque origin-bound anon principal + owner.principalKind:"anonymous", resolves a default-deny per-surface grant (never the ADR 0315 baseline; the anon run carries actingUserId:undefined so deliverable/secret tools fail closed by construction), gates write/egress via an RFC 0051 HITL interrupt over the RFC 0079 SSRF-guarded egress path, and emits opaque authorization.decided. Steward-verified 2026-07-22: booted the host in-memory with OPENWOP_ANON_ACTOR_ENABLED=true, /.well-known/openwopanonymousActor {supported:true, tiers:["read","bounded-write-egress"], writeEgressControls:["hitl"], failClosed:true}, the /v1/host/sample/anon-surface/{tools,dispatch} seam served 200, and @openwop/openwop-conformance@1.55.1 anon-actor scenarios passed 10/10 non-vacuously under OPENWOP_REQUIRE_BEHAVIOR=true (default-deny anon-not-granted; planted BYOK canary never surfaced; cross-tenant attempt neutralized to the surface tenant; out-of-audience egress anon-egress-denied + credentialAttached:false; hitl write → approval interrupt before the durable write; uncontrolled surface → anon-write-ungated; opaque anon principal + no PII in the audit record). Host npm run ci green (2099 tests). Discovery dark by default (OPENWOP_ANON_ACTOR_ENABLED unset ⇒ block omitted + seam 404).
MyndHyve workflow-runtimenoneCandidate tier-2 second witness; not yet advertised (single tier-1 witness sufficed to graduate, per the RFC 0129 precedent).
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Self-hosted runner (RFC 0122 — capabilities.selfHostedRunner)

The runner↔host channel defined in spec/v1/self-hosted-runner.md (RFC 0122, Accepted 2026-07-02; conformance 1.48.0). A host advertises selfHostedRunner { supported:true, dispatchKinds? } when it routes a run's per-step model/tool dispatch to a user-controlled runner that dials OUT (SSE receive + POST result, no inbound exposure) and holds local credentials the host cannot reach. The host stays the sole orchestration/persistence/replay authority; dispatch is per-step ({runId, stepId, seq, kind, provider?/model?/tool?, inputs}), results persist as normal step records (replay never re-dispatches), subject-first match rejects a cross-subject dispatch with a retriable runner_unavailable, and a redelivered {runId, stepId} is dropped at-most-once (deduped:true). The always-on self-hosted-runner.test.ts schema legs verify the frame/registration/capability shape server-free (the closed frames are the runner-credential-non-transit rail); the gated behavioral legs drive the POST /v1/host/sample/runner/{register,dispatch} seam (host-sample-test-seams.md §19) to assert subject-first runner_unavailable+retriable and at-most-once dedup non-vacuously. The runner_unavailable numeric HTTP status is host-chosen (any >= 400) — the witness asserts the envelope { error: { code, retriable:true } }, not a fixed status (mirrors run_forbidden / capability_required; registered in rest-endpoints.md §"Common error codes" per #815).

Graduated on dual-witness evidence vs suite 1.48.0 — per GOVERNANCE.md §"Acceptance evidence tiers" a tier-1 reference (openwop-app) + tier-2 (MyndHyve steward-affiliated sibling) graduation, not independent-organization dual-witness. Both invariants (runner-credential-non-transit, runner-output-untrusted-transport) are protocol-tier.

HostselfHostedRunner statusEvidence
openwop-app referencediscovery + behavioral live + non-vacuous (live-deployed, steward-verified)PR openwop-app#1066 merged; live in prod app.openwop.dev, Cloud Run rev openwop-app-backend-00363-gtg @ 100% — steward-curl-verified 2026-07-02 (/.well-known/openwopselfHostedRunner {supported:false, dispatchKinds:["model"]} honest-off; POST /v1/host/sample/runner/register → HTTP 400 route-live, not 404). (CI red = GitHub-Actions billing outage, 0-step fails; local npm run ci 3889 green authoritative per CLAUDE.md; admin-override merge.) host/selfHostedRunner.ts per-subject registry + subject-first match (no cross-subject fallback) + at-most-once {runId, stepId} dedup on a real DurableCollection; §19 seam via routes/runnerSeam.ts. Published @openwop/openwop-conformance@1.48.0 self-hosted-runner.test.ts 7/7 under OPENWOP_REQUIRE_BEHAVIOR=true — tier-3 seam RUNS (register → 200, not 404 soft-skip), subject-first runner_unavailable (409 + retriable:true), deduped:true on redelivered {runId, stepId} from persisted result; hard-assertion route test (no soft-skip escape). Both invariants honored (closed frames — token stays on runner; output fenced <UNTRUSTED>). Model-dispatch arm (ADR 0182 Phase 5); SSE outbound-dial deferred; no vendor-CLI spawn in backend/src.
MyndHyve workflow-runtimediscovery + behavioral live + non-vacuous (live-deployed, steward-verified)Tier-2 steward-affiliated sibling. PR myndhyve#192. Live-deployed witness rev workflow-runtime-00516-yuz (tag rfc0122, 0% traffic — prod serving untouched, RFC 0115 pattern) — steward-curl-verified 2026-07-02 (/.well-known/openwopselfHostedRunner {supported:false, dispatchKinds:["model","tool"]} honest-off; register → route live, not 404). host/selfHostedRunner.ts SSOT: subject-first match keyed on the RFC 0048 Principal (subject-before-capability, no cross-subject fallback) + at-most-once {runId, stepId} dedup on a real persisted store (run_claims-pattern) + a loopback runner that really answers (non-vacuous dedup). Published @openwop/openwop-conformance@1.48.0 --filter self-hosted-runner 16/0 under OPENWOP_REQUIRE_BEHAVIOR=true (OPENWOP_OPTED_OUT_PROFILES=openwop-self-hosted-runner; tier-3 seam RUNS register → 200). Non-vacuity re-proven live via curl (fresh ids): subject-first → 503 {error:{code:"runner_unavailable",retriable:true}} no cross-subject fallback; deduped:falsededuped:true; result fenced <UNTRUSTED>…</UNTRUSTED> + contentTrust:"untrusted"; closed frames, no credential field.
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Data-parallel dispatch per-item input (RFC 0126 — capabilities.dispatch.perItemInput)

RFC 0126 graduated Active → Accepted on 2026-07-04 on a single-witness bootstrap steward waiver (0120/0121/0125 precedent); it is now dual-witness live (2026-07-05) — openwop-app (tier-1) + MyndHyve workflow-runtime (tier-2 steward-affiliated sibling), both advertising dispatch.perItemInput: true on live-deployed hosts, steward-curl-verified. The nextWorkerInputs[] array on NextWorkerDecision (orchestrator-decision.schema.json) lets a next-worker decision fan ONE childWorkflowId over N runtime items with distinct per-item inputs, projected over the RFC 0022 inputMapping (per-item wins on collision). A host advertises capabilities.dispatch.perItemInput: true (a prose descriptor in capabilities.md §dispatch, alongside the prose-only RFC 0118 dispatch.* family) when it honors per-index projection, the length-equality + fail-closed runtime validation_error gates, and the replay-freeze re-read of the recorded runOrchestrator.decided decision. The always-on dispatch-per-item-input.test.ts schema legs verify the nextWorkerInputs shape + the additionalProperties:false fail-closed rail server-free; the capability-gated behavioral legs (projection, merge-precedence, length-mismatch, replay-freeze, fail-closed) drive the POST /v1/host/sample/dispatch/per-item seam and soft-skip until a host wires it.

HostStatusEvidence
openwop-app referencediscovery + behavioral live + non-vacuous (live-deployed, steward-verified)Witness #1, live. PR #1278: subWorkflowDispatcher.perItemInputs projected over the RFC 0022 mapping (per-item override); decision.nextWorkerInputs[idx] projected into each child on both the parallel fan-out and sequential-loop arms; the fail-closed gate (non-advertising host + length-mismatch each ⇒ validation_error, 0 children); replay-safe re-read of the recorded decision (CP-2). Witness dispatch-per-item-input-executor.test.ts 5/5 on a real core.dispatch node + real dispatcher; 64 existing dispatch/scheduler tests still green. PR #1283 flipped dispatch.perItemInput honest-ON + shipped the installable campaign-journeys.segment-winback chain (workflow-chain-segment-winback-execution.test.ts — a live 3-contact segment → 3 children each with its own contactId, ADR 0255). Corroborating consumer witness: #1279 (segment-winback supervisor node → real core.dispatch e2e). Discovery: app.openwop.dev/api/.well-known/openwopdispatch.perItemInput: truesteward-curl-verified 2026-07-05.
MyndHyve workflow-runtimediscovery + behavioral live + non-vacuous (live-deployed, steward-verified)RFC 0126 dual-witness #2 — tier-2 steward-affiliated sibling (per the RFC 0122 precedent), a genuinely different code base from openwop-app. PR #194 (789480099) mirrors #1278 in dispatch.node.ts: decision.nextWorkerInputs[idx] projected over inputMapping/perWorkerInputMappings (per-item wins) on both the parallel + sequential arms, threaded on the TRUE dispatch index (duplicate nextWorkerIds safe); fail-closed rail (unadvertised + length-mismatch ⇒ validation_error, 0 children); replay-freeze on the recorded runOrchestrator.decided decision (CP-2, by construction — same anchor as nextWorkerIds); one-source honest-off→on gate (OPENWOP_DISPATCH_PER_ITEM_INPUT). Witness dispatch.node.test.ts 56/56 (the 5 + a parallel-arm duplicate-worker leg); root+engine tsc clean; engine core+protocol 960/960; no engine/event-version bump. Discovery: workflow-runtime-…run.app/.well-known/openwopdispatch.perItemInput: truesteward-curl-verified 2026-07-05, serving rev workflow-runtime-00294-hcp (deployed under the Firestore deploy-lock + read-before-promote ritual). The published-suite POST /v1/host/sample/dispatch/per-item server-free seam (optional G5) is not wired here, so the published behavioral legs soft-skip against this host — a logged follow-up; the executor witness is the 56/56 unit suite + the live advertisement.
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Portable per-run parameter deferral (RFC 0124 — capabilities.workflowChainPacks.deferredParameters)

RFC 0124 graduated Active → Accepted on 2026-07-04 on a single-witness bootstrap steward waiver (0120/0121/0125/0126 precedent; the dual-witness path is a tracked follow-up per gap G6 — MyndHyve workflow-runtime and the in-memory host both lack a chain-expansion / PromptTemplate-compose path). Deferred mode materializes a workflow-chain pack's parameters into top-level variables[] and rewrites {{params.}} into spec'd runtime bindings (PromptTemplate {{varName}} source:"variable", or a variable-sourced PortValue), keeping parameters overridable per run via configurable while the persisted definition holds ZERO {{params.}} tokens. A host advertises workflowChainPacks.deferredParameters.supported: true when it implements this AND the §Security handling for x-openwop-sensitive params (materialize source:"secret", prompt-body-only, fail-closed sensitive_param_not_deferrable 422 elsewhere, per-run supply = credentialRef not plaintext). The always-on workflow-chain-deferred-parameters.test.ts legs verify deferred expansion + the §Security fail-closed/no-plaintext MUSTs server-free against the reference expandChainDeferred; the capability-gated host legs drive the POST /v1/host/sample/chain/deferred-expand seam (override / :fork replay / untrusted-fence / [REDACTED] compose) and soft-skip until a host wires it.

HostStatusEvidence
openwop-app referencediscovery + behavioral live + non-vacuous (live-deployed, steward-verified)RFC 0124 witness #1, live end-to-end. Host stack #1245 (Path A) → #1252/#1262/#1265/#1270 (increments) → #1273 (durability: re-register metadata.mintedPromptTemplates at run-start) → #1281 (source:"secret" §Security) → #1289 (9361e646) advertise + pin @openwop/openwop-conformance@^1.51.0. Discovery: app.openwop.dev/api/.well-known/openwop advertises workflowChainPacks { supported: true, deferredParameters: { supported: true } }steward-curl-verified 2026-07-05, Cloud Run rev openwop-app-backend-00404-6mw @ 100%. Behavioral: deferred expansion materializes → bare-param configurable override rebinds the value → :fork replays the same value → a x-openwop-sensitive param materializes source:"secret" (BYOK, [REDACTED:<credentialRef>]) with the plaintext appearing nowhere (body, RunSnapshot, at-rest, observability, override request); whole-value / non-prompt / no-secrets positions fail closed sensitive_param_not_deferrable (422); a plaintext sensitive configurablevalidation_error. Green under OPENWOP_REQUIRE_BEHAVIOR=true — the published workflow-chain-* scenarios 56/0 against corpus b6ed2752 (#828); the always-on workflow-chain-deferred-parameters legs (materialization / fail-closed / credentialRef-string) + the host's own gated runpath vitest (workflow-chain-deferred-runpath.test.ts, plaintext-never-anywhere); backend discovery+chain 269/0. In-process harness witnesses (2026-07-05). The host now serves BOTH test-only seams (behind OPENWOP_TEST_SEAM_ENABLED, 404 in prod per the RFC 0117 posture, so prod discovery stays clean): /v1/host/sample/chain/deferred-expand (#1292) drives the workflow-chain-deferred-parameters gated legs non-vacuously (12/0) through the real deferred pipeline (materialize → bare-param override → :fork byte-stable replay → [REDACTED:<credentialRef>]), pinning the contentTrust:"untrusted" fence + plaintext-never-anywhere on the live compose fn; and /v1/host/sample/workflow-chain:expand (#1298) makes RFC 0013 host-expansion 6/6 (see the RFC 0013 host-expansion row). The former hostExpansionSeam opt-out is dropped — the flag is advertised only behind the seam gate. ADR 0250's plaintext-400 concern is now covered by the deferred-expand route test (#1292, chain-deferred-expand-seam.test.ts 3/3).
MyndHyve workflow-runtimeruled out (no chain-compose path)
In-memorynone
SQLitenone
Pythonnone
Postgresnone

Streaming & CDC trigger sources (RFC 0127 — triggerBridge.sources: "stream" | "change")

RFC 0127 graduated Active → Accepted on 2026-07-06 on a single-witness bootstrap steward waiver (tier-1 reference host). It additively extends the RFC 0083/0099 trigger source enum with stream (a Kafka/Kinesis/Pub-Sub broker message) and change (a warehouse/DB CDC row; op insert|update|delete REQUIRED in the ChangeEvent sub-object). Both reuse the RFC 0099 TriggerEvent envelope, SSRF posture, SR-1 content-free trigger.* events, and the RFC 0083 ≥24h dedup floor unchanged. A host advertises stream/change in triggerBridge.sources[] + ingestion.externalSources[] only when it operates a real broker/CDC consumer (RFC 0099 honesty rule). The always-on trigger-stream-cdc-sources.test.ts schema legs verify the envelope shape (op-required negative, exactly-one rule, vocabulary pins) server-free; the capability-gated behavioral legs drive the POST /v1/host/sample/trigger-bridge/{ingest,deliver} seams.

HostStatusEvidence
openwop-app referencebehavioral live + non-vacuous (live-deployed, steward-verified); advert honest-offWitness #1. PRs #1332 (ingest seam accepts stream/change on both /v1/host/openwop-app/… + /v1/host/sample/… paths; op REQUIRED; before/after CDC row images; dedup (topic,partition,offset)/(table,changelogId); SR-1 body never on the durable event) + a source-gate flag (OPENWOP_TRIGGER_STREAM_CDC_ENABLED). Cloud Run rev openwop-app-backend-00411-77q @ 100%. @openwop/openwop-conformance@1.53.1 trigger-stream-cdc-sources.test.ts non-vacuous for BOTH sources under OPENWOP_REQUIRE_BEHAVIOR=true. Steward-curl-verified 2026-07-06 on the *.run.app backend: stream + change ingest → 200 with schema-valid op/offset-carrying envelopes, body-canary absent from the durable delivery event; stream/change absent from advertised triggerBridge.sources[]/ingestion.externalSources[] (honest-off — no real broker/CDC consumer yet, gap G4).<br>Update 2026-07-06 (rev openwop-app-backend-00413-jcm) — G4 CLOSED, real consumer operating + steward-fired end-to-end. Advert FLIPPED ON: triggerBridge.sources[] + ingestion.externalSources[] now include stream/change (steward-curl-verified on /.well-known/openwop). Steward independently provisioned a real core.openwop.streams connection (conn:d0a76f77-…, source stream, BYOK HMAC) and fired the consumer boundary himself: valid signed push → 202 {accepted:true} → a REAL run (694cf46f-…, workflow openwop-app.agents.lead-routing) via trigger.delivery (ingestExternalEvent, NOT resolveAndResume); bad-signature → 401 no run (real HMAC, not the 404 of an unknown connection); a signature valid-for-a-stale-ts401 no run (real ±5min replay window); same-(topic,partition,offset) replay → 202 {deduped:true} no second run (effectively-once); exactly one run created across all legs. This is the "first host operating a real streaming/CDC consumer" — G4's second/real witness.
MyndHyve workflow-runtimeruled out (no broker/CDC consumer) — natural G4 second witness when one exists
In-memory / SQLite / Python / Postgresnone

Purpose-propagation permitted-use labels (RFC 0128 — capabilities.purposePropagation)

RFC 0128 graduated Active → Accepted on 2026-07-06 on a single-witness bootstrap steward waiver + maintainer call. Gap G4 (a real onward label-carrying egress, steward-witnessed) — CLOSED 2026-07-06: tier-1 openwop-app built the openwop-app.cdp.sync-to-openwop-host reference workflow (prepare-onward node → the sanctioned core.openwop.http.fetch node → a steward capture bin) and fired the four onward legs local-on-origin/main; the steward independently read the bin and verified ⊆received / never-widen (marketing dropped on the real send) / []-drop with an unlabelled positive control. openwop-app is now the first host with a real onward label-carrying OpenWOP-envelope egress. An OPTIONAL permittedPurposes: string[] label (opaque purpose categories; absent = unlabelled, [] = no onward use) rides the A2A metadata.openwop.permittedPurposes extension + the top-level TriggerEvent.permittedPurposes field; a host advertising purposePropagation {supported, propagatesOnward} MUST re-emit the label on onward OpenWOP-envelope hops (MAY narrow, MUST NOT widen), a derived output MUST NOT carry a purpose absent from any contributing labelled input, and []-labelled data MUST NOT be forwarded onward. Non-OpenWOP destinations are a field-mapping SHOULD (untestable); internal use is §4 declared-intent (not gated). The always-on schema legs verify the label + family shape; the seam-gated purpose-propagation.test.ts behavioral legs drive the POST /v1/host/sample/purpose-propagation/forward two-hop seam.

HostStatusEvidence
openwop-app referencediscovery + behavioral live + non-vacuous (live-deployed, steward-verified)Witness #1. PRs #1334 (the purposeLabels algebra + the /v1/host/sample/purpose-propagation/forward hop-B capture seam: forward→re-emit, merge→intersect, []→dropped/contagious, unlabelled→top element) + #1336 (advert behind OPENWOP_CDP_PURPOSE_PROPAGATION_ENABLED). Cloud Run rev openwop-app-backend-00411-77q advertises purposePropagation {supported:true, propagatesOnward:true}. @openwop/openwop-conformance@1.53.1 purpose-propagation.test.ts (seam-gated) — all four §3 legs non-vacuous under OPENWOP_REQUIRE_BEHAVIOR=true. Steward-curl-verified 2026-07-06 on the *.run.app backend: forward label ⊆ input; merge ⊆ intersection (marketing-email dropped when a contributing input lacked it); []-labelled blocked dropped while the unlabelled control twin forwarded (fail-closed positive control). G4 CLOSED 2026-07-06 (real onward egress, steward-witnessed): PR #1391 added the feature.destination-sync.nodes.prepare-onward node + reference workflow openwop-app.cdp.sync-to-openwop-host (prepare-onward → the sanctioned core.openwop.http.fetch node → the steward capture bin webhook.site/4c0267e7; feature never sends, SR-1 clean; ADR 0289), fired local-on-origin/main (run nonce mr9ovt8u). Steward independently read the bin (5 captures, L4-DROP absent): re-emit L1["billing","support"]==received; narrow L2["billing"]⊆received; never-widen L3["billing"] only, marketing dropped on the real send (the falsifiable core); []-drop L4-DROP no egress while unlabelled twin L4-TWIN arrived (fail-closed, not a timeout). First host with a real onward label-carrying OpenWOP-envelope egress.
MyndHyve workflow-runtimehonest opt-out (tier-2, gap G4) — architect-reviewed 2026-07-06 (repo @ 789480099): no genuine onward OpenWOP-envelope egress for the label (A2A ingress-only, no outbound client / no metadata field on task types; trigger delivery content-free in-run only). Declined to serve a fabricated-carrier seam (vacuous-witness trap). Natural tier-2 witness once it grows a real A2A-forward or connector-destination-sink boundary.
In-memory / SQLite / Python / Postgresnone

Front-end plugin packs (RFC 0117 + 0119 — capabilities.uiPlugins)

RFC 0117 (+ 0119 isolation mechanism-neutrality) graduated Active → Accepted on 2026-07-06 on a single-witness bootstrap steward waiver + maintainer autonomy grant. A host advertising uiPlugins {supported:true, isolation} loads SIGNED, SANDBOXED kind:"frontend-plugin" packs in an origin/execution-isolated boundary and talks to them over the closed ui-plugin/1 host-RPC allowlist. Four protocol-tier SECURITY invariants: frontend-plugin-isolation / -egress / -rpc-allowlist / -no-byok. Witness ruling: isolation + egress are serve/apply-control MUSTs — the host MUST apply a sandboxed cross-origin iframe (no allow-same-origin) and serve the plugin under a deny-egress CSP; those controls are falsifiable by the steward on the wire + the reference host's FE unit tests, while the browser's runtime enforcement of correctly-applied controls is a platform guarantee (the §4-parallel unobservable-runtime split). rpc-allowlist + no-byok are wire-observable and steward-curl-verified.

HostStatusEvidence
openwop-app referencediscovery + serve-controls live + non-vacuous (steward-verified)Witness #1. Host code merged openwop-app #1408 (400ef677, ADR 0300): FE iframe loader (PluginFrame, srcDoc sandbox="allow-scripts" no-same-origin + withPluginCsp deny-egress meta) + signed community.openwop.artifact-viewer kind:"frontend-plugin" pack + backend serve routes. Steward-curl-verified 2026-07-06 on app.openwop.dev/api: (1) /.well-known/openwop advertises uiPlugins {supported:true, isolation:"cross-origin-iframe", hostApi:[artifact.read,write,host.toast,navigate], maxEntryBytes:2097152}; (2) GET /ui-plugin/packsisolation:"cross-origin-iframe", signed pack served with closed hostApi:["artifact.read"]; (3) the entry endpoint serves the self-witnessing plugin (window.origin==='null' / exfil-fetch→CSP-block / artifact.writemethod_not_allowed); (4) POST /ui-plugin/rpc undeclared host.exec{ok:false, error:{code:"method_not_allowed"}} (frontend-plugin-rpc-allowlist); (5) stale artifact.write{artifact_conflict, currentVersion:"1"}, envelope carries no secret (frontend-plugin-no-byok). #1408 FE unit tests (green) assert PLUGIN_SANDBOX allow-scripts-without-allow-same-origin (frontend-plugin-isolation) + PLUGIN_CSP deny-egress + withPluginCsp injection (frontend-plugin-egress) + the allowlist bridge. Defense-in-depth: openwop-app's backend deny-egress CSP response header on the entry endpoint — initially a no-op (Firebase Hosting's global CSP overrode it on /api/), resolved 2026-07-06 (openwop-app#1414): a scoped firebase.json header rule now wins on the entry path. Steward-re-curl-verified** — the entry endpoint returns content-security-policy: default-src 'none'; … with NO connect-src, so a direct browser load of a plugin entry is deny-egress too. Real second layer end-to-end (in addition to the load-bearing frontend withPluginCsp srcDoc meta).
MyndHyve / In-memory / SQLite / Python / Postgresnone (tier-2 gap)Tier-2 witness = a second host, or a non-iframe isolation mechanism (wasm/process/…) proving 0119's mechanism-neutrality on the wire. Carried forward as the named gap.

Portable prompt-prefix cache (RFC 0116 — aiProviders.promptPrefixCache)

RFC 0116 graduated Active → Accepted on 2026-07-06 on a single-witness bootstrap steward waiver. A supporting host MAY route a stable, tenant-namespaced, secret-free cachePrefixId label to its provider's context cache; the outcome is cost-hint-only + replay-invariant (a hit/miss MUST NOT change the recorded envelope or inputTokens/outputTokens), witnessed by the cost-only provider.usage.cacheReadTokens/cacheWriteTokens. Protocol-tier invariant prompt-prefix-cache-cross-tenant-isolation mandates a (tenant, cachePrefixId) cache key.

HostStatusEvidence
openwop-app referencediscovery + behavioral live + non-vacuous (steward-verified)Witness #1. Advert aiProviders.promptPrefixCache {supported:true, providers:["anthropic"]} live on app.openwop.dev/api. Steward-curl-verified 2026-07-06 via POST /v1/host/openwop-app/aiProviders/prefix-cache-probe (prod OPENWOP_TEST_SEAM_ENABLED): tenant-A prefix probe-prefix-1{cacheWriteTokens:1000, cacheHit:false} (write); tenant-A same prefix → {cacheReadTokens:1000, cacheHit:true} (hit); tenant-B same prefix → {cacheReadTokens:0, cacheHit:false} (MISS) = prompt-prefix-cache-cross-tenant-isolation proven ((tenant, cachePrefixId) keying, no cross-tenant leak). Anthropic call mocked → RFC 0108 production-dark tier (key-isolation real, provider routing dark).
MyndHyve / In-memory / SQLite / Python / Postgresnone (tier-2 gap)Second host advertising promptPrefixCache — carried forward.

A2UI surface deltas (RFC 0114 — a2uiSurface.deltaTransport)

RFC 0114 graduated Active → Accepted on 2026-07-06 on a single-witness bootstrap steward waiver. A host MAY deliver RFC 6902 (JSON-Patch) delta frames over the run event stream to subscribers that negotiate ?a2uiDelta=1; the RECORDED envelope stays the FULL ui.a2ui-surface (replay-pinned, unchanged) and the consumer re-validates the post-patch surface against the closed A2UI catalog fail-closed.

HostStatusEvidence
openwop-app referencediscovery + behavioral live + non-vacuous (steward-verified)Witness #1. Advert a2uiSurface.deltaTransport:true live on app.openwop.dev/api; host code openwop-app#1416 (806fb747, host test a2uiSurfaceDelta.test.ts 5 passed). ① delta delivered + reconstructs: ?a2uiDelta=1 subscriber receives an RFC 6902 frame (op enum add/remove/replace, no test) that applyPatch-round-trips + re-validates (host test). ② recorded stays FULL (replay-pinned core): non-negotiating subscriber → {kind:'full'}, recorded event is the full envelope; steward-curl-verified 2026-07-06 valid emit → 201 {eventId, sequence:1, surfaceRef, catalogVersion:"0.9.1"}. ③ post-patch fail-closed: steward-curl-verified an out-of-catalog iframe422 a2ui_surface_invalid (#/anyOf closed catalog).
MyndHyve / In-memory / SQLite / Python / Postgresnone (tier-2 gap)Second host advertising deltaTransport — carried forward.

Connection-pack provider vendor grouping (RFC 0123 — provider.vendor)

RFC 0123 graduated Active → Accepted on 2026-07-06 on a single-witness bootstrap steward waiver — an OPTIONAL presentational vendor string on the RFC 0095 connection-pack provider object, so a host/registry groups pack-delivered connectors by commercial vendor. It gates no capability and carries no wire behavior, so the observable contract is the schema shape (accept string / accept-absent / reject non-string), witnessed by three conformance legs; the rendering MUSTs (SHOULD-group / MUST-fallback-to-displayName) are the 0128/0129 §4 unobservable-runtime class. Evidence UPGRADE 2026-07-07 (CARRIED-FORWARD → host-served real grouping): the flip was steward-only on the schema-shape witness, but a tier-1 host now serves pack-delivered vendor grouping on the wire — lifting the host row from "schema-shape witnessed" to "host-served real grouping witnessed." Tier-2 (a second host) is carried forward.

HostStatusEvidence
openwop-app referencehost-served real grouping (steward-verified)Host code openwop-app#1430 (d3b29559, ADR 0303: connectionPackLoader.toProviderManifest reads provider.vendor → groups via the ADR 0185 catalog); deployed rev openwop-app-backend-00428-9st. Steward-authored wire witness 2026-07-07 on app.openwop.dev/api (both seams live under OPENWOP_TEST_SEAM_ENABLED): ① accept+honor — steward's own POST …/connection-packs/install of community.steward-witness.conn with provider.vendor:"Steward-Witness-Co"{"installed":true}; ② served real groupingGET …/providers then surfaces the steward's connector stwtns1 with vendor:"Steward-Witness-Co" on the wire (self-authored value, not a pre-seed); ③ fail-closed on type — a valid-named pack with provider.vendor:123{"installed":false, errors:[{code:"validation_error", "… /provider/vendor must be string"}]} (rejection only on vendor).
MyndHyve / In-memory / SQLite / Python / Postgresnone (tier-2 gap)Second host serving pack-delivered provider.vendor grouping — carried forward.

Agent-manifest role + the Skill profile (RFC 0131 — AgentManifest.role)

RFC 0131 graduated Draft → Accepted on 2026-07-07 via the bootstrap single-maintainer comment-window waiver (steward architect-reviewed). It adds an additive OPTIONAL AgentManifest.role ("skill" | "assistant") plus a schema-encoded Skill profile (if role==="skill" then {required:["handoff"], memoryShape.{conversation,longTerm} !== true}). Enforcement is universal JSON-Schema validation at publish/install — it introduces **no capabilities.* advertisement and no host runtime behavior — so, unlike a capability-gated surface, there is no per-host interop variance to track: every conformant validator rejects a stateful/handoff-less skill manifest identically, and an absent role (or role:"assistant") is unconstrained on every host. The witness is therefore the always-on, server-free** agent-manifest-role-profile.test.ts (validate skill/assistant/no-role; reject the stateful skill, the handoff-less skill, and a bad enum value) — no host-witness table applies. SECURITY invariant agent-skill-profile-stateless. Reference host: openwop-app ADR 0312 (Phase-0 marketplace "Skill" label; Phase-2 worker-memory normalization).

Conformance pass rates

Measured against @openwop/openwop-conformance@1.22.0 (the published suite has since advanced to 1.46.0 — 1.23.0 added the +5 RFC 0095 connection-pack scenarios, 1.24.0 the RFC 0096/0097/0098 scenarios, 1.25.0 the RFC 0099/0100 scenarios, 1.26.0 the RFC 0102 A2UI scenarios, 1.27.0 the RFC 0103 localized-content scenario, 1.28.0 the RFC 0104 approver-routing scenario, and 1.29.0–1.46.0 a further sequence of capability-gated scenarios (1.29.0 RFC 0105 speech-synthesis through 1.46.0 RFC 0120 connection-pack apiHosts egress allow-list); all are capability-gated and soft-skip on these reference hosts (which advertise none of those surfaces), so applicable rates are unchanged, and the table below re-measures on the next suite cycle) — all five hosts measured 2026-06-11, then re-measured the same day after the gap-closure fixes landed (openwop-examples#7 + openwop-app#164): the morning run's findings — the RFC 0093 §A3 webhook-tenant-isolation registration-gate gap on SQLite/Postgres/Python, the Python RFC 0058 runTimeoutMs gap, and the workflow-engine's 12 long-carried pre-existing failures — were all root-cause fixed and verified. Current posture: zero deterministic failures on the workflow-engine, Postgres, SQLite, and Python hosts; the in-memory host's 45 failures remain its documented honest-non-claim set (advertised-fixture surfaces the minimal host doesn't implement). Modes: in-memory/python/postgres default (Postgres via pglite), SQLite strict with honest profile/fixture opt-outs, workflow-engine in-process serial. Suite total 1963. Measurement basis: full 82-fixture catalog (fixture resolution now env-overridable + sibling-probing and loud on fallback — the silent degraded loading of pre-1.22.0 readings is fixed). Pass rate is passed/total.

Workflow-engine row re-measured 2026-06-21 at suite 1.29.0 (in-process, serial via --no-file-parallelism, full repo corpus via OPENWOP_CONFORMANCE_ROOT, OPENWOP_TEST_SEAM_ENABLED=true, memory://): 2059 / 0 / 89 / 2148, zero deterministic failures. The total rises 1963 → 2148 because the 1.23.0–1.29.0 scenarios now register (and the repo corpus carries the spec-corpus-validity prose/link/index cases the published package omits by design — so the repo-corpus total is the apples-to-apples basis the other reference rows are also measured on). The 89 skips are honest-non-claims: capability-gated families this host advertises none of (RFC 0104 approver-routing, RFC 0105 speech-synthesis, the unadvertised-profile families) soft-skip in default mode. The other four reference rows remain at the 1.22.0 basis pending their next re-measure cycle.

HostPassedFailedSkippedTodoTotalPass rate (default)
Workflow-engine reference (in-process, 1.29.0)20590890214895.9%
Postgres reference184801150196394.1%
SQLite reference (strict)182601370196393.0%
In-memory reference1793451250196391.3%
Python reference178601770196391.0%

Composition partners — interop evidence

The conformance suite's MCP and A2A probes run against live reference implementations of the adjacent protocols. See A2A vs MCP vs OpenWOP for how the three layers compose.

PartnerReference implSync round-tripAsync / durable (RFC 0100)
MCP@modelcontextprotocol/sdk@1.29.0 (all three transports)✅ pass
A2A@a2a-js/sdk@0.3.13 reference peer (echo skill, JSON-RPC)✅ 1/1 pass (a2a-task-roundtrip.test.ts)⏳ corpus landed (capabilities.a2a + A2ATaskState + durable-tasks/get/resubscribe/push subtests); reference-host durable-Task evidence at Active → Accepted

Reading Rows

  • Compatibility profile claim is derived from /.well-known/openwop according to spec/v1/profiles.md.
  • Scale claim follows spec/v1/scale-profiles.md.
  • Production profile claim follows spec/v1/production-profile.md and is recorded separately because durability, retention, backpressure, and observability are operational evidence, not discovery-payload predicates.
  • Conformance evidence should name the suite version, command used, target URL class, and pass/fail/skip counts. Do not include private deployment identifiers, secrets, or internal result paths.

Add A Host

1. Implement the openwop v1 wire contract. 2. Run @openwop/openwop-conformance against the host. 3. Publish a result file or Markdown summary in a public repository. 4. Add a row above with compatibility, scale, production-profile, and evidence claims.

See Also

  • conformance/README.md — how to run the suite.
  • spec/v1/profiles.md — compatibility profile predicates.
  • spec/v1/scale-profiles.md — scale tier definitions.
  • spec/v1/production-profile.md — public-release operational profile.