| 668 | } |
| 669 | |
| 670 | func (m *Service) dispatchTaskUnblocked( |
| 671 | ctx context.Context, |
| 672 | block TaskBlock, |
| 673 | taskRecord Task, |
| 674 | actor ActorContext, |
| 675 | ) { |
| 676 | payload := hookspkg.TaskUnblockedPayload{ |
| 677 | PayloadBase: hookspkg.PayloadBase{ |
| 678 | Event: hookspkg.HookTaskUnblocked, |
| 679 | Timestamp: m.now().UTC(), |
| 680 | }, |
| 681 | TaskContext: m.taskHookContext(taskRecord, actor, nil), |
| 682 | BlockID: strings.TrimSpace(block.ID), |
| 683 | Kind: string(block.Kind.Normalize()), |
| 684 | Reason: redactTaskSecretText(strings.TrimSpace(block.Reason)), |
| 685 | Details: redactTaskSecretJSON(cloneRawJSON(block.Details)), |
| 686 | ClearedAt: block.ClearedAt, |
| 687 | ClearNote: redactTaskSecretText(strings.TrimSpace(block.ClearNote)), |
| 688 | } |
| 689 | _, err := m.taskHooks.DispatchTaskUnblocked(taskRunObservationHookContext(ctx), payload) |
| 690 | m.reportTaskHookFailure(hookspkg.HookTaskUnblocked, err, taskRecord) |
| 691 | } |
| 692 | |
| 693 | func (m *Service) dispatchTaskNeedsAttention( |
| 694 | ctx context.Context, |