# Normalize error handling at one boundary so no catch is silent

Catch blocks that each do something different, brought onto one convention with nothing swallowed.

Category: Refactors and cleanup
Source: https://letsship.ai/use-cases/normalize-error-handling-at-a-boundary
Published: 2026-08-25

## Goal

Give one boundary a consistent error-handling convention with no silent catches.

## Acceptance criteria

- Every catch logs with context or rethrows
- Error types follow the project's convention
- Tests assert the behaviour of each catch path
- Deliberate control-flow catches are marked with a reason

## What lands as proof

A test per catch path asserting it either surfaces or rethrows, so silence is proven absent.

## Prompt

Copy this to an agent to open the ticket:

```text
Create a Linear issue in my team and assign it to the SHIP agent.

Title: Normalise error handling in {boundary}

Description: Give one boundary a consistent error-handling convention with no silent catches.

Acceptance criteria:
- Every catch logs with context or rethrows
- Error types follow the project's convention
- Tests assert the behaviour of each catch path
- Deliberate control-flow catches are marked with a reason

Before you create the issue, search this repository for catch blocks that discard the error and replace {boundary} with the worst area.
```

## Questions

### What does the agent actually change?

The ticket is scoped to one outcome: give one boundary a consistent error-handling convention with no silent catches. Work that serves that outcome is in scope, and anything outside it is left for a separate ticket, so the pull request stays reviewable.

### How do I know the work is done?

The pull request carries the evidence, not only the diff. Here that means every catch logs or rethrows, asserted by tests, so a reviewer can confirm the result without reproducing the work locally.

### How much oversight does this need?

None is required before the run starts. Every claim this ticket makes can be checked by machine, so the agent works straight through and a person reviews the finished pull request like any other.
