the table to resolve against (defaults to CHANNEL_CONTRACT) — the same
injection point featureMatrixOf and persistedFactsOf carry, and it exists for one reason:
unsourced is the outcome for a fact the real contract no longer produces, so the only way
to prove the switch can still REACH it is to drive this same switch with a declaration shaped
like the gap. Without that a resolver that stopped returning unsourced would look exactly
like a contract with no gaps (control-bounds.test.ts, the shrink-only ledger's control).
Follow ChannelFactDecl.range for one fact (and, where the source is a table, one field) to the bounds a control draws with.
fieldis read by the TABLE sources (catalogLimits,coreLimits), whose travels are per field; the others bound the fact as a whole and ignore it.Total: every fact resolves to one of the five outcomes and none of them throws, so a caller cannot reach a number by accident.