Skip to content

test(e2e): rewrite audit journal tests against the real format and gate them in CI - #624

Merged
Destynova2 merged 1 commit into
mainfrom
fix/e2e-audit-tests
Sep 27, 2026
Merged

Destynova2 merged 1 commit into
mainfrom
fix/e2e-audit-tests

Conversation

@Destynova2

Copy link
Copy Markdown
Contributor

make test-audit hung for over 40 minutes and had never passed: A1-A11
expected one age-encrypted file per entry decryptable by RSSI/DPO
personas from crypto/rssi.key, a design that was never built (the keys
did not even exist), and A12/A13 re-read the whole 300 MB journal
spawning python per line.

The audit journal is a signed, hash-chained plaintext JSONL file. The new
suite checks that contract: files and key permissions, ECDSA P-256
signature of each entry over the hash the next entry chains to (window
of 200), tamper rejection, EU AI Act fields on RESPONSE entries and the
NC/C1/C2 classification levels. It runs in seconds and is added to the
CI E2E job after the hurl suites.

advanced/S4 read the last journal line, which can be a reload entry; it
now checks the latest RESPONSE entry. The age tooling, crypto/ generator
and RTM rows for the unbuilt design are removed.

Validation (local podman pod, fresh audit dir)

  • make test-hurl 9/9 → make test-audit 6/6 in ~5 s (previously hung >40 min, never passed)
  • make test-advanced 3 runs: 10/10, 9/10+1 skip (S5 HIT flow, pre-existing skip), no S4 failure
  • shellcheck, actionlint
  • The E2E job on the push to main after merge exercises the new CI step.

…te them in CI

make test-audit hung for over 40 minutes and had never passed: A1-A11
expected one age-encrypted file per entry decryptable by RSSI/DPO
personas from crypto/rssi.key, a design that was never built (the keys
did not even exist), and A12/A13 re-read the whole 300 MB journal
spawning python per line.

The audit journal is a signed, hash-chained plaintext JSONL file. The new
suite checks that contract: files and key permissions, ECDSA P-256
signature of each entry over the hash the next entry chains to (window
of 200), tamper rejection, EU AI Act fields on RESPONSE entries and the
NC/C1/C2 classification levels. It runs in seconds and is added to the
CI E2E job after the hurl suites.

advanced/S4 read the last journal line, which can be a reload entry; it
now checks the latest RESPONSE entry. The age tooling, crypto/ generator
and RTM rows for the unbuilt design are removed.
@Destynova2
Destynova2 enabled auto-merge (squash) September 27, 2026 17:51
@Destynova2
Destynova2 merged commit 5d6c624 into main Sep 27, 2026
42 checks passed
@Destynova2
Destynova2 deleted the fix/e2e-audit-tests branch September 27, 2026 18:01
Destynova2 added a commit that referenced this pull request Sep 27, 2026
## 🤖 New release

* `grob`: 0.36.119 -> 0.36.120

<details><summary><i><b>Changelog</b></i></summary><p>

<blockquote>

##
[0.36.120](v0.36.119...v0.36.120)
- 2026-09-27

### Other

- compose GeminiProvider from ProviderBase and split the two oversized
modules ([#625](#625))
- *(e2e)* rewrite audit journal tests against the real format and gate
them in CI ([#624](#624))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant