feat(nodetask): surface terminal InclusionUnverifiable gov outcome#495
Draft
bdchatham wants to merge 1 commit into
Draft
feat(nodetask): surface terminal InclusionUnverifiable gov outcome#495bdchatham wants to merge 1 commit into
bdchatham wants to merge 1 commit into
Conversation
Handle the new wire.InclusionUnverifiable inclusion state in handleFailure: a gov tx that was broadcast and accepted at CheckTx but whose on-chain outcome cannot be confirmed because the target node's tx index is off. Terminal (retrying the same node is futile) but distinct from TxFailed — the tx may have committed, so the reason (InclusionUnverifiable) and the sidecar message steer the operator to verify out-of-band rather than blindly re-run (important for GovSoftwareUpgrade, where a rollback does not unschedule an on-chain upgrade). status.outputs still carries the txHash for that check; height/proposalId are genuinely unknown and omitted. Depends on the wire enum addition in seictl (sei-protocol/seictl#237): this will not compile until seictl is released with InclusionUnverifiable and this module's seictl dependency is bumped. Validated locally against that branch. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
What
Handle the new terminal gov inclusion state
wire.InclusionUnverifiableinhandleFailure: a gov tx that was broadcast and accepted at CheckTx but whose on-chain outcome cannot be confirmed because the target node's tx index is disabled (tx_index.indexer = "null").case wire.InclusionUnverifiable→populateGovOutputs+markFailed(reason: "InclusionUnverifiable"). Terminal (retrying the same node is futile), mirroring the adjacentCommittedFailedcase.TxFailed: the tx may have committed, so the reason + the sidecar's message steer the operator to verify out-of-band before re-running. This matters most forGovSoftwareUpgrade, where re-running a "Failed" task does not unschedule an on-chain upgrade.status.outputscarries thetxHashfor that manual check;height/proposalIdare genuinely unknown and omitted (never asserted as 0).Why
Without this case, an unverifiable result falls through to the generic
TaskFailedreason with no structured outputs — the operator loses the txHash and the distinct signal. (Before the seictl fix, this class didn't terminalize at all — it retried to the task timeout and surfaced an opaqueTimeout.)Tests
TestReconcile_GovUpgrade_Unverifiable(mirrorsTestReconcile_GovUpgrade_CommittedFailed): assertsPhase=Failed,reason=InclusionUnverifiable,txHashsurfaced,height/proposalIdzero, and noReadylatch (unverifiable is not success). Status/condition level only.Review
Reviewed by kubernetes-specialist + idiomatic-reviewer: phase/reason/naming/nil-safety confirmed conforming; the "verify-first" nuance was placed on the seictl sentinel message (single source) and the
handleFailuredoc comment updated to enumerate the outcome.Depends on sei-protocol/seictl#237.
🤖 Generated with Claude Code