Skip to main content
← Back to blog

What a signed receipt can and cannot evidence under DORA, NIS2 and the AI Act

2026-10-02. Legal review pending — this is the author's reading of the texts, not legal advice.

1. The obligations

DORA, Article 9(4)(e) — Regulation (EU) 2022/2554 (https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng): financial entities need a documented ICT change-management process under which changes to ICT systems are recorded, tested, assessed, approved, implemented and verified in a controlled manner. The process must be approved by the appropriate lines of management and include specific protocols. "Recorded" is one of six separate requirements.

Article 17 of Delegated Regulation (EU) 2024/1774 (https://eur-lex.europa.eu/eli/reg_del/2024/1774/oj/eng) sets the minimum elements of those procedures, for changes to software, hardware, firmware components, systems or security parameters:

Article 12 of the same Regulation requires change-management events to be logged, the logs protected against tampering, deletion and unauthorised access, and system clocks synchronised to a documented reliable time source.

AI Act, Articles 12 and 26 — Regulation (EU) 2024/1689 (https://eur-lex.europa.eu/eli/reg/2024/1689/oj/eng): Article 12(1) requires high-risk AI systems to technically allow automatic event logging over their lifetime. Article 12(2) says logging must enable the recording of events relevant to identifying risk situations or substantial modifications, post-market monitoring, and monitoring operation under Article 26(5). Article 12(3) adds minimum log content for remote biometric identification systems (Annex III, point 1(a)).

Article 26 assigns deployer duties: human oversight by natural persons with the necessary competence, training, authority and support (26(2)); monitoring operation in line with the instructions for use and, where relevant, informing the provider (26(5)); and keeping system-generated logs under the deployer's control for a period appropriate to the intended purpose, at least six months unless Union or national law provides otherwise (26(6)).

These concern high-risk systems. As amended by Regulation (EU) 2026/1744 (https://eur-lex.europa.eu/eli/reg/2026/1744/oj/eng), they apply from 2 December 2027 to systems that are high-risk under Article 6(2) and Annex III, and from 2 August 2028 to those under Article 6(1) and Annex I. Check the classification and any exception before treating them as applicable.

NIS2, Article 21(2)(e) — Directive (EU) 2022/2555 (https://eur-lex.europa.eu/eli/dir/2022/2555/oj/eng): security in the acquisition, development and maintenance of network and information systems, including vulnerability handling and disclosure. The English text of the Directive does not use the term "change management".

Implementing Regulation (EU) 2024/2690 (https://eur-lex.europa.eu/eli/reg_impl/2024/2690/oj/eng), Annex point 6.4, does — but only for the entity types it lists: DNS service providers, TLD name registries, cloud computing, data centre and content delivery network providers, managed service and managed security service providers, online marketplaces, online search engines, social networking platforms, and trust service providers. Not NIS2 entities generally. Point 6.4.2 covers releases, modifications, emergency changes and configuration changes: documented and, based on the risk assessment, tested and assessed before implementation. Under 6.4.3, if an emergency prevents the regular procedure, the entity documents the outcome and why the procedure could not be followed. That is not DORA's after-the-fact assessment and approval.

2. How practice answers it — in layers

The organisation's own change process carries the weight: independent approval, test records, fall-back and an emergency path, usually spread across an ITSM ticket, code review and repository configuration.

A machine gate blocks a merge only on a path where branch protection or a ruleset requires the check and bypass is closed. That is evidence about the configured path. It does not show that no other path could carry an unauthorised change, nor that a change was implemented or verified.

A signed record bound to a hash of the evaluated change set can support a record of what was authorised, if the recipient matches the hash to the change set it holds. Offline verification checks the signature against a pinned key snapshot. It cannot establish current key trust, revocation, or that the issuer's clock was accurate.

For the AI Act, the system's logging capability and the deployer's oversight, monitoring and retention are separate duties. An external change gate does neither.

3. CodeRifts: what it does

On a boundary that requires it, a contract change does not cross without a signed grant for that exact change set. CodeRifts reads the diff of the contracts a pull request touches — OpenAPI, GraphQL, protobuf, AsyncAPI and MCP tool manifests, together as one change set — classifies what breaks (a removed field, a parameter that became required, a narrowed enum, a tool whose description gained an instruction), and answers with a decision and a machine instruction. On GitHub, a required check refuses the merge until a receipt for that diff verifies on the runner; the receipt names the operation it was granted for (merge, deploy, publish or a tool call) and expires. Analysis is free and needs no account; the check is on the GitHub Marketplace (https://github.com/marketplace/actions/coderifts-contract-gate).

What it signs, and what it does not

A CodeRifts receipt carries six fields: input_fingerprint (the hash of the evaluated change set, which the recipient must match to the request it holds), operation (supplied by the caller), decision, execution_action, expires_at and key_id. The open verifier checks it offline against a pinned key snapshot — no account, no call to us. A decision is an authorisation answer for the submitted request, not an observation that anything was merged, deployed or published.

It may support the "recorded" part of DORA Article 9(4)(e). Under NIS2 it is at most supporting evidence for Article 21(2)(e); for an entity under Implementing Regulation 2024/2690 it might sit next to the evidence for point 6.4. The fields do not become stronger evidence because a text is less detailed.

It does not:

Measured today: the open verifier (https://coderifts.com/verify/) and a required check on our own demo repository that blocks on both contexts — a configuration fact we re-measure before calling it enforced. Shipped, but not installed by anyone else: a Kubernetes admission verifier and an agent tool guard. No external repository runs the check yet.

4. How to read it

In a DORA change file, a receipt is one line: what was authorised, for which hash, until when and under which key. Next to it belong the test record, an approver in the independent function, the fall-back plan, the emergency path if one was used, and — where the merge path is actually closed — the required-check configuration. The receipt does not stand in for any of those.

The short page: https://coderifts.com/docs/evidence/record-keeping/