You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Process and Review runs that skip command::start may not configure logs.waiting_line_minutes #1983
This was generated by AI while reviewing the pull request for #1495.
Finding
crate::poll::configure_waiting_lines(config.effective_waiting_line_interval()) runs in command::start (src/command.rs:116). The fix for #1495 adds the same call to the Experiment's own start, because the Experiment skips command::start and so its waiting lines ignored logs.waiting_line_minutes.
Other entry points also call logs::configured(&config) themselves, apparently without configure_waiting_lines:
src/processes.rs:650 and :742: Process runs, including Passes
src/processes/review.rs:22 and :202: Review runs by author
src/processes/source.rs:919
If any of these reaches a waiting stage without first configuring the interval, its waiting lines use the built-in 5 minutes. Examples are CI watch, Self-merge and host-resource waits. They would then ignore both logs.waiting_line_minutes and the half-silence fallback for a low inbox.silent_minutes. With inbox.silent_minutes = 4, for example, a waiting stage would still repeat every 5 minutes and could show as Silent.
It has not been reproduced. Neither the reviewer nor the implementer checked whether those paths reach a waiting stage in the same process before some other call configures the interval. WAITING_LINE_INTERVAL is a process-wide OnceLock, so whichever call comes first wins.
Why this was not decided in that pull request
#1495 is limited to an Experiment's Trial waiting lines. Changing how every other Command configures waiting lines is a separate behaviour change, and it has no Spec. It could mean folding the call into logs::configured or a shared start helper. Whether it is a real bug, and which shape to use, needs triage.
Confirmed on Base branch main at d7f9f18. Fix #1983 as one bounded startup-configuration change.
Diagnosis
Process and Review commands bypass command::start (src/main.rs:471–475). Their startup paths call logs::configured at src/processes.rs:650,742, src/processes/source.rs:919 and src/processes/review.rs:22,202, but that function only configures logging (src/logs.rs:313; src/logs/recording.rs:151). Waiting-line configuration currently happens only in command::start and Experiment startup.
These paths reach real waits: Review Delivery calls CI watch (src/processes/review/delivery.rs), and a Custom process copied from processes/ticket-run.toml reaches Delivery and Self-merge. CI watch constructs WaitingLine at src/ci.rs:528. With no configured interval, WaitingLine uses 300 seconds (src/poll.rs:37), bypassing both logs.waiting_line_minutes and UserConfig::effective_waiting_line_interval (src/config.rs:145). Host-resource and Self-merge waits use the same mechanism.
Reproduction
A scratch probe reused tests/support::Scenario with real Git, fake GitHub and fake Harnesses. It held one successful check pending for 14 observations and set THIRDSHIFT_WAITING_MINUTE_MS=150.
With logs.waiting_line_minutes=1, a normal Ticket run emitted seven unchanged CI waiting lines; a Custom process copied from the Built-in ticket-run, an explicit Review run and a Review --author Pass each emitted one. With waiting_line_minutes=5 and inbox.silent_minutes=4, the normal Ticket run emitted five lines; each affected command again emitted one. All eight commands completed successfully after CI passed. The reserved ticket-run name cannot be run directly as a Custom process; copy its definition under another name.
Implementation and acceptance
Capture the effective waiting interval at the existing common startup boundary, logs::configured or a helper it calls, before waits can begin. Remove redundant configuration calls if centralized. Preserve the existing OnceLock first-initialization behavior and test-minute scaling.
Add CLI regression coverage for explicit waiting intervals and the half-silence fallback through Custom process and Review startup, including Review --author. Cover Process Pass and issue startup paths, and verify repeated waiting lines reach both stderr and the Command log. Reuse the fixtures in tests/ci.rs and tests/command_logs.rs. Keep the normal Ticket and Experiment behavior passing.
The 300-second fallback exceeding a four-minute Silent threshold is confirmed by code; an actual Inbox transition to Silent was not observed. No production access or human decision is needed to implement this fix.
Activity
JacobStephens2 commentedon Nov 11, 2026
Agent Brief
Confirmed on Base branch main at d7f9f18. Fix #1983 as one bounded startup-configuration change.
Diagnosis
Process and Review commands bypass command::start (src/main.rs:471–475). Their startup paths call logs::configured at src/processes.rs:650,742, src/processes/source.rs:919 and src/processes/review.rs:22,202, but that function only configures logging (src/logs.rs:313; src/logs/recording.rs:151). Waiting-line configuration currently happens only in command::start and Experiment startup.
These paths reach real waits: Review Delivery calls CI watch (src/processes/review/delivery.rs), and a Custom process copied from processes/ticket-run.toml reaches Delivery and Self-merge. CI watch constructs WaitingLine at src/ci.rs:528. With no configured interval, WaitingLine uses 300 seconds (src/poll.rs:37), bypassing both logs.waiting_line_minutes and UserConfig::effective_waiting_line_interval (src/config.rs:145). Host-resource and Self-merge waits use the same mechanism.
Reproduction
A scratch probe reused tests/support::Scenario with real Git, fake GitHub and fake Harnesses. It held one successful check pending for 14 observations and set THIRDSHIFT_WAITING_MINUTE_MS=150.
With logs.waiting_line_minutes=1, a normal Ticket run emitted seven unchanged CI waiting lines; a Custom process copied from the Built-in ticket-run, an explicit Review run and a Review --author Pass each emitted one. With waiting_line_minutes=5 and inbox.silent_minutes=4, the normal Ticket run emitted five lines; each affected command again emitted one. All eight commands completed successfully after CI passed. The reserved ticket-run name cannot be run directly as a Custom process; copy its definition under another name.
Implementation and acceptance
Capture the effective waiting interval at the existing common startup boundary, logs::configured or a helper it calls, before waits can begin. Remove redundant configuration calls if centralized. Preserve the existing OnceLock first-initialization behavior and test-minute scaling.
Add CLI regression coverage for explicit waiting intervals and the half-silence fallback through Custom process and Review startup, including Review --author. Cover Process Pass and issue startup paths, and verify repeated waiting lines reach both stderr and the Command log. Reuse the fixtures in tests/ci.rs and tests/command_logs.rs. Keep the normal Ticket and Experiment behavior passing.
The 300-second fallback exceeding a four-minute Silent threshold is confirmed by code; an actual Inbox transition to Silent was not observed. No production access or human decision is needed to implement this fix.