- bonfire.Sanitize (additive), moved from diary's console channel: tab
kept, CR and LF to a space, every other control character dropped
- applied before styling to every error-block line (message,
explanation, Try lines, -v chain), process-view item names and errors,
the current item of spinner and progress, failure lines, and table
headers and cells in both layouts
- diary's console handler calls bonfire.Sanitize; README and the
writing-commands page say so (WR-05)
- while a view runs, runLive relays SIGINT and SIGTERM (unless ignored);
on a signal it kills the program, which shows the cursor and restores
the terminal, unregisters the view, stops relaying and raises the same
signal again, so the default action or the command's own handler still
applies
- the generated main, bonfire.Execute's context and Ctrl+C for commands
without a live view are unchanged
- TestLiveViewRestoresTerminalOnSignal pins both paths in a re-executed
helper process (WR-01)
- the registered view keeps the console that started it; Println, Printf
and status lines go above it only from that console, other consoles
write to their own writers (bonfire.PrintAbove still reaches any view)
- runLive claims the single live slot by check and set under liveMu and
reports when it could not, so the widget prints plain lines
- unregister, finish and wait run deferred, so a panic in work leaves no
registration behind and still propagates (WR-02)
- each PrintAbove block is one bubbletea print message sent straight to
the program's queue under liveMu, so the event loop prints it in call
order instead of a command goroutine racing it back
- runLive unregisters, sends finishMsg and waits under liveMu, so a late
printer writes after the final frame and no line is lost
- TestPrintAboveOrderedNoLoss pins order and no loss for spinner,
progress, process and a printer racing the finish (CR-01)
- Spinner, gradient progress bar and the multi-row process view ported
from SSU to bubbletea v2 (input off, no signal handler, command
context); boxed tables through lipgloss/table
- Prompts use huh fields and a single-select port of SSU's selector with
its confirmation screen on an interactive terminal; line prompts off a
terminal and under --no-ansi are unchanged (piped passwords still work)
- -q hides decoration but keeps data and errors; -n returns defaults and
Secret fails with a hint on a terminal stdin; --no-ansi and non-TTY
runs print today's plain lines
- Helpers: GlobalsOf, VerbosityOf, IsQuiet, Interactive, ConfirmProceed,
Process, Current, Failed, PrintAbove, ItemProgress, ErrAborted
- diary's styled console lines print above a running live view