Worked example Native substrate Govern RPA & workflow agents →

Govern n8n agentic workflows with GOVENANT

Use GOVENANT and n8n together — govern the RPA & workflow agents, not the framework. From bot logs to proof of delivery.

The use case

An automation CoE runs 1,200 n8n and UiPath workflows — invoicing, onboarding, data sync — increasingly with an LLM step in the middle.

The challenge

Execution logs show jobs “succeeded,” but success means the job ran, not that the downstream effect happened. As bots turn agentic, the audit trail that made RPA trustworthy is quietly eroding — and exceptions are a number the dashboard omits.

What the record reveals

Runs map to duty-runs, schedules to duties, exceptions to an honest miss log. The sweep — read-only over the execution store — finds a nightly sync that “succeeded” for weeks while writing zero rows, and puts the exception rate back on the board where it belongs.

How it maps

The substrate: The execution record: runs → duty-runs, schedules → duties, exceptions → an honest miss log. Append-only engines are nearly there already.

The path — Native substrate: The platform already produces records that map to the standard — the sweep reads what it already keeps.

GOVENANT shapen8n source
Action ledger / duty-runexecution_entity (Postgres) — every run n8n already records
Dutyworkflow_entity — each workflow is a recurring responsibility
Independent watchdogThe n8n error-workflow — writes misses independently of the run’s self-report
Verified outcomesuccess flag AND the downstream effect (rows written, record changed) — add the effect check where the workflow’s real result can be verified
MissFailed, unfinished, or “succeeded-but-wrote-nothing” executions
mapping.sql — read-only views over n8n’s Postgres (excerpt)
-- n8n already records every run. Workflows are duties; executions are duty-runs.
create or replace view gov_duty_run as
select w.name as duty, e.id as run_ref, e."startedAt" as ran_at,
       (e.finished and e.status = 'success') as ran_ok
from execution_entity e
join workflow_entity w on w.id = e."workflowId";

-- Activity vs. delivery per workflow (join your effect check for true 'delivered'):
create or replace view gov_delivery_summary as
select duty, count(*) as runs,
       count(*) filter (where ran_ok) as ran_ok
from gov_duty_run group by duty;

Run it

  1. Point read-only (SELECT-only) credentials at n8n’s Postgres — the sweep never writes.
  2. Create the views in mapping.sql; enable the error-workflow so misses are logged independently.
  3. Add an outcome check where a “success” can still write nothing — that gap is the performed-autonomy trap.
  4. Run the sweep; review delivery vs. activity and the miss log with the automation CoE.

The substrate shapes and acceptance tests are open (CC BY 4.0): developer integration · the portable schema.

What you can claim

Platforms with append-only execution history can reach the standard’s Tier-1 substrate requirements faster than any other class — for some engines the ledger requirement is already met. Wear the Built-on badge with a real mapping; publish levels to the registry with probe logs; claim nothing the record can’t reproduce.

Status — kept honest

This example is a worked mapping with read-only code — adapt the object/field names to your environment. It will never say “supported” or “certified” before a working example lands and its record is public — progress lives in the GitHub issue. Holding our own examples to the standard’s claims discipline is the product.

All sample projects · Govern RPA & workflow agents · All integrations · Run the audit