Repository navigation
fix: report Claude Code's StopFailure as done - #48
Merged
Merged
Conversation
Claude Code fires StopFailure instead of Stop when an API error ends the turn, so the card kept spinning after a usage limit and lich never read the limit off the transcript.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Claude Code fires
StopFailureinstead ofStopwhen an API error ends the turn: a usage limit, an overload, a failed login (measured on 2.1.293, where the hook is fire-and-forget). The plugin registered onlyStop, so after any of those the card kept its spinner until the next prompt.This registers
StopFailurewith no matcher and reportsdone, the same asStop: the turn is over either way. Which error it was stays out of the report; lich reads it off the transcript on everydoneand, for a usage limit, parks the turn's continuation for when the limit resets (omartelo/lich,feat/auto-resume-after-limit).hooks/hooks.json:StopFailure→report-state.sh donetests/hooks.test.mjs: pins that Claude reportsdoneonStopFailurefor every errordocs/providers.md: the event vocabulary row fordoneNo contract change:
doneis an existing state, so the vendored fixtures andtests/lich-refstay as they are.node --test tests/*.test.mjs: 328 passing.