Catalog identified record sequences as future work
This commit is contained in:
96
docs/roadmap/future.md
Normal file
96
docs/roadmap/future.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# Potential Future Features
|
||||
|
||||
This document lists potential enhancements for consideration in future ConfigKit
|
||||
releases. Entries are not accepted contracts, implementation plans, or release
|
||||
commitments. [Deferred scope](deferred.md) remains the owner of current exclusions;
|
||||
adopting a candidate requires an explicit design decision and a separate plan.
|
||||
|
||||
## 1. Identified record sequences
|
||||
|
||||
Status: deferred. PromptKit proposed this capability from its retired proposal 2,
|
||||
**Namespaced Collections As Identified Records**. The original proposal is in the
|
||||
PromptKit repository at
|
||||
`b5866dd:docs/roadmap/configuration-collections-identified-records.md`.
|
||||
PromptKit selected mounted mappings instead; this feature is not a dependency
|
||||
of that design or a request to restore multiple installed prompt versions.
|
||||
|
||||
### Motivation and proposed behavior
|
||||
|
||||
Allow applications to declare that selected sequences contain records identified
|
||||
by explicit fields, while retaining sequence-shaped output for slice decoding
|
||||
and effective YAML. This could make composite identities and independently
|
||||
authored catalogs more convenient than encoding identity in nested mapping keys.
|
||||
Current [composition](../config.md#strict-document-composition) and
|
||||
[overlay](../config.md#selected-overlays) treat sequences atomically.
|
||||
|
||||
The proposed opt-in registration belongs in the reusable application definition:
|
||||
an exact effective sequence path after input/import placement, plus an ordered,
|
||||
nonempty set of distinct direct string-field names. For example, records at
|
||||
`profiles` could be identified by `(namespace, id)`. Records `(provider, brief)`
|
||||
and `(application, brief)` would coexist, and a later layer could update the
|
||||
provider record's temperature while retaining its backend and model.
|
||||
|
||||
The requested semantics, all still subject to design review, are:
|
||||
|
||||
- Match exact string tuples, preserving component boundaries and spelling,
|
||||
including empty strings. Every contribution supplies its complete identity;
|
||||
defaults, inheritance, filenames, and normalization do not supply it.
|
||||
- Retain distinct identities. Matching records from strict peers recursively
|
||||
compose disjoint body fields and conflict on overlapping non-mapping body
|
||||
values, even equal values. Equal identity fields act as structural keys rather
|
||||
than conflicts and retain their contributing source evidence.
|
||||
- Higher layers recursively overlay matching bodies. A changed identity denotes
|
||||
a different record, not a rename. Proposed ordering is first contribution in
|
||||
precedence-assembly order; matching records keep position and new ones append.
|
||||
- Reject malformed identities, non-mapping records, non-null non-sequence values
|
||||
at registered paths, and duplicate tuples within one source sequence. Later
|
||||
layers cannot repair malformed structural identity in an acquired contribution.
|
||||
- Treat an empty registered sequence as contributing no records; whole-path null
|
||||
retains ordinary conflict/replacement semantics. Unregistered sequences,
|
||||
including nested message lists, retain existing atomic behavior.
|
||||
- Support record inheritance within the same registered sequence using an
|
||||
`extends` mapping containing the complete parent tuple. Resolve only final
|
||||
active relationships after precedence, preserve the child's identity, overlay
|
||||
its body on the parent's body, and consume the directive before decoding.
|
||||
Preserve cancellation, missing-parent/cycle errors, and declaring resource
|
||||
contexts. Existing string-based mapping-sibling inheritance stays unchanged.
|
||||
|
||||
Integrate ordinary and layered loads, imports, mounted paths, selected overlays,
|
||||
and whole-sequence CLI overrides. Keep origins, presence, history, sensitivity,
|
||||
and resource contexts attached to the correct record despite different source
|
||||
and final indexes. Diagnostics must retain source locations without exposing
|
||||
sensitive identity values. Final inspection may use snapshot-specific sequence
|
||||
indexes; existing atomic sequence diffs need not become identity-aware.
|
||||
|
||||
Successful results would have valid, unique identities, including after defaults
|
||||
and application resolution, without a second merge or inheritance pass. Existing
|
||||
source-version checks remain independent; consumed headers cannot supply missing
|
||||
record identities. No identity-selector path syntax, arbitrary merge callbacks,
|
||||
wildcard registration, per-record deletion/rename operator, multiple inheritance,
|
||||
or cross-path parent references are requested.
|
||||
|
||||
### Questions to resolve before implementation
|
||||
|
||||
- **Need and delivery scope:** does an active consumer benefit enough to justify
|
||||
the added semantics over keyed mappings? Are composite identities required?
|
||||
Staging composition before inheritance is possible but would leave part of
|
||||
the request incomplete.
|
||||
- **Defaults and callbacks:** do default records merge by identity or retain
|
||||
existing sequence-replacement behavior? How are callback-created duplicates,
|
||||
identity edits, and reordering validated and reflected in provenance?
|
||||
- **Null, empty, and order:** what happens when null clears a collection and a
|
||||
later layer reintroduces records? How do absent and explicitly empty sequences
|
||||
interact with defaults and first-contribution order?
|
||||
- **Inheritance references:** how do peers compose relationship declarations,
|
||||
and how are complete references enforced without assembling partial tuples
|
||||
accidentally? What happens if identity fields overlap structural controls?
|
||||
- **Registration paths:** how do overlapping registrations and paths beneath
|
||||
sequence indexes behave when assembly changes those indexes?
|
||||
- **Evidence and lifecycle:** how are record identities mapped between source
|
||||
trees, history, inheritance, callback snapshots, and final indexes without
|
||||
mixing records' provenance or sensitivity? Where do identity checks run relative
|
||||
to header consumption and other structural processing?
|
||||
|
||||
Keep the feature deferred until its consumer value and full lifecycle design
|
||||
justify reconsidering the sequence-merging exclusion. A correct final sequence
|
||||
alone would not establish correct inspection or disclosure behavior.
|
||||
Reference in New Issue
Block a user