Clarify unresolved source destination evidence in implementation plan
This commit is contained in:
@@ -50,6 +50,9 @@ type SequenceComposition struct {
|
|||||||
|
|
||||||
- Add `SequenceCompositions []SequenceComposition` to `Definition[T]`.
|
- Add `SequenceCompositions []SequenceComposition` to `Definition[T]`.
|
||||||
- Add `PlacementMode PlacementMode` to `Input` and `SourceInfo`.
|
- Add `PlacementMode PlacementMode` to `Input` and `SourceInfo`.
|
||||||
|
- Add `DestinationUnresolved bool` to `SourceInfo`. False preserves the existing
|
||||||
|
exact-destination interpretation; true explicitly marks the enclosing-container
|
||||||
|
fallback described below. This is output evidence, not an input option.
|
||||||
- Add both `Destination Path` and `PlacementMode PlacementMode` to `Options[T]`.
|
- Add both `Destination Path` and `PlacementMode PlacementMode` to `Options[T]`.
|
||||||
Ordinary `Load` needs the same per-source controls as the layered entry point;
|
Ordinary `Load` needs the same per-source controls as the layered entry point;
|
||||||
its overlay and CLI coordinates remain application-rooted.
|
its overlay and CLI coordinates remain application-rooted.
|
||||||
@@ -131,6 +134,37 @@ inventing an all-errors guarantee or freezing incidental message wording.
|
|||||||
Output evidence may contain such indexes even though input destinations and
|
Output evidence may contain such indexes even though input destinations and
|
||||||
registrations accept only mapping-key segments.
|
registrations accept only mapping-key segments.
|
||||||
|
|
||||||
|
### Unresolved destination evidence
|
||||||
|
|
||||||
|
`SourceInfo.DestinationUnresolved` describes whether that snapshot's `Destination`
|
||||||
|
is the source's exact effective destination container:
|
||||||
|
|
||||||
|
- When false, `Destination` is exact. This says nothing about whether the load
|
||||||
|
succeeded or the source's values survived later replacement. An item source
|
||||||
|
can have an exact sequence-container destination before its own item index is
|
||||||
|
assigned, because that index is not part of its reported container path.
|
||||||
|
- When true, an enclosing item index needed for the destination has not been
|
||||||
|
assigned. `Destination` is only the nearest resolved enclosing collection
|
||||||
|
container, not the source's actual mapping destination or nested sequence
|
||||||
|
destination. Do not append the unresolved local suffix as though the missing
|
||||||
|
index were a mapping key, or use a fabricated index.
|
||||||
|
- For example, a mapping helper destined for `prompts[1].metadata` reports the
|
||||||
|
container `prompts` with `DestinationUnresolved: true` until the outer item
|
||||||
|
index is assigned. Later snapshots report `prompts[1].metadata` with false.
|
||||||
|
The item-root source itself reports `prompts` with false when that container
|
||||||
|
is known. The placement mode continues to describe each source's own mode.
|
||||||
|
- Apply this distinction to every source-record exposure, including source
|
||||||
|
records available during callbacks and failed-load records. Once projection
|
||||||
|
resolves the container, subsequent snapshots report the exact path with false.
|
||||||
|
Previously returned detached snapshots retain their original path and flag.
|
||||||
|
Completed successful loads report resolved containers; early failures may
|
||||||
|
contain both resolved and unresolved source records.
|
||||||
|
|
||||||
|
This flag makes the existing planned fallback observable without adding a public
|
||||||
|
item-index API, promising permanent indexes, or reconstructing unknown placement
|
||||||
|
after a failure. Physical source locations, source IDs, and source-local version
|
||||||
|
evidence retain their existing meaning regardless of the flag.
|
||||||
|
|
||||||
Choose private helper names and file splits to fit existing responsibilities.
|
Choose private helper names and file splits to fit existing responsibilities.
|
||||||
Do not introduce a provider framework, generic merge callbacks, a second loading
|
Do not introduce a provider framework, generic merge callbacks, a second loading
|
||||||
lifecycle, or a public identity-selector API to implement these mechanics.
|
lifecycle, or a public identity-selector API to implement these mechanics.
|
||||||
@@ -307,6 +341,8 @@ Scope: placement primitives and engine per-input options; not public exposure.
|
|||||||
- Add the private placement mode to engine input/request/options/source records,
|
- Add the private placement mode to engine input/request/options/source records,
|
||||||
with preflight validation. Keep mapping placement unchanged. A valid item mode
|
with preflight validation. Keep mapping placement unchanged. A valid item mode
|
||||||
needs a nonempty mapping-key destination relative to its current mapping scope.
|
needs a nonempty mapping-key destination relative to its current mapping scope.
|
||||||
|
- Carry the destination-resolution state in engine source records so later
|
||||||
|
scoped acquisition can distinguish exact containers from unresolved fallbacks.
|
||||||
- Extend placement to wrap one completed source mapping in a singleton sequence
|
- Extend placement to wrap one completed source mapping in a singleton sequence
|
||||||
at that destination. Preserve mapping-root input validation; do not accept raw
|
at that destination. Preserve mapping-root input validation; do not accept raw
|
||||||
source sequence/scalar roots. A nil payload stays absent, and `{}` contributes
|
source sequence/scalar roots. A nil payload stays absent, and `{}` contributes
|
||||||
@@ -342,6 +378,10 @@ Scope: directive parsing and scoped acquisition/composition.
|
|||||||
composer. Assign outer ranges there, then project the retained item body and
|
composer. Assign outer ranges there, then project the retained item body and
|
||||||
helper events through those ranges. Do not emit each ordinary helper as a
|
helper events through those ranges. Do not emit each ordinary helper as a
|
||||||
separate record or validate its identity independently.
|
separate record or validate its identity independently.
|
||||||
|
- Maintain source destination-resolution state as enclosing ranges are assigned.
|
||||||
|
Before assignment, source snapshots use the explicitly marked fallback from
|
||||||
|
the fixed design; after assignment, project the exact container. Preserve
|
||||||
|
already-returned snapshots rather than updating them in place.
|
||||||
- Cover path and glob item imports, a helper-provided ID, relative and transitive
|
- Cover path and glob item imports, a helper-provided ID, relative and transitive
|
||||||
helper destinations, mixed authored lists/items, optional unmatched imports,
|
helper destinations, mixed authored lists/items, optional unmatched imports,
|
||||||
empty items, nested placement, default-mode independence, and physical paths
|
empty items, nested placement, default-mode independence, and physical paths
|
||||||
@@ -424,19 +464,25 @@ Scope: root facade declarations, conversions, and public integration tests.
|
|||||||
describing defaults, option failures, and ownership. Convert Definition
|
describing defaults, option failures, and ownership. Convert Definition
|
||||||
registrations and paths, ordinary Options destinations/modes, layered Inputs,
|
registrations and paths, ordinary Options destinations/modes, layered Inputs,
|
||||||
and successful/failed SourceInfo records in both directions as applicable.
|
and successful/failed SourceInfo records in both directions as applicable.
|
||||||
|
Convert `DestinationUnresolved` alongside `Destination` and `PlacementMode`.
|
||||||
Update callback-entry source conversions too, not only `Result.Sources`.
|
Update callback-entry source conversions too, not only `Result.Sources`.
|
||||||
- Preserve immutable source snapshots, reader single-use behavior, callback
|
- Preserve immutable source snapshots, reader single-use behavior, callback
|
||||||
lifetime, independent loads, and no public exposure of engine/parser types.
|
lifetime, independent loads, and no public exposure of engine/parser types.
|
||||||
SourceInfo reports its own selected mode; CLI/overlay sources use mapping mode
|
SourceInfo reports its own selected mode; CLI/overlay sources use mapping mode
|
||||||
unless an actual supported item placement was applied.
|
unless an actual supported item placement was applied.
|
||||||
- For a completed load, resolve nested source containers through their owning
|
- For a completed load, resolve nested source containers through their owning
|
||||||
item projection. On an early failure retain acquired evidence without inventing
|
item projection. Apply the fixed unresolved-destination contract to callbacks
|
||||||
an index that was never assigned: keep an unresolved nested source's Destination
|
and early failures: a fallback container always has `DestinationUnresolved`
|
||||||
at its nearest resolved enclosing collection container, rather than flattening
|
set to true; an exact container has false. Failed-load records describe
|
||||||
away an index and reporting a fictitious effective mapping path. Once assigned,
|
acquisition context, not a usable partial configuration. Do not add a public
|
||||||
use the projected destination. Failed-load records describe acquisition context,
|
index or identity-address API or promise resolution of every failed source's
|
||||||
not a usable partial configuration. Do not add a public index or identity-address
|
final placement.
|
||||||
API or promise resolution of every failed source's final placement.
|
- Test an unresolved helper record exposed during a callback and on early
|
||||||
|
failure, its exact projected destination after assignment, and a failure after
|
||||||
|
assignment that retains the exact destination. Distinguish an exact item-root
|
||||||
|
container from a helper fallback with the same path. Verify nested-item
|
||||||
|
fallback, preserved snapshot ownership, and false for unchanged mapping-only
|
||||||
|
sources. Reuse fixtures where these scenarios share the same lifecycle path.
|
||||||
- Public tests demonstrate ordinary and layered opt-in, an item-import glob,
|
- Public tests demonstrate ordinary and layered opt-in, an item-import glob,
|
||||||
authored-list/item interoperability, one-source validation, helper origins and
|
authored-list/item interoperability, one-source validation, helper origins and
|
||||||
resource contexts at shifted indexes, both option-error entry points, detached
|
resource contexts at shifted indexes, both option-error entry points, detached
|
||||||
@@ -444,9 +490,12 @@ Scope: root facade declarations, conversions, and public integration tests.
|
|||||||
edge cases in engine tests.
|
edge cases in engine tests.
|
||||||
- Update `docs/config.md` for the now-public registration controls, ordinary
|
- Update `docs/config.md` for the now-public registration controls, ordinary
|
||||||
destination options, complete placement/evidence behavior, and strict-versus-
|
destination options, complete placement/evidence behavior, and strict-versus-
|
||||||
replacement validation boundary. Update the architecture policy's composition
|
replacement validation boundary. Document `DestinationUnresolved` and its
|
||||||
summary to recognize the registered-sequence rule and link ADR 0014. Stage 13
|
fallback meaning in both `SourceInfo` comments and the owning configuration
|
||||||
reviews and completes the surrounding guidance, not these canonical contracts.
|
contract, including callback and failure snapshots. Update the architecture
|
||||||
|
policy's composition summary to recognize the registered-sequence rule and
|
||||||
|
link ADR 0014. Stage 13 reviews and completes the surrounding guidance, not
|
||||||
|
these canonical contracts.
|
||||||
|
|
||||||
Validation: focused facade tests,
|
Validation: focused facade tests,
|
||||||
`go test . -run 'TestPublicFacadeBoundary|TestDependencyImportBoundary'`,
|
`go test . -run 'TestPublicFacadeBoundary|TestDependencyImportBoundary'`,
|
||||||
|
|||||||
Reference in New Issue
Block a user