charmbracelet/crush · error
failed to list messages: %w
Error message
failed to list messages: %w
What it means
runSessionShow, after resolving the session, lists its messages via the message service. Any failure in that query (scan error, DB issue, context cancellation) is wrapped as 'failed to list messages'.
Source
Thrown at internal/cmd/session.go:278
func runSessionShow(cmd *cobra.Command, args []string) error {
event.SetNonInteractive(true)
ctx, svc, cleanup, err := sessionSetup(cmd)
if err != nil {
return err
}
defer cleanup()
event.SessionShown(sessionShowJSON)
sess, err := resolveSessionID(ctx, svc.sessions, args[0])
if err != nil {
return err
}
msgs, err := svc.messages.List(ctx, sess.ID)
if err != nil {
return fmt.Errorf("failed to list messages: %w", err)
}
msgPtrs := messagePtrs(msgs)
if sessionShowJSON {
return outputSessionJSON(cmd.OutOrStdout(), sess, msgPtrs)
}
return outputSessionHuman(ctx, svc.cfg, sess, msgPtrs)
}
func runSessionDelete(cmd *cobra.Command, args []string) error {
event.SetNonInteractive(true)
ctx, svc, cleanup, err := sessionSetup(cmd)
if err != nil {
return err
}
defer cleanup()
View on GitHub (pinned to 7944b8e522)
Solutions
- Read the wrapped underlying error to distinguish scan/unmarshal failures from connection issues
- Check crush version vs the DB schema version; upgrade crush or migrate the DB
- Back up the DB, then inspect/repair the messages table for the given session
- Ensure no concurrent crush process is holding a write lock
Defensive patterns
Strategy: try-catch
Try / catch
msgs, err := svc.messages.List(ctx, sess.ID)
if err != nil {
if errors.Is(err, context.Canceled) {
return err
}
slog.Error("Failed to load messages", "session", sess.ID, "error", err)
return fmt.Errorf("failed to list messages: %w", err)
} Prevention
- Run the same crush version that wrote the database
- Back up the DB before manual edits to the messages table
- Watch for unmarshal errors on message content indicating corrupt rows
- Avoid concurrent writers on the same data dir
When it happens
Trigger: svc.messages.List(ctx, sess.ID) errors: messages table schema mismatch, corrupted rows (invalid JSON in message content), DB lock, or canceled context.
Common situations: Database written by a newer/older crush version with a different messages schema; a row with malformed JSON content that fails to unmarshal during scan; concurrent write lock.
Related errors
- failed to get session: %w
- error creating file history: %w
- failed to create session for non-interactive mode: %w
- failed to list sessions: %w
- failed to delete session: %w
AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29).
Data as JSON: /api/errors/b0d16da599653c17.
Report an issue: GitHub.