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

  1. Read the wrapped underlying error to distinguish scan/unmarshal failures from connection issues
  2. Check crush version vs the DB schema version; upgrade crush or migrate the DB
  3. Back up the DB, then inspect/repair the messages table for the given session
  4. 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

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


AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29). Data as JSON: /api/errors/b0d16da599653c17. Report an issue: GitHub.