Skip to content

test(db): enforce aggregate reach and retain campaign seeds - #2331

Merged
KyleAMathews merged 7 commits into
mainfrom
codex/aggregate-select-reach
Nov 2, 2026
Merged

KyleAMathews merged 7 commits into
mainfrom
codex/aggregate-select-reach

Conversation

@KyleAMathews

@KyleAMathews KyleAMathews commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Changes

The aggregate oracle could pass after its generated histories lost required coverage. Twelve fixed histories satisfied every shared reach check. A later reach failure also lacked a campaign seed when fast-check comparisons passed.

Each campaign now checks structural and generated reach separately. The structural set guarantees 21 initial premises. The 160 generated histories must reach those states themselves, plus seven mutation and route comparison checkpoints. A missing generated state fails with its selected seed and counts.

Shared helpers report fresh seeds and preserve explicit replay selection. Aggregate statistics survive failures and require TANSTACK_DB_ORACLE_STATISTICS=1. Three existing consumers now distinguish replay selection from fresh seed metadata. Their fixed campaigns and serializer calibration remain active.

Named history fields replace the positional tuple. Repository-relative configs make the focused test and TypeScript commands reproducible. This PR changes test support, tests, and evidence. It changes no production code or package dependencies.

Oracle evidence

The coverage-map owner remains Aggregate selects. The review record accounts for all nine findings and the shared-seed compatibility fix.

  • Law: Existing aggregate selection, documented locale ordering, ORC-015 reach, and ORC-007 campaign parity remain unchanged.
  • Reach: Both campaigns require 21 structural states and 28 generated states. Each retains 160 generated histories, minimum one, and fixed seed 2094.
  • RED: Three generator ablations passed the old shared reach. Separate generated reach rejects each ablation. The shared diagnostic model also failed against unchanged helpers.
  • GREEN: The aggregate and helper checks pass 14 tests. Reporting and manifest checks pass another 38 tests. The three affected consumer owners pass 131 tests.
  • Mutant: Missing ordered histories, string terms, runtime stripping, mutation steps, shadowing, or union fails generated reach. A missing structural triple input fails structural reach.
  • Replay: Lexical collation fails the public row comparison at seed 2094/path 11. Restoration passes. A fresh reach failure also repeats identical counts through seed-only replay.
  • Limits: Structural guarantees concern initial compilation or publication. Generated coverage remains sampled. The seven checkpoints do not cover every law after every mutation.

Focused TypeScript, formatting, whitespace, and pnpm lint:changed pass. Local cached Vitest is 3.2.4, while CI uses 4.1.12. The full repository test and build commands did not run locally.

The later a0e323a CI run found one stale ordinary seed assertion in utils.test.ts. The assertion now accepts the selected numeric seed and still rejects unexpected path options. All 132 tests in that file pass locally. The oracle sources and shared helpers remain unchanged. New head CI remains pending.

The later ee13953 CI run found the same stale expectation in the React Native adapter tests. The complete option assertion now accepts the fresh numeric seed. All 93 tests in that ordinary file pass locally. Shared helpers and oracle sources remain unchanged. Final head CI remains pending.

Integration and release

The branch includes main b190945965e2d7ed51bcc04885283961a5ad4c50, including #2332, #2333, and #2303. Production and dependency files equal that main commit.

The main integration preserves all authored test changes. Aggregate, helper, reporting, and manifest checks pass 52 tests. Eight metadata properties also complete their fixed and fresh campaigns at unchanged budgets. These controlled persistence and native SQLite checks pass 19 tests. They cover one process with two coordinators. Scoped TypeScript, lint, and whitespace checks pass.

The integrated head requires new CI. The latest completed CodeRabbit review covered one ordinary native test file at 28102dd. Automatic reviews remain paused.

The earlier guarded refetch replay remains historical integration evidence at df5353866bbc99aed92e0ae3361901f2007d32c2. That invocation passed 36 tests and skipped two. It ran one target execution and two fast-check runs. This review did not repeat a complete refetch campaign.

This test-only change needs no package changeset. A separately approved merge and later successful main workflow must precede release regeneration.

Checklist

  • I ran the full repository pnpm test command.
  • This change affects published code and includes a changeset.
  • This change is docs/CI/dev-only (no release).

Summary by CodeRabbit

  • Tests

    • Aggregate-selection checks run 12 structural histories before 160 generated histories. Structural histories must cover all 21 operator states; generated histories independently check those states and additional mutation, route, alias, and union checkpoints.
    • Oracle campaigns report their selected replayable seed and coverage counts, including when a campaign fails. Replay settings consistently control fixed-seed test runs.
    • Added focused test configurations for aggregate-selection and oracle diagnostics.
  • Documentation

    • Updated coverage guidance and added review records describing scenarios, results, reproduction steps, and limitations.

@changeset-bot

changeset-bot Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 1149cb6

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • Resume reviews
  • Trigger review

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 976e15ac-cf20-4591-ad2a-ef3a88f097d5
Commits

Reviewing files that changed from the base of the PR and between ee13953 and 28102dd.

Files selected for processing: 2
  • docs/contributing/oracle-reviews/2026-11-02-aggregate-select-review.md
  • packages/react-native-db-sqlite-persistence/tests/op-sqlite-driver.test.ts
Files skipped from review as they are similar to previous changes: 1
  • docs/contributing/oracle-reviews/2026-11-02-aggregate-select-review.md

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 2 remain after this review.

Walkthrough

Aggregate-select oracle tests now combine structural and generated histories and check their reach separately. Shared oracle utilities select and report campaign seeds, including when reach checks fail. Focused test configurations and review records document execution and evidence.

Changes: Aggregate-select oracle campaigns

Layer / File(s) Summary
Aggregate histories and reach checks
packages/db/tests/query/aggregate-select-oracle.property.test.ts, packages/db/tests/query/includes-publication-oracle.test.ts, packages/db-ivm/tests/structural-identity-oracle.property.test.ts, docs/contributing/oracle-coverage.md
Aggregate-select tests run 12 structural histories and 160 generated histories. The structural set must reach all 21 operator states. Generated histories are checked independently for those states and additional mutation, route, alias, and union checkpoints. Replay selection uses replaySeed.
Oracle seed reporting and replay selection
packages/db/tests/oracle-config.ts, packages/db/tests/oracle-campaign.ts, packages/db/tests/oracle-campaign.test.ts, packages/db/tests/declared-reach-oracle.property.test.ts, packages/db/tests/oracle-replay.test.ts, packages/db/tests/utils.test.ts, packages/offline-transactions/tests/transaction-serializer-oracle.property.test.ts, packages/react-native-db-sqlite-persistence/tests/op-sqlite-driver.test.ts
Ordinary campaigns select and report a seed. Campaign reach reports include the effective seed and run in a finally block. Tests verify seed and reach reporting, including for failing campaigns, and update replay selection.
Review evidence and focused test setup
docs/contributing/oracle-reviews/*, packages/db/tsconfig.aggregate.json, packages/db/vitest.aggregate.config.mjs, scripts/oracle-diagnostics.vitest.config.mjs
Review records document reach counts, test results, reproduction commands, and evidence limits. Focused Vitest and TypeScript configurations select oracle tests.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Other

Possibly related issues

Possibly related PRs

  • TanStack/db#2290: Adds fixed-history tracking that the aggregate-select tests use for structural reach checks.
  • TanStack/db#2233: Adds the declared-state reach helper used by the aggregate-select checks.
  • TanStack/db#2236: Changes shared oracle seed selection and campaign configuration used by this PR.
Merge Risk: Minimal · up to 28102

No merge-blocking risk is identified in the reviewed changes.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly identifies the two main changes: enforcing aggregate reach and retaining campaign seeds.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description is mostly complete. It explains the changes, motivation, oracle owner, law, reach requirements, RED/GREEN evidence, replay data, limits, testing status, release impact, and changeset d…
Full details: Description check

Explanation

The description is mostly complete. It explains the changes, motivation, oracle owner, law, reach requirements, RED/GREEN evidence, replay data, limits, testing status, release impact, and changeset decision. The headings differ from the template, but the required information is present.

Full details: Docstring Coverage

Explanation

Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 9 functions across 13 files. (1 skipped: 1 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Incremental update benchmark

Comparing e52146efb (this PR) against b19094596 (base). Write times are per-write medians over 100 iterations (20 warmup writes). Cold hydrate is one timed first load of each query.

Overall median write time vs base: 1.00× · cold hydrate time: 1.04× (geometric mean of per-case ratios; lower is faster).

Writes: 2 regression(s), 1 improvement(s) (threshold: ±20% and >0.05ms).

Cold hydrate: 2 regression(s), 2 improvement(s) (threshold: ±50% and >5ms).

Per-case flags are noisy on shared runners. Read the geometric means first.

Writes

Query Δ median write time (geomean) Best case Worst case Flags
list: newest 50 open +4.2% -14.9% +68.9% 1 🔴
list + author +7.1% -18.3% +125.2% 1 🔴
list + comment count +0.9% -19.3% +12.4% —
list + 3 recent comments -6.3% -53.3% +14.3% 1 🟢
issue detail + comments -6.8% -44.4% +8.5% —

Cold hydrate

Query Δ cold hydrate time (geomean) Best case Worst case Flags
list: newest 50 open +10.8% -50.2% +535.2% 1 🔴 1 🟢
list + author -6.9% -23.4% +20.3% —
list + comment count -1.2% -67.5% +70.0% 1 🟢
list + 3 recent comments +8.3% -52.3% +215.3% 1 🔴
issue detail + comments +4.0% -18.1% +24.6% —

Each row aggregates the 14.4 scale/index/write-mode configurations of that query; per-configuration tables below.

100 rows/collection | source indexes: none | synced writes — geomean 1.09×, cold 1.02×, 1 change(s)
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.102ms 0.128ms +25.9% 0.204ms 0.257ms +26.3% 8.730ms 9.808ms +12.3%
list: newest 50 open 0.278ms 0.342ms +23.0% 0.421ms 0.559ms +32.7% 🔴 1.905ms 2.887ms +51.5%
list + author 0.122ms 0.100ms -18.3% 0.231ms 0.210ms -9.0% 9.839ms 8.833ms -10.2%
list + comment count 0.202ms 0.216ms +7.2% 0.332ms 0.361ms +8.8% 9.272ms 7.524ms -18.9%
list + 3 recent comments 0.104ms 0.119ms +14.3% 0.215ms 0.236ms +10.0% 7.523ms 6.951ms -7.6%
issue detail + comments 0.062ms 0.067ms +8.5% 0.168ms 0.159ms -5.3% 1.410ms 1.418ms +0.6%
100 rows/collection | source indexes: none | optimistic writes — geomean 1.02×, cold 0.86×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.057ms 0.064ms +11.3% 0.119ms 0.128ms +7.8% 1.832ms 1.699ms -7.3%
list: newest 50 open 0.040ms 0.041ms +2.1% 0.082ms 0.094ms +15.1% 2.208ms 1.695ms -23.3%
list + author 0.067ms 0.074ms +9.5% 0.169ms 0.169ms -0.2% 5.090ms 4.327ms -15.0%
list + comment count 0.110ms 0.118ms +7.4% 0.213ms 0.250ms +17.5% 3.089ms 3.161ms +2.3%
list + 3 recent comments 0.053ms 0.059ms +11.5% 0.139ms 0.138ms -0.3% 6.900ms 5.098ms -26.1%
issue detail + comments 0.092ms 0.068ms -26.5% 0.154ms 0.137ms -10.6% 1.147ms 1.044ms -9.0%
100 rows/collection | source indexes: manual | synced writes — geomean 1.06×, cold 1.00×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.082ms 0.093ms +12.9% 0.147ms 0.160ms +8.7% 2.315ms 2.491ms +7.6%
list: newest 50 open 0.170ms 0.195ms +14.5% 0.383ms 0.356ms -7.0% 1.644ms 1.716ms +4.4%
list + author 0.056ms 0.059ms +5.0% 0.123ms 0.121ms -1.4% 4.011ms 3.809ms -5.0%
list + comment count 0.120ms 0.120ms -0.2% 0.251ms 0.257ms +2.1% 2.977ms 3.014ms +1.3%
list + 3 recent comments 0.071ms 0.072ms +2.5% 0.151ms 0.160ms +5.6% 4.065ms 3.810ms -6.3%
issue detail + comments 0.048ms 0.051ms +4.5% 0.092ms 0.112ms +22.3% 0.481ms 0.465ms -3.2%
100 rows/collection | source indexes: manual | optimistic writes — geomean 1.04×, cold 0.98×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.051ms 0.047ms -8.6% 0.104ms 0.134ms +28.3% 1.110ms 1.085ms -2.2%
list: newest 50 open 0.039ms 0.041ms +4.9% 0.091ms 0.089ms -1.2% 1.170ms 1.002ms -14.3%
list + author 0.057ms 0.064ms +12.3% 0.124ms 0.136ms +10.1% 4.328ms 3.316ms -23.4%
list + comment count 0.083ms 0.086ms +2.9% 0.178ms 0.184ms +3.2% 3.432ms 5.834ms +70.0%
list + 3 recent comments 0.048ms 0.050ms +4.3% 0.088ms 0.104ms +17.5% 4.636ms 4.732ms +2.1%
issue detail + comments 0.040ms 0.043ms +7.5% 0.077ms 0.142ms +83.4% 0.533ms 0.437ms -18.1%
1,000 rows/collection | source indexes: none | synced writes — geomean 0.95×, cold 1.13×, 1 change(s)
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.062ms 0.064ms +2.7% 0.074ms 0.084ms +12.5% 6.377ms 6.666ms +4.5%
list: newest 50 open 0.503ms 0.513ms +2.0% 0.891ms 0.913ms +2.4% 5.033ms 6.782ms +34.7%
list + author 0.049ms 0.111ms +125.2% 0.142ms 0.134ms -5.2% 🔴 21.521ms 20.416ms -5.1%
list + comment count 0.148ms 0.120ms -19.3% 0.258ms 0.274ms +6.5% 9.265ms 7.249ms -21.8%
list + 3 recent comments 0.158ms 0.110ms -30.4% 0.188ms 0.151ms -19.4% 7.306ms 11.831ms +61.9%
issue detail + comments 0.088ms 0.049ms -44.4% 0.147ms 0.092ms -37.5% 1.101ms 1.372ms +24.6%
1,000 rows/collection | source indexes: none | optimistic writes — geomean 1.11×, cold 0.96×, 1 change(s)
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.046ms 0.078ms +68.9% 0.124ms 0.142ms +14.5% 11.205ms 5.585ms -50.2% 🟢
list: newest 50 open 0.033ms 0.033ms +0.1% 0.072ms 0.065ms -8.8% 3.888ms 3.677ms -5.4%
list + author 0.055ms 0.054ms -1.6% 0.122ms 0.104ms -14.8% 25.848ms 22.786ms -11.8%
list + comment count 0.079ms 0.081ms +2.2% 0.118ms 0.104ms -11.7% 6.046ms 8.948ms +48.0%
list + 3 recent comments 0.047ms 0.048ms +3.0% 0.092ms 0.104ms +12.6% 6.769ms 7.456ms +10.2%
issue detail + comments 0.041ms 0.042ms +4.6% 0.050ms 0.076ms +49.7% 0.964ms 1.130ms +17.3%
1,000 rows/collection | source indexes: manual | synced writes — geomean 1.00×, cold 0.88×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.039ms 0.039ms -0.2% 0.045ms 0.043ms -5.6% 1.012ms 1.031ms +1.9%
list: newest 50 open 0.143ms 0.142ms -0.5% 0.309ms 0.323ms +4.7% 0.906ms 0.875ms -3.5%
list + author 0.050ms 0.049ms -1.7% 0.091ms 0.060ms -34.5% 2.492ms 2.352ms -5.6%
list + comment count 0.099ms 0.111ms +12.4% 0.202ms 0.207ms +2.2% 2.919ms 2.635ms -9.7%
list + 3 recent comments 0.061ms 0.062ms +0.7% 0.071ms 0.075ms +5.5% 8.453ms 4.035ms -52.3%
issue detail + comments 0.049ms 0.043ms -10.7% 0.060ms 0.051ms -15.8% 0.412ms 0.467ms +13.5%
1,000 rows/collection | source indexes: manual | optimistic writes — geomean 1.00×, cold 1.06×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.042ms 0.040ms -2.6% 0.053ms 0.050ms -4.0% 0.804ms 0.803ms -0.1%
list: newest 50 open 0.036ms 0.035ms -0.7% 0.059ms 0.065ms +11.3% 0.878ms 1.032ms +17.5%
list + author 0.052ms 0.052ms -0.5% 0.059ms 0.066ms +11.1% 2.413ms 2.386ms -1.1%
list + comment count 0.081ms 0.085ms +4.7% 0.116ms 0.124ms +6.6% 2.563ms 2.804ms +9.4%
list + 3 recent comments 0.048ms 0.049ms +1.0% 0.061ms 0.069ms +13.6% 3.633ms 3.936ms +8.3%
issue detail + comments 0.046ms 0.044ms -4.6% 0.092ms 0.072ms -21.5% 0.380ms 0.401ms +5.3%
10,000 rows/collection | source indexes: none | synced writes — geomean 1.01×, cold 1.12×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.039ms 0.038ms -1.1% 0.047ms 0.064ms +34.0% 37.119ms 45.497ms +22.6%
list: newest 50 open 4.714ms 4.624ms -1.9% 5.281ms 5.132ms -2.8% 39.563ms 43.707ms +10.5%
list + author 0.083ms 0.085ms +3.2% 0.101ms 0.115ms +13.3% 192.447ms 183.401ms -4.7%
list + comment count 0.084ms 0.089ms +5.4% 0.121ms 0.155ms +27.7% 46.376ms 49.501ms +6.7%
list + 3 recent comments 0.060ms 0.060ms +0.8% 0.074ms 0.129ms +72.7% 50.078ms 70.397ms +40.6%
issue detail + comments 0.045ms 0.044ms -2.2% 0.092ms 0.078ms -15.6% 4.407ms 4.545ms +3.1%
10,000 rows/collection | source indexes: none | optimistic writes — geomean 0.95×, cold 0.95×
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.065ms 0.055ms -14.9% 0.105ms 0.093ms -11.9% 44.336ms 36.828ms -16.9%
list: newest 50 open 0.032ms 0.031ms -3.1% 0.056ms 0.064ms +15.2% 39.979ms 36.517ms -8.7%
list + author 0.054ms 0.053ms -1.4% 0.071ms 0.066ms -6.1% 185.158ms 193.266ms +4.4%
list + comment count 0.101ms 0.094ms -6.8% 0.161ms 0.154ms -4.0% 49.940ms 46.572ms -6.7%
list + 3 recent comments 0.045ms 0.043ms -3.2% 0.060ms 0.076ms +25.5% 44.271ms 43.392ms -2.0%
issue detail + comments 0.042ms 0.041ms -2.8% 0.052ms 0.078ms +49.1% 3.341ms 3.426ms +2.5%
10,000 rows/collection | source indexes: manual | synced writes — geomean 0.86×, cold 1.02×, 1 change(s)
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.040ms 0.037ms -6.9% 0.044ms 0.041ms -7.1% 2.289ms 1.589ms -30.6%
list: newest 50 open 0.560ms 0.556ms -0.9% 0.908ms 0.883ms -2.8% 1.591ms 1.896ms +19.2%
list + author 0.051ms 0.051ms -0.3% 0.060ms 0.099ms +65.0% 3.955ms 3.221ms -18.6%
list + comment count 0.099ms 0.094ms -5.3% 0.154ms 0.184ms +19.4% 3.675ms 6.020ms +63.8%
list + 3 recent comments 0.143ms 0.067ms -53.3% 0.192ms 0.287ms +49.6% 🟢 4.379ms 4.356ms -0.5%
issue detail + comments 0.046ms 0.046ms +0.9% 0.091ms 0.090ms -1.6% 0.643ms 0.653ms +1.6%
10,000 rows/collection | source indexes: manual | optimistic writes — geomean 1.01×, cold 1.69×, 3 change(s)
Query Base median PR median Δ median Base p95 PR p95 Δ p95 Base cold PR cold Δ cold
list: newest 50 open 0.042ms 0.041ms -2.0% 0.068ms 0.077ms +13.0% 1.551ms 9.851ms +535.2% 🔴
list: newest 50 open 0.037ms 0.037ms -0.6% 0.047ms 0.051ms +8.9% 1.473ms 3.672ms +149.3%
list + author 0.055ms 0.054ms -1.3% 0.076ms 0.069ms -8.6% 3.720ms 4.474ms +20.3%
list + comment count 0.111ms 0.116ms +4.1% 0.224ms 0.188ms -16.1% 10.398ms 3.379ms -67.5% 🟢
list + 3 recent comments 0.051ms 0.052ms +1.7% 0.077ms 0.074ms -3.6% 3.823ms 12.054ms +215.3% 🔴
issue detail + comments 0.044ms 0.045ms +1.8% 0.082ms 0.071ms -14.0% 0.567ms 0.671ms +18.2%

Runner: node v24.8.0, linux 7.0.0-1017-azure, AMD EPYC 9V45 96-Core Processor. Timings on shared CI runners are noisy; treat small deltas as indicative only.

@pkg-pr-new

pkg-pr-new Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@2331

@tanstack/browser-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/browser-db-sqlite-persistence@2331

@tanstack/capacitor-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/capacitor-db-sqlite-persistence@2331

@tanstack/cloudflare-durable-objects-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/cloudflare-durable-objects-db-sqlite-persistence@2331

@tanstack/convex-db-collection

npm i https://pkg.pr.new/@tanstack/convex-db-collection@2331

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@2331

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@2331

@tanstack/db-sqlite-persistence-core

npm i https://pkg.pr.new/@tanstack/db-sqlite-persistence-core@2331

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@2331

@tanstack/electron-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/electron-db-sqlite-persistence@2331

@tanstack/expo-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/expo-db-sqlite-persistence@2331

@tanstack/node-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/node-db-sqlite-persistence@2331

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@2331

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@2331

@tanstack/preact-db

npm i https://pkg.pr.new/@tanstack/preact-db@2331

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@2331

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@2331

@tanstack/react-native-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/react-native-db-sqlite-persistence@2331

@tanstack/react-router-with-db

npm i https://pkg.pr.new/@tanstack/react-router-with-db@2331

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@2331

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@2331

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@2331

@tanstack/tauri-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/tauri-db-sqlite-persistence@2331

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@2331

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@2331

commit: 1149cb6

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 239 kB

ℹ️ View Unchanged
Filename Size
packages/db/dist/esm/client.js 5.51 kB
packages/db/dist/esm/collection-options-brand.js 219 B
packages/db/dist/esm/collection-options.js 258 B
packages/db/dist/esm/collection/change-events.js 1.76 kB
packages/db/dist/esm/collection/changes.js 3.06 kB
packages/db/dist/esm/collection/cleanup-queue.js 828 B
packages/db/dist/esm/collection/config-errors.js 547 B
packages/db/dist/esm/collection/events.js 504 B
packages/db/dist/esm/collection/health-tree.js 698 B
packages/db/dist/esm/collection/index.js 6.23 kB
packages/db/dist/esm/collection/indexes.js 2.3 kB
packages/db/dist/esm/collection/lifecycle.js 5.59 kB
packages/db/dist/esm/collection/mutations.js 2.94 kB
packages/db/dist/esm/collection/state.js 7.69 kB
packages/db/dist/esm/collection/subscription.js 9.86 kB
packages/db/dist/esm/collection/sync.js 6.51 kB
packages/db/dist/esm/collection/validate-config.js 1.17 kB
packages/db/dist/esm/collection/validate-indexing.js 366 B
packages/db/dist/esm/deferred.js 207 B
packages/db/dist/esm/error-message.js 642 B
packages/db/dist/esm/errors.js 7.15 kB
packages/db/dist/esm/event-emitter.js 1.06 kB
packages/db/dist/esm/index.js 4.75 kB
packages/db/dist/esm/indexed-db-wrapper.js 1.91 kB
packages/db/dist/esm/indexed-db.js 3.8 kB
packages/db/dist/esm/indexes/auto-index.js 924 B
packages/db/dist/esm/indexes/base-index.js 1.92 kB
packages/db/dist/esm/indexes/basic-index.js 1.93 kB
packages/db/dist/esm/indexes/btree-index.js 1.62 kB
packages/db/dist/esm/indexes/index-registry.js 916 B
packages/db/dist/esm/indexes/reverse-index.js 1.01 kB
packages/db/dist/esm/live-query-adapter.js 845 B
packages/db/dist/esm/live-query-observer-client.js 2.21 kB
packages/db/dist/esm/live-query-observer.js 3.3 kB
packages/db/dist/esm/live-query-options.js 2.65 kB
packages/db/dist/esm/live-query-primitives.js 406 B
packages/db/dist/esm/live-query-window-binding.js 1.56 kB
packages/db/dist/esm/live-query-window-controller.js 4.02 kB
packages/db/dist/esm/local-only.js 1 kB
packages/db/dist/esm/local-storage.js 4.58 kB
packages/db/dist/esm/optimistic-action.js 359 B
packages/db/dist/esm/paced-mutations.js 1.11 kB
packages/db/dist/esm/proxy.js 3.51 kB
packages/db/dist/esm/query/builder/clone-query.js 854 B
packages/db/dist/esm/query/builder/functions.js 1.61 kB
packages/db/dist/esm/query/builder/group-keys.js 157 B
packages/db/dist/esm/query/builder/include-functions.js 229 B
packages/db/dist/esm/query/builder/index.js 7.67 kB
packages/db/dist/esm/query/builder/query-ir.js 312 B
packages/db/dist/esm/query/builder/ref-proxy-identity.js 292 B
packages/db/dist/esm/query/builder/ref-proxy.js 1.67 kB
packages/db/dist/esm/query/builder/wrapper-identity.js 221 B
packages/db/dist/esm/query/compiler/evaluators.js 2.51 kB
packages/db/dist/esm/query/compiler/expressions.js 603 B
packages/db/dist/esm/query/compiler/find-aggregate.js 328 B
packages/db/dist/esm/query/compiler/group-by.js 4.38 kB
packages/db/dist/esm/query/compiler/grouping.js 161 B
packages/db/dist/esm/query/compiler/index.js 10.3 kB
packages/db/dist/esm/query/compiler/joins.js 3.29 kB
packages/db/dist/esm/query/compiler/lazy-targets.js 1.11 kB
packages/db/dist/esm/query/compiler/order-by.js 2.87 kB
packages/db/dist/esm/query/compiler/parent-routes.js 325 B
packages/db/dist/esm/query/compiler/query-equivalence.js 568 B
packages/db/dist/esm/query/compiler/route-metadata.js 1.45 kB
packages/db/dist/esm/query/compiler/select.js 1.66 kB
packages/db/dist/esm/query/effect.js 5.81 kB
packages/db/dist/esm/query/equality-conjunct.js 486 B
packages/db/dist/esm/query/equality-value-identity.js 736 B
packages/db/dist/esm/query/expression-helpers.js 1.61 kB
packages/db/dist/esm/query/ir-stable-identity.js 4.29 kB
packages/db/dist/esm/query/ir.js 2.26 kB
packages/db/dist/esm/query/join-conditions.js 257 B
packages/db/dist/esm/query/live-query-collection.js 391 B
packages/db/dist/esm/query/live/bucket-facade-adapter.js 3.17 kB
packages/db/dist/esm/query/live/collection-config-builder.js 8.57 kB
packages/db/dist/esm/query/live/collection-registry.js 264 B
packages/db/dist/esm/query/live/collection-subscriber.js 2.69 kB
packages/db/dist/esm/query/live/graph-scheduler.js 305 B
packages/db/dist/esm/query/live/includes-runtime.js 212 B
packages/db/dist/esm/query/live/internal.js 145 B
packages/db/dist/esm/query/live/materialized-pipeline.js 1.94 kB
packages/db/dist/esm/query/live/ordered-source-loader.js 6.53 kB
packages/db/dist/esm/query/live/public-key-reduction.js 970 B
packages/db/dist/esm/query/live/subset-demand-controller.js 2.44 kB
packages/db/dist/esm/query/live/utils.js 1.35 kB
packages/db/dist/esm/query/optimizer.js 2.95 kB
packages/db/dist/esm/query/pooled-live-query.js 5.14 kB
packages/db/dist/esm/query/pooled-source.js 219 B
packages/db/dist/esm/query/query-once.js 359 B
packages/db/dist/esm/query/runtime-reference-identity.js 630 B
packages/db/dist/esm/query/subset-dedupe.js 493 B
packages/db/dist/esm/query/validate-limit.js 247 B
packages/db/dist/esm/scheduler.js 1.23 kB
packages/db/dist/esm/SortedMap.js 1.77 kB
packages/db/dist/esm/strategies/commit-completion.js 154 B
packages/db/dist/esm/strategies/debounceStrategy.js 658 B
packages/db/dist/esm/strategies/queueStrategy.js 523 B
packages/db/dist/esm/strategies/serial-pacer.js 486 B
packages/db/dist/esm/strategies/throttleStrategy.js 738 B
packages/db/dist/esm/sync-persistence.js 669 B
packages/db/dist/esm/sync-receipt.js 211 B
packages/db/dist/esm/transaction-commit-work.js 351 B
packages/db/dist/esm/transactions.js 4.66 kB
packages/db/dist/esm/utils.js 1.7 kB
packages/db/dist/esm/utils/array-utils.js 270 B
packages/db/dist/esm/utils/browser-polyfills.js 304 B
packages/db/dist/esm/utils/btree.js 3.02 kB
packages/db/dist/esm/utils/callbacks.js 219 B
packages/db/dist/esm/utils/comparison.js 1.95 kB
packages/db/dist/esm/utils/cursor.js 753 B
packages/db/dist/esm/utils/error.js 262 B
packages/db/dist/esm/utils/get-or-create.js 155 B
packages/db/dist/esm/utils/index-optimization.js 2.58 kB
packages/db/dist/esm/utils/source-record.js 140 B
packages/db/dist/esm/utils/type-guards.js 230 B
packages/db/dist/esm/utils/uuid.js 530 B
packages/db/dist/esm/virtual-props.js 400 B
packages/react-db/dist/esm/DbProvider.js 317 B
packages/react-db/dist/esm/development.js 190 B
packages/react-db/dist/esm/HydrationBoundary.js 263 B
packages/react-db/dist/esm/index.js 330 B
packages/react-db/dist/esm/source-id-bindings.js 339 B
packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.45 kB
packages/react-db/dist/esm/useLiveQuery.js 3.08 kB
packages/react-db/dist/esm/useLiveQueryEffect.js 504 B
packages/react-db/dist/esm/useLiveSuspenseQuery.js 1.27 kB
packages/react-db/dist/esm/usePacedMutations.js 429 B

compressed-size-action::db-and-react-package-size

@KyleAMathews KyleAMathews changed the title test(db): guarantee aggregate select oracle reach test(db): enforce aggregate reach and retain campaign seeds Nov 2, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional comments: 1
docs/contributing/oracle-reviews/2026-11-02-aggregate-select-review.md-22-22: 1

22-22: Minor · Maintainability & Code Quality · Quick win

Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.

Use clear wording for the ORC-007 requirement.

requires fixed/fresh campaign parity is difficult to parse. State the two requirements explicitly.

Proposed wording
-ORC-007 requires fixed/fresh campaign parity and direct replay.
+ORC-007 requires parity between fixed and fresh campaigns and direct replay.

Source: Linters/SAST tools


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 96725175-4c1c-4a0d-878e-6ab275ca0ac8
Commits

Reviewing files that changed from the base of the PR and between df53538 and a0e323a.

Files selected for processing: 15
  • docs/contributing/oracle-coverage.md
  • docs/contributing/oracle-reviews/2026-11-02-aggregate-select-reach.md
  • docs/contributing/oracle-reviews/2026-11-02-aggregate-select-review.md
  • packages/db-ivm/tests/structural-identity-oracle.property.test.ts
  • packages/db/tests/declared-reach-oracle.property.test.ts
  • packages/db/tests/oracle-campaign.test.ts
  • packages/db/tests/oracle-campaign.ts
  • packages/db/tests/oracle-config.ts
  • packages/db/tests/oracle-replay.test.ts
  • packages/db/tests/query/aggregate-select-oracle.property.test.ts
  • packages/db/tests/query/includes-publication-oracle.test.ts
  • packages/db/tsconfig.aggregate.json
  • packages/db/vitest.aggregate.config.mjs
  • packages/offline-transactions/tests/transaction-serializer-oracle.property.test.ts
  • scripts/oracle-diagnostics.vitest.config.mjs
Files skipped from review as they are similar to previous changes: 2
  • docs/contributing/oracle-reviews/2026-11-02-aggregate-select-reach.md
  • docs/contributing/oracle-coverage.md

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 6 remain after this review.

@KyleAMathews
KyleAMathews merged commit c5ad6ad into main Nov 2, 2026
26 checks passed
@KyleAMathews
KyleAMathews deleted the codex/aggregate-select-reach branch November 2, 2026 22:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant