The client-side twin of the SQL containment predicate, and the reason no consumer should
reinvent this with startsWith: matching a bare prefix would report twin~twin:XY as living
under twin~twin:X. Because no id may contain ~, ., / or @, a prefix followed by one of
those delimiters is always a true boundary.
Four arms, in two pairs. = and @ name the same entity, unpinned or pinned at a version;
. and / name things inside it. The chained-descendant arm is dropped when the ancestor
itself carries a path, because a path has no chained descendants by construction -- without that,
a stored .../layers/Plan 1.dwg would answer a query for .../layers/Plan 1.
Whether
referenceisancestoror lies under it.The client-side twin of the SQL containment predicate, and the reason no consumer should reinvent this with
startsWith: matching a bare prefix would reporttwin~twin:XYas living undertwin~twin:X. Because no id may contain~,.,/or@, a prefix followed by one of those delimiters is always a true boundary.Four arms, in two pairs.
=and@name the same entity, unpinned or pinned at a version;.and/name things inside it. The chained-descendant arm is dropped when the ancestor itself carries a path, because a path has no chained descendants by construction -- without that, a stored.../layers/Plan 1.dwgwould answer a query for.../layers/Plan 1.