Repository navigation
test: register every oracle test through oracleProperty and remove declareOracle - #2421
KyleAMathews wants to merge 125 commits into
Conversation
The lockfile changes only the two pkg.pr.new entries: their URLs and integrity, the plugin's dropped @typescript-eslint/parser dependency, and @tanstack/oracles' TypeScript alias (typescript-for-tanstack-oracles). Co-authored-by: Isaac <no-reply@databricks.com>
@tanstack/oracles 84cd34a removed `settings.oracles.legacyCampaigns` (TanStack/oracles #23): oracle/oracle-property-only reports any value of it, `[]` included, at line 1 of every oracle file, and exempts no file. Delete the empty list from scripts/oracle-lint-settings.mjs and the override in scripts/oracle-campaign-inventory.mjs. The list no longer exists, so delete the gate that kept it from regrowing, scripts/check-legacy-oracle-campaigns.mjs, and its oracle, scripts/legacy-campaign-baseline-oracle.property.test.js (scripts.legacy-campaign-baseline, run budget 20), with its replay manifest and property registry entries. `pnpm lint:oracles` now runs only the oracle lint over every oracle file, which reports any raw campaign or legacy import. Update the coverage map and the rubric. Co-authored-by: Isaac <no-reply@databricks.com>
…merated source query-db.failing-queries checked its aggregate reach, four model-derived states over the 2592-history enumeration, with a grammar calibration, because an enumerated source could not declare states. @tanstack/oracles 84cd34a lets it (TanStack/oracles #19), so declare them as `histories: { enumerated, states }` and read each history's states from the model's reach classifier through `reached`. The property's `reach` test now fails when no enumerated history enters a declared state, so the calibration and the file's deprecated declareOracle call are deleted. The law, enumeration, driver, model, and check are unchanged. The file now registers only through oracleProperty, so the type-test collector excludes it, as it does reload-housekeeping-oracle.test.ts. Co-authored-by: Isaac <no-reply@databricks.com>
legacyCampaigns, its merge-base gate, and the vendored campaign helpers are gone, so AGENTS.md and the oracle-authoring skill no longer describe them. Approved by the maintainer (2026-11-11). Co-authored-by: Isaac <no-reply@databricks.com>
…try module Parallel conversion branches add oracleProperty ids and replay owners. Each group edits only its file under converted-properties/, so the branches do not conflict in oracle-config.ts or the replay manifest. Integration folds the lists back and deletes the directory. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…o db-core Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…ndant compiler oracles Co-authored-by: Isaac <no-reply@databricks.com>
… through oracleProperty M1 for the sqlite group's companion modules and redundant declarations. Co-authored-by: Isaac <no-reply@databricks.com>
Removes every declareOracle call in the framework adapters, db-ivm, and scripts groups (M1). The parts that only those calls named, and that nothing else references, are deleted: expectCyclicPair, expectDigestsMatchReference, and distinctBucketHistory. The owns lists that the deleted calls named move to oracleProperty in later commits. Co-authored-by: Isaac <no-reply@databricks.com>
M1 for the db-core group: remove each declareOracle call and its import from companion modules and from test files whose owns already sit on oracleProperty. Every declared part keeps another reference. Co-authored-by: Isaac <no-reply@databricks.com>
…ete their declareOracle calls Playwright and Chromium-driven specs cannot register through oracleProperty, so they become *-witness.* files. Configs and comments name the new files. Co-authored-by: Isaac <no-reply@databricks.com>
value-oracle.spec.ts and cross-tab-oracle.spec.ts are Playwright receiving witnesses, so they become *-witness.spec.ts. The value witness loses its declareOracle call; configs, the replay manifest owner, and comments follow the new names. Co-authored-by: Isaac <no-reply@databricks.com>
…perty Converts the six plain-test sites in temporal-group-key-oracle.test.ts (P2) into one enumerated property, ivm.temporal-group-key, whose 20 histories name the former cases. Each former body runs unchanged through recordAssertionJudgment, and owns moves from the deleted declareOracle call to the property (M2). Co-authored-by: Isaac <no-reply@databricks.com>
…calibration tests through oracleProperty Co-authored-by: Isaac <no-reply@databricks.com>
…per calls Delete each declareOracle call and its import in the adapters group (M1). Move each declared owns list to the wrapper call that registers the file's properties, and give the five shared wrapper suites an owns option that they forward to oracleProperty (M2). The executor-environment module now exports its registration, which its test file calls with owns. Delete the two persisted-startup arbitraries that only the deleted call named. Co-authored-by: Isaac <no-reply@databricks.com>
…oracleProperty P2: the it.each over open histories becomes the enumerated property opfs.open-outcome. P6: the grammar reach check moves to opfs-open-outcome-jsdom-grammar.test.ts, with jsdomReach in a test-free companion module. Co-authored-by: Isaac <no-reply@databricks.com>
…roperty Move the cell-table size checks to the ordinary functional projection tests. Co-authored-by: Isaac <no-reply@databricks.com>
…ugh oracleProperty Convert the abort-phase and retired-demand cases to enumerated properties, replay the join-key fixed histories as fixed histories of join-result-key.pairs, and replay the WHERE named histories through a where-predicate.publication-fixed enumerated property. The Kleene model calibration runs no production, so it moves to an ordinary test beside an extracted, test-free model module. Co-authored-by: Isaac <no-reply@databricks.com>
…through oracleProperty P2: each it.each becomes an enumerated property, electron.ipc-readiness and electron.follower-settlement, with the same helpers, labels, and timeouts. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…erty Converts the five plain-test sites in hash-identity-oracle.property.test.ts. The fixed witnesses, the second-copy seeds, and the shared-subtree seeds become ivm.hash-identity-fixed (P1b), one history per former seed pair, with the same drivePair, expectedPair, and checkPair. The digest collision case becomes ivm.hash-identity-digest-collision with a digest-only calibration (P3). The fixed-seed census runs no production, so it moves unchanged to hash-identity-grammar.test.ts (P6), and the grammar and model that it reads move unchanged to hash-identity-grammar-oracle.ts. expectPair has no use left and is deleted. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Replay the getter and Date regressions through a pooled-live-query.publication-fixed enumerated property, the gcTime matrix through pooled-live-query.release-timing, and the rejected-cleanup regression as a fixed history of pooled-live-query.cleanup-admission. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…he oracle file P6: the grammar calibrations sample the grammar and check the grammar check, with no production, so they move unchanged to expression-index-grammar.test.ts. The grammar and its check move unchanged to the test-free companion expression-index-grammar-oracle.ts, which both files import. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Forward owns from registerIncludesProperty callers to oracleProperty. Co-authored-by: Isaac <no-reply@databricks.com>
…ts through oracleProperty Convert the staged-window cells, the mixed-index public-order matrix, the retained on-demand window, and the queued-batch matrix to enumerated properties. Turn the driver-row mutation probes into calibrations of derived-publication.membership-work-fixed. The staged-window grammar check runs no production, so it moves to an ordinary test beside an extracted, test-free grammar module. Co-authored-by: Isaac <no-reply@databricks.com>
…cleProperty M1: the five declareOracle calls are deleted. P2 and P1b: each inline case, table, and fixed history becomes an enumerated property whose driver is the unchanged body; the 12 non-rotated follower remote-demand rows join that property's fixed histories (P1a). P6: the grammar reconstruction, named wrong answers, append-only judgment, and evidence-coupled mutant calibrations run no production, so they move unchanged to persisted-model-calibration.test.ts. The it.fails witnesses of known limit #2139 move unchanged to persisted-known-defects.test.ts. The models, checks, grammar, and follower drivers they need move unchanged to the companions persisted-durability-model-oracle.ts and persisted-follower-recovery-oracle.ts. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…ough oracleProperty Convert the D2 sites in query-db-collection, convex-db-collection and db-adapter-conformance. Fixed histories and cases become fixed or enumerated oracleProperty histories that run the file's existing driver and comparison; each calibration that ran production becomes a calibration whose mutant counts only the rejections that its old matcher accepted (calibration-rejection.ts). Model and checker calibrations, grammar-size checks and unit tests that compare production with written values move to ordinary test files, with the definitions they need in test-free oracle-named companion modules. The refetch oracle's two it.fails loader-defect witnesses move to refetch-ordered-prefix-known-defects.test.ts. The scope-omission framework guard is left as it was. Co-authored-by: Isaac <no-reply@databricks.com>
Convert the D2 sites in electric-db-collection. Fixed histories and cases become fixed or enumerated oracleProperty histories through the file's existing drivers and comparisons, and production calibrations become calibrations that count only the rejections their old matchers accepted. Grammar reconstructions, model rules and checker calibrations that run no production move to ordinary test files, with their grammars and models in test-free oracle-named companion modules. serializerProp forwards owns and fixed histories to oracleProperty. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…s are enumerated sources with declared reach Each sweep ran one plain test whose body looped over every case and then asserted the exact reach set. Each case is now its own enumerated history over a fresh database, and each reach fact is a declared state, so the enumerated reach test requires every state and fails on any other, which is the old exact-set equality. - storage-fault-sweep: the baseline run counted the calls at run time, so the source enumerates up to FAULT_CALL_BOUND (16) calls per session and timing, and the baseline history fails when a session makes more. An index past a session's last call fails nothing and checks nothing, as the loop skipped it. - release-sweep: steps 0 to 24. Each step now covers its own database online before the released session-2 load; before, the steps shared one covered database, and a released load writes no coverage. Co-authored-by: Isaac <no-reply@databricks.com>
…ixed-history oracleProperty that resets its fixture The routing witness ran as a plain test whose fixture the file's hooks set up and tore down. As a one-history property, the framework's determinism test runs it twice in one test, so its driver now resets the controlled fixture after each run, with the same functions that the hooks now call. The witness body and its comparisons are unchanged. Co-authored-by: Isaac <no-reply@databricks.com>
…e is its own enumerated history sqlite-ordinary.fixed-cases ran one history whose driver looped over every size, parameter-cap, and semantic case and then checked the work bounds. No bound relates two cases: each case's work bound, and the parameter-cap call counts and largest parameter lists, belong to one case. Each case is now its own enumerated history through its own adapter, which checks its semantics first and then its own work, so a RED still names the semantic failure first. The comparisons and their values are unchanged; a wrong parameter-cap value fails exactly its case. Co-authored-by: Isaac <no-reply@databricks.com>
…ibeUnlessAnyOracleReplay Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…s select their cases first - includes-calibration.ts (runIncludesCalibration) has no caller, and nothing in the repository or CI sets TANSTACK_DB_ORACLE_CALIBRATION to missing-parent or extra-child, so the replay-gated observation mutations in the cross-formulation equivalence and ordered-window checks are removed. The native calibrations of those properties carry the same hostile observations. - directReplayTestName checks enumeratedProperties before the prefix rules, which named a random-seed campaign that an enumerated source does not have (includes-*, browser-coordinator.*). - local-storage.value-fidelity-fixed is written literally, so the manifest test finds its owner by name. Co-authored-by: Isaac <no-reply@databricks.com>
…and e2e configs Every property that the declareOracle removal added is an enumerated source, so the manifest marks each one enumerated, and its direct replay selects its cases. For example, includes-collection.retired-held-facade replays as `-t 'includes-collection\.retired-held-facade > '` and runs its 2 tests. The electric move-suite owner and the Electron reload-class owner replay under their packages' vitest.e2e.config.ts. The manifest tests accept the literal pagination.limit-admission-fixed id, and the 13 new enumerated index-update properties beside the 20 generated matrix properties. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…ibrations cover query.scope-omission-reacquisition (node hosts and Chromium) kept a plain it.skipIf(oracleReplayRequested()) test that rebuilt every constructed history from seed 1313, ran it, and required the check to reject it with its reach fact removed. The property's fixed seed is 1313, every build() records its obligations, and its native calibrations "omits state <s>" remove exactly that reach fact from a constructed history under law "constructed reach"; each constructed history also runs clean as an example. So the guard and calibrateGeneratedConstructions are removed. Mutant: a build() that records no obligation fails all six native calibrations. Co-authored-by: Isaac <no-reply@databricks.com>
convex and query each had a copy of rejectsAs. It moves into packages/db/tests/calibration-rejection.ts beside rejection, asyncRejection, and clean, and the importers use the path they use for oracle-assertion-adapter. The replay manifest names the convex e2e owners' configs. Co-authored-by: Isaac <no-reply@databricks.com>
…, and witness and known-defect file naming Co-authored-by: Isaac <no-reply@databricks.com>
… becomes property-registry/ Nothing imports packages/db/tests/oracle-declaration.ts any more. The per-group registry modules that let the conversion branches work in parallel stay as data modules by area, renamed to property-registry/: two of them build their ids from driver tables, so folding them into oracle-config.ts would duplicate those tables. Every id in them is an enumerated source. Co-authored-by: Isaac <no-reply@databricks.com>
…own defects, and open exceptions Co-authored-by: Isaac <no-reply@databricks.com>
f8a58a3 is TanStack/oracles main after #33, which deletes declareOracle and renames the ./declaration entry to ./route. The four witness suites import ./route. The tarballs' dependencies and peers are unchanged from 84cd34a, so only the URLs and integrity hashes change in the lockfile. Co-authored-by: Isaac <no-reply@databricks.com>
Keeps the f8a58a3 pin over main's 84cd34a. The lockfile is main's with the pin and its two integrity hashes, because this branch changes no other dependency. Co-authored-by: Isaac <no-reply@databricks.com>
|
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: truePre-merge checks:
|
|
Size Change: 0 B Total Size: 199 kB ℹ️ View Unchanged
|
More templates
@tanstack/angular-db
@tanstack/browser-db-sqlite-persistence
@tanstack/capacitor-db-sqlite-persistence
@tanstack/cloudflare-durable-objects-db-sqlite-persistence
@tanstack/convex-db-collection
@tanstack/db
@tanstack/db-ivm
@tanstack/db-sqlite-persistence-core
@tanstack/electric-db-collection
@tanstack/electron-db-sqlite-persistence
@tanstack/expo-db-sqlite-persistence
@tanstack/node-db-sqlite-persistence
@tanstack/offline-transactions
@tanstack/powersync-db-collection
@tanstack/preact-db
@tanstack/query-db-collection
@tanstack/react-db
@tanstack/react-native-db-sqlite-persistence
@tanstack/react-router-with-db
@tanstack/rxdb-db-collection
@tanstack/solid-db
@tanstack/svelte-db
@tanstack/tauri-db-sqlite-persistence
@tanstack/trailbase-db-collection
@tanstack/vue-db
commit: |
…ght remaining plain registrations The maintainer decided to "merge sooner and then remove once F33 is in" (2026-11-11). registrationExceptions in scripts/oracle-lint-settings.mjs lists the five oracle files that still register plain tests: the two multi-tab it.fails witnesses (#2267, #2209; retired by extracting the multi-tab driver) and the six production-running censuses (retired by F33), each with its exact report count. eslint.config.js and agent-lint-feedback.mjs turn oracle/no-unit-test off for those files only. scripts/check-registration-exceptions.mjs, run by pnpm lint:oracles, lints each listed file with the rule on and fails when its count differs from the record in either direction, or when the list gains a file or a count rises against the merge-base. The coverage map records the list and its removal condition. CI reported 6 of the 8 sites because pnpm's recursive lint stopped at packages/db: the two multi-tab sites in browser-db-sqlite-persistence were not linted, not conforming. Co-authored-by: Isaac <no-reply@databricks.com>
…ata fixed histories through oracleProperty - change-event-history, the lifecycle publication product module, and custom-index-order-selection import OpKind, DemandName, and MaterializedRow from the companion modules their definitions moved to; custom-index-order-selection keeps its cached! assertion. - ivm.distinct-representatives-fixed names its history type: the shared check takes any plan, so the driver's plan was inferred as unknown. - electron's default config leaves reload-class-oracle.electron.e2e.test.ts out of the typecheck collector, which finds no suite in an oracleProperty-only file. - #2418 landed on main after this branch's base, with plain fixed tests in sync-metadata-session-persisted-oracle.test.ts (18 sites) and sync-metadata-session-sqlite-oracle.test.ts (1). Each history now runs as an enumerated property, through its production path's model, driver, and check from the generated campaigns: sync-metadata-session.persisted-fixed and sync-metadata-session.sqlite-seed-reinsert-reload-replay. Both files leave the typecheck collector, as the other oracleProperty-only files do. Co-authored-by: Isaac <no-reply@databricks.com>
…st the time of its reruns E2E (browser) failed on convex.public-pagination's framework determinism test, which timed out at the property's 45 s. That test runs each of the six histories twice in one test, against an append-only ledger that every run extends by 21 rows with page size 3; each history's own test passed. The timeout is now 180 s, as the other Convex backend properties use 60-120 s. Co-authored-by: Isaac <no-reply@databricks.com>
… reads the D2 message - tsc found 17 more errors in the db tests that the Vitest typecheck hid behind the earlier missing-type errors. Where a property's model is recordedAssertionJudgment, whose plan is `object`, the plan was inferred as `object`: the truncate-readiness, effect-disposal, subscription and sync reentrancy, btree history, and IndexedDB persistence properties name their history and plan types. Judges that returned a value now await it (state-retention, load-subset replay), mutantRejection takes any promise, the ordered-lifecycle reach coordinates may hold undefined as their producer does, and a mapped source-health history names its type. - scripts/lint-scope-oracle.property.test.js marks the rule's message for its generated plain-test files. Under D2 that message is "An oracle file registers its tests only through oracleProperty.", not the removed "declares no oracle part." Co-authored-by: Isaac <no-reply@databricks.com>
Register every oracle test through oracleProperty, and remove declareOracle
Summary
@tanstack/oraclesdeletesdeclareOracle(maintainer decision, 2026-11-11; TanStack/oracles PRremove/declare-oracle). This PR converts TanStack DB to the two laws that replace it:oracleProperty.oracle/no-unit-testreports every other test registration in a file whose name containsoracle.ownsfrom an object-literal argument of any call in a test file. A wrapper takesownsin its options and forwards it tooracleProperty.This PR does not change production.
git diff -- 'packages/*/src'is empty. It changes how about 1,320 test registrations in 338 oracle files are registered, and it does not change what they judge. Each converted registration keeps its production path, its inputs, its comparisons, and their checkpoints.The pin of
@tanstack/oraclesand@tanstack/eslint-plugin-oraclesto the merged oracles build is e532187 (see "Pin" below).Changes
Eight package groups converted in parallel. Each group branched from the same base, and the groups were merged here.
declareOraclecall and its import are deleted.registerPersistedStartupConformance,registerCapabilityConformance,registerBaselineLifecycle,registerEagerReloadConformance,registerTrailBaseEager,BrowserCampaign,serializerProp, andregisterExecutorEnvironmenttakeownsand forward it. Each caller passes the list that itsdeclareOraclenamed.oraclePropertyforms, using the existing assertion adapter (recordAssertionJudgment/forwardAssertionJudgment). A fixed history is ahistories.fixedentry, or a history of an enumerated property with the same driver, model, and check. A table of cases is an enumerated source. A calibration is acalibrationsentry, and its mutant driver accepts exactly the rejections that the old matcher accepted. A reach check over fixed scenarios is an enumerated source with declaredstates.oracleRoute, to ordinary files next to their oracle: 64 new ordinary test files.it.failsknown-defect witnessespersisted-known-defects.test.ts(#2139) andrefetch-ordered-prefix-known-defects.test.ts, which reuse the oracles' drivers.oracleProperty*-witness.*. ESLint applies every oracle rule exceptno-unit-testto them (db/receiving-witnesses).packages/db/tests/property-registry/;oracle-config.tsregisters them andoracle-replay-manifest.tsmaps their owners.packages/db/tests/oracle-declaration.ts,includes-calibration.ts,describeUnlessAnyOracleReplay, the replay-gatedTANSTACK_DB_ORACLE_CALIBRATIONhooks in the includes cross-formulation checks (nothing sets those values), and the generated-construction guard in the scope-omission oracles (the native calibrations cover it).Integrator items from every group
electric.e2e.test.tsreplays undervitest.e2e.config.tsenumeratedPropertiesandownerReplayConfigs.*-witness.suite.tsoracleRoutefrom@tanstack/oracles/declaration/routein the pin commit.required-coverageandasync-restart-regimesused the closure-runner shapecollection-gc-retention-oracle.test.tsrenamed to-calibrationinfinite-suite-oracle.tsregistered 34 scenarios throughitinfinite-suite.ts. Its model and publication law are ininfinite-suite-laws-oracle.ts. The React, Vue, Svelte, and Preact suites pass.documented-mutations-oracle.test.ts.pagination.limit-admission-fixedand 13index-update.*enumerated ids broke two manifest testsdirectReplayTestNamenamed a random-seed campaign for enumeratedincludes-*andbrowser-coordinator.*idsenumeratedPropertiesis checked first. Replay proof:includes-collection.retired-held-facadereplays with-t 'includes-collection\.retired-held-facade > 'and runs its 2 tests.includes-calibration.tsand calibration environment readsshrinkandreplayinoracle-property-self-oracle.test.ts). It does not pin one property's exact counterexample path. That gap is listed in Limits.descriptor-start-releasewas not run@tanstack/dbin a symlinked worktree, and it fails the same way on the base worktree.query-scope-omission:53multi-tab-electricit.failsfor #2267 and #2209per-collection-coordinator:1619failed the determinism testfinally, with the functions that the hooks call.sqlite-ordinary.fixed-cases: one history over all casesdescribeUnlessAnyOracleReplayunusedownerReplayConfigs.scope-omission-reacquisition:29rejectsAsduplicated in convex and querypackages/db/tests/calibration-rejection.ts.persisted-capability-conformance-oracle.test.tsowns nothingsync-metadata-session-persisted-oracle.test.ts(18 sites) andsync-metadata-session-sqlite-oracle.test.ts(1) still had plain fixed testselectric.design-witnessesflagged as possibly P6Evidence
oracle-property-onlydecisions of 2026-11-09 and 2026-11-10; the maintainer decisions of 2026-11-11 (deletedeclareOracle; design options D2 and O1).owns-diffover all 299 baseline oracle test files: 282 unchanged and 17 changed, all as expected. 2 changes add the lists that modules held but no tool read:comparison-oraclegainssrc/utils/comparison.ts, andtransaction-serializergains 5 serializer and outbox entries.collection-metadata-publicationalready named its list. The other 15 are witness renames, P6-moved files, and the capability conformance caller, none of which is an oracle file any more. 4 of the Playwright witnesses and theopfs-open-outcomee2e witness hadownslists that the gap report could not read before, because Playwright is not its Vitest run.build()with no obligation fails all six scope-omission calibrations.Type Errors no errors. The counts are in the group reports and are never lower in runtime tests. Here I reran the files that integration changed: lifecycle 257, sweeps 100, resume snapshot 101, coordinator 41, infinite suites 89/47/47/44 and calibration 9, cross-formulation 38, convex lazy paging 34, query calibrations 96, scope-omission 34, solid 276, svelte 259 + 86. The manifest tests pass, except the one that spawns pnpm (see Limits).Run budgets that
check-oracle-run-counts.mjsreports as removedNone is a lowered count. Each campaign moved, or was replaced by native calibrations:
load-subset-oraclefixed seed 1656 (200): the grammar-coverage sample runs no production, so it moved unchanged toload-subset-model.test.ts.shared-driver-fairness-oraclefixed seed 165905 (12): the tail-order census moved unchanged toshared-driver-fairness-grammar.test.ts.persisted-oraclefixed seed 2128 (12): the Persistence: a follower shows its leader's rows after a cache-claim rotation #2139it.failscensus moved unchanged topersisted-known-defects.test.ts.sync-metadata-session-oraclefixed seed 2220100 (200): the grammar ablation census moved unchanged tosync-metadata-session.test.ts.includes-oraclecensus seeds 1725, 1726, 1733, and 1727 (1 each), andincludes-work-counterseed 2137 (60): grammar censuses moved unchanged toincludes-history-grammar.test.tsandincludes-work-counter.test.ts.includes-cross-formulationfixed seeds 1658004 (8) and 1658005 (12) andincludes-cross-formulation.equivalence(12): the raw calibration campaigns are replaced by nativecalibrationsof the same properties. The native calibration search is the subject of the pending oracles proposal that binds calibrations to declared histories, so these will migrate again.scope-omission-reacquisition-oracle.tsfixed seed 1313 (1): the removed generated-construction guard's one-sample input. The property still runs fixed seed 1313 with 30 runs.scripts/legacy-campaign-baseline-oracle.property.test.js(20): reported on the base too. Commit 3b8217f onoracle/bump-oracles-84cd34adeleted it, together with thelegacyCampaignsgate that it judged, after @tanstack/oracles 84cd34a removed that setting.Census minimums (pending F33)
These run production and assert count minimums, which the framework's declared reach cannot express yet. They stay unchanged until F33 adds an enforced minimum to a
measuredstate of a generated source with fixed seeds (maintainer decision, 2026-11-11):collection-subscription-lifecycle-publication(at least 5 zero-sign writes, seed 1657005);collection-subscription-replay(more than 0, seed 1756);collection-state-retention×3 (seeds 86103 and 86104);d2-source-reconciliation(500 samples, seed 1780).refetch-ordered-prefix(24, 3, and more than 0);electric-sdk-delivery×3;electric-oraclemutation-confirmation;executedCellscheck;transaction-settlement's restored-history set.Reviewed exception list (merge now, remove once F33 is in)
Maintainer decision, 2026-11-11: "merge sooner and then remove once F33 is in".
registrationExceptionsinscripts/oracle-lint-settings.mjslists the five oracle files that still register plain tests, with exact counts:browser-db-sqlite-persistence/tests/multi-tab-electric-oracle.test.tsit.fails, #2267 and #2209)db/tests/collection-state-retention-oracle.property.test.tsdb/tests/collection-subscription-lifecycle-publication-oracle.property.test.tsdb/tests/collection-subscription-replay-oracle.property.test.tsdb/tests/d2-source-reconciliation-oracle.property.test.tseslint.config.jsandscripts/agent-lint-feedback.mjsturnoracle/no-unit-testoff for these files only.scripts/check-registration-exceptions.mjs, whichpnpm lint:oraclesruns, lints each listed file with the rule on. It fails when a count differs from the record in either direction, or when the list gains a file or a count rises against the merge-base. Remove an entry when its retiring work lands. The coverage map records the list.Limits
it.failswitnesses (Electric resume check puts a lagging tab in error when a peer deleted the row it updates #2267, Persisted multi-tab: order source transactions by server position #2209), which need their 520-line driver extracted, and the 6 censuses above. They are on the exact exception list. The coverage map and the conversion record also record them.shrinkandreplaylaws cover those behaviors in general.oracle-replay.test.tsspawns pnpm, and in a symlinked worktree pnpm tries to reinstall, so it was not run. It also fails on the base worktree for the same reason.electric.design-witnessesHTTP-transcript procedure to an ordinary file; F33 and the census conversions; extract the multi-tab driver.Pin
e532187 pins
@tanstack/oraclesand@tanstack/eslint-plugin-oraclesto the pkg.pr.new build of TanStack/oracles f8a58a3 (#33). It changes the manifests and the two lockfile entries' URLs and integrity only; their dependencies are unchanged from 84cd34a. The 4 witness suites import@tanstack/oracles/route.This pull request and its description were written by Isaac.