Dead-Letter Browsing / Status Observation¶
This page describes the first dead-letter browsing / status observation slice for post-adjudication execution in knowledge exchange v1.
Purpose¶
This slice gives operators a read-only view into the current dead-letter backlog and the current status of a specific post-adjudication execution transaction.
The slice is intentionally narrow:
- read-only only
- transaction-centered read model
- current dead-letter backlog only
- per-transaction detail only
What Ships¶
list_dead_lettered_post_adjudication_executionsadjudicationfilterretry_attempt_min/retry_attempt_maxfiltersqueryover transaction and submission receipt IDsmanual_replay_actorfilterdead_lettered_after/dead_lettered_beforefiltersdead_letter_reason_queryfilterlatest_dispatch_referenceexact-match filterlatest_status_subtypefiltermanual_retry_count_min/manual_retry_count_maxfilterstotal_retry_count_min/total_retry_count_maxfilterstransaction_global_total_retry_count_min/transaction_global_total_retry_count_maxfilterstransaction_global_any_match_familyfiltertransaction_global_dominant_familyfilterlatest_status_subtype_familyfilterany_match_familyfilterdominant_familyfiltersort_byoffset/limitpaginationcount/total/offset/limitresponse metadatalatest_dead_lettered_atlatest_manual_replay_actorlatest_manual_replay_atlatest_status_subtypemanual_retry_counttotal_retry_counttransaction_global_total_retry_counttransaction_global_any_match_familiestransaction_global_dominant_familysubmission_breakdownlatest_status_subtype_familyany_match_familiesdominant_familyget_post_adjudication_execution_status(transaction_receipt_id)- current canonical snapshot
- latest retry / dead-letter summary
- optional
latest_background_tasktask_idstatusattempt_countnext_retry_at
- lightweight navigation hints:
is_dead_letteredcan_retryadjudication
- read model composed from:
transaction receiptcurrent submission receiptsubmission receipt trail- cockpit read surface
- page-top compact summary strip
- recomputed from the currently loaded backlog rows
- refreshed on:
- initial load
- filter apply
Ctrl+Rreset- retry-success refresh
- shows:
- total dead letters
- retryable count
release/refunddistributionretry/manual-retry/dead-letterdistribution- top
5latest dead-letter reasons in a compact second line- rendered as a compact
reasons:line - aggregated from each row's current
latest_dead_letter_reason - remains visible as the raw latest reason-string view
- rendered as a compact
- grouped latest dead-letter reason families in a compact
reason families:line- rendered from each row's current
latest_dead_letter_reason - uses the initial built-in taxonomy:
retry-exhaustedpolicy-blockedreceipt-invalidbackground-failedunknown- uses case-insensitive heuristic matching with
unknownfallback
- rendered from each row's current
- top
5latest manual replay actors in a compactactors:line- rendered as a compact
actors:line - aggregated from each row's current
latest_manual_replay_actor
- rendered as a compact
- grouped latest manual replay actor families in a compact
actor families:line- rendered from each row's current
latest_manual_replay_actor - uses the initial built-in taxonomy:
operatorsystemserviceunknown- uses case-insensitive heuristic matching with
unknownfallback - raw top latest manual replay actors remain visible alongside grouped actor-family buckets
- rendered from each row's current
- grouped latest dispatch-reference families in a compact
dispatch families:line- rendered from each row's current
latest_dispatch_reference - uses the same shared classifier as the CLI summary surface
- currently recognizes
dispatch,queue,worker,bridge,webhook, andunknown - aliases
job,runner, andtasknormalize toworker - otherwise the first normalized token is preserved so unfamiliar prefixes still show up deterministically
- rendered from each row's current
- top
5latest dispatch references in a compactdispatch:line- rendered as a compact
dispatch:line - aggregated from each row's current
latest_dispatch_reference
- rendered as a compact
- compact trend line
- rendered as
trend: 24h ... 7d ... older ... undated ... - recomputed from each row's current
latest_dead_lettered_at
- rendered as
- dead-letter backlog table
- selected transaction detail pane
- selection-driven detail refresh
- reuses the existing list/detail status surfaces
- thin filter bar
queryadjudicationlatest_status_subtypelatest_status_subtype_familyany_match_familymanual_replay_actordead_lettered_afterdead_lettered_beforedead_letter_reason_querylatest_dispatch_reference- all filter fields are forwarded through the cockpit bridge into the dead-letter list tool
EnterapplyCtrl+Rfull reset- selection is preserved when the current transaction remains in the refreshed result set
- first-row fallback when the current transaction disappears
- detail-pane
Retryaction- reuses
retry_post_adjudication_execution - enabled only when
can_retry = true rkey binding- first
renters inline confirm state - second
rexecutes replay Esc, selection change, and filter apply clear confirm state- while replay is in flight,
Retry actionrendersrequesting retry... - duplicate retry triggers are blocked while replay is running
- replay failure surfaces explicit retry-request failure wording and returns the action to idle
- replay success surfaces an explicit retry-request acceptance message and refreshes backlog and selected detail
- follow-up messaging is refined after acceptance:
Refreshing backlog and detailFollow-up: backlog refreshed; loading latest status- task-oriented follow-up such as
task retrying (attempt 2, next ...) - fallback follow-up wording when the item is still in backlog, disappears from backlog, or latest-status refresh fails
Ctrl+Rclears filter draft/applied state and retry confirm state, then reloads backlog/detailCtrl+Ris ignored while retry is running- apply, reset, and retry-success refresh preserve the current selection when it remains in the refreshed backlog
- if the selected transaction disappears, the page falls back to the first row or clears selection/detail when the backlog becomes empty
- reuses
- dead-letter CLI surface
lango status dead-letter-summarytabledefaultjsonsupport- global overview only
total_dead_lettersretryable_countby_adjudicationby_latest_familyby_reason_family- grouped reason-family buckets derived from each row's current
latest_dead_letter_reason - table output renders this as a
By reason familysection - JSON output renders this as
by_reason_family - uses the initial built-in taxonomy:
retry-exhaustedpolicy-blockedreceipt-invalidbackground-failedunknown- uses case-insensitive heuristic matching with
unknownfallback
- grouped reason-family buckets derived from each row's current
top_latest_dead_letter_reasons- top
5reasons - each item includes
reasonandcount - aggregated from each row's current
latest_dead_letter_reason - remains available as the raw latest reason-string view alongside
by_reason_family
- top
by_actor_family- grouped actor-family buckets derived from each row's current
latest_manual_replay_actor - table output renders this as a
By actor familysection - JSON output renders this as
by_actor_family - uses the initial built-in taxonomy:
operatorsystemserviceunknown- uses case-insensitive heuristic matching with
unknownfallback
- grouped actor-family buckets derived from each row's current
top_latest_manual_replay_actors- top latest actors
- each item includes
actorandcount - aggregated from each row's current
latest_manual_replay_actor - remains available as the raw latest actor-string view alongside
by_actor_family
by_dispatch_family- grouped dispatch-family buckets derived from each row's current
latest_dispatch_reference - table output renders this as a
By dispatch familysection - JSON output renders this as
by_dispatch_family - uses a compact prefix classifier over each current
latest_dispatch_reference - currently recognizes
dispatch,queue,worker,bridge,webhook, andunknown - aliases
job,runner, andtasknormalize toworker - otherwise the first normalized token is preserved
- grouped dispatch-family buckets derived from each row's current
top_latest_dispatch_references- top latest dispatch references
- each item includes
dispatch_referenceandcount - aggregated from each row's current
latest_dispatch_reference - remains available as the raw latest dispatch-string view alongside
by_dispatch_family
recent_dead_letter_trend- rendered in JSON as
recent_dead_letter_trend - rendered in table output as
Recent dead-letter trend - includes
window,bucket,windowed_count, and per-bucket counts
- rendered in JSON as
- summary controls
--top--trend-window--trend-bucket- aggregates over the existing dead-letter backlog read model in the CLI layer
lango status dead-letterstabledefaultjsonsupport--query--adjudication--latest-status-subtype--latest-status-subtype-family--any-match-family--manual-replay-actor--dead-lettered-after--dead-lettered-before--dead-letter-reason-query--latest-dispatch-reference--offset--limit
lango status dead-letter <transaction-receipt-id>tabledefaultjsonsupport- canonical receipts-backed detail
latest_background_taskbridge included by default
lango status dead-letter retry <transaction-receipt-id>- reads current detail status first
- prechecks
can_retry - rejects before mutation with explicit retry-precheck wording when
can_retry = false - default confirm prompt
--yesbypass--actoroverrides the local fallback with an explicit replay actor principal- injects a local default operator principal when the runtime context does not already carry one
- always captures an immediate structured follow-up observation after request acceptance when detail reload succeeds
--waitpolls follow-up status until it changes or times out--wait-intervaland--wait-timeoutcontrol the polling loop- reuses
retry_post_adjudication_execution - success output reports retry-request acceptance, not completed execution
- table output can show
Follow-up Polls,Wait Timed Out,Follow-up Error, and a structuredFollow-upblock jsonreturnstransaction_receipt_id,result,message,follow_up,follow_up_error,poll_count, andtimed_out- when
--output jsonis selected, operational failures also return a structured JSON error payload instead of plain text - invocation failures surface separately from precheck rejection
Current Limits¶
This slice does not yet include:
- repair actions beyond retry
- generic dead-letter browsing for all background tasks
- full event history dump
- configurable taxonomy redesign beyond the current reason/actor/dispatch heuristics
- generic async retry policy redesign
- replay substrate normalization beyond the current operator-facing retry surfaces
- policy-driven defaults for follow-up execution and replay behavior