Problem
Expressions can consume resolved remote data, but one remote resource cannot reliably use another in its URL, headers, search parameters, or body. Resource loading is eager and request construction currently excludes resource-backed values to avoid cycles.
Desired outcome
Treat a resource as the lazy async abstraction that resolves a document. Any expression can consume any data variable available in its supported scope, regardless of whether the value is immediate or resolved through REST, GraphQL, Assets, current date, or another system resource.
Product scope
- Resolve only resources reached by expression consumers and their transitive dependencies.
- Keep expressions synchronous by injecting resolved documents.
- Share dependency resolution semantics with the Content Engine graph.
- Preserve parallelism for independent resources.
- Detect missing and cyclic dependencies.
- Support published output and Builder preview consistently.
- Keep action resources on demand.
Collection-item and component-parameter-dependent resources require scoped per-render resolution and may be delivered separately from page-load dependencies.
Acceptance criteria
- A resource request may reference an in-scope resource-backed data variable.
- Dependency chains and shared dependencies resolve once in dependency order.
- Unreferenced resources are not resolved.
- Independent branches resolve concurrently.
- Cycles and missing dependencies produce actionable diagnostics and never hang.
- REST, GraphQL, Assets, current date, and sitemap use the same resource abstraction.
- Builder preview and published output agree.
- Existing document-graph behavior remains compatible.
Unresolved product questions
- Whether a failed dependency blocks downstream resolution or is exposed as an inspectable document.
- Whether scoped collection/component resource resolution belongs in the first release.
Problem
Expressions can consume resolved remote data, but one remote resource cannot reliably use another in its URL, headers, search parameters, or body. Resource loading is eager and request construction currently excludes resource-backed values to avoid cycles.
Desired outcome
Treat a resource as the lazy async abstraction that resolves a document. Any expression can consume any data variable available in its supported scope, regardless of whether the value is immediate or resolved through REST, GraphQL, Assets, current date, or another system resource.
Product scope
Collection-item and component-parameter-dependent resources require scoped per-render resolution and may be delivered separately from page-load dependencies.
Acceptance criteria
Unresolved product questions