Standards Docs
Changelog

Changelog — 2026-05-18

Initial daily docs refresh — surfaces breaking changes accumulated across recent alpha releases.

Breaking

  • .system() removed; default is now system: true. All schema builders (objects and attributes) are system by default — anything declared in code is immutable at runtime. Call .runtime() only inside tests, seeds, and fixtures. See Schema and Attributes.
  • DatabaseAdapter.search is mandatory. Composing a DatabaseAdapter without a SearchAdapter fails type-check and throws SearchAdapterRequiredError at bootstrap. SearchUnavailableError and GlobalSearchService.registerHandlers() are removed. The adapter lifecycle split into ensureIndex() + applySchemaSettings(settings) (legacy ensureIndexes() removed). See Search and the Meilisearch guide.
  • Actor-first identity unification. userId is gone from TenantContext, BaseService, BaseRepository, and PolicyContext — use actorId. withTenantContext(tenantId, fn, actorId?) lost its userId parameter. checkPermission and buildPolicyContext renamed accordingly. See RBAC.
  • BullMQ/Redis adapters split into dedicated packages. Import from @stndrds/adapter-bullmq and @stndrds/adapter-redis; the deprecated re-exports from @stndrds/adapter-nestjs are removed. The agent service tokens AGENT_ORCHESTRATOR_SERVICE and AGENT_RUNNER_SERVICE are removed — use AGENT_DEFINITION_SERVICE + AGENT_SESSION_SERVICE and AGENT_EXECUTION_SERVICE. The AgentFactory / AgentRunner aliases in @stndrds/runtime are removed — use CompletionEngine and AgentExecutionService. See the Redis & BullMQ guide.
  • changeAttributeType via the runtime admin API is disabled — throws ChangeTypeNotSupportedError. Type changes must be declared in code with .migration(N, m => m.changeType(...)).

Features

  • Soft-delete records and edges. useDeleteRecord now archives instead of destroying. New hooks useRestoreRecord and usePurgeRecord handle restore and permanent deletion. Cascade-tagged edges wake on restore; edges archived independently stay archived. See Records.
  • Schema migrations (L2). Declare .migration(version, m => ...) on the object builder to resolve ambiguous diffs (rename, change_type). Safe additions auto-apply at boot; destructive but non-ambiguous diffs demote to runtime (or delete with STANDARDS_ALLOW_DESTRUCTIVE_SYNC=1). Tracked in schema_sync_log. See Schema → Migrations.
  • Agents on a schedule. Agent definitions with a schedule cron now actually execute — the BullMQScheduleAdapter enqueues a scheduled-job payload that the runtime handler translates into a launchRun call. Autonomous sessions also get an auto-generated title after the first completion.
  • Auto-upsert default agent role. A default agent_default role is upserted at boot so newly-created agent actors have a session-capable role out of the box.

Fixes

  • Background agents are now opt-in — the module stays disabled unless agents: { enabled: true, ... } is set explicitly, avoiding a NestJS startup crash when Redis/BullMQ is not configured.
  • Meilisearch reconcile / reindex no longer silently process only a fraction of records (estimated counts ignored for loop termination; primaryKey: "id" always passed; bulkIndex errors surfaced).
  • Meilisearch system fields (createdAt, updatedAt, objectId, objectName, completionStatus) are correctly mapped to their snake_case Meili columns — filters and sorts on system date fields now resolve instead of routing to non-existent values_raw.* paths.
  • Edge-property filters are now resolved entirely inside the search adapter (Meilisearch projects edge properties into the document at write time), so rule.property predicates evaluate directly against the index — the standalone EdgeFilterResolver has been removed.
  • Record reference edges are the single source of truth for record-to-record references; all user reference attributes route through record_reference_edges regardless of the attribute.system flag.

On this page