fix/feat: runbook, pause banner, dispute events, is_terminal docs#581
Merged
Haroldwonder merged 3 commits intoApr 28, 2026
Conversation
…roldwonder#483 Haroldwonder#485 Haroldwonder#528 Haroldwonder#529) - Haroldwonder#483: Add RUNBOOK.md covering emergency pause/unpause, admin key rotation via governance, stuck migration handling, webhook replay, storage TTL extension, and escalation contacts/SLA targets. Linked from README documentation section. - Haroldwonder#485: Surface pause_reason in HealthStatus (health.rs) by reading the active PauseRecord from circuit_breaker_storage. ContractHealth.jsx now shows a dismissible red status banner with the human-readable pause reason, re-appears on next 60s poll if still paused, and disables transaction buttons (Withdraw Fees) while paused. Adds onPausedChange callback prop for parent components to gate submission buttons. - Haroldwonder#528: Document in is_terminal() that Failed and Disputed are intentionally excluded — they are transient states with valid outbound transitions (Failed→Disputed, Disputed→Completed|Cancelled via resolve_dispute). Existing implementation is correct per state machine. - Haroldwonder#529: Refactor emit_dispute_raised and emit_dispute_resolved to use the standard emit_event! macro, adding the (SCHEMA_VERSION, ledger_seq, ledger_ts) envelope consistent with all other events. emit_dispute_resolved now includes admin address and resulting_status symbol. resolve_dispute in lib.rs updated to pass caller. webhook-handler.ts gains handleDisputeRaised and handleDisputeResolved with audit log persistence and routes dispute_raised / dispute_resolved event types.
|
Someone is attempting to deploy a commit to the Harold's projects Team on Vercel. A member of the Team first needs to authorize it. |
…29-runbook-pause-banner-dispute-events # Conflicts: # README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #483
Closes #485
Closes #528
Closes #529
Summary
#483 — Added
RUNBOOK.mdcovering emergency pause/unpause, admin key rotation via governance proposals, stuck migration handling, webhook replay, storage TTL extension, and escalation contacts/SLA targets. Linked from README.#485 —
HealthStatusnow includespause_reason(read from the activePauseRecordin circuit breaker storage).ContractHealth.jsxshows a dismissible red banner with the human-readable pause reason, re-appears on the next 60s poll if still paused, and disables transaction buttons while paused. AddsonPausedChangecallback prop.#528 —
is_terminal()insrc/types.rsnow has a doc comment explicitly clarifying thatFailedandDisputedare intentionally excluded — they are transient states with valid outbound transitions. Existing implementation is correct per the state machine.#529 —
emit_dispute_raisedandemit_dispute_resolvedrefactored to use the standardemit_event``` macro, adding the(SCHEMA_VERSION, ledger_seq, ledger_ts)envelope.emit_dispute_resolvednow includesadminaddress andresulting_status.resolve_disputeinlib.rsupdated accordingly.webhook-handler.tsgainshandleDisputeRaised/handleDisputeResolved` handlers with audit log persistence.