Standards Docs
Changelog

Changelog — 2026-05-21

Daily docs refresh.

Features

  • Batch file lookup via GET /files/resolve. A new endpoint (mirroring /actors/resolve) returns the files for a list of IDs in one round-trip, bounded to 100 IDs. The previous /files?ids=… query branch silently returned every file in the tenant because ListFilesDto did not declare ids. Client API: client.resolveFiles(ids) replaces the implicit listFiles({ ids }) overload, and useResolveFiles drops its N-parallel-getFile fallback. ListFilesParams.ids is removed — listFiles is now strictly pagination/filtering.
  • Create-object dialog ported from lilycare. The sidebar CreateObjectDialog (@stndrds/ui) now uses react-hook-form + zod, an inline IconPicker, a description textarea, and kebab-case auto-slug from the label (with diacritic handling). Payload now sends the correct labelExpression: "{{ name }}" (double braces), which fixes the HTTP 500 the previous "{name}" produced. The form lives in a reusable ObjectForm component ready for future edit mode.
  • Wide-table horizontal scroll in the rich-text tab. The record-edit richtext tab now uses native overflow-auto with container queries so wide Notion-style tables overflow rightward inside the tab without triggering a viewport-wide horizontal scrollbar. Table UI handles switched to floating-ui strategy: "fixed" so they no longer extend document.body.scrollWidth on hover.

Fixes

  • Archived agent definitions stop firing. archiveDefinition now disables every trigger attached to the definition (the FK CASCADE did not fire on soft-delete, so triggers stayed enabled and silently created runs against the archived definition). restoreDefinition re-enables them, and launchRun guards against definition.deletedAt as a belt-and-suspenders check. See the Agents concept.
  • ObjectBuilder validation errors now surface as HTTP 400. ObjectBuilder.build() and validateName previously threw plain Error, which the NestJS SchemaExceptionFilter could not map — invalid payloads came back as opaque 500s. Both throw sites now raise SchemaError with VALIDATION_FAILED / INVALID_OBJECT_NAME codes, so the filter returns actionable 4xx responses.
  • Race-safe default-view bootstrap for runtime-created objects. Navigating to a freshly-created object fired several concurrent GET /v1/views/objects/:name/default calls; the previous find-then-create upsert deadlocked into 500 cascades. The Supabase repo now treats 23505 (unique violation) as "winner already inserted" and polls the read with backoff; view.service.getDefaultView falls back to an in-memory view if the poll budget is exhausted; and use-architect-panel waits for useObject to settle before registering its config.
  • GET /records/:object?deleted=true honors deletedMode again (#620). The Supabase repo's list ignored the deletedMode enum the NestJS controller passes and only read the legacy includeDeleted boolean, so the trash bin and archivedOnly consumers returned live records. Both the PostgREST branch and the list_filtered_object_records RPC now translate deletedModeliveOnly / archivedOnly / all, with includeDeleted kept as a backward-compat fallback. The runtime mock applies the same precedence.

Other

  • Documents tab polish. Fixes for file-name truncation in the list row, attribute-tag placement on the documents folder header, and a portal click that was bleeding through into the underlying list.

On this page