Skip to content

feat(governance): emit distinct supersession event on role re-proposal - #539

Merged
usmanimamu17-create merged 1 commit into
ApexChainx:mainfrom
beulah7717108-eng:fix/468-proposal-supersession-events
Aug 31, 2026
Merged

feat(governance): emit distinct supersession event on role re-proposal#539
usmanimamu17-create merged 1 commit into
ApexChainx:mainfrom
beulah7717108-eng:fix/468-proposal-supersession-events

Conversation

@beulah7717108-eng

Copy link
Copy Markdown
Contributor

Summary

propose_admin / propose_operator wrote the pending slot unconditionally, so re-proposing a role silently replaced the pending candidate with no signal in the event stream. An auditor watching adm_prop/op_prop could not distinguish "cancelled then re-proposed" from "silently replaced", and the superseded candidate was never told why its accept would now fail.

Both now emit an additive adm_sup/op_sup event carrying (superseded, replacement) before the new adm_prop/op_prop, so the pending slot's history is fully reconstructable.

Changes

  • governance.rs: propose_admin/propose_operator publish a supersession event when a proposal is already pending, then publish the new proposal.
  • event_schema.rs / lib.rs: new adm_sup and op_sup event constants with payloads documented.
  • api_stability.rs: event_name_symbols() and the guardrail counts updated for the two additive events.
  • tests.rs: coverage for admin and operator supersession, the supersession count across repeated re-proposals, and the payload shape.

Tests

api_stability, event_schema, event-ordering and topic-stability suites pass alongside the new supersession tests.

Closes #468

propose_admin/propose_operator wrote the pending slot unconditionally, so
re-proposing a role silently replaced the pending candidate with no
signal in the event stream — an auditor watching adm_prop/op_prop could
not distinguish "cancelled then re-proposed" from "silently replaced".
Both now emit an additive adm_sup/op_sup event carrying
(superseded, replacement) before the new proposal event, so the pending
slot's history is fully reconstructable. Registers the two new event
names in the event schema and the api_stability guardrail and adds
coverage for admin and operator supersession plus the payload shape.

Closes ApexChainx#468
@drips-wave

drips-wave Bot commented Aug 30, 2026

Copy link
Copy Markdown

@beulah7717108-eng 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

@usmanimamu17-create usmanimamu17-create left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, approved.

@usmanimamu17-create usmanimamu17-create left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀

@usmanimamu17-create
usmanimamu17-create merged commit be8580a into ApexChainx:main Aug 31, 2026
9 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

propose_admin silently overwrites a pending proposal: the superseded candidate is never notified and no event distinguishes replacement

2 participants