TanStack

Content temporarily unavailable

IndexedDB approved donor follow-up

Implementation revision: 08c58153f. Starting revision: 32240d53af003f223f333c3bca1105ada02e4fbd. The maintainer approved all recommendations after the donor port: core typed-key identity, abnormal closure, mutable capture, dedicated workers, native naming and WebKit Blob evidence, and optional blocked diagnostics. Atomic storage read-modify-write remains a separate API proposal; native durability stays unchanged.

Laws and receiving evidence

Law and authorityIndependent owner and legal historiesRequired observations and enforcement
Collection key identity distinguishes numeric and string keys; existing public key contract, HC005.Core optimistic transaction payload owner: four same-text numeric/string pairs, both author orders, four operation histories and success/rejection (64 cells). Existing same-key collapse remains.Exact handler list preserves order, type, multiplicity and values; public keyed rows and size after settlement. Original source fails 32 original-order cells. Native host owner receives a same-transaction typed pair through persistence, peer update, import, clear and restore.
Supported mutable updates capture values at callback return; imports capture validated rows before awaiting storage. Approved ownership contract.Core detachment model uses independent native construction/structuredClone and graph checks. Adapter value companion crosses six mutable shapes with update/import and real handler/storage holds.Caller changes cannot alter immediate optimistic update, settled public, peer, export or raw durable values. Removing import capture fails all six import assertions. Original proxy fails 11 corrected detachment assertions; no timeout is counted as a kill.
Binary snapshots preserve native bytes, range, and buffer/view aliases. Existing typed-array compatibility remains.Core detachment owner crosses local/foreign/shared buffers and both property orders, plus strict one-argument and prototypal subclasses. Native iframe companion receives foreign buffer/Uint8Array/DataView in each engine.Detached identity, exact entire bytes, offset/length, native type and graph alias. Intermediate fixes fail strict-constructor and buffer-first alias cells; final source passes. Shared-memory concurrency, detached/resizable buffers, and arbitrary class private state are outside this law.
Actual native close retires the connection with error status and retained snapshot. Approved extension of managed closure.Retirement owner: idle/ready/loading and five admitted persistence operations. Independent expected native abort/complete and caller outcomes.Native transaction result, error status, retained public rows, late-admission rejection and fresh restore. Removing close listener fails six status assertions (idle/loading already reject failed native reads). Native Chromium storage clearing receives seven actual close histories, six with admitted work.
Blocked diagnostics observe a pending operation; only native terminal outcome settles it. Approved optional API.Wrapper native open/delete matrix plus managed factory forwarding. Independent blocked listener proves reach.Exact old/new versions, callback count and pending state, reentrant blocker release, final result. Omitting factory forwarding fails the callback observation. No timeout, cancellation or fallback is inferred.
Names route to the declared store, with unaffected neighbors. Existing isolation contract.Native host owner substitutes six names with prefix neighbor and anchor stores. Authored per-store arrays receive typed insert, peer update, replacement, clear and restore.Every public, durable, export and restored store snapshot. Controlled exact-name metadata mutant calibration is inherited from the donor port. Native metadata-version isolation remains owned by the controlled compatibility suite.
Dedicated workers share the page persistence contract. Approved host scope.Real worker/page IndexedDB and BroadcastChannel history: insert, peer update, import, close, late write and worker recreation.Public and durable rows, retained error snapshot, rejected late write and restored rows. Existing transport calibration remains authoritative; service/shared workers and suspended-host delivery are unclaimed.
A provider failure cannot count as value preservation. Existing truthful-settlement law.Ordinary WebKit raw Blob failure has exact rejection and healthy-suffix checks. Disposable persistent WebKit requires raw acceptance and executes the same full histories.Persistent WebKit cannot take the failure branch. Both Blob-containing preservation cells execute successfully there. This closes the local receiving gap without broadening the rejection classifier.

These laws are encoded and enforced within the finite histories above. They do not establish every combination of lifecycle, value shape and host. Existing coverage-map obligations for unordered cross-Collection writes, suspension/lost notifications, post-durable notification failure, quota/eviction and physical crash remain separate; no new implementation is silently deferred.

Follow-up reviewer reconciliation

Two read-only agents reviewed the proposed implementation and simplifications. The reviewer found actual compatibility regressions in the first binary-copy repair and identified missing native receiving evidence. Those findings were useful and technically accurate. The simplifier identified concrete cleanup hazards and duplicate teardown. I would use both again for this bounded work. Their initial findings were code-reading claims; executable evidence below supplies the behavioral verification. A final read-only review also passed 17 constructor/alias probes and found no additional concrete regression.

IDOriginal claimTechnical verdict, evidence and destinationFinal action
R1Length-sensitive typed-array subclasses receive a buffer and throw.Confirmed. Strict one-argument and legacy-constructor cells fail intermediate source. Core detachment owner preserves existing construction semantics; native constructors preserve range.fixed-now
R2Foreign standard typed arrays fail because backing buffers are flattened.Confirmed. Foreign buffer-first/view-first graph checks and native iframe witnesses cover the missing realm axis.fixed-now
R3Shared-buffer typed arrays regress.Confirmed. Scalar edits, assigned views, both alias orders, detached bytes and prototype checks pass; concurrent shared-memory writes are explicitly excluded.fixed-now
R4Capture lacks native receiving evidence.Confirmed test gap. Real handler/storage holds and caller mutation reach the native value oracle in all profiles.fixed-now
R5Forced-close abort lacks native in-flight evidence.Confirmed test gap. Chromium native storage clearing closes/aborts loading and five admitted writes; actual close counters and native outcomes are asserted.fixed-now
R6Managed onBlocked forwarding has no witness.Confirmed test gap. Independent blocked reach plus diagnostic observation rejects omitted forwarding.fixed-now
S1Preserve numeric-length subclass construction without more machinery.Same product defect as R1; exact one-argument compatibility retained. Native binary branches earn their weight through alias/range laws.duplicate of R1
S2A terminated worker callable can hang cleanup.Confirmed fixture gap. Cleanup becomes idempotent after termination; other commands reject immediately. Native recreation history uses the path.fixed-now
S3Partial host/worker construction leaks resources.Confirmed fixture gap. Failed host setup cleans Collections and closes the descriptor; failed worker setup terminates the worker. Aggregated errors retain the primary failure.fixed-now
S4Forced-close fixture releases its gate twice unnecessarily.Confirmed cleanup simplification. Redundant release removed, disposer preserved.fixed-now
S5CDP detach can be bypassed on assertion failure.Confirmed fixture gap. Register detach with existing failure-preserving cleanup immediately.fixed-now

Adjacent findings from R1-R3 were not discarded: exact argument count, prototypal subclasses, buffer-first traversal, shared backing identity and spoofed ordinary data tags all have executable controls. A later native capture admission failure also releases its gate through finally.

Loss accounting: 11 raw items = 10 fixed-now + 1 duplicate. No confirmed-open, refuted, stale, deferred or unresolved design-decision items remain in this follow-up review. This is bounded closure, not a universal correctness claim.

Calibration receipts

All temporary production substitutions were restored in finally. The runner used Vitest with coverage disabled and at most two workers.

  • Original 32240d53 proxy against the corrected withChangeTracking driver: 11 assertion failures, 3 passing controls, 77 unrelated skipped cells.
  • Import modified: item instead of structuredClone(item): six captured-value assertion failures. The actual delayed native put is reached.
  • Remove native close registration: six error-status assertion failures; idle/loading distinguish errors already exposed by failed reads.
  • Remove managed onBlocked forwarding: one diagnostic-list assertion failure after an independently observed native blocked event; blocker cleanup still permits terminal settlement.
  • Original global mutation key: 32 typed-key payload assertion failures. The final grammar also crosses both author orders; unchanged same-key laws remain.

An earlier binary RED draft observed raw getChanges before detachment. It was not valid evidence for callback-return capture and is excluded. The replacement calibration above uses withChangeTracking, the actual detachment boundary. The temporary logs are named /tmp/pr1179-calibrate-{original-copy,import-capture,native-close,blocked-forwarding}.txt; the named edits and selectors make these finite checks directly reproducible.

Guide conformance and code weight

ORC-001–003: approved contracts, independent authored rows/value descriptions, and adjacent literate prose separate model, grammar, driver and comparison. ORC-004/007: additions are finite enumerations; existing fixed/random campaigns and seed/path replay are unchanged. ORC-005/006: native gates/events establish reach, and the assertion kills above establish sensitivity. ORC-008/009: no new lifecycle state machine; canonical native transaction, Collection status and settlement terms remain. ORC-010: teardown retains primary errors, including worker replacement and CDP cleanup. ORC-011/013: native structuredClone, authored byte/graph checks, provider probes, both traversal orders, strict subclasses and pending-versus-terminal neighbors challenge plausible wrong designs. ORC-012: this versioned record identifies source and calibrations. ORC-014: native value, worker and name receiving runs in all three engines; forced close is explicitly Chromium-only, and the raw WebKit failure has a separate successful provider.

Production adds binary snapshot support and preserves prior custom construction; it adds no reconnect, retry queue, fallback or database epoch. Adapter capture, closure and diagnostics use existing control flow. Tests and explanatory code carry most of the growth. Exact final weights and complete merged-revision validation are recorded in the receipt below.

Final merged-revision receipt

The normal merge 3944198461443af22b52c7e7e063b672624ebd00 includes origin/main at 48065980e. The follow-up 36cdc3b89 only removes a now-unsafe private-member map entry, renames two test generator variables and formats prose. No published history was rewritten.

  • Complete core suite: 8,717 cases, 250 files, runtime and configured type checks green. The earlier run exposed 36 test root-directory errors and one unrelated helper return-type mismatch. A test-specific root and the actual operation return-type union repair those checks without changing assertions.
  • Complete adapter suite: 2,467 cases, 15 files, no type errors. Standalone source/test/browser-driver typechecking also passes.
  • Complete native suite: 247 passed, 14 skipped, 261 total. The skipped cases are exactly the seven Chromium-only forced-close controls in each other engine. Persistent WebKit passes the same rich-value corpus, including both Blob shapes.
  • Fresh db-ivm, db and adapter ESM/CommonJS/declaration builds pass. After the private-member map cleanup, rebuilt core passes 290 distribution cases, the minified public API check (100 error names, metadata, queries and updates), 16 package-consumer cases and three packed native-browser cases.
  • Changed-file lint, formatting, whitespace and the 382-name private-member map check pass. The map drops detach because the new tests use Playwright's public method with that name. Dependency builds finish before final lint/consumer runs.

Commands use direct local Node entry points for Vitest, Vite, TypeScript and Playwright. Vitest runs use coverage disabled and at most two workers. The configured registry denies locked Rollup 4.64.0 with HTTP 403; local builds use cached 4.59.0 while the lockfile keeps 4.64.0. These are local results, not a claim that pnpm test:pr or remote CI passed.

Before merging unrelated main changes, this follow-up's production delta is 75 added / 13 removed lines (net +62). Tests and receiving drivers add 1,215 / remove 22 lines; documentation adds 392 / removes 132 lines; configuration adds 18 / removes 5. The final formatting, map cleanup, receipt and changesets are additional supporting changes. Binary native compatibility accounts for 50 net production lines; the typed-key repair is net-neutral, and adapter capture/closure/diagnostics add 12. No second lifecycle or recovery machinery was introduced.

CI fixture follow-up from 1c46068cf

CI's lint job ran without dependency builds. The adapter's main TypeScript configuration resolved @tanstack/db through absent dist declarations, while its test configuration alone had source paths. ESLint consequently lost Collection types and misclassified six required assertions as unnecessary. Temporarily removing both dependency builds locally reproduced all six errors and the unused suppression warning. Moving the shared source paths to the main configuration makes the same clean-checkout lint pass without changing the oracle assertions. The test configuration inherits those paths. Rebuilt published declarations still import the package name, as confirmed by the portable consumer checks.

The browser CI lane also exposed packing's reliance on the host npm version. npm pack --ignore-scripts ran fractional-indexing's lifecycle build under that runner and failed before any browser consumer could execute. The fixture now uses workspace-pinned pnpm and an explicit ignore-scripts=true option for every package. This removes the separate external-dependency command and preserves already-built artifacts. No package lifecycle rebuild is part of the witness.

tests/pack-hooks.test.ts independently authors prepack, prepare and postpack hooks that leave a marker and rewrite a built file. Suppressed packing must leave no marker and preserve that file. An enabled native control proves each hook is reachable. A temporary hooks-enabled helper fails all three suppression assertions, and the repaired helper passes. These checks live in the package lane, so ordinary runtime tests still do not pack dependencies.

Validation: clean-checkout and built-checkout package lint, standalone typecheck, package build, all 1,623 retirement-oracle cases, 19 package cases, and packed browser consumers in Chromium/Firefox/WebKit pass. Formatting and whitespace checks pass. Product code and oracle expectations are unchanged. The earlier full-suite results retain their original revision boundaries.