declared full-source and chapter sets must be non-conflicting subsets of target sets for declared-basis matches

string values and JSON array values are normalized into sorted sets; other types are ignored

pass only when candidate registry project/run lineage has a full-source sha match and no conflicting declared full-source sha set, or the registry declares a non-empty full-source or chapter sha set that is a subset of the corresponding target sha set

then each ancestor directory up to 4 ancestors

in each directory, exact filenames are checked before lexicographically sorted suffix matches