Clarify import candidate identity, accounting, and inspection
This commit is contained in:
@@ -123,7 +123,7 @@ interfaces, without adopting all their spellings, defaults, or matching modes.
|
|||||||
|
|
||||||
OD-1 (recursion default), OD-2 (matching and selector expressiveness), OD-3
|
OD-1 (recursion default), OD-2 (matching and selector expressiveness), OD-3
|
||||||
(directive validation), OD-4 (discovery boundaries and cycles), OD-5 (policy
|
(directive validation), OD-4 (discovery boundaries and cycles), OD-5 (policy
|
||||||
precedence), and OD-6 (absent-import evidence) are settled in the sections below.
|
precedence), and OD-6 (no-selection evidence) are settled in the sections below.
|
||||||
Supplying `depth` requires effective recursion to be enabled, including when
|
Supplying `depth` requires effective recursion to be enabled, including when
|
||||||
enabled through an application default. This supersedes the earlier direction
|
enabled through an application default. This supersedes the earlier direction
|
||||||
to accept but ignore depth when recursion is disabled.
|
to accept but ignore depth when recursion is disabled.
|
||||||
@@ -263,6 +263,12 @@ preserve each resolver's domain-specific admissibility and combination rules.
|
|||||||
Recursion changes which directories are visited; it does not change what `*`
|
Recursion changes which directories are visited; it does not change what `*`
|
||||||
means. A nonrecursive search considers only files directly inside `dir`.
|
means. A nonrecursive search considers only files directly inside `dir`.
|
||||||
|
|
||||||
|
Filename filters use the candidate name supplied by the declaration or
|
||||||
|
encountered during discovery, not the canonical symlink target's basename.
|
||||||
|
For example, a symlink named `welcome.draft.yaml` matches
|
||||||
|
`exclude: '*.draft.yaml'` even if its target is named `welcome.yaml`. This
|
||||||
|
selection rule does not change canonical source identity or containment checks.
|
||||||
|
|
||||||
**OD-2: settled.** Use the existing case-sensitive Go `path.Match` wildcard
|
**OD-2: settled.** Use the existing case-sensitive Go `path.Match` wildcard
|
||||||
grammar for filename filters. When neither the declaration nor the application
|
grammar for filename filters. When neither the declaration nor the application
|
||||||
supplies `pattern`, select all filenames, with no implicit extension restriction.
|
supplies `pattern`, select all filenames, with no implicit extension restriction.
|
||||||
@@ -305,6 +311,14 @@ existing repeated-source and alias checks still apply to distinct inclusion
|
|||||||
routes. In particular, it does not authorize silently merging separate alias
|
routes. In particular, it does not authorize silently merging separate alias
|
||||||
paths to an imported source.
|
paths to an imported source.
|
||||||
|
|
||||||
|
For declaration-local deduplication, identify a candidate by its normalized path
|
||||||
|
within its source namespace, before resolving symlinks. Compare paths relative
|
||||||
|
to the same namespace rather than relative to each search root. Overlapping
|
||||||
|
searches that encounter `prompts/welcome.yaml` therefore select it once, while
|
||||||
|
distinct symlink paths remain distinct candidates subject to the existing
|
||||||
|
canonical-source repeat checks. This candidate identity is separate from the
|
||||||
|
canonical identity used when accepting sources.
|
||||||
|
|
||||||
For `path`, `required: true` requires every listed file to be present. For `dir`,
|
For `path`, `required: true` requires every listed file to be present. For `dir`,
|
||||||
it requires at least one selected file across the complete union after
|
it requires at least one selected file across the complete union after
|
||||||
exclusions; it does not require a match per directory, pattern, or pair. A
|
exclusions; it does not require a match per directory, pattern, or pair. A
|
||||||
@@ -333,6 +347,29 @@ Excluding a candidate is not permission to suppress discovery, containment,
|
|||||||
or resource-limit errors. Exclusions are local to the declaration; they do not
|
or resource-limit errors. Exclusions are local to the declaration; they do not
|
||||||
prohibit another declaration from explicitly selecting the same filename.
|
prohibit another declaration from explicitly selecting the same filename.
|
||||||
|
|
||||||
|
### Resource Accounting
|
||||||
|
|
||||||
|
Retain the existing resource limits, with an explicit adjustment to candidate
|
||||||
|
accounting for the new selection operations:
|
||||||
|
|
||||||
|
- Every examined directory entry consumes the discovery visit budget, including
|
||||||
|
nonmatches and excluded entries. A small selected set does not authorize an
|
||||||
|
unbounded scan.
|
||||||
|
- Check distinct selected candidates against the remaining source allowance
|
||||||
|
after declaration-local deduplication and exclusions. Overlapping patterns
|
||||||
|
and search roots do not charge the same selected candidate more than once
|
||||||
|
within a declaration; excluded candidates do not consume source allowance.
|
||||||
|
- Excluded files are not read for content and consume no content-reading
|
||||||
|
allowance. Existing byte limits continue to govern selected sources.
|
||||||
|
|
||||||
|
The current glob implementation checks candidate counts against the remaining
|
||||||
|
source allowance during expansion. Update that accounting to use the filtered,
|
||||||
|
deduplicated selection; do not reject an otherwise valid search solely because
|
||||||
|
its positive matches exceed that allowance before exclusions are applied.
|
||||||
|
Discovery limits still apply throughout the search. This is not global source
|
||||||
|
deduplication and does not suppress repeated-source errors across declarations
|
||||||
|
or distinct aliases.
|
||||||
|
|
||||||
### Recursive Discovery And Depth Limits
|
### Recursive Discovery And Depth Limits
|
||||||
|
|
||||||
Enable recursion explicitly or through an application default for recursive
|
Enable recursion explicitly or through an application default for recursive
|
||||||
@@ -368,12 +405,10 @@ default enables recursion, but invalid with the library default. Explicit
|
|||||||
supplied depth invalid. Depth must also have the valid type and range defined
|
supplied depth invalid. Depth must also have the valid type and range defined
|
||||||
under directive validation; enabling recursion does not excuse malformed depth.
|
under directive validation; enabling recursion does not excuse malformed depth.
|
||||||
|
|
||||||
Recursive discovery must fit the existing filesystem containment,
|
Recursive discovery must retain the existing filesystem containment and
|
||||||
repeated-source, and load-budget
|
repeated-source contracts and follow the resource accounting defined above.
|
||||||
contracts rather than silently changing them. In particular, examined entries,
|
The discovery visit budget remains separate from the caller-selected depth
|
||||||
including nonmatches, still consume the visit budget; a small number of matches
|
bound and still applies to unlimited-depth searches.
|
||||||
does not authorize an unbounded filesystem scan. This is an existing ConfigKit
|
|
||||||
constraint, not a new Ansible-derived decision.
|
|
||||||
|
|
||||||
### Symlinks And Hidden Entries
|
### Symlinks And Hidden Entries
|
||||||
|
|
||||||
@@ -589,18 +624,29 @@ add options that override explicit declarations as part of this work without a
|
|||||||
separate concrete requirement and scope decision. The fields' applicability to
|
separate concrete requirement and scope decision. The fields' applicability to
|
||||||
each selector is defined under directive validation.
|
each selector is defined under directive validation.
|
||||||
|
|
||||||
## Evidence For Absent Optional Imports
|
## Evidence For Optional Declarations With No Selection
|
||||||
|
|
||||||
**OD-6: settled.** Record minimal structured inspection evidence when an
|
**OD-6: settled.** Record minimal structured inspection evidence when an
|
||||||
optional declaration selects nothing: its declaring source/location, selector,
|
optional declaration selects nothing: its declaring source/location, selector,
|
||||||
and absent outcome. Emit no warning by default and do not fabricate a
|
and no-selection outcome. Emit no warning by default and do not fabricate a
|
||||||
loaded-source record. This keeps optional contributions quiet during ordinary
|
loaded-source record. This keeps optional contributions quiet during ordinary
|
||||||
use while allowing applications to explain omissions during troubleshooting.
|
use while allowing applications to explain omissions during troubleshooting.
|
||||||
|
|
||||||
|
No selection does not necessarily mean a source was missing. It may result from
|
||||||
|
missing sources or no positive matches, an explicit empty list, or exclusions
|
||||||
|
removing every candidate. The inspection record must not describe deliberate
|
||||||
|
exclusion or an empty list as missing files.
|
||||||
|
|
||||||
|
This evidence is scoped to the whole declaration. An optional `path` list with
|
||||||
|
one selected file and one missing file does not produce this no-selection
|
||||||
|
record. Per-entry evidence for partial omissions is outside this feature's
|
||||||
|
scope; no additional exclusion audit is required.
|
||||||
|
|
||||||
Decide the exact inspection record shape during implementation planning,
|
Decide the exact inspection record shape during implementation planning,
|
||||||
reusing existing structures where appropriate and retaining existing inspection
|
reusing existing structures where appropriate and retaining existing inspection
|
||||||
contracts. Include ownership tests for the new evidence. This addition does
|
contracts. Include ownership tests for the new evidence. This addition does
|
||||||
not require applications to reconstruct absent-import provenance themselves.
|
not require applications to reconstruct declaration-level no-selection evidence
|
||||||
|
themselves.
|
||||||
|
|
||||||
## Release Boundary
|
## Release Boundary
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user