Skip to content
Sign inBook an audit pilot
Open menuClose menu

Sample change evidence report

What your auditor receives for two repositories and one quarter: how every merged change got in and what it does, with every fact labelled with how it was obtained.

Fictional organisation and data, for illustration only.

Coming in v1.4.0Code evidence is live today. Change records and process evidence arrive in v1.4.0. The last section shows later layers, marked Planned.

Fictional organisation and data, for illustration only.

toevan

Change evidence report

Merged changes

Northwind (sample data) · 2 repositories · protected branches · 15 Jul to 13 Oct 2026

Prepared for
[Auditor firm]
Repositories
northwind/payments-api · northwind/ledger-service
Changes in scope
146 pull requests merged into protected branches and 2 direct pushes, captured from GitHub as they happened.
Records
4,152 sealed records: change records, control-change events and code checks. Signatures verified at generation.
Engine and rule sets
toevan-engine 0.9.4 · Clean Architecture 1.4.0 · Security Essentials 2.14.0
People
Shown as digests of their GitHub accounts in sealed records. Waivers name their requester and approver.
Generated
13 Oct 2026, 11:42 UTC by [name]
Report hash
sha256:3f9a…c21e

This report is evidence for the auditor to assess. Toevan does not express an opinion on whether controls are designed or operating effectively. Every fact states how it was obtained. Controls outside Toevan’s coverage are listed in the scope section and remain the organisation’s responsibility.

1. Summary

Process evidence · how changes got in

Merged pull requests146into protected branches
Independent approval143 / 1463 deviations
Direct pushes2no pull request, flagged
Control changes31 opened a 29-minute gap

Code evidence · what the changes do

Pull requests checked146 / 146gate verdict before merge
Code rules passing11 / 12production code, latest release
Analysis coverage97.4%gate 95% · 0 runs below
Approved waivers10 expired in period

What was captured

Toevan captured the merges into protected branches, the changes to review rules, the bypasses and the direct pushes in both repositories as GitHub reported them, and sealed each one as it happened. In the period, 146 pull requests were merged and 2 commits were pushed directly. Reported + sealed

Items for attention

  1. Two direct pushes to payments-api/release/v1 on 19 Sep, inside a 29-minute window when the review requirement was switched off.Process
  2. Three pull requests merged without approval by someone other than the author: two in ledger-service before its review rule existed, one by admin bypass during the 19 Sep window.Process
  3. Rule secret-detection-high fails in production code (1 finding), covered by an approved waiver until 20 Dec.Code, Waivers

2. Scope, provenance and control mapping

How each fact was obtained

Recomputed
Toevan computed it from the code or git history itself.
Re-perform it from the same inputs and get the same result.
Reported + sealed
GitHub reported it; Toevan captured it at the event and signed it.
Rely on it as far as you rely on GitHub. Any later change is detectable.
Declared + sealed
The organisation declared it, such as a change to what is checked; Toevan signed the declaration and its history.
See who declared what, when, and every later change.
Toevan record, not sealed
Held in Toevan’s database but not sealed in the ledger, such as a waiver today. Nothing protects it by a signature.
Treat it as Toevan’s statement, and ask the organisation for the approval behind it.
Consumed
Taken from another system’s signed record, such as build provenance, and linked by commit or digest. Planned.
Check the original record independently.
Not captured
No reliable source was available. Toevan does not infer it.
Obtain it from the organisation by other means.

Evidence and the controls it relates to

EvidenceRelevant controlsObtained
Approval, independent review, approval on final commitDORA RTS 2024/1774 Art. 17 (planned) · SOC 2 CC8.1 · ISO 27001 A.8.32Reported + sealedRecomputed
Required checks at merge; review rules in force; rule changes and bypassesDORA RTS 2024/1774 Art. 17 (planned) · SOC 2 CC8.1 · ISO 27001 A.8.32Reported + sealed
Direct pushes to protected branchesSOC 2 CC8.1 · ISO 27001 A.8.4, A.8.32Reported + sealed
Code rules: architecture boundaries, secure coding, dependenciesISO 27001 A.8.25, A.8.28 · SOC 2 CC8.1Recomputed
Waivers and scope changesExceptions to the rules aboveToevan record, not sealed

Not covered by this report

  • Access reviews, joiner and leaver processesOrganisational
  • Runtime monitoring, incident responseOrganisational
  • ICT third-party risk, physical securityOrganisational
  • Deployments made outside GitHubOrganisational
  • Changes made outside GitHub, such as direct database or console changesOrganisational

3. Process evidence

How the 146 pull requests merged in the period were reviewed and merged, captured from GitHub at the moment of each merge.

CheckResultObtained
Approved by someone other than the author143 / 146 · 3 deviationsRecomputed
Approval given on the final commit137 / 143 approved · 6 approved an earlier commitReported + sealed
Required checks passed at merge146 / 146Reported + sealed
Commit signatures verified by GitHub144 / 146Reported + sealed
Review rules in force recorded at merge146 / 146Reported + sealed

Deviations: merged without independent approval

PRMergedAuthorRule in force at mergeRecord
ledger-service #38824 Jul4be1…09c2None (rule added 02 Aug)rec_51b9e20
ledger-service #39129 Julc58f…71d0None (rule added 02 Aug)rec_6e07a3d
payments-api #190319 Sep 14:122a6e…f915Switched off 14:02 to 14:31 (admin)rec_0c88f14

Changes to the controls themselves

When (UTC)ChangeByRecord
02 Aug 09:14Review rule applied to ledger-service: 2 approvals, required checks9d07…e3a4rec_8a2f61c
19 Sep 14:02Review requirement switched off on payments-api/release/*2a6e…f915rec_3f10b9a
19 Sep 14:31Review requirement switched back on2a6e…f915rec_3f10c02

Direct pushes without a pull request

When (UTC)BranchCommitByRecord
19 Sep 14:09payments-api/release/v17c1e0a22a6e…f915rec_7c1e0a2
19 Sep 14:22payments-api/release/v191d4b3f2a6e…f915rec_91d4b3f

Control changes and direct pushes are captured as events when they happen, so a gap between snapshots can’t go unseen. People are shown as digests of their GitHub accounts; independence is computed from the account ids. Reported + sealed

4. Code evidence

What the code does, checked by reading the code itself on the exact merged version. Rules marked failing apply to production code; documentation and test fixtures are out of scope (see Waivers).

Clean Architecture 1.4.0 · design rules

RuleWhat it checksLatest releaseFindings
layer-dependency-handlers-to-dbRequest handlers never call the database directlyPassing0
service-boundariesServices reach each other only through their public interfacesPassing0
role-placement-policyAbstractions and their implementations sit in the layers the architecture assignsPassing0
layer-dependency-policyA cross-layer dependency is allowed only where the policy lists itPassing0

Security Essentials 2.14.0 · secure coding

RuleWhat it checksLatest releaseFindings
secret-detection-highNo high-confidence credential hardcoded in source or configFailing1 · waiver
no-committed-secret-filesNo .env, private key or keystore committedPassing0
vulnerable-dependencyNo dependency with a known high or critical vulnerability (OSV.dev)Passing0
encryption-at-restStorage and database connections encryptedPassing0
iac-network-segmentationNo public exposure of internal servicesPassing0
iac-encryption-policyStorage encryption toggles enabled in infrastructure codePassing0
iac-access-controlNo wildcard access policiesPassing0
sensitive-unsafe-log-flowSensitive data does not reach logging sinksPassing0

How far the analysis reached

RepositoryCoverage on latest releaseGateRuns below gate in period
payments-api97.9%95%0
ledger-service96.6%95%0

Coverage is the share of the repository’s production source files that the code index parsed at the indexed commit. Below the gate, a run is flagged rather than recorded as passing. Engine and rule-set versions are recorded in every record, so any result can be re-run. Recomputed

5. Waivers and scope changes

Every decision that changed what was checked, or accepted a known deviation.

DateChangeRequested · approvedReasonRecord
20 SepWaiver: secret-detection-high, payments-api/config/sandbox.yaml (exact file), expires 20 Decc58f…71d0 · 4be1…09c2Sandbox key with no production access; rotation scheduledrec_b30e7c5

No waivers expired or were revoked in the period. Requester and approver are different accounts for every entry. Waivers are Toevan records that are not sealed in the ledger. Toevan record, not sealed

Rule-set versions used in the period

Rule setVersionFromChange
Clean Architecture1.4.015 Jul (whole period)No change
Security Essentials2.13.015 JulNo change
Security Essentials2.14.012 AugRules updated by Toevan

6. Change records

One change in full, as the auditor sees it when sampling. All records are in the CSV export, and each signed envelope is on the evidence branch in the organisation’s repository.

rec_5b81d4e

The change

Pull request
payments-api #1921 · Add tenant check to refund handler
Reported + sealed
Author · merged by
4be1…09c2 · 9d07…e3a4 · 13 Oct 2026, 10:41 UTC into main
Reported + sealed
Merge commit
5b81d4e
Reported + sealed
Deployed to production
13 Oct 2026, 11:20 UTC · production (GitHub’s flag) · rec_9e41b07
Reported + sealed

Process evidence

Approvals
9d07…e3a4, c58f…71d0 · both on final commit e81b2d0
Reported + sealed
Independent of author
Yes, by GitHub account id
Recomputed
Required checks
ci/test ✓ · ci/lint ✓ · toevan/gate ✓
Reported + sealed
Rules in force
main-protection: 2 approvals, required checks, signed commits
Reported + sealed
Commit signature
Verified by GitHub
Reported + sealed

Code evidence

Design rules
4 / 4 passing
Recomputed
Secure coding
7 / 8 passing · secret-detection-high under waiver rec_b30e7c5
Recomputed
Coverage · engine
98.1% (gate 95%) · toevan-engine 0.9.4
Recomputed

Path to productionPlanned

Copied to release
Matched to the reviewed original by content
Recomputed

Seal

Signature
ECDSA P-256 · DSSE envelope · keyid 8c1f…e0a2
Previous record
rec_b7e21f0
Public anchor
Sigstore’s public Rekor log · built in, opt-in per organisation

Further records (sample)

RecordChangeIndependent approvalCode rulesSealed (UTC)
rec_b7e21f0payments-api #1918Yes11 / 12 · waiver13 Oct 09:58
rec_9d41e02ledger-service #412Yes12 / 1209 Oct 16:21
rec_0c88f14payments-api #1903No · admin bypass12 / 1219 Sep 14:12
rec_7c1e0a2direct push 7c1e0a2No · no PR12 / 1219 Sep 14:09

7. How to check this report

You don’t need to trust Toevan or the organisation. Choose the route that fits your role. Only the third needs any tools.

CheckWhat it provesWhat it doesn’t prove
Record is genuine and unchangedThe record was signed with Toevan’s published key and hasn’t been altered since. The hash chain shows none was removed.That the facts inside it are correct: the two checks below cover that.
Approval was independentApprover and author are different GitHub accounts, recomputed from the account ids in the record.That the review itself was adequate.
Code result is reproducibleThe same commit, engine version and rule-set version give the same result.That the rules cover every risk in the code.
  1. In the organisation’s app

    Read-only auditor access, no repository access

    • The organisation invites you with the Auditor role: read-only access to the evidence list, the exports and the reports.
    • Verify now re-checks the whole ledger, the signatures and any transparency log proofs in the app.
    • You open nothing else: repositories, code and findings are refused.
  2. Watch the organisation run it

    Screen share or on site

    • You choose the samples at the time of the session; an engineer runs the checks while you watch.
    • Verification of each record you sampled: chain, signature, unchanged.
    • Author and approver accounts for each sample, compared on screen.
  3. Run it yourself

    IT audit specialists with temporary read access

    • Use git, openssl and the toevan command, which Toevan provides on request. No Toevan account is needed.
    • Check that a copy’s branch tips match the tips recorded in the report.
    • Run the commands in the appendix and compare against the report.

8. Planned additionsPlanned

Later layers of the evidence chain. They are not in v1.4.0 and nothing in this report depends on them. Each says how its facts will be obtained.

  • Designated production branches (v1.4.1)

    Branches the organisation designates as production, such as a release branch, each designation declared and sealed with every later change. Each gets the same population as the default branch: every commit listed straight from git and matched to a record or flagged.

    Declared + sealedRecomputed
  • Copied fixes matched by content

    A fix reviewed on main and copied to a release branch gets a new commit ID. Toevan will match it to the reviewed original by content (git patch-id), and flag copies whose content changed.

    Recomputed

Appendix · Commands for technical reviewers

The commands an engineer runs for you, or you run yourself.

Check that a record is genuine and unchanged

$ openssl dgst -sha256 -verify toevan.pub \
    -signature sig.der \
    pae.bin
Verified OK

$ toevan audit verify --path evidence-clone --pub-key toevan.pub
✓ chain intact · 4,152 records
✓ signatures verify under the published key

The two files come out of the record’s DSSE envelope through the sed and printf lines printed on the evidence branch: the signature, and the exact bytes that were signed. Expect “Verified OK” for every record you check. Any failure means the record was altered or not signed with the published key.