30-second answer
Yes, on one side of the comparison. Evidence collection is monotonic: collecting more can add to what was seen and never remove it. A collector that stopped at 20,000 items saw at least 20,000, so "is the count above 10,000?" is already settled, while "is it below 50,000?" is not.
What this proves
A partial count is a lower bound, and a lower bound decides every comparison that only needs the low side. Against a threshold, one side of each operator is final the moment the bound crosses it.
What it does not prove
- The exact value. A lower bound of 20,000 is compatible with 20,001 and with two million.
- Anything on the open side. Without an upper bound, "fewer than X" can never be concluded from partial evidence, no matter how thorough the partial collection felt. A tool that concludes it is guessing.
PowerShell
# A site owner list that includes one unexpanded group:
# 1 named person + 1 group of unknown size
$namedPeople = 1
$unexpandedGroups = 1
$atLeast = $namedPeople + $unexpandedGroups # every group holds >= 1 principal
if ($atLeast -ge 2) { "at least $atLeast owners: the two-owner rule passes" }
else { "cannot conclude: expansion needed" }Example output
at least 2 owners: the two-owner rule passesExplanation
The example is the real case. A rule requiring two owners can pass on a site with one person and one unexpanded group, because whatever the group holds, the total is at least two. The same evidence can never make the rule fail: failing needs "fewer than two", which needs an upper bound, which partial expansion does not provide. This split, provable pass on one side and honest unknown on the other, is what separates reasoning from optimism when the data is incomplete.
The engine writes this discipline down as a per-operator table and executes the table as tests, one case per cell, because a published table that never runs is a promise, not a property. Evidence is monotonic (more collection can only add), so decidability depends on which side of the operator the bound sits: for greater-than, a lower bound can prove pass and can never prove fail; for not-contains, the known part can prove fail and never pass; equality decides nothing unless the value is single and fully observed. The worked case from the engine's own scope walk: a partial count of "at least 6,100 unique scopes" fails the documented recommendation of 5,000 and is unknown against the hard ceiling of 50,000. One bound, two rules, two different honest answers.
The other half of honesty is the coverage record. A capped or refused
walk lands in the run's coverage.unavailable with its reason, and a
fact that stopped early is partial with a bound, never a number
presented as complete. A refusal is a coverage fact, not a gap.
Production considerations
- Record bounds as bounds. The moment a partial count is stored as a plain number, the next reader treats it as exact and the reasoning above silently breaks.
- Equality can never be decided from a bound alone; only ordered comparisons have a decidable side.
- State why the collection stopped (throttling, permission, page limit); the reason determines whether collecting more is possible at all.
Related governance rules
SPO-SITE-001: at least two owners, evaluated over bounds
References
- Bounded evaluation, in the architecture (m365-governance-as-code)
- SharePoint limits (Microsoft Learn)