Skip to content

fix(zero): Dupe relationship causes "Node does not exist" in ArrayView#5597

Open
aboodman wants to merge 2 commits intomainfrom
aa/dupe-relationship
Open

fix(zero): Dupe relationship causes "Node does not exist" in ArrayView#5597
aboodman wants to merge 2 commits intomainfrom
aa/dupe-relationship

Conversation

@aboodman
Copy link
Contributor

@aboodman aboodman commented Feb 24, 2026

@aboodman aboodman requested a review from tantaman February 24, 2026 10:25
@vercel
Copy link

vercel bot commented Feb 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
replicache-docs Ready Ready Preview, Comment Feb 24, 2026 6:29pm
zbugs Ready Ready Preview, Comment Feb 24, 2026 6:29pm

Request Review

@aboodman aboodman changed the title fix(zero): Duplicate relationship name could cause fix(zero): Duplicate relationship name cases "Node does not exist" error in ArrayView Feb 24, 2026
@aboodman aboodman changed the title fix(zero): Duplicate relationship name cases "Node does not exist" error in ArrayView fix(zero): Duplicate relationship causes "Node does not exist" in ArrayView Feb 24, 2026
@aboodman aboodman force-pushed the aa/dupe-relationship branch from 51c0114 to 1d8d374 Compare February 24, 2026 10:26
@aboodman aboodman changed the title fix(zero): Duplicate relationship causes "Node does not exist" in ArrayView fix(zero): Dupe relationship causes "Node does not exist" in ArrayView Feb 24, 2026
@aboodman aboodman enabled auto-merge February 24, 2026 10:26
@github-actions
Copy link

github-actions bot commented Feb 24, 2026

🐰 Bencher Report

Branchaa/dupe-relationship
TestbedLinux
Click to view all benchmark results
BenchmarkFile SizeBenchmark Result
kilobytes (KB)
(Result Δ%)
Upper Boundary
kilobytes (KB)
(Limit %)
zero-package.tgz📈 view plot
🚷 view threshold
1,905.47 KB
(+0.01%)Baseline: 1,905.29 KB
1,943.40 KB
(98.05%)
zero.js📈 view plot
🚷 view threshold
247.28 KB
(+0.04%)Baseline: 247.19 KB
252.13 KB
(98.07%)
zero.js.br📈 view plot
🚷 view threshold
67.76 KB
(+0.06%)Baseline: 67.72 KB
69.08 KB
(98.10%)
🐰 View full continuous benchmarking report in Bencher

@github-actions
Copy link

github-actions bot commented Feb 24, 2026

🐰 Bencher Report

Branchaa/dupe-relationship
Testbedself-hosted

🚨 11 Alerts

BenchmarkMeasure
Units
ViewBenchmark Result
(Result Δ%)
Lower Boundary
(Limit %)
1 exists: track.exists(album)Throughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
11.47 ops/s x 1e3
(-11.51%)Baseline: 12.96 ops/s x 1e3
11.84 ops/s x 1e3
(103.23%)

10 exists (OR)Throughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
3.42 ops/s x 1e3
(-8.80%)Baseline: 3.75 ops/s x 1e3
3.44 ops/s x 1e3
(100.76%)

12 exists (OR)Throughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
2.86 ops/s x 1e3
(-10.12%)Baseline: 3.18 ops/s x 1e3
2.92 ops/s x 1e3
(102.14%)

12 level nestingThroughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
2.54 ops/s x 1e3
(-8.56%)Baseline: 2.78 ops/s x 1e3
2.56 ops/s x 1e3
(100.67%)

2 exists (AND): track.exists(album).exists(genre)Throughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
4.40 ops/s x 1e3
(-10.06%)Baseline: 4.89 ops/s x 1e3
4.50 ops/s x 1e3
(102.32%)

3 exists (AND)Throughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
1.71 ops/s x 1e3
(-10.67%)Baseline: 1.92 ops/s x 1e3
1.75 ops/s x 1e3
(102.23%)

5 exists (AND)Throughput
operations / second (ops/s)
📈 plot
🚷 threshold
🚨 alert (🔔)
275.16 ops/s
(-8.66%)Baseline: 301.24 ops/s
276.19 ops/s
(100.37%)

5 exists (OR)Throughput
operations / second (ops/s)
📈 plot
🚷 threshold
🚨 alert (🔔)
141.78 ops/s
(-10.70%)Baseline: 158.76 ops/s
145.04 ops/s
(102.30%)

Nested 2 levels: track > album > artistThroughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
3.85 ops/s x 1e3
(-9.95%)Baseline: 4.27 ops/s x 1e3
3.94 ops/s x 1e3
(102.54%)

Nested 4 levels: playlist > tracks > album > artistThroughput
operations / second (ops/s)
📈 plot
🚷 threshold
🚨 alert (🔔)
645.54 ops/s
(-8.02%)Baseline: 701.81 ops/s
648.41 ops/s
(100.45%)

Nested with filters: track > album > artist (filtered)Throughput
operations / second (ops/s) x 1e3
📈 plot
🚷 threshold
🚨 alert (🔔)
3.10 ops/s x 1e3
(-12.42%)Baseline: 3.54 ops/s x 1e3
3.25 ops/s x 1e3
(104.85%)

Click to view all benchmark results
BenchmarkThroughputBenchmark Result
operations / second (ops/s)
(Result Δ%)
Lower Boundary
operations / second (ops/s)
(Limit %)
1 exists: track.exists(album)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
11,470.97 ops/s
(-11.51%)Baseline: 12,962.96 ops/s
11,840.93 ops/s
(103.23%)

10 exists (AND)📈 view plot
🚷 view threshold
179,337.07 ops/s
(-6.39%)Baseline: 191,584.83 ops/s
177,905.76 ops/s
(99.20%)
10 exists (OR)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
3,418.62 ops/s
(-8.80%)Baseline: 3,748.41 ops/s
3,444.72 ops/s
(100.76%)

12 exists (AND)📈 view plot
🚷 view threshold
158,979.00 ops/s
(-6.27%)Baseline: 169,617.48 ops/s
157,914.07 ops/s
(99.33%)
12 exists (OR)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
2,858.25 ops/s
(-10.12%)Baseline: 3,180.15 ops/s
2,919.53 ops/s
(102.14%)

12 level nesting📈 view plot
🚷 view threshold
🚨 view alert (🔔)
2,539.13 ops/s
(-8.56%)Baseline: 2,776.70 ops/s
2,556.07 ops/s
(100.67%)

2 exists (AND): track.exists(album).exists(genre)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
4,398.87 ops/s
(-10.06%)Baseline: 4,891.07 ops/s
4,501.14 ops/s
(102.32%)

3 exists (AND)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
1,710.92 ops/s
(-10.67%)Baseline: 1,915.23 ops/s
1,749.11 ops/s
(102.23%)

3 exists (OR)📈 view plot
🚷 view threshold
877.93 ops/s
(-8.00%)Baseline: 954.27 ops/s
869.79 ops/s
(99.07%)
5 exists (AND)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
275.16 ops/s
(-8.66%)Baseline: 301.24 ops/s
276.19 ops/s
(100.37%)

5 exists (OR)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
141.78 ops/s
(-10.70%)Baseline: 158.76 ops/s
145.04 ops/s
(102.30%)

Nested 2 levels: track > album > artist📈 view plot
🚷 view threshold
🚨 view alert (🔔)
3,845.37 ops/s
(-9.95%)Baseline: 4,270.33 ops/s
3,943.24 ops/s
(102.54%)

Nested 4 levels: playlist > tracks > album > artist📈 view plot
🚷 view threshold
🚨 view alert (🔔)
645.54 ops/s
(-8.02%)Baseline: 701.81 ops/s
648.41 ops/s
(100.45%)

Nested with filters: track > album > artist (filtered)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
3,102.63 ops/s
(-12.42%)Baseline: 3,542.58 ops/s
3,253.13 ops/s
(104.85%)

planned: playlist.exists(tracks)📈 view plot
🚷 view threshold
247.54 ops/s
(-24.20%)Baseline: 326.56 ops/s
-16.43 ops/s
(-6.64%)
planned: track.exists(album) OR exists(genre)📈 view plot
🚷 view threshold
121.64 ops/s
(-7.48%)Baseline: 131.47 ops/s
101.05 ops/s
(83.07%)
planned: track.exists(album) where title="Big Ones"📈 view plot
🚷 view threshold
6,463.39 ops/s
(-1.69%)Baseline: 6,574.25 ops/s
5,837.82 ops/s
(90.32%)
planned: track.exists(album).exists(genre)📈 view plot
🚷 view threshold
7.15 ops/s
(-49.39%)Baseline: 14.14 ops/s
-16.34 ops/s
(-228.40%)
planned: track.exists(album).exists(genre) with filters📈 view plot
🚷 view threshold
1,949.63 ops/s
(-26.68%)Baseline: 2,659.25 ops/s
-475.08 ops/s
(-24.37%)
planned: track.exists(playlists)📈 view plot
🚷 view threshold
1.58 ops/s
(-24.61%)Baseline: 2.09 ops/s
-0.15 ops/s
(-9.76%)
unplanned: playlist.exists(tracks)📈 view plot
🚷 view threshold
232.30 ops/s
(-26.93%)Baseline: 317.92 ops/s
-14.32 ops/s
(-6.16%)
unplanned: track.exists(album) OR exists(genre)📈 view plot
🚷 view threshold
19.31 ops/s
(-22.36%)Baseline: 24.87 ops/s
1.60 ops/s
(8.29%)
unplanned: track.exists(album) where title="Big Ones"📈 view plot
🚷 view threshold
51.22 ops/s
(-1.13%)Baseline: 51.81 ops/s
48.62 ops/s
(94.93%)
unplanned: track.exists(album).exists(genre)📈 view plot
🚷 view threshold
7.10 ops/s
(-49.53%)Baseline: 14.06 ops/s
-16.19 ops/s
(-228.16%)
unplanned: track.exists(album).exists(genre) with filters📈 view plot
🚷 view threshold
49.87 ops/s
(-0.97%)Baseline: 50.36 ops/s
47.24 ops/s
(94.73%)
unplanned: track.exists(playlists)📈 view plot
🚷 view threshold
1.58 ops/s
(-24.62%)Baseline: 2.09 ops/s
-0.15 ops/s
(-9.71%)
zpg: all playlists📈 view plot
🚷 view threshold
5.11 ops/s
(+17.60%)Baseline: 4.35 ops/s
0.92 ops/s
(18.00%)
zql: all playlists📈 view plot
🚷 view threshold
5.87 ops/s
(-7.17%)Baseline: 6.32 ops/s
4.90 ops/s
(83.48%)
zql: edit for limited query, inside the bound📈 view plot
🚷 view threshold
197,395.51 ops/s
(+1.32%)Baseline: 194,814.67 ops/s
179,061.44 ops/s
(90.71%)
zql: edit for limited query, outside the bound📈 view plot
🚷 view threshold
210,691.13 ops/s
(+2.41%)Baseline: 205,732.37 ops/s
188,425.70 ops/s
(89.43%)
zql: push into limited query, inside the bound📈 view plot
🚷 view threshold
111,760.77 ops/s
(-0.18%)Baseline: 111,965.07 ops/s
96,897.19 ops/s
(86.70%)
zql: push into limited query, outside the bound📈 view plot
🚷 view threshold
373,285.65 ops/s
(-2.74%)Baseline: 383,785.82 ops/s
340,539.73 ops/s
(91.23%)
zql: push into unlimited query📈 view plot
🚷 view threshold
400,545.99 ops/s
(+1.78%)Baseline: 393,528.35 ops/s
279,736.42 ops/s
(69.84%)
zqlite: all playlists📈 view plot
🚷 view threshold
1.52 ops/s
(-4.08%)Baseline: 1.59 ops/s
1.41 ops/s
(92.91%)
zqlite: edit for limited query, inside the bound📈 view plot
🚷 view threshold
66,838.31 ops/s
(+1.02%)Baseline: 66,160.75 ops/s
58,546.23 ops/s
(87.59%)
zqlite: edit for limited query, outside the bound📈 view plot
🚷 view threshold
68,770.90 ops/s
(+0.81%)Baseline: 68,220.50 ops/s
58,932.92 ops/s
(85.69%)
zqlite: push into limited query, inside the bound📈 view plot
🚷 view threshold
3,650.41 ops/s
(-2.95%)Baseline: 3,761.45 ops/s
3,579.84 ops/s
(98.07%)
zqlite: push into limited query, outside the bound📈 view plot
🚷 view threshold
83,307.56 ops/s
(+2.57%)Baseline: 81,217.83 ops/s
72,887.49 ops/s
(87.49%)
zqlite: push into unlimited query📈 view plot
🚷 view threshold
129,259.36 ops/s
(+3.59%)Baseline: 124,775.56 ops/s
112,187.87 ops/s
(86.79%)
🐰 View full continuous benchmarking report in Bencher

@github-actions
Copy link

github-actions bot commented Feb 24, 2026

🐰 Bencher Report

Branchaa/dupe-relationship
Testbedself-hosted
Click to view all benchmark results
BenchmarkThroughputBenchmark Result
operations / second (ops/s)
(Result Δ%)
Lower Boundary
operations / second (ops/s)
(Limit %)
src/client/custom.bench.ts > big schema📈 view plot
🚷 view threshold
128,786.00 ops/s
(-0.17%)Baseline: 129,005.95 ops/s
123,277.74 ops/s
(95.72%)
src/client/zero.bench.ts > basics > All 1000 rows x 10 columns (numbers)📈 view plot
🚷 view threshold
1,376.62 ops/s
(-12.70%)Baseline: 1,576.85 ops/s
561.89 ops/s
(40.82%)
src/client/zero.bench.ts > pk compare > pk = N📈 view plot
🚷 view threshold
58,560.29 ops/s
(-0.64%)Baseline: 58,939.72 ops/s
54,026.58 ops/s
(92.26%)
src/client/zero.bench.ts > with filter > Lower rows 500 x 10 columns (numbers)📈 view plot
🚷 view threshold
2,596.96 ops/s
(-9.64%)Baseline: 2,874.10 ops/s
1,933.97 ops/s
(74.47%)
🐰 View full continuous benchmarking report in Bencher

…se cookie"

When poke processing failed (e.g., IVM throwing "node does not exist"),
the error was being swallowed and always reported as "unexpected base
cookie" which was confusing and made debugging harder.

Now the actual error is passed through and:
- Errors containing "unexpected base cookie" → UnexpectedBaseCookie
- All other errors → Internal with actual error message
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