Audit sequence identity scaling and lifecycle

This commit is contained in:
2026-10-23 22:03:16 +00:00
parent e01aeca761
commit 0be7cdb00e
4 changed files with 79 additions and 5 deletions

View File

@@ -232,6 +232,7 @@ code changes. Use the component overview to find the corresponding implementatio
| Effective configuration diff | [Engine comparison and masking tests](../internal/engine/diff_test.go), [engine operation tests](../internal/engine/diff_operation_test.go), [root facade tests](../facade_diff_test.go), and [consumer examples](../examples/consumers/diff_test.go) | `go test ./internal/engine -run 'Diff|Explain|History|Secret|Independent'`, `go test . -run 'Diff|FacadeInspection|PublicFacadeBoundary|DependencyImportBoundary'`, `go test ./examples/consumers`, and `go test . -run '^ExampleDiff$'` | | Effective configuration diff | [Engine comparison and masking tests](../internal/engine/diff_test.go), [engine operation tests](../internal/engine/diff_operation_test.go), [root facade tests](../facade_diff_test.go), and [consumer examples](../examples/consumers/diff_test.go) | `go test ./internal/engine -run 'Diff|Explain|History|Secret|Independent'`, `go test . -run 'Diff|FacadeInspection|PublicFacadeBoundary|DependencyImportBoundary'`, `go test ./examples/consumers`, and `go test . -run '^ExampleDiff$'` |
| Consumer examples and migration fixtures | [Consumer tests](../examples/consumers/consumers_test.go), [native, layered, and ordinary relative-import examples](../examples/consumers/layered_test.go), [mounted collection examples](../examples/consumers/destinations_test.go), [API examples](../example_test.go) | `go test ./examples/consumers` and `go test . -run '^Example'` | | Consumer examples and migration fixtures | [Consumer tests](../examples/consumers/consumers_test.go), [native, layered, and ordinary relative-import examples](../examples/consumers/layered_test.go), [mounted collection examples](../examples/consumers/destinations_test.go), [API examples](../example_test.go) | `go test ./examples/consumers` and `go test . -run '^Example'` |
| Assembly and layered scaling evidence | [Assembly benchmarks](../internal/engine/assembly_bench_test.go), [layered benchmarks](../internal/engine/underlay_bench_test.go) | `go test ./internal/engine -run '^$' -bench '^BenchmarkUnderlay' -benchmem`; repeat with `^BenchmarkCompose` and `^BenchmarkOverlay` | | Assembly and layered scaling evidence | [Assembly benchmarks](../internal/engine/assembly_bench_test.go), [layered benchmarks](../internal/engine/underlay_bench_test.go) | `go test ./internal/engine -run '^$' -bench '^BenchmarkUnderlay' -benchmem`; repeat with `^BenchmarkCompose` and `^BenchmarkOverlay` |
| Identified-sequence scaling evidence | [Mixed-upsert benchmark](../internal/engine/sequence_combine_bench_test.go) | `go test ./internal/engine -run '^$' -bench '^BenchmarkSequenceMixedUpsert$' -benchmem` |
| Inheritance scaling evidence | [Expansion benchmarks](../internal/engine/inheritance_bench_test.go) | `go test ./internal/engine -run '^$' -bench '^BenchmarkInheritance' -benchmem` | | Inheritance scaling evidence | [Expansion benchmarks](../internal/engine/inheritance_bench_test.go) | `go test ./internal/engine -run '^$' -bench '^BenchmarkInheritance' -benchmem` |
| Documentation links and dependency isolation | [Link checks](../documentation_test.go), [import boundary](../import_boundary_test.go), [public boundary](../public_boundary_test.go) | `go test . -run 'TestLocalDocumentationLinks\|TestDependencyImportBoundary\|TestPublicFacadeBoundary'` | | Documentation links and dependency isolation | [Link checks](../documentation_test.go), [import boundary](../import_boundary_test.go), [public boundary](../public_boundary_test.go) | `go test . -run 'TestLocalDocumentationLinks\|TestDependencyImportBoundary\|TestPublicFacadeBoundary'` |
| Development check behavior | [Development checker test](../development_check_test.go) | `go test . -run '^TestDevelopmentCheckHandlesFilenamesAndStopsOnFailure$'` | | Development check behavior | [Development checker test](../development_check_test.go) | `go test . -run '^TestDevelopmentCheckHandlesFilenamesAndStopsOnFailure$'` |

View File

@@ -1,6 +1,6 @@
# Sequence Identity And Combination Implementation Plan # Sequence Identity And Combination Implementation Plan
Status: implementation in progress; Stages 1–29 complete. Status: all thirty stages complete.
Audience: a Luna coding agent implementing one numbered stage per prompt, in Audience: a Luna coding agent implementing one numbered stage per prompt, in
order. This plan starts at commit order. This plan starts at commit
@@ -1031,6 +1031,37 @@ from Stages 28–29 if their covered content is unchanged. Record completed scop
validation, benchmark commands/qualitative findings, and any real remaining validation, benchmark commands/qualitative findings, and any real remaining
issues accurately. No new timing thresholds or release gates are introduced. issues accurately. No new timing thresholds or release gates are introduced.
**Completion:** Audited the shared indexed sequence-combination and identity
validation paths, declaration gathering, numeric normalization, ownership and
selector-path handling, adapters, dependencies, boundaries, and limits. Removed
per-declaration temporary-slice allocation while retaining detached declaration
ownership. Added a mixed-size identified-sequence upsert benchmark because the
existing assembly benchmarks did not exercise this path. Its allocations grew
roughly in proportion to record count from 128 to 2,048 records; elapsed times
were similarly proportional in this short run and are descriptive only.
Benchmark command:
```sh
go test ./internal/engine -run '^$' -bench '^(BenchmarkComposeWideMappings|BenchmarkUnderlay(BroadCatalog|ManySmallTiers)|BenchmarkOverlay(RecursiveMappings|ManyApplications)|BenchmarkInheritance(Expansion|IndependentScopes)|BenchmarkSequenceMixedUpsert)$' -benchmem -benchtime=100ms
```
The benchmark reported mixed-upsert results of 278,009 B and 2,337 allocations
per operation at 128 records; 1,122,177 B and 9,253 allocations at 512; and
4,521,839 B and 36,925 allocations at 2,048. No thresholds are implied. The
code review found shared combination and identity algorithms, indexed matching
and mapping access, declaration grouping by destination, coefficient/exponent
numeric normalization without magnitude expansion, operation-local ownership
and selector traversal, no remaining early-CLI adapter, and no newly introduced
dependencies, public internal types, background work, release machinery, or
sequence-specific resource limits. Obsolete registration names remain only in
historical or roadmap text.
Verified with `./scripts/check.sh`, `go test -race ./...`,
`go test . -run 'TestLocalDocumentationLinks|TestDependencyImportBoundary|TestPublicFacadeBoundary' -count=1`,
`git diff --check`, and the benchmark command above. No remaining implementation
issues were found.
Acceptance: all roadmap operations and lifecycle boundaries work through ordinary Acceptance: all roadmap operations and lifecycle boundaries work through ordinary
and layered loads; values and inspection agree; application constraints hold on and layered loads; values and inspection agree; application constraints hold on
successful final results; deferred behavior and YAML-only guarantees have not successful final results; deferred behavior and YAML-only guarantees have not

View File

@@ -812,11 +812,11 @@ func (s *importTraversal) composePendingItems(scope *acquisitionScope, policy se
func acquiredSequenceDeclarations(scope acquisitionScope) []sequenceDeclarationSpec { func acquiredSequenceDeclarations(scope acquisitionScope) []sequenceDeclarationSpec {
var declarations []sequenceDeclarationSpec var declarations []sequenceDeclarationSpec
for _, contribution := range scope.contributions { for _, contribution := range scope.contributions {
for _, declaration := range contribution.sequenceDeclarations { projected := cloneSequenceDeclarations(contribution.sequenceDeclarations)
projected := cloneSequenceDeclarations([]sequenceDeclarationSpec{declaration})[0] for index := range projected {
projected.destination = appendDestination(contribution.relativeDestination, declaration.destination) projected[index].destination = appendDestination(contribution.relativeDestination, projected[index].destination)
declarations = append(declarations, projected)
} }
declarations = append(declarations, projected...)
} }
return declarations return declarations
} }

View File

@@ -0,0 +1,42 @@
package engine
import (
"strconv"
"testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document"
)
func BenchmarkSequenceMixedUpsert(b *testing.B) {
for _, size := range []int{128, 512, 2048} {
b.Run(strconv.Itoa(size), func(b *testing.B) {
lower := benchmarkSequenceRecords(0, size, "lower")
higher := benchmarkSequenceRecords(size/2, size, "higher")
context := sequenceCombinationContext{destination: Keys("items")}
identityFields := []string{"id"}
b.ReportAllocs()
b.ResetTimer()
for range b.N {
if _, diagnostics := combineIdentifiedSequences(
lower, higher, sequenceModeUpsert, identityFields, context,
); len(diagnostics) != 0 {
b.Fatal(diagnostics)
}
}
})
}
}
func benchmarkSequenceRecords(start, count int, value string) *document.Node {
items := make([]*document.Node, count)
for index := range count {
items[index] = &document.Node{
Kind: document.Mapping,
Mapping: []document.Entry{
{Key: "id", Value: &document.Node{Kind: document.String, Text: "item-" + strconv.Itoa(start+index)}},
{Key: "value", Value: &document.Node{Kind: document.String, Text: value}},
},
}
}
return &document.Node{Kind: document.Sequence, Sequence: items}
}