Remove async coroutine wrapper from event dispatch to simplify execution model and improve trace hierarchy. Listeners now execute synchronously in the caller's context, with dependency resolution inlined.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Introduce a generic event bus (Utopia\Bus) with typed events, listener
base class, Span instrumentation, and coroutine dispatch. Replace all
direct queueForExecutions and inline execution usage calls with
ExecutionCompleted event and dedicated listeners (Log, Usage).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The schema hash already captures all collection changes, making the
$updatedAt field redundant (and unreliable since Utopia preserves it).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Counts alone miss delete/re-add scenarios where the count stays the same
but the schema is different. MD5 of the full attribute and index arrays
captures any schema change.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The collection $updatedAt is preserved by Utopia Database's updateDocument()
when the value is already set, so it doesn't change when attributes/indexes
are created. Include attribute and index counts in the cache key to ensure
schema changes properly invalidate the document list cache.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix indentation alignment in cache hit detection condition
- Add total count assertions for cached and non-cached responses in test
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Move teams API to Modules
* lint
* Move team prefs & logs API to Modules (#11359)
* Move team prefs & logs API to Modules
* format
* missin desc
* Move team memberships API to Modules (#11362)
* Move team memberships API to Modules
* fix config dir
* Cloud parity
* params
* Cloud conflicts
* refactor
* prop
* refactor
* set teamId
* feedback
* feedback 2
* fix url-encoding
Executions that time out can remain stuck in waiting or processing status
in the database. This mirrors the frontend workaround from console#2788
across the relevant API endpoints for both functions and sites.
Changes:
- GET execution/log: override status to failed in response if elapsed time
since creation exceeds the resource timeout
- LIST executions/logs: same in-response override; when caller filters by
failed, expands DB query with OR to also fetch waiting/processing entries
created before the timeout threshold so they appear in results; skips
in-response override when caller explicitly requests a non-failed status
to avoid contradicting the filter
- DELETE execution: allows deletion of timed-out executions that are still
stored as waiting/processing by treating them as failed for the status guard
All changes are in-memory only — the database records are not modified.
Includes a note to remove once a proper DB-level fix is applied.