Repository navigation
feat(cli): show each deployment's steps live while it runs - #416
Open
PiquelChips wants to merge 2 commits into
Open
PiquelChips wants to merge 2 commits into
PiquelChips wants to merge 2 commits into
Conversation
Contributor
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 59 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
PiquelChips
force-pushed
the
feat/timeline-3-cli
branch
3 times, most recently
from
November 10, 2026 20:02
c43dd52 to
7910342
Compare
PiquelChips
marked this pull request as ready for review
November 10, 2026 20:33
PiquelChips
force-pushed
the
feat/timeline-3-cli
branch
from
November 10, 2026 21:29
7910342 to
4b9dfc6
Compare
PiquelChips
force-pushed
the
feat/timeline-3-cli
branch
from
November 10, 2026 22:13
4b9dfc6 to
16c44da
Compare
PiquelChips
force-pushed
the
feat/timeline-3-cli
branch
from
November 13, 2026 14:39
16c44da to
ac22143
Compare
PiquelChips
force-pushed
the
feat/timeline-3-cli
branch
from
November 13, 2026 15:00
ac22143 to
dd2ed90
Compare
Commands that wait for a deployment showed one spinner line with the operation's current phase, so nobody could tell what was done, what was left, or how long it would take. They now follow the operation's timeline stream and draw a tree of its steps: those done with how long they took (and how long they usually take, when that differs noticeably), the one running, and those left with their usual duration, under a header with a bar of steps done and the time left. The row redraws every 100 ms from the latest timeline, computing running times locally. Without a terminal, each step prints a line when it starts or changes; with `--json`, a `step` event. Each wait ends with how long the deployment took and, after a clean run, how long its steps usually take. piqueld-client gains `operation_timeline` and `operation_timeline_stream`, a small server-sent events reader, and streams without a request deadline. The follower reads through the CLI's `Wait`, which stays the one place that bounds waits by `--wait-timeout`, backs off, rides out failures once the daemon answered, and keeps a wait going through a failure the daemon retries: piquelctl reopens a stream that fails or ends, treats 45 s without a keep-alive as a drop, and polls the timeline when the daemon refuses the stream for having too many open. `Wait` reports through a small `Progress` trait, so a deployment wait shows what it rides out under its steps instead of in a second spinner. `Phase::label` names each step for people, for the dashboard to share.
The CLI treated 45 seconds without a timeline change as a dropped stream, because keep-alives never reached it: a long build or a quiet rollout made it reopen the stream every 45 seconds, rebuilding the whole timeline on the daemon each time. The client's timeline stream now reports keep-alives, so silence means no bytes at all.
PiquelChips
force-pushed
the
feat/timeline-3-cli
branch
from
November 13, 2026 20:05
dd2ed90 to
7e27229
Compare
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.
While
piquelctlwaits for a deployment, it shows one spinner line with the operation's current phase. You can't tell what already ran, what is left, or how long it will take, and in CI you get a line per phase change and nothing else.Every command that waits for a deployment (deploy, apply/save/create that deploy, promote, restore, preview create/deploy,
operation,env wait,preview wait) now follows the operation's timeline stream from #412 and draws its steps live:~usual. Failed steps show their diagnostic summary, and retrying steps show which retry they're waiting for.--json, each change is a{"step":{…}}event on stderr. Results on stdout are unchanged. Ctrl-C still only stops watching.piqueld-clientgainsoperation_timelineandoperation_timeline_stream, with a small SSE reader. Streams have no per-request deadline;--wait-timeoutbounds the wait, as for every other wait since fix(cli): keep waiting through daemon restarts and retried failures #418.Wait: once the daemon answered, a dropped stream, a restart or a busy daemon is retried with backoff, a failed attempt the daemon retries keeps the wait going, and--wait-timeoutbounds it all. 45 s without a keep-alive counts as a drop, and a 503 refusing the stream switches to polling the timeline.Waitreports through the tree, so there is never a spinner as well.Phase::label()in piqueld-core names each step for people, so the dashboard can use the same labels.Proved on a real dev instance:
piquelctlheld one timeline stream through a 79 s silent job step (counted with strace), and reruns print only the new run's steps; plus CLI and transport tests.Reviewed with review-loop: 3 rounds with 3× Claude Opus 5.5 (GPT 6.1 Sol was out of credits; a Sol pass is still owed). Verdict: approved
Note
Written by Claude Opus 5.5 in Claude Code and reviewed by Claude Opus 5.5 (via T3 Code)