VigilSIMULATED

← Dashboard

inc_0002 SIMULATED

duplicate_charge (rule DUP), related ch_0001, ch_0002
Scenario D2 · outcome ESCALATED AMOUNT_OVER_INCIDENT_CAP · 4 steps · 2026-10-10T09:02:00Z to 2026-10-10T09:02:00Z

Gate verdicts

StepVerdictCodeEntry
4ESCALATEAMOUNT_OVER_INCIDENT_CAP#21
4ALLOWOK#23

Verification

Independent check by code: passed

Timeline (decision chain)

SeqTimeKindSummary
#132026-10-10T09:02:00ZINCIDENT_OPENED opened duplicate_charge by rule DUP, related ch_0001, ch_0002
entry JSON
{
  "body": {
    "detector_rule": "DUP",
    "related": [
      "ch_0001",
      "ch_0002"
    ],
    "type": "duplicate_charge"
  },
  "entry_hash": "sha256:a83c0cc168233fc441fff73a488f3c84a4195253df702fde1355e10770999736",
  "kind": "INCIDENT_OPENED",
  "prev_hash": "sha256:30b22f05c3170208ba36bae4e10ce0e923b9615bf7626bed87045f5a77442e4d",
  "seq": 13,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#142026-10-10T09:02:00ZDECISION INVESTIGATE get_incident: Read the incident record first.
entry JSON
{
  "body": {
    "args": {
      "incident_id": "inc_0002"
    },
    "decision": "INVESTIGATE",
    "rationale": "Read the incident record first.",
    "step": 1,
    "tool": "get_incident"
  },
  "entry_hash": "sha256:27b2c21f18804e04e61d32c46c4340fc4373046a2795da2870137e63def13cb9",
  "kind": "DECISION",
  "prev_hash": "sha256:a83c0cc168233fc441fff73a488f3c84a4195253df702fde1355e10770999736",
  "seq": 14,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#152026-10-10T09:02:00ZOBSERVATION read get_incident: incident inc_0002 duplicate_charge related ch_0001,ch_0002 status INVESTIGATING
entry JSON
{
  "body": {
    "args": {
      "incident_id": "inc_0002"
    },
    "injection_suspected": false,
    "result_sha256": "sha256:33202df7260227b0ca3148d9241b407a9565aae7077c8da7ac964b94612fbf0b",
    "result_summary": "incident inc_0002 duplicate_charge related ch_0001,ch_0002 status INVESTIGATING",
    "step": 1,
    "tool": "get_incident",
    "untrusted_fields": []
  },
  "entry_hash": "sha256:8a31d6f86fb8316d979ce5f49bae25b7b9a5e620a6132b3e7e2c77cb26299df5",
  "kind": "OBSERVATION",
  "prev_hash": "sha256:27b2c21f18804e04e61d32c46c4340fc4373046a2795da2870137e63def13cb9",
  "seq": 15,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#162026-10-10T09:02:00ZDECISION INVESTIGATE get_provider_charge: Read charge ch_0001 at the provider.
entry JSON
{
  "body": {
    "args": {
      "charge_id": "ch_0001"
    },
    "decision": "INVESTIGATE",
    "rationale": "Read charge ch_0001 at the provider.",
    "step": 2,
    "tool": "get_provider_charge"
  },
  "entry_hash": "sha256:f8fea548c550a3f786e20d088082a1b7a6759a6e44d5f0aaa6ec2d77bd83b4de",
  "kind": "DECISION",
  "prev_hash": "sha256:8a31d6f86fb8316d979ce5f49bae25b7b9a5e620a6132b3e7e2c77cb26299df5",
  "seq": 16,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#172026-10-10T09:02:00ZOBSERVATION read get_provider_charge: charge ch_0001 succeeded 6000000 NGN order ord_0001 customer cust_01 at 2026-10-10T09:01:00Z
entry JSON
{
  "body": {
    "args": {
      "charge_id": "ch_0001"
    },
    "injection_suspected": false,
    "result_sha256": "sha256:1eeb075693707be689009a2cfc56c959f1643575f907c09e379fcea666490b81",
    "result_summary": "charge ch_0001 succeeded 6000000 NGN order ord_0001 customer cust_01 at 2026-10-10T09:01:00Z",
    "step": 2,
    "tool": "get_provider_charge",
    "untrusted_fields": []
  },
  "entry_hash": "sha256:8279e4e8d085484603cdbe06e7cad7700830adbcf4591f3c12c74564adb3e27a",
  "kind": "OBSERVATION",
  "prev_hash": "sha256:f8fea548c550a3f786e20d088082a1b7a6759a6e44d5f0aaa6ec2d77bd83b4de",
  "seq": 17,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#182026-10-10T09:02:00ZDECISION INVESTIGATE get_provider_charge: Read charge ch_0002 at the provider.
entry JSON
{
  "body": {
    "args": {
      "charge_id": "ch_0002"
    },
    "decision": "INVESTIGATE",
    "rationale": "Read charge ch_0002 at the provider.",
    "step": 3,
    "tool": "get_provider_charge"
  },
  "entry_hash": "sha256:47b46c05c2b465ffe17d0039841ef699fd6ed6b5edd8d4b1d26cd2a0de01e1b8",
  "kind": "DECISION",
  "prev_hash": "sha256:8279e4e8d085484603cdbe06e7cad7700830adbcf4591f3c12c74564adb3e27a",
  "seq": 18,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#192026-10-10T09:02:00ZOBSERVATION read get_provider_charge: charge ch_0002 succeeded 6000000 NGN order ord_0001 customer cust_01 at 2026-10-10T09:01:40Z
entry JSON
{
  "body": {
    "args": {
      "charge_id": "ch_0002"
    },
    "injection_suspected": false,
    "result_sha256": "sha256:411dc57304a6a355e645b9e03668b32618d7da9c96c328966b8f2f6683ea7c65",
    "result_summary": "charge ch_0002 succeeded 6000000 NGN order ord_0001 customer cust_01 at 2026-10-10T09:01:40Z",
    "step": 3,
    "tool": "get_provider_charge",
    "untrusted_fields": []
  },
  "entry_hash": "sha256:fa5bf493264d659a8a2200f815ddb9ff62146f893dfe4614d869d2e563867783",
  "kind": "OBSERVATION",
  "prev_hash": "sha256:47b46c05c2b465ffe17d0039841ef699fd6ed6b5edd8d4b1d26cd2a0de01e1b8",
  "seq": 19,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#202026-10-10T09:02:00ZDECISION ACT issue_refund: Two succeeded charges share customer, order and amount within the window; refund the later one.
entry JSON
{
  "body": {
    "args": {
      "charge_id": "ch_0002",
      "evidence_refs": [
        "ch_0001",
        "ch_0002"
      ],
      "idempotency_key": "inc_0002:refund:1"
    },
    "decision": "ACT",
    "rationale": "Two succeeded charges share customer, order and amount within the window; refund the later one.",
    "step": 4,
    "tool": "issue_refund"
  },
  "entry_hash": "sha256:b76a49ea69f5891518c44dabfe76de7a68e4753cbb9771d5c70f52bf03b585af",
  "kind": "DECISION",
  "prev_hash": "sha256:fa5bf493264d659a8a2200f815ddb9ff62146f893dfe4614d869d2e563867783",
  "seq": 20,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#212026-10-10T09:02:00ZGATE_VERDICT gate ESCALATE AMOUNT_OVER_INCIDENT_CAP
entry JSON
{
  "body": {
    "code": "AMOUNT_OVER_INCIDENT_CAP",
    "details": {
      "already_refunded_minor": 0,
      "amount_minor": 6000000,
      "cap_minor": 5000000
    },
    "policy_sha256": "sha256:696b891ceabd61a7cf7c89ed6e98793ac182397b88332da7eaccbc2381dbc581",
    "policy_version": 1,
    "step": 4,
    "verdict": "ESCALATE"
  },
  "entry_hash": "sha256:329797bf011e64f1521f272382be54fc7d302f6ca76e6c1fd1282eddb13bd240",
  "kind": "GATE_VERDICT",
  "prev_hash": "sha256:b76a49ea69f5891518c44dabfe76de7a68e4753cbb9771d5c70f52bf03b585af",
  "seq": 21,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#222026-10-10T09:02:00ZDECISION ESCALATE escalate: The policy gate requires a human decision.
entry JSON
{
  "body": {
    "args": {
      "evidence_refs": [
        "ch_0001",
        "ch_0002"
      ],
      "reason_code": "AMOUNT_OVER_INCIDENT_CAP",
      "summary": "Policy gate returned ESCALATE (AMOUNT_OVER_INCIDENT_CAP) for issue_refund."
    },
    "decision": "ESCALATE",
    "rationale": "The policy gate requires a human decision.",
    "step": 4,
    "tool": "escalate"
  },
  "entry_hash": "sha256:fa933b4ab85394ea8cdd2869fa68eb59de1a3f4e86e9aba0a447a46a2cea6164",
  "kind": "DECISION",
  "prev_hash": "sha256:329797bf011e64f1521f272382be54fc7d302f6ca76e6c1fd1282eddb13bd240",
  "seq": 22,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#232026-10-10T09:02:00ZGATE_VERDICT gate ALLOW OK
entry JSON
{
  "body": {
    "code": "OK",
    "details": {},
    "policy_sha256": "sha256:696b891ceabd61a7cf7c89ed6e98793ac182397b88332da7eaccbc2381dbc581",
    "policy_version": 1,
    "step": 4,
    "verdict": "ALLOW"
  },
  "entry_hash": "sha256:096afdd5afc11dbc42835a594039825db8eba6246c96df663e7c9918c0750085",
  "kind": "GATE_VERDICT",
  "prev_hash": "sha256:fa933b4ab85394ea8cdd2869fa68eb59de1a3f4e86e9aba0a447a46a2cea6164",
  "seq": 23,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#242026-10-10T09:02:00ZACTION_INTENT intent escalate (committed before execution)
entry JSON
{
  "body": {
    "args": {
      "evidence_refs": [
        "ch_0001",
        "ch_0002"
      ],
      "reason_code": "AMOUNT_OVER_INCIDENT_CAP",
      "summary": "Policy gate returned ESCALATE (AMOUNT_OVER_INCIDENT_CAP) for issue_refund."
    },
    "args_sha256": "sha256:479e0f8584870cc373003ac32b94783ef37de246ee658b6ac42db96234954e9b",
    "expected_effect": "close the incident as ESCALATED with an evidence packet",
    "idempotency_key": null,
    "step": 4,
    "tool": "escalate"
  },
  "entry_hash": "sha256:0ae4b1c34166c4dd88ecc80b26714cf82eaa42a7a78a6a8ee9d364502619694d",
  "kind": "ACTION_INTENT",
  "prev_hash": "sha256:096afdd5afc11dbc42835a594039825db8eba6246c96df663e7c9918c0750085",
  "seq": 24,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#252026-10-10T09:02:00ZACTION_RESULT escalate attempt 1: ok
entry JSON
{
  "body": {
    "attempt": 1,
    "error_type": null,
    "ok": true,
    "response_sha256": "sha256:feef69fc990a852dd5ed6db45fc9046b0c82c975479e7f81da45438a05a09f7b",
    "step": 4,
    "tool": "escalate"
  },
  "entry_hash": "sha256:c7ef43f9e49e9e87f288c852c41e6ac7c62bb722c7361ec45a7a6612748cb91e",
  "kind": "ACTION_RESULT",
  "prev_hash": "sha256:0ae4b1c34166c4dd88ecc80b26714cf82eaa42a7a78a6a8ee9d364502619694d",
  "seq": 25,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#262026-10-10T09:02:00ZVERIFICATION verification passed (2/2 checks)
entry JSON
{
  "body": {
    "checks": [
      {
        "check": "escalation_recorded",
        "detail": "",
        "passed": true
      },
      {
        "check": "evidence_packet_complete",
        "detail": "",
        "passed": true
      }
    ],
    "ok": true,
    "step": 4
  },
  "entry_hash": "sha256:5eacbe88931242592b4fe929945aa87040950b133a713f31ffc16798cd01321c",
  "kind": "VERIFICATION",
  "prev_hash": "sha256:c7ef43f9e49e9e87f288c852c41e6ac7c62bb722c7361ec45a7a6612748cb91e",
  "seq": 26,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}
#272026-10-10T09:02:00ZOUTCOME ESCALATED AMOUNT_OVER_INCIDENT_CAP: Policy gate returned ESCALATE (AMOUNT_OVER_INCIDENT_CAP) for issue_refund.
entry JSON
{
  "body": {
    "outcome": "ESCALATED",
    "reason_code": "AMOUNT_OVER_INCIDENT_CAP",
    "summary": "Policy gate returned ESCALATE (AMOUNT_OVER_INCIDENT_CAP) for issue_refund."
  },
  "entry_hash": "sha256:5aac519d8800c5d33db2e50e97a1d6ac8fb4afeb87709ede5ca095a76a6b4ea7",
  "kind": "OUTCOME",
  "prev_hash": "sha256:5eacbe88931242592b4fe929945aa87040950b133a713f31ffc16798cd01321c",
  "seq": 27,
  "trace_id": "offline-2",
  "ts": "2026-10-10T09:02:00Z"
}

Receipt

Raw receipt JSON
{
  "digest": "sha256:7d734740115cba224e159adcb6ba0b48cbd88464521c813e95471338f6c9a899",
  "payload": {
    "actions": [
      {
        "amount_minor": null,
        "args_sha256": "sha256:479e0f8584870cc373003ac32b94783ef37de246ee658b6ac42db96234954e9b",
        "executed": true,
        "idempotency_key": null,
        "tool": "escalate"
      }
    ],
    "closed_at": "2026-10-10T09:02:00Z",
    "currency": "NGN",
    "entire_checkpoint": null,
    "entries": [
      {
        "hash": "sha256:a83c0cc168233fc441fff73a488f3c84a4195253df702fde1355e10770999736",
        "seq": 13
      },
      {
        "hash": "sha256:27b2c21f18804e04e61d32c46c4340fc4373046a2795da2870137e63def13cb9",
        "seq": 14
      },
      {
        "hash": "sha256:8a31d6f86fb8316d979ce5f49bae25b7b9a5e620a6132b3e7e2c77cb26299df5",
        "seq": 15
      },
      {
        "hash": "sha256:f8fea548c550a3f786e20d088082a1b7a6759a6e44d5f0aaa6ec2d77bd83b4de",
        "seq": 16
      },
      {
        "hash": "sha256:8279e4e8d085484603cdbe06e7cad7700830adbcf4591f3c12c74564adb3e27a",
        "seq": 17
      },
      {
        "hash": "sha256:47b46c05c2b465ffe17d0039841ef699fd6ed6b5edd8d4b1d26cd2a0de01e1b8",
        "seq": 18
      },
      {
        "hash": "sha256:fa5bf493264d659a8a2200f815ddb9ff62146f893dfe4614d869d2e563867783",
        "seq": 19
      },
      {
        "hash": "sha256:b76a49ea69f5891518c44dabfe76de7a68e4753cbb9771d5c70f52bf03b585af",
        "seq": 20
      },
      {
        "hash": "sha256:329797bf011e64f1521f272382be54fc7d302f6ca76e6c1fd1282eddb13bd240",
        "seq": 21
      },
      {
        "hash": "sha256:fa933b4ab85394ea8cdd2869fa68eb59de1a3f4e86e9aba0a447a46a2cea6164",
        "seq": 22
      },
      {
        "hash": "sha256:096afdd5afc11dbc42835a594039825db8eba6246c96df663e7c9918c0750085",
        "seq": 23
      },
      {
        "hash": "sha256:0ae4b1c34166c4dd88ecc80b26714cf82eaa42a7a78a6a8ee9d364502619694d",
        "seq": 24
      },
      {
        "hash": "sha256:c7ef43f9e49e9e87f288c852c41e6ac7c62bb722c7361ec45a7a6612748cb91e",
        "seq": 25
      },
      {
        "hash": "sha256:5eacbe88931242592b4fe929945aa87040950b133a713f31ffc16798cd01321c",
        "seq": 26
      },
      {
        "hash": "sha256:5aac519d8800c5d33db2e50e97a1d6ac8fb4afeb87709ede5ca095a76a6b4ea7",
        "seq": 27
      }
    ],
    "git_sha": "35707c7",
    "incident_id": "inc_0002",
    "mode": "simulated",
    "neatlogs_trace_id": "offline-2",
    "opened_at": "2026-10-10T09:02:00Z",
    "outcome": "ESCALATED",
    "policy_sha256": "sha256:696b891ceabd61a7cf7c89ed6e98793ac182397b88332da7eaccbc2381dbc581",
    "reason_code": "AMOUNT_OVER_INCIDENT_CAP",
    "run_label": "demo",
    "scenario_id": "D2",
    "type": "duplicate_charge",
    "verification": {
      "checks": [
        {
          "check": "escalation_recorded",
          "detail": "",
          "passed": true
        },
        {
          "check": "evidence_packet_complete",
          "detail": "",
          "passed": true
        }
      ],
      "ok": true
    }
  },
  "receipt_version": 1
}