Repository navigation
Show a Process by name and send its Run notification - #1420
Merged
Merged
Conversation
status, show, the Console and the Activity log name a Custom process as Process <name>. A succeeded, failed or interrupted Process sends a Run notification under the same email rules as a Ticket run. A skipped one sends none. The stored kind stays Process.
Lanes, Stages and spans say Process <name>. show and the Console details print a Step result when the name has a space or a colon. A failure after the email check and before any Step still sends the Run notification.
# Conflicts: # README.md # docs/guide.md # site/docs/index.html # site/how-it-works/index.html # site/index.html # src/processes.rs # tests/process.rs
This was referenced Oct 27, 2026
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.
Summary
A Process shows up as Process
<name>and sends a Run notification the way a Ticket run does. The stored kind staysProcess. Theshowandstopselector staysprocess-<name>-<stamp>.Evidence
CARGO_TARGET_DIR=/tmp/ts1387-red cargo nextest run --test process -E 'test(show_prints_the_result_path) | test(lanes_and_spans_name_the_process) | test(peek_shows_each_step_line_and_result_path) | test(an_origin_mismatch_still_sends_the_run_notification)'failed 4 tests.showprintedstep gather notes: 0s succeededand noresult:line. Lanes renderedProcess on acme/widgetswith the selector as the title. The details peek had no Step line. An origin mismatch exited 1 and sent 0 emails.After: the same filter, plus the colon-name show test, the pre-existing origin-mismatch rejection, the missing-key stop, and the shared email-flag parser tests: 10 passed. Compilation of that target was included (3m 39s); the tests themselves took 1.238s.
/usr/bin/time -p scripts/affected-tests issue-877on79ee65b1exited 0. Wall time 1802.60s (real), compilation included. Site:npm test --prefix site, 50 passed, about 68s. Rust:cargo nextest run, 3156 passed, 70 skipped, nextest summary 1646.716s, compile 1m 23s inside that wall time.Merge Danger
Door: two-way
The stored kind is still
Process, andprocess_nameis omitted when absent, so older records still read. Rolling the binary back leaves those records readable. Display and notification changes revert with the code.Blast Radius: Process display, and every command that shares
take_flagStatus,
show, the Activity log, the Inbox, Lanes, Stages, spans and the details peek name a Process as Process<name>. A failure after the email check and before any Step now sends the Run notification.take_flagcalls the same email helperprocessuses, so Ticket runs and Passes parseemail,email-unless-mergedandno-emailthrough that helper.Seam
Tests go through the
thirdshiftbinary andtests/supportScenario (real Git, fake gh and Harnesses). No new test seam.Unaddressed findings
None. Standards raised 3, Spec raised 4, and Security raised 0. Each behaviour finding failed as written, then the code was fixed and the test kept.
src/logs/status.rs,src/logs/status/inbox.rs,src/logs/status/inspect.rs: the Process-name fallback now lives onCommandRecord::process_labelandprocess_heading.src/args.rstake_flag: it callstake_email_flaginstead of repeating the three email arms.src/logs/status/inspect.rsstep_name:show_prints_the_result_path_when_the_step_name_has_a_spaceandshow_prints_the_result_path_when_the_step_name_has_a_space_or_a_colonfailed on the red run (the Step line was present andresult:was not) and pass after the duration split.lanes_and_spans_name_the_processfailed because Lanes saidProcess on acme/widgets, and passes withProcess notes.peek_shows_each_step_line_and_result_pathfailed because the peek had nostep gather:line, and passes. The finding's query usedurlencoding::encode; that crate is not a dependency, so the test builds the same/peek?command=query withreqwest::Url. The assertions are the finding's.src/processes.rsfailed_before_steps:an_origin_mismatch_still_sends_the_run_notificationfailed with 0 Resend requests against 1, and passes.src/notification.rs(Process subject goes to Resend as JSON over HTTPS, so a process name cannot break out of an email header),src/processes.rs(step names must be a single path component, and running a process already executes its steps' commands, so the result-file write adds no new authority), andsrc/logs/status/inspect.rsprocess_steps(a forged step line resolves at most to displaying a path viais_file, never file contents, and only to the invoking user). A temporary probe test confirmed a traversal step line yields no result file; it was removed after the run since no finding was fixed.Security review outcome
No unaddressed introduced findings.
Review coverage
site/docs/index.htmlwas not read. It is generated fromdocs/guide.mdbysite/generate-docs.mjs.cd site && npm run docsexited 0, and both reviewers confirmed the exclusion. No other changed file was left unread.Closes #1387
Built with grok grok 1.0.70 (f50904eaee6c) [stable] · default model · default effort