Skip to content

v6.1.0: Composite entity graphs, transaction batching, and database queue serialization

Entity companions and composite graph saves land alongside batched transaction group submissions for single round-trip execution. Improvements to CodeGen idempotency and performance, robust real-time agent bridged seat routing, and SQL queue drain serialization on commit and rollback complete this release.

Upgrade Notes apply: 6.x moves to the Business Source License 1.1; IS-A transaction APIs and BaseEntity transaction tracking properties are removed, and the protected Buffer createPost asset input shape has been updated.

MemberJunction 6.x is released under the Business Source License 1.1; 5.x and earlier stay ISC. What the licence grants, and what needs certification, is in the licence section of the v6 upgrade guide.

  • Entity companions and composite graph saves on BaseEntity (@memberjunction/core, @memberjunction/sqlserver-dataprovider, @memberjunction/generic-database-provider): A parent record and its related records can now load, validate, and persist as a single, cohesive unit across both client and server tiers via DeclareRelatedRecords. On the server, the entire graph executes inside a single transaction, while the browser routes the unit to the server via the MJ.SaveEntityGraph remote operation. This is achieved without any changes to generated GraphQL types, and ensures that Record Changes, validation, PreSave hooks, per-record events, and cache invalidation continue to fire normally.
  • Batched transaction group submissions for single round-trip execution (@memberjunction/core, @memberjunction/sqlserver-dataprovider, @memberjunction/postgresql-dataprovider): Replaces sequential, wire-hop-heavy transaction submissions with an opt-in BatchedSubmit flag on TransactionGroupBase. When enabled, the database providers compile the transaction group’s statements into a single, variable-free query batch executed in one round trip, drastically reducing network wall cost for multi-record operations.
  • Multi-identity publishing and platform-specific metadata on Buffer actions (@memberjunction/actions-bizapps-social): Buffer actions now accept a CredentialID to publish under a specific personal credentials record instead of the tenant token, enabling multi-identity publishing. Additionally, a new PlatformMetadata parameter preserves rich formatting like LinkedIn mentions, and the payload format has been updated to BufferAssetInput to support Buffer’s native asset-input specifications.
  • Clickable record link tokens in chat messages (@memberjunction/ai-core-plus, @memberjunction/ng-conversations, @memberjunction/ng-explorer-core): Integrates clickable record pills (type: "record") directly within chat interfaces. When an agent emits record-link JSON (@{...}), the renderer transforms it into an interactive pill that opens the record using OpenEntityRecord, fully supporting composite primary keys.
  • API-key-scoped row filters via schema-backed constraints (@memberjunction/api-keys-base, @memberjunction/api-keys): Adds a nullable RowFilterID foreign key to APIKeyScope and APIApplicationScope. This allows role-based RowLevelSecurityFilter records to be tied directly to API key scopes, preventing key filters from being silently deleted while referenced by active API keys.
  • Outbound list management and saved-record prospecting actions on Apollo (@memberjunction/actions-apollo): Expands the Apollo integration package with seven new actions for campaign management, including list creation, list membership pagination, prospect searches, and list member movement.
  • Adaptive per-connection fetch concurrency gating (@memberjunction/integration-engine): Introduces a FIFO queue that dynamically caps simultaneous out-of-plan fetches per connection. The queue’s capacity is adaptive, halving when a rate limit is reported and slowly recovering on clean outcomes to match the real concurrency grant without hand-crafting a threshold.
  • Memory bounds for large integration writes (@memberjunction/integration-engine): Introduces MJ_INTEGRATION_BATCH_FLUSH_AT to establish a ceiling on the number of deferred writes accumulated in memory, enabling sync operators to trade a slight throughput penalty for heap safety on large write batches.
  • Optimized parent sampling for keyless REST discoveries (@memberjunction/integration-engine): Bounds parent chain lazily-walked samplings to min(target, 50) rows instead of pulling the full child target, reducing extraneous database queries by up to 10x on deep template-var hierarchies.
  • Cerebras non-streaming response type safety (@memberjunction/ai-cerebras): Narrows non-streaming completion outputs to the Cerebras SDK’s non-streaming union member, preventing TypeScript build failures on fresh installs running newer SDK versions.
  • Smart chat container scrolling and rich completion notifications (@memberjunction/ng-conversations, @memberjunction/ng-notifications): Enhances conversational areas by ignoring streamed updates for readers who have scrolled up, and introduces readReplyFromTop to automatically reposition tall answers. Also consolidates client and server completion triggers into a single rich, brand-accented toast.
  • Chunked class-registration manifests to avoid TypeScript compilation limits (@memberjunction/codegen-lib): Emits discovered @RegisterClass classes in chunked arrays of 200 entries (CLASS_REGISTRATIONS_0...N) before flattening. This resolves a compilation cliff (TS2590: Expression produces a union type that is too complex to represent) once a codebase grows past ~1,000 class registrations.
  • Lazy resolution diagnostics and memoized environment probes (@memberjunction/global): Postpones expensive resolution-failure scans until they are explicitly read, and replaces bare window reference checks with typeof probes and memoized process-startup variables to bypass ReferenceErrors and conserve server CPU.
  • 100% CodeGen idempotency and metadata preservation (@memberjunction/codegen-lib, @memberjunction/core, @memberjunction/core-entities, @memberjunction/global, @memberjunction/metadata-sync): CodeGen runs against an unchanged schema now yield zero metadata changes or stray files. Sibling entities and fields are untouched during column updates, form submodules use stable hash buckets to prevent shifting files, and user modifications are locked using AutoUpdateDescription = false to prevent AI overwrites.
  • Narrowed database introspection views for faster metadata sync (@memberjunction/codegen-lib): Swaps system catalog references in vwSQLColumnsAndEntityFields with user catalog views sys.columns and sys.objects, decreasing cold CodeGen run times by 44.5% on large database schemas.
  • Weekly AI model intelligence and persona catalog updates (@memberjunction/ai, @memberjunction/aiengine, @memberjunction/core-entities): Weekly research passes record Amazon Bedrock routes for GPT-6 Astra, DeepSeek V4.1 Flash peak and off-peak rate tiers, and transition GLM-5.3-Flash promotional pricing to list rates, maintaining complete rate history.
  • Write-path support for sync concurrency (@memberjunction/integration-engine): Extends syncConcurrency settings to integration write paths, enabling parallel sync write operations over a bounded pool of transaction-free workers.
  • Hoisted accounting components in core Angular UI packages (@memberjunction/ng-ui-components, @memberjunction/ng-entity-viewer): Hoists battle-tested Date Interval selectors, dynamic charts, and summary indicators out of the vertical ERP module to make them globally reusable.
  • Aligned Angular dependency toolchain on current patch (@memberjunction/ng-action-gallery, @memberjunction/ng-actions, @memberjunction/ng-conversations): Upgrades Angular framework packages to 21.2.22 and builders to 21.2.23, securing fifteen distinct security advisories within the supported 21 LTS line.
  • Prompting and terminal-awareness guardrails in the CLI (@memberjunction/cli, @memberjunction/ai-cli, @memberjunction/cli-core): Detects interactive TTY sessions and fails-closed immediately with descriptive flags when a prompt is bypassed under pipes or CI pipelines, avoiding silent hangs.
  • Physical transaction queue drain safety on commit and rollback (@memberjunction/sqlserver-dataprovider, @memberjunction/generic-database-provider): Ensures physical transactional queries are fully flushed through the serialization queue before CommitPhysicalTransaction or RollbackPhysicalTransaction commands are issued. Previously, bypassing the queue caused silent timeouts and leaked active connections under load.
  • Variable name declaration collisions in batched submits (@memberjunction/sqlserver-dataprovider): Suffixes generated variables with _mjb<index> inside multi-statement query batches, preventing T-SQL batch compilation failures (The variable name '@ResultChangesTable' has already been declared) on multi-row, change-tracked groups.
  • Bridged realtime session class resolution (@memberjunction/ai-agents): Ensures bridged sessions resolve and construct the specific DriverClass defined on the agent via TryCreateInstance instead of silently reverting to the base BaseAgent.
  • Optional environment variables on Azure storage construction (@memberjunction/storage): Permits Azure storage driver instantiation in enterprise deployments using database credentials without requiring hard-coded STORAGE_AZURE_* container settings at boot.
  • Error cause flattening in undici fetch classification (@memberjunction/integration-engine): Traverses undici transport error chains to inspect internal socket causes (like ECONNRESET), ensuring transient network blips are correctly retryable instead of aborting integrations early as critical failures.
  • Dynamic apply-time sequences on CodeGen inserts (@memberjunction/codegen-lib): Emits unique sequence-number subqueries for newly generated columns instead of hard-coded literals, preventing duplicate-key Flyway migration collisions during fresh, sequential database setups.
  • PostgreSQL portability fixes for Table-Per-Type (IS-A) inheritance (@memberjunction/codegen-lib): Adds identifier auto-quoting to manageSingleEntityParentFields and resolves parameter type inference issues in PostgreSQL schema lookups to restore functional parent field mirroring and base view joins.
  • Preservation of generated validation functions across non-AI runs (@memberjunction/codegen-lib): Ensures Validate() overrides are always loaded from GeneratedCode records before file emission, preventing CodeGen runs without AI from deleting existing hand-crafted validation overrides.
  • Action Filter evaluation stub implementation (@memberjunction/actions): Backfills the previously un-evaluated ActionEngineServer.RunSingleFilter method, establishing ClassFactory lookup or cached, context-aware code-evaluation for robust filter enforcement.
  • Type safety for scheduled-job and agent context dates (@memberjunction/global, @memberjunction/core, @memberjunction/scheduling-engine): Prevents date serialization issues from raising runtime TypeErrors (__mj_CreatedAt?.getTime is not a function) during agent execution and scheduled job dispatches.
  • Tree-shake prevention for custom file forms (@memberjunction/ng-bootstrap, @memberjunction/ng-bootstrap-lite): Registers MJFileFormComponentExtended in class manifests to prevent custom files forms from being stripped out during compilation optimizations.
  • Workflow check concurrency scope (@memberjunction/standards): Isolates migration-checking workflows by github.ref to prevent parallel PR checks from canceling one another.
  • License: 6.x is the first line released under the Business Source License 1.1. 5.x and every earlier version stay ISC-licensed; upgrading is what changes your terms. BUSL grants internal production use, nonprofit production use, and unrestricted non-production use without further agreement, and each version converts to MIT four years after release. Providing professional services to clients on MemberJunction runs through the MemberJunction Certified Program. Full terms in LICENSE; the plain-language summary is the licence section of UPGRADE-v6.0.md. If your usage does not fit the grants, the 5.x LTS line keeps you on ISC.
  • Removal of obsolete IS-A transaction APIs and properties (@memberjunction/generic-database-provider): Outright removes IMetadataProvider.BeginISATransaction, CommitISATransaction, RollbackISATransaction, along with BaseEntity.ProviderTransaction and PropagateTransactionToParents. Developers should utilize BeginEntityTransaction or RunInEntityTransaction to participate in physical transaction scopes.
  • Buffer createPost asset schema update (@memberjunction/actions-bizapps-social): Any code manually invoking the protected createBufferPost method must reformulate asset payloads to match the new BufferAssetInput array structure ([AssetInput!]) rather than passing raw { images: [...] } objects.