Prepare sensitivity dependencies once per recorded operation

This commit is contained in:
2026-10-27 03:18:55 +00:00
parent b281adb751
commit fb71421956
5 changed files with 89 additions and 40 deletions

View File

@@ -27,7 +27,9 @@ func TestSensitivityCandidatesMergeRepeatedParsedPaths(t *testing.T) {
})
}
}
candidates := builder.freeze().sensitivityCandidates()
model := builder.freeze()
_, inherited := model.sensitivityDependencies()
candidates := model.sensitivityCandidates(inherited)
for _, path := range []Path{key, index, parsed, dependency} {
count := 0
for _, candidate := range candidates {
@@ -236,19 +238,20 @@ func TestHistoryModelFinalizesLocationAndSensitivityWithoutRetainingInventoryTre
t.Fatalf("latest historical location = %#v, %v", got, ok)
}
candidates := model.sensitivityCandidates()
var sawCandidate bool
dependencies, inherited := model.sensitivityDependencies()
candidates := model.sensitivityCandidates(inherited)
var sawCandidate, sawDependency bool
for _, candidate := range candidates {
if !sameConcreteHistoryPath(candidate.path, keyPath) || !candidate.sensitive || len(candidate.dependencies) == 0 {
continue
if sameConcreteHistoryPath(candidate.path, keyPath) && candidate.sensitive {
sawCandidate = true
}
if len(candidate.dependencies) != 1 || candidate.dependencies[0].String() != dependency.String() {
t.Fatalf("sensitivity dependencies = %#v", candidate.dependencies)
if slices.Equal(candidate.path.segments, dependency.segments) && candidate.classify {
sawDependency = true
}
sawCandidate = true
}
if !sawCandidate {
t.Fatal("sensitivity candidate omitted the concrete historical path")
if !sawCandidate || !sawDependency || len(dependencies) != 1 ||
dependencies[0].target.String() != "/shape" || dependencies[0].dependency.String() != dependency.String() {
t.Fatal("sensitivity evidence omitted the concrete historical path or its recorded dependency")
}
}