Borrow lower collection policies during strict composition

This commit is contained in:
2026-10-25 22:59:03 +00:00
parent 68383f34de
commit 3a1b6ff355
5 changed files with 169 additions and 29 deletions

View File

@@ -129,7 +129,7 @@ func TestPendingItemCompositionAppliesOuterApplicationIdentityConstraints(t *tes
}
}
func TestReplacingOuterCollectionRetiresDiscardedItemIdentity(t *testing.T) {
func TestStrictCompositionDoesNotCopyDiscardedItemPolicy(t *testing.T) {
t.Parallel()
outerPath := Keys("items")
@@ -148,9 +148,27 @@ func TestReplacingOuterCollectionRetiresDiscardedItemIdentity(t *testing.T) {
if len(diagnostics) != 0 {
t.Fatalf("compose replacement: %#v", diagnostics)
}
policy, ok := composed.collectionPolicies.at(nestedPath)
if !ok || policy.identityPresent || len(policy.recordOrder) != 0 {
t.Fatalf("discarded nested owner policy = %#v, %v", policy, ok)
if _, ok := composed.collectionPolicies.at(nestedPath); ok {
t.Fatal("strict composition copied an unclaimed nested policy into its sparse result")
}
policy, ok := lower.at(nestedPath)
if !ok || !policy.identityPresent || len(policy.recordOrder) != 0 {
t.Fatalf("borrowed lower nested policy changed during composition: %#v, %v", policy, ok)
}
assembly := newAssemblyAccumulator(&composedDocument{
root: parseItemPolicyDocument(t, "lower", "items:\n - prompts:\n - id: old\n"),
collectionPolicies: lower,
origins: make(map[string]Origin),
})
if _, diagnostics := assembly.applyOverlayWithCollectionProjection(
input, nil, composed.collectionPolicies, nil, LayerOverlay, sequencePolicy{}, declarations,
); len(diagnostics) != 0 {
t.Fatalf("apply replacement to complete lower assembly: %#v", diagnostics)
}
assembledPolicy, ok := assembly.current.collectionPolicies.at(nestedPath)
if !ok || assembledPolicy.identityPresent || len(assembledPolicy.recordOrder) != 0 {
t.Fatalf("complete assembly retained discarded nested policy: %#v, %v", assembledPolicy, ok)
}
}