Skip to content

Commit e2ad31e

Browse files
committed
docs(rfc): clarify driver config extension path
1 parent 95c58a8 commit e2ad31e

1 file changed

Lines changed: 59 additions & 9 deletions

File tree

rfc/0005-driver-config-passthrough/README.md

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,26 @@ This RFC does not introduce DNS-qualified driver namespaces. A future driver
133133
identity cleanup may add namespaced aliases or rename in-tree drivers, but that
134134
should 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

138158
Keep 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+
184209
After selecting the matching block, the gateway forwards only that inner Struct
185210
to `DriverSandboxTemplate.driver_config`.
186211

@@ -244,6 +269,19 @@ Examples:
244269
This can be relaxed later to a documented merge rule if a real use case
245270
requires 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.
326364
The initial implementation can rely on driver documentation plus validation
327365
errors 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.
468514
10. 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

Comments
 (0)