@@ -133,6 +133,26 @@ This RFC does not introduce DNS-qualified driver namespaces. A future driver
133133identity cleanup may add namespaced aliases or rename in-tree drivers, but that
134134should not block the ` driver_config ` mechanism.
135135
136+ ### Future driver identity
137+
138+ The built-in driver names listed above are reserved by OpenShell. Out-of-tree
139+ drivers should not assume that short, unqualified names are collision-safe as the
140+ driver ecosystem grows.
141+
142+ A future driver identity design should allow a driver to advertise a canonical
143+ ` driver_config ` key and, if needed, compatibility aliases. For example, an
144+ external driver may eventually prefer a DNS-qualified key such as
145+ ` vendor.example/driver ` while an in-tree driver continues to use ` kubernetes ` ,
146+ ` docker ` , ` podman ` , or ` vm ` .
147+
148+ Any future identity design must preserve the ownership boundary in this RFC:
149+
150+ - matching remains exact against a known active driver identity or alias;
151+ - wildcard matching does not gain special meaning;
152+ - the gateway does not infer nested schema ownership from partial names; and
153+ - the selected driver remains the only component that validates the selected
154+ inner config block.
155+
136156### Driver API
137157
138158Keep the existing gateway-computed ` platform_config ` separate from
@@ -181,6 +201,11 @@ The gateway handles only the top-level envelope:
181201- The matching block, when present, must be a Struct value.
182202- Non-selected driver blocks are ignored by the gateway and are not validated.
183203
204+ Future gateway implementations may emit a non-fatal warning when a non-empty
205+ envelope contains no top-level key matching any active driver name. That warning
206+ is a usability aid for likely typos. It must not change the portability rule:
207+ non-selected driver blocks remain tolerated and unvalidated by the gateway.
208+
184209After selecting the matching block, the gateway forwards only that inner Struct
185210to ` DriverSandboxTemplate.driver_config ` .
186211
@@ -244,6 +269,19 @@ Examples:
244269This can be relaxed later to a documented merge rule if a real use case
245270requires it.
246271
272+ Prototype implementations may temporarily accept a narrower subset of this
273+ behavior while the nested driver schema is being explored. For example, a POC may
274+ ignore unknown Kubernetes keys so that representative scheduling and resource
275+ examples can be demonstrated before the final schema is settled. Such behavior
276+ must be documented as experimental and must not be treated as the final contract.
277+
278+ Before a driver config key is documented as stable, the selected driver should
279+ define its validation behavior for unknown keys, malformed values, typed-field
280+ conflicts, protected invariants, and unsafe platform controls. The default
281+ expectation for stable documented schemas is to reject unknown or malformed
282+ fields unless the driver explicitly documents an extension bag or pass-through
283+ subtree.
284+
247285### Protected fields and security constraints
248286
249287` driver_config ` must not allow callers to override gateway-owned or driver-owned
@@ -326,9 +364,17 @@ migration guidance where possible.
326364The initial implementation can rely on driver documentation plus validation
327365errors from ` ValidateSandboxCreate ` .
328366
329- Longer term, drivers may expose machine-readable ` driver_config ` schemas so
330- CLIs, TUIs, templates, and gateways can help users earlier. Possible discovery
331- surfaces include:
367+ Longer term, driver config should have a machine-readable discovery surface so
368+ CLIs, TUIs, templates, and gateways can help users earlier without hard-coding
369+ driver-specific schemas. A discovery surface should let a driver report at
370+ least:
371+
372+ - the canonical ` driver_config ` key and compatibility aliases it accepts;
373+ - whether the driver supports caller-provided ` driver_config ` ;
374+ - the schema identifier, version, or URL for the selected config shape; and
375+ - the driver's documented unknown-field behavior.
376+
377+ Possible discovery surfaces include:
332378
333379- a schema URL in ` GetCapabilitiesResponse ` ;
334380- an inline schema in ` GetCapabilitiesResponse ` ;
@@ -467,7 +513,10 @@ outside this RFC.
467513 including GPU extended resources and sidecar resource requests.
46851410 . Document built-in driver names, exact-match behavior, validation ownership,
469515 lifecycle semantics, protected-field rules, schema evolution expectations,
470- and supported Kubernetes keys.
516+ POC-versus-stable validation behavior, and supported Kubernetes keys.
517+ 11 . Track follow-up design work for canonical driver identity and aliases,
518+ machine-readable schema discovery, and non-fatal warnings when no envelope
519+ key matches an active driver.
471520
472521## Risks
473522
@@ -615,11 +664,12 @@ RFC 0004 intentionally left out of scope.
615664
616665## Open questions
617666
618- - Should drivers advertise ` driver_config ` support in ` GetCapabilitiesResponse ` ,
619- or is forwarding a matching block sufficient?
620- - Should drivers expose machine-readable schemas for ` driver_config ` , and if so
621- should that be a schema URL, inline schema, dedicated RPC, or schema version
622- identifier?
667+ - What driver identity format and alias rules should out-of-tree drivers use if
668+ OpenShell later introduces DNS-qualified driver names?
669+ - Which schema discovery surface should carry the canonical config key,
670+ compatibility aliases, support signal, schema identity, and unknown-field
671+ behavior?
672+ - Should no-match warnings be emitted by the gateway, CLI/TUI tooling, or both?
623673- What Kubernetes nested config shape best covers representative pod-level and
624674 container-level use cases without exposing unsafe override paths?
625675- Should Kubernetes config use driver-owned role names such as ` sandbox ` and
0 commit comments