We then upgraded our DLT platform to DAML Connect 1.14. We kept the same application, with the same daml.yaml file. However, the same workflow resulted in error:
io.grpc.StatusRuntimeException: ABORTED: Command interpretation error in LF-DAMLe: Contract could not be found with id ContractId(00c89a27a7d5af4d8d98ef126354b1b1bba4067a0de943445481a6dabd4ddd4596). Details: N/A.
This change was not mentioned in the release notes and we came across it by chance as it broke one of our backend systems. We also attempted to set the build-options to force target 1.11, however, we still received the new error code.
I was wondering whether we can expect more changes of this nature or this a bug as it causes us a lot of problems with backwards compatibility.
The error codes (ABORTED, INVALID_ARGUMENT) are part of the Ledger API as they are reported as structured information on completions. As such, the desired state would be to keep them stable and fully backward compatible.
As you can see from @Gary_Verhaegen 's quote above, we have made a few small changes in the past to get rid of some of the worst inconsistencies already, but our API specs on error codes are still not that tight.
You’ll see in the “What’s next” section of the release notes that it’s a topic we are going to try to address, which means breaking changes to error codes. But we will do so in a “big bang” approach - clearly specifying the error codes that occur under which circumstances, and how client applications should react to them.
So in conclusion, they should be stable, but they are not because we didn’t specify them carefully enough for API 1.0.
What option did you set exactly? The build-options entry can be used to set the Daml LF version (i.e. the version of the compiled bytecode emitted by the compiler), but I would not expect that to have any bearing here. To actually run an older version of Daml, you need to explicitly install and run that one. If you run Daml components through the daml assistant on the cli you can set the DAML_SDK_VERSION environment variable to specify a Daml version outside of a project, or set the sdk-version entry in your daml.yaml if you’re inside a project.