aer 1.2

aer 1.2 was released on June 25, 2026. It widens the set of Salesforce products aer models, adds two new kinds of test run, and reduces memory use and startup time on large projects.

New SObject and feature support

  • Salesforce Knowledge. References to __kav article-version and __ka article objects resolve, and the object family (article, version, share, data-category selection, view and vote stats, history, CaseArticle) is created on demand. KbManagement.PublishingService implements the full lifecycle: publish, edit, archive, restore versions, schedule, and the translation methods. Draft-version DML creates the parent article, UrlName format and uniqueness are enforced, and queries hide superseded versions. WITH DATA CATEGORY SOQL, multi-language articles, the abstract KnowledgeArticle and KnowledgeArticleVersion entities, and gating on the “Manage Salesforce Knowledge” permission are supported. ConnectApi.Knowledge trending-article methods are implemented.
  • Team Selling and Opportunity Splits. AccountTeamMember, OpportunityTeamMember, OpportunitySplit, and OpportunitySplitType can be described, queried, and manipulated, gated on the Account Teams and Opportunity Teams settings. With Opportunity Splits enabled, the opportunity owner is enrolled as an OpportunityTeamMember on insert, and Opportunity.IsSplit is exposed.
  • Enterprise Territory Management. The Territory2 model, type, territory, assignment, and assignment-rule objects are registered when Territory2Settings.enableTerritoryManagement2 is set, along with Opportunity.Territory2Id and IsExcludedFromTerritory2Filter. Territory metadata is loaded as queryable records.
  • Collaborative Forecasts. ForecastingType and ForecastingGroup are registered when ForecastingSettings.enableForecasts is set, with the standard ForecastingType records seeded.
  • Case Team objects. CaseTeamMember, CaseTeamRole, CaseTeamTemplate, and CaseTeamTemplateMember, with the DML restrictions Salesforce applies.
  • Education Cloud (--feature EducationCloud). 88 Education Cloud objects plus fields added to standard objects, enabled automatically when an Education Cloud object or field is referenced.
  • High Velocity Sales (--feature HighVelocitySales). The Sales Engagement cadence objects, enabled automatically when referenced.
  • VideoCall standard object (Einstein Conversation Insights), with its full field set, child relationships, and inserts.
  • Custom Address fields. Address-type custom fields generate their __s component fields, so SOQL and Apex referencing the components compile and the compound reconstructs on query, including under a namespace.
  • Field history tracking. Updating a field configured with trackHistory on a history-enabled object writes an <Object>History row when the change commits. Integration tests, anonymous exec, and the server commit their data; standard @IsTest tests roll back and so create no history.
  • Seeded standard records. PermissionSetLicense, MilestoneType, ForecastingType, and SlaProcess ship with the standard records a real org provides.
  • Queue sharing with bosses. A queue with DoesIncludeBosses = true shares queue-owned records with users above queue members in the role hierarchy.

New capabilities

  • Workspace auto-detection. When type checking a file fails to resolve references and the file lives inside an sfdx-project.json or package.xml workspace, aer test loads the surrounding workspace and retries once, while keeping test selection scoped to the files you named. This works under --watch as well.
  • --runs N. Repeat each selected test method N times to find flaky tests. Each PASS or FAIL line is tagged with its run number.
  • --integration-tests. Discover and run @IntegrationTest classes and methods, which commit their data and run @TearDown cleanup between methods. Compatible with --debug and the VS Code test panel, which separates Unit and Integration tests.
  • Memory-constrained execution. Large string concatenations become shared rope strings, and per-test in-memory SQLite databases spill to temporary on-disk files under memory pressure (--spill-to-disk=auto|never|always). Pooled test VMs share one immutable copy of the schema and copy only the objects a test mutates, which cuts resident memory substantially on large suites. The wasm build keeps its SQLite template on disk to fit the 4 GiB linear-memory cap.
  • System.EventBus.publishWithAccessLevel. Platform events can be published under an explicit AccessLevel. EventBus.publish runs in USER_MODE for callers on API version 67.0 or later and SYSTEM_MODE for earlier versions, matching the Summer ‘26 change.
  • Schema build caching. Assembled schemas are fingerprinted from the metadata source directories and cached between runs. An age-based garbage collector removes stale cache entries, configurable through AER_CACHE_MAX_AGE, AER_CACHE_MAX_BYTES, and AER_CACHE_GC_INTERVAL, and a new aer cache command (info, prune, clean) manages the cache.

Correctness fixes

  • SObject field writeability. False “Field is not writeable” errors on system fields that are writeable in memory are fixed. A share object’s manual-sharing fields are writeable unless the shared object’s sharing model is Controlled by Parent.
  • Platform-defaulted required fields. Inserts that omit non-nillable fields the platform populates now succeed instead of failing with REQUIRED_FIELD_MISSING: FeedItem flags and counts, EmailMessage flags and Status, AiJobRun.Status, Territory2 access levels, and similar fields.
  • FeedItem inserts populate the audit timestamps and derive Type, fixing LAST_N_DAYS filtering.
  • Change Data Capture *ChangeEvent objects. Every field is settable when building a test event except auto-number, calculated, formula, and rollup fields. EventBus.publish() of a constructed change event raises the “External Object Error” only when Change Data Capture is disabled. After Test.enableChangeDataCapture(), publishing succeeds without counting against DML limits, and Test.getEventBus().deliver() and Test.stopTest() fire the change event’s after-insert trigger.
  • SOQL string literals of 4000 or more characters raise a QueryException, matching Salesforce.
  • Unified schema loading. The test, exec, and server commands load schema through one walker that reads both source and metadata format, so the server resolves bare .md custom metadata records and embedded list views the same way the test command does.
  • Namespaced governor-limit reporting. Limit exceptions raised in managed-package code are prefixed with the controlling namespace, for example myns:Too many SOQL queries: 201, and governor limits are always enforced during test execution on the server.

The 1.2 patch releases

Forty patch releases, v1.2.1 through v1.2.40, followed between June 25 and August 27, 2026. Together they contain 423 changes. Among the larger ones:

  • Duplicate rules are enforced during insert and update DML, including the fuzzy name, company, and address matching algorithms (v1.2.31, v1.2.33, v1.2.34).
  • Multi-step approval processes run from approvalProcesses metadata, with entry criteria and field update actions (v1.2.30, v1.2.36).
  • Workflow rules run at the correct stage of the save order on every DML path (v1.2.30).
  • ConnectApi Chatter feeds, groups, topics, following, and profile photos are backed by storage (v1.2.29, v1.2.30).
  • Health Cloud, Survey, Omni-Channel, and Workplace Command Center objects, and a new Division feature (v1.2.29, v1.2.31).
  • Triggers at API version 67.0 or later default to user context, and USER_MODE queries enforce field-level security on WHERE-clause fields (v1.2.35).
  • MIXED_DML_OPERATION is enforced, and User DML is gated on the Manage Users permission (v1.2.40).
  • Loading a source directory, startup, and permission checks are faster, and aer test reports what it is doing during a long startup (v1.2.30, v1.2.36).

Each patch release is listed in full in the CHANGELOG.

© 2012–2026 October Swimmer.