eval: regression in closedness handling with disjunctions #3706
Open
Description
What version of CUE are you using (cue version
)?
$ cue version cue version v0.0.0-20250128173939-870bfc2bb495 go version go1.23.2 -buildmode exe -compiler gc DefaultGODEBUG asynctimerchan=1,gotypesalias=0,httpservecontentkeepheaders=1,tls3des=1,tlskyber=0,x509keypairleaf=0,x509negativeserial=1 CGO_ENABLED 1 GOARCH arm64 GOOS linux GOARM64 v8.0 vcs git vcs.revision 870bfc2bb495f05faed7c65ec51109b9eed1762c vcs.time 2025-01-28T17:39:39Z vcs.modified false cue.lang.version v0.12.0
Does this issue reproduce with the latest release?
Yes
What did you do?
# evalv2
env CUE_EXPERIMENT=evalv3=0
exec cue vet -c -d '#site' schema.cue site.json
# evalv3
env CUE_EXPERIMENT=evalv3=1
exec cue vet -c -d '#site' schema.cue site.json
-- schema.cue --
package preprocessor
#site: {
_kind: {
kind!: string
}
#sanitiser: _kind & (#patternSanitiser | #ellipsisSanitiser)
#comparator: _kind & (#patternComparator | #unstableLineOrderComparator)
#patternSanitiser: {
kind: "patternSanitiser"
pattern?: string
}
#patternComparator: {
kind: "patternComparator"
pattern?: string
}
#ellipsisSanitiser: {
kind: "ellipsisSanitiser"
}
#unstableLineOrderComparator: {
kind: "unstableLineOrderComparator"
}
sanitiser?: #sanitiser
comparator?: #comparator
}
-- site.json --
{
"comparator": {
"kind": "patternComparator",
"pattern": "expr"
},
"sanitiser": {
"kind": "patternSanitiser",
"pattern": "expr"
}
}
What did you expect to see?
Passing test.
What did you see instead?
# evalv2 (0.453s)
# evalv3 (0.451s)
> env CUE_EXPERIMENT=evalv3=1
> exec go run cuelang.org/go/cmd/cue vet -c -d '#site' schema.cue site.json
[stderr]
sanitiser: 2 errors in empty disjunction:
sanitiser.kind: conflicting values "ellipsisSanitiser" and "patternSanitiser":
./schema.cue:22:9
./site.json:7:13
sanitiser.pattern: field not allowed:
./site.json:8:5
exit status 1
[exit status 1]
FAIL: /tmp/testscript2499769875/repro.txtar/script.txtar:10: unexpected command failure
This bisects to 45e3256