tui: show the strand and let the reader move through it #135

Merged
PerishFire merged 1 commit from land/santi-tui-direct-relationship into main 2026-08-09 13:35:47 +00:00
Owner

tui: show the strand and let the reader move through it

The body was a chat log wearing a strand's clothes. Messages arrived with
their newlines flattened into single spaces, so every markdown structure the
soul wrote collapsed into one grey slab, and the only thing marking a speaker
was a "you>" prefix borrowed from a chat window.

Reading: history keeps the newlines it was written with, and markdown is
rendered rather than printed, so headings, lists, fences and inline code look
like what they are. A message is bounded by its own timestamp, in local time,
because the entry sequence it used to show meant nothing to anyone: five in
six entries are thinking and tool calls, so the number was neither the message
count nor anything a person would say aloud. The gap those entries leave is
stated instead of hidden.

Moving: scrolling rebuilt every line of the strand on every frame, which cost
55ms and made the wheel feel like tar. The fold is cached against a content
revision, so a scroll frame now costs 7ms and no debounce is needed to hide it.
Paging moves half a screen so the previous view keeps an anchor, and the wheel
moves three lines like every other terminal.

Naming: a strand can be called something. The name is local to this machine,
kept beside the user's config rather than in the repository's secrets, and it
falls back to the id. /strand and /soul list what exists and switch
between them; switching is just a change of view, so it never refuses on an
unsettled receipt. Stopping work is what Escape is for.

Grouping: activity is grouped by the turn that owns it. Finding that owner
needed fixing first, since thinking and tool events carry their turn one level
deeper than a message does, and tool results do not carry one at all.

tui: show the strand and let the reader move through it The body was a chat log wearing a strand's clothes. Messages arrived with their newlines flattened into single spaces, so every markdown structure the soul wrote collapsed into one grey slab, and the only thing marking a speaker was a "you>" prefix borrowed from a chat window. Reading: history keeps the newlines it was written with, and markdown is rendered rather than printed, so headings, lists, fences and inline code look like what they are. A message is bounded by its own timestamp, in local time, because the entry sequence it used to show meant nothing to anyone: five in six entries are thinking and tool calls, so the number was neither the message count nor anything a person would say aloud. The gap those entries leave is stated instead of hidden. Moving: scrolling rebuilt every line of the strand on every frame, which cost 55ms and made the wheel feel like tar. The fold is cached against a content revision, so a scroll frame now costs 7ms and no debounce is needed to hide it. Paging moves half a screen so the previous view keeps an anchor, and the wheel moves three lines like every other terminal. Naming: a strand can be called something. The name is local to this machine, kept beside the user's config rather than in the repository's secrets, and it falls back to the id. `/strand` and `/soul` list what exists and switch between them; switching is just a change of view, so it never refuses on an unsettled receipt. Stopping work is what Escape is for. Grouping: activity is grouped by the turn that owns it. Finding that owner needed fixing first, since thinking and tool events carry their turn one level deeper than a message does, and tool results do not carry one at all.
tui: show the strand and let the reader move through it
Some checks failed
guard / guard-macos (pull_request) Successful in 54s
guard / guard (pull_request) Successful in 6m11s
guard / guard-macos (push) Successful in 54s
guard / guard (push) Failing after 4m56s
368d4a9039
tui: show the strand and let the reader move through it

The body was a chat log wearing a strand's clothes. Messages arrived with
their newlines flattened into single spaces, so every markdown structure the
soul wrote collapsed into one grey slab, and the only thing marking a speaker
was a "you>" prefix borrowed from a chat window.

Reading: history keeps the newlines it was written with, and markdown is
rendered rather than printed, so headings, lists, fences and inline code look
like what they are. A message is bounded by its own timestamp, in local time,
because the entry sequence it used to show meant nothing to anyone: five in
six entries are thinking and tool calls, so the number was neither the message
count nor anything a person would say aloud. The gap those entries leave is
stated instead of hidden.

Moving: scrolling rebuilt every line of the strand on every frame, which cost
55ms and made the wheel feel like tar. The fold is cached against a content
revision, so a scroll frame now costs 7ms and no debounce is needed to hide it.
Paging moves half a screen so the previous view keeps an anchor, and the wheel
moves three lines like every other terminal.

Naming: a strand can be called something. The name is local to this machine,
kept beside the user's config rather than in the repository's secrets, and it
falls back to the id. `/strand` and `/soul` list what exists and switch
between them; switching is just a change of view, so it never refuses on an
unsettled receipt. Stopping work is what Escape is for.

Grouping: activity is grouped by the turn that owns it. Finding that owner
needed fixing first, since thinking and tool events carry their turn one level
deeper than a message does, and tool results do not carry one at all.

Land-Source: santi-tui-direct-relationship@1eb1e27a6cd5c9ef63332c660c0719722bf5afc1
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
PerishFire/santi!135
No description provided.