This is the agent-facing read vocabulary: getCounts, getRegions and isContentful
select by it, and the agent read tools (grep, the regions read) use the same words. It is deliberately distinct
from ICell.Content, the transfer vocabulary (clear, copyFrom) — "paste formats" is a
coarse transfer bucket, while querying wants the split parts (Fill, Border,
NumberFormat…). One enum serving both jobs is how the vocabulary got muddy the first time.
Members map onto the engine's per-feature spatial indexes. The mapping is internal and not
one-to-one: several features may project from one index (NumberFormat/Alignment/Font
over the content-style map). Notes joins when the backing is implemented; a feature that
silently reports nothing is worse than a missing one.
String/Number/Boolean are deliberately absent, even though they are real ScalarType
values. This vocabulary is for things with a spatial identity — a fill, a formula, an
occupied cell — and a scalar kind has none: it is read straight off the value, which is
exactly the one pass IRangeStats.getTypedCounts() already makes, richer (it composes with
aggregates and frequencies for free, in the same call). getCounts/getRegions/
isContentful were never the right vocabulary for "how many numbers" — range.getStats() is.
Error stays, for a reason unrelated to the above: it has real spatial identity of its own
(the reconciled error view) and partitions like any stored feature — it was never in the same
boat as the other three. DateFormat stays too, but as exactly what its name says: a
formatting predicate, the same tier as NumberFormat/Alignment/Font, not a value kind — it
answers "does this cell carry a date-category number format", nothing about what the value
underneath actually is. A caller after "how many cells are genuinely dates" (numeric value AND
that format) composes it: DateFormat regions intersected with getStats().getTypedCounts()'s
Number — there is deliberately no single feature that already does that intersection, because
"is this a date" is a computed fact about a cell's value, read through getInteropType(), not
a thing this vocabulary partitions on.
The public feature vocabulary — what a cell or range carries, as a queryable dimension.