Uh oh!
There was an error while loading. Please reload this page.
fix(cli): fold dashboard URL instead of cropping in conductor status - #413
Merged
Conversation
#405) At a default 80-column terminal, the `Dashboard` column of `conductor status` (and the running-list table shared with `conductor stop`) was elided by rich to a bare `…` — the one field the command exists to surface. Trim `Started` to minute precision in UTC via a new `_format_started_at` helper (down from a 32-character microsecond timestamp) and set `overflow="fold"` on the `Dashboard` column so a long URL wraps onto a second line instead of being cropped. The `--json` payload is untouched; only the human-readable table changed. Test fixtures now write PID files through the real `write_pid_file` instead of hand-built JSON with a shorter synthetic timestamp, since that shortcut is what let the cropping through undetected. Closes#405
Code review of PR #413 turned up two independently-confirmed blocking issues in _format_started_at: - .astimezone(UTC) is unguarded and raises OverflowError (not ValueError) for a timezone-aware value near datetime.min/max. This crashed `conductor status`/`conductor stop` entirely on a single malformed PID file, hiding every other running workflow and violating the "one bad file can't cost you the rest" guarantee pid.py's own malformed-file handling already provides. Now caught alongside ValueError, matching the fallback behavior for an unparseable string. - The fallback path returns the raw value unbounded (unlike the fixed 17-character happy path), which could reintroduce issue #405's cropping bug in the Started column instead of Dashboard. Started now folds too, consistent with Dashboard. Also: - Log a warning on the fallback path, matching pid.py's convention for the same untrusted PID-file data. - Fix a self-contradictory comment claiming naive `started_at` values were "always written via datetime.now(UTC)" -- that call always produces a tz-aware string, so nothing it wrote could ever hit the naive branch. Reworded to describe the actual defensive intent. - Move a docstring sentence describing function-wide behavior out of the `show_url` Args bullet it was incorrectly nested under. - Reword the CHANGELOG's "conductor status is unreleased, so..." justification for --json being untouched -- nothing about the JSON schema changed, so that framing was a non sequitur; the real reason is the table/audit-log purpose split. - Note in docs/cli-reference.md that `conductor stop`'s shared listing also gets the shorter Started timestamp. - Add regression tests: the OverflowError boundary value, one malformed started_at not hiding a healthy run, Started's fold column, and conductor stop's minute-precision rendering (previously untested despite being explicitly claimed in the PR's own docs). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Jason Robert (jrob5756)
marked this pull request as ready for review
August 11, 2026 20:33
Uh oh!
There was an error while loading. Please reload this page.
Jason Robert (jrob5756) pushed a commit
that referenced
this pull request
Aug 11, 2026
main advanced again after the first merge, adding PR #413 (fold the conductor status/stop dashboard-URL column instead of cropping it, render Started at minute precision). Only tests/test_cli/test_stop.py conflicted, on the same TestStopAutoDetect class our self-exclusion merge touched. - Added the os/re imports #413 needs alongside our existing imports. - Kept #413's new test_lists_started_at_minute_precision case. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Jason Robert (jrob5756) pushed a commit
that referenced
this pull request
Aug 11, 2026
Resolves a CHANGELOG.md ordering conflict with #414/#413/#388, which merged into main while this PR's review was in progress. No other files conflicted; workflow.py's auto-merge is clean (this branch's _context_window_anomaly_warned latch and main's new _pricing_hook_silent_warned latch are independent additions to the same __init__). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.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 freeto 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.
Summary
At a default 80-column terminal, the
Dashboardcolumn ofconductor status(and the running-list table shared withconductor stop) was elided by rich to a bare…— the one field the command exists to surface, recoverable only by hand from thePortcolumn.Changes
_format_started_atto renderStartedat minute precision in UTC (e.g.2026-08-11 12:48Z), down from a 32-character microsecond-precision timestamp.overflow="fold"on theDashboardcolumn so a long URL wraps onto a second line instead of cropping. A folded URL is complete and readable; a cropped one is not.--jsonoutput is untouched — only the human-readable table rendering changed._print_running_listis shared withconductor stop, so its listing gets the shorter timestamp too.docs/cli-reference.mdandCHANGELOG.md.write_pid_fileinstead of hand-built JSON with a shorter syntheticstarted_at— the shortcut that let this through undetected in the first place.Closes#405