Compare commits

...

1 Commits

Author SHA1 Message Date
HAL9000 9ebb70b909 docs(spec): extend auto_discovery schema with parent_types and detection fields
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 23s
CI / helm (pull_request) Successful in 23s
CI / push-validation (pull_request) Successful in 18s
CI / lint (pull_request) Successful in 3m21s
CI / quality (pull_request) Successful in 3m39s
CI / typecheck (pull_request) Successful in 4m24s
CI / security (pull_request) Successful in 4m28s
CI / e2e_tests (pull_request) Successful in 6m34s
CI / unit_tests (pull_request) Successful in 8m32s
CI / integration_tests (pull_request) Failing after 14m21s
CI / docker (pull_request) Successful in 2m16s
CI / coverage (pull_request) Successful in 14m1s
CI / status-check (pull_request) Failing after 2s
CI / benchmark-regression (pull_request) Successful in 56m57s
The formal JSON Schema for auto_discovery in the Resource Type schema
(§34650-34676) was missing three fields used by the built-in
devcontainer-instance type example (§35283-35294):

- parent_types: list of resource types that trigger auto-discovery
- detection.scan_paths: relative paths to check for child resource presence
- detection.activation: eager|lazy activation mode (default: lazy)

The devcontainer-instance built-in type uses all three fields to express
that it should be auto-discovered when a git-checkout resource is
registered and a .devcontainer/devcontainer.json file is found.

Without these fields in the formal schema, implementers could not
determine the correct auto_discovery schema from the spec alone, causing
the auto_discover_children() helper to use an incompatible schema.

Fixes: #6291
Refs: ADR-043 (Devcontainer Integration)
2026-04-12 04:06:28 +00:00
+26
View File
@@ -34672,6 +34672,29 @@ The following is the formal [JSON Schema](https://json-schema.org/) definition f
<span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;array&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;items&quot;</span>: { <span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;string&quot;</span> },
<span style="color: cyan; font-weight: 600;">&quot;description&quot;</span>: <span style="color: #66cc66;">&quot;Glob patterns for resources to skip during discovery.&quot;</span>
},
<span style="color: cyan; font-weight: 600;">&quot;parent_types&quot;</span>: {
<span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;array&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;items&quot;</span>: { <span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;string&quot;</span> },
<span style="color: cyan; font-weight: 600;">&quot;description&quot;</span>: <span style="color: #66cc66;">&quot;Resource types that trigger auto-discovery of this child type. When a resource of one of these parent types is registered, the system scans for children of this type.&quot;</span>
},
<span style="color: cyan; font-weight: 600;">&quot;detection&quot;</span>: {
<span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;object&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;description&quot;</span>: <span style="color: #66cc66;">&quot;Detection configuration for child resource discovery.&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;properties&quot;</span>: {
<span style="color: cyan; font-weight: 600;">&quot;scan_paths&quot;</span>: {
<span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;array&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;items&quot;</span>: { <span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;string&quot;</span> },
<span style="color: cyan; font-weight: 600;">&quot;description&quot;</span>: <span style="color: #66cc66;">&quot;Relative paths (from the parent resource root) to check for the presence of this child resource type. If any path exists, a child resource is created.&quot;</span>
},
<span style="color: cyan; font-weight: 600;">&quot;activation&quot;</span>: {
<span style="color: cyan; font-weight: 600;">&quot;type&quot;</span>: <span style="color: #66cc66;">&quot;string&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;enum&quot;</span>: [<span style="color: #66cc66;">&quot;eager&quot;</span>, <span style="color: #66cc66;">&quot;lazy&quot;</span>],
<span style="color: cyan; font-weight: 600;">&quot;default&quot;</span>: <span style="color: #66cc66;">&quot;lazy&quot;</span>,
<span style="color: cyan; font-weight: 600;">&quot;description&quot;</span>: <span style="color: #66cc66;">&quot;When to activate the discovered child resource. &#x27;lazy&#x27; means the child is registered but not built/started until first needed. &#x27;eager&#x27; means the child is activated immediately at discovery time.&quot;</span>
}
},
<span style="color: cyan; font-weight: 600;">&quot;additionalProperties&quot;</span>: <span style="color: magenta; font-weight: 600;">false</span>
}
},
<span style="color: cyan; font-weight: 600;">&quot;additionalProperties&quot;</span>: <span style="color: magenta; font-weight: 600;">false</span>
@@ -34903,6 +34926,9 @@ The following annotated YAML provides an easier-to-read overview of the same sch
| `scan_depth` | integer | No | Maximum recursion depth for scanning. Default: `3`. |
| `include_patterns` | list | No | Glob patterns for resources to discover. |
| `exclude_patterns` | list | No | Glob patterns for resources to skip during discovery. |
| `parent_types` | list | No | Resource types that trigger auto-discovery of this child type. When a resource of one of these parent types is registered, the system scans for children of this type. Used by built-in types such as `devcontainer-instance` (triggered by `git-checkout`). |
| `detection.scan_paths` | list | No | Relative paths (from the parent resource root) to check for the presence of this child resource type. If any path exists, a child resource is created. Example: `[".devcontainer/devcontainer.json", ".devcontainer.json"]`. |
| `detection.activation` | string | No | When to activate the discovered child resource. `lazy` (default) means the child is registered but not built/started until first needed. `eager` means the child is activated immediately at discovery time. |
**Equivalence Fields (`equivalence`) — Virtual Types Only**