OpenWOP openwop.dev
FieldValue
RFC0075
TitleArtifact-Type Packs — real-world adoption amendment
StatusAccepted
Author(s)David Tufts (@davidscotttufts)
Created2026-05-27
Updated2026-06-01 (Active → Accepted) — graduated on the non-steward host MyndHyve, whose live discovery advertises the amendment's per-type facets field-for-field (rev workflow-runtime-00449-fal @ 100%, https://api.myndhyve.ai; steward-verified 2026-06-01). This RFC codifies what MyndHyve's real RFC 0071 adoption already does: host.artifactTypes.supported: true with 7 host-registered artifact types, each carrying the amendment's facets — validation: "open" (the P0-2 MUST→SHOULD relaxation + validation field for AI-produced artifacts), registrationSource: "host" (P0-1 host-native, no-pack registration), schemaVersion: 1 (P1-2 schemaVersions decoupling), and validated: true (P1-1 per-type facet). The amendment required no new MyndHyve code — its AI-native host surfaced these facets when it implemented 0071 — and the server-free artifact-type-pack-manifest-validation.test.ts (incl. the new `validation: open
Affectsspec/v1/artifact-type-packs.md, spec/v1/host-capabilities.md §host.artifactTypes, spec/v1/capabilities.md; schemas/artifact-type-pack-manifest.schema.json, schemas/run-event-payloads.schema.json; conformance scenarios
Compatibilityadditive per COMPATIBILITY.md §2.1 (one MUST→SHOULD relaxation, otherwise additive)
Supersedes— (amends RFC 0071 Phase 1)
Superseded by

Summary

RFC 0071 Phase 1 (artifact-type packs) graduated Active → Accepted 2026-05-27 on MyndHyve's production adoption (#275) — and implementing it as a _real_ host surfaced gaps the spec's design assumptions don't cover: it was written for deterministic producers distributing signed packs, but the first adopter is an AI-native host with built-in artifact types and no packs. This RFC folds in six adoption-grounded amendments — host-native registration (P0-1), an additionalProperties:false MUST→SHOULD relaxation + a validation field for AI-produced artifacts (P0-2), per-type capability facets + validated/schemaVersions decoupling (P1-1/P1-2), a schema-resolvability MUST for no-pack types (P1-3), and a store-only conformance reference host (P2-1). All are additive or MUST→SHOULD relaxations; nothing breaks existing conformance.

Motivation

The feedback originates from MyndHyve, the first non-steward and first AI-native host to adopt RFC 0071 Phase 1 end-to-end (docs/openwop-adoption/0071-realworld-adoption-feedback-myndhyve.md, grounded in …-myndhyve-adoption-evidence.md). Two root facts drive the changes: (1) MyndHyve's artifact types are host-native (its Canvas Type system predates packs) and it published no signed packs — yet it validates + emits registered: true; and (2) its 79 artifact schemas carry .passthrough() (open) with zero additionalProperties:false, because strict validation demonstrably rejected valid LLM output in production. The spec is the right place because these are not host bugs — they are the realistic shape of _every_ AI-native adopter, and the current letter forces each into either over-publishing or quietly violating a MUST.

This RFC also closes a candor gap in the Phase-1 graduation: the steward accepted registered: true for host-native types the spec defined as pack-only, served from URLs the spec only SHOULD-recommended. P0-1 + P1-3 bless and make verifiable what was already accepted.

Proposal

P0-1 — Host-native registration tier + registrationSource (artifact-type-packs.md §"Binding")

Registration gains two tiers: pack-registered (matches an installed pack) and host-registered (a host-native type validated against a host-known schema, independent of packs). Both are registered: true-eligible. The run event gains optional provenance:

 "artifact.created": {
   "artifactType": "vendor.myndhyve.prd", "registered": true,
+  "registrationSource": "host"   // "pack" | "host"
 }

A host MAY emit registered: true for a host-registered type only if its schema is resolvable (P1-3). registrationSource is optional; absent ⇒ existing semantics.

P0-2 — additionalProperties:false MUST→SHOULD + validation field (§"The ArtifactType declaration", schemaRef)

schemaRef's "MUST set additionalProperties: false" relaxes to SHOULD (the $id requirement stays MUST). Framing: this corrects an internal inconsistency, not an AI carve-out — a closed-world artifact contract contradicts the protocol's own forward-compatibility mandate (COMPATIBILITY.md §2.1: _consumers MUST ignore unknown fields_). A new optional validation: "open" | "closed" field on the ArtifactType declaration advertises strictness: closed ⇒ a consumer MAY rely on no unknown fields; open (recommended for AI/LLM output; the default when absent) ⇒ consumers MUST ignore unknown fields. The host validates emit-time output against the schema as-written; it does not maintain a separate strict contract schema (the two-schema split was considered and rejected as overhead the problem doesn't need).

P1-1 — Per-type capability facets (host-capabilities.md §host.artifactTypes)

host.artifactTypes gains an optional types map keyed by artifactTypeId, each entry { validated, validation, schemaVersion, store, render, export } overriding the global object (the fallback). This expresses a heterogeneous fleet ("validate these 7, store the rest") that a host-global object cannot — the literal cause of MyndHyve's forced 16→7 advertisement trim.

P1-2 — schemaVersions is a declaration; validated is the guarantee

schemaVersions["X"] = N is defined as a version declaration ("I know X at version N"), decoupled from the runtime validation guarantee carried by the per-type validated facet (P1-1). Removes the ambiguity that forced the 16→7 trim.

P1-3 — Schema-resolvability MUST for no-pack types (§"Schema distribution")

When a host advertises a schemaVersion for a type without a published pack, serving the canonical {HostBase}/schemas/artifacts/{artifactTypeId}.schema.json URL becomes a MUST (was SHOULD). This makes registered: true (P0-1) downstream-verifiable. Byte-identical clause clarified: the in-tarball/host-served byte-identical requirement applies only when _both_ copies exist; a no-pack type ships only the served URL.

P2-1 — Store-only conformance reference host

Add a render: false store-only posture to a reference host (the SQLite reference host) so the store-without-render negotiation guarantee is actually exercised end-to-end, not just soft-skipped against a render-everything host. Steward-side; tracked as a follow-on conformance task.

Compatibility

Additive, with one MUST→SHOULD relaxation (P0-2). Per COMPATIBILITY.md §2.1 + §4:

  • P0-1 registrationSource, P0-2 validation, P1-1 types — all new optional fields; absent ⇒ prior semantics; consumers ignore unknown fields.
  • P0-2 relaxation — MUST→SHOULD is backward-compatible: existing strict (additionalProperties:false) schemas still conform; the relaxation only _permits_ open schemas.
  • P1-2 — a clarification of previously-undefined semantics (additive per §4).
  • P1-3 — tightens SHOULD→MUST only for the no-pack case; pack-publishing hosts unaffected. A host advertising a no-pack schemaVersion without serving the URL was shipping an unverifiable claim; this closes that hole. (MyndHyve owns the impl cost — serving its 7 schema URLs — and is unblocked to do so by P0-2, which legalizes serving its open schemas.)

No existing required field, type, event-shape, or error code changes. Spec minor bump.

Conformance

  • chat-card-pack-manifest-validation is unaffected. artifact-type-pack-manifest-validation.test.ts gains a positive case asserting the new validation: "open"|"closed" field validates.
  • The registrationSource enum + the validation field are exercised by the server-free manifest/run-event schema-validity scenarios (Ajv2020 round-trip).
  • P2-1 lands the store-without-render behavioral coverage end-to-end via the SQLite reference host's render: false posture (follow-on).
  • The artifact-schema-compile-bounded (R1) invariant is unchanged — relaxing additionalProperties does not touch compilation bounds.

Alternatives considered

  • P0-2 bare MUST→SHOULD without the validation field. Rejected: drops the cross-host consumer's ability to know whether to expect a closed shape. The field is one advertised value and is the negotiation hook.
  • P0-2 two-schema split (strict published contract + lenient host validation schema). Rejected: maintaining two schemas per type is overhead for a closed-world guarantee the protocol rarely needs and §2.1 already discourages.
  • Do nothing. Rejected: every AI-native adopter would quietly violate the strict MUST and emit unverifiable registered: true — encoding the lenient reality is more honest and durable.

Unresolved questions

1. Should validation: "closed" ever be _required_ for a type a consumer treats as a cross-host contract, or is advisory-only sufficient? (Current: advisory; default open.) 2. P2-1 host choice — SQLite reference host vs. a dedicated conformance harness driving a render:false advertisement.

Implementation notes (non-normative)

  • MyndHyve sequences its side: P0-2 lands → it serves its 7 schema URLs (z.toJSONSchema() + canonical $id injection + a /schemas/artifacts/:id.schema.json route) + advertises validation: "open"registered: true becomes downstream-verifiable. It will re-run conformance against any revised scenarios.
  • README RFC counts + protocol:status synced per the adding-RFCs gate.

Acceptance criteria

  • [x] Spec text merged: artifact-type-packs.md (P0-1/P0-2/P1-3), host-capabilities.md §host.artifactTypes (P1-1/P1-2).
  • [x] Schemas: artifact-type-pack-manifest.schema.json (validation), run-event-payloads.schema.json (registrationSource).
  • [x] Conformance: validation-field positive case; registrationSource enum round-trip.
  • [x] CHANGELOG entry.
  • [x] P2-1 store-only reference host exercises store-without-render end-to-end — the in-memory reference host advertises host.artifactTypes { store:true, render:false } + the /v1/host/sample/artifacttypes/{install,produce} seam; artifact-type-store-without-render + artifact-type-pack-install PASS against it (steward-verified locally, 2026-05-27).
  • [x] MyndHyve serves its host-native schema URLs + advertises validation: "open" (host-side, P1-3 close-out) — shipped on rev workflow-runtime-00398-vup, steward curl-verified 2026-05-27 (all 7 schema URLs resolve; registered:true downstream-resolvable). G3 closed.

References