Content temporarily unavailable
RC release scope: retained broader oracle failures#
This release deliberately defers the broader production discoveries below. Their laws remain accepted and their failing comparisons remain preserved. No GREEN, retirement, or complete metadata/literal closure is claimed.
The exact original sources and deletion status are recoverable from the full campaign snapshot accepted-campaign-20261029T065509Z (manifest SHA256 7eb801592ddc3f5041f7db862052800e86523403784827552ad683c8eb40f0aa). Its tracked patch, complete new/modified source archive and per-file manifest are retained together. The accepted chunk records and independent evidence remain in the original campaign evidence directory. The complete accepted source tree is also preserved on local branch codex/rc-oracle-followup, commit db38b4e009146af53e46aeeef3206269f5968af8. No follow-up PR is claimed until one is actually created.
- P09: Effect LEFT-join startup emits a phantom update. The accepted owner has 152 passes / 64 intended REDs and 5,512 reached cells; its concrete witness also fails frozen main.
- P10: reserved metadata leaks or is spoofed before correlated-child functional callbacks. The approved callback law remains normative. The accepted runtime owner has 377 passes / 203 intended REDs and all 2,153 cells; the bounded concrete lane has the same seven failures and one compatible pass on main.
- P11/P12: raw undefined becomes null and selected empty records disappear. Their root/QueryRef runtime owner retains 18 REDs, correlated receiver 72 REDs, and source-public type receiver 280 REDs. Every declared receiving cell and accepted calibration remains preserved. These paths are source-unchanged; a full main-baseline campaign was not executed.
- The appended chunk-24 type receiver retains 672 ordinary-metadata leak REDs and 12 discriminant-specific union-spread REDs, all 6,240 declared states and its corrected actual-callback observation/43-control evidence. Static and runtime observations remain distinct.
The original 24 nullable-facade/public-output type campaigns and nine controls remain active on the release branch, as do root/union/join/timeline/facade metadata regressions, their shared grammar/source/interval models, and the already-green descriptor/schema/source-ID improvements. The release's cache, Offline, mutation, publisher, CI and packed-artifact gates remain required.
The following complete files travel together to follow-up. The appended literal slice of subquery-user-value-oracle.test.ts and appended receiving slice of virtual-row-fields-types-oracle.test.ts are also preserved in that snapshot. No skipped tests or narrowed expected comparisons implement this partition.
- packages/db/tests/query/virtual-row-fields-effect-oracle.test.ts
- packages/db/tests/query/virtual-row-fields-input-oracle.ts
- packages/db/tests/query/virtual-row-fields-input-driver.ts
- packages/db/tests/query/virtual-row-fields-input-oracle.test.ts
- packages/db/tests/query/subquery-literal-value-oracle.ts
- packages/db/tests/query/subquery-literal-value-driver.ts
- packages/db/tests/query/subquery-literal-correlated-oracle.ts
- packages/db/tests/query/subquery-literal-correlated-driver.ts
- packages/db/tests/query/subquery-literal-correlated-factories.ts
- packages/db/tests/query/subquery-literal-correlated-oracle.test.ts
- packages/db/tests/query/subquery-literal-types-oracle.ts
- packages/db/tests/query/subquery-literal-types-support.ts
- packages/db/tests/query/subquery-literal-types-oracle.test.ts
- packages/db/tests/query/virtual-row-fields-receiver-types-oracle.ts
- packages/db/tests/query/virtual-row-fields-receiver-types-support.ts
The coverage map and architecture point here so historical full-campaign claims below those entries cannot be mistaken for current release registrations. Before follow-up repair, restore the exact dependent owner/driver/model slices, reproduce their retained RED and reach, and then supply GREEN/mutant evidence.
Further retained receiving and guidance gaps#
P06/P07/P13/P14 prose conflicts are corrected on the release branch. Two coverage obligations remain separate from that correction: P08 needs the actual custom-adapter fenced callback to hold an establishing applied receipt before load settlement; P14 needs the actual lazy child-ready call outcome compared with the existing source-health model, instead of catching and discarding a throw. Preserve the accepted owner, fresh-run neighbors and omitted-callback reach controls before any follow-up production repair.
Installed declaration emission also exposes an unchanged-main portability gap. The exact initial RC artifacts and strict installed main 95460bc875 both fail in ESM and CommonJS for an exported inferred live-query factory (TS2742 twice, TS4058) and an exported inferred Collection value (TS2742 twice, TS4023). Private compiler/live types and LIVE_QUERY_INTERNAL cannot be named. This affects libraries emitting declarations for these inferred exports, rather than ordinary runtime use. Handler admission passes in both formats; it cannot prove this separate portability law. The release does not repair this broader gap.
The following original factory witness is preserved verbatim so follow-up does not depend only on temporary artifacts. Compile its .mts and .cts forms with strict NodeNext declaration emission against actual installed tarballs. Keep the original export unannotated. A separate named public view containing only readonly toArray emits on both cuts, but is not a full-Collection annotation workaround. Add legal generated row/key shapes and both factory and inferred-value emission paths to the public-type owner before production repair.
import { IR, Query, createLiveQueryCollection, eq, include, materialize, toArray } from '@tanstack/db';
import type { Collection, QueryResult } from '@tanstack/db';
type LiteralSourceRow = {
id: number;
version: number;
optional?: string | null;
};
declare const source: Collection<LiteralSourceRow>;
declare const parents: Collection<{
id: number;
group: number;
}>;
declare function consume(row: object): void;
declare function consumeChild(row: object): void;
declare function consumeParent(row: object): void;
type __ArrayBase = Array<unknown>;
export function receiver() {
const selected = new Query()
.from({ row: source })
.select(({ row }) => ({ id: row.id, version: row.version, value: 0 }));
const __observedQuery = selected;
const __observedCollection = createLiveQueryCollection({
query: __observedQuery,
getKey: (row) => row.id
});
type __Observe_finalQuery = QueryResult<typeof __observedQuery>;
type __Observe_finalCollection = typeof __observedCollection.toArray[number];
return __observedCollection;
}Original source SHA256 is c6c8c1da415901f4935f611387e7f6a3234b5f9753544256f0680038dcc1b50d. Current/main final receiving receipts are eb157fdc5f567fc04647d206762d794455a998620adc3d9383abf74e0bfc503c / 2987feb2620ba1699869b12dbe51c811b6b0e6c389d06a176bf9a417d1827495. The original strict emitted factory/value REDs remain required follow-up receivers. An agent-added narrow Collection<Row, number> annotation was an invalid control on both cuts and supplies no product-failure credit.
Live-query mutation input and full-handler receiving types#
The release also defers a public read/write type conflation. Independent source checking compared current 180b920edd6c88a7024ed407cd04934678c7d5bf with main 95460bc875a2259b34eea534e5592a9d0394e73f using TypeScript 5.9.3. Both already carry required virtual metadata from a no-select query's published result into its default mutation input and invariant full handler Transaction/Collection. The nullable-facade and union-brand repairs do not change this path. Required readonly metadata on published read rows remains the accepted law; this record does not authorize removing it.
A stable public witness configures onInsert, then calls collection.insert({ id: 'one', label: 'new', rank: 1 }) on a live-query Collection of that ordinary row. Both revisions reject the business row with TS2345 because computed virtual fields are missing. Separately, a reusable UpdateMutationFn<Row> on explicit live-query configs, core creation and React config hooks passes when a fresh Program requests diagnostics first, but fails with TS2322/TS2769 after observing its context/published aliases. This checking order sensitivity reproduces on both cuts; it is not a stable CLI RED. Ordinary source handlers, contextual live handlers and the free-result options factory are positive controls. All 26 final independent Programs have no setup errors.
Root explicitly retained this public defect for follow-up while permitting a type-only structural recorder annotation in the JavaScript runtime schema receiver. That receiver still checks every ordinary handler field and makes no public mutation-type claim. Its green histories cannot close this separate gap.
Extend the public metadata type owner and mutation-handler admission owner with the same authored business row through live-query factories and framework configs. Compare plain mutation input and reusable full-handler admission while read results retain required metadata. Add source-public, built/installed and framework receiving checkpoints; retain ordinary diagnostics and observed-type checking orders, or a stable source discriminator, before production repair.
The exact source/diagnostic matrix SHA256 is 3aac69adf834870f402e3334cdfe372f6f07b924ff5f67fd54e406eba69ef14d; the classification report is 2e60e015e5f42b24027eb53d13863d76c2b2530c01a49616cc746c70952906ab. Both remain under the original campaign evidence directory as metadata-mutation-classification-matrix.json and metadata-mutation-type-classification.md. No production repair or bug-class closure is claimed.
Shared-source replay with late include demand#
The release defers a replay publication defect confirmed on release head d9911f17b5e9de872cac5c9fd745c656ff50d3ad and exact main 95460bc875a2259b34eea534e5592a9d0394e73f. The primary owner is packages/db/tests/query/load-subset-replay-refinement-oracle.test.ts. Its native named property replay.ordered-failed-replay, seed 521312968, path 255:3:3:8:11:9 fails on both cuts at checkRetention, after the final settle: row1 is public while the retained complete window is []. An independent reviewer reproduced both failures and accepted this classification. The owner is byte-identical on both cuts (SHA256 27f76be612a3058235953e5b984b77ba9274f1aab073035543161b71d4d14e48).
The accepted authority is packages/db/src/query/live/ARCHITECTURE.md, “Replay participants and failure,” and normative law 9. A live query's join and include subscriptions to one source share one publication barrier; demand started while that source replay remains open must hold the prior complete result until its current acquisition settles or aborts. Here the include has no demand at truncate. It acquires and replaces marker demand while the join replay remains open. Its failed acquisition retires, but its replacement for key1 is still pending and nonaborted when the final join load settles. The model has no retained failure at that cut. Publishing row1 therefore violates the shared-source barrier; a stale model failure does not explain the RED.
The preserved seven-command witness is:
[
{ "type": "hold" },
{ "type": "truncateMarkers" },
{ "type": "settle", "ok": true, "keepHolding": true, "newest": false },
{ "type": "settle", "ok": false, "newest": true, "keepHolding": true },
{ "type": "settle", "ok": true, "keepHolding": true, "newest": false },
{ "type": "mark", "id": 1, "on": false },
{ "type": "settle", "ok": true, "keepHolding": false, "newest": false }
]Its scenario is descending, offset1, limit2, no ties, no peer, joined: none (anti-join), on-demand markers, includes enabled, aborted marker loads resolve, and history starts after preload. From each frozen snapshot's packages/db, the actual noninstrumented replay command was:
TANSTACK_DB_ORACLE_PROPERTY=replay.ordered-failed-replay \
TANSTACK_DB_ORACLE_SEED=521312968 \
TANSTACK_DB_ORACLE_PATH=255:3:3:8:11:9 \
../../node_modules/.bin/vitest run --config ../../replay-db.config.mts \
--coverage.enabled=false --typecheck.enabled=false \
tests/query/load-subset-replay-refinement-oracle.test.ts \
-t 'keeps the last publication through a failed replay'Both runs used Node 24.19.0, Vitest 4.1.12 and fast-check 3.23.2. The scratch config merges each cut's DB config and aliases DB/IVM to that cut's own source; tools alone are borrowed. Independent verification compared all 154 DB/IVM source files with their Git objects, with no differences or foreign source. This reproduces the named assertion failure, not CI's entire environment. The original CI log remains under the campaign evidence directory at ci-head-d9911f17b/failed-123338231520.log; the frozen cuts, exact logs, diagnostic logs and independent review remain in ci-replay-521312968/. The independent report independent-retention-review.md has SHA256 a36d5793c87495efb5516ca42ee4adeede867da462bc2e869e6c3698a44b63db; its source verification receipt has SHA256 7385d6a029caa6daeab3b1d285164df7a8dd3c4598c1e892b4bba0f944b51bde.
Before production repair, preserve this replay and add measured reach for a receiving subscription with no demand at truncate, late demand while a sibling replay is loading, failure retirement followed by a held replacement, and success/abort neighbors across multiple subscriptions to the same source. Then demonstrate the retained-publication comparison before replacement settlement and after it. The original oracle remains active and unchanged; there is no skip, narrowed comparison, retry-away, GREEN, or bug-class closure claim. Its CI RED remains an open baseline defect under this explicit release scope deferral.