Add recovery_needed and next-action surface to IssueBlockerAttention

Phase 5 of the liveness plan needs the blocker read model to distinguish
a "productive run stopped without continuation" leaf from generic
attention or stalled-review chains. Extend the shared type so server and
UI share one vocabulary for the new surface (state, reasons, owner,
hint).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-04-28 15:58:54 -05:00
1 parent 2656a86dae
commit 7d475f85bf
3 files changed
+33 -1

No files matched your search

+3
View File
@@ -333,6 +333,9 @@ export type {
IssueBlockerAttention,
IssueBlockerAttentionReason,
IssueBlockerAttentionState,
IssueBlockerNextActionHint,
IssueBlockerNextActionOwner,
IssueBlockerNextActionOwnerType,
IssueProductivityReview,
IssueProductivityReviewTrigger,
IssueReferenceSource,
+3
View File
@@ -136,6 +136,9 @@ export type {
IssueBlockerAttention,
IssueBlockerAttentionReason,
IssueBlockerAttentionState,
IssueBlockerNextActionHint,
IssueBlockerNextActionOwner,
IssueBlockerNextActionOwnerType,
IssueProductivityReview,
IssueProductivityReviewTrigger,
IssueReferenceSource,
+27 -1
View File
@@ -119,13 +119,37 @@ export interface IssueRelationIssueSummary {
terminalBlockers?: IssueRelationIssueSummary[];
}
export type IssueBlockerAttentionState = "none" | "covered" | "stalled" | "needs_attention";
export type IssueBlockerAttentionState =
| "none"
| "covered"
| "stalled"
| "needs_attention"
| "recovery_needed";
export type IssueBlockerAttentionReason =
| "active_child"
| "active_dependency"
| "stalled_review"
| "attention_required"
| "explicit_waiting"
| "productive_run_stopped"
| "continuation_exhausted"
| "continuation_suppressed"
| null;
export type IssueBlockerNextActionOwnerType = "agent" | "user" | "none";
export interface IssueBlockerNextActionOwner {
type: IssueBlockerNextActionOwnerType;
agentId?: string | null;
userId?: string | null;
}
export type IssueBlockerNextActionHint =
| "wake_to_continue"
| "needs_human_review"
| "create_recovery_issue"
| "reassign"
| null;
export interface IssueBlockerAttention {
@@ -137,6 +161,8 @@ export interface IssueBlockerAttention {
attentionBlockerCount: number;
sampleBlockerIdentifier: string | null;
sampleStalledBlockerIdentifier: string | null;
nextActionOwner: IssueBlockerNextActionOwner | null;
nextActionHint: IssueBlockerNextActionHint;
}
export type IssueProductivityReviewTrigger =