Document consumer and internal loading flows
This commit is contained in:
@@ -7,7 +7,10 @@ This note records implementation flow and private identities for maintainers.
|
||||
## Discovery and acquisition
|
||||
|
||||
Each source's root directive is parsed into presence-aware declarations and
|
||||
resolved against load-wide defaults. Candidate selection preserves a normalized
|
||||
resolved against load-wide defaults. `acquisition.go` owns shared acquisition
|
||||
policy, load accounting, and per-tier accounting; `import_acquisition.go` owns
|
||||
reading candidate bytes, declaration traversal, and import admission. Candidate
|
||||
selection in `import_selection.go` preserves a normalized
|
||||
namespace path separately from canonical access identity: overlapping roots
|
||||
coalesce the same candidate spelling in that namespace, while aliases reached
|
||||
through distinct spellings retain separate inclusion routes for admission.
|
||||
@@ -20,10 +23,14 @@ Directory traversal tracks canonical directories on the active traversal path.
|
||||
It adds an identity when descending and removes it when the frame is popped, so
|
||||
only a back-edge to an active directory is a traversal cycle; a later alias is
|
||||
not mistaken for one. This is separate from import dependency-cycle detection.
|
||||
For host sources, discovery uses rooted `Lstat` and canonical containment. Native
|
||||
sources use `fs.ReadLinkFS` inspection when supplied; otherwise traversal follows
|
||||
the capabilities and behavior of the provided `fs.FS`, without claiming a
|
||||
general sandbox guarantee.
|
||||
For host sources, discovery uses rooted `Lstat` and canonical containment.
|
||||
`filesystem_context.go` owns resolved access facts and live access setup; the
|
||||
acquisition operation closes its live handles before composition. Native sources
|
||||
use `fs.ReadLinkFS` inspection when supplied; otherwise traversal follows the
|
||||
capabilities and behavior of the provided `fs.FS`, without claiming a general
|
||||
sandbox guarantee. `source_context.go` derives passive resource contexts from
|
||||
resolved sources for later caller-owned reads; those records do not retain live
|
||||
acquisition handles.
|
||||
|
||||
Acquisition remains authored: declarations are visited in source order and each
|
||||
selected candidate set in namespace-path lexical order. This preserves source
|
||||
@@ -78,10 +85,14 @@ mapping order in its output.
|
||||
These scopes do not flatten into one global graph, and independent precedence
|
||||
tiers remain separate.
|
||||
|
||||
The main owners are [`import_selection.go`](../../internal/engine/import_selection.go),
|
||||
The owners are [`acquisition.go`](../../internal/engine/acquisition.go),
|
||||
[`import_selection.go`](../../internal/engine/import_selection.go),
|
||||
[`import_acquisition.go`](../../internal/engine/import_acquisition.go),
|
||||
[`directory_walk.go`](../../internal/engine/directory_walk.go),
|
||||
[`import_graph.go`](../../internal/engine/import_graph.go),
|
||||
[`import_projection.go`](../../internal/engine/import_projection.go),
|
||||
[`dependency_order.go`](../../internal/engine/dependency_order.go), and
|
||||
[`inheritance_schedule.go`](../../internal/engine/inheritance_schedule.go).
|
||||
Their focused behavior is covered by import-selection, scheduler, and scheduling
|
||||
integration tests under `internal/engine`.
|
||||
Their focused behavior is covered by import-selection, acquisition, scheduler,
|
||||
and scheduling integration tests under `internal/engine`; see the
|
||||
[development test map](../development.md#task-to-test-map).
|
||||
|
||||
@@ -87,3 +87,58 @@ operations and CLI ordering. [ADR 0019](../adr/0019-explicit-configuration-disco
|
||||
records explicit main-file discovery. The [import internals](imports.md)
|
||||
document candidate and namespace identities, discovery and scheduling, and the
|
||||
bounded algorithms.
|
||||
|
||||
## Implementation flow
|
||||
|
||||
The root facade converts caller-owned values into engine-owned requests. The
|
||||
ordinary and grouped entry points share a normalized `loadRequest`: see
|
||||
[`lifecycle.go`](../../lifecycle.go), [`layered.go`](../../layered.go), and
|
||||
[`load_request.go`](../../internal/engine/load_request.go). Load-wide definition,
|
||||
version, default-import, and override policy stays distinct from each input's
|
||||
source, filesystem, destination, and import settings.
|
||||
|
||||
[`acquisition.go`](../../internal/engine/acquisition.go) defines acquisition
|
||||
policy and load-wide and per-tier accounting state. Each input is acquired under
|
||||
that policy; grouped requests retain acquired underlay scopes until their tier is
|
||||
composed in [`load_request.go`](../../internal/engine/load_request.go). Live
|
||||
filesystem access handles are confined to acquisition and closed there. Resolved
|
||||
filesystem facts used to authorize access are separate from passively retained
|
||||
resource contexts: see
|
||||
[`filesystem_context.go`](../../internal/engine/filesystem_context.go) and
|
||||
[`source_context.go`](../../internal/engine/source_context.go).
|
||||
|
||||
Import responsibilities are split across candidate selection and path
|
||||
normalization in [`import_selection.go`](../../internal/engine/import_selection.go),
|
||||
source reading and traversal admission in
|
||||
[`import_acquisition.go`](../../internal/engine/import_acquisition.go),
|
||||
directory walking in [`directory_walk.go`](../../internal/engine/directory_walk.go),
|
||||
dependency graph scheduling in [`import_graph.go`](../../internal/engine/import_graph.go),
|
||||
and projection of acquired evidence into final source coordinates in
|
||||
[`import_projection.go`](../../internal/engine/import_projection.go). The
|
||||
[import internals](imports.md) page describes the boundaries and identities.
|
||||
|
||||
After acquisition handles are closed, grouped composition and inheritance run on
|
||||
the retained ordered documents. `inheritance.go` coordinates traversal and
|
||||
[`inheritance_schedule.go`](../../internal/engine/inheritance_schedule.go) applies
|
||||
dependency-ready templates;
|
||||
[`inheritance_prepare.go`](../../internal/engine/inheritance_prepare.go)
|
||||
prepares child and parent inputs,
|
||||
[`inheritance_combine.go`](../../internal/engine/inheritance_combine.go)
|
||||
returns the combined value with its origin, policy, sequence, and diagnostic
|
||||
evidence, and [`inheritance_finalize.go`](../../internal/engine/inheritance_finalize.go)
|
||||
accounts for and finalizes the result. Projection and schema work have separate
|
||||
operation owners: [`value_operation.go`](../../internal/engine/value_operation.go)
|
||||
holds per-operation state, [`projection.go`](../../internal/engine/projection.go)
|
||||
builds projected values, [`schema.go`](../../internal/engine/schema.go) owns
|
||||
descriptor caching and type policy, and
|
||||
[`schema_fields.go`](../../internal/engine/schema_fields.go) owns ordinary and
|
||||
inline field assembly. [`decode.go`](../../internal/engine/decode.go) consumes
|
||||
those descriptors for typed decoding.
|
||||
|
||||
Behavioral ownership follows the same handoffs: imports and grouped lifetimes are
|
||||
covered by `imports_test.go`, `load_request_test.go`, and focused source,
|
||||
discovery, and destination tests; inheritance by the inheritance test files;
|
||||
reflection behavior by `schema_test.go`, `projection_test.go`, and
|
||||
`decode_test.go`. The [development test map](../development.md#task-to-test-map)
|
||||
links focused commands. Typed clone extraction remains deferred in
|
||||
[`future.md`](../roadmap/future.md#4-clone-traversal-review).
|
||||
|
||||
Reference in New Issue
Block a user