Skip to content

Hold the lattice to the temporal types MEOS admits - #112

Merged
estebanzimanyi merged 1 commit into
MobilityDB:masterfrom
estebanzimanyi:test/every-temporal-type-has-a-leaf-class
Sep 1, 2026
Merged

Hold the lattice to the temporal types MEOS admits#112
estebanzimanyi merged 1 commit into
MobilityDB:masterfrom
estebanzimanyi:test/every-temporal-type-has-a-leaf-class

Conversation

@estebanzimanyi

Copy link
Copy Markdown
Member

temporal_type() admits 20 user-facing types; the lattice's leaves model 14.
Six have no leaf class — T_TH3INDEX, T_TQUADBIN, T_TS2CELL,
T_TPOSECHAIN, T_TPCPOINT, T_TPCPATCH — so the object model cannot express
them and a binding projected from it reaches those values only through the flat
C surface.

The gate already here could not see it. Its assertions hold each node to its own
predicate, which passes whether or not a type has a class at all: the root's
membership comes from temporal_type() and already names T_TPOSECHAIN, while
nothing asked which types a LEAF claims. Coverage is a different question from
membership, and only the second was being asked.

_UNMODELLED records the six as a RATCHET rather than a permission. The
assertion compares against it exactly, so a newly uncovered type fails the
suite, and giving one of these a class fails it too until its entry goes — the
gap can neither grow nor close unnoticed. Both directions are exercised:
removing an entry fails, and a leaf that stops claiming its type fails.

A type claimed by two leaves fails as well, since two classes for one type is an
ambiguity the projection cannot resolve.

What the six need is not uniform. T_TPOSECHAIN sits beside TPose, and the
point-cloud pair beside the other spatial leaves. The three cell-index families
are one question rather than three: H3, quadbin and S2 are the same kind of
thing, a temporal value over a discrete global grid, and whether they share an
abstract parent the way TPoint groups TGeomPoint and TGeogPoint is a
taxonomy decision for the model's owner. The comment says so where the next
reader will meet it.

`temporal_type()` admits 20 user-facing types; the lattice's leaves model 14.
Six have no leaf class — `T_TH3INDEX`, `T_TQUADBIN`, `T_TS2CELL`,
`T_TPOSECHAIN`, `T_TPCPOINT`, `T_TPCPATCH` — so the object model cannot express
them and a binding projected from it reaches those values only through the flat
C surface.

The gate already here could not see it. Its assertions hold each node to its own
predicate, which passes whether or not a type has a class at all: the root's
membership comes from `temporal_type()` and already names `T_TPOSECHAIN`, while
nothing asked which types a LEAF claims. Coverage is a different question from
membership, and only the second was being asked.

`_UNMODELLED` records the six as a RATCHET rather than a permission. The
assertion compares against it exactly, so a newly uncovered type fails the
suite, and giving one of these a class fails it too until its entry goes — the
gap can neither grow nor close unnoticed. Both directions are exercised:
removing an entry fails, and a leaf that stops claiming its type fails.

A type claimed by two leaves fails as well, since two classes for one type is an
ambiguity the projection cannot resolve.

What the six need is not uniform. `T_TPOSECHAIN` sits beside `TPose`, and the
point-cloud pair beside the other spatial leaves. The three cell-index families
are one question rather than three: H3, quadbin and S2 are the same kind of
thing, a temporal value over a discrete global grid, and whether they share an
abstract parent the way `TPoint` groups `TGeomPoint` and `TGeogPoint` is a
taxonomy decision for the model's owner. The comment says so where the next
reader will meet it.
@estebanzimanyi
estebanzimanyi merged commit 9562b7d into MobilityDB:master Sep 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant