Skip to content

Flaky backend tests: billing trial state, 3rd party broker topics, device APIs #8478

Open
0 of 3 issues completed

Description

@cstns

While watching CI on open PRs we hit a batch of test failures that look unrelated to the PR under test (frontend-only change, PR #8467, run 34595722439). All 9 failed in the Postgres tests job and passed elsewhere, and the assertions look timing dependent.

  • Billing routes > Can suspend/resume a trial project without touching billing (test/unit/forge/ee/routes/billing/index_spec.js:1453, expected undefined to be 'starting')
  • 3rd Party Broker API > Verify topics all correct (test/unit/forge/ee/routes/teamBroker/3rdPartyBroker_spec.js:443)
  • 3rd Party Broker API > Get Topics for 3rd Party broker as a Team Owner (3rdPartyBroker_spec.js:467)
  • 3rd Party Broker API > Add Metadata to a Topic (3rdPartyBroker_spec.js:485)
  • 3rd Party Broker API > Cannot add metadata to a topic for a broker in a different team (3rdPartyBroker_spec.js:516)
  • 3rd Party Broker API > Delete Topic (3rdPartyBroker_spec.js:543)
  • 3rd Party Broker API > Get Topics for team-broker as a Team Owner (3rdPartyBroker_spec.js:697, expected [] to have length 1)
  • Device API > can unassign from a project (test/unit/forge/routes/api/device_spec.js:1358, null read)
  • Project/Device API > returns a list of devices for team owner (test/unit/forge/routes/api/projectDevices_spec.js:168, expected [] to have length 1)

The broker topic tests failing as a block might share one root cause (broker state not settling before assertions). Might be worth starting there.

Other issues have been and will be added as comments

Activity

  1. cstns commented on Sep 14, 2026

    @cstns
    ContributorAuthor

    Another one from the same family, hit on PR #8467 (run 34836147852, Postgres tests job):

    • Team Broker API > licensed > Test Topic listing by Team > Add topics to list (test/unit/forge/ee/routes/teamBroker/index_spec.js:1322, expected false to be true)

    Same pattern as the other broker topic ones, an assertion on topic state right after adding topics. Re-ran the job.


    EDIT by @Steve-Mcl 2026/09/28

    Got same error AFTER merge (on main branch)

      1) Team Broker API
           licensed
             Test Topic listing by Team
               Add topics to list:
         AssertionError: expected false to be true
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/ee/routes/teamBroker/index_spec.js:1322:78)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    

    in action https://github.com/FlowFuse/flowfuse/actions/runs/36427799841/job/108946858426

  2. cstns commented on Sep 14, 2026

    @cstns
    ContributorAuthor

    One more, again on PR #8467 (run 34839432240, Postgres tests job):

    • Project/Device API > Update project device settings > fails for unknown snapshot (test/unit/forge/routes/api/projectDevices_spec.js:200, expected 400 got 404)

    Same spec file as the projectDevices_spec.js:168 entry above. Re-ran the job.

  3. cstns commented on Sep 14, 2026

    @cstns
    ContributorAuthor

    Two Cypress (UI EE) flakes this time, on PR #8502 (run 34854653678, UI EE tests job). Both in test/e2e/frontend/cypress/tests-ee/devices/developer-mode.spec.js, both a cy.click() timing out because a dialog overlay (ff-dialog-container--open) was still covering the tab link, each failed all 3 attempts:

    • FlowFuse - Devices - With Billing > is redirected away from the Developer Mode tab if leaving that mode, whilst the tab is open
    • FlowFuse - Devices - With Billing > has the option to "Create Snapshot" if owned by an Application

    The PR only touches backend MCP tools, so unrelated. Looks like the dialog close animation racing the next click.

  4. cstns commented on Sep 14, 2026

    @cstns
    ContributorAuthor

    Another device API one, on PR #8503 (run 34854920756, Postgres tests job):

    • Device API > Edit device details > edit device settings > cannot set targetSnapshot for snapshot outside of the team (test/unit/forge/routes/api/device_spec.js:1639, expected 400 got 200)

    Third distinct flake in device_spec.js / projectDevices_spec.js territory, looks like shared fixture state leaking between tests. Re-ran the job.

    [edit by @Steve-Mcl] same test fail in #8652 (action https://github.com/FlowFuse/flowfuse/actions/runs/36401134932/job/108861401213?pr=8652)

      1) Device API
           Edit device details
             edit device settings
               cannot set targetSnapshot for snapshot outside of the team:
    
          AssertionError: expected 200 to be 400
          + expected - actual
    
          -200
          +400
          
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/routes/api/device_spec.js:1639:44)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    
  5. self-assigned this
    on Sep 15, 2026
  6. andypalmi commented on Sep 24, 2026

    @andypalmi
    Contributor

    Another one

    1. Search API
      Simple search
      search by device id returns only one device & does not query other tables:

      AssertionError: expected 0 to be 1

      • expected - actual

      -0
      +1

  7. andypalmi commented on Sep 24, 2026

    @andypalmi
    Contributor

    Another one

    1. DeviceCommsHandler
      Device Status
      suppresses the transient stopped broadcast while restarting, but still records the state:

      AssertionError: expected 'restarting' to be 'stopped'

      • expected - actual

      -restarting
      +stopped


    **EDIT by @Steve-Mcl **

    Got this too - in PR #8713 on run https://github.com/FlowFuse/flowfuse/actions/runs/36696069757/job/109824909510?pr=8713

      1) DeviceCommsHandler
           Device Status
             forwards a team status notification only when the device state changes:
         AssertionError: expected false to be true
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/comms/devices_spec.js:233:52)
    
  8. Steve-Mcl commented on Sep 29, 2026

    @Steve-Mcl
    Contributor

    Another one - occurred AFTER merging #8677 in run https://github.com/FlowFuse/flowfuse/actions/runs/36539851763/job/109312964381

      1) Project API
           Update Project
             Export to another project - env-var keys only:
         AssertionError: expected Object { code: 'project_suspended', error: 'Instance suspended' } to have property settings
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value [as property] (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/routes/api/project_spec.js:2155:41)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    

    Quick looksee:

    the PUT /:instanceId handler with sourceProject in the body replies 200 immediately, then runs exportProjectToExistingProject(...) in the background, unawaited project.js:391-393.
    That background job suspends the target project (stub STOP_DELAY = 250ms) → copies node/flow/credential/settings data across several sequential DB reads and writes → resumes it (kicks off START_DELAY = 500ms, though the DB row's state actually flips to 'running' earlier, inside unSuspendProject, before the 500ms driver delay even starts).

    The test waits a fixed STOP_DELAY + START_DELAY + 50 = 800ms project_spec.js:2146 and assumes that's enough for the whole background job to finish. That budget only accounts for the two stub driver timers - it has no slack for the half-dozen-plus real DB round trips in between (StorageSettings.byProject x2, a save/create, getSetting x2 more, updateSetting, project.save(), project.reload(), two audit log writes). On SQLite those are practically instant. On Postgres, under CI connection-pool contention, they can add extra latency to blow through the 800ms window, so the GET still sees state: 'suspended'.

    This same sleep(STOP_DELAY + START_DELAY + ...) pattern shows up roughly a dozen times in project_spec.js (lines 1359, 1426, 1611, 1680, 1718, 2061, 2146, 2218, 2279, 2327, 2381...), all racing the same fixed duration against variable Postgres latency. This one just has the least headroom, since it's the only call site with a full settings/flow/credential copy pipeline stuffed into the wait.

  9. Steve-Mcl commented on Sep 29, 2026

    @Steve-Mcl
    Contributor

    Another device API one, on PR #8503 (run 34854920756, Postgres tests job):

    • Device API > Edit device details > edit device settings > cannot set targetSnapshot for snapshot outside of the team (test/unit/forge/routes/api/device_spec.js:1639, expected 400 got 200)

    Third distinct flake in device_spec.js / projectDevices_spec.js territory, looks like shared fixture state leaking between tests. Re-ran the job.

    [edit by @Steve-Mcl] same test fail in #8652 (action https://github.com/FlowFuse/flowfuse/actions/runs/36401134932/job/108861401213?pr=8652)

      1) Device API
           Edit device details
             edit device settings
               cannot set targetSnapshot for snapshot outside of the team:
    
          AssertionError: expected 200 to be 400
          + expected - actual
    
          -200
          +400
          
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/routes/api/device_spec.js:1639:44)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    

    This one should be fettled by #8677

  10. Steve-Mcl commented on Sep 29, 2026

    @Steve-Mcl
    Contributor

    Another one from the same family, hit on PR #8467 (run 34836147852, Postgres tests job):

    • Team Broker API > licensed > Test Topic listing by Team > Add topics to list (test/unit/forge/ee/routes/teamBroker/index_spec.js:1322, expected false to be true)

    Same pattern as the other broker topic ones, an assertion on topic state right after adding topics. Re-ran the job.

    EDIT by @Steve-Mcl 2026/09/28

    Got same error AFTER merge (on main branch)

      1) Team Broker API
           licensed
             Test Topic listing by Team
               Add topics to list:
         AssertionError: expected false to be true
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/ee/routes/teamBroker/index_spec.js:1322:78)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    

    in action https://github.com/FlowFuse/flowfuse/actions/runs/36427799841/job/108946858426

    This is covered in #8677

  11. cstns commented on Sep 29, 2026

    @cstns
    ContributorAuthor

    New one, on PR #8681 (run 36555287765, Postgres tests job):

    • HA Instance API > applies valid ha option (test/unit/forge/ee/routes/ha/index_spec.js:115, expected 'starting' to be undefined)

    The PR only touches MCP snapshot tools, so unrelated. Same fixed sleep(START_DELAY + 100) pattern Steve described for project_spec.js: the restart hasn't finished on Postgres when the inflight state gets checked. Followed by a ConnectionManager.getConnection was called after the connection manager was closed from the project.started audit log write in forge/ee/routes/ha/index.js:101, so the background restart was still running when the app closed. Re-running the job.


    EDIT by @Steve-Mcl

    Got this flake again in PR #8736 (run: https://github.com/FlowFuse/flowfuse/actions/runs/36750176035/job/110007319876?pr=8736)

      1) HA Instance API
           applies valid ha option:
         AssertionError: expected 'starting' to be undefined
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/ee/routes/ha/index_spec.js:115:88)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    
  12. cstns commented on Sep 29, 2026

    @cstns
    ContributorAuthor

    A Cypress (UI OS) one, on PR #8682 (run 36555697806, UI OS tests job), failed all 3 attempts:

    • Team - Instances > Users with dashboard only permissions > are shown a list of dashboards and can open one in the viewer (test/e2e/frontend/cypress/tests/team/instances.spec.js:85, timed out after 4000ms looking for 'instance-1-1' in the dashboards table)

    The PR only touches the MCP applications tool, so unrelated. The test only waits on @getTeam before looking in the table, not on the dashboard-instances request that fills it, so a slow response loses the race. Might be worth adding an intercept + cy.wait for that call like the test above it does. Re-running the job.

  13. cstns commented on Sep 29, 2026

    @cstns
    ContributorAuthor

    New one, on PR #8691 (run 36556568977, Postgres tests job):

    • AccessToken controller > MCP OAuth Tokens > lets only one of two simultaneous refreshes rotate the token (test/unit/forge/db/controllers/AccessToken_spec.js:479, expected null to exist)

    The PR only touches MCP broker tools, so unrelated to it. This one might not be just a test timing thing though: two concurrent refreshToken() calls on Postgres and one of them came back null, which is exactly what the test says shouldn't happen. Might be worth checking whether the row lock / conditional update in the refresh path holds up under Postgres isolation. Re-running the job.

    Also a repeat of an existing entry, on PR #8689 (run 36556397782, Postgres tests job): 3rd Party Broker API > Topic Storage API > Verify topics all correct (3rdPartyBroker_spec.js:443, expected length 4 got 2). Still happening.

  14. Steve-Mcl commented on Oct 1, 2026

    @Steve-Mcl
    Contributor

    on PR #8719 (run https://github.com/FlowFuse/flowfuse/actions/runs/36840866078/job/110300052886?pr=8719)

      1) 3rd Party Broker API
           Topic Storage API
             Team Broker
               Get Topics for team-broker as a Team Owner:
         AssertionError: expected Array [] to have property length of 1 (got 0)
          at Assertion.fail (node_modules/should/cjs/should.js:275:17)
          at Assertion.value (node_modules/should/cjs/should.js:356:19)
          at Context.<anonymous> (test/unit/forge/ee/routes/teamBroker/3rdPartyBroker_spec.js:697:45)
          at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    
  15. 1 remaining item

  16. cstns commented on Oct 1, 2026

    @cstns
    ContributorAuthor

    New one, on PR #8684 (run 36867544025, Postgres tests job):

    • DeviceCommsHandler > Device Status > updates the active snapshot ID if it is found in the database (test/unit/forge/comms/devices_spec.js:192, activeSnapshotId was still null after the status message)

    The PR only touches the MCP device group tool, so unrelated. The test emits a status/device message and then does a fixed sleep(100) before reloading the device. On Postgres the handler was still mid flight, the Device.findOne inside sendDeviceUpdateCommand ran after the app closed and took the after all hook down with it (done() called multiple times). Third distinct test in this DeviceCommsHandler > Device Status block to show up here, after the two andypalmi and Steve posted. Same fixed sleep vs background work pattern as the rest. Re-running the job.

  17. andypalmi commented on Oct 2, 2026

    @andypalmi
    Contributor

    Another flaky: Owner can add and remove devices from an existing group. Run and PR #8751

    Details
    1. Application Device Groups API
      Update Device Group Membership
      Owner can add and remove devices from an existing group:
      AssertionError: expected Device {
      dataValues: Object {
      id: 35,
      name: 'device-117',
      type: 'unnamed-type',
      lastSeenAt: null,
      state: '',
      mode: 'autonomous',
      TeamId: 2,
      ApplicationId: 38,
      ProjectId: null
      },
      _previousDataValues: Object {
      id: 35,
      name: 'device-117',
      type: 'unnamed-type',
      lastSeenAt: null,
      state: '',
      mode: 'autonomous',
      TeamId: 2,
      ApplicationId: 38,
      ProjectId: null
      },
      uniqno: 1,
      _changed: Set {},
      _options: Object {
      isNewRecord: false,
      _schema: null,
      _schemaDelimiter: '',
      include: undefined,
      includeNames: undefined,
      includeMap: undefined,
      includeValidated: true,
      raw: true,
      attributes: Array [
      'hashid',
      'id',
      'name',
      'type',
      'links',
      'lastSeenAt',
      'state',
      'mode',
      'TeamId',
      'ApplicationId',
      'ProjectId',
      'ownerType'
      ]
      },
      isNewRecord: false
      } to have property id of 33 (got 35)
      at Assertion.fail (node_modules/should/cjs/should.js:275:17)
      at Assertion.value [as property] (node_modules/should/cjs/should.js:356:19)
      at Context. (test/unit/forge/ee/routes/api/applicationDeviceGroups_spec.js:1038:56)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
  18. andypalmi commented on Oct 9, 2026

    @andypalmi
    Contributor

    The AccessToken one again, on PR #8823 (run 37928022373, Postgres tests job). It failed on 3 attempts in a row:

    • AccessToken controller > MCP OAuth Tokens > lets only one of two simultaneous refreshes rotate the token (test/unit/forge/db/controllers/AccessToken_spec.js:621, expected null to exist)

    The PR doesn't touch tokens, so it's unrelated. Following up on the earlier comment that this might be a real bug: it is, a race in refreshToken() in forge/db/controllers/AccessToken.js.

    1. The winning refresh rotates the row with an UPDATE, then writes the AccessTokenRefreshRotation record in a separate query afterwards.
    2. The losing refresh's UPDATE matches 0 rows, so it looks the presented token up in the rotation table.
    3. If that lookup runs before the winner's insert, it finds nothing and returns null. A real client refreshing at the same moment would see that as a failed refresh.

    It only shows on Postgres because the test SQLite database runs every query over one connection in the order issued, so the winner's insert always lands first. On Postgres the queries run on separate pooled connections, in parallel.

    Possible fix: run the rotate UPDATE and the rotation insert in one transaction. The losing UPDATE then waits on the row lock until the winner commits, so the rotation record is there when it looks.

  19. cstns commented on Oct 14, 2026

    @cstns
    ContributorAuthor

    New one, on PR #8920 (run 38565957659, Postgres tests job):

    • Team API > Edit team details > Feature overrides (features branch) > agentAutoDeploy audit log > keeps other feature changes in the generic settings entry (test/unit/forge/routes/api/team_spec.js:1802, only team.agent-auto-deploy.enabled was in the audit log, team.settings.updated missing)

    The PR only adds a pipeline stage deleted audit event, so unrelated. The same commit sits under #8924 and #8925 and passed Postgres there, and SQLite passed on this run too. Already hit once on 2026-10-13 on a dependabot branch (run 38444754408). The test is new, came in with #8862 last week.

    Looks like a timing thing in the route: the agentAutoDeploy.enabled entry is awaited in forge/routes/api/team.js:940, but the generic team.settings.updated write at the end of the handler (team.js:980) isn't, so the reply can go out before that row lands and the test's findAll right after only sees the first entry. On SQLite everything goes through one connection in order so it always wins. Might be worth awaiting that call like the other one. Re-ran the job.

  20. cstns commented on Oct 14, 2026

    @cstns
    ContributorAuthor

    Two Cypress (UI OS) ones, on PR #8915 (run 38538676049, UI OS tests job). Both in test/e2e/frontend/cypress/tests/devices.spec.js, both failed all 3 attempts, and both passed clean on re-run:

    • FlowFuse - Team Devices > team with devices > can assign and unassign devices to instances (devices.spec.js:510, timed out after 4000ms looking for [data-action="device-assign-to-instance"] in the kebab menu)
    • FlowFuse - Team Devices > team with devices > can assign and unassign devices to application (devices.spec.js:600, same thing for [data-action="device-assign-to-application"])

    The PR only touches the Brokers page and the 3rd party broker route, so unrelated. The test opens the kebab on the unassigned device row and immediately looks for the option in the kebab options list, so it reads like the menu didn't finish opening (or the row's kebab click landed on the wrong element after the scrollTo) before the lookup gave up. First time I've seen this one. Re-ran the job and it went green.

  21. cstns commented on Oct 15, 2026

    @cstns
    ContributorAuthor

    New one, on PR #8914 (run 38719485082, Backend tests job, so SQLite this time):

    • Team Broker API > old license > client limit set to 20 for old license format (test/unit/forge/ee/routes/teamBroker/index_spec.js:28, uncaught ConnectionManager.getConnection was called after the connection manager was closed, then the after all hook fell over on app.close() and mocha bailed with done() called multiple times)

    The PR only touches the device group description view and MCP tool, so unrelated. The error isn't from this spec at all. The stack goes back to the setTimeout in the team broker suspend route (forge/ee/routes/teamBroker/3rdPartyBroker.js:534), which deletes the agent row 1.5s after replying. The suspend marks the team-broker agent suspending before stopping it test in 3rdPartyBroker_spec.js is one of the last tests in that file and drives that route, so the timer is still pending when the file's after closes the app, and it fires into whichever test is running next. It landed in index_spec.js this time. Those suspend tests came in with #8917 yesterday, and main passed on the same code this morning, so it comes down to whether the last test and the after hooks finish inside the 1.5s. Might be worth keeping a handle on that timer so app.close() can clear it, or having the test wait the delete out. Re-ran the job.

  22. cstns commented on Oct 15, 2026

    @cstns
    ContributorAuthor

    Repeat of the AccessToken one, on PR #8930 (run 38730098693, Postgres tests job):

    • AccessToken controller > MCP OAuth Tokens > lets only one of two simultaneous refreshes rotate the token (test/unit/forge/db/controllers/AccessToken_spec.js:620, expected null to exist)

    The PR only touches the instance rollback route and its tests, so unrelated. Same race andypalmi wrote up above, still happening. Re-ran the job.

    Edit: hit again fifteen minutes later on PR #8924 (run 38730818569, Postgres tests job), same test, same assertion. That PR only touches pipeline stage audit logging. Two in one hour, so it's getting more frequent. Re-ran that one too.

    Edit 2: and a third time today on PR #8937 (run 38749673728, Postgres tests job), same test. That PR only touches the tables route and MCP tool. Three hits in about three hours across unrelated PRs. Re-ran it.

  23. cstns commented on Oct 16, 2026

    @cstns
    ContributorAuthor

    Two repeats this morning, both on the stacked pipeline audit PRs:

    • AccessToken controller > MCP OAuth Tokens > lets only one of two simultaneous refreshes rotate the token (test/unit/forge/db/controllers/AccessToken_spec.js:621, expected null to exist), on PR Write an audit log entry when a pipeline stage is updated #8924 (run 38877965894, Postgres tests job). Same race andypalmi wrote up, fourth hit in two days. Re-ran the job.
    • Team Broker API > old license > client limit set to 20 for old license format (test/unit/forge/ee/routes/teamBroker/index_spec.js:37, uncaught ConnectionManager.getConnection was called after the connection manager was closed, then done() called multiple times in the after all hook), on PR Write an audit log entry when a pipeline stage is deleted #8920 (run 38877966477, Backend tests job). Same leaked suspend timer from 3rdPartyBroker.js as yesterday, second hit. Re-ran the job.

    Edit: the AccessToken one failed again on the re-run of that same job (attempt 2, AccessToken_spec.js:620, same assertion). Two in a row on one PR. Re-ran it once more.

    Edit 2: and again on PR #8943 (run 38897005227, Postgres tests job), AccessToken_spec.js:621, same assertion. That PR only touches device target snapshot validation. Four Postgres runs hit this today out of the six I watched. Re-ran the job.

  24. cstns commented on Oct 16, 2026

    @cstns
    ContributorAuthor

    Repeat of the broker topic one, on PR #8949 (run 38916285914, Postgres tests job):

    • 3rd Party Broker API > Topic Storage API > Team Broker > Get Topics for team-broker as a Team Owner (test/unit/forge/ee/routes/teamBroker/3rdPartyBroker_spec.js:722, expected [] to have length 1)

    The PR only touches pipeline stage audit log values, so unrelated. Same test as the :697 entries above, the line just moved with the suspend tests that came in last week. Re-ran the job.

  25. cstns commented on Oct 19, 2026

    @cstns
    ContributorAuthor

    Repeat of the Search API one andypalmi posted, on PR #8960 (run 39234578629, Backend tests job, so SQLite):

    • Search API > Simple search > search by device id returns only one device & does not query other tables (test/unit/forge/routes/api/search_spec.js:269, expected 0 to be 1 on result.count)

    The PR only touches the MCP HTTP endpoint auth and its tests, so unrelated. One guess at why it comes and goes: the route in forge/routes/api/search.js:63 tries to decode the query as an Application hashid first and only falls through to the Device decode if that fails. The hashid salt includes the platform instanceId, which is random per test app, so every now and then a device hashid also happens to decode as a "valid" Application id, the route takes the application branch with a bogus id and finds nothing. Might be worth checking which branch it took when it fails, or decoding against the expected model only. Re-running the job once the Postgres job on that run finishes.

  26. modified the milestone: 3.3 on Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions