Execution Layer for Odoo
The adversarial test suite.
The Execution Layer is proven by an adversarial failure suite that attacks it with the exact failures it is meant to catch, on Odoo 19 Community and Enterprise. This is what it covers and how you run it on your own staging.
We do not ask you to trust the Execution Layer. We ask you to attack it. The suite that ships with the product is the same set of cases we gate our own releases on: a reconciler fails our build if the shipped catalogue and the release gate ever diverge, so what you run is what stands between our code and a release. Run it on your own staging and watch the layer refuse, roll back, and receipt correctly before you trust it in production.
Running it
Point the suite at a staging database and read your own report. It refuses to run against a non-staging database. Both editions are supported, and any case it cannot run on your stack, an Enterprise-only case on a Community install, for example, is reported as not run with the reason, never counted as a pass. A full run takes about eight minutes: every case does a full OAuth login as its own identity, so the run exercises the real authentication path, not a shortcut.
# Communityci/run.sh community all
# EnterpriseODOO_ENTERPRISE_PATH=/path/to/enterprise ci/run.sh enterprise allWhat the cases cover
The suite exercises the failures that a connector without these controls would miss:
- Partial-write refusal: a write that would half-apply is refused, not partially committed.
- Retry after timeout: the same idempotency key executes once, never twice.
- Batch rollback: an item failing at position k rolls back the whole batch.
- The wrong John: an ambiguous reference is caught and refused with candidates.
- Truncation flags: a bounded read reports how much it left out.
- Escalation attempts: calls against structurally blocked models are refused.
- Audit tampering: edits and deletes of the audit through
sudo(), raw SQL, and server actions are blocked or made evident. - Denial survives rollback: a refused action is still recorded when the business change rolls back.
- OAuth abuse: PKCE downgrade, redirect tampering, and token replay are rejected.
- Injection in record text: content that reads like an instruction is stored and returned as inert data.
- Approval staleness: a payload changed after approval is refused.
- Subscription honesty: the dashboard reports the real Context Layer state, and nothing ever blocks on a lapsed subscription.
The runner ships with the product
The packaged runner is built: python -m nanti_suite run … executes the suite against your own
Odoo 19 staging database and writes an HTML, Markdown, and JSON report. It refuses to run against
a database that does not look like staging, and any case it cannot run on your stack is reported
as not run, with the reason, never as a pass. It ships with the product.
Next: compatibility and versions.
