48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# ADR 0022: Bind Companion Contexts After Main Selection
|
|
|
|
## Status
|
|
|
|
Accepted.
|
|
|
|
## Date
|
|
|
|
2026-11-09
|
|
|
|
## Context
|
|
|
|
Applications choose a main-file search and may also declare companion imports
|
|
and a selected overlay. The main directory is only known after discovery, so
|
|
supplying every dependent context before loading duplicates selection or requires
|
|
a preliminary load. ADR 0019 keeps main discovery explicit and inside loading.
|
|
|
|
## Decision
|
|
|
|
Extend layered loading to bind application-declared non-file underlays to the
|
|
resolved main context after acquisition. An explicit underlay context overrides
|
|
the binding, and an explicit fallback or require-base option controls absence.
|
|
Selected layered overlays choose an explicit context, the resolved main context,
|
|
or a fallback in that order. Derived and fallback lookup use the context base;
|
|
the inherited root continues to bound containment. Ordinary and explicit
|
|
overlay lookup retain their established root-relative behavior.
|
|
|
|
Applications remain responsible for choosing searches, import declarations,
|
|
and overlay names. Selection failures are terminal; no second search or
|
|
application context callback is introduced.
|
|
|
|
## Alternatives Considered
|
|
|
|
- Require applications to discover the main file separately. This repeats
|
|
discovery and may run a complete load more than once.
|
|
- Implicitly scan conventional companion directories. This would impose
|
|
application-specific conventions without an explicit declaration.
|
|
- Add only a relative file constructor. This would not cover mapping or bytes
|
|
sources with existing import, placement, and composition rules.
|
|
|
|
## Consequences
|
|
|
|
The load owns the resolved binding and keeps namespace, containment, source
|
|
identity, and handle lifetime in the existing acquisition lifecycle. A missing
|
|
base skips optional imports while preserving the declaring payload; required
|
|
imports and require-base retain explicit failures. The configuration contract
|
|
and public declarations describe the observable rules.
|