Advisory Report
Across 9 days with traffic, the record shows 45 actions by this agent; 93.3% could be judged by the policy; it would have refused 6 and asked a person 11 times (4 distinct questions). Nothing is recommended for enforcement until the review in §4 comes back.
1 · What we could see
| Why an action could not be judged | Actions |
|---|---|
| action not declared in the registry | 3 |
Enforcement over the judged share is a control with exactly this hole in it — worth deciding about deliberately, not discovering later.
2 · What the policy would have done
| Rule | Meaning | Actions | Count |
|---|---|---|---|
gate:precondition | a required pre-check did not pass | pay | 9 |
gate:valueLimit | over the declared value limit | pay | 6 |
gate:requireApproval | requires a named approver | updateBankAccount | 2 |
Of 42 judged actions: 25 would have been allowed, 6 refused, 11 sent to a person.
These are the settle reports — what actually happened to the effects that went through. Only actions with an external effect report one, so reads and record changes do not appear in this count; and because nothing was enforced, effects the policy would have refused or held ran and settled with the rest.
3 · What it would have cost in attention
The busiest question — Invoice.pay (NO_MATCHING_PO) — accounts for 7 of those asks on its own.
The first number is the staffing one. A repeatable check asked twenty times is one queue item; an approval is a separate decision each time, because two payments are two payments.
4 · What the policy would have got wrong
How to complete this: print this page and tick one box per line, or return the rulings in writing keyed as gate:valueLimit @ Invoice.pay. “Ordinary work” means the policy would have stopped something that should have happened.
| Would have refused | Meaning | Count | Ordinary work | Correctly refused | Unsure |
|---|---|---|---|---|---|
gate:valueLimitInvoice.pay | over the declared value limit | 6 |
5 · What the agent could reach
Some rules judge not whether an action may run but how much a read returns — which rows of a table the agent gets to see. This section measures that narrowing: what the agent received, against what a scoped policy would have let it receive.
Across 14 scoped reads the agent received 1680 row-results; scope would have withheld 560. Row-results, not distinct rows — this report keeps no row values to tell them apart, deliberately. The widest single read (Invoice.read) alone would have lost 40.
The rows it read are not rows it misused. What was done with them is not in our records.
6 · What your own systems already catch
7 · Disclosures
- No kill order was used. Nothing here was refused by us.
- Every record behind this report carries
enforcement: advisory; the generator refuses figures that span modes rather than averaging them.
8 · What this measurement cannot tell you
These numbers describe what your agents attempted while nothing stopped them. Under enforcement each agent would have seen the gateway's answer and done something else next — retried differently, asked a person, given up. The counts are the truth about this window, not a simulation of an enforced one, and the direction of the difference is not knowable in advance.
This window is also just this window — one month-end, one set of holidays — and it measures the policy we wrote together, not the product in general.
9 · What we would turn on first
- Nothing is ready to enforce yet — not because the rules failed, but because §4's review has not happened. A rule with catches and no verdicts is a rule whose false positives have not been looked for. Completing the worksheet is the single step that unlocks this section.
- The approval load is measured: 4 questions over the window (§3). Whether the role that would answer them can absorb that is a staffing judgment this report informs but cannot make — the role is named in the policy beside this report.
- Coverage work before or alongside any of it: action not declared in the registry (3). Turning enforcement on beside an unjudged path moves the traffic, not the risk.
- Advisory continues to run through any of these steps — every change can be measured against live traffic the same way this report was.
Appendix — where each number comes from
| Figure | Audit query |
|---|---|
| Actions observed | count(*) where agent = <agent> |
| Judged / not judged | count(*) group by coverage |
| Cause of unjudged | coverage='unjudged' group by rule / advised.rule |
| Would have refused | coverage='judged' and advised.decision='deny' |
| Would have asked a human | coverage='judged' and advised.decision='hold' |
| Distinct questions | count(distinct advised.dedupeKey) over the holds above |
| Batches refused whole | distinct (correlationId, batchAdvice.failingIndex) |
| Items refused | sum(itemAdvice.wouldRefuse) |
| Rows read / narrowed | sum(scopeWouldRemove.returned / .removed) where measured |
| Kill orders | rule like 'kill:%' |
| Kill store unreachable | rule = 'kill-unavailable' |
Every figure is reproducible from your own audit export with these queries. A report you cannot check is a brochure.