Audit decision flow integrity
Audit management decision histories for unresolved work, state cycles, unowned dwell and excessive lead-time tails using immutable event sequences, whole-decision bootstrap uncertainty, simultaneous flow-level gates and state bottleneck diagnostics.
What it's for
Makes invisible management queues measurable: leaders see where decisions remain open, loop, lose ownership, or accumulate tail delay before governance debt becomes delivery debt.
What you give it
Every tool is a pure function: it computes from what you pass it and reads nothing on its own. Inputs split into evidence you supply from your connected systems, calibration your team owns, and numerical controls that affect precision but never the result's meaning.
| Field | Type | Role | Required |
|---|---|---|---|
| bootstrap_draws | integer ≥ 200, ≤ 20000 | Numerical control | Optional |
| confidence_level | number ≥ 0.5, < 1 | Your calibration | Optional |
| events | array of objects (10 fields) ≥ 20 items | Evidence | Yes |
| max_detail_rows | integer ≥ 1, ≤ 500 | Numerical control | Optional |
| maximum_cycle_fraction | number ≥ 0, ≤ 1 | Your calibration | Optional |
| maximum_lead_time_hours_p90 | number ≥ 0 | Your calibration | Optional |
| maximum_unowned_dwell_fraction | number ≥ 0, ≤ 1 | Your calibration | Optional |
| maximum_unresolved_fraction | number ≥ 0, ≤ 1 | Your calibration | Optional |
| minimum_decision_count | integer ≥ 5, ≤ 100000 | Your calibration | Optional |
| seed | integer ≥ 0, ≤ 2147483647 | Numerical control | Optional |
Each events
record
| Field | Type | Required |
|---|---|---|
| decision_id | string (non-empty) | Yes |
| dwell_hours | number (≥ 0) | Yes |
| flow_id | string (non-empty) | Yes |
| id | string (non-empty) | Yes |
| owner_assigned | boolean | Yes |
| owner_role | string (non-empty) | Yes |
| sequence | integer (≥ 0, ≤ 1000000) | Yes |
| state | string (non-empty) | Yes |
| terminal | boolean | Yes |
| weight | number (> 0) | Yes |
{
"bootstrap_draws": 300,
"confidence_level": 0.8,
"events": [
{
"decision_id": "product-decision-00",
"dwell_hours": 10,
"flow_id": "product-approval",
"id": "product-approval-00-0",
"owner_assigned": true,
"owner_role": "product-owner",
"sequence": 0,
"state": "proposed",
"terminal": false,
"weight": 1
},
{
"decision_id": "product-decision-00",
"dwell_hours": 20,
"flow_id": "product-approval",
"id": "product-approval-00-1",
"owner_assigned": true,
"owner_role": "tech-lead",
"sequence": 1,
"state": "technical-review",
"terminal": false,
"weight": 1
},
{
"decision_id": "product-decision-00",
"dwell_hours": 5,
"flow_id": "product-approval",
"id": "product-approval-00-2",
"owner_assigned": true,
"owner_role": "product-owner",
"sequence": 2,
"state": "approved",
"terminal": true,
"weight": 1
},
{
"decision_id": "product-decision-01",
"dwell_hours": 10,
"flow_id": "product-approval", Truncated for display — the full payload is 727 lines.
What you get back
This is the actual output of running the example above — computed by the same function the platform calls, not an illustration.
{
"configuration": {
"bonferroni_one_sided_tail_probability": 0.05,
"bootstrap_draws": 300,
"confidence_level": 0.8,
"maximum_cycle_fraction": 0.1,
"maximum_lead_time_hours_p90": 720,
"maximum_unowned_dwell_fraction": 0.05,
"maximum_unresolved_fraction": 0.2,
"minimum_decision_count": 20,
"seed": 23,
"simultaneous_gate_count": 4
},
"decision": "represented_decision_flows_clear_integrity_gates",
"flow_diagnostics": [
{
"cycle_fraction": 0,
"cycle_fraction_upper_bound": 0,
"decision": "decision_flow_integrity_supported",
"decision_count": 20,
"failed_gates": [],
"flow_id": "product-approval",
"lead_time_hours_p90": 35,
"lead_time_hours_p90_upper_bound": 35,
"mean_handoff_count": 2,
"state_bottlenecks": [
{
"event_count": 20,
"mean_dwell_hours": 20,
"p90_dwell_hours": 20,
"state": "technical-review"
},
{
"event_count": 20,
"mean_dwell_hours": 10,
"p90_dwell_hours": 10,
"state": "proposed"
},
{
"event_count": 20,
"mean_dwell_hours": 5,
"p90_dwell_hours": 5,
"state": "approved"
} Truncated for display — the full payload is 68 lines.
How it works
Statistical audit & measurement — Check whether a number is fit to decide on: coverage, timing, reconciliation, and the gaps a dashboard hides.
- 1 Reconstruct each decision from immutable ordered state events, preserving open decisions, dwell time, aggregate owner role, terminal semantics and one constant decision weight.
- 2 Within each flow calculate weighted unresolved and cycle fractions, unowned dwell share, p90 elapsed lead time, handoffs and state dwell bottlenecks; resample whole decisions to retain their internal event dependence.
- 3 Bonferroni-adjust the four one-sided gates across every screened flow and request remediation whenever conservative support, ownership, acyclicity or lead-time limits fail.
Before you trust it
Every tool in the catalog ships with the conditions under which its answer is meaningful — and the conditions under which it should abstain instead of guessing.
Assumptions & guardrails
- Metric definitions, weights, aggregate grain, sampling, missingness, dependence, and comparison windows correspond to the management claim being audited.
- Every offline and online transition is captured once; sequence, state, terminal and ownership semantics are stable; open elapsed time includes the current state; decisions are the independent resampling unit; logging changes and censoring are documented.
- Association, instability, or measurement quality is not a causal effect and must not be converted directly into an individual employment decision.
- A slow state is an aggregate process bottleneck, not proof that a role or person caused delay. Open elapsed time is a lower bound, and the output cannot become an employee leaderboard or autonomous reassignment authority.
Minimum evidence
- events: at least 20 rows/items
How to validate it
Backtest the chosen action against simple feasible baselines on held-out scenarios, sweep costs/constraints/risk tolerance, and require constraint feasibility under adverse inputs.
Calibrating it to your org
Same for everyone
The mathematical kernel, validation rules, method version, and JSON output semantics are organization-independent; no tenant-trained coefficients or company benchmark is embedded in the function.
Specific to you
- versioned decision-flow event ledger combining workflow transitions, offline approvals, ownership changes and open-state elapsed time without dropping unresolved decisions
- flow/decision/state/terminal semantics, owner-role taxonomy, event clock and late-arrival policy, weighting, support threshold, integrity gates, confidence, bootstrap design and remediation authority
Calibration workflow
- 1 Define the management decision, target outcome, aggregate unit, privacy boundary, cadence, and prediction/intervention horizon for this organization.
- 2 Build a tenant-scoped historical cohort using only information available before each prediction or decision; preserve zero periods, censoring, assignment probabilities, and unresolved outcomes when the method requires them.
- 3 Estimate statistical parameters on training history, but obtain costs, utilities, risk tolerance, practical-effect thresholds, capacity, and policy constraints from accountable decision owners.
- 4 Validate on later time windows or held-out aggregate units at the deployment grain, against a simple baseline and the function-specific validation strategy.
- 5 Deploy only if the returned decision clears evidence, overlap, calibration, robustness, and guardrail checks; warning, unsupported, schema-gap, and fallback decisions are abstentions.
- 6 Monitor realized outcomes, data drift, coverage, and decision regret; recalibrate at a governed cadence or after a detected regime/definition change, never merely because a stakeholder dislikes the result.
Call it from your AI
You don't wire up 388 tools in your MCP client. The GitRevio MCP server exposes 20 tools, three of which let an agent search the catalog, read a tool's schema, and run it — so the assistant finds this one on its own.
gitrevio_capabilities_search
{ "q": "audit management decision histories for unresolved" }
→ finds "audit_decision_flow_integrity"
gitrevio_capability_describe
{ "capability_id": "audit_decision_flow_integrity" }
→ returns the input schema and agent guidance shown on this page
gitrevio_capability_run
{ "capability_id": "audit_decision_flow_integrity", "arguments": { ... } }
→ returns the result shown above Works in Claude Desktop, Claude Code, Cursor, Cline, Continue.dev, Goose and Aider. See the MCP server.