---
uacp: This page is linked from the SAP Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/d2ee648522044ea19d3b5126c29692b5.html.
---


# Changelog 2025

:::info Open Source Changelogs
For repositories and plugins that are open source, please check out the respective changelogs in the [cap-js organization](https://github.com/cap-js) and the [CAP Community](https://github.com/cap-js-community).
:::

<style scoped >
  em { font-style:normal; font-weight: 500 }
  em:after { content:" —" }
  li { margin: 5px 0; }
</style>


## December 2025

### Added {#dec-25-added}

- _[cds-dk@9.5.0]_ `cds import` now accepts `--into-namespace <string>` to override the namespace entities are imported to, when importing OpenAPI definitions.
- _[eslint-plugin-cds@4.1.1]_ Top level type definitions for package export
- _[cds-mtxs@3.5.0]_ Deployment now evaluates Cloud Foundry environment variable `VCAP_SERVICES_FILE_PATH`.
- Added support for CDS defined request and response bodies for Spring `@RestController`s. The request and response bodies are validated against the CDS model.
- Support for protocol annotations `@odata`, `@hcql` and others as alternatives to explicit `@protocols` annotations.
- _[cds.java@4.5.0]_ `cds-feature-flow` supports `$flow.previous` to define the transition to a previous state.
- _[cds.java@4.5.0]_ `cds-feature-ucl` now supports SPII version 3.
- _[cds.java@4.5.0]_ Added a check preventing the multiple registrations of destination data providers in JCo's `Environment`.
- _[cds.java@4.5.0]_ The task-based outbox scheduler now supports a new lock strategy, that minimizes database locks. It can be enabled by setting `cds.outbox.persistent.statusLock.enabled` to `true`.
- _[cds.java@4.5.0]_ Added a new outbox counter metric reporting failed message processing attempts.
- _[cds.java@4.5.0]_ Select statements reading media streams are now enforcing a transaction, even if `cds.persistence.changeSet.enforceTransactional` is set to `false`.
- _[cds.java@4.5.0]_ The W3C trace context is now stored with the outbox message and restored upon processing.

### Changed {#dec-25-changed}

- _[cds-dk@9.5.0]_ `cds add portal` adds the correct service key configuration to the _mta.yaml_.
- _[cds-dk@9.5.0]_ `cds add sample` creates sample files aligned with recent versions of bookshop and bookstore in <https://github.com/capire>.
- _[cds-dk@9.5.0]_ `cds add sample` uses a matching ID in generated `manifest.json` and UI5 components.
- _[cds-dk@9.5.0]_ `cds build` uses `hdblogicalschema` and `hdblogicalschemaconfig` plugins in its default `.hdiconfig`.
- _[cds-dk@9.5.0]_ `cds add cloud-logging` adds required dependencies to _pom.xml_ for Java projects.
- _[cds-dk@9.5.0]_ `cds add kyma` is now the only suggested Kyma facet in `cds add help`.
- _[cds-dk@9.5.0]_ `cds add helm-unified-runtime` option is now deprecated; use `cds add kyma --unified-runtime` instead.
- _[cds-dk@9.5.0]_ `cds up --to k8s` now saves the checksum of buildpack images to determine if a rebuild is necessary.
- _[cds-dk@9.5.0]_ `cds up --to k8s` will interactively ask for registry credentials if they don't exist on the remote cluster.
- _[cds-dk@9.5.0]_ `cds build` automatically adds `contentLocalizedEdmx=true` to the java build task configuration if OData V2 is set.
- _[cds-dk@9.5.0]_ `cds add github-actions` has out-of-the-box support for Java projects.
- _[cds-dk@9.5.0]_ `cds add html5-repo` and `cds add app-frontend` do not create a separate _ui5-deploy.yaml_ but use the default _ui5.yaml_.
- _[cds-dk@9.5.0]_ `cds add` plugins allow merging into non-existing files with `cds.add.merge(<object>).into(<yaml-path>)`.
- _[cds-dk@9.5.0]_ `cds build` tasks that produce `csn.json` now emit the `compile.for.runtime` event, in alignment with other runtime CSN producers like `cds serve`. Plugins can use such events to hook into CSN creation.
- _[cds-dk@9.5.0]_ `cds add xsuaa` sets `credential-types: [ "binding-secret", "x509" ]` for XSUAA instances.
- _[cds-dk@9.5.0]_ `cds add hana` does not create an explicit `.hdiconfig` file any more as `cds build` provides defaults.
- _[cds-dk@9.5.0]_ `cds import` generates the on condition for a composition when the corresponding OData navigation property targets a collection, is contained (`$ContainsTarget` in OData EDM) and has a backlink (`$Partner` in OData EDM).
- _[cds-dk@9.5.0]_ `cds import` now considers OData contained navigation properties as compositions instead of associations.
- _[vscode-cds@9.5.0]_ Minimum VSCode version is now 1.103.1
- _[cds-mtxs@3.5.0]_ Metadata is merged instead of overwritten for resubscriptions.
- _[cds.java@4.5.0]_ `cds-feature-flow` now rejects state transitions when bound entity is in the draft state.
- _[cds.java@4.5.0]_ Calls to the service manager are now performed directly from the current thread and not anymore from a forked cloud SDK thread context.
- _[cds.java@4.5.0]_ Calls to the service manager for single tenant are now limited to one request per configured timeframe to prevent rate limits in service manager.
- _[cds.java@4.5.0]_ Default refresh interval for Service Manager cache (`cds.multiTenancy.serviceManager.cacheRefreshInterval`) has been increased to 20 minutes (previously 2 minutes) to reduce load on Service Manager.
- _[cds.java@4.5.0]_ The task-based outbox collector is now enabled by default.

### Fixed {#dec-25-fixed}

- _[cds-dk@9.5.0]_ `cds add ias` will always add a binding to the MTX sidecar or approuter if required.
- _[cds-dk@9.5.0]_ `cds add ias` has improved support for multitenancy scenarios on Kyma.
- _[cds-dk@9.5.0]_ `cds lint` no longer fails with error code 1 and no message when loading the config fails.
- _[cds-dk@9.5.0]_ `cds version` no longer prints an `undefined` value for `@sap/cds-dk`.
- _[cds-dk@9.5.0]_ `cds compile --flavor files` no longer crashes with a `TypeError`.
- _[cds-dk@9.5.0]_ `cds add workzone` does not add superfluous `destinations` configuration to the `srv-api` import.
- _[vscode-cds@9.5.0]_ Show compilation and other errors only once in status bar.
- _[cds-compiler@6.5.2]_ to.sql|hdi:
  - Don't add superfluous (and actually wrong) parentheses around `UNION`s
  - Don't dump with a specific column expressions in the query after a `UNION`
- _[cds@9.5.1]_ Draft child creation in case `cds.features.new_draft_via_action` is enabled
- _[cds@9.5.1]_ Draft messages of declarative constraints
- _[cds@9.5.1]_ Persisted draft messages in case of on-commit errors
- _[cds@9.5.1]_ Async UCL tenant mapping for UCL SPII v2
- _[cds@9.5.1]_ Quoting in `cds.compile.to.yaml`
- _[cds-mtxs@3.5.0]_ `cds login` compatibility with recent `@sap/cds-dk` versions.
- _[cds-mtxs@3.5.0]_ Event `compile.for.runtime` is also triggered when calling `POST/-/cds/extensibility/pull`.
- _[cds-mtxs@3.5.0]_ Startup of MTX does no longer show `cdsc` configuration warning if only defaults are used.
- _[cds-mtxs@3.5.0]_ Concurrency handling with HANA TMS v2 is now more stable.
- _[cds.java@4.5.0]_ Fixed a bug causing an `HTTP 500 Internal Server Error`, when an OData function with a wrong (misspelled) parameter name is called.
- _[cds.java@4.5.0]_ Fixed a bug causing draft-related readonly metadata to be writable through inactive entities.
- _[cds.java@4.5.0]_ Fixed a bug causing an `UriParserSyntaxException`, when using both simplified bound action and key-as-segment syntax in URL for OData v4.
- _[cds.java@4.5.0]_ Fixed a bug preventing custom events to be sent to AuditLogService via the outbox.
- _[cds.java@4.5.0]_ Fixed a bug causing OpenTelemetry spans with unexpected error status in case outbox processors select locked messages.
- _[cds.java@4.5.0]_ Fixed a bug that prevents audit logging for unauthorized request events for applications deployed to Kyma.
- _[cds.java@4.5.0]_ Fixed a bug that prevents audit logging for unauthorized request events for applications deployed to Kyma.
- _[cds.java@4.5.0]_ Fixed a bug causing outdated outbox metrics to be reported to OpenTelemtry.
- _[cds.java@4.5.0]_ Fixed a bug causing POJO arguments being accepted for unsupported events.
- _[cds.java@4.5.0]_ Fixed a bug that prevents correct transaction isolation in nested non-transactional changeset contexts.
- _[cds.java@4.5.0]_ Fixed a bug in `cds-feature-change-tracking` causing changes of associations written in Update statements as, for example, `assoc.code` to generate changelogs of the wrong type.

## November 2025

### Added {#nov-25-added}

- _[cds-compiler@6.5.0]_ compiler:
  - remove all special restrictions for references after an `exists` predicate
    (backends might introduce restrictions relevant for them)
  - support runtimes to improve draft handling (calc elements, column expressions)
- _[cds-compiler@6.5.0]_ for.odata/to.edm(x):
  - `is (not) null` operator is now supported in annotation expressions
  - in OData version 2, all elements of the `DraftAdministrativeData` EntityType get
    the annotation `UI.HiddenFilter` with value `true`
  - artifacts annotated with `@cds.external: 2` are now processed by the OData backend
- _[cds-compiler@6.5.0]_ to.sql:
  - the `exists` predicate can now be defined as a filter condition on the leaf of the `from` path
    i.e. `select from Books[exists author]` is equivalent to `select from Books where exists author`
- _[cds.java@3.10.5]_ Deep authorizations now support conditions with paths for exists predicates in @restrict predicates.
- _[cds.java@3.10.5]_ Calls to the service manager for single tenant can now be limited to one request per configured timeframe to prevent rate limits in service manager.
- _[cds.java@3.10.5]_ Implemented maximum cache size and expiration time after access for `TenantAwareCache`, configurable via `cds.model.provider.cache` properties.
- _[cds4j@4.5.0]_ Enable `$self` in subqueries, columns and where.
- _[cds4j@4.5.0]_ Allow to use session context variables on the select list.
- _[cds4j@4.5.0]_ Support search within elements of type `cds.Map`.
- _[cds4j@4.5.0]_ Support calculated elements in `_drafts` entities.
- _[cds4j@4.5.0]_ Support Fiori Tree Table (recursive hierarchy) requests on SQLite.  
- _[cds@9.5.0]_ Support for Declarative Constraints (`@assert`; beta)
- _[cds@9.5.0]_ Status Transition Flows (`@flow`; beta):
  - Aspect `sap.common.FlowHistory` automatically appended to entities with a `@to: $flow.previous`
    - Deactivate via `cds.features.history_for_flows=false`
    - Experimental: Via `cds.features.history_for_flows='all'`, all entities with a flow definition get appended
    - Note: FlowHistory is not maintained within drafts
  - Support for `@flow.status: <element name>` on entity level
  - UI annotation generation adds action to UI automatically (Object Page and List Report) but hidden in draft mode
  - Experimental support for CRUD flows:
    - Pseudo bound actions `CREATE` and `UPDATE` events can be flow-annotated
      - Note: The `CREATE` event cannot have a `@from` condition
    - Pseudo bound actions for drafts `NEW`, `EDIT`, `PATCH`, `DISCARD`, and `SAVE` can be flow-annotated
      - Note: Flow annotations inside drafts (`@from`, `@to`) are processed as in standard flow transitions, with the following exceptions:
        - The `NEW` event cannot have a `@from` condition
        - The `DISCARD` event cannot have a `@to` condition
- _[cds@9.5.0]_ Support for pseudo protocols
- _[cds@9.5.0]_ Support for Async UCL tenant mapping notification flow
- _[cds@9.5.0]_ `flush` on a queued service returns a Promise that resolves when immediate work (i.e., not scheduled for future) is processed
- _[cds@9.5.0]_ For draft-enabled entities, IsActiveEntity=true can be omitted from url
- _[cds@9.5.0]_ Support for `@Common.DraftRoot.NewAction` annotation with feature flag `cds.features.new_draft_via_action`
  - Generic collection bound action `draftNew` will be added to draft enabled entities
  - The action specified in the annotation will be rewritten into a draft `NEW` event
  - Active instances of draft enabled entities can be created directly via `POST`
- _[cds@9.5.0]_ Limited support for `$compute` query option: computed properties are only supported in `$select` at the root level, not in expanded entries or other query options. Only numeric operands and operators `add`, `sub`, `-`, `mul` and `div` are supported
- _[cds@9.5.0]_ `ias-auth`: configurable name for XSUAA fallback's `cds.requires` entry
- _[cds@9.5.0]_ `enterprise-messaging`: Support for scenario `ias-auth` with XSUAA fallback
- _[cds@9.5.0]_ Service configuration through `VCAP_SERVICES` can now be supplied with `VCAP_SERVICES_FILE_PATH`. Note that this is an experimental CF feature.
- _[cds-mtxs@3.4.4]_ [Pre-Alpha] Warning in case of multiple containers per BTP Tenant with HANA TMS v2.
- _[cds-mtxs@3.4.4]_ Improved handling of `retry-after` header in case of rate limiting errors.
- _[cds-mtxs@3.4.4]_ Maximum tolerated waiting time after a 429 response can be configured by setting `cds.requires.multitenancy.containerManager.maxRetryAfter` (in ms). Default is 5000.

### Changed {#nov-25-changed}

- _[cds-compiler@6.5.0]_ compiler: report an error for an `annotate` on non-existent definitions
  with security-relevant annotations (`@restrict`, `@requires`, `@ams.…`)
- _[cds-compiler@6.5.0]_ Update OData vocabularies: Capabilities, Common, Hierarchy
- _[cds.java@4.4.2]_ Calls to the service manager are now performed directly from the current thread and not anymore from a forked cloud SDK thread context.
- _[cds.java@4.4.2]_ HANA user switch logs "Reconnect connection for user" is now logged with level `DEBUG`.
- _[cds.java@4.4.2]_ Introduces service manager parameter singleReadInterval to restrict the number of single credential reads to one call per tenant and interval.
- _[cds4j@4.5.0]_ Optimized SQL for aggregations over associations.
- _[cds4j@4.5.0]_ Externalized the converter methods that don't need a `CdsModel` from the `CdsJsonConverter` to `CdsCoreJsonConverter`.
- _[cds4j@4.5.0]_ Annotations `@cds.java.name` or `@cds.java.this.name` on the service rename its wrapper interface accordingly.
- _[cds4j@4.5.0]_ Resulting Java type of arithmetic expression is now determined by type propagation.
- _[cds4j@4.5.0]_ Map elements in builder interfaces now have return type `StructuredType<?>` to allow accessing subelements via `get`.
- _[cds4j@4.5.0]_ The SQL for calculated elements CTEs now selects all non-virtual elements instead of a select `*`.
- _[cds@9.5.0]_ Internal service `UCLService` moved into non-extensible namespace `cds.core`
- _[cds@9.5.0]_ Status Transition Flows (`@flow`; beta):
  - UI annotation generation is on by default. Switch off via `cds.features.annotate_for_flows=false`.
  - Feature flag `cds.features.compile_for_flows` renamed to `cds.features.annotate_for_flows`
- _[cds@9.5.0]_ `DELETE` requests during draft edit, that do not use containment will cause persisted draft messages to be cleared
- _[cds-mtxs@3.4.4]_ [Pre-Alpha] Upgrade for list of tenants does no longer work with `cds.requires.multitenancy.jobs.clusterSize` > 1 (default is 3). Required TMS API has been disabled.
- _[cds-mtxs@3.4.4]_ [Pre-Alpha] When setting `cds.requires['cds.xt.DeploymentService'].hdi.create.cleanup_hana_tenants = true`, the deletion will no longer throw an error if deletion
fails because of other containers remaining.

### Fixed {#nov-25-fixed}

- _[cds-dk@8.9.11]_ Bump dependencies in shrinkwrap.
- _[cds-compiler@6.5.0]_ compiler: make an annotation `@cds.autoexpose: false` on an aspect used as
  `Composition` target have the desired effect (similar on `cds.common.TextsAspect`)
- _[cds.java@3.10.5]_ Fixed a bug causing `DRAFT_PATCH` events to fail with annotation validation errors, if update statements without key filters in the statement's ref are executed.
- _[cds.java@3.10.5]_ Fixed a bug causing SQL exceptions when trying to write to the `DraftMessages` element of an entity. `DraftMessages` are considered readonly.
- _[cds.java@3.10.5]_ Calls to the service manager are now performed directly from the current thread and not anymore from a forked cloud SDK thread context.
- _[cds4j@4.5.0]_ Fixed nested aggregations over associations.
- _[cds4j@4.5.0]_ Fixed conversion of predicates on select list to SQL.
- _[cds4j@4.5.0]_ Fixed issue with duplicate column names when updating managed elements using setter methods.
- _[cds4j@4.5.0]_ Fixed a `NullPointerException` in correlated subqueries using `$outer`.
- _[cds4j@4.5.0]_ Fixed a `CdsElementNotFoundException` when resolving select statement with `Aggregate` transformation.
- _[cds4j@4.5.0]_ Fixed a bug in CDS model reader, causing the entities to have wrong names when there are overlaps in naming between the entities and the services.
- _[cds4j@4.5.0]_ Fixed superfluous nodes in hierarchy subsets with `keepStart = false`.
- _[cds4j@4.5.0]_ Fixed exception when using inline within expand.
- _[cds4j@3.10.5]_ Fixed deep update via views with path expressions.
- _[cds4j@3.10.5]_ Support `byId()` in tenant discriminator mode.
- _[cds@9.5.0]_ Correctly format values in a where clause send to an external OData service, when the expression order is: value, operator, reference
- _[cds@9.5.0]_ cds.ql: tolerate extra spaces after in; parse RHS arrays of values as list
- _[cds@9.5.0]_ CRUD-style API: `cds.read()` et al. used without `await` do not throw if there is no database connected
- _[cds@9.5.0]_ Unnecessary compilation of model for edmx generation in multitenancy cases
- _[cds@9.5.0]_ Using `req.notify`, `req.warn` and `req.info` in custom draft handlers by collecting validation errors in a dedicated collection
- _[cds@9.5.0]_ `cds.auth` factory: passed options take precedence
- _[cds@9.5.0]_ `cds deploy --dry` no longer produces broken SQL for DB functions like `days_between`.
- _[cds@9.5.0]_ Read-after-write for create events during draft choreography will no longer include messages targeting siblings
- _[cds@9.5.0]_ `before` and `after` handlers now really run in parallel. If that causes trouble, you can restore the previous behavior with `cds.features.async_handler_compat=true` until `@sap/cds@10`.
- _[cds@9.5.0]_ Escaping of JSON escape sequences during localization
- _[cds@9.5.0]_ Persisted draft messages in case of on-commit errors
- _[cds@9.4.5]_ Custom error message for `@assert.range`
- _[cds@9.4.5]_ For hierarchy requests with `$filter`, properly remove inner `where` clause
- _[cds@9.4.5]_ Calling a parameterless function with parameter
- _[cds@9.4.5]_ Aligned error handling for path navigation and `$expand`
- _[cds@9.4.5]_ Input validation immediately rejects for `@mandatory`
- _[cds@8.9.7]_ Reject navigations in `$expand` without parsing the navigation path
- _[cds@8.9.7]_ Aligned error handling for path navigation and `$expand`
- _[cds-mtxs@3.4.4]_ The `PUT` and `set` API of the Extensibility Service now work more stable with parallel requests handled by many application instances.
- _[cds-mtxs@3.4.4]_ CDS Plugins are now loaded properly when running the `cds-mtx` command.

## October 2025

### Added {#oct-25-added}

- _[cds-dk@9.4.1]_ `cds add app-frontend` is supported as an alias to `cds add app-front`.
- _[cds-dk@9.4.1]_ `cds add attachments` is supported for Java projects.
- _[cds-dk@9.4.0]_ `cds add app-front` adds configuration for the new SAP BTP Application Frontend service.
- _[cds-dk@9.4.0]_ `cds add ias` has improved support for XSUAA hybrid projects.
- _[cds-dk@9.4.0]_ `cds add multitenancy` automatically adds upgrade hooks for Node.js projects.
- _[cds-dk@9.4.0]_ `cds deploy` support the generic `--resolve-bindings` option to resolve all bound services. This is helpful for use cases with multiple `hana`-tagged service bindings.
- _[cds.java@4.4.0]_ New annotation `@odata.draft.gc: false` can be used to disable draft GC for an entity.
- _[cds.java@4.4.0]_ `cds-feature-flow` now supports annotations `@from` and `@to` as synonyms to `@flow.from` and `@flow.to`. The status value can now also be specified as enum reference with a leading `#`.
- _[cds.java@4.4.0]_ The `resolve` goal of the `cds-maven-plugin` now makes CDS reuse models available globally in the project. They can thus can be imported within all CDS files. Module-specific resolution can be achieved by setting the new configuration `to` to `${project.build.directory}`.
- _[cds.java@4.4.0]_ Enabled programmatic definition of the application UI URL in multitenant applications that is returned upon a tenant subscription.
- _[cds.java@4.4.0]_ Support calling OData bound actions and functions without service namespace prefix.
- _[cds.java@4.4.0]_ `@readonly` processing can now be skipped for certain statements, by setting hint `@readonly` with value `false`.
- _[cds.java@4.4.0]_ The goal `add` of the `cds-maven-plugin` supports adding the Attachments Plugin to a CAP Java project.
- _[cds.java@4.4.0]_ Support string concatenation function `concat` in both OData V4 and V2, e.g. `$filter=concat(element,'string_value')`
- _[cds.java@4.4.0]_ Deep authorizations now support conditions with paths for `exists` predicates in `@restrict` predicates.
- _[cds.java@4.3.2]_ Implemented maximum cache size and expiration time after access for `TenantAwareCache`, configurable via `cds.model.provider.cache` properties.
- _[cds4j@4.4.0]_ Support for the `@open` annotation in 'CdsJsonConverter'.
- _[cds4j@4.4.0]_ Improved logging of search resolution.
- _[cds4j@4.4.0]_ Added a new `CQL.in` method to simplify building `in` predicates from `CdsResult`.
- _[cds4j@4.4.0]_ Added new methods to `CQL` to simplify building typed references.
- _[cds4j@4.4.0]_ Support `concat` function and `||` operator in CQN for strings concatenation.
- _[cds4j@4.4.0]_ Support aggregating over associations in columns and where clause.

### Changed {#oct-25-changed}

- _[cds-dk@9.4.3]_ `cds add github-actions` will use the `cap-js/cf-setup` action from GitHub marketplace instead of creating a local copy.
- _[cds-dk@9.4.3]_ `cds add containerize` omits the Unix-based `before_all` scripts in `containerize.yaml` in favor of a cross-platform compatible `cds up --to k8s` integration.
- _[cds-dk@9.4.3]_ `cds up --to k8s` now uses built-in containerization, eliminating the hard dependency on the `ctz` library.
- _[cds-dk@9.4.3]_ `cds up --to k8s` will interactively ask for a domain if it can't be determined from the current Kubernetes configuration.
- _[cds-dk@9.4.3]_ `cds build --for hana` no longer requires `.hdbgrants` and `.hdbrevokes` to be specified as a plugin in the `.hdiconfig` file.
- _[cds-dk@9.4.3]_ `cds import` no longer emits usage info when invoked with the dry option.
- _[cds-dk@9.4.2]_ `cds add containerize` does not add app module installations scripts to its `containerize.yaml`. Use `cds up --to k8s` instead.
- _[cds-dk@9.4.2]_ `cds add` is less eager with respect to changing unaffected configuration.
- _[cds-dk@9.4.2]_ `cds add ias` adds less unnecessary configuration in combination with the HTML5 repository.
- _[cds-dk@9.4.2]_ `cds add test` includes the service name in the test suite description.
- _[cds-dk@9.4.0]_ `cds add typescript` and `cds add typer` will now add a `path` entry in the project's _tsconfig.json_ or _jsconfig.json_ respectively, which will mitigate resolution problems with `@cap-js/cds-types`.
- _[cds-dk@9.4.0]_ `cds add multitenancy` adds the `with-mtx` profile to Java apps by default, simplifying local development.
- _[cds-dk@9.4.0]_ `cds import` for EDMX files now maps `Edm.String` types to `cds.String` (before: `cds.LargeString`). Background is that some databases don't support the resulting `NCLOB` type in key fields.
- _[cds-dk@9.4.0]_ `cds build` will now remove dev dependencies starting with `workspace:`, `file:`, as well as the entire `workspace:` block therein, and regenerate the _package-lock.json_ if needed.
- _[cds-dk@9.4.0]_ `cds import` for EDMX correctly imports multiline strings in `DefaultValue`.
- _[cds-dk@9.4.0]_ `cds import` now writes annotations from EDMX files in a flat, i.e. non-structured manner, so that they can be processed by the application runtime.
- _[cds-dk@9.4.0]_ `cds bind` does not fail when setting the profile via `CDS_ENV`.
- _[cds-dk@9.4.0]_ `cds version` is more robust with respect to Java versions.
- _[cds.java@4.4.0]_ The mock users security configuration is now also disabled when setting `cds.security.authentication.authConfig.enabled` to `false`.
- _[cds4j@4.4.1]_ The log level for messages "Query in view ... is not supported by CDS model reader..." was changed from `WARN` to `DEBUG`.
- _[cds4j@4.4.0]_ Optimized hierarchical queries for HANA with `level` > 0. The parameter `depth` is set to `level` + 1 to reduce calculation time.
- _[cds4j@4.4.0]_ No deep data copy during statement normalization.
- _[cds-mtxs@3.4.3]_ [Pre-Alpha] `hana_tenant_prefix` is now mandatory to ensure a unique HANA tenant for `t0`.

### Fixed {#oct-25-fixed}

- _[cds-dk@9.4.3]_ `cds add data` fixes an issue where randomly generated `Decimal` and `Integer` values could exceed their defined precision or scale.
- _[cds-dk@9.4.3]_ `cds add pipeline` does not add UI5 template files in some cases.
- _[cds-dk@9.4.3]_ `cds add ias` does not write to the `mta.yaml` for non-MTA projects.
- _[cds-dk@9.4.3]_ `cds add ias` automatically adds the `authenticationType` to `xs-app.json` if required.
- _[cds-dk@9.4.3]_ `cds add ias` adds a binding to the approuter component if required.
- _[cds-dk@9.4.3]_ `cds import --from ...` yields a better error message for unknown import kinds.
- _[cds-dk@9.4.2]_ `cds add ams` followed by `cds add mta` correctly generates the AMS deployer module.
- _[cds-dk@9.4.2]_ `cds add hana` does not fail if there's no `.cdsrc.json`.
- _[cds-dk@9.4.2]_ `cds up` doesn't try to create a symlink to the monorepo _package-lock.json_ if a submodule-local one already exists.
- _[cds-dk@9.4.2]_ `cds add test` creates correct OData URLs with unqualified entity names in service paths.
- _[cds-dk@9.4.2]_ `cds add http` skips contained composition targets.
- _[cds-dk@9.4.2]_ `cds add sample` no longer comes with an error when creating a Book through Fiori.
- _[cds-dk@9.4.2]_ `cds build` now places the `i18n` folder in the generated output root directory instead of nested locations.
- _[cds-dk@9.4.1]_ `cds import` adds latest version 4 of `@sap-cloud-sdk` packages.
- _[cds-dk@9.4.1]_ `cds add sample` now uses Integer IDs for Books and Authors again, instead of UUIDs.
- _[cds-dk@9.4.0]_ `cds add html5-repo` avoids some superfluous configuration combination with `cds add portal`.
- _[cds-dk@9.4.0]_ `cds add handler` ignores external services.
- _[cds-dk@9.4.0]_ `cds add audit-logging` correctly adds the dependency in the _Chart.yaml_ for Helm deployments.
- _[cds-dk@9.4.0]_ `cds deploy --to hana` works with user-provided HANA services.
- _[cds-dk@9.4.0]_ `cds bind` doesn't add the `custom-service:` prefix for Node.js any more.
- _[cds-compiler@6.4.6]_ compiler: a references to an element of the target in a filter for associations
  inside an annotation expression does not lead to a compiler message requesting
  users to provide the annotation themselves (regression with v6.4.4)
- _[cds-compiler@6.4.4]_ compiler:
  - properly rewrite references in arguments of associations in annotation expressions
  - a references to a variable (`$user.id`, …) in a filter of an annotation expression
    does not lead to a compiler message requesting users to provide the annotation themselves
  - improve code completion in annotation expressions: the editor can display valid names
    for references even if the expression does not properly end by `)`
- _[cds-compiler@6.4.4]_ to.sql:
  - reject `$self` in infix filter following exists predicate instead of just ignoring the filter expression
  - properly add comparison for the `tenant` discriminator to the `join` condition of `localized` views
    if the non-published option for tenant support is set (regression with v6.4.0)
- _[cds-compiler@6.4.2]_ parser:
  - improve error recovery with empty expression as annotation value
  - avoid clutter in message text for syntax errors: use `‹Value›` instead of listing value tokens
- _[cds-compiler@6.4.2]_ compiler: fix suppression of warnings when annotating backend-generated things
  like draft entities or localized convenience views
- _[cds-compiler@6.4.2]_ to.sql|hdi|hdbcds: don’t report unjustified errors when projecting structured elements and
  calculated elements had been used (regression with v6.4.0)
- _[cds.java@4.4.1]_ Fixed a bug that no default ON handler was registered for the new `APP_UI_URL` event in `DeploymentService` without multi tenancy enabled.
- _[cds.java@4.4.0]_ Fixed an issue causing an event to be acknowleged even if the processing failed in case of a custom outbox handler throwing an exception.
- _[cds.java@4.4.0]_ Fixed a bug causing an Exception `Comparison Or Logical expression MUST have a left and right expression` when requesting `$metadata` with `$format=json` for expressions with constants.
- _[cds.java@4.4.0]_ Fixed incorrectly placed `@Order` annotations on security configurations. Make sure to place `@Order` annotations on the `SecurityFilterChain` bean method, instead of on the configuration class.
- _[cds.java@4.4.0]_ `cds-feature-change-tracking` performance is improved when large number of entities are inserted.
- _[cds.java@4.4.0]_ Fixed a bug causing ETags validations to unexpectedly fail in combination with activated DraftMessages.
- _[cds.java@4.3.2]_ Fixed a bug causing `CdsModel` instances to pile up in memory and cause out of memory errors.
- _[cds4j@4.4.1]_ Fixed exception on aggregating over associations when using the static query builder API.
- _[cds4j@4.4.0]_ Anonymous aspects used for composition of aspect, now get a proper `@CdsName` annotation and `CDS_NAME` constant generated during code generation.
- _[cds4j@4.4.0]_ Fixed exception when using `exists` predicates on the select list.
- _[cds4j@4.3.2]_ Fixed deep update via views with path expressions.
- _[cds4j@4.3.2]_ Fixed usage of `byId` with models using tenant discriminator.
- _[cds@9.4.4]_ Input validation of action parameters in action calls on draft state of draft enabled entities
- _[cds@9.4.4]_ Input validation on `NEW` event of draft choreography
- _[cds@9.4.4]_ Ignore outbox model on Windows
- _[cds@9.4.4]_ `enterprise-messaging-shared`: preserve error listener during reconnect
- _[cds@9.4.3]_ Don't continue validation user input if data type is wrong
- _[cds@9.4.3]_ UI annotation generation for status transition flows for Java
- _[cds@9.4.3]_ Increased minimium version of `@sap/cds-compiler` to 6.3.x
- _[cds@9.4.3]_ Undefined error message for early access checks
- _[cds@9.4.2]_ `DISCARD` as a synonym for `CANCEL`
- _[cds@9.4.2]_ `cds.load()` called twice
- _[cds@9.4.1]_ Default `kind` for unknown required service to `hcql`
- _[cds@9.4.1]_ Consider and allow aliases from nesting during OData query validation
- _[cds-mtxs@3.4.3]_ Deployment errors when activating extensions do no longer appear as base64 encoded text in the logs.
- _[cds-mtxs@3.4.3]_ The `cds.cdsc.tenantDiscriminator` setting is ignored by the sidecar.
- _[cds-mtxs@3.4.3]_ [Pre-Alpha] Upgrade for list of tenants now works properly again with `cds.requires.multitenancy.jobs.clusterSize` > 1 (default is 3).
- _[cds-mtxs@3.4.3]_ [Pre-Alpha] Creation of tenant containers for a BTP tenant or `t0` for different applications now works more stable.
- _[cds-mtxs@3.4.3]_ When pushing or adding extensions via API, the extension validation now checks the edmx for the configured odata version.
- _[cds-mtxs@3.4.3]_ Update of the application URL via Subscription Management Dashboard now works correctly.
- _[cds-mtxs@3.4.2]_ [Pre-Alpha] Subscription when using HANA TMS v2 now filters all options that are incompatible.
- _[cds-mtxs@3.4.1]_ Annotation validation now works correctly when using `extend <entity> with <annotation>`.
- _[cds-mtxs@3.4.1]_ [Pre-Alpha] Subscription triggered by BTP when using HANA TMS v2 works again.
- _[cds-mtxs@3.4.1]_ The profile `[with-mtx]` doesn't override database configuration for non-MTX usage.
- _[cds-mtxs@3.4.1]_ Improved resilience for SaaS registry and Subscription Manager callbacks.

## September 2025

### Added {#sep-25-added}

- _[cds-dk@9.3.0]_ `cds bind -a` is now also supported for Kyma, where the app prefix can be passed for `-a`, e.g. `bookshop-srv`.
- _[cds-dk@9.3.0]_ `cds build --for hana` now trims leading and trailing whitespaces in csv-Files if build option `trimCsvWhitespaces` is set.
- _[cds-dk@9.3.0]_ `cds add github-actions` sets required `permissions`.
- _[cds-dk@9.3.0]_ `cds up` supports a deployment layout where approuter or portal service configuration is in a top-level `.deploy` folder.
- _[cds-dk@9.3.0]_ `cds add ias` sets the `access-token-format` to `jwt` by default.
- _[cds-compiler@6.4.0]_ compiler: `annotate … with @extension.code: [..., 'additional code']` even works
  if no value for that annotation has been provided with the base definition.
- _[cds-compiler@6.4.0]_ to.sql: Calculated elements can now be used next to (but not in) nested projections.
- _[cds-compiler@6.4.0]_ to.edm(x): The `@cds.api.ignore` annotation can now be applied to actions, functions, and their parameters.
- _[cds.java@4.3.0]_ Added new `run` methods to return typed results for typed queries.
- _[cds.java@4.3.0]_ Spring Boot applications now show CAP Java banner.
- _[cds.java@4.3.0]_ Spring Boot applications now print link to an index page when run locally.
- _[cds.java@4.3.0]_ The SQL for to-one path expressions can now be optimized by avoiding joins if a FK column can be selected instead. Set `cds.sql.toOnePath.mode` to `optimize` to enable this optimization.
- _[cds4j@4.3.0]_ Support `hana.` as prefix for SAP HANA specific SQL statement hints.
- _[cds4j@4.3.0]_ The code generator avoids clashes with some methods from parent interfaces or classes by adding a suffix '_' to the method name.
- _[cds4j@4.3.0]_ Support data modification via views with `where` condition.
- _[cds4j@4.3.0]_ Optimized SQL for managed to-one paths by avoiding joins to the association target if possible and selecting the foreign key instead (`cds.sql.toOnePath.mode: optimize`).
- _[cds4j@4.3.0]_ Support for deserializing arrays of simple types in 'CdsJsonConverter'.
- _[cds@9.4.0]_ Status Transition Flows (`@flow`; alpha):
  - Resolve enum references in `@from`/`@to` values
  - Support for `@to: $flow.previous` (transition to the previous status in a flow)
    - Use `cds.env.features.flows_history_stack=true` to switch from history (default) to stack-based behavior
    - Requires adding aspect `sap.common.FlowHistory` to the respective entity
- _[cds@9.4.0]_ `i18n` translations for `@assert` messages
- _[cds@9.4.0]_ `SELECT ... .stream ()` returns the data from the database as a raw stream
- _[cds@9.4.0]_ `cds.validate` treats `@insertonly` elements as immutable
- _[cds@9.4.0]_ Vietnamese translations for texts from `@sap/cds/common`
- _[cds@9.4.0]_ `ias`/`jwt`/`xsuaa`-auth: Add token payload (as `token_payload`) to warning log in case of an invalid token
  - Note: Some invalid tokens are (for performance reasons) not fully validated and, hence, the payload may not be trusted!
- _[cds-mtxs@3.3.1]_ [Pre-Alpha] By setting `cds.requires['cds.xt.DeploymentService'].hdi.create.cleanup_hana_tenants = true`,
the unsubscribe operation will also try to remove the corresponding HANA tenant.
- _[cds-mtxs@3.3.0]_ The number of unbound entities added via extensions can now be restricted via their namespace:

  ```jsonc
  "extension-allowlist": [
   {
    "for": ["my.new"],
    "new-entities": 1
   }]
  ```

- _[cds-mtxs@3.3.0]_ [Pre-Alpha] Support for HANA TMSv2.

### Changed {#sep-25-changed}

- _[cds-dk@9.3.0]_ `cds add sample` provides more i18n translations.
- _[cds-dk@9.3.0]_ `cds add ias` sets the `xsuaa-cross-consumption` field to `true` by default.
- _[vscode-cds@9.3.0]_ Minimum VSCode version is now 1.101.2
- _[cds-compiler@6.4.0]_ to.sql:
  - generation of localized convenience views now use the ON-condition of the `localized` element
    to create the FROM clause.
- _[cds.java@4.3.0]_ The `cds-services-archetype` now generates a `srv/pom.xml` with some useful default settings for the code generation.
- _[cds4j@4.3.0]_ DiffProcessor: Throw exception on entries with non-unique key.
- _[cds4j@4.3.0]_ Improved performance of the projection data resolver and element reference parsing.
- _[cds@9.4.0]_ `SAVE` handlers for drafts are triggered when a draft is activated
  - Opt-out until cds^10 with `cds.features.compat_save_drafts=true`
- _[cds@9.4.0]_ Improved default error messages for input validation.
- _[cds@9.4.0]_ Renamed error key for validation errors of `@mandatory` from `ASSERT_NOT_NULL` to `ASSERT_MANDATORY`
  - For i18n message lookup, an automatic fallback is implemented.
  - Opt-out until cds^10 with `cds.features.compat_assert_not_null=true`
- _[cds@9.4.0]_ Errors are collected for `_initial` (internal!) and `before` phase

### Fixed {#sep-25-fixed}

- _[cds-dk@9.3.2]_ `cds add html5-repo` avoids some superfluous configuration combination with `cds add portal`.
- _[cds-dk@9.3.2]_ `cds import` correctly imports OData v2 EDMX files with `Edm.Time` properties having a precision.
- _[cds-dk@9.3.1]_ `cds add ias` correctly sets the `subscription-manager` dependencies endpoint for Node.js.
- _[cds-dk@9.3.1]_ `cds add data --records` respects the max length of a string field when it is annotated with `@Communication.IsEmailAddress`
- _[cds-dk@9.3.1]_ `cds add data --records --format csv` correctly escaping complex properties nested within structs.
- _[cds-dk@9.3.1]_ `cds add data --records` correctly generates values for structs in cases when the entity and the struct, used by the entity, have both a property with the same name.
- _[cds-dk@9.3.1]_ `cds add html5-repo` also binds the `html5-repo-host` service to the approuter.
- _[cds-dk@9.3.1]_ `cds up` has improved support for setups with multiple microservices.
- _[cds-dk@9.3.1]_ `cds add mta` will add no `role-collections` parameters if there are some specified in `xs-security.json`.
- _[cds-dk@9.3.1]_ `cds add github-actions` correctly generates a release workflow.
- _[cds-dk@9.3.1]_ `cds add github-actions` uses a simplified and more resilient Kyma setup script.
- _[cds-dk@9.3.1]_ `cds import` now correctly imports EDMX files with empty NavigationPropertyPath tags.
- _[cds-dk@9.3.1]_ `cds import` now correctly imports OData v2 EDMX files with `Edm.Time` properties, which have a precision.
- _[cds-dk@9.3.0]_ `cds add workzone` with missing `sap.app` config in `manifest.json` does not throw a `TypeError`.
- _[cds-dk@9.3.0]_ `cds add ias` adds a subdomain-less application URL in `redirect_uris`.
- _[vscode-cds@9.4.0]_ Code completion for annotations:
  - In certain cases proposals added a superfluous `@` character
  - Entries in annotation expressions could be shown twice
  - SQL functions could have been suggested in annotation expressions
- _[vscode-cds@9.4.0]_ Semantic highlighting of annotations could not be enabled. User setting name is now changed to `cds.contributions.features.semanticHighlighting`
- _[vscode-cds@9.3.0]_ Element names are now correctly highlighted even without type specification
- _[cds-compiler@6.4.0]_ parser: minor improvements in error reporting and error recovery
- _[cds-compiler@6.4.0]_ to.sql:
  - columns selecting variables did not always get a column alias.
  - when excluding a structure, the SQL backend incorrectly emits `wildcard-excluding-one`.
- _[cds-compiler@6.3.6]_ to.sql: Topological ordering of views did not always account for subqueries (fixes regression from v5.9.0)
- _[cds-compiler@6.3.4]_ parser: Keep parentheses around lists on the right side of an `in` operator.
- _[cds-compiler@6.3.4]_ compiler: For calculated elements using associations with filters and cardinality, CSN recompilation could
  fail for `gensrc` CSN, as happens for MTX.
- _[cds-compiler@6.3.2]_ to.sql: Fix internal inconsistency when handling nested projections.
- _[cds-compiler@5.9.12]_ to.sql: Topological ordering of views did not always account for subqueries (fixes regression from v5.9.0)
- _[cds-compiler@5.9.10]_ parser: Keep parentheses around lists on the right side of an `in` operator.
- _[cds-compiler@5.9.10]_ compiler: For calculated elements using associations with filters and cardinality, CSN recompilation could
            fail for `gensrc` CSN, as happens for MTX.
- _[cds.java@4.3.1]_ Fixed a bug causing `DRAFT_PATCH` events to fail with annotation validation errors, if update statements without key filters in the statement's ref are executed.
- _[cds.java@4.3.1]_ Fixed a bug causing SQL exceptions when trying to write to the `DraftMessages` element of an entity. `DraftMessages` are considered readonly.
- _[cds.java@4.3.1]_ Fixed a bug causing issues when returning `CdsResult<?>` in an event handler method.
- _[cds.java@4.3.1]_ Fixed a bug causing an event to be acknowledged even if the processing failed in case of a custom outbox handler throwing an exception.
- _[cds.java@4.3.0]_ Enabling draft messages no longer breaks UI behaviour on UI5 versions before `1.135.0`.
- _[cds.java@3.10.4]_ Fixed a bug in `cds-feature-change-tracking` causing duplicate changelog entries for association elements that are also keys.
- _[cds.java@3.10.4]_ Fixed a bug, causing authorization predicate to appear in all `where` clauses of `Select` statements using `Select` statements in their `from` clauses.
- _[cds4j@4.3.0]_ Fixed result structure of deep updates on projections.
- _[cds4j@4.3.0]_ Fixed ClassCastException in CdsData.getPath, getPathOrDefault and containsPath on non-map values.
- _[cds4j@4.3.0]_ Fixed SQL error due to missing CTE for queries with paths over runtime views.
- _[cds4j@4.3.0]_ Fixed a regression from 4.1.0 where inserts on views with `null` values for aliased to-one paths incorrectly triggered deep inserts into the path target without data.
- _[cds4j@4.3.0]_ Fixed FK propagation for deletes in deep update & upsert.
- _[cds4j@4.3.0]_ Resolved a bytecode incompatibility issue in the `Result` interface that was introduced in version 4.2.0.
- _[cds@9.4.0]_ Duplicate reconnects in AMQP
- _[cds@9.4.0]_ `ASSERT_FORMAT` errors return correct regexp in message
- _[cds@9.4.0]_ Crash by draft validation with (custom) error w/o target
- _[cds@9.4.0]_ Fixed issue where `' $'` in payloads of batch requests would be prefixed with `'/'`
- _[cds@9.4.0]_ Broken link `cds.auth`
- _[cds@9.4.0]_ Persist original error message in draft validation messages
- _[cds@9.4.0]_ Escaping of `\t` and `\f` in edmx during localization
- _[cds@9.4.0]_ Escaping of JSON escape sequences other than `\"` during localization
- _[cds@9.3.1]_ In messaging services, propagated headers (e.g. `x-correlation-id`) will not be automatically propagated for `format: 'cloudevents'`
- _[cds@9.3.1]_ Avoid deprecation warning for `cds.context.user.tokenInfo`
- _[cds@9.3.1]_ Consider `@Capabilities.ExpandRestrictions.NonExpandableProperties` annotation and ignore fields referenced by the annotation, when rewriting asterisk expand into columns
- _[cds-mtxs@3.4.0]_ Extension validation now properly check unbound entities.
- _[cds-mtxs@3.3.1]_ [Pre-Alpha] Container determination for HANA TMS v2 now fails correctly if no containers exist.
- _[cds-mtxs@3.3.1]_ Subscription Manager and Saas Registry Service can now be used in parallel (hybrid use).
- _[cds-mtxs@3.3.0]_ Better support for `readOnlyRootFilesystem` in Kubernetes.

### Removed {#sep-25-removed}

- _[vscode-cds@9.4.0]_ Temporary user setting `cds.workspace.fastDiagnosticsMode`. The default so far `clear` is now the only mode.

## August 2025

### Added {#aug-25-added}

- _[cds-compiler@6.3.0]_ compiler: Column casts can now use more modifiers such as `default` directly.
- _[cds-compiler@6.3.0]_ for.odata/to.edm(x):
  - New option `draftUserDescription` is now available. It adds the fields `CreatedByUserDescription`,
    `LastChangedByUserDescription`, `InProcessByUserDescription` to the `DraftAdministrativeData` entity.
- _[cds-compiler@6.3.0]_ to.sql:
  - Structures with only one element can now be compared to scalar values.
    This also applies to associations with only one foreign key.
  - `cds.UInt8` can now be used in SQL dialects "h2" and "postgres".
  - Managed associations can now be used in comparisons, e.g. `assoc = struct`.
  - Structures and managed associations with only one element can be compared with scalars, e.g. `struct = 1`.
  - In the draft use case, the `DRAFT.DraftAdministrativeData` entity now includes the following fields by default:
  `CreatedByUserDescription`, `LastChangedByUserDescription`, `InProcessByUserDescription`, and `DraftMessages`.
- _[cds@9.3.0]_ New method `collect()` has been added to `LinkedCSN`, which can be used like that:

  ```js
  const federated_entities = cds.linked(csn).collect (d => d.is_entity && d['@federated'])
  ```

- _[cds@9.3.0]_ Remote services can now be configured without `kind`, for example:

  ```json
  { "cds": { "requires": { "SomeService": true }}}
  ```

- _[cds@9.3.0]_ Automatic protocol selection is applied if a required service is configured as above
  and the remote services is served via multiple protocols. For example, if the above
  service would be declared like that, the best protocol would be chosen automatically
  (`hcql` in this case):

  ```cds
  @hcql @rest @odata service SomeService {...}
  ```

- _[cds@9.3.0]_ Method `cds.connect.to()` now allows to connect to remote services with just an http url.
  For example use that from `cds repl` like that:

  ```js
  srv = await cds.connect.to ('http://localhost:4004/hcql/books')
  await srv.read `ID, title, author.name from Books`
  ```

- _[cds@9.3.0]_ Property `cds.User.authInfo` as generic container for authentication-related information
  - For `@sap/xssec`-based authentication strategies, `cds.context.user.authInfo` is an instance of `@sap/xssec`'s `SecurityContext`
- _[cds@9.3.0]_ Support for state transition flows (`@flow`):
  - Generic handlers for validating entry (`@from`) and exit (`@to`) states
  - Automatic addition of necessary annotations for Fiori UIs (`@Common.SideEffects` and `@Core.OperationAvailable`) during compile to EDMX with feature flag `cds.features.compile_for_flows = true`
- _[cds@9.3.0]_ Experimental support for consuming remote HCQL services (`cds.requires.<remote>.kind = 'hcql'`)
- _[cds@9.3.0]_ Infrastructure for implementing the tenant mapping notification of Unified Customer Landscape's (UCL) Service Provider Integration Interface (SPII) API
  - Bootstrap the `UCLService` via `cds.requires.ucl = true` and implement the assign and unassign operations like so:

    ```js
    // custom server.js
    cds.on('served', async () => {
      const ucl = await cds.connect.to('ucl')
      ucl.on('assign', async function(req) { ... })
      ucl.on('unassign', async function(req) { ... })
    })
    ```

  - Currently, only the synchronous interaction pattern is supported!
- _[cds@9.3.0]_ The targets of `@Common.Text` are added to the default search targets
- _[cds@9.3.0]_ Patch Level Validations are enabled by default. Opt-out with `cds.fiori.draft_messages=false`
- _[cds@9.3.0]_ Enable custom aggregations for currency codes and units of measure
- _[ux-cds-odata-language-server-extension@1.18.6]_ Added more code completion suggestions to improve adding annotations to annotations with scalar or array values
- _[ux-cds-odata-language-server-extension@1.18.6]_ Added more code completion suggestions for annotations using shortcut syntax
- _[ux-cds-odata-language-server-extension@1.18.6]_ Added a diagnostic message for the deprecated `$value` syntax

### Changed {#aug-25-changed}

- _[cds-dk@9.2.1]_ `cds add github-actions` adds `if: always()` to the scripts retrieving Cloud Foundry logs.
- _[cds-dk@9.2.1]_ `cds up` uses a default timeout of 10 minutes for Helm upgrades.
- _[cds-dk@9.2.1]_ `cds bind` works out-of-the-box for PostgreSQL databases.
- _[cds-dk@9.2.1]_ `cds bind -a` gives warning if no services are bound to the targeted app.
- _[vscode-cds@9.2.1]_ OData Annotation Modeler's sub features can be enabled distinctively.
  For performance reasons, **only _code completion_ and _hover information_ are enabled by default**.
  Enable others via user settings: `cds.contributions.features.<feature>`
- _[vscode-cds@9.2.1]_ Performance optimizations when updating dependency net of CDS file dependencies
- _[cds-compiler@6.3.0]_ Update OData vocabularies: Common
- _[cds-compiler@6.3.0]_ cdsc: EDMX output uses XML comments as service separators instead of `//`.
        If there is only one service, no header is printed, allowing piping the output to a file.
- _[cds-compiler@6.3.0]_ to.sql: path expressions which end in a foreign key are now always optimized to use the element of the source side.
- _[cds@9.3.0]_ `UCLService` only pushes the application template to UCL if `cds.requires.ucl.applicationTemplate` is present
- _[cds@9.3.0]_ `cds.User.tokenInfo` is deprecated. Use `cds.context.user.authInfo.token` instead.
- _[cds@9.3.0]_ Undocumented compat `cds.context.http.req.authInfo` is deprecated. Use `cds.context.user.authInfo` instead.
- _[cds@9.3.0]_ Delete all persisted draft messages, when the first request targeting a draft child without containment is handled.
- _[cds@9.3.0]_ cds build now trims leading or trailing whitespace characters for all values in CSV files deployed to SAP HANA.

### Fixed {#aug-25-fixed}

- _[cds-dk@9.2.1]_ `cds add github-actions` won't try to merge a `cf-info` action if there's an existing `mta.yaml`.
- _[cds-dk@9.2.1]_ `cds add workzone` with missing `sap.app` config in `manifest.json` does not throw a `TypeError`.
- _[cds-dk@9.2.1]_ `cds compile --to xsuaa` generates roles for `@requires` in bound actions.
- _[cds-dk@9.2.1]_ `cds add lint` now adds proper configuration to enable linting of JavaScript and TypeScript files in VS Code.
- _[cds-dk@9.2.1]_ `cds add mta` does no longer adds services in `mta.yaml` for plugins coming from `devDependencies`.
- _[vscode-cds@9.2.1]_ _Using_ paths which end with a folder name were not resolved correctly
- _[vscode-cds@9.2.1]_ Formatter support for `==` operator
- _[cds-compiler@6.3.0]_ compiler: Redirecting associations to non-query entities was fixed.
- _[cds-compiler@6.3.0]_ to.sql/to.edm(x): References to associations can now be compared to other associations and structures.
- _[cds-compiler@6.3.0]_ to.sql: Referencing a foreign key of an `@cds.persistence.skip` entity previously caused an
  error in queries. Now the foreign key in the source entity is resolved and rendered.
- _[cds@9.3.0]_ Errors when reading complementary drafts
- _[cds@9.3.0]_ Apply configurations in case `cds.env` was loaded before `cds.log` is initialized.
- _[cds@9.3.0]_ `req.diff` resolves correctly deleted nested composition by deep update
- _[cds@9.3.0]_ `cds-deploy` did not terminate correctly even though deployment was successful
- _[cds@9.3.0]_ Requests to an unimplemented unbound action/ function are rejected
- _[cds@9.3.0]_ Custom app-service implementations configured through `cds.requires.app-service.impl` is now correctly resolved (again)
- _[cds@9.3.0]_ Validation of UUID format for navigation by key
- _[cds@9.2.1]_ Check whether token validation was configured
- _[cds@9.2.1]_ `UPDATE(Foo).with`foo=${'bar'}` erroneously constructed the equivalent of `UPDATE(Foo).with`foo=bar` instead of `UPDATE(Foo).with`foo='bar'`
- _[cds@9.2.1]_ Errors in emits for file-based messaging are thrown
- _[cds@9.2.1]_ Queue: Ensure `method`, `path`, `entity` and `params` are correctly taken over when creating tasks
- _[cds@9.2.1]_ Reject navigations in `$expand` without parsing the navigation path

### Removed {#aug-25-removed}

- _[cds-compiler@6.3.0]_ for.odata/to.edm(x): The `addAnnotationAddressViaNavigationPath` option has been removed. Its functionality is included in the `draftMessages` option.
- _[cds@9.3.0]_ Internal property `cds.services._pending` was removed => use `cds.services` instead.
- _[cds@9.3.0]_ Internal property `srv._is_dark` was removed => use `!srv.endpoints?.length` instead.
- _[cds@9.3.0]_ Internal method `cds.env.requires._resolved` was removed => use `cds.requires` instead.
- _[ux-cds-odata-language-server-extension@1.18.6]_ Removed code completion suggestions with the deprecated `$value` syntax

## July 2025

### Added {#july-25-added}

- _[cds-dk@9.1.1]_ shipping an `index.d.ts` file containing a subset of the dk types now.
- _[cds-dk@9.1.0]_ `cds add test` to generate test files for CDS services [experimental]
- _[cds-dk@9.1.0]_ `cds debug --no-devtools` allows to skip opening the developer tools.
- _[vscode-cds@9.2.0]_ goto implementation for NodeJS services, entities, events, actions and functions, services and entities for Java
- _[vscode-cds@9.1.3]_ Formatting options `whitespaceBeforeColonInParamList` and `whitespaceAfterColonInParamList` to control whitespace around colons in parameter lists
- _[vscode-cds@9.1.0]_ Performance/Responsiveness:
  - Reduce _"lagging red underline"_ while typing - configurable via user setting `cds.workspace.fastDiagnosticsMode`
  - Outdated compilations in background are aborted fast. This increases responsiveness and reduces CPU usage and is especially useful for large projects with many files.
- _[vscode-cds@9.1.0]_ Formatter: New option `argsInNewLine` to put multiple arguments to e.g. function calls on a new line
- _[vscode-cds@9.1.0]_ Outline/Workspace Symbols: use distinct icons for `Association` and `Composition` elements
- _[cds-compiler@6.2.0]_ parser: CDL-casts in queries now support all type expressions, e.g. `field : many String not null`.
- _[cds-compiler@6.2.0]_ compiler: Association paths in annotation expressions can now end with a filter, e.g. `@anno: (assoc[1=1])`.
- _[cds.java@4.2.0]_ Added support for the `$apply` queries in Remote OData.
- _[cds.java@4.2.0]_ Added support for filter restriction annotations `@Capabilities.FilterRestrictions.Filterable`, `@Capabilities.FilterRestrictions.RequiresFilter`, `@Capabilities.FilterRestrictions.RequiredProperties` and `@Capabilities.FilterRestrictions.NonFilterableProperties` by setting `cds.query.restrictions.enabled` to `true`.
- _[cds.java@4.2.0]_ Added support for expand restriction annotations `@Capabilities.ExpandRestrictions.MaxLevels`, `@Capabilities.ExpandRestrictions.Expandable` and `@Capabilities.ExpandRestrictions.NonExpandableProperties` by setting `cds.query.restrictions.enabled` to `true`.
- _[cds.java@4.2.0]_ Change-tracked root entities will now respect `@cascade: { delete }` on the `changes` association and no longer write changelogs in case the entity is deleted. All changelogs of that entity are removed together with the entity.
- _[cds.java@4.2.0]_ The token issuer (e.g. the subscriber IAS tenant host) is now propagated for outboxed events by default.
- _[cds.java@4.2.0]_ Validation annotations `@mandatory`, `@disabled`, `@assert.range` and `@assert.format` now support custom messages, by defining the annotation `<anno>.message` with an error text or message bundle key.
- _[cds.java@4.2.0]_ The `DraftService.run` methods now delegate to their respective counter-parts for draft patch and cancel, when statements explicitly target inactive entities.
- _[cds.java@4.2.0]_ The `Result.single()` method now throws a ServiceException with http status code 404, if no entity is available and `cds.errors.preferServiceException` is set to `true`.
- _[cds.java@4.2.0]_ OData V4 adapter now supports ETags for Remote OData entities where ETag element is not known. Such entities must be annotated with the annotation `@odata.etag` on the entity level. The ETag value is stored in the metadata container and provided as plain ETag predicate.
- _[cds.java@4.1.0]_ Event handlers can now return objects of arbitrary types. They are put into the EventContext as `result` and set the context as completed.
- _[cds.java@4.1.0]_ Event handler methods can now use arguments of type `StructuredType` and its entity-specific subclasses in their signature. The given (typed) reference is the one of the event's CQN.
- _[cds.java@4.1.0]_ Event handler methods can now use arguments of type `Service` and its subclasses in their signature. The provided service is the one the event is emitted on.
- _[cds.java@4.1.0]_ Actions and functions in OData V4 now support returning media streams.
- _[cds.java@4.1.0]_ Remote OData supports reading and writing streamed properties.
- _[cds.java@4.1.0]_ Feature `cds-feature-change-tracking` creates correct change links for statements targeting items of compositions when these statements contain path from the root given that this path references keys.
- _[cds.java@4.1.0]_ Introduced a new setting `cqnServiceGetters` for the `generate` goal of the CDS Maven Plugin. When enabled the method `getService()` in generated `EventContext` interfaces is overridden to return the typed service interface.
- _[cds4j@4.2.0]_ Introduced `Optional<CdsParameter> returns()` for `CdsOperation` in reflection API reflecting `returns` parameter of actions and functions.
- _[cds4j@4.2.0]_ Support Fiori Tree Table (recursive hierarchy) requests on PostgreSQL (beta).
- _[cds4j@4.2.0]_ Introduced a new result supertype `CdsResult<T>` that can be typed with the entity row type.
- _[cds4j@4.2.0]_ Introduced a new `StructuredType` sub-interface which can link query builder interfaces with accessor interfaces.
- _[cds4j@4.2.0]_ Option to disable runtime cascade delete via Delete statement hint `cascade.delete: false`.
- _[cds4j@3.10.3]_ Support query hint `cds.sql.runtimeView.mode` to override the runtime view mode for a select statement.
- _[cds@9.2.0]_ `srv.schedule` allows to specify the time in a more readable way, e.g. `srv.schedule(...).after('1min')`
- _[cds@9.2.0]_ Support for `jwt`/`xsuaa`-auth on XSA
- _[cds@9.2.0]_ Enable `@sap/xssec`'s caching mechanisms (requires `@sap/xssec^4.8`)
  - The signature cache can be configured via `cds.requires.auth.config`, which is passed to `@sap/xssec`'s authentication services
  - The token decode cache can be configured programmatically via `require('@sap/xssec').Token.enableDecodeCache(config?)` and deactivated via `require('@sap/xssec').Token.decodeCache = false`
- _[cds@9.2.0]_ `cds.requires` correctly resolve service credentials on Kyma when its merged env configuration is only `true` and the service is found via its property name.
- _[cds@9.2.0]_ `ias`-auth: Support for fallback XSUAA-based authentication meant to ease migration to IAS
  - The fallback is automatically enabled if XSUAA credentials are available. To enable the credentials look-up, simply add `cds.requires.xsuaa = true` to your env.
  - In case you need a custom config for the fallback (passed through to `@sap/xssec` as is!), configure it via `cds.requires.xsuaa = { config: { ... } }`
- _[cds@9.2.0]_ Better error message if `cds.xt.Extensions` table is missing in extensibility scenarios.

### Changed {#july-25-changed}

- _[cds-dk@9.1.1]_ `cds add http` now generates auth headers with `:` separators again, as this is the only separator supporting empty passwords with the RestClient extension in VS Code. (For use with IntelliJ, separate username and password with a blank.)
- _[cds-dk@9.1.0]_ `cds add helm` doesn't route the subscription callbacks through the app router any longer.
- _[cds-dk@9.1.0]_ `cds lint` now uses local copy of `eslint` help content.
- _[cds-dk@9.1.0]_ `cds add cloud-logging` will correctly add the Helm dependency to `Chart.yaml`.
- _[vscode-cds@9.1.1]_ Maximum log-file size can now be increased to at most 1 GB (default limit unchanged at 10 MB)
- _[vscode-cds@9.1.0]_ Minimum VSCode version is now 1.99.0
- _[vscode-cds@9.1.0]_ Formatter: Chained method-like function calls are now broken into separate lines
- _[cds-compiler@6.2.0]_ compiler: Annotation `@extension.code` is no longer propagated.
- _[cds-compiler@6.2.0]_ Update OData vocabularies: Common
- _[cds-compiler@6.2.0]_ The list of CDL keywords was updated for the latest CDL grammar.
- _[cds-compiler@6.2.0]_ to.cdl: Foreign keys of managed associations are only rendered explicitly if
  the compiler can't infer them when recompiled.
- _[cds-compiler@6.2.0]_ cdsc: The command `parseCdl` was renamed to `parse`, since it also supports CSN input.
- _[cds.java@4.1.0]_ The SMS dependencies endpoint triggered during subscription now supports the hybrid mode with SaaS Registry and XSUAA. In that case it only returns the own XSUAA binding as a dependency.
- _[cds.java@3.10.3]_ The SMS dependencies endpoint triggered during subscription now supports the hybrid mode with SaaS Registry and XSUAA. In that case it only returns the own XSUAA binding as a dependency.
- _[cds4j@4.2.0]_ Constant temporal literals are now rendered as constants in SQL instead of as parameters.
- _[cds4j@4.2.0]_ Select statements that only have virtual elements on the select list don't throw a `select * not expected` error anymore.
- _[cds4j@4.1.1]_ Runtime Views: Only generate CTEs for association targets if required for join.
- _[cds4j@3.10.3]_ Aligned runtime view mode annotation name with config property.
- _[cds@9.2.0]_ Upgrade to Peggy 5 version
- _[cds@9.2.0]_ Enabled conversion of `not exists where not` to OData `all`, integrating the inverse of the policy applied by the OData parser.
- _[cds@9.2.0]_ Numeric values in `.csv` files are now returned as numbers instead of strings, e.g. `1` instead of `'1'`;
  when pre-padded with zeros, e.g., `0123`, they are returned as strings, e.g. `'0123'` instead of `123`.
- _[cds-mtxs@3.2.0]_ The `metadata` field in t0's tenants table supports more than 5000 characters.
- _[cds-mtxs@3.2.0]_ Improved resilience for subscriptions after incomplete unsubscriptions.
- _[cds-mtxs@2.7.5]_ The `metadata` field in t0's tenants table supports more than 5000 characters.
- _[ux-cds-odata-language-server-extension@1.18.2]_ Updated to support latest changes in OData annotation vocabularies

### Fixed {#july-25-fixed}

- _[cds-dk@9.1.3]_ Fix installation issues with version 9.1.2.
- _[cds-dk@9.1.2]_ CVE-2025-7783: vulnerability with `form-data` versions <4.0.4.
- _[cds-dk@9.1.2]_ `cds build --for hana` no longer excludes external entities when not in mocking mode.
- _[cds-dk@9.1.1]_ `cds deploy --to hana --no-build` now works correctly
- _[cds-dk@9.1.1]_ fixed bug in call from SAP Business Application Studio wizard
- _[cds-dk@9.1.0]_ `cds add hana` for Java correctly adds the HANA dependencies to `chart/Chart.yaml`.
- _[cds-dk@9.1.0]_ `cds add xsuaa` for Java doesn't throw an error when the `.cdsrc.json` is not existing.
- _[cds-dk@9.1.0]_ `cds build --for fiori` stores EDMX files again relative if `dataSources.mainService.settings.localUri` in UI5's `manifest.json` is a relative path.
- _[cds-dk@9.1.0]_ `cds add ams/ias` add the `repository` in combination with `cds add helm-unified-runtime`.
- _[cds-dk@9.1.0]_ `cds add xsuaa` adds a wildcard prefix to the domain name to allow for multitenancy use cases.
- _[cds-dk@9.1.0]_ `cds add portal` for Java binds the HTML5 repo runtime and portal service to the Java server instead of the MTX sidecar, to allow for CAP Java built-in dependencies resolution.
- _[cds-dk@9.1.0]_ `cds repl --run` can now run again w/o `@cap-js/cds-test` installed.
- _[cds-dk@9.1.0]_ `cds push` and other commands now handle request errors more robustly
- _[cds-dk@9.1.0]_ `cds debug` now also honors the `--host` parameter when it starts `cds watch`.
- _[vscode-cds@9.1.3]_ Workspace symbols could have been incomplete due to a bug in the where-used index
- _[vscode-cds@9.1.1]_ Colons in type paths are no longer aligned with other colons, nor are they padded with spaces
- _[vscode-cds@9.1.0]_ Formatter:
  - Original empty lines are now correctly preserved before single-lined blocks
  - Separate alignment of annotations before resp. within projection-like entities
- _[cds-compiler@6.2.2]_ compiler: `@extension.code` was accidentally restricted to non-expression values.
- _[cds-compiler@6.2.0]_ compiler:
  - Calculated elements can now have a localized type.
  - Associations in sub-queries of an `order by` of a `UNION` are now redirected.
- _[cds-compiler@5.9.8]_ compiler: Calculated elements can now have a localized type
- _[cds.java@4.2.0]_ Fixed a bug causing message targets in OData V4's `sap-messages` header to miss the `$Parameter/` prefix when referring to action or function parameters.
- _[cds.java@4.2.0]_ Fixed ClassCastException in DraftScenarioAnalyzer on pass-through search.
- _[cds.java@4.2.0]_ Fixed a bug in the goal `cds` of the `cds-maven-plugin` that caused this goal to fail, if the version output of `cds version` contains an `undefined`.
- _[cds.java@4.2.0]_ Fixed a bug that can cause connection leaks in remote OData batch requests.
- _[cds.java@4.2.0]_ Fixed a bug causing `*` not to be recognized as "all-active" in a user's feature list.
- _[cds.java@4.2.0]_ Fixed a bug causing typescript-based UI5 webapp links to miss on the index page.
- _[cds.java@4.2.0]_ Fixed a bug in `cds-feature-change-tracking` causing duplicate changelog entries for association elements that are also keys.
- _[cds.java@4.2.0]_ Fixed a bug, causing authorization predicate to appear in all `where` clauses of `Select` statements using `Select` statements in their `from` clauses.
- _[cds.java@4.1.1]_ Update CDS4j to 4.1.1 with performance improvements for TreeTable on H2.
- _[cds.java@4.1.0]_ Fixed a bug, causing UnauthorizedRequestEvent not to be logged with the AuditLogService.
- _[cds.java@4.1.0]_ Fixed a bug, causing exceptions to be thrown in case errors were written to `Messages` in an `@After` handler.
- _[cds.java@4.1.0]_ Fixed a bug, causing `Select` queries extended with conditions generated from `@restrict` annotations to be always false for drafts.
- _[cds.java@4.1.0]_ Fixed a bug, causing the ETag header to miss on OData V4 responses, when targeting entity properties.
- _[cds.java@4.1.0]_ Fixed a bug, causing a huge number of Service Manager calls, when it returned with a rate limit error code.
- _[cds.java@3.10.3]_ Fixed a bug, causing exceptions to be thrown in case errors were written to `Messages` in an `@After` handler.
- _[cds.java@3.10.3]_ Fixed a bug, causing `Select` queries extended with conditions generated from `@restrict` annotations to be always false for drafts.
- _[cds.java@3.10.3]_ Fixed ClassCastException in DraftScenarioAnalyzer on pass-through search.
- _[cds4j@4.2.0]_ Fixed upserts on projections w/ (forward-mapped) assocication paths
- _[cds4j@4.2.0]_ Fixed a bug, enforcing UUID normalization on UUID keys with OData Type `Edm.String` in deep updates.
- _[cds4j@4.2.0]_ Fixed unsupported method ProxyList.removeIf
- _[cds4j@4.2.0]_ Fixed a bug in `CdsJsonConverter` causing an exception when parsing a JSON object with a Map type field.
- _[cds4j@4.2.0]_ Fixed a bug causing exceptions in the methods `keys()` and `keyValues()` of the interface `Path` when underlying data use immutable maps.
- _[cds4j@3.10.3]_ Gracefully handle forward mapped associations with unsupported on condition on the select list instead of throwing UnsupportedOperationException
- _[cds@9.2.0]_ Runtime error in transaction handling in messaging services when used with outbox
- _[cds@9.2.0]_ Always use `cds.context` middleware for `enterprise-messaging` endpoints
- _[cds@9.2.0]_ Crash during Location header generation caused by custom response not matching the entity definition.
- _[cds@9.2.0]_ Support for logging of correct error locations with `cds watch` and `cds run`.
- _[cds@9.2.0]_ Double-unescaping of values in double quotes during OData URL parsing
- _[cds@9.2.0]_ Throw explicit error if the result of a media data query is not an instance of `Readable`, rather than responding with `No Content`
- _[cds@9.2.0]_ When loading `.csv` files quoted strings containing the separator (comma or semicolon) where erroneously
  parsed as two separate values instead of one.
- _[cds@8.9.6]_ Batch insert using `INSERT.entries()` on draft enabled entities
- _[cds@8.9.5]_ `req.diff` in case of draft entities using associations to joins/unions
- _[cds@8.9.5]_ Locale detection does not enforce `<http-req>.query` to be present. Some protocol adapters do not set it.
- _[cds@8.9.5]_ View metadata for requests with $apply
- _[cds@8.9.5]_ Handling of bad timestamps in URL ($filter and temporals)
- _[cds-mtxs@3.2.0]_ `cds.requires.html5-host` and `cds.requires.html5-runtime` can be used as shortcuts to define SaaS dependencies with `cds-mtxs` version 3 again (using CAP plugin technique).
- _[cds-mtxs@3.2.0]_ Job configuration is merged if specified both in `cds.requires.multitenancy` and `cds.requires['cds.xt.SaasProvisioningService']` or `cds.requires['cds.xt.SmsProvisioningService']`.
- _[cds-mtxs@2.7.5]_ Initialization of `t0` tenant using `cds-mtx-migrate --init-tenant-list` now uses the database_id of any existing tenant.
- _[ux-cds-odata-language-server-extension@1.18.2]_ False positive diagnostic for enum references in annotation expressions.
- _[ux-cds-odata-language-server-extension@1.18.2]_ False positive diagnostic for a single path in expression

## June 2025

### Added {#june-25-added}

- _[cds-compiler@6.1.0]_ for.odata:
  - Introduce a new option `addAnnotationAddressViaNavigationPath` to annotate services
    containing draft-enabled entities with `@Common.AddressViaNavigationPath`.
  - Introduce a new option `draftMessages` that enhances the draft generation logic.
- _[cds.java@4.0.0]_ Introduced a new setting `betterNames` for the `generate` goal of the CDS Maven Plugin. This enables technical
  conversions to better support CDS models with names with characters invalid for Java identifiers or clashing with Java
  keywords.
- _[cds4j@4.1.0]_ Generated `EventContext` interfaces now provide an overriden `getService()` method which returns the generated service interface or `CqnService`.
- _[cds4j@4.1.0]_ Support query hint `cds.sql.runtimeView.mode` to override the runtime view mode for a select statement.
- _[cds4j@4.1.0]_ Support Fiori Tree Table (recursive hierarchy) requests on H2 (beta).
- _[cds4j@4.0.0]_ Value.length() to determine the length of a String value
- _[cds4j@4.0.0]_ Added new switch `betterNames` to the code generator configuration to introduce the following conversions:
  - the names from CDS entities that match Java keywords are suffixed with `_`.
  - the characters `/` and `$` are treated as `_` during conversion to camel case or screaming case.
  - the leading `_` in elements remains in the resulting names.
  - the characters that are not valid for Java identifiers are replaced with `_` in the resulting name.
- _[cds4j@4.0.0]_ Added the public API `CdsJsonConverter` (beta) to convert JSON to `CdsData` and vice versa.
- _[cds4j@4.0.0]_ Added support for calculated elements (`null as LimitedDescendantCount : Int16`, etc.) in hierarchical views (projected entities only).
- _[cds4j@4.0.0]_ Added support for match predicates `anyMatch`/`allMatch` in filters of recursive Hierarchies.
- _[cds@9.1.0]_ CDS config schema validations for `cds.requires.auth.tenants`, `cds.cdsc`, `cds.query`, `cds.log`, `cds.server`
- _[cds@9.1.0]_ Queue option `targetPrefix` to prefix `target` value of `cds.outbox.Messages` entries for microservice isolation
- _[cds@9.1.0]_ Basic support for CRUD for hierarchy entities

### Changed {#june-25-changed}

- _[cds-dk@9.0.6]_ `cds build` now adds an `engines.node = ">=20"` entry to the effective _package.json_ iff it is missing from the project's _package.json_ to avoid engine confusion when deploying to Cloud Foundry
- _[cds-dk@9.0.6]_ `cds add` without any flag now shows the help (`cds add --help`) instead of throwing an error
- _[cds-dk@9.0.5]_ `cds init` uses latest Maven Java archetype version 4.0.2 for creating Java projects.
- _[vscode-cds@9.0.2]_ Telemetry now requires the user to install `SAP Business Application Studio Toolkit` extension
- _[cds-compiler@6.1.0]_ Update OData vocabularies: Capabilities, Common
- _[cds-compiler@6.0.12]_ Update OData vocabularies: 'Common', 'Hierarchy'
- _[cds.java@4.0.0]_ Runtime views are now by default rendered via CTEs pushing the projection into the SQL. Set `cds.sql.runtimeView.mode: resolve` to use the previous mode, which resolved projections explicitly by transforming CQN statements.
- _[cds.java@4.0.0]_ Renamed `cds.multiTenancy.subscriptionManager.clientCertificateHeader` to `cds.security.authentication.clientCertificateHeader`.
- _[cds.java@4.0.0]_ Renamed `cds.multiTenancy.security.internalUserAccess.enabled` to `cds.security.authentication.internalUserAccess.enabled`.
- _[cds.java@4.0.0]_ Security checks have been hardened by enabling the following properties by default: `cds.security.authorization.deep.enabled`, `cds.security.authorization.instanceBased.rejectSelectedUnauthorizedEntity.enabled` and `cds.security.authorization.instanceBased.checkInputData.enabled`.
- _[cds.java@4.0.0]_ Translations for error messages for built-in input validation annotations are now enabled by default. You can disable these translations by setting `cds.errors.defaultTranslations.enabled` to `false`.
- _[cds.java@4.0.0]_ Subscription hooks in `com.sap.cds.feature.mt.lib.subscription.exits` from former MT library have been deprecated. Use event handler for `DeploymentService` instead.
- _[cds4j@4.1.0]_ Improved SQL for nested runtime views in CTE mode and calculated elements on read.
- _[cds4j@4.0.0]_ Runtime views are now by default rendered via CTEs. Set `cds.sql.runtimeView.mode: resolve` to use the resolve mode.
- _[cds4j@4.0.0]_ StructDataParser now rejects non-array nodes as value for to-many associations.
- _[cds4j@4.0.0]_ With cds-compiler 6 (cds 9) `$now` in projections is replaced by the value of the session variable `now`.
- _[cds4j@4.0.0]_ Removed deprecated function Xpr.length(), use Xpr.size() instead.
- _[cds4j@4.0.0]_ Removed deprecated configuration parameters `sharedInterfaces` and `uniqueEventContexts` from code generator.
- _[cds4j@4.0.0]_ Removed deprecated `Modifier.selectListValue(Value<?>)`, use `selectListValue(SelectableValue)` instead.
- _[cds4j@4.0.0]_ Removed deprecated `CqnSearchPredicate`, use CqnSearchTermPredicate instead.
- _[cds4j@4.0.0]_ Removed deprecated `SelectableValue::withoutAlias()`.
- _[cds4j@4.0.0]_ Removed deprecated `Modifier::search(String term)`, use `Modifier::searchTerm(CqnSearchTermPredicate)` instead.
- _[cds@9.1.0]_ Reduced the amount of SELECT nesting the OData adapter does for `$apply` queries.
- _[cds@9.1.0]_ Better error messages for unresolved parent associations in hierarchy requests
- _[cds@9.1.0]_ Enabled updated behavior of `draftActivate` to move updates to fields of draft enabled entities with type `cds.LargeBinary` from draft to active table on the database level, with feature flag `cds.env.fiori.move_media_data_in_db`.
- _[cds-mtxs@3.1.0]_ `cds.requires.multitenancy.jobs.clusterSize` is set to 3 by default.
- _[cds-mtxs@3.1.0]_ `cds.requires.multitenancy.jobs.workerSize` is set to 4 by default.

### Fixed {#june-25-fixed}

- _[cds-dk@9.0.5]_ `cds build` for extensions now filters built-in entities such as `cds.outbox.Messages` to fix the extension upload with `cds push`.
- _[cds-dk@9.0.5]_ `cds add data` now correctly works for nested structured properties.
- _[cds-dk@9.0.5]_ `cds add data/http` no longer create decimal numbers with too many precision places
- _[cds-dk@8.9.5]_ Bump `tar-fs` to address CVE-2024-12905.
- _[cds-dk@8.9.5]_ `cds add data` now correctly works for nested structured properties.
- _[cds-dk@8.9.5]_ Help text of `cds debug`.
- _[cds-compiler@6.1.0]_ compiler: The ternary condition operator `…?…:…` is now right-associative as usual
  (in v5, chaining it like in `…?…:…?…:…` was not possible without parentheses).
- _[cds-compiler@6.0.14]_ to.sql: Fix error when calculated element refers to a localized element.
- _[cds-compiler@6.0.14]_ to.edm(x): Correctly handle `PropertyPath` in a collection when using expressions as annotation values
- _[cds-compiler@6.0.12]_ compiler: Fix artifact refs in annotated annotation expressions,
  i.e. the `Type` inside `annotate … with @SomeAnno: (cast( … as Type ))`.
- _[cds-compiler@6.0.12]_ to.sql: Checks around managed associations for mocked entities have been relaxed.
- _[cds-compiler@6.0.12]_ to.edm(x): Resolved a crash caused by references in annotation expressions that were not properly updated.
- _[cds-compiler@5.9.6]_ to.sql: Fix error when calculated element refers to a localized element.
- _[cds-compiler@5.9.6]_ to.edm(x):
  - Fix errors for service entities containing multiple path steps (e.g. `Service.Prefix.MyEntity`).
  - Support enum references in annotation expressions that were resolved by the compiler.
- _[cds.java@4.0.1]_ Native HANA associations are no longer explicitly disabled in new projects, as this is the default behaviour in cds9
- _[cds.java@4.0.1]_ Fixed a bug, causing the sample UI to trigger unsupported requests
- _[cds.java@4.0.1]_ Fixed a bug, causing `draftActivate` to return error targets with `IsActiveEntity=true`, if there is exactly one error message.
- _[cds.java@4.0.0]_ Fixed a bug in `cds-feature-flow`, causing exceptions when updating the status of a draft-enabled entity.
- _[cds.java@4.0.0]_ Fixed a bug, causing `draftActivate` to return error targets with `IsActiveEntity=true`.
- _[cds.java@4.0.0]_ Fixed an NPE in `cds-adapter-odata-v2` when media entity element is null.
- _[cds.java@4.0.0]_ Fixed a bug causing concurrent modification issues with `ModifiableUserInfo` or `ModifiableParameterInfo` during parallel read access.
- _[cds.java@3.10.2]_ Fixed a bug causing concurrent modification issues with `ModifiableUserInfo` or `ModifiableParameterInfo` during parallel read access.
- _[cds4j@4.1.0]_ Fixed a bug, causing missing updates to `null` when writing to paths in a (runtime) view.
- _[cds4j@4.1.0]_ Fixed rendering of non-refs on the select list of subqueries.
- _[cds4j@4.1.0]_ Gracefully handle forward mapped associations with unsupported on condition on the select list instead of throwing UnsupportedOperationException.
- _[cds4j@4.1.0]_ Fixed a bug in the code generator, causing compilation error if a service is empty and doesn't contain any operations or entities.
- _[cds4j@4.0.1]_ Fixed search on entities using elements of `@cds.external` entities as `@Common.Text`
- _[cds4j@4.0.1]_ Ignore to-one expands to virtual entities in Runtime View CTE mode.
- _[cds4j@3.10.2]_ Fixed UnsupportedOperationException on `CqnAnalyzer.analyze(statement).targetKeys()` where no keys can be extracted
  due to the complexity of the statement.
- _[cds4j@3.10.2]_ The exceptions that occur within methods of accessor interface proxies, for example `forEach`, are no longer wrapped
  in `InvocationTargetException`, but thrown directly.
- _[cds4j@3.10.2]_ StructDataParser now rejects non-array nodes as value for to-many associations.
- _[cds4j@3.10.2]_ SQLite: Fixed an issue where setting a new session variable inside a transaction unintentionally cleared other
  session variables.
- _[cds4j@3.10.2]_ Don't ignore expands to `@cds.external` entities to support remote service mocks
- _[cds4j@3.10.2]_ Fixed NPE in `FromClauseBuilder` on accessing on-condition of association
- _[cds4j@3.10.2]_ Fixed search on entities using elements of `@cds.external` entities as `@Common.Text`
- _[cds4j@3.10.2]_ Ignore to-one expands to virtual entities in Runtime View CTE mode
- _[cds@9.1.0]_ Copies of `cds.context` with `locale`
- _[cds@9.1.0]_ Support for relative paths in `@odata.bind`
- _[cds@9.1.0]_ `cds build` on Windows OS - fixed cli tar usage for resources.tgz
- _[cds@9.1.0]_ Actions and functions with scalar return types use same `@odata.context` calculation as other return types, fixing e.g. `cds.odata.contextAbsoluteUrl` not being respected
- _[cds@9.1.0]_ Improve content-type and content-length handling in OData adapter
- _[cds@9.1.0]_ Parsing incorrect function parameters
- _[cds@9.1.0]_ `cds deploy --dry` no longer tries to load a DB adapter, so that it works w/o one installed.
- _[cds@9.1.0]_ Fix `@mandatory` for actions and functions
- _[cds@9.0.4]_ In some cases, the app crashed if an element was named like a reserved CSN key.
- _[cds@9.0.4]_ Locale detection does not enforce `<http-req>.query` to be present. Some protocol adapters do not set it.
- _[cds@9.0.4]_ `between` operator for remote OData requests
- _[cds@9.0.4]_ `cds serve/watch` and `cds.test()` no longer try to connect to an SQLite database if none is configured.
- _[cds@9.0.4]_ `cds.connect.to` for required queueable services if no persistence is configured
- _[cds@9.0.4]_ Persistent queue is not enabled if no persistence is configured
- _[cds@9.0.3]_ Handling of bad timestamps in URL ($filter and temporals)
- _[cds@9.0.3]_ View metadata for requests with $apply
- _[cds@9.0.3]_ Server crash for some URLs
- _[cds-mtxs@3.1.0]_ Properly catching errors in the `t0` cleanup intervals.
- _[cds-mtxs@3.1.0]_ eTag determination for `ModelProviderService.getCsn()` only evaluates active extensions now if not
  explicitly requested differently.
- _[cds-mtxs@2.7.4]_ Extension of aspects is now possible. It needs to be enabled using

  ```jsonc
  "requires": {
    "extensibility": {
      "enable-aspect-extension": true
    }
  }
  ```

  in the root project configuration.
- _[cds-mtxs@2.7.3]_ More reliable detection of forbidden annotations in entity extensions
- _[cds-mtxs@2.7.3]_ Event 'activated' now only available as internal event to avoid deadlocks.

### Removed {#june-25-removed}

- _[cds.java@4.0.0]_ Removed deprecated property `cds.security.authorization.emptyAttributeValuesAreRestricted`. Empty attributes are always considered restricted by default and explicit `is null` conditions must be used to treat empty attributes as unrestricted.
- _[cds.java@4.0.0]_ Removed deprecated property `cds.odataV4.serializer.buffered`. OData V4 responses are now always streamed while serialized.
- _[cds.java@4.0.0]_ Removed deprecated property `cds.messaging.services.<key>.structured` and deprecated plain String-based methods in `MessagingService` and `TopicMessageEventContext`. Messages are now structured by default and always represented as separated data and header maps.
- _[cds.java@4.0.0]_ Removed deprecated custom K8s service binding handling via properties `cds.environment.k8s`.
- _[cds.java@4.0.0]_ Removed deprecated classes `ClientCredentialJwtAccess`, `ClientCredentialsJwtReader` and `XsuaaParams`.
- _[cds.java@4.0.0]_ Removed the resource bundle template `cds-messages-template.properties` in the `cds-services-utils` jar.

## May 2025

### Added {#may-25-added}

- _[cds-dk@9.0.1]_ `cds debug --force` automatically enables SSH for Cloud Foundry application instances.
- _[cds-dk@9.0.1]_ Faster table deployments on SAP HANA using HDI param `com.sap.hana.di.table/try_fast_table_migration=true` in `cds build --for hana`, `cds deploy --to hana`, `cds add hana`.
- _[eslint-plugin-cds@4.0.2]_ Add new rule sets for JS `js.all` and `js.recommended` to detect bad practice in service implementations.
- _[eslint-plugin-cds@4.0.2]_ Add rule `no-shared-handler-variables` to detect when state is shared between handlers.
- _[eslint-plugin-cds@4.0.2]_ Add rule `use-cql-select-template-strings` to mitigate potential for SQL injections.
- _[eslint-plugin-cds@4.0.2]_ Add rule `no-cross-service-import` to detect when typer artifacts are imported in an unrelated service.
- _[eslint-plugin-cds@4.0.2]_ Add rule `no-deep-sap-cds-import` to forbid importing from below the facade of `@sap/cds`.
- _[vscode-cds@9.0.1]_ Support for telemetry - See `README.md` for details
- _[cds-compiler@6.0.8]_ for.odata/to.edm(x):
  - Annotating the generated `DraftAdministrativeData` artifacts and their elements is now supported.
- _[cds.java@3.10.0]_ Support functions `round`, `floor`, `ceiling`, `length`, `indexof`, and `trim` in OData V4.
- _[cds.java@3.10.0]_ Added expression validations with `@assert.constraint`.
- _[cds.java@3.10.0]_ Added support for `@mandatory` with expressions.
- _[cds.java@3.10.0]_ Added support for `@readonly` with expressions.
- _[cds.java@3.10.0]_ Added support for Service Manager v2 API. Usage is disabled by default, but can be enabled with CDS property `cds.multiTenancy.serviceManager.v2.enabled: true`.
- _[cds.java@3.10.0]_ The goal `add` of the `cds-maven-plugin` for feature AMS adds support for local testing of AMS policies to a CAP Java project.
- _[cds.java@3.10.0]_ Authorizations now support conditions with paths involving associations in `@restrict` predicates for modifying statements.
- _[cds.java@3.10.0]_ `@readonly` (and it's `@Common.FieldControl` variants) and `@Core.Computed` can now be evaluated already on draft instances by setting `cds.drafts.enforceReadonly` to `true`. During activation they are therefore no longer evaluated. With this change values that are computed on server-side in draft mode will be retained during activation.
- _[cds4j@3.10.0]_ Support `Result:rowType` for insert, upsert and update results
- _[cds4j@3.10.0]_ Added numeric rounding functions `round`, `floor` and `ceiling` on `Value` and on `CQL`
- _[cds4j@3.10.0]_ Function `average` is synonym for `avg`
- _[cds4j@3.10.0]_ Type propagation for the `avg`|`average` function
- _[cds4j@3.10.0]_ Added String functions `length`, `indexOf` and `trim`
- _[cds4j@3.10.0]_ Support expanding unmanaged associations in hierarchies
- _[cds4j@3.10.0]_ Support expanding reverse-mapped associations on subqueries and hierarchies
- _[cds4j@3.10.0]_ Support associations/compositions to entities with aliased keys
- _[cds@9.0.0]_ CAP-native task queues (beta; replacing generic outbox -- see section Changed for additional details)
  - Events and requests to a "queued service" are written to the database in the current transaction (with default kind `persistent-queue`) and processed as asynchronous tasks
    - Programmatically queue or unqueue any service via `cds.queued(srv)`/ `cds.unqueued(srv)`
    - Statically queue instances of `cds.MessagingService` or `AuditLogService` via config `cds.requires.<srv>.queued = true`
    - Disable the persistent task queue via `cds.requires.queue = false`
  - Tasks are processed in dedicated transactions (except on SQLite, where there are no concurrent transactions)
  - Tasks are retried until processed successfully or the max. retry count is reached, i.e., adding resiliency to the respective service
    - Tasks that cause unrecoverable or programming errors will remain in the database table but will not be retried
  - Experimental task scheduling API `<srv>.schedule()` as variant of `<srv>.send()` with fluent API options `.after(<ms>)` and `.every(<ms>)`
  - Experimental task callback API `<srv>.after('<event>/#succeeded', (results, req))`/ `<srv>.after('<event>/#failed', (error, req))`
  - Experimental task trigger API `<srv>.flush()`
  - Experimental application-level task status management to avoid long-lasting database locks
    - Enable via `cds.requires.queue.legacyLocking = false`
    - Caution: Application-level task status management only works if all active app deployments are on cds^9!
- _[cds@9.0.0]_ Inbox: Inbound messages can be accepted as asynchronous tasks via config `cds.requires.messaging.inboxed = true`
- _[cds@9.0.0]_ Not null validations for actions and functions
- _[cds@9.0.0]_ `cds.auth`: Provide custom configuration to `@sap/xssec`-based authentication via `cds.requires.auth.config`
- _[cds@9.0.0]_ IAS: Token validation for requests to the app's "cert url" (with `.cert` segment in the domain)
- _[cds@9.0.0]_ Support refs with longer path expressions like `ref: ['root', 'child', 'subchild', 'ID']` when resolving queries to the target entity
- _[cds@9.0.0]_ `PATCH` as synonym for `UPDATE` during event handler registration
- _[cds@9.0.0]_ `UPSERT` semantics for `PUT` requests can be deactivated via flag `cds.runtime.put_as_upsert=false`
- _[cds-mtxs@3.0.1]_ `cds-mtx upgrade t0` can be used to (re)initialize the `t0` tenant, e. g. in a cf hook to avoid concurrency issues.
- _[cds-mtxs@3.0.1]_ The `cds.xt.ExtensibilityService.activated` event now also sends the payload of the activation call. It also sends the tenant in the `x-tenant-id` header field now.

### Changed {#may-25-changed}

- _[cds-dk@9.0.4]_ `cds add typescript` adds a `tsx` dependency. It no longer adds a `watch` script pointing to `cds-tsx` because `cds watch` will run `tsx` automatically.
- _[cds-dk@9.0.3]_ `DEBUG=build cds build` does not log the CDS env any more.
- _[cds-dk@9.0.3]_ `cds init --java:mvn` does not prefix the `-D` to options any more to allow for options not starting with `-D`.
- _[cds-dk@9.0.3]_ `cds add html5-repo` for Helm does not add XSUAA configuration for IAS-only projects.
- _[cds-dk@9.0.3]_ `cds add html5-repo` for Helm has improved support for IAS.
- _[cds-dk@9.0.3]_ `cds watch` with `tsx` will no longer be print notifications to `console.log` without environment variable `DEBUG` set.
- _[cds-dk@9.0.3]_ `cds add html5-repo` will add missing `requires` for its `build-parameters` setting, even if ran with a preexisting `requires` key.
- _[cds-dk@9.0.3]_ `cds unknown-command valid-file.cds` now fails due to the unknown command instead of compiling the cds file.
- _[cds-dk@9.0.1]_ Change license from SAP DEVELOPER LICENSE AGREEMENT '3.1' to '3.2 CAP'. See <https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt>.
- _[cds-dk@9.0.1]_ The `CHANGELOG.md` file now only contains changes from 8.0.0 onwards.
- _[cds-dk@9.0.1]_ cds-dk now requires `@sap/cds` version 8.3.0 or higher. An error is raised for older versions.
- _[cds-dk@9.0.1]_ cds-dk now requires `@sap/cds-mtxs` version 2 or higher.
- _[cds-dk@9.0.1]_ `cds add multitenancy` and `cds add xsuaa` use the `production` profile by default.
- _[cds-dk@9.0.1]_ `cds add helm` uses a default for the Docker secret name (`docker-registry`), instead of asking for it in interactive mode.
- _[cds-dk@9.0.1]_ `cds add helm` uses the pre-configured domain name for your Kyma cluster as a default, instead of asking for it.
- _[cds-dk@9.0.1]_ `cds add workzone` uses the backend destination `srv-api` instead of `{{appName}}-srv-api` on Cloud Foundry.
- _[cds-dk@9.0.1]_ `cds add approuter` in combination with `xsuaa` adds a `redirect-uris` to `mta.yaml` for Cloud Foundry projects.
- _[cds-dk@9.0.1]_ `cds build --ws-pack` now recursively packs dependencies from workspaces. If the `workspaces` definition in the project root contains glob patterns with braces `{…}`, Node.js 22 or later will be required.
- _[cds-dk@9.0.1]_ `cds add xsuaa` adds a `redirect_urls` to the `mta.yaml` for Cloud Foundry projects.
- _[cds-dk@9.0.1]_ `cds deploy --to hana` throws an error if an unsupported option is passed.
- _[cds-dk@9.0.1]_ The Node version in `gen/db/package.json` file generated by `cds build` is now `>=18`, matching to what `@sap/hdi-deploy` specifies.
- _[cds-dk@9.0.1]_ `cds watch` only auto-resolves bindings if either `CDS_ENV` or `--profile` are set.
- _[cds-dk@9.0.1]_ `cds compile --help` no longer mentions the `hdbcds` format.
- _[cds-dk@9.0.1]_ `cds add pipeline` also creates UI5 resources if required.
- _[cds-dk@9.0.1]_ `cds add hana` does not add `native_hana_associations` configuration any more.
- _[cds-dk@9.0.1]_ `cds up` supports embedded multitenancy scenarios with no sidecar.
- _[cds-dk@9.0.1]_ `cds lint` requires projects to install `eslint` locally (or system-wide), as `cds-dk` will no longer include `eslint` internally.
- _[cds-dk@9.0.1]_ `cds add telemetry` adds limits the version of added `@opentelemetry` dependencies to `<0.200`.
- _[cds-dk@9.0.1]_ `cds add cf-manifest` uses a 1 GB disk quota instead of 512 MB for Java apps.
- _[cds-dk@8.9.4]_ `cds init` uses latest Maven Java archetype version 3.10.1 for creating Java projects.
- _[eslint-plugin-cds@4.0.2]_ Bumped peer dependency to `@sap/cds` to 9.
- _[vscode-cds@9.0.1]_ Change license from SAP DEVELOPER LICENSE AGREEMENT '3.1' to '3.2 CAP v2'
- _[vscode-cds@9.0.1]_ Where-used functionality now based on new index
- _[vscode-cds@9.0.1]_ Improved `cds json schema` retrieval
- _[vscode-cds@9.0.1]_ Refactored CLI call handling to cds and other tools
- _[vscode-cds@9.0.1]_ More compact formatting of `case` statements
- _[vscode-cds@9.0.1]_ Refactoring when renaming/deleting CDS files is now disabled by default. Corresponding user settings are `cds.refactoring.files.rename.enabled` and `cds.refactoring.files.delete.enabled`
- _[cds-compiler@6.0.8]_ License changed to "SAP DEVELOPER LICENSE AGREEMENT Version 3.2 CAP"
- _[cds-compiler@6.0.8]_ Node 20 is now the minimum required version.
- _[cds-compiler@6.0.8]_ Namespace `cds.core` is no longer reserved by the cds-compiler. It is used by the CAP runtimes.
- _[cds-compiler@6.0.8]_ compiler:
  - Providing a filter for a function call now is a syntax error (was a warning before).
    Example: `count(*)[ uncheckedFilterRef > 0 ]`.
  - Providing a default value for an array-like action or function parameter is a syntax error now
    (was a warning  before). Example: `action A( par: many Integer default 42 )`.
  - Providing an annotation for an array-like element in the middle of a type expression is no longer allowed
    (was a warning before), as this leads to unexpected results. Example: `bar: many String null @anno enum { symbol };`.
    Fix this by moving the annotation out of the type expression, e.g. before the element name.
  - A simple query inside parentheses (e.g. `entity V as (select from E)`) is no longer
    represented as `set` in CSN. Repeated `order by` or `limit` clauses are no longer allowed
    (e.g. `entity V as ( select from E order by id ) order by id;`).
  - Defining an element or parameter as `not null default now` now is an error.
  - A virtual element can be defined in a view without providing a value or reference.

    ```cds
    entity V as select from E { virtual a } //defines new virtual element 'a'
    ```

    In this example, the compiler no longer tries to resolve the name of the virtual element as reference
    to an element of the view's data source.
  - If a select item selects an element of a virtual structure that itself is not explicitly marked as virtual,
    then the select item must be explicitly marked as virtual, too.
  - To-many associations without ON-condition no longer get a `keys` property, i.e. `Association to many Foo;` does not get
    any foreign keys.
  - Annotation `@cds.persistence.journal` is now propagated to generated entities, including `.texts` entities.
  - Doc comments are no longer propagated; use option `propagateDocComments: true` to propagate them again.
  - With CSN input, the compiler does not accept anymore type properties
    like `enum` in the `cast` property for the SQL function `cast` which were simply
    ignored by the SQL backend.  Remark: inside a direct `cast` property for select
    columns (CDL-style `cast`), these type properties are still allowed.
- _[cds-compiler@6.0.8]_ to.sql/to.hdi:
  - Default for option `booleanEquality` is `true`, i.e. `!=` is rendered as `IS DISTINCT FROM`
    or a similar expression and therefore has boolean logic instead of three-valued logic.
  - To-many associations with neither an explicit foreign key list (i.e. without `keys`) nor an ON-condition
    are reported as errors.
  - For SAP HANA, CDS associations are by default no longer reflected in the respective database tables and views by
    native HANA Associations (HANA SQL clause `WITH ASSOCIATIONS`). They can be switched on via configuration
    `cds.sql.native_hana_associations: true`.
  - A set of OData and SAP HANA functions are translated to database-specific variants.
  - For SQL and HDI rendering, `$now` is no longer rendered as `CURRENT_TIMESTAMP`, but as
    a session variable `SESSION_CONTEXT('NOW')` for SAP HANA, `SESSION_CONTEXT('$now')`
    for SQLite, `@now` for H2, and `current_setting('cap.now')::timestamp` for Postgres.
    For `default` values, `CURRENT_TIMESTAMP` is kept, as `default` clauses only allow static expressions.
    To restore the old behavior, use option `dollarNowAsTimestamp: true`.
  - `count(*)` inside nested projections is rejected, as there is no proper representation in SQL
- _[cds-compiler@6.0.8]_ to.cdl:
  - Nested definition rendering is now the default, i.e. definitions inside services are
    rendered in `service { … }`, instead of being rendered top-level using their absolute name.
  - `to.cdl` no longer returns an entry `namespace`, only `model`.
- _[cds-compiler@6.0.8]_ for.odata/to.edm(x):
  - References to foreign keys in annotation expressions are now adjusted to directly
    reference the corresponding local foreign key element.
  - Annotating the generated `DraftAdministrativeData` artifacts and their elements is now supported.
- _[cds4j@3.10.0]_ New method `Xpr.size()` replaces (deprecated) method `Xpr.length()`
- _[cds@9.0.2]_ REVERT: For drafts, read-only fields must be set in `CREATE` handlers (calculated values set in `NEW` handlers are cleansed). If children are added in draft `CREATE` handlers, the field `DraftAdministrativeData_DraftUUID` must be set.
- _[cds@9.0.1]_ Lean draft handler is registered in a service only if a draft-enabled service entity exists
- _[cds@9.0.0]_ Evolution of the generic outbox to CAP-native task queues:
  - `cds.queued()`/ `cds.unqueued()` replace `cds.outboxed()`/ `cds.unboxed()` (temporary compat in place)
  - Global configuration `cds.requires.queue` replaces `cds.requires.outbox` (temporary compat in place)
  - New default `cds.requires.queue = true`. This change requires a database deployment (for table `cds.outbox.Messages`) if `cds.requires.outbox` was not manually set to `true` before.
  - Default `chunkSize` reduced from `100` to `10`. If parallel processing is disabled (`parallel = false`), the `chunkSize` config is ignored and the effective `chunkSize` is `1`.
- _[cds@9.0.0]_ Support for `@sap/cds-mtxs` version 1 is dropped
- _[cds@9.0.0]_ Service level restrictions for application service calls are enforced by default
  - Opt out with `cds.features.service_level_restrictions=false` until next major version
- _[cds@9.0.0]_ `req.diff` uses a deep expand to fetch data for deep update comparison. Previously, it read each composition layer sequentially.
- _[cds@9.0.0]_ `cds.test` now requires module `@cap-js/cds-test` to be installed. Test dependencies like `axios`, `chai`, `chai-as-promised`, and `chai-subset` can be usually removed in favor of `@cap-js/cds-test`.
- _[cds@9.0.0]_ `cds.context.locale` is only set if initiated from an HTTP client specifying a locale
- _[cds@9.0.0]_ Only new major version 4 of SAP Cloud SDK is supported from now on . Please make sure to upgrade. Detailed changes are documented in the [migration guide](https://github.com/SAP/cloud-sdk-js/blob/main/V4-Upgrade-Guide.md).
- _[cds@9.0.0]_ `cds-serve` now fails if `@sap/cds` would be loaded from different installation paths to prevent inconsistent server state. Such situations are always a setup issue, often caused by plugins that require diverging versions. Disable with `cds.server.exit_on_multi_install: false`.
- _[cds@9.0.0]_ For drafts, read-only fields must be set in `CREATE` handlers (calculated values set in `NEW` handlers are cleansed). If children are added in draft `CREATE` handlers, the field `DraftAdministrativeData_DraftUUID` must be set.
- _[cds@9.0.0]_ `hdbtabledata` files created by `cds compile/build` now instruct SAP HANA to decode base64 values in CSV files for `LargeBinary` elements. This aligns the behavior with SQLite and H2, avoiding manual base64 decoding. It can be disabled with `cds.hana.table_data.column_mapping.LargeBinary=false`.
- _[cds@9.0.0]_ `PATCH` requests no longer create the target resource if it doesn't exist (`UPSERT` semantics)
  - Re-enable via flag `cds.runtime.patch_as_upsert=true`
- _[cds@9.0.0]_ `PUT` requests no longer set unprovided properties to their default values (`REPLACE` semantics)
  - Re-enable via flag `cds.runtime.put_as_replace=true`
  - If enabled, the defaulting is now done in the protocol adapter
- _[cds@9.0.0]_ `req.params` is an array of objects (instead of plain values for single-keyed entities with key `ID`)
  - Opt out with `cds.features.consistent_params=false` until next major version
- _[cds-mtxs@3.0.2]_ `cds.requires.multitenancy.jobs.clusterSize` is set to 3 by default.
- _[cds-mtxs@3.0.2]_ `cds.requires.multitenancy.jobs.workerSize` is set to 4 by default.
- _[cds-mtxs@3.0.1]_ `@sap/cds-mtxs` now also conforms to the CAP plugin protocol.
- _[cds-mtxs@3.0.1]_ `@sap/cds-mtxs` now declares a peer dependency to `@sap/cds` version 9. Lower versions will fail.
- _[cds-mtxs@3.0.1]_ For the `java` profile, `cds.requires.auth` is set to `"kind": "dummy"` in the sidecar by default.
- _[cds-mtxs@3.0.1]_ `com.sap.hana.di.table/try_fast_table_migration` deployment parameter is now enabled as default.
- _[cds-mtxs@3.0.1]_ Outdated MTX configuration now throws an error.
- _[cds-mtxs@3.0.1]_ Outdated provisioning parameter configuration now causes an error.
- _[cds-mtxs@3.0.1]_ The extension validation (aka linting) now always checks extensions including existing extensions. This can be disabled using

  ```jsonc
  "requires": {
    "cds.xt.ExtensibilityService": {
      "check-existing-extensions": false
    }
  }
  ```

- _[cds-mtxs@3.0.1]_ The extension validation (aka linting) now also checks if the model can be compiled to EDMX. This also detects e.g. missing key fields of entities.
- _[cds-mtxs@3.0.1]_ If the `subscription-manager` profile is used, IAS will be the default authentication kind for production.
- _[cds-mtxs@3.0.1]_ The MTX sidecar now always uses the compiler configuration of the project root. To use a separate compiler configuration, you need to add the configuration

  ```jsonc
  "requires": {
    "cds.xt.ModelProviderService": {
      "use-local-cdsc-config": true
    }
  }
  ```

### Fixed {#may-25-fixed}

- _[cds-dk@9.0.4]_ Bring shrinkwrap back.
- _[cds-dk@9.0.4]_ `cds import --from edmx` no longer produces invalid CSN for function imports with return types of the same name.
- _[cds-dk@9.0.4]_ `cds watch` no longer shows the outbox model for empty projects.
- _[cds-dk@9.0.3]_ `cds up -2 k8s` fails for errors in `ctz` instead of only logging the messages.
- _[cds-dk@9.0.3]_ `cds add helm` now correctly prompts for the registry server.
- _[cds-dk@9.0.2]_ `cds add multitenancy` adds the `@sap/cds-mtxs` to `devDependencies` in for Java projects.
- _[cds-dk@9.0.2]_ `cds add ias` rewrites the `url: ~{srv-url}` to `url: ~{srv-cert-url}` if required.
- _[cds-dk@9.0.2]_ `cds add ias` adds `forwardAuthCertificates` and `strictSSL` settings to the app router if required.
- _[cds-dk@9.0.1]_ `cds up` has improved support for monorepos.
- _[cds-dk@9.0.1]_ `cds add html5-repo` works in combination with multitenancy when no app router or Work Zone is set up.
- _[cds-dk@9.0.1]_ `cds add dynatrace` sets the `environment_name` property according to the specification.
- _[cds-dk@9.0.1]_ `cds deploy --to hana` now supports `--with-mocks`.
- _[cds-dk@9.0.1]_ `cds bind` gives better error messages if the Cloud Foundry org or space are not found.
- _[cds-dk@9.0.1]_ `cds add enterprise-messaging` with xsuaa now adds `processed-after` in the `mta.yaml`.
- _[cds-dk@9.0.1]_ `cds deploy --to hana` correctly hands over `--profile` to `cds build` when deploying.
- _[cds-dk@9.0.1]_ `cds import` adds `@mandatory` annotations to properties marked as `required` in the schema.
- _[cds-dk@9.0.1]_ `cds add ams` for Java adds a custom builder to the `mta.yaml` to circumvent the missing `srv/src/gen/policies`.
- _[cds-dk@9.0.1]_ `cds add multitenancy` requires the `srv-api` instead of the `mtx-api` for Java projects.
- _[vscode-cds@9.0.1]_ Avoid exception during json schema hover when no hover text is available
- _[vscode-cds@9.0.1]_ Welcome page (`CAP Release Notes`) now show title of code block sections
- _[vscode-cds@9.0.1]_ Formatter: Separate alignment of annotations to entity and select items
- _[vscode-cds@9.0.1]_ Syntax highlighting of parenthesized annotations with strings containing a colon
- _[vscode-cds@9.0.1]_ Syntax highlighting of comments in queries
- _[cds-compiler@6.0.10]_ to.sql/to.hdi:
  - Fixed internal error for to-many associations without ON-condition in entities with `@cds.persistence.skip`.
- _[cds-compiler@6.0.10]_ for.odata/to.edm(x):
  - In annotation expressions: enum references that have already been resolved by the compiler are
    correctly rendered to EDMX.
- _[cds-compiler@6.0.8]_ to.edm(x): Fixed crash for rare case if annotation expressions were used.
- _[cds-compiler@5.9.4]_ to.edm(x): Parameters are marked optional unless explicitly marked as `not null`.
  Annotation `Core.OptionalParameter` will be added to optional parameters.
- _[cds.java@3.10.1]_ Fixed a bug in the Service Manager v2 API integration that leads to 400 Bad Request errors when service instances or service bindings are requested by ID.
- _[cds.java@3.10.1]_ Fixed a bug in `cds-services-archetype` causing an invalid default package name.
- _[cds.java@3.10.1]_ Fixed a bug in `cds-feature-change-tracking` causing the composition `changes` to be written when the entity itself is deleted.
- _[cds.java@3.10.1]_ Fixed a bug causing instance-based authorization conditions to be executed on inactive draft-enabled instances during `draftActivate` or `draftEdit`. This fix requires `cds.security.authorization.instanceBased.checkInputData.enabled` to be set to `true`.
- _[cds.java@3.10.1]_ Fixed a bug in `cds-feature-flow` causing server errors in case an action with `@flow` annotations was triggered on a non-existent entity instance.
- _[cds.java@3.10.0]_ Fixed a bug, causing `com.sap.cloud.sdk.datamodel.odata.client.exception.ODataDeserializationException` when querying the `@odata.singleton` annotated entity via remote service.
- _[cds.java@3.10.0]_ Fixed a bug, causing a JsonParsingException, when authenticating with a IAS based jwt token that contains non-string attributes.
- _[cds.java@3.10.0]_ Fixed a bug, causing the Kafka client to loose connection in case of a certificate rotation.
- _[cds.java@3.10.0]_ Fixed a bug, causing the original Correlation ID not propagated to custom Outbox handlers.
- _[cds.java@3.10.0]_ Fixed a bug, causing the display of the undocumented properties in the developer dashboard.
- _[cds.java@3.10.0]_ Fixed a bug, causing a messed up event context when receiving message from Event Mesh without data, dataMap or headersMap.
- _[cds.java@3.10.0]_ Fixed a bug in `cds-feature-change-tracking` causing the links between the projections of the entities that exclude elements of aspect `changelog.changeTracked` and their changes to be lost. Links between entities and changes are now written using domain entities which is assumed to be extended with aspect `changelog.changeTracked`.
- _[cds.java@3.10.0]_ Fixed a bug in `cds-feature-change-tracking` causing statement with wrong selection predicate being generated when `Update` statement uses CDS delta lists as payloads for compositions.
- _[cds.java@3.10.0]_ Fixed a bug in `cds-feature-change-tracking` causing `Delete` statements to consider localized values for images.
- _[cds.java@3.10.0]_ Fixed a bug in `cds-feature-change-tracking` causing parametrized `Update` statements to select more data than needed for changelogs.
- _[cds4j@3.10.1]_ Fixed duplication issue due to left join in runtime view CTE mode on RT views with filtered to-many associations
- _[cds4j@3.10.1]_ Support redirected associations, nested projections and structs in runtime view CTE mode
- _[cds4j@3.10.0]_ Fixed serialization of statements with predicates on the select list
- _[cds4j@3.10.0]_ Reduced memory consumption during bulk inserts
- _[cds4j@3.10.0]_ Execute bulk inserts in partitions
- _[cds4j@3.10.0]_ Fix search on entities using virtual elements as `@Common.Text`
- _[cds@9.0.2]_ `cds.load()` ignores the outbox model if it's the only model source, helping `watch` to suppress it as well.
- _[cds@9.0.1]_ `cqn2odata`: value formatting in OData v4 lambda expressions
- _[cds@9.0.1]_ Processing in `filed-based-messaging` must be async
- _[cds@9.0.1]_ `Location` response header for REST protocol
- _[cds@9.0.1]_ `cds.log` is unwired from `cds.env` now, which allows to use `cds.log` in plugins, without risk of loading `cds.env` too early.
- _[cds@9.0.1]_ Elements from `mixin` are now being considered by `minify`
- _[cds@9.0.1]_ Lean draft: Insert.entries on draft enabled entity
- _[cds@9.0.1]_ Remote call of action/function always forwards passed headers
- _[cds@9.0.1]_ `cds serve` no longer fails with an duplicate install error if the shell's working directory differs in case (like `C:` vs `c:` on Windows).
- _[cds@9.0.1]_ Erroneously skipped input validation for local service calls
- _[cds@9.0.0]_ Webhook creation in `enterprise-messaging` is more resilient in case of multiple instances
- _[cds@9.0.0]_ `cdsjsonschema` protocol in lower case for cds json schema
- _[cds@9.0.0]_ In `CREATE` handlers for drafts, the original path is preserved
- _[cds@9.0.0]_ `@sap/cds-mtxs` is now loaded before other plugins so that they can register handlers for mtx services.
- _[cds@9.0.0]_ The default index page respects now `cds.odata.containment`
- _[cds@9.0.0]_ Remove incorrect `Type` suffix from `@odata.context` for views with parameters
- _[cds@9.0.0]_ Support where clauses in refs
- _[cds@8.9.4]_ No longer require `@sap/cds-compiler` versions 6.x as these are not supported with CAP Java 3.
- _[cds@8.9.4]_ Regression in view resolving with mixins
- _[cds@8.9.4]_ View resolving for external service entities aborted too early
- _[cds@8.9.4]_ `cds.Map` validation in action/function parameters
- _[cds@8.9.3]_ OData: `$value` access of primitive properties returned by custom handler
- _[cds@8.9.3]_ UCL: Add missing declaration of variable `$input` in mutation for creating an application template
- _[cds@8.9.3]_ Purge of `servers` from `.cds-services.json` file
- _[cds@8.9.3]_ Loading of relative service implementations in plugins
- _[cds@8.9.3]_ `cds.compile.to.edmx` in case the model was manipulated in a plugin
- _[cds-mtxs@3.0.2]_ Properly catching errors in the `t0` cleanup intervals.
- _[cds-mtxs@3.0.1]_ Extension validation (aka linting) for new entities now works properly, also if no other extensions exist.
- _[cds-mtxs@3.0.1]_ Extension validation now ignores internal definitions with namespace `cds.core`.
- _[cds-mtxs@3.0.1]_ Base model pulled for extension projects using `cds pull` no longer contains internal definitions with namespace `cds.core`, `cds.outbox` or `cds.xt`.
- _[cds-mtxs@3.0.1]_ [Beta] Extension of aspects is now possible. For now, it needs to be enabled using

  ```jsonc
  "requires": {
    "cds.xt.ExtensibilityService": {
      "allow-aspect-extension": true
    }
  }
  ```

### Removed {#may-25-removed}

- _[cds-dk@9.0.1]_ `cds build --clean` is removed.
- _[cds-dk@9.0.1]_ `cds build` no longer supports configuration with `cds.data` and `cds.service` in package.json.
- _[cds-dk@9.0.1]_ `cds watch` still allows options `--include` and `--exclude`, but CDS configuration is ignored.
- _[cds-dk@9.0.1]_ `cds deploy --to hana --store-credentials` is removed.
- _[eslint-plugin-cds@4.0.2]_ Removed support for ESLint8
- _[vscode-cds@9.0.1]_ User setting `cds.useOldParser`
- _[vscode-cds@9.0.1]_ Official support for CDS < 8 and CDS compiler < 5 (a fallback to the latest compiler is done)
- _[cds-compiler@6.0.8]_ compiler:
  - The Antlr-based parser is removed.
  - v5 deprecated flags are removed.
  - Option `compositionIncludes` is removed, as its default is `true`; instead, a deprecated flag was added.
- _[cds-compiler@6.0.8]_ to.hdbcds: The HDBCDS backend is deprecated and can no longer be invoked.
- _[cds@9.0.0]_ Legacy OData adapter which was enabled with compat `cds.features.odata_new_adapter=false`
- _[cds@9.0.0]_ Legacy Database services which were enabled with `@sap/cds-hana` or `sqlite3`
- _[cds@9.0.0]_ `@cds.default.order` and `@odata.default.order` for implicit sorting
- _[cds@9.0.0]_ `cds.auth`: Support for `@sap/xssec^3` (incl. compatibility mode of `@sap/xssec^4`)
- _[cds@9.0.0]_ Undocumented compat flag `cds.features.odata_v2_result_conversion`
- _[cds@9.0.0]_ Undocumented util `cds.utils.pool`
- _[cds@9.0.0]_ Undocumented method `INSERT.as`. Use `INSERT.from` instead to insert sub `SELECT` queries.
- _[cds@9.0.0]_ Undocumented method `req._queryOptions` of `cds.Request` belonging to the new OData adapter
- _[cds@9.0.0]_ Undocumented method `_reset` of the `cds.ql` API
- _[cds@9.0.0]_ Undocumented property `cmd` of the `cds.ql` `Query` class. Please use method `kind` instead.
- _[cds@9.0.0]_ Undocumented method `protocol4` of the `Protocol` class. Please use property `def.protocols` instead.
- _[cds@9.0.0]_ Undocumented methods `impl` and `with` of the `ApplicationService` class. Please use `prepend` instead.
- _[cds@9.0.0]_ Undocumented compat flag `cds.features.rest_error_handler`
- _[cds@9.0.0]_ Deprecated compat flags `cds.features.compat_restrict_bound` and `cds.env.features.compat_restrict_where`
- _[cds@9.0.0]_ Deprecated compat flag `cds.features.stream_compat`
- _[cds@9.0.0]_ Deprecated feature flag `cds.log.kibana_custom_fields`. Please use `cds.log.als_custom_fields` instead`.
- _[cds@9.0.0]_ Deprecated compat flag `cds.features.keys_in_data_compat`
- _[cds@9.0.0]_ Deprecated element-level annotation `@Search.defaultSearchElement`. Please use annotation `@cds.search` instead.
- _[cds@9.0.0]_ Deprecated stripping of unnecessary topic prefix `topic:` in messaging
- _[cds@9.0.0]_ Deprecated messaging `Outbox` class. Please use config or `cds.outboxed(srv)` to outbox your service.

## April 2025

### Added {#apr-25-added}

- _[cds.java@3.9.0]_ Added support for the [SAP Integration Suite, Advanced Event Mesh](https://github.com/cap-java/cds-feature-advanced-event-mesh).
- _[cds.java@3.9.0]_ Added `@Core.OptionalParameter` support for bound and unbound function parameters. Supported values are `true` and `false`.
- _[cds.java@3.9.0]_ Subscription dependencies for `portal` and `html5-apps-repo` are automatically created if the corresponding service is bound to the CAP Java application.
- _[cds.java@3.9.0]_ Log CDS Properties by setting the log level `logging.level.com.sap.cds.properties: DEBUG` in the application.yaml. Warnings are turned on by default.
- _[cds.java@3.9.0]_ `cds-feature-auditlog-v2` now ignores auditlog service bindings relevant for the XSA platform.

### Changed {#apr-25-changed}

- _[cds-dk@8.9.3]_ `cds add pipeline` also creates UI5 resources if required.
- _[cds-dk@8.9.2]_ The Node version in `gen/db/package.json` file generated by `cds build` is now `>=18`, matching to what `@sap/hdi-deploy` specifies.
- _[cds-dk@8.9.2]_ `cds` commands now fail if used in combination with the upcoming `@sap/cds` version 9.
- _[vscode-cds@8.9.0]_ use new CDS parser by default

### Fixed {#apr-25-fixed}

- _[cds-dk@8.9.3]_ `cds add workzone` uses the backend destination `srv-api` instead of `{{appName}}-srv-api` on Cloud Foundry.
- _[cds-dk@8.9.3]_ `cds init` uses latest Maven Java archetype version 3.9.1 for creating Java projects.
- _[cds-dk@8.9.2]_ `cds bind` gives better error messages if the Cloud Foundry org or space are not found.
- _[cds-dk@8.9.2]_ `cds add html5-repo` works in combination with multitenancy when no app router or Work Zone is set up.
- _[cds-dk@8.9.1]_ `cds build` restores compatibility with `@sap/cds` 7, no more crashing there with `TypeError: Cannot read properties of undefined (reading 'enabled')`.
- _[cds-dk@8.9.1]_ `cds add containerize` works if run before `cds add helm`.
- _[cds-dk@8.9.1]_ `cds add http` no longer writes headers starting with a placeholder (IntelliJ compatibility)
- _[cds-dk@8.9.1]_ `cds init --force` overwrites existing files.
- _[vscode-cds@8.9.1]_ Formatting of annotations in parentheses with values containing spaces
- _[vscode-cds@8.9.0]_ Auto update of **Annotation Modeler** plugin did not work
- _[vscode-cds@8.9.0]_ _Document highlights_ could show wrong ranges for namespaces
- _[cds-compiler@5.9.2]_ to.edm(x): Revert addition of the attribute sap:filterable="false" to the NavigationProperty DraftAdministrativeData in OData V2
- _[cds-compiler@4.9.10]_ Added option `allowMixinInProjectionExtension` which allows referring to mixins in `extend projection`.
  This was forbidden in cds-compiler v4, but re-introduced in v5.5.  Users wanting to migrate from cds-compiler
  v3 to v4 can use this option for easier migration.
- _[cds.java@3.9.1]_ Fixed a bug, causing wrapping services with typed service interfaces to fail when service interfaces are defined in a separate dependency.
- _[cds.java@3.9.1]_ Fixed a bug, causing ORD EDMX metadata endpoints to fail, when services contain a dot.
- _[cds.java@3.9.1]_ Fixed a bug, causing Kafka SSL configuration to access corrupted keystore files.
- _[cds.java@3.9.1]_ Fixed a bug, causing Event Mesh multitenancy subscription or upgrades to fail silently.
- _[cds.java@3.9.0]_ Fixed a bug, causing lost commits, when starting readonly transactions through Spring APIs inside of a ChangeSetContext.
- _[cds.java@3.9.0]_ Fixed a bug in OData v4 adapter, causing duplicated entries in response payload for `@open` types.
- _[cds4j@3.9.1]_ Fix queries with filtered path over runtime views
- _[cds@8.9.2]_ `forUpdate` will not consider `wait` if `ignoreLocked` is set
- _[cds@8.9.2]_ Do not crash in case of custom `DraftAdministrativeData` table
- _[cds@8.9.1]_ `cds.env` merging for `null` values
- _[cds@8.9.1]_ Best-effort mechanisms for lambda support on OData V2 remote services (usage of functions in lambda expressions)
- _[cds@8.9.1]_ Use extended model in `enterprise-messaging` inbound handlers
- _[cds@8.9.1]_ Compat flag `cds.features.draft_compat` for handler registration in draft scenarios
- _[cds-mtxs@2.7.2]_ Inaccurate warnings about outdated configuration are removed.
- _[cds-mtxs@2.7.2]_ Improved resilience in handling corrupted metadata entries stored in the tenant database table.
- _[cds-mtxs@2.7.1]_ Input validation annotations (e. g. `@assert.range`) with default values in extensions are now correctly checked.
- _[cds-mtxs@2.7.1]_ Event 'activated' is now only triggered for successfully completed extension activation.
- _[cds-mtxs@2.7.1]_ Binding parameters configured for subscription are now correctly passed to the Service Manager.

## March 2025

### Added {#mar-25-added}

- _[cds-dk@8.9.0]_ `cds import` now adds Cloud SDK dependencies to package.json if an OData service is imported.
- _[cds-dk@8.9.0]_ `cds deploy --to hana --on k8s` is now supported.
- _[cds-dk@8.9.0]_ `cds up` automates freezing dependencies, building, and deploying your application.
- _[cds-dk@8.9.0]_ `cds pull` includes existing extensions if the server is configured accordingly.
- _[cds-dk@8.8.0]_ `cds add xsuaa` lets you pass a `--plan` option, e.g. for `cds add xsuaa --plan broker`.
- _[cds-dk@8.8.0]_ `cds add workzone` and `cds add workzone-standard` support for Kyma.
- _[cds-dk@8.8.0]_ `cds add typer` now adds a `before:cds-watch` script to run cds-typer before starting `cds watch`.
- _[cds-dk@8.8.0]_ `cds watch` supports a `before:cds-watch` npm script in your `package.json`, executed once before the initial `cds watch` startup.
- _[cds-compiler@5.9.0]_ compiler:
  - Generated entities for compositions of named aspects now have an `include` on the named aspect,
    inheriting actions from the aspect.  This can be disabled via option `compositionIncludes: false`.
  - A warning is emitted for selected elements that are explicitly `virtual`, whose
    behavior will change in cds-compiler v6.
  - New warning for structures having a scalar default value.
  - New warning for localized structures, as they are not fully supported by the compiler.
  - The new parser (`newParser: true`) now supports operator `==`.
- _[cds-compiler@5.9.0]_ to.cdl:
  - Definitions can now be rendered nested in services. A common namespace can be extracted, too.
    To use it, enabled options `renderCdlDefinitionNesting` and `renderCdlCommonNamespace`.
  - Annotation array values are pretty-printed to reduce whitespace.
- _[cds-compiler@5.9.0]_ for.effective: Property `namespace` is no longer part of effective CSN.
- _[cds-compiler@5.9.0]_ for.sql/hdi:
  - _[cds-compiler@5.9.0]_ The new operator `==` is rendered as `IS NOT DISTINCT FROM` or an equivalent expression.
  - _[cds-compiler@5.9.0]_ Using option `booleanEquality`, operator `!=` is rendered as `IS DISTINCT FROM` or an equivalent expression.
- _[cds.java@3.8.0]_ Added support for async mode for Unified Customer Landscape´s (UCL) SPII Tenant Mapping API in `cds-feature-ucl`.
- _[cds.java@3.8.0]_ Added parameter for token retrieval timeout for determination of service manager JWT token.
- _[cds.java@3.8.0]_ Event handler signatures can now accept arguments of type `CqnStatement` or it's specific sub-interfaces and `CqnStructuredTypeRef`.
- _[cds.java@3.8.0]_ The `build` goal of the `cds-maven-plugin` now supports execution from project root folder. It also takes a new property `goals` to specify a custom list of goals for execution.
- _[cds.java@3.8.0]_ IAS App2App flows can now be configured for a remote service without creating a destination, by using the IAS binding and setting `binding.options.ias-dependency-name` to the respective IAS application dependency.
- _[cds.java@3.8.0]_ Added support for UI5's State Messages concept to draft-enabled entities, when compiler flag `cdsc.beta.draftMessages` is set to `true`.
- _[cds.java@3.8.0]_ When using State Messages annotation-based validations such as `@mandatory` or `@assert...` are now executed on draft entities.
- _[cds.java@3.8.0]_ Event Handler methods now support `CqnStatement` or its subtypes and `CqnStructuredTypeRef` as arguments.
- _[cds.java@3.8.0]_ Bound and unbound function parameters now support `@Core.OptionalParameter` annotations.
- _[cds4j@3.9.0]_ Support referencing origin entity from upsert result: `Row.ref()`
- _[cds4j@3.9.0]_ Elements that are the target of a `@Common.Text` annotation are now by default searchable  
- _[cds4j@3.8.0]_ Support for [SQL] Window Functions
- _[cds4j@3.8.0]_ Support expressions & literals in runtime views
- _[cds4j@3.8.0]_ Support match predicates `anyMatch`/`allMatch` in infix filters of element refs used in where conditions
- _[cds4j@3.8.0]_ Support operator `==` in CQN with Boolean logic (same as IS)
- _[cds@8.9.0]_ Support for parallel multi-instance processing of outbox entries
- _[cds@8.9.0]_ Remote services: ensure request correlation by guaranteeing outgoing header `x-correlation-id`
- _[cds@8.9.0]_ Support for `@odata.bind` to reference foreign keys
- _[cds@8.9.0]_ Support for plugins in ESM format
- _[cds@8.9.0]_ Dependency to `@eslint/js` so that `eslint` works w/o the application having to install it.
- _[cds@8.9.0]_ IAS: In the `client_credentials` flow, the array of `ias_apis` (if present) is added to the technical user's roles
- _[cds@8.9.0]_ Opt-in feature `cds.features.consistent_params` for `req.params` always being an array of objects
  - That is, no more plain values for single-keyed entities with key `ID`
  - Will become the default in `@sap/cds^9`
- _[cds@8.8.0]_ `cds.ql` method `SELECT.hints()` which passes hints to the database query optimizer that can influence the execution plan
- _[cds@8.8.0]_ Schema updates for MTX configuration
- _[cds@8.8.0]_ Deprecate `cds.requires.db.database` in JSON schema
- _[cds@8.8.0]_ Service level restrictions for application service calls can be enforced with `cds.features.service_level_restrictions=true`
  - With `@sap/cds^9`, this becomes the new default.
- _[cds@8.8.0]_ Support implicit function parameters calls with @prefix
- _[cds@8.8.0]_ `cds.test` now uses package `@cap-js/cds-test` if installed, otherwise prints a hint to install it. With cds 9, this package will be required.
- _[cds@8.8.0]_ Operation response streaming
  - OData: Operations returning `cds.LargeBinary` annotated with `@Core.MediaType` may send stream responses.
  - REST: Operations may send stream responses.
  - Annotations `@Core.MediaType`, `@Core.ContentDisposition.Filename` and `@Core.ContentDisposition.Type` on operation return types will be considered.
- _[cds-mtxs@2.7.0]_ Database deployment of extensions can now be suppressed by setting

  ```jsonc
    "requires": {
      "cds.xt.ExtensibilityService": {
        "activate": {
          "skip-db": true
        }
      }
    }
  ```

- _[cds-mtxs@2.7.0]_ `cds.xt.ExtensibilityService.pull` now returns csn including existing extensions if `check-existing-extensions` is configured (see below)
- _[cds-mtxs@2.7.0]_ Beta: Event `cds.xt.ExtensibilityService.activated` is sent if an asynchronous call of `cds.xt.ExtensibilityService.activate` is finished.
- _[cds-mtxs@2.6.0]_ `html5-runtime: true` and `html5-host: true` are shortcuts in `cds.requires` to specify SAP BTP HTML5 Repository service SaaS dependencies.
- _[cds-mtxs@2.6.0]_ `ExtensibilityService` now supports draft extensions, allowing to separately validate and activate extensions.
- _[cds-mtxs@2.6.0]_ `ExtensibilityService.activate` now allows to pass HDI deployment parameters.
- _[cds-mtxs@2.6.0]_ `cds.env.odata.containment` is respected when compiling to EDMX.

### Changed {#mar-25-changed}

- _[cds-dk@8.9.0]_ `cds build` logging is simplified.
- _[cds-dk@8.9.0]_ `cds add html5-repo` ignores folders in `app/` starting with `.`
- _[cds-dk@8.8.0]_ Running `cds deploy` in dry mode with an output file specified will now only produce a warning in stderr and will not exit with an error code.
- _[cds-dk@8.8.0]_ `cds deploy --out …` will not generate the specified output file if it would end up empty.
- _[cds-dk@8.8.0]_ `cds add workzone` adds a transpilation task for UI5 deployment descriptors in TypeScript projects.
- _[cds-dk@8.8.0]_ `cds add workzone` does not use the deprecated `webide-extension-task-updateManifestJson` task any more.
- _[eslint-plugin-cds@3.2.0]_ Rules `@sap/cds/sql-null-comparison` and `@sap/cds/no-java-keywords` are moved from the `experimental` rule set to `all`.
- _[vscode-cds@8.8.1]_ using native Node.js `fetch` for https requests
- _[vscode-cds@8.8.0]_ preparation to use new CDS parser
- _[vscode-cds@8.8.0]_ minimum VSCode version is now 1.96.0
- _[cds-compiler@5.9.0]_ Update OData vocabularies: 'Common', 'Hierarchy'
- _[cds4j@3.8.0]_ Changed operator `!=` in CQN to Boolean logic (same as IS NOT)
- _[cds@8.9.0]_ Invalid draft requests now have status code 400
- _[cds@8.9.0]_ Allow ESM loading of handler files (`.js`, `.ts`) in all situations, incl. test runs with Jest's `--experimental-vm-modules` option.
- _[cds@8.9.0]_ Application and remote services now throw the error `Target <yourTarget> cannot be resolved for service <yourService>` when the query cannot be resolved to the service entity. Setting the feature flag `cds.env.features.restrict_service_scope` to false disables this.
- _[cds@8.9.0]_ Accept 2xx status codes set in custom operation handlers
- _[cds@8.9.0]_ Implicit orderby elements are marked as such and are no longer considered for requests to remote services
- _[cds@8.8.0]_ The default index page now shows links to CDS functions with their parameter names but no default values anymore.

### Fixed {#mar-25-fixed}

- _[cds-dk@8.9.0]_ `cds add telemetry` is order-independent with other `cds add` commands for Java.
- _[cds-dk@8.9.0]_ Build task `mtx-extension` now fails with exit code 1 in case of build errors.
- _[cds-dk@8.8.2]_ Bump axios to 1.8.4, fixing CVE-2025-27152
- _[cds-dk@8.8.1]_ `cds init` uses latest Maven Java archetype version 3.8.0 for creating Java projects.
- _[cds-dk@8.8.1]_ `cds init --add lint` writes complete eslint.config.mjs.
- _[cds-dk@8.8.1]_ `cds import` no longer fails with an `EXDEV` error in `docker` containers.
- _[cds-dk@8.8.1]_ `cds import` json schema now contains correct references.
- _[cds-dk@8.8.0]_ `cds add approuter` doesn't create entries for `app` and `appconfig` local directories any more.
- _[cds-dk@8.8.0]_ `cds add telemetry` for Java doesn't erroneously add `cds` configuration or `dependencies` to the `package.json`.
- _[cds-dk@8.8.0]_ `cds add sample` adds the workzone-specific configuration if `cds.requires.workzone` is `true`.
- _[cds-dk@8.8.0]_ `cds compile -o` uses the correct file suffix if explicitly specified in the file name.
- _[cds-dk@8.8.0]_ `cds bind` caches the promise of its `cf -v` call to prevent race conditions.
- _[cds-dk@8.8.0]_ `cds import --out <folder>` does not fail if executed in a folder with a `.`.
- _[cds-dk@8.8.0]_ `cds add workzone` has improved support for multitenancy.
- _[eslint-plugin-cds@3.2.0]_ Rules `@sap/cds/sql-null-comparison` will not warn about `!= null`, as it may be supported by future CDS compiler versions.
- _[eslint-plugin-cds@3.2.0]_ Some rules had `docs` meta property `recommended: true`, but were not part of the recommended rules list.
- _[eslint-plugin-cds@3.2.0]_ When determining a CDS project's root directory, we now consider package.json's with `@sap/cds` as `devDependency` or `peerDependency`
- _[vscode-cds@8.8.2]_ _Welcome Page_ was shown after each restart
- _[vscode-cds@8.8.1]_ use lowercase `cdsjsonschema` as protocol for cds schema urls.
- _[vscode-cds@8.8.1]_ user setting `cds.useOldParser` did not work correctly
- _[vscode-cds@8.8.0]_ removed rendering issues in `CAP Release Notes` view
- _[vscode-cds@8.8.0]_ `Generate data model` now also works for `schema.cds` files in subfolders.
- _[cds-compiler@5.9.0]_ to.odata: Annotation expressions using `LabeledElement` were not correctly rendered into EDMX.
- _[cds-compiler@5.8.2]_ for.odata: Generate foreign key elements for events again.
- _[cds.java@3.8.1]_ Fixed a bug, causing Audit log implementation to generate redundant entries with empty attributes for the audit log when entity uses associations as the keys.
- _[cds.java@3.8.1]_ Fixed a bug, causing Audit log implementation to generate messages with duplicated attributes when audited instances expanded multiple times in the same `Select` statement.
- _[cds.java@3.8.1]_ Fixed a bug in Cloud SDK integration, causing the IAS app2app flow to accidentally request a token from the provider level IAS tenant in DwC scenarios.
- _[cds.java@3.8.1]_ Fixed a bug, causing draft queries not being optimized and certain queries on runtime views to fail.
- _[cds.java@3.8.0]_ Fixed a bug, causing non-unique "MT_LIB_TENANT-" service instances to be filtered out.
- _[cds.java@3.8.0]_ Fixed a bug in OData V4 adapter, causing `NullPointerException` while processing payload containing complex type array initialized with `null`.
- _[cds.java@3.8.0]_ Fixed a bug, causing localized error messages in logs and exception stack traces.
- _[cds.java@3.8.0]_ Fixed a bug, causing invalid property suggestions in IDEs, when editing `application.yaml`.
- _[cds4j@3.9.0]_ Fix SQL error on predicates using is (not) on the select list
- _[cds4j@3.9.0]_ Fix exception on computing inline count for queries with a condition evaluating to false
- _[cds4j@3.9.0]_ Fix NPE on expand with inline count for select statements using path expressions in where
- _[cds4j@3.9.0]_ Fix 'Missing value for parameter' error on expand by parent-keys when the parent key is selected with a structuring alias
- _[cds4j@3.8.1]_ Fix expand by 'parent-keys' of associations using literals in on-condition
- _[cds4j@3.8.1]_ Runtime views: ignore expands of entities without persistence
- _[cds4j@3.8.0]_ Consider type casts of refs in orderBy
- _[cds@8.9.0]_ Lean draft: Proper navigation to the service entity of draft-administrative data
- _[cds@8.9.0]_ Unprocessed foreign keys from expressions of semi join conditions in `UPDATE.data`
- _[cds@8.9.0]_ Kafka: Each topic will have a dedicated consumer-group id (configurable with `consumerGroup`)
- _[cds@8.9.0]_ Foreign-key calculation based on navigation path
- _[cds@8.9.0]_ `cds.env` shortcuts like `cds.requires.db === 'hana'` are normalized to `cds.requires.db.kind === 'hana'` when combined from multiple sources
- _[cds@8.9.0]_ Error handling for invalid access of an entity that does not have a key, by key, through REST
- _[cds@8.9.0]_ `cds.validate` crashed with unknown target
- _[cds@8.9.0]_ `cds.parse.expr` parsed SAP HANA native functions like `current_utctimestamp` erroneously as `ref`
- _[cds@8.9.0]_ `null` values in logger if `custom_fields` are configured
- _[cds@8.9.0]_ User-provided instances of SAP Cloud Logging should have either tag `cloud-logging` or `Cloud Logging`
- _[cds@8.9.0]_ The `@odata.context` for entities and views with parameters should refer to the EntityType with `/Set` at the end e.g. `../$metadata#ViewWithParamType(1)/Set`
- _[cds@8.8.3]_ Event Mesh: Reconnect in case of error in AMQP connection
- _[cds@8.8.2]_ Consuming REST actions returning anonymous structures
- _[cds@8.8.2]_ `i18n.labels/messages` were occasionally missing
- _[cds@8.8.1]_ Requests violating `cds.odata.max_batch_header_size` are terminated with `431 Request Header Fields Too Large` instead of `400 - Bad Request`
- _[cds@8.8.1]_ `cds.parse.<x>` writing directly to `stdout`
- _[cds@8.8.1]_ Instance-based authorization for programmatic action invocations
- _[cds@8.8.1]_ Implicit function parameter calls with Array or Object values
- _[cds@8.8.1]_ OData: Throw an error by `POST` with payload that contains array of entity representation
- _[cds@8.8.1]_ `cds.validate` filters out annotations according to OData V4 spec
- _[cds@8.8.1]_ Crash for requests with invalid time data format
- _[cds@8.8.1]_ Add missing 'and' between conditions in object notation of QL
- _[cds@8.8.1]_ Multiline payloads in `$batch` sub requests
- _[cds@8.8.1]_ Instance-based authorization for modeling like `$user.<property> is null`
- _[cds@8.8.1]_ Respect `cds.odata.contextAbsoluteUrl` in new OData adapter
- _[cds@8.8.1]_ `cds.odata.context_with_columns` also applies to singletons
- _[cds@8.8.0]_ Order by virtual fields in draft-related requests
- _[cds@8.8.0]_ Erroneous cleansing when draft activation is invoked programmatically
- _[cds@8.8.0]_ Skip validation for mandatory fields in update scenarios for entities in draft activation
- _[cds@8.8.0]_ Simplified default configuration: `cds.requires.messaging = true`
- _[cds@8.8.0]_ `cds.connect` called with options erroneously filled in `cds.services`
- _[cds@8.8.0]_ Mocked users won't have a tenant in single-tenant mode
- _[cds@8.8.0]_ Allow usage of latest versions of `chai` and `chai-as-promised` on Node >= 23 with the built-in test runner and `mocha`. The `jest` runner is not able though to load these ESM modules.
- _[cds@8.8.0]_ Reject navigations in expand
- _[cds@8.8.0]_ Activation of drafts for entities using `@cds.api.ignore`
- _[cds@8.8.0]_ Prevent uncaught type error during validation of composition entries
- _[cds-mtxs@2.7.0]_ Synchronous calls to `/-/cds/saas-provisioning/upgrade` for non-existing tenants are now handled properly.
- _[cds-mtxs@2.6.1]_ Compatibility with cds 7 is enabled again.
- _[cds-mtxs@2.6.1]_ Asynchronous jobs now properly handle errors exceeding 5000 characters.
- _[cds-mtxs@2.6.0]_ `cds.xt.SaasProvisioningService` is still served for Java projects with `subscription-manager` profile.

### Removed {#mar-25-removed}

- _[cds-dk@8.9.0]_ Removed `before:cds-watch` script.


## February 2025

### Added {#feb-25-added}

- _[cds-compiler@5.8.0]_ Type definitions can now be projections on other types, i.e. `type Proj : projection on OtherType { elem }`.  
  Use it to create types based on other types, e.g. by selecting only certain elements.  
  Only available with the new parser (`newParser: true`)
- _[cds-compiler@5.8.0]_ Analyze enum symbols like `#ENUM_SYMB` in all (sub) expressions and conditions.
  It can be validated if the compiler can deduce its `enum` type from its use context:
  - when the enum symbol is used as `default` value, `select` column expression,
    argument when navigating along an association to an entity with a parameter,
    or argument of a `cast` function call, or
  - when the enum symbol is compared to a reference or `cast` function call; we
    consider the operators `=`, `<>`, `!=`, `in`, `not in` and also analyze enum
    symbols as `when` operands if the `case` operand is a reference/`cast`.
  - We not only consider simple enum symbols, but also lists of enum symbols (on
    the right side of `in`/`not in`), and a `case … end` (sub) expression with
    enum symbols after the `then`s and/or the `else`.
  - An enum symbol can be validated if the deduced type is a direct or indirect
    `enum` type, or an managed association with one foreign key having an `enum` type.
  - For the effects in the compiler, IDE and backends, see the changelog entry for v5.7.0.
    Hint: the deprecated hdbcds backend does not support enum symbols.
  - Remark: the support for enum symbols used as annotation values is still limited.
- _[cds-compiler@5.8.0]_ to.sql.migration: Allow extending `precision` of `cds.Decimal` and allow extending
  `scale` if `precision` is increased by at least the same amount.
- _[cds-compiler@5.8.0]_ to.edm(x): `@assert.range` now supports "exclusive" values by writing values
  in parentheses such as `[ (1), (2) ]`, as well as "infinite" by using `[ _, _ ]`.
- _[cds-compiler@5.8.0]_ for.odata/to.edm(x)/for.seal: Propagate annotation expressions from managed associations
  to the foreign keys

### Changed {#feb-25-changed}

- _[cds-compiler@5.8.0]_ Top-level CSN property `csnInteropEffective` is ignored and no longer warned about.
- _[cds-compiler@5.8.0]_ Update OData vocabularies: 'Analytics', 'Common', 'Hierarchy', 'UI'

### Fixed {#feb-25-fixed}

- _[cds-dk@8.7.3]_ `cds compile -o` fixes the output file name in `-o <service>.json`.
- _[cds-dk@8.7.3]_ `cds lint` won't stumble over scalar config objects anymore.
- _[cds-dk@8.7.3]_ `cds init` uses latest Maven Java archetype version 3.7.2 for creating Java projects.
- _[cds-dk@8.7.3]_ `cds deploy --to hana --dry` doesn't exit with a `TypeError` if there are no models.
- _[cds-dk@8.7.3]_ `cds add ias` fixes a few scenarios in combination with multitenancy.
- _[cds-dk@8.7.2]_ `cds compile -o` with a file name such as `cds c srv/cat-service.cds -o srv/cat-service.json`.
- _[cds-dk@8.7.2]_ `cds compile` without `-o` doesn't print the file name header for single services any more.
- _[cds-dk@8.7.2]_ `cds add workzone` in combination with multitenancy doesn't throw an error any more.
- _[cds-dk@8.7.2]_ `cds import --from rfc` stores the input file again in `srv/external/<destination>/...` instead of `srv/external/...`.
- _[cds-dk@8.7.2]_ `cds import --name` no longer crashes with a `TypeError`.
- _[cds-dk@8.7.2]_ `cds import --out <filename>` no longer crashes with a `Error: EEXIST`.
- _[cds-dk@8.7.2]_ `BuildError` no longer cuts off its stack.
- _[cds-dk@8.7.2]_ `cds bind -a` doesn't concurrently try to check the Cloud Foundry version or OAuth token.
- _[cds-dk@8.7.2]_ `cds import` now resolves target of association/composition correctly for multiple schema files.
- _[cds-dk@8.7.1]_ `cds add mta` now sets `parameters.instances` explicitly to `1` in Java projects, same as for Node.js projects.
- _[cds-dk@8.7.1]_ `cds add mta` does not add the `readiness-health-check-type` and `readiness-health-check-http-endpoint` properties to the `mta.yaml` any more.
- _[cds-dk@8.7.1]_ `cds add -p` correctly parses plugin-contributed options.
- _[cds-dk@8.7.1]_ `cds watch` correctly escapes its default ignored directories on Windows.
- _[cds-dk@8.7.1]_ `cds compile` correctly uses `--service=all` as its default.
- _[cds-dk@8.7.1]_ `cds add ias` correctly writes MTX sidecar config in combination with `cds add multitenancy`.
- _[cds-compiler@5.8.0]_ New CDL parser: parse all entity definitions using `projection on` without a
  terminating `;` if they had been accepted by the old parser, i.e. for compatibility,
  we gave up the idea of removing the existing special handling in this case.
- _[cds-compiler@5.8.0]_ Old and new parser: issue a warning for an ignored filter on the result
  of a function or method call.
- _[cds-compiler@5.8.0]_ CSN annotation expressions with value `true` for `=` were not checked.
- _[cds-compiler@5.8.0]_ Annotation `@Core.Computed` was not set for select items that are paths into structured parameters.
- _[cds-compiler@5.8.0]_ Annotation expression path rewriting has been improved.
  - Paths on foreign keys are rewritten.
- _[cds-compiler@5.8.0]_ for.seal:
  - References into structured parameters were incorrectly flattened.
  - Set `@cds.persistence.name` only on persistence-relevant things.
- _[cds-compiler@5.7.4]_ New CDL Parser (option `newParser: true`)
  - Improve code completion
  - Fix further edge cases in error recovery
- _[cds.java@3.7.2]_  Fixed performance problem in `cds-feature-change-tracking` when `Update` or `Upsert` statements are inspected for change-tracked elements.
- _[cds.java@3.7.2]_  Fixed a bug, causing statements using paths in the source to fail when deep authorization is enabled.
- _[cds.java@2.10.7]_ Fixed a bug in `cds-feature-change-tracking` causing the changed values for targets of associations not to be logged when the same type was referenced multiple times.
- _[cds.java@2.10.7]_ Fixed performance problem in `cds-feature-change-tracking` when `Update` or `Upsert` statements are inspected for change-tracked elements.
- _[cds4j@3.7.2]_ Fixed a bug, causing deep updates on projections with aliased keys to fail
- _[cds4j@2.10.7]_ SAP HANA HEX mode: fixed fallback to non-hex SQL on "HEX enforced but cannot be selected" errors on HANA QRC 4/2024
- _[cds4j@2.10.7]_ Fixed deep updates on projections with aliased keys
- _[cds4j@2.10.7]_ Fixed missing foreign key propagation in deep updates and upserts
- _[cds@8.7.2]_ Strip `Z` suffix of values of `cds.Timestamp` with OData type `Edm.DateTime`
- _[cds@8.7.2]_ Skip validation for mandatory fields in update scenarios for entities in draft activation
- _[cds@8.7.2]_ `cds.compile.to.yaml` escapes strings including colons if necessary
- _[cds@8.7.1]_ Loading of CAP Plugins implemented in Typescript
- _[cds@8.7.1]_ `Location` header if read after write returns empty result due to missing read authentication
- _[cds@8.7.1]_ Enable accessing `req.params` when handling requests on parameterized views
- _[cds@8.7.1]_ `cds.connect.to(class {...})` did not call the `init` function
- _[cds@8.7.1]_ Generic Paging/Sorting was run twice for non-draft requests
- _[cds@8.7.1]_ Service implementation loaded from `node_modules`



## January 2025

### Added {#jan-25-added}

- _[cds-dk@8.7.0]_ `cds watch` supports `--exclude` and `--include` options to specify additional paths to include or exclude. Alternatively, set `cds.watch.[include|exclude]` in your CDS config.
- _[cds-dk@8.7.0]_ `cds import` now updates configuration for Java projects (in `application.yaml` etc.)
- _[cds-dk@8.7.0]_ `cds import --config` now also accepts a string with flat key-value pairs (like `--config "credentials.destination=foo"`), which is easier to write than the current JSON string (`--config "{\"credentials\": {\"destination\": \"foo\"}}"`).
- _[cds-dk@8.7.0]_ `cds debug` now supports Java applications, both local and remote.
- _[cds-dk@8.7.0]_ `cds import` can now import an odata-V4 file with external dependencies(odata-V4 file). Dependencies has to be provided with -d/--dependencies option and must not have any external dependencies.
- _[cds-compiler@5.7.0]_ Analyze enum symbols like `#ENUM_SYMB`; support starts at the following places:
  - used as sole `default` value or `select` column expression
    if the element/column has a specified enum type, or
  - used as sole value (in parentheses) of an annotation assignment
    if there is a definition for that annotation having an enum type;
  - effects in compiler: complain if enum symbol is undefined
  - effects in the IDE with an upcoming version of cds-lsp when compiler option `newParser` is set:
    offer code completion and hover information,
  - effects in backends like `to.sql` (and potentially runtimes): enum symbol
    is replaced by corresponding string/integer value when appropriate.
- _[cds-compiler@5.7.0]_ for.seal: Process foreign key annotations similar to to.edm(x)
- _[cds.java@3.7.1]_ Instance based authorization can now reject CREATE/UPDATE with 400 via option `cds.security.authorization.instance-based.check-input-data`
- _[cds.java@3.7.0]_ Added possibility to enable default translations for validation error messages by setting `cds.errors.defaultTranslations.enabled` to `true`. These translated error messages avoid references to technical entity or element names and solely rely on the message's target.
- _[cds.java@3.7.0]_ If `cds.security.authorization.instance-based.customEvents` is disabled, instance based authorization can now reject `draftEdit` events with 403 instead of filtering via option `cds.security.authorization.instance-based.reject-selected-unauthorized-entity` as well.
- _[cds.java@3.7.0]_ Added debug logs when calculating object key for Kafka messages.
- _[cds.java@3.7.0]_ The goal `add` of the `cds-maven-plugin` supports adding ORD integration to a CAP Java project.
- _[cds.java@3.7.0]_ The exposed ORD endpoint of the CAP Java application is now also shown on the index page.
- _[cds.java@3.7.0]_ The dev-dashboard can now list all registered event handlers for application services.
- _[cds.java@3.7.0]_ Added capabilities to selectively remove messages from the current RequestContext's message container with the new method `Messages.removeIf(Predicate<Message>)`.
- _[cds.java@3.7.0]_ OData V4 protocol adapter now supports [implicit parameter aliases](https://docs.oasis-open.org/odata/odata/v4.02/csd01/part1-protocol/odata-v4.02-csd01-part1-protocol.html#InlineParameterSyntax) for function calls.
- _[cds.java@3.7.0]_ The goal `add` of the `cds-maven-plugin` supports adding a CAP Java Plugin, a Maven dependency and a Remote Service configuration to a CAP Java project.
- _[cds.java@3.7.0]_ Default outboxes can now be disabled per service by setting `cds.messaging.services.<key>.outbox.enabled` to `false`.
- _[cds4j@3.7.0]_ Allow to use predicates in the select list
- _[cds4j@3.7.0]_ Support typed refs via `CQL.entity(ENTITY, ref)`
- _[cds4j@3.7.0]_ Model reader: Support `$enclosed` property of associations
- _[cds4j@3.7.0]_ Support expanding filtered associations/compositions in runtime views
- _[cds@8.7.0]_ Allow usage of tar library (<https://www.npmjs.com/package/tar>) as a workaround to solve remaining issues by extension build on Windows. The tar library should be installed by app developers.
- _[cds@8.7.0]_ `cds.ql` supports limit with an optional offset, e.g. `limit(10, 5)`
- _[cds@8.7.0]_ Basic support for new built-in type `cds.Map`
- _[cds@8.7.0]_ Normalization of DateTime and Timestamp payloads in new OData adapter
- _[cds-mtxs@2.5.0]_ Running jobs time out after 90 minutes by default. This is configurable using `cds.requires.multitenancy.jobs.heartbeatAge` and  `cds.requires.multitenancy.jobs.heartbeatInterval`.
- _[cds-mtxs@2.5.0]_ Extension linter now optionally checks extensions including existing extensions. This can be enabled using

  ```jsonc
  "requires": {
    "cds.xt.ExtensibilityService": {
      "check-existing-extensions": true
    }
  }
  ```

  This is not available for the extension project build.
- _[cds-mtxs@2.5.0]_ Warning when using legacy options in `cds.mtx`.

### Changed {#jan-25-changed}

- _[cds-dk@8.7.0]_ `cds add mta` sets backend and MTX `parameters.instances` to a default of `1` for improved discoverability.
- _[cds-dk@8.7.0]_ `cds add sample` generates sample .ts files if the project is a TypeScript project
- _[cds-dk@8.7.0]_ `cds import` now doesn't need beta flag to populate default value for optional action and function parameters as compiler now supports default value for @Core.OptionalParameters.
- _[cds-dk@8.7.0]_ `cds add portal` now uses a more generic sample translated title instead of "Bookshop".
- _[cds-compiler@5.7.0]_ CDL parser: it is now recommended to set the option `newParser` to make the compiler
  use a CDL parser with a significantly smaller footprint (among other things).
  New features might only work if this option is set, see above.
- _[cds4j@3.7.0]_ `Modifier.selectListValue` (beta) now takes an `SelectableValue` instead of a `Value`
- _[cds4j@3.7.0]_ In-Predicate (`Value.in`) now takes a `Collection` instead of a `List`
- _[cds@8.7.0]_ Cleanse immutable values in draft modifications
- _[cds@8.7.0]_ Do not use compatibility mode of @sap/xssec 4, can be reverted with `cds.env.features.xssec_compat = true`
- _[cds@8.7.0]_ `cds.Float` is now correctly deprecated in `cds.builtin.types`.
- _[cds@8.7.0]_ Input provided via protocol adapter for elements annotated with `@cds.api.ignore` are rejected. Previously, they were ignored.

### Fixed {#jan-25-fixed}

- _[cds-dk@8.7.0]_ `cds add mta` in combination with `cds add ias` correctly adds all routes to the backend module.
- _[cds-dk@8.7.0]_ `cds add mta` adds the DB deployer module without prior installation of `@cap-js/hana`.
- _[cds-dk@8.7.0]_ `cds add mta` adds the npm-ci builder for nodejs modules to use fixed package-lock versions for dependency vendoring.
- _[cds-dk@8.7.0]_ `cds build --ws` will no longer require a `db/` folder in the root directory of the project.
- _[cds-dk@8.7.0]_ `cds import` doesn't throw error while importing odata-V4 file with com.sap.vocabularies.
- _[cds-compiler@5.7.2]_ Fix edge case in error recovery of the new CDL parser (option `newParser: true`)
- _[cds-compiler@5.7.0]_ CDL parser: doc comment parser was susceptible to ReDos
- _[cds-compiler@5.7.0]_ to.sql/hdi: Paths inside calculated elements that are simple functions were not properly rewritten.
- _[cds-compiler@5.7.0]_ for.odata: Re-add foreign keys in property `targetAspect` in the OData CSN.
- _[cds-compiler@5.7.0]_ to.edm(x): In annotation translation, by default map `SemanticObjectMappingAbstract` to `SemanticObjectMappingType` to avoid regressions.
- _[cds-compiler@5.7.0]_ to.cdl: Fix quoting of identifier `many` in `Composition of`/`Association to`
- _[cds-compiler@5.7.0]_ for.seal: Allow annotation paths to end in `many`-elements, not just scalar, like we allow in for.odata
- _[cds.java@3.7.1]_ Fixed a bug in Event Mesh feature, causing a wrong webhook url registration when property `cds.messaging.webhooks.url` starts with `https://`
- _[cds.java@3.7.1]_ Fixed a bug in Kafka feature, causing issues when a Kafka cluster has been created with public endpoints.
- _[cds.java@3.7.1]_ Bound function calls with implicit parameter aliases now support arguments with names equal to the names of the system query options without the `$`. They must be prefixed with `@`.
- _[cds.java@3.7.0]_ Fixed a bug in OData V4 adapter, causing `NullPointerException` when serializing complex types for requests containing `$select=*`.
- _[cds.java@3.7.0]_ Fixed a bug in OData V2 adapter, causing incorrect statements generation for analytical view requests, containing measures in `$orderby(<measure>)` not present in `$select`.
- _[cds.java@3.7.0]_ Fixed a bug, causing a message's longTextUrl to be lost, when converting the message to an exception.
- _[cds.java@3.7.0]_ Fixed a bug that caused a critical inconsistency to be accepted where tenants had multiple HDI containers.
- _[cds.java@3.7.0]_ Fixed a bug with DB connection pools which caused connection errors when a tenant is moved to another HANA instance.
- _[cds.java@3.7.0]_ Fixed a bug, causing handler annotations with type filters to prevent registration of the handler method if the type is not an interface and the service is outboxed.
- _[cds.java@3.7.0]_ Fixed a bug, causing `ApplicationService` calls within `@Before` handlers (e.g. originating from `@assert.target`) to unexpectedly throw an exception, if error messages were written before.
- _[cds.java@3.7.0]_ Fixed a bug in `cds-feature-change-tracking` causing the changed values for targets of associations not to be logged when the same type was referenced multiple times.
- _[cds.java@3.7.0]_ Deep authorization checks are not performed on filtered compositions anymore
- _[cds4j@3.7.0]_ SAP HANA HEX mode: fixed fallback to non-hex SQL on "HEX enforced but cannot be selected" errors on HANA QRC 4/2024
- _[cds4j@3.7.0]_ Fixed missing foreign key propagation in deep updates and upserts
- _[cds@8.7.0]_ Narrowed down peer dependency version of `express` to `^4`
- _[cds@8.7.0]_ OData, REST: Responses are only written in case that the response object is not already closed, which allows responding to requests directly in custom handlers.
  - Note: Responses sent directly are not transactionally safe! Further, subsequent errors can no longer be communicated to the client!
  - Note: Only respond directly in non-`$batch` requests!
- _[cds@8.6.2]_ Crash during requests to actions with parameter `array of <type>`
- _[cds@8.6.2]_ Instance based restriction using `is null`
- _[cds@8.6.2]_ Filtering of grouped result on default aggregate
- _[cds@8.6.2]_ Multipart batch response for failed changesets
- _[cds@8.6.2]_ Handling of invalid parentheses in OData property access
- _[cds@8.6.2]_ Resolve view: Mixins are not in elements of projection target
- _[cds@8.6.2]_ Input provided via protocol adapter for elements annotated with `@cds.api.ignore` can be rejected with `cds.features.reject_ignored: true`.
- _[cds@8.6.1]_ find draft root in authorization checks when entity has recursive compositions
- _[cds@8.6.1]_ `default-env.json` was not loaded anymore when in production mode.
- _[cds@8.6.1]_ i18n texts like `1` or `true` were returned as numbers, or booleans instead of strings
- _[cds@8.6.1]_ CSN files produced by `cds build` now again contain information to resolve handler files. That was broken in case of reflected/linked models set by e.g. plugins.
- _[cds@8.6.1]_ `average` aggregation used with draft enabled entities
- _[cds-mtxs@2.5.1]_ Schema evolution for the `t0` tenant with `lazyT0: true`
- _[cds-mtxs@2.5.1]_ Parallel extension requests for different tenants are now handled correctly.
- _[cds-mtxs@2.5.0]_ Better resilience when deleting tenants.
- _[cds-mtxs@2.5.0]_ HANA encryption parameters are now properly supported also for applications using Subscription Manager.
- _[cds-mtxs@2.5.0]_ Limit check for field extensions now correctly sums up all separately added fields.
