Repository navigation
Status bar messages either stick around or vanish before I've read them, and there's nowhere to see an error I missed #587
Description
Opportunity
What TuiCode tells me on the status bar either won't go away or gets lost.
- Replies stick.
Saved: …,Opened folder: …,Renamed: …stay until something replaces them, so I can't tell whether what I'm reading is new. - Errors vanish.
Couldn't open the link: …or a failed review refresh is overwritten by the next tab switch, which puts the file's path back. If I was typing when it came up, I never saw it, and there's nowhere to look it up. ⚠ nonly counts the log. It counts warnings written to~/.tui/logs/TuiCode.log(Warnings go to a log you open with Show log, and the status bar counts the ones you haven't seen #493), not the errors the bar showed me.
Evidence:
- The MentalDesk style guide now has a rule for this, Status messages (guide, tui-style-guide#96), shipped in MentalDesk.Tui 0.3.15 (Dependabot Bump MentalDesk.Tui from 0.3.13 to 0.3.15 #585). Its PR names TuiCode's sticky
Saved: …as the thing adopting it fixes. - In
origin/main(96cd453),StatusBarPart.SetMessage/SetErrorhold any message until the next one; the copy message alone has its own timer (Workbench.ShowCopy). The bar's resting text is the active file's full path, or the language server's trouble (C# language server stopped: …). - AGENTS.md: where the library has a type, use it rather than a TuiCode copy; a change it needs goes to the style guide first.
Options considered
- Do nothing. No work, and the bar keeps working as a path display. But replies still sit there, errors I typed through are gone for good, and TuiCode drifts from the guide the other MentalDesk apps follow.
- Time replies out in
StatusBarPart. A 5-second timer onSetMessage, as the copy message already has. Small, and fixes the sticky replies. It doesn't save an error I missed, and it's a TuiCode copy of a rule the library now owns. - Write the guide's rules into
StatusBarPart, plus our own Messages list. Everything the guide asks for, keeping TuiCode's bar as it is. But it copiesAppStatusBarandMessagesDialogline for line, which AGENTS.md rules out, and the two would drift. - Use the library's
AppStatusBarandMessagesDialog. TuiCode's focus word, chord, grammar, mode, wrap, diff status and position move onto the library bar, whose right end already has a slot for state. It gets the guide's timing,⚠ nand Messages for free, and every later rule. It needs two small additions to the library, below, which go to the style guide first.
Choosing 4. It's the only option that fixes both halves without a second copy of the rule. Option 2 is the fallback if the library additions are refused.
Proposal
Every status-bar message follows the guide:
- A reply (
Saved: …,Copied 3 lines,Renamed: …,Review submitted on #12) stays 5 seconds, or goes at my next key if that's sooner. - News (a folder reloaded, a file changed on disk, a language server stopped) stays 5 seconds, and comes off as soon as it stops being true: a server that restarts takes
… stoppedoff. - An error doesn't time out. It stays until my next key, or for error news until my next key after its 5 seconds, so typing through it doesn't lose it.
- When no message is showing, the bar shows what it shows today when idle: the active file's path, or
TuiCode • F1 helpwith no file open. ⚠ nsits just left of the grammar, in theErrorcolours. It counts the errors the bar has shown and the warnings written to the log since I last looked. Clicking it opens Messages.- Show messages (Help menu next to Show log, palette, mnemonic
sm) is the library's dialog: this session's messages, newest first, each with its time, errors in theErrorcolours, log warnings among them.Ctrl+Ccopies the selected line,Esccloses it, and its keys are buttons along the bottom. Opening it clears⚠ n. - Show log stays where it is (Help menu,
sl) for the detail behind a warning. It no longer has a counter of its own. - Grammar,
Column select,Wrap, the diff'sFile 2 of 7 • Change 1 of 4and the position move to the bar's right end, next to each other, as in VS Code. They no longer get pushed off by a long message.
Mockup
A file open, nothing to say (the path is the resting text):
Editor • ~/code/TuiCode/src/TuiCode.Workbench/Parts/StatusBarPart.cs C# • Wrap • Ln 42, Col 9
An error I typed through, still there after 5 seconds, and counted:
Editor • Couldn't refresh the review: gh: HTTP 502 [⚠ 2] • C# • Ln 44, Col 1
Messages, from clicking ⚠ 2:
┌┤Messages├────────────────────────────────────────────────────────────────┐
│ 10:42:07 Couldn't refresh the review: gh: HTTP 502 │
│ 10:41:55 Saved: StatusBarPart.cs │
│ 10:38:12 Couldn't watch ~/code/TuiCode/src: too many open files │
│ 10:31:40 Opened folder: ~/code/TuiCode │
│ │
└──────────────────────────────────────────────[ Ctrl+C Copy ]─[ Esc Close ]┘
(The first and third rows draw in the Error colours; the selection starts on the newest.)
Scope
In: the status bar on the library's AppStatusBar; every SetMessage/SetError call sorted into a reply, news or error, with news withdrawn where TuiCode knows it stopped being true (language server restarted, review refresh worked, reload done); Show messages with its mnemonic and menu item; log warnings counted in ⚠ n and listed in Messages; the copy message's own timer removed; the MentalDesk.Tui bump to the release with the additions below.
Out: a setting for the 5 seconds; keeping Messages across sessions (the log already does); showing log warnings on the bar as they happen (they stay quiet, as #493 decided, and are counted); moving loading states off the bar (already done, #525).
Delivery
One PR, after a style-guide PR that adds to AppStatusBar:
- a resting text shown while no message is (TuiCode's path), since today the bar's left side is empty between messages;
- a way for the app to add its own entries to the history and
⚠ nwithout showing them (TuiCode's log warnings).
That library change isn't one the Dev can open here (mentaldesk/tui-style-guide isn't in this team's contributesTo), so the task waits on it. I'll file the style-guide issue when this is approved and record the task as waiting on its release.
Decided
All of these were the Lead's, accepted when the stakeholder approved the pitch.
- Adopt the library's bar rather than copy its rules. AGENTS.md's rule, and the other MentalDesk apps get the same bar.
- The path stays as the resting text. It's the only place TuiCode shows a file's folder, and it's how two
README.mdtabs are told apart. Losing it would be a regression for a rule that's about messages. - One
⚠ n, counting errors and log warnings. Two badges side by side would read as the same thing. The style-guide PR suggested exactly this for TuiCode. - Log warnings aren't flashed on the bar. Warnings go to a log you open with Show log, and the status bar counts the ones you haven't seen #493 kept them quiet on purpose; most are a file TuiCode couldn't watch or a setting it couldn't read, with nothing for me to do right then.
- Language-server trouble is news, withdrawn when it's fixed. Today it replaces the path until the tab changes; as news it shows once, stays in Messages, and comes off when the server recovers.
- Named Show messages, mnemonic
sm, no default key. Its initials, beside Show log (sl);smis free and no other mnemonic's prefix. Clicking⚠ nis the quick way in.
Original idea
Opportunity
What TuiCode tells me on the status bar either won't go away or gets lost. Saved: /long/path/file.cs stays there until something else replaces it, so I can't tell if it's new. A failure like Couldn't refresh the review is overwritten by the next file I switch to. If I was typing when it came up, I never see it, and there's nowhere to look it up afterwards. ⚠ n only counts log warnings, not the errors the bar showed me.
Evidence
- Dependabot PR Bump MentalDesk.Tui from 0.3.13 to 0.3.15 #585 brings MentalDesk.Tui 0.3.15. Its guide adds Status messages (guide, mentaldesk/tui-style-guide#96):
- A message is a reply or news. It stays 5 seconds, a newer one replaces it, and a reply goes at your next key.
- An error doesn't time out. Error news stays until your next key after its 5 seconds, so typing through it doesn't lose it.
- News that stops being true comes off.
- Every error counts in
⚠ n. - A Messages list (Help menu, palette, click
⚠ n) shows the session's messages with their times.Ctrl+Ccopies one.
- TuiCode today (
StatusBarPart):SetMessage/SetErrorkeep a message until the next one replaces it, soSaved: …,Opened folder: …andRenamed: …all stay put.SetErroris overwritten like any other message.⚠ ncounts unseen log warnings (LogFile.Unseen) and opens Show log.- The bump itself needs no code change: TuiCode doesn't use the library's
AppStatusBar, and the build failure on Bump MentalDesk.Tui from 0.3.13 to 0.3.15 #585 ismain's, not the bump's (main doesn't build: the unsaved-edits tests still look for ConfirmView, which #582 removed #586).
- The guide PR says what adopting it would change: use
ShowMessage/ShowNewssoSaved: …no longer sits there. Unseen log warnings could feed the library's⚠ nin place of TuiCode's own counter, with Show log kept for diagnosis. AGENTS.md: where the library has a type, use it rather than a TuiCode copy. The pitch should weigh moving toAppStatusBaragainst following the rules inStatusBarPart, which also carries the focus region, cursor, grammar and diff status.
Why it fits
Vision theme Daily-driver gaps, and Familiar: the bar should behave like the other MentalDesk apps, and an error I typed through shouldn't be gone for good.
Activity
a-team-app commentedon Oct 20, 2026
Recommended: Medium · theme 1 (Daily-driver gaps), medium · errors I type through are lost today, and the library now has the rule built
a-team-app commentedon Oct 23, 2026
Pitched: room opened up. One PR adopting the library's status bar, after a small style-guide change I'll file once you approve. Nothing for you to answer; approving accepts Assumed.
a-team-app commentedon Oct 23, 2026
Broken down into one task:
It's held (
blocked): it needs twoAppStatusBaradditions in tui-style-guide, which I've drafted in #592 since I can't file issues there. Please file it and reply on #592 with the number; it then waits on that release.One thing I settled: the library counts in
⚠ nonly errors that happened by themselves, not an error replying to what you just did (you're looking at that one). The task follows the library rather than the pitch's "every error". Say if you want the other errors counted too, and I'll add it to the upstream issue.Assumed is now Decided, all of it mine, accepted on approval.
a-team-app commentedon Oct 23, 2026
Tried on
origin/main(c534098) in a scratch repo with a broken settings file. The settings error stayed on the bar past 5 seconds and went at my next key;⚠ 2counted it and the log warning.Saved: …went back to the file's path after 5 seconds.Ctrl+Space smopened Messages, newest first with times, errors in red,Ctrl+C CopyandEsc Closebuttons, and⚠ 2cleared. Closing as done.