TanStack

Content temporarily unavailable

Comparison unit retirement: non-finite default order

A source-isolated Field Lab loss audit compared comparison.test.ts with comparison-oracle.property.test.ts at frozen head f6857fee9de59dc82cbe596ca7df4a18152004ed. The receiver initially excluded NaN and invalid Dates and did not observe defaultComparator sorting. The audit froze the five blocks below before retirement. The remaining three unit tests cover symbol order and compareValues behavior at another entry point.

Retired assertionReceiving check
ascComparator(NaN, 5) is positive and the reverse is negative.Tagged finite and non-finite number pairs check both signs.
ascComparator(NaN, NaN) returns exact zero.Duplicate non-finite pairs check toBe(0), including the sign of zero.
Sorting [3, NaN, 1, 5, NaN] puts the finite values in order and both NaNs last.A fixed tagged history predicts every stable sorted row ID.
Sorting [5, NaN, null, 1] puts null first and NaN last.Fixed and generated histories combine optional null with non-finite values.
An invalid Date sorts after a valid 2023-01-01 Date in both directions.A fixed history preserves that day; generated valid epoch days and invalid Dates check both signs and sorted IDs.

Changelog #1582 promises PostgreSQL-style NaN and invalid-Date ordering. DEFAULT_COMPARE_OPTIONS and defaultComparator supply the default ascending, nulls-first path. The independent model receives tags for null, finite, and non-finite values; it compares tag rank and supplied finite values. It never uses production's unorderable classifier to predict a result. The driver calls ascComparator and sorts with defaultComparator. It checks direct signs and exact zeros at return, then compares every ordered row ID after sorting.

The generated grammar uses 1–5 distinct finite numbers or valid Dates in epoch-day range -20,000..20,000, one or two NaNs or invalid Dates, and optional null. Number and Date histories remain separate. Mixed number/Date order, Temporal values, symbols, other options, compareValues, and public query or index paths are outside this transfer.

Review and replay

The direct wrong-result control ties a non-finite value to a finite value and fails the sign check. A separate wrong-sort control ties NaN during sorting and fails the ordered-ID check. Fixed-seed and seedless campaigns share the same 100-case property. Direct property 23 replay at seed 20260911, path 0, passed.

The latest hostile reviewer read the retired unit blocks, ledger, model, production comparator, and coverage map. It found no lost assertion at the declared direct and sort checkpoints. The focused comparison suite passed 100 tests with no type errors. Earlier PR revisions explored cross-realm and long-byte behavior; those experiments are outside this transfer and are not claimed by this record.

Oracle guide boundary

The opening law and ledger state authority and limits (ORC-001). Tagged finite values and source ranks give an independent computation (ORC-002); the oracle places law, model, grammar, driver, observation, and checkpoint beside their code (ORC-003). Fixed operands reconstruct the five old blocks, and generated finite, duplicate non-finite, and null cases exercise nearby histories (ORC-004). Direct comparator returns and sorted row IDs are the declared observations (ORC-005). The two wrong-result controls fail at those comparisons (ORC-006 and ORC-013). The replay above checks the shared fixed-seed and seedless harness (ORC-007 and ORC-010). Model tags are input labels, with no state transition or host provider (ORC-008, ORC-009, and ORC-014). This ledger records the loss audit, hostile challenge, and bounded result (ORC-011 and ORC-012); it makes no claim about other value domains.

Exact code-commit review

At 24a61a8d5b6cef06d488c490e39f351b4d55fb68, a fresh hostile reviewer compared all five retired blocks with the committed tagged model, direct comparator checks, and sorted row IDs. It found no lost assertion. The committed production and oracle blobs match the reviewed working tree; the commit hook did not change them. A focused comparison and evaluator run passed 236 tests with no type errors. This verdict does not extend to compareValues or public query and index paths.