Repository navigation
regression(dvm): nested inner USING joins break Delta V1 conformance after #1197 #1198
Description
Reproduced regression
After the sole-maintainer-authorized merge of PR #1197 as main commit 04391eca2d53e548eafc84e82256df91eec01ea5, post-merge CI #39397208394 failed its light E2E 2/3 job (job 118624985581). 453 tests passed; one failed (test_v104_delta_reference_consumer_reads_and_acknowledges), repeated three times with the same error:
unsupported operator for DIFFERENTIAL mode: USING column 'id' must resolve
to one input in a nested join; use an explicit JOIN ... ON condition
Existing conformance fixture: tests/e2e_v104_conformance_tests.rs, around line 468. This declares a stream from five aliases of the same source:
SELECT a.id, a.value
FROM v104_delta_source a
JOIN v104_delta_source b USING (id)
JOIN v104_delta_source c USING (id)
JOIN v104_delta_source d USING (id)
JOIN v104_delta_source e USING (id)The failure occurs at stream creation, before the reference-consumer resnapshot/acknowledgement and deep-join delta assertions. This is valid PostgreSQL SQL, not an ambiguous query that the public contract excludes. The merged join_using_column resolver fails when both children of a nested join expose the USING key. That conservative guard was added to avoid treating joins as cross joins, but the previously joined id columns can be proven equal for this all-inner-USING chain; their provenance should not be discarded.
The separate post-merge TPC-H nightly #39403858941 failed SF-1 by timeout after six passing tests; SF-10 passed. Do not infer that this timeout shares a cause with the USING regression.
Required resolution
- Reproduce exactly on merged source
04391eca, with the existing five-alias Delta V1 reference-consumer test unchanged. Preserve the failing job log and exact artifact identity. - Determine the correct merged-column provenance for successive PostgreSQL
JOIN ... USINGoperations. Prove equality for repeated inner USING chains without silently choosing a column when an ordinary nestedONjoin leaves two unequal candidates. Outer joins require their proper merged-column semantics (including null extension / full-joinCOALESCEwhen applicable); keep unsupported genuinely ambiguous shapes fail closed. - Extend narrow parser/unit and packaged Testcontainers E2E regressions comparing complete result multisets and incremental refresh deltas with fresh rows, NULLs, and mismatched key values. Preserve the prior React MDM direct-view regression from fix(dvm): preserve USING joins in view sources #1197, quoted keys, permissions, rollback and the exact MAINTAIN-only contract.
- Restore
test_v104_delta_reference_consumer_reads_and_acknowledges, then rerun its full associated E2E shard, relevant release contract/Delta V1 checks and pinned React MDM idle delivery on a new exact producer artifact. Do not substitute earlier passing source/image hashes. - Obtain the sole owner's source review/approval through the ordinary repository workflow. Do not release, change MDM's qualified checksum, silently broaden React version admission, close pg-trickle perf(refresh): meet the S1 graph-refresh throughput gate #1168 or mark React feat: Hybrid CDC Phase 3-4 — WAL decoder & transition orchestration #11/feat: Hybrid CDC Phase 5-6 — drop/alter integration & monitoring #12 complete based on this issue alone.
Status: Main-source regression is confirmed by post-merge CI; safe producer release qualification is blocked. The successful original-pinned React #14 integration is unaffected because it uses original pg-trickle 0.108.3 with an explicit ON join, not this merged producer source.
Activity
grove commentedon Oct 20, 2026
Candidate underway
Draft PR #1199, branch
fix/1198-inner-using-provenance, builds on exact post-merge source04391eca. It keeps JOIN-USING equality as structured Expr predicates, permits a repeated nested INNER key only when the existing predicate proves equality for both exact column references, and leaves unrelated ON / outer-join ambiguity fail-closed. New parser unit and differential Testcontainers regressions check provenance and changing/mismatched rows; original five-alias reference consumer fixture remains unmodified.Head CI #39453032592 and lint #39453032712 are running/queued. No acceptance or merge authorization is implied by the candidate. Keep #1198 open until the existing Delta V1 reference test, relevant E2E shard, SQL/permissions and exact packaged downstream artifact tests succeed; retain SF-1 timeout as a separate regression observation.
ci: qualify pinned React MDM idle delivery for #1198
grove commentedon Oct 29, 2026
Implementation progress: PR #1199 now includes the nested inner USING provenance fix, merge from current main, and the exact five-alias Delta V1 reference-consumer test is restored. The packaged focused reference-consumer Testcontainers test and repaired full-join differential E2E test passed locally on the updated candidate; fmt, lint, unit tests (2674/2674), and frozen-harness validation passed. Fresh CI is running for head c58bb41; checks and sole-owner source review are still pending. The issue remains open until those requirements are met.
grove commentedon Oct 29, 2026
Fresh exact-head CI result: joint audit run 40863373169 failed before React idle-delivery assertions in its pinned compatibility fixture. The installed candidate reports pg_trickle 0.108.4, while the pinned React compatibility SQL admits only 0.108.0 and 0.108.3, so package_qualified is false. This is a producer-version admission block, not evidence of a nested USING failure. The issue explicitly forbids silently broadening React admission or changing the MDM qualified checksum; neither was changed. Failure artifact: https://github.com/trickle-labs/pg-trickle/actions/runs/40863373169/artifacts/12893302068. Keep #1198 open pending an authorized compatibility update and then exact-head audit plus sole-owner review.
grove commentedon Oct 29, 2026
Exact-head check update for PR #1199 head c58bb41: unit, integration, Windows compile, OpenTelemetry, package, shipping-image upgrade, Light E2E shards 2/3 and 3/3, Sensitive E2E shard 1/2, lint, fuzz, and static/security checks have passed. Sensitive E2E shard 2/2, Light E2E shard 1/3, checked-LSN runtime, release-evidence runtime controls, and S1 qualification are still running. The joint-audit package-admission failure remains unchanged; no compatibility admission or checksum was changed, and owner review is still absent.
grove commentedon Oct 29, 2026
Further exact-head CI update: both Sensitive E2E shards and all three Light E2E shards have now passed on PR head c58bb41. Checked-LSN runtime, release-evidence runtime controls, and S1 qualification remain active. The earlier joint-audit package-admission failure and missing sole-owner review still prevent qualification/merge.
grove commentedon Oct 29, 2026
Final exact-head CI update for PR #1199 head
c58bb41817feeebd0b3fc19c0a2d530c80d696c2: run 40863373307 completed successfully with 16 jobs passed, 0 failed, and 18 skipped. This includes the checked-LSN packaged runtime, release-evidence runtime controls, S1 qualification, both Sensitive E2E shards, and all three Light E2E shards. The separate joint-audit run 40863373169 still fails at the pinned React MDM-source package-admission gate because the fixture admits 0.108.0 and 0.108.3, not 0.108.4. I have not changed that admission list or the qualified MDM checksum. PR #1199 remains open andUNSTABLE; the required sole-owner review is still absent. No merge.ci: pin qualified pg-react 0.108.4 for #1198