Skip to content

tui3: a reply that is only a number and a full stop draws nothing #1072

Closed

Description

@AbirAbbas

What happens

Ask the chat something whose whole answer is a number, and the model replies 1024. or 32.. The turn folds to ▸ worked 5.1s · thought 0.2s · ctrl+e and nothing stands under it. ctrl+e opens the fold and shows only the thought row. The transcript has the text ("role":"assistant","content":"1024."), and the store has the message row, so the model answered and the surface dropped it.

Paris, 32 (no full stop), a fifteen-word sentence and a three-sentence answer all draw. Only <number>. vanishes.

Why

internal/tui2/prose hands the reply to Markdown, and 32. on a line of its own is an ordered list with one empty item. renderer.list (internal/tui2/prose/render.go, the list method) pushes the marker column, renders the empty item, and pops it with len(r.out) > before false, so the marker is discarded too. The reply renders to zero rows and the deck skips it.

Replication a stranger can run

Unit level, no model:

// internal/tui2/prose/bare_number_test.go
func TestABareNumberedReplyStillDraws(t *testing.T) {
	for _, in := range []string{"32.", "1024."} {
		if got := strings.TrimSpace(strings.Join(Render(in, Options{Width: 80}), "\n")); got == "" {
			t.Errorf("%q rendered to nothing", in)
		}
	}
}

Fails today on dev (80e985165) and on the shipped d8e9dd6b5: both "32." and "1024." render to "", while "32", "Paris" and "1. one" draw.

Live, any model: bin/codeaf in tmux, type what is 2 to the power 5? reply with only the number followed by a period, nothing else. The model says 32. (check the session's transcript.jsonl); the screen shows the worked chip and no answer.

Acceptance, end to end first

  1. Real binary in tmux, the ask above: the answer row under the chip reads 32. (or the number the model chose).
  2. go test ./internal/tui2/prose -run TestABareNumberedReplyStillDraws passes: a Markdown ordered-list marker with no item body is drawn as the literal text, never as an empty list.
  3. 1. one still draws as a list, and the existing internal/tui2/prose suite stays green.

Found on 2026-09-16 while running the journey suite proposed in #1068 against dev; its first journey (what is 2 to the power 10?) timed out waiting for 1024 on screen.

Activity

  1. added 2 commits that reference this issue on Sep 16, 2026
  2. added
    good first issueSmall and isolated, the acceptance already written, no ruling owed; a safe first pull request
    area:chatThe v3 surface a person sits in front of (internal/tui3)
    on Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:chatThe v3 surface a person sits in front of (internal/tui3)bugSomething the code does that it should notgood first issueSmall and isolated, the acceptance already written, no ruling owed; a safe first pull request

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions