Skip to content

Conversation

@robacourt
Copy link
Contributor

@robacourt robacourt commented Jan 7, 2026

Problem

We already support tagged move-ins/outs for shapes with a single subquery dependency. Allowing multiple same-level subqueries currently results in 409/must-refetch on move-ins/outs because:

  • A single row can be present for multiple reasons (multiple OR branches).
  • Existing assumptions effectively behave like “one reason/tag per row” and/or “one dependency”, so move-out can incorrectly remove/evict rows that still match another OR branch.
  • Move-in queries can accidentally return rows matching other OR branches, causing incorrect tagging/stream output.

Desired behavior

  • A row may have multiple tags simultaneously (“reasons” it belongs to the shape).
  • move-out should remove only the tags corresponding to the dependency that moved out.
  • A row is deleted only if its tag-set becomes empty.
  • Move-in for dependency A should only add A-tags to rows that actually satisfy A’s branch, even if the full WHERE contains OR with other subquery branches.
  • Must work for overlapping membership sets (row matches multiple branches).

Proposed approach (Option 1): multi-tags + client-side tag tracking + INSERT-as-UPSERT

Key idea

Treat each OR branch (or dependency) as an independent “reason” a row is in the shape:

  • Server emits rows with headers.tags = [...] (possibly multiple tags per row over time).
  • Client (and sync-service Materializer) maintains:
    • row_key -> Set(tags)
    • tag -> Set(row_key) (inverse index)
  • On INSERT for an existing key: treat as UPSERT and merge tag sets.
  • On move-out: remove specific tags from affected rows; delete the row only when tag-set is empty.

This avoids 409/must-refetch and correctly handles overlap.

MVP scope (initial)**

✅ Support: multiple same-level subquery membership checks connected by OR:

  • x IN (subq1) OR y IN (subq2) OR ...
  • single-column and composite membership checks (existing infra)

🚫 Out of scope (initially):

  • General boolean expressions requiring composite DNF tags and partial-tag move-outs (e.g. (A AND B) OR (A AND C)).
  • Deep mixes of AND/OR beyond “OR of membership checks”, unless explicitly validated.

Implementation plan (high-level tasks)

A) Server (sync-service)

  1. Lift single-subquery restriction
    • Remove/relax validation that rejects multiple same-level subqueries.
    • Add MVP validator to only allow supported OR-of-membership-checks for now.
  2. Make tag identity dependency-specific
    • Ensure tag hash seed includes dependency identity (e.g. sublink index/path), to prevent collisions if multiple subqueries return the same values.
  3. Represent tag structure per dependency
    • Current tag structure/move-out assumes one dependency.
    • Update tag structure representation to a per-dependency mapping so move-out can target the correct dependency.
  4. Fix move-in query rewriting under OR
    • Prevent move-in query for dependency A from returning rows that only match dependency B because of the OR.
    • Add an additional constraint to force the moved-in branch to be true (i.e. AND “this dependency’s ANY/unnest membership check”).
  5. Compute tags conditionally for normal replication events
    • When emitting changes from replication (insert/update), only include a dependency tag if the row actually satisfies that dependency membership (using extra_refs/materialized dependency sets).
    • Emit removed_tags on update when membership changes.
  6. Remove OR-with-subquery invalidation under tagged_subqueries
    • Stop returning 409/must-refetch purely because a shape has OR + subquery when tagged_subqueries is enabled.

B) Internal client in sync-service: Materializer

  1. Upgrade Materializer to multi-tag semantics
    • Track row_key -> Set(tags) and inverse tag -> Set(row_keys).
    • Make INSERT behave as UPSERT (merge tags).
    • Apply move-out by removing tags; delete only when tag-set empty.
    • Apply updates using removed_tags and new tags.

C) External clients (TypeScript at minimum)

  1. Upgrade TS client shape materialization
    • Maintain tag sets + inverse index.
    • Treat INSERT as UPSERT and merge tags.
    • Apply removed_tags and move-out control messages.
    • Delete row only when tag-set empty.

D) Tests

  1. Regression tests
    • Unit: tag structure generation for multiple dependencies.
    • Unit: move-in query rewrite does not pull unrelated rows under OR.
    • Unit: Materializer multi-tag + move-out behavior (overlap case).
    • Integration: x IN subq1 OR y IN subq2 does not invalidate/409 on move-ins/outs; correct row retention when one branch moves out.

Acceptance criteria

  • Shapes with x IN (subq1) OR y IN (subq2) do not 409/must-refetch on move-ins/outs when tagged_subqueries is enabled.
  • Overlapping rows (matching both branches) remain present when one branch moves out.
  • Move-in/out updates affect only the intended dependency tags.
  • TypeScript client merges tags on duplicate inserts (UPSERT semantics) and applies move-out correctly.
  • Materializer supports multi-tag membership and does not prematurely delete rows.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Jan 7, 2026

Open in StackBlitz

npm i https://pkg.pr.new/@electric-sql/react@3681
npm i https://pkg.pr.new/@electric-sql/client@3681
npm i https://pkg.pr.new/@electric-sql/y-electric@3681

commit: 185d3ab

@codecov
Copy link

codecov bot commented Jan 7, 2026

❌ 28 Tests Failed:

Tests completed Failed Passed Skipped
2049 28 2021 0
View the top 3 failed test(s) by shortest run time
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor backtracks the status when the canary goes down
Stack Traces | 0s run time
7) test status monitor backtracks the status when the canary goes down (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:184
     ** (EXIT from #PID<0.28653.0>) killed
test/client.test.ts > Shape  (liveSSE=true) > should support forceDisconnectAndRefresh() to force a sync
Stack Traces | 0.27s run time
AssertionError: expected [] to deeply equal [ { …(3) } ]

- Expected
+ Received

- [
-   {
-     "id": "e1ec5e1b-7d11-45dd-b30e-14d0403da774",
-     "priority": 10,
-     "title": "updated title",
-   },
- ]
+ []

 ❯ test/client.test.ts:1228:31
test/client.test.ts > Shape  (liveSSE=false) > should support forceDisconnectAndRefresh() to force a sync
Stack Traces | 0.277s run time
AssertionError: expected [] to deeply equal [ { …(3) } ]

- Expected
+ Received

- [
-   {
-     "id": "81808555-b553-4bae-98a2-7012124b5cea",
-     "priority": 10,
-     "title": "updated title",
-   },
- ]
+ []

 ❯ test/client.test.ts:1228:31
Elixir.Electric.Connection.ConnectionManagerTest::test process dependencies handles status messages after shape cache restart
Stack Traces | 0.44s run time
12) test process dependencies handles status messages after shape cache restart (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:210
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 54}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 108}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 162}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 216}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 269}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 323}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 377}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:213: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor resets the status when connection manager goes down
Stack Traces | 0.441s run time
1) test status monitor resets the status when connection manager goes down (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:115
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 53}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 106}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 159}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 212}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 265}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 319}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 373}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:116: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor backtracks the status when the shape log collector goes down
Stack Traces | 0.441s run time
5) test status monitor backtracks the status when the shape log collector goes down (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:156
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 53}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 106}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 160}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 214}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 267}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 320}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 373}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:157: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor reports status=starting once the exclusive connection lock is acquired
Stack Traces | 0.445s run time
15) test status monitor reports status=starting once the exclusive connection lock is acquired (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:88
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 54}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 108}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 162}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 215}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 269}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 322}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 375}}}
     stacktrace:
       .../electric/connection/manager_test.exs:91: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor backtracks the status when the shape cache goes down
Stack Traces | 0.452s run time
4) test status monitor backtracks the status when the shape cache goes down (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:167
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 53}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 106}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 159}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 212}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 266}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 319}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 373}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:168: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor reports status=active when all connection processes are running
Stack Traces | 0.46s run time
2) test status monitor reports status=active when all connection processes are running (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:97
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 53}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 106}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 159}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 213}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 266}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 319}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 373}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:98: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test status monitor backtracks the status when the replication client goes down
Stack Traces | 0.461s run time
6) test status monitor backtracks the status when the replication client goes down (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:101
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 54}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 108}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 162}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 216}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 269}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 322}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 375}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:102: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test cleanup procedure handles dropping slot on termination
Stack Traces | 0.462s run time
16) test cleanup procedure handles dropping slot on termination (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:252
     Assertion failed, no matching message after 400ms
     Showing 8 of 8 messages in the mailbox
     code: assert_receive {:stack_status, _, :waiting_for_connection_lock}
     mailbox:
       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 54}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 108}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 162}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 216}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 269}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 323}}}

       pattern: {:stack_status, _, :waiting_for_connection_lock}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 377}}}
     stacktrace:
       .../electric/connection/manager_test.exs:416: Electric.Connection.ConnectionManagerTest.wait_until_active/1
       .../electric/connection/manager_test.exs:260: (test)
Elixir.Electric.Connection.ConnectionManagerTest::test shutdown manager blocked resolving a pool connection terminates cleanly
Stack Traces | 1.06s run time
3) test shutdown manager blocked resolving a pool connection terminates cleanly (Electric.Connection.ConnectionManagerTest)
     .../electric/connection/manager_test.exs:313
     Assertion failed, no matching message after 1000ms
     Showing 10 of 19 messages in the mailbox
     code: assert_receive {:stack_status, _, :connection_lock_acquired}
     mailbox:
       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 478}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 531}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 584}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 638}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 691}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 744}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 797}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 850}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 903}}}

       pattern: {:stack_status, _, :connection_lock_acquired}
       value:   {:stack_status, nil, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 956}}}
     stacktrace:
       .../electric/connection/manager_test.exs:320: (test)
test/integration.test.ts > HTTP Sync > should parse incoming data (liveSSE=true)
Stack Traces | 1.08s run time
AssertionError: expected [] to match object [ { txt: 'changed', i2: 1, …(18) } ]

- Expected
+ Received

- [
-   {
-     "b": false,
-     "bools": [
-       false,
-       true,
-       false,
-     ],
-     "complexes": [
-       "(2.2,3.3)",
-       "(4.4,5.5)",
-     ],
-     "doubles": [
-       Infinity,
-       NaN,
-       -Infinity,
-     ],
-     "f8": 40.5,
-     "i2": 1,
-     "i4": 20,
-     "i8": 30n,
-     "int4s": [
-       4,
-       5,
-       6,
-     ],
-     "ints": [
-       4n,
-       5n,
-       6n,
-     ],
-     "ints2": [
-       [
-         4n,
-         5n,
-         6n,
-       ],
-       [
-         7n,
-         8n,
-         9n,
-       ],
-     ],
-     "json": {
-       "bar": "foo",
-     },
-     "jsonb": {
-       "bar": "foo",
-     },
-     "jsons": [
-       {},
-     ],
-     "moods": [
-       "sad",
-       "happy",
-     ],
-     "moods2": [
-       [
-         "sad",
-         "happy",
-       ],
-       [
-         "happy",
-         "ok",
-       ],
-     ],
-     "posints": [
-       "6",
-       "10",
-       "3",
-     ],
-     "txt": "changed",
-     "txts": [
-       "new",
-       "values",
-     ],
-     "value": {
-       "a": 6,
-     },
-   },
- ]
+ []

 ❯ test/integration.test.ts:348:29
test/integration.test.ts > HTTP Sync > should parse incoming data (liveSSE=false)
Stack Traces | 1.09s run time
AssertionError: expected [] to match object [ { txt: 'changed', i2: 1, …(18) } ]

- Expected
+ Received

- [
-   {
-     "b": false,
-     "bools": [
-       false,
-       true,
-       false,
-     ],
-     "complexes": [
-       "(2.2,3.3)",
-       "(4.4,5.5)",
-     ],
-     "doubles": [
-       Infinity,
-       NaN,
-       -Infinity,
-     ],
-     "f8": 40.5,
-     "i2": 1,
-     "i4": 20,
-     "i8": 30n,
-     "int4s": [
-       4,
-       5,
-       6,
-     ],
-     "ints": [
-       4n,
-       5n,
-       6n,
-     ],
-     "ints2": [
-       [
-         4n,
-         5n,
-         6n,
-       ],
-       [
-         7n,
-         8n,
-         9n,
-       ],
-     ],
-     "json": {
-       "bar": "foo",
-     },
-     "jsonb": {
-       "bar": "foo",
-     },
-     "jsons": [
-       {},
-     ],
-     "moods": [
-       "sad",
-       "happy",
-     ],
-     "moods2": [
-       [
-         "sad",
-         "happy",
-       ],
-       [
-         "happy",
-         "ok",
-       ],
-     ],
-     "posints": [
-       "6",
-       "10",
-       "3",
-     ],
-     "txt": "changed",
-     "txts": [
-       "new",
-       "values",
-     ],
-     "value": {
-       "a": 6,
-     },
-   },
- ]
+ []

 ❯ test/integration.test.ts:348:29
test/client.test.ts > Shape - changes_only mode (liveSSE=true) > should ignore updates/deletes for unseen keys until insert observed
Stack Traces | 1.12s run time
AssertionError: expected +0 to be 1 // Object.is equality

- Expected
+ Received

- 1
+ 0

 ❯ test/client.test.ts:1954:29
test/client.test.ts > Shape - changes_only mode (liveSSE=false) > should ignore updates/deletes for unseen keys until insert observed
Stack Traces | 1.12s run time
AssertionError: expected +0 to be 1 // Object.is equality

- Expected
+ Received

- 1
+ 0

 ❯ test/client.test.ts:1954:29
test/client.test.ts > Shape  (liveSSE=true) > should continually sync a shape/table
Stack Traces | 1.18s run time
AssertionError: expected [ { …(3) } ] to deeply equal [ { …(3) }, { …(3) } ]

- Expected
+ Received

@@ -2,11 +2,6 @@
    {
      "id": "f1cc3e9c-70df-4104-a9a6-70b9c390d700",
      "priority": 10,
      "title": "test title",
    },
-   {
-     "id": "6dd82782-d9de-4581-9c3d-9e58538947f6",
-     "priority": 10,
-     "title": "new title",
-   },
  ]

 ❯ test/client.test.ts:211:54
test/client.test.ts > Shape  (liveSSE=false) > should continually sync a shape/table
Stack Traces | 1.21s run time
AssertionError: expected [ { …(3) } ] to deeply equal [ { …(3) }, { …(3) } ]

- Expected
+ Received

@@ -2,11 +2,6 @@
    {
      "id": "0c66e647-826b-4748-86c8-bd78b3b846ab",
      "priority": 10,
      "title": "test title",
    },
-   {
-     "id": "5148bf96-9eac-4006-a7d9-f38191afac83",
-     "priority": 10,
-     "title": "new title",
-   },
  ]

 ❯ test/client.test.ts:211:54
Elixir.Electric.Plug.RouterTest::test /v1/shapes now offset returns an up-to-date response with 0_inf offset when shape is new
Stack Traces | 2.04s run time
5) test /v1/shapes now offset returns an up-to-date response with 0_inf offset when shape is new (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2046
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.1201840419.3365666817.161810>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.1201840419.3365666817.161810>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"357\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET works correctly when table has no PK
Stack Traces | 2.04s run time
6) test /v1/shapes GET works correctly when table has no PK (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:956
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.1201840419.3365666817.161379>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.1201840419.3365666817.161379>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"357\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET returns correct INSERT and DELETE operations that have been converted from UPDATEs
Stack Traces | 2.05s run time
2) test /v1/shapes GET returns correct INSERT and DELETE operations that have been converted from UPDATEs (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1179
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.1201840419.3365666817.163890>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.1201840419.3365666817.163890>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"357\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes - subqueries 3-level nested OR: move-in and move-out work correctly
Stack Traces | 2.05s run time
3) test /v1/shapes - subqueries 3-level nested OR: move-in and move-out work correctly (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:3132
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.1201840419.3365666817.163318>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.1201840419.3365666817.163318>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"357\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_5/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET returns updated schema in header after column nullability changes
Stack Traces | 2.06s run time
4) test /v1/shapes GET returns updated schema in header after column nullability changes (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1766
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.1201840419.3365666817.162585>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.1201840419.3365666817.162585>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"357\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes correctly snapshots and follows a table with a composite PK
Stack Traces | 2.06s run time
5) test /v1/shapes correctly snapshots and follows a table with a composite PK (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:401
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.3147651410.3902537729.153030>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.3147651410.3902537729.153030>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"455\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes - admission control rejects requests when at capacity with 503
Stack Traces | 2.06s run time
10) test /v1/shapes - admission control rejects requests when at capacity with 503 (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2078
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.2608155700.681050114.38095>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.2608155700.681050114.38095>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"355\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_4/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes - subqueries subquery combined with OR handles move-in without must-refetch
Stack Traces | 2.07s run time
4) test /v1/shapes - subqueries subquery combined with OR handles move-in without must-refetch (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2494
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.3147651410.3902537729.153869>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.3147651410.3902537729.153869>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"455\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_5/1
Elixir.Electric.Plug.RouterTest::test secure mode requires secret for /v1/shape
Stack Traces | 2.07s run time
4) test secure mode requires secret for /v1/shape (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:3474
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.2608155700.681050113.138515>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.2608155700.681050113.138515>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"355\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_8/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes can sync all data types
Stack Traces | 2.08s run time
1) test /v1/shapes can sync all data types (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:504
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.1201840419.3365666817.164292>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.1201840419.3365666817.164292>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"357\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes OPTIONS receives supported methods
Stack Traces | 2.08s run time
1) test /v1/shapes OPTIONS receives supported methods (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1677
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.3147651410.3902537729.156106>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.3147651410.3902537729.156106>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"455\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes - subqueries allows subquery in where clauses that reference non-PK columns
Stack Traces | 2.08s run time
6) test /v1/shapes - subqueries allows subquery in where clauses that reference non-PK columns (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2334
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.2608155700.681050113.137179>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.2608155700.681050113.137179>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"355\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_5/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes now offset returns an up-to-date response regardless of existing data
Stack Traces | 2.08s run time
9) test /v1/shapes now offset returns an up-to-date response regardless of existing data (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2021
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1754791938.102350>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1754791938.102350>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes follows a table and returns last-seen lsn
Stack Traces | 2.09s run time
2) test /v1/shapes follows a table and returns last-seen lsn (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:296
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.2608155700.681050113.138886>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.2608155700.681050113.138886>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"355\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes can sync generated columns when supported and enabled
Stack Traces | 2.09s run time
8) test /v1/shapes can sync generated columns when supported and enabled (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:790
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.2608155700.681050114.39630>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.2608155700.681050114.39630>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"355\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.LowPrivilegeRouterTest::test /v1/shapes with manual publication management GET fails to create initial snapshot when Electric cannot read from the table
Stack Traces | 2.1s run time
2) test /v1/shapes with manual publication management GET fails to create initial snapshot when Electric cannot read from the table (Electric.Plug.LowPrivilegeRouterTest)
     .../electric/plug/low_privilege_router_test.exs:47
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.220721>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.220721>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.LowPrivilegeRouterTest.__ex_unit_describe_1/1
Elixir.Electric.Plug.LowPrivilegeRouterTest::test /v1/shapes GET fails to create initial snapshot when Electric does not own the user table
Stack Traces | 2.1s run time
1) test /v1/shapes GET fails to create initial snapshot when Electric does not own the user table (Electric.Plug.LowPrivilegeRouterTest)
     .../electric/plug/low_privilege_router_test.exs:30
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.221631>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.221631>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.LowPrivilegeRouterTest.__ex_unit_describe_0/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes - subqueries table with a composite PK can be used in a subquery
Stack Traces | 2.11s run time
3) test /v1/shapes - subqueries table with a composite PK can be used in a subquery (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2573
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.3147651410.3902537729.154796>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.3147651410.3902537729.154796>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"455\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_5/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes dropping and creating the table (same structure) causes a 409 after poller had noticed it
Stack Traces | 2.11s run time
2) test /v1/shapes dropping and creating the table (same structure) causes a 409 after poller had noticed it (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1960
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.212414>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.212414>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET receives chunked results based on size
Stack Traces | 2.11s run time
4) test /v1/shapes GET receives chunked results based on size (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1398
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.211237>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.211237>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes dropping a table doesn't cause a 500
Stack Traces | 2.11s run time
6) test /v1/shapes dropping a table doesn't cause a 500 (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1932
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.209795>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.209795>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET returns an error when table is not found
Stack Traces | 2.11s run time
8) test /v1/shapes GET returns an error when table is not found (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:101
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.209019>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.209019>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET receives only specified columns out of wide table
Stack Traces | 2.12s run time
5) test /v1/shapes GET receives only specified columns out of wide table (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1016
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.210634>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.210634>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes GET returns correct INSERT and DELETE operations that have been converted from UPDATEs of PK columns
Stack Traces | 2.12s run time
3) test /v1/shapes GET returns correct INSERT and DELETE operations that have been converted from UPDATEs of PK columns (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:1303
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1755316225.211932>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1755316225.211932>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_3/1
Elixir.Electric.Plug.RouterTest::test secure mode allows access to / without secret
Stack Traces | 2.12s run time
1) test secure mode allows access to / without secret (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:3457
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.4134726073.1754791938.104375>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.4134726073.1754791938.104375>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"359\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_8/1
Elixir.Electric.Plug.RouterTest::test /v1/shapes - subqueries a move-out from the inner shape is propagated to the outer shape
Stack Traces | 2.14s run time
1) test /v1/shapes - subqueries a move-out from the inner shape is propagated to the outer shape (Electric.Plug.RouterTest)
     .../electric/plug/router_test.exs:2259
     Assertion failed, no matching message after 2000ms
     The following variables were pinned:
       ref = #Reference<0.2608155700.681050113.139746>
     Showing 1 of 1 message in the mailbox
     code: assert_receive {:stack_status, ^ref, :ready}
     mailbox:
       pattern: {:stack_status, ^ref, :ready}
       value:   {:stack_status, #Reference<0.2608155700.681050113.139746>, {:connection_error, %{error: "%Postgrex.Error{\n  message: nil,\n  postgres: %{\n    code: :too_many_connections,\n    line: \"355\",\n    message: \"sorry, too many clients already\",\n    file: \"proc.c\",\n    unknown: \"FATAL\",\n    severity: \"FATAL\",\n    pg_code: \"53300\",\n    routine: \"InitProcess\"\n  },\n  connection_id: nil,\n  query: nil\n}", message: "sorry, too many clients already", type: :insufficient_resources, total_retry_time: 0}}}
     stacktrace:
       (electric 1.2.11) test/support/component_setup.ex:462: Support.ComponentSetup.with_complete_stack/1
       Electric.Plug.RouterTest.__ex_unit_describe_5/1
Elixir.Electric.Postgres.ReplicationClientTest::test ReplicationClient against real db fares well when multiple concurrent transactions are writing to WAL
Stack Traces | 2.17s run time
7) test ReplicationClient against real db fares well when multiple concurrent transactions are writing to WAL (Electric.Postgres.ReplicationClientTest)
     .../electric/postgres/replication_client_test.exs:266
     ** (RuntimeError) Expected transaction
     code: Enum.reduce(1..num_txn, MapSet.new(1..num_txn), fn _, set ->
     stacktrace:
       .../electric/postgres/replication_client_test.exs:814: Electric.Postgres.ReplicationClientTest.receive_transaction/1
       .../electric/postgres/replication_client_test.exs:295: anonymous fn/2 in Electric.Postgres.ReplicationClientTest."test ReplicationClient against real db fares well when multiple concurrent transactions are writing to WAL"/1
       (elixir 1.19.1) lib/enum.ex:4562: Enum.reduce_range/5
       .../electric/postgres/replication_client_test.exs:294: (test)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@blacksmith-sh

This comment has been minimized.

@blacksmith-sh
Copy link
Contributor

blacksmith-sh bot commented Jan 7, 2026

Found 75 test failures on Blacksmith runners:

Failures

Test View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test cleanup procedure handles dropping slot on termination
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test cleanup procedure handles dropping slot on termination
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test cleanup procedure handles dropping slot on termination
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test process dependencies handles status messages after shape cache restart
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test process dependencies handles status messages after shape cache restart
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test process dependencies handles status messages after shape cache restart
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test shutdown manager blocked resolving a pool connection terminates cleanly
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test shutdown manager blocked resolving a pool connection terminates cleanly
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test shutdown manager blocked resolving a pool connection terminates cleanly
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the canary goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the canary goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the canary goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the replication client goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the replication client goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the replication client goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the shape cache goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the shape cache goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the shape cache goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the shape log collector goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the shape log collector goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor backtracks the status when the shape log collector goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor reports status=active when all connection processes are running
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor reports status=active when all connection processes are running
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor reports status=active when all connection processes are running
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor reports status=starting once the exclusive connection lock is acqui
red
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor reports status=starting once the exclusive connection lock is acqui
red
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor reports status=starting once the exclusive connection lock is acqui
red
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor resets the status when connection manager goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor resets the status when connection manager goes down
View Logs
Elixir.Electric.Connection.ConnectionManagerTest/
test status monitor resets the status when connection manager goes down
View Logs
Elixir.Electric.Plug.LowPrivilegeRouterTest/test /v1/
shapes GET fails to create initial snapshot when Electric does not own the user table
View Logs
Elixir.Electric.Plug.LowPrivilegeRouterTest/test /v1/
shapes GET fails to create initial snapshot when Electric does not own the user table
View Logs
Elixir.Electric.Plug.LowPrivilegeRouterTest/test /v1/
shapes with manual publication management GET fails to create initial snapshot when Ele
ctric cannot read from the table
View Logs
Elixir.Electric.Plug.LowPrivilegeRouterTest/test /v1/
shapes with manual publication management GET fails to create initial snapshot when Ele
ctric cannot read from the table
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - admission control rejects requests when at capacity with 503
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - admission control rejects requests when at capacity with 503
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - subqueries 3-level nested OR: move-in and move-out work correctly
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - subqueries a move-out from the inner shape is propagated to the outer shape
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - subqueries allows subquery in where clauses that reference non-PK columns
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - subqueries subquery combined with OR handles move-in without must-refetch
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes - subqueries table with a composite PK can be used in a subquery
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/shapes can sync all data types View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes can sync generated columns when supported and enabled
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes correctly snapshots and follows a table with a composite PK
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/shapes dropping a table doesn't cause a 500 View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes dropping and creating the table (same structure) causes a 409 after poller had n
oticed it
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes dropping and creating the table (same structure) causes a 409 after poller had n
oticed it
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes follows a table and returns last-seen lsn
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET receives chunked results based on size
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET receives chunked results based on size
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET receives only specified columns out of wide table
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET returns an error when table is not found
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET returns correct INSERT and DELETE operations that have been converted from U
PDATEs
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET returns correct INSERT and DELETE operations that have been converted from U
PDATEs of PK columns
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET returns updated schema in header after column nullability changes
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET returns updated schema in header after column nullability changes
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET works correctly when table has no PK
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes GET works correctly when table has no PK
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes now offset returns an up-to-date response regardless of existing data
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes now offset returns an up-to-date response regardless of existing data
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/
shapes now offset returns an up-to-date response with 0_inf offset when shape is new
View Logs
Elixir.Electric.Plug.RouterTest/test /v1/shapes OPTIONS receives supported methods View Logs
Elixir.Electric.Plug.RouterTest/test secure mode allows access to / without secret View Logs
Elixir.Electric.Plug.RouterTest/test secure mode allows access to / without secret View Logs
Elixir.Electric.Plug.RouterTest/test secure mode requires secret for /v1/shape View Logs
Elixir.Electric.Plug.RouterTest/test secure mode requires secret for /v1/shape View Logs
Elixir.Electric.Postgres.ReplicationClientTest/
test ReplicationClient against real db fares well when multiple concurrent transactions
are writing to WAL
View Logs
test/client.test.ts/Shape (liveSSE=false) > should continually sync a shape/table View Logs
test/client.test.ts/Shape (liveSSE=false) >
should support forceDisconnectAndRefresh() to force a sync
View Logs
test/client.test.ts/Shape (liveSSE=true) > should continually sync a shape/table View Logs
test/client.test.ts/Shape (liveSSE=true) >
should support forceDisconnectAndRefresh() to force a sync
View Logs
test/client.test.ts/Shape - changes_only mode (liveSSE=false) > should ignore updates/
deletes for unseen keys until insert observed
View Logs
test/client.test.ts/Shape - changes_only mode (liveSSE=true) > should ignore updates/
deletes for unseen keys until insert observed
View Logs
test/integration.test.ts/HTTP Sync > should parse incoming data (liveSSE=false) View Logs
test/integration.test.ts/HTTP Sync > should parse incoming data (liveSSE=true) View Logs

Fix in Cursor

@robacourt robacourt self-assigned this Jan 8, 2026
@robacourt robacourt changed the title Support or in subqueries with dnf Support OR in subqueries with DNF Jan 8, 2026
@robacourt robacourt changed the title Support OR in subqueries with DNF Support OR with subqueries using DNF Jan 8, 2026
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.

2 participants