Breaking
No breaking changes.
Settings & functionalities
🆕 Matching settings to functionalities
A new batch of settings have had functionalities attached.
You can read more about the details below, or check the affected settings directly.
Details
Context: We intend for each setting to be linked to a specific functionality within EVA. This ensures that only designated roles will have the ability to modify certain settings, allowing for more precise control over your environments.
Example: For instance, the setting APIGiftCard:BaseUrl will be associated with the functionality named GiftCardConfiguration.
Implementation Plan: Given the extensive nature of EVA's settings (approximately 1500 in total), we will be rolling these out in batches, once every EVA Drop - effectively once every four weeks. Several batches of these adjustments have already been included in the following EVA Core drops:
- 2.0.726
- 2.0.730
- 2.0.735
- 2.0.738
- 2.0.742
- 2.0.746
Timeline: This new batch of changes is now available on your Test and Acceptance environments. These changes will be deployed to Production environments next week with EVA Core drop 2.0.747 (July 23). We anticipate completing this process over approximately 3 more EVA Drops until all settings are included.
Action Required: We encourage you to review this batch of settings, which are already documented on our Docs. Ensure that the roles assigned within your organization align appropriately with the functionalities necessary for access to these settings.
List of settings combined with functionalities in this EVA Core Drop
Setting | Functionality |
---|---|
ShoppingCart:CreateDummies | Orders |
ShoppingCart:CreateNewCartWhenRequestedIsCancelled | Orders |
Slack:Channel:Client | None |
Slack:Channel:Debug | None |
Slack:Channel:Error | None |
Slack:Enabled | None |
Slack:IconUrl | None |
Slack:Url | None |
Slack:Username | None |
Sms:CustomerCreated:Send | Customers |
Sms:OrderPlaced:Send | OrderStatus |
Sms:StockReservation:Send | None |
Smtp:EnableSsl | None |
Smtp:EnableStartTls | None |
Smtp:Host | None |
Smtp:Password | None |
Smtp:Port | None |
Smtp:TimeoutInSeconds | None |
Smtp:UseInternationalDeliveryFormat | None |
Smtp:Username | None |
SmtpFromAddress | None |
SmtpFromDisplayName | None |
SplitEmployeesAccounts | EmployeeData |
StepXml:ClassificationBlacklist | None |
StepXml:ClassificationQueryChildren | None |
StepXml:ExcludeFromNavigation:Enabled | None |
StepXml:Ftp:Host | None |
StepXml:Ftp:Password | None |
StepXml:Ftp:ReadWriteTimeoutInSeconds | None |
StepXml:Ftp:UserName | None |
StepXml:ImportAsDisableBackorder | None |
StepXml:MarketingMainRituals | None |
StepXml:UseZipFiles | None |
Orders:ReturnToSupplier:DefaultStockLabel | ReturnToSupplierOrders |
Orders:ReturnToSupplier:HoldingStockLabel | ReturnToSupplierOrders |
Orders:ReturnToSupplier:RequireOrderValidation | ReturnToSupplierOrders |
Orders:ReturnToSupplier:UseExcludePolicyOnShipment | ReturnToSupplierOrders |
Orders:ReturnToSupplier:PlaceReturnToSupplierOrderEmailAddress | ReturnToSupplierOrders |
Orders:ReturnToSupplier:ShipReturnToSupplierOrderEmailAddress | ReturnToSupplierOrders |
StockReplenishmentTasks:AutoGenerate | StockReplenishments |
StockReplenishmentTasks:AutoGenerateCycleCountZoneReset | StockReplenishments |
StockReplenishmentTasks:ExpirationTimeInHours | StockReplenishments |
StockReplenishmentTasks:GroupProductProperty | StockReplenishments |
StockReplenishmentTasks:ProductProperties | StockReplenishments |
StockReplenishmentTasks:Zones | StockReplenishments |
StockReservation:AllowNASC | AdjustStock |
StockReservation:OrderProductsInSameOrder | UserTasks |
StockReservation:ReminderDays | UserTasks |
StockReservation:SendCommunicationForInStoreReservations | UserTasks |
StockTimeline:IgnoreOverduePurchaseOrderThresholdInDays | None |
StockTimeline:MaxReservationDaysBeforeRequestedDate | None |
StockTimeline:PurchaseOrderProcessingTime | None |
StockTimeline:StockLevelCommitThreshold | None |
StockReservation:ReactivateReservationTasksOnSufficientStock | UserTasks |
SupplierPurchaseOrderAlternativeMapping | PurchaseOrders |
SupplyAndDemand:PreferCurrentStockOverFutureStockThresholdInDays | AdjustStock |
Template:ProductProperties | MessageTemplates |
Shipcloud:ApiKey | ShippingMethods |
Shipcloud:DefaultParcelHeight | ShippingMethods |
Shipcloud:DefaultParcelLength | ShippingMethods |
Shipcloud:DefaultParcelWeight | ShippingMethods |
Shipcloud:DefaultParcelWidth | ShippingMethods |
Shipcloud:DPDAccountID | ShippingMethods |
Shipcloud:Enabled | ShippingMethods |
Shipcloud:Endpoint | ShippingMethods |
Shipcloud:IsDeliveryReceipt | ShippingMethods |
Shipcloud:LabelFormat | ShippingMethods |
ShipFromStore:CompleteDeadline | Tasks |
ShipFromStore:Composition | Tasks |
ShipFromStore:DeliveryConfirmationBaseUrl | Tasks |
ShipFromStore:DisablePickReceipt | Tasks |
ShipFromStore:DisablePrinting | Tasks |
ShipFromStore:DisableShipReceipt | Tasks |
ShipFromStore:ExternalLabelHandlerPrintType | Tasks |
ShipFromStore:LabelProductProperties | Tasks |
ShipFromStore:SeparatePrintTaskForExternalLabelHandlers | Tasks |
ShipFromStore:ShowBundlesWithServiceAsAssemblyDuringPack | Tasks |
ShipFromStore:StartDeadline | Tasks |
Shipment:AutoCompleteShipment | ShipmentSettings |
Shipment:AutoGenerateShipmentBackendIDForInterbranchOrders | ShipmentSettings |
Shipment:GenerateLocalBackendID | ShipmentSettings |
Shipment:ReceiveMethodDeterminator | ShipmentSettings |
Shipment:RequireReceiveMethodReason | ShipmentSettings |
Shipment:ShipRemainingChildLines | ShipmentSettings |
Shipment:ValidateDuplicateBackendIDs | ShipmentSettings |
ShipmentDocumentGeneratorName | ShipmentSettings |
ShipmentDocumentsToGenerate | ShipmentSettings |
ShipmentDocumentToUseForPrinting | ShipmentSettings |
ShipmentExporter | ShipmentSettings |
ShippingCosts:CalculateWithoutShippingAddress | ShippingCosts |
ShippingCosts:Description | ShippingCosts |
ShippingCostsMomentOfShipment | ShippingCosts |
ShippingMethods:SetSingleAvailableShippingMethodOnOtherLines | ShippingMethods |
ShippingMethods:UseLegacyFilterWhenSettingAShippingMethod | ShippingMethods |
ShipFromStore:DisableAutomaticReceiveShipment (deprecated) | UserTasks |
ShipFromStore:DeliverDeadline (deprecated) | UserTasks |
ShipFromStore:AutoAssignNextUserTask | UserTasks |
ShipFromStore:FanoutTaskLabel | UserTasks |
ShipFromStore:CheckShipFromStoreDeliveryType (deprecated) | UserTasks |
ShipFromStore:PrintShouldCompletePickTask (deprecated) | UserTasks |
ShippingCosts:ExportedLinesCanIncreaseShippingCosts | ShippingCosts |
ReportRenderer:AbortOnError | None |
ReportRenderer:ErrorsEmailAddress | None |
ReportRenderer:Logging | None |
ReportRenderer:NotifyOnError | None |
ReportRenderer:Timeout | None |
RequiredData:ClearValidMessages | None |
RequiredData:MaximumOrderAmount | None |
RequiredData:MinimumOrderAmount | None |
RequiredData:MovePaymentValidationToInvoiceForReturns | None |
RequiredData:RequireCreateOrder | None |
RequiredData:RequireCustomerInfoAlways | None |
RequiredData:RequireDeliveryPayment | None |
RequiredData:RequireOrderPayment | None |
RequiredData:RequireShippingMethodForDelivery | None |
RequiredData:RequireSignatureForPaymentHandledByCarrier | None |
RequiredData:RequireSignatureForUnPaidDelivery | None |
RequiredData:ValidateAvailableCountries | None |
RequiredData:ValidateAvailableShippingMethods | None |
RequiredData:ValidateCustomer | None |
ReservationCleanupTasks:Enabled | Tasks |
ReservationDeviationTasks:Enabled | Tasks |
ResolveNegativeStockDuringPeriodClosing | FinancialPeriodClosing |
Returnable:InvoicedDays | ReturnOrder |
ReturnOrderValidationErrorOnInvalidLines | ReturnOrder |
ReturnToSupplier:Export | ReturnToSupplierOrders |
ReturnToSupplier:ShippingOption | ReturnToSupplierOrders |
UniqueInvoiceNumberSequence | Invoices |
UniqueInvoiceNumberSequencePerType | Invoices |
UnprocessedFinancialPeriods:To | FinancialPeriods |
UseAddressBook | Customers |
UseExpectedCompletionTimeOnReceiveShipmentTask | Tasks |
UseInvoiceOutputFacade | None |
UseLegacyReceiptPrintingBehavior | None |
UseOrderOrchestration | OrderFulFillments |
UseOrderOrchestrationForReturnOrders | OrderFulFillments |
User:GetCompanyForUserNotFoundEmptyResponse | None |
UserCards:AllowRefundsWithoutOriginalTransaction | Refunds |
UserSearch:FilterOnCountryInStores | None |
UserSearch:NumberOfReplicas | None |
UserSearch:NumberOfShards | None |
UserSearch:UseNewUserTypeFiltering | None |
UserTasks:CreateCycleCountOnNoStockPartialPickCompletion | CycleCounts |
ProductProperty | None |
ExpectedValue | None |
ProductMarkerValue | None |
UserTasks:ProductMarkerForTasks | None |
UserTasks:ProductProperties | None |
UseUnifiedOrders | None |
VerifyPaidPickupOrders:Enabled | VerifyOrder |
WaitingForStock:MinimumStockQuantity | AdjustStock |
WaldoDebug | None |
WaldoEnabled | None |
WaldoTimeoutInSeconds | None |
WarehouseOrderExporter:Cancellation:Allow | None |
WarehouseOrderExporter:Endpoint | None |
WarehouseOrderExporter:Modification:Allow | None |
WarehouseOrderExporter:Token | None |
WorkedHours:CorrectionTime | CorrectWorkedHours |
ZipCode:Provider | None |
TestEnvironmentFallbackIpAddress | None |
TestEnvironmentFallbackIpAddressEnabled | None |
TestSuite:Deprecation:OptIn:Execution | None |
TestSuite:Deprecation:OptIn:Introduced | None |
TestSuite:Deprecation:OptIn:Typings | None |
TestSuite:Deprecation:OptOut:Execution | None |
TestSuite:Deprecation:OptOut:Introduced | None |
TestSuite:Deprecation:OptOut:Typings | None |
ThermalPrinting:ReprintWatermarkBlobID | PrintBlobs |
ThermalPrinting:SupportGiftReceipts | None |
ThreadPool:MinWorkerThreads | None |
Throttle:Login:Enabled | Login |
Throttle:Login:Ip:Lifetime | Login |
Throttle:Login:Ip:Limit | Login |
Throttle:Login:Pin:Lifetime | Login |
Throttle:Login:Pin:Limit | Login |
Throttle:Login:User:Lifetime | Login |
Throttle:Login:User:Limit | Login |
Thunderstock:AccessKey | None |
Thunderstock:Bucket | None |
Thunderstock:ClientID | None |
Thunderstock:MaxLineCount | None |
Thunderstock:Region | None |
Thunderstock:Secret | None |
TimeRegistration:AllowPeriodClosingWithClockedInUsers | FinancialPeriodClosing |
TrackingProviderName | None |
Translations:ProductionTemplates | MessageTemplates |
Translations:TestTemplates | MessageTemplates |
Treazure:JSONAuthenticationEndPoint | None |
Treazure:LoginID | None |
Treazure:LoginPassword | None |
Treazure:RetailerID | None |
Throttle:Login:Ip:Whitelist | None |
SearchOrders:FilterOnCurrentOrganizationUnitID | Orders |
Security:DenyLoginInOtherOrganizationUnit | None |
Security:ElevatedFunctionalityProvider | None |
Security:Password:LoginValidation | None |
Security:Password:MinimumHashSecurityLevel | None |
Security:Password:PasswordValidation | None |
Security:Password:ReauditDays | None |
Security:TemporaryElevationCode:ExpireInMinutes | None |
Security:VisibilityGroups:Orders:Enabled | VisibilityGroups |
Security:VisibilityGroups:OrganizationUnits:Enabled | VisibilityGroups |
Security:VisibilityGroups:Users:Enabled | VisibilityGroups |
Security:VisibilityGroups:Users:UseDefaultGroup | VisibilityGroups |
Sellability:DisableDeleted | None |
Sellability:MinimumSalePrice | Pricing |
Sellability:RequireSalePrice | Pricing |
SessionDuration:Default | None |
SessionDuration:Employee | None |
SessionDuration:MagicLink | None |
SessionDuration:Temporary | None |
SetShipFromWhenUsingOrderOrchestration | None |
SetupCompleted | None |
Compliance
✅ SDI & NTH Support
The GetInvoiceExportDocuments
service is now being utilized to support both SDI and NTH.
An announcement via our notes will be made once this is also supported via the Admin Suite chapter E-invoices.
🇩🇪 Germany
🆕 Payment Type Name on Receipts
The Receipts stencil in Germany now displays the payment type name.
✅ Global Blue changes
We made some changes when it comes to eligibility for using Global Blue tax free forms.
🇵🇱 Poland
The following changes apply:
- Items which are 100 % discounted are not eligible for a tax refund, and therefore will no longer be shown on the Global Blue tax refund form.
- Items with a price of 0 wll also no longer appear on the form.
- Services sold will not appear on the form.
- Services sold will not be taken into account for reaching the minimum gross sales amount.
- The Global Blue option will no longer be available when buying only a service.
🇮🇹 Italy
- Since giftcard products are not eligible for tax refund, they will not be transmitted to Global Blue.
- Additionally, giftcards will not count towards the threshold condition for the tax free eligibility.
Properties
🆕 BackendSystemID in Event Exports from Cases
We've added the BackendSystemID to the event export target for Cases. More on event export targets here
🆕 CustomFieldBackendID in GetRepair
To help simplify integrations with third parties, if custom fields have a BackendID, it will now be included in the GetRepair
response as CustomFieldBackendID.
✅ IncludedProductProperties in ListProductGiftCards
To make for a more efficient use of service calls, we've added a new optional property to the ListProductGiftCards
service call: IncludedProductProperties.
Details
The new property IncludedProductProperties in ListProductGiftcards
works similar to other services which include product details.
The service's response exposes the Product property with the additional product information requested.
{
IncludedProductProperties: ["backend_id", "custom_id"],
}
{
Result: {
"PageConfig": {
"Filter": {},
"Start": 0,
"Limit": 50,
"SortDirection": 0
},
"Page": [
{
"ID": 1,
"ProductID": 894,
"ProductName": "Example Giftcard",
"Product": {
"product_id": 1234,
"backend_id": "Example_Giftcard",
"custom_id": "eg1234"
},
"GiftCardConfigurationID": 2,
"GiftCardConfigurationName": "INTERSOLVE",
"IsDigital": false
},
...
],
...
}
}
🆕 OrderLineID in Orders Data lake export
The Orders Data lake export now contains an OrderlineID property in the OrderLines' OrderLedgers object.
🆕 BackendSystemID in scripting
You can now use a BackendSystemID when scripting. This will for one allow for easier routing and reporting of return types.
Please bear in mind however, that this property is being phased out slowly across EVA in favor of unique BackendIDs.
While this drop mentions including a BackendSystemID, this was ultimately not introduced. The property that did get introduced was BackendID.
Services
✅ Validating Roles on User types
From now on, roles can only be added to user types which are explicitly specified in that role.
EVA holds many kinds of User types. When configuring Roles, you could optionally attach such user types, after which EVA would check if the user was of the right type when trying to assign that role.
Until now, if you had not added any kind of user type in a role, it would mean that the role could be added to all user types.
That changes with this Core drop in the following way:
- EVA now requires you to add user types when creating a role.
- More importantly: EVA now validates that the role matches the user type, even when no user types are specified in that (already existing) role. This means that from now on, roles can only be added to user types which are explicitly specified in that role.
🆕 SetDiscountLayerSequences
To allow for making bulk changes in discount layers, we're introducing a new service: SetDiscountLayerSequences
.
Sample
This new service can set the sequence for all layers at once. All layers are required (except the System layer).
{
"Layers": [2, 3, 5, 8, 4, 7, 6] // LayerIDs
}
✅ ExportProductBaseExcel
The ExportProductBaseExcel
service now includes a limit (up to 1.000.000 records) on the number of products that can be exported, to take Excel's limitations into account.
Additionally, the related services have been moved to async variants.
Services made async
ExportProductBaseExcel
UploadProductExcel
UploadProductContentExcel
ExportProductContentExcel
UploadProductBarcodeExcel
Settings
✅ UseSpecialInStoreReturn defaults to false
The UseSpecialInStoreReturn
setting, as mentioned in last week's Changes to the in-store return flow Core drop entry, now defaults to false instead of the earlier mentioned true.
🆕 PrivacyRemovalRequests
To increase your options when it comes to clearing customer data, we are introducing two new settings.
The goal of these settings is to make sure there never are customers which are not actively needed to finalize an order.
Details
PrivacyRemovalRequests:TriggerForCompletedOrderAfterXMinutes
By specifying a number of minutes in this setting, EVA removes a created customer from any completed orders and then wipes the customer (after the number of minutes have passed). This is regardless of the presence of any other uncompleted orders with this customer.
PrivacyRemovalRequests:RemoveCustomersAfterXMinutes
By specifying a number of minutes in this setting, EVA finds customers without orders and wipes them (after the number of minutes have passed).
If you try to find such a customer based on its ID, the GetUser
call will return an error of type EntityDeleted. You can still recreate the exact same customer after having been wiped.
Other topics
✅ Pagination in User requirement sets
The User requirement sets chapter now includes pagination.
🆕 Logic for preventing stencil triggers
You can now include logic in any stencil template to prevent the stencil from being triggered based on your custom conditions.
This logic can be created as a Helper.
Sample
{{if User.CustomFields['NO_EMAILS'] == 'true'}}
{{:~eva_template_early_exit()}}
{{/if}}
Mind that it's the {{:~eva_template_early_exit()}}
element which tells EVA not to send/generate it.
🆕 More properties in in Repairs related templates
We have added several properties related to taxes and product properties to several templates.
Properties and templates
The following templates now have the ProductName property available.
- RepairCompleted
- RepairCancelled
- RepairShipped
- RepairReadyForPickup
The same templates now include the following object:
- Lines
- TotalAmount
- NetTotalAmount
- NetTotalAmountInTax
🆕 Requiring custom fields for applying discounts
We have made several changes which will soon result in the ability to create manual discounts which require custom fields to be filled.
Details
Manual discounts can now be set with mandatory custom fields of the following type:
- Order
- Orderline
- User
To that end, the following services have been altered:
Valdiate
/Create
/Update
Discount services - these now accept the property RequiredCustomFields- This property a list of CustomFieldIDs.
AddManualDiscountToOrder
now accepts the property CustomFields- It contains a list of the custom field key-value pairs which are required for the manual discount. If omitted, existing values will be used. If there is no existing value and no value is given either, then the discount cannot be applied.
ListManualDiscounts
now exposes these fields via the property RequiredCustomFields
The following two services have been newly introduced to manage the required custom fields separately:
AddRequiredCustomFieldsToManualDiscount
RemoveRequiredCustomFieldsFromManualDiscount
Any custom fields set as required will be exposed as required order data in checkout.
Fixes
- Resolved an issue that prevented updating the
UserIdentifierRequiredForSubscription
value according to the "User identifier: Request from frontend" field in subscription services. - In case of unified orders, transfer order lines that are created as a result of lines being shipped from external orders will no longer copy the BackendID of the original lines.
this would prevent cancelling lines that were partially shipped as there would be two order lines with the same BackendID
- Old email verification tokens will be properly invalidated.
- You can now delete roles which have an OU set attached which itself was already deleted.
- Transfer order lines will no longer have a BackendID, allowing for the use of
CancelOrder
again.these IDs don't exist outside of EVA
- The ability to generate coupons on returns (introduced in Core drop 2.0.735) is now triggered based on the ShipmentShippedConfirmation event.
this fixes an issue for coupons that weren't generated for exchange orders
- The
ReceiveShipment
service now handles edge cases where purchase orders were overshipped but received with a deficit.this effectively allows for better balancing over multiple shipments
- Cash handler will no longer allow for notes or coins whose value is lower than or equal to 0.
Deprecations
🚫 Effective
These deprecations are now effective. As of now, these services and/or fields are no longer available in EVA and can no longer be used.
Deprecated
High
- High HasReturns is deprecated since 2.0.746: Replaced with a new
Properties
/NotProperties
valueHasReturnLines
(131072).- SearchOrders.HasReturns
- High Order.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- CreateOrderFromShoppingCartResponse.Order.CreatedBy
- High Order.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- CreateOrderFromShoppingCartResponse.Order.HasReturns
- High Result.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- GetOrderResponse.Result.CreatedBy
- EVAPayGetInfoResponse.Result.CreatedBy
- High Result.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- GetOrderResponse.Result.HasReturns
- EVAPayGetInfoResponse.Result.HasReturns
- High Result.Order.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- GetStockReservationTaskResponse.Result.Order.CreatedBy
- High Result.Order.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- GetStockReservationTaskResponse.Result.Order.HasReturns
- High Result.Page.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- ListOrdersForCustomerResponse.Result.Page.CreatedBy
- High Result.Page.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- ListOrdersForCustomerResponse.Result.Page.HasReturns
- SearchOrdersResponse.Result.Page.HasReturns
- High Roles is deprecated since 2.0.746: Replaced by RolesWithDefault.
- GetSharedWorkspaceByIDResponse.Roles
- High ShoppingCart.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- ShoppingCartResponse.ShoppingCart.CreatedBy
- High ShoppingCart.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- ShoppingCartResponse.ShoppingCart.HasReturns
- High Task.Order.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- StartReservationCleanupResponse.Task.Order.CreatedBy
- High Task.Order.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- StartReservationCleanupResponse.Task.Order.HasReturns
- High WorkSet.Order.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- StartStockReservationResponse.WorkSet.Order.CreatedBy
- High WorkSet.Order.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- StartStockReservationResponse.WorkSet.Order.HasReturns
- High WorkSet.Orders.CreatedBy is deprecated since 2.0.746: Use
CreatedByID
orCreatedByFullName
.- CompleteReservationDeviationTask.WorkSet.Orders.CreatedBy
- StartReservationDeviationTaskResponse.WorkSet.Orders.CreatedBy
- High WorkSet.Orders.HasReturns is deprecated since 2.0.746: Use the new
Properties
valueHasReturnLines
(131072).- CompleteReservationDeviationTask.WorkSet.Orders.HasReturns
- StartReservationDeviationTaskResponse.WorkSet.Orders.HasReturns
For more details on the impact categories, please see When are changes communicated?.
Release dates may vary
The exact date for deploying a Core release to production environments may vary. See How we handle Core releases for more details.