feat(printer, cli): Add printer-owned status regions - #1099
Open
JeanMertz wants to merge 6 commits into
Open
Conversation
Document the accepted printer-owned status region design and split its implementation into six tracked tickets. Regions will replace scattered terminal timers and can show bounded child-process stderr during MCP startup and tool execution. Update maintenance recipes to read lowercase JSON fields from `jp conversation ls`, preserving review and RFD workflow automation. Signed-off-by: Jean Mertz <git@jeanmertz.com>
Signed-off-by: Jean Mertz <git@jeanmertz.com>
Signed-off-by: Jean Mertz <git@jeanmertz.com>
Signed-off-by: Jean Mertz <git@jeanmertz.com>
Signed-off-by: Jean Mertz <git@jeanmertz.com>
Signed-off-by: Jean Mertz <git@jeanmertz.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements RFD 091. Ephemeral terminal chrome —
⏱ Waiting… 9.2sandthe rows above it — becomes a first-class concept owned by
jp_printerrather than nine hand-rolled mechanisms scattered across
jp_cli.Every one of those nine fought the same invariant: chrome must be erased
before any persistent write, and must not disappear before that write
arrives. It was enforced by per-site discipline, and the codebase carried
the scars of getting it wrong —
clear_temp_line()before the interruptmenu,
cancel_reasoning_timer()insideflush_on_transition, thewaiting indicator's
finish().awaitordering dance. Each was a bug fixedat one site; none protected the next.
The printer already serializes every write through one worker thread,
which is the only place in the process where "clear chrome, then write
content" can be made atomic across stdout, stderr and
/dev/tty. Aclient now claims a
StatusRegion, sets a detail, and drops it; theworker draws, ticks, and erases.
jp_cli::timeris deleted.Two long-running child processes gain a live view of their progress:
an MCP server starting up, and a tool executing. Both already read their
child's stderr line by line and threw it away.
User-visible changes
above the timer, so a five-minute build looks like progress rather than
a hang. On by default (
style.mcp_startup.print_stderr = "auto");set it to
falsefor the previous one-row timer.server and the tools that went with it. It used to complete silently
with the explanation only in the discarded trace log.
default (
style.tool_call.progress.print_stderr).jp query 2>fileno longer writes cursor-control bytes into the file.(
-v,--log,--log-file=-). Worth knowing before debugging: theinstinct to add
-vwhen an indicator doesn't appear guarantees itwon't. Use
--log-file=<path>instead.style.tool_call.preparing.show = falsenow suppresses the rowentirely. It previously rendered a static row and only suppressed the
elapsed time, which reads as an oversight rather than intent — but it
is the one behaviour change in the stack that could surprise someone.