Skip to content

v0.20.8 - Fix typer.Exit handling across all example scripts (2026-06-05)

What Changed?

This release fixes a systematic bug where typer.Exit raised inside try blocks was being caught by except Exception, causing spurious "Unexpected error:" or "Error during analysis:" messages with no meaningful content. The fix is applied to all affected example scripts: fit_thresholds.py, get_runs.py, get_thresholds.py, and plot_thresholds.py.


What's New

Fix: typer.Exit propagates correctly in all example scripts

What it does: Adds except typer.Exit: raise as the first handler in each try/except block where raise typer.Exit(code=1) could be mistakenly caught.

Code example:

# Before (typer.Exit caught by except Exception)
try:
    ...
    raise typer.Exit(code=1)
except Exception as e:
    stderr.print(f"Unexpected error: {e}")  # printed with empty message
    raise typer.Exit(code=1)

# After (typer.Exit propagates correctly)
try:
    ...
    raise typer.Exit(code=1)
except typer.Exit:
    raise
except Exception as e:
    stderr.print(f"Unexpected error: {e}")
    raise typer.Exit(code=1)

Installation

Quick Start

# Get the release
git checkout v0.20.8

# Setup
task env:setup

# Run CLI
uv run kazunoko --help

What's Different from the Last Version?

🐛 Fixed

  • fit_thresholds.py: typer.Exit no longer caught by except Exception
  • get_runs.py: typer.Exit no longer caught by except Exception
  • get_thresholds.py: typer.Exit no longer caught by except Exception
  • plot_thresholds.py: typer.Exit no longer caught by except Exception

Is It Safe to Upgrade?

Backward Compatible: Yes

  • No behavior change for successful runs. Error messages are now accurate when validation fails early.

Tests Passed

  • ✅ Builds without errors
  • ✅ commitizen pre-commit hook passed

Release Details

  • Date: 2026-06-05
  • Version: v0.20.8
  • Files Changed: 4
  • Commits: 20b8135, 705d927

Next Steps

No planned changes at this time.