Skip to content

Multisig pause, packed args, keeper alerting, DAG dependency fix - #1139

Merged
ayomideadeniran merged 5 commits into
SoroLabs:mainfrom
katefominmoore23:issues-774-775-786-776
Aug 31, 2026
Merged

Multisig pause, packed args, keeper alerting, DAG dependency fix#1139
ayomideadeniran merged 5 commits into
SoroLabs:mainfrom
katefominmoore23:issues-774-775-786-776

Conversation

@katefominmoore23

Copy link
Copy Markdown
Contributor

Summary

  • Configurable K-of-N guardian multisig threshold for emergency_pause, plus a guardian-signed propose_unpause/execute_unpause flow gated by a 24h governance timelock (replaces instant admin-only unpause).
  • New packed_args bit-packed encode/decode module for task invocation arguments, and validate_args now uses the real XDR-serialized size instead of a fixed 64-bytes-per-arg heuristic.
  • KeeperAlertManager now fans alerts out to Slack, Discord, and PagerDuty simultaneously, with new low-balance, RPC 5xx, and process-crash triggers, plus per-alert-kind rate limiting to prevent webhook spam.
  • Closed a DAG dependency validation gap: register() no longer stores a caller-supplied blocked_by verbatim (which bypassed cycle/depth checks); dependency edges must go through add_dependency/add_dependency_with_rule.

Closes #774, closes #775, closes #786, closes #776

Test plan

  • cargo build --target wasm32-unknown-unknown --release in contract/
  • cargo test in contract/
  • Keeper unit tests for keeperAlerts.js

…unpause

Replaces the hardcoded 3-of-N guardian threshold with an admin-configurable
PauseThreshold, and replaces the instant admin-only unpause with a
guardian-signed propose_unpause + execute_unpause flow gated by a 24h
governance timelock, per issue SoroLabs#774.
Adds a compact bit-packed encode/decode module (packed_args) for task
invocation arguments as a gas-optimized alternative to default XDR framing,
and switches validate_args to use the real serialized byte length instead
of a crude fixed-64-bytes-per-arg heuristic, per issue SoroLabs#775.
…rAlertManager

Extends webhook alerting to fan out to Slack, Discord, and PagerDuty
simultaneously, adds low-balance and RPC 5xx-error alert triggers plus a
process-crash hook, and rate-limits repeated alerts per kind to prevent
webhook spam, per issue SoroLabs#786.
…ycle bypass

register() previously stored config.blocked_by verbatim without running
would_create_cycle/depth checks, letting a caller pre-seed a dependency
cycle or self-reference that add_dependency's validation would otherwise
reject. Dependency edges must now always go through add_dependency /
add_dependency_with_rule, which already enforce parent-task existence,
cycle detection, and MAX_DEPENDENCY_DEPTH before a child can be blocked
on a parent's execution outcome/timestamp, per issue SoroLabs#776.
@drips-wave

drips-wave Bot commented Aug 31, 2026

Copy link
Copy Markdown

@katefominmoore23 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@vercel

vercel Bot commented Aug 31, 2026

Copy link
Copy Markdown

@katefominmoore23 is attempting to deploy a commit to the Ayomide Adeniran's projects Team on Vercel.

A member of the Team first needs to authorize it.

@katefominmoore23
katefominmoore23 deleted the issues-774-775-786-776 branch August 31, 2026 01:08
@katefominmoore23
katefominmoore23 restored the issues-774-775-786-776 branch August 31, 2026 01:10
@ayomideadeniran

Copy link
Copy Markdown
Contributor

Pr under review

@ayomideadeniran
ayomideadeniran merged commit 7b21948 into SoroLabs:main Aug 31, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment