How to use this runbook
Verify via audit trail
Check the Audit Trail for root cause analysis.
~/.iscl/audit.sqlite).
Symptoms
Unauthorized Transaction Executed
Unauthorized Transaction Executed
All Transactions Being Denied
All Transactions Being Denied
Severity: Medium
Description: Every transaction attempt returns HTTP 403 with policy denial.2. Common denial reasons and fixes:
3. Check if the default policy is in effect:
Diagnosis
1. Check the policy denial reasons:| Reason | Cause | Fix |
|---|---|---|
"value exceeds max" | maxValueWei is too low (default "0") | Increase maxValueWei in policy config |
"chain not allowed" | Chain ID not in allowedChains | Add the chain ID to allowedChains |
"token not in allowlist" | Token address not in tokenAllowlist | Add the token or clear the allowlist (empty = allow all) |
"recipient not in allowlist" | Recipient not in recipientAllowlist | Add the recipient or clear the allowlist |
"contract not in allowlist" | Target contract not in contractAllowlist | Add the contract or clear the allowlist |
"rate limit exceeded" | Wallet exceeded maxTxPerHour | Wait for the window to expire, or increase the limit |
The default policy has
maxValueWei: "0", which denies ALL transactions. This is a safety default — you must configure a policy with appropriate limits.Resolution
Review and update the policy configuration. See Configuration Reference for all PolicyConfig fields.Transactions Failing on Broadcast
Transactions Failing on Broadcast
Severity: Medium
Description: ISCL signs the transaction but broadcast fails (2. Common broadcast errors:
3. Check RPC health:If this fails, the RPC endpoint is down or unreachable.
broadcastError is non-null).Diagnosis
1. Check broadcast errors in the audit trail:| Error | Cause | Fix |
|---|---|---|
"nonce too low" | Another transaction with the same nonce was confirmed | Retry — the next attempt will use the correct nonce |
"insufficient funds for gas" | Wallet doesn’t have enough ETH for gas | Fund the wallet with native ETH |
"replacement transaction underpriced" | A pending transaction exists with higher gas | Wait for the pending transaction to confirm, or increase gas |
"execution reverted" | The transaction would revert on-chain | Check preflight simulation — this should have been caught |
Resolution
- For nonce errors: usually self-correcting on retry
- For gas errors: send ETH to the wallet
- For RPC errors: check provider status, switch to backup RPC
- For persistent reverts: check the transaction parameters (insufficient token balance, expired deadline)
RPC Errors / 502 Responses
RPC Errors / 502 Responses
Severity: Medium
Description: API returns HTTP 502 with 2. Test RPC connectivity:3. Check for provider rate limiting:If you see intermittent 502s, your RPC provider may be rate limiting. Look for HTTP 429 responses in ISCL Core logs.
"no_rpc_client" or RPC timeout errors.Diagnosis
1. Verify RPC configuration:Resolution
| Cause | Fix |
|---|---|
| No RPC URL configured | Set ISCL_RPC_URL_{chainId} environment variable |
| Wrong chain ID | Verify the chainId in the TxIntent matches a configured RPC |
| RPC provider down | Switch to an alternative provider |
| Rate limited | Upgrade your RPC plan or reduce transaction frequency |
Approval Requests Timing Out
Approval Requests Timing Out
Severity: Low
Description: Users report “Transaction expired” when trying to approve transactions.If this shows requests with low If set to
Diagnosis
1. Check the approval TTL:The default TTL is 300 seconds (5 minutes). If operators consistently need more time, the TTL may be too short.2. Check for stale pending requests:ttlSeconds, they are about to expire.3. Check approval mode:cli but no one is watching the terminal, approvals will time out.Resolution
| Cause | Fix |
|---|---|
| No one watching the terminal | Switch to web mode and use the browser dashboard |
| TTL too short | This is not configurable in v0.1; the 300s default is fixed |
| Web dashboard not open | Open http://localhost:3100/approval-ui |
| Telegram bot not connected | Ensure the bot is running and can reach ISCL Core |
Signing Fails "No key found"
Signing Fails "No key found"
Severity: Medium
Description: The approval succeeds but signing fails with a key-not-found error.2. Compare with the wallet address in the intent:The
Diagnosis
1. List available keys:wallet.address in the TxIntent must match an address in the keystore (case-insensitive).3. Check keystore path:Ensure the ISCL Core process can access the keystore directory. In Docker, the keystore is mounted as a volume.Resolution
| Cause | Fix |
|---|---|
| Key not imported | Run clavion-cli key import or key generate |
| Wrong keystore path | Set --keystore-path or check the Docker volume mount |
| Address mismatch | Verify the wallet address matches the imported key |
| Passphrase issue | Ensure the keystore passphrase is available to ISCL Core |
Sandbox Skill Times Out
Sandbox Skill Times Out
Severity: Low
Description: A sandbox skill is killed (exit code 137) before completing.2. Look for timeout indicators:3. Check manifest resource limits:The skill’s
Diagnosis
1. Check sandbox events:sandbox.timeoutMs in the manifest controls the deadline. The default cap is 60 seconds.Resolution
| Cause | Fix |
|---|---|
| Timeout too low | Increase timeoutMs in the skill manifest (max: 60000) |
| Skill has infinite loop | Debug the skill code outside the sandbox first |
| Memory limit hit | Increase memoryMb in the manifest (max: 512) |
| Docker not available | Ensure Docker daemon is running |
High Memory Usage
High Memory Usage
Severity: Low
Description: ISCL Core process memory exceeds expected levels (>300MB).2. Check for leaked pending approvals:A large number of stale pending approvals suggests the cleanup interval isn’t running or requests are being submitted faster than they expire.3. Check SQLite database size:
Diagnosis
1. Check Node.js heap usage:Resolution
| Cause | Fix |
|---|---|
| Many stale approvals | They auto-cleanup every 30s; wait or restart Core |
| Large SQLite DB | Run VACUUM during maintenance window |
| Node.js heap growth | Restart the process; check for memory leaks in custom integrations |
Preflight Simulation Fails
Preflight Simulation Fails
Severity: Low
Description: The preflight service reports simulation failure, blocking the transaction.Look for
Diagnosis
1. Check the preflight result in audit trail:simulationSuccess: false and the associated error message.2. Common simulation failures:| Simulation Error | Cause |
|---|---|
"execution reverted" | Insufficient token balance, expired deadline, or bad parameters |
"gas estimation failed" | Transaction would revert — check balances and allowances |
"RPC error" | RPC endpoint issue — see “RPC Errors” section above |
Resolution
- Verify the sender has sufficient balance for the transfer/swap
- Check that ERC-20 approvals are in place for swap router interactions
- Ensure the deadline hasn’t passed
- Verify the target contract exists on the specified chain
General investigation procedure
For any incident not covered above:Next steps
- Audit Trail — Event types and SQL query patterns
- Error Codes — HTTP error shapes and recovery
- Configuration Reference — All configurable parameters
- Observability — Logging and monitoring setup
- Performance Tuning — Resource optimization